/**
 * @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.
 */
 

 
var EROSKI = {};

var filtro = null;

EROSKI.Lang = {
	actual : globals_web_eroski.lang,
	es : {
		direccion : 'Dirección',
	        telefono : 'Teléfono',
		info : 'Información',
		localizacion : 'Localización'
	},
	eu : {
		direccion : 'Helbidea',
	        telefono : 'Telefonoa',
		info : 'Informazioa',
		localizacion : 'Kokapena'
	},
	ca : {
		direccion : 'Adreça',
	        telefono : 'Telèfon',
		info : 'Informació',
		localizacion : 'Localització'
	},
	ga : {
		direccion : 'Dirección',
	        telefono : 'Teléfono',
		info : 'Información',
		localizacion : 'Localización'
	}
}


EROSKI.Maps = {
	//CountryCode              : [],
	filtro: null,
	AdministrativeArea       : [],
	SubAdministrativeArea    : [],
	Locality                 : [],
        // MOD Diego E. 5 mar 2010 3:17 PM 
        markers_zoom_1  : [],
	markers_zoom_2  : [],
	markers_zoom_3  : [],
        markers_zoom_4  : [],
        // Fin MOD Diego E. 5 mar 2010 3:17 PM
            
	//--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',
		
	//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
	DEFAULT_ZOOM_LEVEL: 5,
    MIN_ZOOM_LEVEL : 5,
	MAX_ZOOM_LEVEL : 15,

      // MOD Diego E. 5 mar 2010 3:19 PM
      MIN_MARKERS_Z1_ZOOM_LEVEL : 5,
      MIN_MARKERS_Z2_ZOOM_LEVEL : 7,
        MIN_MARKERS_Z3_ZOOM_LEVEL : 10,
        MIN_MARKERS_Z4_ZOOM_LEVEL : 13,
          // Fin MOD Diego E. 5 mar 2010 3:19 PM
                    
	//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 : 7,
	MIN_SUBADMINISTRATIVE_AREA_ZOOM_LEVEL : 8,
	MAX_SUBADMINISTRATIVE_AREA_ZOOM_LEVEL : 15,
	MIN_LOCALITY_ZOOM_LEVEL : 8,
	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];
				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);
            
           /*
            alert("ZOOM: " + EROSKI.Maps.map.getZoom() +
                  "\nAdministrativeArea: " + EROSKI.Maps.AdministrativeArea.length +
                  "\nSubAdministrativeArea: " + EROSKI.Maps.SubAdministrativeArea.length +
                  "\nLocality: " + EROSKI.Maps.Locality.length);
                  */     
            /*
            alert("ZOOM: " + EROSKI.Maps.map.getZoom() +
                  "\nmarkers_zoom_1: " + EROSKI.Maps.markers_zoom_1.length +
                  "\nmarkers_zoom_2: " + EROSKI.Maps.markers_zoom_2.length +
                  "\nmarkers_zoom_3: " + EROSKI.Maps.markers_zoom_3.length +
                  "\nmarkers_zoom_4: " + EROSKI.Maps.markers_zoom_4.length);
            */
		/*
	    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.refresh();    
            */
                /*
	    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();
            */
            
            // MOD Diego E. 5 mar 2010 2:54 PM
            
            EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.markers_zoom_1,
	        EROSKI.Maps.MIN_MARKERS_Z1_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_ZOOM_LEVEL);

            EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.markers_zoom_2,
	        EROSKI.Maps.MIN_MARKERS_Z2_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_ZOOM_LEVEL);
            
            EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.markers_zoom_3,
	        EROSKI.Maps.MIN_MARKERS_Z3_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_ZOOM_LEVEL);
            
            EROSKI.Maps.markerManager.addMarkers(
	        EROSKI.Maps.markers_zoom_4,
	        EROSKI.Maps.MIN_MARKERS_Z4_ZOOM_LEVEL,
	        EROSKI.Maps.MAX_ZOOM_LEVEL);
                
	    EROSKI.Maps.markerManager.refresh();
            // Fin MOD Diego E. 5 mar 2010 2:54 PM
            
    },
		
	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");
                    // MOD Diego E. 5 mar 2010 3:15 PM
                    EROSKI.Maps.addIcon("markers_zoom_1", $('frontendRelativePath').value + "/imgs/Google/eroski.png");
                    EROSKI.Maps.addIcon("markers_zoom_2", $('frontendRelativePath').value + "/imgs/Google/eroski.png");
                    EROSKI.Maps.addIcon("markers_zoom_3", $('frontendRelativePath').value + "/imgs/Google/eroski.png");
                    EROSKI.Maps.addIcon("markers_zoom_4", $('frontendRelativePath').value + "/imgs/Google/eroski.png");
                    
			EROSKI.Maps.addIcon("AdministrativeAreas", $('frontendRelativePath').value + "/imgs/Google/eroski.png");
			EROSKI.Maps.addIcon("SubAdministrativeAreas", $('frontendRelativePath').value + "/imgs/Google/eroski.png");
			EROSKI.Maps.addIcon("Locality",  $('frontendRelativePath').value + "/imgs/Google/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;}
                        // MOD Diego E. 5 mar 2010 3:14 PM
                        G_SATELLITE_MAP.getMinimumResolution = function() {return EROSKI.Maps.MIN_ZOOM_LEVEL;}
			G_SATELLITE_MAP.getMaximumResolution = function() {return EROSKI.Maps.MAX_ZOOM_LEVEL;}
			G_HYBRID_MAP.getMinimumResolution = function() {return EROSKI.Maps.MIN_ZOOM_LEVEL;}
			G_HYBRID_MAP.getMaximumResolution = function() {return EROSKI.Maps.MAX_ZOOM_LEVEL;}
			

                        
			
			// Inicio LocalSearch
                        var divResultados = document.createElement("div");
                        divResultados.style.display = "none";
                        document.body.appendChild(divResultados);

                        var opts = {resultList : divResultados, 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();
            
  			
            if (document.location.href.indexOf('eroski-merca') != -1) {
              this.map.setCenter(new GLatLng(43.272455, -2.93335), 10, G_NORMAL_MAP);
            }
            else {
              this.map.setCenter(new GLatLng(40.396764, -3.713379), EROSKI.Maps.DEFAULT_ZOOM_LEVEL, G_NORMAL_MAP);
            }

            if(EROSKI.Maps.enableGoogleBar) {
                            this.map.enableGoogleBar();
                            //this.map.addControl(new google.maps.LocalSearch());
                            //localSearch.setRestriction(google.search.Search.RESTRICT_TYPE,google.search.LocalSearch.TYPE_KMLONLY_RESULTS)
            }
		    
			//GDownloadUrl(EROSKI.Maps.URI + tipoSeccion, function(data) 
                        //EROSKI.Maps.URI = 'http://pre.www.gestioneroski.es/files/File/centros.xml';
			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"><span><img src="' + markers[i].getAttribute("img") + '"></span>';
					html += '<h3>' + markers[i].getAttribute("dc") + '</h3>';
					html += '<p>';
					html += '<span><span>' + lang['direccion'] + ':</span> ' + markers[i].getAttribute("dir") + '</span><br  />';
					html += '<span>' +  markers[i].getAttribute("cp") + ', ' + markers[i].getAttribute("pb") + '</span><br  />';
					html += '<span>' + markers[i].getAttribute("pr") + '</span><br  />';
					html += '<span><span>' + lang['telefono'] + ':</span> ' + markers[i].getAttribute("tf") + '</span><br  />';
					//html += '<a href="' + url + '" class="mas-info" onclick="getInfo(this.href); return false;">' +
					html += '</p></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);
				    }
                                    
                                    // MOD Diego E. 5 mar 2010 2:56 PM
                                    if(tag =="markers_zoom_1")
				    {
						EROSKI.Maps.markers_zoom_1.push(marker);
				    }
				    else if(tag == "markers_zoom_2")
				    {
						EROSKI.Maps.markers_zoom_2.push(marker);
				    }
				    else if(tag == "markers_zoom_3")
				    {
                                                EROSKI.Maps.markers_zoom_3.push(marker);
				    }
				    else if(tag == "markers_zoom_4")
				    {
						EROSKI.Maps.markers_zoom_4.push(marker);
				    }
                                    // Fin MOD Diego E. 5 mar 2010 2:56 PM
				}//for												
                                
                EROSKI.Maps.loadMarkerManager();

			});//GDownloadUrl
		}
	}
};//EROSKI.Maps

window.addEvent('load', function() {
	filtro = $('filtro').value;
	setTimeout('EROSKI.Maps.init()', 0);
});

window.addEvent('unload', function() {
    GUnload();
});

