<!--
// INFORMATIONS A METTRE DANS LA PAGE HTML ou ASP

// Obligatoire, inclure le fichier Javascript
//
// <script language="javascript" src="jsValide.js" type="text/javascript"></script>

// LANGAGE PAR DÉFAUT 
// Entrer "fr" pour français, rien pour englais.
//
// nlang = "fr";

//	Fonctions Dispos
//	> jsCompare_password(): Validation de mot de passe     -->
//	> jsValide_char(): 	Validation de caractères       -->
//	> jsValide_courriel(); 	Validation de courriel         -->
//	> jsValide_date(): 	Validation de date             -->
//	> jsValide_date(): 	Validation de heure            -->
//	> jsCompteur_Texte(): 	Compteur de caractère TEXTAREA -->

function jsValideForm(pForm,pChampListe,pChampVerif) {
	// ********************************************
	//  FONCTION UNIVERSELLE POUR FORCER LA SAISIE
	// DES TOUS LES TYPES DE CHAMPS D'UN FORMULAIRE
	// Plus plusieurs validations de champs.
	// ********************************************
	
	// pChampListe = "NAME;NAME;NAME;....;NAME" 
	// 	Entrer ici la liste de "NAME" des champs
	// 	(NAME = valeur de l'attribut NAME des champs)
	// pChampVerif = true ou false 
	// 	- Si true, alors les champs pChampListe sont obligatoires
	//	et le reste facultatif
	//	- Si false, alors les champs pChampListe sont facultatifs
	//	et le reste obligatoire
	//	- Pour vérif de tous les champs, 
	//	onSubmit="return jsValide(this, "", false);"
	
	// Ajouter ce code en tête du formulaire
	//  onSubmit="return jsValide(this, .., ..);"
	//
	// Retourne le titre de chaque objet si existe sinon le nom

	// ********************************************
	// Ne rien modifier ci-dessous
	// ********************************************
	var RdCkOk = false;
	var RdMess = "";
	var CbMess = "";
	var CbCkOk = false;
	var msg = ""
	var eng = "_____________________________________________________________\n\n";
		eng += "The request was cancelled because of the following error.\n";
		eng += "Please correct these error(s).\n";
		eng += "_____________________________________________________________\n\n";
		eng += "- The following required field(s) are empty :"
	var fra = "_____________________________________________________________\n\n";
		fra += "La requête a été annulée : Des champs vides sont obligatoires. \n";
		fra += "_____________________________________________________________\n\n";
		fra += "- Merci de remplir le(s) champ(s) suivant(s) :"
	for (var i=0; i<pForm.elements.length; i++) {
		if (pForm.elements[i].type != 'submit' && pForm.elements[i].type != 'reset' && pForm.elements[i].type != 'button' && pForm.elements[i].type != 'hidden' && (! pForm.elements[i].isDisabled || pForm.elements[i].isDisabled == false) && pForm.elements[i].name !='') {
			if ((pChampVerif == true && pChampListe.indexOf(pForm.elements[i].name) > -1) || (pChampVerif == false && pChampListe.indexOf(pForm.elements[i].name) == -1)){
				if (pForm.elements[i].type == 'select-one') {
					if (pForm.elements[i].selectedIndex == 0) {
						if (pForm.elements[i].title == '')
							msg += "\n         " + pForm.elements[i].name;
						else
							msg += "\n         " + pForm.elements[i].title;
					}
				} 
				else
					if (pForm.elements[i].type == 'select-multiple') {
						if (pForm.elements[i].selectedIndex < 0) {
							if (pForm.elements[i].title == '')
								msg += "\n         " + pForm.elements[i].name;
							else
								msg += "\n         " + pForm.elements[i].title;
						}
					} 
					else
						if (pForm.elements[i].type == 'text') {
							if (pForm.elements[i].value == '') {
								if (pForm.elements[i].title == '')
									msg += "\n         " + pForm.elements[i].name;
								else
									msg += "\n         " + pForm.elements[i].title;
							}
						} 
						else
							if (pForm.elements[i].type == 'textarea') {
								if (pForm.elements[i].value == '') {
									if (pForm.elements[i].title == '')
										msg += "\n         " + pForm.elements[i].name;
									else
										msg += "\n         " + pForm.elements[i].title;
								}
							} 
							else
								if (pForm.elements[i].type == 'password') {
									if (pForm.elements[i].value == '') {
										if (pForm.elements[i].title == '')
											msg += "\n         " + pForm.elements[i].name;
										else
											msg += "\n         " + pForm.elements[i].title;
									}
								}
								else
									if (pForm.elements[i].type == 'radio') {
										if (pForm.elements[i].checked) {
											RdCkOk = true;
											RdMess = "";
										}
										if (RdCkOk == false) {
											if (pForm.elements[i].title == '')
												RdMess = "\n         " + pForm.elements[i].name;
											else
												RdMess = "\n         " + pForm.elements[i].title;
										}
									} 
									else
										if (pForm.elements[i].type == 'checkbox'&&CbCkOk == false) {
											if (pForm.elements[i].checked) {
												CbCkOk = true;
												CbMess = "";
											}
											if (CbCkOk == false) {
												if (pForm.elements[i].title == '')
													CbMess = "\n         " + pForm.elements[i].name;
												else
													CbMess = "\n         " + pForm.elements[i].title;
											}
										} 	
			}
		}		
	}
	if (msg.length != 0||RdMess.length != 0||CbMess.length != 0) {
		msg += RdMess + CbMess; 
		if (nlang=="fr") msg = fra + msg + "\n"; else msg = eng + msg + "\n";
		alert(msg);
		return false;
	}
	else
		return true;
}
// ********************************************
// FIN DE LA FONCTION jsValide()
// ********************************************

