function formValidation(formID,errDisplayOption)
{
	jQuery.validator.addMethod("password", function( value, element ) {
			var result = this.optional(element) || value.length >= 6;
			if (!result) {
				element.value = "";
				var validator = this;
				setTimeout(function() {
					validator.blockFocusCleanup = true;
					element.focus();
					validator.blockFocusCleanup = false;
				}, 1);
			}
			return result;
		}, "Password must have at least 6 characters.");
		
		// a custom method making the default value for companyurl ("http://") invalid, without displaying the "invalid url" message
		jQuery.validator.addMethod("defaultInvalid", function(value, element) {
			return value != element.defaultValue;
		}, "");
		
		jQuery.validator.addMethod("billingRequired", function(value, element) {
			if ($("#bill_to_co").is(":checked"))
				return $(element).parents(".subTable").length;
			return !this.optional(element);
		}, "");
		
		jQuery.validator.messages.required = "";
		$("#"+formID).validate({
			invalidHandler: function(e, validator) {
				var errors = validator.numberOfInvalids();
				if(errDisplayOption=="inline")
				{
					if (errors) {
						var message = errors == 1
							? 'You missed 1 field. It has been highlighted below'
							: 'You missed ' + errors + ' fields.  They have been highlighted below';
						$("div.error span").html(message);
						$("div.error").show();
					} else {
						$("div.error").hide();
					}
				}
				else
				{
					if (errors) {
						var message = errors == 1
							? 'You missed 1 field. It has been highlighted below'
							: 'You missed ' + errors + ' fields.  Please fill all highlighted fields';
						alert(message);
					}
				}
			},
			onkeyup: false,
			submitHandler: function(form) {
				$("div.error").hide();
				form.submit();
			},
			messages: {
				password2: {
					required: " ",
					equalTo: "Please enter the same password as above"	
				},
				email: {
					required: " ",
					email: "Please enter a valid email address.",
					remote: jQuery.format("`{0}` is already taken.")	
				},
				loginID: {
					required: " ",
					remote: jQuery.format("`{0}` is already taken.")	
				}
			},
			debug:true
		});
		
	  $(".resize").vjustify();
	  $("div.buttonSubmit").hoverClass("buttonSubmitHover");
	
	  if ($.browser.safari) {
		$("body").addClass("safari");
	  }
	  
	  $("input.phone").mask("(999) 999-9999");
	  $("input.zipcode").mask("99999");
	  var creditcard = $("#creditcard").mask("9999 9999 9999 9999");
	
	  $("#cc_type").change(
		function() {
		  switch ($(this).val()){
			case 'amex':
			  creditcard.unmask().mask("9999 999999 99999");
			  break;
			default:
			  creditcard.unmask().mask("9999 9999 9999 9999");
			  break;
		  }
		}
	  );
	
	  // toggle optional billing address
	  var subTableDiv = $("div.subTableDiv");
	  var toggleCheck = $("input.toggleCheck");
	  toggleCheck.is(":checked")
		? subTableDiv.hide()
		: subTableDiv.show();
	  $("input.toggleCheck").click(function() {
		  if (this.checked == true) {
			subTableDiv.slideUp("medium");
			$("form").valid();
		  } else {
			subTableDiv.slideDown("medium");
		  }
	  });
	
	
	
}
//////////End of formValidation///////////

$.fn.vjustify = function() {
    var maxHeight=0;
    $(".resize").css("height","auto");
    this.each(function(){
        if (this.offsetHeight > maxHeight) {
          maxHeight = this.offsetHeight;
        }
    });
    this.each(function(){
        $(this).height(maxHeight);
        if (this.offsetHeight > maxHeight) {
            $(this).height((maxHeight-(this.offsetHeight-maxHeight)));
        }
    });
};

$.fn.hoverClass = function(classname) {
	return this.hover(function() {
		$(this).addClass(classname);
	}, function() {
		$(this).removeClass(classname);
	});
};