//********************************
// S E A R C H  - A J A X  -  T R E E 
// additional methods for the search tree
// most methods are in treeFunctions.js
//
// author: Gursch Markus
// July 2008
/////////////////////////////////*

var searchArray = new Array();
var cityMarker;
var globSearchValue;

/**
 * returns a checkbox for the searchTree 
 */
function createSearchCheckBox(instID, katID, number, visibility)
{
	var checkbox = document.createElement('input');
	checkbox.type = 'checkbox';
	checkbox.setAttribute ("id", 'cbInst' + instID);
	checkbox.style.visibility  = visibility;
	checkbox.defaultChecked = false;
	checkbox.value = instID;
	
	checkbox.onclick = function()
	{
		var element = document.getElementById("cbInst" + instID);
	
		if (element.checked == true)
			setSearchLocation( instID, katID, number);	
		else
			removeLocation(instID, katID);	
	};
	return checkbox;
}

/**
 * returns a new or existing XMLHttpRequest Object
 */
/**
 * creates the main <ul> tag with caption "Vulkanland Datenbank"
 */
function createMainSearchUL(searchValue, searchCount)
{
	var mainUL = document.createElement("ul");
	mainUL.setAttribute("id", "mainSearchUL");
	mainUL.setAttribute("class", "level0Search");
	
	var li = createLiTag("mainSearchLI");
	li.setAttribute("class", "level3");
	//var img = createImgTag("mainIMG","/vulkanland/maps/icons/minus.gif");
	
	if (searchCount == 0)
		li.appendChild(document.createTextNode("Ihre Suchanfrage zu '" + searchValue + "' lieferte keine Treffer."));
	else
		li.appendChild(document.createTextNode("Ihre Suchanfrage zu '" + searchValue + "' lieferte " + searchCount + " Treffer."));
	
	mainUL.appendChild(li);
	
	return mainUL;
}

/**
 * setDisplay
 * sets the elements visible or invisble
 */
function setDisplay(elementID, visible)
{
	var element = document.getElementById("searchUL"+elementID);
	var elementHref = document.getElementById("searchNodeHref"+elementID);
	var elementImg  = document.getElementById("searchNodeImg"+elementID);
	
	if (visible == true)
	{
		toggle("unfold", "searchUL"+elementID); 
		elementHref.setAttribute("href","javascript:setDisplay(" + elementID + ", false);");
		elementImg.src = hostFiller + "/images/icons/minus.gif";
	} 
	else
	{
		toggle("fold", "searchUL"+elementID);
		elementHref.setAttribute("href","javascript:setDisplay(" + elementID + ", true);");
		elementImg.src = hostFiller + "/images/icons/plus.gif";
	}
	
}

/**
 * cleanSearchTree
 * clears the divContainer before a new search will be started
 */
function cleanSearchTree(divContainer)
{
	var mainUL = document.getElementById("mainSearchUL");
	var search = document.getElementById("searchCounter");
	
	if (mainUL != null)
		document.getElementById(divContainer).removeChild(mainUL);
	
	if (search)
			document.getElementById(divContainer).removeChild(search);
}
	


/**
 * initializes the tree 
 * and fills it with the first level values
 */
function loadSearchTree(httpObject, divContainer, searchValue)
{
	if (searchValue.length < 3)
	{
		alert("Suchwert muss mindestens 3 Zeichen haben");
		return;
	}
	
	var clientDecoder = new GClientGeocoder();
	clientDecoder.getLatLng(searchValue, callback);
	
	globSearchValue = searchValue;
}


function giveZIndex ()
{
	return -1999;
}
/**
 * gets a point, by adress search
 */
