/******************************************************************************/
/* RATP / DRYADE (www.dryade.net) : Ensemble des javascripts de Piviweb et Proxi                */
/******************************************************************************/


//////////////////////////// GESTION DE LA CARTO ///////////////////////////////
// Niveau d'echelle courant
var NiveauEchelle;
var AfficherReseau;
var NombreEchelle = 5; // nombre d'echelle

/**
* Mise a jour de l'echelle et des loupes et des segments
*/
function updateCartoTools()
{
	var imageElement;

	// Mise a jour de la barre de zoom (tout a "off")
   	for (var i=0; i<NombreEchelle; i++)
   	{
   		imageElement = document.images["zoom" + i];
   		if (imageElement)
   		{
	   		// On met toutes les images des changements d'echelle a off : reinitialisation
	   		imageElement.src = "/picts/moteur/piviweb/picto_segment_off.gif";
	   		// Reinitialisation des valeurs de la hauteur de l'image
	   		imageElement.height = 10;
	   		// Reinitialisation des style de l'image
	   		imageElement.className ="s_off";
	   	}
   	}

   	// Mise a jour des loupes (tout a "off")
   	document.images["moins"].src = "/picts/moteur/piviweb/picto_loupe_moins_off.gif";
    document.images["plus"].src = "/picts/moteur/piviweb/picto_loupe_plus_off.gif";

    // Mise a "on" du zoom actuel
    imageElement = document.images["zoom" + NiveauEchelle];
    if (imageElement){
	    imageElement.src = "/picts/moteur/piviweb/picto_segment_on.gif";
	   	imageElement.height = 18;
	   	imageElement.className ="";
	}

	// Mise a jour de l'echelle
	document.images["echelle"].src = "/picts/moteur/piviweb/picto_echelle_" + NiveauEchelle +  ".gif";

    // Activation des loupes au besoin
    if (NiveauEchelle > 0)
    {
    	document.images["moins"].src = "/picts/moteur/piviweb/picto_loupe_moins.gif";
    }
    if (NiveauEchelle < (NombreEchelle - 1))
    {
    	document.images["plus"].src = "/picts/moteur/piviweb/picto_loupe_plus.gif";
    }
};

/////////////////////////// GESTION DE LA CARTO PIVI (l'url de l'image change) ///////////////////////////////
function updateLienReseau(){
	var lien_masquer_reseau = new getObj("lien_masquer_reseau");
	var lien_afficher_reseau = new getObj("lien_afficher_reseau");
	var lien_grande_carte_plein = new getObj("lien_grande_carte_plein");
	var lien_grande_carte_demi = new getObj("lien_grande_carte_demi");


	// Le r?seau ne peut ?tre afficher masquer
	if (NiveauEchelle > 2)
	{
		lien_masquer_reseau.style.display="none";
		lien_afficher_reseau.style.display="none";
		lien_grande_carte_demi.style.display="none";
		lien_grande_carte_plein.style.display="block";
		return;
	}

	lien_grande_carte_plein.style.display="none";
	lien_grande_carte_demi.style.display="block";

	// Le reseau est actif
	if (AfficherReseau)
	{

		lien_afficher_reseau.style.display="none";
		lien_masquer_reseau.style.display="block";
	}
	else
	{
		lien_masquer_reseau.style.display="none";
		lien_afficher_reseau.style.display="block";
	}
}


/**
* Rechargement de la feuille de route suite (affichage.masquage du r?seau)
* actionDeplacement: l'url a requeter
*/
function masquerReseau(action){

    AfficherReseau = false;

    // Affichage du loading
	PositionLoad();

    // On ajoute une date pour obliger le naviguateur a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de l'image
    document.images["CartoImage"].src = action+"&t="+d.getTime();

	// On desactivera le loading lorsque l'image sera chargee
    document.images['CartoImage'].onload = function () { var divLoading=gE('loading'); hE(divLoading); updateLienReseau();}
};

/**
* Rechargement de la feuille de route suite (affichage.masquage du r?seau)
* actionDeplacement: l'url a requeter
*/
function afficherReseau(action){

	AfficherReseau = true;

    // Affichage du loading
	PositionLoad();

    // On ajoute une date pour obliger le naviguateur a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de l'image
    document.images["CartoImage"].src = action+"&t="+d.getTime();

	// On desactivera le loading lorsque l'image sera chargee
    document.images['CartoImage'].onload = function () { var divLoading=gE('loading'); hE(divLoading);updateLienReseau();}

};

