// JavaScript Document

// LISTA DE CÓDIGOS DE PAÍSES PARA LA BÚSQUEDA
// ESP=ESPAÑA
// PRT=PORTUGAL 
// AND=ANDORRA 
// FRA=FRANCIA
// DEU=ALEMANIA
// AUT=AUSTRIA
// BEL=BELGICA
// SVK=ESLOVAQUIA
// SVN=ESLOVENIA
// FIN=FINLANDIA
// GRC=GRECIA
// NLD=PAISES BAJOS (HOLANDA)
// ITA=ITALIA
// LUX=LUXEMBURGO
// IRL=IRLANDA
var Buscar={'vars':{}, 'textos':{}};

var filtropaises_default="ESP,PRT,AND,FRA,DEU,AUT,BEL,SVK,SVN,FIN,GRC,NLD,ITA,LUX,IRL,GLP,REU,MTQ,FG";

var paises = {
	es: {filtropaises:filtropaises_default},
	ca: {filtropaises:filtropaises_default},
	eu: {filtropaises:filtropaises_default},
	gl: {filtropaises:filtropaises_default},
	en: {filtropaises:filtropaises_default},
	pt: {filtropaises:filtropaises_default},
	fr: {filtropaises:filtropaises_default},
	de: {filtropaises:filtropaises_default},
	sk: {filtropaises:filtropaises_default},
	sl: {filtropaises:filtropaises_default},
	fi: {filtropaises:filtropaises_default},
	el: {filtropaises:filtropaises_default},
	nl: {filtropaises:filtropaises_default},
	it: {filtropaises:filtropaises_default}
}

var qActual='';
var pGeo={total:0,actual:0};
var ultimoCandidato={};

var z_personalizado = null;
var z_real = null;

 
//En esta variable guardamos la última consulta de geolocalización realizada 
//por si nos devuelve más de un candidato y hay que especificar más la búsqueda
var ultimaGeo={}; 

/***********************************************************************************************
 *    Resuelve una petición de geolocalización con los parámetros indicados en el formulario
 ***********************************************************************************************/
function localidadGeocoding()
{		
	var filtroPaises=paises[idioma].filtropaises;
	var busqueda=document.getElementById('fnc').value;	
	qActual=busqueda;	
	//var search={countryId:null,country:null,city:null,subOrRegion:null,municipality:null,num:100};
	
	document.getElementById('emergent_contenido').innerHTML="";		
	pGeo.actual=0;
	pGeo.total=0;						
	
	if (busqueda!='')
	{
		//document.getElementById('btn_geo').innerHTML=msg_buscando;
		document.getElementById('btn_geo').style.display='block';
		var search={countryId:filtroPaises,locn:busqueda};//,poscand:0,num:100};
		cercalia.geocoding(search,retornlocalidadGeocoding);
	}
	else
	{
		alert(msg_ctnd_obligatorio);
	}
}


