var Validation = new function()
{
	this.init = function()
	{
		if(typeof(Page_Validators) === 'undefined')
			return;
		
		$.subscribe('/form/submit', validation_exec);
		$('.form-input-field,.form-input-field-long').blur(validation_onblur);
	}

	function validation_onblur()
	{
		var cf = this;
		validation_mark_valid(this.id);
	
		$(this).siblings('.form-input-validator').each(function()
		{
			ValidatorValidate(this);
	
			if(!this.isvalid)
				validation_mark_invalid(cf.id);
			
			return this.isvalid;
		});
	}

	function validation_exec(vg)
	{
		var i;
		var state = {};

		for(i = 0; i < Page_Validators.length; i++)
			if(Page_Validators[i].validationGroup == vg)
			{
				ValidatorValidate(Page_Validators[i]);
				if(typeof(state[Page_Validators[i].controltovalidate]) !== 'undefined' && !state[Page_Validators[i].controltovalidate])
					continue;
	
				state[Page_Validators[i].controltovalidate] = Page_Validators[i].isvalid;
			}
	
		for(i in state)
			if(!state[i])
				validation_mark_invalid(i);
			else
				validation_mark_valid(i);
	}

	function validation_mark_invalid(ctl_id)
	{
		$('#' + ctl_id).css('color', 'red').next('.form-checkmark,.form-checkmark-long').hide();
		/* TODO: fill in the blanks for invalid forms using addClass & removeClass */
	}

	function validation_mark_valid(ctl_id)
	{
		$('#' + ctl_id).css('color', 'black');

		if($('#' + ctl_id).val() != '' && $('#' + ctl_id).val() != ' ')
		{
			$('#' + ctl_id).next('.form-checkmark,.form-checkmark-long').show();
		}
		else
			$('#' + ctl_id).next('.form-checkmark,.form-checkmark-long').hide();
		/* TODO: fill in the blanks for valid forms using addClass & removeClass */
	}
}

$(Validation.init);

