// parcours.js	

// Global variables	
var data;// initialisé dans init_fiche
var	map=null;
var distance;
var lineColor = "#0000af";
var lineWeight = 3;
var lineOpacity = .8;	
var points = new Array();
var corres=new Array();
corres["al"]="Alsace";
corres["aq"]="Aquitaine";
corres["au"]="Auvergne";
corres["bn"]="Basse Normandie";
corres["bo"]="Bourgogne";
corres["br"]="Bretagne";
corres["ce"]="Centre";
corres["ca"]="Champagne Ardenne";
corres["co"]="Corse";
corres["fc"]="Franche Comté";
corres["hn"]="Haute Normandie";
corres["if"]="Ile de France";
corres["lr"]="Lanquedoc Roussillon";
corres["li"]="Limousin";
corres["lo"]="Lorraine";
corres["mp"]="Midi Pyrénées";
corres["nc"]="Nord Pas de Calais";
corres["pl"]="Pays de Loire";
corres["pi"]="Picardie";
corres["pc"]="Poitou Charente";
corres["pa"]="Provence Alpes Côte d'Azur";
corres["ra"]="Rhône Alpes";
corres["france"]="France";
corres["suisse"]="Suisse";	
corres["belgique"]="Belgique";
corres[""]="?";	

var corres1=new Array();
corres1["rando"]="Rando pédestre/Course à pied";
corres1["velo"]="Vélo de route";
corres1["vtt"]="VTT";
corres1["fond"]="Ski de fond";
corres1["rando-s"]="Ski de rando";
corres1["raquettes"]="Raquettes";
corres1["roller"]="Ski roue, Roller";

var longueur_poly_km;

function convertit_entite_html(texte){	
	texte = texte.replace(/&eacute;/g,'é');
	texte = texte.replace(/&ccedil;/g,'ç');
	texte = texte.replace(/&egrave;/g,String.fromCharCode(232));
	texte = texte.replace(/&ecirc;/g,String.fromCharCode(234));	
	texte = texte.replace(/&agrave;/g,String.fromCharCode(224));	
	texte = texte.replace(/&ugrave;/g,String.fromCharCode(249));
	texte = texte.replace(/&acirc;/g,'â');	
	texte = texte.replace(/&icirc;/g,'î');
	texte = texte.replace(/&ocirc;/g,'ô');
	texte = texte.replace(/&euml;/g,'ë');
	texte = texte.replace(/&iuml;/g,String.fromCharCode(239));
	texte = texte.replace(/&ucirc;/g,String.fromCharCode(251));
	texte = texte.replace(/&uuml;/g,'ü');	
	texte = texte.replace(/&quot;/g,'"');	
 return texte;
}

function complete_formu1() {	
 
 // formulaire complété	à l'aide de l'objet data qui a été calculé avec init_fiche()
		$("comment1").value=convertit_entite_html(data.comment);	
		$("ville1").value=convertit_entite_html(data.ville);			
		$("code_parcours1").value=data.code_parcours;	
		$("titre_parcours1").innerHTML=data.titre;		
			
		div_region=$("region1");	
		for (i=0;i<div_region.options.length;i++){	
		 if 	(div_region.options[i].value==data.region	)	{	
			 div_region.options[i].selected=true;
			} else {	
			 div_region.options[i].selected=false;
			};	 
		};
		
		div_activite=$("activite1");	
		for (i=0;i<div_activite.options.length;i++){	
		 if 	(div_activite.options[i].value==data.activite	)	{	
			 div_activite.options[i].selected=true;
			} else {	
			 div_activite.options[i].selected=false;
			};	 
		};
		
		// rendre le formulaire visible	et choisir le bouton modif		et supp
	 $("formulaire").style.display="block";	
		$("b_modif").style.display="block";	
		$("b_ajout").style.display="none";	
		$("b_supp").style.display="block";
		$("rappel_parcours1").innerHTML="";			
}

