//--------------------------------------------------------------------------
//----------------------------    CERQUES    -------------------------------
//--------------------------------------------------------------------------

/*
	Per afegir un nou element:
	1-modificar ubicar.properties: afegir l'element a cerca.inputs, modificar els select's que es faràn a la bd (all, filtre) i 
		afegir maxfiles (si es vol controlar el nº d'elements q retornarà la bd)
	2-afegir element a l'arrayElements(dropdown.js) i al toc_ubicar.jsp (el nom ha de ser igual que l'hem assignat al ubicar.properties)
	A)SENSE FILLS (ningú depén d'ell)
		3-afegir funció que haurà de cridar (arrayFunctions).
		4-afegir funció del dwr que ha de cridar per retornar tota la taula (arrayDWRTots)
		5-afegir funció del dwr que ha de cridar per retornar la taula filtrada(arrayDWRConcrets)
		6-afegir '' a arrayPare(arrayPare)
		7-afegir el nom del fill a arrayFill(arrayFill)
	B)AMB FILLS (algú depén d'ell)
		3-afegir funció que haurà de cridar (la funció de l'element que depèn d'ell) (arrayFunctions).
		4-afegir pareElement per saber quin es l'id del pare (retorna tots els elements que tenen id=x)(arrayDWRTots)
		5-afegir pareElement per saber quin es l'id del pare (retorna tots els elements que tenen id=x i amb filtre y)(arrayDWRConcrets)
		6-afegir el nom del pare a arrayFill(arrayPare)
		7-afegir '' a arrayFill(arrayFill)
*/
var timeoutId=0;
var timeoutDentro=0;
var letraApretada=true;

var newItem=0;
arrayNumeros=new Array();

//array dels elements
arrayElements	= new Array();
//arrayElements	= ['carrer','portal','nomurb','numpar','refCadastral','sector'];
arrayElements	= ['carrer','portal','refCadastral'];

//array de la funció que ha de cridar (per exemple en aquest cas numero_buscar carga el select de numeros
//i el cargaCoordenadas fa la cerca de les coordenades al mapa i posa el tooltip
arrayFunctions	= new Array();
arrayFunctions	= ['numero_buscar','cargaCoordenadas','cargaCoordenadas'];

//array de les funcions del dwr que retorna tots els elements de la bd.
//pareElement: agafa el id del pare com a paràmetre obligatoria per enviar.
arrayDWRTots	= new Array();
arrayDWRTots	= ['Ubicar.buscaAll','pareElement','Ubicar.buscaAll'];

//array de les funcions del dwr que retorna els elements de la bd que comencen per X
//pareElement: agafa el id del pare com a paràmetre obligatoria per enviar.
arrayDWRConcrets	= new Array();
arrayDWRConcrets	= ['Ubicar.busca','pareElement','Ubicar.busca'];

//Si l'element ha d'agafar l'informació d'un altre element (per exemple portal agafa la info de carrer)
arrayPare	= new Array();
arrayPare	= ['','carrer',''];

//Si la seva informació ha de ser agafar per un altre element (per exemple l'info de carrer ha de ser agafada per portal)
arrayFill	= new Array();
arrayFill	= ['portal','',''];

/**
*    Rep l'event onkeydown i onclick del input
*/
function empezarEditar(menu,element) {
	document.onkeydown = wsTextChanged;

	function wsTextChanged(e) {
		letraApretada=true;				
		var keyCode = (window.event) ? event.keyCode : e.keyCode;

		if(document.getElementById("id"+element)!=null)document.getElementById("id"+element).value="";

		if(keyCode == 0){
			keyCode = (isNN) ? e.which : event.keyCode;
		}		

		if (keyCode==13 || keyCode==9){// enter o tabulador 
			buscarClick(element);
			return;
		}
		if (keyCode==27) return;

		if (keyCode==40){//flecha hacia abajo
			clearTimeout(timeoutId);
			obtenirDades(menu.value);
			clearTimeout(timeoutDentro);
			timeoutDentro = setTimeout ("moverDentroItem('0')", 300);
			return;
		}

		clearTimeout(timeoutId);
		letraApretada=false;
		timeoutId = setTimeout ("activarEventoS()", 2000);
	}
}

function moverDentroItem(elem,div) {

	if(elem=="0"){
		wsCurrentSelId=0;
		document.getElementById("wsResult_"+wsCurrentSelId).style.backgroundColor=colorItemMouseOverBackground;
		document.getElementById("wsResult_"+wsCurrentSelId).style.color=colorItemMouseOverText;

		document.getElementById("div"+elementCerca).focus();
		document.onkeydown = eventKeyDown;
	}else{
		document.getElementById("input"+elementCerca).focus();
		
		empezarEditar();
	}

}

