    var map = null;
    var geocoder = null;
    var baseIcon = null;
    var bounds = null;  
    var locations = {};
    var locationsAgc = {};
    var locationsDep = {};

    var map2 = null;
    var bounds2 = null;  
    var baseIcon2 = null;
    var locationsAgc2 = {};


    function load2(id_site, dep, agc, tm)
    {
      if(id_site==2)
      {
        var url_fix = '../../';
      }
      else
      {
        var url_fix = '../../../';
      }

      var IconMarker2 = url_fix + "images/point.png";

      var map2 = new GMap2(document.getElementById("map_canvas2"));
      var bounds2 = new GLatLngBounds();
      map2.setCenter(new GLatLng(49.253465,2.455444), 7); // nord france
      map2.addControl(new GSmallMapControl());
      //49.43528,2.081944 : oise

      // défini icone perso terrain
      baseIcon2 = new GIcon(G_DEFAULT_ICON);
      baseIcon2.image = IconMarker2;
      baseIcon2.shadow = "images/point-shadow.png";
      baseIcon2.iconSize = new GSize(19, 30);
      baseIcon2.shadowSize = new GSize(60, 46);
      baseIcon2.iconAnchor = new GPoint(9, 29);
      baseIcon2.infoWindowAnchor = new GPoint(9, 10);

        GDownloadUrl(url_fix + "getDataTerrainsXML.asp?id_site="+ id_site +"&dep="+ dep +"&id_agence="+ agc +"&tm=DA", function(data) {
        var nb=0;
        var xml2 = GXml.parse(data);

        // liste des terrains
        var markers2 = xml2.documentElement.getElementsByTagName("agence");
        for (var i = 0; i < markers2.length; i++) {
          nb++;
          var nom2 = markers2[i].getAttribute("nom");
          var adresse2 = markers2[i].getAttribute("adresse");
          var tel2 = markers2[i].getAttribute("tel");
          var fax2 = markers2[i].getAttribute("fax");
          var urlAgence2 = markers2[i].getAttribute("urlAgence");
          var latlng2 = new GLatLng(parseFloat(markers2[i].getAttribute("lat")),
                                  parseFloat(markers2[i].getAttribute("lng")));
          var agence2 = {latlng: latlng2, nom: nom2, adresse: adresse2, tel: tel2, fax: fax2, urlAgence: urlAgence2};

          var latlngHash2 = (latlng2.lat().toFixed(6) + "" + latlng2.lng().toFixed(6));
          latlngHash2 = latlngHash2.replace(".","").replace(".", "").replace("-","");
          locationsAgc2[latlngHash2] = [];

          locationsAgc2[latlngHash2].push(agence2); 
          bounds2.extend(latlng2);
        }
     
        // Place les points agences
        for (var latlngHash2 in locationsAgc2) {
          var agences2 = locationsAgc2[latlngHash2];
          map2.addOverlay(createMarkerAgcDet(agences2));
        }   
        
        
         // centre et zoom
          if(nb>0)
          {  
            map2.setZoom(15);
            map2.setCenter(bounds2.getCenter());    
          }
        });
    }






 
 // Charge liste des éléments à afficher sur la carte
 //	id_site : site
 // dep : département
 // agc : agence spécifique
 // tm : T pour terrains, TM pour terrains+maison
    function load(id_site, dep, agc, tm) {
      if((tm=='DT')||(tm=='DTM'))
      {
        if(id_site==2)
        {
          var url_fix = '../../';
        }
        else
        {
          var url_fix = '../../../';
        }
      }
      else
      {
        var url_fix = '';
      }

      var map = new GMap2(document.getElementById("map_canvas"));
      var bounds = new GLatLngBounds();
      map.setCenter(new GLatLng(49.253465,2.455444), 7); // nord france
      map.addControl(new GSmallMapControl());
      //49.43528,2.081944 : oise
      
      if (tm=="T"||tm=="DT")
      {
      	var IconMarker = url_fix + "images/point-terr.png";
      	var IconMarkerM = url_fix + "images/point-terrM.png";
      }
      else
      {
        var IconMarker = url_fix + "images/point.png";
        var IconMarkerM = url_fix + "images/pointM.png";
      }
      
      
      // défini icone perso terrain
      baseIcon = new GIcon(G_DEFAULT_ICON);
      baseIcon.image = IconMarker;
      baseIcon.shadow = "images/point-shadow.png";
      baseIcon.iconSize = new GSize(19, 30);
      baseIcon.shadowSize = new GSize(60, 46);
      baseIcon.iconAnchor = new GPoint(9, 29);
      baseIcon.infoWindowAnchor = new GPoint(9, 10);
      
      // défini icone perso terrains même commune
      baseIconM = new GIcon(G_DEFAULT_ICON);
      baseIconM.image = IconMarkerM;
      baseIconM.shadow = "images/point-shadow.png";
      baseIconM.iconSize = new GSize(19, 30);
      baseIconM.shadowSize = new GSize(60, 46);
      baseIconM.iconAnchor = new GPoint(9, 29);
      baseIconM.infoWindowAnchor = new GPoint(9, 10);
      
	    if(agc=='' && dep==''){
	    	if(tm=='AG'){
          GDownloadUrl(url_fix + "getDataTerrainsXML.asp?id_site="+ id_site +"&tm="+ tm, function(data) {
            var nb=0;
            var xml = GXml.parse(data);
		        // liste des terrains
		        var markers = xml.documentElement.getElementsByTagName("agence");
		        for (var i = 0; i < markers.length; i++) {

		          nb++;
		          var ville = markers[i].getAttribute("ville");
		          var commune = markers[i].getAttribute("commune");
		          var nom = markers[i].getAttribute("nom");
		          var urlAgence = markers[i].getAttribute("urlAgence");
		          var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
		                                  parseFloat(markers[i].getAttribute("lng")));
		          var store = {latlng: latlng, nom: nom, commune: commune, urlAgence: urlAgence, tm:tm};
//alert("latlng:"+latlng+", nom:"+ nom+", commune:"+commune+", urlAgence:+, "+urlAgence+", tm:"+tm);
		          var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
		          latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");
		          if (locations[latlngHash] == null) {
		            locations[latlngHash] = []
		          }
		          locations[latlngHash].push(store);         
		          // ajout à bounds pour calcul pos et zoom
		          bounds.extend(latlng); 
		        }
		        // place les points terrains
		        for (var latlngHash in locations) {
		          var stores = locations[latlngHash];
	            map.addOverlay(createClusteredMarkerAgc(stores));
		        }   
         
              
		         // centre et zoom
		        if(nb>0)
	        	{  
              var zoom_level = map.getBoundsZoomLevel(bounds);
              if(zoom_level>=10)
              {  
                map.setZoom(10);
              }
              else
              {
                if(zoom_level>9)
                {
                  map.setZoom(zoom_level - 1);
                }
                else
                {
                  map.setZoom(zoom_level);
                }
              }
              map.setCenter(bounds.getCenter());    
            }
          });

	    	} else {
            // Départements du site
            GDownloadUrl(url_fix + "getDataDepXML.asp?id_site="+ id_site +"&tm="+ tm, function(data) {
              var nb=0;
              var xml = GXml.parse(data);
            // Liste des deps
            var markers = xml.documentElement.getElementsByTagName("departement");
                for (var i = 0; i < markers.length; i++) {
                nb++;
                var nomdep = markers[i].getAttribute("nomdep");
                var dep = markers[i].getAttribute("numdep");
                var urldep = markers[i].getAttribute("urldep");
                var txturl = markers[i].getAttribute("txturl");
                var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                        parseFloat(markers[i].getAttribute("lng")));
                var deps = {latlng: latlng, nomdep: nomdep, dep: dep, urldep: urldep, txturl: txturl};
                var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
                latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");
                locationsDep[latlngHash] = []
      
                //locations[latlngHash].push(store);         
                // ajout à bounds pour calcul pos et zoom
                 
                locationsDep[latlngHash].push(deps); 
                //map.addOverlay(createMarkerAgc(agence));
                bounds.extend(latlng); 
              }

              
              // Place les deps
              for (var latlngHash in locationsDep) {
                var departements = locationsDep[latlngHash];
                map.addOverlay(createMarkerDep(departements));
              }  
           });
	    	}
	    } else {	
	    	GDownloadUrl(url_fix + "getDataTerrainsXML.asp?id_site="+ id_site +"&dep="+ dep +"&id_agence="+ agc +"&tm="+ tm, function(data) {
        	var nb=0;
        	var xml = GXml.parse(data);

		        // liste des terrains
		        var markers = xml.documentElement.getElementsByTagName("terrain");
		        for (var i = 0; i < markers.length; i++) {
		          nb++;
		          var commune = markers[i].getAttribute("commune");
		          var surface = markers[i].getAttribute("surface");
		          var prix = markers[i].getAttribute("prix");
		          var urlTerrain = markers[i].getAttribute("urlTerrain");
		          var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
		                                  parseFloat(markers[i].getAttribute("lng")));
		          var store = {latlng: latlng, commune: commune, urlTerrain: urlTerrain, surface: surface, prix: prix, tm:tm};
		          var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
		          latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");
		          if (locations[latlngHash] == null) {
		            locations[latlngHash] = []
		          }
		          locations[latlngHash].push(store);         
		          // ajout à bounds pour calcul pos et zoom
		          bounds.extend(latlng); 
		        }
	        
		        // Agences
		        var markers = xml.documentElement.getElementsByTagName("agence");
		        for (var i = 0; i < markers.length; i++) {
		          nb++;
		          var nom = markers[i].getAttribute("nom");
		          var adresse = markers[i].getAttribute("adresse");
		          var tel = markers[i].getAttribute("tel");
		          var fax = markers[i].getAttribute("fax");
		          var urlAgence = markers[i].getAttribute("urlAgence");
		          var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
		                                  parseFloat(markers[i].getAttribute("lng")));
		          var agence = {latlng: latlng, nom: nom, adresse: adresse, tel: tel, fax: fax, urlAgence: urlAgence};
		          var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
		          latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");
		          locationsAgc[latlngHash] = []
		
		          //locations[latlngHash].push(store);         
		          // ajout à bounds pour calcul pos et zoom
		           
		          locationsAgc[latlngHash].push(agence); 
		          //map.addOverlay(createMarkerAgc(agence));
		          bounds.extend(latlng);
		        }        
	        
	         
		        // Place les points agences
		        for (var latlngHash in locationsAgc) {
		          var agences = locationsAgc[latlngHash];
		          map.addOverlay(createMarkerAgc(agences));
		        }   
		        
		        
		        // place les points terrains
		        for (var latlngHash in locations) {
		          var stores = locations[latlngHash];
		          if (stores.length > 1) {
		            map.addOverlay(createClusteredMarker(stores));
		          } else {
                if (tm=="DT"||tm=="DTM")
                {
                  map.addOverlay(createMarkerDet(stores));
                }
                else
                {
                  map.addOverlay(createMarker(stores));
                }
		          }
		        }   
         
              
		         // centre et zoom
		        if(nb>0)
	        	{  
              var zoom_level = map.getBoundsZoomLevel(bounds);
              if(zoom_level>=10)
              {  
                map.setZoom(10);
              }
              else
              {
                if(zoom_level>9)
                {
                  map.setZoom(zoom_level - 1);
                }
                else
                {
                  map.setZoom(zoom_level);
                }
              }
              map.setCenter(bounds.getCenter());    
            }
      
      	});
    
    }
 }
 
