var map;
var dirn;
var geocoder;
var latlngs_to = new Array();
var latlngs_from = new Array();
var latlngs_step = new Array();
var nohighway = false;
var travelmod = 'G_TRAVEL_MODE_DRIVING';

// Correctif de l'affichage des images PNG dans IE5.5 et IE6 (transparent pour les autres navigateurs).
// V1.1 par Brice de Villeneuve, http://www.boursica.com/
// Licence : freeware, librement utilisable du moment que vous laissez ces commentaires dans votre source.
// Mettre ce script dans le head et dans les balises IMG ajouter simplement : onload='setpng(this)'
// Si l'image n'est pas visible (display:none par exemple), appeler la fonction juste après l'affichage de l'image
// dans un javascript avec, par exemple, un setpng(document.getElementById('idDeMonImage');
function setpng(img) { if(document.all && (IEver=parseFloat(navigator.appVersion.split("MSIE")[1])) && (IEver>=5.5) && (IEver<7) && document.body.filters && img) {
	imgName=img.src.toUpperCase();
	if(imgName.substring(imgName.length-3,imgName.length)=="PNG") img.outerHTML=
		"<span "+(img.id?"id='"+img.id+"' ":"")+(img.className?"class='"+img.className+"' ":"")+(img.title?"title=\""+img.title+"\" ":"")
		+"style=\"width:"+img.width+"px;height:"+img.height+"px;"+(img.align=="left"?"float:left;":(img.align=="right"?"float:right;":""))
		+(img.parentElement.href?"cursor:hand;":"")+"display:inline-block;"+img.style.cssText+";"
		+"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img.src+"',sizingMethod='scale');\"></span>";
}}

function valid_info() {
	document.getElementById("box_msg").style.display = "none";
}

function Load_GMaps(lat,long) {
      	if (GBrowserIsCompatible()) {
       		//Definition de la carte
		map = new GMap2(document.getElementById("gmap"));
		map.addControl(new GLargeMapControl());
		//map.addControl(new GMapTypeControl());
		//map.addControl(new GScaleControl());
		//map.addControl(new GOverviewMapControl());
		map.setCenter(new GLatLng(lat,long),10);
		_mPreferMetric = true;
		//Definition des directions
		dirn = new GDirections(map);
		//Create a Client Geocoder
		geocoder = new GClientGeocoder();
		GEvent.addListener(dirn,"error", Error_Direction);
		GEvent.addListener(dirn,"load", Get_Step);
		
	}
}
function Geocode(address_from, address_to) {
	if(address_from == "ex: 5 rue de madrid schiltigheim 67" || address_from == ""){
		alert ("Veuillez renseigner l'adresse de d\351part.");
		return false;
	}
	if(address_to == "ex: 5 rue de madrid schiltigheim 67" || address_to == ""){
		alert ("Veuillez renseigner l'adresse d'arriv\351e.");
		return false;
	}	
	//Efface la carte
	map.clearOverlays();
	geocoder.getLatLng(address_from,
		function(point_start) {
			if(!point_start) {
				alert ("L'adresse \253" + address_from + "\273 n'a pas \351t\351 trouv\351e. Merci d'indiquer une adresse \340 proximit\351.");
			}else {		
				latlngs_from[0] = point_start.lat();
				latlngs_from[1] = point_start.lng();
				geocoder.getLatLng(address_to, function(point_end) {
					if(!point_end) {
						alert ("L'adresse \253" + address_to + "\273 n'a pas \351t\351 trouv\351e. Merci d'indiquer une adresse \340 proximit\351.");
					}else {
						latlngs_to[0] = point_end.lat();
						latlngs_to[1] = point_end.lng();
						//Trace le chemin
						dirn.loadFromWaypoints([point_start, point_end], {locale:'fr',avoidHighways:"+nohighway+",travelMode:"+travelmod+",getPolyline:true,getSteps:true});	
					}
				}
				);
			}
		}
		);

	//On retourne false pour pas que le formulaire soit soumis
	return false;
}

