PageSourceSearch

https://theduckinnchicago.com/menus/files/stacks_page_page21.js?rwcache=796351332

js theduckinnchicago.com collected 2026-09-26 01:02:29 UTC 101,127 bytes, 2,532 lines download raw bytes

vendor: 7,199 bytes, lines 1-2
1/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
2jQuery.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.nodeName)&&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);
2
3var stacks = {};
4stacks.jQuery = jQuery.noConflict(true);
5stacks.com_elixir_stacks_Animagic = {};
6stacks.com_elixir_stacks_Animagic = (function(stack) {
7var jQuery = stacks.jQuery;var $ = jQuery;
8(function() {
9  var Util, WeakMap,
10    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
11
12  Util = (function() {
13    function Util() {}
14
15    Util.prototype.extend = function(custom, defaults) {
16      var key, value;
17      for (key in custom) {
18        value = custom[key];
19        if (value != null) {
20          defaults[key] = value;
21        }
22      }
23      return defaults;
24    };
25
26    Util.prototype.isMobile = function(agent) {
27      return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);
28    };
29
30    return Util;
31
32  })();
33
34  WeakMap = this.WeakMap || (WeakMap = (function() {
35    function WeakMap() {
36      this.keys = [];
37      this.values = [];
38    }
39
40    WeakMap.prototype.get = function(key) {
41      var i, item, _i, _len, _ref;
42      _ref = this.keys;
43      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
44        item = _ref[i];
45        if (item === key) {
46          return this.values[i];
47        }
48      }
49    };
50
51    WeakMap.prototype.set = function(key, value) {
52      var i, item, _i, _len, _ref;
53      _ref = this.keys;
54      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
55        item = _ref[i];
56        if (item === key) {
57          this.values[i] = value;
58          return;
59        }
60      }
61      this.keys.push(key);
62      return this.values.push(value);
63    };
64
65    return WeakMap;
66
67  })());
68
69  this.WOW = (function() {
70    WOW.prototype.defaults = {
71      boxClass: 'wow',
72      animateClass: 'animated',
73      offset: 0,
74      mobile: true
75    };
76
77    function WOW(options) {
78      if (options == null) {
79        options = {};
80      }
81      this.scrollCallback = __bind(this.scrollCallback, this);
82      this.scrollHandler = __bind(this.scrollHandler, this);
83      this.start = __bind(this.start, this);
84      this.scrolled = true;
85      this.config = this.util().extend(options, this.defaults);
86      this.animationNameCache = new WeakMap();
87    }
88
89    WOW.prototype.init = function() {
90      var _ref;
91      this.element = window.document.documentElement;
92      if ((_ref = document.readyState) === "interactive" || _ref === "complete") {
93        return this.start();
94      } else {
95        return document.addEventListener('DOMContentLoaded', this.start);
96      }
97    };
98
99    WOW.prototype.start = function() {
100      var box, _i, _len, _ref;
101      this.boxes = this.element.getElementsByClassName(this.config.boxClass);
102      if (this.boxes.length) {
103        if (this.disabled()) {
104          return this.resetStyle();
105        } else {
106          _ref = this.boxes;
107          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
108            box = _ref[_i];
109            this.applyStyle(box, true);
110          }
111          window.addEventListener('scroll', this.scrollHandler, false);
112          window.addEventListener('resize', this.scrollHandler, false);
113          return this.interval = setInterval(this.scrollCallback, 50);
114        }
115      }
116    };
117
118    WOW.prototype.stop = function() {
119      window.removeEventListener('scroll', this.scrollHandler, false);
120      window.removeEventListener('resize', this.scrollHandler, false);
121      if (this.interval != null) {
122        return clearInterval(this.interval);
123      }
124    };
125
126    WOW.prototype.show = function(box) {
127      this.applyStyle(box);
128      return box.className = "" + box.className + " " + this.config.animateClass;
129    };
130
131    WOW.prototype.applyStyle = function(box, hidden) {
132      var delay, duration, iteration;
133      duration = box.getAttribute('data-wow-duration');
vendor: 4,541 bytes, lines 134-291
134      delay = box.getAttribute('data-wow-delay');
135      iteration = box.getAttribute('data-wow-iteration');
136      return this.animate((function(_this) {
137        return function() {
138          return _this.customStyle(box, hidden, duration, delay, iteration);
139        };
140      })(this));
141    };
142
143    WOW.prototype.animate = (function() {
144      if ('requestAnimationFrame' in window) {
145        return function(callback) {
146          return window.requestAnimationFrame(callback);
147        };
148      } else {
149        return function(callback) {
150          return callback();
151        };
152      }
153    })();
154
155    WOW.prototype.resetStyle = function() {
156      var box, _i, _len, _ref, _results;
157      _ref = this.boxes;
158      _results = [];
159      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
160        box = _ref[_i];
161        _results.push(box.setAttribute('style', 'visibility: visible;'));
162      }
163      return _results;
164    };
165
166    WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {
167      if (hidden) {
168        this.cacheAnimationName(box);
169      }
170      box.style.visibility = hidden ? 'hidden' : 'visible';
171      if (duration) {
172        this.vendorSet(box.style, {
173          animationDuration: duration
174        });
175      }
176      if (delay) {
177        this.vendorSet(box.style, {
178          animationDelay: delay
179        });
180      }
181      if (iteration) {
182        this.vendorSet(box.style, {
183          animationIterationCount: iteration
184        });
185      }
186      this.vendorSet(box.style, {
187        animationName: hidden ? 'none' : this.cachedAnimationName(box)
188      });
189      return box;
190    };
191
192    WOW.prototype.vendors = ["moz", "webkit"];
193
194    WOW.prototype.vendorSet = function(elem, properties) {
195      var name, value, vendor, _results;
196      _results = [];
197      for (name in properties) {
198        value = properties[name];
199        elem["" + name] = value;
200        _results.push((function() {
201          var _i, _len, _ref, _results1;
202          _ref = this.vendors;
203          _results1 = [];
204          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
205            vendor = _ref[_i];
206            _results1.push(elem["" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);
207          }
208          return _results1;
209        }).call(this));
210      }
211      return _results;
212    };
213
214    WOW.prototype.vendorCSS = function(elem, property) {
215      var result, style, vendor, _i, _len, _ref;
216      style = window.getComputedStyle(elem);
217      result = style.getPropertyCSSValue(property);
218      _ref = this.vendors;
219      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
220        vendor = _ref[_i];
221        result = result || style.getPropertyCSSValue("-" + vendor + "-" + property);
222      }
223      return result;
224    };
225
226    WOW.prototype.animationName = function(box) {
227      var animationName;
228      try {
229        animationName = this.vendorCSS(box, 'animation-name').cssText;
230      } catch (_error) {
231        animationName = window.getComputedStyle(box).getPropertyValue('animation-name');
232      }
233      if (animationName === 'none') {
234        return '';
235      } else {
236        return animationName;
237      }
238    };
239
240    WOW.prototype.cacheAnimationName = function(box) {
241      return this.animationNameCache.set(box, this.animationName(box));
242    };
243
244    WOW.prototype.cachedAnimationName = function(box) {
245      return this.animationNameCache.get(box);
246    };
247
248    WOW.prototype.scrollHandler = function() {
249      return this.scrolled = true;
250    };
251
252    WOW.prototype.scrollCallback = function() {
253      var box;
254      if (this.scrolled) {
255        this.scrolled = false;
256        this.boxes = (function() {
257          var _i, _len, _ref, _results;
258          _ref = this.boxes;
259          _results = [];
260          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
261            box = _ref[_i];
262            if (!(box)) {
263              continue;
264            }
265            if (this.isVisible(box)) {
266              this.show(box);
267              continue;
268            }
269            _results.push(box);
270          }
271          return _results;
272        }).call(this);
273        if (!this.boxes.length) {
274          return this.stop();
275        }
276      }
277    };
278
279    WOW.prototype.offsetTop = function(element) {
280      var top;
281      while (element.offsetTop === void 0) {
282        element = element.parentNode;
283      }
284      top = element.offsetTop;
285      while (element = element.offsetParent) {
286        top += element.offsetTop;
287      }
288      return top;
289    };
290
291    WOW.prototype.isVisible = function(box) {
292      var bottom, offset, top, viewBottom, viewTop;
293      offset = box.getAttribute('data-wow-offset') || this.config.offset;
294      viewTop = window.pageYOffset;
295      viewBottom = viewTop + this.element.clientHeight - offset;
296      top = this.offsetTop(box);
297      bottom = top + box.clientHeight;
298      return top <= viewBottom && bottom >= viewTop;
299    };
300
301    WOW.prototype.util = function() {
302      return this._util || (this._util = new Util());
303    };
304
305    WOW.prototype.disabled = function() {
306      return !this.config.mobile && this.util().isMobile(navigator.userAgent);
307    };
308
309    return WOW;
310
311  })();
312
313}).call(this);
314
315
316
317$(window).load(function(){
318  new WOW().init();
319});
320
321return stack;})(stacks.com_elixir_stacks_Animagic);
322stacks.com_stacks4stacks_stacks_topbox4 = {};
323stacks.com_stacks4stacks_stacks_topbox4 = (function(stack) {
324var jQuery = stacks.jQuery;var $ = jQuery;/**
325* Cookie plugin
326*
327* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
328* Dual licensed under the MIT and GPL licenses:
329* http://www.opensource.org/licenses/mit-license.php
330* http://www.gnu.org/licenses/gpl.html
331*
332*/
333
334/**
335* Create a cookie with the given name and value and other optional parameters.
336*
337* @example $.cookie('the_cookie', 'the_value');
338* @desc Set the value of a cookie.
339* @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
340* @desc Create a cookie with all available options.
341* @example $.cookie('the_cookie', 'the_value');
342* @desc Create a session cookie.
343* @example $.cookie('the_cookie', null);
344* @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
345*       used when the cookie was set.
346*
347* @param String name The name of the cookie.
348* @param String value The value of the cookie.
349* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
350* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
351*                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
352*                             If set to null or omitted, the cookie will be a session cookie and will not be retained
353*                             when the the browser exits.
354* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
355* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
356* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
357*                        require a secure protocol (like HTTPS).
358* @type undefined
359*
360* @name $.cookie
361* @cat Plugins/Cookie
362* @author Klaus Hartl/[email protected]
363*/
364
365/**
366* Get the value of a cookie with the given name.
367*
368* @example $.cookie('the_cookie');
369* @desc Get the value of a cookie.
370*
371* @param String name The name of the cookie.
372* @return The value of the cookie.
373* @type String
374*
375* @name $.cookie
376* @cat Plugins/Cookie
377* @author Klaus Hartl/[email protected]
378*/
379jQuery.cookie = function(name, value, options) {
380    if (typeof value != 'undefined') { // name and value given, set cookie
381        options = options || {};
382        if (value === null) {
383            value = '';
384            options.expires = -1;
385        }
386        var expires = '';
387        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
388            var date;
389            if (typeof options.expires == 'number') {
390                date = new Date();
391                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
392            } else {
393                date = options.expires;
394            }
395            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
396        }
397        // CAUTION: Needed to parenthesize options.path and options.domain
398        // in the following expressions, otherwise they evaluate to undefined
399        // in the packed version for some reason...
400        var path = options.path ? '; path=' + (options.path) : '';
401        var domain = options.domain ? '; domain=' + (options.domain) : '';
402        var secure = options.secure ? '; secure' : '';
403        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
404    } else { // only name given, get cookie
405        var cookieValue = null;
406        if (document.cookie && document.cookie != '') {
407            var cookies = document.cookie.split(';');
408            for (var i = 0; i < cookies.length; i++) {
409                var cookie = jQuery.trim(cookies[i]);
410                // Does this cookie string begin with the name we want?
411                if (cookie.substring(0, name.length + 1) == (name + '=')) {
412                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
413                    break;
414                }
415            }
416        }
417        return cookieValue;
418    }
419  };
420
421
422/*
423 * Nivo Lightbox v1.3.1
424 * http://dev7studios.com/nivo-lightbox
425 *
426 * Copyright 2013, Dev7studios
427 * Free to use and abuse under the MIT license.
428 * http://www.opensource.org/licenses/mit-license.php
429 */
430
431;(function($, window, document, undefined){
432
433    var pluginName = 'nivoLightbox',
434        defaults = {
435            effect: 'fade',
436            theme: 'default',
437            keyboardNav: true,
438            clickImgToClose: false,
439            clickOverlayToClose: true,
440            onInit: function(){},
441            beforeShowLightbox: function(){},
442            afterShowLightbox: function(lightbox){},
443            beforeHideLightbox: function(){},
444            afterHideLightbox: function(){},
445            beforePrev: function(element){},
446            onPrev: function(element){},
447            beforeNext: function(element){},
448            onNext: function(element){},
449            errorMessage: 'The requested content cannot be loaded. Please try again later.'
450        };
451
452    function NivoLightbox(element, options){
453        this.el = element;
454        this.$el = $(this.el);
455
456        this.options = $.extend({}, defaults, options);
457
458        this._defaults = defaults;
459        this._name = pluginName;
460
461        this.init();
462    }
463
464    NivoLightbox.prototype = {
465
466        init: function(){
467			var $this = this;
468
469			// Need this so we don't use CSS transitions in mobile
470			if(!$('html').hasClass('nivo-lightbox-notouch')) $('html').addClass('nivo-lightbox-notouch');
471			if('ontouchstart' in document) $('html').removeClass('nivo-lightbox-notouch');
472
473			// Setup the click
474            this.$el.on('click', function(e){
475                $this.showLightbox(e);
476            });
477
478            // keyboardNav
479            if(this.options.keyboardNav){
480                $('body').off('keyup').on('keyup', function(e){
481                    var code = (e.keyCode ? e.keyCode : e.which);
482                    // Escape
483                    if(code == 27) $this.destructLightbox();
484                    // Left
485                    if(code == 37) $('.nivo-lightbox-prev').trigger('click');
486                    // Right
487                    if(code == 39) $('.nivo-lightbox-next').trigger('click');
488				});
489			}
490
491			this.options.onInit.call(this);
492
493        },
494
495        showLightbox: function(e){
496            var $this = this,
497                currentLink = this.$el;
498
499			// Check content
500			var check = this.checkContent(currentLink);
501			if(!check) return;
502
503			e.preventDefault();
504            this.options.beforeShowLightbox.call(this);
505            var lightbox = this.constructLightbox();
506            if(!lightbox) return;
507            var content = lightbox.find('.nivo-lightbox-content');
508            if(!content) return;
509
510            $('body').addClass('nivo-lightbox-body-effect-'+ this.options.effect);
511
512			this.processContent( content, currentLink );
513
514            // Nav
515            if(this.$el.attr('data-lightbox-gallery')){
516                var galleryItems = $('[data-lightbox-gallery="'+ this.$el.attr('data-lightbox-gallery') +'"]');
517
518                $('.nivo-lightbox-nav').show();
519
520				// Prev
521                $('.nivo-lightbox-prev').off('click').on('click', function(e){
522                    e.preventDefault();
523                    var index = galleryItems.index(currentLink);
524                    currentLink = galleryItems.eq(index - 1);
525                    if(!$(currentLink).length) currentLink = galleryItems.last();
526                    $.when($this.options.beforePrev.call(this, [ currentLink ])).done(function(){
527                        $this.processContent(content, currentLink);
528                        $this.options.onPrev.call(this, [ currentLink ]);
529                    });
530                });
531
532                // Next
533                $('.nivo-lightbox-next').off('click').on('click', function(e){
534                    e.preventDefault();
535                    var index = galleryItems.index(currentLink);
536                    currentLink = galleryItems.eq(index + 1);
537                    if(!$(currentLink).length) currentLink = galleryItems.first();
538                    $.when($this.options.beforeNext.call(this, [ currentLink ])).done(function(){
539                        $this.processContent(content, currentLink);
540                        $this.options.onNext.call(this, [ currentLink ]);
541                    });
542                });
543            }
544
545            setTimeout(function(){
546                lightbox.addClass('nivo-lightbox-open');
547                $this.options.afterShowLightbox.call(this, [ lightbox ]);
548            }, 1); // For CSS transitions
549        },
550
551		checkContent: function( link ) {
552			var $this = this,
553                href = link.attr('href'),
554                video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);
555
556            if(href.match(/\.(jpeg|jpg|gif|png)$/i) !== null){
557				return true;
558            }
559            // HTML5 Audio
560            else if(link.attr('data-lightbox-type') == 'html5audio'){
561				return true;
562            }
563            // HTML5 Video
564            else if(link.attr('data-lightbox-type') == 'html5video'){
565				return true;
566			}
567			// Video (Youtube/Vimeo)
568            else if(video){
569				return true;
570			}
571			// AJAX
572			else if(link.attr('data-lightbox-type') == 'ajax'){
573				return true;
574			}
575			// Inline HTML
576			else if(href.substring(0, 1) == '#' && link.attr('data-lightbox-type') == 'inline'){
577				return true;
578			}
579			// iFrame (default)
580			else if(link.attr('data-lightbox-type') == 'iframe'){
581				return true;
582			}
583
584			return false;
585		},
586
587        processContent: function(content, link){
588            var $this = this,
589                href = link.attr('href'),
590                video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/);
591
592            content.html('').addClass('nivo-lightbox-loading');
593
594            // Is HiDPI?
595            if(this.isHidpi() && link.attr('data-lightbox-hidpi')){
596                href = link.attr('data-lightbox-hidpi');
597            }
598
599            // Image
600            if(href.match(/\.(jpeg|jpg|gif|png)$/i) !== null){
601                var img = $('<img>', { src: href, 'class': 'nivo-lightbox-image-display' });
602                img.one('load', function() {
603					var wrap = $('<div class="nivo-lightbox-image" />');
604                    wrap.append(img);
605					content.html(wrap).removeClass('nivo-lightbox-loading');
606
607					// Vertically center images
608					wrap.css({
609						'line-height': $('.nivo-lightbox-content').height() +'px',
610						'height': $('.nivo-lightbox-content').height() +'px' // For Firefox
611					});
612					$(window).resize(function() {
613						wrap.css({
614							'line-height': $('.nivo-lightbox-content').height() +'px',
615							'height': $('.nivo-lightbox-content').height() +'px' // For Firefox
616						});
617					});
618				}).each(function() {
619					if(this.complete) $(this).load();
620				});
621
622				img.error(function() {
623					var wrap = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
624                    content.html(wrap).removeClass('nivo-lightbox-loading');
625				});
626            }
627
628            // Video (Youtube/Vimeo)
629            else if(video){
630                var src = '',
631                    classTerm = 'nivo-lightbox-video';
632
633                if(video[1] == 'youtube'){
634                    src = 'https://www.youtube.com/embed/'+ video[4]+'?autoplay=1&amp;rel=0';
635                    classTerm = 'nivo-lightbox-youtube';
636                }
637                if(video[1] == 'youtube-nocookie'){
638                    src = href; //https://www.youtube-nocookie.com/embed/...
639                    classTerm = 'nivo-lightbox-youtube';
640                }
641                if(video[1] == 'youtu'){
642                    src = 'https://www.youtube.com/embed/'+ video[3]+'?autoplay=1&amp;rel=0';
643                    classTerm = 'nivo-lightbox-youtube';
644                }
645                if(video[1] == 'vimeo'){
646                    src = 'https://player.vimeo.com/video/'+ video[3]+'?autoplay=1&amp;rel=0&amp;playsinline=0';
647                    classTerm = 'nivo-lightbox-vimeo';
648                }
649
650                if(src){
651                    var iframeVideo = $('<iframe>', {
652                        src: src,
653                        'class': classTerm,
654                        frameborder: 0,
655                        vspace: 0,
656                        hspace: 0,
657                        scrolling: 'auto',
658                        allowfullscreen: 'true'
659                    });
660                    content.html(iframeVideo);
661                    iframeVideo.load(function(){ content.removeClass('nivo-lightbox-loading'); });
662                }
663            }
664            // AJAX
665            else if(link.attr('data-lightbox-type') == 'ajax'){
666				$.ajax({
667					url: href,
668					cache: false,
669					success: function(data) {
670						var wrap = $('<div class="nivo-lightbox-ajax" />');
671						wrap.append(data);
672						content.html(wrap).removeClass('nivo-lightbox-loading');
673
674						// Vertically center html
675						if(wrap.outerHeight() < content.height()){
676							wrap.css({
677								'position': 'relative',
678								'top': '50%',
679								'margin-top': -(wrap.outerHeight()/2) +'px'
680							});
681						}
682						$(window).resize(function() {
683							if(wrap.outerHeight() < content.height()){
684								wrap.css({
685									'position': 'relative',
686									'top': '50%',
687									'margin-top': -(wrap.outerHeight()/2) +'px'
688								});
689							}
690						});
691					},
692					error: function(){
693						var wrap = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
694                        content.html(wrap).removeClass('nivo-lightbox-loading');
695					}
696				});
697            }
698            // Inline HTML
699            else if(href.substring(0, 1) == '#' && link.attr('data-lightbox-type') == 'inline'){
700                if($(href).length){
701                    var wrap = $('<div class="nivo-lightbox-inline" />');
702					wrap.append($(href).clone().show());
703                    content.html(wrap).removeClass('nivo-lightbox-loading');
704
705                    // Vertically center html
706					if(wrap.outerHeight() < content.height()){
707						wrap.css({
708							'position': 'relative',
709							'top': '50%',
710							'margin-top': -(wrap.outerHeight()/2) +'px'
711						});
712					}
713					$(window).resize(function() {
714						if(wrap.outerHeight() < content.height()){
715							wrap.css({
716								'position': 'relative',
717								'top': '50%',
718								'margin-top': -(wrap.outerHeight()/2) +'px'
719							});
720						}
721					});
722				} else {
723					var wrapError = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
724                    content.html(wrapError).removeClass('nivo-lightbox-loading');
725				}
726            }
727
728            // HTML5 audio
729            else if(link.attr('data-lightbox-type') == 'html5audio'){
730                var vidframe = $('<audio>', {
731                    src: href,
732                    'class': 'nivo-lightbox-html5audio',
733                    'controls': 'true',
734                    'playsinline': 'true',
735                    'preload': 'auto',
736                    'autoplay': 'true'
737                });
738                content.html(vidframe);
739                vidframe.load(function(){ content.removeClass('nivo-lightbox-loading'); });
740            }
741
742            // HTML5 video
743            else if(link.attr('data-lightbox-type') == 'html5video'){
744                var vidframe = $('<video>', {
745                    src: href,
746                    'class': 'nivo-lightbox-html5video',
747                    'controls': 'true',
748                    'playsinline': 'true',
749                    'preload': 'auto',
750                    'autoplay': 'true'
751                });
752                content.html(vidframe);
753                vidframe.load(function(){ content.removeClass('nivo-lightbox-loading'); });
754            }
755
756            // iFrame (default)
757            else if(link.attr('data-lightbox-type') == 'iframe'){
758                var iframe = $('<iframe>', {
759                    src: href,
760                    'class': 'nivo-lightbox-item',
761                    frameborder: 0,
762                    vspace: 0,
763                    hspace: 0,
764                    scrolling: 'auto'
765                });
766                content.html(iframe);
767                iframe.load(function(){ content.removeClass('nivo-lightbox-loading'); });
768            } else {
769                return false;
770            }
771
772            // Set the title
773            if(link.attr('title')){
774                var titleWrap = $('<span>', { 'class': 'nivo-lightbox-title' });
775                titleWrap.text(link.attr('title'));
776                $('.nivo-lightbox-title-wrap').html(titleWrap);
777            } else {
778                $('.nivo-lightbox-title-wrap').html('');
779            }
780        },
781
782        constructLightbox: function(){
783            if($('.nivo-lightbox-overlay').length) return $('.nivo-lightbox-overlay');
784
785            var overlay = $('<div>', { 'class': 'nivo-lightbox-overlay nivo-lightbox-theme-'+ this.options.theme +' nivo-lightbox-effect-'+ this.options.effect });
786            var wrap = $('<div>', { 'class': 'nivo-lightbox-wrap' });
787            var content = $('<div>', { 'class': 'nivo-lightbox-content' });
788            var nav = $('<a href="#" class="nivo-lightbox-nav nivo-lightbox-prev"><i class="fa fa-chevron-left"></i></a><a href="#" class="nivo-lightbox-nav nivo-lightbox-next"><i class="fa fa-chevron-right"></i></a>');
789            var close = $('<a href="#" class="nivo-lightbox-close" title="Close">Close</a>');
790            var title = $('<div>', { 'class': 'nivo-lightbox-title-wrap' });
791
792            var isMSIE = /*@cc_on!@*/0;
793            if(isMSIE) overlay.addClass('nivo-lightbox-ie');
794
795            wrap.append(content);
796            wrap.append(title);
797            overlay.append(wrap);
798            overlay.append(nav);
799            overlay.append(close);
800            $('body').append(overlay);
801
802            var $this = this;
803            if($this.options.clickOverlayToClose){
804                overlay.on('click', function(e){
805                    if(e.target === this || $(e.target).hasClass('nivo-lightbox-content') || $(e.target).hasClass('nivo-lightbox-image')){
806                        $this.destructLightbox();
807                    }
808                });
809            }
810            if($this.options.clickImgToClose){
811                overlay.on('click', function(e){
812                    if(e.target === this || $(e.target).hasClass('nivo-lightbox-image-display')){
813                        $this.destructLightbox();
814                    }
815                });
816            }
817
818            close.on('click', function(e){
819                e.preventDefault();
820                $this.destructLightbox();
821            });
822
823            return overlay;
824        },
825
826        destructLightbox: function(){
827            var $this = this;
828            this.options.beforeHideLightbox.call(this);
829
830            $('.nivo-lightbox-overlay').removeClass('nivo-lightbox-open');
831            $('.nivo-lightbox-nav').hide();
832            $('body').removeClass('nivo-lightbox-body-effect-'+ $this.options.effect);
833
834            // For IE
835            var isMSIE = /*@cc_on!@*/0;
836            if(isMSIE){
837                $('.nivo-lightbox-overlay iframe').attr("src", " ");
838                $('.nivo-lightbox-overlay iframe').remove();
839            }
840
841            // Remove click handlers
842            $('.nivo-lightbox-prev').off('click');
843            $('.nivo-lightbox-next').off('click');
844
845            // Empty content (for videos)
846            $('.nivo-lightbox-content').empty();
847
848            this.options.afterHideLightbox.call(this);
849        },
850
851        isHidpi: function(){
852			var mediaQuery = "(-webkit-min-device-pixel-ratio: 1.5),\
853                              (min--moz-device-pixel-ratio: 1.5),\
854                              (-o-min-device-pixel-ratio: 3/2),\
855                              (min-resolution: 1.5dppx)";
856			if(window.devicePixelRatio > 1) return true;
857			if(window.matchMedia && window.matchMedia(mediaQuery).matches) return true;
858			return false;
859		}
860
861    };
862
863    $.fn[pluginName] = function(options){
864        return this.each(function(){
865            if(!$.data(this, pluginName)){
866                $.data(this, pluginName, new NivoLightbox(this, options));
867            }
868        });
869    };
870
871})(jQuery, window, document);
872
873
874
875/*
876WHW changes
877- Replace '<a href="#" class="nivo-lightbox-nav nivo-lightbox-prev">Previous</a>' with '<a href="#" class="nivo-lightbox-nav nivo-lightbox-prev"><i class="fa fa-chevron-left"></i></a>'
878- Replace '<a href="#" class="nivo-lightbox-nav nivo-lightbox-next">Next</a>' with '<a href="#" class="nivo-lightbox-nav nivo-lightbox-next"><i class="fa fa-chevron-right"></i></a>'
879- Replace '<a href="#" class="nivo-lightbox-close" title="Close">Close</a>' with '<a href="#" class="nivo-lightbox-close"></a>'
880- Replace 'http://player.vimeo.com' with 'https://player.vimeo.com'
881- Replace 'http://www.youtube.com/embed/' with 'https://www.youtube.com/embed/'
882- Replace '[4]' with '[4]+'?autoplay=1&amp;rel=0''
883- Replace '[3]' with '[3]+'?autoplay=1&amp;rel=0''
884- Replace 'scrolling:"auto"' with 'scrolling:"auto",allowfullscreen:"true"'
885*/
886
887return stack;})(stacks.com_stacks4stacks_stacks_topbox4);
888stacks.com_bigwhiteduck_stacks_headerpro = {};
889stacks.com_bigwhiteduck_stacks_headerpro = (function(stack) {
890var jQuery = stacks.jQuery;var $ = jQuery; var elements=document.getElementsByClassName('hp-slice');while(elements.length>0){elements[0].parentNode.removeChild(elements[0]);}
891
892return stack;})(stacks.com_bigwhiteduck_stacks_headerpro);
893stacks.stacks_in_662 = {};
894stacks.stacks_in_662 = (function(stack) {
895var jQuery = stacks.jQuery;var $ = jQuery;$(window).load(function(){
896	$('#topBoxTriggerstacks_in_662').nivoLightbox({
897		effect: 'fade',
898		theme: 'default',
899		keyboardNav: true,
900		clickImgToClose: false,
901        clickOverlayToClose: true,
902		onInit: function(){
903			
904		},
905		beforeShowLightbox: function(){
906			
907		},
908		afterShowLightbox: function(){			
909			$('.nivo-lightbox-close').html('<i class="fa fa-times"></i>');
910			$('.nivo-lightbox-prev').html('<i class="fa fa-chevron-left"></i>');
911			$('.nivo-lightbox-next').html('<i class="fa fa-chevron-right"></i>');
912
913			// Close a TopBox by clicking a custom close button
914			$(".topBoxClose, .closeTopBox").click(function(){
915				$('.nivo-lightbox-close').trigger('click');
916			});
917			
918			
919		},
920		afterHideLightbox: function(){
921			
922
923			
924			
925
926		},
927		onPrev: function(element){		
928			
929		},
930		onNext: function(element){			
931			
932		},
933		errorMessage: 'The requested content cannot be loaded. Please try again later.' // Error message when content can't be loaded
934	});
935	
936	
937
938	// If auto open is enabled
939	
940
941	// Custom triggers
942	$(".myTopBox_Map").click(function(event){
943		event.preventDefault();
944		$('#topBoxTriggerstacks_in_662').trigger('click');
945	});
946});
947return stack;})(stacks.stacks_in_662);
948stacks.stacks_in_682 = {};
949stacks.stacks_in_682 = (function(stack) {
950var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function() {
951  $("#stacks_in_682").closest(".stacks_out").css("overflow", "visible");
952  $("#stacks_in_682").closest(".stacks_in").css("overflow", "visible");
953	if(!(/Android|iPhone|iPad|iPod|BlackBerry|Windows Phone/i).test(navigator.userAgent || navigator.vendor || window.opera)){
954	  $(".stacks_top").css("overflow", "visible");
955	}
956
957// 
958// Disable animation on mobile devices if the user opts for it ...
959// 
960
961	if((/Android|iPhone|iPad|iPod|BlackBerry|Windows Phone/i).test(navigator.userAgent || navigator.vendor || window.opera)){
962		$("#stacks_in_682 > .wow").removeAttr('class').removeAttr('data-wow-duration').removeAttr('data-wow-delay').removeAttr(' data-wow-offset').removeAttr('data-wow-iteration');
963	}
964});
965
966
967return stack;})(stacks.stacks_in_682);
968stacks.stacks_in_559 = {};
969stacks.stacks_in_559 = (function(stack) {
970var jQuery = stacks.jQuery;var $ = jQuery;// This javascript will be created for each instance of our stack
971
972$(document).ready(function() {
973	
974
975	// Helpers
976	var url = window.location;
977	var img = $('#imageWizardstacks_in_559 img').attr('src');
978	var alt = $('#imageWizardstacks_in_559 img').attr('alt');
979
980	// Pinterest helper
981	$("#socialButtonsstacks_in_559 .pinterestHelper").click(function(e){
982		e.preventDefault();
983		window.open('http://pinterest.com/pin/create/button/?url='+url+img+'&media='+url+img+'&description='+alt);
984	});
985
986});
987
988return stack;})(stacks.stacks_in_559);
989stacks.stacks_in_684 = {};
990stacks.stacks_in_684 = (function(stack) {
991var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function() {
992  $("#stacks_in_684").closest(".stacks_out").css("overflow", "visible");
993  $("#stacks_in_684").closest(".stacks_in").css("overflow", "visible");
994	if(!(/Android|iPhone|iPad|iPod|BlackBerry|Windows Phone/i).test(navigator.userAgent || navigator.vendor || window.opera)){
995	  $(".stacks_top").css("overflow", "visible");
996	}
997
998// 
999// Disable animation on mobile devices if the user opts for it ...
1000// 
1001
1002	if((/Android|iPhone|iPad|iPod|BlackBerry|Windows Phone/i).test(navigator.userAgent || navigator.vendor || window.opera)){
1003		$("#stacks_in_684 > .wow").removeAttr('class').removeAttr('data-wow-duration').removeAttr('data-wow-delay').removeAttr(' data-wow-offset').removeAttr('data-wow-iteration');
1004	}
1005});
1006
1007
1008return stack;})(stacks.stacks_in_684);
1009stacks.stacks_in_231 = {};
1010stacks.stacks_in_231 = (function(stack) {
1011var jQuery = stacks.jQuery;var $ = jQuery;// This javascript will be created for each instance of our stack
1012
1013$(document).ready(function() {
1014	
1015
1016	// Helpers
1017	var url = window.location;
1018	var img = $('#imageWizardstacks_in_231 img').attr('src');
1019	var alt = $('#imageWizardstacks_in_231 img').attr('alt');
1020
1021	// Pinterest helper
1022	$("#socialButtonsstacks_in_231 .pinterestHelper").click(function(e){
1023		e.preventDefault();
1024		window.open('http://pinterest.com/pin/create/button/?url='+url+img+'&media='+url+img+'&description='+alt);
1025	});
1026
1027});
1028
1029return stack;})(stacks.stacks_in_231);
1030stacks.stacks_in_883 = {};
1031stacks.stacks_in_883 = (function(stack) {
1032var jQuery = stacks.jQuery;var $ = jQuery;let TimedContentstacks_in_883 = {};
1033TimedContentstacks_in_883.init = function() {
1034
1035  //Inline countdown
1036  $("#stacks_in_883 countdown").replaceWith($("#stacks_in_883 .timed-content-countdown-wrap"));
1037
1038  this.timedContentTime = [
1039        ['Year',null],
1040        ['Month',null],
1041        ['Day',null],
1042        ['Hour',null],
1043        ['Minute',null],
1044        ['Second',null]
1045      ];
1046  this.nowDate = new Date(),
1047  this.daysOfWeek = [],
1048  this.countWeek = [],
1049  this.contentBefore = $("#stacks_in_883 .timed-content-before").clone(),
1050  this.contentDuring = $("#stacks_in_883 .timed-content-during").clone(),
1051  this.contentAfter = $("#stacks_in_883 .timed-content-after").clone(),
1052  this.isLocal = false;
1053
1054  //Add padding to elements that have greater than 2 digits
1055  if(this.timedContentTime.length < 6) {
1056    $("#stacks_in_883 .timed-content-countdown ."+this.timedContentTime[0][0].toLowerCase()).addClass("tc-digit-padding");
1057  }
1058
1059  this.tcTimeZone = 'America/Chicago';
1060  this.tcTimeZone = this.tcTimeZone.replace(/\s/g,'');
1061  //
1062  try {
1063    new Date(this.nowDate.toLocaleString('en-US', { timeZone: this.tcTimeZone }));
1064  } catch (e) {
1065    $("#stacks_in_883 .timed-content-wrap").attr("data-timezone","invalid: " + this.tcTimeZone);
1066    $("#stacks_in_883 .timed-content-wrap").addClass("invalid-timezone");
1067    this.isLocal = true;
1068    console.log(e);
1069  }
1070  //
1071  //
1072
1073  this.localDate = new Date();
1074  if(!this.isLocal) {
1075    this.localDate = toTzNow(this.localDate,this.tcTimeZone);
1076  }
1077
1078  this.startDate = dateTimeUtc('2020-08-09T04:00:00CDT', this.isLocal),
1079  this.endDate = dateTimeUtc('9999-08-09T15:30:00CDT', this.isLocal),
1080  this.initDate = dateTimeUtc('2020-08-09T04:00:00CDT', this.isLocal);
1081
1082  //
1083  //
1084  //
1085  //
1086  //
1087  //
1088  this.daysOfWeek.push(0);
1089  // 
1090  //
1091  //
1092  //
1093  //
1094  //
1095  //
1096  this.daysOfWeek.push(6);
1097  // 
1098  // 
1099  //
1100  //Repeat weekly
1101  $("#stacks_in_883 .timed-content-wrap").attr("data-repeat","every week");
1102  this.today = dateFns[`getDay`](this.localDate),
1103  this.startTime = dailyTime('2020-08-09T04:00:00CDT',this.isLocal),
1104  this.stopTime = dailyTime('9999-08-09T15:30:00CDT',this.isLocal);
1105  if(!this.daysOfWeek.includes(this.today)) {
1106    this.startTime = daysTillNext(this.today,this.daysOfWeek,this.startTime);
1107    this.hasStopped = -1;
1108  }
1109  // 
1110  //
1111
1112  if(!this.isLocal) {
1113    $("#stacks_in_883 .timed-content-wrap").attr("data-timezone",this.tcTimeZone);
1114    this.startDate = convertToTimeZone(this.startDate,this.tcTimeZone),
1115    this.endDate = convertToTimeZone(this.endDate,this.tcTimeZone),
1116    this.initDate = convertToTimeZone(this.initDate,this.tcTimeZone);
1117    this.startTime = convertToTimeZone(this.startTime,this.tcTimeZone);
1118    this.stopTime = convertToTimeZone(this.stopTime,this.tcTimeZone);
1119  } else {
1120    $("#stacks_in_883 .tc-details.timed-content-wrap .tc-timezone-notice").html(Intl.DateTimeFormat().resolvedOptions().timeZone);
1121  }
1122  //
1123  this.hasInitialized =  this.startDate.getTime() - this.nowDate.getTime(),
1124  this.hasStarted = this.startTime.getTime() - this.nowDate.getTime(),
1125  this.hasStopped = this.stopTime.getTime() - this.nowDate.getTime(),
1126  this.hasEnded = this.endDate.getTime() - this.nowDate.getTime();
1127
1128  if(this.hasEnded < 0 || this.daysOfWeek.length == 0) {
1129    //After
1130    $("#stacks_in_883 .timed-content-before,#stacks_in_883 .timed-content-during, #stacks_in_883 .timed-content-countdown-wrap").remove();
1131    $("#stacks_in_883 .timed-content-wrap").addClass("tc-loaded");
1132  } else if (this.hasStarted < 0 && this.hasStopped > 0 && this.hasInitialized < 0) {
1133    //During
1134    $("#stacks_in_883 .timed-content-before,#stacks_in_883 .timed-content-after").remove();
1135    timedContentStartCountDown("stacks_in_883","default","False",this.initDate,this.startTime,this.stopTime,this.endDate,"repeat-before","stop",this.contentBefore,this.contentDuring,this.contentAfter,this.timedContentTime,this.daysOfWeek,this.countWeek,'False','False',this.localDate);
1136  } else if (this.hasStarted < 0 && this.hasStopped < 0 && this.hasInitialized < 0) {
1137    //Before
1138    $("#stacks_in_883 .timed-content-during,#stacks_in_883 .timed-content-after").remove();
1139    timedContentStartCountDown("stacks_in_883","default","False",this.initDate,this.startTime,this.stopTime,this.endDate,"repeat-during","start-loop",this.contentBefore,this.contentDuring,this.contentAfter,this.timedContentTime,this.daysOfWeek,this.countWeek,'False','False',this.localDate);
1140  } else {
1141    //Before
1142    $("#stacks_in_883 .timed-content-during,#stacks_in_883 .timed-content-after").remove();
1143    timedContentStartCountDown("stacks_in_883","default","False",this.initDate,this.startTime,this.stopTime,this.endDate,"repeat-during","start",this.contentBefore,this.contentDuring,this.contentAfter,this.timedContentTime,this.daysOfWeek,this.countWeek,'False','False',this.localDate);
1144  }
1145  //
1146
1147  //
1148  $("#stacks_in_883 .timed-content-wrap").attr("data-init",this.initDate.toString());
1149  $("#stacks_in_883 .timed-content-wrap").attr("data-current-start",this.startTime.toString());
1150  $("#stacks_in_883 .timed-content-wrap").attr("data-current-stop",this.stopTime.toString());
1151  //
1152  $("#stacks_in_883 .timed-content-wrap").attr("data-end",this.endDate.toString());
1153  $("#stacks_in_883 .timed-content-wrap").attr("data-now",this.nowDate.toString());
1154}
1155$(document).ready(function() {
1156  TimedContentstacks_in_883.init();
1157});
1158
1159return stack;})(stacks.stacks_in_883);
1160stacks.stacks_in_739 = {};
1161stacks.stacks_in_739 = (function(stack) {
1162var jQuery = stacks.jQuery;var $ = jQuery;
1163( function($) {
1164
1165  $.easytabs = function(container, options) {
1166
1167        // Attach to plugin anything that should be available via
1168        // the $container.data('easytabs') object
1169    var plugin = this,
1170        $container = $(container),
1171
1172        defaults = {
1173          animate: true,
1174          panelActiveClass: "active",
1175          tabActiveClass: "active",
1176          defaultTab: "li:first-child",
1177          animationSpeed: "normal",
1178          tabs: "> ul > li",
1179          updateHash: true,
1180          cycle: false,
1181          collapsible: false,
1182          collapsedClass: "collapsed",
1183          collapsedByDefault: true,
1184          uiTabs: false,
1185          transitionIn: 'fadeIn',
1186          transitionOut: 'fadeOut',
1187          transitionInEasing: 'swing',
1188          transitionOutEasing: 'swing',
1189          transitionCollapse: 'slideUp',
1190          transitionUncollapse: 'slideDown',
1191          transitionCollapseEasing: 'swing',
1192          transitionUncollapseEasing: 'swing',
1193          containerClass: "",
1194          tabsClass: "",
1195          tabClass: "",
1196          panelClass: "",
1197          cache: true,
1198          panelContext: $container
1199        },
1200
1201        // Internal instance variables
1202        // (not available via easytabs object)
1203        $defaultTab,
1204        $defaultTabLink,
1205        transitions,
1206        lastHash,
1207        skipUpdateToHash,
1208        animationSpeeds = {
1209          fast: 200,
1210          normal: 400,
1211          slow: 600
1212        },
1213
1214        // Shorthand variable so that we don't need to call
1215        // plugin.settings throughout the plugin code
1216        settings;
1217
1218    // =============================================================
1219    // Functions available via easytabs object
1220    // =============================================================
1221
1222    plugin.init = function() {
1223
1224      plugin.settings = settings = $.extend({}, defaults, options);
1225
1226      // Add jQuery UI's crazy class names to markup,
1227      // so that markup will match theme CSS
1228      if ( settings.uiTabs ) {
1229        settings.tabActiveClass = 'ui-tabs-selected';
1230        settings.containerClass = 'ui-tabs ui-widget ui-widget-content ui-corner-all';
1231        settings.tabsClass = 'ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all';
1232        settings.tabClass = 'ui-state-default ui-corner-top';
1233        settings.panelClass = 'ui-tabs-panel ui-widget-content ui-corner-bottom';
1234      }
1235
1236      // If collapsible is true and defaultTab specified, assume user wants defaultTab showing (not collapsed)
1237      if ( settings.collapsible && options.defaultTab !== undefined && options.collpasedByDefault === undefined ) {
1238        settings.collapsedByDefault = false;
1239      }
1240
1241      // Convert 'normal', 'fast', and 'slow' animation speed settings to their respective speed in milliseconds
1242      if ( typeof(settings.animationSpeed) === 'string' ) {
1243        settings.animationSpeed = animationSpeeds[settings.animationSpeed];
1244      }
1245
1246      $('a.anchor').remove().prependTo('body');
1247
1248      // Store easytabs object on container so we can easily set
1249      // properties throughout
1250      $container.data('easytabs', {});
1251
1252      plugin.setTransitions();
1253
1254      plugin.getTabs();
1255
1256      addClasses();
1257
1258      setDefaultTab();
1259
1260      bindToTabClicks();
1261
1262      initHashChange();
1263
1264      initCycle();
1265
1266      // Append data-easytabs HTML attribute to make easy to query for
1267      // easytabs instances via CSS pseudo-selector
1268      $container.attr('data-easytabs', true);
1269    };
1270
1271    // Set transitions for switching between tabs based on options.
1272    // Could be used to update transitions if settings are changes.
1273    plugin.setTransitions = function() {
1274      transitions = ( settings.animate ) ? {
1275          show: settings.transitionIn,
1276          hide: settings.transitionOut,
1277          speed: settings.animationSpeed,
1278          collapse: settings.transitionCollapse,
1279          uncollapse: settings.transitionUncollapse,
1280          halfSpeed: settings.animationSpeed / 2
1281        } :
1282        {
1283          show: "show",
1284          hide: "hide",
1285          speed: 0,
1286          collapse: "hide",
1287          uncollapse: "show",
1288          halfSpeed: 0
1289        };
1290    };
1291
1292    // Find and instantiate tabs and panels.
1293    // Could be used to reset tab and panel collection if markup is
1294    // modified.
1295    plugin.getTabs = function() {
1296      var $matchingPanel;
1297
1298      // Find the initial set of elements matching the setting.tabs
1299      // CSS selector within the container
1300      plugin.tabs = $container.find(settings.tabs),
1301
1302      // Instantiate panels as empty jquery object
1303      plugin.panels = $(),
1304
1305      plugin.tabs.each(function(){
1306        var $tab = $(this),
1307            $a = $tab.children('a'),
1308
1309            // targetId is the ID of the panel, which is either the
1310            // `href` attribute for non-ajax tabs, or in the
1311            // `data-target` attribute for ajax tabs since the `href` is
1312            // the ajax URL
1313            targetId = $tab.children('a').data('target');
1314
1315        $tab.data('easytabs', {});
1316
1317        // If the tab has a `data-target` attribute, and is thus an ajax tab
1318        if ( targetId !== undefined && targetId !== null ) {
1319          $tab.data('easytabs').ajax = $a.attr('href');
1320        } else {
1321          targetId = $a.attr('href');
1322        }
1323        targetId = targetId.match(/#([^\?]+)/)[0].substr(1);
1324
1325        $matchingPanel = settings.panelContext.find("#" + targetId);
1326
1327        // If tab has a matching panel, add it to panels
1328        if ( $matchingPanel.length ) {
1329
1330          // Store panel height before hiding
1331          $matchingPanel.data('easytabs', {
1332            position: $matchingPanel.css('position'),
1333            visibility: $matchingPanel.css('visibility')
1334          });
1335
1336          // Don't hide panel if it's active (allows `getTabs` to be called manually to re-instantiate tab collection)
1337          $matchingPanel.not(settings.panelActiveClass).hide();
1338
1339          plugin.panels = plugin.panels.add($matchingPanel);
1340
1341          $tab.data('easytabs').panel = $matchingPanel;
1342
1343        // Otherwise, remove tab from tabs collection
1344        } else {
1345          plugin.tabs = plugin.tabs.not($tab);
1346        }
1347      });
1348    };
1349
1350    // Select tab and fire callback
1351    plugin.selectTab = function($clicked, callback) {
1352      var url = window.location,
1353          hash = url.hash.match(/^[^\?]*/)[0],
1354          $targetPanel = $clicked.parent().data('easytabs').panel,
1355          ajaxUrl = $clicked.parent().data('easytabs').ajax;
1356
1357      // Tab is collapsible and active => toggle collapsed state
1358      if( settings.collapsible && ! skipUpdateToHash && ($clicked.hasClass(settings.tabActiveClass) || $clicked.hasClass(settings.collapsedClass)) ) {
1359        plugin.toggleTabCollapse($clicked, $targetPanel, ajaxUrl, callback);
1360
1361      // Tab is not active and panel is not active => select tab
1362      } else if( ! $clicked.hasClass(settings.tabActiveClass) || ! $targetPanel.hasClass(settings.panelActiveClass) ){
1363        activateTab($clicked, $targetPanel, ajaxUrl, callback);
1364
1365      // Cache is disabled => reload (e.g reload an ajax tab).
1366      } else if ( ! settings.cache ){
1367        activateTab($clicked, $targetPanel, ajaxUrl, callback);
1368      }
1369
1370    };
1371
1372    // Toggle tab collapsed state and fire callback
1373    plugin.toggleTabCollapse = function($clicked, $targetPanel, ajaxUrl, callback) {
1374      plugin.panels.stop(true,true);
1375
1376      if( fire($container,"easytabs:before", [$clicked, $targetPanel, settings]) ){
1377        plugin.tabs.filter("." + settings.tabActiveClass).removeClass(settings.tabActiveClass).children().removeClass(settings.tabActiveClass);
1378
1379        // If panel is collapsed, uncollapse it
1380        if( $clicked.hasClass(settings.collapsedClass) ){
1381
1382          // If ajax panel and not already cached
1383          if( ajaxUrl && (!settings.cache || !$clicked.parent().data('easytabs').cached) ) {
1384            $container.trigger('easytabs:ajax:beforeSend', [$clicked, $targetPanel]);
1385
1386            $targetPanel.load(ajaxUrl, function(response, status, xhr){
1387              $clicked.parent().data('easytabs').cached = true;
1388              $container.trigger('easytabs:ajax:complete', [$clicked, $targetPanel, response, status, xhr]);
1389            });
1390          }
1391
1392          // Update CSS classes of tab and panel
1393          $clicked.parent()
1394            .removeClass(settings.collapsedClass)
1395            .addClass(settings.tabActiveClass)
1396            .children()
1397              .removeClass(settings.collapsedClass)
1398              .addClass(settings.tabActiveClass);
1399
1400          $targetPanel
1401            .addClass(settings.panelActiveClass)
1402            [transitions.uncollapse](transitions.speed, settings.transitionUncollapseEasing, function(){
1403              $container.trigger('easytabs:midTransition', [$clicked, $targetPanel, settings]);
1404              if(typeof callback == 'function') callback();
1405            });
1406
1407        // Otherwise, collapse it
1408        } else {
1409
1410          // Update CSS classes of tab and panel
1411          $clicked.addClass(settings.collapsedClass)
1412            .parent()
1413              .addClass(settings.collapsedClass);
1414
1415          $targetPanel
1416            .removeClass(settings.panelActiveClass)
1417            [transitions.collapse](transitions.speed, settings.transitionCollapseEasing, function(){
1418              $container.trigger("easytabs:midTransition", [$clicked, $targetPanel, settings]);
1419              if(typeof callback == 'function') callback();
1420            });
1421        }
1422      }
1423    };
1424
1425
1426    // Find tab with target panel matching value
1427    plugin.matchTab = function(hash) {
1428      return plugin.tabs.find("[href='" + hash + "'],[data-target='" + hash + "']").first();
1429    };
1430
1431    // Find panel with `id` matching value
1432    plugin.matchInPanel = function(hash) {
1433      return ( hash ? plugin.panels.filter(':has(' + hash + ')').first() : [] );
1434    };
1435
1436    // Select matching tab when URL hash changes
1437    plugin.selectTabFromHashChange = function() {
1438      var hash = window.location.hash.match(/^[^\?]*/)[0],
1439          $tab = plugin.matchTab(hash),
1440          $panel;
1441
1442      if ( settings.updateHash ) {
1443
1444        // If hash directly matches tab
1445        if( $tab.length ){
1446          skipUpdateToHash = true;
1447          plugin.selectTab( $tab );
1448
1449        } else {
1450          $panel = plugin.matchInPanel(hash);
1451
1452          // If panel contains element matching hash
1453          if ( $panel.length ) {
1454            hash = '#' + $panel.attr('id');
1455            $tab = plugin.matchTab(hash);
1456            skipUpdateToHash = true;
1457            plugin.selectTab( $tab );
1458
1459          // If default tab is not active...
1460          } else if ( ! $defaultTab.hasClass(settings.tabActiveClass) && ! settings.cycle ) {
1461
1462            // ...and hash is blank or matches a parent of the tab container or
1463            // if the last tab (before the hash updated) was one of the other tabs in this container.
1464            if ( hash === '' || plugin.matchTab(lastHash).length || $container.closest(hash).length ) {
1465              skipUpdateToHash = true;
1466              plugin.selectTab( $defaultTabLink );
1467            }
1468          }
1469        }
1470      }
1471    };
1472
1473    // Cycle through tabs
1474    plugin.cycleTabs = function(tabNumber){
1475      if(settings.cycle){
1476        tabNumber = tabNumber % plugin.tabs.length;
1477        $tab = $( plugin.tabs[tabNumber] ).children("a").first();
1478        skipUpdateToHash = true;
1479        plugin.selectTab( $tab, function() {
1480          setTimeout(function(){ plugin.cycleTabs(tabNumber + 1); }, settings.cycle);
1481        });
1482      }
1483    };
1484
1485    // Convenient public methods
1486    plugin.publicMethods = {
1487      select: function(tabSelector){
1488        var $tab;
1489
1490        // Find tab container that matches selector (like 'li#tab-one' which contains tab link)
1491        if ( ($tab = plugin.tabs.filter(tabSelector)).length === 0 ) {
1492
1493          // Find direct tab link that matches href (like 'a[href="#panel-1"]')
1494          if ( ($tab = plugin.tabs.find("a[href='" + tabSelector + "']")).length === 0 ) {
1495
1496            // Find direct tab link that matches selector (like 'a#tab-1')
1497            if ( ($tab = plugin.tabs.find("a" + tabSelector)).length === 0 ) {
1498
1499              // Find direct tab link that matches data-target (lik 'a[data-target="#panel-1"]')
1500              if ( ($tab = plugin.tabs.find("[data-target='" + tabSelector + "']")).length === 0 ) {
1501
1502                // Find direct tab link that ends in the matching href (like 'a[href$="#panel-1"]', which would also match http://example.com/currentpage/#panel-1)
1503                if ( ($tab = plugin.tabs.find("a[href$='" + tabSelector + "']")).length === 0 ) {
1504
1505                  $.error('Tab \'' + tabSelector + '\' does not exist in tab set');
1506                }
1507              }
1508            }
1509          }
1510        } else {
1511          // Select the child tab link, since the first option finds the tab container (like <li>)
1512          $tab = $tab.children("a").first();
1513        }
1514        plugin.selectTab($tab);
1515      }
1516    };
1517
1518    // =============================================================
1519    // Private functions
1520    // =============================================================
1521
1522    // Triggers an event on an element and returns the event result
1523    var fire = function(obj, name, data) {
1524      var event = $.Event(name);
1525      obj.trigger(event, data);
1526      return event.result !== false;
1527    }
1528
1529    // Add CSS classes to markup (if specified), called by init
1530    var addClasses = function() {
1531      $container.addClass(settings.containerClass);
1532      plugin.tabs.parent().addClass(settings.tabsClass);
1533      plugin.tabs.addClass(settings.tabClass);
1534      plugin.panels.addClass(settings.panelClass);
1535    };
1536
1537    // Set the default tab, whether from hash (bookmarked) or option,
1538    // called by init
1539    var setDefaultTab = function(){
1540      var hash = window.location.hash.match(/^[^\?]*/)[0],
1541          $selectedTab = plugin.matchTab(hash).parent(),
1542          $panel;
1543
1544      // If hash directly matches one of the tabs, active on page-load
1545      if( $selectedTab.length === 1 ){
1546        $defaultTab = $selectedTab;
1547        settings.cycle = false;
1548
1549      } else {
1550        $panel = plugin.matchInPanel(hash);
1551
1552        // If one of the panels contains the element matching the hash,
1553        // make it active on page-load
1554        if ( $panel.length ) {
1555          hash = '#' + $panel.attr('id');
1556          $defaultTab = plugin.matchTab(hash).parent();
1557
1558        // Otherwise, make the default tab the one that's active on page-load
1559        } else {
1560          $defaultTab = plugin.tabs.parent().find(settings.defaultTab);
1561          if ( $defaultTab.length === 0 ) {
1562            $.error("The specified default tab ('" + settings.defaultTab + "') could not be found in the tab set.");
1563          }
1564        }
1565      }
1566
1567      $defaultTabLink = $defaultTab.children("a").first();
1568
1569      activateDefaultTab($selectedTab);
1570    };
1571
1572    // Activate defaultTab (or collapse by default), called by setDefaultTab
1573    var activateDefaultTab = function($selectedTab) {
1574      var defaultPanel,
1575          defaultAjaxUrl;
1576
1577      if ( settings.collapsible && $selectedTab.length === 0 && settings.collapsedByDefault ) {
1578        $defaultTab
1579          .addClass(settings.collapsedClass)
1580          .children()
1581            .addClass(settings.collapsedClass);
1582
1583      } else {
1584
1585        defaultPanel = $( $defaultTab.data('easytabs').panel );
1586        defaultAjaxUrl = $defaultTab.data('easytabs').ajax;
1587
1588        if ( defaultAjaxUrl && (!settings.cache || !$defaultTab.data('easytabs').cached) ) {
1589          $container.trigger('easytabs:ajax:beforeSend', [$defaultTabLink, defaultPanel]);
1590          defaultPanel.load(defaultAjaxUrl, function(response, status, xhr){
1591            $defaultTab.data('easytabs').cached = true;
1592            $container.trigger('easytabs:ajax:complete', [$defaultTabLink, defaultPanel, response, status, xhr]);
1593          });
1594        }
1595
1596        $defaultTab.data('easytabs').panel
1597          .show()
1598          .addClass(settings.panelActiveClass);
1599
1600        $defaultTab
1601          .addClass(settings.tabActiveClass)
1602          .children()
1603            .addClass(settings.tabActiveClass);
1604      }
1605    };
1606
1607    // Bind tab-select funtionality to namespaced click event, called by
1608    // init
1609    var bindToTabClicks = function() {
1610      plugin.tabs.children("a").bind("click.easytabs", function(e) {
1611
1612        // Stop cycling when a tab is clicked
1613        settings.cycle = false;
1614
1615        // Hash will be updated when tab is clicked,
1616        // don't cause tab to re-select when hash-change event is fired
1617        skipUpdateToHash = false;
1618
1619        // Select the panel for the clicked tab
1620        plugin.selectTab( $(this) );
1621
1622        // Don't follow the link to the anchor
1623        e.preventDefault();
1624      });
1625    };
1626
1627    // Activate a given tab/panel, called from plugin.selectTab:
1628    //
1629    //   * fire `easytabs:before` hook
1630    //   * get ajax if new tab is an uncached ajax tab
1631    //   * animate out previously-active panel
1632    //   * fire `easytabs:midTransition` hook
1633    //   * update URL hash
1634    //   * animate in newly-active panel
1635    //   * update CSS classes for inactive and active tabs/panels
1636    //
1637    // TODO: This could probably be broken out into many more modular
1638    // functions
1639    var activateTab = function($clicked, $targetPanel, ajaxUrl, callback) {
1640      plugin.panels.stop(true,true);
1641
1642      if( fire($container,"easytabs:before", [$clicked, $targetPanel, settings]) ){
1643        var $visiblePanel = plugin.panels.filter(":visible"),
1644            $panelContainer = $targetPanel.parent(),
1645            targetHeight,
1646            visibleHeight,
1647            heightDifference,
1648            showPanel,
1649            hash = window.location.hash.match(/^[^\?]*/)[0];
1650
1651        if (settings.animate) {
1652          targetHeight = getHeightForHidden($targetPanel);
1653          visibleHeight = $visiblePanel.length ? setAndReturnHeight($visiblePanel) : 0;
1654          heightDifference = targetHeight - visibleHeight;
1655        }
1656
1657        // Set lastHash to help indicate if defaultTab should be
1658        // activated across multiple tab instances.
1659        lastHash = hash;
1660
1661        // TODO: Move this function elsewhere
1662        showPanel = function() {
1663          // At this point, the previous panel is hidden, and the new one will be selected
1664          $container.trigger("easytabs:midTransition", [$clicked, $targetPanel, settings]);
1665
1666          // Gracefully animate between panels of differing heights, start height change animation *after* panel change if panel needs to contract,
1667          // so that there is no chance of making the visible panel overflowing the height of the target panel
1668          if (settings.animate && settings.transitionIn == 'fadeIn') {
1669            if (heightDifference < 0)
1670              $panelContainer.animate({
1671                height: $panelContainer.height() + heightDifference
1672              }, transitions.halfSpeed ).css({ 'min-height': '' });
1673          }
1674
1675          if ( settings.updateHash && ! skipUpdateToHash ) {
1676            //window.location = url.toString().replace((url.pathname + hash), (url.pathname + $clicked.attr("href")));
1677            // Not sure why this behaves so differently, but it's more straight forward and seems to have less side-effects
1678            window.location.hash = '#' + $targetPanel.attr('id');
1679          } else {
1680            skipUpdateToHash = false;
1681          }
1682
1683          $targetPanel
1684            [transitions.show](transitions.speed, settings.transitionInEasing, function(){
1685              $panelContainer.css({height: '', 'min-height': ''}); // After the transition, unset the height
1686              $container.trigger("easytabs:after", [$clicked, $targetPanel, settings]);
1687              // callback only gets called if selectTab actually does something, since it's inside the if block
1688              if(typeof callback == 'function'){
1689                callback();
1690              }
1691          });
1692        };
1693
1694        if ( ajaxUrl && (!settings.cache || !$clicked.parent().data('easytabs').cached) ) {
1695          $container.trigger('easytabs:ajax:beforeSend', [$clicked, $targetPanel]);
1696          $targetPanel.load(ajaxUrl, function(response, status, xhr){
1697            $clicked.parent().data('easytabs').cached = true;
1698            $container.trigger('easytabs:ajax:complete', [$clicked, $targetPanel, response, status, xhr]);
1699          });
1700        }
1701
1702        // Gracefully animate between panels of differing heights, start height change animation *before* panel change if panel needs to expand,
1703        // so that there is no chance of making the target panel overflowing the height of the visible panel
1704        if( settings.animate && settings.transitionOut == 'fadeOut' ) {
1705          if( heightDifference > 0 ) {
1706            $panelContainer.animate({
1707              height: ( $panelContainer.height() + heightDifference )
1708            }, transitions.halfSpeed );
1709          } else {
1710            // Prevent height jumping before height transition is triggered at midTransition
1711            $panelContainer.css({ 'min-height': $panelContainer.height() });
1712          }
1713        }
1714
1715        // Change the active tab *first* to provide immediate feedback when the user clicks
1716        plugin.tabs.filter("." + settings.tabActiveClass).removeClass(settings.tabActiveClass).children().removeClass(settings.tabActiveClass);
1717        plugin.tabs.filter("." + settings.collapsedClass).removeClass(settings.collapsedClass).children().removeClass(settings.collapsedClass);
1718        $clicked.parent().addClass(settings.tabActiveClass).children().addClass(settings.tabActiveClass);
1719
1720        plugin.panels.filter("." + settings.panelActiveClass).removeClass(settings.panelActiveClass);
1721        $targetPanel.addClass(settings.panelActiveClass);
1722
1723        if( $visiblePanel.length ) {
1724          $visiblePanel
1725            [transitions.hide](transitions.speed, settings.transitionOutEasing, showPanel);
1726        } else {
1727          $targetPanel
1728            [transitions.uncollapse](transitions.speed, settings.transitionUncollapseEasing, showPanel);
1729        }
1730      }
1731    };
1732
1733    // Get heights of panels to enable animation between panels of
1734    // differing heights, called by activateTab
1735    var getHeightForHidden = function($targetPanel){
1736
1737      if ( $targetPanel.data('easytabs') && $targetPanel.data('easytabs').lastHeight ) {
1738        return $targetPanel.data('easytabs').lastHeight;
1739      }
1740
1741      // this is the only property easytabs changes, so we need to grab its value on each tab change
1742      var display = $targetPanel.css('display'),
1743
1744          // Workaround, because firefox returns wrong height if element itself has absolute positioning
1745          height = $targetPanel
1746            .wrap($('<div>', {position: 'absolute', 'visibility': 'hidden', 'overflow': 'hidden'}))
1747            .css({'position':'relative','visibility':'hidden','display':'block'})
1748            .outerHeight();
1749
1750      $targetPanel.unwrap();
1751
1752      // Return element to previous state
1753      $targetPanel.css({
1754        position: $targetPanel.data('easytabs').position,
1755        visibility: $targetPanel.data('easytabs').visibility,
1756        display: display
1757      });
1758
1759      // Cache height
1760      $targetPanel.data('easytabs').lastHeight = height;
1761
1762      return height;
1763    };
1764
1765    // Since the height of the visible panel may have been manipulated due to interaction,
1766    // we want to re-cache the visible height on each tab change, called
1767    // by activateTab
1768    var setAndReturnHeight = function($visiblePanel) {
1769      var height = $visiblePanel.outerHeight();
1770
1771      if( $visiblePanel.data('easytabs') ) {
1772        $visiblePanel.data('easytabs').lastHeight = height;
1773      } else {
1774        $visiblePanel.data('easytabs', {lastHeight: height});
1775      }
1776      return height;
1777    };
1778
1779    // Setup hash-change callback for forward- and back-button
1780    // functionality, called by init
1781    var initHashChange = function(){
1782
1783      // enabling back-button with jquery.hashchange plugin
1784      // http://benalman.com/projects/jquery-hashchange-plugin/
1785      if(typeof $(window).hashchange === 'function'){
1786        $(window).hashchange( function(){
1787          plugin.selectTabFromHashChange();
1788        });
1789      } else if ($.address && typeof $.address.change === 'function') { // back-button with jquery.address plugin http://www.asual.com/jquery/address/docs/
1790        $.address.change( function(){
1791          plugin.selectTabFromHashChange();
1792        });
1793      }
1794    };
1795
1796    // Begin cycling if set in options, called by init
1797    var initCycle = function(){
1798      var tabNumber;
1799      if (settings.cycle) {
1800        tabNumber = plugin.tabs.index($defaultTab);
1801        setTimeout( function(){ plugin.cycleTabs(tabNumber + 1); }, settings.cycle);
1802      }
1803    };
1804
1805
1806    plugin.init();
1807
1808  };
1809
1810  $.fn.easytabs = function(options) {
1811    var args = arguments;
1812
1813    return this.each(function() {
1814      var $this = $(this),
1815          plugin = $this.data('easytabs');
1816
1817      // Initialization was called with $(el).easytabs( { options } );
1818      if (undefined === plugin) {
1819        plugin = new $.easytabs(this, options);
1820        $this.data('easytabs', plugin);
1821      }
1822
1823      // User called public method
1824      if ( plugin.publicMethods[options] ){
1825        return plugin.publicMethods[options](Array.prototype.slice.call( args, 1 ));
1826      }
1827    });
1828  };
1829
1830})(jQuery);
1831
1832$(document).ready( function() {
1833     $('#tabs_stacks_in_739').easytabs({
1834	      animationSpeed: 300,
1835	      
1836	      animate: true,
1837	      defaultTab: "li:nth-child(1)",
1838	      cycle: false
1839     });
1840   });
1841  
1842return stack;})(stacks.stacks_in_739);
1843stacks.stacks_in_887 = {};
1844stacks.stacks_in_887 = (function(stack) {
1845var jQuery = stacks.jQuery;var $ = jQuery;
1846( function($) {
1847
1848  $.easytabs = function(container, options) {
1849
1850        // Attach to plugin anything that should be available via
1851        // the $container.data('easytabs') object
1852    var plugin = this,
1853        $container = $(container),
1854
1855        defaults = {
1856          animate: true,
1857          panelActiveClass: "active",
1858          tabActiveClass: "active",
1859          defaultTab: "li:first-child",
1860          animationSpeed: "normal",
1861          tabs: "> ul > li",
1862          updateHash: true,
1863          cycle: false,
1864          collapsible: false,
1865          collapsedClass: "collapsed",
1866          collapsedByDefault: true,
1867          uiTabs: false,
1868          transitionIn: 'fadeIn',
1869          transitionOut: 'fadeOut',
1870          transitionInEasing: 'swing',
1871          transitionOutEasing: 'swing',
1872          transitionCollapse: 'slideUp',
1873          transitionUncollapse: 'slideDown',
1874          transitionCollapseEasing: 'swing',
1875          transitionUncollapseEasing: 'swing',
1876          containerClass: "",
1877          tabsClass: "",
1878          tabClass: "",
1879          panelClass: "",
1880          cache: true,
1881          panelContext: $container
1882        },
1883
1884        // Internal instance variables
1885        // (not available via easytabs object)
1886        $defaultTab,
1887        $defaultTabLink,
1888        transitions,
1889        lastHash,
1890        skipUpdateToHash,
1891        animationSpeeds = {
1892          fast: 200,
1893          normal: 400,
1894          slow: 600
1895        },
1896
1897        // Shorthand variable so that we don't need to call
1898        // plugin.settings throughout the plugin code
1899        settings;
1900
1901    // =============================================================
1902    // Functions available via easytabs object
1903    // =============================================================
1904
1905    plugin.init = function() {
1906
1907      plugin.settings = settings = $.extend({}, defaults, options);
1908
1909      // Add jQuery UI's crazy class names to markup,
1910      // so that markup will match theme CSS
1911      if ( settings.uiTabs ) {
1912        settings.tabActiveClass = 'ui-tabs-selected';
1913        settings.containerClass = 'ui-tabs ui-widget ui-widget-content ui-corner-all';
1914        settings.tabsClass = 'ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all';
1915        settings.tabClass = 'ui-state-default ui-corner-top';
1916        settings.panelClass = 'ui-tabs-panel ui-widget-content ui-corner-bottom';
1917      }
1918
1919      // If collapsible is true and defaultTab specified, assume user wants defaultTab showing (not collapsed)
1920      if ( settings.collapsible && options.defaultTab !== undefined && options.collpasedByDefault === undefined ) {
1921        settings.collapsedByDefault = false;
1922      }
1923
1924      // Convert 'normal', 'fast', and 'slow' animation speed settings to their respective speed in milliseconds
1925      if ( typeof(settings.animationSpeed) === 'string' ) {
1926        settings.animationSpeed = animationSpeeds[settings.animationSpeed];
1927      }
1928
1929      $('a.anchor').remove().prependTo('body');
1930
1931      // Store easytabs object on container so we can easily set
1932      // properties throughout
1933      $container.data('easytabs', {});
1934
1935      plugin.setTransitions();
1936
1937      plugin.getTabs();
1938
1939      addClasses();
1940
1941      setDefaultTab();
1942
1943      bindToTabClicks();
1944
1945      initHashChange();
1946
1947      initCycle();
1948
1949      // Append data-easytabs HTML attribute to make easy to query for
1950      // easytabs instances via CSS pseudo-selector
1951      $container.attr('data-easytabs', true);
1952    };
1953
1954    // Set transitions for switching between tabs based on options.
1955    // Could be used to update transitions if settings are changes.
1956    plugin.setTransitions = function() {
1957      transitions = ( settings.animate ) ? {
1958          show: settings.transitionIn,
1959          hide: settings.transitionOut,
1960          speed: settings.animationSpeed,
1961          collapse: settings.transitionCollapse,
1962          uncollapse: settings.transitionUncollapse,
1963          halfSpeed: settings.animationSpeed / 2
1964        } :
1965        {
1966          show: "show",
1967          hide: "hide",
1968          speed: 0,
1969          collapse: "hide",
1970          uncollapse: "show",
1971          halfSpeed: 0
1972        };
1973    };
1974
1975    // Find and instantiate tabs and panels.
1976    // Could be used to reset tab and panel collection if markup is
1977    // modified.
1978    plugin.getTabs = function() {
1979      var $matchingPanel;
1980
1981      // Find the initial set of elements matching the setting.tabs
1982      // CSS selector within the container
1983      plugin.tabs = $container.find(settings.tabs),
1984
1985      // Instantiate panels as empty jquery object
1986      plugin.panels = $(),
1987
1988      plugin.tabs.each(function(){
1989        var $tab = $(this),
1990            $a = $tab.children('a'),
1991
1992            // targetId is the ID of the panel, which is either the
1993            // `href` attribute for non-ajax tabs, or in the
1994            // `data-target` attribute for ajax tabs since the `href` is
1995            // the ajax URL
1996            targetId = $tab.children('a').data('target');
1997
1998        $tab.data('easytabs', {});
1999
2000        // If the tab has a `data-target` attribute, and is thus an ajax tab
2001        if ( targetId !== undefined && targetId !== null ) {
2002          $tab.data('easytabs').ajax = $a.attr('href');
2003        } else {
2004          targetId = $a.attr('href');
2005        }
2006        targetId = targetId.match(/#([^\?]+)/)[0].substr(1);
2007
2008        $matchingPanel = settings.panelContext.find("#" + targetId);
2009
2010        // If tab has a matching panel, add it to panels
2011        if ( $matchingPanel.length ) {
2012
2013          // Store panel height before hiding
2014          $matchingPanel.data('easytabs', {
2015            position: $matchingPanel.css('position'),
2016            visibility: $matchingPanel.css('visibility')
2017          });
2018
2019          // Don't hide panel if it's active (allows `getTabs` to be called manually to re-instantiate tab collection)
2020          $matchingPanel.not(settings.panelActiveClass).hide();
2021
2022          plugin.panels = plugin.panels.add($matchingPanel);
2023
2024          $tab.data('easytabs').panel = $matchingPanel;
2025
2026        // Otherwise, remove tab from tabs collection
2027        } else {
2028          plugin.tabs = plugin.tabs.not($tab);
2029        }
2030      });
2031    };
2032
2033    // Select tab and fire callback
2034    plugin.selectTab = function($clicked, callback) {
2035      var url = window.location,
2036          hash = url.hash.match(/^[^\?]*/)[0],
2037          $targetPanel = $clicked.parent().data('easytabs').panel,
2038          ajaxUrl = $clicked.parent().data('easytabs').ajax;
2039
2040      // Tab is collapsible and active => toggle collapsed state
2041      if( settings.collapsible && ! skipUpdateToHash && ($clicked.hasClass(settings.tabActiveClass) || $clicked.hasClass(settings.collapsedClass)) ) {
2042        plugin.toggleTabCollapse($clicked, $targetPanel, ajaxUrl, callback);
2043
2044      // Tab is not active and panel is not active => select tab
2045      } else if( ! $clicked.hasClass(settings.tabActiveClass) || ! $targetPanel.hasClass(settings.panelActiveClass) ){
2046        activateTab($clicked, $targetPanel, ajaxUrl, callback);
2047
2048      // Cache is disabled => reload (e.g reload an ajax tab).
2049      } else if ( ! settings.cache ){
2050        activateTab($clicked, $targetPanel, ajaxUrl, callback);
2051      }
2052
2053    };
2054
2055    // Toggle tab collapsed state and fire callback
2056    plugin.toggleTabCollapse = function($clicked, $targetPanel, ajaxUrl, callback) {
2057      plugin.panels.stop(true,true);
2058
2059      if( fire($container,"easytabs:before", [$clicked, $targetPanel, settings]) ){
2060        plugin.tabs.filter("." + settings.tabActiveClass).removeClass(settings.tabActiveClass).children().removeClass(settings.tabActiveClass);
2061
2062        // If panel is collapsed, uncollapse it
2063        if( $clicked.hasClass(settings.collapsedClass) ){
2064
2065          // If ajax panel and not already cached
2066          if( ajaxUrl && (!settings.cache || !$clicked.parent().data('easytabs').cached) ) {
2067            $container.trigger('easytabs:ajax:beforeSend', [$clicked, $targetPanel]);
2068
2069            $targetPanel.load(ajaxUrl, function(response, status, xhr){
2070              $clicked.parent().data('easytabs').cached = true;
2071              $container.trigger('easytabs:ajax:complete', [$clicked, $targetPanel, response, status, xhr]);
2072            });
2073          }
2074
2075          // Update CSS classes of tab and panel
2076          $clicked.parent()
2077            .removeClass(settings.collapsedClass)
2078            .addClass(settings.tabActiveClass)
2079            .children()
2080              .removeClass(settings.collapsedClass)
2081              .addClass(settings.tabActiveClass);
2082
2083          $targetPanel
2084            .addClass(settings.panelActiveClass)
2085            [transitions.uncollapse](transitions.speed, settings.transitionUncollapseEasing, function(){
2086              $container.trigger('easytabs:midTransition', [$clicked, $targetPanel, settings]);
2087              if(typeof callback == 'function') callback();
2088            });
2089
2090        // Otherwise, collapse it
2091        } else {
2092
2093          // Update CSS classes of tab and panel
2094          $clicked.addClass(settings.collapsedClass)
2095            .parent()
2096              .addClass(settings.collapsedClass);
2097
2098          $targetPanel
2099            .removeClass(settings.panelActiveClass)
2100            [transitions.collapse](transitions.speed, settings.transitionCollapseEasing, function(){
2101              $container.trigger("easytabs:midTransition", [$clicked, $targetPanel, settings]);
2102              if(typeof callback == 'function') callback();
2103            });
2104        }
2105      }
2106    };
2107
2108
2109    // Find tab with target panel matching value
2110    plugin.matchTab = function(hash) {
2111      return plugin.tabs.find("[href='" + hash + "'],[data-target='" + hash + "']").first();
2112    };
2113
2114    // Find panel with `id` matching value
2115    plugin.matchInPanel = function(hash) {
2116      return ( hash ? plugin.panels.filter(':has(' + hash + ')').first() : [] );
2117    };
2118
2119    // Select matching tab when URL hash changes
2120    plugin.selectTabFromHashChange = function() {
2121      var hash = window.location.hash.match(/^[^\?]*/)[0],
2122          $tab = plugin.matchTab(hash),
2123          $panel;
2124
2125      if ( settings.updateHash ) {
2126
2127        // If hash directly matches tab
2128        if( $tab.length ){
2129          skipUpdateToHash = true;
2130          plugin.selectTab( $tab );
2131
2132        } else {
2133          $panel = plugin.matchInPanel(hash);
2134
2135          // If panel contains element matching hash
2136          if ( $panel.length ) {
2137            hash = '#' + $panel.attr('id');
2138            $tab = plugin.matchTab(hash);
2139            skipUpdateToHash = true;
2140            plugin.selectTab( $tab );
2141
2142          // If default tab is not active...
2143          } else if ( ! $defaultTab.hasClass(settings.tabActiveClass) && ! settings.cycle ) {
2144
2145            // ...and hash is blank or matches a parent of the tab container or
2146            // if the last tab (before the hash updated) was one of the other tabs in this container.
2147            if ( hash === '' || plugin.matchTab(lastHash).length || $container.closest(hash).length ) {
2148              skipUpdateToHash = true;
2149              plugin.selectTab( $defaultTabLink );
2150            }
2151          }
2152        }
2153      }
2154    };
2155
2156    // Cycle through tabs
2157    plugin.cycleTabs = function(tabNumber){
2158      if(settings.cycle){
2159        tabNumber = tabNumber % plugin.tabs.length;
2160        $tab = $( plugin.tabs[tabNumber] ).children("a").first();
2161        skipUpdateToHash = true;
2162        plugin.selectTab( $tab, function() {
2163          setTimeout(function(){ plugin.cycleTabs(tabNumber + 1); }, settings.cycle);
2164        });
2165      }
2166    };
2167
2168    // Convenient public methods
2169    plugin.publicMethods = {
2170      select: function(tabSelector){
2171        var $tab;
2172
2173        // Find tab container that matches selector (like 'li#tab-one' which contains tab link)
2174        if ( ($tab = plugin.tabs.filter(tabSelector)).length === 0 ) {
2175
2176          // Find direct tab link that matches href (like 'a[href="#panel-1"]')
2177          if ( ($tab = plugin.tabs.find("a[href='" + tabSelector + "']")).length === 0 ) {
2178
2179            // Find direct tab link that matches selector (like 'a#tab-1')
2180            if ( ($tab = plugin.tabs.find("a" + tabSelector)).length === 0 ) {
2181
2182              // Find direct tab link that matches data-target (lik 'a[data-target="#panel-1"]')
2183              if ( ($tab = plugin.tabs.find("[data-target='" + tabSelector + "']")).length === 0 ) {
2184
2185                // Find direct tab link that ends in the matching href (like 'a[href$="#panel-1"]', which would also match http://example.com/currentpage/#panel-1)
2186                if ( ($tab = plugin.tabs.find("a[href$='" + tabSelector + "']")).length === 0 ) {
2187
2188                  $.error('Tab \'' + tabSelector + '\' does not exist in tab set');
2189                }
2190              }
2191            }
2192          }
2193        } else {
2194          // Select the child tab link, since the first option finds the tab container (like <li>)
2195          $tab = $tab.children("a").first();
2196        }
2197        plugin.selectTab($tab);
2198      }
2199    };
2200
2201    // =============================================================
2202    // Private functions
2203    // =============================================================
2204
2205    // Triggers an event on an element and returns the event result
2206    var fire = function(obj, name, data) {
2207      var event = $.Event(name);
2208      obj.trigger(event, data);
2209      return event.result !== false;
2210    }
2211
2212    // Add CSS classes to markup (if specified), called by init
2213    var addClasses = function() {
2214      $container.addClass(settings.containerClass);
2215      plugin.tabs.parent().addClass(settings.tabsClass);
2216      plugin.tabs.addClass(settings.tabClass);
2217      plugin.panels.addClass(settings.panelClass);
2218    };
2219
2220    // Set the default tab, whether from hash (bookmarked) or option,
2221    // called by init
2222    var setDefaultTab = function(){
2223      var hash = window.location.hash.match(/^[^\?]*/)[0],
2224          $selectedTab = plugin.matchTab(hash).parent(),
2225          $panel;
2226
2227      // If hash directly matches one of the tabs, active on page-load
2228      if( $selectedTab.length === 1 ){
2229        $defaultTab = $selectedTab;
2230        settings.cycle = false;
2231
2232      } else {
2233        $panel = plugin.matchInPanel(hash);
2234
2235        // If one of the panels contains the element matching the hash,
2236        // make it active on page-load
2237        if ( $panel.length ) {
2238          hash = '#' + $panel.attr('id');
2239          $defaultTab = plugin.matchTab(hash).parent();
2240
2241        // Otherwise, make the default tab the one that's active on page-load
2242        } else {
2243          $defaultTab = plugin.tabs.parent().find(settings.defaultTab);
2244          if ( $defaultTab.length === 0 ) {
2245            $.error("The specified default tab ('" + settings.defaultTab + "') could not be found in the tab set.");
2246          }
2247        }
2248      }
2249
2250      $defaultTabLink = $defaultTab.children("a").first();
2251
2252      activateDefaultTab($selectedTab);
2253    };
2254
2255    // Activate defaultTab (or collapse by default), called by setDefaultTab
2256    var activateDefaultTab = function($selectedTab) {
2257      var defaultPanel,
2258          defaultAjaxUrl;
2259
2260      if ( settings.collapsible && $selectedTab.length === 0 && settings.collapsedByDefault ) {
2261        $defaultTab
2262          .addClass(settings.collapsedClass)
2263          .children()
2264            .addClass(settings.collapsedClass);
2265
2266      } else {
2267
2268        defaultPanel = $( $defaultTab.data('easytabs').panel );
2269        defaultAjaxUrl = $defaultTab.data('easytabs').ajax;
2270
2271        if ( defaultAjaxUrl && (!settings.cache || !$defaultTab.data('easytabs').cached) ) {
2272          $container.trigger('easytabs:ajax:beforeSend', [$defaultTabLink, defaultPanel]);
2273          defaultPanel.load(defaultAjaxUrl, function(response, status, xhr){
2274            $defaultTab.data('easytabs').cached = true;
2275            $container.trigger('easytabs:ajax:complete', [$defaultTabLink, defaultPanel, response, status, xhr]);
2276          });
2277        }
2278
2279        $defaultTab.data('easytabs').panel
2280          .show()
2281          .addClass(settings.panelActiveClass);
2282
2283        $defaultTab
2284          .addClass(settings.tabActiveClass)
2285          .children()
2286            .addClass(settings.tabActiveClass);
2287      }
2288    };
2289
2290    // Bind tab-select funtionality to namespaced click event, called by
2291    // init
2292    var bindToTabClicks = function() {
2293      plugin.tabs.children("a").bind("click.easytabs", function(e) {
2294
2295        // Stop cycling when a tab is clicked
2296        settings.cycle = false;
2297
2298        // Hash will be updated when tab is clicked,
2299        // don't cause tab to re-select when hash-change event is fired
2300        skipUpdateToHash = false;
2301
2302        // Select the panel for the clicked tab
2303        plugin.selectTab( $(this) );
2304
2305        // Don't follow the link to the anchor
2306        e.preventDefault();
2307      });
2308    };
2309
2310    // Activate a given tab/panel, called from plugin.selectTab:
2311    //
2312    //   * fire `easytabs:before` hook
2313    //   * get ajax if new tab is an uncached ajax tab
2314    //   * animate out previously-active panel
2315    //   * fire `easytabs:midTransition` hook
2316    //   * update URL hash
2317    //   * animate in newly-active panel
2318    //   * update CSS classes for inactive and active tabs/panels
2319    //
2320    // TODO: This could probably be broken out into many more modular
2321    // functions
2322    var activateTab = function($clicked, $targetPanel, ajaxUrl, callback) {
2323      plugin.panels.stop(true,true);
2324
2325      if( fire($container,"easytabs:before", [$clicked, $targetPanel, settings]) ){
2326        var $visiblePanel = plugin.panels.filter(":visible"),
2327            $panelContainer = $targetPanel.parent(),
2328            targetHeight,
2329            visibleHeight,
2330            heightDifference,
2331            showPanel,
2332            hash = window.location.hash.match(/^[^\?]*/)[0];
2333
2334        if (settings.animate) {
2335          targetHeight = getHeightForHidden($targetPanel);
2336          visibleHeight = $visiblePanel.length ? setAndReturnHeight($visiblePanel) : 0;
2337          heightDifference = targetHeight - visibleHeight;
2338        }
2339
2340        // Set lastHash to help indicate if defaultTab should be
2341        // activated across multiple tab instances.
2342        lastHash = hash;
2343
2344        // TODO: Move this function elsewhere
2345        showPanel = function() {
2346          // At this point, the previous panel is hidden, and the new one will be selected
2347          $container.trigger("easytabs:midTransition", [$clicked, $targetPanel, settings]);
2348
2349          // Gracefully animate between panels of differing heights, start height change animation *after* panel change if panel needs to contract,
2350          // so that there is no chance of making the visible panel overflowing the height of the target panel
2351          if (settings.animate && settings.transitionIn == 'fadeIn') {
2352            if (heightDifference < 0)
2353              $panelContainer.animate({
2354                height: $panelContainer.height() + heightDifference
2355              }, transitions.halfSpeed ).css({ 'min-height': '' });
2356          }
2357
2358          if ( settings.updateHash && ! skipUpdateToHash ) {
2359            //window.location = url.toString().replace((url.pathname + hash), (url.pathname + $clicked.attr("href")));
2360            // Not sure why this behaves so differently, but it's more straight forward and seems to have less side-effects
2361            window.location.hash = '#' + $targetPanel.attr('id');
2362          } else {
2363            skipUpdateToHash = false;
2364          }
2365
2366          $targetPanel
2367            [transitions.show](transitions.speed, settings.transitionInEasing, function(){
2368              $panelContainer.css({height: '', 'min-height': ''}); // After the transition, unset the height
2369              $container.trigger("easytabs:after", [$clicked, $targetPanel, settings]);
2370              // callback only gets called if selectTab actually does something, since it's inside the if block
2371              if(typeof callback == 'function'){
2372                callback();
2373              }
2374          });
2375        };
2376
2377        if ( ajaxUrl && (!settings.cache || !$clicked.parent().data('easytabs').cached) ) {
2378          $container.trigger('easytabs:ajax:beforeSend', [$clicked, $targetPanel]);
2379          $targetPanel.load(ajaxUrl, function(response, status, xhr){
2380            $clicked.parent().data('easytabs').cached = true;
2381            $container.trigger('easytabs:ajax:complete', [$clicked, $targetPanel, response, status, xhr]);
2382          });
2383        }
2384
2385        // Gracefully animate between panels of differing heights, start height change animation *before* panel change if panel needs to expand,
2386        // so that there is no chance of making the target panel overflowing the height of the visible panel
2387        if( settings.animate && settings.transitionOut == 'fadeOut' ) {
2388          if( heightDifference > 0 ) {
2389            $panelContainer.animate({
2390              height: ( $panelContainer.height() + heightDifference )
2391            }, transitions.halfSpeed );
2392          } else {
2393            // Prevent height jumping before height transition is triggered at midTransition
2394            $panelContainer.css({ 'min-height': $panelContainer.height() });
2395          }
2396        }
2397
2398        // Change the active tab *first* to provide immediate feedback when the user clicks
2399        plugin.tabs.filter("." + settings.tabActiveClass).removeClass(settings.tabActiveClass).children().removeClass(settings.tabActiveClass);
2400        plugin.tabs.filter("." + settings.collapsedClass).removeClass(settings.collapsedClass).children().removeClass(settings.collapsedClass);
2401        $clicked.parent().addClass(settings.tabActiveClass).children().addClass(settings.tabActiveClass);
2402
2403        plugin.panels.filter("." + settings.panelActiveClass).removeClass(settings.panelActiveClass);
2404        $targetPanel.addClass(settings.panelActiveClass);
2405
2406        if( $visiblePanel.length ) {
2407          $visiblePanel
2408            [transitions.hide](transitions.speed, settings.transitionOutEasing, showPanel);
2409        } else {
2410          $targetPanel
2411            [transitions.uncollapse](transitions.speed, settings.transitionUncollapseEasing, showPanel);
2412        }
2413      }
2414    };
2415
2416    // Get heights of panels to enable animation between panels of
2417    // differing heights, called by activateTab
2418    var getHeightForHidden = function($targetPanel){
2419
2420      if ( $targetPanel.data('easytabs') && $targetPanel.data('easytabs').lastHeight ) {
2421        return $targetPanel.data('easytabs').lastHeight;
2422      }
2423
2424      // this is the only property easytabs changes, so we need to grab its value on each tab change
2425      var display = $targetPanel.css('display'),
2426
2427          // Workaround, because firefox returns wrong height if element itself has absolute positioning
2428          height = $targetPanel
2429            .wrap($('<div>', {position: 'absolute', 'visibility': 'hidden', 'overflow': 'hidden'}))
2430            .css({'position':'relative','visibility':'hidden','display':'block'})
2431            .outerHeight();
2432
2433      $targetPanel.unwrap();
2434
2435      // Return element to previous state
2436      $targetPanel.css({
2437        position: $targetPanel.data('easytabs').position,
2438        visibility: $targetPanel.data('easytabs').visibility,
2439        display: display
2440      });
2441
2442      // Cache height
2443      $targetPanel.data('easytabs').lastHeight = height;
2444
2445      return height;
2446    };
2447
2448    // Since the height of the visible panel may have been manipulated due to interaction,
2449    // we want to re-cache the visible height on each tab change, called
2450    // by activateTab
2451    var setAndReturnHeight = function($visiblePanel) {
2452      var height = $visiblePanel.outerHeight();
2453
2454      if( $visiblePanel.data('easytabs') ) {
2455        $visiblePanel.data('easytabs').lastHeight = height;
2456      } else {
2457        $visiblePanel.data('easytabs', {lastHeight: height});
2458      }
2459      return height;
2460    };
2461
2462    // Setup hash-change callback for forward- and back-button
2463    // functionality, called by init
2464    var initHashChange = function(){
2465
2466      // enabling back-button with jquery.hashchange plugin
2467      // http://benalman.com/projects/jquery-hashchange-plugin/
2468      if(typeof $(window).hashchange === 'function'){
2469        $(window).hashchange( function(){
2470          plugin.selectTabFromHashChange();
2471        });
2472      } else if ($.address && typeof $.address.change === 'function') { // back-button with jquery.address plugin http://www.asual.com/jquery/address/docs/
2473        $.address.change( function(){
2474          plugin.selectTabFromHashChange();
2475        });
2476      }
2477    };
2478
2479    // Begin cycling if set in options, called by init
2480    var initCycle = function(){
2481      var tabNumber;
2482      if (settings.cycle) {
2483        tabNumber = plugin.tabs.index($defaultTab);
2484        setTimeout( function(){ plugin.cycleTabs(tabNumber + 1); }, settings.cycle);
2485      }
2486    };
2487
2488
2489    plugin.init();
2490
2491  };
2492
2493  $.fn.easytabs = function(options) {
2494    var args = arguments;
2495
2496    return this.each(function() {
2497      var $this = $(this),
2498          plugin = $this.data('easytabs');
2499
2500      // Initialization was called with $(el).easytabs( { options } );
2501      if (undefined === plugin) {
2502        plugin = new $.easytabs(this, options);
2503        $this.data('easytabs', plugin);
2504      }
2505
2506      // User called public method
2507      if ( plugin.publicMethods[options] ){
2508        return plugin.publicMethods[options](Array.prototype.slice.call( args, 1 ));
2509      }
2510    });
2511  };
2512
2513})(jQuery);
2514
2515$(document).ready( function() {
2516     $('#tabs_stacks_in_887').easytabs({
2517	      animationSpeed: 300,
2518	      
2519	      animate: true,
2520	      defaultTab: "li:nth-child(1)",
2521	      cycle: false
2522     });
2523   });
2524  
2525return stack;})(stacks.stacks_in_887);
2526stacks.stacks_in_221 = {};
2527stacks.stacks_in_221 = (function(stack) {
2528function scrollToTop(options){const defaults={text:'To Top',min:200,inDelay:600,outDelay:400,containerID:'toTop',scrollSpeed:1200,easingType:'linear',};const settings={...defaults,...options};const containerID=settings.containerID;const containerIDhash=`#${containerID}`;const easing={easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},};const toTopButton=document.createElement('a');toTopButton.href='#';toTopButton.id=containerID;toTopButton.textContent=settings.text;toTopButton.style.display='none';document.body.appendChild(toTopButton);const scrollAnimation=(duration,easingFunction)=>{const start=document.documentElement.scrollTop||document.body.scrollTop;const startTime=performance.now();function animateScroll(currentTime){const elapsed=currentTime-startTime;const progress=Math.min(elapsed/duration,1);const scrollTo=easingFunction(0,elapsed,start,-start,duration);document.documentElement.scrollTop=document.body.scrollTop=scrollTo;if(elapsed<duration){requestAnimationFrame(animateScroll);}}
2529requestAnimationFrame(animateScroll);};toTopButton.addEventListener('click',(e)=>{e.preventDefault();scrollAnimation(settings.scrollSpeed,easing[settings.easingType]||easing.easeOutQuart);});window.addEventListener('scroll',()=>{const scrollTop=document.documentElement.scrollTop||document.body.scrollTop;if(scrollTop>settings.min){toTopButton.style.display='block';toTopButton.style.opacity=1;}
2529else{toTopButton.style.opacity=0;setTimeout(()=>{if(toTopButton.style.opacity==='0'){toTopButton.style.display='none';}},settings.outDelay);}});}
2530document.addEventListener('DOMContentLoaded',()=>{scrollToTop({easingType:'easeOutQuart',scrollSpeed:1200,min:200});});
2531
2532return stack;})(stacks.stacks_in_221);

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.