// EVENTOS //////////////////////////////////////////////////////////////////////////////////////////////////////////
var flSubmit = false;
window.onunload = GUnload;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function val(id) {
	var obj = document.getElementById(id);
	if (obj) {
		return obj.value;
	}
	return "";
}

function valSelect(id) {
	return get(id).options[get(id).selectedIndex].innerHTML;
}


var ANCHO_ICONO_MAPA = 21;

var markers = new Array();
var NOM_CENTROS = new Array();
var DSC_CENTROS = new Array(); // Descripciones
var IDS_CENTROS = new Array();
var LAT_CENTROS = new Array();
var LNG_CENTROS = new Array();
var DIS_CENTROS = new Array();
var DIR_CENTROS = new Array();
var TLF_CENTROS = new Array();
var URL_CENTROS = new Array();


// Para cargar los logos
var IMG_LOGOS_MAPA = new Array();
var IMG_LOGOS_NORMAL = new Array();

var RUTA_LOGOS_MAPA = "/centros/fotos/logos/mapa/";
var RUTA_LOGOS_NORMAL = "/centros/fotos/logos/normal/";


var controlZoom = null; 
var controlTipo = null; 
var map = null;

function gmapsBuscadorCentrosIniciar() {

	// Para google suggest
	if ( get('search-servicios') ) {
		gsc_hide(get('search-nombre'));
		gsc_hide(get('search-servicios'));
		gsc_hide(get('search-sintomas'));
		gsc_hide(get('search-productos'));
	}

	$("#calle, #numero, #idmunicipio, #idprovincia, #cp, #distancia, " + 
	  "#unidadDistancia, #nombre, #tratamiento, #sintoma, #producto").change(function(){
	  		// Volver a cargar la lista de tipos cuando se modifica alguno de estos campos
	  		cargarTipos = true;
	  });

	$("#calle").blur(function(){
		if ($("#calle").val()!="" && $("#distancia").val()=="") {
			// Si introducen calle y la distancia está vacía, poner una distancia por defecto
			if ($("#unidadDistancia").val() == "m") {
				$("#distancia").val("500");
			} else {
				$("#distancia").val("0.5");				
			}
		}
	});

	controlZoom = new GLargeMapControl();
	controlTipo = new GMapTypeControl();
	
	if (get('formu')) {
		get('formu').onsubmit = function() {
			if(get('idprovincia').value=='0'){
				alert('Debe rellenar el campo obligatorio provincia');
				return false;
			} else if (flSubmit) {
				get('formu').submit();
			} else {
				// quitar tildes
				get("nombre").value = quitarTildes(val("nombre"));
				get("tratamiento").value = quitarTildes(val("tratamiento"));
				get("sintoma").value = quitarTildes(val("sintoma"));
				get("producto").value = quitarTildes(val("producto"));	
				
				if (val("cp")=="" && val("idmunicipio")=="0" && val("idprovincia")=="0") {
					// Si no hay criterios de búsqueda para la dirección -> no buscar coordenadas
					flSubmit=true; get('formu').submit();					
				} else {
					//get("localidad").value = quitarTildes(val("localidad"));
					//get("provincia").value = quitarTildes(val("provincia"));				
				
					var jsEncontrada = "flSubmit=true; get('formu').submit();"
					var jsNoEncontrada = "alert('Dirección no encontrada. Se hará una búsqueda por nombres de campos'); " + 
										 "flSubmit=true; get('formu').submit();"
					gmapsBuscarDireccion(jsEncontrada, jsNoEncontrada, true);								
				}
			}
			return false;
		}			
	}
	
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
	
	var latCentroMapa = get('gmapsLat').value;
	var longCentroMapa = get('gmapsLong').value;
	if (latCentroMapa=="") latCentroMapa = 0;
	if (longCentroMapa=="") longCentroMapa = 0;
	
	var zoom;
	var radio = val("distancia");
	if (radio=="") radio = 0;
	if (val("unidadDistancia")=="m") {
		radio /= 1000;
	}	
	
	if ((latCentroMapa==0 && longCentroMapa==0) || (val("cp")=="" && val("idmunicipio")=="0" && val("idprovincia")=="0")) {
		if (latCentroMapa==0 && longCentroMapa==0) {
			zoom = 5;
		} else {
			// Obtener un zoom adecuado al radio de búsqueda		
			zoom = zoomAdecuado(radio);	
		}

		// Calle Colón de Madrid por defecto
		//latCentroMapa = 40.425224;
		//longCentroMapa = -3.690741;

		latCentroMapa = 40.42382;
		longCentroMapa = -3.700802;
		
		get('gmapsLat').value = latCentroMapa;
		get('gmapsLong').value = longCentroMapa;
	} else {
		// Obtener un zoom adecuado al radio de búsqueda
		zoom = zoomAdecuado(radio);	
	}

    map.setCenter(new GLatLng(latCentroMapa, longCentroMapa), zoom);
	// ****************************************************************

    //map.addControl(new GSmallMapControl());
	map.addControl(controlZoom);
    map.addControl(controlTipo);


	// ****************************************************************
	if (get("btnBuscar")) {
		//return;
	}
	// ****************************************************************
	
	//map.removeControl(controlTipo);
	
	//map.setMapType(G_SATELLITE_MAP);
	 //map.setMapType(G_NORMAL_MAP),
	
    // Create a base icon for all of our markers that specifies the
    // shadow, icon dimensions, etc.

//    Para usar letras en vez de iconos, descomentar:
    var baseIcon = new GIcon();
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";

/*
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);
*/

    baseIcon.iconSize = new GSize(10, 17);
    baseIcon.shadowSize = new GSize(18, 17);
    baseIcon.iconAnchor = new GPoint(4, 17);
    baseIcon.infoWindowAnchor = new GPoint(4, 1);
    baseIcon.infoShadowAnchor = new GPoint(9, 12);



    // Creates a marker whose info window displays the letter corresponding
    // to the given index.
    function createMarker(point, index, idcentro) {
      // Create a lettered icon for this point using our icon class
      var letter = String.fromCharCode("A".charCodeAt(0) + index);

//    Para usar letras en vez de iconos, cambiar:
      var letteredIcon = new GIcon(baseIcon);
      
	  // Corregir ancho iconos (a veces IE no es capaz de cargarlos con el ancho correcto)
      var widthIcon = IMG_LOGOS_MAPA[index].width;
      var altoMini = get("logoMini" + IDS_CENTROS[index]).height;
      var anchoMini = get("logoMini" + IDS_CENTROS[index]).width;
	  var heightIcon = altoMini*(widthIcon/anchoMini);
      
      
//    Para usar letras en vez de iconos, cambiar:      
      letteredIcon.iconSize = new GSize(widthIcon, heightIcon);

//    Para usar letras en vez de iconos, descomentar:            
//    letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";

      letteredIcon.image = IMG_LOGOS_MAPA[index].src;
//	letteredIcon.image = "/centros/fotos/logos/mini/prueba.gif";

      // Set up our GMarkerOptions object
      markerOptions = { icon:letteredIcon };
      var marker = new GMarker(point, markerOptions);
	  marker.letter = letter;
      GEvent.addListener(marker, "click", function() {
        openInfoMarcador(marker);
      });
      return marker;
    }
	
    for (var i = 1; i < IDS_CENTROS.length; i++) {
      var point = new GLatLng(LAT_CENTROS[i], LNG_CENTROS[i]);

	  var marker = createMarker(point, i, IDS_CENTROS[i]);
	  marker.idCentro = IDS_CENTROS[i];	  
	  marker.nomCentro = NOM_CENTROS[i];
	  marker.descCentro = DSC_CENTROS[i];	  
	  marker.tlf= TLF_CENTROS[i];
	  marker.url = URL_CENTROS[i];
	  marker.dirCentro = DIR_CENTROS[i];

	  /*
	  if (IMG_LOGOS_MAPA[i].src.indexOf("marker") != -1) {
	  	// Usa un marker de google maps
	  	marker.srcLogo = IMG_LOGOS_MAPA[i].src.replace(/\/mapa\//, "/mini/");	  
	  } else {
	  	//marker.srcLogo = RUTA_LOGOS_NORMAL + "logo" + IDS_CENTROS[i] + ".png";	  
	  	marker.srcLogo = IMG_LOGOS_NORMAL[i].src;
	  }
	  */
		
	  marker.srcLogo = IMG_LOGOS_NORMAL[i].src;	
		
	  // Guardar el marcador en un array para poder usarlo luego
	  markers[markers.length] = marker;
      map.addOverlay(marker);
    }
  }
}
// Fin gmapsBuscadorCentrosIniciar

