﻿/*
http://www.google.com/apis/maps/signup.html
http://www.google.com/apis/maps/documentation/
*/
var map;
var marker = new Array();
var actURL = document.location.href;
var isOpera = (navigator.userAgent.indexOf('Opera') != -1)? true : false ;
var isIE = (document.all && !isOpera && navigator.platform == "Win32")? true : false ;
var isIE7 = (navigator.userAgent.indexOf('MSIE 7') != -1)? true : false ;

icon = "/image/googleMap/icon/iconS.png";
iconWidth = 10;
iconHeight = 10;

var mapId = "googleMap";

//zoomDefault = 5;
//centerPointDefault = new GLatLng(46.85918110234517, 2.3337364196777344);

// INIT GMAP
function loadMap(domObjId, id) {
	if (GBrowserIsCompatible()) {
		map = new GMap2($(mapId));
		gdir = new GDirections(map, $("directions"));
		GEvent.addListener(gdir, "load", onGDirectionsLoad);
		GEvent.addListener(gdir, "error", handleErrors);

		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GScaleControl());
		map.addControl(new GMapTypeControl());
		
		map.enableScrollWheelZoom();
		
		baseIcon = baseIconStart = baseIconEnd = new GIcon();
		baseIcon.image = icon;
		baseIcon.iconSize  = new GSize(iconWidth, iconHeight);
		baseIcon.shadowSize = new GSize(0, 0);
		baseIcon.iconAnchor = new GPoint(iconWidth/2, iconHeight/2);
		baseIcon.infoWindowAnchor = new GPoint(iconWidth/2, iconHeight/2);
		baseIcon.infoShadowAnchor = new GPoint(iconWidth/2, iconHeight/2);	

		geocoder = new GClientGeocoder();
		gKeyboardHandler = new GKeyboardHandler(map);
		map.setCenter(centerPointDefault, zoomDefault);
	}
}

function handleErrors(){
	alert("Il est impossible de trouver l'adresse de départ ou celle d'arrivé");
}

function onGDirectionsLoad(){ 
}

function createPoint(id,lng,lat,content) {
	var point = new GLatLng(lat,lng);
	var icon = new GIcon(baseIcon);
	marker[id] = new GMarker(point, icon);
	GEvent.addListener(marker[id], "click", function() {
		marker[id].openInfoWindowHtml(content);
	});
	map.addOverlay(marker[id]);
}

function openMAP(id, zoom) {
	if(!zoom) zoom = map.getZoom();
	var point = marker[id].getPoint();
	map.panTo(point);
	map.setCenter(point, zoom);
	//marker[id].openInfoWindowHtml();
}

function centerMapOnPoint(id) {
	var point = marker[id].getPoint();
	map.setCenter(point, zoomDefault);
}
/*
function getZoom(distance) {
	var zoom = map.getZoom();
	var scales = new Array(1,2,3.75,7.5,15,30,60,120,240,500,1000,2000,3750,7500,15000,30000,60000,120000);
	var maxPx = $(mapId).offsetHeight;
	if($(this.mapId).offsetWidth < maxPx) maxPx = $(mapId).offsetWidth;
	maxPx = maxPx - 100;//delta d'erreur dans le calcul du tableau "scale"
	var minDistance = 9999999;
	var minDistancetmp;
	for(var i=0;i<scales.length;i++) {
		minDistancetmp = distance-(maxPx*100/scales[i]);
		if(minDistancetmp > 0 && minDistancetmp < minDistance) {
			minDistance = minDistancetmp;
			zoom = i;
		}
	}
	if(zoom > 12) zoom = 12;
	return zoom;
}
*/
function getZoom(distance) {
	var zoom = map.getZoom();
	//var scales = new Array(5000,5000,3.75,7.5,15,30,60,120,240,500,1000,2000,3750,7500,15000,30000,60000,120000);
	//nb km pour 100px par niveau de zoom : ex pour le zoom 0 10638km = 100px
	var scales = new Array(10638,5319,2576,1331,644,322,161,124,40.32,20,10,5,2.52,1.31,0.6479,0.305,0.1575,0.0787);
	// 1- on calcule le nombre max de px que l'on possède = plus petit dimention entre la hauteur et la largeur de la div
	var maxPx = ($(mapId).offsetWidth < $(mapId).offsetHeight) ? $(mapId).offsetWidth : $(mapId).offsetHeight;
	var deltaMin = 9999999;
	for(var i=0;i<scales.length;i++) { //2- pour chaque niveau de zoom 
		var nbKmMaxPerScale = maxPx*scales[i]/100; //on calcule le nb de kmMax que l'on peut afficé pour le nombre de px max que l'on a a dispo
		var delta = nbKmMaxPerScale - distance; //on calcule le le delta
		if(delta > 0 && delta < deltaMin) {
			deltaMin = delta;
			zoom = i;
		}
	}
	return zoom;
}
function getMiddle(point1,point2) {
	var polygon = new GPolygon([new GLatLng(point1.lat(), point1.lng()), new GLatLng(point1.lat(), point2.lng()),  new GLatLng(point2.lat(), point2.lng()),  new GLatLng(point2.lat(), point1.lng()),  new GLatLng(point1.lat(), point1.lng())], "#f33f00", 5, 1, "#ff0000", 0.2);
	var bound = polygon.getBounds();
	return bound.getCenter() ;
}
window.onload = function() {
	if($('googleMap')) {
		loadMap();
		try {loadPoint();}
		catch(e) {}
	 }   
}
