// Procedures globales du projet
// Affiche un marqueur
function ouali_AfficheMarqueur(nLatitude, nLongitude, sIcone, bDragAndDropAutorise, sTexteInfoClic, nPrecision,Vendu)

{
//alert(Vendu);
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	var objMarqueur;
	
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new google.maps.LatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
		
	// Gestion de l'icône du marqueur
	if(sIcone=="")
	{
		sIcone = null;
	}
	else{
		var tempIcon = {
			url:sIcone
		}
	}
	
	
	// Gestion du cercle de précision
//	if (nPrecision != null)
//	{
//		var options = {
//			map:gObjCarte,
//			center:objCoordonnees,
//			radius:eval(nPrecision),
//			fillColor: "#0088FF",
//			fillOpacity: 0.2,
//			strokeColor: "#0088FF",
//			strokeOpacity: 0.5,
//			strokeWeight: 1,
//			clickable: false
//		}
//		var cercle = new google.maps.Circle(options);
//		circlesArray.push(cercle);
//	} 
	
	// Création du marqueur
	// Si on ne spécifie pas cette option, elle ne pourra pas être activée après coup
	var options = {
		//draggable:bDragAndDropAutorise,
		   draggable: true,
		position:objCoordonnees,
		map:gObjCarte
		
		
		
		
		,		icon:tempIcon
		
	};
	// Ajout du marqueur
	objMarqueur = new google.maps.Marker(options); 
	markersArray.push(objMarqueur);
	
	
	if (Vendu=="1")
	objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/green-dot.png");
	else
	objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/red-dot.png");
	
	// Ajout de l'info bulle si besoin
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'click', function() {
		
			if (!this.getMap()._infoWindow) {
				this.getMap()._infoWindow = new google.maps.InfoWindow();
				}
				this.getMap()._infoWindow.close();
				this.getMap()._infoWindow.setContent(sTexteInfoClic+"xxxxxx");
				this.getMap()._infoWindow.open(this.getMap(), this);
				var x=sTexteInfoClic;
				x=ouali_Ajoout_Table1_nav(x,Vendu,"Y");
				//alert(x);
				if (x=="1")
				objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/green-dot.png");
				else
				objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/red-dot.png");			
				//alert(sTexteInfooClic);	
				Actualiser_nav()					
			});
	}
	
	
	// On renvoie l'objet marqueur
	return objMarqueur;	
}

