//Busqueda de direcciones
var marker = null;
function MiramapaDirecciones(nombre,direccion,direcciones,combo,comunidad,pais,contenedor){
	this.nombre = nombre;
	this.direcciones = document.getElementById(direcciones);
	this.direccion = document.getElementById(direccion);
	this.contenedor = document.getElementById(contenedor);
	this.combo = document.getElementById(combo);
	this.pais = pais;
	this.comunidad = comunidad;
	this.marker = null;
	this.status=[];
	this.status[G_GEO_SUCCESS]            = "Resultados.";
	this.status[G_GEO_MISSING_ADDRESS]    = "Dirección desconocida.";
	this.status[G_GEO_UNKNOWN_ADDRESS]    = "Dirección desconocida.";
	this.status[G_GEO_UNAVAILABLE_ADDRESS]= "Dirección desconocida.";
	this.status[G_GEO_BAD_KEY]            = "Googlemap key incorrecto.";
	this.status[G_GEO_TOO_MANY_QUERIES]   = "Demasiados resultados";
	this.status[G_GEO_SERVER_ERROR]       = "Error del servidor.";
	this.geo = new GClientGeocoder();
	this.geo.setBaseCountryCode("ES");
	this.lat = [];
	this.lng = [];
	this.Accu = [];
	this.precis = [];
}
MiramapaDirecciones.prototype.setInicial = function(css){
	
	this.direccion.className = css;
	
}
MiramapaDirecciones.prototype.setTXTDireccion = function(param){
	
	if(param != null)this.direccion.value = param;
	else this.direccion.value = "";
}
MiramapaDirecciones.prototype.showAddress = function()
{
	miramapaNombre.setTXTNombre("");
	//Borramos markas y la info de mapa
	map.clearOverlays();
	miramapaBusqueda.setPaginacion(null);
	miramapaBusqueda.setTitulo(null);
	
	var now=new Date();
	var html = new Array();
	this.lat.length=0;

	this.direcciones.innerHTML = "<img id='cargandoDirecciones' src='/miramapa/imagenes/ajax-loader-2.gif' />";
	this.visualizar();
		
	this.geo.getLocations(this.direccion.value + ", " + this.combo.value + ", " + this.comunidad + ", " + this.pais, function (result){
				miramapaDirecciones.visualizar();
				//visualizar status code
				miramapaDirecciones.direcciones.innerHTML = "<p class='sinResultados txtNegr11'>" + miramapaDirecciones.status[result.Status.code]+"<p>";
			
				if (result.Status.code == G_GEO_SUCCESS){
						var then=new Date();
						//Recorremos los resultados
						miramapaDirecciones.direcciones.innerHTML = "";
						
						for (var i=0; i<result.Placemark.length; i++){
							if(!miramapaDirecciones.isPoblacion(result.Placemark[i].address, miramapaDirecciones.combo.value)){
								miramapaDirecciones.lat[i]=result.Placemark[i].Point.coordinates[1];
								miramapaDirecciones.lng[i]=result.Placemark[i].Point.coordinates[0];
									html[i]=" - "+ result.Placemark[i].address;
									miramapaDirecciones.Accu[i] = "";
									miramapaDirecciones.precis[i]=3*html[i].split(",").length;
									
									var point=new GLatLng(miramapaDirecciones.lat[i],miramapaDirecciones.lng[i]);
									var coords="<small> ("+miramapaDirecciones.lat[i]+", "+miramapaDirecciones.lng[i]+")</small>";
									var addr = result.Placemark[i].address;
									var via = addr.split(',');
									
									if(result.Placemark.length > 1){
										document.getElementById("direcciones").innerHTML += "<a href='javascript:void(null);' onclick=\"miramapaDirecciones.go(miramapaDirecciones.lat["+i+"],miramapaDirecciones.lng["+i+"],16," + i + ",false,'" + via[0] + "',new GMarker(new GLatLng(miramapaDirecciones.lat[" + i + "],miramapaDirecciones.lng[" + i + "]), {title:'" + addr + "'})); \">"+ html[i]+"</a><br>";
									} else {
										miramapaDirecciones.direccion.value = via[0];
										if(miramapaDirecciones.marker != null)miramapaDirecciones.marker.remove();
										miramapaDirecciones.marker = new GMarker(point, {title:'' + addr});	
									}
							}		
				}
				
				var delay=(then-now)/1000;
				
				if(result.Placemark.length > 1){
						document.getElementById("direcciones").innerHTML += "<br /><a href='javascript:miramapaDirecciones.cerrar();' title='cerrar'>[x]</a>";
				} else if(result.Placemark.length == 1){
					
					if(!miramapaDirecciones.isPoblacion(result.Placemark[0].address, miramapaDirecciones.combo.value)){	
						miramapaDirecciones.direcciones.style.display = "none";
							// Posiciona el mapa y la marca si solo viene un resultado
							miramapaDirecciones.go(miramapaDirecciones.lat[0],miramapaDirecciones.lng[0],16,0,false,null,miramapaDirecciones.marker);
						} else {
							miramapaDirecciones.direcciones.innerHTML = "<p class='sinResultados txtNegr11'>" + miramapaDirecciones.status[G_GEO_MISSING_ADDRESS] + "</p>";
						}	
					
				} else {
					//Ocultamos el cargando en el mapa:
				}
						
		}
	});
}

MiramapaDirecciones.prototype.isPoblacion = function(direccion,poblacion){
	if(direccion == poblacion + ", " + this.pais)return true;
	else return false;
}
MiramapaDirecciones.prototype.isEnter = function(evt){
		var key = (evt) ? evt.which : evt.keyCode;
		if(key==13)return true;
		return false;
}
			
MiramapaDirecciones.prototype.cerrar = function(){
			this.direcciones.innerHTML = "";
			this.ocultar();
}
MiramapaDirecciones.prototype.ocultar = function(){
			this.direcciones.style.display = "none";
}
MiramapaDirecciones.prototype.visualizar = function(){
			
			var pos = this.getAbsoluteElementPosition(this.contenedor.id)
			var aux = (isIE7)? 81 : 0;
			this.direcciones.style.top = (pos.top + aux) + "px";
			this.direcciones.style.left = pos.left + "px";
			
			this.direcciones.style.display = "block";
						
}
//SET MARKER
function setMarker(){
	if(marker != null){
		
		map.addOverlay(marker);
		marker = null;
	}
}
MiramapaDirecciones.prototype.go = function(lat,lng,zoom,num,sw,addr,mark){
	
	var aux = GEvent.addListener(map, 'moveend', function() {
		//Cuando este posicionado el mapa realizamos la busqueda de establecimientos
		miramapaBusqueda.buscarPorMapaDetalle();
		GEvent.removeListener(aux);
	  });

	if(addr != null)this.direccion.value = addr;
	map.setCenter(new GLatLng(lat,lng),zoom);
	map.addOverlay(mark);
	
}
MiramapaDirecciones.prototype.getAbsoluteElementPosition = function(element) {
	  if (typeof element == "string")
		    element = document.getElementById(element)
		    
		  if (!element) return { top:0,left:0 };
		  
		  var y = 0;
		  var x = 0;
		  while (element.offsetParent) {
		    x += element.offsetLeft;
		    y += element.offsetTop;
		    element = element.offsetParent;
		  }
		  return {top:y,left:x};
}
