/**
 * Location:	/templates/view/da_DK/default/js/search.js
 * Copyright:	Neist & Felskov, 2009+
 *
 * Author:		Neist & Felskov
 * Mail:		kontakt@nfdesign.dk
 * Web:			www.nfdesign.dk
 *
 ***********
 *
 * Indeholder funktioner til håndtering af livesøgningen.
 */

GlobalSearch={

// Klargør variabler
open:false,		// Angiver om søge-boksen er åben
timer:null,		// Angiver en evt. reference til en søge-timer
uniqID:null,	// Indeholder et unikt ID for den seneste AJAX-forespørgsel

/**
 * init
 *
 **********
 *
 * Klargører den globale søge-boks.
 */
init:function(){
	// Klargør et AJAX-element
	this.ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

	// Sørg for at lukke søgeboksen ved klik
	if(document.attachEvent) document.attachEvent('onclick',GlobalSearch.clear);
	else document.addEventListener('click',GlobalSearch.clear,false);
},

/**
 * search
 *
 **********
 *
 * Kør en AJAX-søgning mod databasen.
 *
 **********
 *
 * Parametre:
 * q (string)							Indeholder den søgning, der skal udføres.
 */
search:function(q){
	// Afbryd evt. igangværende AJAX-kald
	if(this.ajax.readyState!=0) this.ajax.abort();

	// Generer et unikt ID for forespørgslen
	this.uniqID=new Date().getTime()+Math.random();

	// Klargør modtagning af status
	var t=this;
	t.ajax.onreadystatechange=function(){
		// Tjek om hele status er modtaget
		if(t.ajax.readyState==4 && t.ajax.status==200){
			// Indlæs brugerens informationer
			var xml=t.ajax.responseXML.documentElement;

			// Er det den aktuelle søgning, der modtages? - Hvis ikke, ignorerer vi resultatet
			if(t.uniqID!=xml.getElementsByTagName('uniqID')[0].firstChild.nodeValue) return false;

			// Gennemgå resultaterne
			var modules=xml.getElementsByTagName('module');
			var i=modules.length; var j=i; var z=0; var html='';

			if(i>0)do{
				// Indlæs informationerne om resultater fra modulet
				var module=modules[j-i];

				// Indlæs listen over resultater
				var list=module.getElementsByTagName('elements')[0].getElementsByTagName('element');
				var x=list.length; var y=x;

				// Er der nogen resultater for dette modul?
				if(x==0 || z>=5) continue;

				// Tilføj navnet på modulet til titlen
				var count=module.getElementsByTagName('count')[0].firstChild.nodeValue;
				html+='<li class="head"><span>'+count+' resultat'+((count!=1)?'er':'')+'</span>'+module.getElementsByTagName('name')[0].firstChild.nodeValue+(html?'':' <img src="/templates/view/da_DK/default/images/layout/blank.gif" alt="" />')+'</li>';

				// Gennemgå listen over resultater
				if(x>0)do{
					// Udskriv maks 5 resultater
					if(z==5) break;

					// Tilføj til listen
					if(!list[y-x].getElementsByTagName('color1')[0]) html+='<li><a href="'+list[y-x].getElementsByTagName('url')[0].firstChild.nodeValue+'"><div>'+list[y-x].getElementsByTagName('name')[0].firstChild.nodeValue+'</div></a></li>';
					else html+='<li><img src="/templates/view/da_DK/default/images/layout/blank.gif" alt="" style="width:3px; background-color:#'+list[y-x].getElementsByTagName('color1')[0].firstChild.nodeValue+';" /><img src="/templates/view/da_DK/default/images/layout/blank.gif" alt="" style="width:1px; left:3px; background-color:#'+list[y-x].getElementsByTagName('color2')[0].firstChild.nodeValue+';" /><a href="'+list[y-x].getElementsByTagName('url')[0].firstChild.nodeValue+'" style="padding-left:14px; width:301px;" onmouseover="this.style.backgroundColor=\'#'+list[y-x].getElementsByTagName('color1')[0].firstChild.nodeValue+'\';" onmouseout="this.style.backgroundColor=\'#272727\';"><div>'+list[y-x].getElementsByTagName('name')[0].firstChild.nodeValue+'</div></a></li>';
					z++;
				}while(--x);
			}while(--i);

			// Hvis der ikke blev fundet nogen resultater, gør vi opmærksom på dette
			if(html) html+='<li class="bottom"><a href="/sog.html?q='+xml.getElementsByTagName('query')[0].firstChild.nodeValue+'">Vis alle søge resultater</a></li>';
			else html='<li class="none">Ingen resultater fundet... <img src="/templates/view/da_DK/default/images/layout/blank.gif" alt="" /></li>';

			// Vis resultatet af søgningen
			var output=document.getElementById('search').getElementsByTagName('ul')[0];
			output.innerHTML=html;
			output.style.display='block';

			output.offsetParent.style.zIndex='1000';

			// Ryd hukommelsen
			output=null; html=null; list=null; module=null; modules=null; xml=null; ajax=null;
		}
	}

	// Forespørg søgning
	try{q=encodeURIComponent(q); var uniqID=encodeURIComponent(this.uniqID);}catch(e){q=escape(q); var uniqID=escape(this.uniqID);}
	this.ajax.open("GET",document.getElementsByTagName('base')[0].href+"ajax/view/search.php?uniqID="+uniqID+"&q="+q,true);
	this.ajax.send(null);
},

/**
 * clear
 *
 **********
 *
 * Rydder den globale søgning.
 *
 **********
 *
 * Parametre:
 * isFocused (boolean)					Angiver om input-feltet stadig er markeret.
 */
clear:function(isFocused){
	// Ryd kun søgningen, hvis input-feltet ikke længere er markeret
	var src=src=isFocused.srcElement||isFocused.target;
	if(src && src.parentNode && src.parentNode.id!="search"){
		// Fjern indtastet søgestreng
		var tmp=document.getElementById('search').getElementsByTagName('input')[0];	// Indlæs en reference til input-feltet
		tmp.value='Indtast søgeord';												// Indsæt standard-værdien
		tmp=null;																	// Ryd hukommelsen
	}

	// Ryd ID'et på den sidste AJAX-forespørgsel
	this.uniqID='';
	this.isTest=true;

	// Skjul søgningen
	document.getElementById('search').getElementsByTagName('ul')[0].style.display='none';
}

}

// Klargør den globale søge-boks
if(document.getElementById('search')) GlobalSearch.init();
