// Documento que muestra los obst�culos en el mapa

 var map;
 var zoom=15;
 //Aquí van las latitudes y longitudes de la ubicación predeterminada del usuario. Se obtendrán de $_SESSION['lat_u']...
 //var lat_usuario = 39.48032803331004; 
 //var lng_usuario = -0.3680419921875;
 
 var mgr_acc = null;
 var mgr_esca=null; //PARA MANEJAR LOS MARCADORES	 
 var mgr_ramp= null;
 var mgr_obra= null;
 var mgr_acera=null;
 var mgr_peat=null;
 var mgr_camic=null;
 var mgr_camie=null;
 var mgr_otro=null;
 
 var mgr_trans=null;
 var mgr_park=null;
 var mgr_bar=null;
 var mgr_turis=null;
 var mgr_otrop=null;

 var mgr=null;

 var puntos = {};
 var v_esca= {};
 var v_ramp= {};
 var v_obra= {};
 var v_acera= {};
 var v_peat= {};
 var v_camic= {};
 var v_camie= {};
 var v_otro= {};
 
 var v_trans={};
 var v_park={};
 var v_bar={};
 var v_turis={};
 var v_otrop={};

 
 var peticion = null;	 
 
 var lat_centro;
 var lng_centro; 
 
 var sesion;
 
 var span15=0.027;
 var span14=0.05;
 var span=0.027; //Cuadrado con los datos. Calculada a partir de zoom=14 y las dimensiones del mapa (usando mapa_span.html y tomando el span más pequeño)
 
 //var obst; //contiene el tipo de obst�culo que vamos a pasar para la petici�n SQL a la BD
 
 
 var rep;  //variable para que muestraObstáculos sólo se ejecute una vez
 
