
// Positionne l'attribut obligatoire à true pour tous les champs spécifiés
function obligatoires(frm)
{
	for (var i=1; i<obligatoires.arguments.length; i++)
	{
		frm[obligatoires.arguments[i]].obligatoire = true;
		frm[obligatoires.arguments[i]].nomLong = obligatoires.arguments[++i];
	}
}
// Positionne l'attribut numérique à true pour tous les champs spécifiés
function emails(frm)
{
	for (var i=1; i<emails.arguments.length; i++)
	{
		frm[emails.arguments[i]].email = true;
		frm[emails.arguments[i]].nomLong = emails.arguments[++i];
	}
}

// Positionne l'attribut numérique à true pour tous les champs spécifiés
function numeriques(frm)
{
	for (var i=1; i<numeriques.arguments.length; i++)
	{
		frm[numeriques.arguments[i]].numerique = true;
		frm[numeriques.arguments[i]].nomLong = numeriques.arguments[++i];
	}
}



// Positionne l'événement onblur pour gérer le passage en majuscules pour tous les champs spécifiés
function majuscules(frm)
{
	for (var i=1; i<majuscules.arguments.length; i++)
	{
		frm[majuscules.arguments[i]].onblur = toMaj;
	}
}

// Positionne l'attribut format au format spécifié pour tous les champs spécifiés
function formats(frm)
{
	for (var i=1; i<formats.arguments.length; i++)
	{
		var fld = frm[formats.arguments[i]];
		fld.nomLong = formats.arguments[++i];
		fld.format = formats.arguments[++i];
	}
}

// Vérifie tous les champs de la form
function checkAll(frm)
{
	for (var i=0; i<frm.elements.length; i++)
	{
		var fld = frm.elements[i];
		if (fld.obligatoire && !checkObligatoire(fld))
		{	
			return fldError(fld, "Le champ " + fld.nomLong + " est obligatoire.")
		}
		if (fld.email && !checkEmail(fld))
		{	
			return fldError(fld, "Le champ saisi n'est pas un e-mail valide.")
		}
		if (fld.numerique && !checkNumerique(fld))
		{	
			return fldError(fld, "Le champ " + fld.nomLong + " est numérique.")
		}
		if ((fld.format != null) && !checkFormat(fld))
		{	
			return fldError(fld, "Le champ " + fld.nomLong + " a le format suivant : " + fld.format + "\n\nRappel :\nX = Caractère quelconque\nA = Lettre\n9 = Chiffre")
		}
		
	}
	return true
}

// Regarde si le champ est vide
function checkObligatoire(fld)
{
	if (fld.value.length == 0)
	{
		return false
	}
	return true
}
// Regarde si l'e-mail est correct
function checkEmail(fld)
{
var a=fld.value;
var test="" + a;
for(var k = 0; k < test.length;k++)
{
var c = test.substring(k,k+1);
if(c == "@")
{
return true;
}
}
return false;
}

// Vérifie si le champ a le bon format
function checkFormat(fld)
{
	var val = fld.value;
	
	// S'il est vide, c'est ok
	if (val.length == 0)
	{
		return true
	}
	// Si la longueur n'est pas bonne, pas la peine d'aller plus loin
	if (val.length != fld.format.length)
	{
		return false
	}
	// Vérifie chaque caractère en fonction de son format
	for (var i=0; i<val.length; i++)
	{
		fchar = fld.format.charAt(i);
		vchar = val.charAt(i);
		switch(fchar)
		{
			case "A" :
				if (isDigit(vchar))
				{
					return false
				}
				break;
			case "9" :
				if (!isDigit(vchar))
				{
					return false
				}
				break;
			case "X" :
				break;
			default :
				if (fchar != vchar)
				{
					return false
				}
		}
	}
	return true
}

// Regarde si le champ est un nombre
function checkNumerique(fld)
{
	var val = fld.value;

	// Retire le signe s'il est présent
	if (val.charAt(0) == "-" || val.charAt(0) == "+")
	{
		val = val.slice(1)
	}
	
	// Retire le point (on pourrait utiliser un autre séparateur)
	val = val.replace(/\./, "");

	// Verifie chaque caractère
	for (var i=0; i<val.length; i++)
	{
		if (!isDigit(val.charAt(i)))
		return false
	}
	return true
}

// Affiche l'erreur et sélectionne le champ
function fldError(fld, msg)
{
	fld.focus();
	fld.select();
	alert(msg);
	return false;
}

// Pour l'autoselect, sélectionne le champ
function toMaj()
{
	this.value = this.value.toUpperCase();
}

// Retourne true si le caratère est un chiffre
function isDigit(digit)
{
	// Tous les caratères accéptés
	var charOk = "0123456789";
	return !(charOk.indexOf(digit) == -1)
}
