/**
*
*	JavaScript que controla les funcions de cerca 
*	i centrat dels resultats de la cerca
*	
*/

var RemarcadorCerques;
var bombollaInfo;

var idCapaInfos = 8;	//Id de la capa sobre la que es fa info, es fa servir a
						//les funcions showInfoPoligon i showInfoMunicipi per llenįar una 
						//peticiķ identify sense fer click al mapa

var htmlLoading = "<center><div><img src='img/loading.gif' style='margin-top:80px;'/></div><div style='margin-top:10px;font-weight:bold;color:#A60033;'>Carregant...</div></center>";

//Inicialitza els combos de cerca
function inicialitzaCerca(){
		if (typeof(document.getElementById('selectComarques')) == 'undefined' || typeof(arrCarregats) == 'undefined' ||  arrCarregats == null ||  typeof($('#selectComarques')[0]) == 'undefined'  ) {
			setTimeout("inicialitzaCerca();",400);
			return;
		}

		carregaSelect("selectComarques", arrCom, 0, 1);
		carregaSelect("selectMunicipis", arrMun, 0, 1);
		carregaSelect("selectPoligons", arrPol, 0, 1);

		$('#selectComarques').select_autocomplete({max:50,showremovebutton:true,minChars: 0,onSelect: canviComarca});
		$('#selectMunicipis').select_autocomplete({max:200,showremovebutton:true,minChars: 0,onSelect: canviMunicipi});
		$('#selectPoligons').select_autocomplete({max:1000,showremovebutton:true,minChars: 0,onSelect: canviPoligon});
		
		creaQTip('#inputselectComarques[title]','rightTop','leftBottom');
		creaQTip('#inputselectMunicipis[title]','rightTop','leftBottom');
		creaQTip('#inputselectPoligons[title]','rightTop','leftBottom');
		creaQTip('#btnImprimir[title]','rightTop','leftBottom');
}

//Fa una peticiķ d'info fixada a la capa del municipi
//a partir de les coordenades que es passen per parāmetre
function showInfoMunicipi(municipix,municipiy) {
	var pixel = map.getPixelFromLonLat(new OpenLayers.LonLat(municipix,municipiy));
	var layer;
	layer=this.map.layers[idCapaInfos];
	if(layer.name != "recursos") alert("idCapaInfos incorrecte");
	var url =  layer.getFullRequestString({
			REQUEST: "GetFeatureInfo",				
			BBOX: this.map.getExtent().toBBOX(),
			X: pixel.x,
			Y: pixel.y,
			INFO_FORMAT: "gml",
			EXCEPTIONS: "application/vnd.ogc.se_xml",
			LAYERS: "municipis,pg_tae_muni_act,pg_tae_muni_pot",
			QUERY_LAYERS: "municipis,pg_tae_muni_act,pg_tae_muni_pot",
			FEATURE_COUNT: 99,
			WIDTH: this.map.size.w,
			HEIGHT: this.map.size.h
		},url
	);
	map.controls[1].maximizeControl();
	$('#resultatsinfo').html(htmlLoading);
	$('#resultatsinfo').load(url,function() {
		 map.controls[1].minimizeControl();
		 $('#dialegInfo').dialog('destroy');
		 $('#dialegInfo').dialog({width:610,maxHeight:800,resizable:false,position: [250,190],show: 'drop'});
		 $('#dialegInfo').dialog('open');
	});
}

//Fa una peticiķ d'info fixada a la capa dels poligons
//a partir de les coordenades que es passen per parāmetre
function showInfoPoligon(poligonx,poligony) {
	var pixel = map.getPixelFromLonLat(new OpenLayers.LonLat(poligonx,poligony));
	var layer;
	layer=this.map.layers[idCapaInfos];
	var url =  layer.getFullRequestString({
			REQUEST: "GetFeatureInfo",				
			BBOX: this.map.getExtent().toBBOX(),
			X: pixel.x,
			Y: pixel.y,
			INFO_FORMAT: "gml",
			EXCEPTIONS: "application/vnd.ogc.se_xml",
			LAYERS: "gpoligons",
			QUERY_LAYERS: "gpoligons,municipis",
			FEATURE_COUNT: 99,
			WIDTH: this.map.size.w,
			HEIGHT: this.map.size.h
		},url
	);
	map.controls[1].maximizeControl();
	$('#resultatsinfo').html(htmlLoading);
	$('#resultatsinfo').load(url,function() {
		 map.controls[1].minimizeControl();
		 $('#dialegInfo').dialog('destroy');
		 $('#dialegInfo').dialog({width:610,maxHeight:800,resizable:false,position: [250,190],show: 'drop'});
		 $('#dialegInfo').dialog('open');
	});
}

