//fonction de gestion des cookies en js
function getCookieVal(offset)
{
	var endstr=document.cookie.indexOf (";", offset);
	if (endstr==-1)
      		endstr=document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}
function getCookie (name)
{
	var arg=name+"=";
	var alen=arg.length;
	var clen=document.cookie.length;
	var i=0;
	while (i<clen) {
		var j=i+alen;
		if (document.cookie.substring(i, j)==arg)
                        return getCookieVal (j);
                i=document.cookie.indexOf(" ",i)+1;
                        if (i==0) break;}
	return null;
}
function setCookie (name, value)
{
	var today=new Date();
	var argv=setCookie.arguments;
	var argc=setCookie.arguments.length;
	var expires=(argc > 2) ? new Date(today.getTime()+argv[2]) : null;
	var path=(argc > 3) ? argv[3] : null;
	var domain=(argc > 4) ? argv[4] : null;
	var secure=(argc > 5) ? argv[5] : false;
	document.cookie=name+"="+escape(value)+
		((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
		((path==null) ? "" : ("; path="+path))+
		((domain==null) ? "" : ("; domain="+domain))+
		((secure==true) ? "; secure" : "");
}

// fonction qui calcule la distance a vol d'oiseau entre 2 points definis par les couples lat1/lng1 et lat2/lng2
function distance(lat1,lon1,lat2,lon2) {
	var R = 6371; 
	var dLat = (lat2-lat1) * Math.PI / 180;
	var dLon = (lon2-lon1) * Math.PI / 180;
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
			Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 ) *
			Math.sin(dLon/2) * Math.sin(dLon/2);
	
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
	var d = R * c;
	
	if (d>1) return Math.round(d*1000);
	
	return d;
}

//fonction qui affiche une carte centree sur la france au premier chargement de la page
function setBegin() {
	var myLatlng = new google.maps.LatLng(48.8580528,2.2942889);
	var pos1 = new google.maps.LatLng(50.958029,1.852412);
	var pos2 = new google.maps.LatLng(45.892351,3.113367);
	var marker = new google.maps.Marker({
		position: myLatlng,
		map: map,
		icon: '/images/gmap/pictoUser.png',
		animation: google.maps.Animation.DROP
	});
	uPos = myLatlng;
    bounds.extend(myLatlng);
    bounds.extend(pos1);
    bounds.extend(pos2);
    map.fitBounds(bounds);

}

// fonction qui ajoute un marqueur a l'adresse geocode par google
function setSoloUser() {
        
	var geocoder = new google.maps.Geocoder();
	geocoder.geocode( { 'address': document.getElementById("src").value}, function(results, status) {
	
        if (status == google.maps.GeocoderStatus.OK) {
               var marker = new google.maps.Marker({
			position: results[0].geometry.location,
			map: map,
			icon: '/images/pictoUser.png',
			animation: google.maps.Animation.DROP
		});
	uPos = results[0].geometry.location;
        bounds.extend(uPos);
       	map.fitBounds(bounds);
	}});
}

// fonction qui ajoute un marqueur geocode par google, cree le direction renderer avec le marker le plus pres a vol d'oiseau ( grace a la fonction distance() )
function setUserMarker(myPoints) {
	var geocoder = new google.maps.Geocoder();
	geocoder.geocode( { 'address': document.getElementById("src").value}, function(results, status) {
	if (status == google.maps.GeocoderStatus.OK) {
		document.getElementById("bouton_show_slide_panel").style.visibility = '';
		var marker = new google.maps.Marker({
			position: results[0].geometry.location,
			map: map,
			icon: '/images/gmap/pictoUser.png',
			animation: google.maps.Animation.DROP
		});
	uPos = results[0].geometry.location;
	var cpt = 0;
	if (myPoints.length > 1) {
		var mDist;
		var mDist2 = distance(results[0].geometry.location.lat(),results[0].geometry.location.lng(),myPoints[0][2],myPoints[0][3]);;
		for (var j = 0;j < myPoints.length;j++) {
			mDist = distance(results[0].geometry.location.lat(),results[0].geometry.location.lng(),myPoints[j][2],myPoints[j][3]);
			if (mDist < mDist2) {
				mDist2 = mDist;
				cpt = j;
			}
		}
	}
	setCookie("spoint", cpt);
	for(var i = 0; i < myPoints.length; i++){
		if (i == cpt) {
			var mOpt = {
				clickable: false,
				visible: false,
				map: map
				};
			directionsDisplay = new google.maps.DirectionsRenderer({
				map: map,
				markerOptions: mOpt,
				preserveViewport: true
			});
			directionsDisplay.setPanel(document.getElementById("directions_panel"));
			var request = {
				origin:uPos,
				destination:myPoints[i][0],
				unitSystem:google.maps.DirectionsUnitSystem.METRIC,
				travelMode: google.maps.DirectionsTravelMode.DRIVING
				};
				directionsService.route(request, function(response, status) {
				if (status == google.maps.DirectionsStatus.OK) {
					directionsDisplay.setDirections(response);
					//document.getElementById('tdistance').innerHTML += 
					//	response.routes[0].legs[0].distance.value / 1000;
					}
				});			
			}
		bounds.extend(myPoints[i][0]);
		}
		bounds.extend(uPos);
		map.fitBounds(bounds);
	}
	else {
		setBegin();
		alert("Le geocodage de votre position actuelle n\'a pu etre effectue.\nVeuillez saisir une adresse / code postal / ville correcte");
	}});
}

// fonction qui ajoute les marqueurs contenu dans la variable Latlng ( defini dans getInfoBoxContent.php ) et affiche l'infowindow par default si isOpen == true
function setMarkers(Latlng, isOpen, mode) {
	var img = '/images/gmap/pictoMap.png';
	if(mode == 'light') {
	    var marker = new google.maps.Marker({
	        position: Latlng[0],
	        map: map,
			icon: img,
			clickable: false,
			animation: google.maps.Animation.DROP
	    });
	}
	else if(mode == 'normal' || mode == 'ignore') {
		var marker = new google.maps.Marker({
	        position: Latlng[0],
	        map: map,
			icon: img,
			animation: google.maps.Animation.DROP
	    });
	}
	var boxText = document.createElement("div");
	boxText.style.cssText = "height: 100%; border: 0px none; background: url('/images/gmap/GoogleMapBulle.png') no-repeat;";
	boxText.innerHTML = Latlng[1];
	var myOptions = {
		content: boxText,
		disableAutoPan: false,
		maxWidth: 0,
		pixelOffset: new google.maps.Size(-85, -180),			
		zIndex: null,
		boxStyle: { 
			width: "320px",
			height: "165px",
			display: "block"
		 },
		closeBoxMargin: "11px 42px 2px 2px",
		closeBoxURL: '/images/gmap/googleInfowindowClose.png',
		infoBoxClearance: new google.maps.Size(1, 1),
		isHidden: false,
		pane: "floatPane",
		enableEventPropagation: false
		};
	var pharm = new InfoBox(myOptions);
	if (isOpen == true) {
		pharm.open(map, marker); 
		}
    google.maps.event.addListener(marker, "click", function() {
	pharm.open(map, marker);
    });
}

// fonction qui detecte le type de navigateur utilise et ajuste la map en fonction
function detectBrowser() {
	var useragent = navigator.userAgent;
	var mapdiv = document.getElementById("gmap");
 
	if (useragent.indexOf('iPhone') != -1 || useragent.indexOf('Android') != -1) {				
	  mapdiv.style.width = '100%';
	  mapdiv.style.height = '100%';
	  myOptions = {
		navigationControlOptions: {
		  style: google.maps.NavigationControlStyle.ANDROID
		},
		mapTypeControlOptions: {
		  style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
		},
		disableDoubleClickZoom: true,
		scaleControl: false
	  };
	  map.setOptions(myOptions);
	}
}
