function trimStr(strStr){
	//supression des espace avant la chaine :
	while(strStr.substring(0,1)==" " || strStr.substring(strStr.length-1)==" "){
		if(strStr.substring(0,1)==" ") strStr=strStr.substring(1);
		if(strStr.substring(strStr.length-1)==" ") strStr=strStr.substring(0, strStr.length-1);			
	}	
	return strStr;
}

function dateToString(str)
{
	var jour = str.substr(0,2);
	var mois = str.substr(3,2);
	var annee = str.substr(6,4);
	return (annee+mois+jour);
}

function IsItWellFormed(value)
{
	var reg1=new RegExp("[0-9][0-9][/|-][0-9][0-9][/|-][0-9][0-9][0-9][0-9]","");	
	if(value.match(reg1))
	 return true;
	 else
	 return false;
}

function checkform(strFormName, strLayerName){
	this.formError=0;
	this.errorMsg="";
	this.formName=strFormName;
	this.validSubmit=1;
	this.arrayedObject=[];
	tmp_formObject=(document.layers && arguments.length==2)? document.layers[strLayerName].document.forms:document.forms;
	if(tmp_formObject) tmp_formObject=tmp_formObject[strFormName];
	if(!tmp_formObject) {
		status="";
		if(document.layers && arguments.length==2) status= "Layer :"+layerName+" inexistant ou ";
		status+="Pas de fomulaire disponible dans la page.";		
		tmp_formObject=new object();
		this.formError=1;
	}
	this.formObject=tmp_formObject;	
}

checkform.prototype.addErrorMsg=function(strErrorMSG){
	if(!this.DisplayedErrorMsg) this.errorMsg+=strErrorMSG+"\n";
	this.validSubmit=0; this.DisplayedErrorMsg=1;	
}

