$(document).ready(function()
{
	$('form').submit(function(e)
	{
		// Form validation.
		var invalidCount = 0;
		var currFields = $(':input', this);
		currFields.removeClass('invalid');
		
		// Required Fields.
		var requiredFields = currFields.filter('.required').filter(function()
		{
			return $(this).val().length == 0;
		});
		
		// Number Fields.
		var numberFields = currFields.filter('.number').filter(function()
		{
			var regexp = /^[+-]?\d+$/;
			return !regexp.test($(this).val());
		});
		
		// Email Fields.
		var emailFields = currFields.filter('.email').filter(function()
		{
			var regexp = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,5}$/;
			return !regexp.test($(this).val());
		});
		
		// Merge results.
		var invalidFields = $.merge([], requiredFields);
		invalidFields = $.merge(invalidFields, numberFields);
		invalidFields = $.merge(invalidFields, emailFields);
		
		invalidCount = invalidFields.length;
		if(invalidCount > 0)
		{
			$(invalidFields).addClass('invalid');
			alert('You have misentered one or more fields.');
			return false;
		}
	});
});