// ********************************************
// FONCTION jsCompare_password()
// ********************************************
function jsCompare_password(pPass1,pPass2) {
	// Ajouter ce code dans la saisie du deuxième mot de passe
	// onChange="jsCompare_password(this.form.pass1,this);"
	// Noter que le premier mot de passe doit avoir le nom "pass1"
	if (pPass1.value != pPass2.value) {
		pPass1.value = "";
		pPass2.value = "";
		if (nlang=="fr") 
			alert ("\nVous n'avez pas entré deux fois le même mot de passe.\nVeuillez entrer à nouveau le mot de passe..")
		else 
			alert ("\nYou did not enter the same new password twice.\nPlease re-enter your password.")
		nPass1.focus();
	} 
	else return true;
}

// ********************************************
// FONCTION jsValide_char()
// ********************************************
function jsValide_char(pChamp,pAccepte,pnbrMin,pnbrMax) {
	// Ajouter ce code dans la saisie du champs
	//  onBlur="jsValide_char(this,'()-+0123456789')"
	// Les caractères acceptés peuvent être changés
	var ok = "oui";
	var min = "oui";
	var max = "oui";
	var nChar;
	if (pAccepte != "") {
		for (var i=0; i<pChamp.value.length; i++) {
			nChar = "" + pChamp.value.substring(i, i+1);
			if (pAccepte.indexOf(nChar) == "-1") ok = "non";
		}
	}
	
	if (ok == "non") {
		if (nlang=="fr") 
			alert ("\nEntrée invalide !\nSeuls ces caractères sont valides :\n "+pAccepte)
		else 
			alert("\nInvalid entry !\nOnly these characters are accepted :\n "+pAccepte);
		pChamp.focus();
		pChamp.select();
	}
	else {
		if (pChamp.value.length > pnbrMax) max = "non";
		// pChamp.value.length > 0 -> Evite de boucler sur des champs vides obligatoires
		if (pChamp.value.length < pnbrMin && pChamp.value.length > 0) min = "non";
		if (min == "non") {
			if (nlang=="fr")
				alert("\nSaisie invalide !\nAssurez-vous d'entrer au moins " + pnbrMin + " caractères.");
			else 
				alert("\nInvalid entry !\nYou must have at least " + pnbrMin + " characters.");
			pChamp.focus();
			pChamp.select();
		}
		else {
			if (max == "non") {
				if (nlang=="fr")
					alert("\nSaisie invalide !\nAssurez-vous d'entrer au plus " + pnbrMax + " caractères.");
				else 
					alert("\nInvalid entry !\nYou must have at most " + pnbrMax + " characters.");
				pChamp.focus();
				pChamp.select();
			}
		}
	}
}

