function Translator(params) {
   this.resourceId = typeof(params.resourceId) == "undefined" ? "resources" : params.resourceId;
   this.localizators = typeof(params.localizators) == "undefined" ? [] : params.localizators;
   this.defaultLanguage = typeof(params.defaultLanguage) == "undefined" ? Translator.defaultLanguage : params.defaultLanguage;
   this.localize = function() {
      this.translationLoaded = false;
      var request = typeof(XMLHttpRequest) != "undefined" ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
      var url = Translator.prefixPathForIHM + "res/" + this.resourceId + Translator.suffix + ".xml";
      request.open("GET", url, false);
      request.send(null);
      if (request.status != 200) {
        	alert("Problem loading translations for " + Translator.currentLanguage);
      }
      else {
         this.res = {};
         var content = String(request.responseXML.documentElement.firstChild.nodeValue);
         var lines = content.split("\n");
         for (var i = 0; i < lines.length; i++) {
            if (lines[i].length > 0) {
               infos = lines[i].split("\t");
               if (typeof(infos[1]) == "undefined")
                  alert("Incorrect translation line in " + url + ": " + lines[i]);
               this.res[infos[0]] = infos[1].replace(/\\n/g, "\n");
            }
         }
         for (var i = 0; i < this.localizators.length; i++)
            this.localizators[i](this.res);
         this.translationLoaded = true;
      }
   }
   this.localize();
}

Translator.acceptedLanguages = ["de", "en", "en-gb", "es", "fr", "fr-ca", "it", "ploc", "plocger", "pt-br", "jp", "zh-cn", "zh-tw"];
Translator.prefixPathForIHM = "./";
Translator.defaultLanguage = "en-gb";
Translator.currentLanguage = null;
Translator.suffix = null;

Translator.getMessage = function(msg, params) {
   for (var i = 0; i < params.length; i++) {
      msg = msg.replace(new RegExp("%" + i + "%", "g"), params[i]);
   }
   return msg;
}

Translator.detectLanguage = function() {
   // detect language from cookies or request parameters
   var languageCode = getCookie("ihmLanguage");
   if (languageCode == null) {
      var lang = getParams()["lang"];
      if (typeof(lang) != "undefined" && lang.length > 1) {
         languageCode = lang;
      }
   }
   
   // test if language acceptable and available
   if (languageCode != null && languageCode != "") {
      var refused = true;
      for (var i = 0; i < Translator.acceptedLanguages.length; i++) {
         if (languageCode == Translator.acceptedLanguages[i]) {
            refused = false; break;
         }
      }
      if (refused) {
         alert("Language " + languageCode + " not supported");
         languageCode = defaultLanguage;
      }
   }
   else {
      languageCode = Translator.defaultLanguage;
   }
   if (languageCode != Translator.currentLanguage) {
      Translator.currentLanguage = languageCode;
      Translator.suffix = (languageCode == "") ? "" : "_" + languageCode;
   }
}
Translator.detectLanguage();