//Fa una peticiķ getFeature que es tracta amb la mateixa plantilla xsl que el getfeatureinfo
function ClickRecursMunicipi(IdTema,CampId,IdRecurs) {
	 var url = wfsRequestFilter
				.replace('[ID_TEMA]',IdTema)
				.replace('[FIELD_NAME]',CampId)
				.replace('[FIELD_VALUE]',escape(IdRecurs));
	map.controls[1].maximizeControl();
	$('#resultatsinfo2').html(htmlLoading);
	$('#resultatsinfo2').load(url,function() {
		 map.controls[1].minimizeControl();
		 $('#dialegInfo2').dialog('destroy');
		 $('#dialegInfo2').dialog({width:610,height:320,resizable:false,position: 'right',show: 'slide'});
		 $('#dialegInfo2').dialog('open');
	});
}

//Mostra un diāleg per les images de les infraestructures de Serveis
function ClickInfraServeis(url){
		$('#resultatsinfo2').html("<img src='" + url + "' alt='" + url + "'/>");
	//$('#resultatsinfo2').html(url,function() {
		 map.controls[1].minimizeControl();
		 $('#dialegInfo2').dialog('destroy');
		 $('#dialegInfo2').dialog({width:500,height:480,resizable:false,position: 'right',show: 'slide'});
		 $('#dialegInfo2').dialog('open');
	//});
}

//Centra a una comarca a partir del seu id
function centraComarca(IdComarca){
	var comarca = getComarcaById(IdComarca);
	var bounds = new OpenLayers.Bounds(comarca[4],comarca[5], comarca[6], comarca[7]); 
	map.zoomToExtent(bounds);
	RemarcarComarca(IdComarca);
	var htmlContent = comarca[1];
	addBombollaInfo(htmlContent, comarca[2],comarca[3]);
}


//centra a un municipi a partir del seu id
function centraMunicipi(IdMunicipi){
	var municipi = getMunicipiById(IdMunicipi);
	var bounds = new OpenLayers.Bounds(municipi[5],municipi[6], municipi[7], municipi[8]); 
	map.zoomToExtent(bounds);
	RemarcarMunicipi(IdMunicipi);
	var htmlContent = municipi[1] + "<p style='padding-top:5px'><a href='#' onclick='showInfoMunicipi(" + municipi[3] + "," + municipi[4] + ")' >Veure fitxa</a></p>";
	addBombollaInfo(htmlContent, municipi[3],municipi[4]);
}

//centra a un poligon a partir del seu id
function centraPoligon(IdPoligon){
	var poligon = getPoligonById(IdPoligon);
	var bounds = new OpenLayers.Bounds(poligon[6],poligon[7], poligon[8], poligon[9]); 
	map.zoomToExtent(bounds);
	var centreX = parseInt(poligon[6]) + ((parseInt(poligon[8])-parseInt(poligon[6]))/2);
	var centreY = parseInt(poligon[7]) + ((parseInt(poligon[9])-parseInt(poligon[7]))/2);
	RemarcarPoligon(IdPoligon);
	var htmlContent = poligon[1] + "<p style='padding-top:5px'><a href='#' onclick='showInfoPoligon(" + poligon[4] + "," + poligon[5] + ")' >Veure fitxa</a></p>";
	addBombollaInfo(htmlContent, centreX,centreY);
}


//Event que es produeix en triar una comarca del suggest
function canviComarca(){
	esborraBombollaInfo();
	$('#inputselectMunicipis').remove();		// Esborrem els inputs i les imatges
	$('#imgselectMunicipis').remove();			// per tornar a recarregar
	$('#inputselectPoligons').remove();			// el combos de Municipi i Poligon a
	$('#imgselectPoligons').remove();			// partir de la nova comarca
	var IdComarca = $('#selectComarques').val();
	if(IdComarca >= 0){
		filtraMunicipisByComarca(IdComarca);
		filtraPoligonsByComarca(IdComarca);
		centraComarca(IdComarca);	//Si hem triat un el centrem	
	}else{
		carregaSelect("selectMunicipis", arrMun, 0, 1);
		carregaSelect("selectPoligons", arrPol, 0, 1);
		RemarcadorCerques.clearLayers();			//En cas contrari esborrem la selecciķ anterior
	}
	$('#selectMunicipis').select_autocomplete({max:200,showremovebutton:true,minChars: 0,onSelect: canviMunicipi});		//Refem els autocomplete amb les noves
	$('#selectPoligons').select_autocomplete({max:1000,showremovebutton:true,minChars: 0,onSelect: canviPoligon});		//dades que tenen els select html
	creaQTip('#inputselectMunicipis[title]','rightTop','leftBottom');
	creaQTip('#inputselectPoligons[title]','rightTop','leftBottom');
}

