{
  "version": 3,
  "sources": ["../../../node_modules/jquery-ujs/src/rails.js", "../../../node_modules/sticky-kit/dist/sticky-kit.js", "../../../node_modules/js-cookie/src/js.cookie.js", "../../../node_modules/waypoints/lib/jquery.waypoints.js", "../../../node_modules/bootstrap/js/modal.js", "../../javascript/extensions/array-join-sentence.js", "../../javascript/extensions/index.js", "../../javascript/models/accordion.js", "../../javascript/models/algolia-source.js", "../../javascript/models/beer-autocomplete-suggestion.js", "../../javascript/models/beer-metadata.js", "../../javascript/models/browser.js", "../../javascript/models/menu-sections.js", "../../javascript/models/servings.js", "../../javascript/models/script-inserter.js", "../../javascript/models/stripe-loader.js", "../../javascript/models/tv-menu-loader.js", "../../javascript/models/index.js", "../../javascript/shared/checklists.js", "../../javascript/shared/dom.js", "../../javascript/shared/input-focuser.js", "../../javascript/shared/messages.js", "../../javascript/shared/modals.js", "../../javascript/shared/on-premise-tracker.js", "../../javascript/shared/shared.js", "../../javascript/shared/index.js", "../../javascript/application-shared.js"],
  "sourcesContent": ["(function($, undefined) {\n\n/**\n * Unobtrusive scripting adapter for jQuery\n * https://github.com/rails/jquery-ujs\n *\n * Requires jQuery 1.8.0 or later.\n *\n * Released under the MIT license\n *\n */\n\n  // Cut down on the number of issues from people inadvertently including jquery_ujs twice\n  // by detecting and raising an error when it happens.\n  'use strict';\n\n  if ( $.rails !== undefined ) {\n    $.error('jquery-ujs has already been loaded!');\n  }\n\n  // Shorthand to make it a little easier to call public rails functions from within rails.js\n  var rails;\n  var $document = $(document);\n\n  $.rails = rails = {\n    // Link elements bound by jquery-ujs\n    linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n\n    // Button elements bound by jquery-ujs\n    buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)',\n\n    // Select elements bound by jquery-ujs\n    inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n\n    // Form elements bound by jquery-ujs\n    formSubmitSelector: 'form',\n\n    // Form input elements bound by jquery-ujs\n    formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n\n    // Form input elements disabled during form submission\n    disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n\n    // Form input elements re-enabled after form submission\n    enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n\n    // Form required input elements\n    requiredInputSelector: 'input[name][required]:not([disabled]), textarea[name][required]:not([disabled])',\n\n    // Form file input elements\n    fileInputSelector: 'input[name][type=file]:not([disabled])',\n\n    // Link onClick disable selector with possible reenable after remote submission\n    linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n\n    // Button onClick disable selector with possible reenable after remote submission\n    buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',\n\n    // Up-to-date Cross-Site Request Forgery token\n    csrfToken: function() {\n     return $('meta[name=csrf-token]').attr('content');\n    },\n\n    // URL param that must contain the CSRF token\n    csrfParam: function() {\n     return $('meta[name=csrf-param]').attr('content');\n    },\n\n    // Make sure that every Ajax request sends the CSRF token\n    CSRFProtection: function(xhr) {\n      var token = rails.csrfToken();\n      if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n    },\n\n    // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)\n    refreshCSRFTokens: function(){\n      $('form input[name=\"' + rails.csrfParam() + '\"]').val(rails.csrfToken());\n    },\n\n    // Triggers an event on an element and returns false if the event result is false\n    fire: function(obj, name, data) {\n      var event = $.Event(name);\n      obj.trigger(event, data);\n      return event.result !== false;\n    },\n\n    // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n    confirm: function(message) {\n      return confirm(message);\n    },\n\n    // Default ajax function, may be overridden with custom function in $.rails.ajax\n    ajax: function(options) {\n      return $.ajax(options);\n    },\n\n    // Default way to get an element's href. May be overridden at $.rails.href.\n    href: function(element) {\n      return element[0].href;\n    },\n\n    // Checks \"data-remote\" if true to handle the request through a XHR request.\n    isRemote: function(element) {\n      return element.data('remote') !== undefined && element.data('remote') !== false;\n    },\n\n    // Submits \"remote\" forms and links with ajax\n    handleRemote: function(element) {\n      var method, url, data, withCredentials, dataType, options;\n\n      if (rails.fire(element, 'ajax:before')) {\n        withCredentials = element.data('with-credentials') || null;\n        dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);\n\n        if (element.is('form')) {\n          method = element.data('ujs:submit-button-formmethod') || element.attr('method');\n          url = element.data('ujs:submit-button-formaction') || element.attr('action');\n          data = $(element[0]).serializeArray();\n          // memoized value from clicked submit button\n          var button = element.data('ujs:submit-button');\n          if (button) {\n            data.push(button);\n            element.data('ujs:submit-button', null);\n          }\n          element.data('ujs:submit-button-formmethod', null);\n          element.data('ujs:submit-button-formaction', null);\n        } else if (element.is(rails.inputChangeSelector)) {\n          method = element.data('method');\n          url = element.data('url');\n          data = element.serialize();\n          if (element.data('params')) data = data + '&' + element.data('params');\n        } else if (element.is(rails.buttonClickSelector)) {\n          method = element.data('method') || 'get';\n          url = element.data('url');\n          data = element.serialize();\n          if (element.data('params')) data = data + '&' + element.data('params');\n        } else {\n          method = element.data('method');\n          url = rails.href(element);\n          data = element.data('params') || null;\n        }\n\n        options = {\n          type: method || 'GET', data: data, dataType: dataType,\n          // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n          beforeSend: function(xhr, settings) {\n            if (settings.dataType === undefined) {\n              xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n            }\n            if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {\n              element.trigger('ajax:send', xhr);\n            } else {\n              return false;\n            }\n          },\n          success: function(data, status, xhr) {\n            element.trigger('ajax:success', [data, status, xhr]);\n          },\n          complete: function(xhr, status) {\n            element.trigger('ajax:complete', [xhr, status]);\n          },\n          error: function(xhr, status, error) {\n            element.trigger('ajax:error', [xhr, status, error]);\n          },\n          crossDomain: rails.isCrossDomain(url)\n        };\n\n        // There is no withCredentials for IE6-8 when\n        // \"Enable native XMLHTTP support\" is disabled\n        if (withCredentials) {\n          options.xhrFields = {\n            withCredentials: withCredentials\n          };\n        }\n\n        // Only pass url to `ajax` options if not blank\n        if (url) { options.url = url; }\n\n        return rails.ajax(options);\n      } else {\n        return false;\n      }\n    },\n\n    // Determines if the request is a cross domain request.\n    isCrossDomain: function(url) {\n      var originAnchor = document.createElement('a');\n      originAnchor.href = location.href;\n      var urlAnchor = document.createElement('a');\n\n      try {\n        urlAnchor.href = url;\n        // This is a workaround to a IE bug.\n        urlAnchor.href = urlAnchor.href;\n\n        // If URL protocol is false or is a string containing a single colon\n        // *and* host are false, assume it is not a cross-domain request\n        // (should only be the case for IE7 and IE compatibility mode).\n        // Otherwise, evaluate protocol and host of the URL against the origin\n        // protocol and host.\n        return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) ||\n          (originAnchor.protocol + '//' + originAnchor.host ===\n            urlAnchor.protocol + '//' + urlAnchor.host));\n      } catch (e) {\n        // If there is an error parsing the URL, assume it is crossDomain.\n        return true;\n      }\n    },\n\n    // Handles \"data-method\" on links such as:\n    // <a href=\"/users/5\" data-method=\"delete\" rel=\"nofollow\" data-confirm=\"Are you sure?\">Delete</a>\n    handleMethod: function(link) {\n      var href = rails.href(link),\n        method = link.data('method'),\n        target = link.attr('target'),\n        csrfToken = rails.csrfToken(),\n        csrfParam = rails.csrfParam(),\n        form = $('<form method=\"post\" action=\"' + href + '\"></form>'),\n        metadataInput = '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n\n      if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) {\n        metadataInput += '<input name=\"' + csrfParam + '\" value=\"' + csrfToken + '\" type=\"hidden\" />';\n      }\n\n      if (target) { form.attr('target', target); }\n\n      form.hide().append(metadataInput).appendTo('body');\n      form.submit();\n    },\n\n    // Helper function that returns form elements that match the specified CSS selector\n    // If form is actually a \"form\" element this will return associated elements outside the from that have\n    // the html form attribute set\n    formElements: function(form, selector) {\n      return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);\n    },\n\n    /* Disables form elements:\n      - Caches element value in 'ujs:enable-with' data store\n      - Replaces element text with value of 'data-disable-with' attribute\n      - Sets disabled property to true\n    */\n    disableFormElements: function(form) {\n      rails.formElements(form, rails.disableSelector).each(function() {\n        rails.disableFormElement($(this));\n      });\n    },\n\n    disableFormElement: function(element) {\n      var method, replacement;\n\n      method = element.is('button') ? 'html' : 'val';\n      replacement = element.data('disable-with');\n\n      if (replacement !== undefined) {\n        element.data('ujs:enable-with', element[method]());\n        element[method](replacement);\n      }\n\n      element.prop('disabled', true);\n      element.data('ujs:disabled', true);\n    },\n\n    /* Re-enables disabled form elements:\n      - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n      - Sets disabled property to false\n    */\n    enableFormElements: function(form) {\n      rails.formElements(form, rails.enableSelector).each(function() {\n        rails.enableFormElement($(this));\n      });\n    },\n\n    enableFormElement: function(element) {\n      var method = element.is('button') ? 'html' : 'val';\n      if (element.data('ujs:enable-with') !== undefined) {\n        element[method](element.data('ujs:enable-with'));\n        element.removeData('ujs:enable-with'); // clean up cache\n      }\n      element.prop('disabled', false);\n      element.removeData('ujs:disabled');\n    },\n\n   /* For 'data-confirm' attribute:\n      - Fires `confirm` event\n      - Shows the confirmation dialog\n      - Fires the `confirm:complete` event\n\n      Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n      Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n      Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n      return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n   */\n    allowAction: function(element) {\n      var message = element.data('confirm'),\n          answer = false, callback;\n      if (!message) { return true; }\n\n      if (rails.fire(element, 'confirm')) {\n        try {\n          answer = rails.confirm(message);\n        } catch (e) {\n          (console.error || console.log).call(console, e.stack || e);\n        }\n        callback = rails.fire(element, 'confirm:complete', [answer]);\n      }\n      return answer && callback;\n    },\n\n    // Helper function which checks for blank inputs in a form that match the specified CSS selector\n    blankInputs: function(form, specifiedSelector, nonBlank) {\n      var foundInputs = $(),\n        input,\n        valueToCheck,\n        radiosForNameWithNoneSelected,\n        radioName,\n        selector = specifiedSelector || 'input,textarea',\n        requiredInputs = form.find(selector),\n        checkedRadioButtonNames = {};\n\n      requiredInputs.each(function() {\n        input = $(this);\n        if (input.is('input[type=radio]')) {\n\n          // Don't count unchecked required radio as blank if other radio with same name is checked,\n          // regardless of whether same-name radio input has required attribute or not. The spec\n          // states https://www.w3.org/TR/html5/forms.html#the-required-attribute\n          radioName = input.attr('name');\n\n          // Skip if we've already seen the radio with this name.\n          if (!checkedRadioButtonNames[radioName]) {\n\n            // If none checked\n            if (form.find('input[type=radio]:checked[name=\"' + radioName + '\"]').length === 0) {\n              radiosForNameWithNoneSelected = form.find(\n                'input[type=radio][name=\"' + radioName + '\"]');\n              foundInputs = foundInputs.add(radiosForNameWithNoneSelected);\n            }\n\n            // We only need to check each name once.\n            checkedRadioButtonNames[radioName] = radioName;\n          }\n        } else {\n          valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val();\n          if (valueToCheck === nonBlank) {\n            foundInputs = foundInputs.add(input);\n          }\n        }\n      });\n      return foundInputs.length ? foundInputs : false;\n    },\n\n    // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n    nonBlankInputs: function(form, specifiedSelector) {\n      return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n    },\n\n    // Helper function, needed to provide consistent behavior in IE\n    stopEverything: function(e) {\n      $(e.target).trigger('ujs:everythingStopped');\n      e.stopImmediatePropagation();\n      return false;\n    },\n\n    //  Replace element's html with the 'data-disable-with' after storing original html\n    //  and prevent clicking on it\n    disableElement: function(element) {\n      var replacement = element.data('disable-with');\n\n      if (replacement !== undefined) {\n        element.data('ujs:enable-with', element.html()); // store enabled state\n        element.html(replacement);\n      }\n\n      element.bind('click.railsDisable', function(e) { // prevent further clicking\n        return rails.stopEverything(e);\n      });\n      element.data('ujs:disabled', true);\n    },\n\n    // Restore element to its original state which was disabled by 'disableElement' above\n    enableElement: function(element) {\n      if (element.data('ujs:enable-with') !== undefined) {\n        element.html(element.data('ujs:enable-with')); // set to old enabled state\n        element.removeData('ujs:enable-with'); // clean up cache\n      }\n      element.unbind('click.railsDisable'); // enable element\n      element.removeData('ujs:disabled');\n    }\n  };\n\n  if (rails.fire($document, 'rails:attachBindings')) {\n\n    $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});\n\n    // This event works the same as the load event, except that it fires every\n    // time the page is loaded.\n    //\n    // See https://github.com/rails/jquery-ujs/issues/357\n    // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching\n    $(window).on('pageshow.rails', function () {\n      $($.rails.enableSelector).each(function () {\n        var element = $(this);\n\n        if (element.data('ujs:disabled')) {\n          $.rails.enableFormElement(element);\n        }\n      });\n\n      $($.rails.linkDisableSelector).each(function () {\n        var element = $(this);\n\n        if (element.data('ujs:disabled')) {\n          $.rails.enableElement(element);\n        }\n      });\n    });\n\n    $document.on('ajax:complete', rails.linkDisableSelector, function() {\n        rails.enableElement($(this));\n    });\n\n    $document.on('ajax:complete', rails.buttonDisableSelector, function() {\n        rails.enableFormElement($(this));\n    });\n\n    $document.on('click.rails', rails.linkClickSelector, function(e) {\n      var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;\n      if (!rails.allowAction(link)) return rails.stopEverything(e);\n\n      if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);\n\n      if (rails.isRemote(link)) {\n        if (metaClick && (!method || method === 'GET') && !data) { return true; }\n\n        var handleRemote = rails.handleRemote(link);\n        // Response from rails.handleRemote() will either be false or a deferred object promise.\n        if (handleRemote === false) {\n          rails.enableElement(link);\n        } else {\n          handleRemote.fail( function() { rails.enableElement(link); } );\n        }\n        return false;\n\n      } else if (method) {\n        rails.handleMethod(link);\n        return false;\n      }\n    });\n\n    $document.on('click.rails', rails.buttonClickSelector, function(e) {\n      var button = $(this);\n\n      if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);\n\n      if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);\n\n      var handleRemote = rails.handleRemote(button);\n      // Response from rails.handleRemote() will either be false or a deferred object promise.\n      if (handleRemote === false) {\n        rails.enableFormElement(button);\n      } else {\n        handleRemote.fail( function() { rails.enableFormElement(button); } );\n      }\n      return false;\n    });\n\n    $document.on('change.rails', rails.inputChangeSelector, function(e) {\n      var link = $(this);\n      if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);\n\n      rails.handleRemote(link);\n      return false;\n    });\n\n    $document.on('submit.rails', rails.formSubmitSelector, function(e) {\n      var form = $(this),\n        remote = rails.isRemote(form),\n        blankRequiredInputs,\n        nonBlankFileInputs;\n\n      if (!rails.allowAction(form)) return rails.stopEverything(e);\n\n      // Skip other logic when required values are missing or file upload is present\n      if (form.attr('novalidate') === undefined) {\n        if (form.data('ujs:formnovalidate-button') === undefined) {\n          blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);\n          if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n            return rails.stopEverything(e);\n          }\n        } else {\n          // Clear the formnovalidate in case the next button click is not on a formnovalidate button\n          // Not strictly necessary to do here, since it is also reset on each button click, but just to be certain\n          form.data('ujs:formnovalidate-button', undefined);\n        }\n      }\n\n      if (remote) {\n        nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n        if (nonBlankFileInputs) {\n          // Slight timeout so that the submit button gets properly serialized\n          // (make it easy for event handler to serialize form without disabled values)\n          setTimeout(function(){ rails.disableFormElements(form); }, 13);\n          var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n\n          // Re-enable form elements if event bindings return false (canceling normal form submission)\n          if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }\n\n          return aborted;\n        }\n\n        rails.handleRemote(form);\n        return false;\n\n      } else {\n        // Slight timeout so that the submit button gets properly serialized\n        setTimeout(function(){ rails.disableFormElements(form); }, 13);\n      }\n    });\n\n    $document.on('click.rails', rails.formInputClickSelector, function(event) {\n      var button = $(this);\n\n      if (!rails.allowAction(button)) return rails.stopEverything(event);\n\n      // Register the pressed submit button\n      var name = button.attr('name'),\n        data = name ? {name:name, value:button.val()} : null;\n\n      var form = button.closest('form');\n      if (form.length === 0) {\n        form = $('#' + button.attr('form'));\n      }\n      form.data('ujs:submit-button', data);\n\n      // Save attributes from button\n      form.data('ujs:formnovalidate-button', button.attr('formnovalidate'));\n      form.data('ujs:submit-button-formaction', button.attr('formaction'));\n      form.data('ujs:submit-button-formmethod', button.attr('formmethod'));\n    });\n\n    $document.on('ajax:send.rails', rails.formSubmitSelector, function(event) {\n      if (this === event.target) rails.disableFormElements($(this));\n    });\n\n    $document.on('ajax:complete.rails', rails.formSubmitSelector, function(event) {\n      if (this === event.target) rails.enableFormElements($(this));\n    });\n\n    $(function(){\n      rails.refreshCSRFTokens();\n    });\n  }\n\n})( jQuery );\n", "// Generated by CoffeeScript 1.6.2\n/**\n@license Sticky-kit v1.1.3 | WTFPL | Leaf Corcoran 2015 | http://leafo.net\n*/\n\n\n(function() {\n  var $, win;\n\n  $ = this.jQuery || window.jQuery;\n\n  win = $(window);\n\n  $.fn.stick_in_parent = function(opts) {\n    var doc, elm, enable_bottoming, inner_scrolling, manual_spacer, offset_top, outer_width, parent_selector, recalc_every, sticky_class, _fn, _i, _len;\n\n    if (opts == null) {\n      opts = {};\n    }\n    sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming;\n    if (offset_top == null) {\n      offset_top = 0;\n    }\n    if (parent_selector == null) {\n      parent_selector = void 0;\n    }\n    if (inner_scrolling == null) {\n      inner_scrolling = true;\n    }\n    if (sticky_class == null) {\n      sticky_class = \"is_stuck\";\n    }\n    doc = $(document);\n    if (enable_bottoming == null) {\n      enable_bottoming = true;\n    }\n    outer_width = function(el) {\n      var computed, w, _el;\n\n      if (window.getComputedStyle) {\n        _el = el[0];\n        computed = window.getComputedStyle(el[0]);\n        w = parseFloat(computed.getPropertyValue(\"width\")) + parseFloat(computed.getPropertyValue(\"margin-left\")) + parseFloat(computed.getPropertyValue(\"margin-right\"));\n        if (computed.getPropertyValue(\"box-sizing\") !== \"border-box\") {\n          w += parseFloat(computed.getPropertyValue(\"border-left-width\")) + parseFloat(computed.getPropertyValue(\"border-right-width\")) + parseFloat(computed.getPropertyValue(\"padding-left\")) + parseFloat(computed.getPropertyValue(\"padding-right\"));\n        }\n        return w;\n      } else {\n        return el.outerWidth(true);\n      }\n    };\n    _fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) {\n      var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick;\n\n      if (elm.data(\"sticky_kit\")) {\n        return;\n      }\n      elm.data(\"sticky_kit\", true);\n      last_scroll_height = doc.height();\n      parent = elm.parent();\n      if (parent_selector != null) {\n        parent = parent.closest(parent_selector);\n      }\n      if (!parent.length) {\n        throw \"failed to find stick parent\";\n      }\n      fixed = false;\n      bottomed = false;\n      spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $(\"<div />\");\n      if (spacer) {\n        spacer.css('position', elm.css('position'));\n      }\n      recalc = function() {\n        var border_top, padding_top, restore;\n\n        if (detached) {\n          return;\n        }\n        last_scroll_height = doc.height();\n        border_top = parseInt(parent.css(\"border-top-width\"), 10);\n        padding_top = parseInt(parent.css(\"padding-top\"), 10);\n        padding_bottom = parseInt(parent.css(\"padding-bottom\"), 10);\n        parent_top = parent.offset().top + border_top + padding_top;\n        parent_height = parent.height();\n        if (fixed) {\n          fixed = false;\n          bottomed = false;\n          if (manual_spacer == null) {\n            elm.insertAfter(spacer);\n            spacer.detach();\n          }\n          elm.css({\n            position: \"\",\n            top: \"\",\n            width: \"\",\n            bottom: \"\"\n          }).removeClass(sticky_class);\n          restore = true;\n        }\n        top = elm.offset().top - (parseInt(elm.css(\"margin-top\"), 10) || 0) - offset_top;\n        height = elm.outerHeight(true);\n        el_float = elm.css(\"float\");\n        if (spacer) {\n          spacer.css({\n            width: outer_width(elm),\n            height: height,\n            display: elm.css(\"display\"),\n            \"vertical-align\": elm.css(\"vertical-align\"),\n            \"float\": el_float\n          });\n        }\n        if (restore) {\n          return tick();\n        }\n      };\n      recalc();\n      if (height === parent_height) {\n        return;\n      }\n      last_pos = void 0;\n      offset = offset_top;\n      recalc_counter = recalc_every;\n      tick = function() {\n        var css, delta, recalced, scroll, will_bottom, win_height;\n\n        if (detached) {\n          return;\n        }\n        recalced = false;\n        if (recalc_counter != null) {\n          recalc_counter -= 1;\n          if (recalc_counter <= 0) {\n            recalc_counter = recalc_every;\n            recalc();\n            recalced = true;\n          }\n        }\n        if (!recalced && doc.height() !== last_scroll_height) {\n          recalc();\n          recalced = true;\n        }\n        scroll = win.scrollTop();\n        if (last_pos != null) {\n          delta = scroll - last_pos;\n        }\n        last_pos = scroll;\n        if (fixed) {\n          if (enable_bottoming) {\n            will_bottom = scroll + height + offset > parent_height + parent_top;\n            if (bottomed && !will_bottom) {\n              bottomed = false;\n              elm.css({\n                position: \"fixed\",\n                bottom: \"\",\n                top: offset\n              }).trigger(\"sticky_kit:unbottom\");\n            }\n          }\n          if (scroll < top) {\n            fixed = false;\n            offset = offset_top;\n            if (manual_spacer == null) {\n              if (el_float === \"left\" || el_float === \"right\") {\n                elm.insertAfter(spacer);\n              }\n              spacer.detach();\n            }\n            css = {\n              position: \"\",\n              width: \"\",\n              top: \"\"\n            };\n            elm.css(css).removeClass(sticky_class).trigger(\"sticky_kit:unstick\");\n          }\n          if (inner_scrolling) {\n            win_height = win.height();\n            if (height + offset_top > win_height) {\n              if (!bottomed) {\n                offset -= delta;\n                offset = Math.max(win_height - height, offset);\n                offset = Math.min(offset_top, offset);\n                if (fixed) {\n                  elm.css({\n                    top: offset + \"px\"\n                  });\n                }\n              }\n            }\n          }\n        } else {\n          if (scroll > top) {\n            fixed = true;\n            css = {\n              position: \"fixed\",\n              top: offset\n            };\n            css.width = elm.css(\"box-sizing\") === \"border-box\" ? elm.outerWidth() + \"px\" : elm.width() + \"px\";\n            elm.css(css).addClass(sticky_class);\n            if (manual_spacer == null) {\n              elm.after(spacer);\n              if (el_float === \"left\" || el_float === \"right\") {\n                spacer.append(elm);\n              }\n            }\n            elm.trigger(\"sticky_kit:stick\");\n          }\n        }\n        if (fixed && enable_bottoming) {\n          if (will_bottom == null) {\n            will_bottom = scroll + height + offset > parent_height + parent_top;\n          }\n          if (!bottomed && will_bottom) {\n            bottomed = true;\n            if (parent.css(\"position\") === \"static\") {\n              parent.css({\n                position: \"relative\"\n              });\n            }\n            return elm.css({\n              position: \"absolute\",\n              bottom: padding_bottom,\n              top: \"auto\"\n            }).trigger(\"sticky_kit:bottom\");\n          }\n        }\n      };\n      recalc_and_tick = function() {\n        recalc();\n        return tick();\n      };\n      detach = function() {\n        detached = true;\n        win.off(\"touchmove\", tick);\n        win.off(\"scroll\", tick);\n        win.off(\"resize\", recalc_and_tick);\n        $(document.body).off(\"sticky_kit:recalc\", recalc_and_tick);\n        elm.off(\"sticky_kit:detach\", detach);\n        elm.removeData(\"sticky_kit\");\n        elm.css({\n          position: \"\",\n          bottom: \"\",\n          top: \"\",\n          width: \"\"\n        });\n        parent.position(\"position\", \"\");\n        if (fixed) {\n          if (manual_spacer == null) {\n            if (el_float === \"left\" || el_float === \"right\") {\n              elm.insertAfter(spacer);\n            }\n            spacer.remove();\n          }\n          return elm.removeClass(sticky_class);\n        }\n      };\n      win.on(\"touchmove\", tick);\n      win.on(\"scroll\", tick);\n      win.on(\"resize\", recalc_and_tick);\n      $(document.body).on(\"sticky_kit:recalc\", recalc_and_tick);\n      elm.on(\"sticky_kit:detach\", detach);\n      return setTimeout(tick, 0);\n    };\n    for (_i = 0, _len = this.length; _i < _len; _i++) {\n      elm = this[_i];\n      _fn($(elm));\n    }\n    return this;\n  };\n\n}).call(this);\n", "/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n", "/*!\nWaypoints - 4.0.1\nCopyright \u00A9 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n  'use strict'\n\n  var keyCounter = 0\n  var allWaypoints = {}\n\n  /* http://imakewebthings.com/waypoints/api/waypoint */\n  function Waypoint(options) {\n    if (!options) {\n      throw new Error('No options passed to Waypoint constructor')\n    }\n    if (!options.element) {\n      throw new Error('No element option passed to Waypoint constructor')\n    }\n    if (!options.handler) {\n      throw new Error('No handler option passed to Waypoint constructor')\n    }\n\n    this.key = 'waypoint-' + keyCounter\n    this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\n    this.element = this.options.element\n    this.adapter = new Waypoint.Adapter(this.element)\n    this.callback = options.handler\n    this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n    this.enabled = this.options.enabled\n    this.triggerPoint = null\n    this.group = Waypoint.Group.findOrCreate({\n      name: this.options.group,\n      axis: this.axis\n    })\n    this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\n\n    if (Waypoint.offsetAliases[this.options.offset]) {\n      this.options.offset = Waypoint.offsetAliases[this.options.offset]\n    }\n    this.group.add(this)\n    this.context.add(this)\n    allWaypoints[this.key] = this\n    keyCounter += 1\n  }\n\n  /* Private */\n  Waypoint.prototype.queueTrigger = function(direction) {\n    this.group.queueTrigger(this, direction)\n  }\n\n  /* Private */\n  Waypoint.prototype.trigger = function(args) {\n    if (!this.enabled) {\n      return\n    }\n    if (this.callback) {\n      this.callback.apply(this, args)\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/destroy */\n  Waypoint.prototype.destroy = function() {\n    this.context.remove(this)\n    this.group.remove(this)\n    delete allWaypoints[this.key]\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/disable */\n  Waypoint.prototype.disable = function() {\n    this.enabled = false\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/enable */\n  Waypoint.prototype.enable = function() {\n    this.context.refresh()\n    this.enabled = true\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/next */\n  Waypoint.prototype.next = function() {\n    return this.group.next(this)\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/previous */\n  Waypoint.prototype.previous = function() {\n    return this.group.previous(this)\n  }\n\n  /* Private */\n  Waypoint.invokeAll = function(method) {\n    var allWaypointsArray = []\n    for (var waypointKey in allWaypoints) {\n      allWaypointsArray.push(allWaypoints[waypointKey])\n    }\n    for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\n      allWaypointsArray[i][method]()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/destroy-all */\n  Waypoint.destroyAll = function() {\n    Waypoint.invokeAll('destroy')\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/disable-all */\n  Waypoint.disableAll = function() {\n    Waypoint.invokeAll('disable')\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/enable-all */\n  Waypoint.enableAll = function() {\n    Waypoint.Context.refreshAll()\n    for (var waypointKey in allWaypoints) {\n      allWaypoints[waypointKey].enabled = true\n    }\n    return this\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/refresh-all */\n  Waypoint.refreshAll = function() {\n    Waypoint.Context.refreshAll()\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/viewport-height */\n  Waypoint.viewportHeight = function() {\n    return window.innerHeight || document.documentElement.clientHeight\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/viewport-width */\n  Waypoint.viewportWidth = function() {\n    return document.documentElement.clientWidth\n  }\n\n  Waypoint.adapters = []\n\n  Waypoint.defaults = {\n    context: window,\n    continuous: true,\n    enabled: true,\n    group: 'default',\n    horizontal: false,\n    offset: 0\n  }\n\n  Waypoint.offsetAliases = {\n    'bottom-in-view': function() {\n      return this.context.innerHeight() - this.adapter.outerHeight()\n    },\n    'right-in-view': function() {\n      return this.context.innerWidth() - this.adapter.outerWidth()\n    }\n  }\n\n  window.Waypoint = Waypoint\n}())\n;(function() {\n  'use strict'\n\n  function requestAnimationFrameShim(callback) {\n    window.setTimeout(callback, 1000 / 60)\n  }\n\n  var keyCounter = 0\n  var contexts = {}\n  var Waypoint = window.Waypoint\n  var oldWindowLoad = window.onload\n\n  /* http://imakewebthings.com/waypoints/api/context */\n  function Context(element) {\n    this.element = element\n    this.Adapter = Waypoint.Adapter\n    this.adapter = new this.Adapter(element)\n    this.key = 'waypoint-context-' + keyCounter\n    this.didScroll = false\n    this.didResize = false\n    this.oldScroll = {\n      x: this.adapter.scrollLeft(),\n      y: this.adapter.scrollTop()\n    }\n    this.waypoints = {\n      vertical: {},\n      horizontal: {}\n    }\n\n    element.waypointContextKey = this.key\n    contexts[element.waypointContextKey] = this\n    keyCounter += 1\n    if (!Waypoint.windowContext) {\n      Waypoint.windowContext = true\n      Waypoint.windowContext = new Context(window)\n    }\n\n    this.createThrottledScrollHandler()\n    this.createThrottledResizeHandler()\n  }\n\n  /* Private */\n  Context.prototype.add = function(waypoint) {\n    var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\n    this.waypoints[axis][waypoint.key] = waypoint\n    this.refresh()\n  }\n\n  /* Private */\n  Context.prototype.checkEmpty = function() {\n    var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\n    var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\n    var isWindow = this.element == this.element.window\n    if (horizontalEmpty && verticalEmpty && !isWindow) {\n      this.adapter.off('.waypoints')\n      delete contexts[this.key]\n    }\n  }\n\n  /* Private */\n  Context.prototype.createThrottledResizeHandler = function() {\n    var self = this\n\n    function resizeHandler() {\n      self.handleResize()\n      self.didResize = false\n    }\n\n    this.adapter.on('resize.waypoints', function() {\n      if (!self.didResize) {\n        self.didResize = true\n        Waypoint.requestAnimationFrame(resizeHandler)\n      }\n    })\n  }\n\n  /* Private */\n  Context.prototype.createThrottledScrollHandler = function() {\n    var self = this\n    function scrollHandler() {\n      self.handleScroll()\n      self.didScroll = false\n    }\n\n    this.adapter.on('scroll.waypoints', function() {\n      if (!self.didScroll || Waypoint.isTouch) {\n        self.didScroll = true\n        Waypoint.requestAnimationFrame(scrollHandler)\n      }\n    })\n  }\n\n  /* Private */\n  Context.prototype.handleResize = function() {\n    Waypoint.Context.refreshAll()\n  }\n\n  /* Private */\n  Context.prototype.handleScroll = function() {\n    var triggeredGroups = {}\n    var axes = {\n      horizontal: {\n        newScroll: this.adapter.scrollLeft(),\n        oldScroll: this.oldScroll.x,\n        forward: 'right',\n        backward: 'left'\n      },\n      vertical: {\n        newScroll: this.adapter.scrollTop(),\n        oldScroll: this.oldScroll.y,\n        forward: 'down',\n        backward: 'up'\n      }\n    }\n\n    for (var axisKey in axes) {\n      var axis = axes[axisKey]\n      var isForward = axis.newScroll > axis.oldScroll\n      var direction = isForward ? axis.forward : axis.backward\n\n      for (var waypointKey in this.waypoints[axisKey]) {\n        var waypoint = this.waypoints[axisKey][waypointKey]\n        if (waypoint.triggerPoint === null) {\n          continue\n        }\n        var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\n        var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\n        var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\n        var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\n        if (crossedForward || crossedBackward) {\n          waypoint.queueTrigger(direction)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n      }\n    }\n\n    for (var groupKey in triggeredGroups) {\n      triggeredGroups[groupKey].flushTriggers()\n    }\n\n    this.oldScroll = {\n      x: axes.horizontal.newScroll,\n      y: axes.vertical.newScroll\n    }\n  }\n\n  /* Private */\n  Context.prototype.innerHeight = function() {\n    /*eslint-disable eqeqeq */\n    if (this.element == this.element.window) {\n      return Waypoint.viewportHeight()\n    }\n    /*eslint-enable eqeqeq */\n    return this.adapter.innerHeight()\n  }\n\n  /* Private */\n  Context.prototype.remove = function(waypoint) {\n    delete this.waypoints[waypoint.axis][waypoint.key]\n    this.checkEmpty()\n  }\n\n  /* Private */\n  Context.prototype.innerWidth = function() {\n    /*eslint-disable eqeqeq */\n    if (this.element == this.element.window) {\n      return Waypoint.viewportWidth()\n    }\n    /*eslint-enable eqeqeq */\n    return this.adapter.innerWidth()\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-destroy */\n  Context.prototype.destroy = function() {\n    var allWaypoints = []\n    for (var axis in this.waypoints) {\n      for (var waypointKey in this.waypoints[axis]) {\n        allWaypoints.push(this.waypoints[axis][waypointKey])\n      }\n    }\n    for (var i = 0, end = allWaypoints.length; i < end; i++) {\n      allWaypoints[i].destroy()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-refresh */\n  Context.prototype.refresh = function() {\n    /*eslint-disable eqeqeq */\n    var isWindow = this.element == this.element.window\n    /*eslint-enable eqeqeq */\n    var contextOffset = isWindow ? undefined : this.adapter.offset()\n    var triggeredGroups = {}\n    var axes\n\n    this.handleScroll()\n    axes = {\n      horizontal: {\n        contextOffset: isWindow ? 0 : contextOffset.left,\n        contextScroll: isWindow ? 0 : this.oldScroll.x,\n        contextDimension: this.innerWidth(),\n        oldScroll: this.oldScroll.x,\n        forward: 'right',\n        backward: 'left',\n        offsetProp: 'left'\n      },\n      vertical: {\n        contextOffset: isWindow ? 0 : contextOffset.top,\n        contextScroll: isWindow ? 0 : this.oldScroll.y,\n        contextDimension: this.innerHeight(),\n        oldScroll: this.oldScroll.y,\n        forward: 'down',\n        backward: 'up',\n        offsetProp: 'top'\n      }\n    }\n\n    for (var axisKey in axes) {\n      var axis = axes[axisKey]\n      for (var waypointKey in this.waypoints[axisKey]) {\n        var waypoint = this.waypoints[axisKey][waypointKey]\n        var adjustment = waypoint.options.offset\n        var oldTriggerPoint = waypoint.triggerPoint\n        var elementOffset = 0\n        var freshWaypoint = oldTriggerPoint == null\n        var contextModifier, wasBeforeScroll, nowAfterScroll\n        var triggeredBackward, triggeredForward\n\n        if (waypoint.element !== waypoint.element.window) {\n          elementOffset = waypoint.adapter.offset()[axis.offsetProp]\n        }\n\n        if (typeof adjustment === 'function') {\n          adjustment = adjustment.apply(waypoint)\n        }\n        else if (typeof adjustment === 'string') {\n          adjustment = parseFloat(adjustment)\n          if (waypoint.options.offset.indexOf('%') > - 1) {\n            adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\n          }\n        }\n\n        contextModifier = axis.contextScroll - axis.contextOffset\n        waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\n        wasBeforeScroll = oldTriggerPoint < axis.oldScroll\n        nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\n        triggeredBackward = wasBeforeScroll && nowAfterScroll\n        triggeredForward = !wasBeforeScroll && !nowAfterScroll\n\n        if (!freshWaypoint && triggeredBackward) {\n          waypoint.queueTrigger(axis.backward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n        else if (!freshWaypoint && triggeredForward) {\n          waypoint.queueTrigger(axis.forward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n        else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\n          waypoint.queueTrigger(axis.forward)\n          triggeredGroups[waypoint.group.id] = waypoint.group\n        }\n      }\n    }\n\n    Waypoint.requestAnimationFrame(function() {\n      for (var groupKey in triggeredGroups) {\n        triggeredGroups[groupKey].flushTriggers()\n      }\n    })\n\n    return this\n  }\n\n  /* Private */\n  Context.findOrCreateByElement = function(element) {\n    return Context.findByElement(element) || new Context(element)\n  }\n\n  /* Private */\n  Context.refreshAll = function() {\n    for (var contextId in contexts) {\n      contexts[contextId].refresh()\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/context-find-by-element */\n  Context.findByElement = function(element) {\n    return contexts[element.waypointContextKey]\n  }\n\n  window.onload = function() {\n    if (oldWindowLoad) {\n      oldWindowLoad()\n    }\n    Context.refreshAll()\n  }\n\n\n  Waypoint.requestAnimationFrame = function(callback) {\n    var requestFn = window.requestAnimationFrame ||\n      window.mozRequestAnimationFrame ||\n      window.webkitRequestAnimationFrame ||\n      requestAnimationFrameShim\n    requestFn.call(window, callback)\n  }\n  Waypoint.Context = Context\n}())\n;(function() {\n  'use strict'\n\n  function byTriggerPoint(a, b) {\n    return a.triggerPoint - b.triggerPoint\n  }\n\n  function byReverseTriggerPoint(a, b) {\n    return b.triggerPoint - a.triggerPoint\n  }\n\n  var groups = {\n    vertical: {},\n    horizontal: {}\n  }\n  var Waypoint = window.Waypoint\n\n  /* http://imakewebthings.com/waypoints/api/group */\n  function Group(options) {\n    this.name = options.name\n    this.axis = options.axis\n    this.id = this.name + '-' + this.axis\n    this.waypoints = []\n    this.clearTriggerQueues()\n    groups[this.axis][this.name] = this\n  }\n\n  /* Private */\n  Group.prototype.add = function(waypoint) {\n    this.waypoints.push(waypoint)\n  }\n\n  /* Private */\n  Group.prototype.clearTriggerQueues = function() {\n    this.triggerQueues = {\n      up: [],\n      down: [],\n      left: [],\n      right: []\n    }\n  }\n\n  /* Private */\n  Group.prototype.flushTriggers = function() {\n    for (var direction in this.triggerQueues) {\n      var waypoints = this.triggerQueues[direction]\n      var reverse = direction === 'up' || direction === 'left'\n      waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\n      for (var i = 0, end = waypoints.length; i < end; i += 1) {\n        var waypoint = waypoints[i]\n        if (waypoint.options.continuous || i === waypoints.length - 1) {\n          waypoint.trigger([direction])\n        }\n      }\n    }\n    this.clearTriggerQueues()\n  }\n\n  /* Private */\n  Group.prototype.next = function(waypoint) {\n    this.waypoints.sort(byTriggerPoint)\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    var isLast = index === this.waypoints.length - 1\n    return isLast ? null : this.waypoints[index + 1]\n  }\n\n  /* Private */\n  Group.prototype.previous = function(waypoint) {\n    this.waypoints.sort(byTriggerPoint)\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    return index ? this.waypoints[index - 1] : null\n  }\n\n  /* Private */\n  Group.prototype.queueTrigger = function(waypoint, direction) {\n    this.triggerQueues[direction].push(waypoint)\n  }\n\n  /* Private */\n  Group.prototype.remove = function(waypoint) {\n    var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n    if (index > -1) {\n      this.waypoints.splice(index, 1)\n    }\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/first */\n  Group.prototype.first = function() {\n    return this.waypoints[0]\n  }\n\n  /* Public */\n  /* http://imakewebthings.com/waypoints/api/last */\n  Group.prototype.last = function() {\n    return this.waypoints[this.waypoints.length - 1]\n  }\n\n  /* Private */\n  Group.findOrCreate = function(options) {\n    return groups[options.axis][options.name] || new Group(options)\n  }\n\n  Waypoint.Group = Group\n}())\n;(function() {\n  'use strict'\n\n  var $ = window.jQuery\n  var Waypoint = window.Waypoint\n\n  function JQueryAdapter(element) {\n    this.$element = $(element)\n  }\n\n  $.each([\n    'innerHeight',\n    'innerWidth',\n    'off',\n    'offset',\n    'on',\n    'outerHeight',\n    'outerWidth',\n    'scrollLeft',\n    'scrollTop'\n  ], function(i, method) {\n    JQueryAdapter.prototype[method] = function() {\n      var args = Array.prototype.slice.call(arguments)\n      return this.$element[method].apply(this.$element, args)\n    }\n  })\n\n  $.each([\n    'extend',\n    'inArray',\n    'isEmptyObject'\n  ], function(i, method) {\n    JQueryAdapter[method] = $[method]\n  })\n\n  Waypoint.adapters.push({\n    name: 'jquery',\n    Adapter: JQueryAdapter\n  })\n  Waypoint.Adapter = JQueryAdapter\n}())\n;(function() {\n  'use strict'\n\n  var Waypoint = window.Waypoint\n\n  function createExtension(framework) {\n    return function() {\n      var waypoints = []\n      var overrides = arguments[0]\n\n      if (framework.isFunction(arguments[0])) {\n        overrides = framework.extend({}, arguments[1])\n        overrides.handler = arguments[0]\n      }\n\n      this.each(function() {\n        var options = framework.extend({}, overrides, {\n          element: this\n        })\n        if (typeof options.context === 'string') {\n          options.context = framework(this).closest(options.context)[0]\n        }\n        waypoints.push(new Waypoint(options))\n      })\n\n      return waypoints\n    }\n  }\n\n  if (window.jQuery) {\n    window.jQuery.fn.waypoint = createExtension(window.jQuery)\n  }\n  if (window.Zepto) {\n    window.Zepto.fn.waypoint = createExtension(window.Zepto)\n  }\n}())\n;", "/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n", "Object.defineProperty(Array.prototype, 'joinSentence', {\n  enumerable: false,\n  value: function(oxford_comma) {\n    var lastWord = ''\n    if (this.length > 1) {\n      lastWord = ' and ' + this.pop()\n      if (oxford_comma && this.length > 1) {\n        lastWord = ',' + lastWord\n      }\n    }\n    return this.join(', ') + lastWord\n  }\n})\n", "require(\"../extensions/array-join-sentence\")\n", "class Accordion {\n  static async import() {\n    await import(\"../vendor/accordion-imports.js\")\n  }\n}\n\nexport default Accordion\n", "class AlgoliaSource {\n  static async importLibraries() {\n    var algoliasearch = await import(\"algoliasearch\")\n    var autocomplete = await import(\"../vendor/autocomplete.jquery.js\")\n\n    return [algoliasearch.default, autocomplete.default]\n  }\n\n  constructor(algoliasearch, indexName, filters) {\n    const client = algoliasearch(process.env.ALGOLIA_APPLICATION_ID,\n      process.env.ALGOLIA_API_KEY_SEARCH)\n    this.index = client.initIndex(`${indexName}_${process.env.SEARCH_ENV}`)\n    this.source = $.fn.autocomplete.sources.hits(this.index, {\n      hitsPerPage: 10,\n      filters: filters,\n    })\n  }\n}\n\nexport default AlgoliaSource\n", "class BeerAutocompleteSuggestion {\n  constructor(template) {\n    this.template = template\n  }\n\n  build(hit) {\n    const suggestion = this.template.cloneNode(true)\n    suggestion.classList.remove(\"hidden\")\n\n    if (hit.cssClass) {\n      suggestion.classList.add(hit.cssClass)\n    }\n\n    suggestion.querySelector(\"[data-ref='name']\").textContent = hit.name\n\n    const meta = new BeerMetadata(hit).toString()\n    suggestion.querySelector(\"[data-ref='meta']\").textContent = meta\n\n    return suggestion\n  }\n}\n\nexport default BeerAutocompleteSuggestion\n", "class BeerMetadata {\n  constructor(hit) {\n    this.hit = hit\n  }\n\n  toString() {\n    const abv = this.hit.abv ? `${this.hit.abv}%` : null\n    const meta = [this.hit.style, abv, this.hit.brewery_location]\n    return meta.filter(Boolean).join(\" \\u00B7 \")\n  }\n}\n\nexport default BeerMetadata\n", "export default class Browser {\n  static isIE() {\n    return /MSIE \\d|Trident.*rv:/.test(navigator.userAgent)\n  }\n}\n", "export default class MenuSections {\n  static showNewSectionModal(productType) {\n    $(\"#new-menu-section\").modal()\n    $(\"#new-menu-section #menu_section_name\").focus()\n\n    if (productType) {\n      $(\"#menu_section_product_type\").val(productType)\n    }\n  }\n}\n", "export default class Servings {\n  constructor(productType, isEdit) {\n    this.productType = productType\n\n    if (isEdit === true || isEdit === \"true\") {\n      this.formSelector = `#product_type_${productType}.edit`\n    } else {\n      this.formSelector = `#product_type_${productType}`\n    }\n  }\n\n  static showEditForm() {\n    document.querySelector(\"#add-serving-form\").classList.add(\"hidden\")\n    document.querySelector(\"#edit-serving-form\").classList.remove(\"hidden\")\n  }\n\n  static hideEditForm() {\n    document.querySelector(\"#edit-serving-form\").classList.add(\"hidden\")\n    document.querySelector(\"#add-serving-form\").classList.remove(\"hidden\")\n  }\n\n  static scrollToTopOfForm() {\n    const mweb = document.body.classList.contains(\"mweb\")\n    const offset = mweb ? 48 : 16\n\n    $(\"html, body\").animate({\n      scrollTop: $(\"#serving-forms\").offset().top - offset\n    }, \"normal\");\n  }\n\n  static updateTapNumbers() {\n    const sortables = document.querySelectorAll(\"[data-controller~='sortable']\")\n    sortables.forEach(sortable => {\n      const controller = Stimulus.application\n        .getControllerForElementAndIdentifier(sortable, \"sortable\")\n      controller.savePositions(true)\n    })\n  }\n\n  populateBeer(id, name, style_id, abv) {\n    const form = document.querySelector(this.formSelector)\n    window.Stimulus.application\n      .getControllerForElementAndIdentifier(form, \"beer-autocomplete\")\n      .populate(id, name, style_id, abv)\n  }\n\n  focusInputAfterBeerName() {\n    const inputs = document.querySelector(`${this.formSelector} form`).elements\n    const containerInput = inputs[\"servings[0][serving_type]\"]\n\n    setTimeout(() => {\n      if (containerInput) {\n        containerInput.focus()\n      } else {\n        inputs[\"serving_price\"].focus()\n      }\n    }, 100)\n  }\n\n  showMissingBeerError() {\n    this.clearJavaScriptMessages()\n\n    document.querySelector(`${this.formSelector} .missing-beer-error`)\n      .classList.remove(\"hidden\")\n  }\n\n  showNewBeerConfirmation(message) {\n    this.clearJavaScriptMessages()\n\n    const element = document.querySelector(`${this.formSelector} .new-beer-confirmation`)\n    element.innerText = message\n    element.classList.remove(\"hidden\")\n  }\n\n  clearJavaScriptMessages() {\n    document.querySelector(`${this.formSelector} .missing-beer-error`)\n      .classList.add(\"hidden\")\n\n    document.querySelector(`${this.formSelector} .new-beer-confirmation`)\n      .classList.add(\"hidden\")\n  }\n\n  showTab() {\n    window.location.hash = this.productType\n  }\n}\n", "export default class ScriptInserter {\n  static insert(id, src, callback) {\n    const existingScript = document.getElementById(id)\n    if (existingScript) {\n      callback()\n    } else {\n      const script = document.createElement(\"script\")\n      script.src = src\n      script.id = id\n      script.onload = callback\n\n      document.body.appendChild(script)\n    }\n  }\n}\n", "export default class StripeLoader {\n  load() {\n    if (document.getElementById('card-element') == null) { return }\n\n    var stripe = Stripe($('meta[name=\"stripe-key\"]').attr('content'));\n    var elements = stripe.elements();\n\n    window.card = elements.create('card', {\n      'style': {\n        'base': {\n          'fontFamily': '\\'Helvetica Neue\\', Roboto, Helvetica, Arial, sans-serif',\n          'fontSize': '14px',\n        },\n        'invalid': {\n          'color': '#D32548',\n        },\n      }\n    });\n    window.card.mount('#card-element');\n\n    window.card.addEventListener('change', function(event) {\n      var displayError = document.getElementById('card-errors');\n      if (event.error) {\n        displayError.textContent = event.error.message;\n      } else {\n        displayError.textContent = '';\n      }\n    });\n\n    function stripeTokenHandler(token, form) {\n      var $form = $(form);\n      $(\".stripe-card-token\").val(token.id);\n\n      if (form == \".card-token-remote\") {\n        window.has_token = true;\n        $.rails.fire($form, \"submit\")\n      } else {\n        $form.get(0).submit();\n      }\n    }\n\n    function createToken(form) {\n      var $form = $(form);\n      var $original_label = $form.find(\"button[type='submit']\").data('original-label');\n\n      stripe.createToken(card).then(function(result) {\n        if (result.error) {\n          var errorElement = document.getElementById('card-errors');\n          errorElement.textContent = result.error.message;\n\n          $form.find(\"button[type='submit']\").text($original_label);\n          $form.find(\"button[type='submit']\").prop('disabled', false);\n        } else {\n          stripeTokenHandler(result.token, form);\n        }\n      });\n    };\n\n    function stripePaymentMethodHandler(result) {\n      var $form = $('.new-payment-method');\n      var $disabled_label = $form.find(\"button[type='submit']\").data('disable-with');\n\n      if (result.error) {\n        // Show error in payment form\n        var errorElement = document.getElementById('card-errors');\n        errorElement.textContent = result.error.message;\n\n        $form.find(\"button[type='submit']\").text($original_label);\n        $form.find(\"button[type='submit']\").prop('disabled', false);\n      } else {\n        $(\".new-stripe-payment-method\").val(result.paymentMethod.id);\n        window.has_payment_method = true;\n        $.rails.fire($form, \"submit\")\n      }\n    }\n\n    $(\"body\").on(\"submit\", \".card-token\", function(e) {\n      var $form = $(this);\n      var $disabled_label = $form.find(\"button[type='submit']\").data('disable-with');\n\n      $form.find(\"button[type='submit']\").text($disabled_label);\n      $form.find(\"button[type='submit']\").prop('disabled', true);\n\n      e.preventDefault();\n      createToken(\".card-token\");\n    });\n\n    window.has_token = false;\n    $(\"body\").on(\"ajax:beforeSend\", \".card-token-remote\", function(event, xhr) {\n      if (window.has_token == false) {\n        xhr.abort();\n\n        var $form = $('.card-token-remote');\n        var $disabled_label = $form.find(\"button[type='submit']\").data('disable-with');\n\n        $form.find(\"button[type='submit']\").text($disabled_label);\n        $form.find(\"button[type='submit']\").prop('disabled', true);\n\n        createToken(\".card-token-remote\");\n      }\n    });\n\n    window.has_payment_method = false;\n    $(\"body\").on(\"ajax:beforeSend\", \".new-payment-method\", function(event, xhr) {\n      if (window.has_payment_method == false) {\n        xhr.abort();\n\n        var $form = $('.new-payment-method');\n        var $disabled_label = $form.find(\"button[type='submit']\").data('disable-with');\n\n        $form.find(\"button[type='submit']\").text($disabled_label);\n        $form.find(\"button[type='submit']\").prop('disabled', true);\n\n        stripe.createPaymentMethod({\n          type: 'card',\n          card: window.card,\n          billing_details: {\n          },\n        }).then(stripePaymentMethodHandler);\n      }\n    });\n\n    $('.payment-method-remote').on('click', '.use-new-card', function() {\n      $(\".use-new-payment-method-val\").val(true);\n      $('.payment-method-remote').addClass('new-payment-method');\n      $('.cards-on-file').addClass(\"hidden\");\n      $('.card-form').removeClass(\"hidden\");\n      $('#card-element').focus();\n      return false;\n    });\n\n    $('.payment-method-remote').on('click', '.use-cards-on-file', function() {\n      $(\".use-new-payment-method-val\").val(false);\n      $('.payment-method-remote').removeClass('new-payment-method');\n      $('.card-form').addClass(\"hidden\");\n      $('.cards-on-file').removeClass(\"hidden\");\n      return false;\n    });\n\n    document.querySelectorAll(\".payment_method_type_radio\").forEach(radio => {\n      radio.addEventListener('change', (e) => {\n        if (e.target.value == \"1\") {\n          // show credit card, hide ACH\n          $(\".credit-card\").removeClass(\"hidden\");\n          if ($(\".card-on-file\").length == 0) { $('.pro-sign-up').addClass(\"card-token\"); }\n          $(\".ach-payment\").addClass(\"hidden\");\n        } else {\n          // show ACH, hide credit card\n          $(\".ach-payment\").removeClass(\"hidden\");\n          $(\".credit-card\").addClass(\"hidden\");\n          $('.pro-sign-up').removeClass(\"card-token\");\n        }\n      })\n    })\n\n  }\n}\n", "export default class TvMenuLoader {\n  constructor(refreshRate, nextUrl, specialRefreshRate) {\n    this.nextUrl = nextUrl\n    this.refreshRate = refreshRate\n    this.specialRefreshRate = specialRefreshRate\n    this.setupInterval()\n    this.screens = {}\n    this.setupClearScreenInterval()\n  }\n\n  clearScreens() {\n    this.screens = {}\n    window.location = this.nextUrl\n  }\n\n  setupInterval(onSpecial) {\n    if (onSpecial && this.specialRefreshRate) {\n      this.interval = setInterval(this.refresh.bind(this), this.specialRefreshRate)\n    } else if (this.refreshRate) {\n      this.interval = setInterval(this.refresh.bind(this), this.refreshRate)\n    }\n  }\n\n  setupClearScreenInterval() {\n    if (this.clearScreenInterval) {\n      clearInterval(this.clearScreenInterval)\n    }\n\n    const threeHours = 3 * 60 * 60 * 1000\n    this.clearScreenInterval = setInterval(this.clearScreens.bind(this), threeHours)\n  }\n\n  success(data, textStatus, jqXHR) {\n    const onSpecial = jqXHR.getResponseHeader(\"on-special\") === \"true\"\n    this.setupInterval(onSpecial)\n\n    const nextUrl = jqXHR.getResponseHeader(\"menu-next-url\")\n    this.screens[this.nextUrl] = {\n      html: data,\n      nextUrl: nextUrl,\n      onSpecial: onSpecial\n    }\n    this.nextUrl = nextUrl\n\n    $(\".tv-container\").html(data)\n    $(\"#drift-widget-container\").css(\"display\", \"none\")\n  }\n\n  error(data, textStatus, jqXHR) {\n    this.setupInterval()\n\n    $.ajax({\n      method: 'POST',\n      url: '/api/internal/logs',\n      data: {\n        message: \"TV Menu Error: \" + data.statusText\n      }\n    })\n  }\n\n  refresh() {\n    clearInterval(this.interval)\n\n    const screen = this.screens[this.nextUrl]\n    if (screen) {\n      $(\".tv-container\").html(screen.html)\n      this.setupInterval(screen.onSpecial)\n      this.nextUrl = screen.nextUrl\n    } else {\n      $.ajax({\n        url: this.nextUrl,\n        dataType: \"html\",\n        data: {\n          html: true\n        },\n        success: this.success.bind(this),\n        error: this.error.bind(this)\n      })\n    }\n  }\n}\n", "import Accordion from \"./accordion\"\nimport AlgoliaSource from \"./algolia-source\"\nimport BeerAutocompleteSuggestion from \"./beer-autocomplete-suggestion\"\nimport BeerMetadata from \"./beer-metadata\"\nimport Browser from \"./browser\"\nimport Debouncer from \"./debouncer\"\nimport MenuSections from \"./menu-sections\"\nimport Servings from \"./servings\"\nimport ScriptInserter from \"./script-inserter\"\nimport StripeLoader from \"./stripe-loader\"\nimport TvMenuLoader from \"./tv-menu-loader\"\n\nwindow.Accordion = Accordion\nwindow.AlgoliaSource = AlgoliaSource\nwindow.BeerAutocompleteSuggestion = BeerAutocompleteSuggestion\nwindow.BeerMetadata = BeerMetadata\nwindow.Browser = Browser\nwindow.Debouncer = Debouncer\nwindow.MenuSections = MenuSections\nwindow.Servings = Servings\nwindow.ScriptInserter = ScriptInserter\nwindow.StripeLoader = StripeLoader\nwindow.TvMenuLoader = TvMenuLoader\n", "BeerMenus.Checklists = {\n  highlightServingForm: function() {\n    const $input = $(\".aa-input\").first()\n    $input.focus()\n    $input.removeClass(\"shake-vertical\")\n\n    setTimeout(() => {\n      $input.addClass(\"shake-vertical\")\n    }, 100)\n  },\n\n  showAddressModal: function(barID) {\n    $.ajax(`/places/${barID}/addresses/new.js`)\n  },\n\n  showFacebookModal: function() {\n    $(\"#syndicate-promo-facebook\").modal()\n  },\n\n  showTwitterModal: function() {\n    $(\"#syndicate-promo-twitter\").modal()\n  },\n\n  showPrintMenuModal: function(barID) {\n    $.ajax(`/places/${barID}/print_menus/new_or_last.js`)\n  },\n\n  showUpdateMenuMessageModal: function(partial) {\n    $(`#update-menu-message-${partial}`).modal()\n  },\n\n  spotlight: function(hash) {\n    import(\"driver.js\").then((driver) => {\n      window.BeerMenus.driver = window.BeerMenus.driver || new driver.default()\n\n      const element = document.querySelector(`meta[name=\"${hash}-element\"]`)\n      const position = document.querySelector(`meta[name=\"${hash}-position\"]`)\n      const highlight = {\n        element: (element && element.content) || \"#pro-tools\",\n        popover: {\n          showButtons: false,\n          position: (position && position.content) || \"bottom\",\n          title: document.getElementById(`${hash}-title`).innerHTML,\n          description: document.getElementById(`${hash}-description`).innerHTML,\n        }\n      }\n\n      const tab = document.querySelector(`meta[name=\"${hash}-tab\"]`)\n      if (tab) {\n        window.location.hash = tab.content\n      }\n\n      setTimeout(() => {\n        $(\".modal\").modal(\"hide\") // Close any open modal.\n        window.BeerMenus.driver.highlight(highlight)\n      }, 1) // Tick so tabs-controller has time to select tab.\n    })\n  },\n\n  closeDriver: function() {\n    // Close driver immediately, without animation.\n    window.BeerMenus.driver && window.BeerMenus.driver.reset(true)\n  }\n}\n", "BeerMenus.DOM = {\n  insertHTML: function(html, element) {\n    element.insertAdjacentHTML(\"beforeend\", html)\n  }\n}\n", "BeerMenus.InputFocuser = {\n  focus: function(selector) {\n    this.focusNode(document.querySelector(selector))\n  },\n\n  focusNode: function(node) {\n    node.focus()\n\n    setTimeout(function() {\n      // Set the cursor at the end of the input.\n      node.selectionStart = node.selectionEnd = node.value.length\n    }, 0) // Tick to defer until the stack is clear.\n  }\n}\n", "BeerMenus.Messages = {\n  setNotice: function(message) {\n    this._setMessage(message, \"success\", \"check\")\n  },\n\n  setError: function(message) {\n    this._setMessage(message, \"alert\", \"alert\")\n  },\n\n  clear: function() {\n    $(\"#global-messages\").html(\"\")\n  },\n\n  // private\n\n  _setMessage: function(message, cssClass, iconClass) {\n    this.clear()\n\n    $(\"#global-messages\").append(\n      $(\"<div>\").addClass(`pure-msg pure-msg-global pure-msg-${cssClass}`).append(\n        $(\"<div>\").addClass(\"content-inner\").append(\n          $(\"<span>\").addClass(`pure-icon pure-icon-${iconClass}`)\n        ).html(message)\n      )\n    )\n  },\n}\n", "BeerMenus.Modals = {\n  insert: function(html, selector) {\n    if (selector) {\n      BeerMenus.Modals.insertViaSelector(html, selector)\n    } else {\n      BeerMenus.DOM.insertHTML(html, document.body)\n      $(document.body.lastElementChild).modal()\n    }\n  },\n\n  // private\n\n  insertViaSelector(html, selector) {\n    if ($(selector).length > 0) {\n      $(selector).modal(\"hide\")\n      $(selector).replaceWith(html)\n    } else {\n      $(\"body\").append(html)\n    }\n\n    $(selector).modal()\n  }\n}\n", "/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md\n */\nBeerMenus.OnPremiseTracker = {\n  track() {\n    return BeerMenus.Location.get(this.success, this.failure);\n  },\n\n  success(latitude, longitude) {\n    const data = {\n      latitude,\n      longitude,\n      user_id: $(\"#js-data\").data(\"userId\"),\n      bar_id: $(\"#js-data\").data(\"barId\"),\n      api_key: $(\"#js-data\").data(\"apiKey\")\n    };\n\n    $.ajax({\n      type: \"POST\",\n      url: \"/api/internal/on_premise_views\",\n      dataType: \"json\",\n      data,\n      success(data, status, xhr) {\n        if (data[\"success\"] === true) {\n          return $(\"#on-premise-message\").show();\n        }\n      }\n    });\n\n    return true;\n  },\n\n  failure(error) {\n    return true;\n  }\n};\n", "/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md\n */\nconst ready = function() {\n  // Pricing V4\n  $('.pricing-v4, .pricing-modular').on('click', '.x-show-details', function() {\n    $(this).siblings(\".plan-card-features\").removeClass(\"hidden\");\n    $(this).addClass(\"hidden\");\n    $(this).siblings(\".x-hide-details\").removeClass(\"hidden\");\n    return false;\n  });\n\n  $('.pricing-v4, .pricing-modular').on('click', '.x-hide-details', function() {\n    $(this).siblings(\".plan-card-features\").addClass(\"hidden\");\n    $(this).addClass(\"hidden\");\n    $(this).siblings(\".x-show-details\").removeClass(\"hidden\");\n    return false;\n  });\n\n  if ($(\".pricing-v4\").length > 0) {\n    const checked = function() {\n      return this.checked;\n    };\n    const plan = $(\"input[type=radio]\").filter(checked).closest(\".pro-plan\");\n    plan.addClass(\"checked\");\n    $(\"span.plan-name\").text(plan.data(\"plan-name\"));\n    $(\".plan-includes\").text(plan.data(\"plan-includes\"));\n  }\n\n  $(\".pricing-v4\").on(\"click\", \".pro-plan\", function() {\n    $(\".pro-plan\").removeClass(\"checked\");\n    $(this).addClass(\"checked\");\n    $(this).find(\"input, radio\").prop(\"checked\", true).change();\n    $(\"span.plan-name\").text($(this).data(\"plan-name\"));\n    $(\".plan-includes\").text($(this).data(\"plan-includes\"));\n    $(\".monthly-price\").text($(this).find(\".x-price\").data(\"monthly\"));\n    $(\".annual-price\").text($(this).find(\".x-price\").data(\"annual\"));\n    $(\".annual-savings\").text($(this).find(\".x-price\").data(\"annual-savings\"));\n    $(\".monthly-plan\").val($(this).data(\"monthly\"));\n    return $(\".annual-plan\").val($(this).data(\"annual\"));\n  });\n\n  // if clicked, hide \"View More <section>\" button and show loading gif\n  $('.pure-list-item-more').on('click', 'a', function() {\n    $(this).parents('.pure-list-item-more').addClass(\"is-loading\");\n    return $(this).siblings('.loading').show();\n  });\n\n  //Pro Access Promos\n  $(\".content, .edit-menu\").on(\"click\", \".x_syndicate_facebook\", function() {\n    if ($(this).is(':checked')) {\n      $(this).prop('checked', false);\n      $(\"#syndicate-promo-facebook\").modal();\n\n      return BeerMenus.Analytics.track('Viewed facebook um modal', {\n        'pro promo page': 'Edit menu',\n        'Pro promo feature': 'Post to Facebook'\n      }\n      );\n    }\n  });\n\n  $(\".content, .edit-menu\").on(\"click\", \".x_syndicate_twitter\", function() {\n    if ($(this).is(':checked')) {\n      $(this).prop('checked', false);\n      $(\"#syndicate-promo-twitter\").modal();\n      return BeerMenus.Analytics.track('Viewed twitter um modal', {\n        'pro promo page': 'Edit menu',\n        'Pro promo feature': 'Post to Twitter'\n      }\n      );\n    }\n  });\n\n  $(\".content\").on(\"click\", \".x-promo\", function() {\n    $(\"#promo-modal\").modal();\n    return false;\n  });\n\n  // save array of all hours so we can pluck from it later\n  const allHoursOptions = $(\"#date_hour > option\");\n\n  // Print Menu Font Sizes\n  window.bindPrintMenuFonts = function() {\n    const section_title_font_size = $(\"#print_menu_profile_section_title_font_size\");\n    const flavor_group_title_font_size = $(\"#print_menu_profile_flavor_group_title_font_size\");\n    const columns_radio_button = $(\"input[name='print_menu_profile[layout]']\");\n    if (!(section_title_font_size.length > 0) || !(flavor_group_title_font_size.length > 0)) { return; }\n    columns_radio_button.change(function() {\n      if ($(\"input[name='print_menu_profile[layout]']:checked\").val() === \"1\") {\n        section_title_font_size.val(\"14\");\n        flavor_group_title_font_size.val(\"10\");\n        $(\"#print_menu_profile_beer_info_font_id\").prop(\"disabled\", true);\n        const beer_name_font = $(\"#print_menu_profile_beer_name_font_id\").val();\n        return $(\"#print_menu_profile_beer_info_font_id\").val(beer_name_font);\n      } else {\n        section_title_font_size.val(\"12\");\n        flavor_group_title_font_size.val(\"13\");\n        return $(\"#print_menu_profile_beer_info_font_id\").prop(\"disabled\", false);\n      }\n    });\n\n    const sort_options = $(\"input[name='print_menu_profile[sort]']\");\n    sort_options.change(() => showFlavorGroupTitleFont());\n\n    const show_descriptions = $(\"#print_menu_profile_beer_descriptions\");\n    return show_descriptions.change(() => showBeerDescriptionFont());\n  };\n\n  bindPrintMenuFonts();\n\n  window.matchSingleColumnBeerInfoFonts = () => $(\"#print_menu_profile_beer_name_font_id\").change(function() {\n    if ($(\"input[name='print_menu_profile[layout]']:checked\").val() === \"1\") {\n      const beer_name_font = $(this).val();\n      return $(\"#print_menu_profile_beer_info_font_id\").val(beer_name_font);\n    }\n  });\n\n  window.matchSingleColumnBeerInfoFonts();\n\n  window.showBeerDescriptionFont = function() {\n    const row = $(\"#beer_description_row\");\n    if ($(\"#print_menu_profile_beer_descriptions\").is(\":checked\")) {\n      row.find(\"select\").prop(\"disabled\", false);\n      return row.show();\n    } else {\n      row.hide();\n      return row.find(\"select\").prop(\"disabled\", true);\n    }\n  };\n\n  window.showFlavorGroupTitleFont = function() {\n    if ($(\"input[name='print_menu_profile[sort]']:checked\").length === 0) { return; }\n\n    const row = $(\"#flavor_group_title_row\");\n    const checkboxes = $(\".group-by-style-checkbox\");\n    if ($(\"input[name='print_menu_profile[sort]']:checked\").val() === \"2\") {\n      row.find(\"select\").prop(\"disabled\", false);\n      row.show();\n      checkboxes.find(\"input\").prop(\"disabled\", false);\n      return checkboxes.removeClass(\"hidden\");\n    } else {\n      row.hide();\n      row.find(\"select\").prop(\"disabled\", true);\n      checkboxes.addClass(\"hidden\");\n      return checkboxes.find(\"input\").prop(\"disabled\", true);\n    }\n  };\n\n  showFlavorGroupTitleFont();\n\n  // Twitter Preview\n  $(\".pure-form\").on(\"keyup\", \".twitter-preview-source\", function() {\n    $(\".twitter-preview-blank\").addClass(\"hidden\");\n    $(\".twitter-preview\").removeClass(\"hidden\");\n    let tweetContent = $(this).val();\n    const hashtagLength = $(\".twitter-preview\").data(\"hashtag\").length;\n\n    if (tweetContent.length > (99 - hashtagLength)) {\n      tweetContent = tweetContent.substring(0,97 - hashtagLength) + \"...\";\n    }\n\n    return $(\".twitter-preview-content\").html(tweetContent);\n  });\n\n  window.selectTabForAvailability = function(availability) {\n    const hash = (() => { switch (availability) {\n      case 1: return \"#menu\";\n      case 2: return \"#coming_soon\";\n      case 3: return \"#private\";\n    } })();\n\n    if (window.history && history.replaceState) {\n      return history.replaceState({}, '', hash);\n    }\n  };\n\n  window.switchToPureTab = function(tabHash) {\n    document.querySelector(`.pure-tabs-item[data-hash=\"${tabHash}\"]`).click()\n  }\n\n  // Pro Payments\n  $('.card-on-file').on('click', '.use-new-card', function() {\n    $('.pro-sign-up').addClass('card-token');\n    $('.card-on-file').hide();\n    $('.payment-form').show();\n    $('#card_number').focus();\n    return false;\n  });\n\n  $('.payment-form').on('click', '.use-card-on-file', function() {\n    $('.pro-sign-up').removeClass('card-token');\n    $('.payment-form').hide();\n    $('.card-on-file').show();\n    return false;\n  });\n\n  window.bindFeedExpands = function() {\n    $('.x-feed-objects').unbind('click');\n    $('.x-feed-objects').on('click', '.x-show-updates', function(event) {\n      let text;\n      event.preventDefault();\n      const extra = $(this).parent().parent().find(\".x-extra\");\n\n      if (extra.hasClass(\"hidden\")) {\n        extra.removeClass(\"hidden\");\n        text = $(this).data('hide-text');\n      } else {\n        extra.addClass(\"hidden\");\n        text = $(this).data('show-text');\n      }\n\n      return $(this).text(text);\n    });\n    return false;\n  };\n  window.bindFeedExpands();\n\n  $(\".x-block-link\").click(e => false);\n\n  // Edit Pro Membership\n  const billing_options = $(\"input.billing-option\");\n  const button = $(\"#change-plan-button\");\n  if ((billing_options.length > 0) && (button.data(\"annual-label\").length > 0)) {\n    $(\".pro-sign-up\").on(\"change\", \"input[type='radio']\", function() {\n      const plan_selected = $(\"input[name='plan_name']:checked\").val();\n      const current_plan = button.data(\"current-plan\");\n      const annual_billing = $(\"input.billing-option:checked\").hasClass(\"annual-plan\");\n      if ((plan_selected === current_plan) && annual_billing) {\n        return button.html(button.data(\"annual-label\"));\n      } else {\n        return button.html(button.data(\"original-label\"));\n      }\n    });\n  }\n\n  // Auto-submit follow button\n  if ($(\".action\").hasClass(\"x-auto-submit\")) {\n    $(\".x-auto-submit-button\").trigger(\"click\");\n  }\n\n  // event tracking\n  window.trackAndLogEvents = () => $(\".trackable\").click(function() {\n    const api_key = process.env.EVENTS_API_KEY;\n    const event_type = $(this).attr(\"data-event-type\");\n    const bar_id = $(this).attr(\"data-bar-id\");\n    $.ajax({\n      type: 'POST',\n      url: '/api/internal/events',\n      data: {\n        bar_id,\n        event_type,\n        api_key\n      },\n      complete() {\n        return true;\n      }\n    });\n    return true;\n  });\n\n  window.trackAndLogEvents();\n\n  window.activateAddressForm = function() {\n    window.addressService = AddressService();\n    window.initAutocomplete = function() {\n      addressService.initAutocomplete();\n      return addressService.showFullFormIfJSONAddress(addressService);\n    };\n    return initGooglePlaces('initAutocomplete');\n  };\n\n  if ($(\".update-address\").length > 0) {\n    return window.activateAddressForm();\n  }\n};\n\nif ((typeof Turbolinks === \"undefined\") || Turbolinks.abort) {\n  // Desktop (no Turbolinks), mobile web, or legacy iOS client\n  $(document).ready(ready);\n  $(document).on(\"page:load\", ready);\n} else {\n  // Turbolinks v5 iOS client\n  $(document).on(\"turbolinks:load\", ready);\n}\n\nwindow.initGooglePlaces = function(callback) {\n  if (typeof(google) === \"object\") {\n    return window[callback]();\n  } else {\n    const script = document.createElement(\"script\");\n    script.type = \"text/javascript\";\n    const key = process.env.GMAPS_V3_KEY;\n    script.src = \"//maps.googleapis.com/maps/api/js?key=\" + key + \"&libraries=places&callback=\" + callback;\n    return document.body.appendChild(script);\n  }\n};\n\nwindow.AddressService = function() {\n  const componentForm = {\n    locality: 'long_name',\n    administrative_area_level_1: 'short_name',\n    country: 'long_name',\n    postal_code: 'short_name'\n  };\n  let autocompletedPlace = null;\n  const submittedAddress = null;\n  let selectedManual = false;\n\n  return {\n    showFullForm() {\n      $(\".enter-address-manually\").addClass(\"hidden\");\n      $(\".full-address-form\").removeClass(\"hidden\");\n      selectedManual = true;\n      $('#autocomplete').attr('placeholder', '155 Water Street');\n      return $(\"#enter-address-manually\").addClass(\"hidden\");\n    },\n\n    showFullFormIfJSONAddress() {\n      if ($(\"#has-json-address\").length) {\n        window.addressService.showFullForm();\n        return false;\n      }\n    },\n\n    initAutocomplete() {\n      // if someone clicks enter on autocomplete dropdown, don't submit form\n      let changeListener;\n      $('.update-address').on('keypress', function(e) {\n        if (e.keyCode === 13) {\n          return false;\n        }\n      });\n\n      $(\".address-submit\").on(\"click\", () => window.addressService.submitForm());\n\n      $(\".show-full-form-link\").on('click', () => window.addressService.showFullForm());\n\n      $('#autocomplete').on('input', function() {\n        if (!selectedManual) {\n          return $(\".enter-address-manually\").removeClass(\"hidden\");\n        }\n      });\n\n      const autocomplete = new google.maps.places.Autocomplete(\n        document.getElementById('autocomplete'),\n        {types: ['geocode']}\n      );\n\n      const autocompleteForm = function() {\n        $(\".enter-address-manually\").addClass(\"hidden\");\n        $(\".full-address-form\").removeClass(\"hidden\");\n        $('.x-address-input').addClass(\"bb-0\");\n        autocompletedPlace = autocomplete.getPlace();\n        return window.addressService.populateFormFields(autocompletedPlace, true);\n      };\n\n      if ($(\"#autocomplete\").val()) {\n        $(\".enter-address-manually\").addClass(\"hidden\");\n        $(\".full-address-form\").removeClass(\"hidden\");\n      }\n\n      return changeListener = google.maps.event.addListener(autocomplete, 'place_changed', autocompleteForm);\n    },\n\n    submitForm() {\n      const street_address = $(\".address\").val();\n      const city = $(\".city\").val();\n      const state = $(\".state\").val();\n      const zipcode = $(\".zipcode\").val();\n\n      if (street_address && city && state && zipcode) {\n        $(\".update-address button[type='submit']\").first().prop(\"disabled\", true);\n        $(\".update-address button[type='submit']\").first().innerHTML = $(\".update-address .pure-button\").data(\"disable-with\");\n\n        // submit the form after geocoding of the manually typed in address occurs\n        this.geocode(() => $(\".update-address\").trigger(\"submit.rails\"));\n      } else {\n        $(\".update-address\").trigger(\"submit.rails\");\n      }\n\n      return false;\n    },\n\n    // geocode all input in case the autopopulated address was overwritten\n    geocode(callback) {\n      BeerMenus.Analytics.track(\"Geocoding\", {stack: \"shared/shared.coffee#395\"});\n      const geocoder = new (google.maps.Geocoder);\n\n      const street_address = $(\".address\").prop(\"value\");\n      const city = $(\".city\").prop(\"value\");\n      const state = $(\".state\").prop(\"value\");\n      const zipcode = $(\".zipcode\").prop(\"value\");\n      const country = $(\".country\").prop(\"value\");\n\n      const address = [street_address, city, state, zipcode, country].join(' ');\n\n      return geocoder.geocode({ \"address\": address }, function(results, status) {\n        window.addressService.populateFormFields(results[0], false);\n        return callback();\n      });\n    },\n\n    populateFormFields(place, includeUserFields) {\n      $(\".error-msg\").addClass(\"hidden\");\n\n      if (place != null ? place.address_components : undefined) {\n        let i = 0;\n        let addressLineOne = '';\n        let city = \"\";\n\n        // reset auto-populated fields\n        const fields = [\"address\", \"neighborhood\", \"sublocal\", \"local\", \"state\", \"zipcode\", \"country\"];\n        fields.forEach(field => $(`.geo-${field}`).prop(\"value\", null));\n\n        while (i < place.address_components.length) {\n          var addressType = place.address_components[i].types[0];\n          var short_value = place.address_components[i]['short_name'];\n          var long_value = place.address_components[i]['long_name'];\n\n          switch (addressType) {\n            case \"route\":\n              addressLineOne += \" \" + long_value;\n              if (includeUserFields) { $('.address').prop(\"value\", addressLineOne); }\n              $('.geo-address').prop(\"value\", addressLineOne);\n              break;\n            case \"street_number\": addressLineOne = short_value; break;\n            case \"neighborhood\": $(\".geo-neighborhood\").prop(\"value\", long_value); break;\n            case \"sublocality_level_1\":\n              $(\".geo-sublocal\").prop(\"value\", long_value);\n              // use this instead of city if it is in the full address\n              if (place.formatted_address.includes(long_value)) {\n                city = long_value;\n              }\n              break;\n            case \"locality\":\n              $(\".geo-local\").prop(\"value\", long_value);\n              // fall back to this for city when it hasn't already been filled in\n              if (city === \"\") { city = long_value; }\n              break;\n            case \"administrative_area_level_2\": $(\".geo-county\").prop(\"value\", long_value); break;\n            case \"administrative_area_level_1\":\n              if (includeUserFields) { $(\".state\").prop(\"value\", short_value); }\n              $(\".geo-state\").prop(\"value\", short_value);\n              break;\n            case \"postal_code\":\n              if (includeUserFields) { $(\".zipcode\").prop(\"value\", long_value); }\n              $(\".geo-zipcode\").prop(\"value\", long_value);\n              break;\n            case \"country\":\n              if (includeUserFields) { $(\".country\").prop(\"value\", long_value); }\n              $(\".geo-country\").prop(\"value\", long_value);\n              break;\n          }\n          i++;\n        }\n\n        $(\".latitude\").val(place.geometry.location.lat());\n        $(\".longitude\").val(place.geometry.location.lng());\n        if (includeUserFields) {\n          $(\".city\").prop(\"value\", city);\n          return $(\".full-address\").val(place.formatted_address);\n        }\n      } else {\n        // reset lat/lng, because we couldn't geocode address\n        $(\".latitude\").prop(\"value\", null);\n        return $(\".longitude\").prop(\"value\", null);\n      }\n    }\n  };\n};\n", "require(\"./beermenus\")\n\nrequire(\"../extensions\")\nrequire(\"../models\")\n\nrequire(\"./analytics\")\nrequire(\"./checklists\")\nrequire(\"./dom\")\nrequire(\"./input-focuser\")\nrequire(\"./messages\")\nrequire(\"./modals\")\nrequire(\"./on-premise-tracker\")\nrequire(\"./shared\")\n", "/* eslint no-console:0 */\n\n// CSS\nimport \"../styles/application.scss\"\n\nimport { Application } from \"@hotwired/stimulus\"\nwindow.Stimulus = { \"application\": Application.start() }\n\nimport controllers from \"./controllers/**/*.js\"\nObject.entries(controllers).forEach(([filename, controller]) => {\n  if (filename.includes(\"_controller.\") || filename.includes(\"-controller.\")) {\n    const identifier = filename.replace(\"./controllers/\", \"\")\n      .replace(/[_-]controller..*$/, \"\")\n      .replace(\"_\", \"-\")\n      .replace(\"/\", \"--\")\n\n    Stimulus.application.register(identifier, controller.default)\n  }\n})\n\n// vendor\nimport Dialog from \"@stimulus-components/dialog\"\nimport Dropdown from \"@stimulus-components/dropdown\"\nStimulus.application.register(\"dialog\", Dialog)\nStimulus.application.register(\"dropdown\", Dropdown)\n\nimport {} from \"jquery-ujs\"\nimport {} from \"sticky-kit/dist/sticky-kit\"\nwindow.Cookies = require(\"js-cookie\")\nrequire(\"waypoints/lib/jquery.waypoints.js\")\nrequire(\"bootstrap/js/modal\")\n\n// internal\nrequire(\"./shared\")\n"],
  "mappings": "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",
  "names": ["init_rails", "__esmMin", "$", "undefined", "rails", "$document", "xhr", "token", "obj", "name", "data", "event", "message", "options", "element", "method", "url", "withCredentials", "dataType", "button", "settings", "status", "error", "originAnchor", "urlAnchor", "e", "link", "href", "target", "csrfToken", "csrfParam", "form", "metadataInput", "selector", "replacement", "answer", "callback", "specifiedSelector", "nonBlank", "foundInputs", "input", "valueToCheck", "radiosForNameWithNoneSelected", "radioName", "requiredInputs", "checkedRadioButtonNames", "originalOptions", "metaClick", "handleRemote", "remote", "blankRequiredInputs", "nonBlankFileInputs", "aborted", "require_sticky_kit", "__commonJSMin", "exports", "$", "win", "opts", "doc", "elm", "enable_bottoming", "inner_scrolling", "manual_spacer", "offset_top", "outer_width", "parent_selector", "recalc_every", "sticky_class", "_fn", "_i", "_len", "el", "computed", "w", "_el", "padding_bottom", "parent_top", "parent_height", "top", "height", "el_float", "detached", "bottomed", "detach", "fixed", "last_pos", "last_scroll_height", "offset", "parent", "recalc", "recalc_and_tick", "recalc_counter", "spacer", "tick", "border_top", "padding_top", "restore", "css", "delta", "recalced", "scroll", "will_bottom", "win_height", "require_js_cookie", "__commonJSMin", "exports", "module", "factory", "registeredInModuleLoader", "OldCookies", "api", "extend", "result", "attributes", "key", "init", "converter", "value", "expires", "e", "stringifiedAttributes", "attributeName", "cookies", "rdecode", "i", "parts", "cookie", "name", "require_jquery_waypoints", "__commonJSMin", "keyCounter", "allWaypoints", "Waypoint", "options", "direction", "args", "method", "allWaypointsArray", "waypointKey", "i", "end", "requestAnimationFrameShim", "callback", "contexts", "oldWindowLoad", "Context", "element", "waypoint", "axis", "horizontalEmpty", "verticalEmpty", "isWindow", "self", "resizeHandler", "scrollHandler", "triggeredGroups", "axes", "axisKey", "isForward", "wasBeforeTriggerPoint", "nowAfterTriggerPoint", "crossedForward", "crossedBackward", "groupKey", "contextOffset", "adjustment", "oldTriggerPoint", "elementOffset", "freshWaypoint", "contextModifier", "wasBeforeScroll", "nowAfterScroll", "triggeredBackward", "triggeredForward", "contextId", "requestFn", "byTriggerPoint", "a", "b", "byReverseTriggerPoint", "groups", "Group", "waypoints", "reverse", "index", "isLast", "$", "JQueryAdapter", "createExtension", "framework", "overrides", "require_modal", "__commonJSMin", "$", "Modal", "element", "options", "_relatedTarget", "that", "e", "transition", "callback", "animate", "doAnimate", "callbackRemove", "modalIsOverflowing", "fullWindowWidth", "documentElementRect", "bodyPad", "scrollbarWidth", "index", "actualPadding", "calculatedPadding", "padding", "scrollDiv", "Plugin", "option", "$this", "data", "old", "href", "target", "$target", "showEvent", "require_array_join_sentence", "__commonJSMin", "oxford_comma", "lastWord", "require_extensions", "__commonJSMin", "Accordion", "accordion_default", "init_accordion", "__esmMin", "AlgoliaSource", "algolia_source_default", "init_algolia_source", "__esmMin", "algoliasearch", "autocomplete", "indexName", "filters", "client", "BeerAutocompleteSuggestion", "beer_autocomplete_suggestion_default", "init_beer_autocomplete_suggestion", "__esmMin", "template", "hit", "suggestion", "meta", "BeerMetadata", "beer_metadata_default", "init_beer_metadata", "__esmMin", "hit", "abv", "Browser", "init_browser", "__esmMin", "MenuSections", "init_menu_sections", "__esmMin", "productType", "Servings", "init_servings", "__esmMin", "productType", "isEdit", "offset", "sortable", "id", "name", "style_id", "abv", "form", "inputs", "containerInput", "message", "element", "ScriptInserter", "init_script_inserter", "__esmMin", "id", "src", "callback", "script", "StripeLoader", "init_stripe_loader", "__esmMin", "stripe", "elements", "event", "displayError", "stripeTokenHandler", "token", "form", "$form", "createToken", "$original_label", "result", "errorElement", "stripePaymentMethodHandler", "$disabled_label", "e", "xhr", "radio", "TvMenuLoader", "init_tv_menu_loader", "__esmMin", "refreshRate", "nextUrl", "specialRefreshRate", "onSpecial", "threeHours", "data", "textStatus", "jqXHR", "screen", "models_exports", "init_models", "__esmMin", "init_accordion", "init_algolia_source", "init_beer_autocomplete_suggestion", "init_beer_metadata", "init_browser", "init_debouncer", "init_menu_sections", "init_servings", "init_script_inserter", "init_stripe_loader", "init_tv_menu_loader", "accordion_default", "algolia_source_default", "beer_autocomplete_suggestion_default", "beer_metadata_default", "Browser", "Debouncer", "MenuSections", "Servings", "ScriptInserter", "StripeLoader", "TvMenuLoader", "require_checklists", "__commonJSMin", "$input", "barID", "partial", "hash", "driver", "element", "position", "highlight", "tab", "require_dom", "__commonJSMin", "html", "element", "require_input_focuser", "__commonJSMin", "selector", "node", "require_messages", "__commonJSMin", "message", "cssClass", "iconClass", "require_modals", "__commonJSMin", "html", "selector", "require_on_premise_tracker", "__commonJSMin", "latitude", "longitude", "data", "status", "xhr", "error", "require_shared", "__commonJSMin", "ready", "checked", "plan", "allHoursOptions", "section_title_font_size", "flavor_group_title_font_size", "columns_radio_button", "beer_name_font", "row", "checkboxes", "tweetContent", "hashtagLength", "availability", "hash", "tabHash", "event", "text", "extra", "e", "billing_options", "button", "plan_selected", "current_plan", "annual_billing", "api_key", "event_type", "bar_id", "callback", "script", "key", "componentForm", "autocompletedPlace", "submittedAddress", "selectedManual", "changeListener", "autocomplete", "autocompleteForm", "street_address", "city", "state", "zipcode", "geocoder", "country", "address", "results", "status", "place", "includeUserFields", "i", "addressLineOne", "field", "addressType", "short_value", "long_value", "require_shared", "__commonJSMin", "application_shared_exports", "import_sticky_kit", "init_application_shared", "__esmMin", "init_", "init_stimulus", "init__", "init_stimulus_dialog", "init_stimulus_dropdown", "init_rails", "Application", "__default", "filename", "controller", "identifier", "Dialog", "Dropdown"]
}