var geocoder = new GClientGeocoder();							// instanciation du geocoder permettant à google de retrouver l'adresse sur la map
var map = "";
var tabPosEnligne = Array();

//<![CDATA[ 

/// fonction qui permet de charger un élément Google Map dans une <div> (void)
/// 				et de créer un marker avec 2 onglets et un icone 
/// ID = nom de l'id de la div dans laquel s'affichera la map (string) 
/// Lat = latitude du centre de la map (int)
/// Lng = longitude du centre de la map (int)
/// Zoom = niveau du zoom sur la map (int)
/// SizeControle = taille du controle de la map, qui prend la valeur "Small" pour petit et "Large" pour grand (string)
/// TypeControle = bouton de la barre d'outils de mode (satellite ou plan), qui prend la valeur "yes" pour l'activer (string)
/// OverView = aperçu de la map en petit, qui prend la valeur "yes" pour l'activer (string)
/// Point =
/// Adresse = adresse de la localisation de la map (string)
/// Icone = chemin d'accès à l'icone du point de la map correspondant à l'adresse (string)
/// Shadow = chemin d'accès à l'ombre du point de la map correspondant à l'adresse (string)
/// Draggable = pour que l'icone soit déplaçable sur la map, valeur 'true' pour oui (string) 
/// Onglet1 = message sur l'onglet 1 bulle correspondant au point de la map si pas d'onglet 2 la bulle ne présent pas d'onglet du tout (string)
/// Onglet2 = message sur l'onglet 2 bulle correspondant au point de la map (string)
/// Visible = pour que la bulle s'affiche dès le premier écran, valeur 'true' (string)

