/**
 * @autor : Iván Rodríguez Espada
 * @data  : 03/03/2008
 * @description : Geolocalizador que en base al
 * campo de búsqueda indicado
 * devuelve una lista de resultados.
 * Modificado por Álvaro Campos para EROSKI Viajes
 */
 
function aleatorio(inferior,superior){
    numPosibilidades = superior - inferior
    aleat = Math.random() * numPosibilidades
    aleat = Math.round(aleat)
    return parseInt(inferior) + aleat
}  
 
var EROSKI = {};

var filtro = null;

EROSKI.Lang = {
	actual : 'es',
	es : {
		direccion : 'Dirección',
	    telefono : 'Teléfono',
		info : 'Información',
		localizacion : 'Localización'
	}
}


EROSKI.Maps = {
	//CountryCode              : [],
	filtro: null,
	AdministrativeArea       : [],
	SubAdministrativeArea    : [],
	Locality                 : [],
	//--desarrollo
	//URI         			 : ['/markers1.xml?tipo='],
	//-- definitivo (creacción xml en tiempo real)
	//URI	        		  : '../includes/Custom/centros/Google.php',
	//URI	        		  : 'google.xml',
	//URI	        		  : '?page=carga&filtro='+'eroski-center',
	URI	        			  : '/viajeseroski/includes/oficinas.xml?'+aleatorio(0,100),
		
	//Presentación Fernando 04/04/2008
    //URI	        		 : ['/appsext/AppTETD08/GoogleMarkersEstatico.xml?tipo='],
	map           			 : null,

	markerManager            : null,
	bounds                   : null,
	
	//icon : null,
	icons : new Object(),
	msg : null,
	
	/**
	 * G_NORMAL_MAP
	 * G_SATELLITE_MAP
	 * G_HYBRID_MAP
	 * G_PHYSICAL_MAP
	 * G_MOON_ELEVATION_MAP
	 * G_MOON_VISIBLE_MAP
	 * G_MARS_ELEVATION_MAP
	 * G_MARS_VISIBLE_MAP
	 * G_MARS_INFRARED_MAP
	 * G_SKY_VISIBLE_MAP
	 */
	//mapType 						 : G_NORMAL_MAP,
	
	// Opciones del mapa
	enableMapTypeControl     : true,
	enableContinuousZoom	 : true,
	enableDoubleClickZoom    : true,
	enableScrollWheelZoom    : true,
	enableGoogleBar          : true,
	enableOverviewMapControl : false,
	enableLargeMapControl    : true,
	
	// Niveles de zoom mínimo y máximo soportados por el mapa
	MIN_ZOOM_LEVEL : 5,
	MAX_ZOOM_LEVEL : 15,
	//añadir otros zoom...
	//MIN_COUNTRYS_ZOOM_LEVEL : 0,
	//MAX_COUNTRYS_ZOOM_LEVEL : 15,
	MIN_ADMINISTRATIVE_AREA_ZOOM_LEVEL : 5,
	MAX_ADMINISTRATIVE_AREA_ZOOM_LEVEL : 15,
	MIN_SUBADMINISTRATIVE_AREA_ZOOM_LEVEL : 8,
	MAX_SUBADMINISTRATIVE_AREA_ZOOM_LEVEL : 15,
	MIN_LOCALITY_ZOOM_LEVEL : 9,
	MAX_LOCALITY_ZOOM_LEVEL : 15,

    precargarImagen : function(imagen)
    {
        if (document.images)
        {
            var image = new Image();
            
            image.src = imagen;
        }
    },
	
	// Crea un icono y lo añade a la colección de iconos
	addIcon : function(name, image)
	{
	    EROSKI.Maps.precargarImagen(image);


	    var icon = new GIcon();
	    
        icon.image = image;
        //icon.shadow = "/imgs/ico.shadow50.png";
        icon.iconSize = new GSize(19, 20);														         
        //icon.shadowSize = new GSize(37, 19);
        icon.iconAnchor = new GPoint(19, 20);
        icon.infoWindowAnchor = new GPoint(9, 2);
        //icon.infoShadowAnchor = new GPoint(18, 25);
        
        EROSKI.Maps.icons[name] = icon;
	},
		
	//Crea el marker y lo inicializa con los datos pasados por parámetro
	createMarker : function(numProjects, value, latitude, longitude, tag, id, html, icono)
	{
	    var point = new GLatLng(latitude, longitude);

		var icon = EROSKI.Maps.icons[icono];
	
		
		var options =
		{
		    name: id,
		    title: value,
		    icon: icon,
        	labelText: "",
	        labelOffset: new GSize(0, -25),
	        labelClass: "num"
		};

		var marker = new LabeledMarker(point, options);
        				
		GEvent.addListener(marker, "click", function()
		{

			 if(this.map.getZoom()< EROSKI.Maps.MIN_LOCALITY_ZOOM_LEVEL){
				 this.map.setCenter(point , 12);

			}else{



				//$('direccion').innerHTML=html;
				var lang = EROSKI.Lang[EROSKI.Lang.actual];
				var tab1 = new GInfoWindowTab(lang['info'], '<div id="tab1" class="bubble">'+html+'</div>');
				//var tab2 = new GInfoWindowTab(lang['localizacion'], '<div id="detailmap"></div>');
				//var infoTabs = [tab1,tab2];
				var infoTabs = [tab1];
				marker.openInfoWindowTabsHtml(infoTabs);
				//var dMapDiv = document.getElementById("detailmap");
				//var detailmap = new GMap2(dMapDiv);
				//detailmap.setCenter(point , 15);


/*
				var CopyrightDiv = dMapDiv.firstChild.nextSibling;
				var CopyrightImg = dMapDiv.firstChild.nextSibling.nextSibling;
				CopyrightDiv.style.display = "none"; 
				CopyrightImg.style.display = "none"; 
*/
			 }


		});
		
		return marker;
	},
    
    loadMarkerManager : function()
    {
	    EROSKI.Maps.markerManager = new MarkerManager(EROSKI.Maps.map);
			
		/*
	    EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.CountryCode,
	        EROSKI.Maps.MIN_COUNTRYS_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_COUNTRYS_ZOOM_LEVEL);
		*/
	    
	    EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.AdministrativeArea,
	        EROSKI.Maps.MIN_ADMINISTRATIVE_AREA_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_ADMINISTRATIVE_AREA_ZOOM_LEVEL);
	    
	    EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.SubAdministrativeArea,
	        EROSKI.Maps.MIN_SUBADMINISTRATIVE_AREA_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_SUBADMINISTRATIVE_AREA_ZOOM_LEVEL);
	    
	    EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.Locality,
	        EROSKI.Maps.MIN_LOCALITY_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_LOCALITY_ZOOM_LEVEL);
	        
	    EROSKI.Maps.markerManager.refresh();
    },
		
	init : function() {
		if (GBrowserIsCompatible()) {
            // Creación de los diferentes iconos que tendrán los puntos a dibujar
            /*
            EROSKI.Maps.addIcon("Countrys", "/imgs/ico.flecha-roja-abajo.png");
            EROSKI.Maps.addIcon("AdministrativeAreas", "/imgs/ico.flecha-verde-abajo.gif");
            EROSKI.Maps.addIcon("SubAdministrativeAreas", "/imgs/ico.flecha-morada-abajo.gif");
            EROSKI.Maps.addIcon("Locality", "/imgs/ico.flecha-azul-abajo.gif");
            */
         //EROSKI.Maps.addIcon("Countrys", "ico.flecha-roja-abajo.png");
			EROSKI.Maps.addIcon("AdministrativeAreas", "/viajeseroski/imgs/eroski.png");
			EROSKI.Maps.addIcon("SubAdministrativeAreas", "/viajeseroski/imgs/eroski.png");
			EROSKI.Maps.addIcon("Locality", "/viajeseroski/imgs/eroski.png");
			//EROSKI.Maps.addIcon("Caprabo", $('frontendRelativePath').value +  "/imgs/Google/caprabo.png");
			//EROSKI.Maps.addIcon("Movil", $('frontendRelativePath').value +  "/imgs/Google/movil.png");
			
			// Configuración de los niveles máximos y mínimos de zoom
			G_NORMAL_MAP.getMinimumResolution = function() {return EROSKI.Maps.MIN_ZOOM_LEVEL;}
			G_NORMAL_MAP.getMaximumResolution = function() {return EROSKI.Maps.MAX_ZOOM_LEVEL;}
			
			// Inicio LocalSearch
			var div = new Element('div');			
			var opts = {resultList : div, suppressInitialResultSelection : true, showOnLoad: true, 
			onMarkersSetCallback: function(markers) {
				for(var i = 0; i < markers.length; i++) {
					markers[i]['marker'].hide();
				}
			}, 
			onGenerateMarkerHtmlCallback : function(marker, node, result) {
				marker.hide();	
				marker.closeInfoWindow();			
				return node;
			},			
			onSearchCompleteCallback : function(gs) {
				return null;
			}};
			// Fin parte LocalSearch

			this.map = new GMap2($('map'), {googleBarOptions: opts});
			GEvent.addListener(this.map, 'load', function() {
				//EROSKI.Maps.msg.hide(); // Oculta el mensaje de cargando...
			});

			/*
			GEvent.addListener(marker, 'load', function() {
				//EROSKI.Maps.msg.hide(); // Oculta el mensaje de cargando...
				console.log("xxxxxx");
			});
			*/
			
			var msg = function(msg) {
				this.hidden = false;
				this.msg   = msg;
			};
			msg.prototype = new GOverlay();
			msg.prototype.initialize = function(map) {
				var div = document.createElement("div") ;
				div.innerHTML = this.msg;
				div.style.position = "absolute" ;
				div.style.margin = "10px";
				this.div_ = div;
				this.map_ = map;
				//map.getPane(G_MAP_MAP_PANE).appendChild(div);				
				map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div);
				var z = 10000000000;
          	this.div_.style.zIndex = z;
			}
			msg.prototype.remove = function() {
				console.log(this.div_);
				this.div_.parentNode.removeChild(this.div_);
			}			
			msg.prototype.redraw = function(force) {
	      }
   	   msg.prototype.show = function() {
				if (this.div_) {
					this.div_.style.display="";
					this.redraw();
				}
				this.hidden = false;
			}      
      	msg.prototype.hide = function() {
        		if (this.div_) {
          		this.div_.style.display="none";
        		}
        		this.hidden = true;
      	}
			
			
			
	  		if(EROSKI.Maps.enableLargeMapControl)
	  			this.map.addControl(new GLargeMapControl());
	  			
	  		if(EROSKI.Maps.enableOverviewMapControl)	
				this.map.addControl(new GOverviewMapControl());
			
			if(EROSKI.Maps.enableMapTypeControl)	
				this.map.addControl(new GMapTypeControl());
			
			if(EROSKI.Maps.enableContinuousZoom)
				this.map.enableContinuousZoom();
				
			if(EROSKI.Maps.enableDoubleClickZoom)
      		    this.map.enableDoubleClickZoom();
      	
      	    if(EROSKI.Maps.enableScrollWheelZoom)
	      	    this.map.enableScrollWheelZoom();


	      	
          	new GKeyboardHandler(this.map);

            this.map.savePosition();
  			
  			this.map.setCenter(
  			    new GLatLng(40.396764, -3.713379), 
  			    EROSKI.Maps.MIN_ZOOM_LEVEL, G_NORMAL_MAP);

			if(EROSKI.Maps.enableGoogleBar)
                //this.map.enableGoogleBar();
		    
			//GDownloadUrl(EROSKI.Maps.URI + tipoSeccion, function(data) 
			GDownloadUrl(EROSKI.Maps.URI, function(data) 
		    {
			    

				//console.log(xmls);
			    var xml = GXml.parse(data);
			    var markers = xml.documentElement.getElementsByTagName("marker");
			    //EROSKI.Maps.markers = xml.documentElement.getElementsByTagName("marker");
			    //console.log(markers.length);

				//EROSKI.Maps.msg = new msg("Cargando localizaciones...");			

			

						
			    for (var i = 0; i < markers.length; i++) 
			    {
				    //Identificación del marker
				    var tag = markers[i].parentNode.tagName;
				    var id = i + 1;
				    
                    //Decodificación XML (extrae los valores de XML)
				    var numProjects = 1;
				    var value = markers[i].getAttribute("dc");
				    //var latitude = parseFloat(markers[i].getAttribute("Latitude"));
					var latitude = parseFloat(markers[i].getAttribute("lt"));
				    //var longitude = parseFloat(markers[i].getAttribute("Longitude"));
					var longitude = parseFloat(markers[i].getAttribute("lg"));
                                        
					var lang = EROSKI.Lang[EROSKI.Lang.actual];

					var html = "";
					html += '<div id="tab1" class="bubble"><img src="' + markers[i].getAttribute("img") + '">';
					html += '<div id="globodr"><h3>' + markers[i].getAttribute("dc") + '</h3>';
					html += lang['direccion'] + ': ' + markers[i].getAttribute("dir") + '<br  />';
					html += markers[i].getAttribute("cp") + ', ' + markers[i].getAttribute("pb") + '<br  />';
					html += markers[i].getAttribute("pr") + '<br  />';
					html += lang['telefono'] + ': ' + markers[i].getAttribute("tf");
					//html += '<a href="' + url + '" class="mas-info" onclick="getInfo(this.href); return false;">' +
					html += '</div></div>';

					//console.log(tag);
					
					var icono = tag;

					//console.log("x"+markers[i].getAttribute("ico"));
					/*if(markers[i].getAttribute("ico")=="1"){
						icono="Movil";
					}*/
					

					if(tag =="AdministrativeAreas" || tag == "SubAdministrativeAreas"){
						value=markers[i].getAttribute("poblacion");


					}
					
				    
				    //Generar marker
				    var marker = EROSKI.Maps.createMarker(numProjects, value, latitude, longitude, tag, id, html, icono);
				
				    //Añadir marker al grupo correspondiente
					/*
				    if(tag == "Countrys")
				    {
				        EROSKI.Maps.CountryCode.push(marker);
				    }
					*/
				    //else if(tag == "AdministrativeAreas")
					if(tag =="AdministrativeAreas")
				    {
						EROSKI.Maps.AdministrativeArea.push(marker);
				    }
				    else if(tag == "SubAdministrativeAreas")
				    {
						EROSKI.Maps.AdministrativeArea.push(marker);
						EROSKI.Maps.SubAdministrativeArea.push(marker);
				    }
				    else if(tag == "Locality")
				    {
						EROSKI.Maps.Locality.push(marker);
				    }
				}//for												
			    
                EROSKI.Maps.loadMarkerManager();

			});//GDownloadUrl
		}
	}
};//EROSKI.Maps

window.addEvent('load', function() {
	//filtro = $('filtro').value;
	setTimeout('EROSKI.Maps.init()', 0);
});

window.addEvent('unload', function() {
    GUnload();
});

