﻿// 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 google.maps.LatLng(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 google.maps.Geocoder();
// taille de la carte
var gobjMapSize = null;

// type de map par défaut
// HYBRID  	This map type displays a transparent layer of major streets on satellite images.
// ROADMAP 	This map type displays a normal street map.
// SATELLITE 	This map type displays satellite images.
// TERRAIN 	This map type displays maps with physical features such as terrain and vegetation.
var gobjMapType = google.maps.MapTypeId.ROADMAP; 

// position du carré de point pour déterminer le zoom de la carte
var gobjLatLngSudWest = null;
var gobjLatLngNordEst = null;
var gblnFirstPoint = true;

// GIcon() devient MarkerImage()

var gobjBaseIcon = new google.maps.MarkerImage(
// url
gstrIcon, 
// This marker is 40 pixels wide by 40 pixels tall.
new google.maps.Size(40, 40), 
// The origin for this image is 20, 20.
new google.maps.Point(0, 0),
 // The anchor for this image is the base of the flagpole at 0,32.
new google.maps.Point(20, 20));

var gobjDPHMapIcon = gobjBaseIcon;

var gaobjInfowindow = [];


// initialisation d'un map google
$(document).ready(function () {
	qsInitGoogleMap();
});

var qsInitGoogleMap = function () {
	if ($(gstrDivMap).get(0)) {
		gobjMap = new google.maps.Map($(gstrDivMap).get(0), qsInitMapControl());
		google.maps.event.addListener(gobjMap, 'click', function () { qsMapClearInfoWindow(); });
	}


}

// cette fonction peut être subtituée pour pouvoir modifier l'affichage de la carte
var qsInitMapControl = function () {

	return {
		mapTypeId: gobjMapType,
		zoom: glngDefaultZoomLevel,
		center: gobjDefaultPoint,
		mapTypeControl: true,
		mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP },
		navigationControl: true,
		navigationControlOptions: { style: google.maps.NavigationControlStyle.ZOOM_PAN, position: google.maps.ControlPosition.TOP_RIGHT },
		scaleControl: true,
		scaleControlOptions: { position: google.maps.ControlPosition.BOTTOM }
	}


	/*
	bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20));
	topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
	topCenter = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(80,10));
	gobjMap.addControl(new GLargeMapControl3D(), topRight);
	gobjMap.addControl(new GScaleControl(), bottomRight);
	gobjMap.addControl(new GMapTypeControl(), topCenter);
	gobjMap.addMapType(G_PHYSICAL_MAP);
	gobjMap.removeMapType(G_HYBRID_MAP);
	gobjMap.removeMapType(G_NORMAL_MAP);
	gobjMap.setMapType(G_SATELLITE_MAP);
	gobjMap.enableScrollWheelZoom();
	*/

}

// place la position de la carte en fonction d'une adresse
function qsMapSetPositionByAddress(pstrAddress) {
	gobjGeocoder.geocode(
		{ address: pstrAddress },
		function (paobjGeocoderResult, pGeocoderStatus) {
			if (pGeocoderStatus != google.maps.GeocoderStatus.OK) {
				gobjMap.setCenter(gobjDefaultPoint);
				gobjMap.setZoom(glngDefaultZoomLevel);
			}
			else {
				pobjPoint = paobjGeocoderResult[0].geometry.location;
				gobjMap.setCenter(pobjPoint);
				gobjMap.setZoom(glngAutoZoomLevel);
			}
		}
	);
}