//Event que es produeix en triar un municipi del suggest
function canviMunicipi(){
	esborraBombollaInfo();
	$('#inputselectPoligons').remove();			// Esborrem els inputs i les imatges per tornar a recarregar
	$('#imgselectPoligons').remove();			// el combo de Poligons a partir del nou municipi
	var IdMunicipi = $('#selectMunicipis').val();
	if(IdMunicipi>=0){									//Si hi ha triat un municipi vālid
		filtraPoligonsByMunicipi(IdMunicipi);			//recarreguem el select dels poligons filtrant per municipi
		centraMunicipi($('#selectMunicipis').val());	//centrem al municipi
	}else{
		var IdComarca = $('#selectComarques').val();
		if(IdComarca >=0){								//Si hi ha triada una comarca vālida
			filtraPoligonsByComarca(IdComarca);			//recarreguem el select dels poligons filtrant per comarca
		}else{
			carregaSelect('selectPoligons',arrPol,0,1); //Carreguem tots els poligons
		}
		RemarcadorCerques.clearLayers();				//En cas contrari esborrem la selecciķ anterior
	}
	$('#selectPoligons').select_autocomplete({max:1000,showremovebutton:true,minChars: 0,onSelect: canviPoligon});
	creaQTip('#inputselectPoligons[title]','rightTop','leftBottom');
}

//Event que es produeix en triar un poligon del suggest
function canviPoligon(){
	esborraBombollaInfo();
	if($('#selectPoligons').val() != -1){
		centraPoligon($('#selectPoligons').val());		//Si hem triat un el centrem		
	}else{
		RemarcadorCerques.clearLayers();				//En cas contrari esborrem la selecciķ anterior
	}
}

//Afegeix una bombolla d'informaciķ les coordenades i contingut que es 
//passa per parāmetre
function addBombollaInfo(HtmlContent,CoordX,CoordY) {
	var size = new OpenLayers.Size(16,16);
	var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
	var icon = new OpenLayers.Icon("",size,offset);
	bombollaInfo = new OpenLayers.Popup.FramedCloud("theid",
									new OpenLayers.LonLat(CoordX,CoordY),
									new OpenLayers.Size(200,200),//contentSize
									HtmlContent,
									icon,
									true,//closebox
									esborraBombollaInfo//closebox callback
	);
	map.addPopup(bombollaInfo);
}

//Esborra la bombolla amb la info resultant de la cerca anterior
function esborraBombollaInfo() {
	if(bombollaInfo != null && typeof(bombollaInfo) != 'undefined'){
		map.removePopup(bombollaInfo);
		RemarcadorCerques.clearLayers();			//En cas contrari esborrem la selecciķ anterior
	}
}

//Remarca una feature
function RemarcarFeature(serviceIdProp, paramNameProp, paramValueProp, paramLayersProp, Camp,Valor) {
	if (!RemarcadorCerques) RemarcadorCerques=new OpenLayers.NGSearchHighlight({map:map});

	var serviceId=treeContent.properties[serviceIdProp];
	var paramName=treeContent.properties[paramNameProp];
	var paramValue=treeContent.properties[paramValueProp];
	if(typeof(paramValue) == 'undefined' || paramValue.length == 0){
		paramValue=treeContent.properties["search.sld_paramvalue"];
	}
	var layers=treeContent.properties[paramLayersProp];
	
	paramValue=paramValue.replace("[LAYERNAME]",layers);
	paramValue=paramValue.replace("[PARAM]",Camp);
	paramValue=paramValue.replace("[VALUE]",Valor);

	var parameters={layers: layers, transparent:"true"};
	parameters[paramName]=paramValue;
	RemarcadorCerques.highlight(serviceId,parameters);
}

//Remarca una Comarca
function RemarcarComarca(IdComarca) {
	RemarcarFeature("search.comarca.sld_service","search.comarca.sld_paramname","search.comarca.sld_paramvalue","search.comarca.sld_layers","COMARCA",IdComarca);
}

