
var map;
var map2;
var marker;
var marker2;
var listedesmarqueurssurcarte = new Array(); // contient la liste des marqueurs sur la carte : permet de les effacer plus tard puisqu'on ne recharge pas la page
var listedesmarqueurscoordonneessurcarte = new Array(); // contient la liste des marqueurs sur la carte : permet de les effacer plus tard puisqu'on ne recharge pas la page
var listemarqueursparticuliers = new Array();
var icone;
var icone2;
var cercle = null; // servait quand on affichait un cercle de distance (cercle bleu qui apparaissait quand une distance était sélectionnée
var langue;
var geocoder;
var connecte; // permet de savoir si le client s'est connecté ou si c'est juste un visiteur, pour savoir s'il peut ajouter en sélection ou non
var deplacement = true;

/*
function initialize
-Fonction appelée au chargement de la page index.php
-Prend en paramètre des latitudes/longitude (par défaut celles du centre du pays
-Initialise la googlemap
*/ 
function initialize(latitude,longitude,l,c) { 
  
  if (GBrowserIsCompatible()) {
	langue=l;
	connecte = c;
	map = new GMap2(document.getElementById("carte"));
	map.setCenter(new GLatLng(latitude, longitude), zoom_c); // on met un zoom éloigné car si trop proche, il y a des problèmes avec le cercle de distance
	map.setUIToDefault();
	map.addControl(new GMapTypeControl());
	 GEvent.addListener(map, "moveend", function() // Définit les actions quand on déplace la carte : ici on modifie la liste des réponses
	  {        
		if(deplacement){
		
			var niveauzoom = map.getZoom();
			
			newBounds = map.getBounds(); // récupère les coordonnées des bords de la carte
			coinhautdroite = newBounds.getNorthEast();
			coinbasgauche = newBounds.getSouthWest();
			
			longitudemax = coinhautdroite.lng();
			longitudemin = coinbasgauche.lng();
			latitudemin = coinbasgauche.lat();
			latitudemax = coinhautdroite.lat();
			rechercherannonce(latitudemin,latitudemax,longitudemin,longitudemax);
		}
	  }); 
		
  }
  
}



/*
function initialize3
-Fonction appelée au chargement de la page modifier.php
-Prend en paramètre des latitudes/longitude et la langue
-Initialise la googlemap
*/
function initialize3(latitude,longitude,l){

	 geocoder = new GClientGeocoder();

		langue = l;
      if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("carte"));
			map.setCenter(new GLatLng(latitude, longitude), 12);
			map.setUIToDefault();
			map.addControl(new GMapTypeControl());	
			
			icone = new GIcon();
			icone.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
			icone.shadow =
			"http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			icone.iconSize = new GSize(12, 20);
			icone.shadowSize = new GSize(22, 20);
			icone.iconAnchor = new GPoint(6, 20);
			icone.infoWindowAnchor = new GPoint(5, 1);
			""
		
			var point = new GLatLng(latitude, longitude);
			var markerOptions = { icon:icone,
								draggable: false };      

			marker = new GMarker(point, markerOptions);
					
			  GEvent.addListener(marker, "dragend", function()
			  {        
				var ncoords = marker.getPoint();
				document.formu.latitude.value = ncoords.lat();
				document.formu.longitude.value = ncoords.lng();
				map.setCenter(new GLatLng(ncoords.lat(), ncoords.lng()), map.getZoom());
				recherchevilleapartircoordonnees2(ncoords.lat(),ncoords.lng());
				
			  });
			  
			  map.addOverlay(marker);
		  
		if(document.getElementById("carte2")){
			map2 = new GMap2(document.getElementById("carte2"));
			map2.setCenter(new GLatLng(latitude, longitude), 15);
			map2.setUIToDefault();
			map2.addControl(new GMapTypeControl());	
			
			icone2 = new GIcon();
			icone2.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
			icone2.shadow =
			"http://labs.google.com/ridefinder/images/mm_20_shadow.png";
			icone2.iconSize = new GSize(12, 20);
			icone2.shadowSize = new GSize(22, 20);
			icone2.iconAnchor = new GPoint(6, 20);
			icone2.infoWindowAnchor = new GPoint(5, 1);
			""
		
			var point2 = new GLatLng(latitude, longitude);
			var markerOptions2 = { icon:icone2,
								draggable: false };      

			marker2 = new GMarker(point2, markerOptions2);
					
			  GEvent.addListener(marker2, "dragend", function()
			  {        
				var ncoords2 = marker2.getPoint();
				document.formu.latitude.value = ncoords2.lat();
				document.formu.longitude.value = ncoords2.lng();
				map2.setCenter(new GLatLng(ncoords2.lat(), ncoords2.lng()), map2.getZoom());
				recherchevilleapartircoordonnees2(ncoords2.lat(),ncoords2.lng());
				
			  });
			  
			  map2.addOverlay(marker2);
		}

      }
}



