    var map;
    var gdir;
    var geocoder = null;
	var marklist = new Array();
    var infowindow = new Array();
    var addressMarker;
    var query; 
    var altaservei = "";
	var queryroute = false;
	var rutapoly = "";
	var mgr;
	var mgrloaded = false;
            
	
	function isdefined( variable)
	{
	    return (typeof(window[variable]) == "undefined")?  false: true;
	}
	//INITIALIZE FUNCTIONCS
    function initialize(page) {
		if(page == "home")
			initialize_home();
		else if(page == "provincia")
			initialize_provincia();
		else if(page == "municipi")
			initialize_municipi();
		else if(page == "gasolinera")
			initialize_gasolinera();
    }
	
	function initialize_home(){
	    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("gmap"));
        gdir = new GDirections(map); /*gdir = new GDirections(map, document.getElementById("directions"));  */
 	 	
		geocoder = new GClientGeocoder();
        GEvent.addListener(gdir, "load", onGDirectionsLoad);
		GEvent.addListener(map, "load", onGMapsLoad);
		//GEvent.addListener(map, "ready", mapReadyHandler);

        GEvent.addListener(gdir, "error", handleErrors);
        resultats = document.getElementById("resultados");
       // mgr = new GMarkerManager(map);
	   /*temp */
		setonInitialState();
		
		if (query == "punto") {
			setonInitialState();
			if ((isdefined("URLlatitud") == false) || (isdefined("URLlongitud") == false) ||
			(URLlatitud == "") ||
			(URLlongitud == "")) {
				showAddress(URLorigen);
			}
			else {
				var point = new GLatLng(URLlatitud, URLlongitud);
				map.setCenter(point, 13);
				//-Added here --//
				
				var marker = new GMarker(point);
				map.addOverlay(marker);
				title = "Gasolineras cerca de " + URLorigen;
				if (IdUsuari == 0) {
					altaservei = "<p class='aviso'>Te avisamos cada semana con los nuevos precios: <form action='/alta.cfm' method='get' class='formail'><input onfocus='this.value=\"\";' type='text' name='email' value='tu@email.com'><input class='boton botonmail' type='submit' value='Aceptar'>"
					altaservei += "<input type='hidden' name='tcomb' value='" + URLtcomb + "'>";
					altaservei += "<input type='hidden' name='point' value='" + URLlatitud + "," + URLlongitud + "'>";
					altaservei += "<input type='hidden' name='origen' value='" + URLorigen + "'>";
					altaservei += "</form></p>";
				}
				else {
					altaservei = "<p class='aviso'>Te avisamos cada semana con los nuevos precios en tu e-mail: <strong>" + EmailUsuari + "</strong><form action='/alta.cfm' method='get' class='formail'><input class='boton botonmail' type='submit' value='Aceptar'>";
					altaservei += "<input type='hidden' name='tcomb' value='" + URLtcomb + "'>";
					altaservei += "<input type='hidden' name='point' value='" + URLlatitud + "," + URLlongitud + "'>";
					altaservei += "<input type='hidden' name='origen' value='" + URLorigen + "'>";
					altaservei += "</form></p>";
				}
				paintGasData(title, markarray);
			}
		}
		else if (query == "ruta") {
				setDirections(URLorigen, URLdestino, URLlocale);
			}
		else {
				setToInitialPosition();
		}
     }
	}

	function initialize_provincia(){
	   var bound = new GLatLngBounds(new GLatLng(latitud_min, longitud_min), new GLatLng(latitud_max,longitud_max));
	   var map = new GMap2(document.getElementById("gmap"));
	   var latlng = bound.getCenter();
	   
	   geocoder = new GClientGeocoder();
	   var zoomlevel = map.getBoundsZoomLevel(bound) 	
	   // map.setMapType(G_SATELLITE_TYPE);
	   map.addControl(new GSmallMapControl());
	   map.setCenter(latlng, zoomlevel, G_NORMAL_MAP );
	}
    
	function initialize_municipi(){
	  var bound = new GLatLngBounds(new GLatLng(latitud_min, longitud_min), new GLatLng(latitud_max,longitud_max));
	  var map = new GMap2(document.getElementById("gmap"));
	  var latlng = bound.getCenter();
	 
	  geocoder = new GClientGeocoder();
	  
	  var zoomlevel = map.getBoundsZoomLevel(bound) 	
	   // map.setMapType(G_SATELLITE_TYPE);
	  map.addControl(new GSmallMapControl());
	  map.setCenter(latlng, zoomlevel, G_NORMAL_MAP );
	  
	 //Initialize markermanager
	 var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: true };
	 mgr = new MarkerManager(map, mgrOptions);
	
	 //Fill Marker manager
	 for (var i = 0; i < markarray.length; i++) {
			marklist[i] = afegirGasolinera2(markarray[i].icon,
			markarray[i].shadow,
			markarray[i].lat,
			markarray[i].lng,
			markarray[i].url,
			markarray[i].rtl,
			markarray[i].prcBIO,
			markarray[i].prcG95,
			markarray[i].prcG98,
			markarray[i].prcG97,
			markarray[i].prcGA,
			markarray[i].prcNGA,
			markarray[i].prcGB,
			markarray[i].prcGC,
			markarray[i].dir,
			markarray[i].loc, i);
			
			/*afegirGasolinera2(iconpic, shadowpic, lat, lng, url, rtl, prcBIO, prc95, 
			prc98, prc97, prcgA, prcngA, prcgB, prcgC, dir, loc, index)*/
	 }

	 mgr.addMarkers(marklist, map.getZoom());
	 mgr.refresh();
	 $("#loader").hide();
	}
    
	function initialize_gasolinera(){
	  var map = new GMap2(document.getElementById("gmap"));
	   var latlng = new GLatLng(latitud, longitud);
		
	geocoder = new GClientGeocoder();
	   // map.setMapType(G_SATELLITE_TYPE);
	   map.addControl(new GSmallMapControl());
	   map.setCenter(latlng, 14, G_NORMAL_MAP );
	
	      // icono refer mida
	      var icon = new GIcon(G_DEFAULT_ICON);
	         
	      markerOptions = { icon:icon };
	      mark = new GMarker(latlng,markerOptions);
	
	   map.addOverlay(mark);
	}
    function setDirections(fromAddress, toAddress, locale) {
      $("#loader").show();
	  $("#loader2").show();

	  gdir.load("from: " + fromAddress + ", spain" + " to: " + toAddress + ", spain", { "locale": locale });
	  queryroute = true;
	  return false;
    }
	function setonInitialState(){
			map.addControl(new GSmallMapControl());
	}
	function setToInitialPosition(){
			bound = new GLatLngBounds(new GLatLng(35.91, -10), new GLatLng(43.82,4.41));
			var zoomlevel = map.getBoundsZoomLevel(bound) 	
			map.setCenter(new GLatLng(40,-3.706512),zoomlevel);
			$("#loader").hide();
			$("#loader2").hide();
			
	}

    function handleErrors(){
		UnmarckAll();
		$("#loader").hide();
	  	$("#loader2").hide();
		if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) {
			MarckError("from", "textbuscador", "");
			MarckError("to", "textbuscador", "No se ha podido encontrar una de las dos direcciones.")
			//Fill the webpage with default information in case you come from the outside
			if(mgrloaded== false){
				setonInitialState();
			}
				
		}else if (gdir.getStatus().code == G_GEO_SERVER_ERROR) {
			MarckError("", "textbuscador", "Error de Google Maps. Inténtalo de nuevo más tarde.")
		}else if (gdir.getStatus().code == G_GEO_MISSING_QUERY) {
			//alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
			MarckError("address", "textbuscador", "")
			MarckError("from", "textbuscador", "");
			MarckError("to", "textbuscador", "No se ha podido completar la búsqueda. Por favor, rellena los campos vacíos.");
		}else if (gdir.getStatus().code == G_GEO_BAD_KEY) {
			//alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
			MarckError("", "textbuscador", "Error de Google Maps. Inténtalo de nuevo mas tarde.");			
		}else if (gdir.getStatus().code == G_GEO_BAD_REQUEST) {
			//alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
			MarckError("address", "textbuscador", "")
			MarckError("from", "textbuscador", "");
			MarckError("to", "textbuscador", "No se ha podido encontrar la dirección escrita. Vuelve a intentarlo con una combinación diferente.");

		}else {
			MarckError("", "textbuscador", "Error desconocido. Int&eacute;ntelo de nuevo más tarde.");			
		}
	}

	function onGMapsLoad(){
		if(mgrloaded==false){
			var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: true };
			mgr = new MarkerManager(map, mgrOptions);
			mgrloaded=true;
		}
		
	}
	function onGDirectionsLoad(){
		// Use this function to access information about the latest load()
		// results.
		
		//if (query != "ruta") { //if it is an external consult don't parse polyline
		//alert("onGdirectionsLoad")
		
		rutapoly ="";
		resultats.innerHTML = "";
		if(mgrloaded)
		 	 mgr.clearMarkers();
			 	
		poly = gdir.getPolyline();
		if (poly.getVertexCount() < 1000) {
			step = 10;
		}
		else {
			step = Math.round(poly.getVertexCount() / 100);
		}
		
		for (i = 0; i * step < poly.getVertexCount(); i++) {
			vertex = poly.getVertex(step * i);
			// status.innerHTML = status.innerHTML + vertex.toUrlValue() + "<br/>";
			rutapoly = rutapoly + vertex.toUrlValue() + ",";
		}
		
		rutapoly = rutapoly + (poly.getVertex(poly.getVertexCount() - 1)).toUrlValue();
		
		//status.innerHTML = status.innerHTML + "POST poly: " + rutapoly;
		
		veureRuta(rutapoly);
	}

	
    function veureRuta(rutapoly)
    {
			// get tipus combustible
			form = document.getElementById("ruta");
			tipus_combustible = form.tcombustible.value;
			fromAddress = form.from.value;
			toAddress = form.to.value;
			
			// alert(tipus_combustible);
			url = "/services/getxml.cfm?tcomb=" + tipus_combustible + "&polyline=" + rutapoly + "&origen=" + fromAddress + "&destino=" + toAddress;
			// alert(url);
			// debug	
			//status=document.getElementById("status");
			//status.innerHTML = url;
			if (IdUsuari == 0) {
				altaservei = "<p class='aviso'>Te avisamos cada semana con los nuevos precios: <form action='/alta.cfm' method='get' class='formail'><input onfocus='this.value=\"\";' type='text' name='email' value='tu@email.com'><input class='boton botonmail' type='submit' value='Aceptar'>"
				altaservei += "<input type='hidden' name='tcomb' value='" + tipus_combustible + "'>";
				altaservei += "<input type='hidden' name='polyline' value='" + rutapoly + "'>";
				altaservei += "<input type='hidden' name='origen' value='" + fromAddress + "'>";
				altaservei += "<input type='hidden' name='destino' value='" + toAddress + "'>";
				altaservei += "</form></p>";
			}else{
				altaservei = "<p class='aviso'>Te avisamos cada semana con los nuevos precios en tu e-mail: <strong>" + EmailUsuari + "</strong><form action='/alta.cfm' method='get' class='formail'><input class='boton botonmail' type='submit' value='Aceptar'>";
				altaservei += "<input type='hidden' name='tcomb' value='" + tipus_combustible + "'>";
				altaservei += "<input type='hidden' name='polyline' value='" + rutapoly + "'>";
				altaservei += "<input type='hidden' name='origen' value='" + fromAddress + "'>";
				altaservei += "<input type='hidden' name='destino' value='" + toAddress + "'>";
				altaservei += "</form></p>";
			}
			downloadResults(url);
		
    }
	
	function showAddress(address) {
	  if (geocoder) {
        geocoder.getLatLng(
          address+", spain",
          function(point) {
            if (!point) {
			  UnmarckAll();
			  MarckError("address", "textbuscador", address + " no se ha encontrado")	
            } else {
			 $("#loader").show();
			 $("#loader2").show();
			 if (mgrloaded == true) {
			 	mgr.clearMarkers();
			 }
			 resultats.innerHTML = "";
			  map.clearOverlays();
              map.setCenter(point, 13);
              var marker = new GMarker(point);
              map.addOverlay(marker);
            // get tipus combustible
	    	form = document.getElementById("sitio");
	    	tipus_combustible = form.tcombustible.value;
            
    		url = "/services/getxml.cfm?tcomb="+ tipus_combustible +"&point=" + point.y + "," + point.x + "&origen=" + address;
    		if (IdUsuari == 0) {
				altaservei = "<p class='aviso'>Te avisamos cada semana con los nuevos precios: <form action='/alta.cfm' method='get' class='formail'><input onfocus='this.value=\"\";' type='text' name='email' value='tu@email.com'><input class='boton botonmail' type='submit' value='Aceptar'>"
				altaservei += "<input type='hidden' name='tcomb' value='" + tipus_combustible + "'>";
				altaservei += "<input type='hidden' name='point' value='" + point.y + "," + point.x + "'>";
				altaservei += "<input type='hidden' name='origen' value='" + address + "'>";
				altaservei += "</form></p>";
			}else{
				altaservei = "<p class='aviso'>Te avisamos cada semana con los nuevos precios en tu e-mail: <strong>" + EmailUsuari + "</strong><form action='/alta.cfm' method='get' class='formail'><input class='boton botonmail' type='submit' value='Aceptar'>";
				altaservei += "<input type='hidden' name='tcomb' value='" + tipus_combustible + "'>";
				altaservei += "<input type='hidden' name='point' value='" + point.y + "," + point.x + "'>";
				altaservei += "<input type='hidden' name='origen' value='" + address + "'>";
				altaservei += "</form></p>";
			}
			
    		downloadResults(url);
			
	 		
	    	// buscar un altre lloc
    		// status=document.getElementById("status");
            }
          }
        );
      }
	  return false;
    }
    
    function downloadResults(url) {
   		GDownloadUrl(url,  function (data){
   		  var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          var titulo = xml.documentElement.getElementsByTagName("title");
		  var markarray = new Array();
   
		//Fill the markarray with the gas station data

        for (var i =0; i < markers.length ; i++) {
			markarray[i] = new Array();
			markarray[i].icon = markers[i].getAttribute("icon");
			markarray[i].shadow = markers[i].getAttribute("shadow");
			markarray[i].lat = markers[i].getAttribute("lat");
			markarray[i].lng = markers[i].getAttribute("lng");
			markarray[i].url = markers[i].getAttribute("url");
			markarray[i].rtl = markers[i].getAttribute("rtl");
			markarray[i].prc = markers[i].getAttribute("prc");
			markarray[i].dir = markers[i].getAttribute("dir");
			markarray[i].loc = markers[i].getAttribute("loc");
		}
		
      	//Add icons and write gas tdata
		paintGasData(GXml.value(titulo[0]), markarray) 
 		

    });
        
    }
	function paintGasData(title, markarray){
		$("#resultados").css("overflow-y", "scroll");
		var text = "";
		marklist = new Array();
		for (var i = 0; i < markarray.length; i++) {
			marklist[i] = afegirGasolinera(markarray[i].icon,
						markarray[i].shadow,
						markarray[i].lat,
						markarray[i].lng,
						markarray[i].url,
						markarray[i].rtl,
						markarray[i].prc,
						markarray[i].dir,
						markarray[i].loc, i);
	        
			if(markarray[i].icon == "http://gas.encooche.com/images/icons/gas_g.gif") 
				var clase = "green";
			else if(markarray[i].icon == "http://gas.encooche.com/images/icons/gas_y.gif")
				var clase = "yellow";
			else if(markarray[i].icon == "http://gas.encooche.com/images/icons/gas_r.gif")
				var clase = "red";
				
			text += "<li class='" + clase + "'>" + " <span class='gasolinera' onClick='marklist["+ i +"].openInfoWindowHtml(infowindow["+i+"]);' >" + markarray[i].rtl + "</span><p> <strong>Precio:</strong> " + markarray[i].prc + " &euro;<br/><strong>Direcci&oacute;n:</strong> " + markarray[i].dir + "<br/>" + markarray[i].loc + "<br> <a href='" + markarray[i].url + "'>m&aacute;s informaci&oacute;n...</a></p></li>";
		 }
		 text = "<ul>" + text;
		 text = altaservei + text;
		 text = "<h3>" + title + "</h3>" + text; 
		
		 text +="</ul>";
         resultats.innerHTML = text;
		 $("#loader2").hide();
		 
		if(mgrloaded)
		 	 mgr.clearMarkers();
		setTimeout("mgr.addMarkers(marklist, map.getZoom()-1);mgr.refresh();$('#loader').hide();", 100);
		 
		
	}
	
	function afegirGasolinera(iconpic, shadowpic, lat, lng, url, rtl, prc, dir, loc, index){
			var markerOptions;
			var marker;
			var latlng = new GLatLng(parseFloat(lat), parseFloat(lng));
			
		    // icono refer mida
            icon = new GIcon(G_DEFAULT_ICON);
            icon.image = iconpic;
            icon.shadow = shadowpic;
        	icon.iconAnchor = new GPoint(16, 16);
        	icon.infoWindowAnchor = new GPoint(16, 0);
        	icon.iconSize = new GSize(32, 32);
        	icon.shadowSize = new GSize(59, 32);
            
			markerOptions = { icon:icon };
			marker = new GMarker(latlng,markerOptions);
			
			
			if(iconpic == "http://gas.encooche.com/images/icons/gas_g.gif") 
				var clase = "green";
			else if(iconpic == "http://gas.encooche.com/images/icons/gas_y.gif")
				var clase = "yellow";
			else if(iconpic == "http://gas.encooche.com/images/icons/gas_r.gif")
				var clase = "red";
			
			
			infowindow[index] = "<h3 class='" + clase + "'><a href='" + url + "'>" + rtl + "</a></h3><br/> Precio: " + prc +  " &euro;<br/><br/>" + dir + "<br/>" + loc;
			GEvent.addListener(marker, "click", function() {
		        marker.openInfoWindowHtml(infowindow[index]);
        	});

		
			 
			return marker;
	}
	
	function afegirGasolinera2(iconpic, shadowpic, lat, lng, url, rtl, prcBIO, prcG95, 
			prcG98, prcG97, prcGA, prcNGA, prcGB, prcGC, dir, loc, index){
			var markerOptions;
			var marker;
			var latlng = new GLatLng(parseFloat(lat), parseFloat(lng));
			
		    // icono refer mida
            icon = new GIcon(G_DEFAULT_ICON);
            icon.image = iconpic;
            icon.shadow = shadowpic;
        	icon.iconAnchor = new GPoint(16, 16);
        	icon.infoWindowAnchor = new GPoint(16, 0);
        	icon.iconSize = new GSize(32, 32);
        	icon.shadowSize = new GSize(59, 32);
            
			markerOptions = { icon:icon };
			marker = new GMarker(latlng,markerOptions);
			
			
			if(iconpic == "http://gas.encooche.com/images/icons/gas_g.gif") 
				var clase = "green";
			else if(iconpic == "http://gas.encooche.com/images/icons/gas_y.gif")
				var clase = "yellow";
			else if(iconpic == "http://gas.encooche.com/images/icons/gas_r.gif")
				var clase = "red";
			
			infowindow[index] = "<h3 class='" + clase + "'><a href='" + url + "'>" + rtl + "</a></h3><u>Precios:</u><br/>";
				
			if(prcG95 != "")
				infowindow[index] = infowindow[index] +=  "<strong>Gasolina 95:</strong> " + prcG95+  " &euro;<br/>";
			if(prcG98 != "")
				infowindow[index] = infowindow[index] +=  "<strong>Gasolina 98:</strong> " + prcG98 +  " &euro;<br/>"
			if(prcGA != "")
				infowindow[index] = infowindow[index] +=  "<strong>Di&eacute;sel:</strong> " + prcGA +  " &euro;<br/>";	
			if(prcNGA != "")
				infowindow[index] = infowindow[index] +=  "<strong>Di&eacute;sel mejorado:</strong> " + prcNGA +  " &euro;<br/>";
			if(prcGB != "")
				infowindow[index] = infowindow[index] +=  "<strong>Gasoleo B:</strong> " + prcGB +  " &euro;<br/>";
			if(prcGC != "")
				infowindow[index] = infowindow[index] +=  "<strong>Gasoleo C:</strong> " + prcGC +  " &euro;<br/>";
			if(prcG97 != "")
				infowindow[index] = infowindow[index] +=  "<strong>Gasolina 97:</strong> " + prcG97 +  " &euro;<br/>";
			if(prcBIO != "")
				infowindow[index] = infowindow[index] +=  "<strong>Biodi&eacute;sel:</strong> " + prcBIO +  " &euro;<br/>";
			
		
			infowindow[index ] += "<br/>" + dir + "<br/>" + loc;
			GEvent.addListener(marker, "click", function() {
		        marker.openInfoWindowHtml(infowindow[index]);
        	});

			 
			return marker;
	}
	
	function fillLatLang(address) {

      if (geocoder) {
	      geocoder.getLatLng(
          address+", spain",
          function(point) {
	
            if (!point) {
			  UnmarckAll();
			  MarckError("address", "textbuscador", address + " no se ha encontrado")	
            } else {
				$("#longitud").val(point.x);
				$("#latitud").val(point.y);
				//Submit the form after all
				$("#sitio").submit();
		    }
          }
        );
      }
	  return false;
    }
	
	
	$(document).ready(function(){
		// COMPORTAMENT BOTONS BUSCADOR
		$("#sitio_btn").click(function () {
			$("#sitio").show();
			$("#ruta").hide();
			UnmarckAll();
			$("#ruta_btn").removeClass("activapest");
			$("#sitio_btn").addClass("activapest");			
		});
		$("#ruta_btn").click(function () {
			$("#sitio").hide();
			$("#ruta").show();
			UnmarckAll();
			$("#sitio_btn").removeClass("activapest");
			$("#ruta_btn").addClass("activapest");			
		});
	 });
	 