// ********************************************
// FONCTION jsValide_courriel()
// ********************************************
function jsValide_courriel(pChamp) {
	// Ajouter ce code dans la saisie du champs
	//  onBlur="jsValide_courriel(this)"
	if (pChamp.value.length > 0) {
		if ((pChamp.value.lastIndexOf(".") < pChamp.value.indexOf("@")+3 
			|| pChamp.value.lastIndexOf(".") > pChamp.value.length-3 
			|| pChamp.value.indexOf("@") < 1 ) 
			|| pChamp.value.indexOf("@") != pChamp.value.lastIndexOf("@")) {
			if (nlang=="fr")
				alert("\nSaisie invalide !\nAssurez-vous d'entrer un format valide de courriel \"nn@nn.nn\".");
			else
				alert("\nInvalid entry !\nYou must enter a valid email address \"nn@nn.nn\".");
			pChamp.focus();
			pChamp.select();
		}
	}
}

// ********************************************
// FONCTION jsValide_date()
// ********************************************
function jsValide_date(pDate,pA1,pA2,pFormat) {
	// Ajouter ce code dans la saisie du champs date
	//  onBlur="jsValide_date(this,2005,2010,'jj/mm/aaaa')"
	// La date valide doit être entre 2005 et 2010.
	//    vous pouvez changer l'interval.
	// si pA1 = "now" alors pDate >= date du jour
	// Format valide: (ne pas utiliser d'autre format...
	// - jj-mm-aaaa
	// - mm-jj-aaaa
	// - aaaa-mm-jj
	var ok = "oui";
	var nChar;
	var aDate;
	var nJ;
	var nM;
	var nA;
	var jMax = 31;
	nAccepte = "0123456789-";

	if (pDate.value.length > 0) {
		if (pDate.value.length != 10) ok = "non";
		for (var i=0; i<pDate.value.length; i++) {
			nChar = "" + pDate.value.substring(i, i+1);
			if (nAccepte.indexOf(nChar) == "-1") ok = "non";
		}
		if (ok == "oui") {
			aDate = pDate.value.split("-");
			if (pFormat == "jj-mm-aaaa") { nJ = aDate[0]; nM = aDate[1]; nA = aDate[2];} 
			else if (pFormat == "mm-jj-aaaa") { nJ = aDate[1]; nM = aDate[0]; nA = aDate[2];} 
			else if (pFormat == "aaaa-mm-jj") { nJ = aDate[2]; nM = aDate[1]; nA = aDate[0]; }

			// test jour et mois
			if ((nJ < 1 || nJ > jMax) || (nM < 1 || nM > 12)) ok = "non";
			else {
				// test année bissex
				if (nM == 2) { 
					if (anneeBissex(nA) == true) { jMax = 29 } else { jMax = 28 };
				}
				// test mois de 30 jours
				if ((nM == 1 || nM == 3 || nM == 5 || nM == 7 || nM == 8 || nM == 10 || nM == 12)) jMax = 31;
				if ((nM == 4 || nM == 6 || nM == 9 || nM == 11)) jMax = 30;
				if (nJ < 1 || nJ > jMax) 
					ok = "non";
				else {
					// test de l'année de fin
					if (nA > pA2)
						ok = "non";
					else {
						// test de l'année de début
						if (pA1 == "now") {
							// année début = date du jour
							d = new Date();
							dA = d.getFullYear();
							dM = d.getMonth() + 1; if (dM < 10) dM = "0" + dM;
							dJ = d.getDate(); if (dJ < 10) dJ = "0" + dJ; 
							if ((""+dA+dM+dJ) > (""+nA+nM+nJ))
								ok = "non";
						}
						else {
							if (nA < pA1)
								ok = "non";
						}
					}
				}
			}
			
		}
		if (ok == "non") {
			if (nlang=="fr") {
				if (pA1 == "now")
					pA1 = "maintenant";
				alert ("\nDate invalide !\nVeuillez entrer une date valide : "+pFormat+"\nentre "+pA1+" et "+pA2);
			}
			else 
				alert ("\nInvalid date !\nPlease re-enter valid date : "+pFormat+"\nbetween "+pA1+" and "+pA2);
			pDate.focus();
			pDate.select();
			return false;
		}
		else
			return true;
	}
}