/*
function initialize4
-Fonction appelée au chargement de la page creerannonce.php
-Prend en paramètre des latitudes/longitude,la langue et le niveau de zoom
-Initialise la googlemap
*/
function initialize4(latitude,longitude,l,zoom){
		langue = l;
		geocoder = new GClientGeocoder();
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("carte"));
        map.setCenter(new GLatLng(latitude, longitude), parseInt(zoom));
        map.setUIToDefault();
		map.addControl(new GMapTypeControl());	
		
		icone = new GIcon();
		icone.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
		icone.shadow =
		"http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		icone.iconSize = new GSize(12, 20);
		icone.shadowSize = new GSize(22, 20);
		icone.iconAnchor = new GPoint(6, 20);
		icone.infoWindowAnchor = new GPoint(5, 1);
		""
		
		var point = new GLatLng(latitude, longitude);
		var markerOptions = { icon:icone,
                            draggable: false };      

        marker = new GMarker(point, markerOptions);

      }
}



/*
* Fonction supprimerlesmarqueurs : supprime tous les marqueurs de la carte
*/
function supprimerlesmarqueurs(){
	for ( var i in listedesmarqueurssurcarte )
	{
		map.removeOverlay(listedesmarqueurssurcarte[i]);
		delete listedesmarqueurssurcarte[i] ;
	}
	
		for ( var i in listedesmarqueurscoordonneessurcarte )
	{
		map.removeOverlay(listedesmarqueurscoordonneessurcarte[i]);
		delete listedesmarqueurscoordonneessurcarte[i] ;
	}
	
	listedesmarqueurssurcarte = new Array();
	listemarqueursparticuliers = new Array();
}

/*
* Fonction supprimermarqueursexterieurs : supprime tous les marqueurs qui ne sont plus sur la carte visible
*/
function supprimermarqueursexterieurs(){
	for ( var i in listedesmarqueurssurcarte )
	{
		var bounds = map.getBounds();
		var ncoords = listedesmarqueurssurcarte[i].getPoint();
		var lat = parseFloat(ncoords.lat());
        var lng = parseFloat(ncoords.lng());
        var point = new GLatLng(lat,lng);
            //check if point is inside the viewing area of the map
            if (bounds.contains(point) != true){
				map.removeOverlay(listedesmarqueurssurcarte[i]);
				delete listedesmarqueurssurcarte[i] ;
			}
	}
}



function centrersurregion(latitude, longitude){
		map.setCenter(new GLatLng(latitude, longitude), 7);	
		// si un cercle était tracé sur la carte, on l'efface
		if(cercle != null){
			map.removeOverlay(cercle);
		}
}

function centrersurdepartement(latitude, longitude){
		map.setCenter(new GLatLng(latitude, longitude), 8);	
		// si un cercle était tracé sur la carte, on l'efface
		if(cercle != null){
			map.removeOverlay(cercle);
		}
}

function centrersurville(latitude, longitude, distance){
	if(distance == ""){
		map.setCenter(new GLatLng(latitude, longitude), 10);
	}else{
		if(distance > 85){
			map.setCenter(new GLatLng(latitude, longitude), 7);
		}else if(distance > 45){
			map.setCenter(new GLatLng(latitude, longitude), 8);
		}else if(distance > 20){
			map.setCenter(new GLatLng(latitude, longitude), 9);
		}else{
			map.setCenter(new GLatLng(latitude, longitude), 11);
		}
	}
	
	// si un cercle était tracé sur la carte, on l'efface
	if(cercle != null){
		map.removeOverlay(cercle);
	}
}