function Get_Step(){
	//Met a jour la distance parcourue
	var txt_dist = document.getElementById("distance");
	var d = Math.round(dirn.getDistance().meters/1000);
	txt_dist.value = d;
	//Met a jour le temps estimé
	//On ajuste le temps estimé en fonction du type de transport utilisé
	var type_vehicule = document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value;
	switch(type_vehicule){	
		case '1':
			//Vélo
			//On bloque la vitesse à 15 km/h
			var t = Math.round((d/15)*60);
			break;
		case '2':
			//Bus urbain
			//On bloque la vitesse à 19 km/h
			var t = Math.round((d/19)*60);
			break;
		case '3':
			//Autocar inter-urbain
			//On bloque la vitesse à 30 km/h
			var t = Math.round((d/30)*60);
			break;
		case '4':
			//Voitures
			//On prend le temps donné par google
			var t= Math.round(dirn.getDuration().seconds/60);
			break;
		case '5':
			//Cyclomoteurs
			//On bloque la vitesse à 50 km/h
			var t = Math.round((d/30)*60);
			break;	
		case '6':
			//Motos
			//On prend le temps donné par google
			var t = Math.round(dirn.getDuration().seconds/60);
			break;
		case '-999':
			//On prend le temps donné par google
			var t = Math.round(dirn.getDuration().seconds/60);
			break;					
	}
	var txt_duree = document.getElementById("duree");
	txt_duree.value = t;
	//Boucle sur les routes
	for (r=0;r<dirn.getNumRoutes();r++){ 
		var route = dirn.getRoute(r);
		//Boucle sur les etapes
		for(i=0;i<route.getNumSteps();i++){		
			var marker = Create_Marker(route.getStep(i).getLatLng());
			map.addOverlay(marker);	 
		}
	}
	document.getElementById("box_msg").style.display = "block";
	
}

function Error_Direction() { 
	alert("Les adresses n'ont pas \351t\351 trouv\351es. Merci d'indiquer des adresses \340 proximit\351.");
}

function Create_Marker(point){
	var marker = new GMarker(point,{draggable: true});
	//On place un ecouteur pour capter le deplacement des Markers
	GEvent.addListener(marker,"dragend", function(){
		//On remplace les coordonnées par les nouvelles du marker déplacé	
		latlngs_step[0] = marker.getPoint().lat();
		latlngs_step[1] = marker.getPoint().lng();
		//Trace le chemin
		Load_GDirection(marker);
	});
	return marker;
}

function Load_GDirection(point){
	var sadrr = "from: start@"+latlngs_from[0]+","+latlngs_from[1];
	sadrr += " to: step@"+latlngs_step[0]+","+latlngs_step[1];
	sadrr += " to: end@"+latlngs_to[0]+","+latlngs_to[1];
	map.clearOverlays();
	dirn.load(sadrr, {locale:'fr',avoidHighways:"+nohighway+",travelMode:"+travelmod+",getPolyline:true,getSteps:true});
}

