var Languages = {
   current: '',
   previous: '',
   available: languageOptions,
   loaded: [],
   dictionary: {},

   load: function(language) {
      for(var i=0; i<this.loaded.length; i++) {
         if(this.loaded[i][0] == language)
            return this.set(language);
      }
         
      var s = document.createElement('script');
      s.src = STATIC_ZICZAC+'/languages/' + language + '/lang.js?' + (new Date()).getTime();
      s.type = 'text/javascript';

      document.getElementsByTagName('head').item(0).appendChild(s);
   },
   
   onLoad: function(language, dict) {
      for(var i=0; i<this.available.length; i++) {
         if(this.available[i][0] == language) {
            this.loaded[this.loaded.length] = this.available[i];
            break;
         }
      }
      this.dictionary[language] = dict;
      
      this.set(language);
   },
   
   set: function(language) {
      this.previous = this.current;
      this.current = language;

      var langObjs = $$('[class*="lang-"]');

      langObjs.each(function(el) {
         var langItem = el.className.split(' ');
         var i;
         for(i=0; i<langItem.length; i++)
            if(langItem[i].indexOf('lang-') > -1) break;
         
         langItem = langItem[i].substring(5);

         var langText = Languages.get(langItem);
         var oldLangText = Languages.get(langItem, Languages.previous);

         var preprocessEl = $(document.createElement('div'));
         preprocessEl.setStyle({display: 'none'});
         preprocessEl.innerHTML = oldLangText + '';
         document.body.appendChild(preprocessEl);
         
         oldLangText = preprocessEl.innerHTML;

         if(el.className.indexOf('langinsert-post') > -1 && el.innerHTML.indexOf(oldLangText) == -1)
            el.innerHTML += Languages.get(langItem);
         else if(el.className.indexOf('langinsert-clear') > -1)
            el.innerHTML = Languages.get(langItem);
         else if(el.className.indexOf('langinsert-pre') > -1 && el.innerHTML.indexOf(oldLangText) == -1)
            el.innerHTML = Languages.get(langItem) + el.innerHTML;
         else {         
            if(el.innerHTML.length == 0) {
               el.innerHTML = langText;
               return;
            }

            if(langText.indexOf('%1') > -1) {
               langText = langText.split(/%1/);
               oldLangText = preprocessEl.innerHTML.split(/%1/);
               
               el.innerHTML = el.innerHTML.replace(oldLangText[0], langText[0]).replace(oldLangText[1], langText[1]);
            } else
               el.innerHTML = el.innerHTML.replace(oldLangText, langText);
         }
         
         document.body.removeChild(preprocessEl);
      });
   },
   
   get: function(text, language) {
      if(language != null && language.length == 0)
         return -1;
         
      return this.dictionary[language != null ? language : this.current][text];
   }
};
