////////////////////////////
// Šegalland@eurodeal.net //
////////////////////////////
////////
// Controle de formulaire exemple:
//  function ValideUser() {
//  	var i = 0;
//  	formToCheck = new Array();
//  	formToCheck[i] = new formChamp('unom','Nom','texte',5,120); i++;
//  	formToCheck[i] = new formChamp('upre','Prenom','texte',0); i++;
//  	formToCheck[i] = new formChamp('nut','Nom d\'utilisateur','texte',2,30); i++;
//  	formToCheck[i] = new formChamp('mpasA','Mot de passe','texte',5,30); i++;
//  	formToCheck[i] = new formChamp('mpasB','Confirmation mot de passe','texte',5,30); i++;
//  	return checkForm(formToCheck);
//  }
////////

///////////////////////////////////////////////////////////////////////////////////////
// Fonction checkType                                                                //
// @Fonctionnalite Verifie si un element est bien d'un type donne                    //
// @param mixed valeur Element/chaine/.. dont on veut verifier le type               //
// @param string typeV Type que la valeur doit avoir  (texte / entier / numerique )  //
///////////////////////////////////////////////////////////////////////////////////////
function checkType(valeur,typeV) {
 switch (typeV) {
 	case 'entier':
 		var testint = parseInt(valeur.replace(/,/,','));
 		//si la conversion n'a pas marchee ou si la conversion donne un resultat different de la conversion en float (auquel cas c'est un float..)
 		if (isNaN(testint) || testint!=parseFloat(valeur.replace(/,/,',')))
 			return false;
 		else
 			return true;
 		break;//en principe inutile
 		break;//en principe inutile
 	case 'numerique':
 		if (isNaN(parseFloat(valeur.replace(/,/,','))))
 			return false;
 		else
 			return true;
 		break;//en principe inutile
 	case 'email':
 		if ((valeur.indexOf('@',0)==-1) || (valeur.indexOf('.',0)==-1))
 			return false;
 		else
 			return true;
 		break;//en principe inutile
 	case 'texte':
 	default:
 		if (typeV.substring(0,7) == 'Custom:') {//format 'user-define'
 			UserFormat = '^'+typeV.substring(7,typeV.length)+'$';
 			UserFormat = Remplace(UserFormat,'%i','(\\d)');
 			UserFormat = Remplace(UserFormat,'%i+','(\\d+)');
 			UserFormat = Remplace(UserFormat,'%a','([a-z])');
 			UserFormat = Remplace(UserFormat,'%a+','([a-z]+)');
 			reg = new RegExp(UserFormat, 'gi');
 			return reg.test(valeur);
 		}
 		else
 			return true;
 		break;//en principe inutile
 }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Fonction formChamp                                                                                                 //
// @Fonctionnalite cree un objet 'champ' pour le controle de formulaire via la fonction checkForm                     //
// @param string NomChamp nom (id html) du champ a controler                                                          //
// @param string Appelation designation du champ dans les messages javascript (alert) envoyes au visiteur             //
// @param string TypeC type du champ souhaite (texte / entier / numerique / email)                                    //
// @param int 	 LongueurMin nombre de characteres(si chaine) ou valeur(si numerique) minimum [si 0 pas de controle]  //
// @param int 	 LongueurMax nombre de characteres(si chaine) ou valeur(si numerique) maximum [si 0 pas de controle]  //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function formChamp(NomChamp,Appelation,TypeC,LongueurMin,LongueurMax) {
	this.NomChamp = NomChamp;
	this.Appelation = (Appelation)?Appelation:NomChamp;
	this.TypeC = (TypeC)?TypeC:'texte';
	this.LongueurMin = (LongueurMin)?LongueurMin:0;
	this.LongueurMax = (LongueurMax)?LongueurMax:0;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Fonction checkForm                                                                                //
// @Fonctionnalite Verifie le bon remplissage d'un formulaire (type de champ, champ vide)            //
// @param object champs : champs est un tableau d'objets qui ont les proprietes suivantes:           //
//  -'NomChamp' type:string nom de l'element html (attention c'est l'id qui nous interesse en fait)  //
//  -'Appelation' type:string nom du champ a afficher dans les messages javascript                   //
//  -'TypeC' type:string type de donnee a valider (texte / entier / numerique / email )              //
//  -'Vide' type:bool le champ peut il etre vide?  (0/1)                                             //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function checkForm(champs) {
	//pour chacun des champs
	for (champ in champs) {
	 //alert(champ);
	 try {
		 var htmlelem = document.getElementById(champs[champ].NomChamp);
		 //si le type est defini et non respecte => echec
		 if (champs[champ].TypeC && !checkType(htmlelem.value,champs[champ].TypeC)) {
		  alert('Le champ '+champs[champ].Appelation+' ne correspond pas au type demand\xE9 ('+champs[champ].TypeC+') merci de corriger.');
		  return false;
		 }
		 //controle saisie (nombre de caracteres ou valeur min)
		 if (champs[champ].LongueurMin!=0 && htmlelem.value=='') {
		  alert('Le champ '+champs[champ].Appelation+' n\'a pas \xE9t\xE9 rempli, veuillez y remedier.');
		  return false;
		 }
		 else if (champs[champ].LongueurMin!=0){
		 	if ((champs[champ].TypeC=='entier' || champs[champ].TypeC=='numerique') && champs[champ].LongueurMin>htmlelem.value) {
		 		alert('La valeur du champ '+champs[champ].Appelation+' est trop faible (minimum:'+champs[champ].LongueurMin+')');
		 		return false;
	 		}
		 	else if ((champs[champ].TypeC=='entier' || champs[champ].TypeC=='numerique') && champs[champ].LongueurMax<htmlelem.value) {
		 		alert('La valeur du champ '+champs[champ].Appelation+' est trop \xE9lev\xE9e (maximum:'+champs[champ].LongueurMax+')');
		 		return false;
	 		}
		 	else if ((champs[champ].TypeC=='entier' || champs[champ].TypeC=='numerique') && champs[champ].LongueurMin>htmlelem.value.lenght) {
		 		alert('Le champ '+champs[champ].Appelation+' comporte trop peu de caract\xE8res (minimum:'+champs[champ].LongueurMin+')');
		 		return false;
	 		}
		 	else if ((champs[champ].TypeC=='entier' || champs[champ].TypeC=='numerique') && champs[champ].LongueurMax>htmlelem.value.lenght) {
		 		alert('Le champ '+champs[champ].Appelation+' comporte trop de caract\xE8res (maximum:'+champs[champ].LongueurMax+')');
		 		return false;
	 		}
		 }
	 } catch(e) {
	 	continue;
	 }
	}
	//on a verifie tout les champs sans rencontrer d'annomalie, alors le formulaire est ok
	return true;
}
