﻿// 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;

// 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;
		}
		
		qsMapAddMarker(objLatLng, parrCoord[i].info, pobjIcon);

		// 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() 
{
	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);

			gobjMap.addControl(new GLargeMapControl());
			var mapControl = new GMapTypeControl();  
			gobjMap.addMapType(G_PHYSICAL_MAP); 
			gobjMap.addControl(mapControl); 
			$(document).unload(GUnload);
		}
	}
});