checkform.prototype.addField=function(strFieldName, strErrorMSG, strCheckOptionList){
	/* 
	strCheckOptionList : 
		NO_EMPTY,STRING, NUMERIC, TRIM, MIN_LEN:XXXX, MAX_LEN:XXXX, REGMASK:regMask, REQVALUE:XXX, EMAIL
	*/
	this.DisplayedErrorMsg=0;
	//recuperation de l'object.
	tmp_elementObject=(typeof strFieldName=="object")? strFieldName:this.formObject[strFieldName];
	strFieldName=(strFieldName)?(typeof strFieldName=="object")?(strFieldName.name)?strFieldName.name:(strFieldName.id)?strFieldName.id :"sans Nom":strFieldName:"sans Nom";
	//verification de l'existance de l'object
	if(!tmp_elementObject && !this.formError) {
		status="impossible de trouver le champs : "+strFieldName+" dans le formulaire : "+this.formName;
		tmp_elementObject=""; DisplayedErrorMsg=1;
		return false;
		
	}	
	//cette partie gere les object a choix multiple : radio button, selecte, ainsi que les objects portant le meme nom.
	if(tmp_elementObject.length){
		if(tmp_elementObject[0].type=="radio"){
			for(i=0; i<tmp_elementObject.length; i++){
				 if(tmp_elementObject[i].checked){
				 	 tmp_elementObject=tmp_elementObject[i];
					 i=tmp_elementObject.length;
				}
			}
			if(!tmp_elementObject.value) {tmp_elementObject=[]; tmp_elementObject["value"]="";}			
		}
		else if(!tmp_elementObject[0].type){
			if(tmp_elementObject.options) tmp_elementObject=tmp_elementObject[tmp_elementObject.selectedIndex];
			//else { alert("autre chose");}
		}
		else {
			if(!this.arrayedObject[strFieldName]) this.arrayedObject[strFieldName]=0;
			tmp_elementObject=tmp_elementObject[this.arrayedObject[strFieldName]];			
			this.arrayedObject[strFieldName]++;
			if(this.arrayedObject[strFieldName]==tmp_elementObject.length) return false;		
		}		
	}
	//cette partie gere les checkbox
	if(tmp_elementObject.type=="checkbox"){
		tmp_object=[];
		tmp_object["value"]=(tmp_elementObject.checked)?tmp_elementObject.value:"";
		tmp_elementObject=tmp_object;
	}	
	
	//type de valeur des champs :
	isString=(typeof tmp_elementObject.value=="string")?true:false;
	isNumeric=(!isNaN(parseInt(tmp_elementObject.value)))?true:false;
	isWellFormed=(IsItWellFormed(tmp_elementObject.value))? true:false;
	
	// recuperation des options de verification entrees par l'utilisateur:
	strCheckOptionList=strCheckOptionList.split(",");
	arrCheckOptionList=[];
	for(i=0; i<strCheckOptionList.length; i++){
		strCheckOptionList[i]=strCheckOptionList[i].split(":");
		checkName=trimStr(strCheckOptionList[i][0]);
		checkValue=(strCheckOptionList[i].length==2)? trimStr(strCheckOptionList[i][1]):true;		
		arrCheckOptionList[checkName.toUpperCase()]=checkValue;			
	}	
	//verification :
	//TRIM
	if(arrCheckOptionList["TRIM"]){
		if(isString || isNumeric){
			tmp_elementObject.value=trimStr(tmp_elementObject.value);
		}
	}		
	//NO_EMPTY
	if(arrCheckOptionList["NO_EMPTY"]){
		if(isString){
			if(trimStr(tmp_elementObject.value)=="") this.addErrorMsg(strErrorMSG);			
		}
	}		
	//STRING
	if(arrCheckOptionList["STRING"]){
		if(!isString) this.addErrorMsg(strErrorMSG);		
	}
	//NUMERIC
	if(arrCheckOptionList["NUMERIC"]){
		if(!isNumeric) this.addErrorMsg(strErrorMSG);		
	}
	//NUMERIC IF NOT EMPTY
	if(arrCheckOptionList["NUMERICIFNOTEMPTY"]){
		if(tmp_elementObject.value!=""&& !isNumeric)this.addErrorMsg(strErrorMSG);
	}		
	
	// NOT EMPTY AND DATE WELL FORMED
	if(arrCheckOptionList["DATENOTEMPTY"]){
		if(tmp_elementObject.value=="" ||!isWellFormed)this.addErrorMsg(strErrorMSG);
	}		
	//MIN_LEN
	if(arrCheckOptionList["MIN_LEN"]){
		tmp_checkValue=trimStr(tmp_elementObject.value);
		if(tmp_checkValue.length<parseInt(arrCheckOptionList["MIN_LEN"])) this.addErrorMsg(strErrorMSG);		
	}
	//MAX_LEN
	if(arrCheckOptionList["MAX_LEN"]){
		tmp_checkValue=trimStr(tmp_elementObject.value);
		if(tmp_checkValue.length>parseInt(arrCheckOptionList["MAX_LEN"])) this.addErrorMsg(strErrorMSG);		
	}
	//EMAIL
	if(arrCheckOptionList["EMAIL"]){
		tmp_checkValue=trimStr(tmp_elementObject.value).split("@");		
		if((tmp_checkValue.length<2 || tmp_checkValue.length>3) || tmp_checkValue[1].indexOf(".")<0 || tmp_checkValue[1].indexOf(".")==tmp_checkValue[1].length-1) this.addErrorMsg(strErrorMSG);
	}
	//REGMASK
	if(arrCheckOptionList["REGMASK"]){
		userRegExp=arrCheckOptionList["REGMASK"].match(/\{[\|\w]+\}/g);
		tmp_UserRegExp=arrCheckOptionList["REGMASK"];
		if(userRegExp){
			for(i=0;i<userRegExp.length; i++){
				userRegExpParams=userRegExp[i].replace(/[\{\}]/gi,"").toLowerCase().split("|");
				realRegExp=(userRegExpParams[0]=="alpha")?"[A-Za-z]":(userRegExpParams[0]=="num")?"[0-9]":(userRegExpParams[0]=="alphanum")?"[A-Za-z0-9]":".";
				if(userRegExpParams[1] && !isNaN(parseInt(userRegExpParams[1]))){
						unite=realRegExp;
						for(ii=1;ii<parseInt(userRegExpParams[1]);ii++)realRegExp+=unite;
				}
				tmp_userRegExp=userRegExp[i].replace(/\{/,"\\{").replace(/\}/,"\\}").replace(/\|/,"\\|");
				tmp_UserRegExp=tmp_UserRegExp.replace(new RegExp(tmp_userRegExp),realRegExp);				
			}
			isRegMask=tmp_elementObject.value.match(new RegExp(tmp_UserRegExp));
			if(!isRegMask) this.addErrorMsg(strErrorMSG);			
		}
	}
	//REQVALUE
	if(arrCheckOptionList["REQVALUE"]){
		if(tmp_elementObject.value!=arrCheckOptionList["REQVALUE"]) this.addErrorMsg(strErrorMSG);
	}
	return true;
}


