function nFormValid(option) {
	this.fields = option;
}

nFormValid.prototype = {

	verify: function() {

		var retour = new Array();
		for(var curName in this.fields) {

			// On récupère l'element de formulaire portant le curName
			// Dans le cas ou plusieurs elements sont trouvé c'est qu'il sagit de radio ou checkboxe en tableau name='xxxx[]'
			// 		-> On recupère donc l'element selectionne
			var pos = curName.indexOf('[]', 0);
		  if(pos != -1) { curNameMod = curName.substring(0,pos)+'\\[\\]'; }
		  else curNameMod = curName;

			var formElem = $('input[name='+curNameMod+'],select[name='+curName+'],textarea[name='+curName+']');
			if(formElem.length == 0) { retour.push([curName, formElem, false]); continue; }
//			else if(formElem.length > 1 && formElem[1].type == 'checkbox') formElem = $('input[name='+curName+']:first');
			else if(formElem.length > 1) {
				if(formElem[1].type == 'radio') formElem = $('input[name='+curName+']:checked');
				else formElem = ($('input[name='+curName+']:checked').length > 0) ? $('input[name='+curName+']:checked') : $('input[name='+curName+']:first');
			}

			// On récupère la value de l'element
			var formVal = (formElem.attr('type') == 'checkbox') ? formElem.attr('checked') : formElem.val();

			// On test si la value correspond
			if(this.testField(this.fields[curName], formVal)) { retour.push([curName, formElem, true]); }
			else { retour.push([curName, formElem, false]); }
		}

		if(retour.length > 0) return retour;
		return true;
	},

	testField: function(param, value) {

		if(typeof(value) == 'undefined') return false;

		var motif = '';
		var option = '';
		if((pos = param.indexOf('/',0)) != -1) {
			option = param.substr(pos+1, param.length);
			param = param.substr(0, pos);
		}

		var i = 0;
		var nbrSpace = 0;
		while(i <= value.length) {
			if(value.charAt(i) == ' ') ++nbrSpace;
			++i;
		}

		if(nbrSpace == value.length) value = '';

		switch(param) {

			case('func') :
				fieldOk = (eval(option)) ? true : false;
				break;

			case('length') :
				var min = 0; var max = option;
				// Si - (tiret) définie on veut une longeur entre min-max. On utilise donc min-1 car dans le test suivant on test la value.length > min et non pas >=
				if((pos = option.indexOf('-',0)) != -1) { min = (option.substr(0, pos)-1); max = option.substr(pos+1, option.length);  }
				fieldOk = (option.length > 0) ? (value.length > min && value.length <= max) : (value.length > max);
				break;
			case('num') :
				fieldOk = (option.length > 0) ? (!isNaN(value) && value.length > 0 && value.length <= option) : (!isNaN(value) && value.length > 0);
				break;

			case('checked') :
				fieldOk = (value === true);
				break;

			case('alpha') :
				motif = (option.length > 0) ? '^[^\\s0-9]{1,'+option+'}$' : '^[^\\s0-9]{1,}$';
				break;
			case('alphanum') :
				motif = (option.length > 0) ? '^.{1,'+option+'}$' : '^.{1,}$';
				break;
			case('email') :
				motif = '^(.+)@([^\(\);:,<>]+\.[a-zA-Z]{2,4})';
				break;
			case('url') :
				motif = '^(http://).+';
				break;

			default:
				motif = param;
				break;
		}

		if(motif != '') {
			var reg = new RegExp(motif, 'gi');
			fieldOk = reg.test(value);
		}

		return fieldOk;
	}
}