// Procédures globales du projet
function AfficheInformation(sTexte, nLatitude, nLongitude, bHTML)
{
	
	if (!gObjCarte)
		return ;

	var objCoordonnees;
	// Si la longitude et la latitude sont renseignées, on crée une coordonnée avec ces données
	if (nLatitude && nLongitude)
	{
		objCoordonnees = new GLatLng(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 (bHTML)
		gObjCarte.openInfoWindowHtml(objCoordonnees,sTexte);
	else
		// On affiche une information aux coordonnées demandée
		gObjCarte.openInfoWindow(objCoordonnees,document.createTextNode(sTexte));

}
function AfficheMarqueur(nLatitude, nLongitude, bDragAndDropAutorise,sCodeRetour,sTitre)
{
	
	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 GLatLng(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;
	
	// Création du marqueur, par défaut on dit qu'il est déplaçable,
	// Si on ne spécifie pas cette option, elle ne pourra pas être activée après coup
	objMarqueur = new GMarker(objCoordonnees, {draggable:true,title:sTitre});
	
	// Si le Drag And Drop est autorisé, on le spécifie au marqueur
	if (bDragAndDropAutorise)
		objMarqueur.enableDragging();
	else
		objMarqueur.disableDragging();
	
	
	
	// Affiche l'objet marqueur
	gObjCarte.addOverlay(objMarqueur);
	
	// Evenement click
	if (sCodeRetour !="")
	{
	GEvent.addListener(objMarqueur, "click", function(){ 
	//objMarqueur.openInfoWindowHtml("coucou");
	window.location.href=sCodeRetour;
	}); ""
	}else
	{
		GEvent.addListener(objMarqueur, "dragend", function(){ 
			//objMarqueur.openInfoWindowHtml("coucou");
			gObjCarte.panTo(objMarqueur.getLatLng());
			}); ""	
	}
	// On renvoie l'objet marqueur
	return objMarqueur;	
}
function AjouteControles(bControleTypeCarte, bControleZoom, bControleEchelle, bMiniatureCarte, bControleCartePetit, bControleCarteGrand)
{
	
	if (!gObjCarte)
		return ;
		
	// pour tous les controles passés, on vérifie si on doit l'ajouter
	
	// Contrôle de type de carte (Plan, Satellite, Mixe)
	if (bControleTypeCarte)
	{
		if (!gnControleTypeCarte)
		{	
			gnControleTypeCarte = new GMapTypeControl();
			
			// Ajoute le controle
			gObjCarte.addControl(gnControleTypeCarte);
			
			// Ajoute le controle Relief
			gObjCarte.addMapType(G_PHYSICAL_MAP); 
			}
		}else{
		if (gnControleTypeCarte)
		{
			gObjCarte.removeControl(gnControleTypeCarte);
			gnControleTypeCarte = null;
			}
		
		}
	// Contrôle de type Zoom, (+ et - en haut à gauche de la carte)
	if (bControleZoom)
	{	
		if (!gnControleZoom)
		{	
			gnControleZoom = new GSmallZoomControl();
			gObjCarte.addControl(gnControleZoom);
			}
		}else{
		if (gnControleZoom)
		{
			gObjCarte.removeControl(gnControleZoom);
			gnControleZoom = null;
			}
		}
	
	// Contrôle qui donne l'échelle de la carte
	if (bControleEchelle)
	{
		if (!gnControleEchelle)
		{	
			gnControleEchelle = new GScaleControl();
			gObjCarte.addControl(gnControleEchelle);
		}
	}else{
		if (gnControleEchelle)
		{
			gObjCarte.removeControl(gnControleEchelle);
			gnControleEchelle = null;
		}
		
	}
	
	// Contrôle qui affiche la miniature de la carte en bas à droite
	if (bMiniatureCarte)
	{
		if (!gnMiniatureCarte)
		{	
			gnMiniatureCarte = new GOverviewMapControl();
			gObjCarte.addControl(gnMiniatureCarte);
			}
	}else{
		if (gnMiniatureCarte)
		{
			gObjCarte.removeControl(gnMiniatureCarte);
			gnMiniatureCarte = null;
		}
		
	}
	
	// Contrôle de la carte en petit (déplacement, zoom) en haut à gauche
	if (bControleCartePetit)
	{
		if (!gnControleCartePetit)
		{	
			gnControleCartePetit = new GSmallMapControl();
			gObjCarte.addControl(gnControleCartePetit);
			}
	}else{
		if (gnControleCartePetit)
		{
			gObjCarte.removeControl(gnControleCartePetit);
			gnControleCartePetit = null;
		}
	}
	
	// Contrôle de la carte en grand (déplacement, zoom, et potentiomètre pour le zoom) en haut à gauche 
	if (bControleCarteGrand)
	{
	
		if (!gnControleCarteGrand)
		{	
			gnControleCarteGrand = new GLargeMapControl();
			gObjCarte.addControl(gnControleCarteGrand);
		}
	}else{
		if (gnControleCarteGrand)
		{
			gObjCarte.removeControl(gnControleCarteGrand);
			gnControleCarteGrand = null;
		}
	}
}

function AjouteGestionClavier()
{
	if (!gObjCarte)
		return null;

	// Ajoute l'évenement qui gère les touches clavier sur la carte
	gnEvenementClavier = new GKeyboardHandler(gObjCarte);
	return gnEvenementClavier;
}

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 GLatLng(nLatitude, nLongitude), nZoom);

}
function CreeCarte(sNomChampCarte)
{
	//	 Création de la carte
	gObjCarte = new GMap2(document.getElementById(sNomChampCarte));
	
}

function EvenementClic(sNomFonction)
{

	if (!gObjCarte)
		return null;


	if (gnEvenementClic)
		return gnEvenementClic;
	
	
	var objFunction;
	// On a récupéré le nom de la fonction sous forme de chaîne, donc on récupère le pointeur sur cette fonction
	objFunction = eval(sNomFonction);
	
	// sauvegarde de l'évenement Clic (si on veut le supprimer)
	gnEvenementClic = GEvent.addListener(gObjCarte,"click", objFunction);
	
	// Ajoute l'évenement click
	return gnEvenementClic;
}

function EvenementSurvol(sNomFonction)
{
	
	if (!gObjCarte)
		return null;


	if (gnEvenementSurvol)
		return gnEvenementSurvol;

	// On a récupéré le nom de la fonction sous forme de chaîne, il faut récupérer le pointeur de la fonction
	var objFunction = eval(sNomFonction);
	
	// sauvegarde de l'évenement si on veut le supprimer
	gnEvenementSurvol = GEvent.addListener(gObjCarte,"mousemove", objFunction);
	// ensuite on ajoute l'évenement sur le mousemove
	return gnEvenementSurvol;
}

function PointVersLatitude(objPoint)
{

	// Si le point passé est invalide, on renvoie -1
	if (!objPoint)
		return -1;
	
	// Sinon, on renvoie la position y qui correspond à la latitude (y parce qu'on par de l'équateur et qu'on va vers les pôles donc verticalement)
	return objPoint.y;
	
}
function PointVersLongitude(objPoint)
{
	// Si le point passé est invalide, on renvoie -1
	if (!objPoint)
		return -1;
	
	// Sinon, on renvoie la position x qui correspond à la longitude
	return objPoint.x;
	
}
function ModifieZoom(nZoom)
{

	if (!gObjCarte)
		return ;

    // Si le zoom n'est pas défini, on sort
	if (!nZoom)
		return false;

	// Le zoom doit être une valeur entre 0 et 17
	nZoom = Math.max(nZoom, 0);
	nZoom = Math.min(nZoom,17);
	
	// Modifie le zoom de la carte
	gObjCarte.setZoom(nZoom);
		
}
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 GClientGeocoder();
	
	// 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.getLatLng(sAdresse, objFonction);

}
function SupprimeEvenementClic()
{
	if (gnEvenementClic)
	{
		GEvent.removeListener(gnEvenementClic);
		gnEvenementClic = null;
	}
}
function SupprimeEvenementSurvol()
{
	if (gnEvenementSurvol)
		GEvent.removeListener(gnEvenementSurvol);
		gnEvenementSurvol = null;
}
function SupprimeMarqueur(objMarker)
{
	if (!gObjCarte)
		return ;
		
	// Si le marqueur est spécifié, on supprime celui spécifié
	if (objMarker)
	{
		gObjCarte.removeOverlay(objMarker);
	}else{
	  	// Sinon, on les supprime tous
		gObjCarte.clearOverlays();
	}

}

