{"version":3,"file":"article_page_entry.c8f7f3905348115ed576.min.js","mappings":"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","sources":["webpack://parkers/webpack/runtime/chunk loaded","webpack://parkers/./Assets/Js/jquery.panzoom.js","webpack://parkers/./Assets/Js/parkers/components/full-screen-gallery.js","webpack://parkers/./Assets/Js/parkers/entry/article-page-entrypoint.js","webpack://parkers/./Assets/Js/parkers/utils/youtube.js","webpack://parkers/./node_modules/jquery-mousewheel/jquery.mousewheel.js","webpack://parkers/external var \"React\"","webpack://parkers/external var \"jQuery\"","webpack://parkers/webpack/bootstrap","webpack://parkers/webpack/runtime/define property getters","webpack://parkers/webpack/runtime/global","webpack://parkers/webpack/runtime/hasOwnProperty shorthand","webpack://parkers/webpack/runtime/make namespace object","webpack://parkers/webpack/runtime/jsonp chunk loading","webpack://parkers/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @license jquery.panzoom.js v3.2.2\n * Updated: Sun Aug 28 2016\n * Add pan and zoom functionality to any element\n * Copyright (c) timmy willison\n * Released under the MIT license\n * https://github.com/timmywil/jquery.panzoom/blob/master/MIT-License.txt\n */\n\n(function(global, factory) {\n\t// AMD\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine([ 'jquery' ], function(jQuery) {\n\t\t\treturn factory(global, jQuery);\n\t\t});\n\t// CommonJS/Browserify\n\t} else if (typeof exports === 'object') {\n\t\tfactory(global, require('jquery'));\n\t// Global\n\t} else {\n\t\tfactory(global, global.jQuery);\n\t}\n}(typeof window !== 'undefined' ? window : this, function(window, $) {\n\t'use strict';\n\n\tvar document = window.document;\n\tvar datakey = '__pz__';\n\tvar slice = Array.prototype.slice;\n\tvar rIE11 = /trident\\/7./i;\n\tvar supportsInputEvent = (function() {\n\t\t// IE11 returns a false positive\n\t\tif (rIE11.test(navigator.userAgent)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar input = document.createElement('input');\n\t\tinput.setAttribute('oninput', 'return');\n\t\treturn typeof input.oninput === 'function';\n\t})();\n\n\t// Regex\n\tvar rupper = /([A-Z])/g;\n\tvar rsvg = /^http:[\\w\\.\\/]+svg$/;\n\n\tvar floating = '(\\\\-?\\\\d[\\\\d\\\\.e-]*)';\n\tvar commaSpace = '\\\\,?\\\\s*';\n\tvar rmatrix = new RegExp(\n\t\t'^matrix\\\\(' +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + commaSpace +\n\t\tfloating + '\\\\)$'\n\t);\n\n\t/**\n\t * Utility for determining transform matrix equality\n\t * Checks backwards to test translation first\n\t * @param {Array} first\n\t * @param {Array} second\n\t */\n\tfunction matrixEquals(first, second) {\n\t\tvar i = first.length;\n\t\twhile(--i) {\n\t\t\tif (Math.round(+first[i]) !== Math.round(+second[i])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Creates the options object for reset functions\n\t * @param {Boolean|Object} opts See reset methods\n\t * @returns {Object} Returns the newly-created options object\n\t */\n\tfunction createResetOptions(opts) {\n\t\tvar options = { range: true, animate: true };\n\t\tif (typeof opts === 'boolean') {\n\t\t\toptions.animate = opts;\n\t\t} else {\n\t\t\t$.extend(options, opts);\n\t\t}\n\t\treturn options;\n\t}\n\n\t/**\n\t * Represent a transformation matrix with a 3x3 matrix for calculations\n\t * Matrix functions adapted from Louis Remi's jQuery.transform (https://github.com/louisremi/jquery.transform.js)\n\t * @param {Array|Number} a An array of six values representing a 2d transformation matrix\n\t */\n\tfunction Matrix(a, b, c, d, e, f, g, h, i) {\n\t\tif ($.type(a) === 'array') {\n\t\t\tthis.elements = [\n\t\t\t\t+a[0], +a[2], +a[4],\n\t\t\t\t+a[1], +a[3], +a[5],\n\t\t\t\t 0, 0, 1\n\t\t\t];\n\t\t} else {\n\t\t\tthis.elements = [\n\t\t\t\ta, b, c,\n\t\t\t\td, e, f,\n\t\t\t\tg || 0, h || 0, i || 1\n\t\t\t];\n\t\t}\n\t}\n\n\tMatrix.prototype = {\n\t\t/**\n\t\t * Multiply a 3x3 matrix by a similar matrix or a vector\n\t\t * @param {Matrix|Vector} matrix\n\t\t * @return {Matrix|Vector} Returns a vector if multiplying by a vector\n\t\t */\n\t\tx: function(matrix) {\n\t\t\tvar isVector = matrix instanceof Vector;\n\n\t\t\tvar a = this.elements,\n\t\t\t\tb = matrix.elements;\n\n\t\t\tif (isVector && b.length === 3) {\n\t\t\t\t// b is actually a vector\n\t\t\t\treturn new Vector(\n\t\t\t\t\ta[0] * b[0] + a[1] * b[1] + a[2] * b[2],\n\t\t\t\t\ta[3] * b[0] + a[4] * b[1] + a[5] * b[2],\n\t\t\t\t\ta[6] * b[0] + a[7] * b[1] + a[8] * b[2]\n\t\t\t\t);\n\t\t\t} else if (b.length === a.length) {\n\t\t\t\t// b is a 3x3 matrix\n\t\t\t\treturn new Matrix(\n\t\t\t\t\ta[0] * b[0] + a[1] * b[3] + a[2] * b[6],\n\t\t\t\t\ta[0] * b[1] + a[1] * b[4] + a[2] * b[7],\n\t\t\t\t\ta[0] * b[2] + a[1] * b[5] + a[2] * b[8],\n\n\t\t\t\t\ta[3] * b[0] + a[4] * b[3] + a[5] * b[6],\n\t\t\t\t\ta[3] * b[1] + a[4] * b[4] + a[5] * b[7],\n\t\t\t\t\ta[3] * b[2] + a[4] * b[5] + a[5] * b[8],\n\n\t\t\t\t\ta[6] * b[0] + a[7] * b[3] + a[8] * b[6],\n\t\t\t\t\ta[6] * b[1] + a[7] * b[4] + a[8] * b[7],\n\t\t\t\t\ta[6] * b[2] + a[7] * b[5] + a[8] * b[8]\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false; // fail\n\t\t},\n\t\t/**\n\t\t * Generates an inverse of the current matrix\n\t\t * @returns {Matrix}\n\t\t */\n\t\tinverse: function() {\n\t\t\tvar d = 1 / this.determinant(),\n\t\t\t\ta = this.elements;\n\t\t\treturn new Matrix(\n\t\t\t\td * ( a[8] * a[4] - a[7] * a[5]),\n\t\t\t\td * (-(a[8] * a[1] - a[7] * a[2])),\n\t\t\t\td * ( a[5] * a[1] - a[4] * a[2]),\n\n\t\t\t\td * (-(a[8] * a[3] - a[6] * a[5])),\n\t\t\t\td * ( a[8] * a[0] - a[6] * a[2]),\n\t\t\t\td * (-(a[5] * a[0] - a[3] * a[2])),\n\n\t\t\t\td * ( a[7] * a[3] - a[6] * a[4]),\n\t\t\t\td * (-(a[7] * a[0] - a[6] * a[1])),\n\t\t\t\td * ( a[4] * a[0] - a[3] * a[1])\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Calculates the determinant of the current matrix\n\t\t * @returns {Number}\n\t\t */\n\t\tdeterminant: function() {\n\t\t\tvar a = this.elements;\n\t\t\treturn a[0] * (a[8] * a[4] - a[7] * a[5]) - a[3] * (a[8] * a[1] - a[7] * a[2]) + a[6] * (a[5] * a[1] - a[4] * a[2]);\n\t\t}\n\t};\n\n\t/**\n\t * Create a vector containing three values\n\t */\n\tfunction Vector(x, y, z) {\n\t\tthis.elements = [ x, y, z ];\n\t}\n\n\t/**\n\t * Get the element at zero-indexed index i\n\t * @param {Number} i\n\t */\n\tVector.prototype.e = Matrix.prototype.e = function(i) {\n\t\treturn this.elements[ i ];\n\t};\n\n\t/**\n\t * Create a Panzoom object for a given element\n\t * @constructor\n\t * @param {Element} elem - Element to use pan and zoom\n\t * @param {Object} [options] - An object literal containing options to override default options\n\t * (See Panzoom.defaults for ones not listed below)\n\t * @param {jQuery} [options.$zoomIn] - zoom in buttons/links collection (you can also bind these yourself\n\t * e.g. $button.on('click', function(e) { e.preventDefault(); $elem.panzoom('zoomIn'); });)\n\t * @param {jQuery} [options.$zoomOut] - zoom out buttons/links collection on which to bind zoomOut\n\t * @param {jQuery} [options.$zoomRange] - zoom in/out with this range control\n\t * @param {jQuery} [options.$reset] - Reset buttons/links collection on which to bind the reset method\n\t * @param {Function} [options.on[Start|Change|Zoom|Pan|End|Reset] - Optional callbacks for panzoom events\n\t */\n\tfunction Panzoom(elem, options) {\n\n\t\t// Allow instantiation without `new` keyword\n\t\tif (!(this instanceof Panzoom)) {\n\t\t\treturn new Panzoom(elem, options);\n\t\t}\n\n\t\t// Sanity checks\n\t\tif (elem.nodeType !== 1) {\n\t\t\t$.error('Panzoom called on non-Element node');\n\t\t}\n\t\tif (!$.contains(document, elem)) {\n\t\t\t$.error('Panzoom element must be attached to the document');\n\t\t}\n\n\t\t// Don't remake\n\t\tvar d = $.data(elem, datakey);\n\t\tif (d) {\n\t\t\treturn d;\n\t\t}\n\n\t\t// Extend default with given object literal\n\t\t// Each instance gets its own options\n\t\tthis.options = options = $.extend({}, Panzoom.defaults, options);\n\t\tthis.elem = elem;\n\t\tvar $elem = this.$elem = $(elem);\n\t\tthis.$set = options.$set && options.$set.length ? options.$set : $elem;\n\t\tthis.$doc = $(elem.ownerDocument || document);\n\t\tthis.$parent = $elem.parent();\n\t\tthis.parent = this.$parent[0];\n\n\t\t// This is SVG if the namespace is SVG\n\t\t// However, while elements are SVG, we want to treat those like other elements\n\t\tthis.isSVG = rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\n\n\t\tthis.panning = false;\n\n\t\t// Save the original transform value\n\t\t// Save the prefixed transform style key\n\t\t// Set the starting transform\n\t\tthis._buildTransform();\n\n\t\t// Build the appropriately-prefixed transform style property name\n\t\t// De-camelcase\n\t\tthis._transform = $.cssProps.transform.replace(rupper, '-$1').toLowerCase();\n\n\t\t// Build the transition value\n\t\tthis._buildTransition();\n\n\t\t// Build containment dimensions\n\t\tthis.resetDimensions();\n\n\t\t// Add zoom and reset buttons to `this`\n\t\tvar $empty = $();\n\t\tvar self = this;\n\t\t$.each([ '$zoomIn', '$zoomOut', '$zoomRange', '$reset' ], function(i, name) {\n\t\t\tself[ name ] = options[ name ] || $empty;\n\t\t});\n\n\t\tthis.enable();\n\n\t\tthis.scale = this.getMatrix()[0];\n\t\tthis._checkPanWhenZoomed();\n\n\t\t// Save the instance\n\t\t$.data(elem, datakey, this);\n\t}\n\n\t// Attach regex for possible use (immutable)\n\tPanzoom.rmatrix = rmatrix;\n\n\tPanzoom.defaults = {\n\t\t// Should always be non-empty\n\t\t// Used to bind jQuery events without collisions\n\t\t// A guid is not added here as different instantiations/versions of panzoom\n\t\t// on the same element is not supported, so don't do it.\n\t\teventNamespace: '.panzoom',\n\n\t\t// Whether or not to transition the scale\n\t\ttransition: true,\n\n\t\t// Default cursor style for the element\n\t\tcursor: 'move',\n\n\t\t// There may be some use cases for zooming without panning or vice versa\n\t\tdisablePan: false,\n\t\tdisableZoom: false,\n\n\t\t// Pan only on the X or Y axes\n\t\tdisableXAxis: false,\n\t\tdisableYAxis: false,\n\n\t\t// Set whether you'd like to pan on left (1), middle (2), or right click (3)\n\t\twhich: 1,\n\n\t\t// The increment at which to zoom\n\t\t// adds/subtracts to the scale each time zoomIn/Out is called\n\t\tincrement: 0.3,\n\n\t\t// Turns on exponential zooming\n\t\t// If false, zooming will be incremented linearly\n\t\texponential: true,\n\n\t\t// Pan only when the scale is greater than minScale\n\t\tpanOnlyWhenZoomed: false,\n\n\t\t// min and max zoom scales\n\t\tminScale: 0.3,\n\t\tmaxScale: 6,\n\n\t\t// The default step for the range input\n\t\t// Precendence: default < HTML attribute < option setting\n\t\trangeStep: 0.05,\n\n\t\t// Animation duration (ms)\n\t\tduration: 200,\n\t\t// CSS easing used for scale transition\n\t\teasing: 'ease-in-out',\n\n\t\t// Indicate that the element should be contained within it's parent when panning\n\t\t// Note: this does not affect zooming outside of the parent\n\t\t// Set this value to 'invert' to only allow panning outside of the parent element (basically the opposite of the normal use of contain)\n\t\t// 'invert' is useful for a large panzoom element where you don't want to show anything behind it\n\t\tcontain: false\n\t};\n\n\tPanzoom.prototype = {\n\t\tconstructor: Panzoom,\n\n\t\t/**\n\t\t * @returns {Panzoom} Returns the instance\n\t\t */\n\t\tinstance: function() {\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Enable or re-enable the panzoom instance\n\t\t */\n\t\tenable: function() {\n\t\t\t// Unbind first\n\t\t\tthis._initStyle();\n\t\t\tthis._bind();\n\t\t\tthis.disabled = false;\n\t\t},\n\n\t\t/**\n\t\t * Disable panzoom\n\t\t */\n\t\tdisable: function() {\n\t\t\tthis.disabled = true;\n\t\t\tthis._resetStyle();\n\t\t\tthis._unbind();\n\t\t},\n\n\t\t/**\n\t\t * @returns {Boolean} Returns whether the current panzoom instance is disabled\n\t\t */\n\t\tisDisabled: function() {\n\t\t\treturn this.disabled;\n\t\t},\n\n\t\t/**\n\t\t * Destroy the panzoom instance\n\t\t */\n\t\tdestroy: function() {\n\t\t\tthis.disable();\n\t\t\t$.removeData(this.elem, datakey);\n\t\t},\n\n\t\t/**\n\t\t * Builds the restricing dimensions from the containment element\n\t\t * Also used with focal points\n\t\t * Call this method whenever the dimensions of the element or parent are changed\n\t\t */\n\t\tresetDimensions: function() {\n\t\t\t// Reset container properties\n\t\t\tthis.container = this.parent.getBoundingClientRect();\n\n\t\t\t// Set element properties\n\t\t\tvar elem = this.elem;\n\t\t\t// getBoundingClientRect() works with SVG, offsetWidth does not\n\t\t\tvar dims = elem.getBoundingClientRect();\n\t\t\tvar absScale = Math.abs(this.scale);\n\t\t\tthis.dimensions = {\n\t\t\t\twidth: dims.width,\n\t\t\t\theight: dims.height,\n\t\t\t\tleft: $.css(elem, 'left', true) || 0,\n\t\t\t\ttop: $.css(elem, 'top', true) || 0,\n\t\t\t\t// Borders and margins are scaled\n\t\t\t\tborder: {\n\t\t\t\t\ttop: $.css(elem, 'borderTopWidth', true) * absScale || 0,\n\t\t\t\t\tbottom: $.css(elem, 'borderBottomWidth', true) * absScale || 0,\n\t\t\t\t\tleft: $.css(elem, 'borderLeftWidth', true) * absScale || 0,\n\t\t\t\t\tright: $.css(elem, 'borderRightWidth', true) * absScale || 0\n\t\t\t\t},\n\t\t\t\tmargin: {\n\t\t\t\t\ttop: $.css(elem, 'marginTop', true) * absScale || 0,\n\t\t\t\t\tleft: $.css(elem, 'marginLeft', true) * absScale || 0\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Return the element to it's original transform matrix\n\t\t * @param {Boolean} [options] If a boolean is passed, animate the reset (default: true). If an options object is passed, simply pass that along to setMatrix.\n\t\t * @param {Boolean} [options.silent] Silence the reset event\n\t\t */\n\t\treset: function(options) {\n\t\t\toptions = createResetOptions(options);\n\t\t\t// Reset the transform to its original value\n\t\t\tvar matrix = this.setMatrix(this._origTransform, options);\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('reset', matrix);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Only resets zoom level\n\t\t * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to zoom()\n\t\t */\n\t\tresetZoom: function(options) {\n\t\t\toptions = createResetOptions(options);\n\t\t\tvar origMatrix = this.getMatrix(this._origTransform);\n\t\t\toptions.dValue = origMatrix[ 3 ];\n\t\t\tthis.zoom(origMatrix[0], options);\n\t\t},\n\n\t\t/**\n\t\t * Only reset panning\n\t\t * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to pan()\n\t\t */\n\t\tresetPan: function(options) {\n\t\t\tvar origMatrix = this.getMatrix(this._origTransform);\n\t\t\tthis.pan(origMatrix[4], origMatrix[5], createResetOptions(options));\n\t\t},\n\n\t\t/**\n\t\t * Sets a transform on the $set\n\t\t * For SVG, the style attribute takes precedence\n\t\t * and allows us to animate\n\t\t * @param {String} transform\n\t\t */\n\t\tsetTransform: function(transform) {\n\t\t\tvar $set = this.$set;\n\t\t\tvar i = $set.length;\n\t\t\twhile(i--) {\n\t\t\t\t$.style($set[i], 'transform', transform);\n\n\t\t\t\t// Support IE9-11, Edge 13-14+\n\t\t\t\t// Set attribute alongside style attribute\n\t\t\t\t// since IE and Edge do not respect style settings on SVG\n\t\t\t\t// See https://css-tricks.com/transforms-on-svg-elements/\n\t\t\t\tif (this.isSVG) {\n\t\t\t\t\t$set[i].setAttribute('transform', transform);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Retrieving the transform is different for SVG\n\t\t * (unless a style transform is already present)\n\t\t * Uses the $set collection for retrieving the transform\n\t\t * @param {String} [transform] Pass in an transform value (like 'scale(1.1)')\n\t\t * to have it formatted into matrix format for use by Panzoom\n\t\t * @returns {String} Returns the current transform value of the element\n\t\t */\n\t\tgetTransform: function(transform) {\n\t\t\tvar $set = this.$set;\n\t\t\tvar transformElem = $set[0];\n\t\t\tif (transform) {\n\t\t\t\tthis.setTransform(transform);\n\t\t\t} else {\n\n\t\t\t\t// IE and Edge still set the transform style properly\n\t\t\t\t// They just don't render it on SVG\n\t\t\t\t// So we get a correct value here\n\t\t\t\ttransform = $.style(transformElem, 'transform');\n\n\t\t\t\tif (this.isSVG && (!transform || transform === 'none')) {\n\t\t\t\t\ttransform = $.attr(transformElem, 'transform') || 'none';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert any transforms set by the user to matrix format\n\t\t\t// by setting to computed\n\t\t\tif (transform !== 'none' && !rmatrix.test(transform)) {\n\n\t\t\t\t// Get computed and set for next time\n\t\t\t\tthis.setTransform(transform = $.css(transformElem, 'transform'));\n\t\t\t}\n\n\t\t\treturn transform || 'none';\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the current transform matrix for $elem (or turn a transform into it's array values)\n\t\t * @param {String} [transform] matrix-formatted transform value\n\t\t * @returns {Array} Returns the current transform matrix split up into it's parts, or a default matrix\n\t\t */\n\t\tgetMatrix: function(transform) {\n\t\t\tvar matrix = rmatrix.exec(transform || this.getTransform());\n\t\t\tif (matrix) {\n\t\t\t\tmatrix.shift();\n\t\t\t}\n\t\t\treturn matrix || [ 1, 0, 0, 1, 0, 0 ];\n\t\t},\n\n\t\t/**\n\t\t * Given a matrix object, quickly set the current matrix of the element\n\t\t * @param {Array|String} matrix\n\t\t * @param {Object} [options]\n\t\t * @param {Boolean|String} [options.animate] Whether to animate the transform change, or 'skip' indicating that it is unnecessary to set\n\t\t * @param {Boolean} [options.contain] Override the global contain option\n\t\t * @param {Boolean} [options.range] If true, $zoomRange's value will be updated.\n\t\t * @param {Boolean} [options.silent] If true, the change event will not be triggered\n\t\t * @returns {Array} Returns the newly-set matrix\n\t\t */\n\t\tsetMatrix: function(matrix, options) {\n\t\t\tif (this.disabled) { return; }\n\t\t\tif (!options) { options = {}; }\n\t\t\t// Convert to array\n\t\t\tif (typeof matrix === 'string') {\n\t\t\t\tmatrix = this.getMatrix(matrix);\n\t\t\t}\n\t\t\tvar scale = +matrix[0];\n\t\t\tvar contain = typeof options.contain !== 'undefined' ? options.contain : this.options.contain;\n\n\t\t\t// Apply containment\n\t\t\tif (contain) {\n\t\t\t\tvar dims = options.dims;\n\t\t\t\tif (!dims) {\n\t\t\t\t\tthis.resetDimensions();\n\t\t\t\t\tdims = this.dimensions;\n\t\t\t\t}\n\t\t\t\tvar spaceWLeft, spaceWRight, scaleDiff;\n\t\t\t\tvar container = this.container;\n\t\t\t\tvar width = dims.width;\n\t\t\t\tvar height = dims.height;\n\t\t\t\tvar conWidth = container.width;\n\t\t\t\tvar conHeight = container.height;\n\t\t\t\tvar zoomAspectW = conWidth / width;\n\t\t\t\tvar zoomAspectH = conHeight / height;\n\n\t\t\t\t// If the element is not naturally centered,\n\t\t\t\t// assume full space right\n\t\t\t\tif (this.$parent.css('textAlign') !== 'center' || $.css(this.elem, 'display') !== 'inline') {\n\t\t\t\t\t// offsetWidth gets us the width without the transform\n\t\t\t\t\tscaleDiff = (width - this.elem.offsetWidth) / 2;\n\t\t\t\t\tspaceWLeft = scaleDiff - dims.border.left;\n\t\t\t\t\tspaceWRight = width - conWidth - scaleDiff + dims.border.right;\n\t\t\t\t} else {\n\t\t\t\t\tspaceWLeft = spaceWRight = ((width - conWidth) / 2);\n\t\t\t\t}\n\t\t\t\tvar spaceHTop = ((height - conHeight) / 2) + dims.border.top;\n\t\t\t\tvar spaceHBottom = ((height - conHeight) / 2) - dims.border.top - dims.border.bottom;\n\n\t\t\t\tif (contain === 'invert' || contain === 'automatic' && zoomAspectW < 1.01) {\n\t\t\t\t\tmatrix[4] = Math.max(Math.min(matrix[4], spaceWLeft - dims.border.left), -spaceWRight);\n\t\t\t\t} else {\n\t\t\t\t\tmatrix[4] = Math.min(Math.max(matrix[4], spaceWLeft), -spaceWRight);\n\t\t\t\t}\n\n\t\t\t\tif (contain === 'invert' || (contain === 'automatic' && zoomAspectH < 1.01)) {\n\t\t\t\t\tmatrix[5] = Math.max(Math.min(matrix[5], spaceHTop - dims.border.top), -spaceHBottom);\n\t\t\t\t} else {\n\t\t\t\t\tmatrix[5] = Math.min(Math.max(matrix[5], spaceHTop), -spaceHBottom);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate\n\t\t\tif (options.animate !== 'skip') {\n\t\t\t\t// Set transition\n\t\t\t\tthis.transition(!options.animate);\n\t\t\t}\n\n\t\t\t// Update range element\n\t\t\tif (options.range) {\n\t\t\t\tthis.$zoomRange.val(scale);\n\t\t\t}\n\n\t\t\t// Set the matrix on this.$set\n\t\t\tif (this.options.disableXAxis || this.options.disableYAxis) {\n\t\t\t\tvar originalMatrix = this.getMatrix();\n\t\t\t\tif (this.options.disableXAxis) {\n\t\t\t\t\tmatrix[4] = originalMatrix[4];\n\t\t\t\t}\n\t\t\t\tif (this.options.disableYAxis) {\n\t\t\t\t\tmatrix[5] = originalMatrix[5];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.setTransform('matrix(' + matrix.join(',') + ')');\n\n\t\t\tthis.scale = scale;\n\n\t\t\t// Disable/enable panning if zooming is at minimum and panOnlyWhenZoomed is true\n\t\t\tthis._checkPanWhenZoomed(scale);\n\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('change', matrix);\n\t\t\t}\n\n\t\t\treturn matrix;\n\t\t},\n\n\t\t/**\n\t\t * @returns {Boolean} Returns whether the panzoom element is currently being dragged\n\t\t */\n\t\tisPanning: function() {\n\t\t\treturn this.panning;\n\t\t},\n\n\t\t/**\n\t\t * Apply the current transition to the element, if allowed\n\t\t * @param {Boolean} [off] Indicates that the transition should be turned off\n\t\t */\n\t\ttransition: function(off) {\n\t\t\tif (!this._transition) { return; }\n\t\t\tvar transition = off || !this.options.transition ? 'none' : this._transition;\n\t\t\tvar $set = this.$set;\n\t\t\tvar i = $set.length;\n\t\t\twhile(i--) {\n\t\t\t\t// Avoid reflows when zooming\n\t\t\t\tif ($.style($set[i], 'transition') !== transition) {\n\t\t\t\t\t$.style($set[i], 'transition', transition);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pan the element to the specified translation X and Y\n\t\t * Note: this is not the same as setting jQuery#offset() or jQuery#position()\n\t\t * @param {Number} x\n\t\t * @param {Number} y\n\t\t * @param {Object} [options] These options are passed along to setMatrix\n\t\t * @param {Array} [options.matrix] The matrix being manipulated (if already known so it doesn't have to be retrieved again)\n\t\t * @param {Boolean} [options.silent] Silence the pan event. Note that this will also silence the setMatrix change event.\n\t\t * @param {Boolean} [options.relative] Make the x and y values relative to the existing matrix\n\t\t */\n\t\tpan: function(x, y, options) {\n\t\t\tif (this.options.disablePan) { return; }\n\t\t\tif (!options) { options = {}; }\n\t\t\tvar matrix = options.matrix;\n\t\t\tif (!matrix) {\n\t\t\t\tmatrix = this.getMatrix();\n\t\t\t}\n\t\t\t// Cast existing matrix values to numbers\n\t\t\tif (options.relative) {\n\t\t\t\tx += +matrix[4];\n\t\t\t\ty += +matrix[5];\n\t\t\t}\n\t\t\tmatrix[4] = x;\n\t\t\tmatrix[5] = y;\n\t\t\tthis.setMatrix(matrix, options);\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('pan', matrix[4], matrix[5]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Zoom in/out the element using the scale properties of a transform matrix\n\t\t * @param {Number|Boolean} [scale] The scale to which to zoom or a boolean indicating to transition a zoom out\n\t\t * @param {Object} [opts] All global options can be overwritten by this options object. For example, override the default increment.\n\t\t * @param {Boolean} [opts.noSetRange] Specify that the method should not set the $zoomRange value (as is the case when $zoomRange is calling zoom on change)\n\t\t * @param {jQuery.Event|Object} [opts.focal] A focal point on the panzoom element on which to zoom.\n\t\t * If an object, set the clientX and clientY properties to the position relative to the parent\n\t\t * @param {Boolean} [opts.animate] Whether to animate the zoom (defaults to true if scale is not a number, false otherwise)\n\t\t * @param {Boolean} [opts.silent] Silence the zoom event\n\t\t * @param {Array} [opts.matrix] Optionally pass the current matrix so it doesn't need to be retrieved\n\t\t * @param {Number} [opts.dValue] Think of a transform matrix as four values a, b, c, d\n\t\t * where a/d are the horizontal/vertical scale values and b/c are the skew values\n\t\t * (5 and 6 of matrix array are the tx/ty transform values).\n\t\t * Normally, the scale is set to both the a and d values of the matrix.\n\t\t * This option allows you to specify a different d value for the zoom.\n\t\t * For instance, to flip vertically, you could set -1 as the dValue.\n\t\t */\n\t\tzoom: function(scale, opts) {\n\t\t\t// Shuffle arguments\n\t\t\tif (typeof scale === 'object') {\n\t\t\t\topts = scale;\n\t\t\t\tscale = null;\n\t\t\t} else if (!opts) {\n\t\t\t\topts = {};\n\t\t\t}\n\t\t\tvar options = $.extend({}, this.options, opts);\n\t\t\t// Check if disabled\n\t\t\tif (options.disableZoom) { return; }\n\t\t\tvar animate = false;\n\t\t\tvar matrix = options.matrix || this.getMatrix();\n\t\t\tvar startScale = +matrix[0];\n\n\t\t\t// Calculate zoom based on increment\n\t\t\tif (typeof scale !== 'number') {\n\t\t\t\t// Just use a number a little greater than 1\n\t\t\t\t// Below 1 can use normal increments\n\t\t\t\tif (options.exponential && startScale - options.increment >= 1) {\n\t\t\t\t\tscale = Math[scale ? 'sqrt' : 'pow'](startScale, 2);\n\t\t\t\t} else {\n\t\t\t\t\tscale = startScale + (options.increment * (scale ? -1 : 1));\n\t\t\t\t}\n\t\t\t\tanimate = true;\n\t\t\t}\n\n\t\t\t// Constrain scale\n\t\t\tif (scale > options.maxScale) {\n\t\t\t\tscale = options.maxScale;\n\t\t\t} else if (scale < options.minScale) {\n\t\t\t\tscale = options.minScale;\n\t\t\t}\n\n\t\t\t// Calculate focal point based on scale\n\t\t\tvar focal = options.focal;\n\t\t\tif (focal && !options.disablePan) {\n\t\t\t\t// Adapted from code by Florian Günther\n\t\t\t\t// https://github.com/florianguenther/zui53\n\t\t\t\tthis.resetDimensions();\n\t\t\t\tvar dims = options.dims = this.dimensions;\n\t\t\t\tvar clientX = focal.clientX;\n\t\t\t\tvar clientY = focal.clientY;\n\n\t\t\t\t// Adjust the focal point for transform-origin 50% 50%\n\t\t\t\t// SVG elements have a transform origin of 0 0\n\t\t\t\tif (!this.isSVG) {\n\t\t\t\t\tclientX -= (dims.width / startScale) / 2;\n\t\t\t\t\tclientY -= (dims.height / startScale) / 2;\n\t\t\t\t}\n\n\t\t\t\tvar clientV = new Vector(clientX, clientY, 1);\n\t\t\t\tvar surfaceM = new Matrix(matrix);\n\t\t\t\t// Supply an offset manually if necessary\n\t\t\t\tvar o = this.parentOffset || this.$parent.offset();\n\t\t\t\tvar offsetM = new Matrix(1, 0, o.left - this.$doc.scrollLeft(), 0, 1, o.top - this.$doc.scrollTop());\n\t\t\t\tvar surfaceV = surfaceM.inverse().x(offsetM.inverse().x(clientV));\n\t\t\t\tvar scaleBy = scale / matrix[0];\n\t\t\t\tsurfaceM = surfaceM.x(new Matrix([scaleBy, 0, 0, scaleBy, 0, 0]));\n\t\t\t\tclientV = offsetM.x(surfaceM.x(surfaceV));\n\t\t\t\tmatrix[4] = +matrix[4] + (clientX - clientV.e(0));\n\t\t\t\tmatrix[5] = +matrix[5] + (clientY - clientV.e(1));\n\t\t\t}\n\n\t\t\t// Set the scale\n\t\t\tmatrix[0] = scale;\n\t\t\tmatrix[3] = typeof options.dValue === 'number' ? options.dValue : scale;\n\n\t\t\t// Calling zoom may still pan the element\n\t\t\tthis.setMatrix(matrix, {\n\t\t\t\tanimate: typeof options.animate !== 'undefined' ? options.animate : animate,\n\t\t\t\t// Set the zoomRange value\n\t\t\t\trange: !options.noSetRange\n\t\t\t});\n\n\t\t\t// Trigger zoom event\n\t\t\tif (!options.silent) {\n\t\t\t\tthis._trigger('zoom', matrix[0], options);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get/set option on an existing instance\n\t\t * @returns {Array|undefined} If getting, returns an array of all values\n\t\t * on each instance for a given key. If setting, continue chaining by returning undefined.\n\t\t */\n\t\toption: function(key, value) {\n\t\t\tvar options;\n\t\t\tif (!key) {\n\t\t\t\t// Avoids returning direct reference\n\t\t\t\treturn $.extend({}, this.options);\n\t\t\t}\n\n\t\t\tif (typeof key === 'string') {\n\t\t\t\tif (arguments.length === 1) {\n\t\t\t\t\treturn this.options[ key ] !== undefined ?\n\t\t\t\t\t\tthis.options[ key ] :\n\t\t\t\t\t\tnull;\n\t\t\t\t}\n\t\t\t\toptions = {};\n\t\t\t\toptions[ key ] = value;\n\t\t\t} else {\n\t\t\t\toptions = key;\n\t\t\t}\n\n\t\t\tthis._setOptions(options);\n\t\t},\n\n\t\t/**\n\t\t * Internally sets options\n\t\t * @param {Object} options - An object literal of options to set\n\t\t * @private\n\t\t */\n\t\t_setOptions: function(options) {\n\t\t\t$.each(options, $.proxy(function(key, value) {\n\t\t\t\tswitch(key) {\n\t\t\t\t\tcase 'disablePan':\n\t\t\t\t\t\tthis._resetStyle();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase '$zoomIn':\n\t\t\t\t\tcase '$zoomOut':\n\t\t\t\t\tcase '$zoomRange':\n\t\t\t\t\tcase '$reset':\n\t\t\t\t\tcase 'disableZoom':\n\t\t\t\t\tcase 'onStart':\n\t\t\t\t\tcase 'onChange':\n\t\t\t\t\tcase 'onZoom':\n\t\t\t\t\tcase 'onPan':\n\t\t\t\t\tcase 'onEnd':\n\t\t\t\t\tcase 'onReset':\n\t\t\t\t\tcase 'eventNamespace':\n\t\t\t\t\t\tthis._unbind();\n\t\t\t\t}\n\t\t\t\tthis.options[ key ] = value;\n\t\t\t\tswitch(key) {\n\t\t\t\t\tcase 'disablePan':\n\t\t\t\t\t\tthis._initStyle();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase '$zoomIn':\n\t\t\t\t\tcase '$zoomOut':\n\t\t\t\t\tcase '$zoomRange':\n\t\t\t\t\tcase '$reset':\n\t\t\t\t\t\t// Set these on the instance\n\t\t\t\t\t\tthis[ key ] = value;\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase 'disableZoom':\n\t\t\t\t\tcase 'onStart':\n\t\t\t\t\tcase 'onChange':\n\t\t\t\t\tcase 'onZoom':\n\t\t\t\t\tcase 'onPan':\n\t\t\t\t\tcase 'onEnd':\n\t\t\t\t\tcase 'onReset':\n\t\t\t\t\tcase 'eventNamespace':\n\t\t\t\t\t\tthis._bind();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cursor':\n\t\t\t\t\t\t$.style(this.elem, 'cursor', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'minScale':\n\t\t\t\t\t\tthis.$zoomRange.attr('min', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'maxScale':\n\t\t\t\t\t\tthis.$zoomRange.attr('max', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'rangeStep':\n\t\t\t\t\t\tthis.$zoomRange.attr('step', value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'startTransform':\n\t\t\t\t\t\tthis._buildTransform();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'easing':\n\t\t\t\t\t\tthis._buildTransition();\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase 'transition':\n\t\t\t\t\t\tthis.transition();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'panOnlyWhenZoomed':\n\t\t\t\t\t\tthis._checkPanWhenZoomed();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase '$set':\n\t\t\t\t\t\tif (value instanceof $ && value.length) {\n\t\t\t\t\t\t\tthis.$set = value;\n\t\t\t\t\t\t\t// Reset styles\n\t\t\t\t\t\t\tthis._initStyle();\n\t\t\t\t\t\t\tthis._buildTransform();\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t},\n\n\t\t/**\n\t\t * Disable/enable panning depending on whether the current scale\n\t\t * matches the minimum\n\t\t * @param {Number} [scale]\n\t\t * @private\n\t\t */\n\t\t_checkPanWhenZoomed: function(scale) {\n\t\t\tvar options = this.options;\n\t\t\tif (options.panOnlyWhenZoomed) {\n\t\t\t\tif (!scale) {\n\t\t\t\t\tscale = this.getMatrix()[0];\n\t\t\t\t}\n\t\t\t\tvar toDisable = scale <= options.minScale;\n\t\t\t\tif (options.disablePan !== toDisable) {\n\t\t\t\t\tthis.option('disablePan', toDisable);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Initialize base styles for the element and its parent\n\t\t * @private\n\t\t */\n\t\t_initStyle: function() {\n\t\t\tvar styles = {\n\t\t\t\t// Set the same default whether SVG or HTML\n\t\t\t\t// transform-origin cannot be changed to 50% 50% in IE9-11 or Edge 13-14+\n\t\t\t\t'transform-origin': this.isSVG ? '0 0' : '50% 50%'\n\t\t\t};\n\t\t\t// Set elem styles\n\t\t\tif (!this.options.disablePan) {\n\t\t\t\tstyles.cursor = this.options.cursor;\n\t\t\t}\n\t\t\tthis.$set.css(styles);\n\n\t\t\t// Set parent to relative if set to static\n\t\t\tvar $parent = this.$parent;\n\t\t\t// No need to add styles to the body\n\t\t\tif ($parent.length && !$.nodeName(this.parent, 'body')) {\n\t\t\t\tstyles = {\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t};\n\t\t\t\tif ($parent.css('position') === 'static') {\n\t\t\t\t\tstyles.position = 'relative';\n\t\t\t\t}\n\t\t\t\t$parent.css(styles);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Undo any styles attached in this plugin\n\t\t * @private\n\t\t */\n\t\t_resetStyle: function() {\n\t\t\tthis.$elem.css({\n\t\t\t\t'cursor': '',\n\t\t\t\t'transition': ''\n\t\t\t});\n\t\t\tthis.$parent.css({\n\t\t\t\t'overflow': '',\n\t\t\t\t'position': ''\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Binds all necessary events\n\t\t * @private\n\t\t */\n\t\t_bind: function() {\n\t\t\tvar self = this;\n\t\t\tvar options = this.options;\n\t\t\tvar ns = options.eventNamespace;\n\t\t\tvar str_down = 'mousedown' + ns + ' pointerdown' + ns + ' MSPointerDown' + ns;\n\t\t\tvar str_start = 'touchstart' + ns + ' ' + str_down;\n\t\t\tvar str_click = 'touchend' + ns + ' click' + ns + ' pointerup' + ns + ' MSPointerUp' + ns;\n\t\t\tvar events = {};\n\t\t\tvar $reset = this.$reset;\n\t\t\tvar $zoomRange = this.$zoomRange;\n\n\t\t\t// Bind panzoom events from options\n\t\t\t$.each([ 'Start', 'Change', 'Zoom', 'Pan', 'End', 'Reset' ], function() {\n\t\t\t\tvar m = options[ 'on' + this ];\n\t\t\t\tif ($.isFunction(m)) {\n\t\t\t\t\tevents[ 'panzoom' + this.toLowerCase() + ns ] = m;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Bind $elem drag and click/touchdown events\n\t\t\t// Bind touchstart if either panning or zooming is enabled\n\t\t\tif (!options.disablePan || !options.disableZoom) {\n\t\t\t\tevents[ str_start ] = function(e) {\n\t\t\t\t\tvar touches;\n\t\t\t\t\tif (e.type === 'touchstart' ?\n\t\t\t\t\t\t// Touch\n\t\t\t\t\t\t(touches = e.touches || e.originalEvent.touches) &&\n\t\t\t\t\t\t\t((touches.length === 1 && !options.disablePan) || touches.length === 2) :\n\t\t\t\t\t\t// Mouse/Pointer: Ignore unexpected click types\n\t\t\t\t\t\t// Support: IE10 only\n\t\t\t\t\t\t// IE10 does not support e.button for MSPointerDown, but does have e.which\n\t\t\t\t\t\t!options.disablePan && (e.which || e.originalEvent.which) === options.which) {\n\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tself._startMove(e, touches);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Prevent the contextmenu event\n\t\t\t\t// if we're binding to right-click\n\t\t\t\tif (options.which === 3) {\n\t\t\t\t\tevents.contextmenu = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$elem.on(events);\n\n\t\t\t// Bind reset\n\t\t\tif ($reset.length) {\n\t\t\t\t$reset.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.reset();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Set default attributes for the range input\n\t\t\tif ($zoomRange.length) {\n\t\t\t\t$zoomRange.attr({\n\t\t\t\t\t// Only set the range step if explicit or\n\t\t\t\t\t// set the default if there is no attribute present\n\t\t\t\t\tstep: options.rangeStep === Panzoom.defaults.rangeStep &&\n\t\t\t\t\t\t$zoomRange.attr('step') ||\n\t\t\t\t\t\toptions.rangeStep,\n\t\t\t\t\tmin: options.minScale,\n\t\t\t\t\tmax: options.maxScale\n\t\t\t\t}).prop({\n\t\t\t\t\tvalue: this.getMatrix()[0]\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// No bindings if zooming is disabled\n\t\t\tif (options.disableZoom) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar $zoomIn = this.$zoomIn;\n\t\t\tvar $zoomOut = this.$zoomOut;\n\n\t\t\t// Bind zoom in/out\n\t\t\t// Don't bind one without the other\n\t\t\tif ($zoomIn.length && $zoomOut.length) {\n\t\t\t\t// preventDefault cancels future mouse events on touch events\n\t\t\t\t$zoomIn.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.zoom();\n\t\t\t\t});\n\t\t\t\t$zoomOut.on(str_click, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.zoom(true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ($zoomRange.length) {\n\t\t\t\tevents = {};\n\t\t\t\t// Cannot prevent default action here\n\t\t\t\tevents[ str_down ] = function() {\n\t\t\t\t\tself.transition(true);\n\t\t\t\t};\n\t\t\t\t// Zoom on input events if available and change events\n\t\t\t\t// See https://github.com/timmywil/jquery.panzoom/issues/90\n\t\t\t\tevents[ (supportsInputEvent ? 'input' : 'change') + ns ] = function() {\n\t\t\t\t\tself.zoom(+this.value, { noSetRange: true });\n\t\t\t\t};\n\t\t\t\t$zoomRange.on(events);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Unbind all events\n\t\t * @private\n\t\t */\n\t\t_unbind: function() {\n\t\t\tthis.$elem\n\t\t\t\t.add(this.$zoomIn)\n\t\t\t\t.add(this.$zoomOut)\n\t\t\t\t.add(this.$reset)\n\t\t\t\t.off(this.options.eventNamespace);\n\t\t},\n\n\t\t/**\n\t\t * Builds the original transform value\n\t\t * @private\n\t\t */\n\t\t_buildTransform: function() {\n\t\t\t// Save the original transform\n\t\t\t// Retrieving this also adds the correct prefixed style name\n\t\t\t// to jQuery's internal $.cssProps\n\t\t\treturn this._origTransform = this.getTransform(this.options.startTransform);\n\t\t},\n\n\t\t/**\n\t\t * Set transition property for later use when zooming\n\t\t * @private\n\t\t */\n\t\t_buildTransition: function() {\n\t\t\tif (this._transform) {\n\t\t\t\tvar options = this.options;\n\t\t\t\tthis._transition = this._transform + ' ' + options.duration + 'ms ' + options.easing;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Calculates the distance between two touch points\n\t\t * Remember pythagorean?\n\t\t * @param {Array} touches\n\t\t * @returns {Number} Returns the distance\n\t\t * @private\n\t\t */\n\t\t_getDistance: function(touches) {\n\t\t\tvar touch1 = touches[0];\n\t\t\tvar touch2 = touches[1];\n\t\t\treturn Math.sqrt(Math.pow(Math.abs(touch2.clientX - touch1.clientX), 2) + Math.pow(Math.abs(touch2.clientY - touch1.clientY), 2));\n\t\t},\n\n\t\t/**\n\t\t * Constructs an approximated point in the middle of two touch points\n\t\t * @returns {Object} Returns an object containing pageX and pageY\n\t\t * @private\n\t\t */\n\t\t_getMiddle: function(touches) {\n\t\t\tvar touch1 = touches[0];\n\t\t\tvar touch2 = touches[1];\n\t\t\treturn {\n\t\t\t\tclientX: ((touch2.clientX - touch1.clientX) / 2) + touch1.clientX,\n\t\t\t\tclientY: ((touch2.clientY - touch1.clientY) / 2) + touch1.clientY\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Trigger a panzoom event on our element\n\t\t * The event is passed the Panzoom instance\n\t\t * @param {String|jQuery.Event} event\n\t\t * @param {Mixed} arg1[, arg2, arg3, ...] Arguments to append to the trigger\n\t\t * @private\n\t\t */\n\t\t_trigger: function (event) {\n\t\t\tif (typeof event === 'string') {\n\t\t\t\tevent = 'panzoom' + event;\n\t\t\t}\n\t\t\tthis.$elem.triggerHandler(event, [this].concat(slice.call(arguments, 1)));\n\t\t},\n\n\t\t/**\n\t\t * Starts the pan\n\t\t * This is bound to mouse/touchmove on the element\n\t\t * @param {jQuery.Event} event An event with pageX, pageY, and possibly the touches list\n\t\t * @param {TouchList} [touches] The touches list if present\n\t\t * @private\n\t\t */\n\t\t_startMove: function(event, touches) {\n\t\t\tif (this.panning) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar moveEvent, endEvent,\n\t\t\t\tstartDistance, startScale, startMiddle,\n\t\t\t\tstartPageX, startPageY, touch;\n\t\t\tvar self = this;\n\t\t\tvar options = this.options;\n\t\t\tvar ns = options.eventNamespace;\n\t\t\tvar matrix = this.getMatrix();\n\t\t\tvar original = matrix.slice(0);\n\t\t\tvar origPageX = +original[4];\n\t\t\tvar origPageY = +original[5];\n\t\t\tvar panOptions = { matrix: matrix, animate: 'skip' };\n\t\t\tvar type = event.type;\n\n\t\t\t// Use proper events\n\t\t\tif (type === 'pointerdown') {\n\t\t\t\tmoveEvent = 'pointermove';\n\t\t\t\tendEvent = 'pointerup';\n\t\t\t} else if (type === 'touchstart') {\n\t\t\t\tmoveEvent = 'touchmove';\n\t\t\t\tendEvent = 'touchend';\n\t\t\t} else if (type === 'MSPointerDown') {\n\t\t\t\tmoveEvent = 'MSPointerMove';\n\t\t\t\tendEvent = 'MSPointerUp';\n\t\t\t} else {\n\t\t\t\tmoveEvent = 'mousemove';\n\t\t\t\tendEvent = 'mouseup';\n\t\t\t}\n\n\t\t\t// Add namespace\n\t\t\tmoveEvent += ns;\n\t\t\tendEvent += ns;\n\n\t\t\t// Remove any transitions happening\n\t\t\tthis.transition(true);\n\n\t\t\t// BAUER EDIT - PAR-2784 - Comment this line to fix pan/zoom on Android Chrome 55\n\t\t\t// See: https://github.com/timmywil/jquery.panzoom/issues/303#issuecomment-267853623\n\t\t\t// Indicate that we are currently panning\n\t\t\t//this.panning = true;\n\n\t\t\t// Trigger start event\n\t\t\tthis._trigger('start', event, touches);\n\n\t\t\tvar setStart = function(event, touches) {\n\t\t\t\tif (touches) {\n\t\t\t\t\tif (touches.length === 2) {\n\t\t\t\t\t\tif (startDistance != null) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstartDistance = self._getDistance(touches);\n\t\t\t\t\t\tstartScale = +matrix[0];\n\t\t\t\t\t\tstartMiddle = self._getMiddle(touches);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (startPageX != null) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ((touch = touches[0])) {\n\t\t\t\t\t\tstartPageX = touch.pageX;\n\t\t\t\t\t\tstartPageY = touch.pageY;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (startPageX != null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstartPageX = event.pageX;\n\t\t\t\tstartPageY = event.pageY;\n\t\t\t};\n\n\t\t\tsetStart(event, touches);\n\n\t\t\tvar move = function(e) {\n\t\t\t\tvar coords;\n\t\t\t\te.preventDefault();\n\t\t\t\ttouches = e.touches || e.originalEvent.touches;\n\t\t\t\tsetStart(e, touches);\n\n\t\t\t\tif (touches) {\n\t\t\t\t\tif (touches.length === 2) {\n\n\t\t\t\t\t\t// Calculate move on middle point\n\t\t\t\t\t\tvar middle = self._getMiddle(touches);\n\t\t\t\t\t\tvar diff = self._getDistance(touches) - startDistance;\n\n\t\t\t\t\t\t// Set zoom\n\t\t\t\t\t\tself.zoom(diff * (options.increment / 100) + startScale, {\n\t\t\t\t\t\t\tfocal: middle,\n\t\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\t\tanimate: 'skip'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Set pan\n\t\t\t\t\t\tself.pan(\n\t\t\t\t\t\t\t+matrix[4] + middle.clientX - startMiddle.clientX,\n\t\t\t\t\t\t\t+matrix[5] + middle.clientY - startMiddle.clientY,\n\t\t\t\t\t\t\tpanOptions\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstartMiddle = middle;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcoords = touches[0] || { pageX: 0, pageY: 0 };\n\t\t\t\t}\n\n\t\t\t\tif (!coords) {\n\t\t\t\t\tcoords = e;\n\t\t\t\t}\n\n\t\t\t\tself.pan(\n\t\t\t\t\torigPageX + coords.pageX - startPageX,\n\t\t\t\t\torigPageY + coords.pageY - startPageY,\n\t\t\t\t\tpanOptions\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Bind the handlers\n\t\t\t$(document)\n\t\t\t\t.off(ns)\n\t\t\t\t.on(moveEvent, move)\n\t\t\t\t.on(endEvent, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t// Unbind all document events\n\t\t\t\t\t$(this).off(ns);\n\t\t\t\t\tself.panning = false;\n\t\t\t\t\t// Trigger our end event\n\t\t\t\t\t// Simply set the type to \"panzoomend\" to pass through all end properties\n\t\t\t\t\t// jQuery's `not` is used here to compare Array equality\n\t\t\t\t\te.type = 'panzoomend';\n\t\t\t\t\tself._trigger(e, matrix, !matrixEquals(matrix, original));\n\t\t\t\t});\n\t\t}\n\t};\n\n\t// Add Panzoom as a static property\n\t$.Panzoom = Panzoom;\n\n\t/**\n\t * Extend jQuery\n\t * @param {Object|String} options - The name of a method to call on the prototype\n\t * or an object literal of options\n\t * @returns {jQuery|Mixed} jQuery instance for regular chaining or the return value(s) of a panzoom method call\n\t */\n\t$.fn.panzoom = function(options) {\n\t\tvar instance, args, m, ret;\n\n\t\t// Call methods widget-style\n\t\tif (typeof options === 'string') {\n\t\t\tret = [];\n\t\t\targs = slice.call(arguments, 1);\n\t\t\tthis.each(function() {\n\t\t\t\tinstance = $.data(this, datakey);\n\n\t\t\t\tif (!instance) {\n\t\t\t\t\tret.push(undefined);\n\n\t\t\t\t// Ignore methods beginning with `_`\n\t\t\t\t} else if (options.charAt(0) !== '_' &&\n\t\t\t\t\ttypeof (m = instance[ options ]) === 'function' &&\n\t\t\t\t\t// If nothing is returned, do not add to return values\n\t\t\t\t\t(m = m.apply(instance, args)) !== undefined) {\n\n\t\t\t\t\tret.push(m);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Return an array of values for the jQuery instances\n\t\t\t// Or the value itself if there is only one\n\t\t\t// Or keep chaining\n\t\t\treturn ret.length ?\n\t\t\t\t(ret.length === 1 ? ret[0] : ret) :\n\t\t\t\tthis;\n\t\t}\n\n\t\treturn this.each(function() { new Panzoom(this, options); });\n\t};\n\n\treturn Panzoom;\n}));\n","'use strict';\n\nvar $ = require('jquery');\n\nvar advert = require('../adverts/advert.js');\nvar analytics = require('../utils/analytics.js');\nvar config = require('../utils/config.js');\nvar heightWatcher = require('../watchers/height-watcher.js');\nvar layout = require('../ui/layout.js');\nvar tagManager = require('../utils/tagManager.js');\nvar youtube = require('../utils/youtube.js');\nvar timer = require('../utils/timer.js');\n\nvar royalSlider = require('royalslider');\nrequire('jquery-panzoom');\nrequire('jquery-mousewheel');\n\nvar classNames = {\n\tfullScreenGallery: 'full-screen-gallery',\n\troyalSliderOverflow: 'rsOverflow',\n\tslider: 'slider',\n\ttopAd: 'top-ad'\n};\n\nvar modifiers = {\n\tvideoLoaded: 'video-loaded'\n};\n\nvar slider, $gallery, $galleryControls, galleryLoaded = false;\nvar placementHtml, mobileAdFrequency, mobileAdDuration, remainingMobileAdDuration, desktopAdViewedDuration, desktopAdTimeout;\nvar isMobileLayout = false;\nvar listenForIndexChange = true;\nvar isNavigationEnabled = true;\nvar showCaption = true;\nvar mobileAdDurationTimer;\nvar inactivityTimer;\nvar pageLocation;\n\nvar viewCount = 0;\nvar gaPageOverride = config.dataLayer.page.galleryGaLocation;\n\nfunction getSlider() {\n\treturn $.findByBem(classNames.fullScreenGallery, 'slider').data('royalSlider');\n}\n\nfunction toggleMobileTopAd() {\n\t// top (bottom) ad interferes with navigation controls in some mobile browsers\n\tif (layout.isMobile()) {\n\t\t$.findByBem(classNames.topAd).toggle();\n\t}\n}\n\nfunction mobileAdsEnabled() {\n\treturn placementHtml && mobileAdFrequency > 0;\n}\n\nfunction isImageSlide(id) {\n\tvar image = slider.slides[id].content.filter('.rsImg');\n\treturn image.length > 0;\n}\n\nfunction isVideoSlide(id) {\n\tvar video = slider.slides[id].content.filter('[data-gallery-video]');\n\treturn video.length > 0;\n}\n\nfunction getGalleryTemplateName() {\n\tvar galleryTemplate = 'CarGallery';\n\tif (window.location.pathname.startsWith('/vans-pickups/')) {\n\t\tgalleryTemplate = 'VanGallery';\n\t}\n\treturn galleryTemplate;\n}\n\nfunction logView(segment) {\n\tvar pageTemplateName = config.dataLayer.page.templateName;\n\tvar galleryTemplate = getGalleryTemplateName();\n\n\t// NOTE: this format of 'push' into the datalayer results in the\n\t// datalayer variable defined by the dot-notation-path being created/updated\n\ttagManager.pushToDataLayer({\n\t\t'page.templateName': galleryTemplate\n\t});\n\n\tanalytics.trackPageview(gaPageOverride + segment + '/');\n\n\t// Revert to the underlying page's template name in case\n\t// the value is required before a subsequent logView\n\ttagManager.pushToDataLayer({\n\t\t'page.templateName': pageTemplateName\n\t});\n\n\tanalytics.trackIpsosIrisPageView();\n}\n\nfunction logImageView(imageIndex) {\n\tvar action = pageLocation ? 'Image viewed - ' + pageLocation : 'Image viewed';\n\tanalytics.trackEvent('Full Screen Gallery', action, config.dataLayer.vehicle.modelName);\n\n\tvar imageNumber = imageIndex + 1;\n\tlogView(imageNumber);\n}\n\nfunction logVideoSlideView(slideIndex) {\n\tanalytics.trackEvent('Full Screen Gallery', 'Video slide viewed', config.dataLayer.vehicle.modelName);\n\n\tvar videoNumber = slideIndex + 1;\n\tlogView('video/' + videoNumber);\n}\n\nfunction logSlideView(slideIndex) {\n\tanalytics.trackEvent('Full Screen Gallery', 'Slide viewed', config.dataLayer.vehicle.modelName);\n\n\tvar $slideContent = slider.slides[slideIndex].content.filter('.rsContent');\n\tvar slideName = $slideContent.data('ga-slide-name') || 'content-slide';\n\n\tlogView(slideName);\n}\n\nfunction logViewByContentType(slideIndex) {\n\tif (isImageSlide(slideIndex)) {\n\t\tlogImageView(slideIndex);\n\t}\n\telse if (isVideoSlide(slideIndex)) {\n\t\tlogVideoSlideView(slideIndex);\n\t}\n\telse {\n\t\tlogSlideView(slideIndex);\n\t}\n}\n\nfunction logVideoPlay() {\n\tanalytics.trackEvent('Full Screen Gallery', 'Video played', config.dataLayer.vehicle.modelName);\n}\n\nfunction removeAdSlides(retainIndexId) {\n\tvar adSlides = $.grep(slider.slides, function (slide) {\n\t\tvar adContainer = slide.content.filter('.mpu-container');\n\t\treturn adContainer.length > 0;\n\t});\n\n\t$.each(adSlides, function (index) {\n\t\tif (!retainIndexId || adSlides[index].id !== retainIndexId) {\n\t\t\tslider.removeSlide(adSlides[index].id);\n\n\t\t\t// we've just removed a slide so the the retain index id needs to be\n\t\t\t// updated to keep in line\n\t\t\tif (retainIndexId) {\n\t\t\t\tretainIndexId--;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction appendAdSlide() {\n\t$('.mpu-container', $gallery).each(function () {\n\t\t$(this).remove();\n\t});\n\n\tremoveAdSlides();\n\n\t// append slide so an ad appears if navigated to previous\n\tslider.appendSlide(placementHtml, slider.currSlideId === 0 ? slider.numSlides + 1 : slider.currSlideId);\n\n\t// append slide so an ad appears if navigated to next\n\tslider.appendSlide(placementHtml, slider.currSlideId + 1);\n}\n\nfunction slideContainsAd(id) {\n\tvar adContainer = slider.slides[id].content.filter('.mpu-container');\n\treturn adContainer.length > 0;\n}\n\nfunction currentSlideContainsAd() {\n\treturn slideContainsAd(slider.currSlideId);\n}\n\nfunction nextSlideContainsAd(direction) {\n\tvar previousSlideId = slider.currSlideId === 0 ? slider.numSlides - 1 : slider.currSlideId - 1;\n\tvar nextSlideId = slider.currSlideId + 1 === slider.numSlides ? 0 : slider.currSlideId + 1;\n\n\tif ((direction === \"prev\" && slideContainsAd(previousSlideId)) ||\n\t\t(direction === \"next\" && slideContainsAd(nextSlideId))) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction setTransitionSpeed(speed) {\n\tvar transitionSpeed = layout.isMobile() ? 300 : 600;\n\tslider.st.transitionSpeed = speed ? speed : transitionSpeed;\n}\n\nfunction updateCaption() {\n\tvar $caption = $.findByBem(classNames.fullScreenGallery, 'caption');\n\tvar caption = $('.rsGCaption').text().trim();\n\n\t$.findByBem(classNames.fullScreenGallery, 'caption__text').text(caption);\n\n\tif (showCaption) {\n\t\tif (!caption || currentSlideContainsAd()) {\n\t\t\t$caption.slideUp();\n\t\t}\n\t\telse if (caption && !currentSlideContainsAd() && !$caption.is(':visible')) {\n\t\t\t$caption.slideDown();\n\t\t}\n\t}\n}\n\nfunction disableNavigation() {\n\tslider.st.sliderDrag = false;\n\tslider.st.sliderTouch = false;\n\tisNavigationEnabled = false;\n\n\t$('.full-screen-gallery__slider').addClass('rsNoDrag');\n\t$('.full-screen-gallery__controls').slideUp();\n}\n\nfunction enableNavigation() {\n\tslider.st.sliderDrag = true;\n\tslider.st.sliderTouch = true;\n\tisNavigationEnabled = true;\n\n\t$('.full-screen-gallery__slider').removeClass('rsNoDrag');\n\t$('.full-screen-gallery__controls').slideDown();\n}\n\nfunction getActiveSlideImage() {\n\treturn $('.rsActiveSlide > .rsImg', $gallery);\n}\n\nfunction getActivePanzoomContainer() {\n\treturn $('.rsActiveSlide > .panzoomContainer', $gallery);\n}\n\nfunction initPanzoom() {\n\tvar $panzoomContainer = getActivePanzoomContainer();\n\tvar $activeImage = getActiveSlideImage();\n\n\tif ($panzoomContainer.length || !$activeImage.length) {\n\t\t// panzoom is already init'd or active slide image not found\n\t\treturn;\n\t}\n\n\t$activeImage.wrap(\"
\");\n\n\t$panzoomContainer = getActivePanzoomContainer();\n\n\t$panzoomContainer.panzoom({\n\t\tcursor: 'grab',\n\t\tcontain: 'automatic',\n\t\tincrement: 0.3,\n\t\tminScale: 1,\n\t\tmaxScale: 2,\n\t\tpanOnlyWhenZoomed: true\n\t});\n\n\t$panzoomContainer.on('mousewheel', function (event) {\n\t\tevent.preventDefault();\n\t\tvar delta = event.delta || event.originalEvent.wheelDelta;\n\t\tvar zoomOut = delta ? delta < 0 : event.originalEvent.deltaY > 0;\n\t\t$(this).panzoom('zoom', zoomOut);\n\t});\n}\n\nfunction getYouTubeIFrames() {\n\treturn $.findByBem('full-screen-gallery__slider__youtube-player', 'iframe', null, $gallery);\n}\n\nfunction getYouTubePlayerIFrame() {\n\treturn $.findByBem('full-screen-gallery', 'slider__youtube-player__iframe', null, $gallery);\n}\n\nfunction stopYouTubeVideos() {\n\tvar $iframes = getYouTubeIFrames();\n\t$iframes.each(function () {\n\t\tyoutube.stopVideo($(this).attr('id'));\n\t});\n}\n\nfunction initYouTubeVideos() {\n\tyoutube.init($gallery);\n\n\t// subscribe to the first youtube video play event and log it\n\tvar $iframes = getYouTubeIFrames();\n\t$iframes.each(function () {\n\t\t$(this).on('youtube-video-playing', function () {\n\t\t\tlogVideoPlay();\n\t\t\t$(this).off('youtube-video-playing');\n\t\t});\n\n\t\tif (layout.isMobile()) {\n\t\t\t$(this).attr('allowfullscreen', '');\n\t\t}\n\t});\n}\n\nfunction resetInactivityTimer() {\n\tif (inactivityTimer) {\n\t\ttimer.cancel(inactivityTimer);\n\t}\n\n\tinactivityTimer = timer.begin(function () {\n\t\tadvert.disableGalleryAdsAutoRefresh();\n\t}, 30000);\n}\n\nfunction updateAdSlideTimer() {\n\tvar durationMessage = '';\n\tvar $durationElement = $.findByBem(classNames.fullScreenGallery, 'adverts__remaining-ad-duration');\n\n\tif (remainingMobileAdDuration > 0) {\n\t\tdurationMessage = ' - You can skip in ' + remainingMobileAdDuration + 's';\n\t}\n\telse {\n\t\twindow.clearInterval(mobileAdDurationTimer);\n\t}\n\n\t$durationElement.text(durationMessage);\n\tremainingMobileAdDuration -= 1;\n}\n\nfunction mobileSlideChange() {\n\tif (!mobileAdsEnabled()) {\n\t\treturn;\n\t}\n\n\t// stop listening for index change events, they fire when dynamically adding & removing slides\n\tlistenForIndexChange = false;\n\n\tif (currentSlideContainsAd()) {\n\t\tviewCount = 0;\n\t\tremainingMobileAdDuration = mobileAdDuration / 1000;\n\n\t\tvar $context = $.findByBem(classNames.fullScreenGallery, 'slider');\n\t\tvar googleQueryId = $('.rsActiveSlide .mpu-ad', $context).data('google-query-id');\n\n\t\tif (!googleQueryId) {\n\t\t\tremoveAdSlides(slider.currSlideId);\n\t\t\tadvert.loadMobileGalleryAds($('.rsActiveSlide', $context));\n\t\t}\n\n\t\tupdateAdSlideTimer();\n\t\tmobileAdDurationTimer = setInterval(function () {\n\t\t\tupdateAdSlideTimer();\n\t\t}, 1000);\n\n\t\tsetTimeout(function () {\n\t\t\tenableNavigation();\n\t\t}, mobileAdDuration);\n\t}\n\telse if (viewCount >= mobileAdFrequency) {\n\t\tappendAdSlide();\n\t}\n\telse {\n\t\tremoveAdSlides();\n\t}\n\n\tlistenForIndexChange = true;\n}\n\nfunction onIndexChange() {\n\tstopYouTubeVideos();\n\tupdateCaption();\n\n\tviewCount++;\n\n\tif (layout.isMobile()) {\n\t\tmobileSlideChange();\n\t}\n\n\tif (!layout.isMobile() || (layout.isMobile() && !currentSlideContainsAd())) {\n\t\tif (isImageSlide(slider.currSlideId)) {\n\t\t\tinitPanzoom();\n\t\t}\n\n\t\tlogViewByContentType(slider.currSlideId);\n\t}\n\n\tresetInactivityTimer();\n}\n\nfunction onBeforeIndexChange(direction) {\n\tgetActivePanzoomContainer().panzoom(\"reset\");\n\n\tvar relativeDirection = direction;\n\tif (relativeDirection !== 'next' && relativeDirection !== 'prev') {\n\t\t// Drag gives target slide rather than direction so work out which way its going\n\t\tvar currentSlideIndex = slider.currSlideId;\n\n\t\tif (currentSlideIndex < direction) {\n\t\t\trelativeDirection = 'next';\n\t\t} else {\n\t\t\trelativeDirection = 'prev';\n\t\t}\n\t}\n\n\tif (layout.isMobile() && mobileAdsEnabled() && nextSlideContainsAd(relativeDirection)) {\n\t\tdisableNavigation();\n\t}\n}\n\nfunction onContentSet() {\n\tinitPanzoom();\n}\n\nfunction setYouTubeVideosFullscreenAttribute(allowFullScreen) {\n\tvar $iframes = getYouTubeIFrames();\n\t$iframes.each(function () {\n\t\tif (allowFullScreen) {\n\t\t\t$(this).attr('allowfullscreen', '');\n\t\t}\n\t\telse {\n\t\t\t$(this).removeAttr('allowfullscreen');\n\t\t}\n\t});\n}\n\nfunction shouldResizeVideoPlayer() {\n\tvar $sliderContainer = $.findByBem(classNames.fullScreenGallery, classNames.slider);\n\treturn $sliderContainer.hasBemClass(classNames.fullScreenGallery, classNames.slider, modifiers.videoLoaded) && $sliderContainer.is(':visible');\n}\n\nfunction adjustVideoSizeBasedOnUserResolution() {\n\tvar $sliderOverflow = $.findByBem(classNames.fullScreenGallery, classNames.slider).find('.' + classNames.royalSliderOverflow);\n\tvar videoContainerHeight = parseInt($sliderOverflow.css('height'), 10);\n\tvar videoContainerWidth = parseInt($sliderOverflow.css('width'), 10);\n\n\tif (!shouldResizeVideoPlayer()) {\n\t\treturn;\n\t}\n\n\tvar percentage = 0.75;\n\tvar heightRatio = 9 / 16;\n\tvar widthRatio = 16 / 9;\n\tvar height = 0;\n\tvar width = 0;\n\n\t//reduce the size of the Youtube video container by 25%. \n\t//This will provide us with the available dimensions in order to fit the video.\n\t//The higher is the percentage the smaller the video will be.\n\t//25% is a good balance between reduction and video size.\n\tvar availableHeight = videoContainerHeight * percentage;\n\tvar availableWidth = videoContainerWidth * percentage;\n\n\t//the top margin needs to be calculate.The difference between the Youtube video container will give the absolute distance between \n\t// the X and Y. By dividing to 100 we will take the 100th part of that. It is similar to a percentage.\n\t//Eg 1600 - 500 = 1100; margin = 1100 / 100 = 11\n\tvar marginTop = Math.abs(videoContainerWidth - videoContainerHeight) / 100;\n\n\t//Calculate the required height from the container width and multiply it by the heightRatio\n\tvar requiredHeight = videoContainerWidth * heightRatio;\n\n\tif (requiredHeight > availableHeight) {\n\t\t//if so calculate the width as a proportion of the availble height and the width ratio\n\t\t//the height remain unchanged.\n\t\twidth = availableHeight * widthRatio;\n\t\theight = availableHeight;\n\t} else {\n\t\t//otherwise calculate the height as a proportion of the availble width and the width ratio heightRatio\n\t\t//the width remain unchanged.\n\t\twidth = availableWidth;\n\t\theight = availableWidth * heightRatio;\n\t}\n\n\tvar ytiFrame = getYouTubePlayerIFrame();\n\tytiFrame.css({\n\t\theight: height + 'px',\n\t\t'margin-top': marginTop + 'rem',\n\t\twidth: width + 'px'\n\t});\n}\n\nfunction onWindowResize() {\n\tvar $thumbnails = $('.rsNav');\n\n\tif (isMobileLayout && !layout.isMobile()) {\n\t\t// handle window resize from small -> large\n\t\tremoveAdSlides();\n\t\t$.findByBem(classNames.fullScreenGallery, 'adverts__inner__mpu').html(placementHtml);\n\t\t$thumbnails.show();\n\t\tsetYouTubeVideosFullscreenAttribute(false);\n\t} else if (!isMobileLayout && layout.isMobile()) {\n\t\t// handle window resize from large -> small\n\t\t$thumbnails.hide();\n\t\tsetYouTubeVideosFullscreenAttribute(true);\n\t\tadvert.disableGalleryAdsAutoRefresh();\n\t}\n\n\tsetTransitionSpeed();\n\n\tif (!layout.isMobile()) {\n\t\tadjustVideoSizeBasedOnUserResolution();\n\t} else {\n\t\tvar ytiFrame = getYouTubePlayerIFrame();\n\t\tytiFrame.css({\n\t\t\theight: '',\n\t\t\tmargin: '',\n\t\t\twidth: ''\n\t\t});\n\t}\n\n\tisMobileLayout = layout.isMobile();\n}\n\nfunction closeGallery() {\n\n\tadvert.resetTargeting();\n\tadvert.disableGalleryAdsAutoRefresh();\n\n\tif (inactivityTimer) {\n\t\ttimer.cancel(inactivityTimer);\n\t}\n\n\tif (layout.isMobile()) {\n\t\tlistenForIndexChange = false;\n\t\tremoveAdSlides();\n\t\tlistenForIndexChange = true;\n\t\ttoggleMobileTopAd();\n\t}\n\n\t$(\"body\").off(\"touchmove\");\n\n\t$.findByBem(classNames.fullScreenGallery, 'container').fadeOut('slow');\n\t$.findByBem(classNames.fullScreenGallery, 'adverts__inner__mpu').html(placementHtml);\n\n\tstopYouTubeVideos();\n}\n\nfunction handleGalleryEscape(event) {\n\tif (!$gallery.is(':visible')) {\n\t\treturn;\n\t}\n\n\tvar isEscape = false;\n\n\tif (\"key\" in event && event.key) {\n\t\tisEscape = event.key === \"Escape\" || event.key === \"Esc\";\n\t} else {\n\t\tisEscape = event.keyCode === 27;\n\t}\n\n\tif (isEscape) {\n\t\tcloseGallery();\n\t}\n}\n\nfunction initGalleryControls() {\n\t$galleryControls = $.findByBem(classNames.fullScreenGallery, 'controls');\n\n\t$('[data-elem=\"prev\"]', $galleryControls).on('click.full-screen-gallery-prev', function () {\n\t\tif (isNavigationEnabled) {\n\t\t\tslider.prev();\n\t\t}\n\t});\n\n\t$('[data-elem=\"next\"]', $galleryControls).on('click.full-screen-gallery-next', function () {\n\t\tif (isNavigationEnabled) {\n\t\t\tslider.next();\n\t\t}\n\t});\n\n\t$('[data-elem=\"zoomIn\"]', $galleryControls).on('click.full-screen-gallery-zoomIn', function () {\n\t\tgetActivePanzoomContainer().panzoom('zoom');\n\t});\n\n\t$('[data-elem=\"zoomOut\"]', $galleryControls).on('click.full-screen-gallery-zoomOut', function () {\n\t\tgetActivePanzoomContainer().panzoom('zoom', true);\n\t});\n\n\t$('[data-elem=\"close\"]', $gallery).on('click.full-screen-gallery-close', function () {\n\t\tcloseGallery();\n\t});\n\n\t$('[data-elem=\"captionToggle\"]', $galleryControls).on('click.full-screen-gallery-captionToggle', function () {\n\t\tvar $caption = $.findByBem(classNames.fullScreenGallery, 'caption');\n\t\t$caption.slideToggle('slow', function () {\n\t\t\tshowCaption = $(this).is(':visible');\n\t\t});\n\t});\n\n\t$('[data-elem=\"thumbsToggle\"]', $galleryControls).on('click.full-screen-gallery-thumbsToggle', function () {\n\t\t$('.rsNav').slideToggle('slow');\n\t});\n}\n\nfunction initAdProperties() {\n\tvar $adverts = $.findByBem(classNames.fullScreenGallery, 'adverts__inner');\n\tplacementHtml = $adverts.findByBem(classNames.fullScreenGallery, 'adverts__inner__mpu').html();\n\tmobileAdFrequency = $adverts.data('mobile-ad-frequency');\n\tmobileAdDuration = $adverts.data('mobile-ad-duration');\n\tdesktopAdViewedDuration = $adverts.data('desktop-ad-viewed-duration');\n\tdesktopAdTimeout = $adverts.data('desktop-ad-timeout');\n}\n\nfunction initEvents() {\n\tslider.ev.on('rsBeforeMove', function (event, type) {\n\t\tonBeforeIndexChange(type);\n\t});\n\n\tslider.ev.on('rsAfterSlideChange', function () {\n\t\tif (listenForIndexChange) {\n\t\t\tonIndexChange();\n\t\t}\n\t});\n\n\tslider.ev.on('rsAfterContentSet', function () {\n\t\tif (listenForIndexChange) {\n\t\t\tonContentSet();\n\t\t}\n\t});\n\n\t$(window).on('resize', function () {\n\t\tsetTimeout(function () {\n\t\t\tonWindowResize();\n\t\t}, 250);\n\t});\n\n\t$(document).on('keydown.full-screen-gallery-escape', function (event) {\n\t\thandleGalleryEscape(event);\n\t});\n\n\tgetYouTubePlayerIFrame().on('load', function () {\n\t\tvar $sliderContainer = $.findByBem(classNames.fullScreenGallery, classNames.slider);\n\t\t$sliderContainer.addBemClass(classNames.fullScreenGallery, classNames.slider, modifiers.videoLoaded);\n\n\t\tif (!layout.isMobile()) {\n\t\t\tadjustVideoSizeBasedOnUserResolution();\n\t\t}\n\t});\n}\n\nfunction numImagesToPreload() {\n\tif (layout.isMobile()) {\n\t\treturn 2;\n\t}\n\n\treturn 4;\n}\n\nfunction watchInsuranceQuoteContainerSpace() {\n\t//watch mpu and hide insurance quote link if it is a dmpu\n\theightWatcher.watchElementHeight($.findByBem(classNames.fullScreenGallery, 'adverts__inner__mpu'), 2000, function () {\n\t\tif ($.findByBem(classNames.fullScreenGallery, 'adverts__inner__mpu').height() > 250) {\n\t\t\t$.findByBem(classNames.fullScreenGallery, 'insurance-quote-container').removeBemClass(classNames.fullScreenGallery, 'insurance-quote-container', 'show');\n\t\t\t$.findByBem(classNames.fullScreenGallery, 'insurance-quote-container').addBemClass(classNames.fullScreenGallery, 'insurance-quote-container', 'hide');\n\t\t}\n\t\telse {\n\t\t\t$.findByBem(classNames.fullScreenGallery, 'insurance-quote-container').removeBemClass(classNames.fullScreenGallery, 'insurance-quote-container', 'hide');\n\t\t\t$.findByBem(classNames.fullScreenGallery, 'insurance-quote-container').addBemClass(classNames.fullScreenGallery, 'insurance-quote-container', 'show');\n\t\t}\n\t});\n}\n\nfunction chooseImagesForScreensize() {\n\tvar screenSize = layout.getScreenSize();\n\t$('a.rsImg').each(function () {\n\t\tvar link = $(this);\n\t\tvar href = link.attr('data-href-' + screenSize);\n\t\tif (href) {\n\t\t\tlink.attr('href', href);\n\t\t}\n\t});\n}\n\nfunction loadRoyalSlider(callback) {\n\tchooseImagesForScreensize();\n\n\t$('.royalSlider').royalSlider({\n\t\tcontrolNavigation: 'thumbnails',\n\t\taddActiveClass: true,\n\t\tautoScaleSlider: true,\n\t\tloop: true,\n\t\timageScaleMode: 'fit',\n\t\timageAlignCenter: true,\n\t\tnavigateByClick: false,\n\t\tnumImagesToPreload: numImagesToPreload(),\n\t\tarrowsNav: false,\n\t\tkeyboardNavEnabled: true,\n\t\tfadeinLoadedSlide: true,\n\t\tglobalCaption: true,\n\t\tglobalCaptionInside: true,\n\t\tcontrolsInside: false\n\t});\n\n\tslider = getSlider();\n\tinitGalleryControls();\n\tinitAdProperties();\n\tinitYouTubeVideos();\n\tinitEvents();\n\n\tupdateCaption();\n\n\tisMobileLayout = layout.isMobile();\n\n\tgalleryLoaded = true;\n\n\tcallback();\n}\n\nfunction openGalleryAtIndex(index, initialOpen, requestOrigin) {\n\n\tvar galleryTemplate = getGalleryTemplateName();\n\tadvert.overridePageType(galleryTemplate);\n\n\tif (typeof royalSlider !== 'undefined') {\n\t\tvar action = pageLocation ? 'Opened - ' + pageLocation : 'Opened';\n\t\tanalytics.trackEvent('Full Screen Gallery', action, requestOrigin);\n\n\t\tslider = getSlider();\n\n\t\tif (slider) {\n\t\t\t// If the requested index is the same as the current one then manually log the view and reset the inactivity timer. \n\t\t\t// If the gallery is already init'd it will fire an onChange event if the index is different.\n\t\t\tif (slider.currSlideId === index) {\n\t\t\t\tlogViewByContentType(slider.currSlideId);\n\t\t\t\tresetInactivityTimer();\n\t\t\t}\n\n\t\t\t// If this is the first time open and the first slide selected then\n\t\t\t// the index change event won't fire, manually increase the viewcount.\n\t\t\tif (initialOpen && index === 0) {\n\t\t\t\tviewCount = 1;\n\t\t\t}\n\n\t\t\ttoggleMobileTopAd();\n\t\t\tsetTransitionSpeed(0);\n\t\t\tslider.goTo(index);\n\t\t\tsetTransitionSpeed();\n\n\t\t\t$.findByBem(classNames.fullScreenGallery, 'container').fadeIn(300, function () {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tslider.updateSliderSize(true);\n\t\t\t\t\tslider.updateSliderSize(true); //this must be triggered twice as jQuery 3 changed the height/width calc, causing images to be too small\n\t\t\t\t}, 10);\n\n\t\t\t\t$('body').on('touchmove', function (event) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (layout.isMobile()) {\n\t\t\t\tadvert.loadMobileGalleryAds($gallery, true);\n\t\t\t} else {\n\t\t\t\tadvert.loadDesktopGalleryAds($gallery, desktopAdViewedDuration, desktopAdTimeout);\n\t\t\t}\n\n\t\t\twatchInsuranceQuoteContainerSpace();\n\n\t\t\tvar $sliderOverflow = $.findByBem(classNames.fullScreenGallery, classNames.slider).find('.' + classNames.royalSliderOverflow);\n\t\t\theightWatcher.watchElementHeight($sliderOverflow, 500, function () {\n\t\t\t\tadjustVideoSizeBasedOnUserResolution();\n\t\t\t});\n\t\t}\n\t}\n}\n\nfunction showIndex(index, requestOrigin) {\n\tindex = parseInt(index);\n\n\tif (!isNaN(index)) {\n\t\tif (!galleryLoaded) {\n\t\t\tloadRoyalSlider(function () {\n\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\topenGalleryAtIndex(index, true, requestOrigin);\n\t\t\t\t}, 100);\n\t\t\t});\n\t\t} else {\n\t\t\topenGalleryAtIndex(index, false, requestOrigin);\n\t\t}\n\t}\n}\n\nfunction initGalleryLinks(context) {\n\t$('a[data-gallery-index]', context).off('click.full-screen-gallery').on('click.full-screen-gallery', function (e) {\n\t\te.preventDefault();\n\n\t\tvar index = $(this).data('gallery-index');\n\t\tvar origin = $(this).data('gallery-launch-origin');\n\t\tpageLocation = $(this).data('gallery-page-location');\n\n\t\tshowIndex(index, origin);\n\t});\n}\n\nmodule.exports = {\n\tinit: function (context) {\n\t\t$gallery = $.findByBem(classNames.fullScreenGallery);\n\n\t\tif ($gallery.length > 0) {\n\t\t\tinitGalleryLinks(context);\n\t\t}\n\t},\n\n\topen: function (index) {\n\t\tif ($gallery.length > 0) {\n\t\t\tshowIndex(index);\n\t\t}\n\t}\n};","'use strict';\n\nvar $ = require('jquery');\nvar basePage = require('../pages/base-page.js');\nvar fullScreenGallery = require('../components/full-screen-gallery.js');\n\nbasePage.init = function() {\n\tbasePage.initBasePage();\n\n\tvar $context = $('#articlePage');\n\tfullScreenGallery.init($context);\n};\n\nmodule.exports = basePage;","'use strict';\n\nvar $ = require('jquery');\n\nvar players = {};\n\nfunction stopVideo(id) {\n\tvar player = players[id];\n\n\tif (player) {\n\t\tplayer.stopVideo();\n\t}\n}\n\nfunction onPlayerStateChange(event, id) {\n\tif (event.data === window.YT.PlayerState.PLAYING) {\n\t\t$('#' + id).trigger('youtube-video-playing');\n\t}\n}\n\nfunction init($context) {\n\t$('iframe[src*=\"youtube\"]', $context).each(function() {\n\t\tvar id = $(this).attr('id');\n\t\tvar jsApiEnabled = $(this).attr('src').indexOf('enablejsapi=1') > 0;\n\n\t\tif (jsApiEnabled) {\n\t\t\tplayers[id] = new window.YT.Player(id, {\n\t\t\t\tevents: {\n\t\t\t\t\t'onStateChange': function (event) {\n\t\t\t\t\t\tonPlayerStateChange(event, id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nmodule.exports = {\n\tinit: function ($context) {\n\t\twindow.onYouTubeIframeAPIReady = init($context);\n\t},\n\n\tstopVideo: function (id) {\n\t\tstopVideo(id);\n\t}\n};","/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n if ( typeof define === 'function' && define.amd ) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node/CommonJS style for Browserify\n module.exports = factory;\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function ($) {\n\n var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n slice = Array.prototype.slice,\n nullLowestDeltaTimeout, lowestDelta;\n\n if ( $.event.fixHooks ) {\n for ( var i = toFix.length; i; ) {\n $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n }\n }\n\n var special = $.event.special.mousewheel = {\n version: '3.1.12',\n\n setup: function() {\n if ( this.addEventListener ) {\n for ( var i = toBind.length; i; ) {\n this.addEventListener( toBind[--i], handler, false );\n }\n } else {\n this.onmousewheel = handler;\n }\n // Store the line height and page height for this particular element\n $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n },\n\n teardown: function() {\n if ( this.removeEventListener ) {\n for ( var i = toBind.length; i; ) {\n this.removeEventListener( toBind[--i], handler, false );\n }\n } else {\n this.onmousewheel = null;\n }\n // Clean up the data we added to the element\n $.removeData(this, 'mousewheel-line-height');\n $.removeData(this, 'mousewheel-page-height');\n },\n\n getLineHeight: function(elem) {\n var $elem = $(elem),\n $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n if (!$parent.length) {\n $parent = $('body');\n }\n return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n },\n\n getPageHeight: function(elem) {\n return $(elem).height();\n },\n\n settings: {\n adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n normalizeOffset: true // calls getBoundingClientRect for each event\n }\n };\n\n $.fn.extend({\n mousewheel: function(fn) {\n return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n },\n\n unmousewheel: function(fn) {\n return this.unbind('mousewheel', fn);\n }\n });\n\n\n function handler(event) {\n var orgEvent = event || window.event,\n args = slice.call(arguments, 1),\n delta = 0,\n deltaX = 0,\n deltaY = 0,\n absDelta = 0,\n offsetX = 0,\n offsetY = 0;\n event = $.event.fix(orgEvent);\n event.type = 'mousewheel';\n\n // Old school scrollwheel delta\n if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }\n if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }\n if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }\n if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n deltaX = deltaY * -1;\n deltaY = 0;\n }\n\n // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n delta = deltaY === 0 ? deltaX : deltaY;\n\n // New school wheel delta (wheel event)\n if ( 'deltaY' in orgEvent ) {\n deltaY = orgEvent.deltaY * -1;\n delta = deltaY;\n }\n if ( 'deltaX' in orgEvent ) {\n deltaX = orgEvent.deltaX;\n if ( deltaY === 0 ) { delta = deltaX * -1; }\n }\n\n // No change actually happened, no reason to go any further\n if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n // Need to convert lines and pages to pixels if we aren't already in pixels\n // There are three delta modes:\n // * deltaMode 0 is by pixels, nothing to do\n // * deltaMode 1 is by lines\n // * deltaMode 2 is by pages\n if ( orgEvent.deltaMode === 1 ) {\n var lineHeight = $.data(this, 'mousewheel-line-height');\n delta *= lineHeight;\n deltaY *= lineHeight;\n deltaX *= lineHeight;\n } else if ( orgEvent.deltaMode === 2 ) {\n var pageHeight = $.data(this, 'mousewheel-page-height');\n delta *= pageHeight;\n deltaY *= pageHeight;\n deltaX *= pageHeight;\n }\n\n // Store lowest absolute delta to normalize the delta values\n absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n if ( !lowestDelta || absDelta < lowestDelta ) {\n lowestDelta = absDelta;\n\n // Adjust older deltas if necessary\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n lowestDelta /= 40;\n }\n }\n\n // Adjust older deltas if necessary\n if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n // Divide all the things by 40!\n delta /= 40;\n deltaX /= 40;\n deltaY /= 40;\n }\n\n // Get a whole, normalized value for the deltas\n delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);\n deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n // Normalise offsetX and offsetY properties\n if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n var boundingRect = this.getBoundingClientRect();\n offsetX = event.clientX - boundingRect.left;\n offsetY = event.clientY - boundingRect.top;\n }\n\n // Add information to the event object\n event.deltaX = deltaX;\n event.deltaY = deltaY;\n event.deltaFactor = lowestDelta;\n event.offsetX = offsetX;\n event.offsetY = offsetY;\n // Go ahead and set deltaMode to 0 since we converted to pixels\n // Although this is a little odd since we overwrite the deltaX/Y\n // properties with normalized deltas.\n event.deltaMode = 0;\n\n // Add event and delta to the front of the arguments\n args.unshift(event, delta, deltaX, deltaY);\n\n // Clearout lowestDelta after sometime to better\n // handle multiple device types that give different\n // a different lowestDelta\n // Ex: trackpad = 3 and mouse wheel = 120\n if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n return ($.event.dispatch || $.event.handle).apply(this, args);\n }\n\n function nullLowestDelta() {\n lowestDelta = null;\n }\n\n function shouldAdjustOldDeltas(orgEvent, absDelta) {\n // If this is an older event and the delta is divisable by 120,\n // then we are assuming that the browser is treating this as an\n // older mouse wheel event and that we should divide the deltas\n // by 40 to try and get a more usable deltaFactor.\n // Side note, this actually impacts the reported scroll distance\n // in older browsers and can cause scrolling to be slower than native.\n // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n }\n\n}));\n","module.exports = React;","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t286: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkparkers\"] = self[\"webpackChunkparkers\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [258], () => (__webpack_require__(1680)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","global","window","this","jQuery","$","document","datakey","slice","Array","prototype","rIE11","supportsInputEvent","test","navigator","userAgent","input","createElement","setAttribute","oninput","rupper","rsvg","floating","commaSpace","rmatrix","RegExp","createResetOptions","opts","options","range","animate","extend","Matrix","a","b","c","d","e","f","g","h","i","type","elements","Vector","x","y","z","Panzoom","elem","nodeType","error","contains","data","defaults","$elem","$set","length","$doc","ownerDocument","$parent","parent","isSVG","namespaceURI","nodeName","toLowerCase","panning","_buildTransform","_transform","cssProps","transform","replace","_buildTransition","resetDimensions","$empty","self","each","name","enable","scale","getMatrix","_checkPanWhenZoomed","matrix","isVector","inverse","determinant","eventNamespace","transition","cursor","disablePan","disableZoom","disableXAxis","disableYAxis","which","increment","exponential","panOnlyWhenZoomed","minScale","maxScale","rangeStep","duration","easing","contain","constructor","instance","_initStyle","_bind","disabled","disable","_resetStyle","_unbind","isDisabled","destroy","removeData","container","getBoundingClientRect","dims","absScale","Math","abs","dimensions","width","height","left","css","top","border","bottom","right","margin","reset","setMatrix","_origTransform","silent","_trigger","resetZoom","origMatrix","dValue","zoom","resetPan","pan","setTransform","style","getTransform","transformElem","attr","exec","shift","spaceWLeft","spaceWRight","scaleDiff","conWidth","conHeight","zoomAspectW","zoomAspectH","offsetWidth","spaceHTop","spaceHBottom","max","min","$zoomRange","val","originalMatrix","join","isPanning","off","_transition","relative","startScale","focal","clientX","clientY","clientV","surfaceM","o","parentOffset","offset","offsetM","scrollLeft","scrollTop","surfaceV","scaleBy","noSetRange","option","key","value","arguments","undefined","_setOptions","proxy","toDisable","styles","overflow","position","ns","str_down","str_start","str_click","events","$reset","m","isFunction","touches","originalEvent","preventDefault","stopPropagation","_startMove","contextmenu","on","step","prop","$zoomIn","$zoomOut","add","startTransform","_getDistance","touch1","touch2","sqrt","pow","_getMiddle","event","triggerHandler","concat","call","moveEvent","endEvent","startDistance","startMiddle","startPageX","startPageY","touch","original","origPageX","origPageY","panOptions","setStart","pageX","pageY","coords","middle","diff","first","second","round","matrixEquals","fn","panzoom","args","ret","charAt","apply","push","factory","advert","analytics","config","heightWatcher","layout","tagManager","youtube","timer","royalSlider","slider","$gallery","$galleryControls","placementHtml","mobileAdFrequency","mobileAdDuration","remainingMobileAdDuration","desktopAdViewedDuration","desktopAdTimeout","mobileAdDurationTimer","inactivityTimer","pageLocation","classNames","modifiers","galleryLoaded","isMobileLayout","listenForIndexChange","isNavigationEnabled","showCaption","viewCount","gaPageOverride","dataLayer","page","galleryGaLocation","getSlider","findByBem","toggleMobileTopAd","isMobile","toggle","mobileAdsEnabled","isImageSlide","id","slides","content","filter","getGalleryTemplateName","galleryTemplate","location","pathname","startsWith","logView","segment","pageTemplateName","templateName","pushToDataLayer","trackPageview","trackIpsosIrisPageView","logViewByContentType","slideIndex","imageIndex","action","trackEvent","vehicle","modelName","logVideoSlideView","logSlideView","removeAdSlides","retainIndexId","adSlides","grep","slide","index","removeSlide","slideContainsAd","currentSlideContainsAd","currSlideId","setTransitionSpeed","speed","transitionSpeed","st","updateCaption","$caption","caption","text","trim","slideUp","is","slideDown","getActivePanzoomContainer","initPanzoom","$panzoomContainer","$activeImage","wrap","delta","wheelDelta","zoomOut","deltaY","getYouTubeIFrames","getYouTubePlayerIFrame","stopYouTubeVideos","stopVideo","resetInactivityTimer","cancel","begin","disableGalleryAdsAutoRefresh","updateAdSlideTimer","durationMessage","$durationElement","clearInterval","setYouTubeVideosFullscreenAttribute","allowFullScreen","removeAttr","adjustVideoSizeBasedOnUserResolution","$sliderOverflow","find","videoContainerHeight","parseInt","videoContainerWidth","$sliderContainer","hasBemClass","heightRatio","availableHeight","availableWidth","marginTop","closeGallery","resetTargeting","fadeOut","html","initEvents","ev","direction","relativeDirection","previousSlideId","numSlides","nextSlideId","nextSlideContainsAd","sliderDrag","sliderTouch","addClass","onBeforeIndexChange","$context","loadMobileGalleryAds","setInterval","setTimeout","removeClass","remove","appendSlide","mobileSlideChange","$thumbnails","show","hide","keyCode","handleGalleryEscape","addBemClass","loadRoyalSlider","callback","screenSize","$adverts","getScreenSize","link","href","controlNavigation","addActiveClass","autoScaleSlider","loop","imageScaleMode","imageAlignCenter","navigateByClick","numImagesToPreload","arrowsNav","keyboardNavEnabled","fadeinLoadedSlide","globalCaption","globalCaptionInside","controlsInside","prev","next","slideToggle","init","openGalleryAtIndex","initialOpen","requestOrigin","overridePageType","goTo","fadeIn","updateSliderSize","loadDesktopGalleryAds","watchElementHeight","removeBemClass","showIndex","isNaN","module","exports","context","origin","initGalleryLinks","open","basePage","fullScreenGallery","initBasePage","players","onYouTubeIframeAPIReady","indexOf","YT","Player","PlayerState","PLAYING","trigger","onPlayerStateChange","player","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","documentMode","fixHooks","mouseHooks","special","mousewheel","version","setup","addEventListener","handler","onmousewheel","getLineHeight","getPageHeight","teardown","removeEventListener","settings","adjustOldDeltas","normalizeOffset","orgEvent","deltaX","absDelta","offsetX","offsetY","fix","detail","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","pageHeight","shouldAdjustOldDeltas","boundingRect","deltaFactor","unshift","clearTimeout","nullLowestDelta","dispatch","handle","bind","unmousewheel","unbind","React","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","r","definition","defineProperty","enumerable","get","globalThis","Function","obj","hasOwnProperty","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","__webpack_exports__"],"sourceRoot":""}