var ListUtil = new Object();

// Skapa metod för att lägga till val i select
ListUtil.add = function (oListbox, sName, sValue) {
	var oOption = document.createElement("option");
	oOption.appendChild(document.createTextNode(sName));
	
	if (arguments.length == 3) {
		oOption.setAttribute("value",sValue);
	}
	oListbox.appendChild(oOption);
}

// Ta bort enskilt val i select
ListUtil.remove = function (oListbox, iIndex) {
	oListbox.remove(iIndex);
}
// Rensa listan i select
ListUtil.clear = function (oListbox)
{
	for (var i = oListbox.options.length-1;i>=0;i--)
	{
		ListUtil.remove(oListbox,i);
	}
}




function getXMLHTTPRequest() {
try {
req = new XMLHttpRequest();
} catch(err1) {
  try {
  req = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (err2) {
    try {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (err3) {
      req = false;
    } 
  } 
}
return req;
}



function callAjax(sUrl, sCallBack) {
	// build the URL of the server script we wish to call
	
	// Skapa ett nytt objekt. Det kan heta precis vad som helst.
	var oNyRequest = new Object();
	
	// Flytta skapandet av requesten hit istället
	oNyRequest._handler = getXMLHTTPRequest();
	oNyRequest._sUrl = "/includes/ajax2xml.php" + sUrl;
  	// oNyRequest._sRand = parseInt(Math.random()*999999999999999);
  	oNyRequest._sRand = new Date().getTime();
  	oNyRequest._sCallBack = sCallBack;
  	// oNyRequest._sArgs = sArgs;
  	
  	// Här skapar du istället en anonym funktion som skall ta hand om det som kommer tillbaka från requesten
  	oNyRequest.run = function() {
	  	this._handler.onreadystatechange = function(){
	  		// Inne i en anonym funktion refererar man till "ägaren" med "this"
			if(oNyRequest._handler.readyState == 4) {
				// om serverns HTTP-svarskod är "OK"
				if(oNyRequest._handler.status == 200)	{
					// Anropa funktionen som skall ta hand om xml-resultatet
					eval(oNyRequest._sCallBack + "(oNyRequest._handler.responseXML);");
							
				} else {
					// visa ett felmeddelande för alla andra HTTP-svar
					alert("Ett fel har inträffat: " + oNyRequest._handler.statusText + " (" + oNyRequest._handler.status + ")");
				}
			}
	  	};
	  	this._handler.open("GET", oNyRequest._sUrl+"&rand="+oNyRequest._sRand, true);
	 	this._handler.send(null);
  	}
  	return oNyRequest;
}


function xmlDoc2Droplist(xmlDoc, oSelectDestId) {
	// XML-resultatet ligger i xmlDoc
	// oSelectDestId = destintionsselect
	var xResultat = xmlDoc.getElementsByTagName("resultat")[0];
	var xPoster = xResultat.getElementsByTagName("post");

	
	var iAntal = xPoster.length; // Antal poster som returnerats

	ListUtil.clear(document.getElementById(oSelectDestId));
	
	if (iAntal == 0) {
		// om inga poster finns, visa inget
		ListUtil.add(document.getElementById(oSelectDestId)," (" + aSprak[0] + ") ","");
		document.getElementById(oSelectDestId).disabled = true;
	} else {
		// uppdatera select med nya värden
		ListUtil.add(document.getElementById(oSelectDestId)," - " + aSprak[1] + " -","");
		
	
		for (var i = 0; i < iAntal; i++)
		{
		   var sId = xPoster[i].getElementsByTagName("id")[0].firstChild.nodeValue;
		   var sNamn = xPoster[i].getElementsByTagName("namn")[0].firstChild.nodeValue;
		   // document.getElementById('showtime').innerHTML += "ID " + sId + " Namn:" + sNamn + "<BR>";
		   ListUtil.add(document.getElementById(oSelectDestId),sNamn,sId);
		}
	}
}


// *** retur funktioner ***
function uppdateraLan(xmlDoc) {
	// XML-resultatet ligger i xmlDoc
	xmlDoc2Droplist(xmlDoc, "id_lan");
}

function uppdateraLandskap(xmlDoc) {
	// XML-resultatet ligger i xmlDoc
	xmlDoc2Droplist(xmlDoc, "id_landskap");
}

function uppdateraKommuner(xmlDoc) {
	// XML-resultatet ligger i xmlDoc
	xmlDoc2Droplist(xmlDoc, "id_kommun");
	
	// var xPoster = xmlToArray(XmlDoc);
	// arrayToDroplist("id_kommun",xPoster);

	/*
	var xResultat = xmlDoc.getElementsByTagName("resultat")[0];
	var xPoster = xResultat.getElementsByTagName("post");
	var iAntal = xPoster.length; // Antal poster som returnerats
	
	ListUtil.clear(document.getElementById("id_kommun"));
	ListUtil.add(document.getElementById("id_kommun")," - välj -","");

	for (var i = 0; i < iAntal; i++)
	{
	   var sId = xPoster[i].getElementsByTagName("id")[0].firstChild.nodeValue;
	   var sNamn = xPoster[i].getElementsByTagName("namn")[0].firstChild.nodeValue;
	   // document.getElementById('showtime').innerHTML += "ID " + sId + " Namn:" + sNamn + "<BR>";
	   ListUtil.add(document.getElementById("id_kommun"),sNamn,sId);
	}
*/
}

function uppdateraLeder(xmlDoc) {
	// XML-resultatet ligger i xmlDoc
	xmlDoc2Droplist(xmlDoc, "id_led");
}

function uppdateraPlatser(xmlDoc) {
	// XML-resultatet ligger i xmlDoc
	xmlDoc2Droplist(xmlDoc, "id_plats_1");
	xmlDoc2Droplist(xmlDoc, "id_plats_2");
}



// *** startfunktioner *** 

function visaLan(sSelectInitId) {
	// visa LÄN utifrån vald land
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	ListUtil.clear(document.getElementById("id_lan"));
	if (document.getElementById(sSelectInitId).value.length == 0) {
		// inget land är valt
		// töm län, visa texten välj och disabla den
		ListUtil.add(document.getElementById("id_lan")," - " + aSprak[7] + " -");
		document.getElementById("id_lan").disabled = true;
	} else {
		// land är valt
		// enabla län och fyll den med länsmnamn
		document.getElementById("id_lan").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqLan = new callAjax("?action=lan&landiso="+document.getElementById(sSelectInitId).value,"uppdateraLan");
		reqLan.run();
	}
}

function visaLandskap(sSelectInitId) {
	// visa LANDSKAP utifrån vald land
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	ListUtil.clear(document.getElementById("id_landskap"));
	if (document.getElementById(sSelectInitId).value.length == 0) {
		// inget land är valt
		// töm landskap, visa texten välj och disabla den
		ListUtil.add(document.getElementById("id_landskap")," - " + aSprak[7] + " -");
		document.getElementById("id_landskap").disabled = true;
	} else {
		// land är valt
		// enabla landskap och fyll den med landskapsnamn
		document.getElementById("id_landskap").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqLandskap = new callAjax("?action=landskap&landiso="+document.getElementById(sSelectInitId).value,"uppdateraLandskap");
		reqLandskap.run();
	}
}

function visaKommuner(sSelectInitId) {
	// visa kommuner utifrån valt län
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	ListUtil.clear(document.getElementById("id_kommun"));
	if (document.getElementById(sSelectInitId).value.length == 0) {
		// inget län är valt
		// töm kommuner, visa texten välj och disabla den
		ListUtil.add(document.getElementById("id_kommun")," - " + aSprak[3] + " -");
		document.getElementById("id_kommun").disabled = true;
	} else {
		// län är valt
		// enabla kommun och fyll den med kommuner
		document.getElementById("id_kommun").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqKommmuner = new callAjax("?action=kommuner&lansid="+document.getElementById(sSelectInitId).value,"uppdateraKommuner");
		reqKommmuner.run();
	}
}

function visaLeder(sSelectInitId) {
	// visa leder utifrån valt län
	// Inkluderanamnet på den funktion som resultatet skall till, sId=den select som initierat saken
	ListUtil.clear(document.getElementById("id_led"));
	if (document.getElementById(sSelectInitId).value.length == 0) {
		// inget län är valt
		// töm leder, visa texten välj och disabla den
		ListUtil.add(document.getElementById("id_led")," - " + aSprak[3] + " -");
		document.getElementById("id_led").disabled = true;
	} else {
		// enabla leder och fyll den med kommuner
		document.getElementById("id_led").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqLeder = new callAjax("?action=leder&lansid="+document.getElementById(sSelectInitId).value,"uppdateraLeder");
		reqLeder.run();
	}
}


function visaPlatser(sSelectInitId) {
	// visa platser utifrån valt kommun
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	ListUtil.clear(document.getElementById("id_plats_1"));
	ListUtil.clear(document.getElementById("id_plats_2"));
	if (document.getElementById(sSelectInitId).value.length == 0) {
		// inget sSelectInitId är valt (kommun)
		// töm Platser, visa texten välj och disabla den
		ListUtil.add(document.getElementById("id_plats_1")," - " + aSprak[5] + " -");
		ListUtil.add(document.getElementById("id_plats_2")," - " + aSprak[5] + " -");
		document.getElementById("id_plats_1").disabled = true;
		document.getElementById("id_plats_2").disabled = true;
	} else {
		// län är valt
		// enabla kommun och fyll den med kommuner
		document.getElementById("id_plats_1").disabled = false;
		document.getElementById("id_plats_2").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqPlatser = new callAjax("?action=platser&kommunid="+document.getElementById(sSelectInitId).value,"uppdateraPlatser");
		reqPlatser.run();
	}
}


function visaLanLandskap(sSelectInitId) {
	// visa LÄN och LANDSKAP utifrån valt LAND
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaLan(sSelectInitId);
	visaLandskap(sSelectInitId);
}

function visaLanKommuner(sSelectInitId) {
	// visa län och landskap utifrån valt land + kommuner och leder utifrån valt län + platser utifrån vald kommun
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaLan(sSelectInitId);
	visaKommuner(sSelectInitId);
}
function visaLanLandskapKommuner(sSelectInitId) {
	// visa län och landskap utifrån valt land + kommuner och leder utifrån valt län + platser utifrån vald kommun
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaLan(sSelectInitId);
	visaLandskap(sSelectInitId);
	visaKommuner(sSelectInitId);
}

function visaLanKommunerLederPlatser(sSelectInitId) {
	// visa län och landskap utifrån valt land + kommuner och leder utifrån valt län + platser utifrån vald kommun
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaLan(sSelectInitId);
	visaLandskap(sSelectInitId);
	visaKommuner(sSelectInitId);
	visaLeder(sSelectInitId);
	visaPlatser('id_kommun');
}

function visaLanLandskapKommunerLederPlatser(sSelectInitId) {
	// visa län och landskap utifrån valt land + kommuner och leder utifrån valt län + platser utifrån vald kommun
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaLan(sSelectInitId);
	visaLandskap(sSelectInitId);
	visaKommuner(sSelectInitId);
	visaLeder(sSelectInitId);
	visaPlatser('id_kommun');
}


function visaKommunerLederPlatser(sSelectInitId) {
	// visa kommuner och leder utifrån valt län + platser utifrån vald kommun
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaKommuner(sSelectInitId);
	visaLeder(sSelectInitId);
	visaPlatser('id_kommun');
}

function visaKommunerLeder(sSelectInitId) {
	// visa kommuner och leder utifrån valt län
	// Inkluderanamnet på den funktion som resultatet skall till, sSelectInitId=den select som initierat saken
	visaKommuner(sSelectInitId);
	visaLeder(sSelectInitId);
	/*
	if (document.getElementById(sSelectInitId).value.length == 0) {
		// inget län är valt
		// töm kommuner, visa texten välj och disabla den
		ListUtil.clear(document.getElementById("id_kommun"));
		ListUtil.add(document.getElementById("id_kommun")," - välj län först -");
		document.getElementById("id_kommun").disabled = true;
		
		// töm leder, visa texten välj och disabla den
		ListUtil.clear(document.getElementById("id_led"));
		ListUtil.add(document.getElementById("id_led")," - välj län först -");
		document.getElementById("id_led").disabled = true;
	} else {
		// län är valt
		// enabla kommun och fyll den med kommuner
		document.getElementById("id_kommun").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqKommmuner = new callAjax("?action=kommuner&lansid="+document.getElementById(sSelectInitId).value,"uppdateraKommuner");
		reqKommmuner.run();
		
		// enabla leder och fyll den med kommuner
		document.getElementById("id_led").disabled = false;
		// Skapa instans av ajax-funktionen
		var reqLeder = new callAjax("?action=leder&lansid="+document.getElementById(sSelectInitId).value,"uppdateraLeder");
		reqLeder.run();
	}
	*/
}
// alert("sidan laddad");