{
  "version": 3,
  "sources": ["/cdn/shop/t/512/assets/theme.js?enable_js_minification=1"],
  "sourcesContent": ["window.theme = window.theme || {};\nwindow.slate = window.slate || {};\n\nwindow.lazySizesConfig = window.lazySizesConfig || {};\nlazySizesConfig.expFactor = 4;\n\n(function($){\n  var $ = jQuery = $;\n\n  slate.utils = {\n    /**\n     * _.defaultTo from lodash\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if f`value` is `NaN`, `null`,\n     * or `undefined`.\n     * Source: https://github.com/lodash/lodash/blob/master/defaultTo.js\n     *\n     * @param {*} value - Value to check\n     * @param {*} defaultValue - Default value\n     * @returns {*} - Returns the resolved value\n     */\n    defaultTo: function(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value\n    }\n  };\n  \n  slate.a11y = {\n  \n    /**\n     * Traps the focus in a particular container\n     *\n     * @param {object} options - Options to be used\n     * @param {jQuery} options.$container - Container to trap focus within\n     * @param {jQuery} options.$elementToFocus - Element to be focused when focus leaves container\n     * @param {string} options.namespace - Namespace used for new focus event handler\n     */\n    trapFocus: function(options) {\n      var eventName = options.namespace\n        ? 'focusin.' + options.namespace\n        : 'focusin';\n  \n      if (!options.$elementToFocus) {\n        options.$elementToFocus = options.$container;\n      }\n  \n      options.$container.attr('tabindex', '-1');\n      options.$elementToFocus.focus();\n  \n      $(document).off('focusin');\n  \n      $(document).on(eventName, function(evt) {\n        if (options.$container[0] !== evt.target && !options.$container.has(evt.target).length) {\n          options.$container.focus();\n        }\n      });\n    },\n  \n    /**\n     * Removes the trap of focus in a particular container\n     *\n     * @param {object} options - Options to be used\n     * @param {jQuery} options.$container - Container to trap focus within\n     * @param {string} options.namespace - Namespace used for new focus event handler\n     */\n    removeTrapFocus: function(options) {\n      var eventName = options.namespace\n        ? 'focusin.' + options.namespace\n        : 'focusin';\n  \n      if (options.$container && options.$container.length) {\n        options.$container.removeAttr('tabindex');\n      }\n  \n      $(document).off(eventName);\n    },\n  \n  \n    // Not from Slate, but fit in the a11y category\n    lockMobileScrolling: function(namespace, $element) {\n      if ($element) {\n        var $el = $element;\n      } else {\n        var $el = $(document.documentElement).add('body');\n      }\n      $el.on('touchmove' + namespace, function () {\n        return false;\n      });\n    },\n  \n    unlockMobileScrolling: function(namespace, $element) {\n      if ($element) {\n        var $el = $element;\n      } else {\n        var $el = $(document.documentElement).add('body');\n      }\n      $el.off(namespace);\n    }\n  };\n  \n  theme.Sections = function Sections() {\n    this.constructors = {};\n    this.instances = [];\n  \n    $(document)\n      .on('shopify:section:load', this._onSectionLoad.bind(this))\n      .on('shopify:section:unload', this._onSectionUnload.bind(this))\n      .on('shopify:section:select', this._onSelect.bind(this))\n      .on('shopify:section:deselect', this._onDeselect.bind(this))\n      .on('shopify:block:select', this._onBlockSelect.bind(this))\n      .on('shopify:block:deselect', this._onBlockDeselect.bind(this));\n  };\n  \n  theme.Sections.prototype = $.extend({}, theme.Sections.prototype, {\n    createInstance: function(container, constructor, customScope) {\n      var $container = $(container);\n      var id = $container.attr('data-section-id');\n      var type = $container.attr('data-section-type');\n  \n      constructor = constructor || this.constructors[type];\n  \n      if (typeof constructor === 'undefined') {\n        return;\n      }\n  \n      // If custom scope passed, check to see if instance\n      // is already initialized so we don't double up\n      if (customScope) {\n        var instanceExists = this._findInstance(id);\n        if (instanceExists) {\n          return;\n        }\n      }\n  \n      var instance = $.extend(new constructor(container), {\n        id: id,\n        type: type,\n        container: container\n      });\n  \n      this.instances.push(instance);\n    },\n  \n    _onSectionLoad: function(evt, subSection, subSectionId) {\n      if (AOS) {\n        AOS.refreshHard();\n      }\n      var container = subSection ? subSection : $('[data-section-id]', evt.target)[0];\n  \n      if (!container) {\n        return;\n      }\n  \n      this.createInstance(container);\n  \n      var instance = subSection ? subSectionId : this._findInstance(evt.detail.sectionId);\n  \n      if (!subSection) {\n        this._loadSubSections();\n      }\n  \n      // Run JS only in case of the section being selected in the editor\n      // before merchant clicks \"Add\"\n      if (instance && typeof instance.onLoad === 'function') {\n        instance.onLoad(evt);\n      }\n    },\n  \n    _loadSubSections: function() {\n      if (AOS) {\n        AOS.refreshHard();\n      }\n      $('[data-subsection]').each(function(evt, el) {\n        this._onSectionLoad(null, el, $(el).data('section-id'));\n      }.bind(this));\n    },\n  \n    _onSectionUnload: function(evt) {\n      var instance = this._removeInstance(evt.detail.sectionId);\n      if (instance && typeof instance.onUnload === 'function') {\n        instance.onUnload(evt);\n      }\n    },\n  \n    _onSelect: function(evt) {\n      var instance = this._findInstance(evt.detail.sectionId);\n  \n      if (instance && typeof instance.onSelect === 'function') {\n        instance.onSelect(evt);\n      }\n    },\n  \n    _onDeselect: function(evt) {\n      var instance = this._findInstance(evt.detail.sectionId);\n  \n      if (instance && typeof instance.onDeselect === 'function') {\n        instance.onDeselect(evt);\n      }\n    },\n  \n    _onBlockSelect: function(evt) {\n      var instance = this._findInstance(evt.detail.sectionId);\n  \n      if (instance && typeof instance.onBlockSelect === 'function') {\n        instance.onBlockSelect(evt);\n      }\n    },\n  \n    _onBlockDeselect: function(evt) {\n      var instance = this._findInstance(evt.detail.sectionId);\n  \n      if (instance && typeof instance.onBlockDeselect === 'function') {\n        instance.onBlockDeselect(evt);\n      }\n    },\n  \n    _findInstance: function(id) {\n      for (var i = 0; i < this.instances.length; i++) {\n        if (this.instances[i].id === id) {\n          return this.instances[i];\n        }\n      }\n    },\n  \n    _removeInstance: function(id) {\n      var i = this.instances.length;\n      var instance;\n  \n      while(i--) {\n        if (this.instances[i].id === id) {\n          instance = this.instances[i];\n          this.instances.splice(i, 1);\n          break;\n        }\n      }\n  \n      return instance;\n    },\n  \n    register: function(type, constructor, $scope) {\n      var afterLoad = false;\n      this.constructors[type] = constructor;\n      var $sections = $('[data-section-type=' + type + ']');\n  \n      if ($scope) {\n        $sections = $('[data-section-type=' + type + ']', $scope);\n      }\n  \n      $sections.each(function(index, container) {\n        this.createInstance(container, constructor, $scope);\n      }.bind(this));\n    }\n  });\n  \n  \n  /**\n   * Currency Helpers\n   * -----------------------------------------------------------------------------\n   * A collection of useful functions that help with currency formatting\n   *\n   * Current contents\n   * - formatMoney - Takes an amount in cents and returns it as a formatted dollar value.\n   *\n   * Alternatives\n   * - Accounting.js - http://openexchangerates.github.io/accounting.js/\n   *\n   */\n  \n  theme.Currency = (function() {\n    var moneyFormat = '$';\n  \n    function formatMoney(cents, format) {\n      if (typeof cents === 'string') {\n        cents = cents.replace('.', '');\n      }\n      var value = '';\n      var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n      var formatString = (format || moneyFormat);\n  \n      function formatWithDelimiters(number, precision, thousands, decimal) {\n        precision = slate.utils.defaultTo(precision, 2);\n        thousands = slate.utils.defaultTo(thousands, ',');\n        decimal = slate.utils.defaultTo(decimal, '.');\n  \n        if (isNaN(number) || number == null) {\n          return 0;\n        }\n  \n        number = (number / 100.0).toFixed(precision);\n  \n        var parts = number.split('.');\n        var dollarsAmount = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands);\n        var centsAmount = parts[1] ? (decimal + parts[1]) : '';\n  \n        return dollarsAmount + centsAmount;\n      }\n  \n      switch (formatString.match(placeholderRegex)[1]) {\n        case 'amount':\n          value = formatWithDelimiters(cents, 2);\n          break;\n        case 'amount_no_decimals':\n          value = formatWithDelimiters(cents, 0);\n          break;\n        case 'amount_with_comma_separator':\n          value = formatWithDelimiters(cents, 2, '.', ',');\n          break;\n        case 'amount_no_decimals_with_comma_separator':\n          value = formatWithDelimiters(cents, 0, '.', ',');\n          break;\n        case 'amount_no_decimals_with_space_separator':\n          value = formatWithDelimiters(cents, 0, ' ');\n          break;\n      }\n  \n      return formatString.replace(placeholderRegex, value);\n    }\n  \n    return {\n      formatMoney: formatMoney\n    }\n  })();\n  \n  \n  /**\n   * Image Helper Functions\n   * -----------------------------------------------------------------------------\n   * A collection of functions that help with basic image operations.\n   *\n   */\n  \n  theme.Images = (function() {\n  \n    /**\n     * Find the Shopify image attribute size\n     *\n     * @param {string} src\n     * @returns {null}\n     */\n    function imageSize(src) {\n      if (!src) {\n        return '620x'; // default based on theme\n      }\n  \n      var match = src.match(/.+_((?:pico|icon|thumb|small|compact|medium|large|grande)|\\d{1,4}x\\d{0,4}|x\\d{1,4})[_\\.@]/);\n  \n      if (match !== null) {\n        return match[1];\n      } else {\n        return null;\n      }\n    }\n  \n    /**\n     * Adds a Shopify size attribute to a URL\n     *\n     * @param src\n     * @param size\n     * @returns {*}\n     */\n    function getSizedImageUrl(src, size) {\n      if (size == null) {\n        return src;\n      }\n  \n      if (size === 'master') {\n        return this.removeProtocol(src);\n      }\n  \n      var match = src.match(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n  \n      if (match != null) {\n        var prefix = src.split(match[0]);\n        var suffix = match[0];\n  \n        return this.removeProtocol(prefix[0] + '_' + size + suffix);\n      }\n  \n      return null;\n    }\n  \n    function removeProtocol(path) {\n      return path.replace(/http(s)?:/, '');\n    }\n  \n    return {\n      imageSize: imageSize,\n      getSizedImageUrl: getSizedImageUrl,\n      removeProtocol: removeProtocol\n    };\n  })();\n  \n  slate.Variants = (function() {\n  \n    function Variants(options) {\n      this.$container = options.$container;\n      this.variants = options.variants;\n      this.singleOptionSelector = options.singleOptionSelector;\n      this.originalSelectorId = options.originalSelectorId;\n      this.enableHistoryState = options.enableHistoryState;\n      this.currentVariant = this._getVariantFromOptions();\n  \n      $(this.singleOptionSelector, this.$container).on('change', this._onSelectChange.bind(this));\n    }\n  \n    Variants.prototype = $.extend({}, Variants.prototype, {\n  \n      _getCurrentOptions: function() {\n        var currentOptions = $.map($(this.singleOptionSelector, this.$container), function(element) {\n          var $element = $(element);\n          var type = $element.attr('type');\n          var currentOption = {};\n  \n          if (type === 'radio' || type === 'checkbox') {\n            if ($element[0].checked) {\n              currentOption.value = $element.val();\n              currentOption.index = $element.data('index');\n  \n              return currentOption;\n            } else {\n              return false;\n            }\n          } else {\n            currentOption.value = $element.val();\n            currentOption.index = $element.data('index');\n  \n            return currentOption;\n          }\n        });\n  \n        // remove any unchecked input values if using radio buttons or checkboxes\n        currentOptions = this._compact(currentOptions);\n  \n        return currentOptions;\n      },\n  \n      _getVariantFromOptions: function() {\n        var selectedValues = this._getCurrentOptions();\n        var variants = this.variants;\n        var found = false;\n  \n        variants.forEach(function(variant) {\n          var match = true;\n          var options = variant.options;\n  \n          selectedValues.forEach(function(option) {\n            // console.log('try to match ' + option.value + ' with ' + variant[option.index]);\n  \n            if (match) {\n              match = (variant[option.index] === option.value);\n            }\n          });\n  \n          if (match) {\n            found = variant;\n          }\n        });\n  \n        return found || null;\n      },\n  \n      _onSelectChange: function() {\n        var variant = this._getVariantFromOptions();\n  \n        this.$container.trigger({\n          type: 'variantChange',\n          variant: variant\n        });\n  \n        if (!variant) {\n          return;\n        }\n  \n        this._updateMasterSelect(variant);\n        this._updateImages(variant);\n        this._updatePrice(variant);\n        this._updateSKU(variant);\n        this.currentVariant = variant;\n  \n        if (this.enableHistoryState) {\n          this._updateHistoryState(variant);\n        }\n      },\n  \n      _updateImages: function(variant) {\n        var variantImage = variant.featured_image || {};\n        var currentVariantImage = this.currentVariant.featured_image || {};\n  \n        if (!variant.featured_image || variantImage.src === currentVariantImage.src) {\n          return;\n        }\n  \n        this.$container.trigger({\n          type: 'variantImageChange',\n          variant: variant\n        });\n      },\n  \n      _updatePrice: function(variant) {\n        if (variant.price === this.currentVariant.price && variant.compare_at_price === this.currentVariant.compare_at_price) {\n          return;\n        }\n  \n        this.$container.trigger({\n          type: 'variantPriceChange',\n          variant: variant\n        });\n      },\n  \n      _updateSKU: function(variant) {\n        if (variant.sku === this.currentVariant.sku) {\n          return;\n        }\n  \n        this.$container.trigger({\n          type: 'variantSKUChange',\n          variant: variant\n        });\n      },\n  \n      _updateHistoryState: function(variant) {\n        if (!history.replaceState || !variant) {\n          return;\n        }\n  \n        var newurl = window.location.protocol + '//' + window.location.host + window.location.pathname + '?variant=' + variant.id;\n        window.history.replaceState({path: newurl}, '', newurl);\n      },\n  \n      _updateMasterSelect: function(variant) {\n        $(this.originalSelectorId, this.$container).val(variant.id);\n      },\n  \n      // _.compact from lodash\n      // https://github.com/lodash/lodash/blob/4d4e452ade1e78c7eb890968d851f837be37e429/compact.js\n      _compact: function(array) {\n        var index = -1,\n            length = array == null ? 0 : array.length,\n            resIndex = 0,\n            result = [];\n  \n        while (++index < length) {\n          var value = array[index];\n          if (value) {\n            result[resIndex++] = value;\n          }\n        }\n        return result;\n      }\n    });\n  \n    return Variants;\n  })();\n  \n  slate.rte = {\n    init: function() {\n      slate.rte.wrapTable();\n      slate.rte.wrapVideo();\n      slate.rte.imageLinks();\n    },\n  \n    wrapTable: function() {\n      $('.rte table').wrap('<div class=\"table-wrapper\"></div>');\n    },\n  \n    wrapVideo: function() {\n      var $iframeVideo = $('.rte iframe[src*=\"youtube.com/embed\"], .rte iframe[src*=\"player.vimeo\"]');\n      var $iframeReset = $iframeVideo.add('iframe#admin_bar_iframe');\n  \n      $iframeVideo.each(function () {\n        // Add wrapper to make video responsive\n        if (!$(this).parents('.video-wrapper').length) {\n          $(this).wrap('<div class=\"video-wrapper\"></div>');\n        }\n      });\n  \n      $iframeReset.each(function () {\n        // Re-set the src attribute on each iframe after page load\n        // for Chrome's \"incorrect iFrame content on 'back'\" bug.\n        // https://code.google.com/p/chromium/issues/detail?id=395791\n        // Need to specifically target video and admin bar\n        this.src = this.src;\n      });\n    },\n  \n    // Remove CSS that adds animated underline under image links\n    imageLinks: function() {\n      $('.rte a img').parent().addClass('rte__image');\n    }\n  };\n  \n\n  theme.Modals = (function() {\n    function Modal(id, name, options) {\n      var defaults = {\n        close: '.js-modal-close',\n        open: '.js-modal-open-' + name,\n        openClass: 'modal--is-active',\n        closingClass: 'modal--is-closing',\n        bodyOpenClass: 'modal-open',\n        bodyOpenSolidClass: 'modal-open--solid',\n        bodyClosingClass: 'modal-closing',\n        closeOffContentClick: true\n      };\n  \n      this.id = id;\n      this.$modal = $('#' + id);\n  \n      if (!this.$modal.length) {\n        return false;\n      }\n  \n      this.nodes = {\n        $parent: $('html').add('body'),\n        $modalContent: this.$modal.find('.modal__inner')\n      };\n  \n      this.config = $.extend(defaults, options);\n      this.modalIsOpen = false;\n      this.$focusOnOpen = this.config.focusOnOpen ? $(this.config.focusOnOpen) : this.$modal;\n      this.isSolid = this.config.solid;\n  \n      this.init();\n    }\n  \n    Modal.prototype.init = function() {\n      var $openBtn = $(this.config.open);\n  \n      // Add aria controls\n      $openBtn.attr('aria-expanded', 'false');\n  \n      $(this.config.open).on('click', this.open.bind(this));\n      this.$modal.find(this.config.close).on('click', this.close.bind(this));\n  \n      // Close modal if a drawer is opened\n      $('body').on('drawerOpen', function() {\n        this.close();\n      }.bind(this));\n    };\n  \n    Modal.prototype.open = function(evt) {\n      // Keep track if modal was opened from a click, or called by another function\n      var externalCall = false;\n  \n      // don't open an opened modal\n      if (this.modalIsOpen) {\n        return;\n      }\n  \n      // Prevent following href if link is clicked\n      if (evt) {\n        evt.preventDefault();\n      } else {\n        externalCall = true;\n      }\n  \n      // Without this, the modal opens, the click event bubbles up to $nodes.page\n      // which closes the modal.\n      if (evt && evt.stopPropagation) {\n        evt.stopPropagation();\n        // save the source of the click, we'll focus to this on close\n        this.$activeSource = $(evt.currentTarget);\n      }\n  \n      if (this.modalIsOpen && !externalCall) {\n        this.close();\n      }\n  \n      this.$modal\n        .prepareTransition()\n        .addClass(this.config.openClass);\n      this.nodes.$parent.addClass(this.config.bodyOpenClass);\n  \n      if (this.isSolid) {\n        this.nodes.$parent.addClass(this.config.bodyOpenSolidClass);\n      }\n  \n      this.modalIsOpen = true;\n  \n      slate.a11y.trapFocus({\n        $container: this.$modal,\n        $elementToFocus: this.$focusOnOpen,\n        namespace: 'modal_focus'\n      });\n  \n      if (this.$activeSource && this.$activeSource.attr('aria-expanded')) {\n        this.$activeSource.attr('aria-expanded', 'true');\n      }\n  \n      $('body')\n        .trigger('modalOpen')\n        .trigger('modalOpen.' + this.id);\n  \n      this.bindEvents();\n    };\n  \n    Modal.prototype.close = function() {\n      // don't close a closed modal\n      if (!this.modalIsOpen) {\n        return;\n      }\n  \n      // deselect any focused form elements\n      $(document.activeElement).trigger('blur');\n  \n      this.$modal\n        .prepareTransition()\n        .removeClass(this.config.openClass)\n        .addClass(this.config.closingClass);\n      this.nodes.$parent.removeClass(this.config.bodyOpenClass);\n      this.nodes.$parent.addClass(this.config.bodyClosingClass);\n      var o = this;\n      window.setTimeout(function() {\n        o.nodes.$parent.removeClass(o.config.bodyClosingClass);\n        o.$modal.removeClass(o.config.closingClass);\n      }, 500); // modal close css transition\n  \n      if (this.isSolid) {\n        this.nodes.$parent.removeClass(this.config.bodyOpenSolidClass);\n      }\n  \n      this.modalIsOpen = false;\n  \n      slate.a11y.removeTrapFocus({\n        $container: this.$modal,\n        namespace: 'modal_focus'\n      });\n  \n      if (this.$activeSource && this.$activeSource.attr('aria-expanded')) {\n        this.$activeSource.attr('aria-expanded', 'false').focus();\n      }\n  \n      $('body').trigger('modalClose.' + this.id);\n  \n      this.unbindEvents();\n    };\n  \n    Modal.prototype.bindEvents = function() {\n      // Pressing escape closes modal\n      this.nodes.$parent.on('keyup.modal', function(evt) {\n        if (evt.keyCode === 27) {\n          this.close();\n        }\n      }.bind(this));\n  \n      if (this.config.closeOffContentClick) {\n        // Clicking outside of the modal content also closes it\n        this.$modal.on('click.modal', this.close.bind(this));\n  \n        // Exception to above: clicking anywhere on the modal content will NOT close it\n        this.nodes.$modalContent.on('click.modal', function(evt) {\n          evt.stopImmediatePropagation();\n        });\n      }\n    };\n  \n    Modal.prototype.unbindEvents = function() {\n      this.nodes.$parent.off('.modal');\n  \n      if (this.config.closeOffContentClick) {\n        this.$modal.off('.modal');\n        this.nodes.$modalContent.off('.modal');\n      }\n    };\n  \n    return Modal;\n  })();\n  \n  theme.Drawers = (function() {\n\tvar drawername = \"\";\n\tvar drawerid = \"\";\n    function Drawer(id, name, ignoreScrollLock) {\n      this.config = {\n        id: id,\n        close: '.js-drawer-close',\n        open: '.js-drawer-open-' + name,\n        openClass: 'js-drawer-open',\n        closingClass: 'js-drawer-closing',\n        activeDrawer: 'drawer--is-open',\n        namespace: '.drawer-' + name\n      };\n      \n      drawername = name;\n      drawerid = id;\n  \n      this.$nodes = {\n        parent: $(document.documentElement).add('body'),\n        page: $('#MainContent')\n      };\n  \n      this.$drawer = $('#' + id);\n  \n      if (!this.$drawer.length) {\n        return false;\n      }\n  \n      this.isOpen = false;\n      this.ignoreScrollLock = ignoreScrollLock;\n      this.init();\n    };\n  \n    Drawer.prototype = $.extend({}, Drawer.prototype, {\n      init: function() {\n        var $openBtn = $(this.config.open);\n  \n        // Add aria controls\n        $openBtn.attr('aria-expanded', 'false');\n  \n        $openBtn.on('click', this.open.bind(this));\n        this.$drawer.find(this.config.close).on('click', this.close.bind(this));\n  \n        // Close modal if a drawer is opened\n        $('body').on('modalOpen', function() {\n          this.close();\n        }.bind(this));\n      },\n  \n      open: function(evt) {\n        if (evt) {\n          evt.preventDefault();\n        }\n  \n        if (this.isOpen) {\n          return;\n        }\n  \n        // Without this the drawer opens, the click event bubbles up to $nodes.page which closes the drawer.\n        if (evt && evt.stopPropagation) {\n          evt.stopPropagation();\n          // save the source of the click, we'll focus to this on close\n          this.$activeSource = $(evt.currentTarget);\n        }\n  \n        this.$drawer.prepareTransition().addClass(this.config.activeDrawer);\n  \n        //this.$nodes.parent.addClass(this.config.openClass);\n\t\t//Timmy\n        if(typeof evt !== \"undefined\"){\n        \tthis.$nodes.parent.addClass(this.config.openClass);\n        }\n        this.isOpen = true;\n  \n        //Timmy remove scroll to top after add to bag\n        /*slate.a11y.trapFocus({\n          $container: this.$drawer,\n          namespace: 'drawer_focus'\n        });*/\n  \n        $('body')\n          .trigger('drawerOpen')\n          .trigger('drawerOpen.' + this.config.id);\n  \n        if (this.$activeSource && this.$activeSource.attr('aria-expanded')) {\n          this.$activeSource.attr('aria-expanded', 'true');\n        }\n  \n        this.bindEvents();\n      },\n  \n      close: function() {\n        if (!this.isOpen) {\n          return;\n        }\n  \n        // deselect any focused form elements\n        $(document.activeElement).trigger('blur');\n  \n        this.$drawer.prepareTransition().removeClass(this.config.activeDrawer);\n  \n        this.$nodes.parent.removeClass(this.config.openClass);\n        this.$nodes.parent.addClass(this.config.closingClass);\n        var o = this;\n        window.setTimeout(function() {\n          o.$nodes.parent.removeClass(o.config.closingClass);\n        }, 500);\n  \n        this.isOpen = false;\n  \n        slate.a11y.removeTrapFocus({\n          $container: this.$drawer,\n          namespace: 'drawer_focus'\n        });\n  \n        if (this.$activeSource && this.$activeSource.attr('aria-expanded')) {\n          this.$activeSource.attr('aria-expanded', 'false');\n        }\n  \n        this.unbindEvents();\n      },\n  \n      bindEvents: function() {\n        if (!this.ignoreScrollLock) {\n          slate.a11y.lockMobileScrolling(this.config.namespace, this.$nodes.page);\n        }\n  \n        // Clicking out of drawer closes it.\n        // Check to see if clicked on element in drawer\n        // because of any drawer built witin #MainContent\n        this.$nodes.page.on('click' + this.config.namespace, function (evt) {\n          var $target = $(evt.target);\n          var doNotClose = this.elementInsideDrawer($target);\n          if (!doNotClose) {\n            this.close();\n            return false;\n          }\n  \n        }.bind(this));\n  \n        // Pressing escape closes drawer\n        this.$nodes.parent.on('keyup' + this.config.namespace, function(evt) {\n          if (evt.keyCode === 27) {\n            this.close();\n          }\n        }.bind(this));\n      },\n  \n      unbindEvents: function() {\n        if (!this.ignoreScrollLock) {\n          slate.a11y.unlockMobileScrolling(this.config.namespace, this.$nodes.page);\n        }\n        this.$nodes.parent.off(this.config.namespace);\n        this.$nodes.page.off(this.config.namespace);\n      },\n  \n      // Check if clicked element is inside the drawer\n      elementInsideDrawer: function($el) {\n        return this.$drawer.find($el).length;\n      }\n    });\n  \n    return Drawer;\n  })();\n  \n  theme.cart = {\n    getCart: function() {\n      return $.getJSON('/cart.js');\n    },\n  \n    changeItem: function(key, qty) {\n      return this._updateCart({\n        type: 'POST',\n        url: '/cart/change.js',\n        data: 'quantity=' + qty + '&id=' + key,\n        dataType: 'json'\n      });\n    },\n  \n    addItemFromForm: function(data) {\n      if(peValidateVIP()){data = data + \"&properties[vip]=true\";}\n    \t\n      return this._updateCart({\n        type: 'POST',\n        url: '/cart/add.js',\n        data: data,\n        dataType: 'json'\n      });\n    },\n  \n    _updateCart: function(params) {\n      return $.ajax(params)\n        .then(function(cart) {\n          return cart;\n        }.bind(this))\n    },\n  \n    updateNote: function(note) {\n      var params = {\n        type: 'POST',\n        url: '/cart/update.js',\n        data: 'note=' + theme.cart.attributeToString(note),\n        dataType: 'json',\n        success: function(cart) {},\n        error: function(XMLHttpRequest, textStatus) {}\n      };\n  \n      $.ajax(params);\n    },\n  \n    updateCurrency: function(code) {\n      var params = {\n        type: 'POST',\n        url: '/cart/update.js',\n        data: 'currency=' + code,\n        dataType: 'json',\n        success: function(cart) {\n          location.reload(); // required for multi-currency feature to update\n        },\n        error: function(XMLHttpRequest, textStatus) {}\n      };\n  \n      $.ajax(params);\n    },\n  \n    attributeToString: function(attribute) {\n      if ((typeof attribute) !== 'string') {\n        attribute += '';\n        if (attribute === 'undefined') {\n          attribute = '';\n        }\n      }\n      return $.trim(attribute);\n    }\n  }\n  \n  $(function() {\n    // Add a loading indicator on the cart checkout button (/cart and drawer)\n    $('body').on('click', '.cart__checkout', function() {\n      $(this).addClass('btn--loading');\n    });\n  \n    $('body').on('change', 'textarea[name=\"note\"]', function() {\n      var newNote = $(this).val();\n      theme.cart.updateNote(newNote);\n    });\n  \n  \n    // Custom JS to prevent checkout without confirming terms and conditions\n    $('body').on('click', '.cart__checkout--ajax', function(evt) {\n      if ($('#CartAgree').is(':checked')) {\n      } else {\n        alert(theme.strings.cartTermsConfirmation);\n        $(this).removeClass('btn--loading');\n        return false;\n      }\n    });\n  \n    $('body').on('click', '.cart__checkout--page', function(evt) {\n      if ($('#CartPageAgree').is(':checked')) {\n      } else {\n        alert(theme.strings.cartTermsConfirmation);\n        $(this).removeClass('btn--loading');\n        return false;\n      }\n    });\n  });\n  \n  theme.QtySelector = (function() {\n    var classes = {\n      input: '.js-qty__num',\n      plus: '.js-qty__adjust--plus',\n      minus: '.js-qty__adjust--minus'\n    };\n  \n    function QtySelector($el, options) {\n      this.$wrapper = $el;\n      this.$input = $el.find(classes.input);\n      this.$plus = $el.find(classes.plus);\n      this.$minus = $el.find(classes.minus);\n      this.minValue = this.$input.attr('min') || 1;\n  \n      var defaults = {\n        namespace: null,\n        key: this.$input.data('id')\n      };\n  \n      this.options = $.extend(defaults, options);\n  \n      this.initEventListeners();\n    };\n  \n    QtySelector.prototype = $.extend({}, QtySelector.prototype, {\n      initEventListeners: function() {\n        this.$plus.on('click', function() {\n          var qty = this.validateQty(this.$input.val());\n          this.addQty(qty);\n        }.bind(this));\n  \n        this.$minus.on('click', function() {\n          var qty = this.validateQty(this.$input.val());\n          this.subtractQty(qty);\n        }.bind(this));\n  \n        this.$input.on('change', function() {\n          var qty = this.validateQty(this.$input.val());\n          this.changeQty(qty);\n        }.bind(this));\n      },\n  \n      addQty: function(number) {\n        var qty = number + 1;\n        this.changeQty(qty);\n      },\n  \n      subtractQty: function(number) {\n        var qty = number - 1;\n        if (qty <= this.minValue) {\n          qty = this.minValue;\n        }\n        this.changeQty(qty);\n      },\n  \n      changeQty: function(qty) {\n        this.$input.val(qty);\n        $('body').trigger('qty' + this.options.namespace, [this.options.key, qty]);\n      },\n  \n      validateQty: function(number) {\n        if((parseFloat(number) == parseInt(number)) && !isNaN(number)) {\n          // We have a valid number!\n        } else {\n          // Not a number. Default to 1.\n          number = 1;\n        }\n        return parseInt(number);\n      }\n    });\n  \n    return QtySelector;\n  })();\n  \n  theme.CartDrawer = (function() {\n    var config = {\n      namespace: '.ajaxcart'\n    };\n  \n    var selectors = {\n      drawer: '#CartDrawer',\n      container: '#CartContainer',\n      template: '#CartTemplate',\n      fixedFooter: '.drawer__footer--fixed',\n      fixedInnerContent: '.drawer__inner--has-fixed-footer',\n      cartBubble: '.cart-link__bubble'\n    };\n  \n    function CartDrawer() {\n      this.status = {\n        loaded: false,\n        loading: false\n      };\n  \n      this.drawer = new theme.Drawers('CartDrawer', 'cart');\n  \n      // Prep handlebars template\n      var source = $(selectors.template).html();\n      this.template = Handlebars.compile(source);\n  \n      // Build cart on page load so it's ready in the drawer\n      theme.cart.getCart().then(this.buildCart.bind(this));\n  \n      this.initEventListeners();\n    };\n  \n    CartDrawer.prototype = $.extend({}, CartDrawer.prototype, {\n      initEventListeners: function() {\n        $('body').on('updateCart' + config.namespace, this.initQtySelectors.bind(this));\n        $('body').on('updateCart' + config.namespace, this.sizeFooter.bind(this));\n        $('body').on('updateCart' + config.namespace, this.updateCartNotification.bind(this));\n        $('body').on('drawerOpen.CartDrawer', this.sizeFooter.bind(this));\n  \n        $(window).on('resize' + config.namespace, $.debounce(150, this.sizeFooter.bind(this)));\n  \n        $('body').on('added.ajaxProduct', function() {\n          theme.cart.getCart().then(function(cart) {\n            this.buildCart(cart, true);\n          }.bind(this));\n        }.bind(this));\n      },\n  \n      buildCart: function(cart, openDrawer) {\n        this.loading(true);\n        this.emptyCart();\n  \n        if (cart.item_count === 0) {\n          $(selectors.container).append('<p class=\"appear-animation appear-delay-3\">' + theme.strings.cartEmpty +'</p>');\n        } else {\n          var items = [];\n          var item = {};\n          var data = {};\n          var animation_row = 1;\n  \n          $.each(cart.items, function(index, product) {\n  \n            var prodImg;\n            if (product.image !== null) {\n              prodImg = product.image.replace(/(\\.[^.]*)$/, \"_180x$1\");\n            } else {\n              prodImg = '//cdn.shopify.com/s/assets/admin/no-image-medium-cc9732cb976dd349a0df1d39816fbcc7.gif';\n            }\n  \n            if (product.properties !== null) {\n              $.each(product.properties, function(key, value) {\n                if (key.charAt(0) === '_' || !value) {\n                   delete product.properties[key];\n                 }\n              });\n            }\n  \n            // If we have line-item discount, add formattedAmount to discount object\n            var amount = 0;\n            if (product.line_level_discount_allocations.length !== 0) {\n              for (var discount in product.line_level_discount_allocations) {\n                amount = product.line_level_discount_allocations[discount].amount;\n  \n                product.line_level_discount_allocations[discount].formattedAmount = theme.Currency.formatMoney(amount, theme.settings.moneyFormat);\n              }\n            }\n  \n            animation_row+=2;\n  \n            item = {\n        \t\tkey: product.key,\n        \t\turl: product.url,\n        \t\timg: prodImg,\n        \t\tanimationRow: animation_row,\n        \t\tname: product.product_title,\n        \t\tvariation: product.variant_title,\n        \t\tproperties: product.properties,\n        \t\titemQty: product.quantity,\n        \t\tprice: theme.Currency.formatMoney(product.price, theme.settings.moneyFormat),\n        \t\tdiscountedPrice: theme.Currency.formatMoney((product.price - (product.total_discount/product.quantity)), theme.settings.moneyFormat),\n        \t\tdiscounts: product.line_level_discount_allocations,\n        \t\tdiscountsApplied: product.line_level_discount_allocations.length === 0 ? false : true,\n        \t\tvendor: product.vendor,\n        \t\tvipprice: theme.Currency.formatMoney(product.price * 0.7, theme.settings.moneyFormat)\n        \t};\n  \n            items.push(item);\n          });\n  \n          animation_row+=2;\n  \n          // If we have cart discount, add a formattedAmount to the discount object\n          var cartAmount = 0;\n          if (cart.cart_level_discount_applications.length !== 0) {\n            for (var cartDiscount in cart.cart_level_discount_applications) {\n              cartAmount = cart.cart_level_discount_applications[cartDiscount].total_allocated_amount;\n  \n              cart.cart_level_discount_applications[cartDiscount].formattedAmount = theme.Currency.formatMoney(cartAmount,theme.settings.moneyFormat);\n            }\n          }\n  \n          data = {\n\t\t\titems: items,\n\t\t\tnote: cart.note,\n\t\t\tlastAnimationRow: animation_row,\n\t\t\tcartDiscounts: cart.cart_level_discount_applications,\n\t\t\tcartDiscountsApplied: cart.cart_level_discount_applications.length === 0 ? false : true,\n\t\t\ttotalPrice: theme.Currency.formatMoney(cart.total_price, theme.settings.moneyFormat),\n\t\t\tviptotalPrice: theme.Currency.formatMoney(cart.total_price * 0.7, theme.settings.moneyFormat)\n\t\t  };\n  \n          $(selectors.container).append(this.template(data));\n        }\n  \n        this.status.loaded = true;\n        this.loading(false);\n  \n        if (theme.settings.currenciesEnabled) {\n          theme.currencySwitcher.ajaxrefresh();\n        }\n  \n        $('body').trigger('updateCart' + config.namespace, cart);\n  \n        if (window.Shopify && Shopify.StorefrontExpressButtons) {\n          Shopify.StorefrontExpressButtons.initialize();\n  \n          // Resize footer after arbitrary delay for buttons to load\n          setTimeout(function() {\n            this.sizeFooter();\n          }.bind(this), 800);\n        }\n  \n        // If specifically asked, open the cart drawer (only happens after product added from form)\n        if (openDrawer === true) {\n          this.drawer.open();\n        }\n      },\n  \n      initQtySelectors: function() {\n        $(selectors.container).find('.js-qty__wrapper').each(function(index, el) {\n          var selector = new theme.QtySelector($(el), {\n            namespace: '.cart-drawer'\n          });\n        }.bind(this));\n  \n        $('body').on('qty.cart-drawer', this.updateItem.bind(this));\n      },\n  \n      updateItem: function(evt, key, qty) {\n        if (this.status.loading) {\n          return;\n        }\n  \n        this.loading(true);\n  \n        theme.cart.changeItem(key, qty)\n          .then(function(cart) {\n            this.updateSuccess(cart);\n          }.bind(this))\n          .catch(function(XMLHttpRequest) {\n            this.updateError(XMLHttpRequest)\n          }.bind(this))\n          .always(function() {\n            this.loading(false);\n          }.bind(this));\n      },\n  \n      loading: function(state) {\n        this.status.loading = state;\n  \n        if (state) {\n          $(selectors.container).addClass('is-loading');\n        } else {\n          $(selectors.container).removeClass('is-loading');\n        }\n      },\n  \n      emptyCart: function() {\n        $(selectors.container).empty();\n      },\n  \n      updateSuccess: function(cart) {\n        this.buildCart(cart)\n      },\n  \n      updateError: function(XMLHttpRequest) {\n        if (XMLHttpRequest.responseJSON && XMLHttpRequest.responseJSON.description) {\n          console.warn(XMLHttpRequest.responseJSON.description);\n        }\n      },\n  \n      // Update elements after cart is updated\n      sizeFooter: function() {\n        // Stop if our drawer doesn't have a fixed footer\n        if (!$(selectors.drawer).hasClass('drawer--has-fixed-footer')) {\n          return;\n        }\n  \n        // Elements are reprinted regularly so selectors are not cached\n        var $cartFooter = $(selectors.drawer).find(selectors.fixedFooter).removeAttr('style');\n        var $cartInner = $(selectors.drawer).find(selectors.fixedInnerContent).removeAttr('style');\n        var cartFooterHeight = $cartFooter.outerHeight();\n  \n        $cartInner.css('bottom', cartFooterHeight);\n        $cartFooter.css('height', cartFooterHeight);\n      },\n  \n      updateCartNotification: function(evt, cart) {\n        if (cart.items.length > 0) {\n          $(selectors.cartBubble).addClass('cart-link__bubble--visible');\n          //Timmy\n          $('.cart-link__bubble').html(cart.item_count);\n        } else {\n          $(selectors.cartBubble).removeClass('cart-link__bubble--visible');\n        }\n      }\n    });\n  \n    return CartDrawer;\n  })();\n  \n  theme.AjaxProduct = (function() {\n    var status = {\n      loading: false\n    };\n  \n    function ProductForm($form) {\n      this.$form = $form;\n      this.$addToCart = this.$form.find('.add-to-cart');\n  \n      if (this.$form.length) {\n        this.$form.on('submit', this.addItemFromForm.bind(this));\n      }\n    };\n  \n    ProductForm.prototype = $.extend({}, ProductForm.prototype, {\n      addItemFromForm: function(evt, callback){\n        evt.preventDefault();\n  \n        if (status.loading) {\n          return;\n        }\n  \n        // Loading indicator on add to cart button\n        this.$addToCart.addClass('btn--loading');\n  \n        status.loading = true;\n  \n        var data = this.$form.serialize();\n  \n        theme.cart.addItemFromForm(data)\n          .then(function(product) {\n            this.success(product);\n          }.bind(this))\n          .catch(function(XMLHttpRequest) {\n            this.error(XMLHttpRequest)\n          }.bind(this))\n          .always(function() {\n            status.loading = false;\n            this.$addToCart.removeClass('btn--loading');\n          }.bind(this));\n      },\n  \n      success: function(product) {\n        this.$form.find('.errors').remove();\n        $('body').trigger('added.ajaxProduct');\n        //Timmy\n        this.$form.find('.add-to-cart').addClass('atc-success-colour');\n        this.$form.find('.add-to-cart span').addClass(\"atc-success-msg\").html(\"Added to your bag\");\n        $(\".header-wrapper\").addClass(\"sticky-mobile-atc\");\n        $(\".cart-link__bubble\").addClass(\"cart-link__bubble-animate\");\n        setTimeout(function(){\n        \tif(!$('#CartDrawer').is(\":hover\")){\n        \t\t$('#MainContent').trigger(\"click\") //simulate close drawer click\n        \t}\n        }, 2500);\n        setTimeout(function(){\n        \t$('.atc-success-msg').html(\"Add to bag\").removeClass(\"atc-success-msg\")\n        \t$('.add-to-cart').removeClass('atc-success-colour');\n        \t$(\".cart-link__bubble\").removeClass('cart-link__bubble-animate');\n        }, 4000);\n      },\n  \n      error: function(XMLHttpRequest) {\n        this.$form.find('.errors').remove();\n  \n        if (XMLHttpRequest.responseJSON && XMLHttpRequest.responseJSON.description) {\n          console.warn(XMLHttpRequest.responseJSON.description);\n  \n          this.$form.prepend('<div class=\"errors text-center\">' + XMLHttpRequest.responseJSON.description + '</div>');\n        }\n      }\n    });\n  \n    return ProductForm;\n  })();\n  \n  theme.collapsibles = (function() {\n  \n    var selectors = {\n      trigger: '.collapsible-trigger',\n      module: '.collapsible-content',\n      moduleInner: '.collapsible-content__inner'\n    };\n  \n    var classes = {\n      hide: 'hide',\n      open: 'is-open',\n      autoHeight: 'collapsible--auto-height'\n    };\n  \n    var namespace = '.collapsible';\n  \n    var isTransitioning = false;\n  \n    function init() {\n      $(selectors.trigger).each(function() {\n        var $el = $(this);\n        var state = $el.hasClass(classes.open);\n        $el.attr('aria-expanded', state);\n      });\n  \n      // Event listeners (hack for modals)\n      $('body, .modal__inner')\n        .off(namespace)\n        .on('click' + namespace, selectors.trigger, function() {\n  \n        if (isTransitioning) {\n          return;\n        }\n  \n        isTransitioning = true;\n  \n        var $el = $(this);\n        var isOpen = $el.hasClass(classes.open);\n        var moduleId = $el.attr('aria-controls');\n        var $module = $('#' + moduleId);\n        var height = $module.find(selectors.moduleInner).outerHeight();\n        var isAutoHeight = $el.hasClass(classes.autoHeight);\n  \n        // If isAutoHeight, set the height to 0 just after setting the actual height\n        // so the closing animation works nicely\n        if (isOpen && isAutoHeight) {\n          setTimeout(function() {\n            height = 0;\n            setTransitionHeight($module, height, isOpen, isAutoHeight);\n          }, 0);\n        }\n  \n        if (isOpen && !isAutoHeight) {\n          height = 0;\n        }\n  \n        $el\n          .attr('aria-expanded', !isOpen)\n          .toggleClass(classes.open, !isOpen);\n  \n        setTransitionHeight($module, height, isOpen, isAutoHeight);\n      });\n    }\n  \n    function setTransitionHeight($module, height, isOpen, isAutoHeight) {\n      $module\n        .removeClass(classes.hide)\n        .prepareTransition()\n        .css('height', height)\n        .toggleClass(classes.open, !isOpen);\n  \n      if (!isOpen && isAutoHeight) {\n        var o = $module;\n        window.setTimeout(function() {\n          o.css('height','auto');\n          isTransitioning = false;\n        }, 350);\n      } else {\n        isTransitioning = false;\n      }\n    }\n  \n    return {\n      init: init\n    };\n  })();\n  \n  theme.headerNav = (function() {\n  \n    var $parent = $(document.documentElement).add('body');\n    var $page = $('#MainContent');\n    var selectors = {\n      wrapper: '.header-wrapper',\n      siteHeader: '.site-header',\n      searchBtn: '.js-search-header',\n      closeSearch: '.js-search-header-close',\n      searchContainer: '.site-header__search-container',\n      logoContainer: '.site-header__logo',\n      logo: '.site-header__logo img',\n      navigation: '.site-navigation',\n      navContainerWithLogo: '.header-item--logo',\n      navItems: '.site-nav__item',\n      navLinks: '.site-nav__link',\n      navLinksWithDropdown: '.site-nav__link--has-dropdown',\n      navDropdownLinks: '.site-nav__dropdown-link--second-level'\n    };\n  \n    var classes = {\n      hasDropdownClass: 'site-nav--has-dropdown',\n      hasSubDropdownClass: 'site-nav__deep-dropdown-trigger',\n      dropdownActive: 'is-focused',\n      overlaidBodyClass: 'overlaid-header'\n    };\n  \n    var config = {\n      namespace: '.siteNav',\n      wrapperOverlayed: false,\n      overlayedClass: 'is-light',\n      stickyEnabledClass: 'header-wrapper--sticky',\n      stickyEnabled: false,\n      stickyActive: false,\n      stickyClass: 'site-header--stuck',\n      openTransitionClass: 'site-header--opening',\n      lastScroll: 0\n    };\n  \n    // Elements used in resize functions, defined in init\n    var $window;\n    var $navContainerWithLogo;\n    var $logoContainer;\n    var $nav;\n    var $wrapper;\n    var $siteHeader;\n  \n    function init() {\n      $window = $(window);\n      $navContainerWithLogo = $(selectors.navContainerWithLogo);\n      $logoContainer = $(selectors.logoContainer);\n      $nav = $(selectors.navigation);\n      $wrapper = $(selectors.wrapper);\n      $siteHeader = $(selectors.siteHeader);\n  \n      config.wrapperOverlayed = theme.settings.overlayHeader = $wrapper.hasClass(config.overlayedClass);\n      config.stickyEnabled = $siteHeader.data('sticky');\n      if (config.stickyEnabled) {\n        theme.config.stickyHeader = true;\n        stickyHeader();\n      }\n  \n      if (config.wrapperOverlayed) {\n        $('body').addClass(classes.overlaidBodyClass);\n      }\n  \n      accessibleDropdowns();\n      searchDrawer();\n    }\n  \n    function unload() {\n      $(window).off(config.namespace);\n      $(selectors.searchBtn).off(config.namespace);\n      $(selectors.closeSearch).off(config.namespace);\n      $parent.off(config.namespace);\n      $(selectors.navLinks).off(config.namespace);\n      $(selectors.navDropdownLinks).off(config.namespace);\n    }\n  \n    function searchDrawer() {\n      $(selectors.searchBtn).on('click' + config.namespace, function(evt) {\n        evt.preventDefault();\n        openSearchDrawer();\n      });\n  \n      $(selectors.closeSearch).on('click' + config.namespace, function() {\n        closeSearchDrawer();\n      });\n    }\n  \n    function openSearchDrawer() {\n      $(selectors.searchContainer).addClass('is-active');\n      $parent.addClass('js-drawer-open js-drawer-open--search');\n  \n      slate.a11y.trapFocus({\n        $container: $(selectors.searchContainer),\n        namespace: 'header_search',\n        $elementToFocus: $(selectors.searchContainer).find('input')\n      });\n  \n      // If sticky is enabled, scroll to top on mobile when close to it\n      // so you don't get an invisible search box\n      if (theme.config.bpSmall && config.stickyEnabled && config.lastScroll < 300) {\n        window.scrollTo(0,0);\n      }\n  \n      // Bind events\n      slate.a11y.lockMobileScrolling(config.namespace);\n  \n      // Clicking out of container closes it\n      $page.on('click' + config.namespace, function () {\n        closeSearchDrawer();\n        return false;\n      });\n  \n      $parent.on('keyup' + config.namespace, function(evt) {\n        if (evt.keyCode === 27) {\n          closeSearchDrawer();\n        }\n      });\n    }\n  \n    function closeSearchDrawer() {\n      // deselect any focused form elements\n      $(document.activeElement).trigger('blur');\n  \n      $parent.removeClass('js-drawer-open js-drawer-open--search').off(config.namespace);\n      $(selectors.searchContainer).removeClass('is-active');\n  \n      slate.a11y.removeTrapFocus({\n        $container: $(selectors.searchContainer),\n        namespace: 'header_search'\n      });\n  \n      slate.a11y.unlockMobileScrolling(config.namespace);\n      $page.off('click' + config.namespace);\n      $parent.off('keyup' + config.namespace);\n    }\n  \n    function accessibleDropdowns() {\n      var hasActiveDropdown = false;\n      var hasActiveSubDropdown = false;\n      var closeOnClickActive = false;\n  \n      // Touch devices open dropdown on first click, navigate to link on second\n      if (theme.config.isTouch) {\n        $(selectors.navLinksWithDropdown).on('touchend' + config.namespace, function(evt) {\n          var $el = $(this);\n          var $parentItem = $el.parent();\n          if (!$parentItem.hasClass(classes.dropdownActive)) {\n            evt.preventDefault();\n            closeDropdowns();\n            openFirstLevelDropdown($el);\n          } else {\n            window.location.replace($el.attr('href'));\n          }\n        });\n  \n        $(selectors.navDropdownLinks).on('touchend' + config.namespace, function(evt) {\n          var $el = $(this);\n          var $parentItem = $el.parent();\n  \n          // Open third level menu or go to link based on active state\n          if ($parentItem.hasClass(classes.hasSubDropdownClass)) {\n            if (!$parentItem.hasClass(classes.dropdownActive)) {\n              evt.preventDefault();\n              closeThirdLevelDropdown();\n              openSecondLevelDropdown($el);\n            } else {\n              window.location.replace($el.attr('href'));\n            }\n          } else {\n            // No third level nav, go to link\n            window.location.replace($el.attr('href'));\n          }\n        });\n      }\n  \n      $(selectors.navLinks).on('focusin mouseover' + config.namespace, function() {\n        if (hasActiveDropdown) {\n          closeSecondLevelDropdown();\n        }\n  \n        if (hasActiveSubDropdown) {\n          closeThirdLevelDropdown();\n        }\n  \n        openFirstLevelDropdown($(this));\n      });\n  \n      // Force remove focus on sitenav links because focus sometimes gets stuck\n      $(selectors.navLinks).on('mouseleave' + config.namespace, function() {\n        closeSecondLevelDropdown();\n        closeThirdLevelDropdown();\n      });\n  \n      // Open/hide sub level dropdowns\n      $(selectors.navDropdownLinks).on('focusin' + config.namespace, function() {\n        if (hasActiveSubDropdown) {\n          closeThirdLevelDropdown();\n        }\n  \n        openSecondLevelDropdown($(this), true);\n      });\n  \n      // Private dropdown methods\n      function openFirstLevelDropdown($el) {\n        var $parentItem = $el.parent();\n        if ($parentItem.hasClass(classes.hasDropdownClass)) {\n          $parentItem.addClass(classes.dropdownActive);\n          hasActiveDropdown = true;\n        }\n  \n        if (!theme.config.isTouch) {\n          if (!closeOnClickActive) {\n            var eventType = theme.config.isTouch ? 'touchend' : 'click';\n            closeOnClickActive = true;\n            $('body').on(eventType + config.namespace, function() {\n              closeDropdowns();\n              $('body').off(config.namespace);\n              closeOnClickActive = false;\n            });\n          }\n        }\n      }\n  \n      function openSecondLevelDropdown($el, skipCheck) {\n        var $parentItem = $el.parent();\n        if ($parentItem.hasClass(classes.hasSubDropdownClass) || skipCheck) {\n          $parentItem.addClass(classes.dropdownActive);\n          hasActiveSubDropdown = true;\n        }\n      }\n  \n      function closeDropdowns() {\n        closeSecondLevelDropdown();\n        closeThirdLevelDropdown();\n      }\n  \n      function closeSecondLevelDropdown() {\n        $(selectors.navItems).removeClass(classes.dropdownActive);\n      }\n  \n      function closeThirdLevelDropdown() {\n        $(selectors.navDropdownLinks).parent().removeClass(classes.dropdownActive);\n      }\n    }\n  \n    function stickyHeader() {\n      config.lastScroll = 0;\n      $siteHeader.wrap('<div class=\"site-header-sticky\"></div>');\n  \n      stickyHeaderHeight();\n      setTimeout(function() {\n        stickyHeaderHeight();\n      }, 200)\n      $window.on('resize' + config.namespace, $.debounce(50, stickyHeaderHeight));\n      $window.on('scroll' + config.namespace, $.throttle(15, stickyHeaderScroll));\n    }\n  \n    function stickyHeaderHeight() {\n      var height = $siteHeader.outerHeight(true);\n      var $stickyHeader = $('.site-header-sticky').css('height', height);\n  \n      // Also update top position of sticky sidebar\n      if ($('.grid__item--sidebar').length) {\n        $('.grid__item--sidebar').css('top', height + 10);\n      }\n    }\n  \n    function stickyHeaderScroll() {\n      var scroll = $window.scrollTop();\n      var threshold = 250;\n  \n      if (scroll > threshold) {\n        if (config.stickyActive) {\n          return;\n        }\n  \n        config.stickyActive = true;\n  \n        $siteHeader.addClass(config.stickyClass);\n        if (config.wrapperOverlayed) {\n          $wrapper.removeClass(config.overlayedClass);\n        }\n  \n        // Add open transition class after element is set to fixed\n        // so CSS animation is applied correctly\n        setTimeout(function() {\n          $siteHeader.addClass(config.openTransitionClass);\n        }, 100);\n      } else {\n        if (!config.stickyActive) {\n          return;\n        }\n  \n        config.stickyActive = false;\n  \n        $siteHeader.removeClass(config.openTransitionClass).removeClass(config.stickyClass);\n        if (config.wrapperOverlayed) {\n          $wrapper.addClass(config.overlayedClass);\n        }\n      }\n  \n      config.lastScroll = scroll;\n    }\n  \n    // If the header setting to overlay the menu on the collection image\n    // is enabled but the collection setting is disabled, we need to undo\n    // the init of the sticky nav\n    function disableOverlayHeader() {\n      $(selectors.wrapper)\n        .removeClass(config.stickyEnabledClass)\n        .removeClass(config.overlayedClass);\n  \n      $('body').removeClass(classes.overlaidBodyClass);\n      config.wrapperOverlayed = false;\n    }\n  \n    return {\n      init: init,\n      disableOverlayHeader: disableOverlayHeader,\n      unload: unload\n    };\n  })();\n  \n  theme.Slideshow = (function() {\n    this.$slideshow = null;\n  \n    var classes = {\n      next: 'is-next',\n      init: 'is-init',\n      animateOut: 'animate-out',\n      wrapper: 'slideshow-wrapper',\n      slideshow: 'slideshow',\n      allSlides: 'slick-slide',\n      currentSlide: 'slick-current',\n      pauseButton: 'slideshow__pause',\n      isPaused: 'is-paused'\n    };\n  \n    function slideshow(el, args) {\n      this.$slideshow = $(el);\n      this.$wrapper = this.$slideshow.closest('.' + classes.wrapper);\n      this.$pause = this.$wrapper.find('.' + classes.pauseButton);\n  \n      this.settings = {\n        accessibility: true,\n        arrows: args.arrows ? true : false,\n        dots: args.dots ? true : false,\n        fade: args.fade ? true : false,\n        speed: args.speed ? args.speed : 500,\n        draggable: true,\n        touchThreshold: 5,\n        pauseOnHover: false,\n        autoplay: args.autoplay ? true : false,\n        autoplaySpeed: this.$slideshow.data('speed')\n      };\n  \n      this.$slideshow.off('beforeChange');\n      this.$slideshow.off('afterSlideChange');\n      this.$slideshow.on('init', this.init.bind(this));\n      this.$slideshow.on('beforeChange', this.beforeSlideChange.bind(this));\n      this.$slideshow.on('afterChange', this.afterSlideChange.bind(this));\n  \n      this.$slideshow.slick(this.settings);\n  \n      this.$pause.on('click', this._togglePause.bind(this));\n    }\n  \n    slideshow.prototype = $.extend({}, slideshow.prototype, {\n      init: function(event, obj) {\n        this.$slideshowList = obj.$list;\n        this.$slickDots = obj.$dots;\n        this.$allSlides = obj.$slides;\n        this.slideCount = obj.slideCount;\n  \n        this.$slideshow.addClass(classes.init);\n        this._a11y();\n        this._clonedLazyloading();\n      },\n      beforeSlideChange: function(event, slick, currentSlide, nextSlide) {\n        var $slider = slick.$slider;\n        var $currentSlide = $slider.find('.' + classes.currentSlide).addClass(classes.animateOut);\n      },\n      afterSlideChange: function(event, slick, currentSlide) {\n        var $slider = slick.$slider;\n        var $allSlides = $slider.find('.' + classes.allSlides).removeClass(classes.animateOut);\n      },\n      destroy: function() {\n        this.$slideshow.slick('unslick');\n      },\n  \n      // Playback\n      _play: function() {\n        this.$slideshow.slick('slickPause');\n        $(classes.pauseButton).addClass('is-paused');\n      },\n      _pause: function() {\n        this.$slideshow.slick('slickPlay');\n        $(classes.pauseButton).removeClass('is-paused');\n      },\n      _togglePause: function() {\n        var slideshowSelector = this._getSlideshowId(this.$pause);\n        if (this.$pause.hasClass(classes.isPaused)) {\n          this.$pause.removeClass(classes.isPaused);\n          $(slideshowSelector).slick('slickPlay');\n        } else {\n          this.$pause.addClass(classes.isPaused);\n          $(slideshowSelector).slick('slickPause');\n        }\n      },\n  \n      // Helpers\n      _getSlideshowId: function($el) {\n        return '#Slideshow-' + $el.data('id');\n      },\n      _activeSlide: function() {\n        return this.$slideshow.find('.slick-active');\n      },\n      _currentSlide: function() {\n        return this.$slideshow.find('.slick-current');\n      },\n      _nextSlide: function(index) {\n        return this.$slideshow.find('.slideshow__slide[data-slick-index=\"' + index + '\"]');\n      },\n  \n      // a11y fixes\n      _a11y: function() {\n        var $list = this.$slideshowList;\n        var autoplay = this.settings.autoplay;\n  \n        if (!$list) {\n          return;\n        }\n  \n        // Remove default Slick aria-live attr until slider is focused\n        $list.removeAttr('aria-live');\n  \n        // When an element in the slider is focused\n        // pause slideshow and set aria-live\n        $(classes.wrapper).on('focusin', function(evt) {\n          if (!$(classes.wrapper).has(evt.target).length) {\n            return;\n          }\n  \n          $list.attr('aria-live', 'polite');\n          if (autoplay) {\n            this._pause();\n          }\n        }.bind(this));\n  \n        // Resume autoplay\n        $(classes.wrapper).on('focusout', function(evt) {\n          if (!$(classes.wrapper).has(evt.target).length) {\n            return;\n          }\n  \n          $list.removeAttr('aria-live');\n          if (autoplay) {\n            this._play();\n          }\n        }.bind(this));\n      },\n  \n      // Make sure lazyloading works on cloned slides\n      _clonedLazyloading: function() {\n        var $slideshow = this.$slideshow;\n  \n        $slideshow.find('.slick-slide').each(function(index, el) {\n          var $slide = $(el);\n          if ($slide.hasClass('slick-cloned')) {\n            var slideId = $slide.data('id');\n            var $slideImg = $slide.find('.hero__image').removeClass('lazyloading').addClass('lazyloaded');\n  \n            // Get inline style attribute from non-cloned slide with arbitrary timeout\n            // so the image is loaded\n            setTimeout(function() {\n              var loadedImageStyle = $slideshow.find('.slideshow__slide--' + slideId + ':not(.slick-cloned) .hero__image').attr('style');\n  \n              if (loadedImageStyle) {\n                $slideImg.attr('style', loadedImageStyle);\n              }\n  \n            }, this.settings.autoplaySpeed / 1.5);\n  \n          }\n        }.bind(this));\n      }\n    });\n  \n    return slideshow;\n  })();\n  \n  theme.announcementBar = (function() {\n    var slideCount = 0;\n    var compact = false;\n    var defaults = {\n      accessibility: true,\n      arrows: false,\n      dots: false,\n      autoplay: true,\n      autoplaySpeed: 5000,\n      touchThreshold: 20,\n      slidesToShow: 1\n    };\n    var $slider;\n  \n    function init() {\n      $slider = $('.AnnouncementSlider');\n      if (!$slider.length) {\n        return;\n      }\n  \n      slideCount = $slider.data('block-count');\n      compact = $slider.data('compact-style');\n  \n      var desktopOptions = $.extend({}, defaults, {\n        slidesToShow: compact ? 1 : slideCount,\n        slidesToScroll: 1\n      });\n  \n      var mobileOptions = $.extend({}, defaults, {\n        slidesToShow: 1\n      });\n  \n      if (theme.config.bpSmall) {\n        initSlider($slider, mobileOptions);\n      } else {\n        initSlider($slider, desktopOptions);\n      }\n  \n      $('body').on('matchSmall', function() {\n        initSlider($slider, mobileOptions);\n      }.bind(this));\n  \n      $('body').on('matchLarge', function() {\n        initSlider($slider, desktopOptions);\n      }.bind(this));\n    }\n  \n    function initSlider($slider, args) {\n      if (isInitialized($slider)) {\n        $slider.slick('unslick');\n      }\n      $slider.slick(args);\n    }\n  \n    function isInitialized($slider) {\n      return $slider.length && $slider.hasClass('slick-initialized');\n    }\n  \n    // Go to slide if selected in the editor\n    function onBlockSelect(id) {\n      var $slide = $('#AnnouncementSlide-' + id);\n      if ($slider.length) {\n        $slider.slick('slickPause');\n      }\n      if ($slide.length) {\n        $slider.slick('slickGoTo', $slide.data('index'));\n      }\n    }\n  \n    function onBlockDeselect(id) {\n      if ($slider.length && isInitialized($slider)) {\n        $slider.slick('slickPlay');\n      }\n    }\n  \n    function unload() {\n      if (isInitialized($slider)) {\n        $slider.slick('unslick');\n      }\n    }\n  \n    return {\n      init: init,\n      onBlockSelect: onBlockSelect,\n      onBlockDeselect: onBlockDeselect,\n      unload: unload\n    };\n  })();\n  \n  theme.currencySwitcher = (function() {\n  \n    var selectors = {\n      dataDiv: '#CurrencyData',\n      currencyOptions: '.currency-options__btn',\n      pickerFlag: '.currency-picker .currency-flag',\n      pickerLabel: '.currency-picker .currency-picker__label'\n    };\n  \n    var data = {};\n    var modal;\n  \n    function init() {\n      var $dataDiv = $(selectors.dataDiv);\n  \n      if (!$dataDiv.length) {\n        return;\n      }\n  \n      modal = new theme.Modals('CurrencyModal', 'currency-modal', {\n        closeOffContentClick: false\n      });\n  \n      $(selectors.currencyOptions).on('click', setNewCurrency);\n  \n      data = {\n        currency: $dataDiv.data('shop-currency'),\n        format: $dataDiv.data('format'),\n        moneyFormat: $dataDiv.data('money-format'),\n        moneyCurrencyFormat: $dataDiv.data('money-currency-format')\n      };\n  \n      if (!theme.settings.nativeMultiCurrency) {\n        Currency.format = data.format;\n  \n        // Rely on the shop's currency format, not Shopify defaults (in case merchant changes it)\n        Currency.money_format[data.currency] = data.moneyFormat;\n        Currency.money_with_currency_format[data.currency] = data.moneyCurrencyFormat;\n  \n        // Fix for customer account page\n        $('span.money span.money').each(function() {\n          $(this).parents('span.money').removeClass('money');\n        });\n  \n        // Save current price\n        $('span.money').each(function() {\n          $(this).attr('data-currency-' + data.currency, $(this).html());\n        });\n  \n        checkCookie();\n      }\n    }\n  \n    function setNewCurrency() {\n      var newCurrency = $(this).data('value');\n  \n      if (theme.settings.nativeMultiCurrency) {\n        $(this).addClass('is-active');\n        theme.cart.updateCurrency(newCurrency);\n        return;\n      }\n  \n      if (newCurrency !== data.currency) {\n        data.currency = newCurrency;\n        $(selectors.dataDiv).data('current-currency', newCurrency);\n        updatePicker(newCurrency);\n  \n        refresh();\n      }\n  \n      modal.close();\n    }\n  \n    function updatePicker(currency) {\n      $(selectors.pickerFlag).attr('data-flag', currency);\n      $(selectors.pickerLabel).text(currency);\n  \n      // Update modal options active states\n      $(selectors.currencyOptions).removeClass('is-active');\n      $(selectors.currencyOptions + '[data-value=' + currency + ']').addClass('is-active');\n    }\n  \n    // Refresh functions only needed when not using native multi-currency\n    function refresh() {\n      if (theme.settings.nativeMultiCurrency) {\n        return;\n      }\n  \n      var newCurrency = $(selectors.dataDiv).data('current-currency');\n      Currency.convertAll(Currency.currentCurrency, newCurrency);\n    }\n  \n    function ajaxrefresh() {\n      if (theme.settings.nativeMultiCurrency) {\n        return;\n      }\n  \n      var shopCurrency = $(selectors.dataDiv).data('shop-currency');\n      var newCurrency = $(selectors.dataDiv).data('current-currency');\n  \n      // Ajax cart always returns shop's currency, not what theme settings defines\n      Currency.convertAll(shopCurrency, newCurrency);\n    }\n  \n    function checkCookie() {\n      var cookieCurrency = Currency.cookie.read();\n  \n      if (cookieCurrency == null) {\n        Currency.currentCurrency = cookieCurrency = data.currency;\n      } else if ($(selectors.currencyOptions).length && $(selectors.currencyOptions + '[data-value=' + cookieCurrency + ']').length === 0) {\n        // If the cookie value does not correspond to any value in the currency dropdown\n        Currency.currentCurrency = data.currency;\n        Currency.cookie.write(data.currency);\n      } else if (cookieCurrency === data.currency) {\n        Currency.currentCurrency = data.currency;\n      } else {\n        Currency.convertAll(data.currency, cookieCurrency);\n      }\n  \n      // Update current currency with cookie value\n      $(selectors.dataDiv).data('current-currency', cookieCurrency);\n      data.currency = cookieCurrency;\n      updatePicker(cookieCurrency);\n    }\n  \n    return {\n      init: init,\n      refresh: refresh,\n      ajaxrefresh: ajaxrefresh\n    };\n  })();\n  \n  theme.initQuickShop = function(reinit) {\n    var ids = [];\n    var $buttons = $('.quick-product__btn');\n  \n    $buttons.each(function() {\n      var id = $(this).data('product-id');\n      var modalId = 'QuickShopModal-' + id;\n      var name = 'quick-modal-' + id;\n  \n      // If another identical modal exists, remove duplicates\n      if (ids.indexOf(id) > -1) {\n        $('.modal--quick-shop[data-product-id=\"'+ id +'\"]').each(function(i) {\n          if (i > 0) {\n            $(this).remove();\n          }\n        });\n        return;\n      }\n  \n      new theme.Modals(modalId, name);\n      ids.push(id);\n    });\n  };\n  \n  theme.videoModal = function() {\n    var videoModalPlayer = null;\n    var videoOptions = {\n      width: 1280,\n      height: 720,\n      playerVars: {\n        autohide: 0,\n        autoplay: 1,\n        branding: 0,\n        cc_load_policy: 0,\n        fs: 0,\n        iv_load_policy: 3,\n        modestbranding: 1,\n        playsinline: 1,\n        quality: 'hd720',\n        rel: 0,\n        showinfo: 0,\n        wmode: 'opaque'\n      }\n    };\n  \n    var selectors = {\n      triggers: 'a[href*=\"youtube.com/watch\"], a[href*=\"youtu.be/\"]'\n    };\n  \n    if (!$(selectors.triggers).length) {\n      return;\n    }\n  \n    var modal = new theme.Modals('VideoModal', 'video-modal', {\n      closeOffContentClick: true,\n      solid: true\n    });\n  \n    $(selectors.triggers).on('click', triggerYouTubeModal);\n  \n    function triggerYouTubeModal(evt) {\n      evt.preventDefault();\n      window.loadYouTube();\n  \n      if (theme.config.youTubeReady) {\n        startVideoOnClick(evt);\n      } else {\n        $('body').on('youTubeReady', function() {\n          startVideoOnClick(evt);\n        });\n      }\n    }\n  \n    function startVideoOnClick(evt) {\n      var $el = $(evt.currentTarget);\n      var videoId = getYoutubeVideoId($el.attr('href'));\n  \n      var args = $.extend({}, videoOptions, {\n        videoId: videoId\n      });\n  \n      // Disable plays inline on mobile\n      args.playerVars.playsinline = theme.config.bpSmall ? 0 : 1;\n  \n      var videoModalPlayer = new YT.Player('VideoHolder', args);\n      modal.open();\n  \n      $('body').on('modalClose.VideoModal', function() {\n        // Slight timeout so it is destroyed after the modal closes\n        setTimeout(function() {\n          videoModalPlayer.destroy();\n        }, 500); // modal close css transition\n      });\n    }\n  \n    function getYoutubeVideoId(url) {\n      var regExp = /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*/;\n      var match = url.match(regExp);\n      return (match&&match[7].length==11)? match[7] : false;\n    }\n  };\n  \n  \n  theme.RecentlyViewed = (function() {\n    var selectors = {\n      template: '#RecentlyViewedProduct',\n      outputContainer: '#RecentlyViewed-'\n    };\n  \n    var init = false;\n  \n    function RecentlyViewed(container) {\n      var $container = this.$container = $(container);\n      var sectionId = this.sectionId = $container.attr('data-section-id');\n      this.namespace = '.recently-viewed' + sectionId;\n  \n      if (!$(selectors.template).length) {\n        return;\n      }\n  \n      // Lazyload API\n      this.checkVisibility();\n      $(window).on('scroll' + this.namespace, $.throttle(200, this.checkVisibility.bind(this)));\n    };\n  \n    RecentlyViewed.prototype = $.extend({}, RecentlyViewed.prototype, {\n      init: function() {\n        if (init) {\n          return;\n        }\n  \n        init = true;\n  \n        if ($.isEmptyObject(theme.recentlyViewed.recent)) {\n          // No previous history on page load, so bail\n          return;\n        }\n  \n        this.outputContainer = $(selectors.outputContainer + this.sectionId);\n        this.handle = this.$container.attr('data-product-handle');\n  \n        // Request new product info via JS API\n        var promises = [];\n        for (handle in theme.recentlyViewed.recent) {\n          promises.push(this.getProductInfo(handle));\n        }\n  \n        Promise.all(promises).then(function(result) {\n          this.setupOutput(result);\n          this.captureProductDetails(result);\n        }.bind(this), function(error) {\n          console.log('Theme | recently viewed products failed to load');\n          console.log(error);\n        });\n      },\n  \n      checkVisibility: function() {\n        if (theme.isElementVisible(this.$container, 600)) {\n          this.init();\n          $(window).off('scroll' + this.namespace);\n        }\n      },\n  \n      getProductInfo: function(handle) {\n        return new Promise(function(resolve, reject) {\n          if (theme.recentlyViewed.productInfo.hasOwnProperty(handle)) {\n            resolve(theme.recentlyViewed.productInfo[handle]);\n          } else {\n            jQuery.getJSON('/products/'+ handle +'.js', function(product) {\n              resolve(product);\n            });\n          }\n        });\n      },\n  \n      setupOutput: function(products) {\n        var allProducts = [];\n        var data = {};\n        var limit = this.$container.attr('data-recent-count');\n  \n        var i = 0;\n        for (key in products) {\n          var product = products[key];\n          // Ignore current product\n          if (product.handle === this.handle) {\n            continue;\n          }\n  \n          i++;\n  \n          // New or formatted properties\n          product.url_formatted = theme.recentlyViewed.recent[product.handle] ? theme.recentlyViewed.recent[product.handle].url : product.url;\n          product.image_responsive_url = theme.recentlyViewed.recent[product.handle].featuredImage;\n          product.image_aspect_ratio = theme.recentlyViewed.recent[product.handle].aspectRatio;\n          product.on_sale = product.compare_at_price > product.price;\n          product.sold_out = !product.available;\n          product.price_formatted = theme.Currency.formatMoney(product.price, theme.settings.moneyFormat);\n          product.compare_at_price_formatted = theme.Currency.formatMoney(product.compare_at_price, theme.settings.moneyFormat);\n          product.price_min_formatted = theme.Currency.formatMoney(product.price_min, theme.settings.moneyFormat);\n          product.money_saved = theme.Currency.formatMoney((product.compare_at_price - product.price), theme.settings.moneyFormat);\n  \n          allProducts.unshift(product);\n        }\n  \n        data = {\n          items: allProducts.slice(0, limit),\n          grid_item_width: this.$container.attr('data-grid-item-class')\n        };\n  \n        if (allProducts.length === 0) {\n          return;\n        }\n  \n        // Prep handlebars template\n        var source = $(selectors.template).html();\n        var template = Handlebars.compile(source);\n        this.outputContainer.append(template(data));\n  \n        if (AOS) {\n          AOS.refreshHard();\n        }\n      },\n  \n      captureProductDetails: function(products) {\n        for (var i = 0; i < products.length; i++) {\n          var product = products[i];\n          theme.recentlyViewed.productInfo[product.handle] = product;\n        }\n  \n        // Add data to session storage to reduce API requests later\n        if (theme.config.hasSessionStorage) {\n          sessionStorage.setItem('recent-products', JSON.stringify(theme.recentlyViewed.productInfo));\n        }\n      },\n  \n      onUnload: function() {\n        init = false;\n        $('window').off(this.namespace);\n      }\n    });\n  \n    return RecentlyViewed;\n  })();\n  \n  theme.parallaxSections = {};\n  \n  theme.Parallax = (function() {\n    var speed = 7; // higher is slower\n  \n    function parallax(el, args) {\n      this.$container = $(el);\n      this.namespace = args.namespace;\n  \n      if (!this.$container.length) {\n        return;\n      }\n  \n      if (args.desktopOnly) {\n        this.desktopInit();\n      } else {\n        this.init(this.$container, args)\n      }\n    }\n  \n    parallax.prototype = $.extend({}, parallax.prototype, {\n      init: function(desktopOnly) {\n        var $window = this.$window = $(window);\n        var elTop = this.$container.offset().top;\n  \n        $window.on('scroll' + this.namespace, function(evt) {\n          var scrolled = $window.scrollTop();\n          var shiftDistance = (elTop - scrolled) / speed;\n          this.$container.css({\n            'transform': 'translate3d(0, ' + shiftDistance + 'px, 0)'\n          });\n        }.bind(this));\n  \n        // Reinit on resize\n        $window.on('resize' + this.namespace, $.debounce(350, function() {\n          $window.off(this.namespace);\n  \n          if (desktopOnly) {\n            if (!theme.config.bpSmall) {\n              this.init(true);\n              return;\n            }\n          }\n  \n          this.init();\n        }.bind(this)));\n      },\n  \n      desktopInit: function() {\n        if (!theme.config.bpSmall) {\n          this.init(true);\n        }\n  \n        $('body').on('matchSmall', function() {\n          this.destroy();\n        }.bind(this));\n  \n        $('body').on('matchLarge', function() {\n          this.init(true);\n        }.bind(this));\n      },\n  \n      destroy: function() {\n        this.$container.removeAttr('style');\n        this.$window.off(this.namespace);\n      }\n    });\n  \n    return parallax;\n  })();\n  \n\n  theme.collectionTemplate = (function() {\n    var isAnimating = false;\n  \n    var selectors = {\n      collectionGrid: '.grid--collection',\n      sidebar: '#CollectionSidebar',\n      tags: '.tag-list a',\n      removeTag: '.tag--remove a'\n    };\n  \n    var settings = {\n      combineTags: $(selectors.sidebar).data('combine-tags')\n    };\n  \n    var classes = {\n      activeTag: 'tag--active'\n    };\n  \n    function init() {\n      // Ajax pagination\n      $(window).on('popstate', function(state) {\n        if (state) {\n          getNewCollectionContent(location.href);\n        }\n      });\n  \n      initTagClicks();\n    }\n  \n    function initTagClicks() {\n      $('body').on('click', selectors.tags, function(evt) {\n        if (theme.FilterDrawer) {\n          theme.FilterDrawer.close();\n        }\n  \n        if ($(this).hasClass('no-ajax')) {\n          return;\n        }\n  \n        evt.preventDefault();\n        if (isAnimating) {\n          return;\n        }\n  \n        isAnimating = true;\n  \n        var $el = $(evt.currentTarget);\n        var $parent = $el.parent();\n        var newUrl = $el.attr('href');\n  \n        if (settings.combineTags) {\n          if ($parent.hasClass(classes.activeTag)) {\n            $parent.removeClass(classes.activeTag);\n          } else {\n            $parent.addClass(classes.activeTag);\n          }\n        } else {\n          $(selectors.tags).parent().removeClass(classes.activeTag);\n          $parent.addClass(classes.activeTag);\n        }\n  \n        //updateScroll(true);\n  \n        history.pushState({}, '', newUrl);\n        $(selectors.collectionGrid).addClass('unload');\n        getNewCollectionContent(newUrl);\n      });\n  \n      // Immediately remove the remove tag button before ajax kicks in\n      $('body').on('click', selectors.removeTag, function() {\n        $(this).parent('li').remove();\n      });\n    }\n  \n    function updateScroll(animate) {\n      var scrollTo;\n      if (theme.config.bpSmall) {\n        scrollTo = $('.collection-filter').offset().top - 10;\n      } else {\n        scrollTo = $('#CollectionAjaxResult').offset().top + 1;\n      }\n  \n      if (theme.config.stickyHeader) {\n        var heightOfStickyNav = $('.site-header').outerHeight(true);\n        scrollTo = scrollTo - heightOfStickyNav;\n      }\n  \n      if (animate) {\n        $('html, body').animate({ scrollTop: scrollTo }, 300);\n      } else {\n        $('html, body').scrollTop(scrollTo);\n      }\n    }\n  \n    function getNewCollectionContent(url) {\n      url = url + '?view=ajax';\n      $('#CollectionAjaxResult').load(url + ' #CollectionAjaxContent', function() {\n        isAnimating = false;\n        theme.reinitSection('collection-template');\n        theme.collectionTemplate.reinit();\n      }.bind(this));\n    }\n  \n    function reinit() {\n      settings.combineTags = $(selectors.sidebar).data('combine-tags');\n  \n      //updateScroll(false);\n      initTagClicks();\n  \n      // Setup page transition classes\n      theme.pageTransitions();\n  \n      theme.reinitProductGridItem();\n  \n      // Trigger resize for sticky sidebar styles to update\n      $('body').trigger('resize');\n    }\n  \n    return {\n      init: init,\n      reinit: reinit\n    };\n  })();\n  \n  theme.customerTemplates = (function() {\n  \n    function initEventListeners() {\n      // Show reset password form\n      $('#RecoverPassword').on('click', function(evt) {\n        evt.preventDefault();\n        toggleRecoverPasswordForm();\n      });\n  \n      // Hide reset password form\n      $('#HideRecoverPasswordLink').on('click', function(evt) {\n        evt.preventDefault();\n        toggleRecoverPasswordForm();\n      });\n    }\n  \n    /**\n     *\n     *  Show/Hide recover password form\n     *\n     */\n    function toggleRecoverPasswordForm() {\n      $('#RecoverPasswordForm').toggleClass('hide');\n      $('#CustomerLoginForm').toggleClass('hide');\n    }\n  \n    /**\n     *\n     *  Show reset password success message\n     *\n     */\n    function resetPasswordSuccess() {\n      var $formState = $('.reset-password-success');\n  \n      // check if reset password form was successfully submitted\n      if (!$formState.length) {\n        return;\n      }\n  \n      // show success message\n      $('#ResetSuccess').removeClass('hide');\n    }\n  \n    /**\n     *\n     *  Show/hide customer address forms\n     *\n     */\n    function customerAddressForm() {\n      var $newAddressForm = $('#AddressNewForm');\n      var $addressForms = $('.js-address-form');\n  \n      if (!$newAddressForm.length || !$addressForms.length) {\n        return;\n      }\n  \n      if (Shopify) {\n        $('.js-address-country').each(function() {\n          var $container = $(this);\n          var countryId = $container.data('country-id');\n          var provinceId = $container.data('province-id');\n          var provinceContainerId = $container.data('province-container-id');\n  \n          new Shopify.CountryProvinceSelector(\n            countryId,\n            provinceId,\n            {\n              hideElement: provinceContainerId\n            }\n          );\n        });\n      }\n  \n      // Toggle new/edit address forms\n      $('.address-new-toggle').on('click', function() {\n        $newAddressForm.toggleClass('hide');\n      });\n  \n      $('.address-edit-toggle').on('click', function() {\n        var formId = $(this).data('form-id');\n        $('#EditAddress_' + formId).toggleClass('hide');\n      });\n  \n      $('.address-delete').on('click', function() {\n        var $el = $(this);\n        var formId = $el.data('form-id');\n        var confirmMessage = $el.data('confirm-message');\n  \n        if (confirm(confirmMessage || 'Are you sure you wish to delete this address?')) {\n          Shopify.postLink('/account/addresses/' + formId, {parameters: {_method: 'delete'}});\n        }\n      });\n    }\n  \n    /**\n     *\n     *  Check URL for reset password hash\n     *\n     */\n    function checkUrlHash() {\n      var hash = window.location.hash;\n  \n      // Allow deep linking to recover password form\n      if (hash === '#recover') {\n        toggleRecoverPasswordForm();\n      }\n    }\n  \n    return {\n      init: function() {\n        checkUrlHash();\n        initEventListeners();\n        resetPasswordSuccess();\n        customerAddressForm();\n      }\n    };\n  })();\n  \n\n  theme.Product = (function() {\n  \n    var classes = {\n      onSale: 'on-sale',\n      disabled: 'disabled',\n      isModal: 'is-modal',\n      loading: 'loading',\n      loaded: 'loaded',\n      interactable: 'video-interactable'\n    };\n  \n    var selectors = {\n      productVideo: '.product__video',\n      videoParent: '.product__video-wrapper',\n      currentSlide: '.slick-current'\n    };\n  \n    var youtubeReady;\n    var videos = {};\n    var youtubePlayers = [];\n    var youtubeVideoOptions = {\n      height: '480',\n      width: '850',\n      playerVars :{\n        autohide: 0,\n        autoplay: 1,\n        branding: 0,\n        cc_load_policy: 0,\n        controls: 0,\n        fs: 0,\n        iv_load_policy: 3,\n        modestbranding: 1,\n        playsinline: 1,\n        quality: 'hd720',\n        rel: 0,\n        showinfo: 0,\n        wmode: 'opaque'\n      },\n      events: {\n        onReady: onVideoPlayerReady,\n        onStateChange: onVideoStateChange\n      }\n    };\n  \n    var vimeoReady;\n    var vimeoPlayers = [];\n    var vimeoVideoOptions = {\n      byline: false,\n      title: false,\n      portrait: false,\n      loop: true\n    };\n  \n    function onVideoPlayerReady(evt) {\n      var $player = $(evt.target.a);\n      var playerId = $player.attr('id');\n      youtubePlayers[playerId] = evt.target; // update stored player\n      var player = youtubePlayers[playerId];\n  \n      setParentAsLoading($player);\n  \n      if (videos[playerId].style === 'muted') {\n        youtubePlayers[playerId].mute().playVideo().pauseVideo();\n      } else {\n        setParentAsLoaded($player);\n      }\n  \n      // If first slide or only photo, start video\n      if ($player.closest(selectors.currentSlide).length || $player.data('image-count') === 1) {\n        if (videos[playerId].style === 'muted') {\n          youtubePlayers[playerId].playVideo();\n          initCheckVisibility(playerId);\n        }\n      }\n    }\n  \n    function initCheckVisibility(playerId) {\n      // Add out of view pausing\n      videoVisibilityCheck(playerId);\n      $(window).on('scroll.' + playerId, {id: playerId}, $.throttle(150, videoVisibilityCheck));\n    }\n  \n    function videoVisibilityCheck(id) {\n      var playerId;\n  \n      if (typeof id === 'string') {\n        playerId = id;\n      } else {\n        // Data comes in as part of the scroll event\n        playerId = id.data.id;\n      }\n  \n      if (theme.isElementVisible($('#' + playerId))) {\n        if (videos[playerId] && videos[playerId].style === 'unmuted') {\n          return;\n        }\n        playVisibleVideo(playerId);\n      } else {\n        pauseHiddenVideo(playerId);\n      }\n    }\n  \n    function playVisibleVideo(id) {\n      if (youtubePlayers[id] && typeof youtubePlayers[id].playVideo === 'function') {\n        youtubePlayers[id].playVideo();\n      }\n    }\n  \n    function pauseHiddenVideo(id) {\n      if (youtubePlayers[id] && typeof youtubePlayers[id].pauseVideo === 'function') {\n        youtubePlayers[id].pauseVideo();\n      }\n    }\n  \n    function onVideoStateChange(evt) {\n      var $player = $(evt.target.a);\n      var playerId = $player.attr('id');\n      var player = youtubePlayers[playerId];\n  \n      switch (evt.data) {\n        case -1: // unstarted\n          // Handle low power state on iOS by checking if\n          // video is reset to unplayed after attempting to buffer\n          if (videos[playerId].attemptedToPlay) {\n            setParentAsLoaded($player);\n            setVideoToBeInteractedWith($player);\n          }\n          break;\n        case 0: // ended\n          player.playVideo();\n          break;\n        case 1: // playing\n          setParentAsLoaded($player);\n          break;\n        case 3: // buffering\n          videos[playerId].attemptedToPlay = true;\n          break;\n      }\n    }\n  \n    function setParentAsLoading($el) {\n      $el\n        .closest(selectors.videoParent)\n        .addClass(classes.loading);\n    }\n  \n    function setParentAsLoaded($el) {\n      $el\n        .closest(selectors.videoParent)\n        .removeClass(classes.loading)\n        .addClass(classes.loaded);\n    }\n  \n    function setVideoToBeInteractedWith($el) {\n      $el\n        .closest(selectors.videoParent)\n        .addClass(classes.interactable);\n    }\n  \n    function Product(container) {\n      var $container = this.$container = $(container);\n      var sectionId = this.sectionId = $container.attr('data-section-id');\n  \n      this.inModal = $container.closest('.modal').length;\n      this.$modal;\n  \n      this.settings = {\n        enableHistoryState: $container.data('enable-history-state') || false,\n        namespace: '.product-' + sectionId,\n        inventory: $container.data('inventory') || false,\n        modalInit: false,\n        lazyLoadModalContent: $container.data('lazyload-content') || false,\n        slickMainInitialized: false,\n        slickThumbInitialized: false,\n        hasImages: true,\n        hasMultipleImages: false,\n        imageSize: '620x'\n      };\n  \n      // Overwrite some settings when loaded in modal\n      if (this.inModal) {\n        this.settings.enableHistoryState = false;\n        this.settings.namespace = '.product-' + sectionId + '-modal';\n        this.$modal = $('#QuickShopModal-' + sectionId);\n      }\n  \n      this.selectors = {\n        variantsJson: 'VariantsJson-' + sectionId,\n        currentVariantJson: 'CurrentVariantJson-' + sectionId,\n  \n        video: 'ProductVideo-' + sectionId,\n        photoThumbs: '.product__thumb-' + sectionId,\n        thumbSlider: '#ProductThumbs-' + sectionId,\n        mainSlider: '#ProductPhotos-' + sectionId,\n        imageContainer: '[data-product-images]',\n        productImageMain: '.product-image-main--' + sectionId,\n  \n        priceWrapper: '.product__price-wrap-' + sectionId,\n        price: '#ProductPrice-' + sectionId,\n        comparePrice: '#ComparePrice-' + sectionId,\n        savePrice: '#SavePrice-' + sectionId,\n        priceA11y: '#PriceA11y-' + sectionId,\n        comparePriceA11y: '#ComparePriceA11y-' + sectionId,\n        sku: '#Sku-' + sectionId,\n        inventory: '#ProductInventory-' + sectionId,\n  \n        addToCart: '#AddToCart-' + sectionId,\n        addToCartText: '#AddToCartText-' + sectionId,\n  \n        originalSelectorId: '#ProductSelect-' + sectionId,\n        singleOptionSelector: '.variant__input-' + sectionId,\n        variantColorSwatch: '.variant__input--color-swatch-' + sectionId,\n  \n        modalFormHolder: '#ProductFormHolder-' + sectionId,\n        formContainer: '#AddToCartForm-' + sectionId\n      };\n  \n      this.$mainSlider = $(this.selectors.mainSlider);\n      this.$thumbSlider = $(this.selectors.thumbSlider);\n      this.$firstProductImage = this.$mainSlider.find('img').first();\n  \n      if (!this.$firstProductImage.length) {\n        this.settings.hasImages = false;\n      }\n  \n      this.init();\n    }\n  \n    Product.prototype = $.extend({}, Product.prototype, {\n      init: function() {\n        if (this.inModal) {\n          this.$container.addClass(classes.isModal);\n          $('body')\n            .off('modalOpen.QuickShopModal-' + this.sectionId)\n            .off('modalClose.QuickShopModal-' + this.sectionId);\n          $('body').on('modalOpen.QuickShopModal-' + this.sectionId, this.openModalProduct.bind(this));\n          $('body').on('modalClose.QuickShopModal-' + this.sectionId, this.closeModalProduct.bind(this));\n        }\n  \n        if (!this.inModal) {\n          this.stringOverrides();\n          this.formSetup();\n          this.productSetup();\n  \n          this.checkIfVideos();\n          this.createImageCarousels();\n  \n          // Add product id to recently viewed array\n          this.addIdToRecentlyViewed();\n        }\n      },\n  \n      formSetup: function() {\n        // Determine how to handle variant availability selectors\n        if (theme.settings.dynamicVariantsEnable) {\n          if (theme.settings.dynamicVariantType === 'dropdown') {\n            this.$variantSelectors = {\n              all: $(this.selectors.formContainer).find('select'),\n              selected: $(this.selectors.formContainer).find('select')\n            }\n          } else {\n            this.$variantSelectors = {\n              all: $(this.selectors.formContainer).find('input'),\n              selected: $(this.selectors.formContainer).find('input:checked')\n            }\n          }\n        }\n  \n        this.initQtySelector();\n        this.initAjaxProductForm();\n        this.initVariants();\n      },\n  \n      productSetup: function() {\n        this.setImageSizes();\n        this.initImageSwitch();\n        this.initImageZoom();\n      },\n  \n      addIdToRecentlyViewed: function() {\n        var handle = this.$container.attr('data-product-handle');\n        var url = this.$container.attr('data-product-url');\n        var aspectRatio = this.$container.attr('data-aspect-ratio');\n        var featuredImage = this.$container.attr('data-img-url');\n  \n        // Remove current product if already in set of recent\n        if (theme.recentlyViewed.recent.hasOwnProperty(handle)) {\n          delete theme.recentlyViewed.recent[handle];\n        }\n  \n        // Add it back to the end\n        theme.recentlyViewed.recent[handle] = {\n          url: url,\n          aspectRatio: aspectRatio,\n          featuredImage: featuredImage\n        };\n  \n        Cookies.set('theme-recent', JSON.stringify(theme.recentlyViewed.recent), { path: '/', expires: 10000 });\n      },\n  \n      initImageZoom: function() {\n        var $container = $(this.selectors.imageContainer, this.$container);\n        var imageZoom = new theme.Photoswipe($container[0], this.sectionId);\n      },\n  \n      stringOverrides: function() {\n        theme.productStrings = theme.productStrings || {};\n        $.extend(theme.strings, theme.productStrings);\n      },\n  \n      setImageSizes: function() {\n        if (!this.settings.hasImages) {\n          return;\n        }\n  \n        // Get srcset image src, works on most modern browsers\n        // otherwise defaults to settings.imageSize\n        var currentImage = this.$firstProductImage[0].currentSrc;\n  \n        if (currentImage) {\n          this.settings.imageSize = theme.Images.imageSize(currentImage);\n        }\n      },\n  \n      initVariants: function() {\n        if (!document.getElementById(this.selectors.variantsJson)) {\n          return;\n        }\n  \n        this.variantsObject = JSON.parse(document.getElementById(this.selectors.variantsJson).innerHTML);\n  \n        var options = {\n          $container: this.$container,\n          enableHistoryState: this.settings.enableHistoryState,\n          singleOptionSelector: this.selectors.singleOptionSelector,\n          originalSelectorId: this.selectors.originalSelectorId,\n          variants: this.variantsObject\n        };\n  \n        if ($(this.selectors.variantColorSwatch).length) {\n          $(this.selectors.variantColorSwatch).on('change', function(evt) {\n            var $el = $(evt.currentTarget);\n            var color = $el.data('color-name');\n            var index = $el.data('color-index');\n            this.updateColorName(color, index);\n          }.bind(this));\n        }\n  \n        this.variants = new slate.Variants(options);\n        this.$container.on('variantChange' + this.settings.namespace, this.updateCartButton.bind(this));\n        this.$container.on('variantImageChange' + this.settings.namespace, this.updateVariantImage.bind(this));\n        this.$container.on('variantPriceChange' + this.settings.namespace, this.updatePrice.bind(this));\n        if ($(this.selectors.sku).length) {\n          this.$container.on('variantSKUChange' + this.settings.namespace, this.updateSku.bind(this));\n        }\n        if (this.settings.inventory) {\n          this.$container.on('variantChange' + this.settings.namespace, this.updateInventory.bind(this));\n        }\n  \n        // Update individual variant availability on each selection\n        if (theme.settings.dynamicVariantsEnable && document.getElementById(this.selectors.currentVariantJson)) {\n          this.currentVariantObject = JSON.parse(document.getElementById(this.selectors.currentVariantJson).innerHTML);\n  \n          this.$variantSelectors.all.on('change' + this.settings.namespace, this.updateVariantAvailability.bind(this));\n  \n          // Set default state based on current selected variant\n          this.setCurrentVariantAvailability(this.currentVariantObject, true);\n        }\n      },\n  \n      setCurrentVariantAvailability: function(variant) {\n        var valuesToEnable = {\n          option1: [],\n          option2: [],\n          option3: []\n        };\n  \n        // Disable all options to start\n        this.disableVariantGroup($(this.selectors.formContainer).find('.variant-input-wrap'));\n  \n        // Combine all available variants\n        var availableVariants = this.variantsObject.filter(function(el) {\n          if (variant.id === el.id) {\n            return false;\n          }\n  \n          // Option 1\n          if (variant.option2 === el.option2 && variant.option3 === el.option3) {\n            return true;\n          }\n  \n          // Option 2\n          if (variant.option1 === el.option1 && variant.option3 === el.option3) {\n            return true;\n          }\n  \n          // Option 3\n          if (variant.option1 === el.option1 && variant.option2 === el.option2) {\n            return true;\n          }\n        });\n  \n  \n        // IE11 can't handle shortform of {variant} so extra step is needed\n        var variantObject = {\n          variant: variant\n        };\n  \n        availableVariants = Object.assign({}, variantObject, availableVariants);\n  \n        // Loop through each available variant to gather variant values\n        for (var property in availableVariants) {\n          if (availableVariants.hasOwnProperty(property)) {\n            var item = availableVariants[property];\n            var option1 = item.option1;\n            var option2 = item.option2;\n            var option3 = item.option3;\n  \n            if (option1) {\n              if (valuesToEnable.option1.indexOf(option1) === -1) {\n                valuesToEnable.option1.push(option1);\n              }\n            }\n            if (option2) {\n              if (valuesToEnable.option2.indexOf(option2) === -1) {\n                valuesToEnable.option2.push(option2);\n              }\n            }\n            if (option3) {\n              if (valuesToEnable.option3.indexOf(option3) === -1) {\n                valuesToEnable.option3.push(option3);\n              }\n            }\n          }\n        }\n  \n        // Have values to enable, separated by option index\n        if (valuesToEnable.option1.length) {\n          this.enableVariantOptionByValue(valuesToEnable.option1, 'option1');\n        }\n        if (valuesToEnable.option2.length) {\n          this.enableVariantOptionByValue(valuesToEnable.option2, 'option2');\n        }\n        if (valuesToEnable.option3.length) {\n          this.enableVariantOptionByValue(valuesToEnable.option3, 'option3');\n        }\n      },\n  \n      updateVariantAvailability: function(evt, value, index) {\n        if (value && index) {\n          var newVal = value;\n          var optionIndex = index;\n        } else {\n          var $el = $(evt.currentTarget);\n          var newVal = $el.val() ? $el.val() : evt.currentTarget.value;\n          var optionIndex = $el.data('index');\n        }\n  \n        var variants = this.variantsObject.filter(function(el) {\n          return el[optionIndex] === newVal;\n        });\n  \n        // Disable all buttons/dropdown options that aren't the current index\n        $(this.selectors.formContainer).find('.variant-input-wrap').each(function(index, el) {\n          var $group = $(el);\n          var currentOptionIndex = $group.data('index');\n  \n          if (currentOptionIndex !== optionIndex) {\n            // Disable all options as a starting point\n            this.disableVariantGroup($group);\n  \n            // Loop through legit available options and enable\n            for (var i = 0; i < variants.length; i++) {\n              this.enableVariantOption($group, variants[i][currentOptionIndex]);\n            }\n          }\n        }.bind(this));\n      },\n  \n      disableVariantGroup: function($group) {\n        if (theme.settings.dynamicVariantType === 'dropdown') {\n          $group.find('option').prop('disabled', true)\n        } else {\n          $group.find('input').prop('disabled', true);\n          $group.find('label').toggleClass('disabled', true);\n        }\n      },\n  \n      enableVariantOptionByValue: function(array, index) {\n        var $group = $(this.selectors.formContainer).find('.variant-input-wrap[data-index=\"'+ index +'\"]');\n  \n        for (var i = 0; i < array.length; i++) {\n          this.enableVariantOption($group, array[i]);\n        }\n      },\n  \n      enableVariantOption: function($group, value) {\n        // Selecting by value so escape it\n        value = value.replace(/([ #;&,.+*~\\':\"!^$[\\]()=>|\\/@])/g,'\\\\$1');\n  \n        if (theme.settings.dynamicVariantType === 'dropdown') {\n          $group.find('option[value=\"'+ value +'\"]').prop('disabled', false);\n        } else {\n          var $buttonGroup = $group.find('.variant-input[data-value=\"'+ value +'\"]');\n          $buttonGroup.find('input').prop('disabled', false);\n          $buttonGroup.find('label').toggleClass('disabled', false);\n        }\n      },\n  \n      // Variant change functions\n      updateColorName: function(color, index) {\n        // Updates on radio button change, not variant.js\n        $('#VariantColorLabel-' + this.sectionId + '-' + index).text(color);\n      },\n  \n      updateCartButton: function(evt) {\n        var variant = evt.variant;\n  \n        if (variant) {\n          if (variant.available) {\n            // Available, enable the submit button and change text\n            $(this.selectors.addToCart).removeClass(classes.disabled).prop('disabled', false);\n            $(this.selectors.addToCartText).html(theme.strings.addToCart);\n          } else {\n            // Sold out, disable the submit button and change text\n            $(this.selectors.addToCart).addClass(classes.disabled).prop('disabled', true);\n            $(this.selectors.addToCartText).html(theme.strings.soldOut);\n          }\n        } else {\n          // The variant doesn't exist, disable submit button\n          $(this.selectors.addToCart).addClass(classes.disabled).prop('disabled', true);\n          $(this.selectors.addToCartText).html(theme.strings.unavailable);\n        }\n      },\n  \n      updatePrice: function(evt) {\n        var variant = evt.variant;\n  \n        if (variant) {\n          // Regular price\n          $(this.selectors.price).html(theme.Currency.formatMoney(variant.price, theme.settings.moneyFormat)).show();\n  \n          // Sale price, if necessary\n          if (variant.compare_at_price > variant.price) {\n            $(this.selectors.comparePrice).html(theme.Currency.formatMoney(variant.compare_at_price, theme.settings.moneyFormat));\n            $(this.selectors.priceWrapper).removeClass('hide');\n            $(this.selectors.price).addClass(classes.onSale);\n            $(this.selectors.comparePriceA11y).attr('aria-hidden', 'false');\n            $(this.selectors.priceA11y).attr('aria-hidden', 'false');\n  \n            var savings = variant.compare_at_price - variant.price;\n  \n            if (theme.settings.saveType == 'percent') {\n              savings = Math.round(((savings) * 100) / variant.compare_at_price) + '%';\n            } else {\n              savings = theme.Currency.formatMoney(savings, theme.settings.moneyFormat);\n            }\n  \n            $(this.selectors.savePrice)\n              .removeClass('hide')\n              .html(theme.strings.savePrice.replace('[saved_amount]', savings));\n          } else {\n            $(this.selectors.priceWrapper).addClass('hide');\n            $(this.selectors.price).removeClass(classes.onSale);\n            $(this.selectors.comparePriceA11y).attr('aria-hidden', 'true');\n            $(this.selectors.priceA11y).attr('aria-hidden', 'true');\n            $(this.selectors.savePrice).addClass('hide')\n          }\n  \n          if (theme.settings.currenciesEnabled) {\n            theme.currencySwitcher.ajaxrefresh();\n          }\n        }\n      },\n  \n      updateSku: function(evt) {\n        var variant = evt.variant;\n        var newSku = '';\n  \n        if (variant) {\n          if (variant.sku) {\n            newSku = variant.sku;\n          }\n  \n          $(this.selectors.sku).html(newSku);\n        }\n      },\n  \n      updateInventory: function(evt) {\n        var variant = evt.variant;\n        var showInventory = false;\n        var quantity = 0;\n        var $inventoryLabel = $(this.selectors.inventory);\n  \n        if (variant && variant.inventory_management === 'shopify') {\n          showInventory = true;\n          quantity = window.inventories[this.sectionId][variant.id];\n  \n          if (quantity <= 0 || quantity > theme.settings.inventoryThreshold) {\n            showInventory = false;\n          }\n        }\n  \n        if (!showInventory) {\n          $inventoryLabel.addClass('hide');\n        } else {\n          $inventoryLabel\n            .removeClass('hide')\n            .text(theme.strings.stockLabel.replace('[count]', quantity));\n        }\n      },\n  \n      updateVariantImage: function(evt) {\n        var variant = evt.variant;\n        var sizedImgUrl = theme.Images.getSizedImageUrl(variant.featured_image.src, this.settings.imageSize);\n  \n        var $newImage = $('.product__thumb[data-id=\"' + variant.featured_image.id + '\"]');\n        var imageIndex = this._slideIndex($newImage.closest('.product__thumb-item'));\n  \n        // No image, bail\n        if (typeof imageIndex === 'undefined') {\n          return;\n        }\n  \n        this.$mainSlider.slick('slickGoTo', imageIndex);\n      },\n  \n      // Image/thumbnail toggling\n      initImageSwitch: function() {\n        if (!$(this.selectors.photoThumbs).length) {\n          return;\n        }\n  \n        var self = this;\n  \n        $(this.selectors.photoThumbs).on('click', function(evt) {\n          evt.preventDefault();\n        });\n      },\n  \n      checkIfVideos: function() {\n        var $productVideos = this.$mainSlider.find(selectors.productVideo);\n  \n        // Stop if there are 0 videos\n        if (!$productVideos.length) {\n          return false;\n        }\n  \n        var videoTypes = [];\n  \n        $productVideos.each(function() {\n          var type = $(this).data('video-type');\n  \n          if (videoTypes.indexOf(type) < 0) {\n            videoTypes.push(type);\n          }\n        });\n  \n        // Load YouTube API if not already loaded\n        if (videoTypes.indexOf('youtube') > -1) {\n          if (!theme.config.youTubeReady) {\n            window.loadYouTube();\n            $('body').on('youTubeReady' + this.settings.namespace, function() {\n              this.loadYoutubeVideos($productVideos);\n            }.bind(this));\n          } else {\n            this.loadYoutubeVideos($productVideos);\n          }\n        }\n  \n        // Load Vimeo API if not already loaded\n        if (videoTypes.indexOf('vimeo') > -1) {\n          if (!vimeoReady) {\n            window.loadVimeo();\n            $('body').on('vimeoReady' + this.settings.namespace, function() {\n              this.loadVimeoVideos($productVideos);\n            }.bind(this))\n          } else {\n            this.loadVimeoVideos($productVideos);\n          }\n        }\n  \n        // Add mp4 video players\n        if (videoTypes.indexOf('mp4') > -1) {\n          this.loadMp4Videos($productVideos);\n        }\n  \n        return videoTypes;\n      },\n  \n      loadMp4Videos: function($videos) {\n        $videos.each(function() {\n          var $el = $(this);\n          if ($el.data('video-type') != 'mp4') {\n            return;\n          }\n  \n          var id = $el.attr('id');\n          var videoId = $el.data('video-id');\n  \n          videos[this.id] = {\n            type: 'mp4',\n            divId: id,\n            style: $el.data('video-style')\n          };\n        });\n      },\n  \n      loadVimeoVideos: function($videos) {\n        $videos.each(function() {\n          var $el = $(this);\n          if ($el.data('video-type') != 'vimeo') {\n            return;\n          }\n  \n          var id = $el.attr('id');\n          var videoId = $el.data('video-id');\n  \n          videos[this.id] = {\n            type: 'vimeo',\n            divId: id,\n            id: videoId,\n            style: $el.data('video-style'),\n            width: $el.data('video-width'),\n            height: $el.data('video-height')\n          };\n        });\n  \n        // Create a new player for each Vimeo video\n        for (var key in videos) {\n          if (videos[key].type != 'vimeo') {\n            continue;\n          }\n  \n          var args = $.extend({}, vimeoVideoOptions, videos[key]);\n          vimeoPlayers[key] = new Vimeo.Player(videos[key].divId, args);\n        }\n  \n        vimeoReady = true;\n      },\n  \n      autoplayVimeoVideo: function(id) {\n        // Do not autoplay on mobile though\n        if (!theme.config.bpSmall) {\n          this.requestToPlayVimeoVideo(id);\n        } else {\n          // Set as loaded on mobile so you can see the image\n          var $player = $('#' + id);\n          setParentAsLoaded($player);\n        }\n      },\n  \n      requestToPlayVimeoVideo: function(id) {\n        // The slider may initialize and attempt to play the video before\n        // the API is even ready, because it sucks.\n  \n        var $player = $('#' + id);\n        setParentAsLoading($player);\n  \n        if (!vimeoReady) {\n          // Wait for the trigger, then play it\n          $('body').on('vimeoReady' + this.settings.namespace, function() {\n            this.playVimeoVideo(id);\n          }.bind(this))\n          return;\n        }\n  \n        this.playVimeoVideo(id);\n      },\n  \n      playVimeoVideo: function(id) {\n        vimeoPlayers[id].play();\n  \n        if (videos[id].style === 'muted') {\n          vimeoPlayers[id].setVolume(0);\n        }\n  \n        var $player = $('#' + id);\n        setParentAsLoaded($player);\n      },\n  \n      stopVimeoVideo: function(id) {\n        if (!theme.config.vimeoReady) {\n          return;\n        }\n  \n        if (id) {\n          vimeoPlayers[id].pause();\n        } else {\n          for (key in vimeoPlayers) {\n            if (typeof vimeoPlayers[key].pause === 'function') {\n              vimeoPlayers[key].pause();\n            }\n          }\n        }\n      },\n  \n      loadYoutubeVideos: function($videos) {\n        $videos.each(function() {\n          var $el = $(this);\n          if ($el.data('video-type') != 'youtube') {\n            return;\n          }\n  \n          var id = $el.attr('id');\n          var videoId = $el.data('youtube-id');\n  \n          videos[this.id] = {\n            type: 'youtube',\n            id: id,\n            videoId: videoId,\n            style: $el.data('video-style'),\n            width: $el.data('video-width'),\n            height: $el.data('video-height'),\n            attemptedToPlay: false\n          };\n        });\n  \n        // Create a player for each YouTube video\n        for (var key in videos) {\n          if (videos[key].type === 'youtube') {\n            if (videos.hasOwnProperty(key)) {\n              var args = $.extend({}, youtubeVideoOptions, videos[key]);\n  \n              if (args.style === 'muted') {\n                // default youtubeVideoOptions, no need to change anything\n              } else {\n                args.playerVars.controls = 1;\n                args.playerVars.autoplay = 0;\n              }\n  \n              youtubePlayers[key] = new YT.Player(key, args);\n            }\n          }\n        }\n  \n        youtubeReady = true;\n      },\n  \n      requestToPlayYoutubeVideo: function(id, forcePlay) {\n        if (!theme.config.youTubeReady) {\n          return;\n        }\n  \n        var $player = $('#' + id);\n        setParentAsLoading($player);\n  \n        // If video is requested too soon, player might not be ready.\n        // Set arbitrary timeout to request it again in a second\n        if (typeof youtubePlayers[id].playVideo != 'function') {\n          var o = this;\n          setTimeout(function() {\n            o.playYoutubeVideo(id, forcePlay);\n          }, 1000);\n          return;\n        }\n  \n        this.playYoutubeVideo(id, forcePlay);\n      },\n  \n      playYoutubeVideo: function (id, forcePlay) {\n        var $player = $('#' + id);\n        setParentAsLoaded($player);\n        if (typeof youtubePlayers[id].playVideo === 'function') {\n          youtubePlayers[id].playVideo();\n        }\n  \n        // forcePlay is sent as true from beforeSlideChange so the visibility\n        // check isn't fooled by the next slide positioning\n        if (!forcePlay) {\n          initCheckVisibility(id);\n        }\n      },\n  \n      stopYoutubeVideo: function(id) {\n        if (!theme.config.youTubeReady) {\n          return;\n        }\n  \n        if (id && youtubePlayers[id]) {\n          if (typeof youtubePlayers[id].pauseVideo === 'function') {\n            youtubePlayers[id].pauseVideo();\n          }\n          $(window).off('scroll.' + id);\n        } else {\n          for (key in youtubePlayers) {\n            if (typeof youtubePlayers[key].pauseVideo === 'function') {\n              youtubePlayers[key].pauseVideo();\n              $(window).off('scroll.' + key);\n            }\n          }\n        }\n      },\n  \n      playMp4Video: function(id) {\n        var $player = $('#' + id);\n        setParentAsLoaded($player);\n  \n        $player[0].play();\n      },\n  \n      stopMp4Video: function(id) {\n        if (id) {\n          $('#' + id)[0].pause();\n        } else {\n          // loop through all mp4 videos to stop them\n          for (var key in videos) {\n            if (videos[key].type === 'mp4') {\n              var player = $('#' + videos[key].divId)[0];\n              if (typeof player.pause === 'function') {\n                player.pause();\n              }\n            }\n          }\n        }\n      },\n  \n      createImageCarousels: function() {\n        if (!this.$thumbSlider.length || $(this.selectors.photoThumbs).length < 2) {\n          // Single product image. Init video if it exists\n          var $video = $(this.selectors.productImageMain).find(selectors.productVideo);\n          if ($video.length) {\n            this.initVideo($video);\n          }\n          return;\n        }\n  \n        this.settings.hasMultipleImages = true;\n  \n        // Set starting slide (for both sliders)\n        var $activeSlide = this.$mainSlider.find('.starting-slide');\n        var startIndex = this._slideIndex($activeSlide);\n  \n        // Lame way to prevent duplicate event listeners\n        this.$mainSlider.off('init');\n        this.$mainSlider.off('beforeChange');\n        this.$mainSlider.on('init', this.mainSlideInit.bind(this));\n        this.$mainSlider.on('beforeChange', this.beforeSlideChange.bind(this));\n        this.$thumbSlider.on('init', this.thumbSlideInit.bind(this));\n  \n        // Default (mobile) slider settings\n        this.mainSliderArgs = {\n          infinite: true,\n          arrows: false,\n          dots: true,\n          adaptiveHeight: true,\n          initialSlide: startIndex\n        };\n  \n        this.thumbSliderArgs = {\n          initialSlide: startIndex\n        };\n  \n        // Init sliders normally\n        var sliderArgs = this.setSliderArgs();\n        this.initSliders(sliderArgs);\n  \n        // Re-init slider when a breakpoint is hit\n        $('body').on('matchSmall matchLarge', function() {\n          var sliderArgs = this.setSliderArgs();\n          this.initSliders(sliderArgs);\n        }.bind(this));\n  \n        // Too many thumbnails can cause the AOS calculations to be off\n        // so refresh that when the slider is ready\n        if (AOS) {\n          AOS.refresh();\n        }\n      },\n  \n      initSliders: function(args) {\n        this.destroyImageCarousels();\n  \n        this.$mainSlider.slick(args.main);\n        if (!theme.config.bpSmall) {\n          this.$thumbSlider.slick(args.thumbs);\n        }\n  \n        this.settings.slickMainInitialized = true;\n      },\n  \n      setSliderArgs: function() {\n        var args = {};\n        var thumbnailsVertical = this.$thumbSlider.data('position') === 'beside' ? true : false;\n  \n        if (theme.config.bpSmall) {\n          args.main = this.mainSliderArgs;\n          args.thumbs = this.thumbSliderArgs;\n        } else {\n          args.main = $.extend({}, this.mainSliderArgs, {\n            asNavFor: this.selectors.thumbSlider,\n            adaptiveHeight: thumbnailsVertical ? false : true,\n            dots: false,\n            infinite: false,\n            fade: true\n          });\n          args.thumbs = $.extend({}, this.thumbSliderArgs, {\n            asNavFor: this.selectors.mainSlider,\n            slidesToShow: thumbnailsVertical ? 3 : 5,\n            slidesToScroll: 1,\n            arrows: false,\n            dots: false,\n            vertical: thumbnailsVertical,\n            verticalSwiping: thumbnailsVertical,\n            focusOnSelect: true,\n            infinite: false,\n            customHeightMatching: thumbnailsVertical,\n            customSlideAdvancement: true\n          });\n        }\n  \n        return args;\n      },\n  \n      destroyImageCarousels: function() {\n        if (this.$mainSlider && this.settings.slickMainInitialized) {\n          this.$mainSlider.slick('unslick');\n          this.settings.slickMainInitialized = false;\n        }\n  \n        if (this.$thumbSlider && this.settings.slickThumbInitialized) {\n          this.$thumbSlider.slick('unslick');\n          this.settings.slickThumbInitialized = false;\n        }\n  \n        this.settings.slickMainInitialized = false;\n        this.settings.slickThumbInitialized = false;\n      },\n  \n      mainSlideInit: function(event, slick) {\n        var $slider = slick.$slider;\n        var $currentSlide = $slider.find(selectors.currentSlide);\n        var $video = $currentSlide.find(selectors.productVideo);\n  \n        if (!$video.length) {\n          return;\n        }\n  \n        this.initVideo($video);\n      },\n  \n      thumbSlideInit: function(event, slick) {\n        this.settings.slickThumbInitialized = true;\n      },\n  \n      initVideo: function($video) {\n        var videoType = $video.data('video-type');\n        var divId = $video.attr('id');\n  \n        if (videoType === 'mp4' && videos[divId].style === 'muted') {\n          this.playMp4Video(divId);\n        }\n  \n        if (videoType === 'youtube') {\n          if (youtubeReady && videos[divId].style === 'muted') {\n            this.requestToPlayYoutubeVideo(divId);\n          }\n        }\n  \n        if (videoType === 'vimeo') {\n          if (vimeoReady) {\n            this.playOrShowVimeo(divId);\n          } else {\n            $('body').on('vimeoReady' + this.settings.namespace, function() {\n              this.playOrShowVimeo(divId);\n            }.bind(this))\n          }\n        }\n  \n        // Hacky way to trigger resetting the slider layout in modals\n        if (this.inModal) {\n          this.resizeSlides();\n        }\n      },\n  \n      stopVideo: function(id, type) {\n        if (!id) {\n          this.stopYoutubeVideo();\n          this.stopVimeoVideo();\n          this.stopMp4Video();\n        }\n  \n        if (type === 'youtube') {\n          this.stopYoutubeVideo(id);\n        }\n  \n        if (type === 'mp4') {\n          this.stopMp4Video(id);\n        }\n  \n        if (type === 'vimeo') {\n          this.stopVimeoVideo(id);\n        }\n      },\n  \n      playOrShowVimeo: function(id) {\n        if (videos[id] && videos[id].style === 'muted') {\n          this.autoplayVimeoVideo(id);\n        } else if (videos[id] && videos[id].style === 'unmuted') {\n          setParentAsLoaded($('#' + id));\n        }\n      },\n  \n      getVideoType: function($video) {\n        return $video.data('video-type');\n      },\n  \n      getVideoId: function($video) {\n        return $video.attr('id');\n      },\n  \n      beforeSlideChange: function(event, slick, currentSlide, nextSlide) {\n        var $slider = slick.$slider;\n        var $currentSlide = $slider.find(selectors.currentSlide);\n        var $prevVideo = $currentSlide.find('.product__video');\n        var $nextSlide = $slider.find('.slick-slide[data-slick-index=\"' + nextSlide + '\"]');\n        var $nextVideo = $nextSlide.find('.product__video');\n  \n        // Pause any existing slide video\n        if (currentSlide !== nextSlide && $prevVideo.length) {\n          var prevVideoType = this.getVideoType($prevVideo);\n          var prevVideoId = this.getVideoId($prevVideo);\n  \n          if (prevVideoId) {\n            this.stopVideo(prevVideoId, prevVideoType);\n          }\n        }\n  \n        // Prep next slide video\n        if ($nextVideo.length) {\n          var nextVideoType = this.getVideoType($nextVideo);\n          var nextVideoId = this.getVideoId($nextVideo);\n  \n          // Prep Vimeo with a backup in case the API isn't ready\n          if (nextVideoId && nextVideoType === 'vimeo') {\n            if (vimeoReady) {\n              if (videos[nextVideoId] && videos[nextVideoId].style === 'muted') {\n                this.autoplayVimeoVideo(nextVideoId);\n              }\n            } else {\n              $('body').on('vimeoReady' + this.settings.namespace, function() {\n                if (videos[nextVideoId] && videos[nextVideoId].style === 'muted') {\n                  this.autoplayVimeoVideo(nextVideoId);\n                }\n              }.bind(this))\n            }\n          }\n  \n          // Prep YouTube with a backup in case API isn't ready\n          if (nextVideoId && nextVideoType === 'youtube') {\n            if (youtubeReady) {\n              if (videos[nextVideoId] && videos[nextVideoId].style === 'muted') {\n                this.requestToPlayYoutubeVideo(nextVideoId, true);\n              }\n            } else {\n              $('body').on('youTubeReady' + this.settings.namespace, function() {\n                if (videos[nextVideoId] && videos[nextVideoId].style === 'muted') {\n                  this.requestToPlayYoutubeVideo(nextVideoId, true);\n                }\n              }.bind(this))\n            }\n          }\n  \n          // Autoplay muted MP4 videos\n          if (nextVideoId && videos[nextVideoId] && videos[nextVideoId].style === 'muted') {\n            if (nextVideoType === 'mp4') {\n              this.playMp4Video(nextVideoId);\n            }\n          }\n  \n          // Set unmuted videos to loaded state\n          if (nextVideoId && videos[nextVideoId] && videos[nextVideoId].style != 'muted') {\n            setParentAsLoaded($('#' + nextVideoId));\n          }\n        }\n      },\n  \n      resizeSlides: function() {\n        if (!this.settings.hasMultipleImages) {\n          return;\n        }\n  \n        $(window).trigger('resize.slick');\n        setTimeout(function() {\n          if (this.$mainSlider && this.settings.slickMainInitialized) {\n            this.$mainSlider.slick('setPosition');\n          }\n          if (this.$thumbSlider && this.settings.slickThumbInitialized) {\n            this.$thumbSlider.slick('setPosition');\n          }\n        }.bind(this), 500); // same timing as modal open transition\n      },\n  \n      _slideIndex: function($el) {\n        return $el.data('index');\n      },\n  \n      initQtySelector: function() {\n        this.$container.find('.js-qty__wrapper').each(function() {\n          new theme.QtySelector($(this), {\n            namespace: '.product'\n          });\n        });\n      },\n  \n      initAjaxProductForm: function() {\n        if (theme.settings.cartType === 'drawer') {\n          new theme.AjaxProduct($(this.selectors.formContainer));\n        }\n      },\n  \n      openModalProduct: function() {\n        if (!this.settings.modalInit) {\n          var $formHolder = $(this.selectors.modalFormHolder);\n          var url = $formHolder.data('url');\n          url = url + '?view=ajax';\n  \n          $formHolder.load(url + ' #AddToCartForm-' + this.sectionId, function() {\n            $formHolder.addClass('is-active');\n            this.formSetup();\n            if (Shopify.PaymentButton) {\n              Shopify.PaymentButton.init();\n            }\n          }.bind(this));\n  \n          this.productSetup();\n          this.loadModalContent();\n          this.createImageCarousels();\n          this.settings.modalInit = true;\n        }\n  \n        this.resizeSlides();\n  \n        // Add product id to recently viewed array\n        this.addIdToRecentlyViewed();\n      },\n  \n      closeModalProduct: function() {\n        this.stopVideo();\n        $('body').off(this.settings.namespace);\n        $(window).off(this.settings.namespace);\n      },\n  \n      loadModalContent: function() {\n        // Load videos if they exist\n        var videoTypes = this.checkIfVideos();\n  \n        // Lazyload mp4 videos similar to images\n        if (videoTypes && videoTypes.indexOf('mp4') > -1) {\n          this.$modal.find('.product__video[data-video-type=\"mp4\"]').each(function(i, video) {\n            var $el = $(video);\n            var src = $el.data('video-src');\n            var source = document.createElement('source');\n            source.setAttribute('src', src);\n            $el.append(source);\n          }.bind(this));\n        }\n      },\n  \n      onUnload: function() {\n        this.$container.off(this.settings.namespace);\n        $('body').off(this.settings.namespace);\n        this.destroyImageCarousels();\n      }\n    });\n  \n    return Product;\n  })();\n  \n  theme.Recommendations = (function() {\n  \n    function Recommendations(container) {\n      var $container = this.$container = $(container);\n      var sectionId = this.sectionId = $container.attr('data-section-id');\n  \n      this.selectors = {\n        recommendations: '#Recommendations-' + sectionId,\n        placeholder: '.product-recommendations-placeholder',\n        sectionClass: ' .product-recommendations',\n        productResults: '.grid-product'\n      };\n  \n      this.init();\n    }\n  \n    Recommendations.prototype = $.extend({}, Recommendations.prototype, {\n      init: function() {\n        var $section = $(this.selectors.recommendations);\n  \n        if (!$section.length || $section.data('enable') === false) {\n          return;\n        }\n  \n        var $placeholder = $section.find(this.selectors.placeholder);\n        var id = $section.data('product-id');\n        var limit = $section.data('limit');\n  \n        var url = '/recommendations/products?section_id=product-recommendations&limit='+ limit +'&product_id=' + id;\n  \n        $placeholder.load(url + this.selectors.sectionClass, function(data) {\n          theme.reinitProductGridItem($section);\n          this.updateVariantInventory($section);\n  \n          // If no results, hide the entire section\n          if ($(data).find(this.selectors.sectionClass).find(this.selectors.productResults).length === 0) {\n            $section.addClass('hide');\n          }\n        }.bind(this));\n      },\n  \n      // Recommended products load via JS and don't add variant inventory to the\n      // global variable that we later check. This function scrapes a data div\n      // to get that info and manually add the values.\n      updateVariantInventory: function($section) {\n        window.inventories = window.inventories || {};\n  \n        $section.find('.product__inventory-data').each(function() {\n          var $el = $(this);\n          var sectionId = $el.data('section-id');\n          window.inventories[sectionId] = {};\n          $.each($el.data(), function(variant, qty) {\n            window.inventories[sectionId][variant] = qty;\n          })\n        });\n      }\n    });\n  \n    return Recommendations;\n  })();\n  \n  theme.CollectionHeader = (function() {\n  \n    var selectors = {\n      hero: '.collection-hero',\n      parallaxContainer: '.parallax-container'\n    };\n  \n    function CollectionHeader(container) {\n      var $container = $(container);\n      this.namespace = '.collection-header';\n  \n      var $heroImageContainer = this.$heroContainer = $container.find(selectors.hero);\n      if ($heroImageContainer.length) {\n        this.checkIfNeedReload();\n  \n        if ($container.data('parallax')) {\n          var $parallaxContainer = $container.find(selectors.parallaxContainer);\n          var args = {\n            namespace: this.namespace\n          };\n          theme.parallaxSections[this.namespace] = new theme.Parallax($parallaxContainer, args);\n        }\n      } else {\n        // Prevent 'Overlay header over collection' header setting\n        // from breaking layout. Required because settings from two\n        // different sections rely on each other on page load.\n        theme.headerNav.disableOverlayHeader();\n      }\n    }\n  \n    CollectionHeader.prototype = $.extend({}, CollectionHeader.prototype, {\n      // A liquid variable in the header needs a full page refresh\n      // if the collection header hero image setting is enabled\n      // and the header is set to sticky. Only necessary in the editor.\n      checkIfNeedReload: function() {\n        if (!Shopify.designMode) {\n          return;\n        }\n  \n        if (!theme.settings.overlayHeader) {\n          return;\n        }\n        var $header = $('.header-wrapper');\n        if (!$header.hasClass('is-light') && !$('.header-wrapper').hasClass('header-wrapper--sticky')) {\n          location.reload();\n        }\n      },\n  \n      onUnload: function() {\n        if (theme.parallaxSections[this.namespace]) {\n          theme.parallaxSections[this.namespace].destroy();\n          delete theme.parallaxSections[this.namespace];\n        }\n      }\n    });\n  \n    return CollectionHeader;\n  })();\n  \n  theme.CollectionSidebar = (function() {\n    var drawerStyle = false;\n  \n    function CollectionSidebar(container) {\n      this.$container = $(container);\n      this.init();\n    }\n  \n    CollectionSidebar.prototype = $.extend({}, CollectionSidebar.prototype, {\n      init: function() {\n        // Force close the drawer if it exists\n        this.onUnload();\n  \n        drawerStyle = this.$container.data('style') === 'drawer';\n        theme.FilterDrawer = new theme.Drawers('FilterDrawer', 'collection-filters', true);\n      },\n  \n      forceReload: function() {\n        this.init();\n      },\n  \n      onSelect: function() {\n        if (theme.FilterDrawer) {\n          if (!drawerStyle) {\n            theme.FilterDrawer.close();\n            return;\n          }\n  \n          if (drawerStyle || theme.config.bpSmall) {\n            theme.FilterDrawer.open();\n          }\n        }\n      },\n  \n      onDeselect: function() {\n        if (theme.FilterDrawer) {\n          theme.FilterDrawer.close();\n        }\n      },\n  \n      onUnload: function() {\n        if (theme.FilterDrawer) {\n          theme.FilterDrawer.close();\n        }\n      }\n    });\n  \n    return CollectionSidebar;\n  })();\n  \n  theme.Collection = (function() {\n  \n    var selectors = {\n      colorSwatchImage: '.grid-product__color-image',\n      colorSwatch: '.color-swatch--with-image'\n    };\n  \n    function Collection(container) {\n      this.container = container;\n      this.sectionId = $(container).attr('data-section-id');\n      this.namespace = '.collection-' + this.sectionId;\n  \n      this.init();\n    }\n  \n    Collection.prototype = $.extend({}, Collection.prototype, {\n      init: function() {\n        // init is called on load and when tags are selected\n        this.$container = $(this.container);\n        var sectionId = this.sectionId = this.$container.attr('data-section-id');\n        this.namespace = '.collection-' + sectionId;\n  \n        this.sortBy();\n        this.colorSwatchHovering();\n  \n        theme.reinitSection('collection-sidebar');\n      },\n  \n      sortBy: function() {\n        var $sortBy = $('#SortBy');\n  \n        if (!$sortBy.length) {\n          return;\n        }\n  \n        $sortBy.on('change' + this.namespace, function() {\n          location.href = '?sort_by=' + $(this).val();\n        });\n      },\n  \n      colorSwatchHovering: function() {\n        var $colorImage = $(selectors.colorSwatchImage);\n        if (!$colorImage.length) {\n          return;\n        }\n  \n        var $swatches = this.$container.find(selectors.colorSwatch);\n  \n        $swatches.on({\n          mouseenter: function (evt) {\n            $el = $(evt.currentTarget);\n            var id = $el.data('variant-id');\n            var image = $el.data('variant-image');\n            $('.grid-product__color-image--' + id)\n              .css('background-image', 'url(' + image + ')')\n              .addClass('is-active');\n          },\n          mouseleave: function (evt) {\n            $el = $(evt.currentTarget);\n            var id = $el.data('variant-id');\n            $('.grid-product__color-image--' + id).removeClass('is-active');\n          }\n        });\n      },\n  \n      forceReload: function() {\n        this.onUnload();\n        this.init();\n      },\n  \n      onUnload: function() {\n        $(window).off(this.namespace);\n        this.$container.off(this.namespace);\n        $(selectors.colorSwatch).off(this.namespace);\n      }\n    });\n  \n    return Collection;\n  })();\n  \n  theme.HeaderSection = (function() {\n  \n    var selectors = {\n      drawer: '#NavDrawer',\n      mobileSubNavToggle: '.mobile-nav__toggle-btn',\n      hasSublist: '.mobile-nav__has-sublist'\n    };\n  \n    var classes = {\n      navExpanded: 'mobile-nav--expanded'\n    };\n  \n    function Header(container) {\n      var $container = this.$container = $(container);\n      var sectionId = this.sectionId = $container.attr('data-section-id');\n  \n      // Reload any slideshow if when the header is reloaded to make sure the\n      // sticky header works as expected\n      theme.reinitSection('slideshow-section');\n  \n      theme.currencySwitcher.init()\n      this.initDrawers();\n      theme.headerNav.init();\n      theme.announcementBar.init();\n  \n      // Set a timer to resize the header in case the logo changes size\n      if (Shopify.designMode) {\n        setTimeout(function() {\n          $('body').trigger('resize');\n        }, 500);\n      }\n    }\n  \n    Header.prototype = $.extend({}, Header.prototype, {\n      initDrawers: function() {\n        theme.NavDrawer = new theme.Drawers('NavDrawer', 'nav');\n        if (theme.settings.cartType === 'drawer') {\n          new theme.CartDrawer();\n        }\n  \n        this.drawerMenuButtons();\n      },\n  \n      drawerMenuButtons: function() {\n        $(selectors.drawer).find('.js-drawer-close').on('click', function(evt){\n          evt.preventDefault();\n          theme.NavDrawer.close();\n        });\n  \n        var $mobileSubNavToggle = $(selectors.mobileSubNavToggle);\n  \n        $mobileSubNavToggle.attr('aria-expanded', 'false');\n        $mobileSubNavToggle.each(function (i, el) {\n          var $el = $(el);\n          $el.attr('aria-controls', $el.attr('data-aria-controls'));\n        });\n  \n        $mobileSubNavToggle.on('click', function() {\n          var $el = $(this);\n          var currentlyExpanded = $el.attr('aria-expanded');\n          var toggleState = false;\n  \n          // Updated aria-expanded value based on state pre-click\n          if (currentlyExpanded === 'true') {\n            $el.attr('aria-expanded', 'false');\n          } else {\n            $el.attr('aria-expanded', 'true');\n            toggleState = true;\n          }\n  \n          // Toggle class that expands/collapses sublist\n          $el.closest(selectors.hasSublist).toggleClass(classes.navExpanded, toggleState);\n        });\n      },\n  \n      onBlockSelect: function(evt) {\n        theme.announcementBar.onBlockSelect(evt.detail.blockId);\n      },\n  \n      onDeselect: function() {\n        theme.announcementBar.onBlockDeselect();\n      },\n  \n      onUnload: function() {\n        theme.NavDrawer.close();\n        theme.headerNav.unload();\n        theme.announcementBar.unload();\n      }\n    });\n  \n    return Header;\n  \n  })();\n  \n  theme.FeaturedContentSection = (function() {\n  \n    function FeaturedContent() {\n      $('.rte').find('a:not(:has(img))').addClass('text-link');\n    }\n  \n    return FeaturedContent;\n  })();\n  \n  theme.slideshows = {};\n  \n  theme.SlideshowSection = (function() {\n  \n    var selectors = {\n      parallaxContainer: '.parallax-container'\n    };\n  \n    function SlideshowSection(container) {\n      var $container = this.$container = $(container);\n      var $section = $container.parent();\n      var sectionId = $container.attr('data-section-id');\n      var slideshow = this.slideshow = '#Slideshow-' + sectionId;\n      this.namespace = '.' + sectionId;\n  \n      var $imageContainer = $(container).find('.hero');\n      if ($imageContainer.length) {\n        theme.loadImageSection($imageContainer);\n      }\n  \n      this.init();\n  \n      if ($container.data('parallax')) {\n        var args = {\n          namespace: this.namespace\n        };\n        theme.parallaxSections[this.namespace] = new theme.Parallax($container.find(selectors.parallaxContainer), args);\n      }\n    }\n  \n    SlideshowSection.prototype = $.extend({}, SlideshowSection.prototype, {\n      init: function() {\n        // Prevent slideshows from initializing on top of themselves\n        this.onUnload();\n  \n        var $slideshow = $(this.slideshow);\n        var args = {\n          autoplay: $slideshow.data('autoplay'),\n          arrows: $slideshow.data('arrows'),\n          dots: $slideshow.data('dots'),\n          fade: true,\n          speed: 500 // same as $slideshowImageAnimationSpeed in CSS\n        };\n  \n        theme.slideshows[this.slideshow] = new theme.Slideshow(this.slideshow, args);\n      },\n  \n      forceReload: function() {\n        this.init();\n      },\n  \n      onUnload: function() {\n        if (theme.parallaxSections[this.namespace]) {\n          theme.parallaxSections[this.namespace].destroy();\n          delete theme.parallaxSections[this.namespace];\n        }\n        if (theme.slideshows[this.slideshow]) {\n          theme.slideshows[this.slideshow].destroy();\n          delete theme.slideshows[this.slideshow];\n        }\n      },\n  \n      onSelect: function() {\n        $(this.slideshow).slick('slickPause');\n      },\n  \n      onDeselect: function() {\n        $(this.slideshow).slick('slickPlay');\n      },\n  \n      onBlockSelect: function(evt) {\n        var $slideshow = $(this.slideshow);\n  \n        // Ignore the cloned version\n        var $slide = $('.slideshow__slide--' + evt.detail.blockId + ':not(.slick-cloned)');\n        var slideIndex = $slide.data('slick-index');\n  \n        // Go to selected slide, pause autoplay\n        $slideshow.slick('slickGoTo', slideIndex).slick('slickPause');\n      },\n  \n      onBlockDeselect: function() {\n        $(this.slideshow).slick('slickPlay');\n      }\n    });\n  \n    return SlideshowSection;\n  })();\n  \n  theme.VideoSection = (function() {\n    var youtubeReady;\n    var videos = [];\n    var youtubePlayers = [];\n    var youtubeVideoOptions = {\n      width: 1280,\n      height: 720,\n      playerVars: {\n        autohide: 0,\n        branding: 0,\n        cc_load_policy: 0,\n        controls: 0,\n        fs: 0,\n        iv_load_policy: 3,\n        modestbranding: 1,\n        playsinline: 1,\n        quality: 'hd720',\n        rel: 0,\n        showinfo: 0,\n        wmode: 'opaque'\n      },\n      events: {\n        onReady: onVideoPlayerReady,\n        onStateChange: onVideoStateChange\n      }\n    };\n  \n    var vimeoReady = false;\n    var vimeoVideoOptions = {\n      byline: false,\n      title: false,\n      portrait: false,\n      loop: true\n    };\n  \n    var selectors = {\n      videoParent: '.video-parent-section'\n    };\n  \n    var classes = {\n      loading: 'loading',\n      loaded: 'loaded',\n      interactable: 'video-interactable'\n    };\n  \n    function videoSection(container) {\n      var $container = this.$container = $(container);\n      var sectionId = this.sectionId = $container.attr('data-section-id');\n      var youtubePlayerId = this.youtubePlayerId = 'YouTubeVideo-' + this.sectionId;\n      this.namespace = '.' + youtubePlayerId;\n      var vimeoPlayerId = this.vimeoPlayerId = 'Vimeo-' + this.sectionId;\n      var $vimeoTrigger = this.$vimeoTrigger = $('#VimeoTrigger-' + this.sectionId);\n      var mp4Video = 'Mp4Video-' + this.sectionId;\n  \n      var $youtubeDiv = $('#' + youtubePlayerId);\n      var $vimeoDiv = $('#' + vimeoPlayerId);\n      var $mp4Div = $('#' + mp4Video);\n  \n      this.vimeoPlayer = [];\n  \n      if ($youtubeDiv.length) {\n        this.youtubeVideoId = $youtubeDiv.data('video-id');\n        this.initYoutubeVideo();\n      }\n  \n      if ($vimeoDiv.length) {\n        this.vimeoVideoId = $vimeoDiv.data('video-id');\n        this.initVimeoVideo();\n      }\n  \n      if ($mp4Div.length) {\n        setParentAsLoaded($mp4Div);\n  \n        startMp4Playback(mp4Video).then(function() {\n          // Video played as expected, don't do anything\n        }).catch(function(error) {\n          // Video cannot be played with autoplay, so let\n          // user interact with video element itself\n          setVideoToBeInteractedWith($mp4Div);\n        })\n      }\n    }\n  \n    function startMp4Playback(mp4Video) {\n      return document.querySelector('#' + mp4Video).play();\n    }\n  \n    function onVideoPlayerReady(evt) {\n      var $player = $(evt.target.a);\n      var playerId = $player.attr('id');\n      youtubePlayers[playerId] = evt.target; // update stored player\n      var player = youtubePlayers[playerId];\n  \n      setParentAsLoading($player);\n  \n      youtubePlayers[playerId].mute();\n  \n      // Remove from tabindex because YouTube iframes are annoying and you can focus\n      // on the YouTube logo and it breaks\n      $player.attr('tabindex', '-1');\n  \n      // Add out of view pausing\n      videoVisibilityCheck(playerId);\n      $(window).on('scroll.' + playerId, {id: playerId}, $.throttle(150, videoVisibilityCheck));\n    }\n  \n    function videoVisibilityCheck(id) {\n      var playerId;\n  \n      if (typeof id === 'string') {\n        playerId = id;\n      } else {\n        // Data comes in as part of the scroll event\n        playerId = id.data ? id.data.id : false;\n      }\n  \n      if (playerId) {\n        if (theme.isElementVisible($('#' + playerId))) {\n          playVisibleVideo(playerId);\n        } else {\n          pauseHiddenVideo(playerId);\n        }\n      }\n    }\n  \n    function playVisibleVideo(id) {\n      if (youtubePlayers[id] && typeof youtubePlayers[id].playVideo === 'function') {\n        youtubePlayers[id].playVideo();\n      }\n    }\n  \n    function pauseHiddenVideo(id) {\n      if (youtubePlayers[id] && typeof youtubePlayers[id].pauseVideo === 'function') {\n        youtubePlayers[id].pauseVideo();\n      }\n    }\n  \n    function onVideoStateChange(evt) {\n      var $player = $(evt.target.a);\n      var playerId = $player.attr('id');\n      var player = youtubePlayers[playerId];\n  \n      switch (evt.data) {\n        case -1: // unstarted\n          // Handle low power state on iOS by checking if\n          // video is reset to unplayed after attempting to buffer\n          if (videos[playerId].attemptedToPlay) {\n            setParentAsLoaded($player);\n            setVideoToBeInteractedWith($player);\n          }\n          break;\n        case 0: // ended\n          player.playVideo();\n          break;\n        case 1: // playing\n          setParentAsLoaded($player);\n          break;\n        case 3: // buffering\n          videos[playerId].attemptedToPlay = true;\n          break;\n      }\n    }\n  \n    function setParentAsLoading($el) {\n      $el\n        .closest(selectors.videoParent)\n        .addClass(classes.loading);\n    }\n  \n    function setParentAsLoaded($el) {\n      $el\n        .closest(selectors.videoParent)\n        .removeClass(classes.loading)\n        .addClass(classes.loaded);\n    }\n  \n    function setVideoToBeInteractedWith($el) {\n      $el\n        .closest(selectors.videoParent)\n        .addClass(classes.interactable);\n    }\n  \n    videoSection.prototype = $.extend({}, videoSection.prototype, {\n      initYoutubeVideo: function() {\n        videos[this.youtubePlayerId] = {\n          id: this.youtubePlayerId,\n          videoId: this.youtubeVideoId,\n          type: 'youtube',\n          attemptedToPlay: false\n        };\n  \n        if (!youtubeReady) {\n          window.loadYouTube();\n          $('body').on('youTubeReady' + this.namespace, this.loadYoutubeVideo.bind(this));\n        } else {\n          this.loadYoutubeVideo();\n        }\n      },\n  \n      loadYoutubeVideo: function() {\n        var args = $.extend({}, youtubeVideoOptions, videos[this.youtubePlayerId]);\n        args.playerVars.controls = 0;\n        youtubePlayers[this.youtubePlayerId] = new YT.Player(this.youtubePlayerId, args);\n  \n        youtubeReady = true;\n      },\n  \n      initVimeoVideo: function() {\n        videos[this.vimeoPlayerId] = {\n          divId: this.vimeoPlayerId,\n          id: this.vimeoVideoId,\n          type: 'vimeo'\n        };\n  \n        var $player = $('#' + this.vimeoPlayerId);\n        setParentAsLoading($player);\n  \n        // Button to play video on mobile\n        this.$vimeoTrigger.on('click', + this.namespace, function(evt) {\n          // $(evt.currentTarget).addClass('hide');\n          this.requestToPlayVimeoVideo(this.vimeoPlayerId);\n        }.bind(this));\n  \n        if (!vimeoReady) {\n          window.loadVimeo();\n          $('body').on('vimeoReady' + this.namespace, this.loadVimeoVideo.bind(this));\n        } else {\n          this.loadVimeoVideo();\n        }\n      },\n  \n      loadVimeoVideo: function() {\n        var args = $.extend({}, vimeoVideoOptions, videos[this.vimeoPlayerId]);\n        this.vimeoPlayer[this.vimeoPlayerId] = new Vimeo.Player(videos[this.vimeoPlayerId].divId, args);\n  \n        vimeoReady = true;\n  \n        // Only autoplay on larger screens\n        if (!theme.config.bpSmall) {\n          this.requestToPlayVimeoVideo(this.vimeoPlayerId);\n        } else {\n          var $player = $('#' + this.vimeoPlayerId);\n          setParentAsLoaded($player);\n        }\n      },\n  \n      requestToPlayVimeoVideo: function(id) {\n        // The slider may initialize and attempt to play the video before\n        // the API is even ready, because it sucks.\n  \n        if (!vimeoReady) {\n          // Wait for the trigger, then play it\n          $('body').on('vimeoReady' + this.namespace, function() {\n            this.playVimeoVideo(id);\n          }.bind(this))\n          return;\n        }\n  \n        this.playVimeoVideo(id);\n      },\n  \n      playVimeoVideo: function(id) {\n        this.vimeoPlayer[id].play();\n        this.vimeoPlayer[id].setVolume(0);\n  \n        var $player = $('#' + id);\n        setParentAsLoaded($player);\n      },\n  \n      onUnload: function(evt) {\n        var sectionId = evt.target.id.replace('shopify-section-', '');\n        var playerId = 'YouTubeVideo-' + sectionId;\n        youtubePlayers[playerId].destroy();\n        $(window).off('scroll' + this.namespace);\n        $('body').off('vimeoReady' + this.namespace);\n      }\n    });\n  \n    return videoSection;\n  })();\n  \n  theme.BackgroundImage = (function() {\n  \n    var selectors = {\n      parallaxContainer: '.parallax-container'\n    };\n  \n    function backgroundImage(container) {\n      var $container = $(container);\n      var sectionId = $container.attr('data-section-id');\n      this.namespace = '.' + sectionId;\n  \n      if (!$container.length) {\n        return;\n      }\n  \n      if ($container.data('parallax')) {\n        var $parallaxContainer = $container.find(selectors.parallaxContainer);\n        var args = {\n          namespace: this.namespace,\n          desktopOnly: true\n        };\n  \n        theme.parallaxSections[this.namespace] = new theme.Parallax($parallaxContainer, args);\n      }\n    }\n  \n    backgroundImage.prototype = $.extend({}, backgroundImage.prototype, {\n      onUnload: function(evt) {\n        theme.parallaxSections[this.namespace].destroy();\n        delete theme.parallaxSections[this.namespace];\n      }\n    });\n  \n    return backgroundImage;\n  })();\n  \n  theme.Testimonials = (function() {\n    var slideCount = 0;\n    var defaults = {\n      accessibility: true,\n      arrows: false,\n      dots: true,\n      autoplay: false,\n      touchThreshold: 20,\n      slidesToShow: 3,\n      slidesToScroll: 3\n    };\n  \n    function Testimonials(container) {\n      var $container = this.$container = $(container);\n      var sectionId = $container.attr('data-section-id');\n      var wrapper = this.wrapper = '.testimonials-wrapper';\n      var slider = this.slider = '#Testimonials-' + sectionId;\n      var $slider = $(slider);\n  \n      this.sliderActive = false;\n      var mobileOptions = $.extend({}, defaults, {\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        adaptiveHeight: true\n      });\n  \n      slideCount = $slider.data('count');\n  \n      // Override slidesToShow/Scroll if there are not enough blocks\n      if (slideCount < defaults.slidesToShow) {\n        defaults.slidesToShow = slideCount;\n        defaults.slidesToScroll = slideCount;\n      }\n  \n      $slider.on('init', this.a11y.bind(this));\n  \n      if (theme.config.bpSmall) {\n        this.init($slider, mobileOptions);\n      } else {\n        this.init($slider, defaults);\n      }\n  \n      $('body').on('matchSmall', function() {\n        this.init($slider, mobileOptions);\n      }.bind(this));\n  \n      $('body').on('matchLarge', function() {\n        this.init($slider, defaults);\n      }.bind(this));\n    }\n  \n    Testimonials.prototype = $.extend({}, Testimonials.prototype, {\n      onUnload: function() {\n        $(this.slider, this.wrapper).slick('unslick');\n      },\n  \n      onBlockSelect: function(evt) {\n        // Ignore the cloned version\n        var $slide = $('.testimonials-slide--' + evt.detail.blockId + ':not(.slick-cloned)');\n        var slideIndex = $slide.data('slick-index');\n  \n        // Go to selected slide, pause autoplay\n        $(this.slider, this.wrapper).slick('slickGoTo', slideIndex);\n      },\n  \n      init: function(obj, args) {\n        if (this.sliderActive) {\n          obj.slick('unslick');\n          this.sliderActive = false;\n        }\n  \n        obj.slick(args);\n        this.sliderActive = true;\n  \n        if (AOS) {\n          AOS.refresh();\n        }\n      },\n  \n      a11y: function(event, obj) {\n        var $list = obj.$list;\n        var $wrapper = $(this.wrapper, this.$container);\n  \n        // Remove default Slick aria-live attr until slider is focused\n        $list.removeAttr('aria-live');\n  \n        // When an element in the slider is focused set aria-live\n        $wrapper.on('focusin', function(evt) {\n          if ($wrapper.has(evt.target).length) {\n            $list.attr('aria-live', 'polite');\n          }\n        });\n  \n        // Remove aria-live\n        $wrapper.on('focusout', function(evt) {\n          if ($wrapper.has(evt.target).length) {\n            $list.removeAttr('aria-live');\n          }\n        });\n      }\n    });\n  \n    return Testimonials;\n  })();\n  \n  theme.Instagram = (function() {\n    var isInit = false;\n  \n    function Instagram(container) {\n      var $container = this.$container = $(container);\n      var sectionId = $container.attr('data-section-id');\n      this.namespace = '.instagram-' + sectionId;\n      this.$target = $('#Instafeed-' + sectionId);\n  \n      if (!this.$target.length) {\n        return;\n      }\n  \n      this.checkVisibility();\n      $(window).on('scroll' + this.namespace, $.throttle(100, this.checkVisibility.bind(this)));\n    }\n  \n    Instagram.prototype = $.extend({}, Instagram.prototype, {\n      checkVisibility: function() {\n        if (isInit) {\n          $(window).off('scroll' + this.namespace);\n          return;\n        }\n  \n        if (theme.isElementVisible(this.$container)) {\n          this.init();\n        }\n      },\n  \n      init: function() {\n        isInit = true;\n  \n        var userId = this.$target.data('user-id');\n        var clientId = this.$target.data('client-id');\n        var count = parseInt(this.$target.data('count'));\n        var gridItemWidth = this.$target.data('grid-item-width');\n  \n        // Ask for 2 more images than we'll actually show because\n        // Instagram sometimes doesn't send enough\n        var feed = this.feed = new Instafeed({\n          target: this.$target[0],\n          accessToken: clientId,\n          get: 'user',\n          userId: userId,\n          limit: count + 2,\n          template: '<div class=\"grid__item small--one-third medium-up--one-sixth\"><div class=\"image-wrap\"><a href=\"https://www.instagram.com/originalpenguineu/\" target=\"_blank\" style=\"background-image: url({{image}}); display: block; padding-bottom: 100%; background-size: cover; background-position: center;\"></a></div></div>',\n          resolution: 'standard_resolution'\n        });\n  \n        feed.run();\n      }\n    });\n  \n    return Instagram;\n  })();\n  \n  \n  theme.NewsletterPopup = (function() {\n    function NewsletterPopup(container) {\n      var $container = this.$container = $(container);\n      var sectionId = $container.attr('data-section-id');\n      this.cookieName = 'newsletter-' + sectionId;\n  \n      if (!$container.length) {\n        return;\n      }\n  \n      // Prevent popup on Shopify robot challenge page\n      if (window.location.pathname === '/challenge') {\n        return;\n      }\n  \n      this.data = {\n        secondsBeforeShow: $container.data('delay-seconds'),\n        daysBeforeReappear: $container.data('delay-days'),\n        cookie: Cookies.get(this.cookieName),\n        testMode: $container.data('test-mode')\n      };\n  \n      this.modal = new theme.Modals('NewsletterPopup-' + sectionId, 'newsletter-popup-modal');\n  \n      // Open modal if errors or success message exist\n      if ($container.find('.errors').length || $container.find('.note--success').length) {\n        this.modal.open();\n      }\n  \n      // Set cookie as opened if success message\n      if ($container.find('.note--success').length) {\n        this.closePopup(true);\n        return;\n      }\n  \n      $('body').on('modalClose.' + $container.attr('id'), this.closePopup.bind(this));\n  \n      if (!this.data.cookie || this.data.testMode) {\n        this.initPopupDelay();\n      }\n    }\n  \n    NewsletterPopup.prototype = $.extend({}, NewsletterPopup.prototype, {\n      initPopupDelay: function() {\n        setTimeout(function() {\n          this.modal.open();\n        }.bind(this), this.data.secondsBeforeShow * 1000);\n      },\n  \n      closePopup: function(success) {\n        // Remove a cookie in case it was set in test mode\n        if (this.data.testMode) {\n          Cookies.remove(this.cookieName, { path: '/' });\n          return;\n        }\n  \n        var expiry = success ? 200 : this.data.daysBeforeReappear;\n  \n        Cookies.set(this.cookieName, 'opened', { path: '/', expires: expiry });\n      },\n  \n      onLoad: function() {\n        this.modal.open();\n      },\n  \n      onSelect: function() {\n        this.modal.open();\n      },\n  \n      onDeselect: function() {\n        this.modal.close();\n      },\n  \n      onUnload: function() {}\n    });\n  \n    return NewsletterPopup;\n  })();\n  \n  theme.FadingImages = (function() {\n  \n    var classes = {\n      activeImage: 'active-image',\n      finishedImage: 'finished-image',\n      activeTitles: 'active-titles',\n      finishedTitles: 'finished-titles',\n      compensation: 'compensation'\n    };\n  \n    function FadingImages(container) {\n      var $container = this.$container = $(container);\n      var sectionId = $container.attr('data-section-id');\n      var namespace = this.namespace = '.fading-images-' + sectionId;\n  \n      if (!$container.length) {\n        return;\n      }\n  \n      var $imageContainer = $container.find('.fading-images');\n      theme.loadImageSection($imageContainer);\n  \n      this.data = {\n        isInit: false,\n        interval: $container.data('interval'),\n        block_count: $container.data('count'),\n        finish_interval: 1000,\n        timer_offset: 400,\n        active_image: 1,\n        active_title: 1,\n        removed_compensation: false\n      };\n  \n      this.selectors = {\n        $allTitles: $container.find('.fading-images-overlay__titles')\n      };\n  \n      this.checkVisibility();\n      $(window).on('scroll' + this.namespace, $.throttle(100, this.checkVisibility.bind(this)));\n    }\n  \n    FadingImages.prototype = $.extend({}, FadingImages.prototype, {\n      checkVisibility: function() {\n        if (this.data.isInit) {\n          $(window).off('scroll' + this.namespace);\n          return;\n        }\n  \n        if (theme.isElementVisible(this.$container)) {\n          this.startImages();\n          this.startTitles();\n          this.data.isInit = true;\n        }\n      },\n  \n      nextImage: function() {\n        var $container = this.$container;\n  \n        if (!this.data.removed_compensation) {\n          $container.find('.fading-images__item[data-slide-index=' + this.data.active_image + ']').removeClass(classes.compensation);\n          this.data.removed_compensation = true;\n        }\n  \n        $container\n          .find('.fading-images__item[data-slide-index=' + this.data.active_image + ']')\n          .removeClass(classes.activeImage)\n          .addClass(classes.finishedImage);\n  \n        var target_image = this.data.active_image;\n        window.setTimeout(function() {\n          $container.find('.fading-images__item[data-slide-index=' + target_image + ']').removeClass(classes.finishedImage);\n        }, this.data.finish_interval);\n  \n        this.data.active_image++;\n        if (this.data.active_image > this.data.block_count) {\n          this.data.active_image = 1;\n        }\n  \n        $container.find('.fading-images__item[data-slide-index=' + this.data.active_image + ']').addClass(classes.activeImage);\n      },\n  \n      nextTitle: function() {\n        var $container = this.$container;\n        var $allTitles = this.selectors.$allTitles;\n  \n        this.selectors.$allTitles.removeClass(classes.activeTitles).addClass(classes.finishedTitles);\n  \n        this.data.active_title++;\n        if (this.data.active_title > this.data.block_count) {\n          this.data.active_title = 1;\n        }\n  \n        var target_title = this.data.active_title;\n        window.setTimeout(function() {\n          var newText1 = $container.find('.fading-images__item[data-slide-index=' + target_title + ']').attr('data-slide-title1');\n          var newText2 = $container.find('.fading-images__item[data-slide-index=' + target_title + ']').attr('data-slide-title2');\n          $container.find('.fading-images-overlay__title--1').text(newText1);\n          $container.find('.fading-images-overlay__title--2').text(newText2);\n          $allTitles.removeClass(classes.finishedTitles).addClass(classes.activeTitles);\n        }, this.data.finish_interval - 200);\n      },\n  \n      startImages: function() {\n        // Prep and show first image\n        this.$container.find('.fading-images__item[data-slide-index=' + this.data.active_image + ']').addClass(classes.activeImage).addClass(classes.compensation);\n  \n        // Begin timer\n        var o = this;\n        window.setTimeout(function() {\n          var fading_images_timer = window.setInterval(o.nextImage.bind(o), o.data.interval);\n        }, this.data.timer_offset);\n      },\n  \n      startTitles: function() {\n        var $container = this.$container;\n        var $allTitles = this.selectors.$allTitles;\n        // Prep and show first titles\n        var target_title = this.data.active_title;\n        window.setTimeout(function() {\n          var newText1 = $container.find('.fading-images__item[data-slide-index=' + target_title + ']').attr('data-slide-title1');\n          var newText2 = $container.find('.fading-images__item[data-slide-index=' + target_title + ']').attr('data-slide-title2');\n          $container.find('.fading-images-overlay__title--1').text(newText1);\n          $container.find('.fading-images-overlay__title--2').text(newText2);\n          $allTitles.addClass(classes.activeTitles);\n        }, 750);\n  \n        // Begin timer\n        var fading_titles_timer = window.setInterval(this.nextTitle.bind(this), this.data.interval);\n      },\n  \n      onUnload: function() {\n        $(window).off('scroll' + this.namespace);\n      }\n    });\n  \n    return FadingImages;\n  })();\n  \n  theme.Maps = (function() {\n    var config = {\n      zoom: 14\n    };\n    var apiStatus = null;\n    var mapsToLoad = [];\n  \n    var errors = {\n      addressNoResults: theme.strings.addressNoResults,\n      addressQueryLimit: theme.strings.addressQueryLimit,\n      addressError: theme.strings.addressError,\n      authError: theme.strings.authError\n    };\n  \n    var selectors = {\n      section: '[data-section-type=\"map\"]',\n      map: '[data-map]',\n      mapOverlay: '[data-map-overlay]'\n    };\n  \n    var classes = {\n      mapError: 'map-section--load-error',\n      errorMsg: 'map-section__error errors text-center'\n    };\n  \n    // Global function called by Google on auth errors.\n    // Show an auto error message on all map instances.\n    window.gm_authFailure = function() {\n      if (!Shopify.designMode) {\n        return;\n      }\n  \n      $(selectors.section).addClass(classes.mapError);\n      $(selectors.map).remove();\n      $(selectors.mapOverlay).after(\n        '<div class=\"' +\n          classes.errorMsg +\n          '\">' +\n          theme.strings.authError +\n          '</div>'\n      );\n    };\n  \n    function Map(container) {\n      this.$container = $(container);\n      this.sectionId = this.$container.attr('data-section-id');\n      this.namespace = '.map-' + this.sectionId;\n      this.$map = this.$container.find(selectors.map);\n      this.key = this.$map.data('api-key');\n  \n      if (!this.key) {\n        return;\n      }\n  \n      // Lazyload API\n      this.checkVisibility();\n      $(window).on('scroll' + this.namespace, $.throttle(50, this.checkVisibility.bind(this)));\n    }\n  \n    function initAllMaps() {\n      // API has loaded, load all Map instances in queue\n      $.each(mapsToLoad, function(index, instance) {\n        instance.createMap();\n      });\n    }\n  \n    function geolocate($map) {\n      var deferred = $.Deferred();\n      var geocoder = new google.maps.Geocoder();\n      var address = $map.data('address-setting');\n  \n      geocoder.geocode({ address: address }, function(results, status) {\n        if (status !== google.maps.GeocoderStatus.OK) {\n          deferred.reject(status);\n        }\n  \n        deferred.resolve(results);\n      });\n  \n      return deferred;\n    }\n  \n    Map.prototype = $.extend({}, Map.prototype, {\n      prepMapApi: function() {\n        if (apiStatus === 'loaded') {\n          this.createMap();\n        } else {\n          mapsToLoad.push(this);\n  \n          if (apiStatus !== 'loading') {\n            apiStatus = 'loading';\n            if (typeof window.google === 'undefined' || typeof window.google.maps === 'undefined' ) {\n              $.getScript(\n                'https://maps.googleapis.com/maps/api/js?key=' + this.key\n              ).then(function() {\n                apiStatus = 'loaded';\n                initAllMaps();\n              });\n            }\n          }\n        }\n      },\n  \n      createMap: function() {\n        var $map = this.$map;\n  \n        return geolocate($map)\n          .then(\n            function(results) {\n              var mapOptions = {\n                zoom: config.zoom,\n                backgroundColor: 'none',\n                center: results[0].geometry.location,\n                draggable: false,\n                clickableIcons: false,\n                scrollwheel: false,\n                disableDoubleClickZoom: true,\n                disableDefaultUI: true\n              };\n  \n              var map = (this.map = new google.maps.Map($map[0], mapOptions));\n              var center = (this.center = map.getCenter());\n  \n              var marker = new google.maps.Marker({\n                map: map,\n                position: map.getCenter()\n              });\n  \n              google.maps.event.addDomListener(\n                window,\n                'resize',\n                $.debounce(250, function() {\n                  google.maps.event.trigger(map, 'resize');\n                  map.setCenter(center);\n                  $map.removeAttr('style');\n                })\n              );\n            }.bind(this)\n          )\n          .fail(function() {\n            var errorMessage;\n  \n            switch (status) {\n              case 'ZERO_RESULTS':\n                errorMessage = errors.addressNoResults;\n                break;\n              case 'OVER_QUERY_LIMIT':\n                errorMessage = errors.addressQueryLimit;\n                break;\n              case 'REQUEST_DENIED':\n                errorMessage = errors.authError;\n                break;\n              default:\n                errorMessage = errors.addressError;\n                break;\n            }\n  \n            // Show errors only to merchant in the editor.\n            if (Shopify.designMode) {\n              $map\n                .parent()\n                .addClass(classes.mapError)\n                .html(\n                  '<div class=\"' +\n                    classes.errorMsg +\n                    '\">' +\n                    errorMessage +\n                    '</div>'\n                );\n            }\n          });\n      },\n  \n      checkVisibility: function() {\n        if (theme.isElementVisible(this.$container, 600)) {\n          this.prepMapApi();\n          $(window).off(this.namespace);\n        }\n      },\n  \n      onUnload: function() {\n        if (this.$map.length === 0) {\n          return;\n        }\n        // Causes a harmless JS error when a section without an active map is reloaded\n        google.maps.event.clearListeners(this.map, 'resize');\n      }\n    });\n  \n    return Map;\n  })();\n  \n  theme.Blog = (function() {\n  \n    function Blog(container) {\n      this.tagFilters();\n    }\n  \n    Blog.prototype = $.extend({}, Blog.prototype, {\n      tagFilters: function() {\n        var $filterBy = $('#BlogTagFilter');\n  \n        if (!$filterBy.length) {\n          return;\n        }\n  \n        $filterBy.on('change', function() {\n          location.href = $(this).val();\n        });\n      },\n  \n      onUnload: function() {\n  \n      }\n    });\n  \n    return Blog;\n  })();\n  \n  theme.Photoswipe = (function() {\n    var selectors = {\n      trigger: '.js-photoswipe__zoom',\n      images: '.photoswipe__image',\n      activeImage: '.slick-active .photoswipe__image'\n    };\n  \n    function Photoswipe(container, sectionId) {\n      this.$container = $(container);\n      this.sectionId = sectionId;\n      this.namespace = '.photoswipe-' + this.sectionId;\n      this.gallery;\n      this.$images;\n      this.inSlideshow = false;\n  \n      if (this.$container.attr('data-zoom') === 'false') {\n        return;\n      }\n  \n      if (this.$container.attr('data-has-slideshow') === 'true') {\n        this.inSlideshow = true;\n      }\n  \n      this.init();\n    }\n  \n    Photoswipe.prototype = $.extend({}, Photoswipe.prototype, {\n      init: function() {\n        var $trigger = this.$container.find(selectors.trigger);\n        this.$images = this.$container.find(selectors.images);\n        var items = [];\n  \n        // Init gallery on active image\n        $trigger.on('click' + this.namespace, function(evt) {\n          items = this.getImageData();\n          if (this.inSlideshow) {\n            var index = this.$container.find(selectors.activeImage).data('index');\n          } else {\n            var index = $(evt.currentTarget).data('index');\n          }\n          this.initGallery(items, index);\n        }.bind(this));\n      },\n  \n      getImageData: function() {\n        var haveImages = false;\n        var items = [];\n        var options = {};\n  \n        this.$images.each(function() {\n          var haveImages = true;\n          var smallSrc = $(this).prop('currentSrc') || $(this).prop('src');\n          var item = {\n            msrc: smallSrc,\n            src: $(this).data('photoswipe-src'),\n            w: $(this).data('photoswipe-width'),\n            h: $(this).data('photoswipe-height'),\n            el: $(this)[0],\n            initialZoomLevel: 0.5\n          };\n  \n          items.push(item);\n        });\n  \n        return items;\n      },\n  \n      initGallery: function(items, index) {\n        var pswpElement = document.querySelectorAll('.pswp')[0];\n  \n        var options = {\n          allowPanToNext: false,\n          captionEl: false,\n          closeOnScroll: false,\n          counterEl: false,\n          history: false,\n          index: index - 1,\n          pinchToClose: false,\n          preloaderEl: false,\n          scaleMode: 'zoom',\n          shareEl: false,\n          tapToToggleControls: false,\n          getThumbBoundsFn: function(index) {\n            var pageYScroll = window.pageYOffset || document.documentElement.scrollTop;\n            var thumbnail = items[index].el;\n            var rect = thumbnail.getBoundingClientRect();\n            return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};\n          }\n        }\n  \n        this.gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);\n  \n        this.gallery.init();\n        this.gallery.listen('afterChange', this.afterChange.bind(this));\n      },\n  \n      afterChange: function() {\n        if (this.inSlideshow) {\n          var $slideshow = $('#ProductPhotos-' + this.sectionId);\n          if ($slideshow.hasClass('slick-initialized')) {\n            var newIndex = this.gallery.getCurrentIndex();\n            $slideshow.slick('slickGoTo', newIndex);\n          }\n        }\n      }\n    });\n  \n    return Photoswipe;\n  })();\n  \n  \n\n  // Medium breakpoint is also set in theme.scss.liquid and inline throughout some templates.\n  // Do not change values unless you know what you're doing.\n  theme.bp = {};\n  theme.bp.smallUp = 769;\n  theme.bp.small = theme.bp.smallUp - 1;\n\n  theme.config = {\n    bpSmall: false,\n    hasSessionStorage: true,\n    mediaQuerySmall: 'screen and (max-width: '+ theme.bp.small +'px)',\n    mediaQuerySmallUp: 'screen and (min-width: '+ theme.bp.smallUp +'px)',\n    youTubeReady: false,\n    vimeoReady: false,\n    vimeoLoading: false,\n    isTouch: ('ontouchstart' in window) || window.DocumentTouch && window.document instanceof DocumentTouch || window.navigator.maxTouchPoints || window.navigator.msMaxTouchPoints ? true : false,\n    isIpad: /ipad/.test(window.navigator.userAgent.toLowerCase()),\n    stickyHeader: false,\n    recentlyViewed: []\n  };\n\n  if (theme.config.isIpad) {\n    document.documentElement.className += ' js-ipad';\n  }\n\n  theme.recentlyViewed = {\n    recent: {}, // will store handle+url of recent products\n    productInfo: {} // will store product data to reduce API calls\n  };\n\n  window.onYouTubeIframeAPIReady = function() {\n    theme.config.youTubeReady = true;\n    $('body').trigger('youTubeReady');\n  }\n\n  window.loadYouTube = function() {\n    if (theme.config.youtubeReady) {\n      return;\n    }\n\n    var tag = document.createElement('script');\n    tag.src = \"https://www.youtube.com/iframe_api\";\n    var firstScriptTag = document.getElementsByTagName('script')[0];\n    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n  }\n\n  window.loadVimeo = function() {\n    if (theme.config.vimeoLoading) {\n      return;\n    }\n\n    if (!theme.config.vimeoReady) {\n      theme.config.vimeoLoading = true;\n      var tag = document.createElement('script');\n      tag.src = \"https://player.vimeo.com/api/player.js\";\n      var firstScriptTag = document.getElementsByTagName('script')[0];\n      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n      // Because there's no way to check for the Vimeo API being loaded\n      // asynchronously, we use this terrible timeout to wait for it being ready\n      checkIfVimeoIsReady()\n        .then(function() {\n          theme.config.vimeoReady = true;\n          theme.config.vimeoLoading = false;\n          $('body').trigger('vimeoReady');\n        })\n        .fail(function() {\n          // No vimeo API to talk to\n        });\n    }\n  }\n\n  function checkIfVimeoIsReady() {\n    var deferred = $.Deferred();\n    var wait;\n    var timeout;\n\n    wait = setInterval(function() {\n      if (!Vimeo) {\n        return;\n      }\n\n      clearInterval(wait);\n      clearTimeout(timeout);\n      deferred.resolve();\n    }, 500);\n\n    timeout = setTimeout(function() {\n      clearInterval(wait);\n      deferred.reject();\n    }, 4000); // subjective. test up to 8 times over 4 seconds\n\n    return deferred;\n  }\n\n  theme.init = function() {\n    theme.setGlobals();\n    theme.pageTransitions();\n    theme.collectionTemplate.init();\n    theme.initQuickShop();\n    theme.videoModal();\n    theme.customerTemplates.init();\n    theme.collapsibles.init();\n\n    slate.rte.init();\n\n    AOS.init({\n      easing: 'ease-out-quad',\n      once: true,\n      offset: 60,\n      disableMutationObserver: true\n    });\n\n    $(document.documentElement).on('keyup.tab', function(evt) {\n      if (evt.keyCode === 9) {\n        $(document.documentElement).addClass('tab-outline');\n        $(document.documentElement).off('keyup.tab');\n      }\n    });\n\n    // Change email icon to submit text\n    $('.footer__newsletter-input').on('keyup', function() {\n      $(this).addClass('footer__newsletter-input--active');\n    });\n  };\n\n  theme.setGlobals = function() {\n    theme.config.hasSessionStorage = theme.isSessionStorageSupported();\n    theme.recentlyViewed.handleCookie = Cookies.get('theme-recent');\n    if (theme.recentlyViewed.handleCookie) {\n      theme.recentlyViewed.recent = JSON.parse(theme.recentlyViewed.handleCookie);\n    }\n\n    theme.recentlyViewed.productInfo = theme.config.hasSessionStorage && sessionStorage['recent-products'] ? JSON.parse(sessionStorage['recent-products']) : {};\n\n    if (theme.config.isTouch) {\n      $('body').addClass('supports-touch');\n    }\n\n    enquire.register(theme.config.mediaQuerySmall, {\n      match: function() {\n        theme.config.bpSmall = true;\n        $('body').trigger('matchSmall');\n      },\n      unmatch: function() {\n        theme.config.bpSmall = false;\n        $('body').trigger('unmatchSmall');\n      }\n    });\n\n    enquire.register(theme.config.mediaQuerySmallUp, {\n      match: function() {\n        $('body').trigger('matchLarge');\n      },\n      unmatch: function() {\n        $('body').trigger('unmatchLarge');\n      }\n    });\n  };\n\n  theme.loadImageSection = function($container) {\n    // Wait until images inside container have lazyloaded class\n    function setAsLoaded() {\n      $container.removeClass('loading loading--delayed').addClass('loaded');\n    }\n\n    function checkForLazyloadedImage() {\n      return $container.find('.lazyloaded').length;\n    }\n\n    // If it has SVGs it's in the onboarding state so set as loaded\n    if ($container.find('svg').length) {\n      setAsLoaded();\n      return;\n    };\n\n    if (checkForLazyloadedImage() > 0) {\n      setAsLoaded();\n      return;\n    }\n\n    var interval = setInterval(function() {\n      if (checkForLazyloadedImage() > 0) {\n        clearInterval(interval);\n        setAsLoaded();\n      }\n    }, 80);\n  }\n\n  theme.isSessionStorageSupported = function() {\n    // Return false if we are in an iframe without access to sessionStorage\n    if (window.self !== window.top) {\n      return false;\n    }\n\n    var testKey = 'test';\n    var storage = window.sessionStorage;\n    try {\n      storage.setItem(testKey, '1');\n      storage.removeItem(testKey);\n      return true;\n    } catch (error) {\n      return false;\n    }\n  };\n\n  theme.isElementVisible = function($el, threshold) {\n    var rect = $el[0].getBoundingClientRect();\n    var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n    threshold = threshold ? threshold : 0;\n\n    return (\n      rect.bottom >= 0 &&\n      rect.right >= 0 &&\n      rect.top <= (windowHeight + threshold) &&\n      rect.left <= (window.innerWidth || document.documentElement.clientWidth)\n    );\n  };\n\n  theme.pageTransitions = function() {\n    if ($('body').data('transitions') == true) {\n      var namespace = '.page-transition';\n\n      // Hack test to fix Safari page cache issue.\n      // window.onpageshow doesn't always run when navigating\n      // back to the page, so the unloading class remains, leaving\n      // a white page. Setting a timeout to remove that class when leaving\n      // the page actually finishes running when they come back.\n      if (!!navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/)) {\n        $('a').off(namespace).on('click' + namespace, function() {\n          window.setTimeout(function() {\n            $('body').removeClass('unloading');\n          }, 1200);\n        });\n      }\n\n      // Add disable transition class to malito, anchor, and YouTube links\n      $('a[href^=\"mailto:\"], a[href^=\"#\"], a[target=\"_blank\"], a[href*=\"youtube.com/watch\"], a[href*=\"youtu.be/\"]').each(function() {\n        $(this).addClass('js-no-transition');\n      });\n\n      $('a:not(.js-no-transition)').off(namespace).on('click' + namespace, function(evt) {\n        if (evt.metaKey) return true;\n        evt.preventDefault();\n        $('body').addClass('unloading');\n        var src = $(this).attr('href');\n        window.setTimeout(function() {\n          location.href = src;\n        }, 50);\n      });\n\n      // iOS caches the page state, so close the drawer when navigating away\n      $('a.mobile-nav__link').off(namespace).on('click' + namespace, function() {\n        theme.NavDrawer.close();\n      });\n    }\n  };\n\n  theme.reinitSection = function(section) {\n    for (var i = 0; i < sections.instances.length; i++) {\n      var instance = sections.instances[i];\n      if (instance['type'] === section) {\n        if (typeof instance.forceReload === 'function') {\n          instance.forceReload();\n        }\n      }\n    }\n  };\n\n  theme.reinitProductGridItem = function($scope) {\n    if (AOS) {\n      AOS.refreshHard();\n    }\n\n    // Refresh currency\n    if (theme.settings.currenciesEnabled) {\n      theme.currencySwitcher.ajaxrefresh();\n    }\n\n    // Reload quick shop buttons\n    theme.initQuickShop(true);\n\n    // Refresh reviews app\n    if (window.SPR) {\n      SPR.initDomEls();SPR.loadBadges();\n    }\n\n    // Re-register product templates in quick view modals.\n    // Will not double-register.\n    sections.register('product-template', theme.Product, $scope);\n\n    // Re-hook up collapsible box triggers\n    theme.collapsibles.init();\n  };\n\n  window.onpageshow = function(evt) {\n    // Removes unload class when returning to page via history\n    if (evt.persisted) {\n      $('body').removeClass('unloading');\n    }\n  };\n\n  $(document).ready(function() {\n    theme.init();\n\n    window.sections = new theme.Sections();\n    sections.register('header-section', theme.HeaderSection);\n    sections.register('slideshow-section', theme.SlideshowSection);\n    sections.register('video-section', theme.VideoSection);\n    sections.register('background-image', theme.BackgroundImage);\n    sections.register('recently-viewed', theme.RecentlyViewed);\n    sections.register('product', theme.Product);\n    sections.register('product-recommendations', theme.Recommendations);\n    sections.register('product-template', theme.Product);\n    sections.register('collection-header', theme.CollectionHeader);\n    sections.register('collection-sidebar', theme.CollectionSidebar);\n    sections.register('collection-template', theme.Collection);\n    sections.register('featured-content-section', theme.FeaturedContentSection);\n    sections.register('testimonials', theme.Testimonials);\n    sections.register('instagram', theme.Instagram);\n    sections.register('newsletter-popup', theme.NewsletterPopup);\n    sections.register('fading-images', theme.FadingImages);\n    sections.register('map', theme.Maps);\n    sections.register('blog', theme.Blog);\n    sections.register('photoswipe', theme.Photoswipe);\n  });\n})(theme.jQuery);\n\n//custom\n\n//filter background\n$(document).on(\"click\", \"#bc-sf-filter-tree-mobile\", function(){\n\t$(\"#bc-sf-filter-tree\").addClass(\"bc-sf-filter-tree-mobile-full-width\");\n\t$(\"body\").addClass(\"js-drawer-open\");\n\t$(\"#close_filter_overlay\").show();\n});\n\n$(\"#close_filter_overlay\").on(\"click\", function() {\n\t$(this).hide();\n\t$(\"body\").removeClass(\"js-drawer-open\");\n\tif(!theme.config.isIpad){showResultMobile(true)};\n\tcloseFilterMobile();\n});\n\n$(document).on(\"click\", \".bc-sf-filter-close-btn\", function() {\n\t$(\"body\").removeClass(\"js-drawer-open\");\n\t$(\"#close_filter_overlay\").hide();\n});\n\n$(document).on(\"click\", \"#bc-sf-filter-mobile-footer\", function() {\n\t$(\"body\").removeClass(\"js-drawer-open\");\n\t$(\"#close_filter_overlay\").hide();\n});\n\n//close search\n$(document).on(\"click\", \".search-overlay-trigger\", function() {\n\tif($(\".klevu-fluid .close-search\").length == 0){\n\t\t$(\".klevu-fluid\").append(\"<div class='close-search'></div>\");\n\t}\n\t$(\".close-search\").css(\"display\",\"block\");\n});\n\n$(document).on(\"click\", \".close-search\", function() {\n\t$(\".close-search, #klevu-pt-rs-hover, #klevuSearchingArea\").css(\"display\",\"none\");\n\t$(\".site-header__search-container\").removeClass(\"is-active\");\n\t$(\"html, body\").removeClass(\"js-drawer-open js-drawer-open--search\");\n});\n\n$(document).on(\"click\", \".js-search-header-close.site-header__search-btn\", function() {\n\t$(\".close-search\").css(\"display\",\"none\");\n});\n\n\n//email signup\n$(document).on(\"click\", \".ocsu_signup\", function (){\n    var ocsu_error = ($(\".ocsu_email.error\").length == 0 ? false : true);\n    var ocsu_email = ($(\".ocsu_email.valid\").length ? document.querySelector(\".ocsu_email.valid\").value : null);\n    if(ocsu_error != true && ocsu_email !== \"\" && ocsu_email != null){\n      $(\".one_click_content\").hide();\n      $(\".successful_signup\").show(); \n      $(\".successful_signup\").css(\"opacity\", \"1\");  \n    }\n    else{\n    \t$(\".ocsu_email\").addClass(\"error\");\n    }\n});\n\n$(document).on(\"keydown\", \".ocsu_email\", function (){\n\t$(\".ocsu_email\").removeClass(\"error\");\n\t\n\tif($(this).val().match(/@[a-zA-Z.-]{2,}[.|,]{1}/g)){\n\t\t$(this).addClass(\"validationReady\");\n\t}\n\telse{\n\t\t$(this).removeClass(\"validationReady\");\n\t}\n});\n\n$(document).ready(function() {\n\t$('.ocsu_email').blur(function(event) {\n\t    if(event.target.checkValidity()){\n\t\t\t$(this).addClass(\"valid\").removeClass(\"error\");\n\t\t}\n\t\telse{\n\t\t\t$(this).addClass(\"error\").removeClass(\"valid\");\n\t\t}\n\t});\n});\n\n$(document).on(\"click\", \".header-item--navigation\", function(){\n\t$(\".header-wrapper\").removeClass(\"sticky-mobile-atc\");\n});\n\n\n/*$(document).on(\"click\", \".header-wrapper.sticky-mobile-atc .search-overlay-trigger\", function() {\n\twindow.scrollTo(0, 0);\n\t$(\".header-wrapper\").removeClass(\"sticky-mobile-atc\");\n\tsetTimeout(function(){ $(\".site-header__search-input\").trigger(\"click\"); }, 1500);\n});*/\n\n//Cart hover\n$(\".cart-link-wrapper\").hover(function(){\n  $(\"#CartDrawer.drawer\").addClass(\"drawer--is-open\");\n  \tsmCountdown();\n  \tif(peValidateVIPSess() && peGetCookie(\"peVIPBFSess\") == \"true\"){\n  \t\t$(\".ajaxcart .show-for-vip\").show();\n  \t\t$(\".ajaxcart .strikethrough-next\").addClass(\"strikethrough-next-init\");\n  \t}\n  \tif(typeof GEP != \"undefined\" && GEP.isOperatedByGlobale == true){\n\t\t$(\".strikethrough-next\").removeClass(\"strikethrough-next-init\");\n\t\t$(\".hide-for-global-e\").hide();\n\t\t$(\".show-for-global-e\").show();\n\t\tclearInterval(hideGEElements);\n  \t}\n  }, function(){\n  $(\"#CartDrawer.drawer\").removeClass(\"drawer--is-open\");\n});\n\n//Mobile ATC\n/*$(document).on(\"click\", \".add-to-cart\", function() {\n\t$(\".header-wrapper\").addClass(\"fixed-header-mobile-atc\");\n\tsetTimeout(function(){$(\".header-wrapper\").removeClass(\"fixed-header-mobile-atc\")}, 5000);\n});*/\n\nfunction smCountdown(){\n\tvar currdate = new Date();\n\tvar hourofday = currdate.getUTCHours() - (currdate.getTimezoneOffset() / 60); //get british timezone\n\tvar dayofweek = currdate.getUTCDay();\n\tvar dayslist = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\tvar monthlist = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n\t\n\tfunction addDays(startDate, days) {\n\t    if(isNaN(days)) {\n\t        console.log(\"Value provided for \\\"days\\\" was not a number\");\n\t        return\n\t    }\n\t    if(!(startDate instanceof Date)) {\n\t        console.log(\"Value provided for \\\"startDate\\\" was not a Date object\");\n\t        return\n\t    }\n\t    // Get the day of the week as a number (0 = Sunday, 1 = Monday, .... 6 = Saturday)\n\t    var dow = startDate.getDay();\n\t    var daysToAdd = parseInt(days);\n\t    // If the current day is Sunday add one day\n\t    if (dow == 0)\n\t        daysToAdd++;\n\t    // If the start date plus the additional days falls on or after the closest Saturday calculate weekends\n\t    if (dow + daysToAdd >= 6) {\n\t        //Subtract days in current working week from work days\n\t        var remainingWorkDays = daysToAdd - (5 - dow);\n\t        //Add current working week's weekend\n\t        daysToAdd += 2;\n\t        if (remainingWorkDays > 5) {\n\t            //Add two days for each working week by calculating how many weeks are included\n\t            daysToAdd += 2 * Math.floor(remainingWorkDays / 5);\n\t            //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks\n\t            if (remainingWorkDays % 5 == 0)\n\t                daysToAdd -= 2;\n\t        }\n\t    }\n\t    var newdate = new Date();\n\t    newdate.setDate(startDate.getDate() + daysToAdd);\n\t    return newdate;\n\t}\n\t\n\tfunction nextDOW(x){\n\t    var now = new Date();    \n\t    now.setDate(now.getDate() + (x+(7-now.getDay())) % 7);\n\t    return now;\n\t}\n\t\n\tfunction startTimer(duration, display) {\n\t    var timer = duration, minutes, seconds;\n\t    setInterval(function () {\n\t        minutes = parseInt(timer / 60, 10);\n\t        seconds = parseInt(timer % 60, 10);\n\t\n\t        minutes = minutes < 10 ? \"0\" + minutes : minutes;\n\t        seconds = seconds < 10 ? \"0\" + seconds : seconds;\n\t\n\t        display.text(minutes + \":\" + seconds);\n\t\n\t        if (--timer < 0) {\n\t            timer = duration;\n\t        }\n\t    }, 1000);\n\t}\n\t\n\t//Free Standard Delivery Shipping By Date\n\tvar freestandardmsg = \"\";\n\tvar freestandardbydate;\n\tif(hourofday > 12){\n\t\tfreestandardbydate = addDays(currdate, 3);\t\t\t\t\n\t}\n\telse{\n\t\tfreestandardbydate = addDays(currdate, 2);\n\t}\n\tfreestandardmsg = 'Delivery by: ' + dayslist[freestandardbydate.getUTCDay()] + \" \" + freestandardbydate.getUTCDate() + ' ' + monthlist[freestandardbydate.getUTCMonth()];\n\t$(\".standard_placeholder\").html(freestandardmsg);\n\t//End Free Standard Delivery Shipping By Date\n\t\n\t//Order by message\n\tvar next_working_day_orderby_placeholder = \"\";\n\tif(dayofweek != 0  && dayofweek != 6 && hourofday > 0  && hourofday < 12){ //removed for testing\n\t\tnext_working_day_orderby_placeholder = \"Order within <span class='orderby_timer'></span> to get:\"\n\t\t$(\".next_working_day_orderby_placeholder\").html(next_working_day_orderby_placeholder);\n\t\t\n\t\t(function() {\n\t\t  var start = new Date;\n\t\t  start.setHours(12, 0, 0); // 12pm\n\t\n\t\t  function pad(num) {\n\t\t    return (\"0\" + parseInt(num)).substr(-2);\n\t\t  }\n\t\n\t\t  function tick() {\n\t\t    var now = new Date;\n\t\t    if (now > start) { // too late, go to tomorrow\n\t\t      start.setDate(start.getDate() + 1);\n\t\t    }\n\t\t    var remain = ((start - now) / 1000);\n\t\t    var hh = pad((remain / 60 / 60) % 60);\n\t\t    var mm = pad((remain / 60) % 60);\n\t\t    var ss = pad(remain % 60);\n\t\t    $('.orderby_timer').html(hh + \":\" + mm + \":\" + ss);\n\t\t    setTimeout(tick, 1000);\n\t\t  }\n\t\n\t\t  document.addEventListener('DOMContentLoaded', tick);\n\t\t})();\n\t}\n\t//End Order by message\n\t\n\t//Next Working Day Delivery Shipping By Date\n\tvar nextworkingdaymsg = \"\";\n\tvar nextworkingdaybydate; \n\tif(dayofweek == 0  || dayofweek == 6){\n\t\tnextworkingdaybydate = nextDOW(2);\n\t}\n\telse{\n\t\tif(hourofday > 11){\n\t\t\tnextworkingdaybydate = addDays(currdate, 2);\t\t\t\t\n\t\t}\n\t\telse{\n\t\t\tnextworkingdaybydate = addDays(currdate, 1);\n\t\t}\n\t}\n\tnextworkingdaymsg = 'Delivery by: ' + dayslist[nextworkingdaybydate.getUTCDay()] + \" \" + nextworkingdaybydate.getUTCDate() + ' ' + monthlist[nextworkingdaybydate.getUTCMonth()];\n\t$(\".next_working_day_placeholder\").html(nextworkingdaymsg);\n\t//End Next Working Day Delivery Shipping By Date\n}\n\nsmCountdown();\n\n//Contact form\n$(\"#contact-query\").change(function(){\n\tif($(this).val() == \"\"){\n\t\t$(\".customer-form-wrapper .cs-with-order, .customer-form-wrapper .cs-without-order, .customer-form-wrapper .sales-query\").hide();\n\t}\n\telse{\n\t\t$(\".acerill-custom-form\").hide();\n\t\t$(\".acerill-custom-form.\" + $(this).val()).show();\n\t}\n});\n\n/*if(window.location.href.indexOf(\"?contact\") > -1){\n\t$(\".customer-form-wrapper .contact-form-wrapper\").css({\"display\": \"block\", \"opacity\": \"1\"});\n\twindow.location.hash = \"#contactusdeeplink\";\n}*/\n\nif(window.location.href.indexOf(\"/challenge\") > -1 && window.location.hash != \"#contact_form\" && window.location.hash != \"#newsletter-footer\"){\n\tfunction peGetCookie(cname) {\n        var name = cname + \"=\";\n        var decodedCookie = decodeURIComponent(document.cookie);\n        var ca = decodedCookie.split(';');\n        for(var i = 0; i <ca.length; i++) {\n            var c = ca[i];\n            while (c.charAt(0) == ' ') {\n                c = c.substring(1);\n            }\n            if (c.indexOf(name) == 0) {\n                return c.substring(name.length, c.length);\n            }\n        }\n        return \"\";\n    }\n  \n  \tif(peGetCookie(\"discount_code\") != null && peGetCookie(\"discount_code\") != \"\"){\n  \t\tvar discounturl = \"/checkout/?discount=\" + peGetCookie(\"discount_code\");\n  \t\tvar $newInput = $('<input type=\"hidden\" name=\"return_to\" value=\"'+ discounturl +'\" />');\n        $newInput.insertBefore($('.shopify-challenge__container input[type=\"submit\"]'));\n  \t}\n  \telse{\n  \t\tvar $newInput = $('<input type=\"hidden\" name=\"return_to\" value=\"/checkout/\" />');\n        $newInput.insertBefore($('.shopify-challenge__container input[type=\"submit\"]'));\n  \t}\n}\n\n//PDP JS\n$(document).on(\"click touchstart\", \".master-swatch img\", function(){\n\t$(\".product-section-master.active\").hide().removeClass(\"active\");\n\t$(\".product-section-master[data-product-handle='\" + $(this).attr(\"data-id\") + \"']\").show().addClass(\"active\");\n\t\n\tvar dataId = $(this).attr(\"data-id\");\n\tvar counter = 0;\n    if($(document).width() > 768){\n    \t$('.product-section-master.active .product__main-photos > div').each(function(){\n    \t\tif($(this).hasClass('slick-initialized')){\n    \t\t\t$(this).slick('unslick');\n    \t\t}\n\n\t\t\t$(this).slick({\n\t\t        slidesToShow: 1,\n\t\t        slidesToScroll: 1,\n\t\t        arrows: false,\n\t\t        fade: false,\n\t\t        draggable: false,\n\t\t        asNavFor: '.product-section-master.active .product__thumbs'\n\t\t    });\n        });\n      \n    \t$('.product-section-master.active .product__thumbs').each(function(){\n    \t\tif($(this).hasClass('slick-initialized')){\n    \t\t\t$(this).slick('unslick');\n    \t\t}\n    \t\t$(this).slick({\n    \t\t\tslidesToShow: 5,\n    \t\t\tslidesToScroll: 1,\n    \t\t\tarrows: false,\n    \t\t\tfade: false,\n    \t\t\tdots: false,\n    \t\t\tvertical: true,\n    \t\t\tdraggable: false,\n    \t\t\tverticalSwiping: false,\n    \t\t\tfocusOnSelect: true,\n    \t\t\tinfinite: false,\n    \t\t\tcustomHeightMatching: true,\n    \t\t\tasNavFor: '.product-section-master.active .product__main-photos > div'\n    \t\t});\n    \t});\n    } \n    else {\n\t\t$('.product-section-master.active .product__photos > div > div').each(function(){\n\t\t\tif($(this).hasClass('slick-initialized')){\n\t\t\t\t$(this).slick('unslick');\n\t\t\t\tcounter++;\n\t\t\t}\n\t\t\t$(this).slick({\n\t\t\t\tslidesToScroll: 1,\n\t\t\t\tarrows: false,\n\t\t\t\tdots: true\n\t\t\t})\n\t\t});\n    }\n});\n\n\nif((typeof peGetCookie(\"pe_cookie_accepted\") !== null && peGetCookie(\"pe_cookie_accepted\") === \"1\") || parseInt(peGetCookie(\"pe_cookie_tracker\")) > 3){\n\tdocument.getElementsByClassName(\"cookie_message_box\")[0].style.display = \"none\";\n  }\nelse{\n    if(typeof peGetCookie(\"pe_cookie_tracker\") !== null && peGetCookie(\"pe_cookie_tracker\") === \"\"){\n    \tpeSetCookie(\"pe_cookie_tracker\", 1, 365);\n    }\n    else{\n      peIncrementCookieTracking();\n    }\n}\n\nfunction cookie_msg_accepted(){\n    peSetCookie(\"pe_cookie_accepted\", 1, 365);\n    document.getElementsByClassName(\"cookie_message_box\")[0].style.display = \"none\";\n}\n\n$(document).ready(function() {\n\tvar initialSelectedSize = $(\".product-section-master.active form[action^='/cart/add'] select[name='id']\").find(\":selected\").text().trim();\n\t\n\t$(\".product-section-master form[action^='/cart/add'] select[name='id'] option\").filter(function() {\n  \t\treturn $(this).text().trim() == initialSelectedSize;\n\t}).prop('selected', true);\n});\n\n//Remember users selected size\n$(\".product-section-master form[action^='/cart/add'] select[name='id']\").on(\"change\", function(){\n\tvar selectedSize = $(this).find(\":selected\").text().trim();\n\t\n\t$(\".product-section-master form[action^='/cart/add'] select[name='id'] option\").filter(function() {\n  \t\treturn $(this).text().trim() == selectedSize;\n\t}).prop('selected', true);\n\t\n\t/*$(\".product-section-master form[action^='/cart/add'] select[name='id'] > option:selected\").each(function() {\n\t\tvar swatchID = $(this).parent().attr(\"data-swatch-id\");\n\t\t\n\t\tif($(this).text().trim() != selectedSize){\n\t\t\t$(\".master-swatch img[data-id='\" + swatchID + \"']\").parent().addClass(\"swatch-strikethrough\");\n\t\t}\n\t\telse{\n\t\t\t$(\".master-swatch img[data-id='\" + swatchID + \"']\").parent().removeClass(\"swatch-strikethrough\");\n\t\t}\n\t});*/\n});\n\n/*$(document).ready(function() {\n\tif(document.getElementById(\"bfcountdownplaceholder\") != null){\n\t\tvar bfcountDownDate = new Date(\"Dec 8, 2021 00:00:00\").getTime(); \n\t\tvar hpCDLoaded = false;\n\t\t\n\t\tvar xbfcountdownticker = setInterval(function() {\n\t\t\tvar now = new Date().getTime();\n\t\t\tvar distance = bfcountDownDate - now;\n\t  \n\t\t\tif (distance < 0) { \n\t\t\t\tclearInterval(xbfcountdownticker);\n\t\t\t\tdocument.getElementById(\"bfcountdownplaceholder\").innerHTML = \"\";\n\t\t\t}\n\t\t\telse{\n\t\t\t\t//Time calculations for days, hours, minutes and seconds\n\t\t\t\t//var days = Math.floor(distance / (1000 * 60 * 60 * 24));\n\t\t\t\tvar hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n\t\t\t\tif(hours < 10){hours = \"0\" + hours};\n\t\t\t\tvar minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n\t\t\t\tif(minutes < 10){minutes = \"0\" + minutes};\n\t\t\t\tvar seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\t\t\t\tif(seconds < 10){seconds = \"0\" + seconds};\n\t  \n\t\t\t\t//var countdownhtml = \"<div class='cd_cell cd_days'>\" + days + \"<span class='cd_label'>Days</span></div>\";\n\t\t\t\tvar countdownhtml = \"<div class='cd_cell cd_hours'>\" + hours + \"<span class='cd_label'>Hours</span></div>\";\n\t\t\t\tcountdownhtml += \"<div class='cd_cell cd_mins'>\" + minutes + \"<span class='cd_label'>Mins</span></div>\";\n\t\t\t\tcountdownhtml += \"<div class='cd_cell cd_secs'>\" + seconds + \"<span class='cd_label'>Secs</span></div>\";\n\t  \n\t\t\t\tdocument.getElementById(\"bfcountdownplaceholder\").innerHTML = countdownhtml;\n\t\t\t\tif(document.getElementById(\"countdown-header\") != null){\n\t\t\t\t\tdocument.getElementById(\"countdown-header\").style.animation = \"fadeIn 0.2s forwards\";\n\t\t\t\t}\n\t\t\t\tif(document.getElementsByClassName(\"cd_hp_wrapper\")[0] != null && hpCDLoaded == false){\n\t\t\t\t\t$(\".cd_hp_wrapper\").fadeIn();//.style.animation = \"fadeIn 1s forwards\";\n\t\t\t\t\thpCDLoaded = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}, 1000);\n\t}\n});*/\n\n$(\"select[name='id']\").change(function(){\n    history.pushState({page: 1}, \"title 1\", \"?variant=\" + $(this).find(\":selected\").val())\n})\n\n$(\".fade-readmore\").click(function(){\n\t$(this).fadeOut();\n\t$(this).prev().css(\"max-height\",\"2000px\");\n});\n\n$(\".close-readmore\").click(function(){\n\t$(this).parent().next().fadeIn();\n\t$(this).parent().css(\"max-height\",\"40px\");\n});\n\n\n// Accessibility fix: Force PDP product images and thumbnails to be keyboard selectable\ndocument.addEventListener('keydown', function(e) {\n    if (e.key === 'Enter' || e.keyCode === 32) {\n        // If we press Enter/Space on a thumbnail, main image, or slider dot, click it!\n        var sliderTarget = e.target.closest('.product__thumb, .product__thumb-item, .slick-dots li button, .product__photo-zoom');\n        if (sliderTarget) {\n            e.preventDefault();\n            sliderTarget.click();\n        }\n    }\n});\n\n// Slick slider constantly rebuilds itself, so we ensure thumbnails always stay tabbable\nsetInterval(function() {\n    var thumbs = document.querySelectorAll('.product__thumb, .product__thumb-item, .slick-dots li button, .product__photo-zoom');\n    thumbs.forEach(function(thumb) {\n        if (thumb.getAttribute('tabindex') !== '0') {\n            thumb.setAttribute('tabindex', '0');\n            thumb.setAttribute('role', 'button');\n        }\n    });\n}, 1000);\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
  "mappings": "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",
  "names": ["$", "$el", "key", "status", "$slider", "videoModalPlayer", "handle", "index", "sliderArgs", "haveImages", "peGetCookie"]
}
