var localidades = new Array(); 
var subtematicas = new Array();

function load(latitud,longitud,zoom,tipo_mapa) 
{
      
      if (GBrowserIsCompatible()) 
      {
      	
      	
      	var punto_inicial = eval("new GLatLng("+latitud+","+longitud+");");
      	map = new GMap2(document.getElementById("mapa"));
        map.setCenter(punto_inicial, zoom, tipo_mapa);
        
       
		gdir = new GDirections(map, document.getElementById("resultados_ruta"));
		GEvent.addListener(gdir, "load", onGDirectionsLoad);
    	GEvent.addListener(gdir, "error", mostrarError);	
    	
        map.enableContinuousZoom();
        map.enableDoubleClickZoom();
        map.enableScrollWheelZoom();
        
        
        
     	var escala=new GScaleControl();
      	map.addControl(escala);
      	
		generaClusters();
		
		GEvent.addListener(map,"zoomend",calculaZoomMarcar);
		calculaZoomMarcar(-1,map.getZoom());
		
					
      }
      else 
      {
      	alert('Tu navegador no soporta google maps');
      }
}


function mostrar_puntos()
{
	recogerCapas();
	ponerCargandoPuntos();
	limpia_mapa();
	limpiaBocata();
	ocultarCapas("resultados_busqueda");
	
	parametros="";

	
	var primero = true;
	var tieneSubtipos = false;
	var i;
	var frm = document.forms['formulario'];
	var nombreParametro = "";
	
	if(frm.nombreParametro != null){
		var nombreParametro = frm.nombreParametro.value;
	}
	
	for(i=0; i<frm.elements.length; i++)
	{
		elemObtenido = frm.elements[i].id;
		if( elemObtenido != null && elemObtenido != ''){
			id_obtenido = document.getElementById(elemObtenido);
			if((id_obtenido != null) && (id_obtenido != '') && (id_obtenido.value != null)&& (id_obtenido.value != '')&& (id_obtenido.name != null)&& (id_obtenido.name != '') && (elemObtenido != 'idioma') && (elemObtenido.name != 'tipo') ){
				if(id_obtenido.type == "checkbox"){
					if(id_obtenido.checked){
						
						if(id_obtenido.name == "exacta"){
							if(primero){
								parametros += "?exacta=" + escape(id_obtenido.value);
								primero = false;
							}else{
								parametros += "&exacta=" + escape(id_obtenido.value);
							}
							
						}else if(nombreParametro!= ''){
							if(primero){
								parametros += "?" + nombreParametro + "=" + escape(id_obtenido.value);
								primero = false;
							}else{
								parametros += "&" + nombreParametro + "=" + escape(id_obtenido.value);
							}
							tieneSubtipos = true;
						}
						
						
						
					}
				}else{
					
					if(id_obtenido.type == "select-multiple"){
						for(i=0; i<id_obtenido.options.length; i++){
							if(id_obtenido.options[i].selected){
								if(primero){
									parametros += "?" + id_obtenido.name + "=" + escape(id_obtenido.options[i].value);
									primero = false;
								}else{
									parametros += "&" + id_obtenido.name + "=" + escape(id_obtenido.options[i].value);
								}
							}
						}
					}else{
						if(primero){
							parametros += "?" + id_obtenido.name + "=" + escape(id_obtenido.value);
							primero = false;
						}else{
							parametros += "&" + id_obtenido.name + "=" + escape(id_obtenido.value);
						}
					}
					
				}
			
			}
		}
	}
	
	if(!tieneSubtipos){
		if((frm.tipo != null)  && (nombreParametro!= '')){
			parametros += "&" + nombreParametro + "=" + escape(frm.tipo.value);
		}
		
	}
	
	loadDatosPuntos('./include/puntos.jsp'+ parametros,pintarPuntos);
}

function loadDatosPuntos(url,procesoReqCambio)
{    	
	// Puede que no se soporte nativamente el objeto XMLHttpRequest
    if(window.XMLHttpRequest)
    {
    	req_puntos=new XMLHttpRequest();	
    }
    else if(window.ActiveXObject)
    {
    	req_puntos= new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req_puntos)
    {
    	req_puntos.onreadystatechange=procesoReqCambio;
    	req_puntos.open("POST",url,true);
    	req_puntos.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	req_puntos.send("id=3");
    }
}