/**
* Deplacement carto PIVI
* direction: nord, sud, est, ouest, nord est, nord ouest sud est ou sud ouest
* actionDeplacement: l'url a requeter
*/
function navigate(direction, actionDeplacement){

    // Affichage du loading
	PositionLoad();

    // On ajoute une date pour obliger le naviguateur a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de l'image
    document.images["CartoImage"].src = actionDeplacement+"&Direction="+direction+"&t="+d.getTime();

	// On desactivera le loading lorsque l'image sera chargee
    document.images['CartoImage'].onload = function () { var divLoading=gE('loading'); hE(divLoading);}
};

/**
* Change de niveau d'echelle carto pour PIVI
* level : le nouveau niveau de zoom
* actionLevel : action ? effectuer
*/
function zoom(level, actionLevel){
	// On ne travaille uniquement au besoin
	if (level == NiveauEchelle)
	{
		return;
	}

	// Mise a jour du niveau d'echelle courant
   	NiveauEchelle = level;

   	// Affichage de la bonne echelle
   	updateCartoTools();

	// Affichage du loading
	PositionLoad();

	// On ajoute une date pour obliger la page a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de l'image
    document.images["CartoImage"].src = actionLevel+"&Echelle="+level+"&t="+d.getTime();

   	// On desactivera le loading lorsque l'image sera charg?e
    document.images['CartoImage'].onload = function () { var divLoading=gE('loading'); hE(divLoading); updateLienReseau();}
};

/**
* Fonction loupe, augmentation du niveau d'echelle et de la diminution PIVI
* type = plus/moins
* action l'url a requeter
*/
function loupe(type,action)
{
	var newScale;
	if(type == "moins" && NiveauEchelle > 0)
	{
		newScale  = parseInt(NiveauEchelle) - 1;
		zoom(newScale,action);
	}
	else if(type == "plus" && NiveauEchelle < (NombreEchelle - 1))
	{
		newScale = parseInt(NiveauEchelle) + 1;
		zoom(newScale,action);
	}
};


/////////////////////////// GESTION DE LA CARTO PROXI (l'url de la page change) ///////////////////////////////

/**
* Deplacement carto PROXI
* direction: nord, sud, est, ouest, nord est, nord ouest sud est ou sud ouest
* actionDeplacement: l'url a requeter
*/
function reloadPlanProxi(action){

	// Affichage du loading
	PositionLoad();

    // On ajoute une date pour obliger le naviguateur a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de la page
    document.location.href = action + "&t="+d.getTime();
};


/**
* Deplacement carto PROXI
* direction: nord, sud, est, ouest, nord est, nord ouest sud est ou sud ouest
* actionDeplacement: l'url a requeter
*/
function navigateProxi(direction, actionDeplacement){

	// Affichage du loading
	PositionLoad();

    // On ajoute une date pour obliger le naviguateur a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de l'image
    document.forms[0].action  = actionDeplacement+"&Direction="+direction+"&t="+d.getTime();
    document.forms[0].submit();
};

/**
* Change de niveau d'echelle carto pour PROXI
* level : le nouveau niveau de zoom
* actionLevel : action ? effectuer
*/
function zoomProxi(level, actionLevel){
	// On ne travaille uniquement au besoin
	if (level == NiveauEchelle)
	{
		return;
	}

	// Mise a jour du niveau d'echelle courant
   	NiveauEchelle = level;

   	// Affichage de la bonne echelle
   	updateCartoTools();

	// Affichage du loading
	PositionLoad();

	// On ajoute une date pour obliger la page a reactualiser l'image de la carto
    var d = new Date();

    // mise a jour de la source de l'image
    document.forms[0].action = actionLevel+"&Echelle="+level+"&t="+d.getTime();
   	document.forms[0].submit();
};

/**
* Fonction loupe, augmentation du niveau d'echelle et de la diminution PROXI
* type = plus/moins
* action l'url a requeter
*/
function loupeProxi(type,action)
{
	var newScale;
	if(type == "moins" && NiveauEchelle > 0)
	{
		newScale = parseInt(NiveauEchelle) - 1;
		zoomProxi(newScale,action);
	}
	else if(type == "plus" && NiveauEchelle < (NombreEchelle - 1))
	{
		newScale = parseInt(NiveauEchelle) + 1;
		zoomProxi(newScale,action);
	}
};

/////////////////// GESTION DES FAVORIS ////////////////////

