function addCookies (strElementName, strLanguage, aConfig) {
  var strValue = document.getElementById (strElementName).value;

  if (strElementName == "countryDD") {
    if (strValue != "") {
      setCookie ("site", strValue, 200);
      deleteCookie ("lang");
      deleteCookie ("type");
      document.getElementById ("languageDD").disabled = false;
      document.getElementById ("typeDD").disabled = false;

      clearSelect ("languageDD");
      clearSelect ("typeDD");
      
      loadLanguages (strValue, strLanguage);
    }
    else {
      deleteCookie ("site");
      deleteCookie ("lang");
      deleteCookie ("type");
      
      clearSelect ("languageDD");
      clearSelect ("typeDD");

      document.getElementById ("languageDD").disabled = true;
      document.getElementById ("typeDD").disabled = true;

      loadTypes (strLanguage);
    }
  }
  else if (strElementName == "languageDD") {
    if (strValue != "") { setCookie ("lang", strValue, 200 ); } 
    else { deleteCookie ("lang"); }
    loadTypes (strLanguage);
  } 
  else if (strElementName == "typeDD") {
    if (strValue != "") { setCookie ("type", strValue, 200); } 
    else { deleteCookie ("type"); }
  }
  
  redirectURL (aConfig);
}

function hasValue (array, defaultArray, value) {
  if (array.length === 0) { array = defaultArray; }
  for (var x in array){
    if (value === array[x]) { return true; }
  }
}

function testHasValue(value){
  var myArray = ["test1", "test2"];
  return hasValue(myArray, value);
}

function verifySettings(country, language, usertype){
  var sitesObject = config.sites;

/*
  alert ("verifySetting : country[" + country + "] language[" + language + "] usertype [" + usertype + "]\n" +
         "has language ? [" + (hasValue (sitesObject[country].lang, sitesObject["XX"].lang, language) || 
             sitesObject[country].defaultlang[0] === language) + "]\n" +
         "has type ? [" + hasValue(sitesObject[country].type, sitesObject["XX"].type, usertype) + "]\n");
*/
  
  return ((hasValue (sitesObject[country].lang, sitesObject["XX"].lang, language) || 
           sitesObject[country].defaultlang[0] === language) && 
          hasValue (sitesObject[country].type, sitesObject["XX"].type, usertype));
}

function redirectURL (aConfig) {
  var strSiteCookie = readCookie ("site");
  var strLangCookie = readCookie ("lang");
  var strTypeCookie = readCookie ("type");

//  alert ("redirectURL: [" + strSiteCookie + " ; " + strLangCookie + " ; " + strTypeCookie + "]");
  
  if (strSiteCookie != "" && strLangCookie != "" && strTypeCookie != "" && 
      verifySettings (strSiteCookie, strLangCookie, strTypeCookie)) {

//    alert ("redirectURL: passed !");
    
    var strDisclaimerCookie = readCookie ("disclaimer");
    var forwardURL = "";
   
    var bSkipDisclaimer = (aConfig.sites[strSiteCookie].showDisclaimer == 'n');
    
    if (!bSkipDisclaimer && (strDisclaimerCookie == "" || strDisclaimerCookie == strSiteCookie)) {
      forwardURL = strSiteCookie + "/footer/disclaimer.page?site=" + strSiteCookie + 
                   "&lang=" + strLangCookie + "&type=" + strTypeCookie + "&targetPage=" + 
                   strSiteCookie + "/index.page&displayAcceptButton=true";
    }
    else {
      forwardURL = strSiteCookie + "/?site=" + strSiteCookie + 
                   "&lang=" + strLangCookie + "&type=" + strTypeCookie;
    }

//    alert ("redirectURL: redirecting ... [" + forwardURL + "]");
    window.location = forwardURL;
  }
}

function deleteCookie(name){
  setCookie(name, "", -1);
}

function readCookie(name){
  var search = name + "=";
  if(document.cookie.length > 0){
    var pos = document.cookie.indexOf(search);
    if(pos != -1){
      pos += search.length;
      var end = document.cookie.indexOf(";", pos);
      if(end == -1){
        end = document.cookie.length;
      }
      return unescape(document.cookie.substring(pos, end));
    }
  }
  return "";
}