function callback(point)
{
	setLoad(true);
 	clearSearch();
 	
 	document.getElementById("searchList").innerHTML = "";
 	
	document.getElementById("searchList").style.backgroundColor = "#ffffff";
	
 	var isPoint = false;
 	if (point != null)
 	{
 		var x = point.lat();
 		var y = point.lng();
 		
 		// in austria ? 
 		if (x > 40 && x < 50 && y > 12 && y < 17)
 		{
 			cityMarker = new GMarker(point, { title: globSearchValue, zIndexProcess:giveZIndex });
 			getMap().addOverlay(cityMarker);
 			getMap().setCenter(point);
 			getMap().setZoom(16);
 			isPoint = true;
 		}
 	}
 	
 	map.setZoom(9);
 	map.returnToSavedPosition();
	
	var url;
	//if (isPoint)
	url = hostFiller + "/xml/searchXML.php?search=" + encodeURIComponent(globSearchValue) + "&strict=0";
	//else
	//	url = "/vulkanland/maps/xml/searchXML.php?search=" + encodeURIComponent(globSearchValue) + "&strict=0";

	httpObject = getHTTPObject();
	httpObject.open("GET",url, true);
	
	// give object a modified date to send more request on one instance
	httpObject.setRequestHeader("If-Modified-Since","Sat, 1 Jan 2000 00:00:00 GMT");
	d = new Date();
	t = d.getTime();
	thetimestring=t.toString(10);
	
	//httpObject.send(null);
	httpObject.send(thetimestring);

	// event listener for readystatechanged
    httpObject.onreadystatechange = function() {
    // readyState 4 => open
    // status 200 => everything is ok
    if (httpObject.readyState == 4) {
		if (httpObject.status == "200") {
  			// read the xml
  		var xml = httpObject.responseXML;
			var docRoot = xml.getElementsByTagName("result");
			
			var mainUL = createMainSearchUL(globSearchValue, xml.getElementsByTagName("searchCount")[0].lastChild.nodeValue);
			
			// create new ul tag
			var ul = document.createElement("ul");
			ul.setAttribute("class","level1");
			
			var resultCounter = 0;
			var searchArr = [];
			var arrCounter = 0;
			var ulCounter = 0;
			
			for(var i=0; i < docRoot.length; i++)
			{	
				var katName = docRoot[i].getElementsByTagName("catName")[0].lastChild.nodeValue;
				var katSymbol = docRoot[i].getElementsByTagName("bild")[0].lastChild.nodeValue;
				var katID = docRoot[i].getElementsByTagName("katID")[0].lastChild.nodeValue;
				
				var li = createLiTag("searchnode");
				li.setAttribute("class","level1");
				catSymbolArray[katID] = katSymbol;
				
				if (docRoot[i].getElementsByTagName("inst").length > 0)
				{
					var institutions = docRoot[i].getElementsByTagName("inst");
					var underUL = document.createElement("ul");
					underUL.setAttribute("class", "level3");
					
					underUL.setAttribute("id", "searchUL"+i);
					toggle("fold", "searchUL"+i);
					
					for (z = 0; z < docRoot[i].getElementsByTagName("inst").length ; z++)
					{
						if (arrCounter % 10 == 0)
						{
							mainUL.appendChild(ul);
							ul = document.createElement("ul");
							ul.setAttribute("id", "page" + ++ulCounter);
						}
						var name = institutions[z].getElementsByTagName("name")[0].lastChild.nodeValue;
					
						var laenge = institutions[z].getElementsByTagName("x")[0].lastChild.nodeValue
						var breite = institutions[z].getElementsByTagName("y")[0].lastChild.nodeValue
						var instID = institutions[z].getElementsByTagName("instID")[0].lastChild.nodeValue
						
						var underLI = createLiTag("searchnode2");
						underLI.setAttribute("class", "level3");
						
						var a;
						++resultCounter;
						if (katID >= 120 && katID <= 127) // wanderweg
							a = createHrefTag("javascript:setTrail(" + instID + ",0);", "searchHref"+i);
						else
							if (katID == 301 ) // radweg
								a = createHrefTag("javascript:setCycle(" + instID + ",false);", "searchHref"+i);
							else
								a = createHrefTag("javascript:setSearchLocation(" + instID + "," + katID + "," + (resultCounter) +",17);", "searchHref"+i);
						
						a.setAttribute("class", "searchAhref");	
						
						var img = document.createElement("img");
						img.src = hostFiller + "/images/icons/markerImage.php?text=" + resultCounter + "&iconset=tree";
						
						var checkbox;
						if ((katID < 120 || katID > 127) && katID != 301) // wanderweg und radweg
							checkbox = createSearchCheckBox(instID, katID, resultCounter, "visible");
						else
							checkbox = createSearchCheckBox(instID, katID, resultCounter, "hidden");
							
						underLI.appendChild(checkbox);
						a.appendChild(img);
						a.appendChild(document.createTextNode(name));		

						underLI.appendChild(a);
						ul.appendChild(underLI);
						
						searchArr[arrCounter++] = instID;
					}
					li.appendChild(underUL);
				}
				
				ul.appendChild(li);
			}
			
			mainUL.appendChild(ul);
			document.getElementById("searchList").appendChild(mainUL);
			
			document.getElementById("searchList").appendChild(getSearchViewList(ulCounter));
			for(i=0; i < docRoot.length; i++)
				toggle("fold", "searchUL"+i);
			
			setSearchLocationArr(searchArr, globSearchValue);
			
			/*
			for (i = 0; i < 5000; i++)
			{
				var element = document.getElementById("cbKat" + i);
				if (element)
					element.checked = false;
			}
			*/
			setLoad(false);
		} 
	  }  
   	}
 }


/**
 * creates the paged view for the searchlist
 */
function getSearchViewList(ulCounter)
{
	var p = document.createElement("p");

	if (ulCounter <= 1)
		return p;
	
	for (var i = 2; i <= ulCounter; i++)
	{
		toggle("fold", "page" + i); 
	}
	
	p.setAttribute("id", "searchCounter");
	for (i = 1; i <= ulCounter; i++)
	{
		var a = document.createElement("a");
		a.setAttribute("href", "javascript:setPage(" + i + "," + ulCounter + ");");
		a.appendChild(document.createTextNode(" " + i + " "));
		p.appendChild(a);
	}
	
	
	return p;
}

/**
 * sets the clicked page in the result search view list
 */
function setPage(pageNr, maxPage)
{
	document.getElementById("searchList").scrollTop = 0;
	for (i = 1; i <= maxPage; i++)
	{
		if (pageNr == i)
			toggle("unfold", "page" + i);
		else
			toggle("fold", "page" + i );
	}
}
