
// bind form submit event for all forms that need validating
$(document).ready(function()
{
	// bind the form validation
	$("form.frm-validation").submit(function(event)
	{
		if(!validate_form($(this)))
		{
			event.preventDefault();
		}
	});
	
});

// validates forms
function validate_form($form)
{	
	// holds our hint or error messages
	var messages = [];
	
	// get fields that need to be validated
	var fields = $form.find("input.val-field");
	
	// validate all the fields
	fields.each(function(){validate_field($(this),messages);});
		
	var isFormValid = true;
	
	// check our messages
	if (messages.length > 0)
	{
		displayMessages($form, messages);
		
		for(var i = 0; i < messages.length; i++)
		{
			isFormValid = !messages[i].isError
			if (!isFormValid)
			{
				break;
			}
		}
	}
	
	return isFormValid;
}

// validates fields, will add hint or error message to the provided messages array
function validate_field($field, messages)
{
	// get common values from the field
	var attr = $field.parent().find("label").attr("title");
	var fieldName = $field.parent().find("label").attr("title")
	var fieldValue = new String($field.val());
		
	// validate required
	if ($field.hasClass("val-required") && fieldValue.length == 0)
	{
		messages[messages.length] = new createMessage(fieldName + " is required.", true);
		return;
	}
	
	// validate email
	regexEmail = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	if ($field.hasClass("val-email") && !fieldValue.match(regexEmail))
	{
		messages[messages.length] = new createMessage("Please enter a valid " + fieldName + ".", true);
		return;
	}	
	
	// validate password
	if ($field.hasClass("val-password") && !(fieldValue.length >= 6))
	{
		messages[messages.length] = new createMessage("Please enter a valid " + fieldName + ".", true);
		return;
	}
}

// handles the html manipulation for displaying messages to the ui
function displayMessages($form, messages)
{
	var $messagesContainer = $($form.find("div.validation").get(0));
	
	$messagesContainer.empty();
	$messagesContainer.append("<h4>Validation Summary</h4>");
	
	for(var i=0;i<messages.length;i++)
	{
		$messagesContainer.append(messages[i].getHtml());
	}
}

// helper function to create a message object
function createMessage(text, status)
{
	this.isError = status;
	this.message = text;
	this.getHtml = function(){return "<p>" + this.message + "</p>"};
}