var valtLivsmedel /*:int*/ = -1;
var hiddenGroupSelects;
function RegExTest(element,expression)
{
	return element.value.replace(".", ",").match(expression) != null;
}
/* Om gruppväljaren inte visas så visas den.
* Om det är första gången den visas hämtas första nivån annars visas den bara.
* Om den redan visas hämtas nästa nivå.
* Anropar visaGrupper via SetElementAsync.
* * element Noden som anropar funktionen, null om funktionen körs för att visa väljaren
* * gruppId Id för gruppen vars undernoder ska hämtas och visas. -1 för första nivån.
* * listNummer index för listan som ska visas. 0 för den första.
**/
function visaGrupper(element, gruppId, listNummer){
	if(document.getElementById("GruppDiv").style.display == "block" ||
		document.getElementById("valdGrupp").value == "" ||
		!document.getElementById("GruppList0")){
		
		document.getElementById("valdGrupp").value = gruppId;
		var div = document.getElementById("grupplistor");
		var lista;
		var antalGruppnivaer = document.getElementById("antalGruppnivaer").value;

		for(var i=antalGruppnivaer;i>=listNummer;i--){
			if(document.getElementById("GruppList" + i)){
				lista = document.getElementById("GruppList" + i);
				if(lista.childNodes.length > 0){
					for(var j=lista.childNodes.length-1;j>=0;j--){
						lista.removeChild(lista.childNodes[j]);
					}
				}
				div.removeChild(lista);
			}
		}
		
		document.getElementById("antalGruppnivaer").value = listNummer;
		var list = document.createElement("ul");
		list.setAttribute("id", "GruppList" + listNummer);
		list.setAttribute("listNummer", listNummer);
		list.className = "grupplista";
		div.appendChild(list);
		
		if(element != null &&
			element.parentNode != null){
			for(var i=0;i<element.parentNode.childNodes.length;i++){
				if(element.parentNode.childNodes[i].nodeType == 1) {
					for(var l=0;l<element.parentNode.childNodes[i].childNodes.length;l++){
						if(element.parentNode.childNodes[i].childNodes[l].nodeType == 1 &&
							element.parentNode.childNodes[i].childNodes[l].tagName == "A") {
							element.parentNode.childNodes[i].childNodes[l].className = "notvald";
						}
					}
				}
			}
			for(var k=0;k<element.childNodes.length;k++){
				if(element.childNodes[k].nodeType == 1 &&
					element.childNodes[k].tagName == "A") {
					element.parentNode.setAttribute("vald", element.childNodes[k].innerHTML);
					element.childNodes[k].className= "vald";
				}
			}
			
			element.parentNode.setAttribute("valtId", gruppId); 
		}

		var xml = "<request><grupper>" + gruppId + "</grupper><nummer>"+ listNummer + "</nummer></request>";
		SetElementAsync('getgrupplista.aspx', list, xml, setGruppDiv);

	}

	//Döljer listboxar för IE
	if(document.elementFromPoint && window.ActiveXObject)
	{

		document.getElementById("GruppDiv").style.marginLeft = "-27em" ;
		var i = 0;
		var elementfrompoint;
		var huvuddiv = document.getElementById("GruppDiv");
		if(huvuddiv.style.display!="block"){
			huvuddiv.style.display="block";
			hiddenGroupSelects = new Array();
			/*Ungefärliga startpunkter. Left, width och top är angivet i em i stylen.*/
			var x1 = document.getElementById("content").offsetLeft + huvuddiv.offsetLeft;
			var x2 = x1 + 800;
			var y1 = huvuddiv.offsetTop;
			var y2 = y1+350;
			huvuddiv.style.display="none";

			for(var x=x1 - getScrollRattningX();x<x2;x++){
				for(var y=y1;y<y2;y++){
					elementfrompoint = document.elementFromPoint(x, y);
					if(elementfrompoint.tagName == 'SELECT'){
						
						elementfrompoint.style.visibility = "hidden";
						hiddenGroupSelects[i] = elementfrompoint;
						i++;
					}
					y+=9; //Kör bara var tioende rad och kolumn, select boxarna är inte smalare/lägre än så.
				}
				x+=19;
			}	
		}
		
	}

	document.getElementById("GruppDiv").style.display = "block";

}
/*
* Sätter en lista med grupper m.m.
* Anropas från visaGrupper via SetElementAsync
* * list Listan som ska matas
* * result Datan som ska sättas till listan.
*/
function setGruppDiv(list, result){
	
	var listNummer = parseInt(list.getAttribute("listNummer"));
	var div = document.getElementById("grupplistor");
	var path = document.getElementById("gruppPath");
	var valdaGrupper = document.getElementById("valdaGrupper");

	if(result != ""){
		list.innerHTML = result;
		list.setAttribute("vald", "");
		list.setAttribute("valtId", "");
	}else{
		div.removeChild(list);
	}
	
	path.innerHTML = "";
	valdaGrupper.value = "-1,";
	
	for(var i=0;i<=listNummer;i++){
		if(document.getElementById("GruppList" + i)){
			var vald = document.getElementById("GruppList" + i).getAttribute("vald");
			if(vald != null &&
				vald != ""){
				path.innerHTML += "/" + vald;
			}
			var valtId = document.getElementById("GruppList" + i).getAttribute("valtId");
			if(valtId != null &&
				valtId != ""){
				valdaGrupper.value += valtId + ",";
			}
		}
	}
	
	
}
/*
* Sätter den senast valda gruppen till sökformuläret.
*/
function valjGrupp(){
	var path = document.getElementById("gruppPath");
	var gruppnamn = path.innerHTML.substring(path.innerHTML.lastIndexOf("/")+1);
	document.getElementById("txtGruppNamn").value = gruppnamn;
	document.getElementById("txtGruppNamn").title = path.innerHTML;
	document.getElementById("valdGruppNamn").value = gruppnamn;
	
	gomGruppListor();
}
/*
* Tömmer gruppväljaren och sökformulärets gruppfält.
*/
function tomGruppval(){
	gomGruppListor();
	document.getElementById("gruppPath").value = "";
	document.getElementById("txtGruppNamn").value = "";
	document.getElementById("txtGruppNamn").title = "";
	document.getElementById("valdGruppNamn").value = "";
	document.getElementById("valdaGrupper").value = "";
	document.getElementById("valdGrupp").value = "";
	var antalGruppnivaer = document.getElementById("antalGruppnivaer").value;
	var div = document.getElementById("grupplistor");
	for(var i=antalGruppnivaer;i>=0;i--){
		if(document.getElementById("GruppList" + i)){
			lista = document.getElementById("GruppList" + i);
			if(lista.childNodes.length > 0){
				for(var j=lista.childNodes.length-1;j>=0;j--){
					lista.removeChild(lista.childNodes[j]);
				}
			}
			div.removeChild(lista);
		}
	}
	
}
/**
* Avbryter gruppvalet och återgår till föregående val.	
*/
function avbrytValjGrupp(){
	gomGruppListor();
	document.getElementById("valdGrupp").value = 
		document.getElementById("valdGrupp_Foregaende").value;
	document.getElementById("valdaGrupper").value = 
		document.getElementById("valdaGrupper_Foregaende").value;
	document.getElementById("valdGruppNamn").value = 
		document.getElementById("valdGruppNamn_Foregaende").value;
	document.getElementById("antalGruppnivaer").value = 
		document.getElementById("antalGruppnivaer_Foregaende").value;
	
	var gruppdiv = document.getElementById("grupplistor");
	
	var xml = "<request><grupper>" + document.getElementById("valdaGrupper").value + "</grupper></request>";
	SetElementAsync('getgruppkontroll.aspx', gruppdiv, xml, null);
}
/*
* Lägger undan gruppvärden inför eventuell återställning
*/
function sparaGruppVarden(){
	document.getElementById("valdGrupp_Foregaende").value = 
		document.getElementById("valdGrupp").value;
	document.getElementById("valdaGrupper_Foregaende").value = 
		document.getElementById("valdaGrupper").value;
	document.getElementById("valdGruppNamn_Foregaende").value = 
		document.getElementById("valdGruppNamn").value;
	document.getElementById("antalGruppnivaer_Foregaende").value = 
		document.getElementById("antalGruppnivaer").value;
}
/*
* Gömmer gruppväljaren
**/
function gomGruppListor(){
	
	document.getElementById("GruppDiv").style.display = "none";
	if(hiddenGroupSelects != null){
		for(var i in hiddenGroupSelects){
			hiddenGroupSelects[i].style.visibility = "";
		}
	}
}














