//  ---------------------------------------------------------------------------
//  Last Modified : 2007-07-28
//  Author: Dr. Horst Walther
//  Modified by: Dr. Horst Walther
//  language switching for 2 languages
//  ---------------------------------------------------------------------------
var myThread = null;
var textsPath = ''; // 'Texts/';
var globalPrefix = "";
var maxLoadTries = 100;
var loadTries = 0;

//  ---------------------------------------------------------------------------


function lang() {
  return document.body.lang == 'en' ? 0 : 1;
}

//  ---------------------------------------------------------------------------


function getTextContent(selfURL, id, file) {
  //  traceln ('getTextContent ('+selfURL+', '+file+')');
}

//  ----------------------------------------------------------------------------
function changeLanguageHTML(l, prefix, scope) {
  //  traceln ('changeLanguageHTML('+l+', '+prefix+', '+scope.URL+')');
  document.body.lang = l;
  var languageTextFile = deLocalizeLink(getFilename(scope)).replace(htm, '');
  var languageTag = getLanguageTag(prefix, languageTextFile, scope);
  setLanguageButtonClass();
  localizeLinks();
}

//  ---------------------------------------------------------------------------


function getLanguageTag(prefix, languageTextFile, scope) {
  /*  construction of the languageText container tag  */
  //  traceln ('getLanguageTag ('+prefix+', '+languageTextFile+', '+scope.URL+')');
  var id = languageTextFile + prefix + '_' + document.body.lang;
  var languageTag = document.getElementById(id);
  var languageTextURL = getPath(scope) + id + '.xhtml';
  if (!languageTag) {
    languageTag = createLanguageTag(id);
    var func = function () {
      displayLanguageText(languageTag, prefix, scope);
    };
    //    traceln ('I need to load: '+languageTextURL+' to '+id);
    loadToID(languageTextURL, id, func);
  } else {
    //    traceln ('no need to load: '+languageTextURL+' to '+id+' ) - already filled)');
    displayLanguageText(languageTag, prefix, scope);
  }
  return languageTag;
}

//  -------------------------------------------------------------------------


function createLanguageTag(id) {
  if (document.getElementById(id)) return document.getElementById(id);
  //  traceln ('createLanguageTag('+id+')');
  var languageTag = document.createElement("span");
  languageTag.setAttribute("id", id);
  languageTag.innerHTML = "empty";
  languageTag.style.backgroundColor = "white";
  languageTag.style.border = "1px solid red";
  languageTag.style.visibility = "hidden";
  document.body.appendChild(languageTag);
  return languageTag;
}

//  -------------------------------------------------------------------------


function displayLanguageText(languageTag, prefix, scope) {
  //  traceln ('displayLanguageText (languageTag='+languageTag.id+', prefix='+prefix+', scope='+scope.URL+')');
  var wordy = false;
  var spans = languageTag.getElementsByTagName("span");
  var idText = prefix + "000";
  var span = null;
  var langPrefix = 'lang';
  if (languageTag.innerHTML.substr(0, 5) == "empty") {
    traceln('Language Tag is ' + languageTag.innerHTML + ': better return');
    return
  };
  if (!scope) scope = window.document;
  //  traceln ('scope:'+scope.URL);
  if (spans[0]) if (spans[0].getAttribute('id').search(idText) >= 0) scope.title = spans[0].innerHTML;
  if (spans.length <= 1) return true;
  for (var i = 1; i < spans.length; i++) {
    idText = spans[i].getAttribute('id').substr(langPrefix.length + 2);
    if (wordy) traceln('idText=' + idText);
    //    idText = prefix+(i<100?(i<10?"00":"0"):"")+i;
    //    trace (i+': searching: '+idText+' in '+spans[i].getAttribute('id')+': ');
    //    if (spans[i].getAttribute('id').search(idText) >= 0) {
    //      traceln (idText+', scope:'+scope.URL);
    span = scope.getElementById(idText);
    if (span) {
      if (spans[i].innerHTML) {
        if (wordy) traceln(span.innerHTML + ' --> ' + spans[i].innerHTML);
        span.innerHTML = spans[i].innerHTML;
      } else if (spans[i].xml) span.innerHTML = spans[i].xml;
      else span.value = spans[i].value;
    } else if (wordy) traceln('--- warning: id "' + idText + '" does not exist (no text requested)');
  }
  return true;
}

//  ----------------------------------------------------------------------------
function toggleLanguage(lang) {
  return (lang ? lang : document.body.lang) == 'en' ? 'de' : 'en';
}

//  ----------------------------------------------------------------------------
function setLangSwitchClassName(lang) {
  return (lang ? lang : document.body.lang) == 'en' ? 'english' : 'german';
}

//  ----------------------------------------------------------------------------
function toggleLangSwitchClassName(lang) {
  return (lang ? lang : document.body.lang) == 'en' ? 'german' : 'english';
}

