// Le constructeur de la classe Formulaire ...
function FormClass(formName) {
  this.name = formName;
  this.inputs = new Array(100);
  this.counter = 0;
}

// Ajoute un champ à contrôler lors du submit au formulaire theForm
//add2Form(myForm, 'LE nom de l'input dans le formulaire', 'Le libellé de l'input pour l'utilisateur', 'Le type de l'input', Est-ce un champ obligatoire ? );
function add2Form(theForm, inputName, inputLib, inputType, isMandatory) {
  theForm.inputs[theForm.counter] = new Array(inputName, inputLib, inputType, isMandatory);  
  theForm.counter ++;
}

// Fonction permettant la réalisation du contrôle de la validité des informations
// saisies dans le formulaire
function checkForm(theForm) {
  for (i=0; i<theForm.counter; i++) {
   eval("empty = (trim(document."+theForm.name+"."+theForm.inputs[i][0]+".value) == \"\")");
   if (theForm.inputs[i][3] == true) {
	 if (empty) {
	  alert("Le champ "+theForm.inputs[i][1]+" est obligatoire");
	  eval("document."+theForm.name+"."+theForm.inputs[i][0]+".focus()");
	  return false;
	 }
   }
   
   theCheck = "";
   if (theForm.inputs[i][2] != '' && !empty) {
    eval("theCheck = check"+theForm.inputs[i][2]+"(document."+theForm.name+"."+theForm.inputs[i][0]+")");      
    if (theCheck != "") {
	 eval("document."+theForm.name+"."+theForm.inputs[i][0]+".focus()");
     alert("Le champ "+theForm.inputs[i][1]+" "+theCheck);
 	return false;
    }
   }
  }
  return true;
}

function checkDate_AAAA(theField) {
	theExp = new RegExp("^([0-9]{0,1}[0-9])/([0-9]{2})/([0-9]{4})$");
	return (checkDateWithRegex(theField, theExp));
}

function checkDate_AA(theField) {
	theExp = new RegExp("^([0-9]{0,1}[0-9])/([0-9]{2})/([0-9]{2})$");
	return (checkDateWithRegex(theField, theExp));
}

function checkDate_AA_ou_AAAA(theField) {
	ret1 = checkDate_AA(theField);
	ret2 = checkDate_AAAA(theField);
	if((ret1=="")||(ret2=="")){
		return "";
	}
	else{
		return (ret1=="")?ret2:ret1;	
	}
}

function checkDate_AA_AAAA(theField) {
	theExp = new RegExp("^([0-9]{2})/([0-9]{4})$");
	return (checkDateExpire(theField, theExp));
}

function checkDateExpire(theField, theExp) {
	recup = theExp.exec(theField.value);
if (RegExp.$1 == "" || RegExp.$2 == "") {
 return ("n'est pas un format de date valide\nFormat de date : MM/AAAA");
}
return "";
}
// Verifie que la date n'est pas supperieure a la date du jour
function checkDateInfDateJour(theField){
	var laDate;
	if(theField.value.length==8){
		laDate = new Date('20'+theField.value.substr(6,2),theField.value.substr(3,2)-1,theField.value.substr(0,2));	
	}
	else if(theField.value.length==10){
		laDate = new Date(theField.value.substr(6,4),theField.value.substr(3,2)-1,theField.value.substr(0,2));	
	}
	else{
		return 'n\'est pas un format de date valide';
	}
	
	var dateJour = new Date();
	var diffSeconde = Math.floor(dateJour.getTime()-laDate.getTime());
	if(diffSeconde>0){
		return "";
	}
	else{
		return 'a une date superieure à la date du jour !';
	}
}

// Vérifie que la valeur du champ theField correspond bien à un format de date
function checkDateWithRegex(theField, theExp) {
 // On teste l'expression régulière passée en paramètre
 recup = theExp.exec(theField.value);
 // Au cas où le format est mauvais (jj/mm/aaaa)
 if (RegExp.$1 == "" || RegExp.$2 == "" || RegExp.$3 == "") {
 	return ("n'est pas un format de date valide\nFormat de date : JJ/MM/AAAA");
 }
 // Tout le reste de la fonction permet de vérifier que le mois
 // saisi est valide et que le jour saisi peut être un jour de ce mois
 jour = RegExp.$1;
 mois = RegExp.$2;
 
 maxJ = 31;
 
 if (mois<1 || mois > 12) {
  return ("n'est pas un format de date valide (mois invalide)");
 }
 
 if (mois == 4 || mois == 6 || mois == 9 || mois == 11) {
  maxJ = 30;
 }
 
 if (mois == 2) {
  maxJ = 28;
 }
 
 if (jour<1 || jour > maxJ) {
  return ("n'est pas un format de date valide (jour invalide pour ce mois)");
 }
 
 return "";
}

