function hbSettings (filename)
{
  this.reader = new hbXmlReader (filename, true, null, null);
  this.reader.read ();

  var mySettings = this;

  this.dictionary = {
    initialized: false,
    setActiveLanguage: function (lang)
    {
      this.activeLanguage = lang;
    },
    getLangAttr: function (attr, optLanguage)
    {
      this.initialize ();

      if (0 == this.languages.length)
      {
        return null;
      }

      if (! optLanguage)
      {
        optLanguage = this.activeLanguage;
      }

      return this.languages [optLanguage] [attr];
    },
    lookUp: function (key, optLanguage)
    {
      this.initialize ();

      if (0 == this.languages.length)
      {
        return null;
      }

      if (! (optLanguage instanceof String))
      {
        optLanguage = this.activeLanguage;
      }

      return this.languages [optLanguage].dic [key];
    },
    initialize: function ()
    {
      if (! this.initialized)
      {
        this.languages = new Object ();
        var langs = mySettings.get ('language');

        for (var l = 0; l < langs.length; ++l)
        {
          var lang = langs [l];

          if ((0 == l) && (! ('activeLanguage' in this)))
          {
            this.activeLanguage = lang ['name'];
          }

          this.languages [lang ['name']] = new Object ();
          this.languages [lang ['name']].dic = new Object ();

          for (var a in lang)
          {
            var v = lang [a];

            if (! (v instanceof Array) && ! (v instanceof Function))
            {
              this.languages [lang ['name']] [a] = v;
            }
          }

          var entries = lang ['entry'];

          for (var e = 0; e < entries.length; ++e)
          {
            var entry = entries [e];
            this.languages [lang ['name']].dic [entry ['key']] = entry ['value'];
          }
        }

        this.initialized = true;
      }
    }
  };
}

hbSettings.prototype.isInitialized = function ()
{
  return this.reader.isInitialized ();
}

hbSettings.prototype.get = function (attrName)
{
  if (false == this.reader.isInitialized ())
  {
    return undefined;
  }

  var attributes = this.reader.getContent () ["settings"] [0];

  if (null == attributes)
  {
    return null;
  }

  if (false == attrName in attributes)
  {
    return null;
  }

  return attributes [attrName];
}