function retornlocalidadGeocoding(dades)
{	
	pGeo.actual+=1;				
	var body_candidates=document.getElementById('emergent_contenido');
	var emergentObj=document.getElementById('emergent');
	var emergentSombraObj=document.getElementById('emergent_sombra-busqueda');
	//document.getElementById('btn_geo').innerHTML='<a href="javascript:localidadGeocoding();">'+msg_buscando_default+'</a>';
	document.getElementById('btn_geo').style.display='none';
			
	if(dades.error) alert(dades.error.errorText);
	else {
		if (dades.candidates!=null) {
			if (dades.total==1) pGeo.total+=1;
			
			if ( (dades.candidates!=null) && (dades.total==1) ) {					
				var objetivo={x:dades.candidates[0].ge.x,y:dades.candidates[0].ge.y,srs:dades.candidates[0].ge.srs};
				document.getElementById('emergent').style.display='none';
				document.getElementById('emergent_sombra-busqueda').style.display='none';
				var tipodade=tipoCandidato(dades.candidates[0].type);
				var candidate_text=dades.candidates[0].desc;
					var candidate_zoom=tipodade.zoom;
					if ( (tipodade.nombre!='') && (tipodade.nombre!=null) )
						candidate_text+=' ('+tipodade.nombre+')';
				addObjetivo({ctryn:dades.candidates[0].ge.country,regn:dades.candidates[0].ge.region,subregn:dades.candidates[0].ge.subregion,munn:dades.candidates[0].ge.municipality,ctn:dades.candidates[0].ge.city,descn:candidate_text});
			}
			else if ( (dades.candidates!=null) && (dades.total>1) ) {
				//visibilidadSelects('hidden');
				document.getElementById('emergent').style.display='block';
				curvyCorners(cRadius_10,emergentObj);
				document.getElementById('emergent_sombra-busqueda').style.display='block';
				curvyCorners(cRadius_10,emergentSombraObj);

				for(i=0;i< dades.total;i++)
				{
					pGeo.total+=1;
					ul=document.createElement('ul');
					li=document.createElement('li');
					a=document.createElement('a');
					var tipodade=tipoCandidato(dades.candidates[i].type);
					var candidate_text=dades.candidates[i].desc;
					var candidate_zoom=tipodade.zoom;
					if ( (tipodade.nombre!='') && (tipodade.nombre!=null) )
						candidate_text+=' ('+tipodade.nombre+')';
					a.appendChild(document.createTextNode(candidate_text));
					a.href="javascript:addObjetivo({ctryn:'"+dades.candidates[i].ge.country+"',regn:'"+dades.candidates[i].ge.region+"',subregn:'"+dades.candidates[i].ge.subregion+"',munn:'"+dades.candidates[i].ge.municipality+"',ctn:'"+dades.candidates[i].ge.city+"',descn:'"+candidate_text+"'});";
					li.appendChild(a);
					ul.appendChild(li);
					body_candidates.appendChild(ul);
				}
									
			}
		}			
	}
			
}

function quickGeocoding(ctryn,regn,subregn,munn,ctn)
{
	var search={ctryn:null,regn:null,subregn:null,munn:null,ctn:null};

	if ( (ctryn!='null') && (ctryn!=null) && (ctryn!='') ) search.ctryn=ctryn;
	if ( (regn!='null') && (regn!=null) && (regn!='') ) search.regn=regn;
	if ( (subregn!='null') && (subregn!=null) && (subregn!='') ) search.subregn=subregn;
	if ( (munn!='null') && (munn!=null) && (munn!='') ) search.munn=munn;
	if ( (ctn!='null') && (ctn!=null) && (ctn!='') ) search.ctn=ctn;
	
	cercalia.geocoding(search,retornquickGeocoding);
}

function retornquickGeocoding(dades)
{															
	if ( (dades.candidates!=null) && (dades.total==1) ) {					
		var objetivo={x:dades.candidates[0].ge.x,y:dades.candidates[0].ge.y,srs:dades.candidates[0].ge.srs};		
		var separador='';
		var tipodade=tipoCandidato(dades.candidates[0].type);
		var candidate_text='';
		var destino='';
	    if (dades.candidates[0].ge.city!=null) {
			destino=dades.candidates[0].ge.city;
			candidate_text+=dades.candidates[0].ge.city+' (';
		}
		if (dades.candidates[0].ge.municipality!=null) {
			if (destino=='') {
				candidate_text+=dades.candidates[0].ge.municipality+' (';
  		     	destino=dades.candidates[0].ge.municipality;
			}
			else {
				candidate_text+=separador+dades.candidates[0].ge.municipality;
				separador=', ';
			}
		}
   	    if (dades.candidates[0].ge.subregion!=null) {
			if (destino=='') {
				candidate_text+=dades.candidates[0].ge.subregion+' (';
				destino=dades.candidates[0].ge.municipality;
			}
			else {
				candidate_text+=separador+dades.candidates[0].ge.subregion;
				separador=', ';
			}
		}
 	    if (dades.candidates[0].ge.region!=null) {
			if (destino=='') {
				candidate_text+=dades.candidates[0].ge.region+' (';
				destino=dades.candidates[0].ge.region;
			}
			else {				
				candidate_text+=separador+dades.candidates[0].ge.region;
				separador=', ';
			}
		}
		if (dades.candidates[0].ge.country!=null) {
			if (destino=='') { 
				candidate_text+=separador+dades.candidates[0].ge.country;
				separador=', ';
			}
			else {
				candidate_text+=separador+dades.candidates[0].ge.country+') ';
			}
		}
		//if (separador!='') candidate_text+=')';	
		if ( (tipodade.nombre!='') && (tipodade.nombre!=null) )
			candidate_text+=' ('+tipodade.nombre+')';
		addObjetivo({ctryn:dades.candidates[0].ge.country,regn:dades.candidates[0].ge.region,subregn:dades.candidates[0].ge.subregion,munn:dades.candidates[0].ge.municipality,ctn:dades.candidates[0].ge.city,descn:candidate_text},true);
	}	
}