//var markersArray = [];
//var circlesArray = [];
//var linesArray = [];
//var markerClusterer = null;
//var rectangleArray = [];
//var polygoneArray = [];
//var KMLArray = [];
//var directionsArray = [];
function ouali_AffichePolygone(pts,pts1,c)
{
	CoordBounds = new google.maps.LatLngBounds(); // pour centrer carte sur ensemble des points
	parcelleHeig = [];
	var point = new Array(pts.length);
	for (i=0;i<pts.length;i++){
		var ch = pts[i];
		var tot = ch.split(";");	
		var latLng = new google.maps.LatLng(tot[0],tot[1]);
		//sommets du polygone
		parcelleHeig.push(latLng);
		// mémorise la position du nouveau point sert à centrer la carte ultérieurement sur l'ensemble des points
		CoordBounds.extend(latLng);
		}
	
		polygoneParcelleHeig = new google.maps.Polygon({
		paths: parcelleHeig,//sommets du polygone
		strokeColor: "#0FF0F0",//couleur des bords du polygone
		strokeOpacity: 0.5,//opacité des bords du polygone
		strokeWeight: 2,//épaisseur des bords du polygone
		fillColor: "#0FFFFF",//couleur de remplissage du polygone
		fillOpacity: 0.35////opacité de remplissage du polygone
		});
	
	polygoneArray.push(polygoneParcelleHeig);
	//lier le polygone à la carte. Ceci permet au polygone d'être affiché sur la carte
	polygoneParcelleHeig.setMap(gObjCarte);
	// création de la vue englobant le tracé
	gObjCarte.fitBounds(CoordBounds);

//************************************************************
//************************************************************
for (i=0;i<pts1.length;i++){

	var ch1 = pts1[i];
	var tot1 = ch1.split(";");	
	var x = tot1[2];
	var sTexteInfoClic=x;
	var objCoordonnees1;
	
		objCoordonnees1 = new google.maps.LatLng(tot1[0], tot1[1]);
		var resultColor =	google.maps.geometry.poly.containsLocation(new google.maps.LatLng(tot1[0], tot1[1]), polygoneParcelleHeig) ?	'green' :'red'	;						
		
			if (resultColor=='red')
				ouali_AfficheMarqueur(tot1[0],tot1[1],"http://maps.google.com/mapfiles/ms/icons/red-dot.png","1",tot1[2],100,0);
			else
			{
				ouali_AfficheMarqueur(tot1[0],tot1[1],"http://maps.google.com/mapfiles/ms/icons/green-dot.png","1",tot1[2],100,1);
				x=ouali_Ajoout_Table1_nav(tot1[2],1);
			}
}	
}
// Adapte la carte à ses marqueurs
function AdapteZoomEtCentre()
{
	var limits = new google.maps.LatLngBounds();
	for (var i = 0; i < markersArray.length; i++ ) {
		limits.extend(markersArray[i].position);
	}
	gObjCarte.fitBounds(limits);
}
// Affiche un marqueur
function o_AfficheMarqueur(nLatitude, nLongitude, sIcone, bDragAndDropAutorise, sTexteInfoClic, nPrecision)
{
//	alert(sIcone);
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	var objMarqueur;
	
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new google.maps.LatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
		
	// Gestion de l'icône du marqueur
	if(sIcone=="")
	{
		sIcone = null;
	}
	else{
		var tempIcon = {
			url:sIcone
		}
	}
	
	
	// Gestion du cercle de précision
//	if (nPrecision != null)
//	{
//		var options = {
//			map:gObjCarte,
//			center:objCoordonnees,
//			radius:eval(nPrecision),
//			fillColor: "#0088FF",
//			fillOpacity: 0.2,
//			strokeColor: "#0088FF",
//			strokeOpacity: 0.5,
//			strokeWeight: 1,
//			clickable: false
//		}
//		var cercle = new google.maps.Circle(options);
//		circlesArray.push(cercle);
//	} 
	
	// Création du marqueur
	// Si on ne spécifie pas cette option, elle ne pourra pas être activée après coup
	var options = {
		draggable:bDragAndDropAutorise,
		position:objCoordonnees,
		map:gObjCarte
		
		
		
		
		,		icon:tempIcon
		
	};
	// Ajout du marqueur
	objMarqueur = new google.maps.Marker(options); 
	markersArray.push(objMarqueur);
	
	// Ajout de l'info bulle si besoin
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'click', function() {
		
			if (!this.getMap()._infoWindow) {
				this.getMap()._infoWindow = new google.maps.InfoWindow();
				}
				this.getMap()._infoWindow.close();
				this.getMap()._infoWindow.setContent(sTexteInfoClic);
				this.getMap()._infoWindow.open(this.getMap(), this);
				var x=sTexteInfoClic;
				x=o_Ajoout_Table1(x);
				if (x==1)
				objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/green-dot.png");
				else
				objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/red-dot.png");
		
		
				
				//alert(sTexteInfooClic);
			
			

				
				
			});
	}
	
	// On renvoie l'objet marqueur
	return objMarqueur;	
}

//var markersArray = [];
//var circlesArray = [];
//var linesArray = [];
//var markerClusterer = null;
//var rectangleArray = [];
//var polygoneArray = [];
//var KMLArray = [];
//var directionsArray = [];
function AffichePolygone(pts)//,pts1,c)
{
	CoordBounds = new google.maps.LatLngBounds(); // pour centrer carte sur ensemble des points
	parcelleHeig = [];
	var point = new Array(pts.length);
	for (i=0;i<pts.length;i++){
		var ch = pts[i];
		var tot = ch.split(";");	
		var latLng = new google.maps.LatLng(tot[0],tot[1]);
		//sommets du polygone
		parcelleHeig.push(latLng);
		// mémorise la position du nouveau point sert à centrer la carte ultérieurement sur l'ensemble des points
		CoordBounds.extend(latLng);
		}
	
		polygoneParcelleHeig = new google.maps.Polygon({
		paths: parcelleHeig,//sommets du polygone
		strokeColor: "#0FF0F0",//couleur des bords du polygone
		strokeOpacity: 0.5,//opacité des bords du polygone
		strokeWeight: 2,//épaisseur des bords du polygone
		fillColor: "#0FFFFF",//couleur de remplissage du polygone
		fillOpacity: 0.35////opacité de remplissage du polygone
		});
	
	polygoneArray.push(polygoneParcelleHeig);
	//lier le polygone à la carte. Ceci permet au polygone d'être affiché sur la carte
	polygoneParcelleHeig.setMap(gObjCarte);
	// création de la vue englobant le tracé
	gObjCarte.fitBounds(CoordBounds);

}
// Récupération de l'objet carte.
function RecupereAPICarte(obj)
{
	// affectation à la variable globale navigateur.
	gObjCarte = obj;
}