function init_avis(code_parcours) { 
	if (!window.XMLHttpRequest) {
	  XMLHttpRequest = function() {
	    return new ActiveXObject("Microsoft.XMLHTTP");
	  };
		};
	request = new XMLHttpRequest();
	request.open("GET", "def_avis.php?code_parcours="+code_parcours, false);
	request.send("");
	var reponse=request.responseText;	// réception d'un objet dynamique	
	//alert(escape(reponse));
	
	// affichage commentaires
	var commentaires="";		
	if (	reponse.substr(2,4)!="vide") {
		// traduction json vers tableau js
		var data1 = reponse.traduisJSON();	
		//alert("data1[3].nom_avis : "+data1[3].nom_avis);
		
		var i=1;
		while(data1[i]) {
		 var jour1=data1[i].jour_avis;
			var nom1=data1[i].nom_avis;
		 var retour=new RegExp("\r\n","g");
		 var texte1=data1[i].texte_avis.replace(retour,"<br/>");	
		 commentaires+="<p>"+jour1+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+nom1+"<br/><br/>"+texte1+"</p>";	
			i++;
		};	
	} else {
	 commentaires+="Pas de commentaires sur ce parcours";
	};
	//alert("commentaires : "+commentaires);
	$("div_avis").innerHTML=commentaires;
	$("div_avis").style.display="block";
}

function init_fiche(code_parcours) {	
 document.location="#debut_recherche";
 //alert (code_parcours);	
	if (!window.XMLHttpRequest) {
	  XMLHttpRequest = function() {
	    return new ActiveXObject("Microsoft.XMLHTTP");
	  };
		};
		request = new XMLHttpRequest();
		request.open("GET", "def_fiche.php?code_parcours="+code_parcours, false);
		request.send("");
		var reponse=request.responseText;	// réception d'un objet dynamique	
		//alert(reponse);	
		
		// traduction json vers tableau js
		data = reponse.traduisJSON();
		//alert(data.existe_profil);
		//alert(data.titre+" "+data.comment);	
		
		// affichage titre	(et lien carte ign si parcours ligne)
		var ligne_titre="";
		if (data.ligne=="V") {
		 ligne_titre="<div class=\"titre_c\">"+data.titre+"</div>";
		 ligne_titre+="<div class=\"lien_ign\"><a href=\"javascript:ouvre_fen_ign('carte_ign.php?code_parcours="+code_parcours+"')\" >Fond de carte IGN, Cliquez ici ! </a></div>";
		} else	{
		 ligne_titre=data.titre;
		};		
		$("titre_carte").innerHTML=ligne_titre;			
			
		// affichage lien impression	
		var html="<img src='image/fleche1.gif' border='0' width='12' height='12' alt=''>";
		html+=" <a href='imprime.php?code="+code_parcours+"' target='_blank'> Imprimer la fiche ( parcours, détail et profil). </a>";
		$("impression").innerHTML=html;	
		
		// affichage lien export GPX	pour les parcours linéaires
		if (data.ligne=="V") {
			var html="<img src='image/fleche1.gif' border='0' width='12' height='12' alt=''>";
			html+=" <a href='recherche_export_gpx.php?code_parcours="+code_parcours+"' target='_blank'> Exporter sous la forme d'un fichier GPX (GPS). </a>";
			$("export_gpx").innerHTML=html;	
		};
		
		// chargement détails
		if (data.ligne=="V") {$("type_parcours2").innerHTML="Type de parcours : Sentier, chemin, route";} else {$("type_parcours2").innerHTML="Type de parcours : Route";} ;
		$("activite2").innerHTML="Activité : "+corres1[data.activite];
		$("region2").innerHTML="Région : "+corres[data.region];
		$("ville2").innerHTML="Ville de départ ou principale : "+data.ville;
		var retour=new RegExp("\r\n","g");
		var comment1=data.comment.replace(retour,"<br/>");	
		$("comment2").innerHTML=comment1+"<br/><br/>"+data.auteur;	
		
		// chargement du profil s'il existe
		if (data.existe_profil=="true") {	
		
		 //calcul dim image (au départ 780*210)
		 var largeur_col_droite=	screen.width-360;
				if (largeur_col_droite<780) {
				 var coeff=largeur_col_droite/780;	
					$("profil").style.width=largeur_col_droite+"px";
				 $("profil").style.height=Math.round(210*coeff)+"px";	
				};	
				
		 var adr_profil="profil/profil"+code_parcours+".png";	
			$("div_profil").style.display="block";
		 $("profil").src=adr_profil;
		}	else {
		 $("profil").src="";	
			$("div_profil").style.display="none";
		};
		
		// affichages commentaires		et formulaire	avis
		if (page_recherche) {
		 init_avis(code_parcours);
		 document.formu_avis.code_avis.value=code_parcours;
			$("div_formu_avis").style.display="block";		
		};
					
		// chargement de la carte
		load_carte();	
		
}// fin function init_fiche()	

