/**
* Page		: barredroite.js
* Contenu	: Code javascript pour la gestion de la barre de sélection des critères
* Date		: 21/01/10
* @author	Gael Sauvanet
* @version	1.0
*/

var solution_actuelle = -1;		// Itinéraire sélectionné
var nb_sols = 0;			// Nombre d'itinéraires
var alti;
var min_alti = 5000;
var max_alti = 0;

/**
 * Modifie le coefficient de compromis
 * 
 * @param newCoeff le nouveau coefficient de compromis
 * @param num le numéro de la solution */
function changeSolution(num)
{
	// On change la classe de tous les points solutions comme points non sélectionnés
	for(var i=1; i<=nb_sols; i++)
	{
		if(i == num)
		{
			// On change la classe du point sélectionné
			var el2 = document.getElementById("sol"+i);
			el2.className = "solution2";
			linestringstyle2[i][1].strokeWidth = linestringstyle[1].strokeWidth;
			linestringstyle2[i][2].strokeWidth = linestringstyle[2].strokeWidth;
			linestringstyle2[i][3].strokeWidth = linestringstyle[3].strokeWidth;
			linestringstyle2[i][4].strokeWidth = linestringstyle[4].strokeWidth;
			linestringstyle2[i][5].strokeWidth = linestringstyle[5].strokeWidth;
		}
		else
		{
			var el1 = document.getElementById("sol"+i);
			el1.className = "solution";
			linestringstyle2[i][1].strokeWidth = linestringstylepetit[1].strokeWidth;
			linestringstyle2[i][2].strokeWidth = linestringstylepetit[2].strokeWidth;
			linestringstyle2[i][3].strokeWidth = linestringstylepetit[3].strokeWidth;
			linestringstyle2[i][4].strokeWidth = linestringstylepetit[4].strokeWidth;
			linestringstyle2[i][5].strokeWidth = linestringstylepetit[5].strokeWidth;
		}
	}
	onmouseoutSolution(solution_actuelle);

	map.removeLayer(layerItineraires[solution_actuelle]);

	// On affecte le nouveau coefficient
	solution_actuelle = num;
	onmouseoverSolution(solution_actuelle);

	map.removeLayer(layerItineraires[solution_actuelle]);
	map.addLayer(layerItineraires[solution_actuelle]);

	maj_distance();
	maj_fdr();
	chargeAlti(solution_actuelle);
}	

function onmouseoverSolution(num)
{
	layerItineraires[solution_actuelle].setOpacity = 0.9;

	map.addLayer(layerItineraires[num]);

	map.removeLayer(layerItineraires[solution_actuelle]);
	map.addLayer(layerItineraires[solution_actuelle]);

	chargeAlti2(solution_actuelle,num);
}

function onmouseoutSolution(num)
{
	if(num != solution_actuelle)
		map.removeLayer(layerItineraires[num]);

	layerItineraires[solution_actuelle].setOpacity = 0.6;

	map.removeLayer(layerItineraires[solution_actuelle]);
	map.addLayer(layerItineraires[solution_actuelle]);

	chargeAlti(solution_actuelle);
}


/**
 * Ajoute une solution sélectionnable
 * 
 * @param id l'identifiant de la solution
 * @param x la coordonnée x du div de la solution
*/
function ajouter_sol(id,x)
{
	// On se positionne sur le père
	var div_pere = document.getElementById("barre_criteres");

	// div d'affichage de la solution
	var sol = document.createElement("div");
	sol.id = "sol"+id;
	sol.style.left = x+"px";
	sol.className = "solution";
	sol.onclick = function(){changeSolution(id); return false;}
	sol.onmouseover = function(){onmouseoverSolution(id); return false;}
	sol.onmouseout = function(){onmouseoutSolution(id); return false;}
	div_pere.appendChild(sol);
}

/**
 * Ajoute une solution sélectionnée
 * 
 * @param id l'identifiant de la solution
 * @param x la coordonnée x du div de la solution
*/
function ajouter_sol2(id,x)
{
	solution_actuelle = id;

	// On se positionne sur le père
	var div_pere = document.getElementById("barre_criteres");

	// div d'affichage de la solution
	var sol = document.createElement("div");
	sol.id = "sol"+id;
	sol.style.left = x+"px";
	sol.className = "solution2";
	sol.onclick = function(){changeSolution(id); return false;}
	sol.onmouseover = function(){onmouseoverSolution(id); return false;}
	sol.onmouseout = function(){onmouseoutSolution(id); return false;}
	div_pere.appendChild(sol);
}

/**
 * Défini le nombre de solutions
 * 
 * @param nombre_sols le nombre de solutions */
