//Vérifie si le champ est un entier : 
//Le champ ne peut contenir que des caractères allant de 0 à 9
//Paramètre "champ" >>> chemin du champ contenant la valeur à tester (Exemple d'appel: estUnEntier(document.form.valeur))
function getRadioVal(rb)
{var L=rb.length;var ret="";
for (var i = 0 ; i< L ; i++)
{if(rb[i].checked) {ret=rb[i].value;break;}}
return(ret);
}

function UpdateChecked(sIdFrom,sIdTo, sValue){
	if(document.getElementById(sIdFrom) && document.getElementById(sIdTo)){
	  if(document.getElementById(sIdFrom).checked == true){
			  document.getElementById(sIdTo).value=sValue;
			}
	}
}

function estUnEntier(champ)
{
	var verif=/^[0-9]+$/
	if (!verif.test(champ.value)) {
		return false;
    }
    return true;
}
// Fonction verifiant si le champ est un reel
// La fonction accepte la virgule et le point comme séparateur pour les décimales.
// Paramètre "champ" >>> chemin du champ contenant la valeur à tester (Exemple d'appel: estUnReel(document.form.valeur))
function estUnReel(champ)
{
	var verif=/^[0-9]+([,.][0-9])?[0-9]*$/
	if (!verif.test(champ.value)) {
		return false;
    }
    return true;
}
//Vérifie la validité d'une adresse mail par expression régulière : 
//N'importe quel caractère et/ou chiffre + "@" + au moins 2 caractères et/ou chiffres + "." + 2 ou 4 caractères
//Paramètre "champ" >>> chemin du champ contenant l'email (Exemple d'appel: estUnMail(document.form.email))
function estUnEmail(champ)
	{
    var strValeur;
    strValeur = champ.value;	
    var verif     = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]{2,}[.][a-zA-Z]{2,4}$/
		if (verif.exec(strValeur) == null)
		{
		return false;
		}    
return true;
}
// Fonction vérifiant la validité d'une date 
// ainsi que si elle est postérieure à la date du jour pour un départ
// ou inférieure à la date du jour pour une date de naissance
// Les paramètres "DateDepart" et DateNaissance sont booléens et doivent prendre
// les valeurs 0 ou 1. Les 2 paramètres sont mutuellement exclusifs
// La fontion accepte tous les séparateurs possibles pour le jour le mois et l'année
// et renvoie la date au format JJ/MM/AAAA
function VerifDate(champ,DateDepart,DateNaissance) { 
	var Separateur = new RegExp("[^0-9]","g"); /*Filtre pour tous les caractères non numériques*/
	var StructureDate = new RegExp("^(0[1-9]|[1-2][0-9]|[3][0-1])(0[1-9]|[1][0-2])(19|20)?[0-9][0-9]$");/*Filtre pour la structure des dates à 6 ou 8 caractères*/
	var erreur=0;
	var Aujourdhui = new Date();/*Stocke la date du jour au format date javascript*/
	var DateTestee = champ.value.replace(Separateur,"");/*Supprime tous les caractères non numériques dans la date saisie*/
	if (!StructureDate.test(DateTestee)) {erreur=1} /*Vérifie si la date expurgée des caractères non numériques respecte une structure de date à 6 ou 8 caractères*/
	else {
		if (DateTestee.length==6) { /*Si la date saisie contient une année à deux chiffres seulement*/
			if (parseInt(DateTestee.substring(4,6))<50) {DateTestee=DateTestee.substring(0,4)+"20"+DateTestee.substring(4,6)} /*si l'année à deux chiffres est inférieure à 50, on considère que c'est le 21ème siècle*/
			else {DateTestee=DateTestee.substring(0,4)+"19"+DateTestee.substring(4,6)}} /*si l'année à deux chiffres est supérieure ou égal à 50, on considère que c'est le 20ème siècle*/
		var DateJs = new Date(DateTestee.substring(4,8), DateTestee.substring(2,4) - 1, DateTestee.substring(0,2)); /*Transforme la date saisie en date javascript*/
		if(DateJs.getDate()!=DateTestee.substring(0,2)||(DateJs.getMonth()+1)!=DateTestee.substring(2,4)||DateJs.getFullYear()!=DateTestee.substring(4,8)){erreur=2} /*Teste si la date javascript est la même que la date saisie*/
	}
	if (erreur==1) {alert("Veuillez saisir une date au format jjmmaaaa!");return false;}
	if (erreur==2) {alert("La date saisie n'existe pas !");return false;}
	if (DateJs<Aujourdhui && DateDepart==1) {alert("La date de départ doit être postérieure à la date d'aujourd'hui !");return false;}
	if (DateJs>Aujourdhui && DateNaissance==1) {alert("Une date de naissance ne peut pas être postérieure à la date d'aujourd'hui !");return false;}
	champ.value=DateTestee.substring(0,2) + "/" + DateTestee.substring(2,4) + "/" + DateTestee.substring(4,8)
	return true;
}

function valideEmail(email)
{
// a very simple email validation checking.
// you can add more complex email checking if it helps
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null)
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