// Supprime tout ce qui est affiché sur la carte
function SupprimeTout()
{
	for (var i = 0; i < markersArray.length; i++ ) {
		markersArray[i].setMap(null);
	}
	for (var i = 0; i < circlesArray.length; i++ ) {
		circlesArray[i].setMap(null);
	}
	for (var i = 0; i < linesArray.length; i++ ) {
		linesArray[i].setMap(null);
	}
	for (var i = 0; i < rectangleArray.length; i++ ) {
		rectangleArray[i].setMap(null);
		}
	for (var i = 0; i < polygoneArray.length; i++ ) {
		polygoneArray[i].setMap(null);
		}
	for (var i = 0; i < directionsArray.length; i++ ) {
		directionsArray[i].setMap(null);
		}
	for (var i = 0; i < KMLArray.length; i++ ) {
		KMLArray[i].setMap(null);
		}
	for (var i = 0; i < listeLabel.length; i++ ) {
		listeLabel[i].label.setMap(null);
		}
	for (var i = 0; i < listeTrajet.length; i++ ) {
		listeTrajet[i].setMap(null);
		}
		
	markersArray = [];
	circlesArray = [];
	linesArray = [];
	rectangleArray = [];
	polygoneArray = [];
	directionsArray = [];
	KMLArray = [];
	listeLabel = [];
	listeTrajet = [];
	
	// Si le markerClusterer est renseigné, on le vide
	if (markerClusterer)
	{
		markerClusterer.clearMarkers();
	}
	
	
}

// Résumé : Permet de brancher la complétion automatique de l'adresse sur un champ
// Syntaxe :
// GoogleMapsAutocomplete ()
//
// Paramètres :
//	AliasChamp : // chaine. Correspond à la propriété ..Alias d'un champ de saisie de la page
// Valeur de retour :
// 	Aucun : 
function AutocompleteSurAdresse(AliasChamp)
{
	//recherche du champ
	var input = document.getElementById(AliasChamp);
	var options = {
		componentRestrictions: {country: 'fr'}
		};
	//Active l'auto-complétion
	var autocomplete = new google.maps.places.Autocomplete(input);
}

// Affiche un marqueur
function ouali_AfficheMarqueurSimple(nLatitude, nLongitude, sIcone, bDragAndDropAutorise, sTexteInfoClic, nPrecision)

