/********************************************
 o Vérification de formulaire
    - champ vide
	- champ à valeur numérique
	- Email
	- URL
	- Site internet valide
 o Cryptage des champs en md5 en option
 o Enable ou disable tout les champs
---------------------------------------------
# Compatible : Tout navigateur compatible DOM 
exeption : ie 4.0/4.5 mac
---------------------------------------------
Ce script est libre d'utilisation a condition
de laisser inclus tout les commentaires.
Ce script été réalisé par Xside 
---------------------------------------------
Dernière modif : 28/08/2004
---------------------------------------------
*/
var crypt = false; // Indique si l'on crypte en md5 le formulaire

function toObligatoire(whoChecker,whoCheck) {
	// Rend un champ obligatoire ou optionnel
	// à utiliser avec un checkbox
	if(ie5 && whoCheck) {
	   if(whoChecker.checked) document.all[whoCheck].optionnal=false
	   if(!whoChecker.checked) document.all[whoCheck].optionnal=true
	}
}

function isblank(s) {
  // Pour vérifier les champ vides
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t') && (s.indexOf('Votre')=="-1")) {
			return false;
			break;
		}
    }
return true
}
  // La fonction principale de vérification du formulaire nommé f
  // A appeler en onClick uniquement.
function verify(f) {
    var msg;
    var empty_fields = "";
    var errors = "";
	var courant

 for(var i = 0; i < document.forms[f].length; i++) {
   var e = document.forms[f].elements[i];
   courant=e
	if ((e.type == "text") || (e.type == "textarea") || (e.type == "password") || (e.type == "file") || (e.selection)) {	 
		 //if(!e.optionnal) {
	         if (((e.value == null) || (e.value == "") || isblank(e.value)) && !e.optionnal && !e.selection)
			 // Pour les champ non optionnel vérifie les champ vides
		        {
		            empty_fields += "\n          " + e.name;
		            break;
		        }
			 if (e.selection) {
			// Vérification des select.
				 if(e.type=="select") {
					 if(e.selectedIndex=="-1") {
						 errors += "Tous les champ doivent être selectionné.\n";
						 break;
					 }
				 }
			 }
			 if(e.dateISO) {
			 	if(!isblank(e.value)) {
					pattern 	= "\^\(\(\(\(19\|20\)\(\(\[02468\]\[048\]\)\|\(\[13579\]\[26\]\)\)-02-29\)\)\|\(\(20\[0-9\]\[0-9\]\)\|\(19\[0-9\]\[0-9\]\)\)-\(\(\(\(0\[1-9\]\)\|\(1\[0-2\]\)\)-\(\(0\[1-9\]\)\|\(1\\d\)\|\(2\[0-8\]\)\)\)\|\(\(\(\(0\[13578\]\)\|\(1\[02\]\)\)-31\)\|\(\(\(0\[1,3-9\]\)\|\(1\[0-2\]\)\)-\(29\|30\)\)\)\)\)\$";
					re			= new RegExp(pattern, "gi");
					tranches	= re.exec(e.value);
					if (tranches == null) {
						errors += "Le champ date doit être formaté de la façon suivante : \n - an sur 4 chiffres\n - mois sur 2 chiffres\n - jours sur 2 chiffres\n - Les valeurs sont séparées par -\n\n Exemple : 2004-08-30 pour le 30 août 2004\n";
					}
				}
			 } 
			 if ((e.numeric || (e.min != null) || (e.max != null)) && !e.optionnal) {
			 // Vérification des champ numériques.
				var v = parseFloat(e.value);
				if (isNaN(v) || ((e.min != null) && (v < e.min)) || ((e.max != null) && (v > e.max))) 
				 {
					errors += "Le  "+e.name+" ne doit contenir que des caractéres numériques. \n Pas de ( ou de - ou autres caractéres spéciaux.";
					if (e.min != null) 
						errors += " plus grand que " + e.min;
					if (e.max != null && e.min != null) 
						errors += " et plus petit que " + e.max;
					else if (e.max != null)
						errors += " plus petit que " + e.max;
					errors += "\n";
				   }
			      }
			 if(e.cp) {
			 /***
			 * Vérifie les code postaux français
			 */
				if(!isblank(e.value)) {
				 	pattern 	= "\^\(2A\|2B\|2a\|2b\|\(\[0-9\]\{1,5\}\)\)\*\$";
					re			= new RegExp(pattern, "gi");
					tranches	= re.exec(e.value);
					if (tranches == null) {
						errors += "Le code postal que vous avez saisi n'est pas valide\n";
					}
				}
			 }
			 if(e.web && !e.optionnal) {
			 /**
			 * Vérification des champs d'adresse internet
			 * Le protocole est obligatoire, une page supplémentaire est autorisée
			 */ 
			 
			 	pattern =   "\^\(http\|https\|ftp\)\\\:\/\/\(\[a-zA-Z0-9\\\.\\-\]\+\(\\\:\[a-zA-Z0-9\\\.&%\\\$\\-\]\+\)\*@\)\?\(\(25\[0-5\]\|2\[0-4\]\[0-9\]\|\[0-1\]\{1\}\[0-9\]\{2\}\|\[1-9\]\{1\}\[0-9\]\{1\}\|\[1-9\]\)\\\.\(25\[0-5\]\|2\[0-4\]\[0-9\]\|\[0-1\]\{1\}\[0-9\]\{2\}\|\[1-9\]\{1\}\[0-9\]\{1\}\|\[1-9\]\|0\)\\\.\(25\[0-5\]\|2\[0-4\]\[0-9\]\|\[0-1\]\{1\}\[0-9\]\{2\}\|\[1-9\]\{1\}\[0-9\]\{1\}\|\[1-9\]\|0\)\\\.\(25\[0-5\]\|2\[0-4\]\[0-9\]\|\[0-1\]\{1\}\[0-9\]\{2\}\|\[1-9\]\{1\}\[0-9\]\{1\}\|\[0-9\]\)\|\(\[a-zA-Z0-9\\-\]\+\\\.\)\*\[a-zA-Z0-9\\-\]\+\\\.\[a-zA-Z\]\{2,4\}\)\(\\\:\[0-9\]\+\)\?\(\/\[\^\/\]\[a-zA-Z0-9\\\.\\,\\\?\\\\'\\\\\/\\\+&%\\\$#\\\=~_\\-\]\*\)\*\$";
				re			= new RegExp(pattern, "gi");
				tranches	= re.exec(e.value);
				if (tranches == null) {
					errors+= "Le "+e.name+" doit contenir une adresse du type http://www.domaine.com\n";
				}
			  }
			 if (e.mail && !e.optionnal) {
			 // Vérification des champ emails.
			 	pattern		= "\^\(\(\[A-Za-z0-9\]\+_\+\)\|\(\[A-Za-z0-9\]\+\\-\+\)\|\(\[A-Za-z0-9\]\+\\\.\+\)\|\(\[A-Za-z0-9\]\+\\\+\+\)\)\*\[A-Za-z0-9\]\+@\(\(\\w\+\\-\+\)\|\(\\w\+\\\.\)\)\*\\w\{1,63\}\\\.\[a-zA-Z\]\{2,6\}\$"
				re			= new RegExp(pattern, "gi");
				tranches	= re.exec(e.value);
				if (tranches == null) {
					errors += "L'email que vous avez entré n'est pas valide";
					errors += "\n";
				}
			 }
			 // Si on a une erreur on arrète et on déclenche l'erreur
			 if ((empty_fields=="") && (errors=="")) {
			 	ok(e);
			 	continue;
			 }
			 else break;
		 }
	 //}
  }
// En cas d'erreur sur un champ la vérification s'arréte et génére
//    - Un alert affichant les erreurs et le nom du champ
	
	msg  = "______________________\n\n"
	   if (empty_fields) msg += "Le champ "+courant.label+" est vide.\n Vous devez le remplir.\n"
	   if (errors) msg +=errors;
	   msg += "______________________\n"
	
	if ((empty_fields=="") && (errors=="")){
		if(crypt) crypte(f);
		document.forms[f].submit();
		return true;
		disabledAll(f);
	}
	else {
		alert(msg);
		pb(courant);
		return false;
	 }
}
/**
* Enlève les styles repérant les champs posant problème
*/
function ok(e) {
	e.style.filter = "none";
	e.style.backgroundColor = "#ffffff";
}
/**
* Indique visuellement que le champs pose problème et lui donne le focus
*/
function pb(e) {
	e.focus()
	e.style.backgroundColor="#ECDFDC";
	e.style.filter="progid:DXImageTransform.Microsoft.Glow(color=#BD3900,strength=0)";
}
/**
* Prend tout le formulaire et crypte les text et textarea en md5
*/
function crypte(f) {
	for(var i = 0; i < document.forms[f].length; i++) {
		var e = document.forms[f].elements[i];
		if((e.type && ( e.type == "text" 	||
						 e.type	  == "password"
					   ))
					   ||
			e.tagName == "textarea" )
		{
			e.value = MD5(e.value);
		}
	}
 }