//Remarca un Poligon
function RemarcarPoligon(IdPoligon) {
		RemarcarFeature("search.poligon.sld_service","search.poligon.sld_paramname","search.poligon.sld_paramvalue","search.poligon.sld_layers","CodiPolInd",IdPoligon);
}

//Remarca un Municipi
function RemarcarMunicipi(IdMunicipi) {
	RemarcarFeature("search.municipi.sld_service","search.municipi.sld_paramname","search.municipi.sld_paramvalue","search.municipi.sld_layers","CODI_MUNIC",IdMunicipi);
}

//Mostra la finstra d'indicadors del municipi
function veureIndicadors(idMunicipi) {
	 $('#resultatsIndicadors')[0].src="http://www.diba.cat/hg2/simae/informe.asp?codiine=" + idMunicipi;
	 $('#resultatsIndicadors').show();
	 $('#dialegIndicadors').dialog('destroy');
	 $('#dialegIndicadors').dialog({width:640,height:610,resizable:true,maxWidth:640,minWidth:640,position: 'right',show: 'drop'});
 	 $('#dialegIndicadors').dialog('open');
	//	open("http://www.diba.cat/hg2/simae/informe.asp?codiine=" + idMunicipi, "Document", "scrollbars=yes, status=no, directories=no, toolbar=no, menubar=no, width=630, height=600, left=300, top=300");
}

//Mostra la finstra la imatge indicada (del TOC)
function veureImg(img) {
	$('#resultatsinfo2').html("<img src='" + img + "' alt='" + img + "'/>");
	$('#dialegInfo2').dialog('destroy');
	$('#dialegInfo2').dialog({width:500,height:480,resizable:false,position: [250,150],show: 'slide'});
	$('#dialegInfo2').dialog('open');
}

//Aplica un filtre al select de municipis
function filtraMunicipisByComarca(IdComarca) {
	var arrFiltrat = filtraArray(arrMun,2,IdComarca);
	carregaSelect('selectMunicipis',arrFiltrat,0,1);
}

//Aplica un filtre al select de poligons a partir del municipi
function filtraPoligonsByMunicipi(IdMunicipi) {
	var arrFiltrat = filtraArray(arrPol,3,IdMunicipi);
	carregaSelect('selectPoligons',arrFiltrat,0,1);
}

//Aplica un filtre al select de poligons a partir de la comarca
function filtraPoligonsByComarca(IdComarca) {
	var arrFiltrat = filtraArray(arrPol,2,IdComarca);
	carregaSelect('selectPoligons',arrFiltrat,0,1);
}

//Torna un array filtrat per el camp posCampCerca de cada una la dimensions
function filtraArray(fArray,posCampCerca,ValorCerca) {
	arr = jQuery.grep(fArray, function(element, index){
	  return (element[posCampCerca] === ValorCerca);
	});
	return arr;
}

// Emplena un select a partir d'un array, i les posicions dels camps dins de l'arryque ha 
//de fer servir com a index del select i com a valor del select
function carregaSelect(IdSelect, NouArray, posCampIndex, posCampDesc) {
	$('#'+IdSelect+' option').remove();	//Esborra les opcions del select actual
	var select = $('#' + IdSelect + '')[0];
	select.appendChild(creaOptionNode(-1,""));	//Afegim una opciķ buida
	for (idItem in NouArray)
			if(typeof(NouArray[idItem]) != 'undefined' && typeof(NouArray[idItem][posCampIndex]) != 'undefined' )
			select.appendChild(creaOptionNode(NouArray[idItem][posCampIndex],NouArray[idItem][posCampDesc]));

}

//Torna el primer element de l'array de comarques
//que compleix l'IdComarca que es passa per parāmetre
function getComarcaById(IdComarca){
	var comarca = filtraArray(arrCom,0,IdComarca)[0];
	return comarca;
}

//Torna el primer element de l'array de municipis
//que compleix l'IdMunicipi que es passa per parāmetre
function getMunicipiById(IdMunicipi){
	var municipi = filtraArray(arrMun,0,IdMunicipi)[0];
	return municipi;
}

//Torna el primer element de l'array de poligons
//que compleix l'IdPoligon que es passa per parāmetre
function getPoligonById(IdPoligon){
	var poligon = filtraArray(arrPol,0,IdPoligon)[0];
	return poligon;
}