/*function setCookie(c_name,value,expiredays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}*/

function setCookie(name, content, days){
  days = days || 365;
  var now = new Date();
  var exp = new Date(now.getTime() + days*24*60*60*1000);
  document.cookie = escape(name) + "=" + escape(content) + "; expires=" + exp.toGMTString() + "; path=/";
}

function clearSelect(e){
  var objSelect=document.getElementById(e);
  while(objSelect.options.length > 1){
    objSelect.remove(1);
  }
  return objSelect;
}

function createOption(e,newValue,newText, isSelected){
  var objSelect=document.getElementById(e);
  var objOption = document.createElement("option");
  objOption.text = newText;
  objOption.value = newValue;
  objOption.selected = isSelected;

  if(document.all && !window.opera) {
    objSelect.add(objOption);
  } else {
    objSelect.add(objOption, null);
  }
}

function loadLanding (strDisplayLanguage) {
  var cookieSite = readCookie ('site');

  for (var country in config.sites){
    if (country !== "XX" && config.countries[country]) {
      createOption ("countryDD", country, config.countries[country].lang[strDisplayLanguage], (cookieSite == country));
    }
  }
  
  if (cookieSite != "") {
    clearSelect ("languageDD");
    loadLanguages (cookieSite, strDisplayLanguage);
    document.getElementById ("languageDD").disabled = false;
    document.getElementById ("typeDD").disabled = false;
  }
}

function loadLanguages (country, strDisplayLanguage) {

  var cookieLang = readCookie('lang');

//  alert ("loadLanguages: " + strDisplayLanguage);
  
  var strDefaultLanguage = config.sites[country].defaultlang[0];
  createOption ("languageDD", strDefaultLanguage, 
                config.languages[strDefaultLanguage].lang[strDisplayLanguage], 
                (cookieLang == strDefaultLanguage));

  if (config.sites[country].lang && config.sites[country].lang.length > 0) {
    for(var counter = 0;  counter < config.sites[country].lang.length;  counter++){
      var strLanguage = config.sites[country].lang[counter];
      createOption("languageDD", strLanguage, config.languages[strLanguage].lang[strDisplayLanguage], (cookieLang == strLanguage));
    }
  }

  if (config.sites[country].lang.length == 0) { setCookie ('lang', strDefaultLanguage, 200); }

  loadTypes (strDisplayLanguage, country);
}

function loadTypes (language, country) {

  if (country === undefined){ country = readCookie ('site'); }
  if (country !== undefined && country !== null && country !== "" && 
      config.sites[country].type.length == 1) { 
    setCookie ('type', config.sites[country].type[0], 200); 
  }
  
  var selectedTypeIndex = document.getElementById ("typeDD").selectedIndex;

  clearSelect ("typeDD");
  var cookieType = readCookie ('type');
  var usertypeObject = config.usertypes

  if (country === undefined || country === null || country === "") {
    for (var usertype in usertypeObject){
      createOption ("typeDD", usertype, usertypeObject[usertype].lang[language], (cookieType == usertype));
    }
  } 
  else {
    if (config.sites[country].type.length > 0) {
      for (var counter = 0;  counter < config.sites[country].type.length;  counter++) {
        var usertype = config.sites[country].type[counter];
        createOption ("typeDD", usertype, usertypeObject[usertype].lang[language], (cookieType == usertype));
      }
    }
    else {
      for (var counter = 0;  counter < config.sites["XX"].type.length;  counter++) {
        var usertype = config.sites["XX"].type[counter];
        createOption ("typeDD", usertype, usertypeObject[usertype].lang[language], (cookieType == usertype));
      }
    }
  }

  document.getElementById ("typeDD").disabled = false;
}

function init (strDisplayLanguage) {
  redirectURL();
  
  if (strDisplayLanguage === undefined || strDisplayLanguage === null) { strDisplayLanguage = "mul"; }
  
  loadLanding (strDisplayLanguage);
  //loadTypes (strDisplayLanguage);
}