/* luo kutsun XMLHttpRequestin */

$(document).ready(function() {
	//create image
	$('<img src="/js/move-spinner.gif" id="spinner" />').css('position','absolute').hide().appendTo('body');
});

var xmlHttp = false;

function createXMLHttpRequest(){

	xmlHttp = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
         xmlHttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
         try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
    }
	
    if (xmlHttp.overrideMimeType) {
        xmlHttp.overrideMimeType('application/xml');
    }
}

/* luo kutsun queryStringin */
function createQueryString(countryValue, cityValue){
	var queryString = "selCountry=" + countryValue + "&selCity=" + cityValue;
	return queryString;
}

/*  1. selectin onChange kutsuu tätä */
function startRequestSel1Changed(sUrl){
	tyhjennaSelect('destArea');
	tyhjennaSelect('destCity');
	var sel1 = document.getElementById('destCountry');
	var sel2 = document.getElementById('destCity');
	if(sel1.value=='0'){
		return; // ainoastaan tyhjennettiin 2. ja 3. select
	}
	else{ // täytetään 2. select (1. selectin valinnan mukaan)
		createXMLHttpRequest();
		var url = sUrl + "&timeStamp=" + new Date().getTime() + "&" + queryString;
		var queryString = createQueryString(sel1.value, '0'); 
		var url = sUrl + "&" + queryString;
		
		xmlHttp.open("POST",url, true);
		xmlHttp.onreadystatechange = function(){handleStateChange('destCity')};
		xmlHttp.send(null);
		
		//get element position
		var position = $('#destCity').offset();
		
		//position image
		$('#spinner').css({ top: position.top , left: position.left + $('#destCity').width() + 3 }).fadeIn();
	}
}

/*  2. selectin onChange kutsuu tätä */
function startRequestSel2Changed(sUrl){
	tyhjennaSelect('destArea');
	var sel1 = document.getElementById('destCountry');
	var sel2 = document.getElementById('destCity');
	if(sel2.value =='0'){
		return; // ainoastaan tyhjennettiin 3. select
	}
	else{ // täytetään 3. select (1. ja 2. selectien valintojen mukaan)
		createXMLHttpRequest();
		var url = sUrl + "?timeStamp=" + new Date().getTime();
		var queryString = createQueryString(sel1.value, sel2.value);
		var url = sUrl + "&" + queryString;
		
		xmlHttp.open("POST",url, true);
		xmlHttp.onreadystatechange = function(){handleStateChange('destArea')};
		xmlHttp.send(null);
		
		//get element position
		var position = $('#destArea').offset();
		
		//position image
		$('#spinner').css({ top: position.top , left: position.left + $('#destArea').width() + 3 }).fadeIn();
	}
}

/* kutsuu piirtoa kun palvelin on valmis */
function handleStateChange(selectID){ 
	if(xmlHttp.readyState == 4){
		if(xmlHttp.status == 200){
			
			taytaSelect(selectID);
		}
	}
	
	$('#spinner').fadeOut();
}

/* listojen täyttö */
function taytaSelect(selectID){

	var lista = document.getElementById(selectID);
	
	var tulos = [];

	if (selectID=='destCity'){ // käsitellään 2. selectiä
		tulos = xmlHttp.responseXML.getElementsByTagName('CITY'); // cities-xml
	}
	else{ // käsitellään 3. selectiä
		tulos = xmlHttp.responseXML.getElementsByTagName('AREA'); // areas-xml
	}
	
	var option = null;
	var len = tulos.length;
	for(var i=0; i<tulos.length; i++){
		option = document.createElement("option");
		var name = tulos[i].childNodes[0].firstChild;
		var value = tulos[i].childNodes[1].firstChild;
		option.appendChild(document.createTextNode(name.nodeValue));
		option.value = value.nodeValue;
		(len==1)?option.selected=true:''; // vain yksi alkio, asetetaan valituksi
		lista.appendChild(option);
	}
//	(len==1)?lista.onchange():''; // vain yksi alkio, asetetaan valituksi (vaatii onChangen laukaisun)
	if(len==1){ // vain yksi alkio, asetetaan valituksi (vaatii onChangen laukaisun)
		(selectID=='destCity')?lista.onchange():'';
	}	
	setBtnEnabledValue(); // asetetaan submitBtn enabled/disabled
//	muodostaKentta(); // luodaan / poistetaan lentokenttävalinta
}

/* lentokenttävalinta */
function muodostaKentta(){
	var lista = document.getElementById('destAirport');
	if (lista != null){
		var option = null;
		var tulos = xmlHttp.responseXML.getElementsByTagName('AIRPORT'); // areas-xml
		var len = tulos.length;
		if (len > 0){
			tyhjennaSelect(lista.id);
			for(var i=0; i<tulos.length; i++){
				option = document.createElement("option");
				var name = tulos[i].childNodes[0].firstChild;
				var value = tulos[i].childNodes[1].firstChild;
				option.appendChild(document.createTextNode(name.nodeValue));
				option.value = value.nodeValue;
				lista.appendChild(option);
			}
			lista.style.display = "";
			(len==1)?lista.style.display = "none":''; // jos vain 1 kenttä, ei näytetä, mutta asetetaan arvo
		}
		else{
			tyhjennaSelect(lista.id);
			lista.style.display = "none";
		}
	}
}

/* listojen tyhjennys */
function tyhjennaSelect(selectID){
	var lista = document.getElementById(selectID);
	for(var i=lista.childNodes.length-1; i>1; i--){
		lista.removeChild(lista.lastChild);
	}
	setBtnEnabledValue(); // asetetaan submitBtn enabled/disabled
}

function setBtnEnabledValue(){
	var CitySelect = document.getElementById('destCity');
	var printBtn = document.getElementById('btnSearchAcc'); // submitBtnin ID
	(CitySelect.value!='0')?printBtn.disabled = 0:printBtn.disabled=1;
}
