function ValidateForm(formName, requiredClassName)
{
	var form = document.forms[formName];
	var errors = [];
	
	for(var i=0; i<form.elements.length; i++)
	{
		var currentElement = form.elements[i];
		if(-1 != currentElement.className.indexOf(requiredClassName))
		{
			var message = element.Validate(currentElement);
			if(true !== message)
			{
				//element.SetErrorStatus();
				errors.push(message);
			}
		}
	}
	
	if(0 < errors.length)
	{
		alert('Sorry, would you mind addressing the following items first?\n\n' + errors.join('\n'));
		return false;
	}
	return true;
}

function VerifyPassword(id, previewId)
{
	var originalText = document.getElementById(id).value;
	if(0 < originalText.length)
	{
		var textNode = document.createTextNode(" >> " + originalText);
		var previewElement = document.getElementById(previewId);
		previewElement.appendChild(textNode);

		setTimeout(function() { previewElement.removeChild(textNode); }, 5 * 1000);
	}
	return false;
}


var element = {

	element: 0,
	errorCssClass: 'fieldError',

	Validate: function(element)
	{
		this.element = element;
		switch(element.type)
		{
			case 'checkbox':
				return this.IsChecked('was not checked.');
				break;
			case 'radio':
				//loop through values with same name, return if checked
				//return this.HasValue('was not selected.');
				break;
			case 'file':
				return this.HasValue('was not selected.');
				break;
			case 'password':
				return this.HasValue('was not a valid password.');
				break;
			case 'select-one':
			case 'select-multiple':
				return this.HasValue('was not selected.');
				break;
			case 'text':
			case 'textarea':
				return this.HasValue('was left blank.');
				break;
			case 'hidden':
			case 'button':
			case 'image':
			case 'reset':
			case 'submit':
			default:
				break;
		}
		
		return null;
	},

	HasValue: function(errorMessage)
	{
		if(0 == this.element.value.length)
		{
			this.SetErrorStatus();
			return '"' + this.GetLabel(this.element.id) + '" ' + errorMessage;
		}
		return true;
	},

	IsChecked: function(errorMessage)
	{
		if(!this.element.checked)
		{
			this.SetErrorStatus();
			return '"' + this.GetLabel(this.element.id) + '" ' + errorMessage;
		}
		return true;
	},
	
	SetErrorStatus: function()
	{
		if(-1 != this.element.className.indexOf(this.errorCssClass))
		{
			this.element.className += ' ' + this.errorCssClass;
		}
	},
	
	GetLabel: function()
	{
		var labels = document.getElementsByTagName('label');
		for(var i=0; i<labels.length; i++)
		{
			var currentLabel = labels[i];
			if(currentLabel.getAttribute('for').toLowerCase() == this.element.id || currentLabel.htmlFor == this.element.id)
			{
				return currentLabel.firstChild.data;
				break;
			}
		}
		return this.element.id;
	}
};