/***
* Rend disabled tous les champs du formulaires
*/
function disabledAll(f) {
	for(var i = 0; i < document.forms[f].length; i++) {
		var e = document.forms[f].elements[i];
		e.disabled = true;
	}
}
/***
* Rend enable tous les champs du formulaire
*/
function enabledAll(f) {
	for(var i = 0; i < document.forms[f].length; i++) {
		var e = document.forms[f].elements[i];
		e.disabled = false;
	}
}
function transitionne(obj) {
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=90)'", 5000);
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'", 6000);
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=70)'", 6200);
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=60)'", 6400);
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=50)'", 6600);	
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=40)'", 6800);	
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=30)'", 7000);
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=20)'", 7200);	
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=10)'", 7400);
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=5)'", 7600);	
	setTimeout("obj.style.visibility = 'hidden'", 7800);	
	setTimeout("obj.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=100)'", 7900);	
}
/***
* Indique que la sauvegarde a été réalisée avec succès
*/
function sauveOk() {
	obj = document.getElementById("sauveok")
	obj.style.visibility = "visible";
	transitionne(obj)
}
/***
* Indique une erreur lors de la sauvegarde
*/
function sauveError() {
	obj = document.getElementById("sauveError")
	obj.style.visibility = "visible";
	transitionne(obj)
}