/*

  (c) 2006 TUFaT.com. All Rights Reserved

*/

var sComm = null;

var settingsArrived = false;

function getSettings () {
  settingsArrived = false;

  var sComm = new AJAXCommunication ();
  sComm.setResultHandler (XMLSettingsDecoder);
  sComm.getAsyncPOSTURL ("../settings.php", null);
}

function itc_keySort (a, b) {
  if (! (a.key || b.key))
    return 0;

  if (a.key < b.key)
    return -1;
  else if (a.key > b.key)
    return 1;
  else
    return 0;
}

function XMLSettingsDecoder (xmlObj, xmlStr) {
  if (xmlObj == null)
    return;
  var rootNode = xmlObj.documentElement;

  /* check to see if we have settings element */
  if (rootNode.tagName != "settings")
    return;

  /* set general settings */
  for (i = 0; i < rootNode.attributes.length; i++) {
    var attr = rootNode.attributes.item (i);
    config[attr.nodeName] = attr.nodeValue;
  }
 
  config["defaultLanguage"]=readCookie("user_lang_ajaxchat") ? readCookie("user_lang_ajaxchat") : config["defaultLanguage"];
  config["currentLanguage"] = config["defaultLanguage"];

  /* socket settings */  
  if (config["enableSocketServer"]==true){
	config["socketServer"] = new Array ();	
	var socketData = rootNode.getElementsByTagName ("socketServer");
  	for (i = 0; i < socketData.length; i++) {
    	var data = socketData.item (i);
    	for (j = 0; j < data.attributes.length; j++) {
      		var attr = data.attributes.item (j);
      		config["socketServer"][attr.nodeName] = attr.nodeValue;
    	}
  	}
  }
  /* end socket settings */
  
  /* layouts settings */
  config["layouts"] = new Array ();

  var layouts = rootNode.getElementsByTagName ("layout");

  for (i = 0; i < layouts.length; i++) {
    var layout = layouts.item (i);

    var roleId = layout.getAttribute ("role");
    config["layouts"][roleId] = new Array ();
    var cfgArray = new Array ();

    /* general layout settings */
    for (j = 0; j < layout.attributes.length; j++) {
      var attr = layout.attributes.item (j);
      cfgArray[attr.nodeName] = attr.nodeValue;
    }
    config["layouts"][roleId] = cfgArray;

    /* toolbar settings */
    var cfgArray = new Array ();

    var tB_Settings = layout.getElementsByTagName ("toolbar").item (0);
    for (j = 0; j < tB_Settings.attributes.length; j++) {
      var attr = tB_Settings.attributes.item (j);
      cfgArray[attr.nodeName] = attr.nodeValue;
    }
    config["layouts"][roleId]["toolbar"] = cfgArray;

    /* optionPanel settings */
    var cfgArray = new Array ();

    var oP_Settings = layout.getElementsByTagName ("optionPanel").item (0);
    for (j = 0; j < oP_Settings.attributes.length; j++) {
      var attr = oP_Settings.attributes.item (j);
      cfgArray[attr.nodeName] = attr.nodeValue;
    }
    config["layouts"][roleId]["optionPanel"] = cfgArray;

  } /* end for layouts */

  /* login window config */
  config["login"] = new Array ();

  var childNodes = rootNode.childNodes;

  for (i = 0; i < childNodes.length, childNodes.item (i).tagName != "login"; i++)
    ; /* find login element that is child of settings */
  var loginConfig = childNodes.item (i);
  
  for (i = 0; i < loginConfig.attributes.length; i++)  {
    var attr = loginConfig.attributes.item (i);
    config["login"][attr.nodeName] = attr.nodeValue;
  }
  
  config["login"]["username"] = new Array ();
  var userConfig = loginConfig.getElementsByTagName ("username").item (0);
  for (i = 0; i < userConfig.attributes.length; i++)  {
    var attr = userConfig.attributes.item (i);
    config["login"]["username"][attr.nodeName] = attr.nodeValue;
  }

  config["login"]["password"] = new Array ();
  var passConfig = loginConfig.getElementsByTagName ("password").item (0);
  for (i = 0; i < passConfig.attributes.length; i++)  {
    var attr = passConfig.attributes.item (i);
    config["login"]["password"][attr.nodeName] = attr.nodeValue;
  }

  config["login"]["lang"] = new Array ();
  var langConfig = loginConfig.getElementsByTagName ("lang").item (0);
  for (i = 0; i < langConfig.attributes.length; i++)  {
    var attr = langConfig.attributes.item (i);
    config["login"]["lang"][attr.nodeName] = attr.nodeValue;
  }

  config["login"]["title_label"] = new Array ();
  var titleConfig = loginConfig.getElementsByTagName ("title_label").item (0);
  for (i = 0; i < titleConfig.attributes.length; i++)  {
    var attr = titleConfig.attributes.item (i);
    config["login"]["title_label"][attr.nodeName] = attr.nodeValue;
  }

  /* login window languages */
  var languages = rootNode.getElementsByTagName ("language");

  for (i = 0; i < languages.length; i++) {
    var cLang = languages.item (i);
    var langId = cLang.getAttribute ("id");
    var langName = cLang.getAttribute ("name");

    var lang = new Array ();
    lang["name"] = langName;

    var cL_Mesgs = cLang.getElementsByTagName ("messages").item (0);

    /* messages attributes */
    for (j = 0; j < cL_Mesgs.attributes.length; j++) {
      var attr = cL_Mesgs.attributes.item (j);
      lang[attr.nodeName] = attr.nodeValue;
    }

    /* login text */
    var langLogin = cL_Mesgs.getElementsByTagName ("login").item (0);
    for (j = 0; j < langLogin.childNodes.length, langLogin.childNodes.item (j).nodeType != Node.CDATA_SECTION_NODE; j++)
      ; /* find cdata section */

    lang["login"] = langLogin.childNodes.item (j).nodeValue;

    var cL_Dialog = cLang.getElementsByTagName ("dialog").item (0);

    for (j = 0; j < cL_Dialog.attributes.length; j++) {
      var attr = cL_Dialog.attributes.item (j);

      if (attr.nodeName == "id")
        continue;

      lang[attr.nodeName] = attr.nodeValue;
    }

    loginLangs[langId] = lang;
  } /* end for languages */

  /* items to change */
  /* the XML parser doesn't guarantee the DOM object attributes in order of the source text XML
     so we have to sort the values by attribute names */
  config["itc"] = new Object ();

  
  
  var textNode = rootNode.getElementsByTagName ("text").item (0);

  var itc = textNode.getElementsByTagName ("itemToChange").item (0);

  config["itc"]["mytextcolor"] = itc.getAttribute("myTextColor");
  
  var itc_mainChat = itc.getElementsByTagName ("mainChat").item (0);
  if (itc_mainChat.getAttribute ("presence") == "1") {
    config["itc"]["mainChat"] = new Object ();

    config["itc"]["mainChat"]["fontSize"] = itc_mainChat.getAttribute ("fontSize");
    config["itc"]["mainChat"]["fontFamily"] = itc_mainChat.getAttribute ("fontFamily");
  }

  var itc_interfaceElems = itc.getElementsByTagName ("interfaceElements").item (0);
  if (itc_interfaceElems.getAttribute ("presence") == "1") {
    config["itc"]["interface"] = new Object ();

    config["itc"]["interface"]["fontSize"] = itc_interfaceElems.getAttribute ("fontSize");
    config["itc"]["interface"]["fontFamily"] = itc_interfaceElems.getAttribute ("fontFamily");
  }

  var itc_title = itc.getElementsByTagName ("title").item (0);
  if (itc_title.getAttribute ("presence") == "1") {
    config["itc"]["title"] = new Object ();

    config["itc"]["title"]["fontSize"] = itc_title.getAttribute ("fontSize");
    config["itc"]["title"]["fontFamily"] = itc_title.getAttribute ("fontFamily");
  }

  var fontSize = textNode.getElementsByTagName ("fontSize").item (0);

  var fSizes = new Array ();
  for (var i = 0; i < fontSize.attributes.length; i++) {
    var attr = fontSize.attributes.item (i);

    fSizes.push ({"key": attr.nodeName, "val": attr.nodeValue});
  }
  fSizes.sort (itc_keySort);

  var itc_sizes = new Array ();
  for (var i = 0; i < fSizes.length; i++) {
    itc_sizes.push (fSizes[i]["val"]);
  }
  config["itc"]["sizes"] = itc_sizes;

  var fFamily = new Array ();
  var fontFamily = textNode.getElementsByTagName ("fontFamily").item (0);
  for (i = 0; i < fontFamily.attributes.length; i++) {
    var attr = fontFamily.attributes.item (i);

    fFamily.push ({"key": attr.nodeName, "val": attr.nodeValue});
  }
  fFamily.sort (itc_keySort);

  var itc_families = new Array ();
  for (var i = 0; i < fFamily.length; i++) {
    itc_families.push (fFamily[i]["val"]);
  }
  config["itc"]["families"] = itc_families;


  config["sound"] = new Object ();
  config["sound"]["ev"] = new Object ();

  var snd_options = rootNode.getElementsByTagName ("sound_options").item (0);

  for (var i = 0; i < snd_options.attributes.length; i++) {
    var attr = snd_options.attributes.item (i);

    config["sound"]["ev"][attr.nodeName] = new Object ();
    config["sound"]["ev"][attr.nodeName]["file"] = attr.nodeValue;
    config["sound"]["ev"][attr.nodeName]["muted"] = false;
  }

  var snd_settings = rootNode.getElementsByTagName ("sound").item (0);

  config["sound"]["pan"] = snd_settings.getAttribute ("pan");
  config["sound"]["volume"] = snd_settings.getAttribute ("volume");
  config["sound"]["muteAll"] = snd_settings.getAttribute ("muteAll");

  for (key in config["sound"]["ev"]) {
    if (key == "null")
      continue;

    var attr = snd_settings.getAttribute ("mute" + key);
    if (attr == null)
      continue;

    if (attr == "1")
      config["sound"]["ev"][key]["muted"] = true;
  }

  if (config["debug"]){
  	dWin = window.open ("", null, "width = 640, height = 480, scrollbars = yes");
  	DEBUG = config["debug"];
  }
  
  config["special_language"] = new Array ();
  var elem_sl = rootNode.getElementsByTagName ("special_language").item (0);
  for (j = 0; j < elem_sl.attributes.length; j++) {
      var attr = elem_sl.attributes.item (j);
      config["special_language"][j] = attr.nodeValue;            
  } 
  
  config["avatars"] = new Array ();
  var elem_avatars = rootNode.getElementsByTagName ("avatars").item (0);
  
  var elem_mod_only = elem_avatars.getElementsByTagName ("mod_only").item (0);
  config["avatars"]["mod_only"] = stringSplit(",",elem_mod_only.attributes.item(0).nodeValue);
  for (var key1 in config["avatars"]["mod_only"])
  	for (var key2 in config["smiles"])
  		if(config["smiles"][key2] == config["avatars"]["mod_only"][key1])
  			config["avatars"]["mod_only"][key1] = key2;
  
  var array_elems_user = new Array("user", "admin", "moderator");
  var array_elems_gender = new Array("male", "female");
  var array_elems_chat = new Array("mainchat", "room");
  for (i = 0; i < array_elems_user.length; i++){
	  config["avatars"][array_elems_user[i]] = new Array ();
	  var elem_user = elem_avatars.getElementsByTagName (array_elems_user[i]).item (0);
	  for (j = 0; j < array_elems_gender.length; j++){
		  config["avatars"][array_elems_user[i]][array_elems_gender[j]] = new Array ();
		  var elem_gender = elem_user.getElementsByTagName (array_elems_gender[j]).item (0);
		  for (k = 0; k < array_elems_chat.length; k++){
			  config["avatars"][array_elems_user[i]][array_elems_gender[j]][array_elems_chat[k]] = new Array ();
			  var elem_chat = elem_gender.getElementsByTagName (array_elems_chat[k]).item (0);
			  for (y = 0; y < elem_chat.attributes.length; y++) {				  
			      var attr = elem_chat.attributes.item (y);
			      config["avatars"][array_elems_user[i]][array_elems_gender[j]][array_elems_chat[k]][attr.nodeName] = attr.nodeValue;			      
			  }			  
		  }		  
	  }
  }
  
  config["logout"] = new Array();
  var elem_logout = rootNode.getElementsByTagName ("logout").item (0);
  for (j = 0; j < elem_logout.attributes.length; j++) {
      var attr = elem_logout.attributes.item (j);
      config["logout"][attr.nodeName] = attr.nodeValue;      
  } 
  
  settingsArrived = true;    
} /* end function getSettings */