function zoomAdecuado(radioKm) {

	if (radioKm==0) {
		return 5;
	} else if (radioKm<0.2) {
		return 17;
	} else if (radioKm<0.5) {
		return 16;
	} else if (radioKm<1) {
		return 15;
	} else if (radioKm<2) {
		return 14;
	} else if (radioKm<3) {
		return 13;
	} else if (radioKm<4) {
		return 12;
	} else if (radioKm<5) {
		return 11;
	} else if (radioKm<10) {
		return 10;
	} else if (radioKm<25) {
		return 9;
	} else if (radioKm<50) {
		return 8;
	} else if (radioKm<200) {
		return 7;
	} else if (radioKm<500) {
		return 6;
	}

	return 5;
}

function openInfoMarcador(marker) {
	map.setZoom(zoomAdecuado(0.3/*Km*/));

	$.get('/servlet/centros/ContadorCentros?accion=contarVisitas', { idCentro: marker.idCentro });
	
	var num_servicios = $.ajax({
		type: "GET",
		url: "/servlet/G_Servicios?accion=obtener_servicios",
		data: "idCentro=" + marker.idCentro,
		async: false
		}).responseText;

	var num_productos = $.ajax({
		type: "GET",
		url: "/servlet/G_Productos?accion=obtener_productos",
		data: "idCentro=" + marker.idCentro,
		async: false
		}).responseText;
		
	var num_sintomas = $.ajax({
		type: "GET",
		url: "/servlet/G_Sintomas?accion=obtener_sintomas",
		data: "idCentro=" + marker.idCentro,
		async: false
		}).responseText;
		
	var num_fotos_galeria = $.ajax({
		type: "GET",
		url: "/servlet/G_Centros?accion=obtener_galeria",
		data: "idCentro=" + marker.idCentro,
		async: false
		}).responseText;
	
	var tipos = '';
	var spanTipos = get('tipos' + marker.idCentro);
	if (spanTipos) {
		tipos = spanTipos.innerHTML;
	}
	
	var mostrarEnlaces = marker.url!='' && !(marker.url.indexOf('http://')==0);
	
	marker.openInfoWindowHtml('<div class="divBocadillo">' + 
								  '<div class="imgBocadillo">' + 
								  	  /*'<a href="' + marker.srcLogo + '" onclick="window.open(\''	 + mostrarImagen(marker.srcLogo) + '\', \'Imagen_centro\' ,' + '\'width=120, height=300, resizable=yes \');return false;"'*/ 
								  	  '<a href="' + marker.srcLogo + '" onclick="window.open(\'/jsp/ampliacion.jsp?foto=' + mostrarImagen(marker.srcLogo) + '&nombrecentro=' + marker.nomCentro + '\', \'Imagen_centro\' ,' + '\'width=450, height=400, resizable=yes,scrollbars=no \');return false;"'
								  	   + '><img src="' + marker.srcLogo + '" alt="pulse para ampliar"/><img src="/images/centros/lupa.jpg" alt="pulse para ampliar"/></a>' + 
								  '</div>' +
								  '<div class="textoBocadillo">' +  	
									  '<strong>' + marker.nomCentro + '</strong><br />' + 
			      (tipos == '' ? '' : tipos + '<br />') +
	  (marker.descCentro == '' ? '' : '<strong style="font-size:0.8em;">' + marker.descCentro + '</strong><br />') +
									  '<em>' + marker.dirCentro + '</em><br />' + 	
			 (marker.tlf == '' ? '' : '<em>' + marker.tlf + '</em><br/>') +
			 						  '<br/>' +
		     (marker.url == '' ? '' : '<a class="azul" target="_blank" href="' + marker.url + '">Visitar</a> | ') + // <- Si no tiene url no se muestra el enlace de visitar
		     (num_fotos_galeria == 0 ? '' :'<a class="azul" target="_blank" href="/servlet/G_Centros?accion=mostrargaleria&idcentro=' + marker.idCentro + '">Galería imágenes</a> | ') +				
									  '<a class="azul" href="/servlet/centros/Opiniones?accion=mostrar&idcentro=' + marker.idCentro + '">Leer opiniones</a>' +
	     /*(mostrarEnlaces == '' ? '' :*/ 
	     (num_servicios == 0 ? '' : ' | <a class="azul" href="/servlet/G_Servicios?accion=mostrar&idcentro=' + marker.idCentro + '">Servicios</a>') +
		 (num_productos == 0 ? '' :' | <a class="azul" href="/servlet/G_Productos?accion=mostrar&idcentro=' + marker.idCentro + '">Productos</a>') +
		 (num_sintomas == 0 ? '' :' | <a class="azul" href="/servlet/G_Sintomas?accion=mostrar&idcentro=' + marker.idCentro + '">Síntomas</a>') +
										  '</div>' +
								  '<div class="cleaner">&nbsp;</div>' +
							  '</div>'); 									  
}

function mostrarImagen(src) {
	return(src.replace("\/normal\/", "\/max\/"));
}

function mostrarMarcador(n) {
	var marker = markers[n];
    openInfoMarcador(marker);
}

function mostrarControlZoom(mostrar) {
	if (mostrar) {
		map.addControl(controlZoom);
	} else {
		map.removeControl(controlZoom);
	}
}
function mostrarControlTipo(mostrar) {
	if (mostrar) {
		map.addControl(controlTipo);
	} else {
		map.removeControl(controlTipo);
	}
}



