/**
 * Class permettant de faciliter la gestion de l'api Google Map
 * @author attr-action.com
 */

var GoogleMap = {
	elementHTML: "",
	contenuMarker: "",
	zoom: 15,
	marker: false,
	mapType: G_HYBRID_MAP,
	tabAdresse : "",
	tabDescriptif: "",
	nbAdresse: 0,
	
	setElementHTML: function(element) {
		this.elementHTML = document.getElementById(element);
	},
	
	setContenuMarker: function(contenuMarker) {
		this.contenuMarker = contenuMarker;
	},
	
	setZoom: function(zoom) {
		this.zoom = zoom;
	},
	
	setMarker: function(marker) {
		this.marker = marker;
	},
	
	setMapType: function(mapType) {
		this.mapType = mapType;
	},
	
	setTabAdresse: function(tabAdresse) {
		this.tabAdresse = tabAdresse;
	},
	
	setTabDescriptif: function(tabDescriptif) {
		this.tabDescriptif = tabDescriptif;
	},
	
	setNbAdresse: function(nbAdresse) {
		this.nbAdresse = nbAdresse;
	},
	
	afficherCarteParGPS: function(latitude, longitude) {
		document.body.onunload = function() { GUnload(); }
		
		if (this.elementHTML === null) {
			alert("Conteneur HTML non présent");
			return;
		}
		
		if (GBrowserIsCompatible() === false) {
			alert("Votre navigateur n'est pas compatible");
			return;
		}
		
		var carte = new GMap2(this.elementHTML);
		
		carte.setCenter(new GLatLng(latitude, longitude), this.zoom);
		
		carte.addControl(new GLargeMapControl());
		carte.addControl(new GMapTypeControl());
		carte.setMapType(this.mapType);
		
		if (this.marker) {
			var markerPt = new GMarker(new GLatLng(latitude, longitude));
			carte.addOverlay(markerPt);
			GEvent.addListener(markerPt, "click", function() {
					markerPt.openInfoWindowHtml(GoogleMap.contenuMarker);
				}
			);
		}
	},
	
	afficherCarteParAdresse: function(adresse) {
		document.body.onunload = function() { GUnload(); }
		
		if (this.elementHTML === null) {
			alert("Conteneur HTML non présent");
			return;
		}
		
		if (GBrowserIsCompatible() === false) {
			alert("Votre navigateur n'est pas compatible");
			return;
		}
		
		
		
		var geocoder = new GClientGeocoder();
				
		geocoder.getLatLng(
			adresse,
			function(point) {
				if (point) {
					
					/* on cree la carte et on la centre sur l'adresse voulue*/
					var carte = new GMap2(GoogleMap.elementHTML);
					
					carte.setCenter(point, GoogleMap.zoom);
					
					carte.addControl(new GLargeMapControl());
					carte.addControl(new GMapTypeControl());
					carte.setMapType(GoogleMap.mapType);
		
					
					/*
					if (GoogleMap.marker) {
						var markerPt = new GMarker(point);
						carte.addOverlay(markerPt);
						GEvent.addListener(markerPt, "click", function() {
							markerPt.openInfoWindowHtml(GoogleMap.contenuMarker);
						});
					}
					*/
					if(GoogleMap.nbAdresse==0)
					{
						if (GoogleMap.marker) {
							var markerPt = new GMarker(point);
							carte.addOverlay(markerPt);
							GEvent.addListener(markerPt, "click", function() {
								markerPt.openInfoWindowHtml(GoogleMap.contenuMarker);
							});
						}
					}
					else
					{
						function createMarkers(i) { 
							geocoder_marker.getLatLng(
								GoogleMap.tabAdresse[i],
								function(point) {
									if (point) {
										if (GoogleMap.marker) {
											var markerPt = new GMarker(point);
											carte.addOverlay(markerPt);
											GEvent.addListener(markerPt, "click", function() {
												markerPt.openInfoWindowHtml(GoogleMap.tabDescriptif[i]);
											});
										}
									}
									else  {
										alert(addresse + " : lieu géographique non trouvé");
									}
								}
							);
						}
							
						for(i=0;i<GoogleMap.nbAdresse;i++)
						{
							/*on ajoute les points sur la carte*/
							var geocoder_marker = new GClientGeocoder();
							createMarkers(i);
						}
					}
				
				}
				else  {
					alert(addresse + " : lieu géographique non trouvé");
				}
			}
		);
		
		
	}
}