// Point terrain ou t+m
    function createMarker(stores) {
      	var store = stores[0];
		var marker = new GMarker(store.latlng, { icon:baseIcon });
		if (store.tm=="T") {
			var myHtml = '<b>Terain situé à proximité de '+ store.commune +'</b><br><b>Surface :</b>'+ store.surface +' m²<br><b>Prix :</b>'+ store.prix +' &euro;<br><a href="'+ store.urlTerrain +'">Voir ce terrain</a>';
		}else{
			var myHtml = '<b>Terain avec maisons situé à proximité de '+ store.commune +'</b><br><b>Surface terrain :</b>'+ store.surface +' m²<br><b>Prix :</b>'+ store.prix +' &euro;<br><a href="'+ store.urlTerrain +'">Voir ce terrain</a>';
		}
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(myHtml);
		});		
		return marker;  
    }

// Point terrain ou t+m détail
    function createMarkerDet(stores) {
      var store = stores[0];
      var marker = new GMarker(store.latlng, { icon:baseIcon });
      return marker;  
    }

// Point multiple terrain ou t+m
   function createClusteredMarker(stores) {
      var marker = new GMarker(stores[0].latlng, {icon: baseIconM});
      if (stores.tm=="T")
      {
      	var html = "<b>"+ stores.length +" terrains situés à proximité de "+ stores[0].commune +" :</b><br/>";
      }
      else
      {
        var html = "<b>"+ stores.length +" terrains avec maison situés à proximité de "+ stores[0].commune +" :</b><br/>";
      }
      for (var i = 0; i < stores.length; i++) {
        html += "<br/>- <b>Surface :</b> "+ stores[i].surface +" m² - <b>Prix :</b> "+ stores[i].prix +" &euro; - <a href=\""+ stores[i].urlTerrain +"\">Voir ce terrain</a>";
      }
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }


