/****************************************************************************************************
																																					Librairie JAVASCRIPT

	Version 1.0 (05/10/2000) :
	function getRandomNumber(pMinValue, pMaxValue)
	function isNumber(pString)
	function trimNumber(pString)
	function isFieldNumberValid(pField, pFieldName, pFieldLengthMin, pFieldLengthMax, isFieldMandatory)

	Version 1.1 (13/10/2000) :
	function isLuhnCorrect(pNumberCB)
	
****************************************************************************************************/


/****************************************************************************************************
	function getRandomNumber(pMinValue, pMaxValue)
	Cette fonction renvoie un nombre aléatoire compris entre pMinValue et pMaxValue
	En entrée : pMinValue = un nombre spécifiant la borne minimale du nombre aléatoire recherché
									 pMaxValue = un nombre spécifiant la borne maximale du nombre aléatoire recherché
	En sortie : un nombre aléatoire

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					29/09/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function getRandomNumber(pMinValue, pMaxValue) {
	if ((typeof(pMinValue) != 'undefined') && (!isNaN(pMinValue)) && (typeof(pMaxValue) != 'undefined') && (!isNaN(pMaxValue))) {
	  if (pMaxValue > pMinValue) 
			return (Math.round(Math.random() * (pMaxValue - pMinValue)) + parseInt(pMinValue));
	  else 
			return (Math.round(Math.random() * (pMinValue - pMaxValue)) + parseInt(pMaxValue));
	}
	else 
		return null;
}



/****************************************************************************************************
	function isNumber(pString)
	Cette fonction permet de vérifier que la chaine de caractères définie par pString ne contient que des caractères numériques
	(c'est à dire les caractères: 0123456789)
	En entrée : pString = une chaine de caractères
	En sortie : "true" si pString ne contient que des caractères numériques et "false" sinon (par ex: -12 renvoie false)

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					29/09/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isNumber(pString) {
	if (typeof(pString) == 'string') {
		//return (!isNaN(pString)); // ne fonctionne bien qu'en IE4+ et Netscape4+
		var isNumber = true;
		var vCpt = 0;
		while ((isNumber) && (vCpt < pString.length)) {
			isNumber = ((pString.charAt(vCpt) >= '0') && (pString.charAt(vCpt) <= '9'));
			vCpt++;
		}
		return isNumber;
	}
	else
		return false;
}



/****************************************************************************************************
	function trimNumber(pString)
	Cette fonction permet de vérifier que la chaine de caractères définie par pString ne contient que des caractères numériques
	(c'est à dire les caractères: 0123456789)
	En entrée : pString = une chaine de caractères
	En sortie : une chaine de caractères vide si pString ne contient que des caractères numériques et un message d'erreur sinon

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					29/09/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function trimNumber(pString) {
	var vMessage = '';

	if (typeof(pString) == 'string') {
		var isNumber = true;
		var vCpt = 0;
		while ((isNumber) && (vCpt < pString.length)) {
			isNumber = ((pString.charAt(vCpt) >= '0') && (pString.charAt(vCpt) <= '9'));
			vCpt++;
		}
		if (!isNumber) vMessage = 'Le caractère \'' + pString.charAt(vCpt - 1) + '\' est interdit.';
	}
	else
		vMessage = 'Le paramètre pString n\'est pas une chaine de caractères';

	return vMessage;
}



/****************************************************************************************************
	function isFieldNumberValid(pField, pFieldName, pFieldLengthMin, pFieldLengthMax, isFieldMandatory)
	Cette fonction permet de vérifier que la chaine de caractères correspondant à la valeur du champ pField est correctement 
	formaté selon son type pFieldType
	En entrée : pField = le nom d'un composant HTML de type <INPUT> (ex: 'document.monForm.monChamp')
									 pFieldName = Le libellé du composant HTML défini par pField
									 pFieldLengthMin = un entier définissant la taille minimale de la valeur du champ
									 pFieldLengthMax = un entier définissant la taille maximale de la valeur du champ
									 isFieldMandatory = un booléen qui définit le caractère obligatoire ou non de la valeur du champ.
									 	S'il est à "true", le champ doit obligatoirement avoir une valeur et non si à "false"
	En sortie : "true" si la valeur du champ est correctement formatée et "false" sinon

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					03/10/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isFieldNumberValid(pField, pFieldName, pFieldLengthMin, pFieldLengthMax, isFieldMandatory) {
	var vFieldLength = pField.value.length;
	var vFieldValue = pField.value;
	var vIsValid = true;

	var vMessage = trimNumber(vFieldValue);
	if (vMessage.length > 0) vIsValid = false; 

	if (!vIsValid) {
		alert('La saisie de '+pFieldName+' n\'est pas valide. ' + vMessage);
	}
	else {
		if (vFieldLength > 0) { 
			if (pFieldLengthMin > 0) { 
				if (vFieldLength < pFieldLengthMin) {
					alert('La taille minimum du champ ' + pFieldName + ' est de ' + pFieldLengthMin + ' caractères.'); 
					vIsValid = false; 
				} 
			}
			if (vFieldLength > pFieldLengthMax) {
				alert('La taille maximum du champ ' + pFieldName + ' est de ' + pFieldLengthMax + ' caractères.'); 
				vIsValid = false; 
			} 
		}
		else { // if (vFieldLength > 0)
			if (isFieldMandatory) {
		  	alert('Le champ ' + pFieldName + ' est obligatoire.'); 
				vIsValid = false;
			}
		}
	}
		
	if (!vIsValid) pField.focus();
	
	return vIsValid;
}



/****************************************************************************************************
	function isLuhnCorrect(pNumberCB)
	Cette fonction permet de vérifier la validité d'un numéro de carte bleue
	Elle renvoie un booléen "true" si le numéro est valide et "false" sinon
	En entrée : pNumberCB = un chaine de caractères qui correspond à un numéro de carte bleue (ex: '1234567890123456')
	En sortie : "true" si le numéro est valide et "false" sinon

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					11/10/2000 			OLD							IE4+ et Netscape3+				Code original
*/
function isLuhnCorrect(pNumberCB) {

	if (isNumber(pNumberCB) && (pNumberCB.length == 16)) {
		var vSum = 0;
		
		if (pNumberCB.length % 2 == 0) { // Paire
			for (i = 0; i < pNumberCB.length; i++) {
				if ((i + 1) % 2 != 0) { // Impaire
					if (parseInt(pNumberCB.charAt(i)) * 2 > 9)
						vSum = vSum + parseInt(pNumberCB.charAt(i)) * 2 - 9;
					else
						vSum = vSum + parseInt(pNumberCB.charAt(i)) * 2;
				}
				else { // Paire
					vSum = vSum + parseInt(pNumberCB.charAt(i));
				}
			}
		}
		else { // Impaire
			for (i = 0; i < pNumberCB.length; i++) {
				if ((i + 1) % 2 != 0) { // Impaire
					vSum = vSum + parseInt(pNumberCB.charAt(i));
				}
				else { // Paire
					if (parseInt(pNumberCB.charAt(i)) * 2 > 9)
						vSum = vSum + parseInt(pNumberCB.charAt(i)) * 2 - 9;
					else
						vSum = vSum + parseInt(pNumberCB.charAt(i)) * 2;
				}
			}
		}
		
		return (vSum % 10 == 0);
	}
	else
		return false;
}