function ajoute_marker_km(point,nb) {
 // construction du marker	km	
	var icon = new GIcon();
	if(nb>0) {
	 icon.image="km/"+nb+".png";	
		icon.iconSize = new GSize(30, 40);
		icon.iconAnchor = new GPoint(15, 40);	
	} else {	
	 icon.image="depart.png";	
		icon.iconSize = new GSize(10, 10);	
		icon.iconAnchor = new GPoint(5,5);	
	};
		 
 var marker = new GMarker(point,icon);
 map.addOverlay(marker);	
}		

function init_ligne(){		
	function ajoute_bornes_km_ligne(){
		//ajout des markers km	
		var point=new GLatLng(poly.getVertex(0).lat(),poly.getVertex(0).lng());	
	 ajoute_marker_km(point,0);
		
		var dist=0;
		var old_dist=0;	
		var num_borne=1;
		if(longueur_poly_km<20) {
		 unite=1000;
		} else {
		 if(longueur_poly_km<50) {
		  unite=2000;
			} else	{	
			 unite=5000;
			};
		};
		
		if(poly.getVertexCount()>0) {
			for(var j=1; j<poly.getVertexCount();j++) {	
			 old_dist=dist;
				var p2=poly.getVertex(j);
				var p1=poly.getVertex(j-1);
				dist+=p2.distanceFrom(p1);
				if (dist>num_borne*unite) {	
				 while(dist>num_borne*unite){
						var coeff=(num_borne*unite - old_dist)/(dist-old_dist);
						var lat=Number(p1.lat()) + Number((p2.lat() - p1.lat())*coeff);		
						var lng=Number(p1.lng()) + Number((p2.lng()-p1.lng())*coeff);
						//alert(lat+"      "+lng);
						var point=new GLatLng(lat,lng);
						ajoute_marker_km(point,num_borne*unite/1000);
						num_borne++;	
					};	// fin while(dist>km*unite)
				};// fin if (dist>km*unit)
			};	//fin 	for(var j=1; j<poly.getVertexCount();j++)	
		}; // fin 	if(poly.getVertexCount()>0)	
	
	}// fin 	function ajoute_bornes_km()

 // construction de la polyline
 var poly = new GPolyline(points, lineColor, lineWeight, lineOpacity);
 map.addOverlay(poly);
	longueur_poly_km=poly.getLength()/1000;	
	$("distance").innerHTML="Longueur du parcours : " + longueur_poly_km.toFixed(3) + " km";	
	ajoute_bornes_km_ligne();
}	// fin init_ligne

	function init_route() {	
			function ajoute_bornes_km_route(){	
			 
				//ajout du marker départ
				var point=new GLatLng(gpolys[0].getVertex(0).lat(),gpolys[0].getVertex(0).lng());	
			 ajoute_marker_km(point,0);
				
				//init variables
				var dist=0;
				var old_dist=0;
				var old_i=0;
				var old_j=0;
				var num_borne=1;
				// calcul unite
				var unite;	
			 if(longueur_poly_km<20) {
				 unite=1000;
				} else {
				 if(longueur_poly_km<50) {
				  unite=2000;
					} else	{
					 unite=Math.ceil(longueur_poly_km/100)*5000;
					};
				};
			
				//ajout des markers km		
				//alert("gpolys.length : "+gpolys.length);
				for (var i=0; i<gpolys.length; i++) {		
				 if(gpolys[i].getVertexCount()>0) {
					//alert("gpolys["+i+"].getVertexCount() : "+gpolys[i].getVertexCount());
						for(var j=1; j<gpolys[i].getVertexCount();j++) {	
							var p2=gpolys[i].getVertex(j);// point courant
							var p1=gpolys[old_i].getVertex(old_j);	//point précédent
							var old_dist=dist;
							dist+=p2.distanceFrom(p1);
							if (dist>num_borne*unite) {	
							 while(dist>num_borne*unite){
									var coeff=(num_borne*unite - old_dist)/(dist-old_dist);
									var lat=Number(p1.lat()) + Number((p2.lat() - p1.lat())*coeff);		
									var lng=Number(p1.lng()) + Number((p2.lng()-p1.lng())*coeff);
									//alert(lat+"      "+lng);
									var point=new GLatLng(lat,lng);
									ajoute_marker_km(point,num_borne*unite/1000);
									num_borne++;	
								};	// fin while(dist>km*unite)
							};// fin if (dist>km*unit)	
							old_i=i;
							old_j=j;
						};	//fin 	for(var j=1; j<gpolys[i].getVertexCount();j++)
					};	// fin if(gpolys[i].getVertexCount()>0)	
				}; // fin for (var i=0; i<gpolys.length; i++)				
			}// fin 	function ajoute_bornes_km_route()
		
	 //enregistrements du parcours		en laissant du temps à  dirn	!	
		 var gpolys =new Array();
			var dirn=new GDirections();	
			var compteur=0;	
			distance=0;
			var der_point=points.length-1;	
			dessine_morceau(compteur);	
			
			
			GEvent.addListener(dirn,"load", function() {
			 map.addOverlay(dirn.getPolyline());
				var poly=dirn.getPolyline();
				gpolys.push(poly);
				distance+=poly.getLength();	
				longueur_poly_km=distance/1000;
		  $("distance").innerHTML="Longueur du parcours : " + longueur_poly_km.toFixed(3) + " km";	
			 compteur++;
			 if (compteur<der_point){
					sleep(100);
					dessine_morceau(compteur);
				} else {
				 ajoute_bornes_km_route();
				};				 
	  });
			
			function sleep(delai){	
			 var date_debut=new Date();
				var max=date_debut.getTime()+delai;	
				var date_cour=new Date();
				while(date_cour.getTime()<max){
					date_cour=new Date();
				};
			}
						
			function		dessine_morceau(compteur){
				var point1=points[compteur];
				var point2=points[compteur+1];
	   dirn.loadFromWaypoints([point1.toUrlValue(6),point2.toUrlValue(6)],{getPolyline:true});	
			}	
	} // fin init_route()
	