function inicializa_mapa(lat,lng,tipo_obst,inserta,sesio) {
  if (GBrowserIsCompatible()) {
	sesion=sesio;
  	map = new GMap2(document.getElementById("mapa"));
	new GKeyboardHandler(map);
	
	var latlng=new GLatLng(lat,lng);		
	map.setCenter(latlng,16);

	
	//map.setCenter(new GLatLng(39.4941, -0.3788), zoom); //Casa
	map.addControl(new GLargeMapControl()); // a�ade el control grande de desplazamiento en el mapa
	map.addControl(new GMapTypeControl());  // a�ade los botones que permiten al usuario alternar entre tipos de mapas (como Mapa y Sat�lite).
	map.enableContinuousZoom();
	map.enableScrollWheelZoom(); //permite acercar y alejar el mapa usando la rueda del rat�n
	
	
	// DECLARACION DE LOS MARKERMANAGER PARA CADA CAPA DE OBST�CULOS:
	
	mgr_acc = new MarkerManager(map);  //para mostrar el marcador de la ciudad accesible
	mgr_esca = new MarkerManager(map); //Para declararlo ba�sicamente, con las opciones por defecto
	mgr_ramp = new MarkerManager(map);
	mgr_obra= new MarkerManager(map);
	mgr_acera= new MarkerManager(map);
	mgr_peat= new MarkerManager(map);
	mgr_camic= new MarkerManager(map);
	mgr_camie= new MarkerManager(map);
	mgr_otro= new MarkerManager(map);
	mgr_trans= new MarkerManager(map);
	mgr_park= new MarkerManager(map);
	mgr_bar= new MarkerManager(map);
	mgr_turis= new MarkerManager(map);
	mgr_otrop= new MarkerManager(map);
	
	
	//var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: true };  //opciones para a�adir al MarkerManager
	//mgr_esca = new MarkerManager(map, mgrOptions);
	

	
	//*****************************
	//Calculamos el centro del mapa por primera vez:
	lat_centro=map.getCenter().lat();
	lng_centro=map.getCenter().lng();
	
	
	GEvent.addListener(map,"moveend",function(){
		if(map.getZoom()==19){//Cambia el mapa a modo híbrido para que se pueda seguir ampliando el zoom
			map.setMapType(G_HYBRID_MAP);
		}
		/*if (map.getZoom()<12){
			alert(map.getZoom());
		}*/

		//*******AQUÍ VA A IR LO DE SI MOVEMOS MAPA RECARGAR OBSTÁCULOS DE LA ZONA*********
		//calculamos el nuevo centro del mapa
		var lat_c=map.getCenter().lat();
		var lng_c=map.getCenter().lng();
		
		if(map.getZoom()<15){
				mgr_acc.clearMarkers();
				var marcador_accesible = new GMarker(new GLatLng(lat_c,lng_c), { icon: accesibleIcono }); //***********por ahora sólo lo muestro en el centro de valencia
				mgr_acc.addMarker(marcador_accesible,2,14);
				mgr_acc.refresh();		
		}
		//Miramos si ha cambiado el zoom:
		if(map.getZoom()!=zoom){//ha cambiado el zoom
			zoom=map.getZoom(); //actualizamos la variable zoom
			if (zoom<15){//Es un zoom en el que se ve valencia entera y por ahora mostraré todos los iconos pero más adelante cambiará la cosa a algo. MOSTRAR AQUÍ EL ICONO DE VALENCIA Y NO CALCULAR NADA MÁS
				span=span14;
				//alert("Borrando los obstaculos antes de recargarlos");
				borrarObstaculos(3);
				//crea un marcador para informar de que la ciudad donde estamos tiene iconos de accesibilidad, ya que hemos entrado en este punto.
				/*var marcador_accesible = new GMarker(new GLatLng(lat_c,lng_c), { icon: accesibleIcono }); //***********por ahora sólo lo muestro en el centro de valencia
				mgr_acc.addMarker(marcador_accesible,2,14);
				mgr_acc.refresh()*/;
				//recargarObstaculos(); No los recargo, simplemente muestro un obstáculo en el centro de Valencia
			}else{//el zoom es mayor que 15 (estamos más cerca en el mapa, cargamos los obstaculos para el zoom de 15. 
				if(span!=span15){//venimos de un zoom menor que 14. Hay que actualizar el span y recalcular datos
					span=span15;
					mgr_acc.clearMarkers(); //también se podrían ocultar
					mgr_acc.refresh();
					//alert("Borrando los obstaculos antes de recargarlos");
					borrarObstaculos(3);
					recargarObstaculos();
				}
				//Si el span ya vale 0.033, tenemos ya los valores en el mapa, aunqeu ampliemos no los recalculamos
			}
		}
		
		//alert("zoom="+map.getZoom());

	});
	GEvent.addListener(map,"dragend",function(){
		//*******AQUÍ VA A IR LO DE SI MOVEMOS MAPA RECARGAR OBSTÁCULOS DE LA ZONA*********
		//calculamos el nuevo centro del mapa
		var lat_c=map.getCenter().lat();
		var lng_c=map.getCenter().lng();
		//vemos si al mover hemos desplazado el centro fuera del círculo de centros:
		if(!dentroCirculo(lat_c,lng_c)){//hay que recalcular los datos pq el centro ya no está dentro del circulo
			//alert("Nos hemos salido del centro");
			//alert("Borrando los obstaculos antes de recargarlos");
			borrarObstaculos(3);
			recargarObstaculos();
			
		}
	});
	
	//MOSTRAR EL MAPA CENTRADO EN EL OBSTÁCULO DEL QUE VENIMOS:
	
	if(inserta!==0){  //venimos de inserta obst o de modificar un obstáculo y el tipo es el que indica tipo_obst
		//Hay que centrar el mapa en el obstáculo (hecho ya arriba) y mostrar los obstáculos de ese tipo:
		switch (tipo_obst){ 
			case 1: muestra_escalera(1);
					break;
			case 2: muestra_rampa(1);
					break;
			case 3: muestra_obras(1);
					break;
			case 4: muestra_acera(1);
					break;
			case 5: muestra_peaton(1);
					break;
			case 6: muestra_cami_cort(1);
					break;
			case 7: muestra_cami_estr(1);
					break;
			case 8: muestra_otros(1);
					break;
			case 9: muestra_transporte(1);
					break;
			case 10: muestra_parking(1);
					break;
			case 11: muestra_bar(1);
					break;
			case 12: muestra_turismo(1);
					break;
			case 13: muestra_otros_p(1);
					break;
		}
		if (inserta == 1) { //Venimos de insertar un obstáculo
			//Abre una ventana que señala el obstáculo con el siguiente contenido:
			var html = 'Nuevo obstáculo.<br/> Pinche en él para ver sus datos';
		}else if (inserta == 2){  //Venimos de modificar un obstáculo
			var html = 'Obstáculo que has modificado. <br/>En breve verás los cambios.';
		}else if (inserta == 3){
			var html = 'Este es el obstáculo del que has consultado los comentarios';
		}else if (inserta == 5){
			var html = 'Este es el obstáculo del cual has solicitado su eliminación.<BR/> En breve verás los cambios.';
		}else if (inserta == 6){
			var html = 'Ya has solicitado la eliminación de este obstáculo.';
		}else if (inserta == 7){
			var html = 'Ha habido un error al intentar acceder a la base de datos. Por favor, inténtelo más tarde o póngase en contacto con el administrador.<br/>Gracias<br/>';
		}else if (inserta == 8){
			var html = 'Obstáculo al que le has añadido una foto.<br/>Gracias';
		}else if (inserta == 9){
			var html = 'Punto de interés al que le has añadido una foto.<br/>Gracias';
		}else if (inserta == 10){
			var html = 'Este es el punto de interés del que has consultado los comentarios';
		}else if (inserta == 11) { //Venimos de insertar un obstáculo
			//Abre una ventana que señala el obstáculo con el siguiente contenido:
			var html = 'Nuevo punto de interés.<br/> Pinche en él para ver sus datos';
		}else if (inserta == 12){  //Venimos de modificar un obstáculo
			var html = 'PDI que has modificado. <br/>En breve verás los cambios.';
		}else if (inserta == 13){
			var html = 'Ya has solicitado la eliminación de este PDI.';
		}else if (inserta == 14){
			var html = 'Este es el PDI del cual has solicitado su eliminación.<BR/> En breve verás los cambios.';
		}else if (inserta == 15){
			var html = 'Solicitud de eliminar la foto enviada<BR/> En breve verás los cambios.';
		}else if (inserta == 16){
			var html = 'Ya has solicitado la eliminación de esa foto.';
		}
		
		    if(inserta !=100){ //Cuando es 100 vuelve al mapa pero sin mostrar una ventana de información
			var html_formato='<head><link href="css/vadeo.css" rel="stylesheet" type="text/css" /></head><body><div id="v_ventana"><div id="v_infox"><b>'+html+'</b></div></div></body>';  //html contiene lo que varía en cada caso. El formato va a ser el mismo en todos.
			map.openInfoWindowHtml(latlng, html_formato);
		}
	}
	
   }
  }//initialize()




