// Procedures globales du projet
// Résumé : Création de la carte google map
// Syntaxe :
//CreeCarte (<sNomChampCarte>)
//
// Paramètres :
// 	sNomChampCarte : Nom du champ HTML (<nomChamp>..alias ou id défini dans DIV)
//	nlat  : latitude du centre de la carte
//	nlong : longitude du centre de la carte
// Valeur de retour :
// 	Aucune
//

function GoogleMapsCreeCarte(sNomChampCarte,nlat,nlong)
{
	if (nlat==0){
	    nlat = 48.856558;
	};
	if (nlong==0){
		nlong = 2.350966;
	};
	
	//	 Création de la carte
	var latlng = new google.maps.LatLng(nlat, nlong);
	var myOptions = {
		mapTypeControl: false,
		zoom: 5, 
		center: latlng, 
//		mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
		navigationControl: false,
		mapTypeId: google.maps.MapTypeId.ROADMAP
		}
	// création de la carte
	gObjCarte = new google.maps.Map(document.getElementById(sNomChampCarte),myOptions);
}
function GoogleMapsEvenementClic(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);
	// Ajoute l'évenement click
	gnEvenementClic = google.maps.event.addListener(gObjCarte, 'click', objFunction)
	
	
	return gnEvenementClic;
}

function GoogleMapsModifieTypeCarte(nTypeCarte)
{
	switch (nTypeCarte) {
		case 1 :
			gObjCarte.setMapTypeId(google.maps.MapTypeId.HYBRID);
			break;
		case 2 :
			gObjCarte.setMapTypeId(google.maps.MapTypeId.ROADMAP);
			break;
		case 3 :
			gObjCarte.setMapTypeId(google.maps.MapTypeId.SATELLITE);
			break;
		case 4 :
			gObjCarte.setMapTypeId(google.maps.MapTypeId.TERRAIN);
			break;
	}
}

function GoogleMapsDessineTrait(nlat1,nlong1,nlat2,nlong2)
{
	var flightPlanCoordinates = [
	new google.maps.LatLng(nlat1, nlong1),
	new google.maps.LatLng(nlat2, nlong2)
	];
	var flightPath = new google.maps.Polyline({
		path: flightPlanCoordinates,
		strokeColor: "#FF0000",
		strokeOpacity: 1.0,
		strokeWeight: 2
	});
	
	flightPath.setMap(gObjCarte);
}

function GoogleMapsTrajet(pts)
{
var flightPlanCoordinates= new Array(pts.length);
for (i=0;i<pts.length;i++){
	var ch = pts[i];
	var tot = ch.split(";");	
	var pt = new google.maps.LatLng(tot[0],tot[1]);
	flightPlanCoordinates[i]=pt;
}

var flightPath = new google.maps.Polyline({
		path: flightPlanCoordinates,
		strokeColor: "#FF0000",
		strokeOpacity: 1.0,
		strokeWeight: 2
	});
	
	
	var bounds = new google.maps.LatLngBounds();
	for (i=0;i<flightPlanCoordinates.length;i++) {
		bounds.extend(flightPlanCoordinates[i]);
		}
	
	flightPath.setMap(gObjCarte);
	gObjCarte.fitBounds(bounds);
	gObjCarte.setCenter(bounds.getCenter());
}

function GoogleMapsDessineKML(sURL)
{
	var ctaLayer = new google.maps.KmlLayer(sURL);
	ctaLayer.setMap(gObjCarte);
}

function GoogleMapsCreerMarqueur(lat, long,titre,TxtMess,bdeplacable)
{
	var optionsMarqueur = {
		position: new google.maps.LatLng(lat,long),
		map: gObjCarte,
		title: titre,
		contenuInfoBulle: TxtMess,
		draggable:bdeplacable
		}
	var marqueur = new google.maps.Marker(optionsMarqueur);
	var infobulle = new google.maps.InfoWindow();
	google.maps.event.addListener(marqueur, "click", function() {
		infobulle.setContent(this.contenuInfoBulle);
		infobulle.open(gObjCarte,this);
		});

}

function GoogleMapsCentrerCarte(nlat,nlong)
{
	var latlng = new google.maps.LatLng(nlat, nlong);
	gObjCarte.setCenter(latlng);
}

function GoogleMapsRechercheCoordonneesDepuisAdresse(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);
	//alert(objFonction);
	var geo = new google.maps.Geocoder();
	geo.geocode({'address': sAdresse},objFonction);
	
}

function GoogleMapsEvenementSurvol(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);
	
	gnEvenementSurvol = google.maps.event.addListener(gObjCarte,'mousemove',objFunction);
	
	return gnEvenementSurvol;
}

function GoogleMapsSupprimerEvenementSurvol()
{
	if (gnEvenementSurvol)
	google.maps.event.removeListener(gnEvenementSurvol);
	gnEvenementSurvol = null;
}

function GoogleMapsLatLngVersLatitude(objLatLng)
{
	// Si le point passé est invalide, on renvoie -1
	if (!objLatLng)
		return -1;
		
	return objLatLng.lat()
}

function GoogleMapsLatLngVersLongitude(objLatLng)
{
	// Si le point passé est invalide, on renvoie -1
	if (!objLatLng)
	return -1;
	
	return objLatLng.lng()
}

function GoogleMapsCalculItineraire(addressStart,adressEnd)
{
	var directions = new google.maps.DirectionsRenderer();
	var directionsService = new google.maps.DirectionsService();
	var request = {
		origin:addressStart, 
		destination:adressEnd,
		travelMode: google.maps.DirectionsTravelMode.DRIVING
		};
	directionsService.route(request, function(response, status) {
		if (status == google.maps.DirectionsStatus.OK) {
			directions.setDirections(response);
			}
		});
	directions.setMap(gObjCarte);
}

function GoogleMapsSupprimeEvenementClic()
{
	if (gnEvenementClic){
	google.maps.event.removeListener(gnEvenementClic);
	gnEvenementClic = null;
	}
}

function GoogleMapsGestionBarreOutils(aucun, miniZoom,ZoomPan,ZoomControl)
{
	if (aucun){
		
		gObjCarte.setOptions({
			navigationControl: false,
			streetViewControl:false
			});
			}
	if (miniZoom){
	
		gObjCarte.setOptions({
			navigationControl: true,
			navigationControlOptions: {
			style: google.maps.NavigationControlStyle.SMALL
			},
			streetViewControl:true
		});
		}
	if (ZoomPan){
			
			gObjCarte.setOptions({
				navigationControl: true,
				navigationControlOptions: {
					style: google.maps.NavigationControlStyle.ZOOM_PAN
					},
				streetViewControl:true
				});
			}
			
	if (ZoomControl){
		
		gObjCarte.setOptions({
			navigationControl: true,
			navigationControlOptions: {
				style: google.maps.NavigationControlStyle.DEFAULT
				},
				streetViewControl:true
			});
		}		
}

function GoogleMapsTypeCartes(bType)
{
	if (bType){
		gObjCarte.setOptions({
			mapTypeControl: true,
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}
		});
	}else{
		gObjCarte.setOptions({
			mapTypeControl: true,
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR}
			});
	}
	
}

function GoogleMapsEchelle(bEch)
{
	if (bEch){
		gObjCarte.setOptions({
			scaleControl: true
			});
	}else{
		gObjCarte.setOptions({
			scaleControl: false
			});
	}
}


