
﻿$(document).ready(function(){$(".validate").submit(function(e){clear_validation_messages();var inputs=$(this).find("input,textarea")
var inputs_to_validate=jQuery.grep(inputs,function(i){return!!($(i).attr("validation"));})
jQuery.each(inputs_to_validate,function(){this.valid=true});jQuery.each(inputs_to_validate,function(){validate(this)});jQuery.each(inputs_to_validate,function(){set_or_remove_error_class(this)});var has_errors=false;jQuery.each(inputs_to_validate,function(){if(!this.valid)has_errors=true;});hide_or_show_error_messages(has_errors);return!has_errors;});});function hide_or_show_error_messages(has_errors)
{if(has_errors)
$('#errors').fadeIn();else
$('#errors').fadeOut();}
function clear_validation_messages()
{$('#errors').text('');}
function add_validation_message(message,validation)
{$('#errors').append(message+"<br />");}
function set_or_remove_error_class(element)
{if(element.valid)
$(element).removeClass("error");else if(!($(element).hasClass("error")))
$(element).addClass("error");}
function validate(element)
{var validations=$(element).attr("validation").split(" ");jQuery.each(validations,function()
{eval("var temp = validation_functions."+this);if(!temp)alert("there is no validation function for '"+this+"'");if(!temp(element))validation_failed(element,this);});}
function get_element_name(element)
{var labels=$("label[for='"+element.id+"']:first");if(labels.length==0)return element.name;return labels.text();}
function validation_failed(element,validation)
{element.valid=false;var name=get_element_name(element);eval("var message = validation_messages."+validation);if(!message)
add_validation_message(name+' is invalid');else
add_validation_message(name+' '+message);}
var validation_messages={required:"is required.",money:"needs to be a dollar amount.",email:"must be an email address.",zip:"must be a valid ZIP or ZIP + 4 code.",digits:"must contain only numeric characters."}
var validation_functions={required:function(element)
{return jQuery.trim(element.value)!="";},money:function(element)
{return validate_regex(jQuery.trim(element.value),/^\d*(\.\d{1,2})?$/);},email:function(element)
{return validate_regex(jQuery.trim(element.value),/^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/);},zip:function(element)
{return validate_regex(jQuery.trim(element.value),/^\d{5}(-\d{4})?$/);},digits:function(element)
{return validate_regex(jQuery.trim(element.value),/^\d+$/);}};function validate_regex(value,pattern)
{if(value=='')return true;return value.match(pattern);}