/* AUTEUR: Anthony ROBIN */
/* DATE DE CREATION: 19/04/01 */
/* Der Modif : 31/07/01 */
//--------------------------------------------------------------------------------------------
/****************************************************************************************/
/* Function verifieformulaire(nom du formulaire, champs1, type de verification, Requis?)*/ 
/* Cette fonction permet de vérifier le formatage de chaque champs passer en param et de*/
/* tester s'il est rempli ou non. La fonction renvoie à la saisie du champs incorrect   */
/* L'appel de cette fonction se fait de la manière suivante :							*/ 
/*   <input ... onclick="return verifieformulaire(...)" > 								*/
/* Les types de verification sont :														*/
/*		- int : verifie un entier														*/
/*		- float : verifie un double														*/
/*		- nospecial : retourne une chaine sans les caractères $@\#%^&*()[]+_{}`~=|		*/
/*		- onlyint : retourne une chaine ne contenant que des chiffres					*/
/*		- phone : retourne une chaine avec les caractère utilisés dans un N° Tel		*/
/*		- email : verifie une adresse e-mail											*/	
/*		- date : verifie une date 														*/
/*		- select : verifie le champ select d'un formulaire								*/
/****************************************************************************************/

function verifieformulaire()
{
	var formulaire,variable,i;
	args = verifieformulaire.arguments;
	formulaire = document[args[0]];
	for(i=1;i<args.length;i=i+3)
	{
		variable = formulaire[args[i]];
		IsRequired = args[i+2];
		if(IsRequired && variable.value == '')
		{
			alert('La saisie est obligatoire pour ce champ, veuillez compléter');
			variable.focus();
			return false;
		}
		
		switch (args[i+1].toLowerCase())
			{
			case 'int' :
				if(variable.value!="" && !isInt(variable.value))
					{
					alert('La saisie est incorrecte pour ce champ, veuillez modifier');
					variable.focus();
					return false;
					}
				break;
				
			case 'float' :
				if(variable.value!="" && !isFloat(variable.value))
					{
					alert('La saisie est incorrecte pour ce champ, veuillez modifier');
					variable.focus();
					return false;
					}
				break;
			case 'nospecial' :
				m = variable.value;
				variable.value = stringFilter(variable.value);
				if (m != variable.value)
					alert('Les caractères spéciaux ont été retirés de votre saisie');
				break;
			case 'onlyint':
				m = variable.value;
				variable.value = stringFilterOnlyInt(variable.value);
				if (m != variable.value)
					alert('Tous les caracteres autres que des chiffres ont été rétirés');
				break;
			case 'email': 
					if (variable.value != '' && !IsEmailAddress(variable.value))
						{
						alert('Cette adresse Email saisie est invalide');
						variable.focus();
						return false;
						}
				break;
			case 'phone':
				m = variable.value;
				variable.value = telephone(variable.value);
				if (m != variable.value && !confirm('Le numéro '+variable.value+' est-il correct ?'))
					{
					variable.focus();
					return false;
					}
				break;
			case 'date':
				if(variable.value != "" && !isValidDate(variable.value))
					{
					variable.focus();
					return false;
					}
				break;	
			case 'select':
				// Teste d'une valeur 0 dans le cas d'une saisie obligatoire
				if (args[i+2] && variable.value == '0')
					{
					alert('Il faut sélectionner une valeur pour ce champ !');
					variable.focus();
					return false;
					}
				break;			
			
			// pas de test necessaire pour chaine, select
			}
		if(args[i+2] && variable.value == '')
			{
			alert('La saisie est obligatoire pour ce champ, veuillez compléter');
			variable.focus();
			return false;
			}
		
	}
	
	return true;
}

//----------------------------------------------------------------------------------------

/****************************************************************************************/
/* Function isInt(val)																	*/
/* Cette fonction vérifie à l'aide d'une expression régulière que la valeur en param est*/
/* un entier																			*/
/****************************************************************************************/

function isInt(val)
{
str = new String(val);
var isFloatArray = str.match(/^[+-]?\d+$/)
if (isFloatArray)
	return true;
else
	return false;
}

