	
	function Validator()
	{
		this.errors = new Array();
		
		this.errorHeader = "Please fix the following error(s) : ";
		
		this.TotalErrors = TotalErrors;
		
		this.GetError = GetError;
		
		this.SetError = SetError;
		
		this.AddError = AddError;
		
		this.GetErrorHeader = GetErrorHeader;
		
		this.SetErrorHeader = SetErrorHeader;
		
		this.IsValid = IsValid;
		
		this.ValidateEmptyField = ValidateEmptyField;
		
		this.ValidateRegularExpression = ValidateRegularExpression;
		
		this.ValidateNumericField = ValidateNumericField;
		
		this.ValidateNumericRange = ValidateNumericRange;
		
		this.ValidateEmailField = ValidateEmailField;
		
		this.ValidateZipField = ValidateZipField;
		
		this.CustomValidation = CustomValidation;
		
		this.DisplayErrors = DisplayErrors;
		
	}
	
	function TotalErrors()
	{
		return this.errors.length;
	}
	
	function GetError(intIndex)
	{
		return this.errors[intIndex];
	}
	
	function SetError(intIndex, strMessage)
	{
		this.errors[intIndex] = strMessage;
	}
	
	function AddError(strMessage)
	{
		var intNextIndex = this.TotalErrors();
		this.errors[intNextIndex] = strMessage;
	}
	
	function GetErrorHeader()
	{
		return this.errorHeader;
	}
	
	function SetErrorHeader(strHeader)
	{
		this.errorHeader = strHeader;
	}
	
	function IsValid()
	{
		return (this.TotalErrors() > 0)? false : true;
	}
	
	function ValidateEmptyField ( strValueToValidate, strMessage )
	{
		if (strValueToValidate.match(/^\s+$/) || strValueToValidate == "")
		{
			this.AddError(strMessage);
			return false;
		}
		else
		{
			return true;
		}	
	}
	
	function ValidateRegularExpression ( strValueToValidate, strRegExp, strMessage)
	{
		if(strValueToValidate == "")
		{
			return true;
		}
		
		if (strValueToValidate.match(strRegExp))
		{
			return true;
		}
		else
		{
			this.AddError(strMessage);
			return false;
		}
	}
	
	function ValidateNumericField (strValueToValidate, strMessage)
	{
		if (isNaN(strValueToValidate))
		{
			this.AddError(strMessage);
			return false;
		}
		else
		{
			return true;
		}
	}
	
	function ValidateNumericRange (intValueToValidate, intMaxValue, intMinValue, strMessage)
	{
		if(intValueToValidate == "")
		{
			return true;
		}
		
		if(intValueToValidate > intMaxValue || intValueToValidate < intMinValue)
		{
			this.AddError(strMessage);
			return false;
		}
		else
		{
			return true;
		}
	}
	
	function ValidateEmailField (strValueToValidate, strMessage)
	{
		return this.ValidateRegularExpression(strValueToValidate, /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/, strMessage);
		
	}
	
	function ValidateZipField (strValueToValidate, strMessage)
	{
		if(strValueToValidate == "")
		{
			return true;
		}
		
		if (strValueToValidate.match(/\d{5}(-\d{4})?/))
		{
			return true;
		}
		else
		{
			this.AddError(strMessage);
			return false;
		}
	}
	
	
	function CustomValidation(strFunctionName, strMessage)
	{
		var result = eval(strFunctionName);
		if(result)
		{
			return true;
		}
		else
		{
			this.AddError(strMessage);
			return false;
		}
	}
	
	
	function DisplayErrors()
	{
		if(this.IsValid())
		{
			return;
		}
		
		var strMessages = "";
		
		for(var i = 0; i < this.TotalErrors(); i++)
		{
			strMessages += "  - " + this.GetError(i) + "\n";
		}
		
		if(this.GetErrorHeader() != "")
		{
			strMessages = this.GetErrorHeader() + "  \n\n" + strMessages;
		}
		
		alert(strMessages);
	}
	
	