function ChargerMap(ID, Zoom, SizeControle, TypeControle, OverView, Point, Adresse, Icone, Shadow, Draggable, Onglet1, Onglet2, Visible, Zoomable){ 
	
	if (GBrowserIsCompatible()){ 										// si le navigateur est compatible avec Google Map
	 
		map = new GMap2(document.getElementById(ID));				// instanciation de la map;
		
		//	new GInfoWindowTab(TITRE de l'onglet (string), CONTENU de l'onglet (string))
		var infoTabs = (Onglet2!="") ? [new GInfoWindowTab("FICHE", Onglet1),new GInfoWindowTab("INFO+", Onglet2)] : [new GInfoWindowTab("", Onglet1)] ;

		var marker;
			
		if (Zoomable){
			//activation du zoom par double-click
			map.enableDoubleClickZoom();
			map.enablePinchToZoom() 
			
			switch(SizeControle){
			case "Small" :		map.addControl(new GSmallMapControl());		// pour une PETITE barre de controle 
								break;
	
			case "Large" :		map.addControl(new GLargeMapControl());		// pour une GRANDE barre de controle
								break;
	
			default :			break;										// pas de barre de controle	
	
			}
		}else{
			//desactivation du zoom par double-click
			map.disableDoubleClickZoom();
			map.disablePinchToZoom() 
		}
		
		//pour l'affichage d'une la barre de choix d'affichage en haut à droite
		if (TypeControle) map.addControl(new GMapTypeControl());
		
		//pour l'affichage d'un aperçu de la map en bas à droite
		if (OverView) map.addControl(new GOverviewMapControl());
		
		
		//Si on connait les coordonnées précises
		if (Point!=""){
			tPoints=Point.split(", ");
			Lat=parseFloat(tPoints[0]);
			Lng=parseFloat(tPoints[1]);
			// point = croisement entre latitude et longitude
			var point = new GLatLng(Lat, Lng);
			map.setCenter(point, Zoom); //centrer la map sur le point correspondant à l'adresse
			
			// si un chemin d'icone est précisé
			if (Icone!=""){
			
				var tinyIcon = new GIcon(G_DEFAULT_ICON);				// instanciation d'une variable icon G_DEFAULT_ICON pour prendre les valeurs des paramètres de l'icone par défaut
				tinyIcon.image = Icone; 								// chemin  de l'icone
				tinyIcon.iconSize = new GSize(45, 36); 					// taille de l'icone
				tinyIcon.iconAnchor = new GPoint(22, 34); 				// position de l'icone
				
				// si un chemin d'ombre est précisé
				if(Shadow!=""){											
					tinyIcon.shadow = Shadow; 							//chemin de l'ombre
					tinyIcon.shadowSize = new GSize(40, 36); 			// taille de l'ombre
				}else{
					tinyIcon.shadow = ""; 								// chemin de l'ombre
				}
				
				tinyIcon.infoWindowAnchor = new GPoint(20, 12);			//position de la bulle d'info par rapport au nouvel icone
				
				//position du marker modifiable sur la map
				if (Draggable){
					markerOptions = { draggable:true, icon:tinyIcon }; 
				}else{
					markerOptions = { icon:tinyIcon };
				}
				
			// sinon icone par défaut
			}else{
				
				//position du marker modifiable sur la map
				if (Draggable){
					markerOptions = { draggable:true }; 
				}else{
					markerOptions = { };
				}

			}

			marker = new GMarker(point,markerOptions); // instanciation d'un marker sur la map avec l'icone
			
			//position du marker modifiable sur la map on ajoute un ecouteur
			if (Draggable){
				GEvent.addListener(marker, "dragend", function(){//evènement = modification de la position du marker
					var ncoords = marker.getPoint();//coordonnées du marker
					Point=ncoords.lat()+", "+ ncoords.lng();
					zoomMap = map.getZoom();
					ChargerMap(ID, zoomMap, SizeControle, TypeControle, OverView, Point, Adresse, Icone, Shadow, Draggable, Onglet1, Onglet2, Visible, Zoomable);
					if(typeof(window['modifPosGMap']) != 'undefined') modifPosGMap(Point);
				}); 
				
			}

			if(Onglet1!=""){
				GEvent.addListener(marker, "click", function(){			//association de la bulle avec l'évènement click
					marker.openInfoWindowTabsHtml(infoTabs);			//affichage des informations des onglets
					});
			}
			
			//création d'une bulle d'infos correspondant au marker
			map.addOverlay(marker);
			
			//pour que la bulle s'affiche dès le chargement de la map
			if (Visible) marker.openInfoWindowTabsHtml(infoTabs);
		
		}else{
		//Si on ne connait pas le point mais l'adresse
			if(Adresse!=''){
			
				Adresse=Adresse+" dordogne FRANCE";

				//appel du geocoder avec l'adresse : "Adresse"
				geocoder.getLatLng(Adresse,function(point){
					//Si aucune coordonnées n'ont été trouvées
					
					//Nettoyage de l'adresse
					Adresse = Adresse.replace(' dordogne FRANCE','');
					if(!point){
						//On tronque l'adresse pour refaire un essai
						newAdresse = Adresse.substr(Adresse.indexOf(" ")+1);
						
						//On refait un essai
						ChargerMap(ID, Zoom, SizeControle, TypeControle, OverView, Point, newAdresse, Icone, Shadow, Draggable, Onglet1, Onglet2, Visible, Zoomable);
					
					}else{
						//Conversion en string
						Point = point.lat()+', '+point.lng();
						ChargerMap(ID, Zoom, SizeControle, TypeControle, OverView, Point, Adresse, Icone, Shadow, Draggable, Onglet1, Onglet2, Visible, Zoomable);
					}
				});
		
		//si ni point ni adresse on centre sur Périgueux
			}else{
			var point = new GLatLng(45.036798, 0.9218353);
			map.setCenter(point, Zoom)
			}
		}
	}
}

// ## tabMarkers est un tableau à 2 dimentions :
// ## chaque lique étant composé comme suit :
// -> Point : coordonnées du marker
// -> Adresse : l'adresse du marker
// -> Icone : image du marker
// -> Shadow : imahe de l'ombre du marker
// -> Onglet1 : Code HTML de l'onglet 1 de la Bulle
// -> Onglet2 : Code HTML de l'onglet 2 de la Bulle
// -> Visible : true si la bulle doit être affichée au chargement	