function ZoomAvecRoulette(bZoomAvecRoulette)
{
	
	if (!gObjCarte)
		return ;

	// Si on doit activer le zoom sur la roulette de la souris
	if (bZoomAvecRoulette)
	{
		gObjCarte.enableScrollWheelZoom();
	}else{
		// Sinon on le désactive
		gObjCarte.disableScrollWheelZoom();
	}
}
function AfficheMarqueurActivite(nLatitude, nLongitude, bDragAndDropAutorise,sCodeRetour)
{
	
	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 GLatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	// constition de l'image:
	var IconDest= new GIcon();
	IconDest.image="../images/POINT_DESTI.gif" //"http://labs.google.com/ridefinder/images/mm_20_red.png";
	IconDest.shadow="http://labs.google.com/ridefinder/images/mm_20shadow.png";
	IconDest.iconSize=new GSize(15,21);
	IconDest.shadowSize=new GSize(22,20);
	IconDest.iconAnchor=new GPoint(7,21);
	IconDest.infoWidowAnchor=new GPoint(5,1);
	
	
	
	
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
	
	// Création du marqueur, par défaut on dit qu'il est déplaçable,
	// Si on ne spécifie pas cette option, elle ne pourra pas être activée après coup
		objMarqueur = new GMarker(objCoordonnees,{draggable: true,icon: IconDest});
		
		
//	objMarqueur.icon =IconDest;
	
	
	
	// Si le Drag And Drop est autorisé, on le spécifie au marqueur
	if (bDragAndDropAutorise)
		objMarqueur.enableDragging();
	else
		objMarqueur.disableDragging();
	
	
	
	// Affiche l'objet marqueur
	gObjCarte.addOverlay(objMarqueur);
	
//	// Evenement click
//	GEvent.addListener(objMarqueur, "click", function(){ 
//	//objMarqueur.openInfoWindowHtml("coucou");
//	window.location.href=sCodeRetour;
//	}); ""
	
	// On renvoie l'objet marqueur
	return objMarqueur;	
}
function AfficheMarqueurPays(nLatitude, nLongitude, bDragAndDropAutorise,sCodeRetour,sTitre)
{
	
	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 GLatLng(nLatitude, nLongitude)
	}else{
		// si la latitude et la longitude ne sont pas renseignées, on prend le centre de la carte
		objCoordonnees = gObjCarte.getCenter();
	}
	// constition de l'image:
	var IconPays= new GIcon();
	IconPays.image="../images/marqueurpays.png" //"http://labs.google.com/ridefinder/images/mm_20_red.png";
	IconPays.shadow="images/marqueurpays.png" //"http://labs.google.com/ridefinder/images/mm_20shadow.png";
	IconPays.iconSize=new GSize(15,15);
	IconPays.shadowSize=new GSize(15,15);
	IconPays.iconAnchor=new GPoint(8,8);
	IconPays.infoWidowAnchor=new GPoint(8,8);
	if (bDragAndDropAutorise == null)
		bDragAndDropAutorise = true;
	
	// Création du marqueur, par défaut on dit qu'il est déplaçable,
	// Si on ne spécifie pas cette option, elle ne pourra pas être activée après coup
	objMarqueur = new GMarker(objCoordonnees, {icon:IconPays,draggable:true,title:sTitre});
	
	// Si le Drag And Drop est autorisé, on le spécifie au marqueur
	if (bDragAndDropAutorise)
		objMarqueur.enableDragging();
	else
		objMarqueur.disableDragging();
	
	
	
	// Affiche l'objet marqueur
	gObjCarte.addOverlay(objMarqueur);
	
	// Evenement click
	GEvent.addListener(objMarqueur, "click", function(){ 
	//objMarqueur.openInfoWindowHtml("coucou");
	window.location.href=sCodeRetour;
	}); ""
	
	// On renvoie l'objet marqueur
	return objMarqueur;	
}
function LatitudeCarte()
{
	
	if (!gObjCarte)
		return ;


	var objCoordonnees;

		
	objCoordonnees = gObjCarte.getCenter();

	
	
	return objCoordonnees.y;	
}
function LongitudeCarte()
{
	
	if (!gObjCarte)
		return ;


	var objCoordonnees;

		
	objCoordonnees = gObjCarte.getCenter();

	
	
	return objCoordonnees.x;	
}