/* Om Matrattväljaren inte visas så visas den.
* Om det är första gången den visas hämtas första nivån annars visas den bara.
* Om den redan visas hämtas nästa nivå.
* Anropar visaMatratter via SetElementAsync.
* * element Noden som anropar funktionen, null om funktionen körs för att visa väljaren
* * MatrattId Id för Matratten vars undernoder ska hämtas och visas. -1 för första nivån.
* * listNummer index för listan som ska visas. 0 för den första.
**/
function visaMatratter(element, MatrattId, listNummer){
	if(document.getElementById("MatrattDiv").style.display == "block" ||
		document.getElementById("valdMatratt").value == "" ||
		!document.getElementById("MatrattList0")){
		
		document.getElementById("valdMatratt").value = MatrattId;
		var div = document.getElementById("matrattlistor");
		var lista;
		var antalMatrattnivaer = document.getElementById("antalMatrattnivaer").value;
		for(var i=antalMatrattnivaer;i>=listNummer;i--){
			if(document.getElementById("MatrattList" + i)){
				lista = document.getElementById("MatrattList" + i);
				if(lista.childNodes.length > 0){
					for(var j=lista.childNodes.length-1;j>=0;j--){
						lista.removeChild(lista.childNodes[j]);
					}
				}
				div.removeChild(lista);
			}
		}
		document.getElementById("antalMatrattnivaer").value = listNummer;
		var list = document.createElement("ul");
		list.setAttribute("id", "MatrattList" + listNummer);
		list.setAttribute("listNummer", listNummer);
		list.className = "matrattlista";
		div.appendChild(list);
	    	
		
		if(element != null &&
			element.parentNode != null){
			for(var i=0;i<element.parentNode.childNodes.length;i++){
				if(element.parentNode.childNodes[i].nodeType == 1) {
					for(var l=0;l<element.parentNode.childNodes[i].childNodes.length;l++){
						if(element.parentNode.childNodes[i].childNodes[l].nodeType == 1 &&
							element.parentNode.childNodes[i].childNodes[l].tagName == "A") {
							element.parentNode.childNodes[i].childNodes[l].className = "notvald";
						}
					}
				}
			}
			for(var k=0;k<element.childNodes.length;k++){
				if(element.childNodes[k].nodeType == 1 &&
					element.childNodes[k].tagName == "A") {
					element.parentNode.setAttribute("vald", element.childNodes[k].innerHTML);
					element.childNodes[k].className= "vald";
				}
			}
			
			element.parentNode.setAttribute("valtId", MatrattId); 
		}
		var xml = "<request><matratter>" + MatrattId + "</matratter><nummer>"+ listNummer + "</nummer></request>";
		SetElementAsync('getMatrattlista.aspx', list, xml, setMatrattDiv);
	}
	//Döljer listboxar för IE

	if(document.elementFromPoint && window.ActiveXObject)
	{
		document.getElementById("MatrattDiv").style.marginLeft = "-27em" ;
		
		var i = 0;
		var elementfrompoint;
		var huvuddiv = document.getElementById("MatrattDiv");
		if(huvuddiv.style.display!="block"){
			huvuddiv.style.display="block";
			hiddenGroupSelects = new Array();
			/*Ungefärliga startpunkter. Left, width och top är angivet i em i stylen.*/
			var x1 = document.getElementById("content").offsetLeft + huvuddiv.offsetLeft;
			var x2 = x1 + 800;
			var y1 = huvuddiv.offsetTop;			
			var y2 = y1+350;
			huvuddiv.style.display="none";
			
			for(var x=x1 - getScrollRattningX();x<x2;x++){
				for(var y=y1;y<y2;y++){
					elementfrompoint = document.elementFromPoint(x, y);
					if(elementfrompoint.tagName == 'SELECT'){
						
						elementfrompoint.style.visibility = "hidden";
						hiddenGroupSelects[i] = elementfrompoint;
						i++;
					}
					y+=9; //Kör bara var tioende rad och kolumn, select boxarna är inte smalare/lägre än så.
				}
				x+=19;
			}	
		}
		
	}
	document.getElementById("MatrattDiv").style.display = "block";

}
/*
* Sätter en lista med Matratter m.m.
* Anropas från visaMatratter via SetElementAsync
* * list Listan som ska matas
* * result Datan som ska sättas till listan.
*/
function setMatrattDiv(list, result){
	
	var listNummer = parseInt(list.getAttribute("listNummer"));
	var div = document.getElementById("matrattlistor");
	var path = document.getElementById("MatrattPath");
	var valdaMatratter = document.getElementById("valdaMatratter");

	if(result != ""){
		list.innerHTML = result;
		list.setAttribute("vald", "");
		list.setAttribute("valtId", "");
	}else{
		div.removeChild(list);
	}
	
	path.innerHTML = "";
	valdaMatratter.value = "-1,";
	
	for(var i=0;i<=listNummer;i++){
		if(document.getElementById("MatrattList" + i)){
			var vald = document.getElementById("MatrattList" + i).getAttribute("vald");
			if(vald != null &&
				vald != ""){
				path.innerHTML += "/" + vald;
			}
			var valtId = document.getElementById("MatrattList" + i).getAttribute("valtId");
			if(valtId != null &&
				valtId != ""){
				valdaMatratter.value += valtId + ",";
			}
		}
	}
	
	
}
/*
* Sätter den senast valda Matratten till sökformuläret.
*/
function valjMatratt(){
	var path = document.getElementById("MatrattPath");
	var Matrattnamn = path.innerHTML.substring(path.innerHTML.lastIndexOf("/")+1);
	document.getElementById("txtMatrattNamn").value = Matrattnamn;
	document.getElementById("txtMatrattNamn").title = path.innerHTML;
	document.getElementById("valdMatrattNamn").value = Matrattnamn;
	
	gomMatrattListor();
}
/*
* Tömmer Matrattväljaren och sökformulärets Matrattfält.
*/
function tomMatrattval(){
	gomMatrattListor();
	document.getElementById("MatrattPath").value = "";
	document.getElementById("txtMatrattNamn").value = "";
	document.getElementById("txtMatrattNamn").title = "";
	document.getElementById("valdMatrattNamn").value = "";
	document.getElementById("valdaMatratter").value = "";
	document.getElementById("valdMatratt").value = "";
	var antalMatrattnivaer = document.getElementById("antalMatrattnivaer").value;
	var div = document.getElementById("matrattlistor");
	for(var i=antalMatrattnivaer;i>=0;i--){
		if(document.getElementById("MatrattList" + i)){
			lista = document.getElementById("MatrattList" + i);
			if(lista.childNodes.length > 0){
				for(var j=lista.childNodes.length-1;j>=0;j--){
					lista.removeChild(lista.childNodes[j]);
				}
			}
			div.removeChild(lista);
		}
	}
	
}
/**
* Avbryter Matrattvalet och återgår till föregående val.	
*/
function avbrytValjMatratt(){
	gomMatrattListor();
	document.getElementById("valdMatratt").value = 
		document.getElementById("valdMatratt_Foregaende").value;
	document.getElementById("valdaMatratter").value = 
		document.getElementById("valdaMatratter_Foregaende").value;
	document.getElementById("valdMatrattNamn").value = 
		document.getElementById("valdMatrattNamn_Foregaende").value;
	document.getElementById("antalMatrattnivaer").value = 
		document.getElementById("antalMatrattnivaer_Foregaende").value;
	
	var Matrattdiv = document.getElementById("matrattlistor");
	
	var xml = "<request><matratter>" + document.getElementById("valdaMatratter").value + "</matratter></request>";
	SetElementAsync('getMatrattkontroll.aspx', Matrattdiv, xml, null);
}
/*
* Lägger undan Matrattvärden inför eventuell återställning
*/
function sparaMatrattVarden(){
	document.getElementById("valdMatratt_Foregaende").value = 
		document.getElementById("valdMatratt").value;
	document.getElementById("valdaMatratter_Foregaende").value = 
		document.getElementById("valdaMatratter").value;
	document.getElementById("valdMatrattNamn_Foregaende").value = 
		document.getElementById("valdMatrattNamn").value;
	document.getElementById("antalMatrattnivaer_Foregaende").value = 
		document.getElementById("antalMatrattnivaer").value;
}
/*
* Gömmer Matrattväljaren
**/
function gomMatrattListor(){
	
	document.getElementById("MatrattDiv").style.display = "none";
	if(hiddenGroupSelects != null){
		for(var i in hiddenGroupSelects){
			hiddenGroupSelects[i].style.visibility = "";
		}
	}
}








