/*
'---
'--- Validation.js - Fonctions de validation en JavaScript
'---
'--- Par Francois Cusson-Lafrenaye, ing.
'---     Seconde Vision [www.sv.qc.ca]
'---
'--- Ce fichier doit être inclus dans la section <HEAD>. Chacun des champs à valider peut
'--- être indiqué ainsi :
'---
'--- <SCRIPT>AjoutValidation("NomForm.NomChamp", VAL_NONVIDE + VAL_NOMBRE, "Vous devez indiquer de quoi de valides!");</SCRIPT>
'---
'--- REVISIONS
'--- 2005/10/11, Fcl-	Adaptation
'--- 2005/10/18, Fcl-   Gestion des [] dans les noms en PHP
'--- 2005/10/26, Fcl-   Validation des listes de choix (SELECT)
'--- 2006/02/13, Fcl-   Validation VAL_NOMBRE sur des array
'---
*/

<!-- Fonctions de validation -->

var VAL_NONVIDE = 1;
var VAL_NOMBRE = 2;

var ArrayValidation = new Array();

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * AjoutValidation() - Ajoute un item à valider
 */
function AjoutValidation(iChamp, iType, iMessageErreur)
{
	ArrayValidation[ArrayValidation.length] = new Array(iChamp, iType, iMessageErreur);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * DoValidation() - Valide chacun des items enregistrés dans ArrayValidation
 */
function DoValidation()
{
	var i = 0;
	var Champ;

	for ( ; i < ArrayValidation.length; i++)
	{
		// Accès à l'objet Champ avec gestion des [] dans les noms en PHP
		if (ArrayValidation[i][0].indexOf("[]") < 0)
		{
			Champ = eval("document." + ArrayValidation[i][0]);
		}
		else
		{
			// On utilise la forme NomForm.elements['NomChamp[]']
			var NomChamp = ArrayValidation[i][0].replace(".", ".elements['") + "']";
			Champ = eval("document." + NomChamp);
		}
		
		// Si le champ est valide...
		if (typeof(Champ) != "undefined")
		{
            // Sinon, si le champ est une liste (select)...
            if (typeof(Champ.options) != "undefined")
            {
				// Non-vide?
				if (ArrayValidation[i][1] & VAL_NONVIDE)
				{
					// On s'assure que la valeur sélectionnée a une valeur non-vide
					var Selection = Champ.selectedIndex;
					var Valeur = "" + Champ.options[Selection].value;
					
					if (Valeur == "")
					{
						alert(ArrayValidation[i][2]);

						if (Champ.type != "hidden") Champ.focus();

						return false;
					}
                }
            }

			// Sinon, si le champ est un array...
			else if (typeof(Champ.length) != "undefined")
			{
				// Non-vide?
				if (ArrayValidation[i][1] & VAL_NONVIDE)
				{
					// On s'assure qu'on a au moins une valeur de choisie (attention si TEXT !)
					var Okay = false;
					var j = 0;

					for ( ; j < Champ.length; j++)
					{
						Okay |= Champ[j].checked;
					}

					if (!Okay)
					{
						alert(ArrayValidation[i][2]);

						if (Champ.type != "hidden") Champ[0].focus();

						return false;
					}
				}

				// Nombre?
				if (ArrayValidation[i][1] & VAL_NOMBRE)
				{
					// On regarde chaque champ et, s'il contient une valeur, elle doit etre numérique
					var j = 0;

					for ( ; j < Champ.length; j++)
					{
                        if (Champ[j].value != "")
					    {
                            // Protection contre les virgules et les espaces
						    if (Champ[j].value.indexOf(",") > -1 || Champ[j].value.indexOf(" ") > -1)
						    {
                                alert(ArrayValidation[i][2]);

							     if (Champ[j].type != "hidden") Champ[j].focus();

							     return false;
						    }
						    else if (isNaN(parseFloat(Champ[j].value)))
						    {
							     alert(ArrayValidation[i][2]);

							     if (Champ[j].type != "hidden") Champ[j].focus();

							     return false;
						    }
						    else
						    {
							     Champ.value = parseFloat(Champ.value);
						    }
						}
					}
				}
			}

			// Sinon, si le champ est un champ "ordinaire"...
			else if (typeof(Champ.length) == "undefined")
			{
				// Non-vide?
				if (ArrayValidation[i][1] & VAL_NONVIDE)
				{
					if (Champ.value == "" || Champ.value == " " || Champ.value == "  ")
					{
						alert(ArrayValidation[i][2]);

						if (Champ.type != "hidden") Champ.focus();

						return false;
					}
				}

				// Nombre?
				if (ArrayValidation[i][1] & VAL_NOMBRE)
				{
					if (Champ.value != "")
					{
						// Protection contre les virgules et les espaces
						if (Champ.value.indexOf(",") > -1 || Champ.value.indexOf(" ") > -1)
						{
							alert(ArrayValidation[i][2]);

							if (Champ.type != "hidden") Champ.focus();

							return false;
						}
						else if (isNaN(parseFloat(Champ.value)))
						{
							alert(ArrayValidation[i][2]);

							if (Champ.type != "hidden") Champ.focus();

							return false;
						}
						else
						{
							Champ.value = parseFloat(Champ.value);
						}
					}
				}
			}
			
			// Sinon, on a un probleme avec la validation!
			else 
			{
                alert("Le champ " + ArrayValidation[i][0] + " ne peut pas être validé.");
            }
		}
	}

	return true;
}


