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"), "");
}

function est_mobile()
	{
	if (screen.width <= 320)
		return 'mobile' ;
	else
		return 'ordinateur' ;
	}
	
function Remplace(expr,a,b) {
  var i=0
  while (i!=-1) {
	 i=expr.indexOf(a,i);
	 if (i>=0) {
		expr=expr.substring(0,i)+b+expr.substring(i+a.length);
		i+=b.length;
	 }
  }
  return expr
}// Coller texte dans le champ recherche
function coller_texte_rech(texte)
{
	document.rech_google.q.value = texte ;
	return true;
}

// Calcul nombre de jours entre deux dates
function bissextile(annee)
{
if (annee%4==0 && annee %100!=0 || annee%400==0) return true; else return false
}

function nb_01_01(date)
{
nb_mois=new Array(13);
nb_mois=[,0,31,59,90,120,151,181,212,243,273,304,334];
j=eval(date[0]) ; m=eval(date[1]) ; a=eval(date[2]);
nb=nb_mois[m]+j-1 ;
if (bissextile(a) && m>2) nb++;
return nb;
}

function nb_jour_annee(a1,a2)
{
n=0;
if (a1==a2) n=0 ; else
for (i=a1; i<a2; i++) {n += 365; if (bissextile(i)) n++}
return n;
}

// Fonction appelée avec en paramètres 2 tableaux [j,m,a debut] et [j,m,a fin]
// Renvoie le nombre de jours
function nb_jour(date1,date2)
{
a1=eval(date1[2]) ; a2=eval(date2[2]) ; 
nb=nb_jour_annee(date1[2],date2[2]) - nb_01_01(date1) + nb_01_01(date2);
return nb;
}
/*===================================*/
function controle_motpasse(chaine)
{
var c ;
for (var i=0 ; i<(chaine.length) ; i++)
	{
	// On contrôle que les caractères sont maj, min, chiffres, _, -
	c = chaine.charAt(i);
	if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || (c >= "0" && c <= "9"))
		{
		}
	else
		{
		return false ;
		}
	}
	return true;
}
/*===================================*/
function controle_chiffres_motpasse(chaine)
{
// On crée l'expression régulière
var reg = new RegExp("([^0-9])", "g");
// On crée la nouvelle chaîne
chaine = chaine.replace(reg, "");
// et on affiche le résultat
if(chaine.length <2 || chaine.length > 3)
	{
	return false ;
	}
}
/*===================================*/
function controle_comment (comment,longmax)
{
if (comment.length > longmax)
	{
	alert ("Le commentaire ne doit pas dépasser " + longmax + " caractères");
	return false;
	}
}
/*===================================*/
function choix_nat_billet(choix)
{
document.depose_prems.nat_billet.options[choix].selected = true;
}
/*===================================*/
function verif_mail(adr_mail)
{
var reg = new RegExp("^[\\w\\-]+(\\.[\\w\\-]+)*@[\\w\\-]+(\\.[\\w\\-]+)*\\.[\\w\\-]{2,}$", "i");
if (reg.test(adr_mail))
	{return adr_mail;}
	else
	{return false;}
}
/*===================================*/
/* Fonction qui vérifie qu'il n'y a pas plus de 3 chiffres dans ident */
function verif_nbre_chiffres(ident)
{
var reg = new RegExp("^([^0-9]{0,10}[0-9]){4,10}$", "i");
if (reg.test(ident))
	{return true;}
	else
	{return false;}
}
/*===================================*/
// Contrôle et formatage d'une heure au format <HH>h<MM>
// à partie de H ou HH ou HHh ou HhM ou HhMM ou HHhM ou HHhMM
// On donne en paramètres d'entrée: la chaine 'heure' à contrôler
// en retour: l'heure au format complet
// si ce n'est pas le bon format en entrée on renvoie false;
function controle_format_heure(heure)
{
// On teste si l'heure d'arrivée est correcte lorsqu'elle est présente
var reg1 = new RegExp("^[0-2]?[0-9][h][0-5][0-9]$", "i");
var reg2 = new RegExp("^[0-2]?[0-9][h][0-9]$", "i");
var reg3 = new RegExp("^[0-2]?[0-9][h]$", "i");
var reg4 = new RegExp("^[0-2]?[0-9]$", "i");
heure = heure.toLowerCase() ;
if ((heure != '') && !reg1.test(heure))
	{
	if((heure != '') && !reg2.test(heure))
		{
		if((heure != '')&& !reg3.test(heure))
			{
			if((heure != '') && !reg4.test(heure))
				{
				heure = false ;
				}
			else			
				{
				// Format [H]H: on ajoute 0 devant si longueur = 1 et h00 après
				if (heure.length == 1) heure = '0' + heure ;
				heure += 'h00' ;
				}
			}			
		else
			{
			// Format [H]Hh: on ajoute 0 devant si longueur = 2 et 00 après le h 
			if (heure.length == 2) heure = '0' + heure ;
			heure +=  '00' ;
			heure = Remplace (heure, 'H', 'h') ;
			}
		}			
	else
		{
		// Format [H]HhM: on ajoute un 0 devant si longueur = 3 et un 0 après le h 
		if (heure.length == 3) heure = '0' + heure ;
		heure = heure.substr(0,3) + '0' + heure.substr(3,1) ;
		heure = Remplace (heure, 'H', 'h') ;
		}
	}
else
	{
	// Format [H]HhMM: on ajoute un 0 devant si longueur = 4
	if (heure.length == 4) heure = '0' + heure ;
	heure = Remplace (heure, 'H', 'h') ;
	}
return heure ;
}
/*===================================*/
// On teste si le numéro du train est un entier si présent
function est_num_train(num_train)
{
var reg = new RegExp("^[0-9]{3,5}$", "i");
if (!reg.test(num_train))
  	{return false;}
	else
	{return true;}
}
/*===================================
function changeCouleur(ligne)
  {
  ligne.bgColor = '#CCCCCC';
  }
===================================
function remetCouleur(ligne)
  {
  ligne.bgColor = '#FFFFFF';
  }
===================================*/
/********** inutilisée (2009-12-05)
function Change_v_dep()
	{
	// On met une valeur dans le champ choix_v_dep pour qu'il soit pris en compte comme choix dans init_var
	// lorsque l'on change la ville de départ
	// sinon c'est le bouton déposer qui sera pris en compte
	document.depose_prems.choix_v_dep_billet.value = "OK" ;
	document.depose_prems.submit() ;
//	document.depose_prems.submit(URL) ;
	//return true;
	}
********/
/*===================================*/
/********** inutilisée (2009-12-05)
function Change_ville_dep()
	{
	// On met une valeur dans le champ choix_ville_dep_billet pour qu'il soit pris en compte comme choix dans init_var
	// lorsque l'on change la ville de départ
	// sinon c'est le bouton déposer qui sera pris en compte
	document.recherche_prems.choix_ville_dep_billet.value = "OK" ;
	document.recherche_prems.submit() ;
	}
********/
/*===================================*/
/********** inutilisée (2009-12-05)
function Change_av_dep()
	{
	// On met une valeur dans le champ choix_av_dep pour qu'il soit pris en compte comme choix dans init_var
	// lorsque l'on change la ville de départ
	// sinon c'est le bouton déposer demande qui sera pris en compte
	document.depose_demande.choix_av_dep_demande.value = "OK" ;
	document.depose_demande.submit() ;
//	document.depose_demande.submit(URL) ;
	//return true;
	}
********/
/*===================================*/
/********** inutilisée (2009-12-05)
function Change_dv_dep()
	{
	// On met une valeur dans le champ choix_dv_dep_demande pour qu'il soit pris en compte comme choix dans init_var
	// lorsque l'on change la ville de départ
	// sinon c'est le bouton déposer qui sera pris en compte
	document.recherche_demande.choix_dv_dep_demande.value = "OK" ;
	document.recherche_demande.submit() ;
	}
********/
/*===================================*/
function SetDateMySql (jour, mois, annee)
  {
  // On reconstitue la date au format MySQL à partir de Jour Mois Année
  return (annee + "-" + mois + "-" + jour) ;
  }
/*===================================*/
function SetDateMySql_am (jour, annee_mois)
  {
  // On reconstitue la date au format MySQL à partir de Jour Mois Année
  return (annee_mois + "-" + jour) ;
  }
/*===================================*/
function IsDateValid (jour, mois, annee)
  {
  // On vérifie que les trois champs jour mois et année sont des entiers
  if (isNaN(parseInt(jour)) || isNaN(parseInt(mois)) || isNaN(parseInt(annee))) return false;

  // On crée la date correspondante. Attention, les mois sont étalonnés de 0 à 11
   var unedate = new Date(annee, mois-1, jour);
  // Bug de l'an 2000 oblige, lorsque je récupère l'année, je n'ai pas toujours 4 chiffres selon les navigateurs, je rectifie donc ici le tir.
   var jj = unedate.getDate();
   var mm = unedate.getMonth()+1; 
   var yy = unedate.getYear();
   if ((Math.abs(yy)+"").length < 4) yy = yy + 1900;
   
  //alert("Date lue: "+jj+"-"+mm+"-"+yy+" pour "+eval(jour)+"-"+eval(mois)+"-"+eval(annee));
  // Il ne reste plus qu'à vérifier si le jour, le mois et l'année obtenus sont les mêmes que ceux saisis par l'utilisateur.
   return ((jj == jour) && (mm == mois) && (yy == annee));
}
/*===================================*/
function date_courante()
{
var ladate=new Date();
var jj = ladate.getDate();
var mm = ladate.getMonth()+1; 
var yy = ladate.getFullYear();
if (jj < 10) jj = "0" + jj ;
if (mm < 10) mm = "0" + mm ;
return (yy + "-" + mm + "-" + jj) ;
}

