	// Carte courante créee par l'api
	var map;
	

	// Zoom sur lequel on doit faire apparaitres les labels (Nom des zones géographiques=
	var zoom_print_label = 2;
	
	// Zoom courant
	// Chaque changement de zoom devra modifie cette variable
	// Ces paramètres sont en variable globale pour pouvoir être appeler depuis d'autres pages
	// Genre sur GoogleMaps.aspx
	var zone_geo_courante = 0;
	var zoom_courant = zoom_print_label;
	var latitude_courante = 0;
	var longitude_courante = 0;
	
	// Point d'entrée de la carte
	var centre_carte = new GLatLng(42.032974332441405, 2.109375);
	
	// Initialisation des variables passées par la page GoogleMaps 
	var budgetmin = 0;
    var budgetmax = 5000;
    var difficultemin = 0;
    var difficultemax = 5;
    
    // Initialisation des parametres pour afficher les resultats des recherches
    // des pages (pageliste_voyages.aspx, pageliste_unviers.aspx)
    var zone_geographique = 0;
    var univers = 0;
    var duree = 0;
    var confort = 0;
    var depart = "01/01/1900";
    var famille = 0;
    var destination = 0;
    // 0 : TOUS
    // 1 : GROUPE
    // 2 : LIBERTE
    var type = 0;
    
    // 0 : ACCES PAR LA PAGE GOOGLEMAPS
    // 1 : ACCES PAR LE BOUTON EN CARTE DE LA PAGE PAGELISTE_VOYAGE.ASPX
    // 2 : ACCES PAR LE BOUTON EN CARTE DE LA PAGE PAGELISTE_UNIVERS.ASPX
    // Ils ont tous des comportements différents !!!!!!
    var type_recherche = 0;
    
    //url du site actif
    var base_url = "http://balaguere/";
        
	function GoogleMapsLoad() {
		if (GBrowserIsCompatible()) {
		    // Creatiion de la carte
		    map = new GMap2(document.getElementById("GoogleMaps"));
		    // Ajout du zoom sur la carte
			map.addControl(new GLargeMapControl());	
			// Centrage du point par défaut sur la carte
			map.setCenter(centre_carte, zoom_courant);
						
			// Récupération du type de recherche			
		    if(getURLParam("type_recherche") != null)
                type_recherche = getURLParam("type_recherche");
			
			// Si l'appel vient de la page GoogleMaps.aspx
			if(type_recherche == 0)
			    DrawZoneGeo();
			
			// Si l'appel vient de pageliste_voyage.aspx ou pageliste_univers.aspx
			else{
			    // Si univers est passé en parametre
			    if(getURLParam("theme") != null)
                    theme = getURLParam("theme")			
			    // Si univers est passé en parametre
			    if(getURLParam("univers") != null)
                    univers = getURLParam("univers");
			    // Si duree est passé en parametre
			    if(getURLParam("duree") != null)
                    duree = getURLParam("duree");
			    // Si confort est passé en parametre
                if(getURLParam("confort") != null)
                    confort = getURLParam("confort");
			    // Si depart est passé en parametre
                if(getURLParam("depart") != null)
                    depart = getURLParam("depart");
			    // Si famille est passé en parametre
                if(getURLParam("famille") != null)
                    famille = getURLParam("famille");
			    // Si destination est passé en parametre
                if(getURLParam("destination") != null)
                    destination = getURLParam("destination");
			    // Si zone_geographique est passé en parametre
                if(getURLParam("zone_geographique") != null)
                    zone_geographique = getURLParam("zone_geographique");
			    // Si type est passé en parametre
                if(getURLParam("type") != null)
                    type = getURLParam("type");
                if(getURLParam("zoomgeo") != null)
                    zoom_courant = getURLParam("zoomgeo");
                if(getURLParam("latitudegeo") != null)
                    latitude_courante = getURLParam("latitudegeo");
                if(getURLParam("longitudegeo") != null)
                    longitude_courante = getURLParam("longitudegeo");
                  
                // Affichage des résultats de la recherche demandée
                DrawDestinations(zone_geographique, zoom_courant, latitude_courante, longitude_courante, 0, 5000, 0, 5, univers, duree, confort, depart, famille, destination, type, theme);
			}
			
			// Pour chaque événement il faut redessiner DrawZoneGeo
			// Car c'est un bug, j'ai modifié le fonctionnement des ELabel
			// en passant en paramètre du label, le point du label qui est associé 
			// à la latitude et longitude
			// br : bottom right
			// bl : bottom left
			// tr : top right
			// tl : top left
           /* GEvent.addListener(map, "zoomend", function(){
                zoom_courant = map.getZoom();
                // Si le zoom courant est inférieur à 2 on le ramène à 2
                // Impossible de descendre le zoom à moins de 2
                if(zoom_courant <= 2){
                    map.setZoom(zoom_print_label);
                    zoom_courant = zoom_print_label;
                }
                // On redessine les zones geo
                DrawZoneGeo();
            });
				
            GEvent.addListener(map, "dragend", function(){
                zoom_courant = map.getZoom();
                // Si le zoom courant est inférieur à 2 on le ramène à 2
                // Impossible de descendre le zoom à moins de 2
                if(zoom_courant <= 2){
                    map.setZoom(zoom_print_label);
                    zoom_courant = zoom_print_label;
                }
                // On redessine les zones geo
                DrawZoneGeo();
            });*/
				
            GEvent.addListener(map, "dblclick", function(){
                zoom_courant = map.getZoom();
                // Si le zoom courant est inférieur à 2 on le ramène à 2
                // Impossible de descendre le zoom à moins de 2
                if(zoom_courant <= 2){
                    map.setZoom(zoom_print_label);
                    zoom_courant = zoom_print_label;
                }
                // On redessine les zones geo
                DrawZoneGeo();
            });
		}
	}
	
    function importanceOrder (marker,b) {
        return 3;
    }

 	
	
	function CreateMarqueur(glatlng, htmlString, eventName, urlicon, urliconshadow, titleString, activateEvent, draggableBoolean, bouncyBoolean) {
		
		var myIcon = null;
		
		// Si on veut modifier l'image
		if (urlicon != ""){
		    // On crée un GIcon
			var myIcon = new GIcon();
			// On associe notre image passé en paramètre
			myIcon.image = urlicon;
			// On associe notre ombre passé en paramètre
			myIcon.shadow = urliconshadow;
			// Mise en place de la taille du marqueur
			// Essayons de rester dans des standards
			// 32x32
			// 16x16
			myIcon.iconSize = new GSize(32, 32);
			// Mise en place de la taille de l'ombre du marqueur
			// Pas forcemment besoin de modifier
			myIcon.shadowSize = new GSize(22, 20);
			myIcon.iconAnchor = new GPoint(6, 20);
			myIcon.infoWindowAnchor = new GPoint(5, 1);
		}

	
	    // Création des options avec les parametres
		var options = {
		    // Titre du marqueur, equivaut à la balise alt d'une image
			title: "",
			// Si c'est on veut que l'image soit cliquable
			// Attention il faut mettre true si on veut lui associer des evenements
			clickable: activateEvent,
			// Si on peut déplacer notre marqueur
			draggable: draggableBoolean,
			// Si on veut le rebond du marqueur quand on le lache
			bouncy: bouncyBoolean,
			// L'icone retenue, soit celle en parametre soit celle par défaut donnée par GoogleMaps
			icon: myIcon,
            zIndexProcess:importanceOrder
		};
		

		// Creation du marqueur avec les options
		var marker = new GMarker(glatlng, options);


		
		// Création de l'évenement permettant d'afficher les infos du marqueur
		GEvent.addListener(marker, "mouseover", function(){
            marker.openInfoWindowHtml(htmlString);
        });   
		
		// Ajout sur la map
		map.addOverlay(marker);
	}
	
	// Placement des zones geographique
	function DrawZoneGeo(){
	    // Affichage des zones geographique que si nous sommes au niveau de zoom 2
	    if(zoom_courant == zoom_print_label){
	    	var _div = document.getElementById("cliquerDiv");
	    	if (_div)
	    	{
	          _div.innerHTML = "Cliquez sur une &eacute;tiquette orange pour afficher les voyages correspondants";
	        }
	    
	        // On efface toutes les fiches voyages si elles sont présentes
	        map.clearOverlays();
	        
	        // On centre la carte avec le bon zoom
	        map.setCenter(centre_carte, zoom_print_label);
	        // Création du webservice retournant nos zones geographiques
	        // option 0 : Renvoit toutes les zones geographiques
	        // Sinon un PK : Renvoit les infos de la zone geographiques
	        result_webservices = "MapServices/GoogleMapsWebservices.ashx?query=AllZonesGeo&zonegeo=0";
    		
    		if (document.getElementById("requete"))
    		{
    		    document.getElementById("requete").innerHTML = result_webservices;
    		}    		
    		// Appel du webservices en AJAX
		    GDownloadUrl(result_webservices, function(data, responseCode) {
			    // Parse le resultat en XML
			    var xml = GXml.parse(data);
			    
			    // Récupération des noeuds Table correspond tous à une zone géographique 
			    var zonegeo = xml.documentElement.getElementsByTagName("Table");
    			
    			// Pour chaque zone
			    for(j = 0; j < zonegeo.length; j++){
			        // Récupération des infos dans des variables
			        var zoom = zonegeo[j].getElementsByTagName("ZOOM_DEFAUT")[0].childNodes[0].nodeValue;
				    var libelle = zonegeo[j].getElementsByTagName("LIBELLE")[0].childNodes[0].nodeValue;
				    var voyage = zonegeo[j].getElementsByTagName("VOYAGE")[0].childNodes[0].nodeValue;
				    var latitude = zonegeo[j].getElementsByTagName("LATITUDE_DEFAUT")[0].childNodes[0].nodeValue;
				    var longitude = zonegeo[j].getElementsByTagName("LONGITUDE_DEFAUT")[0].childNodes[0].nodeValue;
				    var pk = zonegeo[j].getElementsByTagName("PK_ZONE_GEO")[0].childNodes[0].nodeValue;
    				
    				// Si la zone geo courante est pyrenees alors on lui crée un label spécial en spécifiant le point en tr
    				// Pour éviter que les labels France, Pyrénées et Europe se chevauchent
			        // br : bottom right
			        // bl : bottom left
			        // tr : top right
			        // tl : top left
			        // Ceci est une modification du fichier donnée par Google !!!!!!
				    if (libelle == "PYRENEES"){
					    marqueur = "div_marqueur_pyrenees";
					    position = "tr";
				    }
				    else{
					    marqueur = "div_marqueur_hors_pyrenees";
					    position = "bl";
				    }
    				    	
    				// Création du texte du label avec evenement onclick permettant de dessiner les destinations de la zone geographique courante			
				    var tampon = '<div onclick="DrawDestinations('+ pk + ', ' + zoom + ', \'' + latitude + '\', \'' + longitude + '\', 0, 5000, 0, 5, 0, 0, 0, \'' + depart + '\', 0, 0, 0)" class="' + marqueur + '"><div class="marqueur">' + libelle + ' (' + voyage + ') <\/div><\/div>';
    				
    				// Création et ajout du label à la carte
				    var label = new ELabel(new GLatLng(latitude, longitude), tampon, position, null, null, null);
    				map.addOverlay(label);
			    }
		    });
	    }
	}
	
	
	// Placement des destinations sur la carte a partir d'une zone geographique
	// zonegeoParam = 0 : toutes les destinations
	// zoomParam : Zoom de la zone geographique a appliquer, récupéré de la BDD et envoyé par le onclick du label
	// latitudeParam : Latitude de la zone geographique a appliquer, récupéré de la BDD et envoyé par le onclick du label
	// longitudeParam : Longitude de la zone geographique a appliquer, récupéré de la BDD et envoyé par le onclick du label
	// budgetminParam : Pour la recherche depuis la page GoogleMaps.aspx
	// budgetmaxParam : Pour la recherche depuis la page GoogleMaps.aspx
	// difficulteminParam : Pour la recherche depuis la page GoogleMaps.aspx
	// difficultemaxParam : Pour la recherche depuis la page GoogleMaps.aspx
	// universParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	// dureeParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	// confortParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	// departParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	// familleParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	// destinationParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	// typeParam : Pour la recherche depuis pageliste_voyage.aspx ou pageliste_univers.aspx
	function DrawDestinations(zonegeoParam, zoomParam, latitudeParam, longitudeParam, budgetminParam, budgetmaxParam, difficulteminParam, difficultemaxParam, universParam, dureeParam, confortParam, departParam, familleParam, destinationParam, typeParam, themeParam)
	{	    
	    // On efface tout de la carte
	    map.clearOverlays();
	    
	    // Modification de la zone geo courante donc obligatoire de réaffecter à zone_geo_courante
	    // Utile pour certaines pages
	    zone_geo_courante = zonegeoParam;
	    
	    // Modification du zoom courant donc obligatoire de réaffecter à zoom_courant
	    // Utile pour certaines pages
        zoom_courant = parseInt(zoomParam);
        latitude_courante = latitudeParam;
        longitude_courante = longitudeParam;
        
        // Creation de l'url du webservices
	    result_webservices = "MapServices/GoogleMapsWebservices.ashx?query=AllFichesFrom";
	    
        var _div = document.getElementById("cliquerDiv");
        if (_div)
        {
            _div.innerHTML = "Cliquez sur l'ic&ocirc;ne souhait&eacute; pour afficher les informations des voyages correspondants";
        }

	    if(zonegeoParam != "")
	        result_webservices += "&zonegeo=" + zonegeoParam;
	    if(budgetminParam != "")
	        result_webservices += "&budgetmin=" + budgetminParam;
	    if(budgetmaxParam != "")
	        result_webservices += "&budgetmax=" + budgetmaxParam;
	    if(difficulteminParam != "")
	        result_webservices += "&difficultemin=" + difficulteminParam;
	    if(difficultemaxParam != "")
	        result_webservices += "&difficultemax=" + difficultemaxParam;
	    if(universParam != "")
	        result_webservices += "&univers=" + universParam;
	    if(dureeParam != "")
	        result_webservices += "&duree=" + dureeParam;
	    if(confortParam != "")
	        result_webservices += "&confort=" + confortParam;
	    if(departParam != "")
	        result_webservices += "&depart=" + departParam;
	    if(familleParam != "")
	        result_webservices += "&famille=" + familleParam;
	    if(destinationParam != "")
	        result_webservices += "&destination=" + destinationParam;
	    if(themeParam != "")
	        result_webservices += "&theme=" + themeParam;	        
	    if(typeParam != "")
	        result_webservices += "&type=" + typeParam;
	        
    	if (document.getElementById("requete"))
    	{
    	    document.getElementById("requete").innerHTML = result_webservices;
    	}   
    		
	    // Appel du webservices en AJAX
	    GDownloadUrl(result_webservices, function(data, responseCode) {
		    // Parse le resultat en XML
		    var xml = GXml.parse(data);
		    // Récupération des noeuds Table correspond tous à une zone géographique 
		    var zonegeo = xml.documentElement.getElementsByTagName("CONTENU");
		    
		    var destinationLat;
		    var destinationLong;
		    if (destinationParam > 0)
		    {
		        destinationLat = xml.documentElement.getElementsByTagName("DETINATIONLAT").item(0).text;
		        destinationLong = xml.documentElement.getElementsByTagName("DETINATIONLONG").item(0).text;
		    }
		    		    
            // Si l'appel vient de la page pageliste_univers, prise en compte du carre de bounds
             var bounds = new GLatLngBounds;

            // Pour chaque destination à afficher
            for(j = 0; j < zonegeo.length; j++){
                // Initialisation de la variable pour l'url de l'image
                var iconeurl = "";
			    // Récupération des infos dans des variables
			    /*
                var libelle_destination = zonegeo[j].getElementsByTagName("DESTINATION")[0].childNodes[0].nodeValue;
                var titre_voyage = zonegeo[j].getElementsByTagName("TITRE")[0].childNodes.length > 0 ? zonegeo[j].getElementsByTagName("TITRE")[0].childNodes[0].nodeValue : "";
                var code_produit = zonegeo[j].getElementsByTagName("CODE_PRODUIT")[0].childNodes[0].nodeValue;
                var accroche = zonegeo[j].getElementsByTagName("ACCROCHE")[0].childNodes.length > 0 ? zonegeo[j].getElementsByTagName("ACCROCHE")[0].childNodes[0].nodeValue : "";
                var latitude = zonegeo[j].getElementsByTagName("LATITUDE")[0].childNodes[0].nodeValue;
                var longitude = zonegeo[j].getElementsByTagName("LONGITUDE")[0].childNodes[0].nodeValue;
                var precense_guide = zonegeo[j].getElementsByTagName("GUIDE_INDIVIDUEL")[0].childNodes[0].nodeValue;
                var prix = zonegeo[j].getElementsByTagName("PRIX")[0].childNodes[0].nodeValue;
                var date_depart = zonegeo[j].getElementsByTagName("DATE_DEPART")[0].childNodes[0].nodeValue;
                var duree = zonegeo[j].getElementsByTagName("DUREE")[0].childNodes[0].nodeValue;
                var difficulte = zonegeo[j].getElementsByTagName("DIFFICULTE")[0].childNodes[0].nodeValue;
                */
                var latitude = zonegeo[j].getElementsByTagName("LATITUDE")[0].childNodes[0].nodeValue;
                var longitude = zonegeo[j].getElementsByTagName("LONGITUDE")[0].childNodes[0].nodeValue;
                if (zonegeo[j].getElementsByTagName("NBELEM"))
                {
                    var NBELEM = zonegeo[j].getElementsByTagName("NBELEM")[0].childNodes[0].nodeValue;
                }
                else
                {
                     var NBELEM = "0"
                }
                
                // Alors la, on recupere un niveau de difficulte de la base (0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5 et 5)
                // Si on trouve un point cela veut dire que l'on doit afficher une demi chaussure, on va supprimer pour avoir
                // un chiffre comme ceci 05, 15, 25, 35 et 45
                // Pour apppeler l'image de la bonne difficulte
                // <img src="/App_Themes/default/PICTURES/pi/diff' + difficulte + '.png" alt="Difficulte" />
			    //if (difficulte.indexOf(".") > 0)
				    //difficulte = difficulte.replace(".", "");
    			
    			// Creation de l'infobulle au format HTML : détails de un voyage
    			var nodeTexte = zonegeo[j].getElementsByTagName("ITEM");
    			var texteHtml;
                var precense_guide;

                if (navigator.userAgent.indexOf("Firefox")!=-1)
                {
    			    texteHtml = nodeTexte.item(0).textContent;
                    precense_guide = zonegeo[j].getElementsByTagName("GUIDE_INDIVIDUEL").item(0).textContent;
                }
                else
                {
                    texteHtml = nodeTexte.item(0).text;
                    precense_guide = zonegeo[j].getElementsByTagName("GUIDE_INDIVIDUEL").item(0).text;
                }

    			var htmlText = "<div style=\"overflow:scroll;overflow-x:hidden;height:210px;width:340px;float:left;\" class=\"destination_detaille\" >" + texteHtml + "<br/></div>";

                // Si le voyage est guide on met une certaine icone
                if(precense_guide == "True")
                    iconeurl = "/App_Themes/default/PICTURES/pictos/groupe" + NBELEM + ".png";
                // Et une autre pour les autres
                else
                    iconeurl = "/App_Themes/default/PICTURES/pictos/seul" + NBELEM + ".png";
            	
            	// Creation du point
                var point 
//                if (destinationParam > 0)
//                    point = new GLatLng(destinationLong,destinationLat);
//                else

                   longitude = parseFloat(longitude);
                   latitude = parseFloat(latitude) 
                
                   point = new GLatLng(longitude,latitude);
                    
                    
    	        // Création et ajout du label à la carte
    	       /*if (NBELEM!="0")
    	       {
    	            var contenunbeleme = "<div class='nbelemgg'>"  + NBELEM + "</div>";
		            var label = new ELabel(point, NBELEM, "nbelemgg", null, null, null);
		            label.pixelOffset=new GSize(14,-4);
    	            map.addOverlay(label);		
    	       }*/
    	                           
                // Creation du marqueur avec la fonction perso
                
                CreateMarqueur(point, htmlText, "mouseover", iconeurl, "", NBELEM, true, false, false);
                
                

		                
                // Si l'appel vient de la page pageliste_univers, prise en compte du carre de bounds
                // On etend le carre
                //if(type_recherche == 2)
                //{
                    bounds.extend(point);
                //}
                
        
            }
            
            
            // Si l'appel vient de la page pageliste_univers, prise en compte du carre de bounds
            // On se calle sur les infos du bounds
            // S'il y a qu'un seul résultat, ou si plusieurs resultats sont proches, il va zoomer au maximum (zoom : 20)

            // S'il dépasse 7 on lui reaffecte 7
            
            zoom_courant = map.getBoundsZoomLevel(bounds);
            
       
            
            if(zoom_courant > 9)
                zoom_courant = 9;
            else if(zoom_courant == 0)
                zoom_courant = 7;
            else if (isNaN(zoom_courant))
            {
                zoom_courant = map.getBoundsZoomLevel(bounds);
            }
  
            if(type_recherche == -2 || type_recherche == 2)
            {              
                //if (zonegeoParam!=0 && zonegeoParam!="0")
                //{
                    // On se centre sur le milieu du carre de bounds, et on affiche le zoom correspondant    
                    map.setCenter(bounds.getCenter(), zoom_courant);                    
                // }
            }
            // Sinon on se centre au milieu de la zonegeo
            else
                map.setCenter(new GLatLng(latitudeParam,longitudeParam), zoom_courant);
		});
	}
    
    // Recuperation de parametres GET d'une url
    function getURLParam(strParamName){
      // Initialisation de la variable de retour
      var strReturn = "";
      // Recuperation de l'url courante
      var strHref = window.location.href;
      // Traitement
      if (strHref.indexOf("?") > -1 ){
        var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
        var aQueryString = strQueryString.split("&");
        for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
          if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ){
            var aParam = aQueryString[iParam].split("=");
            strReturn = aParam[1];
            break;
          }
        }
      }
      // Retourne la valeur d'un parametre GET
      return unescape(strReturn);
    } 