/*
* Anpassar näringsämneskontrollerna efter vad man vill söka på.
*/
function hamtaNaringsamneskontroller()
{
	var nalist = document.getElementById("valjNaringsamne_listNaringsamnen");
	var naringsamnesId = nalist.options[nalist.selectedIndex].value;
	var naop = document.getElementById("valjNaringsamne_listNaringsamnesOperator");
	var operatorId = naop.options[naop.selectedIndex].value;
	var value1 = document.getElementById("valjNaringsamne_txtVarde1").value 
	var value2 = "";
	if(document.getElementById("valjNaringsamne_txtVarde2"))
	{
		value2 = document.getElementById("valjNaringsamne_txtVarde2").value
	}
	var xml = "<request><naid>" + 
				naringsamnesId + 
				"</naid><op>" + 
				operatorId + 
				"</op><value1>" +
				value1 +
				"</value1><value2>" +
				value2 +
				"</value2></request>";
	
	var li = document.getElementById("naContainer");
	SetElementAsync('getnakontroller.aspx', li, xml, setNaringsAmneskontroller);	
}
/*
* Sätter näringsämenskontrollerna efter uppdatering.
*/
function setNaringsAmneskontroller(element, response)
{
	element.innerHTML = response;
	document.getElementById("valjNaringsamne_listNaringsamnen").focus();
	
}
/*
* Hämtar en lista med livsmedelsnamn och visar den i en lista under livsmedelsnamnsfältet.
*/
function HamtaLivsmedelsnamn(borjarMed){
	if(document.getElementById("rbLivsmedelBorjarPa").checked){
		var element = document.getElementById('AllaLivsmedelsNamn');
		if(borjarMed.length > 0){
			SetElementAsync('getlivsmedelsnamn.aspx', element, '<request><searchString>' + borjarMed.replace(/</g, '') + '</searchString></request>', setLivsmedelsDiv);
		}else{
			element.innerHTML = "";
		}
	}
	
}
var navIndex = 0;
/*
* Navigering i livsmedelsnamnslistan och initiering av listan.
*/
function txtLivsmedelsNamn_keyUp(evt){
	var charCode = (evt.which) ? evt.which : event.keyCode;
		var textbox = document.getElementById("txtLivsmedelsNamn");
	    switch(charCode) {
		case 38: //up arrow
			previousSuggestion();
			break;
		case 40: //down arrow 
			nextSuggestion();
			break;
		case 13: //enter
			doljLivsmedelsnamn();
			break;
		default:
			HamtaLivsmedelsnamn(textbox.value);
	}
	
}
/*
* Går till nästa post i livsmedelsnamnslistan
*/
function nextSuggestion() {
	var div = document.getElementById('AllaLivsmedelsNamn');
	var textbox = document.getElementById('txtLivsmedelsNamn');
	var cSuggestionNodes = div.childNodes;

	if (cSuggestionNodes.length > 0 && valtLivsmedel < cSuggestionNodes.length-2) {
		var oNode = cSuggestionNodes[++valtLivsmedel];
		setBakgrundVald(oNode);
		textbox.value = oNode.getAttribute("title"); 
		
		if(parseInt(oNode.offsetTop) > (parseInt(div.offsetHeight) + parseInt(div.scrollTop) - 15 )){
			div.scrollTop += oNode.offsetHeight + 15;
		}
	}
	
}
/*
* Går till förgående post i livsmedelsnamnslistan
*/
function previousSuggestion () {
	var div = document.getElementById('AllaLivsmedelsNamn');
	var textbox = document.getElementById('txtLivsmedelsNamn');
	var cSuggestionNodes = div.childNodes;

	if (cSuggestionNodes.length > 0 && valtLivsmedel > 0) {
		var oNode = cSuggestionNodes[--valtLivsmedel];
		setBakgrundVald(oNode);
		textbox.value = oNode.getAttribute("title"); 
		
	}
}
/*
* Markerar en nod som vald i livsmedelsnamnslistan
*/
function setBakgrundVald(element){
	var div = document.getElementById('AllaLivsmedelsNamn');
	var oNode;
	for (var i=0; i < div.childNodes.length; i++) {
		oNode = div.childNodes[i];
		if(oNode.className){
			if (oNode == element) {
				oNode.className = "livsmedelsnamnVald"
			} else if (oNode.className == "livsmedelsnamnVald") {
				oNode.className = "livsmedelsnamn";
			}
		}
	}
	
}
/*
* Initierar och positionerar livsmedelsnamnslistan.
*/
function setLivsmedelsDiv(div, result){
	div.innerHTML = result;
	var textbox = document.getElementById('txtLivsmedelsNamn');
	var left;
	var top = 0;
	if(window.ActiveXObject){
		left = parseInt(textbox.offsetLeft) + 
				parseInt(document.getElementById("content").offsetLeft) +
				parseInt(document.getElementById("divParametrarVanster").offsetLeft) + 46;
		
		top = parseInt(textbox.offsetHeight) + 1;
		if(document.getElementById("valjNaringsamne_listNaringsamnen")){
			document.getElementById("valjNaringsamne_listNaringsamnen").style.visibility = "hidden";
			document.getElementById("valjNaringsamne_listNaringsamnesOperator").style.visibility = "hidden";
		}
		document.getElementById("ddLaggTillGrupp").style.visibility = "hidden";
	}else{
		left = textbox.offsetLeft;
	}
	div.style.left = left + "px";
	div.style.display = "block";
	div.style.marginTop = top + "px";
	//div.style.margin.top = top + "px";
	div.scrollTop  = top + "px";
	valtLivsmedel = -1;
	livX1 = left;
	livX2 = left + div.offsetWidth + 24;
	livY1 = div.offsetTop;
	livY2 = livY1 + div.offsetHeight;
}
/*
* Döljer livsmedelsmnamnslistan
*/
function doljLivsmedelsnamn(){
	var div = document.getElementById("AllaLivsmedelsNamn");
	if(div.style.display == "block"){
		if(window.ActiveXObject){
			if(document.getElementById("valjNaringsamne_listNaringsamnen")){
				document.getElementById("valjNaringsamne_listNaringsamnen").style.visibility = "inherit";
				document.getElementById("valjNaringsamne_listNaringsamnesOperator").style.visibility = "inherit";
			}
			document.getElementById("ddLaggTillGrupp").style.visibility = "inherit";
		}
		var div = document.getElementById('AllaLivsmedelsNamn');
		div.style.display = "none";
	}
	
}
/*
* Väljer det markerade livsmedlet i livsmedelslistan.
*/
function valjLivsmedelsnamn(div){
	
	var textbox = document.getElementById('txtLivsmedelsNamn');
	textbox.value = div.getAttribute("title"); 
	doljLivsmedelsnamn();
	
}

/*		 Döljer livsmedelsnamnslistan om man klickar någon annanstans än på den.
* Döljer hjälpdiven om  man klickar någon annanstans än på den.
* * Händelseargumentet från klickhändelsen
*/
function clickseekonbody(e){
	
	if (!e) e = window.event;
	
	var posx = getMouseX(e);
	var posy = getMouseY(e);
	var div = document.getElementById("AllaLivsmedelsNamn");
	if(div.style.display == "block"){
		if(!(livX1 < posx &&
			livX2 > posx &&
			livY1 < posy &&
			livY2 > posy)){	
			doljLivsmedelsnamn();
			return;
		}
	}
	gomHjalp(e);
}