$(function () {

  $("#zipcode-form :input[name='zipcode']").focus(function () {
    $("#zipcode-form :input[name='zipcode']").val(''); // clear zipcode box when focus obtained
  });

  $('#zipcode-form a').click(function() {
    $("#zipcode-form").ajaxSubmit({  
      beforeSubmit: ZipCode.beforeSubmit('#zipcode-form'),
      success: ZipCode.redirect
    });
    return false;
  });


  $('#zipcode-form-overlay a').click(function() {
    $("#zipcode-form-overlay").ajaxSubmit({  
      beforeSubmit: ZipCode.beforeSubmit('#zipcode-form-overlay'),
      success: ZipCode.redirect
    });
    return false;
  });

  $("#zipcode-form-overlay :input[name='zipcode']").focus(function () {
    $("#zipcode-form-overlay :input[name='zipcode']").val(''); // clear zipcode box when focus obtained
  });

  $('#zipcode-form-overlay').keypress(function(e) {
    if (e.keyCode == 13) { // handle enter key
      $('#zipcode-form-overlay a').spin();
      $("#zipcode-form-overlay").ajaxSubmit({  
        beforeSubmit: ZipCode.beforeSubmit('#zipcode-form-overlay'),
        success: ZipCode.redirect
    });
    return false;          
    }
  });

});




var ZipCode = function() {

  var _formId = null;

  return {

    // This regular expression will validate a US zip code, which can be either 5 numbers. 
    // Or 5 numbers, plus a dash, then 4 more numbers. 
    isValid: function(value) {
      var expression = /^\d{5}([\-]\d{4})?$/;
      return (expression.test(value));
    },

    // Zipcode message dependent on path
    displayMessage: function(path, formId) {
      var successMessage = 'Congrats! We deliver to you...';
      var noDeliveryMessage = 'Sorry, you are not in our delivery area.';
      var invalidMessage = 'Sorry Charlie, that isn\'t a real zipcode.';
      if (path) {
        if (path.indexOf('/categories') > 0) {
          $(formId + ' .message').html(successMessage);  
        } else {
          $(formId + ' .message').html(noDeliveryMessage);  
        }
      } else {
        $(formId + ' .message').html(invalidMessage);
        $(formId + ' .message').slideDown();
      }
      $('.spinner').hide();
    },

    // validates proper zipcode before submitting 
    beforeSubmit: function(formId) {
      _formId = formId;
      zipcode = $(formId + ' :input[name="zipcode"]').val();
  
      if (!ZipCode.isValid(zipcode)) {
        ZipCode.displayMessage(null, formId);
        return false;
      }
      $(formId + ' .message').slideUp();
      $(formId + ' a.get-started').spin();
    },

    // redirect the page depending on the returned path value
    redirect: function(responseText, statusText) {
      redirectTo = null;
      try {
        redirectTo = JSON.parse(responseText); 
      } catch(e) {
        ZipCode.displayMessage(null, _formId);
      }
      if (redirectTo && redirectTo.path) {
        ZipCode.displayMessage(redirectTo.path, _formId);
        $(_formId + ' .message').slideDown();
        window.location.href = redirectTo.path;
      }
    }

  };
}();