checkform.prototype.check=function(boolDisplayErrors){
	if(this.errorMsg!=="") DisplayErrorMSG(this.errorMsg);
	if(this.validSubmit && !this.formError) return true;
	return false;
}

/* function pouvant etre modifier par l'utilisateur pour l'affichage des messages d'erreurs.
   mais ne devant pas changer de nom. */
function DisplayErrorMSG(strErrorMsg){
	alert("Veuillez corriger les champs suivants :\n"+strErrorMsg)
}

//test
function checkDate(dc)
{
 maDate = new Date();
  jour = maDate.getDate();
  mois = maDate.getMonth() + 1;
  annee = maDate.getYear();
  if (annee<1900){annee+=1900};
  
  today = jour + '/' + mois + '/' + annee

// alert("Nous sommes le : "+today);
  return ComparerDates(today, dc);
	
}

// Renvoye une date en format anglais avec le séparateur choisi "02/03/1981" -> "1981-3-2"
// Le premier paramètre est la date a convertir, le second est le caractère de séparation choisi
function DateAnglaise(LeParam1,LeParam2){

LaDate = new Array(3);
LaDate = DecomposeDate(LeParam1);

LeRetour = LaDate[2]+LeParam2+LaDate[1]+LeParam2+LaDate[0];
return LeRetour;
}

function DecomposeDate(LeParam1){ 

// Sépare les jours, les mois et les années dans une date de type "22/05/1981"
// Renvoye le tout dans un tableau de taille 3

LeRetour = new Array(3);
LeJour="";
LeMois="";
LeAnnee="";

// Extraction du jour
i=0;
while((LeParam1.charAt(i)!="/")&&(i<10)){
LeJour+=LeParam1.charAt(i);
i++;
}
if(LeJour.charAt(0)=="0"){
LeJour=LeJour.charAt(1);
}
LeParam1=LeParam1.substring(i+1,LeParam1.length);

// Extraction du mois
i=0;
while((LeParam1.charAt(i)!="/")&&(i<10)){
LeMois+=LeParam1.charAt(i);
i++;
}
if(LeMois.charAt(0)=="0"){
LeMois=LeMois.charAt(1);
}
LeParam1=LeParam1.substring(i+1,LeParam1.length);


// Extraction de l'année
LeAnnee=LeParam1;
LeRetour[0]=LeJour;
LeRetour[1]=LeMois;
LeRetour[2]=LeAnnee;
return LeRetour;
}


function ComparerDates(LeParam1,LeParam2){

// Compare 2 dates au format jj/mm/aaaa
// Renvoye 0 si égalité, 1 si la première est supérieure, sinon 2

var LeParam1 = DateAnglaise(LeParam1,"/");// Ne pas oublier d'utiliser cette fonction
// pour convertir en date anglaise, sinon le 05/07/2003 sera compris "7 mai 2003" par JavaScript

var LeParam2 = DateAnglaise(LeParam2,"/");
LeParam1 = Date.parse(LeParam1);
LeParam2 = Date.parse(LeParam2);

if (LeParam1 == LeParam2) { 
return 0;
}

if (LeParam1 > LeParam2){
return 1;
}else{
return 2;
}
}

