/*

Ce fichier contient les fonctions necessaires pour 
valider un formulaire automatiquement

Auteur	Antonin Hay	
Date	08-08-2001
Version 1.1
*/
function trimInner(s)
{
/*
Cette fonction a pour but d'eliminer tous les espace au début et a la fin
de la chaine s si la chaine est vide ou null alors retourne une chaine vide
("")
*/
var debut=0;
var fin=0;
var compteur=0;

//determine si la chaine contient une valeur
if( s==null || s.length==0 )
  return "";

//si la chaine est non-null fais le traitement pour enlever les espace
for (compteur=0;compteur<s.length;compteur++)
{
  if (s.charAt(compteur)!=" ")
  {
   debut=compteur;
   for (compteur =s.length;compteur>=debut;compteur--)
   {
    if (s.charAt(compteur)!=" ")
    {
     fin=compteur;
     return s.substring(debut,fin);
    }
   }
  }
}
return ""
}
/*
function valider

Cette function sert verifier un input 
selon le type de champ passer en parametre

param 
	input		->	c'est l'input dut formulaire 
					sous forme document.form.nomInput
	dataType	->	le type de valeur que cette input doit 
					contenir :
					1 - String
					2 -	integer
					3 - real
					4 - email
					5 - url (http://)
					6 -	image (.jpeg,.gif)
					7 - Date DD/MM/YY ou DD/MM/YYYY
					8 - Date MM/DD/YY ou MM/DD/YYYY
					9 - Carte de credit

	message		->	message d'erreur que l'on doit 
					afficher au client
	isRequired 	->  determine si le champs necessite 
					une valeur ou non 
	separator	->	Ce param sert a determiner 
					quel sera le separateur pour 
					le valeur multiple (select multiple ou 
					input multiple portant le meme nom)
					
return
	retourne true si la valeur est conforme au type ou 
	et que la valeur est presente si elle est obligatoire
	sinon retourne false						

auteur	Antonin Hay
date	01/08/2001	
				
*/
function valider(input,dataType,message ,isRequired,separator){
	
	//on verifie si l'usager a specifier un separator
	//si non on l'initialise
	if(typeof separator == "undefined"){
		separator="\r";
	}
	//on verifie si l'input existe
	if (typeof input != "undefined"){
		//on verifie si une valeur est requise
		var value = getValueInner(input,separator);
		
		if (trimInner(value)==""){
			if (isRequired){
				alert(message);
				setFocusInner(input);
				return false;	
			}
			else {
				return true;						
			}	
		}
		else{				
			if (!eval('isType'+dataType+'(value);')){
				alert(message);	
				setFocusInner(input);
				return false;
			}else
				return true;
		}	
	}
	else{
		return true;
	}		
	
}
/*
function getValue

	Cette function sert a aller chercher la valeur d'un input passer en
parametre 

param 
	input	->	l'object input dont on veut aller chercher la valeur

return		
	la valeur qu'a cette input

auteur	Antonin Hay
date	01/08/2001		
	
*/
function getValueInner(input,separator) {
	var value = "";
	var type=""
	var mustTrim =false;
	if (typeof input != "undefined" ){
		var count=getCountInner(input);
		if (count>1) 
			type=input[0].type;
		else
			type=input.type;		
		//alert(count)	;

		if (count > 1) {
			//on boucle sur tous les elements qui porte le nom de cette input
			for (var i=0;i<count;i++) {
			
				if (type=="radio" || type=="checkbox"){
					if (input[i].checked==true) {
						value+=input[i].value+separator;	
						mustTrim=true;		
					}
				}		
				else if(type=="select-one" ){
					if(input[i].options[input[i].selectedIndex].value!=""){
						value += input[i].options[input[i].selectedIndex].value+separator ;			
						mustTrim=true;
					}
				}	
				else if (type=="select-multiple" ){
					for (var j in input[i].options) {
						if (input[i].options[j].selected==true){
							 value+=input[i].options[j].value+separator;					
							 mustTrim=true;
						}	 
						j++;
					}//for							
				}//else if
				else{
					if (trimInner(input[i].value)!=""){			
						value+=input[i].value+separator;					
						mustTrim=true;
						}
					}
			}//for			
		}//if	
		//on execute cette partie si l'input existe
		else if(typeof input != "undefined") {
			if(type=="select-one" ){
				value = input.options[input.selectedIndex].value ;			
				//alert (value);
			}	
			else if (type=="select-multiple" ){
				for (var i in input.options) {
					if (input.options[i].selected==true) {
						 value+=input.options[i].value+separator;
						 mustTrim=true;					
					}	 
					j++;
				}//for							
			}//else if
			else if (type=="radio" || type=="checkbox"){
				if (input.checked==true) {
						value=input.value;			
				}
			}
			else{
				value=input.value;
			}	
		}//else if
	}
	if (mustTrim==true) {
		value = value.substring(0,(value.length-separator.length));
	}
	//alert(value);	
	return value;
}
function getCountInner(input){
	if (typeof input.length != "undefined"){	
		 if(typeof input.type == "undefined" ){
			return count = input.length;
			}
		 else {
			return 1;			 	
		}
	}
	else{
		return 1;
	}
}
function setFocusInner(input){
	if( getCountInner(input)>1) {
		//alert("set");
		input[0].focus();
	}	
	else{
		
		input.focus();
	}	
}