function load_carte() {
 //data a été calculé avec init_fiche() 
	var parcours=data.parcours;
	var ligne=data.ligne;
	//alert(parcours);
	//alert(ligne);
	
	//construction tableau points et objet bounds	
	var bounds = new GLatLngBounds();
	var couples=parcours.split(";");
	points.length=0;
	for(var i = 0; i < couples.length; i++) {	
	 var couple=couples[i].split(",");																												
		points[i]=new GLatLng(couple[0],couple[1]);
		bounds.extend(points[i]);
	};
	
	// définition map, zoom et centre de map
	map = new GMap2(document.getElementById("map")); 
 map.setCenter(new GLatLng(0,0),0); // nécessaire pour redéfinir zoom et centre par la suite	
	map.addControl(new GLargeMapControl()); // Zoom control	
	map.addControl(new GMapTypeControl());	// type de carte
	map.addMapType(G_PHYSICAL_MAP);// ajout bouton relief
	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());	
	
	// ajout du parcours
	if	(ligne=="V") {
		init_ligne();
	} else {	
	 init_route();
	};	
}// fin function load_carte 

function init_fiche_imp(code_parcours) {	
 $("global").style.top=0;
 //alert (code_parcours);	
	if (!window.XMLHttpRequest) {
	  XMLHttpRequest = function() {
	    return new ActiveXObject("Microsoft.XMLHTTP");
	  };
		};
		request = new XMLHttpRequest();
		request.open("GET", "def_fiche.php?code_parcours="+code_parcours, false);
		request.send("");
		var reponse=request.responseText;	// réception d'un objet dynamique	
		//alert(reponse);	
		
		// traduction json vers tableau js
		data = reponse.parseJSON();
		//alert(data.existe_profil);
		//alert(data.titre+" "+data.comment);	
		
		// affichage titre
		$("titre_carte").innerHTML=data.titre;			
			
		// chargement détails
		if (data.ligne=="V") {$("type_parcours2").innerHTML="Type de parcours : Sentier, chemin, route";} else {$("type_parcours2").innerHTML="Type de parcours : Route";} ;
		$("activite2").innerHTML="Activité : "+corres1[data.activite];
		$("region2").innerHTML="Région : "+corres[data.region];
		$("ville2").innerHTML="Ville de départ ou principale : "+data.ville;
		var retour=new RegExp("\r\n","g");
		var comment1=data.comment.replace(retour,"<br/>");	
		$("comment2").innerHTML=comment1;	
		
		// chargement du profil s'il existe
		if (data.existe_profil=="true") {	
		 var adr_profil="profil/profil"+code_parcours+".png";	
			$("div_profil").style.display="block";
		 $("profil").src=adr_profil;
		}	else {
		 $("profil").src="";	
			$("div_profil").style.display="none";
		};			
		// chargement de la carte
		load_carte();	
}// fin function init_fiche_imp()	