// Point multiple Agc
   function createClusteredMarkerAgc(stores) {
      var marker = new GMarker(stores[0].latlng, {icon: baseIconM});
      var html = "<b>Agence sur "+ stores[0].commune +" :</b><br/>";
      for (var i = 0; i < stores.length; i++) {
        html += "<br/>- "+ stores[i].nom +" <a href=\""+ stores[i].urlAgence +"\">Voir l'agence</a>"
      }
      html += "<br/>"
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }

// Point multiple terrain ou t+m
   function createClusteredMarker(stores) {
      var marker = new GMarker(stores[0].latlng, {icon: baseIconM});
      if (stores.tm=="T") {
      	var html = "<b>"+ stores.length +" terrains situés à proximité de "+ stores[0].commune +" :</b><br/>";
      }else{
      	var html = "<b>"+ stores.length +" terrains avec maison situés à proximité de "+ stores[0].commune +" :</b><br/>";
      }
      for (var i = 0; i < stores.length; i++) {
        html += "<br/>- <b>Surface :</b> "+ stores[i].surface +" m² - <b>Prix :</b> "+ stores[i].prix +" &euro; - <a href=\""+ stores[i].urlTerrain +"\">Voir ce terrain</a>";
      }
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
  
  
  // Point agence
    function createMarkerAgc(agences) {
    	var agence = agences[0];
		var marker = new GMarker(agence.latlng, { icon:baseIcon });
		var myHtml = '<b>'+ agence.nom +'</b><br>'+ agence.adresse +'<br><b>Tél : </b>'+ agence.tel +'<br><b>Fax : </b>'+ agence.tel +'<br><a href="'+ agence.urlAgence +'">Voir cette agence</a>';
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(myHtml);
		});		
		return marker;  
    }
    
  // Point agence
    function createMarkerAgcDet(agences) {
    	var agence = agences[0];
      var marker = new GMarker(agence.latlng, { icon:baseIcon2 });
      return marker;  
    }


  // Point département
    function createMarkerDep(departements) {
    	var departement = departements[0];
    	var IconDep = new GIcon(baseIcon);
    	IconDep.image = "images/point-dep-"+ departement.dep +".png";
    	IconDep.shadow = "images/point-shadow.png";
      	IconDep.iconSize = new GSize(24, 43);
      	IconDep.shadowSize = new GSize(60, 60);
      	IconDep.iconAnchor = new GPoint(12, 43);
      	IconDep.infoWindowAnchor = new GPoint(12, 12);
		var marker = new GMarker(departement.latlng, { icon:IconDep });
		var myHtml = '<b>Département '+ departement.nomdep +' ('+ departement.dep +')</b><br><a href="'+ departement.urldep +'">'+ departement.txturl +'</a>';
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(myHtml);
		});		
		return marker;  
    }


  // Point département
    function __createMarkerDep(departements) {
    	var departement = departements[0];
    	var IconDep = new GIcon(baseIcon);
    	IconDep.image = "images/point-dep-"+ departement.dep +".png";
    	IconDep.shadow = "images/point-shadow.png";
      	IconDep.iconSize = new GSize(24, 43);
      	IconDep.shadowSize = new GSize(60, 60);
      	IconDep.iconAnchor = new GPoint(12, 43);
      	IconDep.infoWindowAnchor = new GPoint(12, 12);
		var marker = new GMarker(departement.latlng, { icon:IconDep });
		var myHtml = '<b>Département '+ departement.nomdep +' ('+ departement.dep +')</b><br><a href="'+ departement.urldep +'">'+ departement.txturl +'</a>';
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(myHtml);
		});		
		return marker;  
    }

    