//  ----------------------------------------------------------------------------
function toggleLanguageHTML(prefix) {
  document.body.lang = toggleLanguage();
  changeLanguageHTML(document.body.lang, prefix)
}

//  ----------------------------------------------------------------------------
function hasParameters() {
  //  traceln ("hasParameters (): "+window.location.toString().indexOf('?'));
  return (window.location.toString().indexOf('?') >= 0)
}

//  ----------------------------------------------------------------------------
function Parameter(n, c) {
  this.name = n;
  this.content = c;
}

//  ----------------------------------------------------------------------------
function getParameters() {
  //  traceln ("hasParameters (): "+window.location.toString().indexOf('?'));
  var paramString = window.location.toString().split('?')[1];
  if (!paramString) return null;
  //  traceln ('paramString='+paramString);
  var paramArray = paramString.split('&');
  //  traceln ('paramArray='+paramArray);
  for (var i = 0; i < paramArray.length; i++) {
    //    traceln (paramArray[i].split('=')[0]+', '+paramArray[i].split('=')[1]);
    paramArray[i] = new Parameter(paramArray[i].split('=')[0], paramArray[i].split('=')[1])
  }
  //  traceln ('getParameters () will return: '+paramArray[0].name+', '+paramArray[0].content);
  return (paramArray)
}

//  ----------------------------------------------------------------------------
function getParameter(i) {
  var p = getParameters();
  if (!p) return null;
  if (!p[i]) return null;
  //  traceln ('getParameter ('+i+') will return: '+p[i]+', '+p[i]);
  return p[i];
}

//  ----------------------------------------------------------------------------
function getParameterContent(n) {
  //  traceln ('getParameterContent ('+n+')');
  var paramArray = getParameters();
  if (!paramArray) return null;
  if (paramArray.length == 0) return null;
  for (var i = 0; i < paramArray.length; i++) {
    //    traceln (paramArray[i].name+' == '+n+'?');
    if (paramArray[i].name == n) {
      /*traceln ('will return: '+paramArray[i].content);*/
      return paramArray[i].content;
    }
  }
  return null;
}

//  ----------------------------------------------------------------------------
function switchPageOnLangParam() {
  //  traceln ('switchPageOnLangParam ()');
  var l = getParameterContent('lang');
  //  traceln ("lang param="+l+", lang="+document.body.lang);
  if (!l) {
    localizeLinks();
    return;
  }
  if (l == document.body.lang) {
    localizeLinks();
    return;
  }
  if (l == 'de')
  //  traceln ("language="+language+' --> load: '+localizeLinkBy (deLocalizeLink (document.URL), language)+"?lang="+language);
  window.location = localizeLinkBy(deLocalizeLink(document.URL), language) + "?lang=" + language;
}

//  ----------------------------------------------------------------------------
function switchTextFileOnLangParam(prefix) {
  //  traceln ('switchTextFileOnLangParam ('+prefix+')');
  var l = getParameterContent('lang');
  //  traceln ("l="+l+", lang="+document.body.lang);
  if (!l) {
    localizeLinks();
    return;
  }
  if (l == document.body.lang) {
    localizeLinks();
    return;
  }
  //  document.body.lang = l;
  changeLanguageHTML(l, prefix);
}

//  ----------------------------------------------------------------------------
function switchTextArrayOnLangParam(prefix, enArray, deArray) {
  //  traceln ('switchTextFileOnLangParam ('+prefix+')');
  var l = getParameterContent('lang');
  //  traceln ("l="+l+", lang="+document.body.lang);
  if (!l) {
    localizeLinks();
    return;
  }
  if (l == document.body.lang) {
    localizeLinks();
    return;
  }
  document.body.lang = l;
  localizeAll(prefix, enArray, deArray);
  setLanguageButtonClass();
}

//  ----------------------------------------------------------------------------
function localizeLinks() {
  for (var i = 0; i < document.links.length; i++) {
    if (document.links[i].title == 'noParam')
    /*traceln ('### oh, no no for: '+document.links[i].href)*/
    ;
    else document.links[i].href = document.links[i].href.split('?')[0] + '?' + 'lang=' + document.body.lang;
  }
}

//  ----------------------------------------------------------------------------
function addParameterToLink(link, name, value) {
  link.href += '&' + name + '=' + value;
}

//  ----------------------------------------------------------------------------
function showLinks() {
  for (var i = 0; i < document.links.length; i++) {
    document.write('<p>' + document.links[i].pathname + '</p>');
  }
}

//  ----------------------------------------------------------------------------
function getBrowserLanguage() {
  //  traceln ("getBrowserLanguage(): navigator.appName="+navigator.appName);
  var language = navigator.appName == "Microsoft Internet Explorer" ? navigator.browserLanguage : language = navigator.language;
  return language ? language.substring(0, 2) : "err";
}