function addObjetivo(point,seo_resultados) {
	if (typeof(seo_resultados)=='undefined') seo_resultados=false;
	
	var obj=document.getElementById('formFiltroAvanzada');
	var emergent=document.getElementById('emergent');
	var selGeo='';
	obj.ctryn.value='';
	obj.regn.value='';
	obj.subregn.value='';
	obj.munn.value='';
	obj.ctn.value='';
	obj.descn.value='';
	ultimaGeo=qActual;
	
	if (emergent) {
		emergent.style.display="none";
		document.getElementById('emergent_sombra-busqueda').style.display='none';
	}
	
	if ( (point.ctryn!='null') && (point.ctryn!=null) && (point.ctryn!='') ) {
		selGeo+=point.ctryn;
		obj.ctryn.value=point.ctryn;
	}
	if ( (point.regn!='null') && (point.regn!=null) && (point.regn!='') ) {
		selGeo+=' - '+point.regn;
		obj.regn.value=point.regn;
	}
	if ( (point.subregn!='null') && (point.subregn!=null) && (point.subregn!='') ) {
		selGeo+=' - '+point.subregn;
		obj.subregn.value=point.subregn;
	}
	if ( (point.munn!='null') && (point.munn!=null) && (point.munn!='') ) {
		selGeo+=' - '+point.munn;
		obj.munn.value=point.munn;
	}
	if ( (point.ctn!='null') && (point.ctn!=null) && (point.ctn!='') ) {
		selGeo+=' - '+point.ctn;
		obj.ctn.value=point.ctn;
	}
	if ( (point.descn!='null') && (point.descn!=null) && (point.descn!='') ) {
		selGeo=point.descn;
		obj.descn.value=point.descn;
	}
	
	if (selGeo!='') {
		document.getElementById('sel_geo').innerHTML='(<a href="javascript:delObjetivo();">'+msg_buscando_quitar+'</a>) '+selGeo;
		if (seo_resultados) document.getElementById('sel_geo_resultados').innerHTML=selGeo;
	}
	
	if (onSubmit) obj.submit();
}

function updateObjetivo() {
	var obj=document.getElementById('formFiltroAvanzada');
	if (obj.fnc.value!='') qActual=obj.fnc.value;
	var selGeo='';
	
	if ( (obj.ctryn.value!='null') && (obj.ctryn.value!='') ) {
		selGeo+=obj.ctryn.value;
	}
	if ( (obj.regn.value!='null') && (obj.regn.value!='') ) {
		selGeo+=' - '+obj.regn.value;			
	}
	if ( (obj.subregn.value!='null') && (obj.subregn.value!='') ) {
		selGeo+=' - '+obj.subregn.value;		
	}
	if ( (obj.munn.value!='null') && (obj.munn.value!='') ) {
		selGeo+=' - '+obj.munn.value;
	}
	if ( (obj.ctn.value!='null') && (obj.ctn.value!='') ) {
		selGeo+=' - '+obj.ctn.value;
	}
	if ( (obj.descn.value!='null') && (obj.descn.value!='') ) {
		selGeo=obj.descn.value;
	}
	else {
		quickGeocoding(obj.ctryn.value,obj.regn.value,obj.subregn.value,obj.munn.value,obj.ctn.value);
	}
	
	if (selGeo!='') {
		document.getElementById('sel_geo').innerHTML='(<a href="javascript:delObjetivo();">'+msg_buscando_quitar+'</a>) '+selGeo;
		document.getElementById('sel_geo_resultados').innerHTML=selGeo;
	}
}