function set_nb_sols(nombre_sols)
{
	nb_sols = nombre_sols;
}

/**
 * Supprime les solutions */
function remove_sols()
{
	// On se positionne sur le père
	var div_pere = document.getElementById("barre_criteres");

	// On supprime toutes les solutions
	for(var i=1; i<=nb_sols; i++)
	{
		var el1 = document.getElementById("sol"+i);
		div_pere.removeChild(el1);
	}
}

/**
 * maj les infos de distance et de temps */
function maj_distance()
{
	// On affiche la distance
	if(distance[solution_actuelle] < 1000)
		e('infos-distance').innerHTML = distance[solution_actuelle] + ' m';
	else
		e('infos-distance').innerHTML = distance[solution_actuelle]/1000 + ' km';

	// On calcule les deux temps approximatifs de l'itinéraire
	var temps1 = Math.round(distance[solution_actuelle] * 0.0035);	// 12 km/h -> 60/12000
	var temps2 = Math.round(distance[solution_actuelle] * 0.005);	// 17 km/h -> 60/17000

	// Au minimum on affichera un temps de parcours d'1 minute
	if(temps1 == 0)
		temps1 = 1;
	if(temps2 == 0)
		temps2 = 1;

	// On affiche le temps de parcours
	if(temps1 == temps2)
	{
		if(temps1 == 1) 
			e('infos-temps').innerHTML= temps1 + ' min';
	}
	else
		e('infos-temps').innerHTML = temps1 + '-' + temps2 + ' min';

}

/**
 * Maj le profil altimetrique */
function maj_alti()
{
	OpenLayers.loadURL(URL_ALTI + nodeDepart1 + '_' + nodeArrivee1 + '.fdr', {}, null, onLoadALTI, onLoadFailedALTI);
}

/**
 * Maj le profil altimetrique si tout est ok */
function onLoadALTI(r)
{
	if (r.status == 200)
	{

		var reponse =  eval('(' + r.responseText + ')'); 
		alti = reponse.alti;

		min_alti = 5000;
		max_alti = 0;

		for (var i=0; i<alti.length; i++)
		{
			for (var j=0; j<alti[i].length; j++)
			{
				if(alti[i][j][1] < min_alti)
					min_alti = alti[i][j][1];
				else if(alti[i][j][1] > max_alti)
					max_alti = alti[i][j][1];
			}
		}

		min_alti = min_alti-10;
		max_alti = max_alti+10;

		chargeAlti(solution_actuelle);

	}
}

function chargeAlti(num_itineraire)
{
	if(((dynamic) && (feuille_visible))||(!dynamic))
		$(function () {
		    $.plot($('#profil'), [alti[num_itineraire-1]], {
			series: {
			    lines: { show: true },
			    colors: ["#d18b2c", "#d18b2c"]

			},
			grid: {
			    backgroundColor: { colors: ["#fff", "#eee"] }
			},
			colors: ["#5e7a16c"],
			yaxis: {
			    min: min_alti,
			    max: max_alti
			},
			xaxis: {
			    ticks: 0
			}
		    });
		});
}

function chargeAlti2(num_itineraire, num_itineraire2)
{
	if(((dynamic) && (feuille_visible))||(!dynamic))
	{
		$(function () {
		    $.plot($("#profil"), [{data:alti[num_itineraire2-1],lines:{lineWidth:2}},{data:alti[num_itineraire-1],lines:{lineWidth:2}}], {
			series: {
			    lines: { show: true }
			},
			grid: {
			    backgroundColor: { colors: ["#fff", "#eee"] }
			},
			colors: ["#A6A6A6", "#5e7a16"],
			yaxis: {
			    min: min_alti,
			    max: max_alti
			},
			xaxis: {
			    ticks: 0
			}
		    });
		});
	}
}

/**
 * Erreur suite au chargement du profil altimetrique
 */
function onLoadFailedALTI(r) {
	alert('Erreur chargement profil altimétrique');
}


/**
 * Maj la feuille de route */
function maj_fdr()
{
	OpenLayers.loadURL(URL_FDR + nodeDepart1 + '_' + nodeArrivee1 + '_' + solution_actuelle + '.fdr', {}, null, onLoadFDR, onLoadFailedFDR);
}

/**
 * Erreur suite au chargement de la feuille de route
 */
function onLoadFailedFDR(r) {
	alert('Erreur chargement feuille de route');
}

/**
 * Chargement de la feuille de route
 */