// Vérifie que la valeur du champ theField correspond bien à un format de mail (xxx@xxx.xxx)
function checkMail(theField) {
	var val = theField.value;
	if ((val.indexOf('@')<0)){
		return 'n\'est pas valide !';		
	}
	else{
		var pos = val.indexOf('@');
		if (val.indexOf('.',pos)< 0){
			return 'n\'est pas valide !';
		}
	}
	return "";
}

//*********************************************************
// Fonctions de suppression d'espace au debut et a la fin d'une chaine
//*********************************************************

// Enleve les blancs au debut d'une chaine
function ltrim(s){
	return s.replace( /^\s*/, "" )
}

// Enleve les blancs a la fin d'une chaine
function rtrim(s){
	return s.replace( /\s*$/, "" );
}


// Enleve les blancs au debut et a la fin d'une chaine
function trim ( s ){
	return rtrim(ltrim(s));
}


// Vérifie que la valeur du champ theField ne contient pas de chiffre
function checkOnlyAlpha(theField) {
	
	var checkOK = "0123456789.";
	var checkStr = theField;
	var allvalid = 1;
	
	
	
	
	for (i = 0;  i < checkStr.value.length;  i++){
		ch = checkStr.value.charAt(i);
		var tmpvalid = 1;
		for (j = 0;  j < checkOK.length;  j++){
			
			if (ch == checkOK.charAt(j)){
				tmpvalid = 0;
				break;
			}
			if (j == checkOK.length){
				break;
			}
		}
		if(tmpvalid==0){
			break;	
		}
	}
	
	if(tmpvalid==0){
		alertsay = "Vous ne devez pas entrer de chiffre dans le champ " + checkStr.name;
		alert(alertsay);
		checkStr.focus();
		return false;
	}
	else{
		return true;
	}
}
	


function checkNumeric(objName,minval, maxval,comma,period,hyphen,message)
{
	var numberfield = objName;
	if (chkNumeric(objName,minval,maxval,comma,period,hyphen,message) == false)
	{
		numberfield.select();
		numberfield.focus();
		return false;
	}
	else
	{
		return true;
	}
}


function chkNumeric(objName,minval,maxval,comma,period,hyphen,message)
{
// only allow 0-9 be entered, plus any values passed
// (can be in any order, and don't have to be comma, period, or hyphen)
// if all numbers allow commas, periods, hyphens or whatever,
// just hard code it here and take out the passed parameters
var checkOK = "0123456789" + comma + period + hyphen;
var checkStr = objName;
var allValid = true;
var decPoints = 0;
var allNum = "";

for (i = 0;  i < checkStr.value.length;  i++)
{
ch = checkStr.value.charAt(i);
for (j = 0;  j < checkOK.length;  j++)
if (ch == checkOK.charAt(j))
break;
if (j == checkOK.length)
{
allValid = false;
break;
}
if (ch != ",")
allNum += ch;
}
if (!allValid)
{	
alertsay = "Vous ne devez entrer que des valeurs numériques"
//alertsay = alertsay + checkOK + "\" dans le champ " + checkStr.name
alertsay = alertsay + " dans le champ " + checkStr.name
if(message) alert(alertsay);
return (false);
}

// set the minimum and maximum
var chkVal = allNum;
var prsVal = parseInt(allNum);
if (chkVal != "" && !(prsVal >= minval && prsVal <= maxval))
{
alertsay = "Vous ne devez entrer que des valeurs plus grandes ou "
alertsay = alertsay + "égales à \"" + minval + "\" et plus petites ou "
alertsay = alertsay + "égales à \"" + maxval + "\" dans le champ " + checkStr.name
alert(alertsay);
return (false);
}
}