function Focus_Adress(obj){
	var type_veh=document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value;
	if(type_veh == 7 || type_veh == 8){
		alert("La recherche d'itin\351raire \340 l'adresse n'int\350gre pas les r\351seaux ferr\351s. Elle n'est donc pas utilisable avec les modes de d\351placement en T.E.R ou en tramways. Veuillez rentrer votre distance et dur\351e de trajet estim\351es.");
		document.form.use_gmaps.disabled=true;
		//Met le focus sur la case de distance estimée
		document.getElementById("distance").focus();
		return;
	}
	if(obj.value == "ex: 5 rue de madrid schiltigheim 67"){
		obj.value ="";
		obj.className="adress";
		document.form.use_gmaps.disabled=false;
	}
}
//Valide le formulaire avant envoi
//src http://www.editeurjavascript.com/scripts/scripts_formulaires_3_568.php
function validation_form(){
	var type_veh=document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value;
	if((document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value == -999) && (document.form.type_vehicule.disabled==false)){
		alert("Veuillez choisir un moyen de transport.");
	}else if((document.form.type_carburant.options[document.form.type_carburant.selectedIndex].value == -999) && (document.form.type_carburant.disabled==false)){
		alert("Veuillez choisir un carburant.");
	}else if((document.form.type_cylindree.options[document.form.type_cylindree.selectedIndex].value == -999) && (document.form.type_cylindree.disabled==false)){
		alert("Veuillez choisir une cylindr\351e.");
	}else if((document.form.type_annee_circu.options[document.form.type_annee_circu.selectedIndex].value == -999) && (document.form.type_annee_circu.disabled==false)){
		alert("Veuillez choisir une ann\351e de 1\350re mise en circulation.");
	}else if((document.form.type_puissance.options[document.form.type_puissance.selectedIndex].value == -999) && (document.form.type_puissance.disabled==false)){
		alert("Veuillez choisir une puissance fiscale.");
	}else if(document.form.distance.value == ''){
		alert("Veuillez renseigner la distance d'un trajet aller");
	}else if(document.form.distance.value == 0){
		alert("Attention, Vous avez renseign\351 une distance de 0 km !");
	}else if(type_veh==1  && document.form.distance.value > 30){
		alert("Cet outil a \351t\351 r\351alis\351 pour estimer l'impact de vos d\351placements domicile-travail quotidiens. Vous avez indiqu\351 une distance domicile-travail \340 v\351lo trop importante (max: 30 km)");
	}else if(type_veh==2  && document.form.distance.value > 30){
		alert("Cet outil a \351t\351 r\351alis\351 pour estimer l'impact de vos d\351placements domicile-travail quotidiens. Vous avez indiqu\351 une distance domicile-travail en bus urbain trop importante (max: 30 km)");
	}else if(type_veh==5  && document.form.distance.value > 30){
		alert("Cet outil a \351t\351 r\351alis\351 pour estimer l'impact de vos d\351placements domicile-travail quotidiens. Vous avez indiqu\351 une distance domicile-travail en cyclomoteur trop importante (max: 30 km)");
	}else if(type_veh==3  && document.form.distance.value > 100){
		alert("Cet outil a \351t\351 r\351alis\351 pour estimer l'impact de vos d\351placements domicile-travail quotidiens. Vous avez indiqu\351 une distance domicile-travail en autocar trop importante (max: 100 km)");
	}else if(type_veh==7  && document.form.distance.value > 30){
		alert("Cet outil a \351t\351 r\351alis\351 pour estimer l'impact de vos d\351placements domicile-travail quotidiens. Vous avez indiqu\351 une distance domicile-travail \340 v\351lo trop importante (max: 30 km)");
	}else if(document.form.distance.value > 200){
		alert("Cet outil a \351t\351 r\351alis\351 pour estimer l'impact de vos d\351placements domicile-travail quotidiens. Vous avez indiqu\351 une distance domicile-travail trop importante.(max: 200 km)");
	}else if(document.form.duree.value == ''){
		alert("Veuillez renseigner la dur\351e moyenne d'un trajet aller");
	}else if(document.form.duree.value == 0){
		alert("Attention, Vous avez renseign\351 une dur\351e de 0 min !");
	}else if((document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value == -999) && (document.form.type_vehicule.disabled==false)){
		alert("Veuillez choisir un moyen de transport.");
	}else if((document.form.type_carburant.options[document.form.type_carburant.selectedIndex].value == -999) && (document.form.type_carburant.disabled==false)){
		alert("Veuillez choisir un carburant.");
	}else if((document.form.type_cylindree.options[document.form.type_cylindree.selectedIndex].value == -999) && (document.form.type_cylindree.disabled==false)){
		alert("Veuillez choisir une cylindr\351e.");
	}else if((document.form.type_annee_circu.options[document.form.type_annee_circu.selectedIndex].value == -999) && (document.form.type_annee_circu.disabled==false)){
		alert("Veuillez choisir une ann\351e de 1\350re mise en circulation.");
	}else if((document.form.type_puissance.options[document.form.type_puissance.selectedIndex].value == -999) && (document.form.type_puissance.disabled==false)){
		alert("Veuillez choisir une puissance fiscale.");
	}else {
		document.form.submit();
	}

}
function Update_type_vehicule(obj) {
	//Grise les listes box
	document.form.type_cylindree.disabled=true;
	document.form.type_cylindree.options[0].selected = true;
	document.form.type_annee_circu.disabled=true;
	document.form.type_annee_circu.options[0].selected = true;
	document.form.type_puissance.disabled=true;
	document.form.type_puissance.options[0].selected = true;
	document.form.type_nbr_pers.disabled=true;
	document.form.type_nbr_pers.options[0].selected = true;
	if(obj.value==-999 || obj.value==1){
		document.form.type_carburant.disabled=true;
		document.form.type_carburant.options[0].selected = true;
	}else{
		document.form.type_carburant.disabled=false;
		//mise a jour de la liste box suivante
		var type = 'type_vehicule;type_carburant';
		Ajax_Update_Page('param='+obj.value+'&type='+type, 'update_listbox.php', 'GET', 'HackIE_carburant');
	}
	document.form.txt_vehicule.value = document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].text;
	//On reinitialise la carte
	document.form.duree.value = "";
	document.form.distance.value = "";
	if(document.form.adress_from.className!="adress_example"){
		document.form.adress_from.value = "ex: 5 rue de madrid schiltigheim 67";
		document.form.adress_to.value = "ex: 5 rue de madrid schiltigheim 67";
		document.form.adress_from.className="adress_example";
		document.form.adress_to.className="adress_example";
		map.clearOverlays();	
	}
	//Mise a jour des variable de mode de deplacement
	switch(obj.value){	
		case '1': //Cas du velo
			nohighway = true;
			travelmod = 'G_TRAVEL_MODE_WALKING';
			break;
		case '5' : //Cyclomoteur
			nohighway = true;
			travelmod = 'G_TRAVEL_MODE_DRIVING';
			break;
		case '7' : //Tramways
			nohighway = true;
			travelmod = 'G_TRAVEL_MODE_WALKING';
			break;
		default:
			nohighway = false;
			travelmod = 'G_TRAVEL_MODE_DRIVING';
			break;
			break;
	}
}
function Update_type_carburant(obj) {
	//Grise les listes box
	document.form.type_cylindree.disabled=true;
	document.form.type_cylindree.options[0].selected = true;
	document.form.type_puissance.disabled=true;
	document.form.type_puissance.options[0].selected = true;
	document.form.type_nbr_pers.disabled=true;
	document.form.type_nbr_pers.options[0].selected = true;
	if(obj.value==-999){
		document.form.type_annee_circu.disabled=true;
		document.form.type_annee_circu.options[0].selected = true;
	}else{
		document.form.type_annee_circu.disabled=false;
		//mise a jour de la liste box suivante
		var param_vehicule = document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value;
		var param = param_vehicule+";"+obj.value;
		var type = 'type_vehicule;type_carburant;type_annee_circu';
		Ajax_Update_Page('param='+param+'&type='+type, 'update_listbox.php', 'GET', 'HackIE_annee_circu');
	}
	document.form.txt_carburant.value = document.form.type_carburant.options[document.form.type_carburant.selectedIndex].text;
}
function Update_type_cylindree(obj) {
	document.form.txt_cylindree.value = document.form.type_cylindree.options[document.form.type_cylindree.selectedIndex].text;
}
function Update_type_annee_circu(obj) {
	//Grise les listes box
	document.form.type_puissance.disabled=false;
	document.form.type_nbr_pers.disabled=true;
	document.form.type_nbr_pers.options[0].selected = true;
	var type_vehicule = document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].value;
	var param_carburant = document.form.type_carburant.options[document.form.type_carburant.selectedIndex].value;
	var param = type_vehicule+";"+param_carburant+";"+obj.value;
	var type = 'type_vehicule;type_carburant;type_annee_circu;type_cylindree';
	//Mise a jour cylindree
	Ajax_Update_Page('param='+param+'&type='+type, 'update_listbox.php', 'GET', 'HackIE_cylindree');
	//Mise a jour des chevaux fiscaux
	Ajax_Update_Page('veh='+type_vehicule, 'update_listbox_cv.php', 'GET', 'HackIE_puissance');
	document.form.txt_annee_circu.value = document.form.type_annee_circu.options[document.form.type_annee_circu.selectedIndex].text;
}
function Update_type_puissance(obj) {
	document.form.type_nbr_pers.disabled=false;
	var type_vehicule = document.form.type_vehicule.options[document.form.type_vehicule.selectedIndex].text;
	Ajax_Update_Page('veh='+type_vehicule, 'update_listbox_nbr_pers.php', 'GET', 'HackIE_nbr_pers');
	document.form.txt_puissance.value = document.form.type_puissance.options[document.form.type_puissance.selectedIndex].text;
}
function Update_tab_emi(pol, type, d, user_id) {
	Ajax_Update_Page('pol='+pol+'&type_veh='+type+'&dist='+d+'&user_id='+user_id, 'update_table_emi_year.php', 'POST', 'HackIE_emi');
}

