// **********************************
// 			CHECK FORM
// **********************************
var reg_email = /^[\w\-]+(\.[\w\-]+)*@[\w\-]+(\.[\w\-]+)*\.[\w\-]{2,}$/;
var error = '';
// Nom des Champs obligatoires du formulaire
var fields = new Array();
// Titre de ces champs
var fields_title = new Array();
// Champs numériques
var fields_numeric = new Array();
// Emails a vérifier
var fields_email = new Array();
var field_classname_normal = 'field_normal';
var field_classname_error = 'field_error';
var check_form_error_empty = 'Le champ "FIELD_TITLE" est obligatoire';
var check_form_error_email = 'Vous devez préciser un email valide';
var check_form_error_numeric = 'Le champ "FIELD_TITLE" doit être composé de chiffres uniquement';
// Vérification formulaire demande
function check_form(form)
{
	// champ courant
	var field = null;
	// s'il est correctement rempli
	var res = false;
	var j = 0;
	// Boucle sur tous les champs du form
	for(var i = 0; i < form.elements.length; i++)
	{
		error = '';
		if(form.elements[i].type) // eviter de changer la classe d'autres éléments que des input, select, ....
			form.elements[i].className = field_classname_normal;
		if(form.elements[i].name != fields[j])
			continue;
		if(j >= fields.length )
			break;

		// Vérification du champs obligatoire
		field = form.elements[fields[j]];
		res = false;
		// Selon son type
		switch(field.type)
		{
			// Hidden
			case 'hidden' :
				res = true;
				break;
			// Select
			case 'select-one' :
				res = field.selectedIndex > 0;
				break;
			// text ou textarea
			case 'text' :
			case 'password' :
			case 'textarea' :
				res = field.value != '';
				// OK, alors voyons voir s'il s'agit d'un champ email
				if(res && fields_email.length > 0)
				{
					for(var k = 0; k < fields_email.length; k++)
					{
						if(field.name == fields_email[k])
						{
							res = reg_email.test(field.value);
							if(!res)
							{
								error = check_form_error_email;
								break;
							}
						}
					}
				}
				// OK, alors voyons voir s'il s'agit d'un champ numéric
				if(res && fields_numeric.length > 0)
				{
					for(var k = 0; k < fields_numeric.length; k++)
					{
						if(field.name == fields_numeric[k])
						{
							res = !isNaN(field.value);
							if(!res)
							{
								error = check_form_error_numeric.replace('FIELD_TITLE', fields_title[j]);
								break;
							}
						}
					}
				}
				break;
			// pour les radio ou checkbox
			default :
				if(field.length)
				{
					for(var k = 0; k < field.length; k++)
					{
						field[k].parentNode.parentNode.className = field_classname_normal;
						res = field[k].checked;
						if(res)
							break;
					}
				}
		}
		if(!res)
			break;
		j++;
	}
	// Si mal rempli
	if(!res)
	{
		error = (error == '') ? check_form_error_empty.replace('FIELD_TITLE', fields_title[j]) : error;
		alert(error);
		if(field.focus)
		{
			field.focus();
			field.className = field_classname_error;
		}
		else if(field.length)
		{
			var opt = null;
			for(var k = 0; k < field.length; k++)
			{
				opt = field[k].parentNode;
				field[k].parentNode.parentNode.className = field_classname_error;
			}
			// Il faut que les optopns/checkbox ait un id incrémenté : ex : choix_1, choix_2, ...
			// -> focus sur le premier élément
			window.scrollTo(0,opt.offsetTop);
		}
		return false;
	}
	return true;
}
