// Validation object to cut down on duplicate code.
var validationObject = Class.create(
{
	initialize: function (fieldId, error)
	{
		this.Field = $(fieldId);
		this.FieldCell = this.Field.up("td");
		this.FieldError = this.FieldCell.down("span");
		this.Error = error;
		this.IsValid = true;
	},
	
	ThrowError: function ()
	{
		if (this.FieldError != null)
		{
			this.FieldError.update(this.Error);
		}
		else
		{
			this.FieldCell.insert("<span class=\"error\">" + this.Error + "</span>");
		}
		
		this.IsValid = false;
	},
	
	Success: function ()
	{
		if (this.FieldError != null)
		{
			this.FieldError.remove();
		}
	}
});

// Validate whether a required field was entered.
function validateRequiredField(fieldId, fieldName)
{
	var vo = new validationObject(fieldId, fieldName + " is required.");
	
	if (vo.Field.value == "")
	{
		vo.ThrowError();
	}
	else
	{
		vo.Success();
	}
	
	return vo.IsValid;
}

// Validate an email address.
function validateEmail(fieldId, fieldName)
{
	var vo = new validationObject(fieldId, fieldName + " is invalid.");
	var validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@.-_";
	var invalidChars = false;
	
	for (i = 0; i < vo.Field.value.length && !invalidChars; i++)
	{
		 var chr = vo.Field.value.charAt(i);
		 
		 if (validChars.indexOf(chr) == -1)
		 {
         	invalidChars = true;
			
			break;
         }
	}
	
	var atPos = vo.Field.value.indexOf("@");
	var dotPos = vo.Field.value.lastIndexOf(".");
	
	if (invalidChars || vo.Field.value.indexOf("@@") != -1 || vo.Field.value.indexOf("..") != -1 || atPos < 2 || atPos == vo.Field.value.length - 1 || dotPos < 5 || dotPos > vo.Field.value.length - 3 || dotPos < atPos || vo.Field.value.indexOf("@", atPos + 1) != -1 || dotPos < atPos + 3)
	{
		vo.ThrowError();
	}
	else
	{
		vo.Success();
	}
	
	return vo.IsValid;
}

// Complete the validation process.
function finalValidation(buttonId, errorCount)
{
	var s = (errorCount > 1) ? "s" : "";
	var vo = new validationObject(buttonId, "Please correct the error" + s + " above.");
	
	if (errorCount > 0)
	{
		vo.ThrowError();
	}
	else
	{
		vo.Success();
	}
	
	return vo.IsValid;
}

