//<![CDATA[



    if (GBrowserIsCompatible()) {
		var gmarkers = [];
		var gmarkersHTML = []; // j'aurais du faire un objet, pas le temps;
		var gpoints = [];
		var bounds = new GLatLngBounds();
		
		var i = 0;
		var j = 0;
		
		
		var myRedIcon = new GIcon();
		myRedIcon.image = 'images/gmap_icons/red/image.png';
		myRedIcon.shadow = 'images/gmap_icons/red/shadow.png';
		myRedIcon.iconSize = new GSize(12,20);
		myRedIcon.shadowSize = new GSize(22,20);
		myRedIcon.iconAnchor = new GPoint(6,20);
		myRedIcon.infoWindowAnchor = new GPoint(6,0);
		myRedIcon.printImage = 'images/gmap_icons/red/printImage.gif';
		myRedIcon.mozPrintImage = 'images/gmap_icons/red/mozPrintImage.gif';
		myRedIcon.printShadow = 'images/gmap_icons/red/printShadow.gif';
		myRedIcon.transparent = 'images/gmap_icons/red/transparent.png';
		myRedIcon.imageMap = [8,0,10,1,10,2,11,3,11,4,11,5,11,6,11,7,11,8,10,9,9,10,9,11,8,12,7,13,7,14,7,15,7,16,6,17,6,18,6,19,5,19,5,18,5,17,4,16,4,15,4,14,4,13,3,12,3,11,2,10,1,9,0,8,0,7,0,6,0,5,0,4,0,3,1,2,2,1,3,0];
		
		var myBlueIcon = new GIcon();
		myBlueIcon.image = 'images/gmap_icons/blue/image.png';
		myBlueIcon.shadow = 'images/gmap_icons/blue/shadow.png';
		myBlueIcon.iconSize = new GSize(12,20);
		myBlueIcon.shadowSize = new GSize(22,20);
		myBlueIcon.iconAnchor = new GPoint(6,20);
		myBlueIcon.infoWindowAnchor = new GPoint(6,0);
		myBlueIcon.printImage = 'images/gmap_icons/blue/printImage.gif';
		myBlueIcon.mozPrintImage = 'images/gmap_icons/blue/mozPrintImage.gif';
		myBlueIcon.printShadow = 'images/gmap_icons/blue/printShadow.gif';
		myBlueIcon.transparent = 'images/gmap_icons/blue/transparent.png';
		myBlueIcon.imageMap = [8,0,10,1,10,2,11,3,11,4,11,5,11,6,11,7,11,8,10,9,9,10,9,11,8,12,7,13,7,14,7,15,7,16,6,17,6,18,6,19,5,19,5,18,5,17,4,16,4,15,4,14,4,13,3,12,3,11,2,10,1,9,0,8,0,7,0,6,0,5,0,4,0,3,1,2,2,1,3,0];
		
		// create the map
		var map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.setCenter(new GLatLng(45.440147,-73.29049), 9);
	  
	  
	

       // ====================================================================================

				function zoomfit() {
					newzoom = map.getBoundsZoomLevel(bounds);
					newcenter = bounds.getCenter();
					map.setCenter(newcenter, newzoom);
				}
				
				function createMarker(point, name, html) {
					var marker = new GMarker(point, myBlueIcon);
					GEvent.addListener(marker, "click", function() {
					  marker.openInfoWindowHtml(html);
					});
					
					marker.label = name;
					
					return marker;
				}
				
				
   
			
			  // ====== Create a Client Geocoder ======
			  var geo = new GClientGeocoder(); 
		
			  // ====== Array for decoding the failure codes ======
			  var reasons=[];
			  reasons[G_GEO_SUCCESS]            = "Success";
			  reasons[G_GEO_MISSING_ADDRESS]    = "Adresse vide";
			  reasons[G_GEO_UNKNOWN_ADDRESS]    = "Adresse inconnue";
			  reasons[G_GEO_UNAVAILABLE_ADDRESS]= "La position de l'adresse ne peut être révélé pour des raisons contractuelle ou légale";
			  reasons[G_GEO_BAD_KEY]            = "Mauvaise clé API";
			  reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
			  reasons[G_GEO_SERVER_ERROR]       = "Erreur de connection avec le serveur Google maps";

			  
			  // ====== Geocoding ======
			  function showAddress(adresse_recherche, adresse_lat, adresse_lng) 
			  {
				var search = adresse_recherche; //document.getElementById("search").value;
		 		var vide = false;
		 		if (search == "") { search = 'j3l2x5'; vide = true; }
		 			
		 			
		 			
					// ====== Perform the Geocoding ======        
					geo.getLocations(search, function (result) { 
						var marker_adresse_recherche;
									
						// If that was successful
						if (result.Status.code == G_GEO_SUCCESS) {
							// How many resuts were found
							// Loop through the results, placing markers
							if (!vide) {
								for (var i=0; i<result.Placemark.length; i++) {
											  
									var p = result.Placemark[i].Point.coordinates;
									
									bounds.extend(new GLatLng(p[1],p[0]));
									var marker = new GMarker(new GLatLng(p[1],p[0]), myRedIcon);
									
									var latlng = marker.getLatLng();
									
									//var html = 'Latitude = ' + latlng.lat() + '   <br>'
									//		 + 'Longitude = ' + latlng.lng() + '   <br>';
									var html = "Vous êtes ici";
									marker_adresse_recherche = marker;	
									map.addOverlay(marker);
									marker.openInfoWindowHtml(html);
									marker.label = search;
									
									map.setCenter(new GLatLng(p[1],p[0]),14);
							
								}
								// ====== calcul des distances ======
							}							
							// Read the data
							// var xmlDoc = GXml.parse(request.responseText);
							var xmlDoc = GXml.parse(markers_xml);
							var markers = xmlDoc.documentElement.getElementsByTagName("marker");
							var tab_dist = new Array();
							var tab_ind_dist = new Array();
							
							for (var i = 0; i < markers.length; i++) {
								//alert(i + " - " + markers[i].getAttribute("label"));
								var lat = parseFloat(markers[i].getAttribute("lat"));
								var lng = parseFloat(markers[i].getAttribute("lng"));
								var point = new GLatLng(lat,lng);
								var html = "<strong>" + markers[i].getAttribute("nom") + "</strong><br/>" + markers[i].firstChild.nodeValue;
								var label = markers[i].getAttribute("nom");
								var marker = createMarker(point, label, html);
								gmarkers[i] = marker;
								gmarkersHTML[i] = html;
								gpoints[i] = point;
								map.addOverlay(marker);
								
								if (vide) { bounds.extend(new GLatLng(lat, lng)); }
								
							}
							
							
							
							if (!vide) {
								var info_html="";
								
								for (var i = 0; i<markers.length; i++) {
									var d=marker_adresse_recherche.getPoint().distanceFrom(gmarkers[i].getPoint())/1000;
									
									tab_ind_dist[i] = i;
									tab_dist[i] =  parseFloat(d.toFixed(0));
									/*
									var html = "<b>From "+marker_adresse_recherche.label+ " To "+gmarkers[i].label;
									html += "<\/b> " + d.toFixed(5) + " kilometres ";
									html += tab_ind_dist[i]  + "  ---> " + tab_dist[i];
									html += "<br /> ";
									
									info_html += html;*/
								}
								
								
								for (var i = 0; i < markers.length - 1; i++) {
									var dist_min = tab_dist[i];
									var ind_dist_min = i;
									
									for (var j = i+1; j < markers.length; j++) {
										if(dist_min > tab_dist[j]) {
											ind_dist_min = j;
											dist_min = tab_dist[j];
										}
									}
									if ( ind_dist_min != i ) {
										ind = tab_ind_dist[i];
										dist = tab_dist[i];
										
										tab_ind_dist[i] = tab_ind_dist[ind_dist_min];
										tab_dist[i] = tab_dist[ind_dist_min];
										
										tab_ind_dist[ind_dist_min] = ind;
										tab_dist[ind_dist_min] = dist;
									}
								}		
								var html = "";
								html += "<ul>";
								
								//for (var i = 0; i<markers.length; i++) {
								for (var i = 0; i<3; i++) {
									j = tab_ind_dist[i];
									bounds.extend(gpoints[j]);
									//console.log(gmarkers);
									/*var html = ""+marker_adresse_recherche.label+ " To "+ markers[j].getAttribute("nom")+ " ("+ markers[j].getAttribute("ville");
									html += "" + tab_dist[i] + " km )";
									html += tab_ind_dist[i]  + "  ---> " + tab_dist[i];
									html += "<br /> ";*/
									html += "<li><a onclick='seeDealer(" + j + "); return false;' href='#'>" + markers[j].getAttribute("nom") + " (" + markers[j].getAttribute("ville") + ", environ " + tab_dist[i] + " km )</a></li>";			
								}
								
								//console.log(bounds);
								
								html += "</ul>";
								
								info_html += html;
								
								
								// put the assembled results into the info div
								document.getElementById("info").innerHTML = info_html;
								
							
							
							}
							
							zoomfit();			  
							
							// ====== fin du calcul des distances ======
							  
						}
						// ====== Decode the error status ======
						else {
						  var reason="Code "+result.Status.code;
						  if (reasons[result.Status.code]) {
							reason = reasons[result.Status.code]
						  } 
						  //alert('Impossible de trouver "'+search+ '" ' + reason);
						  $(".mapErreur").html('Impossible de trouver "'+search+ '" ' + reason);
						  $("#info").html("Votre code postal est introuvable.");
						  $(".mapErreur").fadeIn("fast");	
						}
					  });
				
					}
				
			 showAddress(adresse_recherche, adresse_latitude, adresse_longitude) ;

       // ====================================================================================

  
    }

    else {
      alert("Désolé, Google Maps API n'est pas compatible avec votre navigateur");
    }

    //]]>