/* http://qwix.media-box.net/index.php/2005/01/21/45-XmlhttprequestEtPhp#c706
* Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest 
*/
function Ajax_Update_Page(data, page, method, idobj) 
{ 
	if(document.all) 
    {       
        //Car document.all detect IE et OPERA http://www.javascriptkit.com/javatutors/objdetect3.shtml
        if(window.opera){
			//Opera
			var XhrObj = new XMLHttpRequest(); 
		}else{
			//Internet Explorer 
			var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
		} 
    }//fin if 
    else 
    { 
        //Mozilla 
        var XhrObj = new XMLHttpRequest(); 
    }//fin else 
     
    //définition de l'endroit d'affichage: 
    var content = document.getElementById(idobj); 
     
    //si on envoie par la méthode GET: 
    if(method == "GET") 
    { 
        if(data == 'null') 
        { 
            //Ouverture du fichier sélectionné: 
            XhrObj.open("GET", page); 
        }//fin if 
        else 
        { 
            //Ouverture du fichier en methode GET 
            XhrObj.open("GET", page+"?"+data); 
        }//fin else 
    }//fin if 
    else if(method == "POST") 
    { 
        //Ouverture du fichier en methode POST 
        XhrObj.open("POST", page); 
    }//fin elseif 

    //Ok pour la page cible 
    XhrObj.onreadystatechange = function() 
    { 
        if (XhrObj.readyState == 4 && XhrObj.status == 200){ 
            content.innerHTML = XhrObj.responseText;
	} 
    }     

    if(method == "GET") 
    { 
        XhrObj.send(null); 
    }//fin if 
    else if(method == "POST") 
    { 
        XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
	XhrObj.send(data); 
    }//fin elseif 
}//fin fonction