function mostrarPunto(nombrePunto,coordenadaPunto,iconoPunto,iconWidth,iconHeight,pk_rec,fk_cat)
{
	limpia_mapa();
	idRecurso = pk_rec.replace(/-/g,"");
	
	variable = 'marker'+idRecurso;
	
	if (typeof(window[variable])=='undefined') 
	{
		//No esta el marker, por tanto lo pintamos
		var icon= new GIcon();
   		icon.image='./img/'+iconoPunto;
   		icon.iconSize=new GSize(iconWidth,iconHeight);
		icon.iconAnchor=new GPoint((iconWidth/2),(iconHeight/2));
		var point=eval('new GLatLng'+coordenadaPunto);
		//eval('marker'+idRecurso+' = new GxMarker(point,icon,nombrePunto)');		
		eval('marker'+idRecurso+' = new GMarker(point,{icon:icon,title:nombrePunto});');
		eval('marker'+idRecurso+'.pk_rec=pk_rec;')
		eval('GEvent.addListener(marker'+idRecurso+',\'click\',function(){abrir_bocadillo(\''+pk_rec+'\')});');
		eval('GEvent.addListener(marker'+idRecurso+',\'remove\',ocultarMarker);');
		//map.addOverlay(marker);
		//clusterer.AddMarker(marker,arrayDatos[i].nombre);
		nombreCluster="clusterer_"+fk_cat;
		eval(nombreCluster+'.AddMarker(marker'+idRecurso+',nombrePunto)');
		
	}
	else
	{
		//Esta el marker, vemos si esta oculto o no
		if (window[variable].isHidden())
		{
			//Si esta oculto, lo ponemos a show y pintamos el punto
			//La function show() no pinta el punto solo pone el isHidden a true;
			window[variable].show();
			var icon= new GIcon();
	   		icon.image='./img/'+iconoPunto;
   			icon.iconSize=new GSize(iconWidth,iconHeight);
			icon.iconAnchor=new GPoint((iconWidth/2),(iconHeight/2));
			var point=eval('new GLatLng'+coordenadaPunto);
			//eval('marker'+pk_rec+' = new GxMarker(point,icon,nombrePunto)');		
			eval('marker'+idRecurso+' = new GMarker(point,{icon:icon,title:nombrePunto});');
			eval('marker'+idRecurso+'.pk_rec=pk_rec;')
			eval('GEvent.addListener(marker'+idRecurso+',\'click\',function(){abrir_bocadillo(\''+pk_rec+'\')});');
			eval('GEvent.addListener(marker'+idRecurso+',\'remove\',ocultarMarker);');
			//map.addOverlay(marker);
			//clusterer.AddMarker(marker,arrayDatos[i].nombre);
			nombreCluster="clusterer_"+fk_cat;
			eval(nombreCluster+'.AddMarker(marker'+idRecurso+',nombrePunto)');
		}		
	}
	
	recogerCapas();

}


function mostrarPuntoInicial(nombrePunto,coordenadaPunto,iconoPunto,iconWidth,iconHeight,pk_rec,fk_cat)
{
	idRecurso = pk_rec.replace(/-/g,"");
	
	variable = 'marker'+idRecurso;
	
		var icon= new GIcon();
   		icon.image='./img/'+iconoPunto;
   		icon.iconSize=new GSize(iconWidth,iconHeight);
		icon.iconAnchor=new GPoint((iconWidth),(iconHeight));
		var point=eval('new GLatLng'+coordenadaPunto);
		//eval('marker'+idRecurso+' = new GxMarker(point,icon,nombrePunto)');		
		eval('marker'+idRecurso+' = new GMarker(point,{icon:icon,title:nombrePunto});');
		eval('marker'+idRecurso+'.pk_rec=pk_rec;')
		eval('GEvent.addListener(marker'+idRecurso+',\'click\',function(){abrir_bocadillo(\''+pk_rec+'\')});');
		eval('GEvent.addListener(marker'+idRecurso+',\'remove\',ocultarMarker);');
		//eval('map.addOverlay(marker'+idRecurso+');');
		nombreCluster="clusterer_"+fk_cat;
		eval(nombreCluster+'.AddMarker(marker'+idRecurso+',nombrePunto)');
		
		
	recogerCapas();

}

