    var geo;
    var reasons=[];
	var saveResult;
	var paysOk;
	var zoomOnMapsOk = (typeof searchMaps != "undefined" && (searchMaps)) ? true : false;
	

	function loadGeocodeur() {
		geo = new GClientGeocoder(); 
		geo.setBaseCountryCode('FR');							// FR = France entière (DOM TOM inclus). France métroplitaine = FX
		document.getElementById('textSearchAgency').focus();	// on donne le focus au champs de saisie au load de la page
		
		// ====== Array for decoding the failure codes ======
		//	200 	601	 	602		 603	 610	 620	 500
		reasons[G_GEO_SUCCESS]            = "Trouv&eacute; mais ne fais pas partie des territoires autoris&eacute;s par la recherche";
		reasons[G_GEO_MISSING_ADDRESS]    = "Adresse absente : L'adresse manque ou n'a aucune valeur";
		reasons[G_GEO_UNKNOWN_ADDRESS]    = "Adresse inconnue :  Aucune situation g&eacute;ographique correspondante n'a pu &ecirc;tre trouv&eacute;e pour l'adresse sp&eacute;cifique.";
		reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Adresse indisponible :  Le geocodeur n'a pas pu retourner les coordonn&eacute;es GPS pour l'adresse donn&eacute;e pour des raisons l&eacute;gales ou contractuelles.";
		reasons[G_GEO_BAD_KEY]            = "Mauvaise clef : La clef d'api est inadmissible ou n'assortit pas le domaine pour lequel elle a été donn&eacute;e";
		reasons[G_GEO_TOO_MANY_QUERIES]   = "Trop de requetes : La quote-part geocoding quotidienne pour cet emplacement a &eacute;t&eacute; d&eacute;pass&eacute;e.";
		reasons[G_GEO_SERVER_ERROR]       = "Erreur du serveur : La demande de geocoding n'a pas pu &ecirc;tre trait&eacute;e avec succ&egrave;s.";
		
		loadPaysOk();
	}


	function loadPaysOk(){
		GDownloadUrl(territoires, function(file, code){
			if(code===200){
				paysOk = ( typeof JSON !== "undefined" ) ? JSON.parse(file)	:	eval('(' + file + ')');
			} else {
				GLog.write('Impossible de charger la liste des pays. Code erreur : '+code);
			}
		});
	}


	// ====== APPEL DU GEOCODING ======
	function showAddress() {
		var recherche = document.getElementById('textSearchAgency').value;
		geo.getLocations(recherche, resultsGeocode);
	}

	
	// ====== RESULTATS DU GEOCODING ======
	function resultsGeocode(result){
		var conteneurRes = document.getElementById('msgReturnSearch');
		var nbrResSearch = 0;
		
		
		//	TROUVE QUELQUE CHOSE (code 200)
		// on fait defiler les resultats pour filtrer tout ce qui n'est pas dans les terrtoires autorises
		if(result.Status.code == G_GEO_SUCCESS){
			var nbrDel = 0;
			nbrResSearch = result.Placemark.length;
			for (var i=0; i<result.Placemark.length; i++) {
				if(!(typeof result.Placemark[i].AddressDetails.Country != 'undefined' && 
				   typeof result.Placemark[i].AddressDetails.Country.CountryNameCode != 'undefined' && 
				   paysOk[result.Placemark[i].AddressDetails.Country.CountryNameCode] != null)) { 
					delete result.Placemark[i];
					nbrDel++;
				}
			}
			nbrResSearch -= nbrDel;	// et on deduit le nombre d'entrees du compteur
		}

		// Google est asynchrone, on sauvegarde les resultats dans le cas d'une utilisation ultérieure (click sur lien par ex)
		saveResult = result;
		
		
		//	APRES FILTRAGE, RESTE AU MOINS UN RESULTAT
		if (nbrResSearch >= 1) {
			// plusieurs resultats
			if (result.Placemark.length > 1) { 
				var htmlListe = '<p>Veuillez pr&eacute;ciser votre recherche :</p><ol>';
				for (var i=0; i<result.Placemark.length; i++) {
					// vu qu'on a supprime des entrees on verifie si celle en cours est encore la
					if(result.Placemark[i]){
						var p = result.Placemark[i].Point.coordinates;
						htmlListe += '<li>';
						htmlListe += (zoomOnMapsOk) ? '<span style="float:right;"><a href="javascript:zoomOnMap(saveResult.Placemark['+i+']);" style="color:#898989;">voir sur la carte [+]</a></span>' : '';
						htmlListe += '<a href="javascript:changeAndSubmit(saveResult.Placemark['+i+']);">'+ result.Placemark[i].address+'</a></li>';
					}
				}
				htmlListe += '</ol>';
				conteneurRes.innerHTML = htmlListe;
				
			}
			
			// un seul resultat
			if (nbrResSearch == 1) { 
				// a l'origine il pouvait y avoir plusieurs resultats et le filtre les a tous supprimes sauf 1
				// on fait donc defiler pour trouver celui qui reste
				for (var i=0; i<result.Placemark.length; i++) {
					if(result.Placemark[i]){
						changeAndSubmit(result.Placemark[i]);
					}
				}
			}
			
		}
		
		
		//	RIEN TROUVE OU APRES FILTRAGE AUCUN RESULTAT
		if (nbrResSearch == 0) {
			var reason="Code "+result.Status.code;
			if (reasons[result.Status.code]) {
				reason = reasons[result.Status.code]
			}
			conteneurRes.innerHTML = '<p>Votre recherche "'+result.name+'" n\'a retourn&eacute;e aucun r&eacute;sultat<br />Motif : '+ reason+'</p>';
		}
	}
	
	
	function zoomOnMap(obj){
		var p = obj.Point.coordinates;
		var tabAccuracy = new Array(2,4,6,10,12,13,16,16,17);
		map.setCenter(new GLatLng(p[1], p[0]), tabAccuracy[obj.AddressDetails.Accuracy], G_NORMAL_MAP);
	}
	
	function changeAndSubmit(obj){
		document.getElementById('textSearchAgency').value = obj.address;
		document.getElementById('latSearch').value = obj.Point.coordinates[1];
		document.getElementById('longSearch').value = obj.Point.coordinates[0];
		document.getElementById('AccuSearch').value = obj.AddressDetails.Accuracy;
		document.getElementById('formSearchAgency').submit();
	}
	
	function ShowOrNotHelp(){
		em = document.getElementById('helpSearch');
		if(em.style.display == ''){
			em.style.display = 'none';
		} else {
			em.style.display = '';
		}
	}