/*
function isType1

Cette function valide les chaine de charactere

param
	value -> la valeur a tester
return
	true si la valeur est une chaine de char

auteur	Antonin Hay
date	01-08-2001
*/
function isType1(value){
	if (trimInner(value)!="" && value!=null) {
		return true;
	}
}
/*
function isType2

Cette function valide le entiers

param
	value -> la valeur a tester
return
	true si la valeur est un entier valide (pas de reel)

auteur	Antonin Hay
date	01-08-2001
*/
function isType2(nb)
{
   var strnumber = new String("0123456789");
   var tmp = new String(nb);
   var i = 0;
   var valid = true;
 //alert(nb.length);
   while ((i < nb.length) && (valid))
   {
      valid = strnumber.indexOf(nb.charAt(i)) != -1;
      i++;
   }
   return valid;
}
/*
function isType3

Cette function valide les reel

param
	value -> la valeur a tester
return
	true si la valeur est un reel valide

auteur	Antonin Hay
date	01-08-2001
*/
function isType3(StrNombre)
{
  var Valide = true;
  var PosSeparateur;
  
  PosSeparateur = StrNombre.indexOf(".");
  
  if (PosSeparateur == -1)
    PosSeparateur = StrNombre.indexOf(",");
    
  if (PosSeparateur > -1)
  {
    var PremierePartie = new String (StrNombre.substring(0, PosSeparateur));
    var SecondePartie = new String(StrNombre.substring(PosSeparateur + 1, StrNombre.length ));
    
    
    Valide = isType2(PremierePartie);
    
    if (Valide)
      Valide = isType2(SecondePartie);
  }
  else
  {
    Valide =isType2(StrNombre);
  }

  return Valide;
}
/*
function isType4

Cette function valide les emails

param
	value -> la valeur a tester
return
	true si la valeur est un email vailide : nom@domaine.ext

auteur	Antonin Hay
date	01-08-2001
*/
function isType4(value){
	if ((value.indexOf("@") == -1|| value.indexOf(".") == -1) || (value.indexOf("@") > value.lastIndexOf(".")))
		{		
			return false;	
		}
	return true;
}
/*
function isType5

Cette function valide les adresse internet (URL)

param
	value -> la valeur a tester
return
	true si la valeur est un email vailide : http://adresse.du.site
auteur	Antonin Hay
date	01-08-2001
*/
function isType5(value){
	var lien;	
	if( value.length >= 7) {
		if(value.toUpperCase().substring(0,7)!="HTTP://") 
			return false;
		else
			return true;	
	}
	else
		return false;
	
	
}
/*
function isType6

Cette function valide les extension pour 
determiner si ce sont des images valides

param
	value -> la valeur a tester
return
	true si la valeur est une image valide (gif ,jpg)
auteur	Antonin Hay
date	01-08-2001
*/
function isType6(value){
	var extension,point	
	point = value.lastIndexOf('.');
	if (point > -1){
		extension = value.substring(point+1,value.length);
		if (extension.toUpperCase()=="GIF" ||extension.toUpperCase()=="JPG" ||extension.toUpperCase()=="JPEG"  )
			return true;
		else 
			return false;
	}
	else
		return false; 
}
/*
function isType7

Cette function valide les dates
de type DD/MM/YY ou DD/MM/YYYY

param
	value -> la valeur a tester
return
	true si la valeur est une date valide
	
auteur	Antonin Hay
date	01-08-2001
*/
function isType7(value){
	value=value.replace("-","/");
	if (value.length==8 || value.length==10){
		return validDate(value.substring(0,2),value.substring(3,5),value.substring(6,value.length));
	}else
		return false;
}
/*
function isType8

Cette function valide les dates
de type MM/DD/YY ou MM/DD/YYYY

param
	value -> la valeur a tester
return
	true si la valeur est une date valide
	
auteur	Antonin Hay
date	01-08-2001
*/
function isType8(value){
	value=value.replace("-","/");
	if (value.length==8 || value.length==10){
		return validDate(value.substring(3,5),value.substring(0,2),value.substring(6,value.length));
	}else
		return false;
}
function isType9(numero){
	var test=0
	var num=0;
	var dnum=0;
	var totalcarte=0;
	if (numero.length < 13) {
          return false;
        }
    else
        {
        for ( i = numero.length; i >= 1 ;  i--)
			{
		    test=test+1;
			num = numero.charAt(i-1);
			if ((test % 2) != 0)
				totalcarte=totalcarte+parseInt(num)
			else {
				dnum=parseInt(num)*2;
				if (dnum >= 10)
					totalcarte=totalcarte+1+dnum-10
				else
					totalcarte=totalcarte+dnum;
				}
			}//FOR
			if ((totalcarte % 10) != 0){
				return (false);
			}
			else{
				return(true);
			}
		}//else
}//isType9
/*
Cette function permet de valider un date passer en 
parametre(jour ,mois ,annee)
	
*/
function validDate(dDay, dMonth, dYear)
{

 var strDay = new String(dDay);
 var strMonth = new String(dMonth);
 var strYear = new String (dYear);
 var Valid = false;   
    
 if((strYear.length == 4)||(strYear.length == 2))
  if (isType2(strYear))
	{
     var NYear = new Number (strYear);    //Si l'année est valide la transformer en entier
     if (isType2(strMonth))
     {
        var NMonth = new Number (strMonth);  //Transformer le mois en entier
         
        //Vérifier si le mois se trouve entre janvier(1) et décembre(12)
        if ((NMonth >= 1 && NMonth <= 12))
           if (isType2(strDay))
           {
             var NDay = new Number (strDay);  //Transformer le jour en entier
             
             //Valider le jour pour les mois de janvier, mars, mai, juillet, aout, octobre et décembre
             if(NMonth == 1 || strMonth == 3 || strMonth == 5 ||strMonth == 7 ||strMonth == 8 ||strMonth == 10 ||strMonth == 12){
               if ((NDay >= 1 && NDay <= 31) ){
                 Valid = true;
               }
             }     
             else{
				
               //Valider le jour pour les mois de avril, juin, septembre et novembre
               if (NMonth != 02){
                 if ((NDay >= 01 && NDay <= 30) ){
                   Valid = true;                   
                   }
               }    
               else{
				  
                 //Valider le jour pour le mois de février en vérifiant s'il s'agit d'une année bissectile
                 if((NYear % 4) == 0){					
                   if ((NDay >= 1 && NDay <= 29) ){
                   
                     Valid = true;
                     }
                 }    
                 else{
                   if ((NDay >= 1 && NDay <= 28) ){
                     Valid = true;                   
                     }
                 }    
               }      
             }        
           } 
      }
	}
 return Valid;
}