function pintarPuntos()
{
	if(req_puntos.readyState==4)
    {
    	// Comprobamos si ha habido exito
    	if(req_puntos.status==200)
    	{
    		//alert(req_puntos.responseText);
    		arrayDatos = eval(req_puntos.responseText);
    		
    		for (i=0;i<arrayDatos.length;i++)
    		{
    			var icon= new GIcon();
		   		icon.image="./img/" + arrayDatos[i].icono;
		   		icon.iconSize=new GSize(arrayDatos[i].iconWidth,arrayDatos[i].iconHeight);
		   		icon.iconAnchor=new GPoint((41),(41));
				if(arrayDatos[i].latitud != null && arrayDatos[i].latitud != "" && arrayDatos[i].longitud != null && arrayDatos[i].longitud!= ""){
					var point=eval('new GLatLng('+arrayDatos[i].latitud+','+arrayDatos[i].longitud+')');
					
					var nombre = "";
					if (typeof(arrayDatos[i].nombre)!='undefined')
					{
						nombre=arrayDatos[i].nombre
					}
					else
					{
						nombre="";
					}
					
					eval('marker' + arrayDatos[i].id + ' = new GMarker(point,{icon:icon,title:nombre});');
					eval('marker'+arrayDatos[i].id+'.pk_rec=arrayDatos[i].pk_rec;')
	    			eval('GEvent.addListener(marker'+arrayDatos[i].id+',\'click\',function(){abrir_bocadillo(\''+arrayDatos[i].pk_rec+'\')});');
					eval('GEvent.addListener(marker'+arrayDatos[i].id+',\'remove\',ocultarMarker);');
 					
					if((arrayDatos[i].fk_cat != null) && (arrayDatos[i].fk_cat != "")){
						nombreCluster="clusterer_"+arrayDatos[i].fk_cat;
						var nombre2 = replaceSpecialChars2(nombre);
						eval(nombreCluster+'.AddMarker(marker'+arrayDatos[i].id+',nombre2)');
					}else{
						map.addOverlay(eval('marker' + arrayDatos[i].id));
					}
				}
			}
			quitarCargandoPuntos();
		}
		else
    	{
    		alert("Problema al recoger los puntos seleccionados:\n"+req_puntos.statusText);
    	}
	}
}

    function replaceSpecialChars2(str) {
		var specialCharsLet = new Array ("á","é","í","ó","ú","Á","É","Í","Ó","Ú");
		var specialCharsVal = new Array("&#225;","&#233;","&#237;","&#243;","&#250;","&#193;","&#201;","&#205;","&#211;","&#218;");
		
		var regex;
		var returnString = str;
		for (var i = 0; i < specialCharsLet.length; i++) {
			regex = new RegExp("["+specialCharsLet[i]+"]", "g");
			returnString = returnString.replace(regex, specialCharsVal[i]);
			regex = null;
		}
		return returnString;
	}
	
	
	
function ocultarMarker()
{
	this.hide();	
}