function activarEventoS(){
	if(!letraApretada){
		document.onkeypress = null;
		document.onkeydown = null;
		newItem=0;
		document.getElementById("buscar"+elementCerca).src="img/wait.gif";
		document.getElementById("div"+elementCerca).innerHTML="Cercant ... ";
		document.getElementById("div"+elementCerca).style.height="50px";
		var option=document.getElementById("input"+elementCerca);	
		obtenirDades(option.value);
	}
}

/*
	Retorna el nom de la funcio que utilitza l'element 
	array: variable que ens indica dins de quien array hem de buscar.
*/
function obtenirElement(array){

	var trobat = false;
	var posicioArray = 0; //la posicio de l'element dins de l'array.
	for(i=0; i<arrayElements.length && !trobat; i++){
		if(arrayElements[i]==elementCerca){
			trobat = true;
			posicioArray = i;
		}
	}
	return array[posicioArray];

}

// currently selected div id
var wsCurrentSelId=-1;


/**
*    Adds a new item to the dropdown list
*/
function getHtmlNewItem(id,text,title,tipusNum) {
	newItem++;
	var str='';

	document.getElementById("buscar"+elementCerca).src="img/lupa.gif";
	arrayNumeros[id]=id;

	var auxiliar=obtenirElement(arrayFunctions);
//	var tipusNum=false;
//	if(elementCerca=="portal")tipusNum=true;

	var aux= parseInt(id)%(parseInt(2))==0;//per pintar les files de diferents colors

	if(aux){
		str+='<div id="wsResult_'+id+'" onkeydown="moverDentroItem();" onMouseOver="javascript:resultMouseOver('+id+');" txt="'+text+'" onClick="javascript:'+auxiliar+'('+id+','+tipusNum+');" class="treeGroupTitle" style="background-color:'+colorItemColum1+'; text-overflow:ellipsis;overflow:hidden;white-space:nowrap; width:160px; cursor:pointer;" class="treeLevelTitle" title="'+title+'"><img src="img/blanc.gif" width="5px" height="1px"/>'+text+'<img src="img/blanc.gif" width="5px" height="1px"/></div>';
	}else{
		str+='<div id="wsResult_'+id+'" onkeydown="moverDentroItem();" onMouseOver="javascript:resultMouseOver('+id+');" txt="'+text+'" onClick="javascript:'+auxiliar+'('+id+','+tipusNum+');" class="treeGroupTitle" style="background-color:'+colorItemColum2+'; text-overflow:ellipsis;overflow:hidden;white-space:nowrap; width:160px; cursor:pointer;" class="treeLevelTitle" title="'+title+'"><img src="img/blanc.gif" width="5px" height="1px"/>'+text+'<img src="img/blanc.gif" width="5px" height="1px"/></div>';
	}
	return str;
}

/**
*    Receives mouse over event
*/
function resultMouseOver(divId) {

	var divObj_new=document.getElementById("wsResult_"+divId);
	if (divObj_new==null) 		return;

	divObj_new.style.backgroundColor=colorItemMouseOverBackground;
	divObj_new.style.color=colorItemMouseOverText;
	
	if (wsCurrentSelId>-1) {
		var divObj_old=document.getElementById("wsResult_"+wsCurrentSelId);
		if(divObj_old == null)divObj_old=document.getElementById("wsResult_0");
		var aux= parseInt(wsCurrentSelId)%(parseInt(2))==0;//pinta files diferents colors
		if(aux)divObj_old.style.backgroundColor=colorItemColum1;
		else divObj_old.style.backgroundColor=colorItemColum2;
		divObj_old.style.color=colorTextItem;
	}
	wsCurrentSelId=divId;
}

/**
*    Hides the dropdown div
*/
function resultHide() {
	try {
		var obj="";

		obj=document.getElementById("div"+elementCerca);
		obj.style.height="0px";
		//obj.style.visibility="hidden";
		obj.style.display="none";
		obj.innerHTML="";
		newItem=0;
		// Assign event to  handle keys pressed.
		document.onkeydown=null;

		//per solucionar problema IE6 amb els selects que no s'amagen.
	//	visibleSelec();	
	}
	catch (e) {
	//	alert("Error a resultHide()\n: "+e.message+"\nlinia:"+e.line);//todo
	//	errorHandler(e);

	}
}

