

function Form(a_name)
{

	
	// --------------------
	// -- Initialisation --
	// --------------------

	// -- Fermeture lexicale
	var _this = this;
	
	// -- Champs obligatoires
	this.message = "Veuillez renseigner ";
	this.name = a_name;
	this.fields_obligatory = new Array();
	this.values_forbidden = new Array();

	this.last_error = "";
	this.color_error = "";
	this.color_origin = "";



	//	
	Form.prototype.get_message = function (a_field)
	{
		var _message = "";
		for (var i=0; i < _this.fields_obligatory.length; i++)
		{
			// champs texte
			var _type = "";
			var _name = _this.fields_obligatory[i]['NAME'];
			var _libelle = _this.fields_obligatory[i]['LIBELLE'];

			if (a_field==_name) 	
			{
				_message = _libelle;
				break;
			}
		}

		return (_message);
	}


	//	
	Form.prototype.set_couleur_erreur = function (a_couleur)
	{
		_this.color_error = a_couleur;
	}


	//	
	Form.prototype.set_message = function (a_message)
	{
		_this.message = a_message;
	}


	//	
	Form.prototype.set_obligatoire = function (a_name, a_libelle)
	{
		var _new_index = _this.fields_obligatory.length;
		_this.fields_obligatory[_new_index] = new Array();
		_this.fields_obligatory[_new_index]['NAME'] = a_name;
		_this.fields_obligatory[_new_index]['LIBELLE'] = a_libelle;
	}



	//	
	Form.prototype.set_forbidden = function (a_name, a_value)
	{
		var _new_index = _this.values_forbidden.length;
		_this.values_forbidden[_new_index] = new Array();
		_this.values_forbidden[_new_index]['NAME'] = a_name;
		_this.values_forbidden[_new_index]['LIBELLE'] = a_value;
	}



	//	
	Form.prototype.unset_obligatoire = function (a_name)
	{
		//
		t_forbidden = new Array();
		for (_i=_j=0; _i < _this.values_forbidden.length; _i++)
		{
			if (_this.values_forbidden[_i]['NAME']!=a_name)
			{
				t_forbidden[_j] = new Array();
				t_forbidden[_j]['NAME'] = _this.values_forbidden[_i]['NAME'];
				t_forbidden[_j]['LIBELLE'] = _this.values_forbidden[_i]['LIBELLE'];
				_j++;
			}
		}
		_this.values_forbidden = t_forbidden;


		//
		t_obligatory = new Array();
		for (_i=_j=0; _i < _this.fields_obligatory.length; _i++)
		{
			if (_this.fields_obligatory[_i]['NAME']!=a_name)
			{
				t_obligatory[_j] = new Array();
				t_obligatory[_j]['NAME'] = _this.fields_obligatory[_i]['NAME'];
				t_obligatory[_j]['LIBELLE'] = _this.fields_obligatory[_i]['LIBELLE'];
				_j++;
			}
		}
		_this.fields_obligatory = t_obligatory;
	}



	//	
	Form.prototype.is_forbidden = function (a_name, a_value)
	{
		// parcours du tableau
		var b_forbidden = false;


		if (a_value.length)
		for (var i=0; i < _this.values_forbidden.length && b_forbidden==false; i++)
		{
			var _name = _this.values_forbidden[i]['NAME'];
			var _value = _this.values_forbidden[i]['LIBELLE'];
			if (a_name==_name && a_value==_value) 		b_forbidden = _value;
		}
		
		return (b_forbidden);
	}




	//	
	Form.prototype.verifier_email = function (a_email)
	{
        if (document.getElementById)
                var mail = document.getElementById(a_email);          // Mot de passe

        else if(document.all)
                var mail = document.all[a_email];


        // Valeur de retour
        var ret = true;

        // Calcul longueur chaine
        var ilgmail = mail.value.length - 1;

        // Lecture des posiions des diff?rents @
        var fidxaro = mail.value.indexOf ("@");                // position premier @
        var lidxaro = mail.value.lastIndexOf ("@");                // postion dernier @

        // Lecture des posiions des diff?rents .
        var fidxpoi = mail.value.indexOf (".");                // position premier .
        var lidxpoi = mail.value.lastIndexOf (".");                // postion dernier .

        // Test qu'aucun espace dans le mail
        if (mail.value.indexOf (" ") >= 0)
                ret = false;
        // Test qu'un et un seul @ et position > 0 et position <> lg
        else if (fidxaro <= 0  ||  (lidxaro > 0  &&  fidxaro != lidxaro)  ||  fidxaro == ilgmail  ||  lidxaro == ilgmail)
                ret = false;
       // Test qu'au moins 1 . et dernier (autre que premier, si existant) apr?s @
        else if (fidxpoi <= 0  ||  (lidxpoi > 0  &&  lidxpoi < fidxaro)  ||  fidxpoi == ilgmail  ||  lidxpoi == ilgmail)
                ret = false;

        if (!ret)         alert ('Email <'+mail.value+'> incorrect !\r\nFormat <mon@email.com> attendu ...');


        // Valeur de retour
        return (ret);
	}



	//	
	Form.prototype.verifier_obligatoire = function ()
	{
		
		// Initialisations
		var ret = true;
		this.last_error = "";

		// parcours du tableau
		for (var i=0; i < _this.fields_obligatory.length && ret==true; i++)
		{
			// champs texte
			var _type = "";
			var _name = _this.fields_obligatory[i]['NAME'];
			var _libelle = _this.fields_obligatory[i]['LIBELLE'];

			
			//
			var _field = eval("document."+_this.name+"."+_name);

			// un champ spécial pour test sur champs de type file
			var _file_verif = eval("document."+_this.name+"."+"js_" + _name);
			

			
			// CHAMPS INTERDITS
			if (_field.type)
			{
				_type = _field.type;
			}
			else if (_field.length > 1)
			{
				_type = _field[0].type;
			}
			else continue;
			
			
			// ***************************************************
			// controle sur un champ de type file ou fileUpload
			// ***************************************************
			if ( _type.search('file') >= 0 )
			{

				//
				if ( _file_verif.value.length == 0 && _name.value.length == 0)
				{
					//
					this.last_error = _field.name;
					if (this.color_error.length) 	_field.style.border = "solid "+this.color_error+" 1px";

					//
					var _function = '_this.onvalid_' + _this.name;
					if(eval(_function)) 	eval(_function+'(\''+_field.name+'\')'); 	
					else					alert (_this.message + _libelle + " !!!");

					//
					_field.onchange = _field.onblur = function()
					{
						//
						this.style.borderColor = "";
						
						//
						var _function = '_this.onblur_' + _this.name;
						if(eval(_function)) 	eval(_function+'(\''+this.name+'\')'); 	
					}


					_field.focus();
					ret = false;
				}
			}



			// ***************************************************
			// controle sur un champ de type imput text, textarea, file
			// ***************************************************

			else if (_type=='text' || _type=='textarea'  ||  _type=='password'  ||  _type=='hidden')
			{

				//
				var forbidden = _this.is_forbidden(_field.name, _field.value);
				if (forbidden.length)         						is_forbidden = true;


//				alert(_field.name + '#' + _field.value.length);
				if (_field.value.length == 0 || is_forbidden)
				{
					//
					this.last_error = _field.name;
					if (this.color_error.length) 	_field.style.border = "solid "+this.color_error+" 1px";

					//
					var _function = '_this.onvalid_' + _this.name;
					if(eval(_function)) 	eval(_function+'(\''+_field.name+'\')'); 	
					else					alert (_this.message + _libelle + " !!!");

					//
					_field.onchange = _field.onblur = function()
					{
						//
						this.style.borderColor = "";
						
						//
						var _function = '_this.onblur_' + _this.name;
						if(eval(_function)) 	eval(_function+'(\''+this.name+'\')'); 	
					}

					//
					_field.focus();
					ret = false;
				}
			}

			
			
			// *****************************************************
			// controle sur les champs de type radio, check
			// *****************************************************
			
			// radio
			else if (_type=='radio')
			{
				var selected = false;

				for (j=0; j < _field.length && selected==false; j++)
				{
					selected = _field[j].checked;

					_field[j].onchange = _field[j].onblur = function()
					{
						var _function = '_this.onblur_' + _this.name;
						if(eval(_function)) 	eval(_function+'(\''+this.name+'\')'); 	
					}


				}

				if (!selected)
				{
					this.last_error = _field[0].name;

					var _function = '_this.onvalid_' + _this.name;
					if(eval(_function)) 	eval(_function+'(\''+_field[0].name+'\')'); 	
					else					alert (_this.message + _libelle + " !!!");

					ret = false;
				}
			}


			// checkbox
			else if (_type == 'checkbox')
			{
				if (!_field.checked)
				{
					//
					this.last_error = _field.name;
					if (this.color_error.length) 	_field.style.border = "solid "+this.color_error+" 1px";

					//
					var _function = '_this.onvalid_' + _this.name;
					if(eval(_function)) 	eval(_function+'(\''+_field.name+'\')'); 	
					else					alert (_this.message + _libelle + " !!!");

					//
					_field.onchange = _field.onblur = function()
					{
						//
						this.style.borderColor = "";
						
						//
						var _function = '_this.onblur_' + _this.name;
						if(eval(_function)) 	eval(_function+'(\''+this.name+'\')'); 	
					}

					 ret = false;
				}
			}

			
			// *****************************************************
			// controle sur les champs de type liste :
			// *****************************************************
			
			// select-one, select-multiple
			else if (_type.search('select')>=0)
			{
				

                var selected=false;

                for (j=0; j < _field.length && selected==false; j++)
                {
					//
					selected = _field[j].selected;
					var is_forbidden = _this.is_forbidden(_field.name, _field[j].value);

					//
					if (is_forbidden) 					selected = false;
				}


				if (!selected)
				{
					//
					this.last_error = _field.name;
					if (this.color_error.length) 	_field.style.border = "solid "+this.color_error+" 1px";

					//
					var _function = '_this.onvalid_' + _this.name;
					if(eval(_function)) 	eval(_function+'(\''+_field.name+'\')'); 	
					else					alert (_this.message + _libelle + " !!!");

					//
					_field.onchange = _field.onblur = function()
					{
						//
						this.style.borderColor = "";
						
						//
						var _function = '_this.onblur_' + _this.name;
						if(eval(_function)) 	eval(_function+'(\''+this.name+'\')'); 	
					}

					ret = false;
				}
			}

		}

		// Retour traitement
		return (ret);

	}


}
