// JavaScript Document

 function distanceTwoPoints(pt1,pt2)
 {
	var lat1=pt1.lat()*Math.PI/180;
	var lng1=pt1.lng()*Math.PI/180;
	var lat2=pt2.lat()*Math.PI/180;
	var lng2=pt2.lng()*Math.PI/180;
	
var d=6371000*Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lng1-lng2));
return d;	 
 }

function courseTwoPoints(pt1,pt2)
 {
	 
	var lat1=pt1.lat()*Math.PI/180;
	var lng1=pt1.lng()*Math.PI/180;
	var lat2=pt2.lat()*Math.PI/180;
	var lng2=pt2.lng()*Math.PI/180; 
	 var tc1;
	 
var d=distanceTwoPoints(pt1,pt2)/6371000;

if(Math.sin(lng2-lng1)<0) tc1=Math.acos((Math.sin(lat2)-Math.sin(lat1)*Math.cos(d))/(Math.sin(d)*Math.cos(lat1))) ;
else tc1=2*Math.PI-Math.acos((Math.sin(lat2)-Math.sin(lat1)*Math.cos(d))/(Math.sin(d)*Math.cos(lat1)));    

tc1=tc1*180/Math.PI;
return tc1;	 
 }
 
 function distCourse2Point(pt1,distance,course)
 {
	 var lat1=pt1.lat()*Math.PI/180;
	var lng1=pt1.lng()*Math.PI/180;
	 
	 distance=distance/6371000;
	 course=course*Math.PI/180;
	 
	var lat=(Math.asin(Math.sin(lat1)*Math.cos(distance)+Math.cos(lat1)*Math.sin(distance)*Math.cos(course)))*180/Math.PI;
    var lng=((lng1-Math.asin(Math.sin(course)*Math.sin(distance)/Math.cos(lat1))+Math.PI)%(2*Math.PI)-Math.PI)*180/Math.PI;

	 var output=new GLatLng(lat,lng);
	 
	return output; 
 }
 
 function pointCloserThan(ptGC1,ptGC2,ptRecherche,distance)
 {
	var latGC1=ptGC1.lat()*Math.PI/180;
	var lngGC1=ptGC1.lng()*Math.PI/180; 
	var latGC2=ptGC2.lat()*Math.PI/180;
	var lngGC2=ptGC2.lng()*Math.PI/180; 
	var latRecherche=ptRecherche.lat()*Math.PI/180;
	var lngRecherche=ptRecherche.lng()*Math.PI/180;
	var pointOK=0;
	
	 d=distance/6371000;
	 var A = (courseTwoPoints(ptGC1,ptRecherche)-courseTwoPoints(ptGC1,ptGC2))*Math.PI/180;
	 
	 var b=distanceTwoPoints(ptGC1,ptRecherche)/6371000;
	 var r=Math.sqrt(Math.pow(Math.cos(b),2)+Math.pow(Math.sin(b),2)*Math.pow(Math.cos(A),2));
	 
	 var cap12=courseTwoPoints(ptGC1,ptGC2);
	var cap21=courseTwoPoints(ptGC2,ptGC1);
	
	 var cap1R=courseTwoPoints(ptGC1,ptRecherche);
	var cap2R=courseTwoPoints(ptGC2,ptRecherche);
	
	var diff1R=(cap1R-cap12)%360;
		if(diff1R>180)diff1R-=360;
		
		var diff2R=(cap2R-cap21)%360;
		if(diff2R>180)diff2R-=360;
		
	if(Math.pow(Math.cos(d),2) < Math.pow(r,2) && -90<diff1R && diff1R<90 && -90<diff2R && diff2R<90) pointOK=1;
	if(distanceTwoPoints(ptGC1,ptRecherche)<distance || distanceTwoPoints(ptGC2,ptRecherche)<distance)
	{
		eEllipse=Math.sqrt(Math.pow(distance,2)-Math.pow(distance/2,2))/distance;
		//ellipse autrour de 1
	rayonEllipse1=Math.sqrt(Math.pow(distance/2,2)/(1-Math.pow(eEllipse*Math.cos(diff1R+90),2)));
	if(distanceTwoPoints(ptGC1,ptRecherche)<rayonEllipse1) pointOK=1;
	
		//ellipse autrour de 2
	rayonEllipse2=Math.sqrt(Math.pow(distance/2,2)/(1-Math.pow(eEllipse*Math.cos(diff2R+90),2)));
	if(distanceTwoPoints(ptGC2,ptRecherche)<rayonEllipse2) pointOK=1;

	}
	return pointOK;
	
 }
 
 function pointInSection(ptBasis,ptRecherche,distance,angle,span)
 {
	var latBasis=ptBasis.lat()*Math.PI/180;
	var lngBasis=ptBasis.lng()*Math.PI/180; 
	var latRecherche=ptRecherche.lat()*Math.PI/180;
	var lngRecherche=ptRecherche.lng()*Math.PI/180;
	var pointOK=0;
	
	
	 var d=distanceTwoPoints(ptBasis,ptRecherche);
	 var cap1R=courseTwoPoints(ptBasis,ptRecherche);
	
	
	var diff1R=(cap1R-angle)%360;
		if(diff1R>180)diff1R-=360;
		
	
	if(d<distance && Math.abs(diff1R)<span) pointOK=1;
	return pointOK;
	
 }
 
 function setCloserPointOnRoad(markerInput,numRoad)
 {
	var GLatLngInput=markerInput.getLatLng();
	var xhrCloserPointOnRoad=null;
		
		if (window.XMLHttpRequest) { 
			xhrCloserPointOnRoad = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) 
		{
			xhrCloserPointOnRoad = new ActiveXObject("Microsoft.XMLHTTP");
		}
xhrCloserPointOnRoad.onreadystatechange = function() { 
		
		if (xhrCloserPointOnRoad.readyState == 4)
			{
			
			var xmlResultat= xhrCloserPointOnRoad.responseText;
			var coordonnes=xmlResultat.split('[#]');
			markerInput.setLatLng(new GLatLng(coordonnes[0],coordonnes[1]));
			}
		};
		
	
	xhrCloserPointOnRoad.open("GET", "http://www.trackandroad.net/programmes/googleMaps/ajaxCloserPointRoad.php?latDep="+GLatLngInput.lat()+"&lngDep="+GLatLngInput.lng()+"&numRoute="+numRoad, true);
    	xhrCloserPointOnRoad.send(null);
 }