function ajoutMarkers(tabAllMarkers,inc){ 
	inc = inc || 0;
	//alert(inc);
	//Si pas à la fin
	if(tabAllMarkers.length>inc){
		
		tabMarker = tabAllMarkers[inc];
				
		if (GBrowserIsCompatible()){ 										// si le navigateur est compatible avec Google Map
			
			//Si on connait les coordonnées précises
			if (tabMarker['Point']!=""){
				
				if(!tabPosEnligne.in_array(tabMarker['Point'])){
					
					Point 	= tabMarker['Point'];
					Icone 	= tabMarker['Icone'];
					Shadow 	= tabMarker['Shadow'];
					Onglet1 = tabMarker['Onglet1'];
					Onglet2 = tabMarker['Onglet2'];
					Visible = tabMarker['Visible'];
					
					
					//alert('Affichage du Marker : '+Point);
					
					var marker;
					
					//	new GInfoWindowTab(TITRE de l'onglet (string), CONTENU de l'onglet (string))
					var infoTabs = (Onglet2!="") ? [new GInfoWindowTab("FICHE", Onglet1),new GInfoWindowTab("INFO+", Onglet2)] : [new GInfoWindowTab("", Onglet1)] ;
					
					tPoints=Point.split(", ");
					Lat=parseFloat(tPoints[0]);
					Lng=parseFloat(tPoints[1]);
	
					/*
					while(tabPosEnligne.in_array(Point)){
						Lat += 0.005;
						Lng += 0.005;
						Point = Lat+', '+Lng;
					}
					*/
					tabPosEnligne[tabPosEnligne.length] = Point;
					
					// point = croisement entre latitude et longitude
					var point = new GLatLng(Lat, Lng);
					
					// si un chemin d'icone est précisé
					if (Icone!=""){
					
						var tinyIcon = new GIcon(G_DEFAULT_ICON);				// instanciation d'une variable icon G_DEFAULT_ICON pour prendre les valeurs des paramètres de l'icone par défaut
						tinyIcon.image = Icone; 								// chemin  de l'icone
						tinyIcon.iconSize = new GSize(12, 20); 					// taille de l'icone
						tinyIcon.iconAnchor = new GPoint(6, 20);				// position de l'icone
						tinyIcon.shadowSize = new GSize(20, 20);
						
						
						// si un chemin d'ombre est précisé
						/*
						if(Shadow!=""){											
							tinyIcon.shadow = Shadow; 							//chemin de l'ombre
							tinyIcon.shadowSize = new GSize(40, 36); 			// taille de l'ombre
						}else{
							tinyIcon.shadow = ""; 								// chemin de l'ombre
						}
						*/
						
						tinyIcon.infoWindowAnchor = new GPoint(6, 6);			//position de la bulle d'info par rapport au nouvel icone
						
						//position du marker modifiable sur la map
						markerOptions = { icon:tinyIcon };
						
					// sinon icone par défaut
					}else{
						
						markerOptions = { };
						
					}
		
					marker = new GMarker(point,markerOptions); // instanciation d'un marker sur la map avec l'icone
		
					if(Onglet1!=""){
						GEvent.addListener(marker, "click", function(){			//association de la bulle avec l'évènement click
							marker.openInfoWindowTabsHtml(infoTabs);			//affichage des informations des onglets
							});
					}
					
					//création d'une bulle d'infos correspondant au marker
					map.addOverlay(marker);
					
					//pour que la bulle s'affiche dès le chargement de la map
					if (Visible) marker.openInfoWindowTabsHtml(infoTabs);
					
					inc++;
					ajoutMarkers(tabAllMarkers,inc);
				}
				
				//passage au suivant
				inc++;
				ajoutMarkers(tabAllMarkers,inc);
			}else{
			//Si on ne connait pas le point mais l'adresse
				Adresse = tabMarker['Adresse'];
				if(Adresse!=''){
					
					//alert('Recherche de l\'adresse '+Adresse);
					
					Adresse=Adresse+" dordogne FRANCE";
	
					//appel du geocoder avec l'adresse : "Adresse"
					geocoder.getLatLng(Adresse,function(point){
						//Si aucune coordonnées n'ont été trouvées
						
						//Nettoyage de l'adresse
						Adresse = Adresse.replace(' dordogne FRANCE','');
						if(!point){
							//alert('Coordonnées non trouvées !');
							//On tronque l'adresse pour refaire un essai
							newAdresse = Adresse.substr(Adresse.indexOf(" ")+1);
							//On refait un essai
							tabAllMarkers[inc]['Adresse'] = newAdresse;
							ajoutMarkers(tabAllMarkers,inc);						
						}else{
							//alert('Coordonnées trouvées : '+point);
							//Conversion en string
							Point = point.lat()+', '+point.lng();
							tabAllMarkers[inc]['Point'] = Point;
							ajoutMarkers(tabAllMarkers,inc);						
						}

					});
				}
			}
		}
	}
}

//]]> 
