var NUM = '0123456789';
var ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var ALPHABIS = 'âäàåéêëèïîìôöòüûùÿÄÅÉæÆÖÜÇç';
var SP = ' ';
var OTHER1 = '-\'';
var OTHER2 = '_$&@"';
var OTHER3 = '~{([|`\^)]}=+*/,?;.:!§%µ¨£¤<>²_$&@®"-\'';
var OTHER4 = '#';
/****************************************************************************************************
																																					Librairie JAVASCRIPT

	Version 1.0 (05/10/2000) :
	function isComponentExist(pComponent)
	function isInputValueEmpty(pFieldName)
	
	Version 1.1 (13/10/2000) :
	function ckeckFieldsPriority()
	
	Version 1.2 (26/10/2000) :
	function isFieldValueAllowed(pFieldName, pSetCharAllowed)
	function isFieldValueValidWithMask(pFieldName, pMask)
	
****************************************************************************************************/


/****************************************************************************************************
	function isComponentExist(pComponent)
	Cette fonction permet de tester l'existance d'un composant d'un formulaire.
	Elle renvoie un booléen "true" si le composant existe et "false" sinon
	En entrée : pComponent = le nom complet d'un comosant (ex: document.monForm.monChamp)
	En sortie : "true" si le composant existe et "false" sinon

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					29/09/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isComponentExist(pComponent) {
	return (typeof(pComponent) != 'undefined');
}



/****************************************************************************************************
	function isInputValueEmpty(pFieldName)
	Cette fonction permet de tester si la valeur d'un champ de type INPUT est vide ou non
	Elle renvoie un booléen "true" si le champ n'a pas de valeur (vide) et "false" sinon
	En entrée : pFieldName = le nom complet d'un champ (ex: document.monForm.monChamp)
	En sortie : "true" si le champ n'a pas de valeur et "false" sinon

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					29/09/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isInputValueEmpty(pFieldName) {
	if ((typeof(pFieldName) != 'undefined') && (typeof(pFieldName.value) != 'undefined'))
		return (pFieldName.value == '');
	else
		return null;
}



/****************************************************************************************************
	function ckeckFieldsPriority()
	Cette fonction permet de tester l'ordre de priorité de champs d'un formulaire
	Elle renvoie un booléen "true" si l'ordre de saisie des champs est respecté et "false" sinon
	En entrée : Un nombre de paramètres variable mais devant respecter la syntaxe suivante :
		- les paramètres d'indice pair doivent correspondre à un champ de saisie (ex: document.monForm.chp1)
		- les paramètres d'indice impair doivent correspondre à un entier qui définit la propriété du champ de saisie (ex: 1)
			La priorité la plus forte est 0, 1 étant moins prioritaire ...
			Si des champs ont la même priorité et que l'un d'entre eux est renseigné, les autres doivent l'être aussi
	En sortie : "true" si l'ordre de saisie des champs est respecté et "false" sinon
	
	Exemple d'appel : ckeckFieldsPriority(document.monForm.chp1,1,document.monForm.chp2,1,document.monForm.chp3,2)
	
	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					13/10/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function ckeckFieldsPriority() {
	var vNbArgs = arguments.length;
	var vIsArgsCorrect = false;
	var vCheckOk = false;
	var vMessage = '';

	if ((vNbArgs > 0) && (vNbArgs % 2 == 0)) { // Il y a un nombre pair de paramètres passés à cette fonction
		var vIsArgsCorrect = true;
		for (var i = 0; i < vNbArgs; i = i + 2) { // vérification des types des paramètres
			if ((typeof(arguments[i]) != 'object') || (typeof(arguments[i].value) != 'string') || (typeof(arguments[i + 1]) != 'number'))
				vIsArgsCorrect = false;
		}
		
		if (vIsArgsCorrect) { // Vérification des propriétés de saisie des champs
			vCheckOk = true;
			var vCpt1 = 0;
			while ((vCpt1 < vNbArgs) && (vCheckOk)) {
				var vCpt2 = vCpt1 + 2;
				while ((vCpt2 < vNbArgs) && (vCheckOk)) {
					if ((arguments[vCpt1].value == '') && (arguments[vCpt2].value != '') && (arguments[vCpt2 + 1] >= arguments[vCpt1 + 1])) {
						vMessage = 'Le champ ' + arguments[vCpt1].name + ' doit être saisi';
						vCheckOk = false;
					}
					else
					if ((arguments[vCpt1].value != '') && (arguments[vCpt2].value == '') && (arguments[vCpt2 + 1] <= arguments[vCpt1 + 1])) {
						vMessage = 'Le champ ' + arguments[vCpt2].name + ' doit être saisi';
						vCheckOk = false;
					}
					vCpt2 = vCpt2 + 2;
				}
				vCpt1 = vCpt1 + 2;
			}
		}
	}

	if (!vIsArgsCorrect) alert('Définition incorrecte de la fonction \'ckeckFieldsPriority()\'');
	if (vMessage != '') alert(vMessage);
	
	return vCheckOk;
}



/****************************************************************************************************
	function isFieldValueAllowed(pFieldName, pSetCharAllowed)
	Cette fonction permet de tester que la valeur d'un champ pFieldName ne contient bien que des caractères définis 
	dans pSetCharAllowed.
	Elle renvoie un booléen "true" si la valeur du champ ne contient que des caractères contenu dans pSetCharAllowed et "false" sinon
	En entrée : pFieldName = le nom complet d'un champ (ex: document.monForm.monChamp)
									 pSetCharAllowed = une chaine de caractères qui définit les caractères autorisés pour la valeur du champ 
									 (ex: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$&#@')
	En sortie : "true" si le champ ne contient que des caractères définis dans pSetCharAllowed et "false" sinon
	
	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					26/10/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isFieldValueAllowed(pFieldName, pSetCharAllowed) {
	var vCheckOk = false;
	
	if ((typeof(pFieldName) != 'undefined') && (typeof(pFieldName.value) != 'undefined')) {
		vCheckOk = true;
		
		if (typeof(pSetCharAllowed) == 'string') {
			var vCpt = 0;
			while ((vCheckOk) && (vCpt < pFieldName.value.length)) {
				vCheckOk = (pSetCharAllowed.indexOf(pFieldName.value.charAt(vCpt)) > -1);
				vCpt++;
			}
		}
	}

	return vCheckOk;
}



/****************************************************************************************************
	isFieldValueValidWithMask(pFieldName, pMask)
	Cette fonction permet de tester que la valeur d'un champ pFieldName est correctement formatée suivant le masque pMask
	Elle renvoie un booléen "true" si la valeur du champ est correctement formatée et "false" sinon
	En entrée : pFieldName = le nom complet d'un champ (ex: document.monForm.monChamp)
									 pMask = une chaine de caractères qui définit le formatage de la valeur du champ
									 (ex: '(###) ###-####')
	En sortie : "true" si la valeur du champ est correctement formatée et "false" sinon

	Les caractères de masque reconnus :
	# : le caractère doit être un nombre
	? : le caractère doit être une lettre
	! : le caractère doit être un nombre ou une lettre
	* : le caractère peut être n'importe quoi
	Il NE FAUT PAS que la valeur de votre champ pFieldName contiennent les caractères #?!
	
	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					26/10/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isFieldValueValidWithMask(pFieldName, pMask) {
	if ((typeof(pFieldName) != 'undefined') && (typeof(pFieldName.value) != 'undefined') && (pFieldName.value.length > 0) 
		&& (typeof(pMask) == 'string') && (pMask.length > 0) && (pFieldName.value.length == pMask.length)) {

		for (vCpt = 0; vCpt < pFieldName.value.length; vCpt++) {
			vFieldValueChar = pFieldName.value.charAt(vCpt);
			vMaskChar = pMask.charAt(vCpt);
			
			if (vMaskChar == '#') { // Cas d'un chiffre
				vRefString = '0123456789';
				if (vRefString.indexOf(vFieldValueChar.toLowerCase()) == -1) 
					return false;
			}
			else 
			if (vMaskChar == '?') { // Cas d'une lettre
				vRefString = 'abcdefghijklmnopqrstuvwxyz';
				if (vRefString.indexOf(vFieldValueChar.toLowerCase()) == -1) 
					return false;
			}
			else 
			if (vMaskChar == '!') { // Cas d'une lettre ou d'un chiffre
				vRefString = '0123456789abcdefghijklmnopqrstuvwxyz';
				if (vRefString.indexOf(vFieldValueChar.toLowerCase()) == -1) 
					return false;
			}
			else 
			if (vMaskChar == '*') { // Cas de n'importe quel caractère
			}
			else
			if (vMaskChar != vFieldValueChar) { // Cas d'un caractère imposé par le masque
				return false;
			}
		}
		return true;
	}
	else
		return false;
}
function isChampValid(pField, pFieldLabel, pSetCharAllowed, pFieldLengthMin, pFieldLengthMax, isFieldMandatory) {
	var vResult = true;
	var vMessage = '';
	var vFieldValue = pField.value;
	var vFieldLength = pField.value.length;
	if (vFieldLength > 0) {
		// Verification des caracteres
		var vCpt = 0;
		while ((vResult) && (vCpt < vFieldLength)) {
			vResult = (pSetCharAllowed.indexOf(vFieldValue.charAt(vCpt)) > -1);

			// Gestion des caractères spéciaux 
			if ((!vResult) && (escape(vFieldValue.charAt(vCpt)).indexOf('%') == 0)) {
				// Autorisation des retours chariots (nécessaire pour les TEXTAREA)
				if ((vFieldValue.charCodeAt(vCpt) == 10) || (vFieldValue.charCodeAt(vCpt) == 13)) {
					vResult = true;
				}
			}
			vCpt++;
		}

		if (!vResult) {
			vMessage += "La valeur du champ '" + pFieldLabel + "' est incorrecte.\n";
		}
		else {
			if (pFieldLengthMin > 0) { // Verification de nombre de caracteres minimum
				if (vFieldLength < pFieldLengthMin) {
					vMessage +="La taille minimum du champ '" + pFieldLabel + "' est de " + pFieldLengthMin + " caractères.\n"; 
					vResult = false;
				}
			}
			if (vFieldLength > pFieldLengthMax) { // Verification de nombre de caracteres maximum
				vMessage +="La taille maximum du champ '" + pFieldLabel + "' est de " + pFieldLengthMax + " caractères.\n"; 
				vResult = false;
			}
		}
	}
	else { // if (vFieldValue == 0)
		if (isFieldMandatory) { // Verification de la saisie obligatoire
			vMessage += "Le champ '" + pFieldLabel + "' est obligatoire.\n";
			vResult = false;
		}
	}
	
	if (!vResult) {
		alert(vMessage);
		pField.focus();
	}
	
	return vResult;
}

/* Contrôle kms */
function isKmsValid(pForm) {
		var ALL = NUM;
		var vCharsFor = ALL;
		if (!isChampValid(pForm.kms,'Kms',vCharsFor,1,5,true)) return false;
		return true;
}