/**
*    Shows the dropdown div
*/
function resultShow(htmlCode) {
	var obj="";

	obj=document.getElementById("div"+elementCerca);
	var pos=findPosY(document.getElementById("input"+elementCerca));

	obj.style.top=pos+18+"px";
	if ((navigator.appName).indexOf("Microsoft")!=-1 && (navigator.appVersion).indexOf(6.)!=-1)
		obj.style.left="25px";
	obj.style.height="120px";	
	obj.style.visibility="visible";
	obj.style.display="block";
	obj.innerHTML=htmlCode;

	// Assign event to  handle keys pressed.
	document.onkeydown=eventKeyDown;

	//per solucionar problema IE6 amb els selects que no s'amagen.
//	hiddenSelec();
    

}

/**
*    Processes the key down events
*/
function eventKeyDown(e) {
	

	var KeyID = (window.event) ? event.keyCode : e.keyCode;
	var newId=-1;
	//alert(KeyID);
	switch(""+KeyID) {
		case "38":	//up
			newId=wsCurrentSelId-1;
			
			if (newId>=0 ) resultMouseOver(newId);
			else{ //canvi del select al input text
				moverDentroItem(newId);
				document.getElementById("wsResult_0").style.backgroundColor=colorItemMouseOverText;
				document.getElementById("wsResult_0").style.color=colorTextItem;
			}
			break;

		case "40":	//Down
			newId=wsCurrentSelId+1;

			if (newId>=0 ) resultMouseOver(newId);
			break;

		case "13":	//Enter
			newItem=0;
			var auxiliar=obtenirElement(arrayFunctions);
			var elemNum=obtenirElement(arrayPare);
			if(elemNum!="")elemNum=true;
			else elemNum=false;
			eval(auxiliar+"("+arrayNumeros[wsCurrentSelId]+","+elemNum+")");

			break;

		case "9":	//Tab
			newItem=0;
			var auxiliar=obtenirElement(arrayFunctions);
			var elemNum=obtenirElement(arrayPare);
			if(elemNum!="")elemNum=true;
			else elemNum=false;
			eval(auxiliar+"("+arrayNumeros[wsCurrentSelId]+","+elemNum+")");
			break;

		case "27":	//Esc
			resultHide();
			break;
	}

}



var coordX = 0;var coordY = 0;

//missatges dels inputs
var buscarTexto="Cercar...";
var sinCandidatos="Sense candidats...";
var buscarNum="Escull un número...";
var elementCerca="carrer";//element que esta actualment agafat

/* 
	Centre les coordenades al mapa (busqueda de carrers/numero) 
	element: el nom final del element. Cal anomenar el div i l'input amb el tipus que es i darrera el nom
		de l'element, per exemple inputcarrer i pasem a cercar('carrer')
*/
function cercar(element){
	var o = new Object();
	
	var selec=document.getElementById("input"+element);
	if(selec.value==buscarTexto || selec.value==sinCandidatos || selec.value==buscarNum)selec.value = "";

	if(elementCerca!=element && elementCerca!=""){

		obj=document.getElementById("div"+elementCerca);
		if(obj!=null){
			obj.style.height="0px";
			obj.style.visibility="hidden";
			obj.innerHTML="";
			newItem=0;
		}
	}

	elementCerca=element;
	empezarEditar(selec,element);
}

function buscarClick(element){
	clearTimeout(timeoutId);
	resultHide();

	document.getElementById("buscar"+element).src="img/wait.gif";

	var text=document.getElementById("input"+element).value;

	elementCerca=element;
	if(text==buscarTexto || text==sinCandidatos )text = "";
	obtenirDades(text);
	clearTimeout(timeoutDentro);
	timeoutDentro = setTimeout ("moverDentroItem('0')", 300);
}


/*
	Fa la crida DWR
*/
function obtenirDades(text) {	
	var elem=obtenirElement(arrayElements);

	if(text==""){
		var auxiliar=obtenirElement(arrayDWRTots);
	//	var auxiliar="Ubicar";

		eval(auxiliar+"(elem,"+carga+")");
		//Ubicar.busca("carrer",carga);
	}else{
		var auxiliar=obtenirElement(arrayDWRConcrets);
		cadena=new Array();
		cadena[0]=text;
		eval(auxiliar+"(elem,cadena,"+carga+")");
	}
}

copiaData = new Array();
copiaDataCadastre = new Array();
copiaDataNumero = new Array();
var infoMostrar = "";//el que mostrarem al tooltip
/*Aquesta copia la creem per si tenim seleccionat la primera cerca (que carrega el select num) i després seleccionem
un altre tipus de cerca, al clicar a sobre un número mostri l'informació correctament*/
var infoMostrarCopia = "";//el que mostrarem al tooltip


