var map;
var geocode;
var marker;

// asignamos a los inputs el evento de actualización de mapa

$(document).ready(function()
{
   $("input.gMaps").change(function(event){check_input();});
	 $("select.gMaps").change(function(event){check_input();});

});



/**
 * Inicialización del mapa. Ejecutamos esta función
 * cuando se carga la página.
 */

// algo falla en la llamada a start map

function start_map(type)
{
	// creamos un mapa nuevo en el elemento que le pasamos en la llamada
	map = new GMap2(document.getElementById("map_canvas"));
	// instanciamos un geolocalizador con comunicación con google
	geocoder = new GClientGeocoder();
	// añadimos controles al mapa
	//map.addControl(new GLargeMapControl());
	//map.addControl(new GMapTypeControl());
	//map.addControl(new GOverviewMapControl());
	
	// llamada desde el formulario de edición de alojamientos
	if(type == 'form')
	{
		check_input();	
	}
	// llamada desde la vista 'situación' del alojamiento
	else
	{
		var lat = $("#lat").attr('value');
		var lng = $("#lng").attr('value');
		address = lat + "," +lng	;
		load_map(address,'portada');	
	}	
};


/**
 *  Comprueba que los parámetros de la dirección no están vacíos.
 * Si no lo están muestra mensaje de error e invalidad coordenadas.
 * En caso contrario, actualiza el mapa
 */

function check_input()
{
	if(($("#calle").attr('value')!="" && $("#numero").attr('value')!="" && $("#localidad").attr('value')!="" && $("#provincia").attr('value')!="" && $("#cp").attr('value')!=""))
	{
		fetch_query($("#calle").attr('value'),$("#numero").attr('value'),$("#localidad").attr('value'),$("#provincia").attr('value'),$("#cp").attr('value'));	
	}
	else
	{
		no_encontrado(false);
	}
}


/**
 * 
 * Elabora la query a google maps con la dirección
 */

function fetch_query(calle,numero,localidad,provincia,cp)
{
	load_map(calle+" "+ numero +" "+localidad+" "+provincia +" "+cp, 'form',true);
}

/**
 * Carga del mapa
 */

function load_map(address,modo)
{
	// para que el error 'no encontrado' sólo salga cuando se ha rellenado la dirección
	if(arguments[2] != null)
	{
		display_error = arguments[2];	
	}

	// mostramos la capa
	$("#map_canvas").slideDown(500);
	// limpiamos todos los punteros sobre el mapa
	map.clearOverlays();
	// posicionamos el lugar por geolocalización
	geocoder.getLatLng(address,function showLocation(point) 
	{
	  if (!point) 
		{	
			no_encontrado(display_error);
	  } 
		else 
		{
			$("#map_error_msg").html("");
			// centramos la ventana del mapa y establecemos un zoom
	    map.setCenter(point, 16);
			// guardamos en inputs las coordenadas del punto (latitud y la longitud)
			$("#lat").attr("value",point.lat());
			$("#lng").attr("value",point.lng());
			// situamos el indicador del punto central		
	    marker = new GMarker(point);
			// añadimos el punto correspondiente a la dirección
	    map.addOverlay(marker);
			// bocadillo con la dirección
			if(modo == 'form')
			{
				// llamada desde el formulario de edición
				bocadillo = '<em>Direcci&oacute;n introducida: </em> <br/>' + address;	
			}
			else
			{		
				// llamada desde la sección 'situción'
				bocadillo = $('#bocadillo').attr('value');	
			}
			
			// si el tamaño del mapa es grande, añadimos controles
			// y bocadillo con la situación
			if($('#map_canvas').height() > 200)
			{
				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
				map.addControl(new GOverviewMapControl());
				marker.openInfoWindowHtml(bocadillo);	
			}
			
			
	    GEvent.addListener(marker, "click",function showLabel() {
	        marker.openInfoWindowHtml(bocadillo);
	      });
	  }
	});
}

/**
 * Realiza las acciones necesarias en caso de que la dirección
 * introducida no sea correcta
 */

function no_encontrado(display_error)
{
	if(display_error)
	{
		$("#map_error_msg").html("No se localiza la direcci&oacute;n de su alojamiento. Por favor, revise los datos introducidos.");	
	}
	$("#lat").attr("value",'no encontrado');
	$("#lng").attr("value",'no encontrado');
	$("#map_canvas").slideUp(1000);

}

/**
 * Elabora un mapa a partir de unas coordenadas
 */

function initialize(latitud,longitud)
{
	if (GBrowserIsCompatible())
	{
	  var map = new GMap2(document.getElementById("map_canvas"));
	  map.setCenter(new GLatLng(latitud,longitud), 13);
	}
}