function delObjetivo() {
	var obj=document.getElementById('formFiltroAvanzada');
	obj.fnc.value=obj.fncDefault.value;
	obj.ctryn.value='';
	obj.regn.value='';
	obj.subregn.value='';
	obj.munn.value='';
	obj.ctn.value='';
	obj.descn.value='';
	document.getElementById('sel_geo').innerHTML='&nbsp;';
	qActual='';
}

function hayObjetivo() {
	var obj=document.getElementById('formFiltroAvanzada');	
	var selGeo='';
	
	if ( (obj.ctryn.value!='null') && (obj.ctryn.value!='') ) {
		selGeo+=obj.ctryn.value;
	}
	if ( (obj.regn.value!='null') && (obj.regn.value!='') ) {
		selGeo+=' - '+obj.regn.value;			
	}
	if ( (obj.subregn.value!='null') && (obj.subregn.value!='') ) {
		selGeo+=' - '+obj.subregn.value;		
	}
	if ( (obj.munn.value!='null') && (obj.munn.value!='') ) {
		selGeo+=' - '+obj.munn.value;
	}
	if ( (obj.ctn.value!='null') && (obj.ctn.value!='') ) {
		selGeo+=' - '+obj.ctn.value;
	}
	if ( (obj.descn.value!='null') && (obj.descn.value!='') ) {
		selGeo=obj.descn.value;
	}
	
	if (selGeo!='') return true;
	
	return false;
}


function tipoCandidato(tipo) {
	var objTipo={nombre:'', zoom:3};
	switch (tipo) {
		
		case 'ctry': 
			objTipo= {nombre:pais_txt, zoom:5};
			break;
		
		case 'reg': 
			objTipo= {nombre:region_txt, zoom:5};
			break;
			
		case 'subreg': 
			objTipo= {nombre:subregion_txt, zoom:5};
			break;
			
		case 'mun':
			objTipo= {nombre:municipio_txt, zoom:3};
			break;
			
		case 'ct': 
			objTipo= {nombre:ciudad_txt, zoom:2};
			break;
			
		case 'st': 
			objTipo= {nombre:calle_txt, zoom:1};
			break;
			
		case 'rd': 
			objTipo= {nombre:carretera_txt, zoom:1};
			break;							
	
	}
	
	return objTipo;
}
	   


function esperar()
{
	var loading=document.createElement('div');
	var img=document.createElement('img');
	var text=document.createElement('div');

	loading.id="cargando";
	loading.className="divLoading";   
	loading.style.width="100px";
	
	var divAux = document.createElement("DIV");
	divAux.id="cargandoAux";
	divAux.style.position="absolute";
	divAux.style.width="800px";
	divAux.style.height="525px";
	
	divAux.appendChild(loading);

	document.getElementById("map").appendChild(divAux);

	img.src="img/loading.gif";
	img.className="imgLoading";

	loading.appendChild(img);
	
	text.innerHTML="Calculando...";
	text.style.padding="5px";
	loading.appendChild(text);
	
}

function removeEsperar()
{
	document.getElementById("map").removeChild(document.getElementById("cargandoAux"));		
}


var onSubmit=false;
function buscar() {
	var obj=document.getElementById('formFiltroAvanzada');
	if ( (obj.fnc.value!='') && (obj.fnc.value!=obj.fncDefault.value) && (qActual!=obj.fnc.value) ) {
			onSubmit=true;
			localidadGeocoding();
	}
	else obj.submit();
}
				