// Mise a jour du champs depart de l'itineraire par rapport au favoris selectionne
function setDepartFavoris(action, radioButtonElementsNumber)
{
	var selectionFavoris = document.RechercheLexico.listePersoDepart.selectedIndex;

	// Recuperation de la valeur selectionnee du favoris
	/*if(	selectionFavoris != 0)
	{
		var valeurFavoris = document.RechercheLexico.listePersoDepart.options[selectionFavoris].value;
		var TabFavoris = valeurFavoris.split('\t');
		var aNomDepart = TabFavoris[4];
		var aTypeDepart = TabFavoris[3];
		var aX = TabFavoris[1];
		var aY = TabFavoris[2];

		// Mise a jour du type du d?part
		for (var i = 0; i<document.RechercheLexico["Depart[Type]"].length; i++)
		{
			if(document.RechercheLexico["Depart[Type]"][i].value == aTypeDepart)
			{
				document.RechercheLexico["Depart[Type]"][i].checked = true;
			}
		}
		// Mise a jour du champ de saisie
		document.RechercheLexico["Depart[Saisie]"].value = aNomDepart;

		// Ajout des coordonnees au formulaire
		document.RechercheLexico["Depart[X]"].value = aX;
		document.RechercheLexico["Depart[Y]"].value = aY;
	}*/
	// Recuperation de la valeur selectionnee du favoris
	if(	selectionFavoris != 0){
		var valeurFavoris = document.RechercheLexico.listePersoDepart.options[selectionFavoris].value;
		var saisieArrivee = trim(document.getElementById("arrivalTextArea").value);
		var typeArrivee = getCheckedOptionRadioButton("RechercheLexico", "Arrivee[Type]", radioButtonElementsNumber);
    	document.forms[0].action  = action+"&Favorie="+selectionFavoris+"&SaisieArrivee="+saisieArrivee+"&TypeArrivee="+typeArrivee;
    	document.forms[0].submit();
	}
};

/**
* Mise a jour du champs arrivee de l'itineraire par rapport au favoris selectionne
*/
function setArriveeFavoris(action, radioButtonElementsNumber)
{
	var selectionFavoris = document.RechercheLexico.listePersoArrivee.selectedIndex;

	// Recuperation de la valeur selectionnee du favoris
	/*if(	selectionFavoris != 0)
	{
		var valeurFavoris = document.RechercheLexico.listePersoArrivee.options[selectionFavoris].value;
		var TabFavoris = valeurFavoris.split('\t');
		var aNomArrivee = TabFavoris[4];
		var aTypeArrivee = TabFavoris[3];
		var aX = TabFavoris[1];
		var aY = TabFavoris[2];

		// Mise a jour du type de l'arriv?e
		for (var i = 0; i<document.RechercheLexico["Arrivee[Type]"].length; i++)
		{
			if(document.RechercheLexico["Arrivee[Type]"][i].value == aTypeArrivee)
			{
				document.RechercheLexico["Arrivee[Type]"][i].checked = true;
			}
		}
		// Mise a jour du champ de saisie
		document.RechercheLexico["Arrivee[Saisie]"].value = aNomArrivee;

		// TODO Mise a jour des coordonn?es
		document.RechercheLexico["Arrivee[X]"].value = aX;
		document.RechercheLexico["Arrivee[Y]"].value = aY;
	}*/

	if(	selectionFavoris != 0)
	{	var valeurFavoris = document.RechercheLexico.listePersoArrivee.options[selectionFavoris].value;
		var saisieDepart = trim(document.getElementById("departureTextArea").value);
		var typeDepart = getCheckedOptionRadioButton("RechercheLexico", "Depart[Type]", radioButtonElementsNumber);
    	document.forms[0].action  = action+"&Favorie="+selectionFavoris+"&SaisieDepart="+saisieDepart+"&TypeDepart="+typeDepart;
    	document.forms[0].submit();
	}

};

/**
 * Retourne la valeur de l'option sélectionnée d'un bouton radio
 */
function getCheckedOptionRadioButton(formName, radioButtonName, elementsNumber){
	options = document.forms[formName].elements[radioButtonName];
	for (var i = 0; i < elementsNumber; i++){
		if (options[i].checked) {
			return options[i].getAttribute("value");
		}
	}
}

///////////////// GESTION DU LOADING /////////////////

/**
* Positionnenant du loading
*/
function PositionLoad()
{
	// Recherche de l'element loading
	var divLoading=gE('loading');

	// On cherche la position (x et y ) de la carto
	var xPos=findPosX(document.images["CartoImage"]);
    var yPos=findPosY(document.images["CartoImage"]);

	// On positionne l'image loading un peu plus bas que la carto
	sX(divLoading, xPos + 5);
    sY(divLoading, yPos + 5);

	// Affichage
	sE(divLoading);
};

////////////////// ROUTINES DHTML GENERIQUES ///////////////

/**
* Retourne la position d'un objet en X
*/
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
};

/**
 * Retourne la position d'un element en Y
 */
function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
};

var d=document;
var ns=d.layers;
var op=navigator.userAgent.indexOf('Opera')!=-1;