function Ajax_Eval_Page (data, page, method) { 
	if(document.all) {       
        //Car document.all detect IE et OPERA http://www.javascriptkit.com/javatutors/objdetect3.shtml
        	if(window.opera){
			//Opera
			var XhrObj = new XMLHttpRequest(); 
		}else{
			//Internet Explorer 
			var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
		} 
    	}else { 
        	//Mozilla 
        	var XhrObj = new XMLHttpRequest(); 
    	}//fin else 
     
    //si on envoie par la méthode GET: 
    if(method == "GET") { 
        if(data == 'null') 
        { 
            //Ouverture du fichier sélectionné: 
            XhrObj.open("GET", page); 
        }//fin if 
        else 
        { 
            //Ouverture du fichier en methode GET 
            XhrObj.open("GET", page+"?"+data); 
        }//fin else 
    }//fin if 
    else if(method == "POST") { 
        //Ouverture du fichier en methode POST 
        XhrObj.open("POST", page); 
    }//fin elseif 

    //Ok pour la page cible 
    XhrObj.onreadystatechange = function() { 
        if (XhrObj.readyState == 4 && XhrObj.status == 200){ 
            eval(XhrObj.responseText);
	} 
    }     
    if(method == "GET") { 
        XhrObj.send(null); 
    }//fin if 
    else if(method == "POST") { 
        XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
        XhrObj.send(data); 
    }//fin elseif 
}//fin fonction