// Verifie si le champ saisi est une date valide
//
function estUneDate(value)
{
	var bErr;
	var strValeur;
	var strJour, strMois, strAnnee;
    var intJour, intMois, intAnnee;
	var strSeparateur1, strSeparateur2;

	bErr = 0;
	strValeur = value;
    
    // Verification de la longueur
	if (strValeur.length != 10)
	    bErr = 1;

    // Separation des chaines j/m/a
	strJour = strValeur.substring(0, 2);        // jour
	strSeparateur1 = strValeur.substring(2, 3); // '/'
	strMois = strValeur.substring(3, 5);        // mois
	strSeparateur2 = strValeur.substring(5, 6); // '/'
	strAnnee = strValeur.substring(6);          // année

    // Conversion des chaines en entier
    intJour = parseInt(strJour, 10);
    if (isNaN(intJour))
        bErr = 1;
    intMois = parseInt(strMois, 10);
    if (isNaN(intMois))
        bErr = 1;
    intAnnee = parseInt(strAnnee, 10);
    if (isNaN(intAnnee))
        bErr = 1;
	if (intAnnee < 1900 || intAnnee > 2099)
        bErr = 1;

	// Erreurs de base
	//

        if (intJour < 1 || intJour > 31)
            bErr = 1;
        if (strSeparateur1 != '/')
            bErr = 1;
        if (intMois < 1 || intMois > 12)
            bErr = 1;
        if (strSeparateur2 != '/')
            bErr = 1;


	// Erreurs avancées

	// Mois comportant 30 jours
	if (intMois == 4 || intMois == 6 || intMois == 9 || intMois == 11)
	{
		if (intJour == 31)
		    bErr = 1;
	}

	// Février, année bisextile
	if (intMois == 2)
	{
        if (intJour > 29)
		    bErr = 1;
        if ((intJour == 29) && (!AnneeBisextile(intAnnee)))
            bErr = 1;
	}

    if (bErr == 1)
    {
        return false;
    }

    return true;
}



//##########  FONCTIONS DE VALIDATION DES FORMULAIRE ################
function InitLabelClass(){
	if(document.getElementsByTagName){
  	cLabel=document.getElementsByTagName('label');
  	for(i=0;i<cLabel.length;i++){
			cLabel[i].className="inherit";													 
  	}
  }
}

function GetLabelFor(sInputId){
		if(document.getElementsByTagName){
			cLabel=document.getElementsByTagName('label');
			
			for(iLabel=0;iLabel<cLabel.length;iLabel++){
				if(cLabel[iLabel].htmlFor==sInputId){return cLabel[iLabel];}
			}
			return null;
		}
}

function BuildErrorMessage(oInput, sMessage, sControl){
		var m_sError='';
		var bMessageDone=false;

		if (!oInput) return '';
		
		if(!oInput.type){
			//Il s'agit d'un tableau d'inputs
  		for(i=0; i<oInput.length;i++){
  			if(!ControlValueOk(oInput[i].value, sControl)){
  				if (!bMessageDone){
  					 m_sError=sMessage;
  					 bMessageDone=true;
  				}// end - if (!bMessageDone)
  				cLabels[cLabels.length]=GetLabelFor(oInput[i].id);
  			}// end - if(oInput[i].value=="")
  		}// end - for(i=0; i<oInput.length;i++)
			
		}else{
			//il s'agit d'un input isolé
			if(!ControlValueOk(oInput.value, sControl)){
    		m_sError=sMessage;
    		cLabels[cLabels.length]=GetLabelFor(oInput.id);
    	}
		}// end - if(oInput.length)
		
		
		return m_sError;
}

function ControlValueOk(sValue, sControl){
  
	switch (sControl){
		case 'isInt':
    		 var re = /^[0-9]+$/
				 return sValue.match(re) && parseInt(sValue)>0;
				 //return parseInt(sValue);
				 break;
		case 'telFR':
				 var re = /^(0[12345689])[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}[ \.\-]?[0-9]{2}$/	// Accepte un numero de téléphone de type 'national' y compris numéros en '08'.
				 return sValue.match(re);
				 break;
		case 'tel':
				 var re = /^[0-9\(\)\+\.\/\-\s]+$/	// Accepte un numero de téléphone de type 'international'. Ex : (+33) 1 34 12 52 30
				 return sValue.match(re);
				 break;
		case 'cpFR':
				 var re = /^([A-Z]+[A-Z]?\-)?[0-9]{1,2} ?[0-9]{3}$/	// Accepte une chaine de type 'code postal'. Ex : F-33370 ou 33 370 ou 33370 ou F-1 370				 
				 return sValue.match(re);
				 break;
		case 'cp':
				 var re = /^([a-zA-Z0-9-\/ ().]{4,8})$/	// Accepte une chaine de type 'code postal' autre que la France. Ex : NH- 5JT				 
				 return sValue.match(re);
				 break;
		case 'email':
				 return valideEmail(sValue)
				 break;
		case 'jjmmaaaa':
				 return !(sValue=='jj/mm/aaaa')
		case 'date':
				 return  estUneDate(sValue)
		default :
				 return sValue!="";
				 break;
	}// end - switch
	
}

var _checkCharErrorRaised=false;
function checkCharacters(oTextArea){
	if(String(oTextArea.value).substr(String(oTextArea.value).length-1)=='>' || String(oTextArea.value).substr(String(oTextArea.value).length-1)=='<' ){
		if(!_checkCharErrorRaised){
			_checkCharErrorRaised=true;
			alert('Les caractères < et > ne sont pas autorisés, ils seront automatiquement supprimés.');
		}
		oTextArea.value=String(oTextArea.value).substring(0,String(oTextArea.value).length-1);
	}
}