/* Chayne Walsh : 2007 08 01 */
var ValidateForm = 
{
	init: function()
	{
		var errors = '';
		var errorsCount = 0;
		var forms = document.getElementsByTagName('form');
		for ( var i = 0; i < forms.length; i++ )
		{
			Core.addEventListener(forms[i], 'submit', ValidateForm.submitListener);
		}
	},
	
	submitListener: function()
	{
		ValidateForm.init.errorsCount = 0;
		ValidateForm.init.errors = '';
		var fields = this.elements;
		for ( var i = 0; i < fields.length; i++ )
		{
			ValidateForm.dataTypeValidator(fields[i]);
		}
		if ( ValidateForm.init.errorsCount > 0 )
		{
			Core.preventDefault(event);
			alert(ValidateForm.init.errors);
			return;	
		}
	},
	
	dataTypeValidator: function(f)
	{
		var fieldId = f.id;
		var fieldRegExp = new RegExp("(^|)DataTypeValidator(|$)");
		var requiredRegExp = new RegExp("(^|)required(|$)");
		if ( fieldRegExp.test(fieldId) )
		{
			var field = document.getElementById(fieldId.replace('DataTypeValidator',''));
			var val = field.value;
			var ruleValue = document.getElementById(fieldId).value.toLowerCase();
			var ruleDataType = Core.inStrReplace( ruleValue, ' |required', '' );
			var ruleRequired = (requiredRegExp.test(ruleValue)) ? true : false ;
			var ruleData = ValidateForm.rules[ruleDataType];
			var ruleReq = ValidateForm.rules['required'];
			if ( ruleRequired ) val = Core.Trim(val);
			
			if ( ruleRequired && !ruleReq.test(val) ) 
			{
				ValidateForm.setErrors(f.title);
				ValidateForm.CSSErrorAlert('On','DataTypeValidator',f);
			}
			else
			{
				if ( typeof ruleData != "undefined" )
				{
					if ( field.value != '' && !ruleData.test(val) ) 
					{
						ValidateForm.setErrors(f.title);
						ValidateForm.CSSErrorAlert('On','DataTypeValidator',f);
					}
					else
					{
						ValidateForm.CSSErrorAlert('Off','DataTypeValidator',f);
					}
				}
				else
				{
					ValidateForm.setErrors('An error occured! No valid data types assigned!');
				}
			}
		}
	},
	
	rules:
	{
		required: /./,
		requiredNotWhitespace: /\S/,
		positiveInteger: /^\d*[1-9]\d*$/,
		positiveOrZeroInteger: /^\d+$/,
		integer: /^-?\d+$/,
		decimal: /^-?\d+(\.\d+)?$/,
		email: /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/,
		requiredemail: /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/,
		text: /./
	},
	
	setErrors: function(e)
	{
		ValidateForm.init.errorsCount++;
		ValidateForm.init.errors += "" + ValidateForm.init.errorsCount + ". " + e + "\n";
	},
	
	CSSErrorAlert: function(o,v,f)
	{
		var fieldId = f.id;
		var css = 'CSSErrorAlert' + o;
		try 
		{
			var addTo = document.getElementById(fieldId.replace(v,'CSSErrorAlert'));
			if ( o == 'On' )
			{
				Core.addClass(addTo,'CSSErrorAlertOn');
				Core.removeClass(addTo,'CSSErrorAlertOff');
			}
			if ( o == 'Off' )
			{
				Core.addClass(addTo,'CSSErrorAlertOff');
				Core.removeClass(addTo,'CSSErrorAlertOn');
			}
		} catch (e) {};
	}
}


Core.start(ValidateForm);