﻿// objet map
var gobjMap = null;
// Css 
var gstrCSSID = "map-windows";
// chemin du fichier 
var gstrIcon = "/data/dataimages/Upload/MarkerCustom.png";
// point par défaut si aucun point n'est retrouvé
var gobjDefaultPoint = new GLatLng(46.80, 8.32);
// valeur de zoom par défaut
var glngDefaultZoomLevel = 7;
// valeur de zoom lorsqu'une adresse est recherché automatiquement
var glngAutoZoomLevel = 10;
// id du div conteneur de carte
var gstrDivMap = "#qsMap";
// objet de résolution de position selon adresse...
var gobjGeocoder = new GClientGeocoder();
// taille de la carte
var gobjMapSize = null;
// type de map par défaut
// G_NORMAL_MAP, G_SATELLITE_MAP, G_AERIAL_MAP , G_PHYSICAL_MAP, G_MOON_VISIBLE_MAP
var gobjMapType = G_NORMAL_MAP; 

// position du carré de point pour déterminer le zoom de la carte
var gobjLatLngSudWest = null;
var gobjLatLngNordEst = null;
var gblnFirstPoint = true;

var gobjBaseIcon = new GIcon();
gobjBaseIcon.image = gstrIcon;
gobjBaseIcon.iconSize = new GSize(40, 40);
gobjBaseIcon.iconAnchor = new GPoint(20, 20);
gobjBaseIcon.infoWindowAnchor = new GPoint(20, 20);

var gobjDPHMapIcon = gobjBaseIcon;


// place la position de la carte en fonction d'une adresse
function qsMapSetPositionByAddress(pstrAddress) {
	gobjGeocoder.getLatLng(
		pstrAddress,
		function(pobjPoint) 
		{
			if (!pobjPoint) 
			{
				gobjMap.setCenter(gobjDefaultPoint, glngDefaultZoomLevel);
			} 
			else 
			{
				gobjMap.setCenter(pobjPoint, glngAutoZoomLevel);
			}
		}
	);
}

// place un point sur la carte en fonction d'une adresse
function qsMapAddMarkerByAddress(pstrAddress, pstrHtmlInfo, pobjIcon) {
	gobjGeocoder.getLatLng(
		pstrAddress,
		function(pobjLatLng) 
		{
			// affiche une fenêtre d'information
			if(pobjLatLng)
			{
				qsMapAddMarker(pobjLatLng, pstrHtmlInfo, pobjIcon)
			}		
		}
	);
}

// place un point sur la carte en fonction d'une coordonnée latitude longitude
function qsMapAddMarker(pobjLatLng, pstrHtmlInfo, pobjIcon) {
	if (!pobjIcon)
		pobjIcon = gobjBaseIcon;
		
	// affiche une fenêtre d'information
	if(pobjLatLng)
	{
		var objMarker = new GMarker(pobjLatLng, pobjIcon);
		if(pstrHtmlInfo)
		{
			GEvent.addListener(objMarker, "mouseover", function() {   
				objMarker.openExtInfoWindow(
					gobjMap, 
					gstrCSSID,
					pstrHtmlInfo,
					{beakOffset: 3}
				); 
			});
		}
		gobjMap.addOverlay(objMarker);
	}		
}

// place plusieurs point sur une carte
// parrCoord = [{latitude: , longitude:, info: },{...}]
function qsMapArrayMarker(parrCoord, pobjIcon) {

	lngZoomLevel = 10;

	for (i in parrCoord) {

		objLatLng = new GLatLng(parrCoord[i].latitude, parrCoord[i].longitude);
		if (gblnFirstPoint && typeof (parrCoord[0].zoomlevel) != 'undefined') {
			lngZoomLevel = parrCoord[i].zoomlevel;
		}

		var objIcon;
		if (typeof (parrCoord[i].gicon) != 'undefined')
			objIcon = parrCoord[i].gicon;
		else
			objIcon = pobjIcon;

		qsMapAddMarker(objLatLng, parrCoord[i].info, objIcon);

		// prépare un carré de la zone d'affichage des points
		if (gobjLatLngSudWest == null && gobjLatLngNordEst == null) {
			gobjLatLngSudWest = new GLatLng(parrCoord[i].latitude, parrCoord[i].longitude);
			gobjLatLngNordEst = new GLatLng(parrCoord[i].latitude, parrCoord[i].longitude);
		}
		else {
			if (gobjLatLngSudWest.lat() > objLatLng.lat())
				gobjLatLngSudWest = new GLatLng(objLatLng.lat(), gobjLatLngSudWest.lng());
			if (gobjLatLngSudWest.lng() > objLatLng.lng())
				gobjLatLngSudWest = new GLatLng(gobjLatLngSudWest.lat(), objLatLng.lng());

			if (gobjLatLngNordEst.lat() < objLatLng.lat())
				gobjLatLngNordEst = new GLatLng(objLatLng.lat(), gobjLatLngNordEst.lng());
			if (gobjLatLngNordEst.lng() < objLatLng.lng())
				gobjLatLngNordEst = new GLatLng(gobjLatLngNordEst.lat(), objLatLng.lng());
		}
	}
	
	if (parrCoord.length > 0) {
		if (gblnFirstPoint && parrCoord.length == 1) {
			gblnFirstPoint = false;
			gobjMap.setCenter(gobjLatLngSudWest, lngZoomLevel);
		}
		else {
			gblnFirstPoint = false;
			if (gobjLatLngSudWest != null && gobjLatLngNordEst != null) {

				objLatLngCenter = new GLatLng(gobjLatLngSudWest.lat() + ((gobjLatLngNordEst.lat() + 90) - (gobjLatLngSudWest.lat() + 90)) / 2, gobjLatLngSudWest.lng() + ((gobjLatLngNordEst.lng() + 180) - (gobjLatLngSudWest.lng() + 180)) / 2);
				objBounds = new GLatLngBounds(gobjLatLngSudWest, gobjLatLngNordEst);
				lngZoomLevel = gobjMap.getBoundsZoomLevel(objBounds);
				gobjMap.setCenter(objLatLngCenter, lngZoomLevel);
			}
		}
	}
	
}

// Supprime tous les marker de la carte
function qsMapClearMarker() {
	gobjMap.clearOverlays();
}

// initialisation d'un map google
$(document).ready(function() {
	qsInitGoogleMap();
});

var qsInitGoogleMap = function() {
	if (GBrowserIsCompatible()) {
		if ($(gstrDivMap).get(0)) {
			if (gobjMapSize != null) {
				objMapOption = { size: gobjMapSize };
				gobjMap = new GMap2($(gstrDivMap).get(0), objMapOption);
			}
			else
				gobjMap = new GMap2($(gstrDivMap).get(0));
			// gobjMap.setCenter(gobjDefaultPoint, glngDefaultZoomLevel);

			qsInitMapControl();

			$(document).unload(GUnload);
		}
	}
}

// cette fonction peut être subtituée pour pouvoir modifier l'affichage de la carte
var qsInitMapControl = function() {

	// bouton de switch des types de carte	
	gobjMap.addControl(new GMapTypeControl());

	gobjMap.addMapType(G_PHYSICAL_MAP);
	gobjMap.setMapType(gobjMapType);

	// bouton de déplacement sur la carte
	gobjMap.addControl(new GLargeMapControl());
}