/*
function dessineunCercle
-Fonction lors de la modification du champs de distance dans le formulaire, lors du déplacement du marqueur sur la carte, ou par au chargement de la page resultatsrecherche.php
-Dessine le cercle de distance (le cercle bleu) autour du marqueur sur la googlemap
*/
function dessineUnCercle(latitude, longitude, rayon){
	
	 if(cercle != null){
		map.removeOverlay(cercle);
	 }
	 cercle=null;
	
	 var centre = new  GLatLng(latitude, longitude); // centre du cercle
	 var cercleCouleur = "#0000ff";
	 var cercleEpaisseur = "1";
	 var cercleOpacite = "0.5";
	 var disqueCouleur = "#0000ff";
	 var disqueOpacite = "0.1";
	 var segment = 60; 

	 //Construction du tableau "points" contenant toutes les coordonnées des points nécessaires au tracé du cercle
	 var latConv = centre.distanceFrom(new GLatLng(centre.lat()+0.1, centre.lng()))/100;
	 var lngConv = centre.distanceFrom(new GLatLng(centre.lat(), centre.lng()+0.1))/100;
	 var points = []; // initialisation du tableau de points
	 var step = parseInt(360/segment)||10;
	 for(var i=0; i<=360; i+=step){
		var pint = new GLatLng(centre.lat() + (rayon/latConv * Math.cos(i * Math.PI/180)), centre.lng() + (rayon/lngConv * Math.sin(i * Math.PI/180)));
		points.push(pint);
	 }

	 //le cercle "cercle" est en fait un polygone construit à l'aide des points contenus dans le tableau "points"
	 //alert(points+', '+cercleCouleur+', '+cercleEpaisseur+', '+cercleOpacite+', '+disqueCouleur+', '+disqueOpacite);
	 cercle = new GPolygon(points, cercleCouleur, cercleEpaisseur, cercleOpacite, disqueCouleur, disqueOpacite);
	 map.addOverlay(cercle);
}

 



// fonction ajoutermarqueursurcarte_avec_infobulle( ) appelé par la fonction traitementlisteannoncesagences( ) du fichier video.js
// Cette fonction prend en entrée un tableau de annonces d'une seule et même agence ayant la même localisation
// cette fonction ajoute sur la carte un marqueur avec une infobulle contenant la liste des annonces du tableau en entrée
function ajoutermarqueursurcarte_avec_infobulle(tab_annonces){
	// si le marqueur n'est pas déjà ajouté à la carte on le fait
	document.getElementById("chargement_en_cours").style.display = "block";
	if( isdefined(tab_annonces) &&  isdefined(tab_annonces[0]) && isdefined(tab_annonces[0]['noannonce']) && !listedesmarqueurssurcarte[tab_annonces[0]['noannonce']]){
		iconeagence = new GIcon();
		iconeagence.image = "http://labs.google.com/ridefinder/images/mm_20_orange.png";
		iconeagence.shadow =	"http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		iconeagence.iconSize = new GSize(12, 20);
		iconeagence.shadowSize = new GSize(22, 20);
		iconeagence.iconAnchor = new GPoint(6, 20);
		iconeagence.infoWindowAnchor = new GPoint(5, 1);
		
		var point = new GLatLng(parseFloat(tab_annonces[0]['latitude']), parseFloat(tab_annonces[0]['longitude']));
		var markerOptions = { icon:iconeagence, draggable: false };     
		
		var markeragence = new GMarker(point, markerOptions);
		
		// contenu de l'infobulle
		var texte = '<strong>'+annonces_de_agence+tab_annonces[0]['nom_agence']+'</strong><br/><hr>';
		texte += '<div class="infobulle">';
		for (i=0; i<tab_annonces.length; i++){
			var annonce = tab_annonces[i];
			texte += '<a onclick="lancervideoplayer(\''+annonce['playervideo']+'\','+annonce['noannonce']+');">'+annonce['texte']+'</a>';
			listedesmarqueurssurcarte[annonce['noannonce']] = markeragence;

		}
		texte += '</div>';
		
		// lorsque l'on clique sur le marqueur on affiche l'infobulle et son contenu
		GEvent.addListener(markeragence, "click", function() {
			bloquer_deplacement();
			markeragence.openInfoWindowHtml(texte);
		});
		
		GEvent.addListener(markeragence, "infowindowclose", function() {
			map.setCenter(point, map.getZoom());
			debloquer_deplacement();
        });
		
		if(!isdefined(listedesmarqueurscoordonneessurcarte[tab_annonces[0]['latitude']])){
			listedesmarqueurscoordonneessurcarte[tab_annonces[0]['latitude']] = new Array();
			listedesmarqueurscoordonneessurcarte[tab_annonces[0]['latitude']][tab_annonces[0]['longitude']] = true;
			listedesmarqueurssurcarte[tab_annonces[0]['noannonce']]=markeragence;
			map.addOverlay(markeragence);
		}else if(!isdefined(listedesmarqueurscoordonneessurcarte[tab_annonces[0]['latitude']][tab_annonces[0]['longitude']])){
			listedesmarqueurscoordonneessurcarte[tab_annonces[0]['latitude']][tab_annonces[0]['longitude']] = true;
			listedesmarqueurssurcarte[tab_annonces[0]['noannonce']]=markeragence;
			map.addOverlay(markeragence);
			
		}else{
			// Déjà un marqueur à cette position, on en met donc un à côté si possible
			tab_annonces[0]['latitude'] = parseFloat(tab_annonces[0]['latitude'])+0.001;
			ajoutermarqueursurcarte_avec_infobulle(tab_annonces);
			
		}
	}
}