function confirmType(type) {
	var obj=document.getElementById('formFiltroAvanzada');
	var check=false;
	if (!obj['chk'+type].checked) {
		for (i=1; i<=numTypes; i++) {
			if ( (i!=type) && (obj['chk'+i].checked) ) {
				check=true;
				break;
			}
		}
		obj['chk'+type].checked=!check;
	}
}

function checkType() {
	var obj=document.getElementById('formFiltroAvanzada');
	var value=obj.chk.value;
	
	jQuery('#z1pp').css('display','none');
	jQuery('#z2pp').css('display','none');
	jQuery('#z3pp').css('display','none');
	jQuery('#z4pp').css('display','none');
	jQuery('#z5pp').css('display','none');
	jQuery('#z6pp').css('display','none');
	jQuery('#z7pp').css('display','none');
	
	if (value==tipos.alojamientorural) {			
			//jQuery('#z1rg').removeAttr('disabled');
			jQuery('#z1rg').multiSelectOptionsEnabled();
			jQuery('#z1np').removeAttr('disabled');
			jQuery('#z1pp').css('display','block');
			getServiciosNodo(105);
	}
	else {
		//jQuery('#z1rg').attr('disabled','disabled');		
		jQuery('#z1rg').multiSelectOptionsDisabled();
		jQuery('#z1np').attr('disabled','disabled');		
		
		if (value==tipos.hotelrural) {
			jQuery('#z2pp').css('display','block');	
			getServiciosNodo(39);
		}
		if (value==tipos.camping) {
			jQuery('#z3pp').css('display','block');	
			getServiciosNodo(53);
		}
		if (value==tipos.restaurante) {
			jQuery('#z4pp').css('display','block');
			getServiciosNodo(217);
		}
		if (value==tipos.aventura) {
			jQuery('#z5pp').css('display','block');
			getServiciosNodo(76);
		}
		if (value==tipos.paravisitar) {
			jQuery('#z6pp').css('display','block');
			getServiciosNodo(823);
		}
		if (value==tipos.saludybelleza) {
			jQuery('#z7pp').css('display','block');
			getServiciosNodo(836);
		}
	}
	
	showZona(value);
	selType=value;
}

function checkEnabled(estado) {
	var obj=document.getElementById('formFiltroAvanzada');
	for (i=1; i<=numTypes; i++) {
		if (estado) obj['chk'+i].disabled=false;
		else obj['chk'+i].disabled=true;
				
		if (obj['chk'+i].checked) {
			showZona(i);
			selType=i;
		}
	}
	
}

function showZona(zona) {
	var obj=document.getElementById('formFiltroAvanzada');
	//actualizarOpcionesZona('fno',zona,1);
	//jQuery('#chkZona'+selType).css('display','none');
	//jQuery('#chkZona'+zona).css('display','block');	
	jQuery('#fno'+selType).css('display','none');
	jQuery('#fno'+zona).css('display','block');	
}

function actualizarOpcionesZona(id,zona,indice) {
	var obj=document.getElementById(id);
	removeOptions(id,indice);
	switch (zona) {
		case 1:
			appendOptionLast(id,{text:numeroplazas_txt, value:indice++});
			appendOptionLast(id,{text:preciopersonadia_txt, value:indice++});
			if (orden<indice) obj.value=orden;
			break;
		case 2:
			appendOptionLast(id,{text:preciopersonadia_txt, value:indice++});
			if (orden<indice) obj.value=orden;
			break;
		case 3:			
		case 4:			
		case 5:
		case 6:
		case 7:
			appendOptionLast(id,{text:preciopersona_txt, value:indice++});
			if (orden<indice) obj.value=orden;
			break;
	}		
}

function appendOptionLast(id,option)
{
  var elOptNew = document.createElement('option');
  elOptNew.text = option.text;
  elOptNew.value = option.value;
  var elSel = document.getElementById(id);

  try {
    elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
  }
  catch(ex) {
    elSel.add(elOptNew); // IE only
  }
}