{
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	var objMarqueur;
	
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new google.maps.LatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
		
	// Gestion de l'icône du marqueur
	if(sIcone=="")
	{
		sIcone = null;
	}
	else{
		var tempIcon = {
			url:sIcone
		}
	}
	
	
	var options = {
	   draggable: true,
		position:objCoordonnees,
		map:gObjCarte,
		icon:tempIcon
		
	};
	// Ajout du marqueur
	objMarqueur = new google.maps.Marker(options); 
	markersArray.push(objMarqueur);
	
	
	
	objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/grn-pushpin.png");
		
	// Ajout de l'info bulle si besoin
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'click', function() {
		changerTblePolygone1(sTexteInfoClic);
		objMarqueur.setMap(null);
					
			});
	}
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'dragend', function(event) {			
					
			changerTblePolygone(sTexteInfoClic,event.latLng.lat(),event.latLng.lng());		
		});
	}
	// On renvoie l'objet marqueur
	return objMarqueur;	
}
function ouali_AffichePolygone1(pts)//,pts1,c)
{
	CoordBounds = new google.maps.LatLngBounds(); // pour centrer carte sur ensemble des points
	parcelleHeig = [];
	var point = new Array(pts.length);
	for (i=0;i<pts.length;i++){
		var ch = pts[i];
		var tot = ch.split(";");	
		var latLng = new google.maps.LatLng(tot[0],tot[1]);
		//sommets du polygone
		parcelleHeig.push(latLng);
		// mémorise la position du nouveau point sert à centrer la carte ultérieurement sur l'ensemble des points
		CoordBounds.extend(latLng);
		}
	
		polygoneParcelleHeig = new google.maps.Polygon({
		paths: parcelleHeig,//sommets du polygone
		strokeColor: "#0FF0F0",//couleur des bords du polygone
		strokeOpacity: 0.5,//opacité des bords du polygone
		strokeWeight: 2,//épaisseur des bords du polygone
		fillColor: "#0FFFFF",//couleur de remplissage du polygone
		fillOpacity: 0.35////opacité de remplissage du polygone
		});
	
	polygoneArray.push(polygoneParcelleHeig);
	//lier le polygone à la carte. Ceci permet au polygone d'être affiché sur la carte
	polygoneParcelleHeig.setMap(gObjCarte);
	// création de la vue englobant le tracé
	gObjCarte.fitBounds(CoordBounds);

}
// Recherche les coordonnées d'une adresse
function RechercheCoordonneesDepuisAdresse(sAdresse, sNomFonction)
{
	
	// On a récupéré le nom de la fonction sous forme de chaîne, donc on récupère maintenant le pointeur sur cette fonction
	var objFonction = eval(sNomFonction);
	
	// Création de l'objet GeoCoder
	var ObjGeocoder = new google.maps.Geocoder();
	
	// Demande de récupération des coordonnées à partir de l'adresse 
	// => cette procédure est asynchrone, c'est à dire qu'elle va exécuter la procédure passée en paramètre lorsqu'elle aura terminée
	ObjGeocoder.geocode({'address': sAdresse}, objFonction);

}
// Affiche un marqueur
function AfficheMarqueur(nLatitude, nLongitude, sIcone, bDragAndDropAutorise, sTexteInfoClic, nPrecision)
{
	
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	var objMarqueur;
	
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new google.maps.LatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
		
	// Gestion de l'icône du marqueur
	if(sIcone=="")
	{
		sIcone = null;
	}
	else{
		var tempIcon = {
			url:sIcone
		}
	}
	
	
	// Gestion du cercle de précision
	if (nPrecision != null)
	{
		var options = {
			map:gObjCarte,
			center:objCoordonnees,
			radius:eval(nPrecision),
			fillColor: "#0088FF",
			fillOpacity: 0.2,
			strokeColor: "#0088FF",
			strokeOpacity: 0.5,
			strokeWeight: 1,
			clickable: false
		}
		var cercle = new google.maps.Circle(options);
		circlesArray.push(cercle);
	} 
	
	// Création du marqueur
	// Si on ne spécifie pas cette option, elle ne pourra pas être activée après coup
	var options = {
		draggable:bDragAndDropAutorise,
		position:objCoordonnees,
		map:gObjCarte,
		icon:tempIcon
	};
	// Ajout du marqueur
	objMarqueur = new google.maps.Marker(options); 
	markersArray.push(objMarqueur);
	
	// Ajout de l'info bulle si besoin
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'click', function() {
			if (!this.getMap()._infoWindow) {
				this.getMap()._infoWindow = new google.maps.InfoWindow();
				}
				this.getMap()._infoWindow.close();
				this.getMap()._infoWindow.setContent(sTexteInfoClic);
				this.getMap()._infoWindow.open(this.getMap(), this);
			});
	}
	
	// On renvoie l'objet marqueur
	return objMarqueur;	
}