// fonction ajoutermarqueursurcarte_avec_infobulleparticulier( ) appelé par la fonction ajoutermarqueursurcarte( ) du fichier googlemap.js
// Cette fonction prend en entrée un tableau de annonces de particuliers
// affiche un marqueur qui affichera la liste des annonces en infobulle
function ajoutermarqueursurcarte_avec_infobulleparticulier(){
	tab_annonces = listemarqueursparticuliers;
	// si le marqueur n'est pas déjà ajouté à la carte on le fait	
		
		for ( var lat in tab_annonces )
		{
			var lalat = tab_annonces[lat];
			for ( var longi in lalat )
			{
				var lalongi = lalat[longi];
					
					//var point = new GLatLng(parseFloat(longi[0]['latitude']), parseFloat(longi[0]['longitude']));
					
					//alert(parseFloat()+' // '+parseFloat(longi[0]['longitude']));

					var texte = '<div class="infobulle">';	
					for ( var annonce in lalongi )
					{
						texte += '<a onclick="lancervideoplayer(\''+lalongi[annonce]['playervideo']+'\','+lalongi[annonce]['noannonce']+');">'+lalongi[annonce]['texte']+'</a>';
						var latitude = lalongi[annonce]['latitude'];
						var longitude = lalongi[annonce]['longitude'];
						//listedesmarqueurssurcarte[lalongi[annonce]['novideo']] = markeragence;
							
					}
					texte += '</div>';
					// lorsque l'on clique sur le marqueur on affiche l'infobulle et son contenu
					placermarker(latitude,longitude, texte);
					
			}
		
		}
	
}

function placermarker(latitude, longitude, texte){
	iconevideo = new GIcon();
	iconevideo.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	iconevideo.shadow =	"http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	iconevideo.iconSize = new GSize(12, 20);
	iconevideo.shadowSize = new GSize(22, 20);
	iconevideo.iconAnchor = new GPoint(6, 20);
	iconevideo.infoWindowAnchor = new GPoint(5, 1);
	var markerOptions = { icon:iconevideo, draggable: false }; 
	var point =  new GLatLng(parseFloat(latitude),parseFloat(longitude));	
	var newmarkeragence = new GMarker(point, markerOptions);	

	
	
	GEvent.addListener(newmarkeragence, "click", function() {
		bloquer_deplacement();
		newmarkeragence.openInfoWindowHtml(texte);
	});
				
	GEvent.addListener(newmarkeragence, "infowindowclose", function() {
		map.setCenter(point, map.getZoom());
		debloquer_deplacement();
	});
	
	map.addOverlay(newmarkeragence);
	listedesmarqueurssurcarte[listedesmarqueurssurcarte.length] = newmarkeragence;
}