/**
* Retourne un element
*/
function gE(e,f){
   if(document.layers)
   {
      f=(f)?f:self;
      var V=f.document.layers;
      if(V[e])
      	 return V[e];
      for(var W=0;W<V.length;)
      t=gE(e,V[W++]);
      return t;
   }
   else if(d.all)
   {
      return d.all[e];
   }
   else
   {
      return d.getElementById(e);
   }
};

/**
* Positionne un objet en x
*/
function sX(e,x){ document.layers?e.left=x:op?e.style.pixelLeft=x:e.style.left=x+'px'; };

/**
* Positionne un objet en y
*/
function sY(e,y){document.layers?e.top=y:op?e.style.pixelTop=y:e.style.top=y+ 'px';};

/**
* Cache un objet
*/
function hE(e){document.layers?e.visibility='hide':e.style.visibility='hidden';};

/**
* Montre un objet
*/
function sE(e){document.layers?e.visibility='show':e.style.visibility='visible';};


//////////////// GESTION DES FOCUS //////////////////////
/**
* Place le focus sur le depart
*/
function focusDepart()
{
	document.RechercheLexico['Depart[Saisie]'].focus();
};
/**
* Place le focus sur l'arrivee
*/
function focusArrivee()
{
	document.RechercheLexico['Arrivee[Saisie]'].focus();
};

/**
* Place le focus sur l'arrivee de la saisie simplifie
*/
function focusArriveeSimplifie()
{
	document.piviwebform['Arrivee[Saisie]'].focus();
};

/**
* Place le focus sur le d?part de la saisie simplifie
*/
function focusDepartSimplifie()
{
	document.piviwebform['Depart[Saisie]'].focus();
};

/**
* Place le focus sur le premier element text ou textarea rencontre
*/
function placeFocus() {
	if (document.forms.length > 0) {
		var field = document.forms[0];
		for (i = 0; i < field.length; i++) {
			if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea")) {
				document.forms[0].elements[i].focus();
				break;
			}
		}
	}
};
/**
* Ajoute les listener a tous les champs de type text ou textarea
*/
function addEnterKeyListener() {
	for (j = 0; j < document.forms.length; j++)
	{
		var field = document.forms[j];
		for (i = 0; i < field.length; i++) {
			if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea")) {

				document.forms[j].elements[i].onkeypress=validateOnEnterKey;
			}
		}
	}
};

/**
* Ajoute les listener a tous les champs de type text ou textarea pour la saisie Simplifie
*/
function addEnterKeyListenerSaisieSimplifie() {
	// R?cup?ration du formulaire contenant les champs textes
	var field = document.forms[0];
	for (i = 0; i < field.length; i++) {
		if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea")) {
			document.forms[0].elements[i].onkeypress=validateOnEnterKeySaisieSimplifie;
		}
	}
};

///////////////// GESTION DE LA TOUCHE ENTREE ///////////////////
/**
* Valide le formulaire sur la touche entree
*/
function validateOnEnterKey(e)
{
	var code;
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	// Validation sur touche entr?e
	if (code == 13) {
		var targ;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;

		if (targ)
			targ.form.submit();
		return false;
	}
	else
		return true;
};

function validateOnEnterKeySaisieSimplifie(e)
{
	var code;
	if (!e) var e = window.event;
	if (e.keyCode) code = e.keyCode;
	else if (e.which) code = e.which;
	// Validation sur touche entr?e
	if (code == 13) {
		var targ;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
			//alert(e.target.name);
		/*if (targ)
			targ.form.submit();	*/
		if(e.target.name == "Depart[Saisie]")
		{
			proxiRequete();
		}
		else if(e.target.name == "Arrivee[Saisie]")
		{
			piviRequete();
		}
		return false;
	}
	else
		return true;
};


///////////////// GESTION DES POPUPS ////////////////////////

