{"version":3,"file":"bundle-product-vendor-ede9d3bd5c.js","sources":["bundle-product-vendor.js"],"sourcesContent":["function _instanceof(left, right) { if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) { return !!right[Symbol.hasInstance](left); } else { return left instanceof right; } }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!_instanceof(instance, Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\n/**\r\n * TinyGesture.js\r\n *\r\n * This service uses passive listeners, so you can't call event.preventDefault()\r\n * on any of the events.\r\n *\r\n * Adapted from https://gist.github.com/SleepWalker/da5636b1abcbaff48c4d\r\n * and https://github.com/uxitten/xwiper\r\n */\r\nvar TinyGesture = /*#__PURE__*/function () {\r\n\tfunction TinyGesture(element, options) {\r\n\t\t_classCallCheck(this, TinyGesture);\r\n\r\n\t\toptions = Object.assign({}, TinyGesture.defaults, options);\r\n\t\tthis.element = element;\r\n\t\tthis.opts = options;\r\n\t\tthis.touchStartX = null;\r\n\t\tthis.touchStartY = null;\r\n\t\tthis.touchEndX = null;\r\n\t\tthis.touchEndY = null;\r\n\t\tthis.velocityX = null;\r\n\t\tthis.velocityY = null;\r\n\t\tthis.longPressTimer = null;\r\n\t\tthis.doubleTapWaiting = false;\r\n\t\tthis.handlers = {\r\n\t\t\t'panstart': [],\r\n\t\t\t'panmove': [],\r\n\t\t\t'panend': [],\r\n\t\t\t'swipeleft': [],\r\n\t\t\t'swiperight': [],\r\n\t\t\t'swipeup': [],\r\n\t\t\t'swipedown': [],\r\n\t\t\t'tap': [],\r\n\t\t\t'doubletap': [],\r\n\t\t\t'longpress': []\r\n\t\t};\r\n\t\tthis._onTouchStart = this.onTouchStart.bind(this);\r\n\t\tthis._onTouchMove = this.onTouchMove.bind(this);\r\n\t\tthis._onTouchEnd = this.onTouchEnd.bind(this);\r\n\t\tthis.element.addEventListener('touchstart', this._onTouchStart, passiveIfSupported);\r\n\t\tthis.element.addEventListener('touchmove', this._onTouchMove, passiveIfSupported);\r\n\t\tthis.element.addEventListener('touchend', this._onTouchEnd, passiveIfSupported);\r\n\r\n\t\tif (this.opts.mouseSupport && !('ontouchstart' in window)) {\r\n\t\t\tthis.element.addEventListener('mousedown', this._onTouchStart, passiveIfSupported);\r\n\t\t\tdocument.addEventListener('mousemove', this._onTouchMove, passiveIfSupported);\r\n\t\t\tdocument.addEventListener('mouseup', this._onTouchEnd, passiveIfSupported);\r\n\t\t}\r\n\t}\r\n\r\n\t_createClass(TinyGesture, [{\r\n\t\tkey: \"destroy\",\r\n\t\tvalue: function destroy() {\r\n\t\t\tthis.element.removeEventListener('touchstart', this._onTouchStart);\r\n\t\t\tthis.element.removeEventListener('touchmove', this._onTouchMove);\r\n\t\t\tthis.element.removeEventListener('touchend', this._onTouchEnd);\r\n\t\t\tthis.element.removeEventListener('mousedown', this._onTouchStart);\r\n\t\t\tdocument.removeEventListener('mousemove', this._onTouchMove);\r\n\t\t\tdocument.removeEventListener('mouseup', this._onTouchEnd);\r\n\t\t\tclearTimeout(this.longPressTimer);\r\n\t\t\tclearTimeout(this.doubleTapTimer);\r\n\t\t}\r\n\t}, {\r\n\t\tkey: \"on\",\r\n\t\tvalue: function on(type, fn) {\r\n\t\t\tvar _this = this;\r\n\r\n\t\t\tif (this.handlers[type]) {\r\n\t\t\t\tthis.handlers[type].push(fn);\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttype: type,\r\n\t\t\t\t\tfn: fn,\r\n\t\t\t\t\tcancel: function cancel() {\r\n\t\t\t\t\t\treturn _this.off(type, fn);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t}, {\r\n\t\tkey: \"off\",\r\n\t\tvalue: function off(type, fn) {\r\n\t\t\tif (this.handlers[type]) {\r\n\t\t\t\tvar idx = this.handlers[type].indexOf(fn);\r\n\r\n\t\t\t\tif (idx !== -1) {\r\n\t\t\t\t\tthis.handlers[type].splice(idx, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}, {\r\n\t\tkey: \"fire\",\r\n\t\tvalue: function fire(type, event) {\r\n\t\t\tfor (var i = 0; i < this.handlers[type].length; i++) {\r\n\t\t\t\tthis.handlers[type][i](event);\r\n\t\t\t}\r\n\t\t}\r\n\t}, {\r\n\t\tkey: \"onTouchStart\",\r\n\t\tvalue: function onTouchStart(event) {\r\n\t\t\tvar _this2 = this;\r\n\r\n\t\t\tthis.thresholdX = this.opts.threshold('x', this);\r\n\t\t\tthis.thresholdY = this.opts.threshold('y', this);\r\n\t\t\tthis.disregardVelocityThresholdX = this.opts.disregardVelocityThreshold('x', this);\r\n\t\t\tthis.disregardVelocityThresholdY = this.opts.disregardVelocityThreshold('y', this);\r\n\t\t\tthis.touchStartX = event.type === 'mousedown' ? event.screenX : event.changedTouches[0].screenX;\r\n\t\t\tthis.touchStartY = event.type === 'mousedown' ? event.screenY : event.changedTouches[0].screenY;\r\n\t\t\tthis.touchMoveX = null;\r\n\t\t\tthis.touchMoveY = null;\r\n\t\t\tthis.touchEndX = null;\r\n\t\t\tthis.touchEndY = null; // Long press.\r\n\r\n\t\t\tthis.longPressTimer = setTimeout(function () {\r\n\t\t\t\treturn _this2.fire('longpress', event);\r\n\t\t\t}, this.opts.longPressTime);\r\n\t\t\tthis.fire('panstart', event);\r\n\t\t}\r\n\t}, {\r\n\t\tkey: \"onTouchMove\",\r\n\t\tvalue: function onTouchMove(event) {\r\n\t\t\tif (event.type === 'mousemove' && (!this.touchStartX || this.touchEndX !== null)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar touchMoveX = (event.type === 'mousemove' ? event.screenX : event.changedTouches[0].screenX) - this.touchStartX;\r\n\t\t\tthis.velocityX = touchMoveX - this.touchMoveX;\r\n\t\t\tthis.touchMoveX = touchMoveX;\r\n\t\t\tvar touchMoveY = (event.type === 'mousemove' ? event.screenY : event.changedTouches[0].screenY) - this.touchStartY;\r\n\t\t\tthis.velocityY = touchMoveY - this.touchMoveY;\r\n\t\t\tthis.touchMoveY = touchMoveY;\r\n\t\t\tvar absTouchMoveX = Math.abs(this.touchMoveX);\r\n\t\t\tvar absTouchMoveY = Math.abs(this.touchMoveY);\r\n\t\t\tthis.swipingHorizontal = absTouchMoveX > this.thresholdX;\r\n\t\t\tthis.swipingVertical = absTouchMoveY > this.thresholdY;\r\n\t\t\tthis.swipingDirection = absTouchMoveX > absTouchMoveY ? this.swipingHorizontal ? 'horizontal' : 'pre-horizontal' : this.swipingVertical ? 'vertical' : 'pre-vertical';\r\n\r\n\t\t\tif (Math.max(absTouchMoveX, absTouchMoveY) > this.opts.pressThreshold) {\r\n\t\t\t\tclearTimeout(this.longPressTimer);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('panmove', event);\r\n\t\t}\r\n\t}, {\r\n\t\tkey: \"onTouchEnd\",\r\n\t\tvalue: function onTouchEnd(event) {\r\n\t\t\tvar _this3 = this;\r\n\r\n\t\t\tif (event.type === 'mouseup' && (!this.touchStartX || this.touchEndX !== null)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.touchEndX = event.type === 'mouseup' ? event.screenX : event.changedTouches[0].screenX;\r\n\t\t\tthis.touchEndY = event.type === 'mouseup' ? event.screenY : event.changedTouches[0].screenY;\r\n\t\t\tthis.fire('panend', event);\r\n\t\t\tclearTimeout(this.longPressTimer);\r\n\t\t\tvar x = this.touchEndX - this.touchStartX;\r\n\t\t\tvar absX = Math.abs(x);\r\n\t\t\tvar y = this.touchEndY - this.touchStartY;\r\n\t\t\tvar absY = Math.abs(y);\r\n\r\n\t\t\tif (absX > this.thresholdX || absY > this.thresholdY) {\r\n\t\t\t\tthis.swipedHorizontal = this.opts.diagonalSwipes ? Math.abs(x / y) <= this.opts.diagonalLimit : absX >= absY && absX > this.thresholdX;\r\n\t\t\t\tthis.swipedVertical = this.opts.diagonalSwipes ? Math.abs(y / x) <= this.opts.diagonalLimit : absY > absX && absY > this.thresholdY;\r\n\r\n\t\t\t\tif (this.swipedHorizontal) {\r\n\t\t\t\t\tif (x < 0) {\r\n\t\t\t\t\t\t// Left swipe.\r\n\t\t\t\t\t\tif (this.velocityX < -this.opts.velocityThreshold || x < -this.disregardVelocityThresholdX) {\r\n\t\t\t\t\t\t\tthis.fire('swipeleft', event);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Right swipe.\r\n\t\t\t\t\t\tif (this.velocityX > this.opts.velocityThreshold || x > this.disregardVelocityThresholdX) {\r\n\t\t\t\t\t\t\tthis.fire('swiperight', event);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.swipedVertical) {\r\n\t\t\t\t\tif (y < 0) {\r\n\t\t\t\t\t\t// Upward swipe.\r\n\t\t\t\t\t\tif (this.velocityY < -this.opts.velocityThreshold || y < -this.disregardVelocityThresholdY) {\r\n\t\t\t\t\t\t\tthis.fire('swipeup', event);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Downward swipe.\r\n\t\t\t\t\t\tif (this.velocityY > this.opts.velocityThreshold || y > this.disregardVelocityThresholdY) {\r\n\t\t\t\t\t\t\tthis.fire('swipedown', event);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (absX < this.opts.pressThreshold && absY < this.opts.pressThreshold) {\r\n\t\t\t\t// Tap.\r\n\t\t\t\tif (this.doubleTapWaiting) {\r\n\t\t\t\t\tthis.doubleTapWaiting = false;\r\n\t\t\t\t\tclearTimeout(this.doubleTapTimer);\r\n\t\t\t\t\tthis.fire('doubletap', event);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.doubleTapWaiting = true;\r\n\t\t\t\t\tthis.doubleTapTimer = setTimeout(function () {\r\n\t\t\t\t\t\treturn _this3.doubleTapWaiting = false;\r\n\t\t\t\t\t}, this.opts.doubleTapTime);\r\n\t\t\t\t\tthis.fire('tap', event);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}]);\r\n\r\n\treturn TinyGesture;\r\n}();\r\n\r\nTinyGesture.defaults = {\r\n\tthreshold: function threshold(type, self) {\r\n\t\treturn Math.max(25, Math.floor(0.15 * (type === 'x' ? window.innerWidth || document.body.clientWidth : window.innerHeight || document.body.clientHeight)));\r\n\t},\r\n\tvelocityThreshold: 10,\r\n\tdisregardVelocityThreshold: function disregardVelocityThreshold(type, self) {\r\n\t\treturn Math.floor(0.5 * (type === 'x' ? self.element.clientWidth : self.element.clientHeight));\r\n\t},\r\n\tpressThreshold: 8,\r\n\tdiagonalSwipes: false,\r\n\tdiagonalLimit: Math.tan(45 * 1.5 / 180 * Math.PI),\r\n\tlongPressTime: 500,\r\n\tdoubleTapTime: 300,\r\n\tmouseSupport: true\r\n}; // Passive feature detection.\r\n\r\nvar passiveIfSupported = false;\r\n\r\ntry {\r\n\twindow.addEventListener('test', null, Object.defineProperty({}, 'passive', {\r\n\t\tget: function get() {\r\n\t\t\tpassiveIfSupported = {\r\n\t\t\t\tpassive: true\r\n\t\t\t};\r\n\t\t}\r\n\t}));\r\n} catch (err) { }\r\n\r\n/*\r\n\r\n\tGibe Gallery\r\n\tv1.0\r\n\r\n\tDEPENDENCIES\r\n\t------------\r\n\r\n\tMustache (https://github.com/janl/mustache.js/)\r\n\r\n\tOPTIONAL EXTRAS\r\n\t---------------\r\n\r\n\tTinyGesture (https://github.com/sciactive/tinygesture)\r\n\tBody scroll lock (https://github.com/willmcpo/body-scroll-lock)\r\n\r\n\tUSAGE\r\n\t-----\r\n\r\n\t$('[data-your-selector]').gibeGallery({\r\n\t\tlaunch: 769,\r\n\t\tlinks: 'a',\r\n\t\tlinksActiveClass: 'active',\r\n\t\tstage: '[data-gibe-gallery-stage]',\r\n\t\ttemplates: {\r\n\t\t\toverlay: '#gibeGalleryOverlayTemplate'\r\n\t\t},\r\n\t\thorizontal: {\r\n\t\t\twidth: 1000,\r\n\t\t\theight: 800\r\n\t\t},\r\n\t\tforceSquare: false,\r\n\t\tfadeTime: 500,\r\n\t\thoverTime: 150,\r\n\t\tmaxWidth: 1400\r\n\t});\r\n\r\n\tSETTINGS\r\n\t--------\r\n\r\n\tlaunch: int (minimum browser width the gallery should launch at; 769)\r\n\tlinks: string (selector for gallery links; 'a')\r\n\tlinksActiveClass: string (the class to add for the active inline thumbnail; '')\r\n\ttemplates: object (selector for gallery templates; { overlay: '#gibeGalleryOverlayTemplate' })\r\n\thorizontal: object (minimum window width and height in which to render the horizontal gallery layout; { width: 1000, height: 800 })\r\n\tforceSquare: bool (whether or not to force gallery items to always fill a square area; false)\r\n\tfadeTime: int (fade time in ms; 500 - this should match that set in the SASS file for this plugin)\r\n\thoverTime: int (hover time on thumb before preloading; 150)\r\n\tmaxWidth: int (maximum width of the gallery; 1400)\r\n\tonStageChange: function (callback when the stage changes; empty function)\r\n\r\n*/\r\n\r\njQuery.fn.gibeGallery = function (overrides) {\r\n\r\n\t// Avoid scope issues by using 'base' instead of 'this'\r\n\r\n\tvar base = this;\r\n\r\n\t// If the selector does not contain any elements, return the jQuery object\r\n\r\n\tif (!base.length) return base;\r\n\r\n\t// Cache selector\r\n\r\n\tbase.element = $(base);\r\n\r\n\t// Add a reverse reference to the DOM object\r\n\r\n\tbase.element.data('gibeGallery', base);\r\n\r\n\t// Define default settings\r\n\r\n\tbase.settings = new Object();\r\n\tbase.settings.launch = 769;\r\n\tbase.settings.links = 'a:not(.js-not-gallery)';\r\n\tbase.settings.linksActiveClass = '';\r\n\tbase.settings.quicklinks = '[data-gibe-quick-link]';\r\n\tbase.settings.stage = '[data-gibe-gallery-stage]';\r\n\tbase.settings.templates = {\r\n\t\toverlay: '#gibeGalleryOverlayTemplate'\r\n\t};\r\n\tbase.settings.horizontal = {\r\n\t\twidth: 1000,\r\n\t\theight: 800\r\n\t};\r\n\tbase.settings.forceSquare = false;\r\n\tbase.settings.transition = \"fade\";\r\n\tbase.settings.fadeTime = 500;\r\n\tbase.settings.hoverTime = 150;\r\n\tbase.settings.maxWidth = 1400;\r\n\tbase.settings.onStageChange = function (index) { };\r\n\r\n\t// Use overriding settings if supplied\r\n\r\n\tif (overrides !== undefined) base.settings = $.extend({}, base.settings, overrides);\r\n\r\n\tbase.settings.fadeTime = base.settings.transition === \"slide\" ? 0 : base.settings.fadeTime;\r\n\r\n\t// Add flags to indicate touchswipe, object fit and touch support\r\n\r\n\tbase.settings.swipe = typeof TinyGesture !== 'undefined' ? true : false;\r\n\tbase.settings.objectfit = 'objectFit' in document.documentElement.style;\r\n\tbase.settings.touch = 'ontouchstart' in window || window.DocumentTouch && document instanceof DocumentTouch;\r\n\tbase.settings.scrollLock = typeof bodyScrollLock !== 'undefined' ? true : false;\r\n\r\n\t// Add flag to indicate whether or not we should force the gallery for all screen sizes (relevant when gallery launched from hidden zoom button for screen readers)\r\n\r\n\tbase.settings.forceGallery = false;\r\n\r\n\t// Set the transition type\r\n\tif (base.settings.transition === \"slide\") {\r\n\t\tbase.element.addClass('c-gallery--slide');\r\n\t}\r\n\r\n\t// Helper functions\r\n\r\n\tbase.helpers = {\r\n\r\n\t\tgetKeyPressed: function (e) {\r\n\r\n\t\t\tif (e.key !== undefined) return e.key; else if (e.keyIdentifier !== undefined) return e.keyIdentifier; else if (e.keyCode !== undefined) return e.keyCode;\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// Cache Mustache templates\r\n\r\n\tbase.overlayTemplate = $(base.settings.templates.overlay).html();\r\n\r\n\t// Cache elements\r\n\r\n\tbase.elements = {\r\n\r\n\t\tlinks: base.element.find(base.settings.links),\r\n\t\tquicklinks: base.element.find(base.settings.quicklinks),\r\n\t\tstage: base.element.find(base.settings.stage),\r\n\t\tdoc: $(document),\r\n\t\twin: $(window),\r\n\t\thtml: $('html'),\r\n\t\tbody: $('body')\r\n\r\n\t};\r\n\r\n\t// Cache gallery title / subtitle\r\n\r\n\tbase.title = base.element.attr('data-gibe-gallery-title') || false;\r\n\tbase.subtitle = base.element.attr('data-gibe-gallery-subtitle') || false;\r\n\r\n\t// Create and populate array of gallery items\r\n\r\n\tbase.items = [];\r\n\r\n\tbase.threeSixtyInstances = [];\r\n\tbase.threeSixtyHasInit = false;\r\n\tbase.threeSixtyCache = [];\r\n\r\n\tbase.userIsUsingButtons = false;\r\n\r\n\tbase.tinyGestureOptions = {\r\n\t\tmouseSupport: false,\r\n\t\tthreshold: function (type, self) {\r\n\t\t\tif (type === \"x\") {\r\n\t\t\t\treturn 5;\r\n\t\t\t} else {\r\n\t\t\t\treturn 200;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tvelocityThreshold: 6\r\n\t};\r\n\r\n\tbase.elements.links.each(function (index) {\r\n\r\n\t\tvar target = $(this),\r\n\t\t\timg = target.find('img'),\r\n\t\t\tmedia = target.attr('href'),\r\n\t\t\tid = target.attr('data-gibe-gallery-item-id'),\r\n\t\t\tisImage = target.attr('data-gibe-gallery-item') === 'image' ? true : false,\r\n\t\t\tisVideo = target.attr('data-gibe-gallery-item') === 'video' ? true : false;\r\n\t\tis360 = target.attr('data-gibe-gallery-item') === '360' ? true : false;\r\n\t\ttechImage = target.attr('data-gibe-gallery-item-techimage') && target.attr('data-gibe-gallery-item-techimage').toLowerCase() === \"true\" ? true : false;\r\n\r\n\t\tif (isVideo) media = target.attr('data-gibe-gallery-item-id');\r\n\t\tif (is360) media = target.attr('data-360-images');\r\n\r\n\t\ttarget.data('index', index);\r\n\r\n\t\tbase.items.push({\r\n\t\t\tIsImage: isImage,\r\n\t\t\tIsVideo: isVideo,\r\n\t\t\tIs360: is360,\r\n\t\t\tStickyThumbnail: isVideo || is360 || techImage,\r\n\t\t\tThumbnail: img.attr('src'),\r\n\t\t\tId: id,\r\n\t\t\tMedia: media,\r\n\t\t\tTitle: 'Gallery item ' + (index + 1) + ' - ' + (target.attr('data-gibe-gallery-item-title') || target.attr('title') || img.attr('alt') || ''),\r\n\t\t\tAspectRatio: target.attr('data-gibe-gallery-item-aspect-ratio') || false,\r\n\t\t\tTechImage: techImage\r\n\t\t});\r\n\r\n\t});\r\n\r\n\t// Add flag to indicate multi slide\r\n\r\n\tbase.settings.multiSlide = base.items.length > 1;\r\n\r\n\t// Add active class to first link\r\n\r\n\tbase.elements.links.eq(0).addClass(base.settings.linksActiveClass);\r\n\r\n\t// Launch appropriate experience when thumbnails are clicked\r\n\r\n\tbase.elements.links.on('click', function (e) {\r\n\r\n\t\tbase.signalUserIsUsingButtons();\r\n\r\n\t\t// Cache index of element\r\n\r\n\t\tvar index = $(this).data('index');\r\n\r\n\t\t// \"Launch\" the stage\r\n\r\n\t\tbase.stage.launch(index);\r\n\r\n\t\t// focus on zoom\r\n\r\n\t\tif (!base.stage.thumbnails.hasThumbnailScroller()) {\r\n\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item--active .js-gibe-gallery-stage__item__zoom').focus();\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t});\r\n\r\n\tbase.elements.quicklinks.on('click', function (e) {\r\n\r\n\t\tvar id = $(this).attr('data-gibe-gallery-jump-to');\r\n\t\tvar index = base.element.find('[data-gibe-gallery-item-id=\"' + id + '\"]').parent().index();\r\n\r\n\t\t// \"Launch\" the stage\r\n\r\n\t\tbase.signalUserIsUsingButtons();\r\n\r\n\t\tbase.stage.launch(index);\r\n\r\n\t\treturn false;\r\n\r\n\t});\r\n\r\n\t// Remove namespaced events\r\n\r\n\tbase.elements.doc.off('keyup.gibeGallery');\r\n\tbase.elements.doc.off('keydown.gibeGallery');\r\n\tbase.elements.doc.off('click.gibeGallery');\r\n\r\n\t// ESCAPE KEY\r\n\t// Close the overlay when user presses escape\r\n\r\n\tbase.elements.doc.on('keyup.gibeGallery', function (e) {\r\n\r\n\t\tvar keyPressed = base.helpers.getKeyPressed(e);\r\n\t\tif (keyPressed === 27 || keyPressed === 'Escape' || keyPressed === 'Esc') base.gallery.close();\r\n\r\n\t});\r\n\r\n\tbase.signalUserIsUsingButtons = function () {\r\n\t\tbase.userIsUsingButtons = true;\r\n\t\tsetTimeout(() => {\r\n\t\t\tbase.userIsUsingButtons = false;\r\n\t\t}, 300);\r\n\t};\r\n\r\n\r\n\t// FOCUS STYLES\r\n\t// Add flags to show and hide focus states based on user interaction\r\n\r\n\tbase.focusStyles = {\r\n\r\n\t\ton: function () { base.elements.html.addClass('js-gibe-gallery-use-focus-styles'); },\r\n\r\n\t\toff: function () { base.elements.html.removeClass('js-gibe-gallery-use-focus-styles'); }\r\n\r\n\t};\r\n\r\n\tbase.elements.doc.on('keydown.gibeGallery', function (e) {\r\n\r\n\t\tvar keyPressed = base.helpers.getKeyPressed(e);\r\n\t\tif (keyPressed === 'Tab' || keyPressed === 9) base.focusStyles.on();\r\n\r\n\t});\r\n\r\n\r\n\tbase.elements.doc.on('click.gibeGallery', function () { base.focusStyles.off(); });\r\n\r\n\t// TOUCH STYLES\r\n\r\n\tif (matchMedia('(hover: none)').matches) base.elements.html.addClass('js-gibe-gallery-use-touch-styles');\r\n\r\n\t// RESIZE EVENTS\r\n\t// Throttle window resize events so as to not crash the browser\r\n\r\n\tbase.timer = null;\r\n\r\n\tbase.elements.win.resize(function () {\r\n\t\tbase.gallery.resize.start();\r\n\t\tif (base.timer) { window.clearTimeout(base.timer); }\r\n\t\tbase.timer = window.setTimeout(function () {\r\n\r\n\t\t\tbase.gallery.resize.end();\r\n\t\t\tbase.stage.resize.end();\r\n\t\t\tbase.gallery.init360s();\r\n\t\t\tbase.stage.thumbnails.checkArrowDisplay();\r\n\r\n\t\t}, 500);\r\n\t});\r\n\r\n\tbase.initImageZoom = function () {\r\n\t\tsetTimeout(function () {\r\n\t\t\tvar imagesToZoom = document.querySelectorAll('.js-image-zoom');\r\n\t\t\tfor (var i = 0; i < imagesToZoom.length; i++) {\r\n\t\t\t\tnew ImageZoom(imagesToZoom[i]);\r\n\t\t\t}\r\n\t\t}, 250);\r\n\t};\r\n\r\n\t// OVERLAY\r\n\t// The gallery overlay used on larger screens\r\n\r\n\tbase.gallery = {\r\n\r\n\t\t// Video instances\r\n\r\n\t\tvideoInstances: {},\r\n\r\n\t\t// Whether or not the gallery should be allowed\r\n\r\n\t\tallow: function () {\r\n\r\n\t\t\tif (base.settings.forceGallery) return true;\r\n\r\n\t\t\treturn window.matchMedia('(min-width: ' + base.settings.launch + 'px)').matches;\r\n\r\n\t\t},\r\n\r\n\t\t// Get the current element\r\n\r\n\t\tgetElement: function () {\r\n\r\n\t\t\treturn $('.js-gibe-gallery-overlay');\r\n\r\n\t\t},\r\n\r\n\t\tlockout: {\r\n\r\n\t\t\ton: function () {\r\n\r\n\t\t\t\tif (base.settings.scrollLock) {\r\n\r\n\t\t\t\t\tvar element = base.gallery.getElement();\r\n\r\n\t\t\t\t\tbodyScrollLock.disableBodyScroll(element, {\r\n\t\t\t\t\t\treserveScrollBarGap: true\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\toff: function () {\r\n\r\n\t\t\t\tif (base.settings.scrollLock) { bodyScrollLock.clearAllBodyScrollLocks(); }\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Handle resizing of the gallery\r\n\r\n\t\tresize: {\r\n\r\n\t\t\twide: function () {\r\n\r\n\t\t\t\treturn window.matchMedia('(min-width: ' + base.settings.horizontal.width + 'px) and (min-height: ' + base.settings.horizontal.height + 'px)').matches;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tcalculate: {\r\n\r\n\t\t\t\tavailableHeight: function (inner, content) {\r\n\r\n\t\t\t\t\t// Start with window height\r\n\r\n\t\t\t\t\tvar availableHeight = base.elements.win.height();\r\n\r\n\t\t\t\t\t// Reduce by top and bottom padding around physical overlay (the dimmer)\r\n\r\n\t\t\t\t\tavailableHeight -= parseInt(inner.css('padding-top'));\r\n\t\t\t\t\tavailableHeight -= parseInt(inner.css('padding-bottom'));\r\n\r\n\t\t\t\t\t// Reduce by top and bottom padding around content inside the overlay\r\n\r\n\t\t\t\t\tavailableHeight -= parseInt(content.css('padding-top'));\r\n\t\t\t\t\tavailableHeight -= parseInt(content.css('padding-bottom'));\r\n\r\n\t\t\t\t\treturn availableHeight;\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tgalleryHeight: function (availableHeight, title) {\r\n\r\n\t\t\t\t\t// Reduce previously calculated available height by height of title (if it exists)\r\n\r\n\t\t\t\t\tif (!title.length) return availableHeight;\r\n\r\n\t\t\t\t\treturn availableHeight - title.outerHeight();\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tthumbnailsHeight: function (availableHeight, close) {\r\n\r\n\t\t\t\t\t// Reduce previously calculated available height by height of close\r\n\r\n\t\t\t\t\treturn availableHeight - (close.outerHeight() + 30);\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tsecondaryWidth: function (thumbnailsHeight, thumbnailItems) {\r\n\r\n\t\t\t\t\t// Cache the height / width of first thumbnail (they are all the same) and the thumbnail count\r\n\r\n\t\t\t\t\tvar thumbnailWidth = thumbnailItems.first().outerWidth() + 10;\r\n\r\n\t\t\t\t\treturn thumbnailWidth;\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\tthumbnailScrollerHeight: function (galleryHeight) {\r\n\r\n\t\t\t\t\tvar height = 0;\r\n\t\t\t\t\tvar stickyThumbnailListHeight = $('.js-gibe-gallery-overlay__thumbnails__list--sticky').height();\r\n\t\t\t\t\tvar thumbnailsHeight = $('.js-gibe-gallery-overlay__thumbnails__list').first().height();\r\n\t\t\t\t\tvar galleryMarginTop = parseInt($('.js-gibe-gallery-overlay__thumbnails').css('marginTop').replace('px', ''));\r\n\r\n\t\t\t\t\tif (thumbnailsHeight + stickyThumbnailListHeight < galleryHeight) {\r\n\t\t\t\t\t\theight = \"auto\";\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\theight = Math.max(galleryHeight - $('.js-gibe-gallery-overlay__thumbnails__list--sticky').height() - galleryMarginTop, 110);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn height;\r\n\t\t\t\t},\r\n\r\n\t\t\t\toverrideHeight: function (galleryHeight, mainList, mainInner) {\r\n\r\n\t\t\t\t\t// If height of gallery is greater than width of main list, gallery height should be main list width (square)\r\n\r\n\t\t\t\t\tif (galleryHeight > mainList.width()) {\r\n\r\n\t\t\t\t\t\t// Start with width of main list\r\n\r\n\t\t\t\t\t\tgalleryHeight = mainList.width();\r\n\r\n\t\t\t\t\t\t// Add padding from it's wrapper\r\n\r\n\t\t\t\t\t\tgalleryHeight += parseInt(mainInner.css('padding-top'));\r\n\t\t\t\t\t\tgalleryHeight += parseInt(mainInner.css('padding-bottom'));\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn galleryHeight;\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\toverrideWidth: function (galleryHeight, mainInner, secondary, content) {\r\n\r\n\t\t\t\t\t// Start with gallery height\r\n\r\n\t\t\t\t\tvar contentWidth = galleryHeight;\r\n\r\n\t\t\t\t\t// Minus top and bottom padding on main inner\r\n\r\n\t\t\t\t\tcontentWidth -= parseInt(mainInner.css('padding-top'));\r\n\t\t\t\t\tcontentWidth -= parseInt(mainInner.css('padding-bottom'));\r\n\r\n\t\t\t\t\t// Add padding to left and right of main gallery\r\n\r\n\t\t\t\t\tcontentWidth += parseInt(mainInner.css('padding-left'));\r\n\t\t\t\t\tcontentWidth += parseInt(mainInner.css('padding-right'));\r\n\r\n\t\t\t\t\t// Add secondary width (containing the thumbs)\r\n\r\n\t\t\t\t\tcontentWidth += parseInt(secondary.width());\r\n\r\n\t\t\t\t\t// Add left and right padding around content inside the overlay\r\n\r\n\t\t\t\t\tcontentWidth += parseInt(content.css('padding-left'));\r\n\t\t\t\t\tcontentWidth += parseInt(content.css('padding-right'));\r\n\r\n\t\t\t\t\treturn Math.min(contentWidth, base.settings.maxWidth);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Method called when resizing begins\r\n\r\n\t\t\tstart: function () {\r\n\r\n\t\t\t\tvar element = base.gallery.getElement();\r\n\r\n\t\t\t\tif (!element.length) return;\r\n\r\n\t\t\t\telement.addClass('js-gibe-gallery-overlay--resizing');\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Method called when resizing ends\r\n\r\n\t\t\tend: function () {\r\n\r\n\t\t\t\t// Get gallery and return if not present\r\n\r\n\t\t\t\tvar element = base.gallery.getElement();\r\n\r\n\t\t\t\tif (!element.length) return;\r\n\r\n\t\t\t\t// If resize event ends outside of gallery boundaries then close the gallery\r\n\r\n\t\t\t\tif (!base.gallery.allow()) {\r\n\r\n\t\t\t\t\tbase.gallery.close();\r\n\t\t\t\t\treturn;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Cache required elements\r\n\r\n\t\t\t\tvar inner = $('.js-gibe-gallery-overlay__inner__inner'),\r\n\t\t\t\t\tcontent = $('.js-gibe-gallery-overlay__content'),\r\n\t\t\t\t\tthumbnails = $('.js-gibe-gallery-overlay__thumbnails'),\r\n\t\t\t\t\tmain = $('.js-gibe-gallery-overlay__main'),\r\n\t\t\t\t\tmainInner = $('.js-gibe-gallery-overlay__main__inner'),\r\n\t\t\t\t\tmainList = $('.js-gibe-gallery-overlay__main__list'),\r\n\t\t\t\t\tthumbnailItems = $('.js-gibe-gallery-overlay__thumbnails__item'),\r\n\t\t\t\t\tprimary = $('.js-gibe-gallery-overlay__content__primary'),\r\n\t\t\t\t\tsecondary = $('.js-gibe-gallery-overlay__content__secondary'),\r\n\t\t\t\t\tbuttons = $('.js-gibe-gallery-overlay__main__button'),\r\n\t\t\t\t\tclose = $('.js-gibe-gallery-overlay__close'),\r\n\t\t\t\t\ttitle = $('.js-gibe-gallery-overlay__title'),\r\n\t\t\t\t\tthumbnailsScroller = $('.js-gibe-gallery-overlay__thumbnails__list__scroller');\r\n\r\n\t\t\t\t// Reset any applied styles\r\n\r\n\t\t\t\telement.removeClass('js-gibe-gallery-overlay--wide');\r\n\t\t\t\tprimary.add(secondary).add(thumbnails).add(content).add(buttons).add(mainList).removeAttr('style');\r\n\r\n\t\t\t\t// Available and gallery heights to be defined later\r\n\r\n\t\t\t\tvar availableHeight, galleryHeight;\r\n\r\n\t\t\t\t// Assign styles for appropriate layout\r\n\r\n\t\t\t\tif (base.gallery.resize.wide()) {\r\n\r\n\t\t\t\t\t// Add class to define \"wide\" layout (this must happen before any other calculations so that the appropriate styles are present)\r\n\r\n\t\t\t\t\telement.addClass('js-gibe-gallery-overlay--wide');\r\n\r\n\t\t\t\t\t// Calculate available height\r\n\r\n\t\t\t\t\tavailableHeight = base.gallery.resize.calculate.availableHeight(inner, content);\r\n\r\n\t\t\t\t\t// Calculate height available for gallery\r\n\r\n\t\t\t\t\tgalleryHeight = base.gallery.resize.calculate.galleryHeight(availableHeight, title);\r\n\r\n\t\t\t\t\t// Calculate height available for thumbnails\r\n\r\n\t\t\t\t\tvar thumbnailsHeight = base.gallery.resize.calculate.thumbnailsHeight(availableHeight, close);\r\n\r\n\t\t\t\t\t// Calculate secondary width\r\n\r\n\t\t\t\t\tvar secondaryWidth = base.gallery.resize.calculate.secondaryWidth(thumbnailsHeight, thumbnailItems);\r\n\r\n\t\t\t\t\t// Set primary and secondary widths\r\n\r\n\t\t\t\t\tprimary.css('width', 'calc(100% - ' + secondaryWidth + 'px)');\r\n\t\t\t\t\tsecondary.css('width', secondaryWidth);\r\n\r\n\t\t\t\t\t// Set thumbnail height\r\n\r\n\t\t\t\t\tthumbnails.height(thumbnailsHeight);\r\n\r\n\t\t\t\t\t// If force square setting is active\r\n\r\n\t\t\t\t\tif (base.settings.forceSquare) {\r\n\r\n\t\t\t\t\t\t// Calculate override height\r\n\r\n\t\t\t\t\t\tvar overrideHeight = base.gallery.resize.calculate.overrideHeight(galleryHeight, mainList, mainInner);\r\n\t\t\t\t\t\tgalleryHeight = overrideHeight;\r\n\r\n\t\t\t\t\t\t// Calculate new gallery width\r\n\r\n\t\t\t\t\t\tvar overrideWidth = base.gallery.resize.calculate.overrideWidth(galleryHeight, mainInner, secondary, content);\r\n\t\t\t\t\t\tcontent.css('max-width', overrideWidth);\r\n\r\n\t\t\t\t\t\t// Set thumbnail scroller height\r\n\t\t\t\t\t\tvar thumbnailsScrollerHeight = base.gallery.resize.calculate.thumbnailScrollerHeight(overrideHeight);\r\n\t\t\t\t\t\tthumbnailsScroller.height(thumbnailsScrollerHeight + 'px');\r\n\r\n\t\t\t\t\t\tif (thumbnailsScrollerHeight === \"auto\") {\r\n\t\t\t\t\t\t\t$('.js-gibe-gallery-overlay__thumbnails__list__scroller').addClass('js-gibe-gallery-overlay__thumbnails__list__scroller--hide-buttons');\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// Calculate available height\r\n\r\n\t\t\t\t\tavailableHeight = base.gallery.resize.calculate.availableHeight(inner, content);\r\n\r\n\t\t\t\t\t// Calculate height available for gallery\r\n\r\n\t\t\t\t\tgalleryHeight = base.gallery.resize.calculate.galleryHeight(availableHeight, title);\r\n\r\n\t\t\t\t\tgalleryHeight -= parseInt(thumbnails.height());\r\n\t\t\t\t\tif (base.settings.forceSquare) galleryHeight = Math.min(galleryHeight, mainList.width());\r\n\r\n\t\t\t\t\t// Set max width of gallery\r\n\r\n\t\t\t\t\tcontent.css('max-width', base.settings.maxWidth);\r\n\r\n\t\t\t\t\t// Set width of gallery\r\n\r\n\t\t\t\t\tif (base.settings.forceSquare) mainList.width(galleryHeight);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set height of gallery\r\n\r\n\t\t\t\tmain.height(galleryHeight);\r\n\r\n\t\t\t\t// set 360\r\n\r\n\t\t\t\tbase.gallery.init360s();\r\n\r\n\t\t\t\t// Remove class denoting that resizing is ongoing\r\n\r\n\t\t\t\telement.removeClass('js-gibe-gallery-overlay--resizing');\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Get current index\r\n\r\n\t\tgetCurrentIndex: function () {\r\n\r\n\t\t\tvar gallery = base.gallery.getElement();\r\n\r\n\t\t\treturn gallery.find('.js-gibe-gallery-overlay__main__item--active').index();\r\n\r\n\t\t},\r\n\r\n\t\tgetThumbnailIndex: function (thumbnailElement) {\r\n\r\n\t\t\tvar index = thumbnailElement.index();\r\n\r\n\t\t\tif (thumbnailElement.closest('.js-gibe-gallery-overlay__thumbnails__list--sticky').length) {\r\n\r\n\t\t\t\tindex = $('.js-gibe-gallery-overlay__thumbnails__list--scrollable .js-gibe-gallery-overlay__thumbnails__item').length + thumbnailElement.index();\r\n\r\n\t\t\t}\r\n\r\n\t\t\treturn index;\r\n\t\t},\r\n\r\n\t\t// Transition\r\n\r\n\t\ttransition: {\r\n\r\n\t\t\t// Whether or not to allow a transition to occur\r\n\r\n\t\t\tallow: true,\r\n\r\n\t\t\t// Get new index\r\n\r\n\t\t\tgetNewIndex: function (type) {\r\n\r\n\t\t\t\tvar itemCount = $('.js-gibe-gallery-overlay__main__item').length - 1,\r\n\t\t\t\t\tcurrentIndex = $('.js-gibe-gallery-overlay__main__item--active').index(),\r\n\t\t\t\t\tnewIndex = 0;\r\n\r\n\t\t\t\tswitch (type) {\r\n\t\t\t\t\tcase 'prev':\r\n\t\t\t\t\t\tnewIndex = !currentIndex ? itemCount : currentIndex - 1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'next':\r\n\t\t\t\t\t\tnewIndex = currentIndex === itemCount ? 0 : currentIndex + 1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn newIndex;\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Instigate transition\r\n\r\n\t\t\tgo: function (index, fade) {\r\n\r\n\t\t\t\tif (!base.stage.transition.allow || base.gallery.getCurrentIndex() === index) return;\r\n\r\n\t\t\t\tif (!base.gallery.transition.allow) return;\r\n\r\n\t\t\t\t// Cache elements, create active class\r\n\r\n\t\t\t\tvar element = base.gallery.getElement(),\r\n\t\t\t\t\tmainItems = element.find('.js-gibe-gallery-overlay__main__item'),\r\n\t\t\t\t\tthumbnailItems = element.find('.js-gibe-gallery-overlay__thumbnails__item'),\r\n\t\t\t\t\tmainActiveClass = 'js-gibe-gallery-overlay__main__item--active';\r\n\r\n\t\t\t\t// If fade transition, add additional class\r\n\r\n\t\t\t\tif (fade) mainActiveClass += ' js-gibe-gallery-overlay__main__item--fade';\r\n\r\n\t\t\t\t// If not fade transition, remove active class\r\n\r\n\t\t\t\tif (!fade) mainItems.removeClass('js-gibe-gallery-overlay__main__item--active');\r\n\r\n\t\t\t\t// If no object fit, polyfill object fit by appending image src to the container\r\n\r\n\t\t\t\tif (!base.settings.objectfit) {\r\n\r\n\t\t\t\t\tvar currentSource = 'url(' + mainItems.eq(index).find('.js-gibe-gallery-overlay__main__image').attr('src') + ')';\r\n\t\t\t\t\tmainItems.eq(index).css('background-image', currentSource);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add active class\r\n\r\n\t\t\t\tmainItems.eq(index).addClass(mainActiveClass).attr('tabindex', 1).focus().removeAttr('tabindex');\r\n\r\n\t\t\t\t// Video item focussing\r\n\r\n\t\t\t\tvar video = mainItems.eq(index).find('.js-gibe-gallery-overlay__main__video__iframe');\r\n\t\t\t\tif (video.length) video.focus();\r\n\r\n\t\t\t\t// Pause all existing vimeo videos\r\n\r\n\t\t\t\t$.each(base.gallery.videoInstances, function (key, value) { value.pause(); });\r\n\t\t\t\t$.each(base.stage.videoInstances, function (key, value) { value.pause(); });\r\n\r\n\t\t\t\t// If fade transition, remove previous active class + fade class after delay\r\n\r\n\t\t\t\tif (fade) {\r\n\r\n\t\t\t\t\tbase.gallery.transition.allow = false;\r\n\r\n\t\t\t\t\tsetTimeout(function () {\r\n\r\n\t\t\t\t\t\tmainItems.filter(':not(.js-gibe-gallery-overlay__main__item--fade)').removeClass('js-gibe-gallery-overlay__main__item--active').removeAttr('tabindex');\r\n\t\t\t\t\t\tmainItems.removeClass('js-gibe-gallery-overlay__main__item--fade');\r\n\t\t\t\t\t\tbase.gallery.transition.allow = true;\r\n\r\n\t\t\t\t\t}, base.settings.fadeTime);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set active thumnbail states\r\n\t\t\t\tthumbnailItems.removeClass('js-gibe-gallery-overlay__thumbnails__item--active');\r\n\t\t\t\tthumbnailItems.eq(index).addClass('js-gibe-gallery-overlay__thumbnails__item--active');\r\n\r\n\t\t\t\t// init 360\r\n\t\t\t\tbase.gallery.init360s();\r\n\r\n\t\t\t\t// reset any image zooms\r\n\t\t\t\tvar resetImageZoomEvent = Helpers.createCustomEventForDispatch('resetImageZoom');\r\n\t\t\t\tdocument.dispatchEvent(resetImageZoomEvent);\r\n\r\n\t\t\t\t// Image zoom\r\n\t\t\t\tbase.initImageZoom();\r\n\r\n\t\t\t\tbase.gallery.setThumbnailScrollerPosition();\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsetThumbnailScrollerPosition: function () {\r\n\t\t\tvar activeThumbnail = $('.js-gibe-gallery-overlay__thumbnails__item--active');\r\n\t\t\tif (!activeThumbnail.parent().hasClass('js-gibe-gallery-overlay__thumbnails__list--scrollable')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar activeThumbnailTop = activeThumbnail.position().top;\r\n\t\t\tvar activeThumbnailHeight = activeThumbnail.height();\r\n\t\t\tvar listHeight = $('.js-gibe-gallery-overlay__thumbnails__list__scroller').height();\r\n\t\t\tvar scrollInner = $('.js-gibe-gallery-overlay__thumbnails__list__scroller__inner');\r\n\t\t\tif (activeThumbnailTop + activeThumbnailHeight > listHeight) {\r\n\t\t\t\tvar amountToMove = ((activeThumbnailTop + activeThumbnailHeight) - listHeight) + 30; // 30px padding when there are buttons\r\n\t\t\t\tscrollInner.css('transform', 'translateY(-' + amountToMove + 'px)');\r\n\t\t\t} else {\r\n\t\t\t\tscrollInner.css('transform', 'translateY(0)');\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Close\r\n\r\n\t\tclose: function () {\r\n\r\n\t\t\tvar element = base.gallery.getElement();\r\n\r\n\t\t\tif (!element.length) return;\r\n\r\n\t\t\telement.addClass('js-gibe-gallery-overlay--hide');\r\n\r\n\t\t\tbase.gallery.videoInstances = {};\r\n\r\n\t\t\tsetTimeout(function () {\r\n\r\n\t\t\t\tbase.gallery.lockout.off();\r\n\t\t\t\telement.remove();\r\n\t\t\t\tbase.settings.forceGallery = false;\r\n\r\n\t\t\t}, base.settings.fadeTime);\r\n\r\n\t\t},\r\n\r\n\t\t// Launch\r\n\r\n\t\tlaunch: function (id) {\r\n\r\n\t\t\t// Sort gallery thumbnails so the last sticky thumbnails are Video, 360 and Tech Image\r\n\t\t\tbase.items.push(base.items.splice(base.items.findIndex(function (item) { return item.IsVideo }), 1)[0]);\r\n\t\t\tbase.items.push(base.items.splice(base.items.findIndex(function (item) { return item.Is360 }), 1)[0]);\r\n\t\t\tbase.items.push(base.items.splice(base.items.findIndex(function (item) { return item.TechImage }), 1)[0]);\r\n\r\n\t\t\t// Render gallery\r\n\t\t\tvar html = Mustache.render(base.overlayTemplate, { Items: base.items, ForceSquare: base.settings.forceSquare, ObjectFit: base.settings.objectfit, Swipe: base.settings.swipe, Title: base.title, Subtitle: base.subtitle, MultiSlide: base.settings.multiSlide });\r\n\t\t\tbase.elements.body.append(html);\r\n\r\n\t\t\t// Trigger resize end\r\n\r\n\t\t\tbase.gallery.resize.end();\r\n\r\n\t\t\t// Transition to appropriate index\r\n\r\n\t\t\tvar indexOfSelectedItem = base.gallery.getThumbnailIndex($('.js-gibe-gallery-overlay__thumbnails__item[data-gibe-gallery-item-id=\"' + id + '\"]'));\r\n\t\t\tbase.gallery.transition.go(indexOfSelectedItem, false);\r\n\r\n\t\t\t// Assign events\r\n\r\n\t\t\tbase.gallery.assignEvents();\r\n\r\n\t\t\tbase.gallery.lockout.on();\r\n\r\n\t\t\tbase.gallery.saveVideoReferences();\r\n\r\n\t\t\tbase.initImageZoom();\r\n\r\n\t\t},\r\n\r\n\t\tsaveVideoReferences: function () {\r\n\r\n\t\t\tvar overlayIframe = $('.js-gibe-gallery-overlay__main__video__iframe');\r\n\t\t\tif (overlayIframe.length) {\r\n\t\t\t\toverlayIframe.each(function () {\r\n\t\t\t\t\tvar overlayIframeId = $(this).attr('data-id');\r\n\t\t\t\t\tif (typeof base.gallery.videoInstances['video-' + overlayIframeId] === \"undefined\") {\r\n\t\t\t\t\t\tbase.gallery.videoInstances['video-' + overlayIframeId] = new Vimeo.Player($(this)[0]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tinit360s: function () {\r\n\r\n\t\t\tvar container360s = document.querySelectorAll('.js-gibe-gallery-360');\r\n\r\n\t\t\tfor (var i = 0; i < base.threeSixtyInstances.length; i++) {\r\n\t\t\t\tbase.threeSixtyInstances[i].destroy();\r\n\t\t\t}\r\n\r\n\t\t\tbase.threeSixtyInstances = [];\r\n\r\n\t\t\tfor (var i = 0; i < container360s.length; i++) {\r\n\r\n\t\t\t\t(function (i) {\r\n\r\n\t\t\t\t\tif (container360s[i].offsetParent !== null) {\r\n\t\t\t\t\t\tbase.gallery.setup360(container360s[i]);\r\n\t\t\t\t\t}\r\n\r\n\r\n\r\n\t\t\t\t}).call(this, i);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif (container360s.length && !base.threeSixtyHasInit) {\r\n\t\t\t\tfunction keyboardOverlayCheck(e) {\r\n\t\t\t\t\tvar keyPressed = base.helpers.getKeyPressed(e);\r\n\t\t\t\t\tvar overlayElements = document.querySelectorAll('.js-gibe-gallery-360__overlay');\r\n\t\t\t\t\tif (keyPressed === 37 || keyPressed === 39 || keyPressed === 'ArrowLeft' || keyPressed === 'ArrowRight' || keyPressed === 'Left' || keyPressed === 'Right') {\r\n\t\t\t\t\t\tfor (var i = 0; i < overlayElements.length; i++) {\r\n\t\t\t\t\t\t\toverlayElements[i].classList.add('is-hidden');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tdocument.addEventListener('keydown', keyboardOverlayCheck);\r\n\t\t\t\tbase.threeSixtyHasInit = true;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\r\n\t\tget360Data: function (imageJSON) {\r\n\r\n\t\t\tif (base.threeSixtyCache[imageJSON]) {\r\n\t\t\t\treturn new Promise(function (resolve, reject) {\r\n\t\t\t\t\tresolve(base.threeSixtyCache[imageJSON]);\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\treturn fetch(imageJSON, {\r\n\t\t\t\t\tmode: 'cors',\r\n\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t\t}\r\n\t\t\t\t}).then(function (response) {\r\n\t\t\t\t\treturn response.json();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\r\n\t\t},\r\n\r\n\t\tsetup360: function (currentContainer) {\r\n\r\n\t\t\tvar currentParent = currentContainer.closest('.js-360-container');\r\n\t\t\tvar baseProductUrl = document.querySelector('[data-product-image-base-url]').getAttribute('data-product-image-base-url');\r\n\t\t\tvar base360ProductUrl = document.querySelector('[data-product-360-base-url]').getAttribute('data-product-360-base-url');\r\n\t\t\tvar imageJSON = base360ProductUrl + '/' + currentContainer.getAttribute('data-360-images');\r\n\t\t\tvar stageContainer = currentContainer.closest('.js-gibe-gallery-stage__360');\r\n\r\n\t\t\tstageContainer.classList.add('is-loading');\r\n\r\n\t\t\tbase.gallery.get360Data(imageJSON)\r\n\t\t\t\t.then(function (data) {\r\n\r\n\t\t\t\t\tbase.threeSixtyCache[imageJSON] = data;\r\n\r\n\t\t\t\t\tvar images = data.map(function (image) {\r\n\t\t\t\t\t\treturn baseProductUrl + '/' + image;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar threesixty = new ThreeSixty(currentContainer, {\r\n\t\t\t\t\t\timage: images,\r\n\t\t\t\t\t\twidth: currentParent.clientWidth,\r\n\t\t\t\t\t\theight: currentParent.clientHeight,\r\n\t\t\t\t\t\tspeed: 100,\r\n\t\t\t\t\t\tdragTolerance: 5\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tbase.threeSixtyInstances.push(threesixty);\r\n\r\n\r\n\t\t\t\t\tPromise.all(images.map(Helpers.preloadImage))\r\n\t\t\t\t\t\t.then(function () {\r\n\t\t\t\t\t\t\tstageContainer.classList.remove('is-loading');\r\n\t\t\t\t\t\t}).catch(function () {\r\n\t\t\t\t\t\t\tstageContainer.classList.remove('is-loading');\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar container360Stage = currentContainer.closest('.js-gibe-gallery-stage__360');\r\n\t\t\t\t\tvar overlayElement = container360Stage.querySelector('.js-gibe-gallery-360__overlay');\r\n\r\n\t\t\t\t\tcontainer360Stage.addEventListener('click', function () {\r\n\t\t\t\t\t\tif (overlayElement) {\r\n\t\t\t\t\t\t\toverlayElement.classList.add('is-hidden');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tvar mouseDown = false;\r\n\t\t\t\t\tvar draggingCSSClass = 'is-dragging-360';\r\n\t\t\t\t\tvar hiddenCSSClass = 'is-hidden';\r\n\t\t\t\t\tvar usingTouch = false;\r\n\r\n\t\t\t\t\tcontainer360Stage.addEventListener('mouseenter', function () {\r\n\t\t\t\t\t\tif (overlayElement && !usingTouch) {\r\n\t\t\t\t\t\t\tsetTimeout(function () { overlayElement.classList.add(hiddenCSSClass); }, 1000);\r\n\t\t\t\t\t\t\tdocument.body.classList.add(draggingCSSClass);\r\n\r\n\t\t\t\t\t\t\tfunction handleMouseUp() {\r\n\t\t\t\t\t\t\t\tdocument.body.classList.remove(draggingCSSClass);\r\n\t\t\t\t\t\t\t\tmouseDown = false;\r\n\t\t\t\t\t\t\t\tdocument.removeEventListener('mouseup', handleMouseUp);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tdocument.addEventListener('mouseup', handleMouseUp);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tcontainer360Stage.addEventListener('mousedown', function () {\r\n\t\t\t\t\t\tmouseDown = true;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tcontainer360Stage.addEventListener('mouseleave', function () {\r\n\t\t\t\t\t\tif (overlayElement && !mouseDown) {\r\n\t\t\t\t\t\t\tdocument.body.classList.remove(draggingCSSClass);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tcontainer360Stage.addEventListener('touchstart', function () {\r\n\t\t\t\t\t\tusingTouch = true;\r\n\t\t\t\t\t\tif (overlayElement) {\r\n\t\t\t\t\t\t\toverlayElement.classList.add(hiddenCSSClass);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tcontainer360Stage.addEventListener('touchend', function () {\r\n\t\t\t\t\t\tusingTouch = false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function (error) {\r\n\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t\tpopups.confirm('Error', 'Sorry, there was a problem loading the 360 for this product. Please try again later.', '', true);\r\n\t\t\t\t});\r\n\t\t},\r\n\r\n\t\t// Assign events\r\n\r\n\t\tassignEvents: function () {\r\n\r\n\t\t\t// Get and cache gallery\r\n\r\n\t\t\tvar gallery = base.gallery.getElement();\r\n\r\n\t\t\t// Cache items\r\n\r\n\t\t\tvar prev = gallery.find('.js-gibe-gallery-overlay__main__button--previous'),\r\n\t\t\t\tnext = gallery.find('.js-gibe-gallery-overlay__main__button--next'),\r\n\t\t\t\tprevThumbnail = gallery.find('.js-gibe-gallery-overlay__thumbnails__list__scroller__button--previous'),\r\n\t\t\t\tnextThumbnail = gallery.find('.js-gibe-gallery-overlay__thumbnails__list__scroller__button--next'),\r\n\t\t\t\titemButtons = gallery.find('.js-gibe-gallery-overlay__thumbnails__item-button'),\r\n\t\t\t\tclose = gallery.find('.js-gibe-gallery-overlay__close__button'),\r\n\t\t\t\tdimmer = gallery.find('.js-gibe-gallery-overlay__dimmer');\r\n\r\n\t\t\t// Previous click\r\n\r\n\t\t\tprev.on('click keypress', function (e) {\r\n\r\n\t\t\t\tvar newIndex = base.gallery.transition.getNewIndex('prev');\r\n\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Next click\r\n\r\n\t\t\tnext.on('click keypress', function (e) {\r\n\r\n\t\t\t\tvar newIndex = base.gallery.transition.getNewIndex('next');\r\n\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Previous thumbnail click\r\n\r\n\t\t\tprevThumbnail.on('click keypress', function (e) {\r\n\r\n\t\t\t\tvar newIndex = base.gallery.transition.getNewIndex('prev');\r\n\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Next thumbnail click\r\n\r\n\t\t\tnextThumbnail.on('click keypress', function (e) {\r\n\r\n\t\t\t\tvar newIndex = base.gallery.transition.getNewIndex('next');\r\n\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Items click\r\n\r\n\t\t\titemButtons.on('click', function () {\r\n\r\n\t\t\t\tvar newIndex = base.gallery.getThumbnailIndex($(this).parent());\r\n\r\n\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Dimmer click\r\n\r\n\t\t\tdimmer.on('click', function () { base.gallery.close(); });\r\n\r\n\t\t\t// Close click\r\n\r\n\t\t\tclose.on('click', function () { base.gallery.close(); });\r\n\r\n\t\t\t// Close keydown - ensure focus styles are present and focus on active zoom element\r\n\r\n\t\t\tclose.on('keydown', function (e) {\r\n\r\n\t\t\t\tvar keyPressed = base.helpers.getKeyPressed(e);\r\n\r\n\t\t\t\tif (keyPressed === 13 || keyPressed === 'Enter') {\r\n\r\n\t\t\t\t\tsetTimeout(function () {\r\n\r\n\t\t\t\t\t\tbase.focusStyles.on();\r\n\t\t\t\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item--active .js-gibe-gallery-stage__item__zoom').focus();\r\n\r\n\t\t\t\t\t}, 1000);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Check if touch swipe library is present and add swipe events\r\n\t\t\tif (base.settings.swipe) {\r\n\r\n\t\t\t\tvar gesture = new TinyGesture(gallery.find('.js-gibe-gallery-overlay__main__list')[0], base.tinyGestureOptions);\r\n\r\n\t\t\t\tgesture.on('swipeleft', function (event) {\r\n\t\t\t\t\tif ($('.js-gibe-gallery-overlay__main__item--active').hasClass('js-360-container') || $('html').hasClass('image-zoom-active')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewIndex = base.gallery.transition.getNewIndex('next');\r\n\t\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgesture.on('swiperight', function (event) {\r\n\t\t\t\t\tif ($('.js-gibe-gallery-overlay__main__item--active').hasClass('js-360-container') || $('html').hasClass('image-zoom-active')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewIndex = base.gallery.transition.getNewIndex('prev');\r\n\t\t\t\t\tbase.gallery.transition.go(newIndex, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Add preloading on mouse enter\r\n\r\n\t\t\tgallery.find('.js-gibe-gallery-overlay__thumbnails__item').mouseenter(function () {\r\n\r\n\t\t\t\tvar target = $(this);\r\n\t\t\t\tif (target.data('preloaded')) return;\r\n\r\n\t\t\t\tvar timer = setTimeout(function () {\r\n\r\n\t\t\t\t\tif (base.elements.stage.find('.js-gibe-gallery-overlay__main__item').eq(target.data('index')).find('img').length) {\r\n\t\t\t\t\t\tvar imageToLoad = base.elements.stage.find('.js-gibe-gallery-overlay__main__item').eq(target.data('index')).find('img');\r\n\t\t\t\t\t\timageToLoad.attr('loading', 'eager');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (target.attr('data-gibe-gallery-item') === 'video') {\r\n\t\t\t\t\t\tvar videoID = target.attr('data-gibe-gallery-item-id');\r\n\t\t\t\t\t\tvar videoIframe = base.elements.stage.find('.js-gibe-gallery-overlay__main__video__iframe[data-id=\"' + videoID + '\"]');\r\n\t\t\t\t\t\tvideoIframe.attr('loading', 'eager');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttarget.data('preloaded', true);\r\n\r\n\t\t\t\t}, base.settings.hoverTime);\r\n\r\n\t\t\t\ttarget.data('hoverTimer', timer);\r\n\r\n\t\t\t}).on('mouseleave', function () {\r\n\r\n\t\t\t\tvar target = $(this);\r\n\t\t\t\tif (target.data('preloaded')) return;\r\n\r\n\t\t\t\tclearTimeout(target.data('hoverTimer'));\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Add object fit polyfill\r\n\r\n\t\t\tif (!base.settings.objectfit) {\r\n\r\n\t\t\t\t$('.js-gibe-gallery-overlay__main__image').each(function () {\r\n\r\n\t\t\t\t\tvar currentSource = 'url(' + $(this).attr('src') + ')';\r\n\t\t\t\t\t$(this).closest('.js-gibe-gallery-overlay__main__item').css('background-image', currentSource);\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Trap focus inside the overlay\r\n\r\n\t\t\titemButtons.last().focusout(function () { $('.js-gibe-gallery-overlay__main__item--active').focus(); });\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t// STAGE\r\n\t// The in-page slideshow used on smaller screens\r\n\r\n\tbase.stage = {\r\n\r\n\t\t// Video instances\r\n\r\n\t\tvideoInstances: {},\r\n\r\n\t\t// Resize\r\n\r\n\t\tresize: {\r\n\r\n\t\t\tend: function () {\r\n\r\n\t\t\t\tif (base.gallery.allow()) {\r\n\r\n\t\t\t\t\tbase.elements.stageElement.addClass('js-gibe-gallery-stage--gallery-active');\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tbase.elements.stageElement.removeClass('js-gibe-gallery-stage--gallery-active');\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Render\r\n\r\n\t\trender: function () {\r\n\r\n\t\t\t// Cache stage element that was injected\r\n\r\n\t\t\tbase.elements.stageElement = base.elements.stage.find('.js-gibe-gallery-stage');\r\n\r\n\t\t\tif (!base.settings.objectfit) {\r\n\t\t\t\tbase.elements.stageElement.removeClass('js-gibe-gallery-stage--objectfit\"');\r\n\t\t\t}\r\n\r\n\t\t\t// assign events\r\n\r\n\t\t\tbase.stage.assignEvents();\r\n\r\n\t\t\t// Resize\r\n\r\n\t\t\tbase.stage.resize.end();\r\n\r\n\t\t\t// Add loaded class to show elements that might be toggled based on environment (left and right arrows etc)\r\n\r\n\t\t\tbase.elements.stage.addClass('js-gibe-gallery-stage--loaded');\r\n\r\n\t\t\t// save any video instances\r\n\t\t\tbase.stage.saveVideoReferences();\r\n\r\n\t\t\tbase.initImageZoom();\r\n\r\n\t\t\t// Quicklinks setup\r\n\r\n\t\t\tbase.stage.quicklinks.init();\r\n\r\n\t\t\t// Set initial button display\r\n\r\n\t\t\tbase.stage.setButtonVisibility(base.stage.getCurrentIndex());\r\n\r\n\t\t\t// Thumbnail arrows\r\n\r\n\t\t\tbase.stage.thumbnails.checkArrowDisplay(); \r\n\r\n\t\t},\r\n\r\n\t\tsaveVideoReferences: function () {\r\n\t\t\tvar stageIframe = base.element.find('.js-gibe-gallery-stage__video__iframe');\r\n\t\t\tif (stageIframe.length && typeof Vimeo !== \"undefined\") {\r\n\t\t\t\tstageIframe.each(function () {\r\n\t\t\t\t\tvar stageIframeId = $(this).attr('data-id');\r\n\t\t\t\t\tif (typeof base.stage.videoInstances['video-' + stageIframeId] === \"undefined\") { base.stage.videoInstances['video-' + stageIframeId] = new Vimeo.Player($(this)[0]); }\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Assign events\r\n\r\n\t\tassignEvents: function () {\r\n\r\n\t\t\t// Click on button to open the overlay\r\n\r\n\t\t\tbase.elements.stage.find('.js-gibe-gallery-open-overlay').on('click', function (e) {\r\n\r\n\t\t\t\tif (base.gallery.allow()) {\r\n\r\n\t\t\t\t\tvar currentId = base.stage.getCurrentId();\r\n\t\t\t\t\tbase.gallery.launch(currentId);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Key down to open overlay\r\n\r\n\t\t\tbase.elements.stage.find('.js-gibe-gallery-open-overlay').on('keydown', function (e) {\r\n\r\n\t\t\t\t// If enter key pressed force the gallery for all screen sizes\r\n\r\n\t\t\t\tvar keyPressed = base.helpers.getKeyPressed(e);\r\n\r\n\t\t\t\tif (keyPressed === 13 || keyPressed === 'Enter') {\r\n\r\n\t\t\t\t\tbase.settings.forceGallery = true;\r\n\r\n\t\t\t\t\tif (base.gallery.allow()) {\r\n\r\n\t\t\t\t\t\tvar currentId = base.stage.getCurrentId();\r\n\t\t\t\t\t\tbase.gallery.launch(currentId);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Previous buttons\r\n\r\n\t\t\tvar previousButtons = base.elements.stage.find('.js-gibe-gallery-stage__item__arrow--previous');\r\n\t\t\tpreviousButtons.on('click', function (e) {\r\n\r\n\t\t\t\tvar nextItemIndex = base.stage.transition.getNewIndex('prev');\r\n\t\t\t\tbase.stage.transition.go(nextItemIndex);\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Next button\r\n\r\n\t\t\tvar nextButtons = base.elements.stage.find('.js-gibe-gallery-stage__item__arrow--next');\r\n\t\t\tnextButtons.on('click', function (e) {\r\n\r\n\t\t\t\tvar nextItemIndex = base.stage.transition.getNewIndex('next');\r\n\t\t\t\tbase.stage.transition.go(nextItemIndex);\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Thumbnail previous buttons\r\n\r\n\t\t\tvar previousThumbnailButton = base.element.find('.js-gibe-gallery-previous');\r\n\t\t\tpreviousThumbnailButton.on('click', function (e) {\r\n\t\t\t\tbase.stage.thumbnails.moveThumbnails('previous');\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\r\n\t\t\t// Thumbnail Next button\r\n\r\n\t\t\tvar nextThumbnailButton = base.element.find('.js-gibe-gallery-next');\r\n\t\t\tnextThumbnailButton.on('click', function (e) {\r\n\t\t\t\tbase.stage.thumbnails.moveThumbnails('next');\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\r\n\t\t\tif (base.settings.transition === \"slide\") {\r\n\r\n\t\t\t\t// When the user free scrolls the gallery, update the active item\r\n\r\n\t\t\t\tconst galleryList = base.elements.stage.find('.js-gibe-gallery-stage__list')[0];\r\n\t\t\t\tconst galleryItems = galleryList.querySelectorAll('.js-gibe-gallery-stage__item');\r\n\r\n\t\t\t\tlet mostVisibleItem = null;\r\n\r\n\t\t\t\tconst observer = new IntersectionObserver((entries) => {\r\n\t\t\t\t\tlet maxVisibleArea = 0;\r\n\t\t\t\t\tentries.forEach(entry => {\r\n\t\t\t\t\t\tif (entry.isIntersecting) {\r\n\t\t\t\t\t\t\tconst visibleArea = entry.intersectionRect.width * entry.intersectionRect.height;\r\n\t\t\t\t\t\t\tif (visibleArea > maxVisibleArea) {\r\n\t\t\t\t\t\t\t\tmaxVisibleArea = visibleArea;\r\n\t\t\t\t\t\t\t\tmostVisibleItem = entry.target;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}, {\r\n\t\t\t\t\troot: galleryList,\r\n\t\t\t\t\tthreshold: 0.5\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgalleryItems.forEach(item => observer.observe(item));\r\n\r\n\t\t\t\tfunction getMostVisibleItem() {\r\n\t\t\t\t\treturn mostVisibleItem;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfunction updateActiveItem() {\r\n\t\t\t\t\tif (base.userIsUsingButtons) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst mostVisibleItem = getMostVisibleItem();\r\n\t\t\t\t\tif (mostVisibleItem) {\r\n\t\t\t\t\t\tconst index = Array.from(galleryItems).indexOf(mostVisibleItem);\r\n\t\t\t\t\t\tbase.stage.transition.go(index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Hide zoom buttons when scrolling\r\n\r\n\t\t\t\tconst buttonsOverImage = document.querySelectorAll('.js-image-zoom-button, .js-gibe-gallery-open-overlay');\r\n\t\t\t\tlet isScrolling;\r\n\r\n\t\t\t\tgalleryList.addEventListener('scroll', () => {\r\n\r\n\t\t\t\t\tbuttonsOverImage.forEach(button => {\r\n\t\t\t\t\t\tbutton.setAttribute('aria-hidden', 'true');\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tclearTimeout(isScrolling);\r\n\r\n\t\t\t\t\t// Set a timeout to run after scrolling ends\r\n\t\t\t\t\tisScrolling = setTimeout(() => {\r\n\t\t\t\t\t\tbuttonsOverImage.forEach(button => {\r\n\t\t\t\t\t\t\tbutton.setAttribute('aria-hidden', 'false');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tupdateActiveItem();\r\n\t\t\t\t\t}, 100);\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Check thumbnail display when scrolling\r\n\t\t\t\tconst debouncedCheckThumbnailArrowDisplay = Helpers.debounce(()=> base.stage.thumbnails.checkArrowDisplay(), 100);\r\n\t\t\t\tconst thumbnailGalleryList = base.element.find('.c-gallery__list')[0];\r\n\t\t\t\tthumbnailGalleryList.addEventListener('scroll', debouncedCheckThumbnailArrowDisplay);\r\n\t\t\r\n\t\t\t}\r\n\r\n\t\t\t// Reveal buttons over the image on devices that support touch\r\n\r\n\t\t\tif (base.settings.touch) {\r\n\r\n\t\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item').on('touchstart', function (e) {\r\n\t\t\t\t\tbase.elements.stageElement.addClass('js-gibe-gallery-controls-active');\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Clicking outside of the gallery hides the controls\r\n\r\n\t\t\t\tbase.elements.doc.on('touchstart', function () {\r\n\t\t\t\t\tbase.elements.stageElement.removeClass('js-gibe-gallery-controls-active');\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif (base.settings.swipe && base.settings.transition !== \"slide\") {\r\n\r\n\t\t\t\tvar gesture = new TinyGesture(base.elements.stage.find('.js-gibe-gallery-stage__list')[0], base.tinyGestureOptions);\r\n\r\n\t\t\t\tgesture.on('swipeleft', function (event) {\r\n\t\t\t\t\tif (base.elements.stage.find('.js-gibe-gallery-stage__item--active').find('.js-gibe-gallery-stage__360').length || $('html').hasClass('image-zoom-active')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewIndex = base.stage.transition.getNewIndex('next');\r\n\t\t\t\t\tbase.stage.transition.go(newIndex);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tgesture.on('swiperight', function (event) {\r\n\t\t\t\t\tif (base.elements.stage.find('.js-gibe-gallery-stage__item--active').find('.js-gibe-gallery-stage__360').length || $('html').hasClass('image-zoom-active')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewIndex = base.stage.transition.getNewIndex('prev');\r\n\t\t\t\t\tbase.stage.transition.go(newIndex);\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Add preloading on mouse enter\r\n\r\n\t\t\tbase.elements.links.mouseenter(function () {\r\n\r\n\t\t\t\tvar target = $(this);\r\n\t\t\t\tif (target.data('preloaded')) return;\r\n\r\n\t\t\t\tvar timer = setTimeout(function () {\r\n\r\n\t\t\t\t\tif (base.elements.stage.find('.js-gibe-gallery-stage__item').eq(target.data('index')).find('img').length) {\r\n\t\t\t\t\t\tvar imageToLoad = base.elements.stage.find('.js-gibe-gallery-stage__item').eq(target.data('index')).find('img');\r\n\t\t\t\t\t\timageToLoad.attr('loading', 'eager');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (target.attr('data-gibe-gallery-item') === 'video') {\r\n\t\t\t\t\t\tvar videoID = target.attr('data-gibe-gallery-item-id');\r\n\t\t\t\t\t\tvar videoIframe = base.elements.stage.find('.js-gibe-gallery-stage__video__iframe[data-id=\"' + videoID + '\"]');\r\n\t\t\t\t\t\tvideoIframe.attr('loading', 'eager');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttarget.data('preloaded', true);\r\n\r\n\t\t\t\t}, base.settings.hoverTime);\r\n\r\n\t\t\t\ttarget.data('hoverTimer', timer);\r\n\r\n\t\t\t}).on('mouseleave', function () {\r\n\r\n\t\t\t\tvar target = $(this);\r\n\t\t\t\tif (target.data('preloaded')) return;\r\n\r\n\t\t\t\tclearTimeout(target.data('hoverTimer'));\r\n\r\n\t\t\t});\r\n\r\n\t\t\t// Add object fit polyfill\r\n\r\n\t\t\tif (!base.settings.objectfit) {\r\n\r\n\t\t\t\t$('.js-gibe-gallery-stage__image').each(function () {\r\n\r\n\t\t\t\t\tvar currentSource = 'url(' + $(this).attr('src') + ')';\r\n\t\t\t\t\t$(this).closest('.js-gibe-gallery-stage__item').css('background-image', currentSource);\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tsetButtonVisibility: function (currentIndex) {\r\n\r\n\t\t\tif (base.settings.transition !== \"slide\") {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst items = base.elements.stage.find('.js-gibe-gallery-stage__item');\r\n\r\n\t\t\tif (currentIndex === 0) {\r\n\t\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item__arrow--previous').attr('aria-hidden', 'true');\r\n\t\t\t} else {\r\n\t\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item__arrow--previous').attr('aria-hidden', 'false');\r\n\t\t\t}\r\n\r\n\t\t\tif (currentIndex === items.length - 1) {\r\n\t\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item__arrow--next').attr('aria-hidden', 'true');\r\n\t\t\t} else {\r\n\t\t\t\tbase.elements.stage.find('.js-gibe-gallery-stage__item__arrow--next').attr('aria-hidden', 'false');\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Get current index\r\n\r\n\t\tgetCurrentIndex: function () {\r\n\r\n\t\t\treturn base.elements.stage.find('.js-gibe-gallery-stage__item--active').index();\r\n\r\n\t\t},\r\n\r\n\t\t// Get current id\r\n\r\n\t\tgetCurrentId: function () {\r\n\r\n\t\t\treturn base.elements.links.filter(\".c-gallery__link--active\").attr('data-gibe-gallery-item-id') || $(\".c-gallery__link--active\").attr('data-gibe-gallery-item-id');\r\n\r\n\t\t},\r\n\r\n\t\t// Quicklinks\r\n\r\n\t\tquicklinks: {\r\n\r\n\t\t\tinit: function () {\r\n\t\t\t\tif (!base.stage.quicklinks.areAvailable()) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tbase.stage.quicklinks.checkIfCustomerPhotosShouldDisplay();\r\n\t\t\t\tif (!base.element.find('.js-gibe-gallery-quicklinks-item:visible').length) {\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-quicklinks').hide();\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\r\n\t\t\tareAvailable: function () {\r\n\t\t\t\treturn base.element.find('.js-gibe-gallery-quicklinks').length;\r\n\t\t\t},\r\n\r\n\t\t\tcheckIfCustomerPhotosShouldDisplay: function () {\r\n\t\t\t\tif (!$('#product-customer-images').length) {\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-quicklink-customer-photos').hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Thumbnails\r\n\r\n\t\tthumbnails: {\r\n\r\n\t\t\thasThumbnailScroller: function () {\r\n\t\t\t\treturn base.element.find('.js-gibe-gallery-previous') || base.element.find('.js-gibe-gallery-next') || base.settings.transition === \"slide\";\r\n\t\t\t},\r\n\r\n\t\t\tscrollToThumbnail: function (thumbnail) {\r\n\r\n\t\t\t\tconst container = thumbnail.closest('.c-gallery__list');\r\n\t\t\t\tconst containerRect = container.getBoundingClientRect();\r\n\t\t\t\tconst thumbnailRect = thumbnail.getBoundingClientRect();\r\n\r\n\t\t\t\tif (thumbnailRect.left === 0 && containerRect.left === 0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst containerCenter = containerRect.left + containerRect.width / 2;\r\n\t\t\t\tconst thumbnailCenter = thumbnailRect.left + thumbnailRect.width / 2;\r\n\t\t\t\tconst offset = thumbnailCenter - containerCenter;\r\n\r\n\t\t\t\tcontainer.scrollLeft += offset;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tcheckArrowDisplay: function () {\r\n\r\n\t\t\t\tconst itemsContainer = base.element.find('.c-gallery__list')[0];\r\n\t\t\t\tconst lastItem = base.element.find('.c-gallery__item').last()[0];\r\n\t\t\t\tconst itemsContainerRect = itemsContainer.getBoundingClientRect();\r\n\t\t\t\tconst lastItemRect = lastItem.getBoundingClientRect();\r\n\t\t\t\tconst proxitmityThreshold = 11;\r\n\r\n\t\t\t\tif ((lastItemRect.right + proxitmityThreshold) < itemsContainerRect.right) {\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-previous').attr('aria-hidden', 'true');\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-next').attr('aria-hidden', 'true');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ((itemsContainer.scrollWidth - itemsContainer.scrollLeft - itemsContainer.clientWidth) < proxitmityThreshold) {\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-previous').attr('aria-hidden', 'false');\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-next').attr('aria-hidden', 'true');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (itemsContainer.scrollLeft <= proxitmityThreshold) {\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-previous').attr('aria-hidden', 'true');\r\n\t\t\t\t\tbase.element.find('.js-gibe-gallery-next').attr('aria-hidden', 'false');\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbase.element.find('.js-gibe-gallery-previous').attr('aria-hidden', 'false');\r\n\t\t\t\tbase.element.find('.js-gibe-gallery-next').attr('aria-hidden', 'false');\r\n\r\n\t\t\t},\r\n\r\n\t\t\tmoveThumbnails: function (direction) {\r\n\r\n\t\t\t\tconst itemsContainer = base.element.find('.c-gallery__list')[0];\r\n\t\t\t\tconst lastItem = base.element.find('.c-gallery__item').last()[0];\r\n\t\t\t\tconst itemsContainerRect = itemsContainer.getBoundingClientRect();\r\n\t\t\t\tconst lastItemRect = lastItem.getBoundingClientRect();\r\n\t\t\t\tconst outerContainerWidth = base.element.find('.c-gallery__items-container').width();\r\n\r\n\t\t\t\t// if direction next, move right\r\n\t\t\t\tif (direction === \"next\") {\r\n\t\t\t\t\titemsContainer.scrollLeft += outerContainerWidth;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if direction previous, move left\r\n\t\t\t\tif (direction === \"previous\") {\r\n\t\t\t\t\titemsContainer.scrollLeft -= outerContainerWidth;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Transition\r\n\r\n\t\ttransition: {\r\n\r\n\t\t\t// Whether or not to allow a transition to occur\r\n\r\n\t\t\tallow: true,\r\n\r\n\t\t\t// Get new index\r\n\r\n\t\t\tgetNewIndex: function (type) {\r\n\r\n\t\t\t\tvar itemCount = base.elements.stage.find('.js-gibe-gallery-stage__item').length - 1,\r\n\t\t\t\t\tcurrentIndex = base.elements.stage.find('.js-gibe-gallery-stage__item--active').index(),\r\n\t\t\t\t\tnewIndex = 0;\r\n\r\n\t\t\t\tswitch (type.toLowerCase()) {\r\n\t\t\t\t\tcase 'prev':\r\n\t\t\t\t\t\tnewIndex = !currentIndex ? itemCount : currentIndex - 1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'next':\r\n\t\t\t\t\t\tnewIndex = currentIndex === itemCount ? 0 : currentIndex + 1;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn newIndex;\r\n\r\n\t\t\t},\r\n\r\n\t\t\t// Instigate transition\r\n\r\n\t\t\tgo: function (index) {\r\n\r\n\t\t\t\tif (!base.stage.transition.allow || base.stage.getCurrentIndex() === index) return;\r\n\r\n\t\t\t\t// Cache elements, create active class\r\n\r\n\t\t\t\tvar items = base.elements.stage.find('.js-gibe-gallery-stage__item'),\r\n\t\t\t\t\titemToGoTo = items.eq(index),\r\n\t\t\t\t\titemActiveclass = 'js-gibe-gallery-stage__item--active js-gibe-gallery-stage__item--fade';\r\n\r\n\t\t\t\t// If no object fit, polyfill object fit by appending image src to the container\r\n\r\n\t\t\t\tif (!base.settings.objectfit) {\r\n\r\n\t\t\t\t\tvar currentSource = 'url(' + itemToGoTo.find('.js-gibe-gallery-stage__image').attr('src') + ')';\r\n\t\t\t\t\titems.eq(index).css('background-image', currentSource);\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add active class\r\n\r\n\t\t\t\titemToGoTo.addClass(itemActiveclass).attr('tabindex', '1');\r\n\t\t\t\titemToGoTo.attr('data-test', 'active-gallery-item');\r\n\r\n\t\t\t\t// Pause all existing vimeo videos\r\n\r\n\t\t\t\t$.each(base.stage.videoInstances, function (key, value) { value.pause(); });\r\n\r\n\t\t\t\t// Remove previous active class + fade class after delay\r\n\r\n\t\t\t\tbase.stage.transition.allow = false;\r\n\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\titems.not(itemToGoTo).removeClass('js-gibe-gallery-stage__item--active').removeAttr('tabindex').removeAttr('data-test');\r\n\t\t\t\t\titems.removeClass('js-gibe-gallery-stage__item--fade');\r\n\t\t\t\t\tbase.stage.transition.allow = true;\r\n\r\n\t\t\t\t}, base.settings.fadeTime);\r\n\r\n\t\t\t\t// Scroll to active gallery item\r\n\r\n\t\t\t\tvar activeGalleryItem = itemToGoTo[0];\r\n\t\t\t\tvar activeGalleryItemPosition = activeGalleryItem.getBoundingClientRect();\r\n\t\t\t\tvar galleryList = base.elements.stage.find('.js-gibe-gallery-stage__list')[0];\r\n\t\t\t\tvar galleryListPosition = galleryList.getBoundingClientRect();\r\n\t\t\t\tgalleryList.scrollLeft = activeGalleryItemPosition.left - galleryListPosition.left + galleryList.scrollLeft;\r\n\r\n\t\t\t\tbase.stage.watchScrollLeftUntilStable(galleryList, () => {\r\n\t\t\t\t\tif ($('.js-gibe-gallery-stage__item--active').hasClass('js-360-container') || $('html').hasClass('image-zoom-active')) {\r\n\t\t\t\t\t\t$('.js-gibe-gallery-stage__list').addClass('stop-scrolling');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$('.js-gibe-gallery-stage__list').removeClass('stop-scrolling');\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 250, 3000);\r\n\r\n\t\t\t\t// Check button display\r\n\r\n\t\t\t\tbase.stage.setButtonVisibility(index);\r\n\r\n\t\t\t\t// Remove / add class to appropriate inline thumbnail link\r\n\r\n\t\t\t\tbase.elements.links.removeClass(base.settings.linksActiveClass);\r\n\r\n\t\t\t\tbase.elements.links.each(function () {\r\n\t\t\t\t\tif ($(this).data('index') === index) {\r\n\t\t\t\t\t\t$(this).addClass(base.settings.linksActiveClass);\r\n\t\t\t\t\t\tif (base.stage.thumbnails.hasThumbnailScroller()) {\r\n\t\t\t\t\t\t\tbase.stage.thumbnails.scrollToThumbnail($(this)[0]);\r\n\t\t\t\t\t\t\t//setTimeout(() => {\r\n\t\t\t\t\t\t\t//\tbase.stage.thumbnails.checkArrowDisplay();\r\n\t\t\t\t\t\t\t//}, 500);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// 360\r\n\t\t\t\tbase.gallery.init360s();\r\n\r\n\t\t\t\t// image zoom\r\n\t\t\t\tbase.initImageZoom();\r\n\r\n\t\t\t\t// Callback\r\n\r\n\t\t\t\tbase.settings.onStageChange.call(base, index);\r\n\r\n\t\t\t\t// reset any image zooms\r\n\r\n\t\t\t\tvar resetImageZoomEvent = Helpers.createCustomEventForDispatch('resetImageZoom');\r\n\t\t\t\tdocument.dispatchEvent(resetImageZoomEvent);\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t// Launch\r\n\r\n\t\tlaunch: function (index) {\r\n\r\n\t\t\t// Get current page scroll\r\n\t\t\t//var currentPageScroll = window.scrollY;\r\n\r\n\t\t\t// Go to specified index\r\n\r\n\t\t\tbase.stage.transition.go(index);\r\n\r\n\t\t\t// Scroll to top of stage if appropriate\r\n\t\t\tif (!base.stage.thumbnails.hasThumbnailScroller()) {\r\n\t\t\t\tvar stageTop = base.elements.stage.offset().top;\r\n\t\t\t\tif (base.elements.win.scrollTop() > stageTop) base.elements.html.add(base.elements.body).animate({ scrollTop: stageTop }, 250);\r\n\t\t\t}\r\n\t\t\t//else {\r\n\t\t\t//\twindow.scrollY = currentPageScroll;\r\n\t\t\t//}\r\n\r\n\t\t\t//console.log('scroll', currentPageScroll);\r\n\r\n\t\t},\r\n\r\n\t\twatchScrollLeftUntilStable: function(galleryList, callback, interval, timeout) {\r\n\t\t\tlet lastScrollLeft = galleryList.scrollLeft;\r\n\t\t\tlet stableCount = 0;\r\n\t\t\tconst maxStableCount = 3; // Number of consecutive checks with no change to consider stable\r\n\r\n\t\t\tconst checkScrollLeft = () => {\r\n\t\t\t\tconst currentScrollLeft = galleryList.scrollLeft;\r\n\t\t\t\tif (currentScrollLeft === lastScrollLeft) {\r\n\t\t\t\t\tstableCount++;\r\n\t\t\t\t\tif (stableCount >= maxStableCount) {\r\n\t\t\t\t\t\tclearInterval(scrollCheckInterval);\r\n\t\t\t\t\t\tif (callback) callback();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstableCount = 0;\r\n\t\t\t\t\tlastScrollLeft = currentScrollLeft;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst scrollCheckInterval = setInterval(checkScrollLeft, interval);\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tclearInterval(scrollCheckInterval);\r\n\t\t\t}, timeout);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tbase.stage.render();\r\n\r\n\t// Return the jQuery object\r\n\r\n\treturn base;\r\n\r\n};\r\n\r\n// https://github.com/mladenilic/threesixty.js\r\n!function (e, t) { \"object\" == typeof exports && \"object\" == typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define([], t) : \"object\" == typeof exports ? exports.ThreeSixty = t() : e.ThreeSixty = t() }(window, (function () { return function (e) { var t = {}; function n(i) { if (t[i]) return t[i].exports; var o = t[i] = { i: i, l: !1, exports: {} }; return e[i].call(o.exports, o, o.exports, n), o.l = !0, o.exports } return n.m = e, n.c = t, n.d = function (e, t, i) { n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: i }) }, n.r = function (e) { \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: \"Module\" }), Object.defineProperty(e, \"__esModule\", { value: !0 }) }, n.t = function (e, t) { if (1 & t && (e = n(e)), 8 & t) return e; if (4 & t && \"object\" == typeof e && e && e.__esModule) return e; var i = Object.create(null); if (n.r(i), Object.defineProperty(i, \"default\", { enumerable: !0, value: e }), 2 & t && \"string\" != typeof e) for (var o in e) n.d(i, o, function (t) { return e[t] }.bind(null, o)); return i }, n.n = function (e) { var t = e && e.__esModule ? function () { return e.default } : function () { return e }; return n.d(t, \"a\", t), t }, n.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, n.p = \"\", n(n.s = 2) }([function (e, t) { var n; n = function () { return this }(); try { n = n || new Function(\"return this\")() } catch (e) { \"object\" == typeof window && (n = window) } e.exports = n }, function (e, t, n) { \"use strict\"; (function (e) { function n(e, t) { for (var n = 0; n < t.length; n++) { var i = t[n]; i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, i.key, i) } } function i(e, t) { var n = t.get(e); if (!n) throw new TypeError(\"attempted to get private field on non-instance\"); return n.get ? n.get.call(e) : n.value } function o(e, t, n) { var i = t.get(e); if (!i) throw new TypeError(\"attempted to set private field on non-instance\"); if (i.set) i.set.call(e, n); else { if (!i.writable) throw new TypeError(\"attempted to set read only private field\"); i.value = n } return n } var s = function () { function t(e, n) { var s = this; !function (e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") }(this, t), r.set(this, { writable: !0, value: null }), a.set(this, { writable: !0, value: null }), u.set(this, { writable: !0, value: null }), o(this, a, n), o(this, u, { container: { mousedown: function (e) { return o(s, r, e.pageX) }, touchstart: function (e) { return o(s, r, e.touches[0].clientX) }, touchend: function () { return o(s, r, null) } }, prev: { mousedown: function (t) { t.preventDefault(), e.play(!0) }, mouseup: function (t) { t.preventDefault(), e.stop() }, touchstart: function (t) { t.preventDefault(), e.prev() } }, next: { mousedown: function (t) { t.preventDefault(), e.play() }, mouseup: function (t) { t.preventDefault(), e.stop() }, touchstart: function (t) { t.preventDefault(), e.next() } }, global: { mouseup: function () { return o(s, r, null) }, mousemove: function (t) { i(s, r) && Math.abs(i(s, r) - t.pageX) > i(s, a).dragTolerance && (e.stop(), i(s, r) > t.pageX ? e.prev() : e.next(), o(s, r, t.pageX)) }, touchmove: function (t) { i(s, r) && Math.abs(i(s, r) - t.touches[0].clientX) > i(s, a).swipeTolerance && (e.stop(), i(s, r) > t.touches[0].clientX ? e.prev() : e.next(), o(s, r, t.touches[0].clientX)) }, keydown: function (t) { [37, 39].includes(t.keyCode) && e.play(37 === t.keyCode) }, keyup: function (t) { [37, 39].includes(t.keyCode) && e.stop() } } }), this._initEvents() } var s, h, c; return s = t, (h = [{ key: \"destroy\", value: function () { i(this, a).swipeTarget.removeEventListener(\"mousedown\", i(this, u).container.mousedown), i(this, a).swipeTarget.removeEventListener(\"touchstart\", i(this, u).container.touchstart), i(this, a).swipeTarget.removeEventListener(\"touchend\", i(this, u).container.touchend), e.removeEventListener(\"mouseup\", i(this, u).global.mouseup), e.removeEventListener(\"mousemove\", i(this, u).global.mousemove), e.removeEventListener(\"touchmove\", i(this, u).global.touchmove), e.removeEventListener(\"keydown\", i(this, u).global.keydown), e.removeEventListener(\"keyup\", i(this, u).global.keyup), i(this, a).prev && (i(this, a).prev.removeEventListener(\"mousedown\", i(this, u).prev.mousedown), i(this, a).prev.removeEventListener(\"mouseup\", i(this, u).prev.mouseup), i(this, a).prev.removeEventListener(\"touchstart\", i(this, u).prev.touchstart)), i(this, a).next && (i(this, a).next.removeEventListener(\"mousedown\", i(this, u).next.mousedown), i(this, a).next.removeEventListener(\"mouseup\", i(this, u).next.mouseup), i(this, a).next.removeEventListener(\"touchstart\", i(this, u).next.touchstart)) } }, { key: \"_initEvents\", value: function () { i(this, a).draggable && (i(this, a).swipeTarget.addEventListener(\"mousedown\", i(this, u).container.mousedown), e.addEventListener(\"mouseup\", i(this, u).global.mouseup), e.addEventListener(\"mousemove\", i(this, u).global.mousemove)), i(this, a).swipeable && (i(this, a).swipeTarget.addEventListener(\"touchstart\", i(this, u).container.touchstart), i(this, a).swipeTarget.addEventListener(\"touchend\", i(this, u).container.touchend), e.addEventListener(\"touchmove\", i(this, u).global.touchmove)), i(this, a).keys && (e.addEventListener(\"keydown\", i(this, u).global.keydown), e.addEventListener(\"keyup\", i(this, u).global.keyup)), i(this, a).prev && (i(this, a).prev.addEventListener(\"mousedown\", i(this, u).prev.mousedown), i(this, a).prev.addEventListener(\"mouseup\", i(this, u).prev.mouseup), i(this, a).prev.addEventListener(\"touchstart\", i(this, u).prev.touchstart)), i(this, a).next && (i(this, a).next.addEventListener(\"mousedown\", i(this, u).next.mousedown), i(this, a).next.addEventListener(\"mouseup\", i(this, u).next.mouseup), i(this, a).next.addEventListener(\"touchstart\", i(this, u).next.touchstart)) } }]) && n(s.prototype, h), c && n(s, c), t }(), r = new WeakMap, a = new WeakMap, u = new WeakMap; t.a = s }).call(this, n(0)) }, function (e, t, n) { \"use strict\"; n.r(t), function (e) { var i = n(1); function o(e, t) { for (var n = 0; n < t.length; n++) { var i = t[n]; i.enumerable = i.enumerable || !1, i.configurable = !0, \"value\" in i && (i.writable = !0), Object.defineProperty(e, i.key, i) } } function s(e, t) { var n = t.get(e); if (!n) throw new TypeError(\"attempted to get private field on non-instance\"); return n.get ? n.get.call(e) : n.value } function r(e, t, n) { var i = t.get(e); if (!i) throw new TypeError(\"attempted to set private field on non-instance\"); if (i.set) i.set.call(e, n); else { if (!i.writable) throw new TypeError(\"attempted to set read only private field\"); i.value = n } return n } var a = function () { function t(e, n) { !function (e, t) { if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\") }(this, t), u.set(this, { writable: !0, value: null }), h.set(this, { writable: !0, value: 0 }), c.set(this, { writable: !0, value: null }), l.set(this, { writable: !0, value: !1 }), p.set(this, { writable: !0, value: null }), v.set(this, { writable: !0, value: !1 }), this.container = e, r(this, u, Object.assign({ width: 300, height: 300, aspectRatio: 0, count: 0, perRow: 0, speed: 100, dragTolerance: 10, swipeTolerance: 10, draggable: !0, swipeable: !0, keys: !0, inverted: !1 }, n)), s(this, u).swipeTarget = s(this, u).swipeTarget || this.container, r(this, v, !Array.isArray(s(this, u).image)), this.sprite || (s(this, u).count = s(this, u).image.length), Object.freeze(s(this, u)), r(this, p, new i.a(this, s(this, u))), this._windowResizeListener = this._windowResizeListener.bind(this), this._initContainer() } var n, a, d; return n = t, (a = [{ key: \"next\", value: function () { this.goto(s(this, u).inverted ? s(this, h) - 1 : s(this, h) + 1) } }, { key: \"prev\", value: function () { this.goto(s(this, u).inverted ? s(this, h) + 1 : s(this, h) - 1) } }, { key: \"goto\", value: function (e) { r(this, h, (s(this, u).count + e) % s(this, u).count), this._update() } }, { key: \"play\", value: function (e) { this.looping || (this._loop(e), r(this, l, !0)) } }, { key: \"stop\", value: function () { this.looping && (e.clearTimeout(s(this, c)), r(this, l, !1)) } }, { key: \"toggle\", value: function (e) { this.looping ? this.stop() : this.play(e) } }, { key: \"destroy\", value: function () { this.stop(), s(this, p).destroy(), this.container.style.width = \"\", this.container.style.height = \"\", this.container.style.backgroundImage = \"\", this.container.style.backgroundPositionX = \"\", this.container.style.backgroundPositionY = \"\", this.container.style.backgroundSize = \"\", this.isResponsive && window.removeEventListener(\"resize\", this._windowResizeListener) } }, { key: \"_loop\", value: function (t) { var n = this; t ? this.prev() : this.next(), r(this, c, e.setTimeout((function () { n._loop(t) }), s(this, u).speed)) } }, { key: \"_update\", value: function () { this.sprite ? (this.container.style.backgroundPositionX = -s(this, h) % s(this, u).perRow * this.containerWidth + \"px\", this.container.style.backgroundPositionY = -Math.floor(s(this, h) / s(this, u).perRow) * this.containerHeight + \"px\") : this.container.style.backgroundImage = 'url(\"'.concat(s(this, u).image[s(this, h)], '\")') } }, { key: \"_windowResizeListener\", value: function () { this.container.style.height = this.containerHeight + \"px\", this._update() } }, { key: \"_initContainer\", value: function () { if (this.isResponsive || (this.container.style.width = this.containerWidth + \"px\"), this.container.style.height = this.containerHeight + \"px\", this.sprite) { this.container.style.backgroundImage = 'url(\"'.concat(s(this, u).image, '\")'); var e = s(this, u).perRow, t = Math.ceil(s(this, u).count / s(this, u).perRow); this.container.style.backgroundSize = 100 * e + \"% \" + 100 * t + \"%\" } this.isResponsive && window.addEventListener(\"resize\", this._windowResizeListener), this._update() } }, { key: \"isResponsive\", get: function () { return s(this, u).aspectRatio > 0 } }, { key: \"containerWidth\", get: function () { return this.isResponsive ? this.container.clientWidth : s(this, u).width } }, { key: \"containerHeight\", get: function () { return this.isResponsive ? this.container.clientWidth * s(this, u).aspectRatio : s(this, u).height } }, { key: \"index\", get: function () { return s(this, h) } }, { key: \"looping\", get: function () { return s(this, l) } }, { key: \"sprite\", get: function () { return s(this, v) } }]) && o(n.prototype, a), d && o(n, d), t }(), u = new WeakMap, h = new WeakMap, c = new WeakMap, l = new WeakMap, p = new WeakMap, v = new WeakMap; t.default = a }.call(this, n(0)) }]).default }));\r\n\r\n"],"names":["_instanceof","left","right","Symbol","hasInstance","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","TinyGesture","element","options","this","assign","defaults","opts","touchStartX","touchStartY","touchEndX","touchEndY","velocityX","velocityY","longPressTimer","doubleTapWaiting","handlers","panstart","panmove","panend","swipeleft","swiperight","swipeup","swipedown","tap","doubletap","longpress","_onTouchStart","onTouchStart","bind","_onTouchMove","onTouchMove","_onTouchEnd","onTouchEnd","addEventListener","passiveIfSupported","mouseSupport","window","document","value","removeEventListener","clearTimeout","doubleTapTimer","type","fn","_this","push","cancel","off","idx","indexOf","splice","event","_this2","thresholdX","threshold","thresholdY","disregardVelocityThresholdX","disregardVelocityThreshold","disregardVelocityThresholdY","changedTouches","screenX","screenY","touchMoveX","touchMoveY","setTimeout","fire","longPressTime","absTouchMoveX","absTouchMoveY","Math","abs","swipingHorizontal","swipingVertical","swipingDirection","max","pressThreshold","x","absX","y","absY","_this3","swipedHorizontal","diagonalSwipes","diagonalLimit","swipedVertical","velocityThreshold","doubleTapTime","self","floor","innerWidth","body","clientWidth","innerHeight","clientHeight","tan","PI","get","passive","err","jQuery","gibeGallery","overrides","base","$","data","settings","launch","links","linksActiveClass","quicklinks","stage","templates","overlay","horizontal","width","height","forceSquare","transition","fadeTime","hoverTime","maxWidth","onStageChange","index","undefined","extend","swipe","objectfit","documentElement","style","touch","DocumentTouch","scrollLock","bodyScrollLock","forceGallery","addClass","helpers","getKeyPressed","e","keyIdentifier","keyCode","overlayTemplate","html","elements","find","doc","win","title","attr","subtitle","items","threeSixtyInstances","threeSixtyHasInit","threeSixtyCache","userIsUsingButtons","tinyGestureOptions","each","img","media","id","isImage","isVideo","is360","techImage","toLowerCase","IsImage","IsVideo","Is360","StickyThumbnail","Thumbnail","Id","Media","Title","AspectRatio","TechImage","multiSlide","eq","on","signalUserIsUsingButtons","thumbnails","hasThumbnailScroller","focus","parent","keyPressed","gallery","close","focusStyles","removeClass","matchMedia","matches","timer","resize","start","end","init360s","checkArrowDisplay","initImageZoom","imagesToZoom","querySelectorAll","ImageZoom","videoInstances","allow","getElement","lockout","disableBodyScroll","reserveScrollBarGap","clearAllBodyScrollLocks","wide","calculate","availableHeight","inner","content","parseInt","css","galleryHeight","outerHeight","thumbnailsHeight","secondaryWidth","thumbnailItems","first","outerWidth","thumbnailScrollerHeight","stickyThumbnailListHeight","galleryMarginTop","replace","overrideHeight","mainList","mainInner","overrideWidth","secondary","contentWidth","min","main","thumbnailsScroller","thumbnailsScrollerHeight","primary","buttons","add","removeAttr","getCurrentIndex","getThumbnailIndex","thumbnailElement","closest","getNewIndex","itemCount","currentIndex","newIndex","go","fade","mainItems","video","resetImageZoomEvent","mainActiveClass","currentSource","pause","filter","Helpers","createCustomEventForDispatch","dispatchEvent","setThumbnailScrollerPosition","activeThumbnailTop","listHeight","scrollInner","activeThumbnail","hasClass","position","top","activeThumbnailHeight","remove","findIndex","item","Mustache","render","Items","ForceSquare","ObjectFit","Swipe","Subtitle","MultiSlide","indexOfSelectedItem","append","assignEvents","saveVideoReferences","overlayIframe","overlayIframeId","Vimeo","Player","container360s","destroy","offsetParent","setup360","call","overlayElements","classList","get360Data","imageJSON","Promise","resolve","reject","fetch","mode","headers","Content-Type","then","response","json","currentContainer","currentParent","baseProductUrl","querySelector","getAttribute","stageContainer","images","map","image","threesixty","ThreeSixty","speed","dragTolerance","container360Stage","all","preloadImage","catch","overlayElement","mouseDown","draggingCSSClass","hiddenCSSClass","usingTouch","handleMouseUp","error","console","log","popups","confirm","prev","next","prevThumbnail","nextThumbnail","itemButtons","dimmer","stopPropagation","gesture","mouseenter","videoID","last","focusout","stageElement","init","setButtonVisibility","stageIframe","stageIframeId","currentId","getCurrentId","nextItemIndex","moveThumbnails","galleryList","galleryItems","let","mostVisibleItem","observer","IntersectionObserver","maxVisibleArea","entries","forEach","entry","visibleArea","isIntersecting","intersectionRect","root","updateActiveItem","Array","from","observe","buttonsOverImage","isScrolling","button","setAttribute","debouncedCheckThumbnailArrowDisplay","debounce","areAvailable","checkIfCustomerPhotosShouldDisplay","hide","scrollToThumbnail","thumbnail","container","containerRect","getBoundingClientRect","thumbnailRect","containerCenter","thumbnailCenter","scrollLeft","itemsContainer","lastItem","itemsContainerRect","scrollWidth","direction","outerContainerWidth","itemToGoTo","galleryListPosition","not","activeGalleryItemPosition","watchScrollLeftUntilStable","stageTop","offset","scrollTop","animate","callback","interval","timeout","lastScrollLeft","stableCount","scrollCheckInterval","setInterval","currentScrollLeft","clearInterval","t","exports","module","define","amd","n","Function","o","set","a","swipeTarget","u","mousedown","touchstart","touchend","global","mouseup","mousemove","touchmove","keydown","keyup","draggable","swipeable","keys","s","r","WeakMap","pageX","touches","clientX","preventDefault","play","stop","swipeTolerance","includes","_initEvents","goto","inverted","h","count","_update","looping","_loop","l","c","p","backgroundImage","backgroundPositionX","backgroundPositionY","backgroundSize","isResponsive","_windowResizeListener","sprite","perRow","containerWidth","containerHeight","concat","ceil","aspectRatio","v","isArray","freeze","_initContainer","default","m","d","toStringTag","__esModule","create","hasOwnProperty"],"mappings":"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"}