/*
function deplacer2
-Fonction appelée au déplacement du marqueur des googlemaps des pages modifier.php et creerannonce.php
-Prend en paramètre des latitudes/longitude
-Déplace le marqueur aux coordonnées indiquées et centre la googlemap dessus
*/	
function deplacer2(latitude,longitude){
map.setCenter(new GLatLng(latitude, longitude), 8);

	var point = new GLatLng(latitude, longitude); 
	var markerOptions = { icon:icone,
						draggable: false };  
	map.removeOverlay(marker);					
	marker = new GMarker(point, markerOptions);
   GEvent.addListener(marker, "dragend", function()
	  {        
		var ncoords = marker.getPoint();
		document.formu.latitude.value = ncoords.lat();
		document.formu.longitude.value = ncoords.lng();
		map.setCenter(new GLatLng(ncoords.lat(), ncoords.lng()), map.getZoom());
		recherchevilleapartircoordonnees2(ncoords.lat(),ncoords.lng());	
	  });
	  
	  map.addOverlay(marker);
}
	
	
/*
function deplacer3
-Fonction appelée par la fonction geolocalisation() de la page googlemap.js
-Prend en paramètre des latitudes/longitude et le niveau de zoom
-Déplace le marqueur aux coordonnées indiquées et centre la googlemap dessus
*/	
function deplacer3(latitude,longitude,zoom){
	
	if(document.getElementById("carte2")){
		map2.setCenter(new GLatLng(latitude, longitude), zoom);
		document.formu.latitude2.value=latitude;
		document.formu.longitude2.value=longitude;
		var point2 = new GLatLng(latitude, longitude);
		var markerOptions2 = { icon:icone2,
							draggable: false };  
		map2.removeOverlay(marker2);					
		marker2 = new GMarker(point2, markerOptions2);	
		
		  map2.addOverlay(marker2);
	}else{
		map.setCenter(new GLatLng(latitude, longitude), zoom);
		document.formu.latitude2.value=latitude;
		document.formu.longitude2.value=longitude;
		var point = new GLatLng(latitude, longitude);
		var markerOptions = { icon:icone,
							draggable: false };  
		map.removeOverlay(marker);					
		marker = new GMarker(point, markerOptions);

		  map.addOverlay(marker);
	}

}	


/*
function geolocalisation
-Fonction appelée quand l'utilisateur fait une recherche sur l'adresse pour les pages modifier.php et creerannonce.php
-Recherche l'endroit indiqué par l'utilisateur : s'il est trouvé déplace le marqueur dessus, sinon indique une erreur à l'utilisateur
*/		

var pays = pays_c; // Le pays où sera recherché le lieu quand on fera une recherche par adresse. Si pas de pays particulier, peut etre vide (mettre '')

function  geolocalisation() {
	if(!document.getElementById("ville2").value || !document.getElementById("adresse2").value){
			alert(choix_ville_adresse);
	}else{
	var adresse = document.getElementById("adresse2").value+','+document.getElementById("ville2").value+", "+pays;
	  geocoder.getLatLng(
		adresse,
		function(point) {
		  if (!point) {
			  alert(adresse+pas_trouvee);
		  } else {
			document.getElementById("verifvillecodepostal2").innerHTML='';
			document.getElementById("tmp").value="true";
			deplacer3(point.lat(),point.lng(),13);
			validationlocalisation();
		  }
		}
	  );
	 }
}

// fonction utilisée en modification d'annonce
function  geolocalisationModif() {
	
	document.getElementById("latitude2").value = "";
	document.getElementById("longitude2").value = "";
	
	if(document.getElementById("ville2").value && document.getElementById("adresse2").value){
		var adresse = document.getElementById("adresse2").value+','+document.getElementById("ville2").value+", "+pays;
		geocoder.getLatLng(
			adresse,
			function(point) {
				if (!point) {
					alert(adresse+pas_trouvee);
				} else {
					document.getElementById("verifvillecodepostal2").innerHTML='';
					document.getElementById("tmp").value="true";
					document.getElementById("latitude2").value = point.lat();
					document.getElementById("longitude2").value = point.lng();
					deplacer3(point.lat(),point.lng(),14);
					verifvilleModif();
				}
			}
		);
	}else{
		if(document.getElementById("ville2").value == ''){
			alert("Vous devez saisir une ville.");
		}else{
			verifvilleModif();
		}
	}
}

function bloquer_deplacement(){
	deplacement = false;
}

function debloquer_deplacement(){
	deplacement = true;
}