var markersArray = [];
var circlesArray = [];
var linesArray = [];
var markerClusterer = null;
var rectangleArray = [];
var polygoneArray = [];
var KMLArray = [];
var directionsArray = [];
// Centre la carte sur une position
function CentreCarte(nLatitude, nLongitude, nZoom)
{
	if (!gObjCarte)
		return ;
		
	// Si le zoom n'est pas spécifié, on le met à la valeur actuelle
	if (!nZoom)
		nZoom = gObjCarte.getZoom();

	// Bouge la carte pour positionner le centre aux coordonnées données
	gObjCarte.setCenter(new google.maps.LatLng(nLatitude, nLongitude), nZoom);

}
// Résumé : Permet de tracer un trajet sur une carte et de faire parcourir ce tracé par une flèche par exemple.
// Syntaxe :
// GoogleMapsSymbolsAnime (pts)
//
// Paramètres :
//	pts  : Tableau de chaines de caractères. Format ["lat;lng","lat;lng",....]
// Valeur de retour :
// 	Aucune
function AfficheTraceAnime(pts)
{
	
	PtsBounds = new google.maps.LatLngBounds(); 
	lineCoordinates = [];
	var point = new Array(pts.length);
	for (i=0;i<pts.length;i++){
		var ch = pts[i];
		var tot = ch.split(";");	
		var latLng = new google.maps.LatLng(tot[0],tot[1]);
		
		lineCoordinates.push(latLng);
		// mémorise la position : sert à centrer la carte ultérieurement sur l'ensemble du tracé
		PtsBounds.extend(latLng);
		}
	
	var lineSymbol = {
		path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
		scale: 3,
		strokeColor: '#393'
		};
	
	line = new google.maps.Polyline({
		path: lineCoordinates,
		icons: [{
			icon: lineSymbol,
			offset: '100%'
			}],
		map: gObjCarte
		});
	var count = 0;
	offsetId = window.setInterval(function() {
		count = (count + 1) % 200;
		
		var icons = line.get('icons');
		icons[0].offset = (count / 2) + '%';
		line.set('icons', icons);
		}, 20);
	linesArray.push(line);
	// création de la vue englobant le tracé
	gObjCarte.fitBounds(PtsBounds);
	
	// on renvoie l'objet polyline
	return line;
}

// Affiche un marqueur
function ouali_AfficheMarqueurSimple1(nLatitude, nLongitude, sIcone, bDragAndDropAutorise, sTexteInfoClic, nPrecision)

{
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	var objMarqueur;
	
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new google.maps.LatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
		
	// Gestion de l'icône du marqueur
	if(sIcone=="")
	{
		sIcone = null;
	}
	else{
		var tempIcon = {
			url:sIcone
		}
	}
	
	
	var options = {
	   draggable: true,
		position:objCoordonnees,
		map:gObjCarte,
		icon:tempIcon
		
	};
	// Ajout du marqueur
	objMarqueur = new google.maps.Marker(options); 
	markersArray.push(objMarqueur);
	
	
	
	
	
	
	
	
	objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/grn-pushpin.png");
		
	// Ajout de l'info bulle si besoin
//	if (sTexteInfoClic) {
//		google.maps.event.addListener(objMarqueur, 'click', function() {
//		changerTblePolygone1(sTexteInfoClic);
//		objMarqueur.setMap(null);
//					
//			});
//	}
//	if (sTexteInfoClic) {
//		google.maps.event.addListener(objMarqueur, 'dragend', function(event) {			
//					
//			changerTblePolygone(sTexteInfoClic,event.latLng.lat(),event.latLng.lng());		
//		});
//	}
//	// On renvoie l'objet marqueur
	return objMarqueur;	
}
// Affiche un marqueur
function ouali_AfficheMarqueurSimple2(nLatitude, nLongitude, sIcone, bDragAndDropAutorise, sTexteInfoClic, nPrecision)

{
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	var objMarqueur;
	
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new google.maps.LatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
		
	// Gestion de l'icône du marqueur
	if(sIcone=="")
	{
		sIcone = null;
	}
	else{
		var tempIcon = {
			url:sIcone
		}
	}
	
	
	var options = {
	   draggable: true,
		position:objCoordonnees,
		map:gObjCarte,
		icon:tempIcon
		
	};
	// Ajout du marqueur
	objMarqueur = new google.maps.Marker(options); 
	markersArray.push(objMarqueur);
	
	
	
	objMarqueur.setIcon("http://maps.google.com/mapfiles/ms/icons/grn-pushpin.png");
		
	// Ajout de l'info bulle si besoin
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'click', function() {
		changerTblePolygone1(sTexteInfoClic);
		objMarqueur.setMap(null);
					
			});
	}
	if (sTexteInfoClic) {
		google.maps.event.addListener(objMarqueur, 'dragend', function(event) {			
					
			changerTblePolygone(sTexteInfoClic,event.latLng.lat(),event.latLng.lng());		
		});
	}
	// On renvoie l'objet marqueur
	return objMarqueur;	
}