function ouvre_fen(fic,hauteur) {
 if (typeof(fenetre)=="object")	{ // test pour ne pas affichier deux fois le même fenêtre
	 if(!fenetre.closed){
	  fenetre.close();	
	 };	
	};
	var param="scrollbars=yes,width=500,height="+hauteur+",left=300,top=150,status=no";
 fenetre=open(fic,"",param);
}	

function ouvre_fen_ign(fic) {
 if (typeof(fenetre)=="object")	{ // test pour ne pas affichier deux fois le même fenêtre
	 if(!fenetre.closed){
	  fenetre.close();	
	 };	
	};
	var param="scrollbars=yes,width=1090,height=800,left=100,top=100,status=no";
 fenetre=open(fic,"",param);
}

function init_p(code_parcours,parcours,titre,ligne){	
	
	//construction tableau points et objet bounds	
	var bounds = new GLatLngBounds();
	var couples=parcours.split(";");
	points.length=0;
	for(var i = 0; i < couples.length; i++) {	
	 var couple=couples[i].split(",");																												
		points[i]=new GLatLng(couple[0],couple[1]);
		bounds.extend(points[i]);
	};
	
	// définition map, zoom et centre de map
	map = new GMap2(document.getElementById("map")); 
 map.setCenter(new GLatLng(0,0),0); // nécessaire pour redéfinir zoom et centre par la suite	
	map.addControl(new GLargeMapControl()); // Zoom control	
	map.addControl(new GMapTypeControl());	// type de carte
	map.addMapType(G_PHYSICAL_MAP);// ajout bouton relief
	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());	
	
	// ajout du parcours
	if	(ligne=="V") {
		init_ligne();
	} else {	
	 init_route();
	};
	
	// affichage titre	carte
	$("titre_carte").innerHTML=titre;		
	
	// chargement du profil	
	var adr_profil="profil/profil"+code_parcours+".png";	
	$("div_profil").style.display="block";
 $("profil").src=adr_profil;
	
	// rendre le formulaire visible	et choisir le bouton ajout
 $("formulaire").style.display="block";	
	$("b_ajout").style.display="block";		
	$("b_modif").style.display="none";
	$("b_supp").style.display="none";
	
	// formulaire  partiellemnt complété	
	$("code_parcours1").value=code_parcours;
	$("titre_parcours1").innerHTML=titre;	
	$("rappel_parcours1").innerHTML="Pour rendre public ce parcours, veuillez compléter le formulaire ci-dessous.";			
	
	
}// fin init_p(code,parcours,titre,ligne)