function carga(data){
	var i=0;		
	copiaData=data;
	var str="";
	if(data.length<="0"){ 
			str=getHtmlNewItem("0","Sense candidats ...", "Sense candidats ...", false);
	}else{
		for(i=0;i<data.length;i++){
			var cadena=data[i][1];
			str+=getHtmlNewItem(i,cadena, cadena, false);
		}
	}
	resultShow(str);
}

function pareElement(){
	var auxiliar=obtenirElement(arrayPare);
	var id="";
	if(auxiliar!=""){
		id=document.getElementById("id"+auxiliar).value;
		var input= document.getElementById("input"+elementCerca).value;
		if(id!=""){
			if(input==buscarNum)input = "";
			cadena=new Array();
			cadena[0]=id;
			cadena[1]="";
			if(input!="")cadena[1]=input;

			//Ubicar.busca("portal",cadena,cargaNumero);
			Ubicar.busca(elementCerca,cadena,cargaNumero);
		}else{
			alert("Cal fer la cerca per "+auxiliar+" primer.");

			document.getElementById("buscar"+elementCerca).src="img/lupa.gif";
		}
	}
}

function numero_buscar(id) {
	resultHide();
	numCarrer=copiaData[id][0];
	infoMostrar=copiaData[id][1];
	arrayInfo=infoMostrar.split(",");

	document.getElementById("input"+elementCerca).value=arrayInfo[0];
	document.getElementById("id"+elementCerca).value=copiaData[id][0];
	if (typeof(arrayInfo[1])=='undefined'){//per si no tenim article
		infoMostrar=arrayInfo[0];
		infoMostrarCopia=infoMostrar;
	}else{
		infoMostrar=arrayInfo[1]+ " " +arrayInfo[0];
		infoMostrarCopia=infoMostrar;
	}
	cadena=new Array();
	cadena[0]=numCarrer;
	cadena[1]="";

	elementCerca=obtenirElement(arrayFill);
	Ubicar.busca(elementCerca,cadena,cargaNumero);
}

function cargaNumero(data){
	var i=0;
	copiaDataNumero=data;
	document.getElementById("input"+elementCerca).value="Nº...";
	document.getElementById("input"+elementCerca).focus();
	var str="";

	if(data.length<="0"){ 
			str=getHtmlNewItem("0","Sense candidats ...", "Sense candidats ...", true);
	}else{
		for(i=0;i<data.length;i++){
			str+=getHtmlNewItem(i,data[i][1], data[i][1], true);
		}
	}
	resultShow(str);

	coordX=0;	coordY=0;
	if(data.length>"0"){
		coordX = data[0][1];
		coordY = data[0][2];
	}
}

/*
*	Assigna les coordenades i l'informació del tooltip.
*   el valor indica la posició de l'element i elemNum indica (Cert/fals) si la crida la fet el select numeros
*/
function cargaCoordenadas(value,elemNum){
	resultHide();

	//Amaguem previsualització i reestablim escala actual
	hidePrintPreview();
	if(document.getElementById("escala5") != null){
		document.getElementById("escala5").value = "actual";
	}
	if(document.getElementById("printPreviewCheckbox") != null){
		document.getElementById("printPreviewCheckbox").checked = false;
	}


	infoMostrar = "";
	if(elemNum){
		document.getElementById("input"+elementCerca).value=copiaDataNumero[value][1];
		infoMostrar=infoMostrarCopia;
		infoMostrar+=", " + copiaDataNumero[value][1];
		coordX = copiaDataNumero[value][2];
		coordY = copiaDataNumero[value][3];
	}else{
		document.getElementById("input"+elementCerca).value=copiaData[value][1];
		if(copiaData[value][1]!=null)infoMostrar=copiaData[value][1];
		coordX = copiaData[value][2];
		coordY = copiaData[value][3];
	}

	busquedaCoordMapa();
}


/*
	Centra i fa un zoom a les coordenades donades.
	Treu el tooltip.
*/
function busquedaCoordMapa(){
	if(coordX!=0){
		var escala=1000;
		map.pois.clear();
		map.centerAndZoom(new NPoint(coordX,coordY),escala);		
	}
}


function netejaInputs(id) {
	if(id=='idcarrer')
	{
		document.getElementById("inputrefCadastral").value = "Cercar...";
	}
	else if(id=='idrefcadastral')
	{
		document.getElementById("inputcarrer").value = "Cercar...";
		document.getElementById("inputportal").value = "";
	}	
}