// Charge liste terrains ajax    
	function getTerrains(arg) {
		var xhr_object = null;
			
		if(window.XMLHttpRequest) // Firefox
		   xhr_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // Internet Explorer
		   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		else { // XMLHttpRequest non supporté par le navigateur
		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest... Utilisez Mozilla Firefox ou mettez à jour Safari");
		   return;
		}
		xhr_object.open("GET", 'getDataTerrains.asp?' + arg, true);
			
		xhr_object.onreadystatechange = function() {
		   if(xhr_object.readyState == 4) {
		  		document.getElementById('ListeTerrain').innerHTML=xhr_object.responseText;
		  		//if (document.getElementById('gMapJs')) {eval(document.getElementById('gMapJs').innerHTML)}
		   }	
		}
			
		xhr_object.send(null);
	}    
	
// Charge liste terrains + maison ajax
	function getTerrainsMaison(arg) {
		var xhr_object = null;
			
		if(window.XMLHttpRequest) // Firefox
		   xhr_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // Internet Explorer
		   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		else { // XMLHttpRequest non supporté par le navigateur
		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest... Utilisez Mozilla Firefox ou mettez à jour Safari");
		   return;
		}

		xhr_object.open("GET", 'getDataTerrainsMaison.asp?' + arg, true);
			
		xhr_object.onreadystatechange = function() {
		   if(xhr_object.readyState == 4) {
		  		document.getElementById('ListeTerrain').innerHTML=xhr_object.responseText;
		  		//if (document.getElementById('gMapJs')) {eval(document.getElementById('gMapJs').innerHTML)}
		   }	
		}
			
		xhr_object.send(null);
	}	
	
	
 // localise agence et place point 
  function showAgence2(address, id_site, url_fix)
  {
    var IconMarker2 = url_fix + "images/point.png";

    var map2 = new GMap2(document.getElementById("map_canvas2"));
    var bounds2 = new GLatLngBounds();
    map2.setCenter(new GLatLng(49.253465,2.455444), 7); // nord france
    map2.addControl(new GSmallMapControl());
    //49.43528,2.081944 : oise

    // défini icone perso terrain
    baseIcon2 = new GIcon(G_DEFAULT_ICON);
    baseIcon2.image = IconMarker2;
    baseIcon2.shadow = "images/point-shadow.png";
    baseIcon2.iconSize = new GSize(19, 30);
    baseIcon2.shadowSize = new GSize(60, 46);
    baseIcon2.iconAnchor = new GPoint(9, 29);
    baseIcon2.infoWindowAnchor = new GPoint(9, 10);

    if (GBrowserIsCompatible())
    {
      map = new GMap2(document.getElementById("map_canvas2"));
      map.setCenter(new GLatLng(47.15984, 2.702637), 6);
      map.addControl(new GSmallMapControl());
      geocoder = new GClientGeocoder();
      

      if (geocoder){
	      geocoder.getLatLng(
	        address,
	        function(point)
	        {
	          if (!point)
	          {
	//            alert(address + " not found");
	          }
	          else
	          {
	            map.setCenter(point, 15);
	            var marker = new GMarker(point, { icon:baseIcon2 });
	            map.addOverlay(marker);
	          }
	        }
	      );
	    }
      
    }
  }
	
	

 // localise agence et place point 
  function showAgence(address)
  {
    if (GBrowserIsCompatible())
    {
      var IconMarker2 = "images/point.png";

      map = new GMap2(document.getElementById("map_canvas"));
      map.setCenter(new GLatLng(47.15984, 2.702637), 6);
      map.addControl(new GSmallMapControl());
      geocoder = new GClientGeocoder();
      
      // défini icone perso terrain
      baseIcon2 = new GIcon(G_DEFAULT_ICON);
      baseIcon2.image = IconMarker2;
      baseIcon2.shadow = "images/point-shadow.png";
      baseIcon2.iconSize = new GSize(19, 30);
      baseIcon2.shadowSize = new GSize(60, 46);
      baseIcon2.iconAnchor = new GPoint(9, 29);
      baseIcon2.infoWindowAnchor = new GPoint(9, 10);

      if (geocoder){
	      geocoder.getLatLng(
	        address,
	        function(point)
	        {
	          if (!point)
	          {
	//            alert(address + " not found");
	          }
	          else
	          {
	            map.setCenter(point, 15);
	            var marker = new GMarker(point, { icon:baseIcon2 });
	            map.addOverlay(marker);
	            marker.openInfoWindowHtml(address);
	          }
	        }
	      );
	    }
      
    }
  }


// Charge liste des témoignages
	function getTemoignages(arg) {
		var xhr_object = null;
		
		if(window.XMLHttpRequest) // Firefox
		   xhr_object = new XMLHttpRequest();
		else if(window.ActiveXObject) // Internet Explorer
		   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		else { // XMLHttpRequest non supporté par le navigateur
		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest... Utilisez Mozilla Firefox ou mettez à jour Safari");
		   return;
		}

		xhr_object.open("GET", 'getDataTemoignages.asp?' + arg, true);
			
		xhr_object.onreadystatechange = function() {
		   if(xhr_object.readyState == 4) {
		  		document.getElementById('Actualites').innerHTML=xhr_object.responseText;
		   }	
		}
			
		xhr_object.send(null);
	}


// check si mail valide
function VerifEmail()
{
	var exp=new RegExp("^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$","g");
	if(exp.test(document.formNL.mail.value)==false)
	{
		document.getElementById('pNL').innerHTML = '<b>Veuillez saisir un email valide.</b>';
		document.getElementById('mail').className = 'err';
		return false;
	}
	else
	{
		document.formNL.submit();
	}
}