function onLoadFDR(r)
{
	if (r.status == 200)
	{
		var reponse =  eval('(' + r.responseText + ')'); 
		var feuille = reponse.feuille;

		var contenu = '';

		if(dynamic)
			contenu += '<table border="0" cellpadding="3" cellspacing="0">';

		else
			contenu += '<table cellpadding="5" cellspacing="0">';

		var nb_route = 0;
		var Etape=1;
		for (var i=0; i<feuille.length; i++)
		{
			nb_route++;

			if(nb_route%2 == 1)
				contenu += '<tr>';
			else
				if(dynamic)
					contenu += '<tr bgcolor="#f1e4ff">';
				else
					contenu += '<tr bgcolor="#ffffff">';

			var indic;
			var image;

			if(feuille[i].type == 1)
				image_type = '<img src="res/img/pistecyclable.png" height="40" width="40" alt="piste cyclable" />';
			else if(feuille[i].type == 2)
				image_type = '<img src="res/img/voiecyclable.png" height="40" width="40" alt="bande cyclable"/>';
			else if(feuille[i].type == 3)
				image_type = '<img src="res/img/velopieton.png" height="40" width="40" alt="voie partag&eacute;e pi&eacute;ton"/>';
			else if(feuille[i].type == 4)
				image_type = '<img src="res/img/velobus.png" height="40" width="40" alt="voie partag&eacute;e bus"/>';
			else
				image_type = '';

			if(i==0)
			{
				indic = 'Prendre ';
				image = 'fleche-devant.png';
			}
			else if(feuille[i].direction < -50)
			{
				indic = 'Prendre &agrave; gauche ';	
				image = 'fleche-gauche.png';		
			}			
			else if((feuille[i].direction >= -50)&&(feuille[i].direction < -25))
			{			
				indic = 'Prendre l&eacute;g&egrave;rement &agrave; gauche ';	
				image = 'fleche-gauche2.png';
			}			
			else if((feuille[i].direction >= -25)&&(feuille[i].direction < 25))
			{
				indic = 'Continuer sur ';
				image = 'fleche-devant.png';
			}
			else if((feuille[i].direction >= 25)&&(feuille[i].direction < 50))
			{
				indic = 'Prendre l&eacute;g&egrave;rement &agrave; droite ';
				image = 'fleche-droite2.png';
			}			
			else if(feuille[i].direction >= 50)
			{
				indic = 'Prendre &agrave; droite ';
				image = 'fleche-droite.png';
			}

			if(feuille[i].nom == '')
			{
				switch (feuille[i].type) {
					case '1':
						feuille[i].nom = 'la piste cyclable';
						break;
					case '2':
						feuille[i].nom = 'la bande cyclable';
						break;
					case '3':
						feuille[i].nom = 'la voie mixte';
						break;
					default: 
						feuille[i].nom = 'la route';
						break;
				}
			} 
			else
					feuille[i].nom = '<b>'+feuille[i].nom+'</b>';

			if(dynamic)
			{
				contenu += '<td width="175">' + indic + feuille[i].nom + ' (' + feuille[i].distance + 'm)</td><td width="40">'+image_type+'</td>';
				if(feuille[i].etape==1) // Si le tronçon courant correspond à une étape. On ajoute une ligne au tableau pour marquer l'étape
				{
					add=document.getElementById("adresseEtape"+Etape).value;// On récupère l'adresse de l'étape
					contenu +='</tr><tr bgcolor="yellow"> <td width="175"> Etape : '+ add + '</td><td width="40"><img src="res/img/arrivee.png" height="25" width="25" alt="&eacute;tape" /></td>';
					Etape+=1;// On passe à la recherche de l'étape suivante
				}
			}
			else
			{
				contenu += '<td width="70"><center><img src="res/img/' + image + '" height="25" width="30" /></center></td>';
				contenu += '<td width="500"><span class=texte_feuillederoute>' + indic + feuille[i].nom + '</span></td>';
				contenu += '<td width="110"><center>' + feuille[i].distance + 'm</center></td>';
				contenu += '<td width="60"><center>'+image_type+'</center></td>';

				if(feuille[i].etape==1) // Si le tronçon courant correspond à une étape. On ajoute une ligne au tableau pour marquer l'étape
				{
					add=document.getElementById("adresse_etape"+Etape).value; // On récupère l'adresse de l'étape
					contenu +='</tr><tr bgcolor="yellow">';
					contenu += '<td width="70"><center><img src="res/img/arrivee.png" height="25" width="30" alt="&eacute;tape" /></center></td>';
					contenu += '<td width="500"><span class=texte_feuillederoute>' + add + '</span></td>';
					contenu += '<td width="110"><center> </center></td>';
					contenu += '<td width="60"><center> </center></td>';
					Etape+=1; // On passe à la recherche de l'étape suivante
				}
			}
			contenu += '</tr>';
		}
		contenu += '</table>';
		e('feuillederoute3').innerHTML = contenu;
	}
}