//***************MUESTRA_OBSTACULOS************

function muestra_escalera(ini){  	//procesa la respuesta del servidor						//1�- AL HACER CLICK Y VER QUE EST� SELECCIONADO LLAMAMOS A cargaObstaculo
	var obst=1; //Icono de la escalera. El nu�mero coincide con el n� um del tipo de obst�culo en la BD
	if (ini == 1) {//venimos de insertar una escalera
		document.obstaculos.escaleras.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_esca,obst);
	}
	else {
		if (document.obstaculos.escaleras.checked) {
			cargaObstaculo(obst); // para hacer la peticion al archivo PHP
			muestraObstaculos(mgr_esca,obst);
		}
		else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_esca.clearMarkers();
			mgr_esca.refresh();
			v_esca = null;
		}
	}	//mgr_esca.hide();
			//mgr_esca.hide(marc_esca);}
			//map.removeOverlay(marc_esca);}
}//muestra_escalera()


function muestra_rampa(ini){  //FUNCION VIEJA DE UN SOLO OBST�CULO
	obst=2;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.rampa_pendiente.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_ramp,obst);
	}else{
		if(document.obstaculos.rampa_pendiente.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_ramp,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_ramp.clearMarkers();
			mgr_ramp.refresh();
			v_ramp=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}//muestra_rampa()

function muestra_obras(ini){
	obst=3;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.obras.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_obra,obst);
	}else{
		if(document.obstaculos.obras.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_obra,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_obra.clearMarkers();
			mgr_obra.refresh();
			v_obra=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_acera(ini){  //falta hacer el resto. ES sólo para validar el null
	obst=4;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.aceras.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_acera,obst);
	}else{
		if(document.obstaculos.aceras.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_acera,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_acera.clearMarkers();
			mgr_acera.refresh();
			v_acera=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_peaton(ini){
	obst=5;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.peatones.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_peat,obst);
	}else{
		if(document.obstaculos.peatones.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_peat,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_peat.clearMarkers();
			mgr_peat.refresh();
			v_peat=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_cami_cort(ini){
	obst=6;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.cami_cortado.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_camic,obst);
	}else{
		if(document.obstaculos.cami_cortado.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_camic,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_camic.clearMarkers();
			mgr_camic.refresh();
			v_camic=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_cami_estr(ini){
	obst=7;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.cami_estrecho.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_camie,obst);
	}else{
		if(document.obstaculos.cami_estrecho.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_camie,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_camie.clearMarkers();
			mgr_camie.refresh();
			v_camie=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}


function muestra_otros(ini){
	obst=8;
	if (ini==1){//venimos de insertar una rampa
		document.obstaculos.otros.checked=1;
		cargaObstaculo(obst);
		muestraObstaculos(mgr_otro,obst);
	}else{
		if(document.obstaculos.otros.checked){
			cargaObstaculo(obst);
			muestraObstaculos(mgr_otro,obst);
		}else {
			if(document.obstaculos.todos_obst.checked){
				document.obstaculos.todos_obst.checked=0;
			}	
			mgr_otro.clearMarkers();
			mgr_otro.refresh();
			v_otro=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_todos_obst(ini){
	if (document.obstaculos.todos_obst.checked) {
		//Selecciona todos los obstáculos 
		document.obstaculos.escaleras.checked = 1;
		document.obstaculos.rampa_pendiente.checked = 1;
		document.obstaculos.obras.checked = 1;
		document.obstaculos.aceras.checked = 1;
		document.obstaculos.peatones.checked = 1;
		document.obstaculos.cami_cortado.checked = 1;
		document.obstaculos.cami_estrecho.checked = 1;
		document.obstaculos.otros.checked = 1;
		
		//Carga los obstáculos en el mapa:
		borrarObstaculos(1);
		recargarObstaculos();
	}else{
		borrarObstaculos(1);
		
		document.obstaculos.escaleras.checked = 0;
		document.obstaculos.rampa_pendiente.checked = 0;
		document.obstaculos.obras.checked = 0;
		document.obstaculos.aceras.checked = 0;
		document.obstaculos.peatones.checked = 0;
		document.obstaculos.cami_cortado.checked = 0;
		document.obstaculos.cami_estrecho.checked = 0;
		document.obstaculos.otros.checked = 0;
	}
}

//***************MUESTRA_PDI************

function muestra_transporte(ini){
	obst=9;
	if (ini==1){//venimos de insertar una rampa
		document.pdis.transporte.checked=1;
		cargaPdi(obst);
		muestraObstaculos(mgr_trans,obst);
	}else{
		if(document.pdis.transporte.checked){
			//alert("he seleccionado transporte");
			cargaPdi(obst);
			muestraObstaculos(mgr_trans,obst);
		}else {
			if(document.pdis.todos_pdi.checked){
				document.pdis.todos_pdi.checked=0;
			}	
			mgr_trans.clearMarkers();
			mgr_trans.refresh();
			v_trans=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_parking(ini){
	obst=10;
	if (ini==1){//venimos de insertar una rampa
		document.pdis.parking.checked=1;
		cargaPdi(obst);
		muestraObstaculos(mgr_park,obst);
	}else{
		if(document.pdis.parking.checked){
			cargaPdi(obst);
			muestraObstaculos(mgr_park,obst);
		}else {
			if(document.pdis.todos_pdi.checked){
				document.pdis.todos_pdi.checked=0;
			}	
			mgr_park.clearMarkers();
			mgr_park.refresh();
			v_park=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_bar(ini){
	obst=11;
	if (ini==1){//venimos de insertar una rampa
		document.pdis.bar.checked=1;
		cargaPdi(obst);
		muestraObstaculos(mgr_bar,obst);
	}else{
		if(document.pdis.bar.checked){
			cargaPdi(obst);
			muestraObstaculos(mgr_bar,obst);
		}else {
			if(document.pdis.todos_pdi.checked){
				document.pdis.todos_pdi.checked=0;
			}	
			mgr_bar.clearMarkers();
			mgr_bar.refresh();
			v_bar=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_turismo(ini){
	obst=12;
	if (ini==1){//venimos de insertar una rampa
		document.pdis.turismo.checked=1;
		cargaPdi(obst);
		muestraObstaculos(mgr_turis,obst);
	}else{
		if(document.pdis.turismo.checked){
			cargaPdi(obst);
			muestraObstaculos(mgr_turis,obst);
		}else {
			if(document.pdis.todos_pdi.checked){
				document.pdis.todos_pdi.checked=0;
			}	
			mgr_turis.clearMarkers();
			mgr_turis.refresh();
			v_turis=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_otros_p(ini){
	obst=13;
	if (ini==1){//venimos de insertar una rampa
		document.pdis.otros_p.checked=1;
		//alert("he pinchado en otros pdi");
		cargaPdi(obst);
		muestraObstaculos(mgr_otrop,obst);
	}else{
		if(document.pdis.otros_p.checked){
			cargaPdi(obst);
			muestraObstaculos(mgr_otrop,obst);
		}else {
			if(document.pdis.todos_pdi.checked){
				document.pdis.todos_pdi.checked=0;
			}	
			mgr_otrop.clearMarkers();
			mgr_otrop.refresh();
			v_otrop=null; //para que no se guarde ah� los valores anteriores, que los vuelva a escribir
		}	
	}
}

function muestra_todos_pdi(ini){
	if (document.pdis.todos_pdi.checked) {
		//Selecciona todos los obstáculos 
		document.pdis.transporte.checked = 1;
		document.pdis.parking.checked = 1;
		document.pdis.bar.checked = 1;
		document.pdis.turismo.checked = 1;
		document.pdis.otros_p.checked = 1;
		
		//Carga los obstáculos en el mapa:
		borrarObstaculos(2);
		recargarObstaculos();
	}else{
		borrarObstaculos(2);
		
		document.pdis.transporte.checked = 0;
		document.pdis.parking.checked = 0;
		document.pdis.bar.checked = 0;
		document.pdis.turismo.checked = 0;
		document.pdis.otros_p.checked = 0;
	}
}


//*************

function inicializa_xhr() {  //Inicializa la conexi�n con la BD y devuelve un objeto que servir� para realizar la petici�n a la BD
   if (window.XMLHttpRequest){ //Mozilla, Safari, ...
		  return new XMLHttpRequest();
   }
   else{
	  if (ActiveXObject) {
		 var vector_versiones = ["MSXML2.XMLHttp.5.0.", "MSXML2.XMLHttp.4.0.", "MSXML2.XMLHttp.3.0.", "MSXML2.XMLHttp", "Microsoft.XMLHttp"];
		 for (var i=0; i<vector_versiones.length; i++) {
			try{return new ActiveXObject (vector_versiones[i]);	}
			catch (e){}
		 }
	  }
   }
}//inicializa_xhr



function cargaObstaculo(obst) {		//Realiza la petic�n al servidor			//2�- INICIALIZA LA PETICION AL ARCHIVO obtiene_obstaculos.php
	//alert("cargando obstaculos del tipo="+obst);
	peticion = inicializa_xhr();  //respuesta del servidor
	if(!peticion){
		alert('Falla: (No es posible crear una instancia XMLHTTP');
		return false;
	}
	peticion.onreadystatechange = muestraObstaculos;  //indica la funci�n que se va a encargar de procesar la respuesta. 
	//Además del tipo de obstáculo le tengo que indicar el span del mapa:

	var latlng=map.getCenter();
	var lati=latlng.lat();
	var longi=latlng.lng();
	  
	
	var url='/librerias/modulos/vadeo/obtiene_obstaculos.php?obstaculo='+obst+'&lat='+lati+'&lng='+longi+'&span='+span;
	peticion.open('GET',url, false); //open(m�etodo de la llamada, url (dominio exacto), �peticio�n as�incrona? (si es true la ejecuci�on de la funci�n continuar� a�n cuando la respuesta del servidor no haya llegado).
	peticion.send(null);
	//alert('Peticion de cargaObstaculo enviada');
}

function cargaPdi(obst) {		//Realiza la petic�n al servidor			//2�- INICIALIZA LA PETICION AL ARCHIVO obtiene_obstaculos.php
	//alert("cargando pdis del tipo="+obst);
	peticion = inicializa_xhr();  //respuesta del servidor
	if(!peticion){
		alert('Falla: (No es posible crear una instancia XMLHTTP');
		return false;
	}
	peticion.onreadystatechange = muestraObstaculos;  //indica la funci�n que se va a encargar de procesar la respuesta. 
	//Además del tipo de obstáculo le tengo que indicar el span del mapa:

	var latlng=map.getCenter();
	var lati=latlng.lat();
	var longi=latlng.lng();
	  
	if(obst==9){pdi=1;}
	else if(obst==10){pdi=2;}
	else if(obst==11){pdi=3;}
	else if(obst==12){pdi=4;}
	else if(obst==13){pdi=5;}
	
	var url='/librerias/modulos/vadeo/obtiene_pdis.php?pdi='+pdi+'&lat='+lati+'&lng='+longi+'&span='+span;
	//alert(url);
	peticion.open('GET',url, false); //open(m�etodo de la llamada, url (dominio exacto), �peticio�n as�incrona? (si es true la ejecuci�on de la funci�n continuar� a�n cuando la respuesta del servidor no haya llegado).
	peticion.send(null);
	//alert('Peticion de cargaPDI enviada');
}

	
	
function muestraObstaculos(mgr,obst){  //Se le pasa el mgr de la capa en la que queramos mostrar los obst�culos
	//muestra obstáuclos del tipo 1;
	//Si el zoom es muy pequeño no vamos a calcular nada, sólo mostrar el iconito de ciudad accesible
	//alert("Estoy en muestraObstaculos.voy a mostrar los obst/pdi del tipo "+obst); 
	//alert("Peticion.readyState="+peticion.readyState+"¿es igual a 4? ");
	if (obst!=undefined){
	if (peticion.readyState == 4) { //.readvaryState? La respuesta completa del servidor ha sido recibida y es posible continuar proces�ndola.
	//alert("Peticion.status="+peticion.status+"¿es igual a 200? ");
		if (peticion.status == 200) { // Estado de la respuesta=todo ha ido bien	//3�- SI LA PETICI�N HA IDO BIEN
			puntos = eval("(" + peticion.responseText + ")"); //4�- BUSCA EN LA RESPUESTA DE LA PETICION Y LA EVALUA: eval�a una cadena de c�odigo JavaScript
			if (puntos != null) { //Se han encontrado obstáculos de ese tipo en la zona especificada
				//alert("Se han encontrado obst de este tipo en la zona");
				switch (obst) {
					case 1:
						v_esca = puntos;
						break;
					case 2:
						v_ramp = puntos;
						break;
					case 3:
						v_obra = puntos;
						break;
					case 4:
						v_acera = puntos;
						break;
					case 5:
						v_peat = puntos;
						break;
					case 6:
						v_camic = puntos;
						break;
					case 7:
						v_camie = puntos;
						break;
					case 8:
						v_otro = puntos;
						break;
					case 9:
						v_trans = puntos;
						break;
					case 10:
						v_park = puntos;
						break;
					case 11:
						v_bar = puntos;
						break;
					case 12:
						v_turis = puntos;
						break;
					case 13:
						v_otrop = puntos;
						break;
				}
				//alert('Antes de dibujar y crear marcadores de '+obst);
				var marcadors = getMarcadores(obst); ////5�- Llama a getMarcadores para crear los marcadores
					mgr.addMarkers(marcadors,15); //Dibuja el vector de marcadores en el mapa. Los marcadores sólo se veran hasta un zoom de 16, a menor zoom, no se ven.
					mgr.refresh();
					//alert("ya lo he hecho todo, te lo creas o no");
				//var markerCluster = new MarkerClusterer(map, marcadors);
			}//else alert('Aún no estoy listo');
		}
		else {
			alert('Hubo problemas con la peticion recibida del servidor');
		}
	}
	}//else{alert('No se ha recibido la respuesta completa del servidor: '+peticion.readyState);}
	//peticion.close();  //cerrar la petición. *********DA ERROR en firefox: "peticion.close is not a function", NO SÉ POR QUÉ***********
}//muestraObstaculos()


function getMarcadores(obst) {  //devuelve un vector con marcadores para dibujar
	//alert("voy a crear los marcadores");
	var marcadores = [];
	//Voy a ver de qu� tipo de obst�culos estoy hablando para guardarlos en un valor u otro:
	//switch (puntos[0].id_obstaculo){//sale el tipo de obstaculo
	//var vector_obstaculos=puntos;
	for (var i=0; i<puntos.length; ++i) {
		var marcador=creaMarcador(i,obst);
		marcadores.push(marcador);  //añade cada marcador al vector marcadores
	}
	//alert("marcadores creados");
	return marcadores;
}

function creaMarcador(i,obst){ //creo cada marcador y le añado un evento una vez creado. Aquí se configura lo que saldrá en la ventana de informaci�n de cada marcador.
	//alert("creando marcador"+i);
	var v_obst;
	switch (obst){
		case 1: v_obst=v_esca;
				break;
		case 2: v_obst=v_ramp;
				break;
		case 3: v_obst=v_obra;
				break;
		case 4: v_obst=v_acera;
				break;
		case 5: v_obst=v_peat;
				break;
		case 6: v_obst=v_camic;
				break;
		case 7: v_obst=v_camie;
				break;
		case 8: v_obst=v_otro;
				break;
		case 9: v_obst=v_trans;
				break;
		case 10: v_obst=v_park;
				break;
		case 11: v_obst=v_bar;
				break;
		case 12: v_obst=v_turis;
				break;
		case 13: v_obst=v_otrop;
				break;
	}
	if(obst<9){//Se trata de un obstáculo
		//alert("voy a construir el marcador del obstáculo "+obst);
		var dur = v_obst[i].duracion;
		var bloq = v_obst[i].bloqueo;
		var marcador=construye_marcador(v_obst,obst,dur,bloq,i);
	}else{     //Se trata de un pdi y no tiene duración/bloqueo
		//alert("Voy a construir el marcador del pdi "+obst);
		var marcador=construye_marcador_pdi(v_obst,obst,i);
	}
	
	return marcador;
}

function getPunto(i){ //devuelve los valores de un punto con su longitud y latitud
	//alert("obteniendo la lat y lng de "+i);
	var punto = puntos[i];
	var lat = punto.lat;
	var lon = punto.lon;
	return new GLatLng(lat,lon);
}

function getIcono(obst,dur,bloq) { //FALTA PONER EN UNA CARPETA IMAGENES LOS ICONOS
	//alert("obteniendo el icono del obstaculo de tipo "+obst);
	var tipoIcono;
	switch (obst){ 
		case 1: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=escaleraT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=escaleraT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=escaleraP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=escaleraP1;}
				//tipoIcono=escaleraIcono;
				break;
		case 2: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=rampaT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=rampaT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=rampaP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=rampaP1;}
				break;
		case 3: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=obraT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=obraT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=obraP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=obraP1;}
				break;
		case 4: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=aceraT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=aceraT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=aceraP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=aceraP1;}
				break;
		case 5: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=pasopeatonalT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=pasopeatonalT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=pasopeatonalP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=pasopeatonalP1;}
				break;
		case 6: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=caminocortadoT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=caminocortadoT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=caminocortadoP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=caminocortadoP1;}
				break;
		case 7: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=caminoestrechoT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=caminoestrechoT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=caminoestrechoP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=caminoestrechoP1;}
				break;	
		case 8: if (dur==0&&bloq==0){//temporal+total
					tipoIcono=otroT2;}
				else if (dur==0&&bloq==1){//temporal+parcial
					tipoIcono=otroT1;}
				else if (dur==1&&bloq==0){//permanente+total
					tipoIcono=otroP2;}
				else if (dur==1&&bloq==1){//permanente+parcial
					tipoIcono=otroP1;}
				break;
		case 9:	tipoIcono=transporte;
				break;
		case 10:tipoIcono=parking;
				break;
		case 11:tipoIcono=bar;
				break;
		case 12:tipoIcono=turismo;
				break;
		case 13:tipoIcono=otrosp;
				break;				
					//[default:]Instrucci�n o bloque de instrucciones;
	}
	return tipoIcono;
}



function dentroCirculo(lat_c,lng_c){
	var x=(lng_c-lng_centro)*(lng_c-lng_centro)+(lat_c-lat_centro)*(lat_c-lat_centro);
	var r=span/2; //Radio del círculo:
	var r2=r*r;
	//alert("x="+x+",r2="+r2);
	if (x<=r2){//El nuevo centro está dentro de la zona visible de obstáculos
		return true;
	}else{ //Nos salimos de la zona y hay que volver a recargar los datos
		return false;
	}
}

function recargarObstaculos(){
	//alert("recargar obstaculos");
	//1- Cambiamos los valores de lat_centro y lng_centro a los del nuevo centro:
	lat_centro=map.getCenter().lat();
	lng_centro=map.getCenter().lng();
	//2- Vemos las casillas que están marcadas y para ellas, recalculamos los obstaculos a mostrar:
	
	//*** OBSTACULOS ***
	if (document.obstaculos.escaleras.checked) {
		cargaObstaculo(1); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_esca,1);
	}if(document.obstaculos.rampa_pendiente.checked){
		cargaObstaculo(2);
		muestraObstaculos(mgr_ramp,2);
	}if (document.obstaculos.obras.checked) {
		cargaObstaculo(3); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_obra,3);
	}if (document.obstaculos.aceras.checked) {
		cargaObstaculo(4); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_acera,4);
	}if (document.obstaculos.peatones.checked) {
		cargaObstaculo(5); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_peat,5);
	}if (document.obstaculos.cami_cortado.checked) {
		cargaObstaculo(6); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_camic,6);
	}if (document.obstaculos.cami_estrecho.checked) {
		cargaObstaculo(7); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_camie,7);
	}if (document.obstaculos.otros.checked) {
		cargaObstaculo(8); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_otro,8);
	}
	//*** PDI ***
	if (document.pdis.transporte.checked) {
		cargaPdi(9); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_trans,9);
	}if (document.pdis.parking.checked) {
		cargaPdi(10); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_park,10);
	}if (document.pdis.bar.checked) {
		cargaPdi(11); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_bar,11);
	}if (document.pdis.turismo.checked) {
		cargaPdi(12); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_turis,12);
	}if (document.pdis.otros_p.checked) {
		cargaPdi(13); // para hacer la peticion al archivo PHP
		muestraObstaculos(mgr_otrop,13);
	}
}

function borrarObstaculos(tipo){
	//alert("estoy borrando los obstaculos");
	if (tipo == 1 || tipo == 3) {
		//*** OBSTACULOS ***
		if (document.obstaculos.escaleras.checked) {
			mgr_esca.clearMarkers();
			mgr_esca.refresh();
			v_esca = null;
		}
		if (document.obstaculos.rampa_pendiente.checked) {
			mgr_ramp.clearMarkers();
			mgr_ramp.refresh();
			v_ramp = null;
		}
		if (document.obstaculos.aceras.checked) {
			mgr_acera.clearMarkers();
			mgr_acera.refresh();
			v_acera = null;
		}
		if (document.obstaculos.obras.checked) {
			mgr_obra.clearMarkers();
			mgr_obra.refresh();
			v_obra = null;
		}
		if (document.obstaculos.peatones.checked) {
			mgr_peat.clearMarkers();
			mgr_peat.refresh();
			v_peat = null;
		}
		if (document.obstaculos.cami_cortado.checked) {
			mgr_camic.clearMarkers();
			mgr_camic.refresh();
			v_camic = null;
		}
		if (document.obstaculos.cami_estrecho.checked) {
			mgr_camie.clearMarkers();
			mgr_camie.refresh();
			v_camie = null;
		}
		if (document.obstaculos.otros.checked) {
			mgr_otro.clearMarkers();
			mgr_otro.refresh();
			v_otro = null;
		}
	}
	if (tipo == 2 || tipo == 3) {
		//*** PDI ***
		if (document.pdis.transporte.checked) {
			mgr_trans.clearMarkers();
			mgr_trans.refresh();
			v_trans = null;
		}
		if (document.pdis.parking.checked) {
			mgr_park.clearMarkers();
			mgr_park.refresh();
			v_park = null;
		}
		if (document.pdis.bar.checked) {
			mgr_bar.clearMarkers();
			mgr_bar.refresh();
			v_bar = null;
		}
		if (document.pdis.turismo.checked) {
			mgr_turis.clearMarkers();
			mgr_turis.refresh();
			v_turis = null;
		}
		if (document.pdis.otros_p.checked) {
			mgr_otrop.clearMarkers();
			mgr_otrop.refresh();
			v_otrop = null;
		}
	}
}