//  ----------------------------------------------------------------------------
function switchLanguage(language) {
  //  traceln ("switchLanguage ("+language+")");
  if (language == document.body.lang) return;
  if (hasParameters()) {
    //    traceln (window.location.toString()+" has Parameters: parameter="+getParameter(1));
    switchPageOnLangParam();
    return
  }
  localizeLinks();
  //  traceln ("language="+language+' --> load: '+localizeLinkBy (deLocalizeLink (document.URL), language)+"?lang="+language);
  window.location = localizeLinkBy(deLocalizeLink(document.URL), language) + "?lang=" + language;
}

//  ----------------------------------------------------------------------------
function switchIndexByLanguage(language) {
  //  traceln ("switchIndexByLanguage ("+language+' --> load: '+localizeLinkBy (document.URL.replace ('.htm','_.htm'), language)+"?lang="+language);
  window.location = localizeLinkBy('/index_.htm', language) + "?lang=" + language;
}

//  ----------------------------------------------------------------------------
function setHTML(texts, prefix, i) {
  if (texts.length <= i) return;
  insertHTML(texts[i], prefix + (i < 100 ? (i < 10 ? "00" : "0") : "") + i);
}

//  ----------------------------------------------------------------------------
function setAllHTML(texts, prefix) {
  if (texts.length == 0) return;
  for (i = 0; i < texts.length; i++) {
    insertHTML(texts[i], prefix + (i < 100 ? (i < 10 ? "00" : "0") : "") + i);
  }
}

//  ----------------------------------------------------------------------------
function localizeHTML(iD, enHTML, deHTML) {
  insertHTML(document.body.lang == "en" ? enHTML : deHTML, iD);
}

//  ----------------------------------------------------------------------------
function localizeValue(iD, enValue, deValue) {
  insertValue(document.body.lang == "en" ? enValue : deValue, iD);
}

//  ----------------------------------------------------------------------------
function localizeAllHTML(prefix, enHTML, deHTML) {
  if ((enHTML.length == 0) || (deHTML.length == 0)) return;
  for (i = 0; i < enHTML.length; i++) {
    insertHTML(document.body.lang == "en" ? enHTML[i] : deHTML[i], prefix + (i < 100 ? (i < 10 ? "00" : "0") : "") + i);
  }
}

//  ----------------------------------------------------------------------------
function localizeAllValues(prefix, enValue, deValue) {
  if ((enValue.length == 0) || (deValue.length == 0)) return;
  for (i = 0; i < enValue.length; i++) {
    insertValue(document.body.lang == "en" ? enValue[i] : deValue[i], prefix + (i < 100 ? (i < 10 ? "00" : "0") : "") + i);
  }
}

//  ----------------------------------------------------------------------------
function localizeAll(prefix, enArray, deArray) {
  var wordy = false;
  //  traceln ('localizeAll ('+prefix+', '+enArray+', '+deArray+')'); 
  if ((enArray.length == 0) || (deArray.length == 0)) return;
  var id = "000";
  if (enArray[0]) document.title = document.body.lang == "en" ? enArray[0] : deArray[0];
  for (i = 1; i < enArray.length; i++) {
    id = prefix + (i < 100 ? (i < 10 ? "00" : "0") : "") + i;
    //    traceln (i+': '+(document.getElementById (id).innerHTML?'HTML':'Value')+' = '+(document.body.lang == "en" ? enArray[i] : deArray[i])+' --> '+id);
    if (document.getElementById(id)) if (document.getElementById(id).innerHTML) insertHTML(document.body.lang == "en" ? enArray[i] : deArray[i], id);
    else insertValue(document.body.lang == "en" ? enArray[i] : deArray[i], id);
    else if (wordy) traceln('###  error: "' + id + '" not found in ' + document.URL);
  }
}

//  ----------------------------------------------------------------------------
function showClass(id) {
  traceln(document.getElementById(id).className);
}

//  ----------------------------------------------------------------------------
function setClass(id, newName) {
  document.getElementById(id).className = newName;
  //  traceln (document.getElementById(id).className);
}

//  ----------------------------------------------------------------------------
function setLanguageClass(id) {
  document.getElementById(id).className = (document.body.lang == 'en' ? 'german' : 'english');
}

//  ----------------------------------------------------------------------------
function setLanguageButtonClass() {
  if (!document.getElementById('languageButton')) return;
  document.getElementById('languageButton').className = (document.body.lang == 'en' ? 'german' : 'english');
}

//  ----------------------------------------------------------------------------
function toggleLanguageClass() {
  var id = 'languageButton';
  if (!document.getElementById(id)) id = 'langSwitch';
  if (!document.getElementById(id)) return;
  document.body.lang = toggleLanguage();
  setLanguageClass(id);
  localizeLinks();
  //  traceln (document.getElementById(id).className);
}
//  ----------------------------------------------------------------------------