// ********************************************
// FONCTION AnneeBissex(pAnnee)
// ********************************************
function anneeBissex(pAnnee) {
        // règle :
        // toutes les années multiples de 4 sont bissextiles
        // sauf la première année d'un siècle
        // mais la première année d'un millénaire est bissextile
	if ((pAnnee/4)==Math.floor(pAnnee/4)) {
		if ((pAnnee/1000)==Math.floor(pAnnee/1000))
			return true;
		else {
			if ((pAnnee/100)==Math.floor(pAnnee/100))
				return false;
			else
				return true;
		}
	}
	else 
		return false;
}


// ********************************************
// FONCTION jsValide_heure()
// ********************************************
function jsValide_heure(pHeure) {
	// Ajouter ce code dans la saisie du champs heure
	//  onBlur="jsValide_heure(this)"
	// Format valide: HH:MM
	var ok = "oui";
	var nChar;
	var aHeure;
	nAccepte = "0123456789:";

	if (pHeure.value.length > 0) {
		if (pHeure.value.length != 5 ) ok = "non";
		for (var i=0; i<pHeure.value.length; i++) {
			nChar = "" + pHeure.value.substring(i, i+1);
			if (nAccepte.indexOf(nChar) == "-1") ok = "non";
		}
		if (ok == "oui") {
			aHeure = pHeure.value.split(":");
			if (aHeure[0]>23 || aHeure[1]>59) ok = "non";
		}
		if (ok == "non") {
			if (nlang=="fr") 
				alert ("\nHeure invalide !\nVeuillez entrer une heure valide : HH:MM");
			else 
				alert ("\nInvalid hour !\nPlease re-enter valid hour : HH:MM");
			pHeure.focus();
			pHeure.select();
		}
	}
}

// ********************************************
// FONCTION jsValide_duree()
// ********************************************
function jsValide_duree(pDuree) {
	// Ajouter ce code dans la saisie du champs duree
	//  onBlur="jsValide_duree(this)"
	// Format valide: HHH:MM
	var ok = "oui";
	var nChar;
	var aDuree;
	nAccepte = "0123456789:";

	if (pDuree.value.length > 0) {
		if ((pDuree.value.length != 5 ) & (pDuree.value.length != 6 )) ok = "non";
		for (var i=0; i<pDuree.value.length; i++) {
			nChar = "" + pDuree.value.substring(i, i+1);
			if (nAccepte.indexOf(nChar) == "-1") ok = "non";
		}
		if (ok == "oui") {
			aDuree = pDuree.value.split(":");
			if (aDuree[1]>59) ok = "non";
		}
		if (ok == "non") {
			if (nlang=="fr") 
				alert ("\nDurée invalide !\nVeuillez entrer une durée valide : HHH:MM");
			else 
				alert ("\nInvalid duration !\nPlease re-enter valid duration : HHH:MM");
			pDuree.focus();
			pDuree.select();
		}
	}
}

// ********************************************
// FONCTION jsCompteur_Texte()
// ********************************************
function jsCompteur_Texte(pTexte, pCompteur, pLimite) {
	// Ajouter ce code dans la saisie du champ "textarea"
	// onKeyDown="jsCompteur_Texte(this,this.form.compte,2000);"
	// onKeyUp="jsCompteur_Texte(this,this.form.compte,2000);"
	// 2000 représente le nombre maximum de caractères accepté
	// Vous devez aussi ajouter une boîte de saisie qui
	// indique le nombre de caractères restant.
	// <input readonly="readonly" type="text" name="compte" value="2000">
	if (pTexte.value.length > pLimite)
		pTexte.value = pTexte.value.substring(0, pLimite);
	else 
		pCompteur.value = pLimite - pTexte.value.length;
}
// -->
