	/**
	 * Fichero que controla todos los eventos JavaScript de los mapas para el buscadorV10
	 * 
	 *  @author Arturo Diaz
	 *  @copyright RuralGest S.L.
	 *  @version 1.0.0.0
	 *  @since 09/02/2011
	 *  
	 ************************************************************************************* */

	// ---- Variables Globales
	var MapBV10_RutaRaiz='./';
	var MapBV10_RutaRaiz_SCR=MapBV10_RutaRaiz+'../scr/';
	var MapBV10_RutaAccion=MapBV10_RutaRaiz+'modulos/mapas_buscadorV10/lib/accion.mapas_BV10.php';
	var MapBV10_CapaResultadosBusqueda='MapBV10_CapaResultadosBusqueda_';
	
	// --- Variables del Mapa
	var BV10_Mapa=null;
	var BV10_TodasMarcas=[];
	var BV10_bounds = null;
	var BV10_MarkManager=null;
	var BV10_ListaCasas_Map=[];
	var BV10_directionsDisplay=null;
	var BV10_directionsService = new google.maps.DirectionsService();
	
	/**
	 * Muestra el mapa con todas las casas del resultado
	 * 
	 * @param int id_operador
	 * @param int id_oficina
	 * @returns boolean
	 */
	function MapBV10_verResultadosEnMapa(id_operador,id_oficina)
	{
		if(!id_operador>0)
			id_operador=0;
		if(!id_oficina>0)
			id_oficina=0;
		
		// ---- Creamos la capa para el dialog del mapa
		nombre_capa=MapBV10_CapaResultadosBusqueda+id_operador+'_'+id_oficina;
		glb_CrearCapa(nombre_capa);
		
		// ---- Quitamos contenido porque el Explorer no se aclara
		$('#fila_1').hide();
		
		// -----
		titulo_='Situar b&uacute;squeda en el mapa';
		if($('#situar_busqueda_mapa').length>0)
			titulo_=$('#situar_busqueda_mapa').val();
		
		// ---- Creamos el dialog
		ancho_=1100;
		alto_=750;
		$('#'+nombre_capa).dialog(
		{
			bgiframe:true,
			minWidth:ancho_, 
			minHeight:alto_,
			width:ancho_,
			height:alto_,
			title:titulo_,
			modal:true,
			overlay:
			{
				opacity:1,
				background:"black"
			},
			draggable: false,
			resizable: false,
			buttons: 
			{
				'Cerrar': function() 
				{
					//$('.ui-dialog').hide();
					$(this).dialog('close');
				}
			},
			close: function(event, ui) 
			{
				$('.ui-dialog').hide();
				$('#fila_1').show();
				$(this).dialog('destroy');
			}
		});
		$('#'+nombre_capa).html(glb_getHTMLCargando(MapBV10_RutaRaiz_SCR,false,''));
		
		// ---- Hacemos la llamada para obtener el mapa
		parametros= 'accion=1'+
					'&ruta_raiz='+MapBV10_RutaRaiz_SCR+
					'&id_operador='+id_operador+
					'&id_oficina='+id_oficina;
		$.post(MapBV10_RutaAccion,parametros,function(data,Status)
		{
			resultado=data.split('|');
			if(resultado[0]=='KO')
			{
				alert('Se ha producido un error => '+resultado[1]);
				$('#'+nombre_capa).dialog('destroy');
			} else
			{
				$('#'+nombre_capa).html(data);
			}	
		});
	}
	

	function BV10_IniciarMapa()
	{
		if (!GBrowserIsCompatible()) 
		{
			alert('El navegador no es compatible con los mapas georeferenciados de RuralGest');
			return false;
		}

		// ---- Creacion del mapa y activacion de controladores
	    BV10_Mapa = new GMap2(document.getElementById("BV10_capa_mapa"));
	    BV10_Mapa.addControl(new GLargeMapControl());
	    BV10_Mapa.addControl(new GMapTypeControl());
	    //BV10_Mapa.setCenter(new GLatLng(39.104409,-5.4657678),9);
	    BV10_Mapa.setCenter(new GLatLng(40.416712,-3.70327),9);
	    
	    // ---- Iniciamos todo el array con las marcas
	    BV10_TodasMarcas.length = 0;
	    
	    // --- Cojemos el cuadrado actual del mapa, para luego centrar las marcas
	    BV10_bounds=new GLatLngBounds; 
	}

	function BV10_IniciarMapa_V3()
	{
		if (!GBrowserIsCompatible()) 
		{
			alert('El navegador no es compatible con los mapas georeferenciados de RuralGest');
			return false;
		}

		// ---- Creacion del mapa y activacion de controladores
		myLatlng = new google.maps.LatLng(40.416712,-3.70327);
	    myOptions = {
	      zoom: 9,
	      center: myLatlng,
	      mapTypeId: google.maps.MapTypeId.ROADMAP
	    };
	    BV10_Mapa = new google.maps.Map(document.getElementById("BV10_capa_mapa"), myOptions);
	    
	    // ---- Creacion del objeto para rutas
	   BV10_directionsDisplay=new google.maps.DirectionsRenderer();
	   BV10_directionsDisplay.setMap(BV10_Mapa);
	    
	    // ---- Iniciamos las marcas con los filtros por defecto
	    MapBV10_setFiltro(1);
	}
	
	function MapBV10_CentrarMarcas()
	{
		// ---- Centramos los puntos, cojemos el cuadrado resultante y calculamos el centro y el zoom
		BV10_Mapa.fitBounds(BV10_bounds);
		//BV10_Mapa.setZoom(BV10_Mapa.getZoom()+1);
	}
	
	function MApBV10_CargaOfertasCasa(id_casa_marca)
	{
		ident_capa_of='csOfertasSimplesV10_'+id_casa_marca+'_0';
		CargarDatosCasaAjax_Indv_10(ident_capa_of, MapBV10_RutaRaiz);
	}

	function BV10_setBaremoPrecio(activo,baremo)
	{	
		//alert(activo+' => '+baremo);
		for(ind_marca in BV10_TodasMarcas)
		{
			plantilla_icono="http://www.ruralgest.net/scr/images/mapaV10/casa_"+baremo+".png";
			Marca=BV10_TodasMarcas[ind_marca];
			Icono=Marca.getIcon();
			//alert(Icono);
			//if(Icono.image==plantilla_icono)
			if(Icono.wa==plantilla_icono)
				Marca.setVisible(activo);
		}
	}
	
	/**
	 * Devuelve la ventana para ver la ficha de una casa dentro del Mapa
	 * 
	 * @param int id_casa
	 * @param int id_operador
	 * @param int id_oficina
	 * @returns string => HTML
	 */
	function MapBV10_verFichaEnMapa(id_casa,id_operador,id_oficina)
	{
		if(!id_operador>0)
			id_operador=0;
		if(!id_oficina>0)
			id_oficina=0;
		
		// ---- Hacemos la llamada para obtener el mapa
		parametros= 'accion=2'+
					'&ruta_raiz='+MapBV10_RutaRaiz_SCR+
					'&id_casa='+id_casa+
					'&id_operador='+id_operador+
					'&id_oficina='+id_oficina;
		$.post(MapBV10_RutaAccion,parametros,function(data,Status)
		{
			resultado=data.split('|');
			if(resultado[0]=='KO')
			{
				return 'Se ha producido un error => '+resultado[1];
			} else
			{
				return data;
			}	
		});
	}
	
	/**
	 * Crea todas las marcas de la bœsqueda
	 * 
	 * @param array Marcadores
	 */
	function MapBV10_CrearMarcas(Marcadores)
	{
		// ---- Inicializamos variables
		MapBV10_LimpiaMarcadores();
		
		// ---- Formato de la marca => nueva_marca=[id_casa,lat,long,id_baremo,descripcion];
		for (var i = 0; i < Marcadores.length; i++) 
		{
			nueva_marca_2=MapBV10_crearMarca(Marcadores[i]);
			BV10_TodasMarcas.push(nueva_marca_2);
		}
	}
	
	/**
	 * Crea la mraca de una casa, se le pasa un array con los datos de la casa
	 * 
	 * @param LatLng point
	 * @param array Marca
	 * @returns {google.maps.Marker}
	 */
	function MapBV10_crearMarca(Marca) 
	{
		baremo=Marca[3];
		id_casa_marca=Marca[0];
		titulo=Marca[4];
		es_alternativa=Marca[5];
		n_opiniones=Marca[6];
		es_hotel=Marca[7];
		
		// ---- punto de la marca, coordenadas de la casa
		point = new google.maps.LatLng(Marca[1],Marca[2]);
		
		// ---- Si tenemos marcada la opci—n de ver la imagen de la casa en vez de los iconos
		if($('#BV10_ver_fotografias').attr('checked'))
		{
			tam_imagen_gg_alto=65;
			tam_imagen_gg_ancho=65;
			ruta_imagen_aux='http://www.ruralgest.net/scr/lib/imagen.php?id_casa='+id_casa_marca+'&ajustar_imagen='+tam_imagen_gg_ancho+'_'+tam_imagen_gg_alto+'&forzar_alto=1';
			ancho_ancla=0;
		}
		// ---- Si se montan los iconos y no las fotos
		else
		{
			tam_imagen_gg_alto=44;
			tam_imagen_gg_ancho=44;
			// ---- Control de la imagen a usar, Si es dias minimo viene con baremo a 4 y como alternativa
			ruta_imagen_aux='http://www.ruralgest.net/scr/images/mapaV10/casa_'+baremo;
			ancho_ancla=15;
			if(es_alternativa==1)
			{
				tam_imagen_gg_alto=31;
				tam_imagen_gg_ancho=22;
				ruta_imagen_aux='http://www.ruralgest.net/scr/images/mapaV10/alt_'+baremo;
				ancho_ancla=7;
			}
			if(n_opiniones>0)
				ruta_imagen_aux+='op';
			ruta_imagen_aux+='.png';
			
			if(es_hotel==1)
				ruta_imagen_aux=ruta_imagen_aux.replace('casa', 'hotel');
		}
			
		// ---- Creacion de la imagen
		var image = new google.maps.MarkerImage(ruta_imagen_aux,
			      new google.maps.Size(tam_imagen_gg_ancho,tam_imagen_gg_alto),
			      new google.maps.Point(0,0),
			      new google.maps.Point(ancho_ancla,tam_imagen_gg_alto));
		
		// ---- Creacion de la Sombra
		if((es_alternativa==1) || ($('#BV10_ver_fotografias').attr('checked')))
			var sombra=null;
		else
		{
			//alert('si');
			icono_sombra='http://www.ruralgest.net/scr/images/mapaV10/casa_sombra.png';
			//icono_sombra='http://www.ruralgest.net/scr/images/estrella.png';
			var sombra = new google.maps.MarkerImage(icono_sombra,
				      new google.maps.Size(29,15),
				      new google.maps.Point(0,0),
				      new google.maps.Point(15,15));
		}

		var marcador_nuevo = new google.maps.Marker({
	        position: point, 
	        map: BV10_Mapa,
	        //title:titulo+"\u20ac", // Este es el euro
	        icon: image,
	        shadow: sombra,
	        flat: true,
	        zIndex:5,
	        id_casa:id_casa_marca,
	        descripcion:titulo+"\u20ac"
	    }); 

		// ---- A–adimos el click a la marca
		//google.maps.event.addListener(marcador_nuevo, 'click', function()
		google.maps.event.addListener(marcador_nuevo, 'click', function() 
		{
			// ---- Asigna el click a la chincheta
			parametros_mark='accion=2'+
							'&ruta_raiz='+MapBV10_RutaRaiz_SCR+
							'&id_casa='+this.id_casa+
							'&id_operador='+id_operador+
							'&id_oficina='+id_oficina;
			//alert(parametros_mark);
			
			$.ajax(
			{
	            async:true,
	            type: "POST",
	            dataType: "html",
	            data:parametros_mark,
	            contentType: "application/x-www-form-urlencoded",
	            url: MapBV10_RutaAccion,
	            success: function(data,Status)
	            {
	            	//data='<table width="1000" border="0" cellspacing="0" cellpadding="0"><tr><td width="100%" bgcolor="#FF0000">Hola</td></tr></table>';
	            	// ---- Creamos la ventana de info de la chicheta
	    			infowindow = new google.maps.InfoWindow(
	    								{
	    									content:data    									
	    								});
	            	//infowindow.setOptions();
	            	//infowindow.setContent(data);
	            	infowindow.open(BV10_Mapa,marcador_nuevo);
	            }
	        }); 
		});

		google.maps.event.addListener(marcador_nuevo, 'rightclick', function(event) 
		{
			MapBV10_verMenuMarca(this);
		});

		google.maps.event.addListener(marcador_nuevo, 'mouseover', function(event) 
		{
			MapBV10_verImagenMarca(this);
		});

		google.maps.event.addListener(marcador_nuevo, 'mouseout', function(event) 
		{
			$('.contextmenu_imagen').remove();
		});
		
		// --- Control de iconos visibles alternativa
		if((!$('#BV10_ver_iconos_ko').attr('checked')) && (es_alternativa==1))
			marcador_nuevo.setVisible(false);

		// --- Control de iconos visibles opiniones
		/*if((!$('#BV10_ver_iconos_opiniones').attr('checked')) && (n_opiniones>=7))
			marcador_nuevo.setVisible(false);*/
		
		// ---- Control de iconos visibles por baremo
		for(id_baremo_aux=0;id_baremo_aux<=3;id_baremo_aux++)
			if((!$('#BV10_baremo_precio_'+id_baremo_aux).attr('checked')) && (baremo==id_baremo_aux))
				marcador_nuevo.setVisible(false);
		
		// ---- Ampliamos el cuadro del mapa al punto de la nueva marca
		BV10_bounds.extend(point);
		
		return marcador_nuevo;
	}
	
	function MapBV10_verMenuMarca(Marca) 
	{
		caurrentLatLng=Marca.position;
		var projection;
        var contextmenuDir;
        projection = BV10_Mapa.getProjection() ;
        $('.contextmenu_imagen').remove();
        $('.contextmenu').remove();
        contextmenuDir = document.createElement("div");
        contextmenuDir.className  = 'contextmenu';
        contextmenuDir.innerHTML = '<div class="context" style="cursor:pointer;" title="Pone la marca actual debajo del resto de marcas" onClick="MapBV10_EnviarMarcaAtras('+Marca.id_casa+');">Enviar atr&aacute;s<\/div>'+
        							'<div class="context" style="cursor:pointer;" title="Calcula la ruta de tu casa hasta la marca." onClick="MapBV10_CalcularRuta('+Marca.id_casa+');">Llegar hasta aqu&iacute;<\/div>';

        $(BV10_Mapa.getDiv()).append(contextmenuDir);
        
        setMenuXY(caurrentLatLng,'contextmenu');

        contextmenuDir.style.visibility = "visible";
	}
	
	function MapBV10_verImagenMarca(Marca)
	{
		caurrentLatLng=Marca.position;
		var projection;
        var contextmenuDir;
        projection = BV10_Mapa.getProjection() ;
        $('.contextmenu_imagen').remove();
        $('.contextmenu').remove();
        contextmenuDir = document.createElement("div");
        contextmenuDir.className  = 'contextmenu_imagen';
        /*contextmenuDir.innerHTML = '<div class="context" style="cursor:pointer;" title="Pone la marca actual debajo del resto de marcas" onClick="MapBV10_EnviarMarcaAtras('+Marca.id_casa+');">Enviar atr&aacute;s<\/div>'+
									'<div class="context" style="cursor:pointer;" title="Calcula la ruta de tu casa hasta la marca." onClick="MapBV10_CalcularRuta('+Marca.id_casa+');">Llegar hasta aqu&iacute;<\/div>'+
		*/
		contextmenuDir.innerHTML = '<div class="context">'+
        							'<img id="lightbox-image" style="display: inline;" src="http://www.ruralgest.net/scr/lib/imagen.php?id_casa='+Marca.id_casa+'">'+
        							'<br>'+Marca.descripcion+
        							'<\/div>';

        $(BV10_Mapa.getDiv()).append(contextmenuDir);
        
        setMenuXY(caurrentLatLng,'contextmenu_imagen');

        contextmenuDir.style.visibility = "visible";
	}
	
	function MapBV10_EnviarMarcaAtras(id_casa_marca)
	{
		//alert(id_casa_marca);
		maequita=MapBV10_LocalizarMarca(id_casa_marca);
		if(marquita!=null)
    	{
    		marquita.setZIndex(marquita.getZIndex()-250);
    		$('.contextmenu').remove();
    		return true;
    	}
	}
	
	function MapBV10_LocalizarMarca(id_casa_marca)
	{
		if (BV10_TodasMarcas) 
			for (i in BV10_TodasMarcas)
			{
	        	marquita=BV10_TodasMarcas[i];
	        	if(marquita.id_casa==id_casa_marca)
	        		return marquita;
			}
		return null;
	}
	
	function MapBV10_CalcularRuta(id_casa_marca)
	{
		navigator.geolocation.getCurrentPosition(function(position)
		{
			//alert(id_casa_marca+" => Latitud: "+position.coords.latitude+"\nLongitud: "+position.coords.longitude);
			marca_fin_ruta=MapBV10_LocalizarMarca(id_casa_marca);
			if(marca_fin_ruta!=null)
			{
				inicio=new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
				var request = {
			        origin:inicio, 
			        destination:marca_fin_ruta.position,
			        travelMode: google.maps.DirectionsTravelMode.DRIVING
			    };
			    BV10_directionsService.route(request, function(response, status) 
			    {
			      if (status == google.maps.DirectionsStatus.OK) {
			        BV10_directionsDisplay.setDirections(response);
			      }
			    });
			    $('.contextmenu_imagen').remove();
		        $('.contextmenu').remove();
			}
		}, MapBV10_NoMostrarRuta);
	}
	function MapBV10_MostrarRuta(position,id_casa_marca)
	{
		alert("Latitud: "+position.coords.latitude+"\nLongitud: "+position.coords.longitude);
		return position;
	}
	function MapBV10_NoMostrarRuta(){
		alert("No has dejado mostrar tu ubicacion");
	}
	
	
	function getCanvasXY(caurrentLatLng)
	{
		  var scale = Math.pow(2, BV10_Mapa.getZoom());
		  var nw = new google.maps.LatLng(
		      BV10_Mapa.getBounds().getNorthEast().lat(),
		      BV10_Mapa.getBounds().getSouthWest().lng()
		  );
		  var worldCoordinateNW = BV10_Mapa.getProjection().fromLatLngToPoint(nw);

		  var worldCoordinate = BV10_Mapa.getProjection().fromLatLngToPoint(caurrentLatLng);
		  var caurrentLatLngOffset = new google.maps.Point(
		      Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale),
		      Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale)
		  );
		  return caurrentLatLngOffset;
   }
	
	function setMenuXY(caurrentLatLng,estilo)
	{
	     var mapWidth = $('#BV10_capa_mapa').width();
	     var mapHeight = $('#BV10_capa_mapa').height();
	     var menuWidth = $('.'+estilo).width();
	     var menuHeight = $('.'+estilo).height();
	     var clickedPosition = getCanvasXY(caurrentLatLng);
	     var x = clickedPosition.x ;
	     var y = clickedPosition.y ;

	      if((mapWidth - x ) < menuWidth)//if to close to the map border, decrease x position
	          x = x - menuWidth;
	     if((mapHeight - y ) < menuHeight)//if to close to the map border, decrease y position
	         y = y - menuHeight;

	     $('.'+estilo).css('left',x  );
	     $('.'+estilo).css('top',y );
	};
	
	function MapBV10_LimpiaMarcadores() 
	{
		if (BV10_TodasMarcas) 
	    {
			for (i in BV10_TodasMarcas) 
	        	BV10_TodasMarcas[i].setMap(null);
	        
			// ---- Iniciamos todo el array con las marcas
			BV10_TodasMarcas.length = 0;
	        BV10_TodasMarcas=[];
	        
		    // --- Cojemos el cuadrado actual del mapa, para luego centrar las marcas
		    //BV10_bounds=new GLatLngBounds;
		    BV10_bounds=new google.maps.LatLngBounds();
	    }
	}
	
	function MapBV10_setFiltroIcono(id_icono)
	{
		// ---- Activamos o desactivamos el icono segœn proceda
		ruta_img_fle_ok='http://www.ruralgest.net/scr/images/mapaV10/icono_flecha_ok.gif';
		ruta_img_fle_ko='http://www.ruralgest.net/scr/images/mapaV10/icono_flecha_ko.gif';
		ruta_img_raiz_ok='http://www.ruralgest.net/scr/images/iconos_servicios/caracteristica_'+id_icono+'_ok.gif';
		ruta_img_raiz_ko='http://www.ruralgest.net/scr/images/iconos_servicios/caracteristica_'+id_icono+'_ko.gif';
		elemento_img=$('#MapBV10Icono_'+id_icono+'_flechita');
		//alert(elemento_img.attr('src'));
		if(elemento_img.attr('src')==ruta_img_fle_ko)
		{
			// ---- Flechita
			elemento_img.attr('src',ruta_img_fle_ok);
			
			// ---- Imagen de fondo
			$('#MapBV10Icono_'+id_icono).css('background-image','url('+ruta_img_raiz_ko+')');
		}
		else
		{
			elemento_img.attr('src',ruta_img_fle_ko);
			$('#MapBV10Icono_'+id_icono).css('background-image','url('+ruta_img_raiz_ok+')');
		}
		
		// ---- Lanzamos el filtro del Mapa
		$('#BV10_ver_fotografias').attr('checked',false);
		MapBV10_setFiltro();
	}
	
	function MapBV10_setFiltro(ajustar_centrado)
	{
		MapBV10_LimpiaMarcadores();
		
		if(!id_operador>0)
			id_operador=0;
		if(!id_oficina>0)
			id_oficina=0;
		
		// ---- Cargando
		$('#MapBV10_Cargando').html(glb_getHTMLCargando(MapBV10_RutaRaiz_SCR,false,''));
		
		// ---- Hacemos la llamada para obtener el mapa
		parametros= 'accion=3'+
					'&ruta_raiz='+MapBV10_RutaRaiz_SCR+
					'&iconos_filtros='+MapBV10_getIconosMarcados()+
					'&id_operador='+id_operador+
					'&id_oficina='+id_oficina;
		//alert(parametros);
		$.post(MapBV10_RutaAccion,parametros,function(data,Status)
		{
			resultado=data.resulta;
			if(resultado=='KO')
			{
				return 'Se ha producido un error => '+resultado[1];
			} else
			{
				// ---- El resultado es JSon, se interpreta
				//alert(data.ListaMarcadores);
				MapBV10_CrearMarcas(data.ListaMarcadores);
				
				if(ajustar_centrado==1)
					MapBV10_CentrarMarcas();
			}	
			
			$('#MapBV10_Cargando').html('');
		},"json");
	}
	
	/**
	 * Obtiene la lista de iconos marcados para hacer el filtro
	 * Es una cadena con los id_icono separados por comas
	 * 
	 * @returns string
	 */
	function MapBV10_getIconosMarcados()
	{
		resulta='';
		
		// ----- Cojemos todos los iconos que esten activos
		$('.MapBV10Iconos').each(function()
		{
			id_icono_aux=this.id.split('_');
			id_icono_aux=id_icono_aux[1];
			ruta_img_raiz='http://www.ruralgest.net/scr/images/mapaV10/icono_flecha_ko.gif';
			if(this.src==ruta_img_raiz)
			{
				//alert(id_icono_aux+' => '+this.src);
				if(resulta!='') resulta+=',';
				resulta+=id_icono_aux;
			}
		});
		
		return resulta;
	}

