// **************************************************************************************************************************
// AJAX functions
// **************************************************************************************************************************

var xmlhttp = null;

var ajaxResultsXML = null;
var ajaxResultsText = "";
var ajaxRequestMethod = "GET";

var ajaxResultReady = false;
var ajaxLoadingData = false;

function AjaxTransfer(url)
{
    ajaxLoadingData = true;
    ajaxResultReady = false;
    ajaxResultsXML = null;
    ajaxResultsText = "";

    // setting right object according to web browser
    if (window.XMLHttpRequest)
    {
        xmlhttp = new XMLHttpRequest(); // code for Mozilla, etc.
    } 
    else 
    {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (error) {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }

    if (xmlhttp != null) 
    {
        // setting the action after receiving data
        xmlhttp.onreadystatechange = function()
        { 
            if (xmlhttp.readyState == 4)  // check if receiving action is completed
            {
                if(xmlhttp.status == 200) // check if there is not any error
                {
                    // ******************************************************************************
                    // work with received data ------------------------------------------------------
                    ajaxResultsXML = xmlhttp.responseXML;
                    ajaxResultsText = xmlhttp.responseText;
                    ajaxResultReady = true;
                    ajaxLoadingData = false;
                    // end of work with received data -----------------------------------------------
                    // ******************************************************************************
                }
                else
                {
                    //alert("Problem retrieving XML data.");
                }
            }
        };
		xmlhttp.open(ajaxRequestMethod, url + (url.indexOf("?") > -1?"&":"?") +"dsasfkiugbgadwqtruzozs=" + Math.random().toString(), true);
        xmlhttp.send(null);
    }
    else alert("Your browser does not support XMLHTTP.");
}

// **************************************************************************************************************************
// LOAD XML DATA
// **************************************************************************************************************************


var fromLanguage;
var toLanguage;

function getLanguageFrom(from)
{
	fromLanguage = from;
}

function getLanguageTo(to)
{
	toLanguage = to;
}

function LoadData()
{
    if (!ajaxLoadingData)
    {
        AjaxTransfer("http://" + GetUrlBase() + "/files/data/translator.xml");
        LoadDataProcess();
    }
    else
    {
        window.setTimeout("LoadData();", 10);
    }
}

function LoadDataProcess()
{
    if (!ajaxResultReady)
    {
        window.setTimeout("LoadDataProcess();", 10);
    }
    else
    {	
		//getting data
		var translator = ajaxResultsXML.getElementsByTagName("translator");
		var value = new Array();
		var text = new Array();
		
		delOpts(fromLanguage);
		delOpts(toLanguage);
		
		for (var i = 0; i < translator.length; i++)
		{
			var defaultLanguageFrom = translator[i].attributes.getNamedItem("default_from").nodeValue;
			var defaultLanguageTo = translator[i].attributes.getNamedItem("default_to").nodeValue;

			var items = ajaxResultsXML.getElementsByTagName("item");
			
			for (var y = 0; y < items.length; y++)
			{
				value.push(items[y].attributes.getNamedItem("value").nodeValue);
				text.push(items[y].attributes.getNamedItem("text").nodeValue);
			}
		}
		
		sortOpts(fromLanguage,text,value,defaultLanguageFrom);
		sortOpts(toLanguage,text,value,defaultLanguageTo);

        ajaxResultReady = false;
        ajaxLoadingData = false;

    }
}

function sortOpts(source,text,value,selected)
{	
	var result = new Array();
	for (var i = 0; i < text.length; i++)
	{
		result.push(text[i] + "=" + value[i]);
	}
	result.sort();
	
	var last = result[result.length-1].split("=")[0];
	var index = 0;
	for (var l in result)
	{
		var valueSort = result[l].split("=")[1];
		var textSort = result[l].split("=")[0];
		addOpts(source,textSort,valueSort,selected,last,index);
		index++;
	}
}

var smazat = true;
var opakovat = true;

function addOpts(source,text,value,selected,last,index)
{
	var el = document.getElementById(source);
	var parent = el.parentNode;
	var ul = parent.getElementsByTagName("ul");
	var options = document.createElement("option");
	options.text = text;
	options.value = value;
	var defaultLanguage;
	if (value == selected)
	{
		options.selected = true;
		defaultLanguage = text;
	}
	el.options.add(options);
	if (last == text)
		opakovat = true;
	if (smazat) {
		delLists(ul[0]);
	}
	addLists(source,text,defaultLanguage,last,index);
}

function addLists(source,text,selected,last,index)
{
	var obj = document.getElementById(source);
	var opts = obj.options;
	var parent = obj.parentNode;
	var ul = parent.getElementsByTagName("ul");
	var actual = parent.getElementsByTagName("strong");
	for (var i = 0; i < ul.length; i++)
	{
		var li = document.createElement('li');
		var txt = document.createTextNode(text);
		li.appendChild(txt);
		li.selectID = obj.id;
		li.selIndex = opts[index].index;
		li.onclick = function()
		{
			selectMe(this);
			ul[0].style.display = "none";
			ul[0].style.zIndex = 0;
			ul[0].parentNode.style.zIndex = 0;
		}
		ul[i].appendChild(li);
		if (text == selected)
		{
			li.className = 'selected';
			actual[0].innerHTML = text;
		}
		if (window.attachEvent)
		{
			li.onmouseover = function()
			{
				this.className += ' hover';
			}
			li.onmouseout = function()
			{
				this.className = this.className.replace(new RegExp(" hover\\b"), '');
			}
		}
		smazat = false;
		if (last == text)
		{
			if (opakovat == true)
			{
				smazat = true;
			}
		}
		opakovat = false;
	}
}

function delLists(source)
{
	while(source.hasChildNodes())
	{
		source.removeChild(source.lastChild);
	}
}

function delOpts(source)
{
	var el = document.getElementById(source);
	var opts = el.options;
	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].value == "")
		{
			el.removeChild(opts[i]);
		}
	}
}