text: $(document).ready(function () {
    $.mockjax({
      url: "emails.action",
      response: function (settings) {
        var email = settings.data.email,
          emails = [
            "glen@marketo.com",
            "george@bush.gov",
            "me@god.com",
            "aboutface@cooper.com",
            "steam@valve.com",
            "bill@gates.com",
          ];
        this.responseText = "true";
        if ($.inArray(email, emails) !== -1) {
          this.responseText = "false";
        }
      },
      responseTime: 500,
    });
  
    jQuery.validator.addMethod(
      "password",
      function (value, element) {
        var result =
          this.optional(element) ||
          (value.length >= 6 && /\d/.test(value) && /[a-z]/i.test(value));
        if (!result) {
          element.value = "";
          var validator = this;
          setTimeout(function () {
            validator.blockFocusCleanup = true;
            element.focus();
            validator.blockFocusCleanup = false;
          }, 1);
        }
        return result;
      },
      "Your password must be at least 6 characters long and contain at least one number and one character."
    );
  
    // 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 = "";
    $("form").validate({
      invalidHandler: function (e, validator) {
        var errors = validator.numberOfInvalids();
        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();
        }
      },
      onkeyup: false,
      submitHandler: function () {
        $("div.error").hide();
        alert("submit! use link below to go to the other step");
      },
      messages: {
        password2: {
          required: " ",
          equalTo: "Please enter the same password as above",
        },
        email: {
          required: " ",
          email:
            "Please enter a valid email address, example: you@yourdomain.com",
          remote: jQuery.validator.format(
            "{0} is already taken, please enter a different address."
          ),
        },
      },
      debug: true,
    });
  
    $(".resize").vjustify();
    $("div.buttonSubmit").hoverClass("buttonSubmitHover");
  
    $("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");
      }
    });
  });
  
  $.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);
      }
    );
  };
  