function abrir_bocadillo(clave)
{
	if (clave==null)
	{
		pk_rec=this.pk_rec;
		panTo=false;		
	}
	else
	{
		pk_rec=clave;
		panTo=true;
	}
	var idioma = document.formulario.idioma.value;
	loadDatosBocadillo('./include/bocadillo.jsp?idioma='+idioma+'&id='+escape(pk_rec),function(){pinta_bocadillo(panTo);});

}
function pinta_bocadillo(panTo)
{
	if(req_bocadillo.readyState==4)
    {
    	// Comprobamos si ha habido exito
    	if(req_bocadillo.status==200)
    	{
			//alert(req_bocadillo.responseText)
			datosBocadillo = eval(req_bocadillo.responseText);
			var point=eval('new GLatLng'+datosBocadillo[0].punto);
  			efectoBocata(point,datosBocadillo[0].codigoHtml,panTo);			
  		}
		else
    	{
    		alert("Problema al recoger los datos del bocadillo:\n"+req_bocadillo.statusText);
    	}
	}

}
function loadDatosBocadillo(url,procesoReqCambio)
{    	
	// Puede que no se soporte nativamente el objeto XMLHttpRequest
    if(window.XMLHttpRequest)
    {
    	req_bocadillo=new XMLHttpRequest();	
    }
    else if(window.ActiveXObject)
    {
    	req_bocadillo= new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req_bocadillo)
    {
    	req_bocadillo.onreadystatechange=procesoReqCambio;
    	//req_bocadillo.onsuccess=procesoReqCambio;
    	req_bocadillo.open("POST",url,true);
    	req_bocadillo.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	req_bocadillo.send("id=3");
    }
}
function zoomMaximo(puntox,puntoy)
{
    	// Ponemos un zoom por cada tipo de mapa 

	var nombre_Actual=map.getCurrentMapType();
    zooma = nombre_Actual.getMaximumResolution(new GLatLng(puntox,puntoy));
    /*var nombre_Actual=map.getCurrentMapType().getName();
    
    	if(nombre_Actual==G_NORMAL_MAP.getName())
 		{
 			zooma=17;
 		}
 		else if(nombre_Actual==G_HYBRID_MAP.getName())
 		{
 			zooma=15;
 		}
 		else if(nombre_Actual==G_SATELLITE_MAP.getName())
		{
			zooma=15;
		}
	*/
	//alert(zooma);
	map.setCenter(new GLatLng(puntox,puntoy), zooma-3); 	
}
function loadDatosFicha(url,procesoReqCambio)
{    	
	// Puede que no se soporte nativamente el objeto XMLHttpRequest
    if(window.XMLHttpRequest)
    {
    	req_ficha=new XMLHttpRequest();	
    }
    else if(window.ActiveXObject)
    {
    	req_ficha= new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(req_ficha)
    {
    	req_ficha.onreadystatechange=procesoReqCambio;
    	//req_bocadillo.onsuccess=procesoReqCambio;
    	req_ficha.open("POST",url,true);
    	req_ficha.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	req_ficha.send("id=3");
    }
}
function abrirFicha(pk_rec) {

        var idioma = document.formulario.idioma.value;        
        /*
        miPopup = window.open('./include/ficha.jsp?idioma='+idioma+'&pk_rec='+pk_rec,"_blank","width=900,height=700,toolbar=no,directories=no,menubar=no,scrollbars=yes,left=5,top=5");

		if (!miPopup.opener) 
		{
        	miPopup.opener = self;
        }
        */  
        loadDatosFicha('./include/ficha.jsp?idioma='+idioma+'&pk_rec='+pk_rec,pintaFicha);

}
function pintaFicha()
{
	if(req_ficha.readyState==4)
    {
    	// Comprobamos si ha habido exito
    	if(req_ficha.status==200)
    	{
			datosFicha = eval(req_ficha.responseText);
			var point=eval('new GLatLng'+datosFicha[0].punto);
  			efectoFicha(point,datosFicha[0].codigoHtml);			  			
		}
		else
    	{
    		alert("Problema al recoger los datos del bocadillo:\n"+req_ficha.statusText);
    	}
	}
/* 
         var contenidoFicha=document.getElementById("contenidoFicha");
        
        contenidoFicha*/
}
 function ponerCargandoPuntos()
{
	var obj=document.getElementById('cargandoPuntos');
	obj.style.display='block';

}
function quitarCargandoPuntos()
{
	var obj=document.getElementById('cargandoPuntos');
	obj.style.display='none';
}
function bloquearMapa()
{
	if (map.draggingEnabled())
	{
		map.disableDragging();
	}
}
function desbloquearMapa()
{
	map.enableDragging();	
}
function cambia_tipo_mapa(tipo_mapa, idMapa)
{
	marca_tipo_mapa(idMapa);
	map.setMapType(tipo_mapa);
	
}
function marca_tipo_mapa(idMapa)
{
	//if(G_NORMAL_MAP.getName()==map.getCurrentMapType().getName())
	if(idMapa == "pestana_mapa")
	{
		document.getElementById('pestana_mapa').className = 'pestana_mapa_selecc';
		document.getElementById('pestana_satelite').className = 'pestana_satelite';
		document.getElementById('pestana_mixto').className = 'pestana_mixto';
	}
	//else if(G_SATELLITE_MAP.getName()==map.getCurrentMapType().getName())
	else if(idMapa == "pestana_satelite")
	{
		document.getElementById('pestana_mapa').className = 'pestana_mapa';
		document.getElementById('pestana_satelite').className = 'pestana_satelite_selecc';
		document.getElementById('pestana_mixto').className = 'pestana_mixto';
	}
	else if(idMapa == "pestana_mixto")
	{
		document.getElementById('pestana_mapa').className = 'pestana_mapa';
		document.getElementById('pestana_satelite').className = 'pestana_satelite';
		document.getElementById('pestana_mixto').className = 'pestana_mixto_selecc';
	}
}


function obtenerRuta() {
	var i;
	var tipo;
	var desde = "";
	var hasta = "";
	
	ocultarCapas("resultados_busqueda");
	
	if(document.formulario.origen != null){
		desde = document.formulario.origen.value ;
	}
	if(document.formulario.destino != null){
		hasta = document.formulario.destino.value;
	}
	
	for (i=0;i<document.formulario.tipo_ruta.length;i++){ 
   		if (document.formulario.tipo_ruta[i].checked){
      		break; 
		}
	} 
	if(document.formulario.tipo_ruta[i] != null){
		tipo = document.formulario.tipo_ruta[i].value;
		if(tipo==1){
			//a pie
	  		gdir.load("from: " + desde + " to: " + hasta,
	            { "locale": "es", "travelMode" : G_TRAVEL_MODE_WALKING });
		}else{
			//conduccion
			gdir.load("from: " + desde + " to: " + hasta,
	            { "locale": "es", "travelMode" : G_TRAVEL_MODE_DRIVING });
		}
	}else{//mostramos ruta en coche por defecto
		gdir.load("from: " + desde + " to: " + hasta,
	            { "locale": "es", "travelMode" : G_TRAVEL_MODE_DRIVING });
	}
	
}

function pintarRuta (desde, hasta, tipo){
	if(tipo != null){
		if(tipo==1){
			//a pie
	  		gdir.load("from: " + desde + " to: " + hasta,
	            { "locale": "es", "travelMode" : G_TRAVEL_MODE_WALKING });
		}else{
			//conduccion
			gdir.load("from: " + desde + " to: " + hasta,
	            { "locale": "es", "travelMode" : G_TRAVEL_MODE_DRIVING });
		}
	}else{//mostramos ruta en coche por defecto
		gdir.load("from: " + desde + " to: " + hasta,
	            { "locale": "es", "travelMode" : G_TRAVEL_MODE_DRIVING });
	}
}

function onGDirectionsLoad(){ 
	
        if(gdir.getMarker(0) != null)
        	gdir.getMarker(0).getIcon().image="./img/municipios.gif";
        	gdir.getMarker(0).getIcon().iconSize = GSize(41, 41);
        if(gdir.getMarker(1) != null)
        	gdir.getMarker(1).getIcon().image="./img/municipios.gif";
        	gdir.getMarker(1).getIcon().iconSize = GSize(41, 41);
        /*
         for(rut = 0; rut <gdir.getNumRoutes() ; rut++){
        	for(pasos = 0; pasos <gdir.getRoute(rut).getNumSteps(); pasos++){
        		document.getElementById("resultados_busqueda2").innerHTML  += gdir.getRoute(rut).getStep(pasos).getDescriptionHtml()+ "<br>";
        	}
        }*/
        limpia_mapa();
        limpiaBocata();
    	recogerCapas();
        
        
} 

function mostrarError(){
   	if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
     	alert("No se ha encontrado una ubicaci\xf3n geogr\xe1fica que se corresponda con la direcci\xf3n especificada.");
   	else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
     	alert("No se ha podido procesar correctamente la solicitud de ruta o de c\xe1digos geogr\xe1ficos, sin saberse el motivo exacto del fallo.");
   	else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
     	alert("Falta el par\xe1metro HTTP q o no tiene valor alguno. En las solicitudes de c\xf3digos geogr\xe1ficos, esto significa que se ha especificado una direcci\xe1n vac\xeda.");
	else if (gdir.getStatus().code == G_GEO_BAD_KEY)
     	alert("La clave proporcionada no es v\xe1lida o no coincide con el dominio para el cual se ha indicado.");
   	else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
     	alert("No se ha podido analizar correctamente la solicitud de ruta.");
   	else alert("Error desconocido.");
   
}

function colocarMapa(latitud,longitud,zoom){
	limpiaBocata();
	var punto_inicial = eval("new GLatLng("+latitud+","+longitud+");");
    map.setCenter(punto_inicial, zoom);
}

function limpiaBocata(){
	var contenidoBocata=document.getElementById("contenidoBocata");
	if(contenidoBocata != null){
		contenidoBocata.style.display='none';
	}
}



function showAddress(direccion, zoom, tipo_mapa)
{
  var adress = direccion;
  var geocoder = new GClientGeocoder();
   if (geocoder) {
      geocoder.getLatLng(
        adress,
        function(point) {
              if (point)
              {
            	var icon= new GIcon();
         		icon.image='./img/municipios.gif';
         		icon.iconSize=new GSize(41,41);
         		icon.iconAnchor=new GPoint((41),(41));
            	eval('marker = new GMarker(point ,{icon:icon,title:adress});');
          		map.addOverlay(marker);
          		map.setCenter(point, zoom, tipo_mapa);
              }
            }
      );
    }
   recogerCapas();
} 