/*===================================*/
function heure_courante()
{
var ladate=new Date()
var hh = ladate.getHours();
if (hh < 10) {hh = "0" + hh}
var mm = ladate.getMinutes();
if (mm < 10) {mm = "0" + mm}
return (hh + ":" + mm + ":00") ;
}

//======================================
// Fonction qui masque le bouton qui vient d'être cliqué
function masque_btn(nom_form)
	{
	// Le nom du bouton est dans name_btn (choix_....) et le texte est dans text_btn
	// On cache le bouton
	document.forms[nom_form].elements[name_btn].type = 'hidden' ;
	// On montre l'élément de remplacement dont l'id est égal à name_btn.substring(6) (sans "choix_")
	document.getElementById(name_btn.substring(6)).style.display = 'inline' ;
	}

//=================================
// Fonction qui rétablit le bouton cliqué (appelé par valider_...
function retablir_btn(formulaire, text_btn, name_btn)
	{
	formulaire[name_btn].value=text_btn ;
	formulaire[name_btn].disabled = false ;
	formulaire[name_btn].type = 'submit' ;
	// On enleve 'choix_'
	document.getElementById(name_btn.substring(6)).style.display = 'none' ;
	} // de la fonction retablir_btn
	
/*===================================*/
function valider_rech_prems(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
/*****
	alert(window.event.keyCode) ;
	// On regarde d'abord si l'on a validé le bouton échange avec la touche Enter
	if (document.recherche_prems.L_lebouton.value != 'Rechercher billet')
		{
		if(window.event.keyCode == 13)
			{
			return false;
			}
		}
********/
	document.recherche_prems.ville_dep.value = trim(document.recherche_prems.ville_dep.value, ' ') ;
	
	// Si ville depart différente de celle précédemment entrée on contrôle
	if (typeof(v_dep_prec) != 'undefined' && document.recherche_prems.ville_dep.value != v_dep_prec)
		{
		// On vérifie que les champs ne sont pas vides
		if (document.recherche_prems.ville_dep.value.length < 3)
			{
			alert("La ville de départ n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
		// On vérifie que les villes ont bien été sélectionnées dans la liste
		if (clic_liste['v_dep_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville de départ dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.recherche_prems.ville_dep.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_dep_prec) != 'undefined' && document.recherche_prems.ville_dep.value != v_dep_prec)
 	
	document.recherche_prems.ville_arr.value = trim(document.recherche_prems.ville_arr.value, ' ') ;
	
	// Si ville arrivée différente de celle précédemment entrée on contrôle
	if (typeof(v_arr_prec) != 'undefined' && document.recherche_prems.ville_arr.value != v_arr_prec)
		{
		if (document.recherche_prems.ville_arr.value.length < 3)
			{
			alert("La ville d'arrivée n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
			
		if (clic_liste['v_arr_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville d'arrivée dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.recherche_prems.ville_arr.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_arr_prec) != 'undefined' && document.recherche_prems.ville_arr.value != v_arr_prec)
		
	 // On vérifie si les deux villes sont différentes
	if (document.recherche_prems.ville_dep.value == document.recherche_prems.ville_arr.value)
		{
		alert("Les villes de départ et d'arrivée doivent être différentes");
		retour = false;
		}
		
	// On ne vérifie que si on a appuyé sur le bouton Rechercher
	// On ne fait la suite du contrôle que s'il s'agit de la validation du formulaire
	if (document.recherche_prems.L_lebouton.value == 'Rechercher billet')
		{
		document.recherche_prems.L_lebouton.value = '' ;
		
		// On vérifie si la date est valide
		if (IsDateValid(document.recherche_prems.L_jour_dep.value, document.recherche_prems.L_mois_annee_dep.value.substr(5,2), document.recherche_prems.L_mois_annee_dep.value.substr(0,4))==false)
			{
			// on on affiche un message
			alert("La date de départ n'est pas valide");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// on constitue la date au format MySQL dans le champ date
			var date_depart = SetDateMySql_am (document.recherche_prems.L_jour_dep.value, document.recherche_prems.L_mois_annee_dep.value);
			// On teste qu'elle n'est pas dépassée
			if (date_depart < date_courante())
				{
				alert("La date de départ est dépassée");
				retour = false;
				}
			}
		// On vérifie que l'heure de fin est plus grande que l'heure de début
		if (document.recherche_prems.L_h_fin_r.value <= document.recherche_prems.L_h_deb_r.value)
			{
			alert("L'heure de fin de la tranche horaire de départ doit être plus grande que l'heure de début");
			retour = false;
			}
		}
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.recherche_prems, text_btn, name_btn) ;
//		document.recherche_prems[name_btn].value=text_btn ;
//		document.recherche_prems[name_btn].disabled = false ;
//		document.recherche_prems[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_rech_prems

/*=================================== Inutile car recherche depuis liste déroulante
function valider_rech_demande(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	document.recherche_demande.L_lebouton.value = '' ;
	
	document.recherche_demande.dv_dep.value = trim(document.recherche_demande.dv_dep.value, ' ') ;
	// Si ville départ différente de celle précédemment entrée on contrôle
	if (typeof(v_dep_prec) != 'undefined' && document.recherche_demande.dv_dep.value != v_dep_prec)
		{
		// On vérifie si les champs ville sont renseignés
		if (document.recherche_demande.dv_dep.value.length < 3)
			{
			alert("La ville de départ n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
		// On vérifie que les villes ont bien été sélectionnées dans la liste
		//alert(clic_liste['v_dep_sel']+' - '+clic_liste['v_arr_sel']) ;
		if (clic_liste['v_dep_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville de départ dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.recherche_demande.dv_dep.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_dep_prec) != 'undefined' && document.recherche_demande.dv_dep.value != v_dep_prec)
		
	document.recherche_demande.dv_arr.value = trim(document.recherche_demande.dv_arr.value, ' ') ;
	// Si ville arrivée différente de celle précédemment entrée on contrôle
	if (typeof(v_arr_prec) != 'undefined' && document.recherche_demande.dv_arr.value != v_arr_prec)
		{
		if (document.recherche_demande.dv_arr.value.length < 3)
			{
			alert("La ville d'arrivée n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
		if (clic_liste['v_arr_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville d'arrivée dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.recherche_demande.dv_arr.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_arr_prec) != 'undefined' && document.recherche_demande.dv_arr.value != v_arr_prec)
	
	// On ne vérifie que si on a appuyé sur le bouton Rechercher
	if (document.recherche_demande.L_lebouton.value == 'Rechercher demande')
		{
		// On vérifie si la date est valide
		if (IsDateValid(document.recherche_demande.L_dj_dep.value, document.recherche_demande.L_mois_annee_dep.value.substr(5,2), document.recherche_demande.L_mois_annee_dep.value.substr(0,4))==false)
			{
			// on on affiche un message
			alert("La date de départ n'est pas valide");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// on constitue la date au format MySQL dans le champ date
			var date_depart = SetDateMySql_am (document.recherche_demande.L_dj_dep.value, document.recherche_demande.L_mois_annee_dep.value);
			// On teste qu'elle n'est pas dépassée
			if (date_depart < date_courante())
				{
				alert("La date de départ est dépassée");
				retour = false;
				}
			}
		}
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.recherche_demande, text_btn, name_btn) ;
//		document.recherche_demande[name_btn].value=text_btn ;
//		document.recherche_demande[name_btn].disabled = false ;
//		document.recherche_demande[name_btn].type = 'submit' ;
		// On enleve 'choix_'
		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
//		return false ;
		}
	} // de valider valider_rech_demande

===================================*/

/*===================================
function valider_supprimer(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
// On teste le bouton qui a été cliqué
// N'est plus utilisée car impossible de récupérer value si + de 1 bouton
if (document.supprimer.supprimer.value != '')
	{
	// C'est le bouton supprimer qui a été cliqué
	// On demande confirmation
	if (confirm("Voulez-vous vraiment supprimer ce billet ?"))
		{ // Clic sur OK
        return true;
    	}
	else
		{
		return false;
		}
	}
else
	{
	// C'est le bouton contacter qui a été cliqué
	}
}
===================================*/

/*===================================*/
function valider_demande(statut_demande, nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On ne vérifie que si on a appuyé sur le bouton Déposer ou Modifier
	//alert(statut_demande) ;
	
	document.depose_demande.av_dep.value = trim(document.depose_demande.av_dep.value, ' ') ;
	// Si ville depart différente de celle précédemment entrée on contrôle
	if (typeof(v_dep_prec) != 'undefined' && document.depose_demande.av_dep.value != v_dep_prec)
		{
		if (document.depose_demande.av_dep.value.length < 3)
			{
			alert("La ville de départ n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
		// On vérifie que les villes ont bien été sélectionnées dans la liste
		//alert(clic_liste['av_dep_sel']+' - '+clic_liste['av_arr_sel']) ;
		if (clic_liste['av_dep_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville de départ dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.depose_demande.av_dep.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_dep_prec) != 'undefined' && document.depose_demande.av_dep.value != v_dep_prec)
	
	document.depose_demande.av_arr.value = trim(document.depose_demande.av_arr.value, ' ') ;
	// Si ville depart différente de celle précédemment entrée on contrôle
	if (typeof(v_arr_prec) != 'undefined' && document.depose_demande.av_arr.value != v_arr_prec)
		{
		if (document.depose_demande.av_arr.value.length < 3)
			{
			alert("La ville d'arrivée n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
		if (clic_liste['av_arr_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville d'arrivée dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.depose_demande.av_arr.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_arr_prec) != 'undefined' && document.depose_demande.av_arr.value != v_arr_prec)
	
	if (document.depose_demande.L_lebouton.value == 'deposer' || document.depose_demande.L_lebouton.value == 'modifier')
		{
		// On efface le champ bouton
		document.depose_demande.L_lebouton.value = '' ;
		// on constitue la date au format MySQL dans le champ date
		//	var ad_depart = SetDateMySql (document.depose_demande.L_aj_dep.value, document.depose_demande.L_am_dep.value, document.depose_demande.L_aa_dep.value);
		var ad_depart = SetDateMySql_am (document.depose_demande.L_aj_dep.value, document.depose_demande.L_ama_dep.value);	// on constitue la date au format MySQL dans le champ date
		//	var aad_depart = SetDateMySql (document.depose_demande.L_aaj_dep.value, document.depose_demande.L_aam_dep.value, document.depose_demande.L_aaa_dep.value);
		var aad_depart = SetDateMySql_am (document.depose_demande.L_aaj_dep.value, document.depose_demande.L_aama_dep.value);
		// On vérifie si la date de début de période est valide
		//	  if (IsDateValid(document.depose_demande.L_aj_dep.value, document.depose_demande.L_am_dep.value, document.depose_demande.L_aa_dep.value)==false)
		if (IsDateValid(document.depose_demande.L_aj_dep.value, document.depose_demande.L_ama_dep.value.substr(5,2), document.depose_demande.L_ama_dep.value.substr(0,4))==false) 
			{
			// on on affiche un message
			alert("La date de début de la période n'est pas valide");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// On teste qu'elle n'est pas dépassée
			if (ad_depart < date_courante() && statut_demande == 'saisie')
				{
				alert("La date de début de la période est dépassée");
				retour = false;
				}
			}  
		// On vérifie si la date de fin de période est valide
		if (IsDateValid(document.depose_demande.L_aaj_dep.value, document.depose_demande.L_aama_dep.value.substr(5,2), document.depose_demande.L_aama_dep.value.substr(0,4))==false)
			{
			// on affiche un message
			alert("La date de fin de la période n'est pas valide");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// On teste qu'elle n'est pas avant la date de début de période
			if (aad_depart < ad_depart)
				{
				alert("La date de fin de la période est avant celle du début");
				retour = false;
				}
			}
			
		// On vérifie que le nombre de jours de la demande n'excède pas 3
		if (nb_jour([document.depose_demande.L_aj_dep.value, document.depose_demande.L_ama_dep.value.substr(5,2), document.depose_demande.L_ama_dep.value.substr(0,4)],
		[document.depose_demande.L_aaj_dep.value, document.depose_demande.L_aama_dep.value.substr(5,2), document.depose_demande.L_aama_dep.value.substr(0,4)]) > 3)
			{
			alert("La période de la demande ne peut pas excéder 3 jours");
			retour = false;
			}
		// On vérifie si le champ e-mail est rempli
		if(document.depose_demande.ae_mail.value != "")
			{
			// les données sont ok, on continue   
	
			// On vérifie la syntaxe de l'adresse e-mail
			adr_mail = verif_mail(document.depose_demande.ae_mail.value);
			if (adr_mail==false)
				{
				alert("Adresse e-mail incorrecte");
				retour = false;
				}
			else
				{
				document.depose_demande.ae_mail.value = adr_mail ;
				}
			}
		else 
			{
			// on affiche un message
			alert("Vous devez renseigner le champ 'Adresse e-mail'");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			} 
	
		// On teste que l'heure de debut est avant l'heure de fin
		if (document.depose_demande.L_h_deb.value >= document.depose_demande.L_h_fin.value)
			{
			alert("L'heure de fin de la tranche horaire de départ doit être plus grande que l'heure de début");
			retour = false;
			}
	
		}
	
	// On vérifie si le champ atel est rempli (pas obligatoire)
	if(document.depose_demande.atel.value != "")
		{
		if((document.depose_demande.atel.value.length) < 9 )
			{
			alert ("Numéro de téléphone incomplet");
			retour = false;
			}
		} // de if(document.depose_prems.tel1.value != "")
			
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.depose_demande, text_btn, name_btn) ;
//		document.depose_demande[name_btn].value=text_btn ;
//		document.depose_demande[name_btn].disabled = false ;
//		document.depose_demande[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_demande
	
/*===================================*/
// Validation du formulaire form_select_gare affiche_ajout_gare.php
function valider_select_gare(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On contrôle qu'une gare est sélectionnée
	if (document.form_select_gare.L_code_gare.value == "")
		{
		alert("Vous devez sélectionner une gare.");
		retour = false;
		}
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_select_gare, text_btn, name_btn) ;
//		document.form_select_gare[name_btn].value=text_btn ;
//		document.form_select_gare[name_btn].disabled = false ;
//		document.form_select_gare[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de valider_select_gare

/*===================================*/
// Validation du formulaire form_ajout_gare affiche_ajout_gare.php
function valider_ajout_gare(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On contrôle qu'une gare est indiquée
	if (document.form_ajout_gare.L_gare.value.length < 2)
		{
		alert("Vous devez indiquer un nom de gare d'au moins 2 lettres.");
		retour = false;
		}
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_ajout_gare, text_btn, name_btn) ;
//		document.form_ajout_gare[name_btn].value=text_btn ;
//		document.form_ajout_gare[name_btn].disabled = false ;
//		document.form_ajout_gare[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;

		return false ;
		}
	} // de valider_ajout_gare
/*===================================*/

function valider_depose_prems(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	document.depose_prems.v_dep.value = trim(document.depose_prems.v_dep.value, ' ') ;
	// Si ville depart différente de celle précédemment entrée on contrôle
	if (typeof(v_dep_prec) != 'undefined' && document.depose_prems.v_dep.value != v_dep_prec)
		{
		if (document.depose_prems.v_dep.value.length < 3)
			{
			alert("La ville de départ n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			// On remet le nom in
			document.depose_prems.choix_modif_billet.value=text_btn ;
			retour = false ;
			}
		// On vérifie que les villes ont bien été sélectionnées dans la liste
	//alert(clic_liste['v_dep_sel']+' - '+clic_liste['v_arr_sel']) ;
		if (clic_liste['v_dep_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville de départ dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.depose_prems.v_dep.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_dep_prec) != 'undefined' && document.depose_prems.v_dep.value != v_dep_prec)
	
	document.depose_prems.v_arr.value = trim(document.depose_prems.v_arr.value, ' ') ;
	// Si ville arrivée différente de celle précédemment entrée on contrôle
	if (typeof(v_arr_prec) != 'undefined' && document.depose_prems.v_arr.value != v_arr_prec)
		{
		if (document.depose_prems.v_arr.value.length < 3)
			{
			alert("La ville d'arrivée n'est pas renseignée."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			retour = false;
			}
	if (clic_liste['v_arr_sel'] == 'N')
			{
			alert("Vous n'avez pas choisi de ville d'arrivée dans la liste."+"\n"+"Tapez au moins les trois premiers caractères"+"\n"+"puis cliquez sur l'une des valeurs proposées.") ;
			document.depose_prems.v_arr.value = '' ;
			retour = false;
			}
		} // de if (typeof(v_arr_prec) != 'undefined' && document.depose_prems.v_arr.value != v_arr_prec)

// On ne vérifie que si on a appuyé sur le bouton Déposer ou Modifier
if (document.depose_prems.L_lebouton.value == 'deposer' || document.depose_prems.L_lebouton.value == 'modifier')
    {
	// On efface le champ bouton
	document.depose_prems.L_lebouton.value = '' ;

// On vérifie si la date est valide
	  if (IsDateValid(document.depose_prems.L_j_dep.value, document.depose_prems.L_ma_dep.value.substr(5,2), document.depose_prems.L_ma_dep.value.substr(0,4))==false)
	  {
		// on affiche un message
		alert("La date de départ n'est pas valide");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
	  }
	  else
	  {
		// on constitue la date au format MySQL dans le champ date
		// On teste qu'elle n'est pas dépassée (heure comprise)
		var date_depart = SetDateMySql_am(document.depose_prems.L_j_dep.value, document.depose_prems.L_ma_dep.value);
		// On ajoute l'heure de départ
		date_depart += ' ' + document.depose_prems.L_v_heures.value + ":" + document.depose_prems.L_v_minutes.value + ":00" ;
//annee + "-" + mois + "-" + jour
		if (date_depart <= (date_courante() + ' ' + heure_courante()))
			{
			alert("La date/heure de départ est dépassée");
			retour = false;
			}
	  }
	  
// On vérifie que les champs heure minute sont renseignés
	if (document.depose_prems.L_v_minutes.value == "" || document.depose_prems.L_v_heures.value == "")
		{
		alert("Vous devez renseigner l'heure de départ");
		retour = false;
		}
		
	 // On vérifie si les deux villes sont différentes
	if (document.depose_prems.v_dep.value == document.depose_prems.v_arr.value)
		{
		alert("Les villes de départ et d'arrivée doivent être différentes")
		retour = false;
		}
	  
// On vérifie le champ num_train
/*********
	if (document.depose_prems.L_num_train.value != "")
		{
		if (!est_num_train(document.depose_prems.L_num_train.value))
			{
			alert("Le numéro du train doit comprendre de 3 à 5 chiffres");
			retour = false;
			}
		}
**********/
// On vérifie si le numéro de train est rempli
	if(document.depose_prems.L_num_train.value != "")
		{
		// On enlève les espaces du début et de la fin
		$reg = new RegExp("^\ +") ;
		document.depose_prems.L_num_train.value =
				document.depose_prems.L_num_train.value.replace($reg, "") ;
		$reg = new RegExp("\ +$") ;
		document.depose_prems.L_num_train.value =
				document.depose_prems.L_num_train.value.replace($reg, "") ;
		// On enlève les 0 au début
		$reg = new RegExp("^0+") ;
		document.depose_prems.L_num_train.value = 
				document.depose_prems.L_num_train.value.replace($reg, "") ;
		// On vérifie que c'est un entier avec 2 à 5 chiffres
		var reg = new RegExp("^[0-9]{2,5}$");
		if (!reg.test(document.depose_prems.L_num_train.value))
			{
			alert("Le numéro du train doit comprendre de 2 à 5 chiffres");
			retour = false;
			}
/************
// On met la nature à imprimé pas encore créé si commence par 79
		else if (document.depose_prems.L_num_train.value.substring(0,2) == '79')
			{
			document.depose_prems.L_nat_billet.value = '3' ;
			}
*************/
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Numéro du train'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}

// On vérifie le champ h_arrivee (ancien formulaire)
	if(typeof(document.depose_prems.L_h_arrivee) === 'undefined' || !document.depose_prems.L_h_arrivee)
		{
		// L_h_arrivee non définie
		}
	else
		{
		if (document.depose_prems.L_h_arrivee.value != "")
			{
			h_arrivee = controle_format_heure(document.depose_prems.L_h_arrivee.value) ;
			if (!h_arrivee)
				{
				alert("L'heure d'arrivée (facultative) doit être en mode 24h sous la forme HHhMM (ex: 12h34 ou 0h45 ou 15h03)");
				retour = false;
				}
			else document.depose_prems.L_h_arrivee.value = h_arrivee ;
			}
		}
	
		// On vérifie si le champ nature du billet est rempli avec 1 2 3 ou 4 (interdit)
		if(document.depose_prems.L_nat_billet.value == 1 || document.depose_prems.L_nat_billet.value == 2 || document.depose_prems.L_nat_billet.value == 3 || document.depose_prems.L_nat_billet.value == 4)
		{
		// les données sont ok, on continue sauf si le type 4 est indiqué on fait une alerte
		if(document.depose_prems.L_nat_billet.value == 4)
			{
/****/
			alert("Nous sommes désolés de ne pouvoir accepter de mettre en vente votre billet car vous avez indiqué qu'il s'agissait d'un \"e-billet\" ou d'un billet \"imprimé\" déjà créé qui est NOMINATIF, PERSONNEL et INCESSIBLE. Le voyageur devra pouvoir justifier son identité avec une pièce d'identité valable (nota: l'amende peut atteindre 200 euros)." + "\n" + "S'il s'agit d'un \"e-billet\" nous vous conseillons fortement de ne plus jamais accepter le choix par défaut du \"e-billet\" lors de votre prochain achat mais plutôt de vous faire envoyer votre billet par la poste (gratuit) ou de le retirer au guichet, en agence ou en borne libre service." + "\n" + "S'il s'agit d'un billet \"imprimé\" ou iDTGV nous vous conseillons pour la prochaine fois d'attendre le dernier moment pour ajouter  l'identitité du ou des voyageurs et de ne pas vous identifier au préalable sur le site où vous effectuez l'achat (Voyages SNCF ou iDTGV)." + "\n" + "Il est inutile de tenter de le redéposer sur Troc des Trains et de nous écrire à ce sujet car nous ne pourrons que vous répéter ce qui est déjà écrit ici. Merci." + "\n" + "Si votre billet est sous le format \"classique\" (20cm x 8cm) et sans mention \"e-billet\" vous devez le déposer en indiquant Nature du billet: \"classique\" Réf: ABSENT et Nom: INCONNU puis nous envoyer un e-mail avec votre identifiant et la photo ou le scan de votre billet afin que nous le validions." + "\n" + "Si votre billet est un billet \"imprimé®\" ou iDTGV que vous n'avez pas encore créé avec le nom et la date de naissance du ou des voyageurs, vous devez choisir 'Imprimé® pas encore créé'. Ce billet n'est PAS NOMINATIF tant qu'il n'a pas été créé.") ;
/****/
			retour = false ;
			}
		}
	else 
		{
		// on affiche un message
		alert("Vous devez indiquer la nature du billet");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
		
	// On vérifie si le champ prix est rempli
	if(document.depose_prems.L_prix.value != "")
		{
		// On vérifie que c'est un entier  
		var reg = new RegExp("[^0-9]", "i");
		if (reg.test(document.depose_prems.L_prix.value))
			{
			alert("Le prix doit être un nombre entier positif ou nul");
			retour = false;
			}
		else prix = document.depose_prems.L_prix.value ;
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Prix de vente'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
/****/
// On vérifie si le champ prix payé est rempli
	if(document.depose_prems.L_prix_paye.value != "")
		{
		prix_paye = document.depose_prems.L_prix_paye.value ;
		// On vérifie s'il est égal à PRIME
		billet_prime = (prix_paye.toUpperCase() == 'PRIME') ;
		if (!billet_prime)
			{
			var reg = new RegExp("^[0-9]{1,3}[.,]?[0-9]{0,3}$", "i");
			if (!reg.test(prix_paye))
				{
				alert ("Le prix payé doit être un nombre positif entier ou décimal (ex: 40 ou 39.90) ou 'PRIME'") ;
				retour = false ;
				}
			else prix_paye = Remplace(prix_paye, ',', '.') ;
			}
		else document.depose_prems.L_prix_paye.value = 'PRIME' ;
		
		// On teste si le prix payé est supérieur ou égal au prix
		// sauf s'il sagit d'un ancien billet qui ne comporte pas de prix_payé
		if (!billet_prime)
			{
			prix = prix * 1 ;
			prix_paye = Math.round(prix_paye * 1) ;
			//alert (prix + '   ' + prix_paye) ;
			if (prix > prix_paye)
				{
				alert("le 'Prix de vente' doit être inférieur ou égal au 'Prix payé' (par voyageur)");
				retour = false ;
				}
			}
		}
	else
		{
		alert ("Vous devez renseigner le champ 'Prix payé'") ;
		retour = false ;
		}

	
	// On vérifie L_ar_obl si existe
	if(typeof(document.depose_prems.L_ar_obl) != 'undefined')
		{
		// On vérifie si ar_obl est renseigné
		if(!document.depose_prems.L_ar_obl[1].checked && !document.depose_prems.L_ar_obl[2].checked)
			{
			// on affiche un message
			alert("Indiquer s'il s'agit ou non d'un tarif A/R pour lequel tous les billets doivent être conservés") ;
			// et on indique de ne pas envoyer le formulaire
			retour = false ;
			}
		}
		
// On vérifie si le champ conditions est renseigné
	if(document.depose_prems.L_cond_utilis.value == 0)
		{
		alert ("Vous devez renseigner le champ 'Conditions'") ;
		retour = false ;
		}

// On vérifie si le champ référence est rempli
	if (document.depose_prems.L_ref_dossier.value != '')
		{
		// On met en majuscules
		document.depose_prems.L_ref_dossier.value = document.depose_prems.L_ref_dossier.value.toUpperCase() ;
		// On contrôle la référence (6 lettres ou chiffres) mais pas 6 chiffres
		var reg1 = new RegExp("^[A-Z0-9]{6}$");
		var reg2 = new RegExp("^[0-9]{6}$");
		if (!reg1.test(document.depose_prems.L_ref_dossier.value)
		|| reg2.test(document.depose_prems.L_ref_dossier.value))
			{
			// Le format de la référence du dossier est incorrecte
			alert("Le format de la référence du dossier est incorrect."
					+ "\n" + "Elle doit comprendre 6 caractères (lettres et chiffres)."
					+ "\n" + "Elle se trouve en bas à droite du billet après 'Dossier' ou 'PNR'.");
			retour = false ;
			}
		}
	else
		{
		alert("Vous devez indiquer la référence du dossier"
			  	+ "\n" + "Elle doit comprendre 6 caractères (lettres et chiffres)."
				+ "\n" + "Elle se trouve en bas à droite du billet après 'Dossier' ou 'PNR'.");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}

	// On vérifie si le champ nom associé est rempli
	if (document.depose_prems.L_nom_dossier.value == '')
		{
		alert("Vous devez indiquer le nom associé au dossier."
				+ "\n" + "Il se trouve en haut à droite du billet au-dessus de 'ADULTE'.");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	else
		{
		// On met en majuscules sauf si email
		if (document.depose_prems.L_nom_dossier.value.indexOf("@") == '-1')
			{
			document.depose_prems.L_nom_dossier.value = document.depose_prems.L_nom_dossier.value.toUpperCase() ;
			}
		}

	if(typeof(document.depose_prems.L_loc_billet) != 'undefined')
		{
		// On vérifie si le champ loc_billet est rempli
		if (document.depose_prems.L_loc_billet.value == '')
			{
			alert("Vous devez indiquer la localisation du billet.");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		}

// On vérifie si le champ tel1 est rempli (pas obligatoire)
	if(document.depose_prems.tel1.value != "")
		{
		if((document.depose_prems.tel1.value.length) < 9 )
			{
			alert ("Numéro de téléphone incomplet");
			retour = false;
			}
		} // de if(document.depose_prems.tel1.value != "")
	
	// On vérifie si le champ e-mail est rempli
	if(document.depose_prems.tel2.value != "")
		{
		// les données sont ok, on continue   
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'E-mail'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 
	  
	  // On vérifie la syntaxe de l'adresse e-mail
	  adr_mail = verif_mail(document.depose_prems.tel2.value) ;
	  if (adr_mail==false)
		{
		alert("Adresse e-mail incorrecte");
		retour = false;
		}
	  else
		{
		document.depose_prems.tel2.value = adr_mail ;
		}
	
	  // On controle la longueur du commentaire
	  if (controle_comment (document.depose_prems.L_comment.value,255) == false)
		{
		retour = false;
		}
	} // deposer ou modifier
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.depose_prems, text_btn, name_btn) ;
//		document.depose_prems[name_btn].value=text_btn ;
//		document.depose_prems[name_btn].disabled = false ;
//	document.depose_prems[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;

		return false ;
		}
}
/*===================================*/
function valider_envoyer(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	//  alert(this.name) ;
	// On vérifie si le champ e-mail est rempli
	if (document.envoyer.email_dem.value != "")
		{
		// les données sont ok, on continue   
		// On vérifie la syntaxe de l'adresse e-mail
		adr_mail = verif_mail(document.envoyer.email_dem.value) ;
		if (adr_mail==false)
			{
			alert("Adresse e-mail incorrecte");
			retour = false;
			}
		else
			{
			document.envoyer.email_dem.value = adr_mail ;
			}
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Adresse e-mail'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 
  
	// On controle la longueur du texte du message
	if (document.envoyer.L_question.value.length < 10 )
		{
		alert("Vous n'avez sans doute pas entré le texte de votre message");
		retour = false;
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.envoyer, text_btn, name_btn) ;
//		document.envoyer[name_btn].value=text_btn ;
//		document.envoyer[name_btn].disabled = false ;
//		document.envoyer[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;

		return false ;
		}
	} // de la fonction valider_envoyer
	
/*===================================*/
function valider_envoyer_dem(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On vérifie si le champ e-mail est rempli
	if(document.envoyer_dem.demail_dem.value != "")
		{
		// les données sont ok, on continue   
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Adresse e-mail'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 
	
	// On vérifie la syntaxe de l'adresse e-mail
	adr_mail = verif_mail(document.envoyer_dem.demail_dem.value) ;
	if (adr_mail==false)
		{
		alert("Adresse e-mail incorrecte");
		retour = false;
		}
	else
		{
		document.envoyer_dem.demail_dem.value = adr_mail ;
		}
	
	// On controle la longueur du texte du message
	if (document.envoyer_dem.dquestion.value.length < 10 )
		{
		alert("Vous n'avez sans doute pas entré le texte de votre message");
		retour = false;
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.envoyer_dem, text_btn, name_btn) ;
//		document.envoyer_dem[name_btn].value=text_btn ;
//		document.envoyer_dem[name_btn].disabled = false ;
//		document.envoyer_dem[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;

		return false ;
		}
	} // de la fonction valider_envoyer_dem

/*===================================*/
function valider_inscription(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	
	// On vérifie si le champ ident est rempli
	var ch_ident = false ;
	if (document.form_inscription.ident.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Identifiant'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	else
		{
		// On vérifie si le champ ident fait au moins 3 caractères
		if (document.form_inscription.ident.value.length < 3 || document.form_inscription.ident.value.length > 10)
			{
			// on on affiche un message
			alert("Le champ 'Identifiant' doit comprendre de 3 à 10 caractères");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// On vérifie que le champ ident ne comprend pas de caractères interdits
			if (controle_motpasse (document.form_inscription.ident.value) == false)
				{
				// on affiche un message
				alert("Le champ 'Identifiant' comprend des caractères interdits"+"\n"+"Les caractères autorisés sont: 0..9, A..Z, a..z");
				retour = false;
				}
			else
				{
				// On vérifie que le champ ident ne comprend pas plus de 3 chiffres
				result = verif_nbre_chiffres(document.form_inscription.ident.value) ;
				if (result)
					{
					alert("Le champ 'Identifiant' ne doit pas comprendre plus de 3 chiffres");
					retour = false;
					}
				else
					{
					ch_ident = true ;
					}
				}
			}
		}
	
	// On vérifie si le champ motpasse est rempli
	if (document.form_inscription.L_motpasse.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Mot de passe'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	else
		{
		// On vérifie si le champ motpasse fait au moins 6 caractères
		if (document.form_inscription.L_motpasse.value.length < 6 || document.form_inscription.L_motpasse.value.length > 8)
			{
			// on on affiche un message
			alert("Le champ 'Mot de passe' doit comprendre de 6 à 8 caractères");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// On vérifie que le champ motpasse ne comprend pas de caractères interdits
			if (controle_motpasse (document.form_inscription.L_motpasse.value) == false)
				{
				// on on affiche un message
				alert("Le champ 'Mot de passe' comprend des caractères interdits"+"\n"+"Les caractères autorisés sont: 0..9, A..Z, a..z");
				retour = false;
				}
			else
				{
				if (ch_ident)
					{
					// On vérifie si le champ motpasse est identique à l'ident ou si l'ident est redoublé
					ident = document.form_inscription.ident.value.toLowerCase() ;
					motpasse = document.form_inscription.L_motpasse.value.toLowerCase() ;
					if ((ident == motpasse) || (motpasse == (ident + ident)))
						{
						// on affiche un message
						alert("Le 'Mot de passe' doit être différent de l'Identifiant' et l'Identifiant' ne doit pas être redoublé dans le 'Mot de passe'");
						// et on indique de ne pas envoyer le formulaire
						retour = false;
						}
					}
				}
			}
		}
		
	/*********
	// On vérifie que le champ motpasse comprend de 2 à 3 chiffres
	if (controle_chiffres_motpasse(document.form_inscription.motpasse.value) == false)
	{
	// on on affiche un message
	alert ("Le champ 'Mot de passe' doit comprendre 2 à 3 chiffres.");
	retour = false;
	}
	*********/
	if (!(!document.form_inscription.email))
		{
		// On vérifie si le champ e-mail est rempli
		ch_mail = false ;
		if(document.form_inscription.email.value != "")
			{
			// les données sont ok, on continue   
			// On vérifie la syntaxe de l'adresse e-mail
			adr_mail = verif_mail(document.form_inscription.email.value) ;
			if (adr_mail==false)
				{
				alert("Adresse e-mail incorrecte");
				retour = false;
				}
			else
				{
				document.form_inscription.email.value = adr_mail ;
				ch_mail = true ;
				}
			}
		else 
			{
			// on affiche un message
			alert("Vous devez renseigner le champ 'Adresse e-mail'");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
			
		// On vérifie si le champ e-mail pour vérif est rempli
		if (document.form_inscription.L_email_verif.value != "")
			{
			// les données sont ok, on continue   
			if (ch_mail)
				{
				// On vérifie que les adresses email sont les mêmes
				if(document.form_inscription.email.value.toLowerCase() != document.form_inscription.L_email_verif.value.toLowerCase())
					{
					alert("L'E-mail de contrôle est différent");
					retour = false;
					}
				}
			}
		else 
			{
			// on affiche un message
			alert("Vous devez renseigner le champ 'Adresse e-mail pour vérification'");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		}
	
	if (!(!document.form_inscription.tel))
		{
		// On vérifie si le champ tel est rempli (pas obligatoire)
		if(document.form_inscription.tel.value != "")
			{
			if((document.form_inscription.tel.value.length) < 9 )
				{
				alert ("Numéro de téléphone incomplet");
				retour = false;
				}
			} // de if(document.depose_prems.tel1.value != "")
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_inscription, text_btn, name_btn) ;
//		document.form_inscription[name_btn].value=text_btn ;
//		document.form_inscription[name_btn].disabled = false ;
//		document.form_inscription[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_inscription

/*===================================*/
function valider_champ_passwd(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On vérifie si le champ motpasse contient au moins 6 car. et 8 au plus
	if (document.form_inscription.L_motpasse.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Mot de passe'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_inscription, text_btn, name_btn) ;
//		document.form_inscription[name_btn].value=text_btn ;
//		document.form_inscription[name_btn].disabled = false ;
//		document.form_inscription[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_champ_passwd
/*===================================*/
function valider_modif_inscription(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On vérifie si le champ ident est rempli
	if (document.form_inscription.L_ident.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Identifiant'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	else
		{
		// On vérifie si le champ ident fait au moins 3 caractères
		if (document.form_inscription.L_ident.value.length < 3 || document.form_inscription.L_ident.value.length > 10)
			{
			// on on affiche un message
			alert("Le champ 'Identifiant' doit comprendre de 3 à 10 caractères");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		else
			{
			// On vérifie que le champ ident ne comprend pas de caractères interdits
			if (controle_motpasse (document.form_inscription.L_ident.value) == false)
				{
				// on affiche un message
				alert("Le champ 'Identifiant' comprend des caractères interdits"+"\n"+"Les caractères autorisés sont: 0..9, A..Z, a..z");
				retour = false;
				}
			else
				{
				// On vérifie que le champ ident ne comprend pas plus de 3 chiffres
				result = verif_nbre_chiffres(document.form_inscription.L_ident.value) ;
				if (result)
					{
					alert("Le champ 'Identifiant' ne doit pas comprendre plus de 3 chiffres");
					retour = false;
					}
				}
			}
		}

	var ch_mail = false ;
	// On vérifie si le champ e-mail est rempli
	if(document.form_inscription.L_email.value != "")
		{
		// les données sont ok, on continue   
		// On vérifie la syntaxe de l'adresse e-mail
		adr_mail = verif_mail(document.form_inscription.L_email.value) ;
		if (adr_mail == false)
			{
			alert("Adresse e-mail incorrecte");
			retour = false;
			}
		else
			{
			document.form_inscription.L_email.value = adr_mail ;
			ch_mail = true ;
			}
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Adresse e-mail'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 

	// On vérifie si le champ e-mail pour vérif est rempli
	if(document.form_inscription.L_email_verif.value != "")
		{
		// les données sont ok, on continue   
		if (ch_mail)
			{
			// On vérifie que les adresses email sont les mêmes
			if(document.form_inscription.L_email.value.toLowerCase() != document.form_inscription.L_email_verif.value.toLowerCase())
				{
				alert("L'E-mail de contrôle est différent");
				retour = false;
				}
			}
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Adresse e-mail pour vérification'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 
	
	// On vérifie si le champ tel est rempli (pas obligatoire)
	if(document.form_inscription.L_tel.value != "")
		{
		if((document.form_inscription.L_tel.value.length) < 9 )
			{
			alert ("Numéro de téléphone incomplet");
			retour = false;
			}
		} // de if(document.depose_prems.L_tel.value != "")
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_inscription, text_btn, name_btn) ;
//		document.form_inscription[name_btn].value=text_btn ;
//		document.form_inscription[name_btn].disabled = false ;
//		document.form_inscription[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_modif_inscription

/*===================================*/
function valider_identification(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	// Pour version normale (pas mobile)
	var retour = true ;
	// On vérifie si le champ ident est rempli
	if (document.form_identification.ident.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Identifiant'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	// On vérifie si le champ motpasse est rempli
	if (document.form_identification.L_motpasse.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Mot de passe'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_identification, text_btn, name_btn) ;
//		document.form_identification[name_btn].value=text_btn ;
//		document.form_identification[name_btn].disabled = false ;
//		document.form_identification[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_identification

/*===================================*/
function valider_identification_mob(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	// Pour version mobile (pas normale)
	var retour = true ;
	// On vérifie si le champ ident est rempli
	if (document.form_inscription.ident.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Identifiant'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	// On vérifie si le champ motpasse est rempli
	if (document.form_inscription.L_motpasse.value.length == 0)
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'Mot de passe'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_inscription, text_btn, name_btn) ;
//		document.form_inscription[name_btn].value=text_btn ;
//		document.form_inscription[name_btn].disabled = false ;
//		document.form_inscription[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_identification

/*===================================*/
function valider_form_mon_compte(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On vérifie si le champ motpasse est rempli uniquement si clic sur "Mon compte"
	if (nom_bouton == 'mon_compte')
		{
		if (document.form_mon_compte.L_motpasse.value.length == 0)
			{
			// on affiche un message
			alert("Vous devez renseigner le champ 'Mot de passe'");
			// et on indique de ne pas envoyer le formulaire
			retour = false;
			}
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_mon_compte, text_btn, name_btn) ;
//		document.form_mon_compte[name_btn].value=text_btn ;
//		document.form_mon_compte[name_btn].disabled = false ;
//		document.form_mon_compte[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	}

/*===================================*/
function valider_saisie_code_ap(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On vérifie si le champ code_ap est rempli
	if (document.saisie_code_ap.L_code_ap.value != '')
		{
		// On met en majuscules
		document.saisie_code_ap.L_code_ap.value = document.saisie_code_ap.L_code_ap.value.toUpperCase() ;
		// On contrôle le code (8 lettres ou chiffres) mais pas 8 chiffres
		var reg1 = new RegExp("^[A-Z0-9]{8}$");
		if (!reg1.test(document.saisie_code_ap.L_code_ap.value))
			{
			// Le format de la référence du dossier est incorrecte
			alert("Le format du code AlloPass est incorrect."
					+ "\n" + "Il doit comprendre 8 caractères (lettres et chiffres).");
			retour = false ;
			}
/***************
		else
			{
// On contrôle le code AlloPass en AJAX et on affiche le résultat dans le champ code
			controle_code_ap() ;
			// On récupère le retour du contrôle PAS POSSIBLE
			var choix = document.forms['saisie_code_ap'].elements['L_retour_ap'].value ;
			var par_ap = document.forms['saisie_code_ap'].elements['L_par_ap'].value ;
alert (choix + ' - ' + par_ap) ;
			if (choix == 'retour_allopass_ok')
				{
				document.forms['saisie_code_ap'].elements['L_code_ap'].value = 'CODE OK' ;
				document.forms['saisie_code_ap'].elements['L_code_ap'].type = 'hidden' ;
				}
			else
				{
				document.forms['saisie_code_ap'].elements['L_code_ap'].value = 'CODE NOK' ;
				}
			return false ;
			}
*******************/
		}
	else
		{
		alert("Vous devez indiquer un code AlloPass"
			  	+ "\n" + "Il doit comprendre 8 caractères (lettres et chiffres).");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		}
	
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.saisie_code_ap, text_btn, name_btn) ;
//		document.saisie_code_ap[name_btn].value=text_btn ;
//		document.saisie_code_ap[name_btn].disabled = false ;
//		document.saisie_code_ap[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	}

/*===================================*/
function valider_email_dem_pw(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
		var retour = true ;
	// On vérifie si le champ e-mail est rempli
	if(document.form_inscription.L_email_secours.value != "")
		{
		// les données sont ok, on continue   
		// On vérifie la syntaxe de l'adresse e-mail
		adr_mail = verif_mail(document.form_inscription.L_email_secours.value) ;
			if (adr_mail==false)
			{
			alert("Adresse e-mail incorrecte");
			retour = false;
			}
		else
			{
			document.form_inscription.L_email_secours.value = adr_mail ;
			}
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'E-mail'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_inscription, text_btn, name_btn) ;
//		document.form_inscription[name_btn].value=text_btn ;
//		document.form_inscription[name_btn].disabled = false ;
//		document.form_inscription[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_email_dem_pw

/*===================================*/
function valider_email_msg_env(nom_form)
	{
	// On masque le bouton
	masque_btn(nom_form) ;
	
	var retour = true ;
	// On vérifie si le champ e-mail est rempli
	if(document.form_msg_envoyes.L_mail_ach.value != "")
		{
		// les données sont ok, on continue   
		// On vérifie la syntaxe de l'adresse e-mail
		adr_mail = verif_mail(document.form_msg_envoyes.L_mail_ach.value) ;
		if (adr_mail==false)
			{
			alert("Adresse e-mail incorrecte");
			retour = false;
			}
		  else
			{
			document.form_msg_envoyes.L_mail_ach.value = adr_mail ;
			}
		}
	else 
		{
		// on affiche un message
		alert("Vous devez renseigner le champ 'E-mail'");
		// et on indique de ne pas envoyer le formulaire
		retour = false;
		} 
	  
		
	if (retour == false)
		{
		// On remet le nom d'origine sur le bouton
		retablir_btn(document.form_msg_envoyes, text_btn, name_btn) ;
//		document.form_msg_envoyes[name_btn].value=text_btn ;
//		document.form_msg_envoyes[name_btn].disabled = false ;
//		document.form_msg_envoyes[name_btn].type = 'submit' ;
		// On enleve 'choix_'
//		document.getElementById(name_btn.substring(6)).style.display = 'none' ;
		return false ;
		}
	} // de la fonction valider_email_msg_env

/*===================================
function valider_demande_passwd()
{
  // On vérifie si le champ e-mail est rempli
  if(document.form_demande_passwd.L_email_secours.value != "")
  {
    // les données sont ok, on continue   
  }
  else 
  {
    // on affiche un message
    alert("Vous devez renseigner le champ 'Adresse e-mail'");
    // et on indique de ne pas envoyer le formulaire
    return false;
  } 
  
  // On vérifie la syntaxe de l'adresse e-mail
  adr_mail = verif_mail(document.form_demande_passwd.L_email_secours.value) ;
  if (adr_mail==false)
    {
	alert("Adresse e-mail incorrecte");
	return false;
	}
  else
    {
	document.form_demande_passwd.L_email_secours.value = adr_mail ;
	}
}
========================================*/

//====================== AUTO COMPLETION AJAX ====================================
// pas touche
// création de l'objet Ajax
var http = null;
if (window.XMLHttpRequest) // Firefox 
	http = new XMLHttpRequest(); 
else if (window.ActiveXObject) // Internet Explorer 
	http = new ActiveXObject("Microsoft.XMLHTTP");
else	// XMLHttpRequest non supporté par le navigateur 
   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");


// En paramètres: le nom du champ texte auto-completion et le nom du champ select auto-completion
function recup_liste(e, ch_txt, ch_sel, val_suppl)
	{
	glob_ch_sel = ch_sel ; // pour handleHttpResponse_recup_liste
	glob_ch_txt = ch_txt  ; // pour handleHttpResponse_recup_liste
	// On récupère l'événement
	event_ca = e || window.event;
//alert(nom_form+' - '+ch_txt+' - '+ch_sel+' - '+val_suppl+' - '+event_ca) ;
	var sel = document.forms[nom_form].elements[ch_sel];
	var nb_el = sel.options.length ;
	var selIndex = sel.selectedIndex ;
//alert(nb_el+' - '+selIndex) ;
	
/************
// Paramètres issue du formulaire pour l'auto-completion
	// Fichier liste des valeurs à exploiter pour l'auto-completion
	var fich_liste_val = document.forms[nom_form].fich_liste_val.value ;
	// Nombre de caracteres minimum à taper avant de lancer la recherche de la liste avec Ajax
	var nbre_min_car = document.forms[nom_form].nbre_min_car.value ;
	// On indique si la recherche est "case sensitive" (O) ou non (N)
	var case_sensitive = document.forms[nom_form].case_sensitive.value ;
	// On indique si on doit tenir compte des accents (O) ou non (N) dans ce qui est entré pour la recherche
	var accents_in = document.forms[nom_form].accents_in.value ;
	// On indique si on doit tenir compte des accents (O) ou non (N) dans la liste à exploiter
	// Il est important de mettre 1 si la liste à exploiter ne compte pas d'accents
	// car dans ce cas on ne sera pas obligé de supprimer les accents
	var accents_li = document.forms[nom_form].accents_li.value ;
	// Valeur supplémentaire à mettre à la fin de la liste
	var val_suppl = document.forms[nom_form].elements[v_suppl].value ;
****/		
//alert(fich_liste_val+"-"+nbre_min_car+"-"+case_sensitive+"-"+accents_in+"-"+accents_li+"-"+val_suppl) ;

//alert(e.keyCode) ;
//alert(document.forms[nom_form].elements[ch_txt].value) ;
if (!document.forms[nom_form].elements[ch_txt].value)
		{
		sel.style.display = 'none';
		}
	else if (event_ca.keyCode == 40 && nb_el)
		{ // fleche bas
		if (selIndex < sel.options.length - 1)
			sel.selectedIndex = selIndex + 1 ;
		}
	else if (event_ca.keyCode == 38 && nb_el)
		{ // fleche haut
		if (selIndex > 0)
			sel.selectedIndex = selIndex - 1 ;
		}
	else if (event_ca.keyCode == 13 && nb_el)
		{ // entrée
		document.forms[nom_form].elements[ch_txt].value = sel.options[selIndex].value ;
		sel.style.display = 'none';
		}
	else
		{ // autre touche --> on recherche les valeurs de la liste
		val = document.forms[nom_form].elements[ch_txt].value ;
//alert(val) ;
		// On a tapé au moins un caractère il faudra obigatoirement valider avec un choix dans la liste
		// Peut-être redondant mais c'est plus sûr
		clic_liste[glob_ch_sel] = 'N' ;
		
		if (val.length >= nbre_min_car)
			{
//alert("Appel au serveur");
parametres = "?what=completion1&fich_liste_val="+fich_liste_val+"&case="+case_sensitive+"&accents_in="+accents_in+"&accents_li="+accents_li+"&val_suppl="+val_suppl+"&val="+escape(val) ;
//alert(chemin + parametres) ;
			http.open("GET", chemin+"?what=completion1&fich_liste_val="+fich_liste_val+"&case="+case_sensitive+"&accents_in="+accents_in+"&accents_li="+accents_li+"&val_suppl="+val_suppl+"&val="+escape(val)+"&regions="+regions+"&nb_col="+nb_col, true);
			http.onreadystatechange = handleHttpResponse_recup_liste;
			http.send(null);
			}
		}
	} // de function recup_liste()

//=======================================
function handleHttpResponse_recup_liste()
	{
	if (http.readyState == 4)
		{
//alert(http.responseText) ;
		liste = eval('(' + http.responseText + ')'); // [id1,id2, ...]
		var sel = document.forms[nom_form].elements[glob_ch_sel] ;
		sel.attributes['size'].value = liste.length;
		

		// on vide le select
		while(sel.options.length > 0)
			sel.options[0] = null ;

		// On remplit avec les nouvelles valeurs de la liste
		for(i=0 ; i<liste.length ; i++)
			{
			// On sépare en deux si existe le séparateur ";"
			var pos = liste[i].indexOf(';') ;
			if (pos == -1)
				{
				sel.options[sel.options.length] = new Option(liste[i],liste[i]);
				}
			else
				{
				// On sépare
				var val = liste[i].substring(0,pos) ;
				var opt = liste[i].substring(pos+1) ;
//alert(liste[i]+" pos="+pos+" |"+opt+"|") ;
				sel.options[sel.options.length] = new Option(opt,val);
				}
			}


		// Si une seule valeur, on la met dans le champ de recherche (ajout BT)
		if (liste.length == 1)
			{
			document.forms[nom_form].elements[glob_ch_txt].value = val ;
			clic_liste[glob_ch_sel] = 'O' ; // Pour indiquer que l'on a cliqué sur une gare de la liste proposée
			}
		else
			{
			if (sel.options.length)
				{
				// On ne sélectionne aucun élément de la liste en indiquant -1 ou en ne définissant pas sel.selectedIndex
				// afin de déclencher le "onchange" sur le premier élément de la lite
				// sel.selectedIndex = -1 ;
				sel.style.display = 'block';
				}
			else
				sel.style.display = 'none';
			}
		} // de if (http.readyState == 4)
	} // de function handleHttpResponse_recup_liste()

//=======================================
// On a utilisé le clic pour choisir la ville dans la liste
function recup_liste_click(ch_txt, ch_sel)
	{
//alert("Fonction recup_liste_click") ;
	// On donne le focus à la liste
	document.forms[nom_form].elements[ch_sel].focus() ;
	var sel = document.forms[nom_form].elements[ch_sel] ;
	document.forms[nom_form].elements[ch_txt].value = sel.options[sel.selectedIndex].value ;
	// On met la variable globale a O NON UTILISE POUR LE MOMENT
	clic_liste[ch_sel] = 'O' ; // Pour indiquer que l'on a cliqué sur une gare de la liste proposée
	// Les instructons ci-dessous ne font pas disparaître la liste déroulante
//alert("On masque la liste après le clic") ;
	sel.style.display = 'none' ;
	//sel.style.width = '0' ;
	//sel.style.height = '0' ;
	//sel.style.z-index = '-255' ;
	//sel.style.visibility = 'hidden' ;
	//sel.style.opacity = '0' ;
	
	// On supprime l'objet
	//var mynode = document.getElementById(ch_sel);
	// On supprime l'objet (ça marche mais il ne revient plus!!!) 
	//var parent = sel.parentNode;
	// On retire le noeud 
	//parent.removeChild(sel);
	} // de function recup_liste_click()

//=======================================
// On a constaté un change de la liste
function recup_liste_change(ch_txt, ch_sel)
	{
//alert("Fonction recup_liste_change") ;
	// On donne le focus à la liste
	document.forms[nom_form].elements[ch_sel].focus() ;
	var sel = document.forms[nom_form].elements[ch_sel] ;
	document.forms[nom_form].elements[ch_txt].value = sel.options[sel.selectedIndex].value ;
	// On met la variable globale a O NON UTILISE POUR LE MOMENT
	clic_liste[ch_sel] = 'O' ; // Pour indiquer que l'on a cliqué sur une gare de la liste proposée
	// Les instructons ci-dessous ne font pas disparaître la liste déroulante
//alert("On masque la liste après le clic") ;
	sel.style.display = 'none' ;
	} // de function recup_liste_click()

//=======================================
// On a utilisé la touche Enter pour choisir la ville dans la liste
function recup_liste_keydown(e, ch_txt, ch_sel)
	{
//alert("Fonction recup_liste_keydown") ;
	// On s'assure qu'il s'agit de la touche Enter
	// On récupère l'événement
	event_ca = e || window.event;
//alert ("Fonction recup_liste_keydown" + " event = " + event_ca.keyCode) ;
	if (event_ca.keyCode == 13)
		{ 
		// On a appuyé sur la touche Enter
		// On donne le focus à la liste
		document.forms[nom_form].elements[ch_sel].focus() ;
		var sel = document.forms[nom_form].elements[ch_sel] ;
		document.forms[nom_form].elements[ch_txt].value = sel.options[sel.selectedIndex].value ;
		// On met la variable globale a O
		clic_liste[ch_sel] = 'O' ; // Pour indiquer que l'on a cliqué sur une gare de la liste proposée
		// Les instructons ci-dessous ne font pas disparaître la liste déroulante
//alert("On masque la liste après la touche Enter") ;
		sel.style.display = 'none' ;
		//sel.style.visibility = 'hidden' ;
		//sel.style.opacity = '0' ;
		}
	} // de function recup_liste_keydown()
	
//=====================================================================================
// Fonction qui complete une chaine d'un coté ou de l'autre avec un caractère donné pour une longueur donnée
// - chaine: chaine à compléter
// - taille à atteindre
// - char: caractère
// - coté: D ou G (droite ou gauche) 
function str_pad(chaine, taille, char, cote)
	{
//alert(chaine.length) ;
	// On complète à gauche ou à droite
	// On transforme chaine en string au cas où il s'agirait d'un nombre
	chaine = chaine + '' ;
	while (chaine.length < taille)
		{
		if (cote == 'G' || cote == 'g')
			{
			// On complète à gauche
			chaine = char + chaine ;
			}
		else
			{
			// On complète à droite
			chaine = chaine + char ;
			}
		} // de while (chaine.length < taille)
	return chaine ;
	} // de la fonction str_pad
	
//=====================================================================================
// Fonction qui crée une chaine de longueur taille avec le caractère donné
// - char: caractère
// - taille à atteindre
function str_repeat(char, taille)
	{
	var chaine = '' ;
	for(i=1; i<=taille; i++)
		chaine = char + chaine ;
	return chaine ;
	} // de la fonction str_repeat
	
//=====================================================================================
// Fonction qui génère la liste déroulante d'une séquence de nombres d'une valeur de début à une valeur de fin
// dans l'ordre valeur début vers valeur de fin. Si valeur de fin = valeur de début, c'est un champ texte qui sera généré
// Les données en entrée sont:
// - nom du champ (string) (ex: 'j_dep')
// - classe du champ (string) (ex: 'champ-depose')
// - valeur de départ int
// - valeur de fin int
// - taille du champ (nombre de car.) int
// - valeur par défaut (string) (ex: '1' ou '01' ou '' pour indiquer que le champ est vide)
// - nbre tabs (int) (non significatif mais doit rester présent)
// - obligatoire ou non (défaut) true ou false
// - action (string) (facultatif défaut w) r ou w (si r ce sera un champ texte, si w ce sera une liste)
// - unité (string) (facultatif) unité à ajouter à la valeur ex: h pour heure
// en retour: la ligne du fichier ou chaine vide si rien trouvé
function liste_nbres(nom, classe, val_dep, val_fin, taille, val, tabs, oblig, action, unite)
	{
	// On initialise le retrait (inutile en javascript car on ne voit pas le code)
//	var retrait = '' ;
//	for (i=1; i<=tabs; i++)
//		retrait = retrait + String.fromCharCode(9) ;
	
	var CRLF = String.fromCharCode(13,10) ;
	var code_html = '' ;
	
	// On formate la valeur par défaut si différente de ''
	val = trim(val+'') ; // pour transformer en string
	val_dep = val_dep + '' ; // pour transformer en string
	val_fin = val_fin + '' ; // pour transformer en string
	
	// Création du champ du formulaire
	if (action == 'w')
		{
		code_html = code_html + '<select name="' + nom + '"' + classe + '>' + CRLF ;
		
		if (val != '')
			{
			val = str_pad(val, taille, '0', 'G');
			}
			
		if ((val != '' && !oblig) || val == '')
			{
			// Valeur par défaut nulle
			// on ajoute une ligne avec des tirets et une valeur nulle
			code_html = code_html + '<option value="">' + str_repeat('-', val_fin.length)
						+ unite + '</option>' + CRLF ;
			}
		
		// Génération de la liste déroulante en ordre croissant
		if (val_dep <= val_fin)
			{
			for (i = val_dep; i <= val_fin; i++)
				{
				// Génération du code html
				// On remplit avec des 0 devant pour atteindre la taille demandée de "value"
				var nbre = str_pad(i, taille, '0', 'G');
				code_html = code_html + '<option value="' + nbre + '"' ;
				
				if (val == nbre) code_html = code_html + ' selected';
				code_html = code_html + '>' + nbre + unite + '</option>' + CRLF ;
				}
			}
		else
			{
			// Génération de la liste déroulante en ordre décroissant
			for (i = val_dep; i >= val_fin; i--)
				{
				// Génération du code html
				// On remplit avec des 0 devant pour atteindre la taille demandée de "value"
				var nbre = str_pad(i, taille, '0', 'G');
				code_html = code_html + '<option value="' + nbre + '"' ;
				if (val == nbre) code_html = code_html + ' selected';
				code_html = code_html + '>' + nbre + unite + '</option>' + CRLF ;
				}
			}
		code_html = code_html + '</select>' + CRLF ;
		}
	else
		{
		// On ne génère qu'un champ texte non modifiable avec la valeur par défaut
		// On teste si déjà style dans classe pour ne pas réécrire style=
		var style_supp = '' ;
/********
		if (trim(val) != '')
			val = val + unite ;
		else
			val = val + str_repeat(' ', unite.length) ;
********/
		// str_pad('', unite.length), ' ', 'R') ;
		var sty = 'width:' + taille*8 + 'px;height:11px;" value="' + val ;
		// On part de classe = ' class="champ-depose l-jour" style="background-color:#FFFFAA"'
		//                 ou: ' class="champ-depose l-jour"'
		if (classe.indexOf('style=', 0) == -1) 
			{
			style_supp = ' style="' + sty + '"' ;
			// On ajoute à classe
			classe = classe + style_supp ;
			}
		else
			{
			style_supp = ';' + sty ;
			// On insère dans classe avant le '"' de fin
			classe = classe.substr(0,classe.length-1) + style_supp + '"' ;
			}
		code_html = code_html + '<input name="' + nom + '" type="text" ' + 'readonly="readonly"' + classe + '>' + CRLF ;
//alert(code_html) ;
		}
	return code_html ;
	}
//=============================================================================================
// Fonction qui génère le code Javascript pour un champ ville en auto-completion
// - style_txt: classe CSS et style du champ text (ex: ' class="champ-depose l-s-ville" style="background-color:#FFFFAA"')
// - auto_compl_txt: nom du champ texte où l'on tape les caractères de début (ex: 'v_dep')
// - ville_def: nom de ville par défaut (ex: 'Paris')
// - auto_compl_sel: du champ select pour la liste des choix possibles (ex: 'v_dep_sel')
// - val_suppl: valeur supplémentaire à joutée à la liste des choix possibles si au moins 1 valeur (facultatif) (ex: 'Toutes destinations')
// - style_sel: style_txt: classe CSS et style du champ select pour la liste des choix possibles (ex: ' class="champ-depose l-ville" style="background-color:#FFFFAA;display:none;"')
function gen_champ_ac_ville(style_txt, auto_compl_txt, ville_def, auto_compl_sel, val_suppl, style_sel)
	{
//alert("Fonction gen_champ_ac_ville") ;
	var CRLF = String.fromCharCode(13,10) ;
	<!-- déclaration du champ dans lequel on va taper la recherche pour la ville de départ -->
	// On peut mettre onmouseup="return false" pour que ça marche avec Chrome et Safari
	// mais on ne peut plus désélectionner avec un autre clic ! (seulement en tapant un caractère)
	var code_html = '<input type="text"' + style_txt + ' id="' + auto_compl_txt + '" name="' + auto_compl_txt + '" value="' + ville_def + '" onfocus="select();" onkeyup="recup_liste(event, \'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\', \'' + val_suppl + '\')" onKeydown="recup_liste_keydown(event, \'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\')" autocomplete="off">' + CRLF ;
	// Sans onKeydown
	//var code_html = '<input type="text"' + style_txt + ' id="' + auto_compl_txt + '" name="' + auto_compl_txt + '" value="' + ville_def + '" onFocus="select()" onkeyup="recup_liste(event, \'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\', \'' + val_suppl + '\')" autocomplete="off">' + CRLF ;
//alert(code) ;
//	document.writeln(code) ;
	<!-- déclaration du SELECT à choix unique pour recevoir la liste des valeurs en retour de la completion -->
	//document.writeln('<div style="z-index:255;">') ;
	code_html = code_html + '<select id="' + auto_compl_sel + '" name="' + auto_compl_sel + '" size="1" onchange="recup_liste_change(\'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\')" onKeydown="recup_liste_keydown(event, \'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\')"' + style_sel + '>' + CRLF + '</select>' ;
	// Avec onfocus
	//code_html = code_html + '<select id="' + auto_compl_sel + '" name="' + auto_compl_sel + '" size="1" onclick="recup_liste_click(\'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\')" onfocus="recup_liste_click(\'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\')"' + styonfocus="recup_liste_focus(\'' + auto_compl_txt + '\', \'' + auto_compl_sel + '\')"
//alert(code_html) ;
//	document.writeln(code) ;
//document.writeln('</select>') ;
	return code_html ;
	} // de gen_champ_ac_ville

// Pour compter les caractères dans textarea
function maxlength_textarea(id, crid, len_max)
	{
	var txtarea = document.getElementById(id);
	// On modifie la longueur max pour prendre ne compte le slashes qui seront ajoutés
//alert(txtarea.value) ;
	texte =  addslashes(txtarea.value) ;
	len_max = len_max - (texte.length-txtarea.value.length) ;
	document.getElementById(crid).innerHTML=len_max-txtarea.value.length;
	txtarea.onkeypress=function(){eval('v_maxlength("'+id+'","'+crid+'",'+len_max+');')};
	txtarea.onblur=function(){eval('v_maxlength("'+id+'","'+crid+'",'+len_max+');')};
	txtarea.onkeyup=function(){eval('v_maxlength("'+id+'","'+crid+'",'+len_max+');')};
	txtarea.onkeydown=function(){eval('v_maxlength("'+id+'","'+crid+'",'+len_max+');')};
	}

function v_maxlength(id, crid, len_max)
	{
	var txtarea = document.getElementById(id);
	// On modifie la longueur max pour prendre ne compte le slashes qui seront ajoutés
//alert(txtarea.value) ;
	texte = addslashes(txtarea.value) ;
	len_max = len_max - (texte.length-txtarea.value.length) ;
	var crreste = document.getElementById(crid);
	var len = txtarea.value.length;
	if(len>len_max)
		{
		txtarea.value=txtarea.value.substr(0,len_max);
		len = txtarea.value.length;
		}
	crreste.innerHTML=len_max-len;
	}
	
function addslashes(str)
	{
	str = str.replace(/\\/g,'\\\\');
	str = str.replace(/\'/g,'\\\'');
	str = str.replace(/\"/g,'\\"');
	str = str.replace(/\0/g,'\\0');
	return str;
	}
	
function stripslashes(str)
	{
	str = str.replace(/\\'/g,'\'');
	str = str.replace(/\\"/g,'"');
	str = str.replace(/\\0/g,'\0');
	str = str.replace(/\\\\/g,'\\');
	return str;
	}
/*******************************************************
//===================================================================================
// Pour le contrôle des codes AlloPass
// En paramètres: le code AlloPass à contrôler
function controle_code_ap()
	{
	// On récupère les données du formulaire de saisie du code AlloPass
	var code_ap = document.forms['saisie_code_ap'].elements['L_code_ap'].value ;
	var a_controler = document.forms['saisie_code_ap'].elements['L_a_controler'].value ;
	var type_code_ap = document.forms['saisie_code_ap'].elements['L_type_code_ap'].value ;
	var datas = document.forms['saisie_code_ap'].elements['L_datas'].value ;
	
	var params = "controle_code_ap.php"+"?code_ap="+code_ap+"&a_controler="+a_controler+"&type_code_ap="+type_code_ap+"&datas="+datas ;
//alert(params) ;
	// On envoie la requête
	http.open("GET", "controle_code_ap.php"+"?code_ap="+code_ap+"&a_controler="+a_controler+"&type_code_ap="+type_code_ap+"&datas="+datas, true) ;
	http.onreadystatechange = handleHttpResponse_controle_code_ap ;
	http.send(null);
	} // de function controle_code_ap()

function handleHttpResponse_controle_code_ap()
	{
	if (http.readyState == 4)
		{
		// On crée les deux variables globales choix et par_ap
		eval(http.responseText); // choix="retour_allopass_ok";par_ap="oui";
		document.forms['saisie_code_ap'].elements['L_retour_ap'].value = choix ;
		document.forms['saisie_code_ap'].elements['L_par_ap'].value = par_ap ;
alert (document.forms['saisie_code_ap'].elements['L_retour_ap'].value) ;
		} // de if (http.readyState == 4)
	} // de function handleHttpResponse_controle_code_ap()
//================ Fin du contrôle des codes AlloPass =====================================
**************************************/