//--------------------------------------------------------------------------------------------
/****************************************************************************************/
/* Function isFloat(val)																*/
/* Cette fonction vérifie à l'aide d'une expression régulière que la valeur en param est*/
/* un nombre décimal																	*/
/****************************************************************************************/
function isFloat(val)
{
str = new String(val);
var isFloatArray = str.match(/^[+-]?\d+[\.\,]?\d*$/)
if (isFloatArray)
	return true;
else
	return false;
}
//-------------------------------------------------------------------------------------------
/****************************************************************************************/
/* Function stringFilter(input) 														*/
/* Cette fonction supprime les caractères ( $\@#%^&*()[]+_{}`~=|/) de la chaine de      */ 
/* caractères transmise 																*/
/****************************************************************************************/
function stringFilter(input) 
{
s = input;
filteredValues = " " + /[$\\@\\\#%\^\&\*\(\)\[\]\+\_\{\}\`\~\=\|]/;     // Characters stripped out
var i;
var returnString = "";
for (i = 0; i < s.length; i++) {  // Search through string and append unfiltered values to returnString.
var c = s.charAt(i);
if (filteredValues.indexOf(c) == -1) returnString += c;
}
return returnString;
}


//--------------------------------------------------------------------------------------------
/****************************************************************************************/
/* Function stringFilterOnlyInt(input) 													*/
/* Cette fonction supprime tous les caractères autres que des chiffres ou l'espace de  	*/ 
/* la chaine de caractères transmise													*/
/* Elle peut être utilisée pour tester des N° de secu, des code numériques ...    		*/
/****************************************************************************************/
function stringFilterOnlyInt(input) 
{
s = input;
filteredValues = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgklmnopqrstuvwxyzéèà'ç" + /[$£\\@\\\#%\^\&\*\(\)\[\]\+\_\{\}\`\~\=\|]/;     // Characters stripped out
var i;
var returnString = "";
for (i = 0; i < s.length; i++) {  // Search through string and append unfiltered values to returnString.
var c = s.charAt(i);
if (filteredValues.indexOf(c) == -1) returnString += c;
}
return returnString;
}


//--------------------------------------------------------------------------------------------
/****************************************************************************************/
/* Function telephone(input) 													 		*/
/* Cette fonction vérifie que seul les caractères (013456789-(). ) sont utilisé. Elle  	*/ 
/* supprime les autre de la chaine de caractères transmise								*/
/* Elle peut être utilisée pour tester des N° de tel, fax  						   		*/
/****************************************************************************************/
function telephone(input)
{
s = input;
AcceptedValues = "0123456789-(). "
var i;
var returnString = "";
for (i = 0; i < s.length; i++)
	{
	var c = s.charAt(i);
	if (AcceptedValues.indexOf(c) != -1) returnString += c;
	}
return returnString;
}
//--------------------------------------------------------------------------------------------
/****************************************************************************************/
/* Function IsEmailAddress(val) 													*/
/* Cette fonction supprime tous les caractères autres que des chiffres ou l'espace de  	*/ 
/* la chaine de caractères transmise													*/
/* Elle peut être utilisée pour tester des N° de secu, des code numériques ...    		*/
/****************************************************************************************/
function IsEmailAddress(val) 
{
str = new String(val);
var emailsArray = str.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/);
//(^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$)/gi);
if (emailsArray) 
	return true;
else
	return false;
}
//--------------------------------------------------------------------------------------------

function isValidDate(val) 
{

// Checks for the following valid date formats:
//   DD/MM/YYYY    DD-MM-YYYY  DD/MM/YY
dateStr = new String(val);
//alert(dateStr);
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2,4})$/; // requires 4 digit year

var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) 
	{
	alert(dateStr + " : Cette date n'est pas dans un format valide.")
	return false;
	}
month = matchArray[3]; // parse date into variables
day = matchArray[1];
year = matchArray[4];
if (month < 1 || month > 12) 
	{ 
	// check month range
	alert("Le mois doit etre compris entre 1 et 12.");
	return false;
	}
if (day < 1 || day > 31) 
	{
	alert("Le nombre de jour doit etre compris entre 1 et 31.");
	return false;
	}
if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
	alert("Le mois "+month+" n'a pas 31 jours !")
	return false;
	}
if (month == 2) 
	{ 
	// check for february 29th
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day>29 || (day==29 && !isleap)) 
		{
	alert("Le mois de février " + year + " n'a pas " + day + " jours !");
	return false;
	    }
	}
return true;
}
