PageSourceSearch

https://stjohnscardiff.wales/files/stacks_page_page0.js?rwcache=810910310

js stjohnscardiff.wales collected 2026-09-24 12:54:41 UTC 73,491 bytes, 1,649 lines download raw bytes

vendor: 5,004 bytes, lines 1-138
1//
2// jarallax js
3//
4
5/*!
6 * Name    : Just Another Parallax [Jarallax]
7 * Version : 1.12.2
8 * Author  : nK <https://nkdev.info>
9 * GitHub  : https://github.com/nk-o/jarallax
10 */
11/******/ (function(modules) { // webpackBootstrap
12/******/ 	// The module cache
13/******/ 	var installedModules = {};
14/******/
15/******/ 	// The require function
16/******/ 	function __webpack_require__(moduleId) {
17/******/
18/******/ 		// Check if module is in cache
19/******/ 		if(installedModules[moduleId]) {
20/******/ 			return installedModules[moduleId].exports;
21/******/ 		}
22/******/ 		// Create a new module (and put it into the cache)
23/******/ 		var module = installedModules[moduleId] = {
24/******/ 			i: moduleId,
25/******/ 			l: false,
26/******/ 			exports: {}
27/******/ 		};
28/******/
29/******/ 		// Execute the module function
30/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31/******/
32/******/ 		// Flag the module as loaded
33/******/ 		module.l = true;
34/******/
35/******/ 		// Return the exports of the module
36/******/ 		return module.exports;
37/******/ 	}
38/******/
39/******/
40/******/ 	// expose the modules object (__webpack_modules__)
41/******/ 	__webpack_require__.m = modules;
42/******/
43/******/ 	// expose the module cache
44/******/ 	__webpack_require__.c = installedModules;
45/******/
46/******/ 	// define getter function for harmony exports
47/******/ 	__webpack_require__.d = function(exports, name, getter) {
48/******/ 		if(!__webpack_require__.o(exports, name)) {
49/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
50/******/ 		}
51/******/ 	};
52/******/
53/******/ 	// define __esModule on exports
54/******/ 	__webpack_require__.r = function(exports) {
55/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
56/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
57/******/ 		}
58/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
59/******/ 	};
60/******/
61/******/ 	// create a fake namespace object
62/******/ 	// mode & 1: value is a module id, require it
63/******/ 	// mode & 2: merge all properties of value into the ns
64/******/ 	// mode & 4: return value when already ns object
65/******/ 	// mode & 8|1: behave like require
66/******/ 	__webpack_require__.t = function(value, mode) {
67/******/ 		if(mode & 1) value = __webpack_require__(value);
68/******/ 		if(mode & 8) return value;
69/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
70/******/ 		var ns = Object.create(null);
71/******/ 		__webpack_require__.r(ns);
72/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
73/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
74/******/ 		return ns;
75/******/ 	};
76/******/
77/******/ 	// getDefaultExport function for compatibility with non-harmony modules
78/******/ 	__webpack_require__.n = function(module) {
79/******/ 		var getter = module && module.__esModule ?
80/******/ 			function getDefault() { return module['default']; } :
81/******/ 			function getModuleExports() { return module; };
82/******/ 		__webpack_require__.d(getter, 'a', getter);
83/******/ 		return getter;
84/******/ 	};
85/******/
86/******/ 	// Object.prototype.hasOwnProperty.call
87/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
88/******/
89/******/ 	// __webpack_public_path__
90/******/ 	__webpack_require__.p = "";
91/******/
92/******/
93/******/ 	// Load entry module and return exports
94/******/ 	return __webpack_require__(__webpack_require__.s = 10);
95/******/ })
96/************************************************************************/
97/******/ ([
98/* 0 */,
99/* 1 */,
100/* 2 */
101/***/ (function(module, exports) {
102
103    module.exports = function (callback) {
104        if (document.readyState === 'complete' || document.readyState === 'interactive') {
105          // Already ready or interactive, execute callback
106          callback.call();
107        } else if (document.attachEvent) {
108          // Old browsers
109          document.attachEvent('onreadystatechange', function () {
110            if (document.readyState === 'interactive') callback.call();
111          });
112        } else if (document.addEventListener) {
113          // Modern browsers
114          document.addEventListener('DOMContentLoaded', callback);
115        }
116      };
117      
118      /***/ }),
119      /* 3 */
120      /***/ (function(module, exports, __webpack_require__) {
121      
122      /* WEBPACK VAR INJECTION */(function(global) {var win;
123      
124      if (typeof window !== "undefined") {
125        win = window;
126      } else if (typeof global !== "undefined") {
127        win = global;
128      } else if (typeof self !== "undefined") {
129        win = self;
130      } else {
131        win = {};
132      }
133      
134      module.exports = win;
135      /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(4)))
136      
137      /***/ }),
138      /* 4 */
139      /***/ (function(module, exports) {
140      
141      function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
142      
143      var g; // This works in non-strict mode
144      
145      g = function () {
146        return this;
147      }();
148      
149      try {
150        // This works if eval is allowed (see CSP)
151        g = g || new Function("return this")();
152      } catch (e) {
153        // This works if the window reference is available
154        if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") g = window;
155      } // g can still be undefined, but nothing to do about it...
156      // We return undefined, instead of nothing here, so it's
157      // easier to handle this case. if(!global) { ...}
158      
159      
160      module.exports = g;
161      
162      /***/ }),
163      /* 5 */,
164      /* 6 */,
165      /* 7 */,
166      /* 8 */,
167      /* 9 */,
168      /* 10 */
169      /***/ (function(module, exports, __webpack_require__) {
170      
171      module.exports = __webpack_require__(11);
172      
173      
174      /***/ }),
175      /* 11 */
176      /***/ (function(module, __webpack_exports__, __webpack_require__) {
177      
178      "use strict";
179      __webpack_require__.r(__webpack_exports__);
180      /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
181      /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lite_ready__WEBPACK_IMPORTED_MODULE_0__);
182      /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
183      /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_1__);
184      /* harmony import */ var _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12);
185      function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
186      
187      
188      
189       // no conflict
190      
191      var oldPlugin = global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax;
192      global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax = _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"];
193      
194      global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax.noConflict = function () {
195        global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax = oldPlugin;
196        return this;
197      }; // jQuery support
198      
199      
200      if ('undefined' !== typeof global__WEBPACK_IMPORTED_MODULE_1__["jQuery"]) {
201        var jQueryPlugin = function jQueryPlugin() {
202          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
203            args[_key] = arguments[_key];
204          }
205      
206          Array.prototype.unshift.call(args, this);
207          var res = _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"].apply(global__WEBPACK_IMPORTED_MODULE_1__["window"], args);
208          return 'object' !== _typeof(res) ? res : this;
209        };
210      
211        jQueryPlugin.constructor = _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"].constructor; // no conflict
212      
213        var oldJqPlugin = global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax;
214        global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax = jQueryPlugin;
215      
216        global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax.noConflict = function () {
217          global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax = oldJqPlugin;
218          return this;
219        };
220      } // data-jarallax initialization
221      
222      
223      lite_ready__WEBPACK_IMPORTED_MODULE_0___default()(function () {
224        Object(_jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"])(document.querySelectorAll('[data-jarallax]'));
225      });
226      
227      /***/ }),
228      /* 12 */
229      /***/ (function(module, __webpack_exports__, __webpack_require__) {
230      
231      "use strict";
232      __webpack_require__.r(__webpack_exports__);
233      /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
234      /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lite_ready__WEBPACK_IMPORTED_MODULE_0__);
235      /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
236      /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_1__);
237      function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
238      
239      function _nonIterableRest() { throw new TypeError("Invalid attempt to de
239structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
240      
241      function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
242      
243      function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
244      
245      function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
246      
247      function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
248      
249      function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
250      
251      function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
252      
253      function _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); } }
254      
255      function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
256      
257      
258      
259      var navigator = global__WEBPACK_IMPORTED_MODULE_1__["window"].navigator;
260      var isIE = -1 < navigator.userAgent.indexOf('MSIE ') || -1 < navigator.userAgent.indexOf('Trident/') || -1 < navigator.userAgent.indexOf('Edge/');
261      var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
262      
263      var supportTransform = function () {
264        var prefixes = 'transform WebkitTransform MozTransform'.split(' ');
265        var div = document.createElement('div');
266      
267        for (var i = 0; i < prefixes.length; i += 1) {
268          if (div && div.style[prefixes[i]] !== undefined) {
269            return prefixes[i];
270          }
271        }
272      
273        return false;
274      }();
275      
276      var $deviceHelper;
277      /**
278       * The most popular mobile browsers changes height after page scroll and this generates image jumping.
279       * We can fix it using this workaround with vh units.
280       */
281      
282      function getDeviceHeight() {
283        if (!$deviceHelper && document.body) {
284          $deviceHelper = document.createElement('div');
285          $deviceHelper.style.cssText = 'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;';
286          document.body.appendChild($deviceHelper);
287        }
288      
289        return ($deviceHelper ? $deviceHelper.clientHeight : 0) || global__WEBPACK_IMPORTED_MODULE_1__["window"].innerHeight || document.documentElement.clientHeight;
290      } // Window height data
291      
292      
293      var wndH;
294      
295      function updateWndVars() {
296        if (isMobile) {
297          wndH = getDeviceHeight();
298        } else {
299          wndH = global__WEBPACK_IMPORTED_MODULE_1__["window"].innerHeight || document.documentElement.clientHeight;
300        }
301      }
302      
303      updateWndVars();
304      global__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('resize', updateWndVars);
305      global__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('orientationchange', updateWndVars);
306      global__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('load', updateWndVars);
307      lite_ready__WEBPACK_IMPORTED_MODULE_0___default()(function () {
308        updateWndVars({
309          type: 'dom-loaded'
310        });
311      }); // list with all jarallax instances
312      // need to render all in one scroll/resize event
313      
314      var jarallaxList = []; // get all parents of the element.
315      
316      function getParents(elem) {
317        var parents = [];
318      
319        while (null !== elem.parentElement) {
320          elem = elem.parentElement;
321      
322          if (1 === elem.nodeType) {
323            parents.push(elem);
324          }
325        }
326      
327        return parents;
328      }
329      
330      function updateParallax() {
331        if (!jarallaxList.length) {
332          return;
333        }
334      
335        jarallaxList.forEach(function (data, k) {
336          var instance = data.instance,
337              oldData = data.oldData;
338          var clientRect = instance.$item.getBoundingClientRect();
339          var newData = {
340            width: clientRect.width,
341            height: clientRect.height,
342            top: clientRect.top,
343            bottom: clientRect.bottom,
344            wndW: global__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth,
345            wndH: wndH
346          };
347          var isResized = !oldData || oldData.wndW !== newData.wndW || oldData.wndH !== newData.wndH || oldData.width !== newData.width || oldData.height !== newData.height;
348          var isScrolled = isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom;
349          jarallaxList[k].oldData = newData;
350      
351          if (isResized) {
352            instance.onResize();
353          }
354      
355          if (isScrolled) {
356            instance.onScroll();
357          }
358        });
359        global__WEBPACK_IMPORTED_MODULE_1__["window"].requestAnimationFrame(updateParallax);
360      }
361      
362      var instanceID = 0; // Jarallax class
363      
364      var Jarallax = /*#__PURE__*/function () {
365        function Jarallax(item, userOptions) {
366          _classCallCheck(this, Jarallax);
367      
368          var self = this;
369          self.instanceID = instanceID;
370          instanceID += 1;
371          self.$item = item;
372          self.defaults = {
373            type: 'scroll',
374            // type of parallax: scroll, scale, opacity, scale-opacity, scroll-opacity
375            speed: 0.5,
376            // supported value from -1 to 2
377            imgSrc: null,
378            imgElement: '.jarallax-img',
379            imgSize: 'cover',
380            imgPosition: '50% 50%',
381            imgRepeat: 'no-repeat',
382            // supported only for background, not for <img> tag
383            keepImg: false,
384            // keep <img> tag in it's default place
385            elementInViewport: null,
386            zIndex: -100,
387            disableParallax: false,
388            disableVideo: false,
389            // video
390            videoSrc: null,
391            videoStartTime: 0,
392            videoEndTime: 0,
393            videoVolume: 0,
394            videoLoop: true,
395            videoPlayOnlyVisible: true,
396            videoLazyLoading: true,
397            // events
398            onScroll: null,
399            // function(calculations) {}
400            onInit: null,
401            // function() {}
402            onDestroy: null,
403            // function() {}
404            onCoverImage: null // function() {}
405      
406          }; // prepare data-options
407      
408          var dataOptions = self.$item.dataset || {};
409          var pureDataOptions = {};
410          Object.keys(dataOptions).forEach(function (key) {
411            var loweCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);
412      
413            if (loweCaseOption && 'undefined' !== typeof self.defaults[loweCaseOption]) {
414              pureDataOptions[loweCaseOption] = dataOptions[key];
415            }
416          });
417          self.options = self.extend({}, self.defaults, pureDataOptions, userOptions);
418          self.pureOptions = self.extend({}, self.options); // prepare 'true' and 'false' strings to boolean
419      
420          Object.keys(self.options).forEach(function (key) {
421            if ('true' === self.options[key]) {
422              self.options[key] = true;
423            } else if ('false' === self.options[key]) {
424              self.options[key] = false;
425            }
426          }); // fix speed option [-1.0, 2.0]
427      
428          self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed))); // prepare disableParallax callback
429      
430          if ('string' === typeof self.options.disableParallax) {
431            self.options.disableParallax = new RegExp(self.options.disableParallax);
432          }
433      
434          if (self.options.disableParallax instanceof RegExp) {
435            var disableParallaxRegexp = self.options.disableParallax;
436      
437            self.options.disableParallax = function () {
438              return disableParallaxRegexp.test(navigator.userAgent);
439            };
440          }
441      
442          if ('function' !== typeof self.options.disableParallax) {
443            self.options.disableParallax = function () {
444              return false;
445            };
446          } // prepare disableVideo callback
447      
448      
449          if ('string' === typeof self.options.disableVideo) {
450            self.options.disableVideo = new RegExp(self.options.disableVideo);
451          }
452      
453          if (self.options.disableVideo instanceof RegExp) {
454            var disableVideoRegexp = self.options.disableVideo;
455      
456            self.options.disableVideo = function () {
457              return disableVideoRegexp.test(navigator.userAgent);
458            };
459          }
460      
461          if ('function' !== typeof self.options.disableVideo) {
462            self.options.disableVideo = function () {
463              return false;
464            };
465          } // custom element to check if parallax in viewport
466      
467      
468          var elementInVP = self.options.elementInViewport; // get first item from array
469      
470          if (elementInVP && 'object' === _typeof(elementInVP) && 'undefined' !== typeof elementInVP.length) {
471            var _elementInVP = elementInVP;
472      
473            var _elementInVP2 = _slicedToArray(_elementInVP, 1);
474      
475            elementInVP = _elementInVP2[0];
476          } // check if dom element
477      
478      
479          if (!(elementInVP instanceof Element)) {
480            elementInVP = null;
481          }
482      
483          var nVer = navigator.appVersion;
484          var nAgt = navigator.userAgent;
485          var browserName  = navigator.appName;
486          var fullVersion  = ''+parseFloat(navigator.appVersion); 
487          var majorVersion = parseInt(navigator.appVersion,10);
488          var nameOffset,verOffset,ix;
489          
490          // In Opera, the true version is after "Opera" or after "Version"
491          if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
492           browserName = "Opera";
493           fullVersion = nAgt.substring(verOffset+6);
494           if ((verOffset=nAgt.indexOf("Version"))!=-1) 
495             fullVersion = nAgt.substring(verOffset+8);
496          }
497          // In MSIE, the true version is after "MSIE" in userAgent
498          else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
499           browserName = "Microsoft Internet Explorer";
500           fullVersion = nAgt.substring(verOffset+5);
501          }
502          // In Chrome, the true version is after "Chrome" 
503          else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
504           browserName = "Chrome";
505           fullVersion = nAgt.substring(verOffset+7);
506          }
507          // In Safari, the true version is after "Safari" or after "Version" 
508          else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
509           browserName = "Safari";
510           fullVersion = nAgt.substring(verOffset+7);
511           if ((verOffset=nAgt.indexOf("Version"))!=-1) 
512             fullVersion = nAgt.substring(verOffset+8);
513          }
514          // In Firefox, the true version is after "Firefox" 
515          else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
516           browserName = "Firefox";
517           fullVersion = nAgt.substring(verOffset+8);
518          }
519          // In most other browsers, "name/version" is at the end of userAgent 
520          else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
521                    (verOffset=nAgt.lastIndexOf('/')) ) 
522          {
523           browserName = nAgt.substring(nameOffset,verOffset);
524           fullVersion = nAgt.substring(verOffset+1);
525           if (browserName.toLowerCase()==browserName.toUpperCase()) {
526            browserName = navigator.appName;
527           }
528          }
529          // trim the fullVersion string at semicolon/space if present
530          if ((ix=fullVersion.indexOf(";"))!=-1)
531             fullVersion=fullVersion.substring(0,ix);
532          if ((ix=fullVersion.indexOf(" "))!=-1)
533             fullVersion=fullVersion.substring(0,ix);
534          
535          majorVersion = parseInt(''+fullVersion,10);
536          if (isNaN(majorVersion)) {
537           fullVersion  = ''+parseFloat(navigator.appVersion); 
538           majorVersion = parseInt(navigator.appVersion,10);
539          }
540
541        if (browserName == "Safari") {
542            if (majorVersion < 14) {
543                var posType = 'fixed';    
544            } else {
545                var posType = 'absolute';
546            }
547        } else if ((navigator.userAgent == "iPad") || (navigator.userAgent == "Android") || (navigator.userAgent == "iPhone")) {
548            var posType = 'absolute';
549        } else {
550            var posType = 'fixed';
551        }
552
553          
554          self.options.elementInViewport = elementInVP;
555          self.image = {
556            src: self.options.imgSrc || null,
557            $container: null,
558            useImgTag: false,
559            // position fixed is needed for the most of browsers because absolute position have glitches
560            // on MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75
561            // on mobile devices better scrolled with absolute position
562            position: posType
563          };
564      
565          if (self.initImg() && self.canInitParallax()) {
566            self.init();
567          }
568        } // add styles to element
569        // eslint-disable-next-line class-methods-use-this
570      
571      
572        _createClass(Jarallax, [{
573          key: "css",
574          value: function css(el, styles) {
575            if ('string' === typeof styles) {
576              return global__WEBPACK_IMPORTED_MODULE_1__["window"].getComputedStyle(el).getPropertyValue(styles);
577            } // add transform property with vendor prefix
578      
579      
580            if (styles.transform && supportTransform) {
581              styles[supportTransform] = styles.transform;
582            }
583      
584            Object.keys(styles).forEach(function (key) {
585              el.style[key] = styles[key];
586            });
587            return el;
588          } // Extend like jQuery.extend
589          // eslint-disable-next-line class-methods-use-this
590      
591        }, {
592          key: "extend",
593          value: function extend(out) {
594            for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
595              args[_key - 1] = arguments[_key];
596            }
597      
598            out = out || {};
599            Object.keys(args).forEach(function (i) {
600              if (!args[i]) {
601                return;
602              }
603      
604              Object.keys(args[i]).forEach(function (key) {
605                out[key] = args[i][key];
606              });
607            });
608            return out;
609          } // get window size and scroll position. Useful for extensions
610          // eslint-disable-next-line class-methods-use-this
611      
612        }, {
613          key: "getWindowData",
614          value: function getWindowData() {
615            return {
616              width: global__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth || document.documentElement.clientWidth,
617              height: wndH,
618              y: document.documentElement.scrollTop
619            };
620          } // Jarallax functions
621      
622        }, {
623          key: "initImg",
624          value: function initImg() {
625            var self = this; // find image element
626      
627            var $imgElement = self.options.imgElement;
628      
629            if ($imgElement && 'string' === typeof $imgElement) {
630              $imgElement = self.$item.querySelector($imgElement);
631            } // check if dom element
632      
633      
634            if (!($imgElement instanceof Element)) {
635              if (self.options.imgSrc) {
636                $imgElement = new Image();
637                $imgElement.src = self.options.imgSrc;
638              } else {
639                $imgElement = null;
640              }
641            }
642      
643            if ($imgElement) {
644              if (self.options.keepImg) {
645                self.image.$item = $imgElement.cloneNode(true);
646              } else {
647                self.image.$item = $imgElement;
648                self.image.$itemParent = $imgElement.parentNode;
649              }
650      
651              self.image.useImgTag = true;
652            } // true if there is img tag
653      
654      
655            if (self.image.$item) {
656              return true;
657            } // get image src
658      
659      
660            if (null === self.image.src) {
661              self.image.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
662              self.image.bgImage = self.css(self.$item, 'background-image');
663            }
664      
665            return !(!self.image.bgImage || 'none' === self.image.bgImage);
666          }
667        }, {
668          key: "canInitParallax",
669          value: function canInitParallax() {
670            return supportTransform && !this.options.disableParallax();
671          }
672        }, {
673          key: "init",
674          value: function init() {
675            var self = this;
676            var containerStyles = {
677              position: 'absolute',
678              top: 0,
679              left: 0,
680              width: '100%',
681              height: '100%',
682              overflow: 'hidden'
683            };
684            var imageStyles = {
685              pointerEvents: 'none',
686              transformStyle: 'preserve-3d',
687              backfaceVisibility: 'hidden',
688              willChange: 'transform,opacity'
689            };
690      
691            if (!self.options.keepImg) {
692              // save default user styles
693              var curStyle = self.$item.getAttribute('style');
694      
695              if (curStyle) {
696                self.$item.setAttribute('data-jarallax-original-styles', curStyle);
697              }
698      
699              if (self.image.useImgTag) {
700                var curImgStyle = self.image.$item.getAttribute('style');
701      
702                if (curImgStyle) {
703                  self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle);
704                }
705              }
706            } // set relative position and z-index to the parent
707      
708      
709            if ('static' === self.css(self.$item, 'position')) {
710              self.css(self.$item, {
711                position: 'relative'
712              });
713            }
714      
715            if ('auto' === self.css(self.$item, 'z-index')) {
716              self.css(self.$item, {
717                zIndex: 0
718              });
719            } // container for parallax image
720      
721      
722            self.image.$container = document.createElement('div');
723            self.css(self.image.$container, containerStyles);
724            self.css(self.image.$container, {
725              'z-index': self.options.zIndex
726            }); // fix for IE https://github.com/nk-o/jarallax/issues/110
727      
728            if (isIE) {
729              self.css(self.image.$container, {
730                opacity: 0.9999
731              });
732            }
733      
734            self.image.$container.setAttribute('id', "jarallax-container-".concat(self.instanceID));
735            self.$item.appendChild(self.image.$container); // use img tag
736      
737            if (self.image.useImgTag) {
738              imageStyles = self.extend({
739                'object-fit': self.options.imgSize,
740                'object-position': self.options.imgPosition,
741                // support for plugin https://github.com/bfred-it/object-fit-images
742                'font-family': "object-fit: ".concat(self.options.imgSize, "; object-position: ").concat(self.options.imgPosition, ";"),
743                'max-width': 'none'
744              }, containerStyles, imageStyles); // use div with background image
745            } else {
746              self.image.$item = document.createElement('div');
747      
748              if (self.image.src) {
749                imageStyles = self.extend({
750                  'background-position': self.options.imgPosition,
751                  'background-size': self.options.imgSize,
752                  'background-repeat': self.options.imgRepeat,
753                  'background-image': self.image.bgImage || "url(\"".concat(self.image.src, "\")")
754                }, containerStyles, imageStyles);
755              }
756            }
757      
758            if ('opacity' === self.options.type || 'scale' === self.options.type || 'scale-opacity' === self.options.type || 1 === self.options.speed) {
759              self.image.position = 'absolute';
760            } // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed)
761            //    discussion - https://github.com/nk-o/jarallax/issues/9
762            // 2. Check if parents have overflow scroll
763      
764      
765            if ('fixed' === self.image.position) {
766              var $parents = getParents(self.$item).filter(function (el) {
767                var styles = global__WEBPACK_IMPORTED_MODULE_1__["window"].getComputedStyle(el);
768                var parentTransform = styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform;
769                var overflowRegex = /(auto|scroll)/;
770                return parentTransform && 'none' !== parentTransform || overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x']);
771              });
772              self.image.position = $parents.length ? 'absolute' : 'fixed';
773            } // add position to parallax block
774      
775      
776            imageStyles.position = self.image.position; // insert parallax image
777      
778            self.css(self.image.$item, imageStyles);
779            self.image.$container.appendChild(self.image.$item); // set initial position and size
780      
781            self.onResize();
782            self.onScroll(true); // call onInit event
783      
784            if (self.options.onInit) {
785              self.options.onInit.call(self);
786            } // remove default user background
787      
788      
789            if ('none' !== self.css(self.$item, 'background-image')) {
790              self.css(self.$item, {
791                'background-image': 'none'
792              });
793            }
794      
795            self.addToParallaxList();
796          } // add to parallax instances list
797      
798        }, {
799          key: "addToParallaxList",
800          value: function addToParallaxList() {
801            jarallaxList.push({
802              instance: this
803            });
804      
805            if (1 === jarallaxList.length) {
806              global__WEBPACK_IMPORTED_MODULE_1__["window"].requestAnimationFrame(updateParallax);
807            }
808          } // remove from parallax instances list
809      
810        }, {
811          key: "removeFromParallaxList",
812          value: function removeFromParallaxList() {
813            var self = this;
814            jarallaxList.forEach(function (data, key) {
815              if (data.instance.instanceID === self.instanceID) {
816                jarallaxList.splice(key, 1);
817              }
818            });
819          }
820        }, {
821          key: "destroy",
822          value: function destroy() {
823            var self = this;
824            self.removeFromParallaxList(); // return styles on container as before jarallax init
825      
826            var originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');
827            self.$item.removeAttribute('data-jarallax-original-styles'); // null occurs if there is no style tag before jarallax init
828      
829            if (!originalStylesTag) {
830              self.$item.removeAttribute('style');
831            } else {
832              self.$item.setAttribute('style', originalStylesTag);
833            }
834      
835            if (self.image.useImgTag) {
836              // return styles on img tag as before jarallax init
837              var originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles');
838              self.image.$item.removeAttribute('data-jarallax-original-styles'); // null occurs if there is no style tag before jarallax init
839      
840              if (!originalStylesImgTag) {
841                self.image.$item.removeAttribute('style');
842              } else {
843                self.image.$item.setAttribute('style', originalStylesTag);
844              } // move img tag to its default position
845      
846      
847              if (self.image.$itemParent) {
848                self.image.$itemParent.appendChild(self.image.$item);
849              }
850            } // remove additional dom elements
851      
852      
853            if (self.$clipStyles) {
854              self.$clipStyles.parentNode.removeChild(self.$clipStyles);
855            }
856      
857            if (self.image.$container) {
858              self.image.$container.parentNode.removeChild(self.image.$container);
859            } // call onDestroy event
860      
861      
862            if (self.options.onDestroy) {
863              self.options.onDestroy.call(self);
864            } // delete jarallax from item
865      
866      
867            delete self.$item.jarallax;
868          } // it will remove some image overlapping
869          // overlapping occur due to an image position fixed inside absolute position element
870      
871        }, {
872          key: "clipContainer",
873          value: function clipContainer() {
874            // needed only when background in fixed position
875            if ('fixed' !== this.image.position) {
876              return;
877            }
878      
879            var self = this;
880            var rect = self.image.$container.getBoundingClientRect();
881            var width = rect.width,
882                height = rect.height;
883      
884            if (!self.$clipStyles) {
885              self.$clipStyles = document.createElement('style');
886              self.$clipStyles.setAttribute('type', 'text/css');
887              self.$clipStyles.setAttribute('id', "jarallax-clip-".concat(self.instanceID));
888              var head = document.head || document.getElementsByTagName('head')[0];
889              head.appendChild(self.$clipStyles);
890            }
891      
892            var styles = "#jarallax-container-".concat(self.instanceID, " {\n           clip: rect(0 ").concat(width, "px ").concat(height, "px 0);\n           clip: rect(0, ").concat(width, "px, ").concat(height, "px, 0);\n        }"); // add clip styles inline (this method need for support IE8 and less browsers)
893      
894            if (self.$clipStyles.styleSheet) {
895              self.$clipStyles.styleSheet.cssText = styles;
896            } else {
897              self.$clipStyles.innerHTML = styles;
898            }
899          }
900        }, {
901          key: "coverImage",
902          value: function coverImage() {
903            var self = this;
904            var rect = self.image.$container.getBoundingClientRect();
905            var contH = rect.height;
906            var speed = self.options.speed;
907            var isScroll = 'scroll' === self.options.type || 'scroll-opacity' === self.options.type;
908            var scrollDist = 0;
909            var resultH = contH;
910            var resultMT = 0; // scroll parallax
911      
912            if (isScroll) {
913              // scroll distance and height for image
914              if (0 > speed) {
915                scrollDist = speed * Math.max(contH, wndH);
916      
917                if (wndH < contH) {
918                  scrollDist -= speed * (contH - wndH);
919                }
920              } else {
921                scrollDist = speed * (contH + wndH);
922              } // size for scroll parallax
923      
924      
925              if (1 < speed) {
926                resultH = Math.abs(scrollDist - wndH);
927              } else if (0 > speed) {
928                resultH = scrollDist / speed + Math.abs(scrollDist);
929              } else {
930                resultH += (wndH - contH) * (1 - speed);
931              }
932      
933              scrollDist /= 2;
934            } // store scroll distance
935      
936      
937            self.parallaxScrollDistance = scrollDist; // vertical center
938      
939            if (isScroll) {
940              resultMT = (wndH - resultH) / 2;
941            } else {
942              resultMT = (contH - resultH) / 2;
943            } // apply result to item
944      
945      
946            self.css(self.image.$item, {
947              height: "".concat(resultH, "px"),
948              marginTop: "".concat(resultMT, "px"),
949              left: 'fixed' === self.image.position ? "".concat(rect.left, "px") : '0',
950              width: "".concat(rect.width, "px")
951            }); // call onCoverImage event
952      
953            if (self.options.onCoverImage) {
954              self.options.onCoverImage.call(self);
955            } // return some useful data. Used in the video cover function
956      
957      
958            return {
959              image: {
960                height: resultH,
961                marginTop: resultMT
962              },
963              container: rect
964            };
965          }
966        }, {
967          key: "isVisible",
968          value: function isVisible() {
969            return this.isElementInViewport || false;
970          }
971        }, {
972          key: "onScroll",
973          value: function onScroll(force) {
974            var self = this;
975            var rect = self.$item.getBoundingClientRect();
976            var contT = rect.top;
977            var contH = rect.height;
978            var styles = {}; // check if in viewport
979      
980            var viewportRect = rect;
981      
982            if (self.options.elementInViewport) {
983              viewportRect = self.options.elementInViewport.getBoundingClientRect();
984            }
985      
986            self.isElementInViewport = 0 <= viewportRect.bottom && 0 <= viewportRect.right && viewportRect.top <= wndH && viewportRect.left <= global__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth; // stop calculations if item is not in viewport
987      
988            if (force ? false : !self.isElementInViewport) {
989              return;
990            } // calculate parallax helping variables
991      
992      
993            var beforeTop = Math.max(0, contT);
994            var beforeTopEnd = Math.max(0, contH + contT);
995            var afterTop = Math.max(0, -contT);
996            var beforeBottom = Math.max(0, contT + contH - wndH);
997            var beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH));
998            var afterBottom = Math.max(0, -contT + wndH - contH);
999            var fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH)); // calculate on how percent of section is visible
1000      
1001            var visiblePercent = 1;
1002      
1003            if (contH < wndH) {
1004              visiblePercent = 1 - (afterTop || beforeBottom) / contH;
1005            } else if (beforeTopEnd <= wndH) {
1006              visiblePercent = beforeTopEnd / wndH;
1007            } else if (beforeBottomEnd <= wndH) {
1008              visiblePercent = beforeBottomEnd / wndH;
1009            } // opacity
1010      
1011      
1012            if ('opacity' === self.options.type || 'scale-opacity' === self.options.type || 'scroll-opacity' === self.options.type) {
1013              styles.transform = 'translate3d(0,0,0)';
1014              styles.opacity = visiblePercent;
1015            } // scale
1016      
1017      
1018            if ('scale' === self.options.type || 'scale-opacity' === self.options.type) {
1019              var scale = 1;
1020      
1021              if (0 > self.options.speed) {
1022                scale -= self.options.speed * visiblePercent;
1023              } else {
1024                scale += self.options.speed * (1 - visiblePercent);
1025              }
1026      
1027              styles.transform = "scale(".concat(scale, ") translate3d(0,0,0)");
1028            } // scroll
1029      
1030      
1031            if ('scroll' === self.options.type || 'scroll-opacity' === self.options.type) {
1032              var positionY = self.parallaxScrollDistance * fromViewportCenter; // fix if parallax block in absolute position
1033      
1034              if ('absolute' === self.image.position) {
1035                positionY -= contT;
1036              }
1037      
1038              styles.transform = "translate3d(0,".concat(positionY, "px,0)");
1039            }
1040      
1041            self.css(self.image.$item, styles); // call onScroll event
1042      
1043            if (self.options.onScroll) {
1044              self.options.onScroll.call(self, {
1045                section: rect,
1046                beforeTop: beforeTop,
1047                beforeTopEnd: beforeTopEnd,
1048                afterTop: afterTop,
1049                beforeBottom: beforeBottom,
1050                beforeBottomEnd: beforeBottomEnd,
1051                afterBottom: afterBottom,
1052                visiblePercent: visiblePercent,
1053                fromViewportCenter: fromViewportCenter
1054              });
1055            }
1056          }
1057        }, {
1058          key: "onResize",
1059          value: function onResize() {
1060            this.coverImage();
1061            this.clipContainer();
1062          }
1063        }]);
1064      
1065        return Jarallax;
1066      }(); // global definition
1067      
1068      
1069      var plugin = function plugin(items, options) {
1070        // check for dom element
1071        // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
1072        if ('object' === (typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement)) ? items instanceof HTMLElement : items && 'object' === _typeof(items) && null !== items && 1 === items.nodeType && 'string' === typeof items.nodeName) {
1073          items = [items];
1074        }
1075      
1076        var len = items.length;
1077        var k = 0;
1078        var ret;
1079      
1080        for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
1081          args[_key2 - 2] = arguments[_key2];
1082        }
1083      
1084        for (k; k < len; k += 1) {
1085          if ('object' === _typeof(options) || 'undefined' === typeof options) {
1086            if (!items[k].jarallax) {
1087              items[k].jarallax = new Jarallax(items[k], options);
1088            }
1089          } else if (items[k].jarallax) {
1090            // eslint-disable-next-line prefer-spread
1091            ret = items[k].jarallax[options].apply(items[k].jarallax, args);
1092          }
1093      
1094          if ('undefined' !== typeof ret) {
1095            return ret;
1096          }
1097        }
1098      
1099        return items;
1100      };
1101      
1102      plugin.constructor = Jarallax;
1103      /* harmony default export */ __webpack_exports__["default"] = (plugin);
1104      
1105      /***/ })
1106      /******/ ]);
1107
1108/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
1109jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.no
1109deName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window);
1110var stacks = {};
1111stacks.jQuery = jQuery.noConflict(true);
1112stacks.com_elixir_stacks_foundryBanner = {};
1113stacks.com_elixir_stacks_foundryBanner = (function(stack) {
1114var jQuery = stacks.jQuery;var $ = jQuery;/*
1115 * jQuery Easing v1.3.2 - http://gsgd.co.uk/sandbox/jquery/easing/
1116 * Open source under the BSD License.
1117 * Copyright © 2008 George McGinley Smith
1118 * All rights reserved.
1119 * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
1120*/
1121(function(h){h.easing.jswing=h.easing.swing;h.extend(h.easing,{def:"easeOutQuad",swing:function(e,a,c,b,d){return h.easing[h.easing.def](e,a,c,b,d)},easeInQuad:function(e,a,c,b,d){return b*(a/=d)*a+c},easeOutQuad:function(e,a,c,b,d){return-b*(a/=d)*(a-2)+c},easeInOutQuad:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a+c:-b/2*(--a*(a-2)-1)+c},easeInCubic:function(e,a,c,b,d){return b*(a/=d)*a*a+c},easeOutCubic:function(e,a,c,b,d){return b*((a=a/d-1)*a*a+1)+c},easeInOutCubic:function(e,a,c,b,d){return 1>
1122(a/=d/2)?b/2*a*a*a+c:b/2*((a-=2)*a*a+2)+c},easeInQuart:function(e,a,c,b,d){return b*(a/=d)*a*a*a+c},easeOutQuart:function(e,a,c,b,d){return-b*((a=a/d-1)*a*a*a-1)+c},easeInOutQuart:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a*a*a+c:-b/2*((a-=2)*a*a*a-2)+c},easeInQuint:function(e,a,c,b,d){return b*(a/=d)*a*a*a*a+c},easeOutQuint:function(e,a,c,b,d){return b*((a=a/d-1)*a*a*a*a+1)+c},easeInOutQuint:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a*a*a*a+c:b/2*((a-=2)*a*a*a*a+2)+c},easeInSine:function(e,a,
1123c,b,d){return-b*Math.cos(a/d*(Math.PI/2))+b+c},easeOutSine:function(e,a,c,b,d){return b*Math.sin(a/d*(Math.PI/2))+c},easeInOutSine:function(e,a,c,b,d){return-b/2*(Math.cos(Math.PI*a/d)-1)+c},easeInExpo:function(e,a,c,b,d){return 0==a?c:b*Math.pow(2,10*(a/d-1))+c},easeOutExpo:function(e,a,c,b,d){return a==d?c+b:b*(-Math.pow(2,-10*a/d)+1)+c},easeInOutExpo:function(e,a,c,b,d){return 0==a?c:a==d?c+b:1>(a/=d/2)?b/2*Math.pow(2,10*(a-1))+c:b/2*(-Math.pow(2,-10*--a)+2)+c},easeInCirc:function(e,a,c,b,d){return-b*
1124(Math.sqrt(1-(a/=d)*a)-1)+c},easeOutCirc:function(e,a,c,b,d){return b*Math.sqrt(1-(a=a/d-1)*a)+c},easeInOutCirc:function(e,a,c,b,d){return 1>(a/=d/2)?-b/2*(Math.sqrt(1-a*a)-1)+c:b/2*(Math.sqrt(1-(a-=2)*a)+1)+c},easeInElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==a)return c;if(1==(a/=d))return c+b;f||(f=.3*d);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return-(g*Math.pow(2,10*--a)*Math.sin(2*(a*d-e)*Math.PI/f))+c},easeOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==
1125a)return c;if(1==(a/=d))return c+b;f||(f=.3*d);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return g*Math.pow(2,-10*a)*Math.sin(2*(a*d-e)*Math.PI/f)+b+c},easeInOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==a)return c;if(2==(a/=d/2))return c+b;f||(f=.3*d*1.5);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return 1>a?-.5*g*Math.pow(2,10*--a)*Math.sin(2*(a*d-e)*Math.PI/f)+c:g*Math.pow(2,-10*--a)*Math.sin(2*(a*d-e)*Math.PI/f)*.5+b+c},easeInBack:function(e,a,c,b,d,f){void 0==
1126f&&(f=1.70158);return b*(a/=d)*a*((f+1)*a-f)+c},easeOutBack:function(e,a,c,b,d,f){void 0==f&&(f=1.70158);return b*((a=a/d-1)*a*((f+1)*a+f)+1)+c},easeInOutBack:function(e,a,c,b,d,f){void 0==f&&(f=1.70158);return 1>(a/=d/2)?b/2*a*a*(((f*=1.525)+1)*a-f)+c:b/2*((a-=2)*a*(((f*=1.525)+1)*a+f)+2)+c},easeInBounce:function(e,a,c,b,d){return b-h.easing.easeOutBounce(e,d-a,0,b,d)+c},easeOutBounce:function(e,a,c,b,d){return(a/=d)<1/2.75?7.5625*b*a*a+c:a<2/2.75?b*(7.5625*(a-=1.5/2.75)*a+.75)+c:a<2.5/2.75?b*(7.5625*
1127(a-=2.25/2.75)*a+.9375)+c:b*(7.5625*(a-=2.625/2.75)*a+.984375)+c},easeInOutBounce:function(e,a,c,b,d){return a<d/2?.5*h.easing.easeInBounce(e,2*a,0,b,d)+c:.5*h.easing.easeOutBounce(e,2*a-d,0,b,d)+.5*b+c}})})(jQuery);
1128return stack;})(stacks.com_elixir_stacks_foundryBanner);
1129stacks.com_elixir_stacks_foundryNavigationBar = {};
1130stacks.com_elixir_stacks_foundryNavigationBar = (function(stack) {
1131var jQuery = stacks.jQuery;var $ = jQuery;// Sticky Plugin v1.0.4 for jQuery
1132// =============
1133// Author: Anthony Garand
1134// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
1135// Improvements by Leonardo C. Daronco (daronco)
1136// Created: 02/14/2011
1137// Date: 07/20/2015
1138// Website: http://stickyjs.com/
1139// Description: Makes an element on the page stick on the screen as you scroll
1140//              It will only set the 'top' and 'position' of your element, you
1141//              might need to adjust the width in some cases.
1142
1143(function (factory) {
1144    if (typeof define === 'function' && define.amd) {
1145        // AMD. Register as an anonymous module.
1146        define(['jquery'], factory);
1147    } else if (typeof module === 'object' && module.exports) {
1148        // Node/CommonJS
1149        module.exports = factory(require('jquery'));
1150    } else {
1151        // Browser globals
1152        factory(jQuery);
1153    }
1154}(function ($) {
1155    var slice = Array.prototype.slice; // save ref to original slice()
1156    var splice = Array.prototype.splice; // save ref to original slice()
1157
1158  var defaults = {
1159      topSpacing: 0,
1160      bottomSpacing: 0,
1161      className: 'is-sticky',
1162      wrapperClassName: 'sticky-wrapper',
1163      center: false,
1164      getWidthFrom: '',
1165      widthFromWrapper: true, // works only when .getWidthFrom is empty
1166      responsiveWidth: false,
1167      zIndex: 'auto'
1168    },
1169    $window = $(window),
1170    $document = $(document),
1171    sticked = [],
1172    windowHeight = $window.height(),
1173    scroller = function() {
1174      var scrollTop = $window.scrollTop(),
1175        documentHeight = $document.height(),
1176        dwh = documentHeight - windowHeight,
1177        extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
1178
1179      for (var i = 0, l = sticked.length; i < l; i++) {
1180        var s = sticked[i],
1181          elementTop = s.stickyWrapper.offset().top,
1182          etse = elementTop - s.topSpacing - extra;
1183
1184        //update height in case of dynamic content
1185        s.stickyWrapper.css('height', s.stickyElement.outerHeight());
1186        s.stickyElement.css('transform', 'translate3d(0px, 0px, 0px)');
1187
1188        if (scrollTop < etse) {
1189          if (s.currentTop !== null) {
1190            s.stickyElement
1191              .css({
1192                'width': '',
1193                'position': '',
1194                'top': '',
1195                'left': '',
1196                'right': '',
1197                'z-index': ''
1198              });
1199            s.stickyElement.parent().removeClass(s.className);
1200            s.stickyElement.trigger('sticky-end', [s]);
1201            s.currentTop = null;
1202          }
1203        }
1204        else {
1205          var newTop = documentHeight - s.stickyElement.outerHeight()
1206            - s.topSpacing - s.bottomSpacing - scrollTop - extra;
1207          if (newTop < 0) {
1208            newTop = newTop + s.topSpacing;
1209          } else {
1210            newTop = s.topSpacing;
1211          }
1212          if (s.currentTop !== newTop) {
1213            var newWidth;
1214            if (s.getWidthFrom) {
1215                newWidth = $(s.getWidthFrom).width() || null;
1216            } else if (s.widthFromWrapper) {
1217                newWidth = s.stickyWrapper.width();
1218            }
1219            if (newWidth == null) {
1220                newWidth = s.stickyElement.width();
1221            }
1222            s.stickyElement
1223              .css('width', newWidth)
1224              .css('position', 'fixed')
1225              .css('top', newTop)
1226              .css('left', '0')
1227              .css('right', '0')
1228              .css('z-index', s.zIndex);
1229
1230            s.stickyElement.parent().addClass(s.className);
1231
1232            if (s.currentTop === null) {
1233              s.stickyElement.trigger('sticky-start', [s]);
1234            } else {
1235              // sticky is started but it have to be repositioned
1236              s.stickyElement.trigger('sticky-update', [s]);
1237            }
1238
1239            if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
1240              // just reached bottom || just started to stick but bottom is already reached
1241              s.stickyElement.trigger('sticky-bottom-reached', [s]);
1242            } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
1243              // sticky is started && sticked at topSpacing && overflowing from top just finished
1244              s.stickyElement.trigger('sticky-bottom-unreached', [s]);
1245            }
1246
1247            s.currentTop = newTop;
1248          }
1249
1250          // Check if sticky has reached end of container and stop sticking
1251          var stickyWrapperContainer = s.stickyWrapper.parent();
1252          var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);
1253
1254
1255          if( unstick ) {
1256            s.stickyElement
1257              .css('position', 'relative')
1258              .css('top', '')
1259              .css('left', '')
1260              .css('right', '')
1261              .css('bottom', 0)
1262              .css('z-index', '');
1263          } else {
1264            s.stickyElement
1265              .css('position', 'fixed')
1266              .css('top', newTop)
1267              .css('left', '0')
1268              .css('right', '0')
1269              .css('bottom', '')
1270              .css('z-index', s.zIndex);
1271          }
1272        }
1273      }
1274    },
1275    resizer = function() {
1276      windowHeight = $window.height();
1277
1278      for (var i = 0, l = sticked.length; i < l; i++) {
1279        var s = sticked[i];
1280        var newWidth = null;
1281        if (s.getWidthFrom) {
1282            if (s.responsiveWidth) {
1283                newWidth = $(s.getWidthFrom).width();
1284            }
1285        } else if(s.widthFromWrapper) {
1286            newWidth = s.stickyWrapper.width();
1287        }
1288        if (newWidth != null) {
1289            s.stickyElement.css('width', newWidth);
1290        }
1291      }
1292
1293      scroller();
1294
1295    },
1296    methods = {
1297      init: function(options) {
1298        var o = $.extend({}, defaults, options);
1299        return this.each(function() {
1300          var stickyElement = $(this);
1301
1302          var stickyId = stickyElement.attr('id');
1303          var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
1304          var wrapper = $('<div></div>')
1305            .attr('id', wrapperId)
1306            .addClass(o.wrapperClassName);
1307
1308          stickyElement.wrapAll(function() {
1309            if ($(this).parent("#" + wrapperId).length == 0) {
1310                    return wrapper;
1311            }
1312});
1313
1314          var stickyWrapper = stickyElement.parent();
1315
1316          if (o.center) {
1317            stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
1318          }
1319
1320          if (stickyElement.css("float") === "right") {
1321            stickyElement.css({"float":"none"}).parent().css({"float":"right"});
1322          }
1323
1324          o.stickyElement = stickyElement;
1325          o.stickyWrapper = stickyWrapper;
1326          o.currentTop    = null;
1327
1328          sticked.push(o);
1329
1330          methods.setWrapperHeight(this);
1331          methods.setupChangeListeners(this);
1332        });
1333      },
1334
1335      setWrapperHeight: function(stickyElement) {
1336        var element = $(stickyElement);
1337        var stickyWrapper = element.parent();
1338        if (stickyWrapper) {
1339          stickyWrapper.css('height', element.outerHeight());
1340        }
1341      },
1342
1343      setupChangeListeners: function(stickyElement) {
1344        if (window.MutationObserver) {
1345          var mutationObserver = new window.MutationObserver(function(mutations) {
1346            if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
1347              methods.setWrapperHeight(stickyElement);
1348            }
1349          });
1350          mutationObserver.observe(stickyElement, {subtree: true, childList: true});
1351        } else {
1352          if (window.addEventListener) {
1353            stickyElement.addEventListener('DOMNodeInserted', function() {
1354              methods.setWrapperHeight(stickyElement);
1355            }, false);
1356            stickyElement.addEventListener('DOMNodeRemoved', function() {
1357              methods.setWrapperHeight(stickyElement);
1358            }, false);
1359          } else if (window.attachEvent) {
1360            stickyElement.attachEvent('onDOMNodeInserted', function() {
1361              methods.setWrapperHeight(stickyElement);
1362            });
1363            stickyElement.attachEvent('onDOMNodeRemoved', function() {
1364              methods.setWrapperHeight(stickyElement);
1365            });
1366          }
1367        }
1368      },
1369      update: scroller,
1370      unstick: function(options) {
1371        return this.each(function() {
1372          var that = this;
1373          var unstickyElement = $(that);
1374
1375          var removeIdx = -1;
1376          var i = sticked.length;
1377          while (i-- > 0) {
1378            if (sticked[i].stickyElement.get(0) === that) {
1379                splice.call(sticked,i,1);
1380                removeIdx = i;
1381            }
1382          }
1383          if(removeIdx !== -1) {
1384            unstickyElement.unwrap();
1385            unstickyElement
1386              .css({
1387                'width': '',
1388                'position': '',
1389                'top': '',
1390                'left': '',
1391                'right': '',
1392                'float': '',
1393                'z-index': ''
1394              });
1395          }
1396        });
1397      }
1398    };
1399
1400  // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
1401  if (window.addEventListener) {
1402    window.addEventListener('scroll', scroller, false);
1403    window.addEventListener('resize', resizer, false);
1404  } else if (window.attachEvent) {
1405    window.attachEvent('onscroll', scroller);
1406    window.attachEvent('onresize', resizer);
1407  }
1408
1409  $.fn.sticky = function(method) {
1410    if (methods[method]) {
1411      return methods[method].apply(this, slice.call(arguments, 1));
1412    } else if (typeof method === 'object' || !method ) {
1413      return methods.init.apply( this, arguments );
1414    } else {
1415      $.error('Method ' + method + ' does not exist on jQuery.sticky');
1416    }
1417  };
1418
1419  $.fn.unstick = function(method) {
1420    if (methods[method]) {
1421      return methods[method].apply(this, slice.call(arguments, 1));
1422    } else if (typeof method === 'object' || !method ) {
1423      return methods.unstick.apply( this, arguments );
1424    } else {
1425      $.error('Method ' + method + ' does not exist on jQuery.sticky');
1426    }
1427  };
1428  $(function() {
1429    setTimeout(scroller, 0);
1430  });
1431}));
1432
1433return stack;}
1433)(stacks.com_elixir_stacks_foundryNavigationBar);
1434stacks.stacks_in_2 = {};
1435stacks.stacks_in_2 = (function(stack) {
1436var jQuery = stacks.jQuery;var $ = jQuery;// Set Language for Document
1437document.documentElement.lang = "en";
1438
1439$(document).ready(function(){
1440  
1441
1442  
1443});
1444
1445$.fn.elementRealHeight = function () {
1446   $clone = this.clone()
1447       .css("visibility","hidden")
1448       .appendTo($('body'));
1449   var $height = $clone.outerHeight();
1450   $clone.remove();
1451   return $height;
1452 };
1453
1454 $.fn.elementRealWidth = function () {
1455    $clone = this.clone()
1456        .css("visibility","hidden")
1457        .appendTo($('body'));
1458    var $width = $clone.outerWidth();
1459    $clone.remove();
1460    return $width;
1461  };
1462
1463
1464  // Handles offsets for anchor tags
1465  // (function(document, history, location) {
1466  //   var HISTORY_SUPPORT = !!(history && history.pushState);
1467  //
1468  //   var anchorScrolls = {
1469  //     ANCHOR_REGEX: /^#[^ ]+$/,
1470  //     OFFSET_HEIGHT_PX: 0,
1471  //
1472  //     /**
1473  //      * Establish events, and fix initial scroll position if a hash is provided.
1474  //      */
1475  //     init: function() {
1476  //       this.scrollToCurrent();
1477  //       window.addEventListener('hashchange', this.scrollToCurrent.bind(this));
1478  //       document.body.addEventListener('click', this.delegateAnchors.bind(this));
1479  //     },
1480  //
1481  //     /**
1482  //      * Return the offset amount to deduct from the normal scroll position.
1483  //      * Modify as appropriate to allow for dynamic calculations
1484  //      */
1485  //     getFixedOffset: function() {
1486  //       return this.OFFSET_HEIGHT_PX;
1487  //     },
1488  //
1489  //     /**
1490  //      * If the provided href is an anchor which resolves to an element on the
1491  //      * page, scroll to it.
1492  //      * @param  {String} href
1493  //      * @return {Boolean} - Was the href an anchor.
1494  //      */
1495  //     scrollIfAnchor: function(href, pushToHistory) {
1496  //       var match, rect, anchorOffset;
1497  //
1498  //       if(!this.ANCHOR_REGEX.test(href)) {
1499  //         return false;
1500  //       }
1501  //
1502  //       match = document.getElementById(href.slice(1));
1503  //
1504  //       if(match) {
1505  //         rect = match.getBoundingClientRect();
1506  //         anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset();
1507  //         window.scrollTo(window.pageXOffset, anchorOffset);
1508  //
1509  //         // Add the state to history as-per normal anchor links
1510  //         if(HISTORY_SUPPORT && pushToHistory) {
1511  //           history.pushState({}, document.title, location.pathname + href);
1512  //         }
1513  //       }
1514  //
1515  //       return !!match;
1516  //     },
1517  //
1518  //     /**
1519  //      * Attempt to scroll to the current location's hash.
1520  //      */
1521  //     scrollToCurrent: function() {
1522  //       this.scrollIfAnchor(window.location.hash);
1523  //     },
1524  //
1525  //     /**
1526  //      * If the click event's target was an anchor, fix the scroll position.
1527  //      */
1528  //     delegateAnchors: function(e) {
1529  //       var elem = e.target;
1530  //
1531  //       if(
1532  //         elem.nodeName === 'A' &&
1533  //         this.scrollIfAnchor(elem.getAttribute('href'), true)
1534  //       ) {
1535  //         e.preventDefault();
1536  //       }
1537  //     }
1538  //   };
1539  //
1540  //   window.addEventListener(
1541  //     'DOMContentLoaded', anchorScrolls.init.bind(anchorScrolls)
1542  //   );
1543  // })(window.document, window.history, window.location);
1544
1545return stack;})(stacks.stacks_in_2);
1546stacks.stacks_in_3 = {};
1547stacks.stacks_in_3 = (function(stack) {
1548var jQuery = stacks.jQuery;var $ = jQuery;function foundry_navigation_bar() {
1549	// Removes overflow hidden so dropdowns can show as they should.
1550	$('#stacks_in_3 .navigation_bar ').parentsUntil('.stacks_top').css({'overflow' : 'visible'});
1551	$('.stacks_top').css({'overflow' : 'visible'});
1552
1553	// Unwraps the link from dividers and small subheaders
1554	$('#stacks_in_3 .navigation_bar div.nav_divider, #stacks_in_3 .navigation_bar .small_hdr').unwrap();
1555
1556
1557
1558	// Removes href attributes from parent navigation links.
1559	// This could be offered as an option possibly.
1560	// $('#stacks_in_3 .navigation_bar .navigation_container > ul > li > a.parent').removeAttr("href").addClass('closed');
1561	$('#stacks_in_3 .navigation_bar .navigation_container > ul > li > a.parent').attr("href", "#").addClass('closed');
1562
1563	//
1564	// Handles displaying drop down navigation.
1565	//
1566	$('#stacks_in_3 .navigation_bar .navigation_container ul').find("li").each(function() {
1567			if ($(this).find("ul:first").length > 0) {
1568
1569					$(this).find('a.parent').click(function() {
1570
1571						event.preventDefault();
1572
1573							
1574							//
1575							// Close all navigation drop downs when another is opened.
1576							//
1577							$("#stacks_in_3 .navigation_bar .navigation_container ul li").removeClass('clicked');
1578
1579							$(this).parent().addClass('clicked');
1580
1581							$("#stacks_in_3 .navigation_bar .navigation_container ul li:not(.clicked) a.open").parent().find('ul:first').stop(true, true).slide
1581Up(200);
1582
1583
1584							$("#stacks_in_3 .navigation_bar .navigation_container ul li").find("> a").addClass('closed').removeClass('open');
1585							
1586
1587							//
1588							// Show child-level menu items
1589							//
1590							$(this).parent().find("ul:first").stop(true, true).animate({height: 'toggle' , opacity: 'toggle'}, 200);
1591
1592							$(this).parent().find("> a").toggleClass('closed').toggleClass('open');
1593					});
1594			}
1595	});
1596
1597
1598	//
1599	// Handles showing and hiding the navigation when the navigation toggle is clicked or tapped.
1600	//
1601	$('#stacks_in_3_mobile_navigation_toggle').click(function(){
1602		$('#stacks_in_3 .navigation_bar .navigation_container > ul').slideToggle(175, function(){});
1603	});
1604
1605	//
1606	// Handles pairing navigation with parent banner
1607	//
1608	
1609}
1610
1611
1612
1613
1614	$(document).ready(function(){
1615		foundry_navigation_bar();
1616	});
1617
1618
1619
1620return stack;})(stacks.stacks_in_3);
1621stacks.stacks_in_6 = {};
1622stacks.stacks_in_6 = (function(stack) {
1623var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
1624
1625
1626
1627
1628
1629
1630	// Load parallax effect
1631	
1632
1633});
1634
1635
1636// $(window).load(function(){
1637// });
1638
1639return stack;})(stacks.stacks_in_6);
1640stacks.stacks_in_8 = {};
1641stacks.stacks_in_8 = (function(stack) {
1642var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
1643	
1644		$('#stacks_in_8 > .container').parentsUntil('.stacks_top').css('overflow', 'visible');
1645		$('.stacks_top').css({'overflow' : 'visible'});
1646	
1647});
1648
1649return stack;})(stacks.stacks_in_8);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.