/*
* ouvre une fenetre centree
*
* @param string l'url de la page a ouvrir
* @param string le nom associ? a cette page (en un seul mot!)
* @param int la largeur de la page
* @param int la hauteur de la page
*/
function openCenterUrl(htmlurl,nom,width,height) {
  if (width == 'max') {
  	width = screen.width - 60;
	leftf = 0;
  }
  else
  	leftf =(screen.width-width)/2;

  if (height == 'max') {
  	height = screen.height - 60;
	topf  = 0;
  }
  else
 	topf  = (screen.height-height)/2;

  nom = nom.replace(/\s/g,"");
  var popup = window.open(htmlurl,nom,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width= '+width+',height='+height+',left='+leftf+',top='+topf);

  if (popup)
  	popup.focus();
};

/*
* Ouvre la feuille de route
*/
function openRiUrl(htmlurl,nom) {
  width = 650;
  //leftf =(screen.width-width) - 15;
 leftf =(screen.width-width)/2;

  height = screen.height - 60;
  topf  = 0;

  // Inverser les 2 lignes pour autoriser plusieurs feuille de route
  var randomValue = Math.floor((Math.random()*10000)+1);
  //var randomValue = "";

  nom = nom.replace(/\s/g,"");
  var riwindow = window.open(htmlurl,nom + randomValue ,'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width= '+width+',height='+height+',left='+leftf+',top='+topf);
  if (riwindow){
  	riwindow.focus();
  }
}

////////////////

/**
* Action pour rendre visible un div
* TODO a supprimer
*/
function montre(id)
{
   var objet = new getObj(id);
   objet.style.position="absolute";
   objet.style.top = "160px";
   objet.style.left = "192px";
   objet.style.display="block";
};

// Action pour cacher un div
function cache(id)
{
	if (document.getElementById)
    {
		document.getElementById(id).style.display="none";
	}
	else if (document.all)
	{
	    document.all[id].style.display="none";
	}
	else if (document.layers)
	{
	    document.layers[id].display="none";
	}
};

// R?cup?ration d'un objet sur la carte en fonction de son identifiants
function getObj(name)
{
  if (document.getElementById)
  {
  	this.obj = document.getElementById(name);
	this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
	this.obj = document.all[name];
	this.style = document.all[name].style;
  }
  else if (document.layers)
  {
   	this.obj = document.layers[name];
   	this.style = document.layers[name];
  }
};


/**
* Fixe le tooltip associ? au poi d'identifiant id
*/
var fixedPOI = new Array();
function fixe_poi(id, deltax, deltay)
{
   if (fixedPOI[id])
   {
   		cache(id);
   		fixedPOI[id] = 0;
   }
   else
   {
   		montre_poi(id, deltax, deltay);
      	fixedPOI[id] = 1;
   }
};

/**
* Affiche le tooltip associ? au poi d'identifiant id
*/
function montre_poi(id, deltax, deltay)
{
   // R?cup?ration du div
   var divPoi=gE(id);

   // Recup?ration des coordonn?es de l'image Plan PNG
   var x = findPosX(document.Quartier.CartoImage);
   var y = findPosY(document.Quartier.CartoImage);

   // Calcul de l'abscisse du tooltip
   var pos = x + deltax;

   // decalage de l'info bulle pour qu'elle reste dans l'image
   var tooltipSize = 200; // largeur du tooltip en pixel
   var iconSize = 22; // largeur d'un POI en pixel
   if(pos+tooltipSize>x+document.Quartier.CartoImage.width)
      pos = x+deltax-tooltipSize-iconSize;

   // Positionnement du tooltip
   sX(divPoi, pos);
   sY(divPoi, y + deltay);

   // Affichage
   divPoi.style.display="inline";

   //Tester la modification du style print
};

/**
* Masque le tooltip d'un POI
*/
function cache_poi(id)
{
   if (!fixedPOI[id])
   {
   		cache(id);
   }
};

/**
*
*/
function forcecache_poi(id)
{
   	cache(id);
   	fixedPOI[id] = 0;
};


///////////////// GESTION DES CATEGORIES ///////////////////
/**
* Ajout des listener sur le changement de selection de la cat?gories
*/
function addTypeMenuListener(){
   document.LexicoLieuCategorie["Recherche[Categorie]"].onchange = updateSubTypeMenu;
};

/**
* Mise a jour du menu des sous-categories
* S'appuie sur les tableaux de sous cat?gories (aListOfSubTypeByType) disponibles dans la page HTML
*/
function updateSubTypeMenu(selected){

   var id = document.LexicoLieuCategorie["Recherche[Categorie]"].options[document.LexicoLieuCategorie["Recherche[Categorie]"].selectedIndex].value;

   if (id == -1) {
      document.LexicoLieuCategorie["Recherche[SousCategorie]"].options.length =0;
      document.LexicoLieuCategorie["Recherche[SousCategorie]"].options[0] = new Option("Toutes",-1);
   }
   else
   {
	   document.LexicoLieuCategorie["Recherche[SousCategorie]"].options.length =0;
	   for (var i=0;i<aListOfSubTypeByType[(String)(id)].length;i++)
	   {
	      document.LexicoLieuCategorie["Recherche[SousCategorie]"].options[i] = aListOfSubTypeByType[(String)(id)][i];
	       // on regarde quelle est la valeur de la sous-categorie selectionnee precedemment
	      if(document.LexicoLieuCategorie["Recherche[SousCategorie]"].options[i].value == selected)
	      {
		    document.LexicoLieuCategorie["Recherche[SousCategorie]"].options.selectedIndex = i;
		  }
	   }
	}
};

function selectSubType(id){
	var selectElement = document.LexicoLieuCategorie["Recherche[SousCategorie]"];
	var selectOptions = selectElement.options;
	var option;
 	for (var i=0;i<selectOptions.length;i++)
	{
	      option = selectOptions[i];
	      if (option.value == id)
	      {
		    selectOptions.selectedIndex = i;
		  }
	 }
};

///////////////// GESTION DES CASES A COCHER DES TYPES ///////////////////

/**
* Ajoute les listener a tous les champs de type boite a cocher
*/
function addCheckboxListener() {
	var field = document.forms[0];
	for (i = 0; i < field.length; i++) {
		if (field.elements[i].type == "checkbox") {
			field.elements[i].onclick=function(){changerCategorie();};
		}
	}
};

/*
* Demande de soumission du formulaire du plan Proxi
* (choix des cat?gories de POI a afficher)
*/
function submitPlanQuartierForm()
{
	// Affichage du loading
	PositionLoad();
	document.Quartier.submit();
};

/*
* Demande mise a jour des cat?gories
*/
var proxiTimeout = null;
var proxiTimeoutMs = 1000; // Nombre de ms avant mise a jour de la carte
function changerCategorie()
{
	// Annulation de la demande pr?c?dente
	if (proxiTimeout != null)
	{
		window.clearTimeout(proxiTimeout);
	}
	// Prochaine soumission pr?vue dans 600 ms
	proxiTimeout = window.setTimeout("submitPlanQuartierForm()",proxiTimeoutMs);
};


function toutMasquer(action)
{
	var field = document.forms[0];
	for (i = 0; i < field.length; i++) {
		if (field.elements[i].type == "checkbox") {
			field.elements[i].checked=false;
		}
	}
	// Affichage du loading
	PositionLoad();

	document.forms[0].action = action;
	document.forms[0].submit();
};

function toutAfficher(action)
{
	var field = document.forms[0];
	for (i = 0; i < field.length; i++) {
		if (field.elements[i].type == "checkbox") {
			field.elements[i].checked=true;
		}
	}
	// Affichage du loading
	PositionLoad();

	document.forms[0].action = action;
	document.forms[0].submit();
};



///////////////////////// ACTION PIVI //////////////////////////

/**
* Ferme la page ouvarnte
*/
function close_previous_window()
{
	if (window.opener && !window.opener.closed)
	{
		window.opener.close();
	}
};

/**
*
*/
function trajetRetour(action){
	if (window.opener && !window.opener.closed)
	{
		window.opener.parent.location=action;
		window.opener.parent.focus();
		self.close();
	}
	else {
		window.location = action;
	}
};

/**
*
*/
function modifierRecherchePivi(action){
	if (window.opener && !window.opener.closed)
	{
		window.opener.parent.location=action;
		window.opener.parent.focus();
		self.close();
	}
	else {
		window.location = action;
	}
};

///////////////////////// ACTION FORMULAIRE SIMPLIFIE //////////////////////////

/**
* Requete proxi depuis le formulaire de saisie simplifi? de la home page
*/
function proxiRequete(){

	var aForm = document.proxiform;
	var typeSelected ;
	// R?cup?ration du type s?lectionn?
	for(var i=0;i<document.piviwebform["Depart[Type]"].length;i++)
	{
		if(document.piviwebform["Depart[Type]"][i].checked == true)
		{
			typeSelected = document.piviwebform["Depart[Type]"][i].value;
		}
	}

	//aForm["exec"].value = "proxi";
	//aForm["cmd"].value = "RechercheLexico";
	//aForm["Type"].value = typeSelected;

	// l'url proxi a requeter depend du type de lexico
	//switch (document.piviwebform["Depart[Type]"].value)
	switch (typeSelected)
	{
		case "RUE" : aForm["cmd"].value = "LexicoAdresse";break;
		case "ARRET" : aForm["cmd"].value = "LexicoStation";break;
		case "LIEU" : aForm["cmd"].value = "LexicoLieu";break;
	}

	aForm["Recherche[Saisie]"].value = document.piviwebform["Depart[Saisie]"].value;

	aForm.submit();
};

/**
* Acc?de a la page d'acceuil Piviweb depuis le formulaire de saisie simplifi? de la home page
*/
function preRemplissagePiviweb(){
	var aForm = document.piviwebavanceform;

	// On veut propager le depart et l'arriv?e eventuellement saisie de la home page
	aForm.nom_dep.value = document.piviwebform["Depart[Saisie]"].value;
	// R?cup?ration du type s?lectionn? pour le depart

	aForm.type_dep.value = document.piviwebform["Depart[Type]"].value;

	aForm.nom_arr.value = document.piviwebform["Arrivee[Saisie]"].value;
	aForm.type_arr.value = document.piviwebform["Arrivee[Type]"].value;
	aForm.submit();
};

function rech_avancee()
{
	var aForm = document.piviwebavanceform;

	// On veut propager le depart et l'arriv?e eventuellement saisie de la home page
	aForm.nom_dep.value = document.piviwebform["Depart[Saisie]"].value;
	// R?cup?ration du type s?lectionn? pour le depart
	for(var i=0;i<document.piviwebform["Depart[Type]"].length;i++)
	{
		if(document.piviwebform["Depart[Type]"][i].checked == true)
		{
			aForm.type_dep.value = document.piviwebform["Depart[Type]"][i].value;
		}
	}

	aForm.nom_arr.value = document.piviwebform["Arrivee[Saisie]"].value;
	//aForm.type_arr.value = document.piviwebform["Arrivee[Type]"].value;
	for(var i=0;i<document.piviwebform["Arrivee[Type]"].length;i++)
	{
		if(document.piviwebform["Arrivee[Type]"][i].checked == true)
		{
			aForm.type_arr.value = document.piviwebform["Arrivee[Type]"][i].value;
		}
	}
	//aForm.action = action;
	aForm.submit();
};

function piviRequete()
{
	var aForm = document.piviwebform;

	// On veut propager le depart et l'arriv?e eventuellement saisie de la home page
	aForm.nom_dep.value = aForm["Depart[Saisie]"].value;
	// R?cup?ration du type s?lectionn? pour le depart
	for(var i=0;i<aForm["Depart[Type]"].length;i++)
	{
		if(aForm["Depart[Type]"][i].checked == true)
		{
			aForm.type_dep.value = aForm["Depart[Type]"][i].value;
		}
	}
	//aForm.type_dep.value = document.piviwebform["Depart[Type]"].value;

	aForm.nom_arr.value = aForm["Arrivee[Saisie]"].value;
	//aForm.type_arr.value = document.piviwebform["Arrivee[Type]"].value;
	for(var i=0;i<aForm["Arrivee[Type]"].length;i++)
	{
		if(aForm["Arrivee[Type]"][i].checked == true)
		{
			aForm.type_arr.value = aForm["Arrivee[Type]"][i].value;
		}
	}

	aForm.submit();
};

/**
* Script permettant d'envoyer une url de plan de quartier à un ami
*/
function envoyer_ami(url,nom, type, x, y)
{
	// Remplacement des espaces par le caract?re + pour le nom du lieu a placer dans l'url
	var lieu = nom.replace(/ /g, '+');
	// Pr?paration de l'url
	var theLink = escape(url+"&nom="+lieu+"&type="+type+"&x="+x+"&y="+y);
	// Envoi du lien mailto
	document.location.href = "mailto:?subject=Plan de Quartier: "+nom+"&body=%0D%0ACher(e) internaute,%0D%0A%0D%0APour visualiser le plan de quartier "+nom+", cliquez sur le lien ci-dessous ou recopiez-le dans votre navigateur : %0D%0A%0D%0A"+theLink+"%0D%0A%0D%0ACe plan vous est fourni par http://www.ratp.fr.%0D%0A%0D%0A A bientôt sur nos lignes !";
};

/////////////////////////////// XITI ///////////////////////////////

/**
 * writeXitiTagWith : ecrit le tag xiti en fonction des parametres
 *      passes en arguments :
 *      s correspond au code client xiti (RATP = 63390)
 *      s2 correspond a la rubrique (= 3 pour la rubrique "se deplacer")
 *      p correspond a l'intitule donne a la page courante (ex: PIVI>SAISIE)
 */
function writeXitiTag (s,s2,p)
{
	hsh = new Date();
	hsd = document;
	hsi = '<img name="xiti_img" width="1" height="1" src="http://logc5.xiti.com/hit.xiti?s=' + s + '&s2=' + s2;
	hsi += '&p=' + p + '&hl=' + hsh.getHours() + 'x' + hsh.getMinutes()+ 'x' + hsh.getSeconds();
	if(parseFloat(navigator.appVersion)>=4)
	{
		Xiti_s=screen;
		hsi += '&r=' + Xiti_s.width + 'x' + Xiti_s.height +'x'+Xiti_s.pixelDepth + 'x' + Xiti_s.colorDepth;
	}
	aXitiUrl= hsi + '&ref=' + hsd.referrer.replace(/&/g, '$') + '" >' ;
	hsd.writeln(aXitiUrl);
	//Pour l'affichage du tag Xiti dans la page, decommenter la ligne suivante
	//hsd.writeln("<B>" + p + "</B>");

	//Pour tester le bon envoi du tag Xiti, decommenter la ligne suivante
	//document.xiti_img.onload = new Function ('alert("image xiti recue : "+ aXitiUrl);');
};


/**
* Ecriture du tag Xiti de Horaires
*/
function writeHoraireXitiTag(service, action, errors)
{
	var aCodeClient = "63390";
	var aSection = "9";
	var aPrefix = "HORAIRES";
	var aSeparator = "_";

	if (errors !='')
	{
		action += "_PanneOuErreur";
	}


	aXitiTag = aPrefix + aSeparator + service + aSeparator + action;

	writeXitiTag(aCodeClient,aSection,aXitiTag);

}

/**
* Ecriture du tag Xiti de Proxi
*/
function writeProxiXitiTag(profil,request_action,current_action,state)
{
	// D?finitions
	var aCodeClient = "63390";
	var aSection = "15";
	var aPrefix = "PROXI";
	var aSeparator = "_";

	// Actions qui n'ont pas de templates mais qui doivent etre tracees
	var anActionList = new Array();
	anActionList["ModifierRecherche"]=1;
	anActionList["NouvelleRecherche"]=1;
	anActionList["NouvelleRechercheAdresse"]=1;
	anActionList["NouvelleRechercheLieu"]=1;
	anActionList["NouvelleRechercheLieuCategorie"]=1;
	anActionList["NouvelleRechercheStation"]=1;
	anActionList["SelectionType"]=1;
	anActionList["ToutCocher"]=1;
	anActionList["ToutDecocher"]=1;
	anActionList["ChangementEchelle"]=1;
	anActionList["Deplacement"]=1;

	// Construction du Tag
	var aXitiAction;
	if (anActionList[request_action]){
		aXitiAction = request_action;
	}
	else
	{
		aXitiAction = current_action;
	}

	var aXitiTag;
	if (state == "")
	{
		aXitiTag = aPrefix + aSeparator + profil + aSeparator + aXitiAction;
	}
	else
	{
		aXitiTag = aPrefix + aSeparator + profil + aSeparator + aXitiAction + aSeparator + state;
	}
	// Ecriture du Tag
	writeXitiTag(aCodeClient,aSection,aXitiTag);
};


/**
* Ecriture du tag Xiti de Proxi
*/
function writePiviwebXitiTag(profil,request_action,current_action,departureType,departureState,arrivalType, arrivalState, itiState)
{
	// Definitions
	var aCodeClient = "63390";
	var aSection = "14";
	var aPrefix = "PIVI";
	var aSeparator = "_";

	// Actions qui n'ont pas de templates mais qui doivent ?tre trac?es
	var anActionList = new Array();
	anActionList["AjoutFavoris"]=1;
	anActionList["EnPartir"]=1;
	anActionList["FeuilleDeRouteHabituel"]=1;
	anActionList["FixeArriveeFavoris"]=1;
	anActionList["FixeDepartFavoris"]=1;
	anActionList["HorairePrecedent"]=1;
	anActionList["HoraireSuivant"]=1;
	anActionList["ModifierRecherche"]=1;
	anActionList["NouvelleRechercheAction"]=1;
	anActionList["PreRemplissage"]=1;
	anActionList["RechercheItiConseille"]=1;
	anActionList["RechercheItineraire"]=1;
	anActionList["RecherchePerturbation"]=1;
	anActionList["SuppressionFavoris"]=1;
	anActionList["TrajetRetour"]=1;
	anActionList["YAller"]=1;
	anActionList["Lexico"]=1;

	var anInputActionList = new Array();
	anInputActionList["Lexico"]=1;
	anInputActionList["YAller"]=1;
	anInputActionList["EnPartir"]=1;
	anInputActionList["PreRemplissage"]=1;
	anInputActionList["FixeDepartFavoris"]=1;
	anInputActionList["FixeArriveeFavoris"]=1;
	anInputActionList["ModifierRecherche"]=1;
	anInputActionList["NouvelleRechercheAction"]=1;
	anInputActionList["TrajetRetour"]=1;

	// Construction du Tag
	var aXitiAction;
	if (anActionList[request_action]){
		aXitiAction = request_action;
	}
	else
	{
		aXitiAction = current_action;
	}

	var aXitiTag;
	aXitiTag = aPrefix + aSeparator + profil + aSeparator + aXitiAction;

	// Saisie, on trace les etats
	if (anInputActionList[aXitiAction])
	{
		if (departureState != "" && arrivalState != "")
			aXitiTag += aSeparator + departureState + aSeparator + arrivalState ;
	}
	else
	// Itineraire, on trace les types
	{
		if (departureType != "" && arrivalType != "" && itiState != "")
			aXitiTag += aSeparator + departureType + aSeparator + arrivalType + aSeparator + itiState;
	}

	// Ecriture du Tag
	writeXitiTag(aCodeClient,aSection,aXitiTag);
};
/**
*
*  tools functions trim, ltrim, rtrim
*
**/
function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
