// plugin definition
jQuery.fn.formCheck = function() {
	var els = $('input.formCheck,select.formCheck,textarea.formCheck',this);
	var noerror = true;
	for(var i=0; i<els.length; i++)
	{
		var cible = els[i];
		var param = ($(cible).attr('dim')+':').split(':');
		
		var check = false;
			
		if(param[0]=='selectIndex') {
			check = cible.selectedIndex != param[1];
		}
		else if(param[0]=='selectValue') {
			check = cible.options[cible.selectedIndex].value != param[1];
		}
		else if(param[0]=='regex') {
			var reg = new RegExp(param[1]);
			check = cible.value.match(reg) != undefined;
		}
		else if(param[0]=='sameas') {
			check = ($(param[1]).val() != '' && cible.value == $(param[1]).val());
		}
		else if(param[0]=='mail') {
			var reg = new RegExp(/.+@.+\..+/);
			check = cible.value.match(reg) != undefined;
		}
		else if(param[0]=='num') {
			var reg = new RegExp(/0-9+/);
			check = cible.value.match(reg) != undefined;
			
			if(param[1]=='min')
				check = cible.value >= 1*param[2];
			else if(param[1]=='max')
				check = cible.value <= 1*param[2];
		}
		else {
			if($(cible).attr('type')=='radio') {
				/* !!! Un seul du groupe radio doit être référencé via class="formCheck" */
				check = false;
				var _e = $('input[name='+$(cible).attr('name')+']',this);
				for(var j=0; j<_e.length; j++)
				{
					check |= _e[j].checked;
				}	
			}
			else if($(cible).attr('type')=='checkbox') {
				check = cible.checked;
			}
			else {
				var reg = new RegExp(/[a-zA-Z0-9]/);
				check = cible.value.match(reg) != undefined;
			}
		}

		$(cible).removeClass("form-ok");
		$(cible).removeClass("form-error");

		if(check)
			$(cible).addClass("form-ok");
		else
			$(cible).addClass("form-error");
		
		noerror &= check;
	}
	return noerror>0;
};

jQuery.fn.formCheckBind = function(callback) {
	return $(this).each(function(){
		$(this).bind('submit',function(){
			if(typeof(callback)=='function')
			{
				if($(this).formCheck())
				{
					callback(this);
					return false;
				}
				else
					return false;
			}
			else
				return $(this).formCheck();
		})
	});
};