// place un point sur la carte en fonction d'une adresse
function qsMapAddMarkerByAddress(pstrAddress, pstrHtmlInfo, pobjIcon) {
	gobjGeocoder.geocode(
		{ address: pstrAddress },
		function (paobjGeocoderResult, pGeocoderStatus) {
			if (pGeocoderStatus == google.maps.GeocoderStatus.OK) {
				qsMapAddMarker(paobjGeocoderResult[0].geometry.location, 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) {

		MarkerOption = {
		//boolean If true, the marker receives mouse and touch events. Default value is true. 
		// cursor string Mouse cursor to show on hover 
			clickable : true,
		//boolean If true, the marker can be dragged. Default value is false. 
			draggable : false,
		//  boolean If true, the marker shadow will not be displayed.
			// flat : true,
		// string|MarkerImage Icon for the foreground 
			icon : pobjIcon, 
		// Map|StreetViewPanorama Map on which to display Marker. 
			map : gobjMap,
		// LatLng Marker position. Required. 
			position : pobjLatLng,
		// string|MarkerImage Shadow image 
			// shadow : null,
		//  MarkerShape Image map region definition used for drag/click. 
			// shape : null,
		// string Rollover text 
			title : '',
		// boolean If true, the marker is visible 
			visible : true //,
		// number All Markers are displayed on the map in order of their zIndex, with higher values displaying in front of Markers with lower values. By default, Markers are displayed according to their latitude, with Markers of lower latitudes appearing in front of Markers at higher latitudes. 
			// zIndex : 0
		}

		var objMarker = new google.maps.Marker(MarkerOption);

		if (pstrHtmlInfo) {

			var myOptions = {
				content: pstrHtmlInfo
			, disableAutoPan: false
			, maxWidth: 0
			, pixelOffset: new google.maps.Size(-130, 0)
			, zIndex: null
			, infoBoxClearance: new google.maps.Size(1, 1)
			, isHidden: false
			, pane: "floatPane"
			, enableEventPropagation: false
			};

			//var ib = new InfoBox(myOptions);
			//gaobjInfowindow.push(ib);


			var infowindow = new google.maps.InfoWindow({
			    content: pstrHtmlInfo
			});
			gaobjInfowindow.push(infowindow);


			google.maps.event.addListener(objMarker, 'mouseover', function () {
				qsMapClearInfoWindow();
				//ib.open(gobjMap, objMarker);
				infowindow.open(gobjMap, objMarker);

			});
		}

	}		
}

// place plusieurs point sur une carte
// parrCoord = [{latitude: , longitude:, info: },{...}]
function qsMapArrayMarker(parrCoord, pobjIcon) {

	lngZoomLevel = 10;

	for (i in parrCoord) {

		objLatLng = new google.maps.LatLng(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 google.maps.LatLng(parrCoord[i].latitude, parrCoord[i].longitude);
			gobjLatLngNordEst = new google.maps.LatLng(parrCoord[i].latitude, parrCoord[i].longitude);
		}
		else {
			if (gobjLatLngSudWest.lat() > objLatLng.lat())
				gobjLatLngSudWest = new google.maps.LatLng(objLatLng.lat(), gobjLatLngSudWest.lng());
			if (gobjLatLngSudWest.lng() > objLatLng.lng())
				gobjLatLngSudWest = new google.maps.LatLng(gobjLatLngSudWest.lat(), objLatLng.lng());

			if (gobjLatLngNordEst.lat() < objLatLng.lat())
				gobjLatLngNordEst = new google.maps.LatLng(objLatLng.lat(), gobjLatLngNordEst.lng());
			if (gobjLatLngNordEst.lng() < objLatLng.lng())
				gobjLatLngNordEst = new google.maps.LatLng(gobjLatLngNordEst.lat(), objLatLng.lng());
		}
	}
	
	if (parrCoord.length > 0) {
		if (gblnFirstPoint && parrCoord.length == 1) {
			gblnFirstPoint = false;
			gobjMap.setCenter(gobjLatLngSudWest);
			gobjMap.setZoom(lngZoomLevel);

		}
		else {
			gblnFirstPoint = false;
			if (gobjLatLngSudWest != null && gobjLatLngNordEst != null) {

				objLatLngCenter = new google.maps.LatLng(gobjLatLngSudWest.lat() + ((gobjLatLngNordEst.lat() + 90) - (gobjLatLngSudWest.lat() + 90)) / 2, gobjLatLngSudWest.lng() + ((gobjLatLngNordEst.lng() + 180) - (gobjLatLngSudWest.lng() + 180)) / 2);
				objBounds = new google.maps.LatLngBounds(gobjLatLngSudWest, gobjLatLngNordEst);
				gobjMap.fitBounds(objBounds);
			}
		}
	}
	
}

// Supprime tous les marker de la carte
function qsMapClearInfoWindow() {
	for (intI = 0; intI < gaobjInfowindow.length; intI++) {
		gaobjInfowindow[intI].close();
	}
//	gaobjInfowindow = [];
}

