function validateForm(options)
{	
	var FILTERS = {}
    FILTERS.alfanum      = new RegExp(/^[^\[\]{}¦ÿ#$%\*\+:;<=>¿\?@~æÆø£Ø®¬½¼!¡«»©¢¥¤ßµ±¾¶§÷¹³²]+$/);
    FILTERS.login        = new RegExp(/^[\w]+$/);
    FILTERS.password     = new RegExp(/^\w*(?=\w*\d)(?=\w*[a-zA-Z])\w*$/);
    FILTERS.alfa         = new RegExp(/^[^\[\]{}¦ÿ#$%\*\+:;<=>¿\?@~æÆø£Ø®¬½¼!¡«»©¢¥¤ßµ±¾¶§÷¹³²0-9]+$/);
    FILTERS.num          = new RegExp(/^[0-9]+$/);
    FILTERS.cp           = new RegExp(/[0-9]{5}/);
    FILTERS.phone        = new RegExp(/[89]{1}[0-9]{8}/);
    FILTERS.mobilephone  = new RegExp(/[6][0-9]{8}/);
    FILTERS.email        = new RegExp(/^([\w\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    FILTERS.nif          = new RegExp(/[0-9]{8}[-]?[a-zA-Z]{1}/);
    FILTERS.birthdate    = new RegExp(/(0[1-9]|[12][0-9]|3[01])([/])(0[1-9]|1[012])\2(19|20)\d\d/);

	var formID			= options.formID || null;
	var requiredClass   = options.requiredClass || 'required';
	var filterAttr		= options.requiredClass || 'rel';
	var errorMsg		= options.errorMsg || '';
	var errorClass		= options.errorClass || '';
	var url				= options.url || '';
	
	$('form#' + formID).submit( validate );		

	function validate()
	{		
		var requireds = $('form#' + formID + ' *[class*=required]');

		var ok = true;
		requireds.each(function()
		{			
			if (!is( $(this).attr(filterAttr), this.value) )
			{
				$(this).addClass( errorClass );
				ok = false;
			}
			else $(this).removeClass( errorClass );
		});	

		if (!ok) alert(errorMsg)
		else
		{
			$.ajax({
				url: url,
				data: $('form#' + formID + ' *').serialize(),
				success:function(xml)
				{
					alert( $.trim($('div',xml).text()) );
					$('form#' + formID + ' *').each(function(){
						$(this).val('');
						$(this).attr('disabled', true);
					});
				},
				error: function(e) {
					alert('Error');
				}
			});	
		}
		return false;
	}

	function is(k,str)
	{
		try
		{
			return FILTERS[k].test(str)
		}
		catch(e){ return false }
	}
};