function checkForm(){
	MyForm=new checkform("form");
	/*
		options possible pour la verifivation des champs de formulaire :
		NO_EMPTY ==> champs vide refuses 
		STRING ==> champs chaine de caractere obligatoire.
		NUMERIC ==> le champs ne doit contenir que des chiffres.
		TRIM ==> supprime les espaces inutile et corrige le champs avant validation.
		MIN_LEN:XXXX ==> nombre minimum de caracteres dans un champ.
		MAX_LEN:XXXX ==> nombre maximum de caracteres dans un champ.
		EMAIL ==> verification que l'email est conform.
		REGMASK:regMask ==> {alphanum|xx} ==> une chaine contenant des lettres et des chiffres.
							{alpha|xx} ==> une chaine ne contenant que des lettres.
							{num|xx} ==> une chaine ne contenant que des chiffres.
							{chr|xx} ==> une chaine contenant n'importe quel caractere.
							
							les xx doivent etre remplacer par le nombre de caractere requis dans la chaine.
							si une chaine doit contenir 3 lettre : {alpha|3}
							
		REQVALUE:value ==> permet de definit la valeur obligatoire d'un champs.
	 */

	/* voici ensuite a koi se reduit un verification de formulaire */
	MyForm.addField("nom", "- Nom: Champ vide !", "NO_EMPTY");
	//MyForm.addField("prenom", "Prenom: Champ vide !", "NO_EMPTY");
	MyForm.addField("email", "- Email: Champ vide ou incorrect !", "NO_EMPTY,EMAIL");
	MyForm.addField("adresse", "- Adresse: Champ obligatoire", "NO_EMPTY");
	MyForm.addField("codepostale", "- Code postal: Champ vide ou incorrect", "NO_EMPTY,NUMERIC");
	MyForm.addField("ville", "- Ville: Champ vide ou incorrect", "NO_EMPTY,STRING");
	MyForm.addField("pays", "- Pays: Champ vide ou incorrect", "NO_EMPTY,STRING");
	MyForm.addField("tel_fix", "- Tel fixe: Champ incorrect", "NUMERICIFNOTEMPTY");
	MyForm.addField("tel_mobile", "- Tel mobile: Champ incorrect", "NUMERICIFNOTEMPTY");
	MyForm.addField("date_fin", "- Date de depart: Ce champ est obligatoire et doit etre sous la forme jj/mm/aaaa", "DATENOTEMPTY");
	MyForm.addField("date_debut", "- Date d'arrivee: Ce champ est obligatoire et doit etre sous la forme jj/mm/aaaa", "DATENOTEMPTY");
	
	SubmitForm=MyForm.check(true);
	if(SubmitForm)
	{
		SubmitForm=datesCoherentes();
		if(!SubmitForm)
		alert("La date de retour doit etre superieure a celle de depart");
	}

	if(SubmitForm)
	{
		SubmitForm=datesCoherentesBis();
		if(!SubmitForm)
		alert("Les dates d'arrivee et de depart ne peuvent pas etre inferieures a celle d'aujourd'hui");
	}

	if(SubmitForm) 
	return true;
	return false;
} // Fin fonction checkForm()


// Debut fonction checkTemoigForm
function checkContactForm()
{
	MyForm=new checkform("fcontact");
	MyForm.addField("nom", "- Nom: Saisir votre nom svp", "NO_EMPTY,STRING");
	MyForm.addField("prenom", "- Prenom: Saisir votre prenom svp", "NO_EMPTY,STRING");
	MyForm.addField("email", "- Email: Saisir votre email", "NO_EMPTY,EMAIL");
	MyForm.addField("message", "- Message: Saisir votre message", "NO_EMPTY,STRING");
	SubmitForm=MyForm.check(true);
	if(SubmitForm)
	return true;
	return false;
}//Fin fonction checkTemoigForm

// Debut fonction checkTemoigForm
function checkTemoigForm()
{
	MyForm=new checkform("temoignage");
	MyForm.addField("Nom", "- Nom: Saisir votre nom svp", "NO_EMPTY,STRING");
	MyForm.addField("ville", "- Ville: Saisir votre lieu de residence", "NO_EMPTY,STRING");
	MyForm.addField("titre", "- Titre: Saisir un titre pour votre temoignage", "NO_EMPTY,STRING");
	MyForm.addField("mois", "- Mois: Saisir le mois et l'annee de votre voyage", "NO_EMPTY,STRING");
	MyForm.addField("randoname", "- Randonnee: Precisez la randonnee a laquelle vous avez participe", "NO_EMPTY,STRING");
	MyForm.addField("temoignage", "- Votre temoignage est manquant !! ;-)", "NO_EMPTY,STRING");
	SubmitForm=MyForm.check(true);
	if(SubmitForm)
	return true;
	return false;
}//Fin fonction checkTemoigForm


function datesCoherentes(){
	
	var dd=document.form.date_debut.value;
	var df=document.form.date_fin.value;
	dd=dateToString(dd);
	df=dateToString(df);
	
	if(dd>df)return false;
	else return true;
	//return true;
	
	
}

function datesCoherentesBis(){
	
	var dd=document.form.date_debut.value;
	var df=document.form.date_fin.value;
	//dd=dateToString(dd);
	//df=dateToString(df);
	
	if (checkDate(dd)  != 2) return false;
	else if (checkDate(df)  != 2) return false;
		else return true;
}