function removeOptions(id,num)
{
  var elSel = document.getElementById(id);   
  while (elSel.length>num)
  {	 
		 elSel.remove(elSel.length-1);	
  }
}

function visibilidadSelects(estado) {
	if ( (jQuery.browser.msie) && (parseInt(jQuery.browser.version)<=7) ) {
		jQuery('#z1np').css('visibility',estado);
		jQuery('#z1pp').css('visibility',estado);
		jQuery('#z2pp').css('visibility',estado);
		jQuery('#z3pp').css('visibility',estado);
		jQuery('#z4pp').css('visibility',estado);
		jQuery('#z5pp').css('visibility',estado);
		jQuery('#z6pp').css('visibility',estado);
		jQuery('#z7pp').css('visibility',estado);
		jQuery('#fno1').css('visibility',estado);
		jQuery('#fno2').css('visibility',estado);
		jQuery('#fno3').css('visibility',estado);
		jQuery('#fno811').css('visibility',estado);
		jQuery('#fno74').css('visibility',estado);
		jQuery('#fno87').css('visibility',estado);
		jQuery('#fno822').css('visibility',estado);
	}
}

function createAll()
{
	properties=new cercaliaProperties("/js/cercalia/cercalia/config.xml");
	cercalia = new cercaliaClient(properties);
	
	updateObjetivo();
}

function getServiciosNodo(p) {	
	jQuery.ajax({
		type: "POST",
		url: Buscar.vars.urlWeb+'/request/getServiciosNodo',
		data: {'p': p},
		success: function(msg){
			var request = eval("(" + msg + ")");
			var z1sv = eval("(" + Buscar.vars.z1sv + ")");
			var selected=" selected='selected'";
			var html="<select id='z1sv' name='z1sv' class='selectcheckbox' multiple='multiple' size='1'>\n";
			for (var i in request) {
				html+="<option value='"+i+"'";
				if (in_array(i,z1sv)) html+=selected;
				html+=">"+request[i]+"</option>\n";
			}
			html+="</select>\n";
			
			document.getElementById('servicios').innerHTML=html;
			jQuery('#z1sv').multiSelect({oneOrMoreSelected: '*', noneSelected: Buscar.textos.servicios_non_selected, selectAllText: Buscar.textos.servicios_select_all});
		},
		error: function() {
			//alert(msg_error_ajax);
		}
	});
}

//jQuery(document).ready(function() {
window.onload = function() {
    /*var properties;
	var cercalia;*/
	if(navigator.userAgent.indexOf('Opera') >=0) createAll();
	
	var fAvz=document.getElementById('formFiltroAvanzada');
	
	fAvz.fnc.disabled=false;
	//document.getElementById('btn_geo').innerHTML='<a href=\'javascript:localidadGeocoding();\'>'+msg_buscando_default+'</a>';

	jQuery("#formFiltroAvanzada").submit(function() {
		return false;
	});

	jQuery('#fnc').keyup(function(event) {
				if (event.keyCode == '13') {						
						localidadGeocoding();
				}
	});
	
	jQuery('#fnc').blur(function() {	
			/*if ( (qActual!=fAvz.fnc.value) && (fAvz.fnc.value!='') )
				localidadGeocoding();*/
			if (fAvz.fnc.value=='' || (fAvz.fnc.value==fAvz.fncDefault.value)) delObjetivo();
	});
	
	jQuery('#emergent_cerrar').bind('click',function() {
		jQuery('#emergent_sombra-busqueda').hide();
		jQuery('#emergent').hide();
		//visibilidadSelects('visible');
		if (!hayObjetivo()) {
			fAvz.fnc.value=fAvz.fncDefault.value;
			qActual='';
			//onSubmit=true;
		}
		else {
			fAvz.fnc.value=ultimaGeo;
		}
				
	});
		   									
};
