PageSourceSearch

https://premiere-aviation.net/About%20Us/files/stacks_page_page1.js?rwcache=807680106

js premiere-aviation.net collected 2026-10-09 03:31:19 UTC 75,511 bytes, 1,778 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);
vendor: 3,027 bytes, lines 2-19
2
3var stacks = {};
4stacks.jQuery = jQuery.noConflict(true);
5stacks.com_elixir_stacks_foundryBanner = {};
6stacks.com_elixir_stacks_foundryBanner = (function(stack) {
7var jQuery = stacks.jQuery;var $ = jQuery;/*
8 * jQuery Easing v1.3.2 - http://gsgd.co.uk/sandbox/jquery/easing/
9 * Open source under the BSD License.
10 * Copyright © 2008 George McGinley Smith
11 * All rights reserved.
12 * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
13*/
14(function(h){h.easing.jswing=h.easing.swing;h.extend(h.easing,{def:"easeOutQuad",swing:function(e,a,c,b,d){return h.easing[h.easing.def](e,a,c,b,d)},easeInQuad:function(e,a,c,b,d){return b*(a/=d)*a+c},easeOutQuad:function(e,a,c,b,d){return-b*(a/=d)*(a-2)+c},easeInOutQuad:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a+c:-b/2*(--a*(a-2)-1)+c},easeInCubic:function(e,a,c,b,d){return b*(a/=d)*a*a+c},easeOutCubic:function(e,a,c,b,d){return b*((a=a/d-1)*a*a+1)+c},easeInOutCubic:function(e,a,c,b,d){return 1>
15(a/=d/2)?b/2*a*a*a+c:b/2*((a-=2)*a*a+2)+c},easeInQuart:function(e,a,c,b,d){return b*(a/=d)*a*a*a+c},easeOutQuart:function(e,a,c,b,d){return-b*((a=a/d-1)*a*a*a-1)+c},easeInOutQuart:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a*a*a+c:-b/2*((a-=2)*a*a*a-2)+c},easeInQuint:function(e,a,c,b,d){return b*(a/=d)*a*a*a*a+c},easeOutQuint:function(e,a,c,b,d){return b*((a=a/d-1)*a*a*a*a+1)+c},easeInOutQuint:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a*a*a*a+c:b/2*((a-=2)*a*a*a*a+2)+c},easeInSine:function(e,a,
16c,b,d){return-b*Math.cos(a/d*(Math.PI/2))+b+c},easeOutSine:function(e,a,c,b,d){return b*Math.sin(a/d*(Math.PI/2))+c},easeInOutSine:function(e,a,c,b,d){return-b/2*(Math.cos(Math.PI*a/d)-1)+c},easeInExpo:function(e,a,c,b,d){return 0==a?c:b*Math.pow(2,10*(a/d-1))+c},easeOutExpo:function(e,a,c,b,d){return a==d?c+b:b*(-Math.pow(2,-10*a/d)+1)+c},easeInOutExpo:function(e,a,c,b,d){return 0==a?c:a==d?c+b:1>(a/=d/2)?b/2*Math.pow(2,10*(a-1))+c:b/2*(-Math.pow(2,-10*--a)+2)+c},easeInCirc:function(e,a,c,b,d){return-b*
17(Math.sqrt(1-(a/=d)*a)-1)+c},easeOutCirc:function(e,a,c,b,d){return b*Math.sqrt(1-(a=a/d-1)*a)+c},easeInOutCirc:function(e,a,c,b,d){return 1>(a/=d/2)?-b/2*(Math.sqrt(1-a*a)-1)+c:b/2*(Math.sqrt(1-(a-=2)*a)+1)+c},easeInElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==a)return c;if(1==(a/=d))return c+b;f||(f=.3*d);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return-(g*Math.pow(2,10*--a)*Math.sin(2*(a*d-e)*Math.PI/f))+c},easeOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==
18a)return c;if(1==(a/=d))return c+b;f||(f=.3*d);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return g*Math.pow(2,-10*a)*Math.sin(2*(a*d-e)*Math.PI/f)+b+c},easeInOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==a)return c;if(2==(a/=d/2))return c+b;f||(f=.3*d*1.5);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return 1>a?-.5*g*Math.pow(2,10*--a)*Math.sin(2*(a*d-e)*Math.PI/f)+c:g*Math.pow(2,-10*--a)*Math.sin(2*(a*d-e)*Math.PI/f)*.5+b+c},easeInBack:function(e,a,c,b,d,f){void 0==
19f&&(f=1.70158);return b*(a/=d)*a*((f+1)*a-f)+c}
19,easeOutBack:function(e,a,c,b,d,f){void 0==f&&(f=1.70158);return b*((a=a/d-1)*a*((f+1)*a+f)+1)+c},easeInOutBack:function(e,a,c,b,d,f){void 0==f&&(f=1.70158);return 1>(a/=d/2)?b/2*a*a*(((f*=1.525)+1)*a-f)+c:b/2*((a-=2)*a*(((f*=1.525)+1)*a+f)+2)+c},easeInBounce:function(e,a,c,b,d){return b-h.easing.easeOutBounce(e,d-a,0,b,d)+c},easeOutBounce:function(e,a,c,b,d){return(a/=d)<1/2.75?7.5625*b*a*a+c:a<2/2.75?b*(7.5625*(a-=1.5/2.75)*a+.75)+c:a<2.5/2.75?b*(7.5625*
20(a-=2.25/2.75)*a+.9375)+c:b*(7.5625*(a-=2.625/2.75)*a+.984375)+c},easeInOutBounce:function(e,a,c,b,d){return a<d/2?.5*h.easing.easeInBounce(e,2*a,0,b,d)+c:.5*h.easing.easeOutBounce(e,2*a-d,0,b,d)+.5*b+c}})})(jQuery);
21return stack;})(stacks.com_elixir_stacks_foundryBanner);
22stacks.com_elixir_stacks_foundryNavigationBar = {};
23stacks.com_elixir_stacks_foundryNavigationBar = (function(stack) {
24var jQuery = stacks.jQuery;var $ = jQuery;// Sticky Plugin v1.0.4 for jQuery
25// =============
26// Author: Anthony Garand
27// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
28// Improvements by Leonardo C. Daronco (daronco)
29// Created: 02/14/2011
30// Date: 07/20/2015
31// Website: http://stickyjs.com/
32// Description: Makes an element on the page stick on the screen as you scroll
33//              It will only set the 'top' and 'position' of your element, you
34//              might need to adjust the width in some cases.
35
36(function (factory) {
37    if (typeof define === 'function' && define.amd) {
38        // AMD. Register as an anonymous module.
39        define(['jquery'], factory);
40    } else if (typeof module === 'object' && module.exports) {
41        // Node/CommonJS
42        module.exports = factory(require('jquery'));
43    } else {
44        // Browser globals
45        factory(jQuery);
46    }
47}(function ($) {
48    var slice = Array.prototype.slice; // save ref to original slice()
49    var splice = Array.prototype.splice; // save ref to original slice()
50
51  var defaults = {
52      topSpacing: 0,
53      bottomSpacing: 0,
54      className: 'is-sticky',
55      wrapperClassName: 'sticky-wrapper',
56      center: false,
57      getWidthFrom: '',
58      widthFromWrapper: true, // works only when .getWidthFrom is empty
59      responsiveWidth: false,
60      zIndex: 'auto'
61    },
62    $window = $(window),
63    $document = $(document),
64    sticked = [],
65    windowHeight = $window.height(),
66    scroller = function() {
67      var scrollTop = $window.scrollTop(),
68        documentHeight = $document.height(),
69        dwh = documentHeight - windowHeight,
70        extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
71
72      for (var i = 0, l = sticked.length; i < l; i++) {
73        var s = sticked[i],
74          elementTop = s.stickyWrapper.offset().top,
75          etse = elementTop - s.topSpacing - extra;
76
77        //update height in case of dynamic content
78        s.stickyWrapper.css('height', s.stickyElement.outerHeight());
79        s.stickyElement.css('transform', 'translate3d(0px, 0px, 0px)');
80
81        if (scrollTop < etse) {
82          if (s.currentTop !== null) {
83            s.stickyElement
84              .css({
85                'width': '',
86                'position': '',
87                'top': '',
88                'left': '',
89                'right': '',
90                'z-index': ''
91              });
92            s.stickyElement.parent().removeClass(s.className);
93            s.stickyElement.trigger('sticky-end', [s]);
94            s.currentTop = null;
95          }
96        }
97        else {
98          var newTop = documentHeight - s.stickyElement.outerHeight()
99            - s.topSpacing - s.bottomSpacing - scrollTop - extra;
100          if (newTop < 0) {
101            newTop = newTop + s.topSpacing;
102          } else {
103            newTop = s.topSpacing;
104          }
105          if (s.currentTop !== newTop) {
106            var newWidth;
107            if (s.getWidthFrom) {
108                newWidth = $(s.getWidthFrom).width() || null;
109            } else if (s.widthFromWrapper) {
110                newWidth = s.stickyWrapper.width();
111            }
112            if (newWidth == null) {
113                newWidth = s.stickyElement.width();
114            }
115            s.stickyElement
116              .css('width', newWidth)
117              .css('position', 'fixed')
118              .css('top', newTop)
119              .css('left', '0')
120              .css('right', '0')
121              .css('z-index', s.zIndex);
122
123            s.stickyElement.parent().addClass(s.className);
124
125            if (s.currentTop === null) {
126              s.stickyElement.trigger('sticky-start', [s]);
127            } else {
128              // sticky is started but it have to be repositioned
129              s.stickyElement.trigger('sticky-update', [s]);
130            }
131
132            if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
133              // just reached bottom || just started to stick but bottom is already reached
134              s.stickyElement.trigger('sticky-bottom-reached', [s]);
135            } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
136              // sticky is started && sticked at topSpacing && overflowing from top just finished
137              s.stickyElement.trigger('sticky-bottom-unreached', [s]);
138            }
139
140            s.currentTop = newTop;
141          }
142
143          // Check if sticky has reached end of container and stop sticking
144          var stickyWrapperContainer = s.stickyWrapper.parent();
145          var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);
146
147
148          if( unstick ) {
149            s.stickyElement
150              .css('position', 'relative')
151              .css('top', '')
152              .css('left', '')
153              .css('right', '')
154              .css('bottom', 0)
155              .css('z-index', '');
156          } else {
157            s.stickyElement
158              .css('position', 'fixed')
159              .css('top', newTop)
160              .css('left', '0')
161              .css('right', '0')
162              .css('bottom', '')
163              .css('z-index', s.zIndex);
164          }
165        }
166      }
167    },
168    resizer = function() {
169      windowHeight = $window.height();
170
171      for (var i = 0, l = sticked.length; i < l; i++) {
172        var s = sticked[i];
173        var newWidth = null;
174        if (s.getWidthFrom) {
175            if (s.responsiveWidth) {
176                newWidth = $(s.getWidthFrom).width();
177            }
178        } else if(s.widthFromWrapper) {
179            newWidth = s.stickyWrapper.width();
180        }
181        if (newWidth != null) {
182            s.stickyElement.css('width', newWidth);
183        }
184      }
185
186      scroller();
187
188    },
189    methods = {
190      init: function(options) {
191        var o = $.extend({}, defaults, options);
192        return this.each(function() {
193          var stickyElement = $(this);
194
195          var stickyId = stickyElement.attr('id');
196          var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
197          var wrapper = $('<div></div>')
198            .attr('id', wrapperId)
199            .addClass(o.wrapperClassName);
200
201          stickyElement.wrapAll(function() {
202            if ($(this).parent("#" + wrapperId).length == 0) {
203                    return wrapper;
204            }
205});
206
207          var stickyWrapper = stickyElement.parent();
208
209          if (o.center) {
210            stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
211          }
212
213          if (stickyElement.css("float") === "right") {
214            stickyElement.css({"float":"none"}).parent().css({"float":"right"});
215          }
216
217          o.stickyElement = stickyElement;
218          o.stickyWrapper = stickyWrapper;
219          o.currentTop    = null;
220
221          sticked.push(o);
222
223          methods.setWrapperHeight(this);
224          methods.setupChangeListeners(this);
225        });
226      },
227
228      setWrapperHeight: function(stickyElement) {
229        var element = $(stickyElement);
230        var stickyWrapper = element.parent();
231        if (stickyWrapper) {
232          stickyWrapper.css('height', element.outerHeight());
233        }
234      },
235
236      setupChangeListeners: function(stickyElement) {
237        if (window.MutationObserver) {
238          var mutationObserver = new window.MutationObserver(function(mutations) {
239            if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
240              methods.setWrapperHeight(stickyElement);
241            }
242          });
243          mutationObserver.observe(stickyElement, {subtree: true, childList: true});
244        } else {
245          if (window.addEventListener) {
246            stickyElement.addEventListener('DOMNodeInserted', function() {
247              methods.setWrapperHeight(stickyElement);
248            }, false);
249            stickyElement.addEventListener('DOMNodeRemoved', function() {
250              methods.setWrapperHeight(stickyElement);
251            }, false);
252          } else if (window.attachEvent) {
253            stickyElement.attachEvent('onDOMNodeInserted', function() {
254              methods.setWrapperHeight(stickyElement);
255            });
256            stickyElement.attachEvent('onDOMNodeRemoved', function() {
257              methods.setWrapperHeight(stickyElement);
258            });
259          }
260        }
261      },
262      update: scroller,
263      unstick: function(options) {
264        return this.each(function() {
265          var that = this;
266          var unstickyElement = $(that);
267
268          var removeIdx = -1;
269          var i = sticked.length;
270          while (i-- > 0) {
271            if (sticked[i].stickyElement.get(0) === that) {
272                splice.call(sticked,i,1);
273                removeIdx = i;
274            }
275          }
276          if(removeIdx !== -1) {
277            unstickyElement.unwrap();
278            unstickyElement
279              .css({
280                'width': '',
281                'position': '',
282                'top': '',
283                'left': '',
284                'right': '',
285                'float': '',
286                'z-index': ''
287              });
288          }
289        });
290      }
291    };
292
293  // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
294  if (window.addEventListener) {
295    window.addEventListener('scroll', scroller, false);
296    window.addEventListener('resize', resizer, false);
297  } else if (window.attachEvent) {
298    window.attachEvent('onscroll', scroller);
299    window.attachEvent('onresize', resizer);
300  }
301
302  $.fn.sticky = function(method) {
303    if (methods[method]) {
304      return methods[method].apply(this, slice.call(arguments, 1));
305    } else if (typeof method === 'object' || !method ) {
306      return methods.init.apply( this, arguments );
307    } else {
308      $.error('Method ' + method + ' does not exist on jQuery.sticky');
309    }
310  };
311
312  $.fn.unstick = function(method) {
313    if (methods[method]) {
314      return methods[method].apply(this, slice.call(arguments, 1));
315    } else if (typeof method === 'object' || !method ) {
316      return methods.unstick.apply( this, arguments );
317    } else {
318      $.error('Method ' + method + ' does not exist on jQuery.sticky');
319    }
320  };
321  $(function() {
322    setTimeout(scroller, 0);
323  });
324}));
325
326return stack;}
326)(stacks.com_elixir_stacks_foundryNavigationBar);
327stacks.stacks_in_2 = {};
328stacks.stacks_in_2 = (function(stack) {
329var jQuery = stacks.jQuery;var $ = jQuery;// Set Language for Document
330document.documentElement.lang = "en";
331
332$(document).ready(function(){
333  
334
335  
336});
337
338$.fn.elementRealHeight = function () {
339   $clone = this.clone()
340       .css("visibility","hidden")
341       .appendTo($('body'));
342   var $height = $clone.outerHeight();
343   $clone.remove();
344   return $height;
345 };
346
347 $.fn.elementRealWidth = function () {
348    $clone = this.clone()
349        .css("visibility","hidden")
350        .appendTo($('body'));
351    var $width = $clone.outerWidth();
352    $clone.remove();
353    return $width;
354  };
355
356
357  // Handles offsets for anchor tags
358  // (function(document, history, location) {
359  //   var HISTORY_SUPPORT = !!(history && history.pushState);
360  //
361  //   var anchorScrolls = {
362  //     ANCHOR_REGEX: /^#[^ ]+$/,
363  //     OFFSET_HEIGHT_PX: 0,
364  //
365  //     /**
366  //      * Establish events, and fix initial scroll position if a hash is provided.
367  //      */
368  //     init: function() {
369  //       this.scrollToCurrent();
370  //       window.addEventListener('hashchange', this.scrollToCurrent.bind(this));
371  //       document.body.addEventListener('click', this.delegateAnchors.bind(this));
372  //     },
373  //
374  //     /**
375  //      * Return the offset amount to deduct from the normal scroll position.
376  //      * Modify as appropriate to allow for dynamic calculations
377  //      */
378  //     getFixedOffset: function() {
379  //       return this.OFFSET_HEIGHT_PX;
380  //     },
381  //
382  //     /**
383  //      * If the provided href is an anchor which resolves to an element on the
384  //      * page, scroll to it.
385  //      * @param  {String} href
386  //      * @return {Boolean} - Was the href an anchor.
387  //      */
388  //     scrollIfAnchor: function(href, pushToHistory) {
389  //       var match, rect, anchorOffset;
390  //
391  //       if(!this.ANCHOR_REGEX.test(href)) {
392  //         return false;
393  //       }
394  //
395  //       match = document.getElementById(href.slice(1));
396  //
397  //       if(match) {
398  //         rect = match.getBoundingClientRect();
399  //         anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset();
400  //         window.scrollTo(window.pageXOffset, anchorOffset);
401  //
402  //         // Add the state to history as-per normal anchor links
403  //         if(HISTORY_SUPPORT && pushToHistory) {
404  //           history.pushState({}, document.title, location.pathname + href);
405  //         }
406  //       }
407  //
408  //       return !!match;
409  //     },
410  //
411  //     /**
412  //      * Attempt to scroll to the current location's hash.
413  //      */
414  //     scrollToCurrent: function() {
415  //       this.scrollIfAnchor(window.location.hash);
416  //     },
417  //
418  //     /**
419  //      * If the click event's target was an anchor, fix the scroll position.
420  //      */
421  //     delegateAnchors: function(e) {
422  //       var elem = e.target;
423  //
424  //       if(
425  //         elem.nodeName === 'A' &&
426  //         this.scrollIfAnchor(elem.getAttribute('href'), true)
427  //       ) {
428  //         e.preventDefault();
429  //       }
430  //     }
431  //   };
432  //
433  //   window.addEventListener(
434  //     'DOMContentLoaded', anchorScrolls.init.bind(anchorScrolls)
435  //   );
436  // })(window.document, window.history, window.location);
437
438return stack;})(stacks.stacks_in_2);
439stacks.stacks_in_101 = {};
440stacks.stacks_in_101 = (function(stack) {
441var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
442
443
444
445
446
447
448});
449
450return stack;})(stacks.stacks_in_101);
451stacks.stacks_in_103 = {};
452stacks.stacks_in_103 = (function(stack) {
453var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
454  
455});
456
457return stack;})(stacks.stacks_in_103);
458stacks.stacks_in_94 = {};
459stacks.stacks_in_94 = (function(stack) {
460var jQuery = stacks.jQuery;var $ = jQuery;function foundry_navigation_bar() {
461	// Removes overflow hidden so dropdowns can show as they should.
462	$('#stacks_in_94 .navigation_bar ').parentsUntil('.stacks_top').css({'overflow' : 'visible'});
463	$('.stacks_top').css({'overflow' : 'visible'});
464
465	// Unwraps the link from dividers and small subheaders
466	$('#stacks_in_94 .navigation_bar div.nav_divider, #stacks_in_94 .navigation_bar .small_hdr').unwrap();
467
468
469
470	// Removes href attributes from parent navigation links.
471	// This could be offered as an option possibly.
472	$('#stacks_in_94 .navigation_bar .navigation_container > ul > li > a.parent').removeAttr("href").addClass('closed');
473
474	//
475	// Handles displaying drop down navigation.
476	//
477	$('#stacks_in_94 .navigation_bar .navigation_container ul').find("li").each(function() {
478			if ($(this).find("ul:first").length > 0) {
479
480					$(this).click(function() {
481
482							
483							//
484							// Close all navigation drop downs when another is opened.
485							//
486							$("#stacks_in_94 .navigation_bar .navigation_container ul li").removeClass('clicked');
487
488							$(this).addClass('clicked');
489
490							$("#stacks_in_94 .navigation_bar .navigation_container ul li:not(.clicked) a.open").parent().find('ul:first').stop(true, true).slide
490Up(200);
491
492
493							$("#stacks_in_94 .navigation_bar .navigation_container ul li").find("> a").addClass('closed').removeClass('open');
494							
495
496							//
497							// Show child-level menu items
498							//
499							$(this).find("ul:first").stop(true, true).animate({height: 'toggle' , opacity: 'toggle'}, 200);
500
501							$(this).find("> a").toggleClass('closed').toggleClass('open');
502					});
503			}
504	});
505
506
507	//
508	// Handles showing and hiding the navigation when the navigation toggle is clicked or tapped.
509	//
510	$('#stacks_in_94_mobile_navigation_toggle').click(function(){
511		$('#stacks_in_94 .navigation_bar .navigation_container > ul').slideToggle(175, function(){});
512	});
513
514	//
515	// Handles pairing navigation with parent banner
516	//
517	
518}
519
520
521
522	// Sticky Navigation
523
524	function stickIt() {
525		$("#stacks_in_94 .navigation_bar").sticky({
526			topSpacing: 0,
527			bottomSpacing: 0,
528			className: 'is-sticky',
529			wrapperClassName: 'sticky-wrapper',
530			center: true,
531			getWidthFrom: 'body',
532			widthFromWrapper: false, // works only when .getWidthFrom is empty
533			responsiveWidth: false,
534			zIndex: '3000'
535		});
536	}
537
538	function stickItUpdate() {
539		$("#stacks_in_94 .navigation_bar").sticky('update');
540	}
541
542	$(document).ready(function(){
543		foundry_navigation_bar();
544
545		var navTop = $("#stacks_in_94 .navigation_bar").offset().top;
546
547		if (navTop > 0) {
548			stickIt();
549		} else {
550			$("#stacks_in_94 .navigation_bar").addClass('sticky simple-sticky');
551		}
552
553	});
554
555	$(window).load(function(){
556		stickItUpdate();
557	});
558
559	document.addEventListener("orientationchange", stickItUpdate);
560
561
562
563return stack;})(stacks.stacks_in_94);
564stacks.stacks_in_113 = {};
565stacks.stacks_in_113 = (function(stack) {
566var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
567
568
569
570
571
572
573});
574
575return stack;})(stacks.stacks_in_113);
576stacks.stacks_in_115 = {};
577stacks.stacks_in_115 = (function(stack) {
578var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
579  
580});
581
582return stack;})(stacks.stacks_in_115);
583stacks.stacks_in_71 = {};
584stacks.stacks_in_71 = (function(stack) {
585var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
586	$('#stacks_in_71 > .container').parentsUntil('.stacks_top').css('overflow', 'visible');
587
588	// $('#stacks_in_71 > .container').parentsUntil('.stacks_top').css({'overflow' : 'visible'});
589	// $('.stacks_top').css({'overflow' : 'visible'});
590
591	
592});
593
594return stack;})(stacks.stacks_in_71);
595stacks.stacks_in_149 = {};
596stacks.stacks_in_149 = (function(stack) {
597var jQuery = stacks.jQuery;var $ = jQuery;//----------------------------------------------------------//
598// + PAYSNAP v.2.0.3  (START)
599// - 2013-11-23 05:35 am
600//----------------------------------------------------------//
601
602//----------------------------------------------------------//
603// + PLUGINS   
604//----------------------------------------------------------//
605
606/*
607* jQuery BlockUI; v20130718
608* http://jquery.malsup.com/block/
609* Copyright (c) 2013 M. Alsup; Dual licensed: MIT/GPL
610*/
611(function(){"use strict";function e(e){function o(o,i){var s,h,k=o==window,v=i&&void 0!==i.message?i.message:void 0;if(i=e.extend({},e.blockUI.defaults,i||{}),!i.ignoreIfBlocked||!e(o).data("blockUI.isBlocked")){if(i.overlayCSS=e.extend({},e.blockUI.defaults.overlayCSS,i.overlayCSS||{}),s=e.extend({},e.blockUI.defaults.css,i.css||{}),i.onOverlayClick&&(i.overlayCSS.cursor="pointer"),h=e.extend({},e.blockUI.defaults.themedCSS,i.themedCSS||{}),v=void 0===v?i.message:v,k&&b&&t(window,{fadeOut:0}),v&&"string"!=typeof v&&(v.parentNode||v.jquery)){var y=v.jquery?v[0]:v,m={};e(o).data("blockUI.history",m),m.el=y,m.parent=y.parentNode,m.display=y.style.display,m.position=y.style.position,m.parent&&m.parent.removeChild(y)}e(o).data("blockUI.onUnblock",i.onUnblock);var g,I,w,U,x=i.baseZ;g=r||i.forceIframe?e('<iframe class="blockUI" style="z-index:'+x++ +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+i.iframeSrc+'"></iframe>'):e('<div class="blockUI" style="display:none"></div>'),I=i.theme?e('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+x++ +';display:none"></div>'):e('<div class="blockUI blockOverlay" style="z-index:'+x++ +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'),i.theme&&k?(U='<div class="blockUI '+i.blockMsgClass+' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(x+10)+';display:none;position:fixed">',i.title&&(U+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(i.title||"&nbsp;")+"</div>"),U+='<div class="ui-widget-content ui-dialog-content"></div>',U+="</div>"):i.theme?(U='<div class="blockUI '+i.blockMsgClass+' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(x+10)+';display:none;position:absolute">',i.title&&(U+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(i.title||"&nbsp;")+"</div>"),U+='<div class="ui-widget-content ui-dialog-content"></div>',U+="</div>"):U=k?'<div class="blockUI '+i.blockMsgClass+' blockPage" style="z-index:'+(x+10)+';display:none;position:fixed"></div>':'<div class="blockUI '+i.blockMsgClass+' blockElement" style="z-index:'+(x+10)+';display:none;position:absolute"></div>',w=e(U),v&&(i.theme?(w.css(h),w.addClass("ui-widget-content")):w.css(s)),i.theme||I.css(i.overlayCSS),I.css("position",k?"fixed":"absolute"),(r||i.forceIframe)&&g.css("opacity",0);var C=[g,I,w],S=k?e("body"):e(o);e.each(C,function(){this.appendTo(S)}),i.theme&&i.draggable&&e.fn.draggable&&w.draggable({handle:".ui-dialog-titlebar",cancel:"li"});
vendor: 5,846 bytes, line 611
611var O=f&&(!e.support.boxModel||e("object,embed",k?null:o).length>0);if(u||O){if(k&&i.allowBodyStretch&&e.support.boxModel&&e("html,body").css("height","100%"),(u||!e.support.boxModel)&&!k)var E=d(o,"borderTopWidth"),T=d(o,"borderLeftWidth"),M=E?"(0 - "+E+")":0,B=T?"(0 - "+T+")":0;e.each(C,function(e,o){var t=o[0].style;if(t.position="absolute",2>e)k?t.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+i.quirksmodeOffsetHack+') + "px"'):t.setExpression("height",'this.parentNode.offsetHeight + "px"'),k?t.setExpression("width",'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):t.setExpression("width",'this.parentNode.offsetWidth + "px"'),B&&t.setExpression("left",B),M&&t.setExpression("top",M);else if(i.centerY)k&&t.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'),t.marginTop=0;else if(!i.centerY&&k){var n=i.css&&i.css.top?parseInt(i.css.top,10):0,s="((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "+n+') + "px"';t.setExpression("top",s)}})}if(v&&(i.theme?w.find(".ui-widget-content").append(v):w.append(v),(v.jquery||v.nodeType)&&e(v).show()),(r||i.forceIframe)&&i.showOverlay&&g.show(),i.fadeIn){var j=i.onBlock?i.onBlock:c,H=i.showOverlay&&!v?j:c,z=v?j:c;i.showOverlay&&I._fadeIn(i.fadeIn,H),v&&w._fadeIn(i.fadeIn,z)}else i.showOverlay&&I.show(),v&&w.show(),i.onBlock&&i.onBlock();if(n(1,o,i),k?(b=w[0],p=e(i.focusableElements,b),i.focusInput&&setTimeout(l,20)):a(w[0],i.centerX,i.centerY),i.timeout){var W=setTimeout(function(){k?e.unblockUI(i):e(o).unblock(i)},i.timeout);e(o).data("blockUI.timeout",W)}}}function t(o,t){var s,l=o==window,a=e(o),d=a.data("blockUI.history"),c=a.data("blockUI.timeout");c&&(clearTimeout(c),a.removeData("blockUI.timeout")),t=e.extend({},e.blockUI.defaults,t||{}),n(0,o,t),null===t.onUnblock&&(t.onUnblock=a.data("blockUI.onUnblock"),a.removeData("blockUI.onUnblock"));var r;r=l?e("body").children().filter(".blockUI").add("body > .blockUI"):a.find(">.blockUI"),t.cursorReset&&(r.length>1&&(r[1].style.cursor=t.cursorReset),r.length>2&&(r[2].style.cursor=t.cursorReset)),l&&(b=p=null),t.fadeOut?(s=r.length,r.stop().fadeOut(t.fadeOut,function(){0===--s&&i(r,d,t,o)})):i(r,d,t,o)}function i(o,t,i,n){var s=e(n);if(!s.data("blockUI.isBlocked")){o.each(function(){this.parentNode&&this.parentNode.removeChild(this)}),t&&t.el&&(t.el.style.display=t.display,t.el.style.position=t.position,t.parent&&t.parent.appendChild(t.el),s.removeData("blockUI.history")),s.data("blockUI.static")&&s.css("position","static"),"function"==typeof i.onUnblock&&i.onUnblock(n,i);var l=e(document.body),a=l.width(),d=l[0].style.width;l.width(a-1).width(a),l[0].style.width=d}}function n(o,t,i){var n=t==window,l=e(t);if((o||(!n||b)&&(n||l.data("blockUI.isBlocked")))&&(l.data("blockUI.isBlocked",o),n&&i.bindEvents&&(!o||i.showOverlay))){var a="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";o?e(document).bind(a,i,s):e(document).unbind(a,s)}}function s(o){if("keydown"===o.type&&o.keyCode&&9==o.keyCode&&b&&o.data.constrainTabKey){var t=p,i=!o.shiftKey&&o.target===t[t.length-1],n=o.shiftKey&&o.target===t[0];if(i||n)return setTimeout(function(){l(n)},10),!1}var s=o.data,a=e(o.target);return a.hasClass("blockOverlay")&&s.onOverlayClick&&s.onOverlayClick(),a.parents("div."+s.blockMsgClass).length>0?!0:0===a.parents().children().filter("div.blockUI").length}function l(e){if(p){var o=p[e===!0?p.length-1:0];o&&o.focus()}}function a(e,o,t){var i=e.parentNode,n=e.style,s=(i.offsetWidth-e.offsetWidth)/2-d(i,"borderLeftWidth"),l=(i.offsetHeight-e.offsetHeight)/2-d(i,"borderTopWidth");o&&(n.left=s>0?s+"px":"0"),t&&(n.top=l>0?l+"px":"0")}function d(o,t){return parseInt(e.css(o,t),10)||0}e.fn._fadeIn=e.fn.fadeIn;var c=e.noop||function(){},r=/MSIE/.test(navigator.userAgent),u=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent);document.documentMode||0;var f=e.isFunction(document.createElement("div").style.setExpression);e.blockUI=function(e){o(window,e)},e.unblockUI=function(e){t(window,e)},e.growlUI=function(o,t,i,n){var s=e('<div class="growlUI"></div>');o&&s.append("<h1>"+o+"</h1>"),t&&s.append("<h2>"+t+"</h2>"),void 0===i&&(i=3e3);var l=function(o){o=o||{},e.blockUI({message:s,fadeIn:o.fadeIn!==void 0?o.fadeIn:700,fadeOut:o.fadeOut!==void 0?o.fadeOut:1e3,timeout:o.timeout!==void 0?o.timeout:i,centerY:!1,showOverlay:!1,onUnblock:n,css:e.blockUI.defaults.growlCSS})};l(),s.css("opacity"),s.mouseover(function(){l({fadeIn:0,timeout:3e4});var o=e(".blockMsg");o.stop(),o.fadeTo(300,1)}).mouseout(function(){e(".blockMsg").fadeOut(1e3)})},e.fn.block=function(t){if(this[0]===window)return e.blockUI(t),this;var i=e.extend({},e.blockUI.defaults,t||{});return this.each(function(){var o=e(this);i.ignoreIfBlocked&&o.data("blockUI.isBlocked")||o.unblock({fadeOut:0})}),this.each(function(){"static"==e.css(this,"position")&&(this.style.position="relative",e(this).data("blockUI.static",!0)),this.style.zoom=1,o(this,t)})},e.fn.unblock=function(o){return this[0]===window?(e.unblockUI(o),this):this.each(function(){t(this,o)})},e.blockUI.version=2.6,e.blockUI.defaults={message:"<h1>Please wait...</h1>",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",o
611pacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var b=null,p=[]}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],e):e(jQuery)})();
612
613//----------------------------------------------------------//
614// + VARS   
615//----------------------------------------------------------//
616
617if (window.paysnapisloaded) 
618	return;
619window.paysnapisloaded = 1;
620
621var scripts = document.getElementsByTagName( 'script' );
622var src = scripts[scripts.length-1].getAttribute( 'src' );
623
624var empty_cart_at_checkout = false;
625var cart_expire_hours      = 24;
626
627var paypal_url 				= 'https://www.paypal.com/cgi-bin/webscr';
628var paypal_sandbox_url 		= 'https://www.sandbox.paypal.com/cgi-bin/webscr';
629var use_sandbox				= 'false';
630var checkout_button_string 	= 'Checkout with #paypal#';
631var cart_title 				= ' My Cart ';
632var footer_text 			= 'Powered by PaySnap';
633var currency_format 		= 'USD';
634var iPad 					= /iPad/i.test(navigator.userAgent);
635var mobile 					= /(iPhone|iPod|Android)/i.test(navigator.userAgent);
636
637// messages
638var checkout_warning 	= 'Checkout not possible with zero total.'; // displayed when cart total == 0
639var delete_confirm   	= 'Delete this item?';
640var ok_string 			= ' OK ';
641var cancel_string 		= ' Cancel ';
642var empty_cart 			= 'Cart is empty.';
643
644// PAYPAL DATA
645var paypalData = {
646	business:      '[email protected]',
647	paymentaction: 'sale',
648	currency_code: 'USD', // https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_currency_codes
649	custom:        '',
650	tax_cart:      '',
651	weight_cart:   '',
652	weight_unit:   'lbs',
653	handling_cart: '',
654	'return':  	   '',
655	return_url:  	   '',
656	cancel_return:	   '',
657	notify_url:	   '',
658	no_shipping:   '0',
659	lc:			 'US',
660	bn:				'CartLoom_Cart_WPS'
661};
662
663// Used to validate before publishing
664var business	= '[email protected]';
665var return_url	= '<a href="">';
666var cancel_url	= '<a href="">';
667var notify_url	= '<a href="">';
668
669var iPad = /iPad/i.test(navigator.userAgent);
670var mobile = /(iPhone|iPod|Android)/i.test(navigator.userAgent);
671
672var debug = 'False';
673var stack_id = 'stacks_in_149';
674
675// Modal Styling
676var bui_overlay_opacity = '0.75';
677var outer_overlay = '#000000';
678var inner_overlay 	= '#FFFFFF';
679var ok_btn_text = "OK";
680
681// modal template
682var modal_tpl = '<div id="ps-modal-wrap-details">'+
683                    '<div>'+
684                        '<div id="ps-modal-heading-details">{{title}}</div>'+
685                        '<div id="paysnap-close-details"><i class="ps-icon-remove"></i></div>'+
686                        '<div id="ps-modal-body-details"><div class="inner">'+
687                        '{{message}}'+
688                        //'<p><button alt="OK" id="block-button" class="btn-paysnap btn-default btn-paysnap" >' + ok_btn_text + '</button></p>'+
689                        '</div></div>'+
690                    '</div>'+ 
691                '</div>';
692                
693//----------------------------------------------------------//
694// + BRAINS   
695//----------------------------------------------------------//
696
697function paysnap($) {
698
699// cleartype fixes (by malsup)
700$.fn.fadeIn=function(A,B){return this.animate({opacity:"show"},A,function(){if($.browser.msie){this.style.removeAttribute("filter")}if($.isFunction(B)){B()}})};$.fn.fadeOut=function(A,B){return this.animate({opacity:"hide"},A,function(){if($.browser.msie){this.style.removeAttribute("filter")}if($.isFunction(B)){B()}})};$.fn.fadeTo=function(A,C,B){return this.animate({opacity:C},A,function(){if(C==1&&$.browser.msie){this.style.removeAttribute("filter")}if($.isFunction(B)){B()}})};
701
702// clear default block styles
703$.blockUI.defaults.css = {};
704
705// create locally scoped default settings
706var blockUIoptions = {
707    blockMsgClass: 'paysnap-modal',
708    centerY: false,
709    overlayCSS: { opacity: bui_overlay_opacity, backgroundColor: outer_overlay }
710};
711
712
713// create insulator function
714$.blockUIPaysnap = function(options) {
715    var opts = $.extend(true, blockUIoptions, options);
716    $.blockUI( opts );
717};
718
719$.paysnapRenderTemplate = function(title, message){
720    var filled_template = modal_tpl;
721    filled_template = filled_template.replace('{{title}}', title).replace('{{message}}', message);
722    return filled_template;
723}
724
725$.fn.blockAndSpin = function() {
726    return this.block({ message: null, overlayCSS: { backgroundColor: inner_overlay } }).spinLoad();
727};
728$.fn.unblockAndSpin = function() {
729    return this.unblock().spinLoad('stop');
730};
731
732$.fn.spinLoad = function(opt) {
733
734$("#paysnap-co-btn").addClass("disabled");
735$("#paysnap-cart").addClass("blur");
736$("#paysnap-progress-bar").show();
737
738};
739
740
741$.fn.fixPNG = function() {
742    return this.each(function () {
743        var image = $(this).css('backgroundImage');
744
745        if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
746            image = RegExp.$1;
747            $(this).css({
748                'backgroundImage': 'none',
749                'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=" + ($(this).css('backgroundRepeat') == 'no-repeat' ? 'crop' : 'scale') + ", src='" + image + "')"
750            }).each(function () {
751                var position = $(this).css('position');
752                if (position != 'absolute' && position != 'relative')
753                    $(this).css('position', 'relative');
754            });
755        }
756    });
757};
758
759
760
761//Sheet function
762// used within cart for alerts
763$.fn.blockWithSheet = function(markup, callback) {
764	return this.each(function() {
765		var $this = $(this);
766		$this.css('overflow','hidden');
767		$this.block({ message: null, fadeIn:200, overlayCSS: { backgroundColor: inner_overlay } });
768		$("#paysnap-cart").addClass("blur");
769		var $sheet = $(markup).hide().appendTo(this);
770		
771		$sheet.find(".paysnap-close-sheet").unbind().click(function(e) {
772			var h = $sheet.outerHeight();
773			$("#paysnap-cart").removeClass("blur");
774			$sheet.animate({ top: -h }, 400);
775			$this.unblock({
776			    onUnblock: function() {
777			        $sheet.remove();
778			        
779		        }
780			});
781			callback.call(this, e);
782		});
783		
784		setTimeout(function() {
785			var h = $sheet.outerHeight();
786			$sheet.css({ top: -h }).show();
787			$sheet.animate({ top: 0 }, 400);
788		}, 200);
789	});
790};
791
792//
793// bootstrap
794//
795
796$(document).ready(function() {
797    paysnap.initialize();
798});
799
800var Currency = {
801	AUD: { dec: '.', grp: ',', sym: '$' }, // Australian Dollar
802	BRL: { dec: '.', grp: '.', sym: 'R' }, //Brazilian Real
803	CAD: { dec: '.', grp: ',', sym: '$' }, // Canadian Dollar
804	CHF: { dec: '.', grp: "'", sym: 'SFr ' }, // Swiss Franc
805	CZK: { dec: ',', grp: '.', sym: ' Kc' }, // Czech Koruna
806	DKK: { dec: '.', grp: '.', sym: ' kr' }, //Danish Krone 
807	EUR: { dec: '.', grp: ',', sym: '&euro; ' }, // Euro
808	GBP: { dec: '.', grp: ',', sym: '&pound; ' }, // GB Pound
809	HKD: { dec: '.', grp: ',', sym: 'HK$' }, // Hong Kong Dollar
810	HUF: { dec: '.', grp: ',', sym: 'HK$' }, // Hungarian Forint 
811	ILS: { dec: '.', grp: ',', sym: '$' }, // Israeli New Sheqel
812	JPY: { dec: '',  grp: ',', sym: '&yen;', noDecimals: 1 }, // Japanese Yen 
813	MYR: { dec: '.', grp: '.', sym: 'R' }, // malaysian ringgit
814	MXN: { dec: '.', grp: ',', sym: '$' }, // Mexican Peso
815	NOK: { dec: ',', grp: '.', sym: ' kr' }, // Norwegian Krone
816	NZD: { dec: '.', grp: ',', sym: ' $' }, // New Zealand Dollar
817	PHP: { dec: '.', grp: ',', sym: 'PhP ' }, // Phillippine Peso
818	PLN: { dec: '.', grp: ',', sym: ' z&#322;' }, // Polish Zloty
819	SEK: { dec: '.', grp: ' ', sym: ' SEK' }, // Swedish Krona
820	SGD: { dec: '.', grp: ',', sym: 'SGD $' }, //Singapore Dollar
821	TWD: { dec: '.', grp: ',', sym: 'NT$ ', noDecimals: 1 }, // Taiwan New Dollar
822	THB: { dec: '.', grp: ',', sym: '&#3647; ' }, // Tai Baht
823	'TRY': { dec: ',', grp: '.', sym: ' TL' }, // turkish lira
824	
825
826	format: function(floatVal) {
827		var val = floatVal.toFixed(2);
828		var hash = Currency[this.currId] || { dec: '.', grp: ',', sym: '$' };
829		if (hash.noDecimals)
830		    val = val.replace(/\..*/,'');   // discard decimal and everything after it
831		val = val.replace(/\,/g, hash.grp); // replace grouping chars
832		val = val.replace(/\.([\d]{0,2})$/, hash.dec + '$1');  // replace last decimal '.'
833		if (/^ /.test(hash.sym))
834			val = val + hash.sym;
835		else
836			val = hash.sym + val;
837		return val;
838	},
839	
840	currId: 'usd'
841};
842
843
844// helpers functions
845var Util = {
846    debug: function(s) {
847        if (window.console && window.console.log) window.console.log('[paysnap.js] '+s);
848    },
849    addParam: function(url, key, value) {
850        if (!key || !value) return url;
851        return url + (/\?/.test(url) ? '&' : '?') + key + '=' + value;
852    },
853    setCookie: function(name, value) {
854        var exp = '';
855        var hours = 1000 * 60 * 60 * cart_expire_hours;
856        var expires = new Date((new Date().getTime()) + hours );
857
858        if (value) {
859			value = encodeURIComponent(value);
860            if ( cart_expire_hours ) // in case it's zero
861                exp = ';expires=' + expires.toGMTString();
862        }
863			
864		if (window.localStorage) {
865			localStorage.setItem(name, value);
866            localStorage.setItem('paysnap-cart-expire', expires);
867        }
868		else {
869			document.cookie = name+'='+value + exp + '; path=/'; // ticket#94
870        }
871    },
872    getCookie: function(name) {
873		var val, expires;
874		if (window.localStorage) {
875            expires = localStorage.getItem('paysnap-cart-expire');
876            if (expires && new Date(expires).getTime() < new Date().getTime() )
877                return null;
878
879			val = localStorage.getItem(name);
880			if (val)
881				return decodeURIComponent(val);
882			return val;
883		}
884        if (document.cookie && document.cookie != '') {
885            var cookies = document.cookie.split(';');
886            for (var i=0, max=cookies.length; i < max; i++) {
887                var cookie = $.trim(cookies[i]);
888                if (cookie.substring(0, name.length + 1) == (name + '='))
889                    //return cookie.substring(name.length + 1);
890                    return decodeURIComponent(cookie.substring(name.length + 1));
891            }
892        }
893        return null;
894    },
895    
896
897    guid: function() {
898        var result='';
899        for(var i=0; i<32; i++)
900            result += Math.floor(Math.random()*16).toString(16).toUpperCase();
901        return result
902    },
903	param: function(a) {
904		var s = [];
905		jQuery.each( a, function(){
906			s.push(this.name + '=' + this.value);
907		});
908		return s.join("&");
909	}
910
911};
912
913Currency.currId = currency_format;
914
915var paysnap = {}, SC = paysnap;
916
917$.extend(paysnap, {
918
919    timeouts: {
920        cartUpdate:  10000,
921        search:      10000
922    },
923
924    slideOutWidth: 0,
925    isOpen: false,
926    $slideoutPanel: null,
927
928    initialize: function() {
929        // see if we have a cid session cookie; otherwise create one
930        var cid = Util.getCookie('cid');
931        if (!cid) {
932            cid = Util.guid();
933            Util.setCookie('cid', cid);
934            Util.debug('cid='+cid);
935        }
936        this.cid = cid;
937        this.buildDOM();
938        this.bindSellerForms();
939
940	    	
941	    $("a.paysnap-show-details").click(function(e) {	
942	    // Get modal content via template
943	    	  var target = $(this).attr('href');
944	    	  var title = $(this).attr('title');
945	    	  var $target = $(target);
946
947	    	  var styles = $target.attr('style');
948	    	  var w = (/width\s*\:\s*(\d+px)/.exec(styles)  || [])[1];
949	    	  var h = (/height\s*\:\s*(\d+px)/.exec(styles) || [])[1];
950	    	  
951	    	  // malsup-09-17
952	    	  var winH = $(window).height();
953	    	  var winW = $(window).width();
954
955	    	  var message = $target.html();
956			  var msg = $.paysnapRenderTemplate(title, message);
957			  var bgcolor = $target.data('bgcolor'); // my 10-16-2013 10:32:12 am
958			  var color = $target.data('color'); // my 10-16-2013 10:32:17
959	    	  var fullscreen = $target.data('fullscreen');
960			  var css = {};
961
962			  if ( !fullscreen && h >= winH ) {
963			  	css.height = '100%';
964			  	css.marginTop = css.marginBottom = 0;
965			  }
966			  if ( !fullscreen && w >= winW ) {
967			  	css.width = '100%';
968			  	css.marginLeft = css.marginRight = 0;
969			  }
970
971			  if ( fullscreen || mobile ) {
972			  	css.width  = '100%';
973			  	css.height = '100%';
974			  	css.margin = 0;
975			  	css.left = css.top = 0;
976			  }
977			  else {
978
979				  if ( w ) {
980				  	  w = Math.min( parseInt(w, 10), winW );
981				  	  css.width = w + 'px';
982				  	  // css.maxWidth = w + 'px';
983				  	  css.left = Math.max( ((winW - w) / 2), 0) +'px';
984				  	  css.marginLeft = 0;
985				  }
986				  if ( h ) {
987				  	h = Math.min( parseInt(h, 10), winH );
988				  	css.height = h + 'px';
989				  	css.maxHeight = h + 'px';
990				  	css.top = Math.max( (( winH - h) / 2) - 20, 0) +'px';
991				  	css.marginTop = 0;
992				  }
993			  }
994		      $.blockUIPaysnap({ message : msg, css: css });
995		      $('body').css('overflow-y', 'hidden');
996			  $('#block-button', '.paysnap-modal').click($.unblockUI);
997
998			  setTimeout(function() {
999			  	  // height corrections
1000			  	  var wrap = $('#ps-modal-wrap-details');
1001			  	  var body = $('#ps-modal-body-details');
1002			  	  var head = $('#ps-modal-heading-details');
1003				  var wrapOH = wrap.outerHeight();
1004				  var wrapH  = wrap.height();
1005				  var headH  = head.outerHeight();
1006				  var bodyH  = body.height();
1007				  var bodyOH = body.outerHeight();
1008				  var delta;
1009
1010			  	  // body.css('maxHeight', wrapOH - headH );
1011			  	  delta = wrapH - headH - bodyOH - 1;
1012
1013			  	  if ( delta > 0 ) {
1014			  	  	body.height('+='+delta);
1015			  	  }
1016			  	  else if ( delta < 0 ) {
1017			  	  	body.height( bodyH + delta );
1018			  	  }
1019				
1020				// set new colors
1021				if(bgcolor && color){
1022					$('#ps-modal-heading-details').css('background-color', bgcolor).css('color', color);
1023					$('#paysnap-close-details').css('color', color);
1024					$('#ps-modal-body-details').css('background-color', bgcolor);
1025				}
1026
1027			  	  $('#paysnap-close-details').on("click", function(){
1028			  	  		$.unblockUI();
1029			  	  		$('body').css('overflow-y', 'auto');
1030			  	  });
1031
1032			  	  setTimeout(function() {
1033			  	  	body.scrollTop(0);
1034			  	  },10);
1035
1036			  }, 15);
1037
1038			  return false;
1039		});      
1040        
1041        try {
1042        	Cart.initialize(true, this);
1043		}
1044		catch(e) {
1045			Util.debug('error initializing cart: ' + e);
1046		}
1047
1048		// $('#paysnap-container').hide().fadeIn();
1049    },
1050
1051
1052    $cartTab: null,
1053    $checkoutTab: null,
1054    $searchTab: null,
1055    checkoutTemplates: [],
1056    
1057	addOptVal: function(hash, key, name, value) {
1058		var o = hash[key];
1059		if (!o) {
1060			o = hash[key] = { arr: [] };
1061			if (name)
1062				o.name = name;
1063		}
1064		if (value)
1065			o.arr.push(value);
1066	},
1067
1068    submitToPaypal: function() {
1069    
1070		// build new hidden form
1071		// iterate products and add inputs to form
1072		// iterate "paypalData" and add to form
1073		// submit form
1074		
1075		var actionUrl = paypal_url;
1076		
1077		if(use_sandbox == 'true')
1078			actionUrl = paypal_sandbox_url;
1079		
1080    	
1081    	var f = '<form action="'+actionUrl+'" method="POST">';
1082    	f += '<input type="hidden" name="cmd" value="_cart" />';
1083    	f += '<input type="hidden" name="upload" value="1" />';
1084        $('#paysnap-cart tbody tr').each(function(itemIndex,o) {
1085            itemIndex = itemIndex + 1; // 1 based
1086            var optionIndex = 0;
1087            var $this = $(this), data = $this.data('paysnap');
1088            var s = data.s;
1089            s = s.replace(/&thumb.*/,''); // drop extra data used by script
1090			var arr = s.split('&');
1091	    	var optHash = {};
1092			$.each(arr, function() {
1093				var param = this.split('=');
1094				var n = param[0], v = $.trim(param[1]);
1095				
1096				if (n == 'cid') return; // dump cid per mike (10/06)
1097				if (n == 'base_price') return; // dump base_price
1098				
1099				v = v.replace(/\+/g, ' ');
1100				v = decodeURIComponent(v);
1101				
1102				if (v && /^(on|os)\d+/.test(n)) {
1103					if (/^on\d+/.test(n)) { // on - only add it if there is a cooresponding os
1104						var os = n.replace("on","os");
1105						if (s.indexOf(os) > -1)
1106							SC.addOptVal(optHash, n, v, null);
1107					}
1108					else // os - add it
1109						SC.addOptVal(optHash, n.replace('os','on'), null, v);
1110				}
1111				else if (v) {
1112			    	n = n+'_'+itemIndex;
1113					f += '<input type="hidden" name="'+n+'" value="'+v+'" />';
1114				}
1115			});
1116			
1117			var optionIndex = 0;
1118			for (var p in optHash) {
1119				var o = optHash[p], os = '';
1120				if (!o.name || o.arr.length == 0)
1121					continue;
1122		        for (var i=0; i < o.arr.length; i++) {
1123		        	if (os.length > 0)
1124		        		os += ', ';
1125		        	os += o.arr[i];
1126				}
1127				f += '<input type="hidden" name="on'+optionIndex+'_'+itemIndex+'" value="'+o.name+'">';
1128				f += '<input type="hidden" name="os'+optionIndex+'_'+itemIndex+'" value="'+os+'" />';
1129				optionIndex++;
1130			}
1131
1132        });
1133        
1134        // add global paypal data
1135		for (var p in paypalData) {
1136			if (!paypalData.hasOwnProperty(p))
1137				continue;
1138			var v = paypalData[p];
1139			if (!v)
1140				continue;
1141			if (p == 'cancel_return' || p == 'return_url' || p == 'return' || p == 'notify_url')
1142				v = $('<a href="'+ v +'">')[$.fn.prop ? 'prop' : 'attr']('href');
1143			f += '<input type="hidden" name="'+p+'" value="'+v+'" />';
1144		}
1145		f += '</form>';
1146		var $f = $(f);
1147
1148        if ( empty_cart_at_checkout ) {
1149            Cart.emptyCart();
1150        }
1151
1152		//alert('this is what is going to paypal:\n\n' + $f.serialize());
1153    	$f.appendTo('body').submit();
1154
1155    },
1156
1157    buildDOM: function() {
1158
1159        //
1160        // build the paysnap DOM
1161        //
1162        
1163
1164// ! TAB TEMPLATE
1165
1166		// Add PayPal logo if needed
1167		checkout_button_string = checkout_button_string.replace('#paypal#', '<i class="ps-icon-paypal-logo"></i>');
1168		
1169        var tabsTemplate = '<div id="paysnap-container" style="display:none;"><div id="ps-modal-wrap" class="paysnap"><div id=ps-stretch>'
1170        	+ ' <div id="paysnap-progress-bar"><div><i class="ps-icon-refresh ps-icon-spin ps-icon-2x"></i></div></div>'
1171            + '	<div id="ps-modal-heading">'+cart_title+'</div>'
1172            + '	<div id="paysnap-close"><i class="ps-icon-remove"></i></div>'
1173            + '	<div id="ps-modal-body">'
1174            + '		<div id="paysnap-contents">'
1175            + '			<div class="paysnap-content"></div>'
1176            + '		</div>'
1177            + '		<div class="paysnap-cart-total"></div>'
1178            + '		<div class="paysnap-cart-checkout"><button class="btn-paysnap btn-default btn-lg btn-block paysnap-co-btn">'+checkout_button_string+'</button></span></div>'
1179            + '	</div><!--body-->'
1180            + '</div></div></div>';
1181            
1182// ! CART TEMPLATE
1183        var cartTemplate =
1184              '<form id="paysnap-cart" method="GET" action="#" target="paysnap-checkout-src">'
1185            + ' <div id="paysnap-cart-contents">'
1186            + '<table>'
1187            + '   <tbody></tbody>'
1188            + '   <tfoot></tfoot></table></div>'
1189			+ '</form>'
1190            + '<div id="paysnap-cart-empty">'+empty_cart+'</div>';
1191            
1192
1193
1194        SC.$slideoutPanel = $(tabsTemplate).appendTo('body').css('zIndex',150000);
1195
1196        SC.$cartTab = $('#paysnap-contents div.paysnap-content:eq(0)');
1197        SC.$cartTab.append(cartTemplate);
1198        SC.$checkoutTab = $('div.paysnap-content');
1199        
1200        $('#paysnap-container').mousedown(function(e) {
1201        	var targ = $(e.target);
1202        	if ( targ.is('#paysnap-close,paysnap-co-btn,.paysnap-qty,paysnap-delete') )
1203        		return true;
1204        	return false;
1205        });
1206
1207        $('#paysnap-cart').submit(function(e) {
1208            e.preventDefault();
1209            var data = $(this).serialize();
1210            data = Util.addParam(data, 'cid', SC.cid);
1211            $.event.trigger('yabdab-cart-item-update', [data]);
1212            return false;
1213        });
1214        
1215        
1216        // MY - block and spin on checkout link click
1217        $('.paysnap-co-btn').click(function() {
1218        	// ticket#89 - do not allow cart with zero total to be submitted
1219        	var cost = Cart.calcCartTotal();
1220        	if (cost <= 0) {
1221        		var msg = '<div class="paysnap-sheet">' +
1222        			'' + checkout_warning + '' + 
1223        			'<div><button class="paysnap-close-sheet">'+ ok_string +'</button></div></div>';
1224    			var $block = $('#paysnap-contents').blockWithSheet(msg, function(e) {
1225                    e.preventDefault();
1226    				$block.unblock();
1227                    return false;
1228    			});
1229    			return;
1230        	}
1231        	
1232            SC.$checkoutTab.blockAndSpin();
1233            setTimeout(SC.submitToPaypal, 500);
1234            return false;
1235        });
1236
1237   
1238        // close cart drawer button
1239        $('#paysnap-close').click(function() {
1240            SC.showTabs(SC.isOpen ? 0 : 1);
1241            return false;
1242        });
1243        
1244 		// view cart drawer button
1245       	$('.paysnap-viewcart').click(function() {
1246       		Cart.updateTotal();
1247           	SC.showTabs(SC.isOpen ? 0 : 1);
1248           	return false;
1249       	});
1250
1251        // SC.$slideoutPanel.show();
1252    },
1253
1254    bindSellerForms: function() {
1255        // product forms
1256        $('.paysnap-addtocart').click(function(e) {
1257            e.preventDefault();
1258            var $dl = $(this).closest('div.paysnap-item'); // changed from li to div.paysnap-item
1259
1260            // 09-19-13 malsup: validate amount is number
1261            var amount = $dl.find('input.item_price').val();
1262            if ( amount === '' || isNaN( amount )) {
1263				var msg = $.paysnapRenderTemplate('Invalid Amount', 'The amount must be a valid number.');
1264			    $.blockUIPaysnap({ message : msg, css: { top: '20%'} });
1265				$('#block-button', '.paysnap-modal').click($.unblockUI);
1266            }
1267
1268            var data = $.param($dl.find(':input').filter(function() {
1269				return ! $(this).is('[name^=on]') && ! $(this).is('[name^=os]');
1270			}).serializeArray());
1271			$dl.find('div.paysnap-option').each(function(i) {
1272				var optData = $(this).find(':input').serialize();
1273				if (! /os=/.test(optData))
1274					return; // discard options with no selections
1275				optData = optData.replace(/on=/g, 'on' + i + '=').replace(/os=/g, 'os' + i + '=');
1276				optData = optData.replace(/\%7C\%7C[^\&\|]*/g, ''); // discard double pipe and option amounts
1277				if (data && optData)
1278					data += ('&' + optData);
1279				else if (optData)
1280					data = optData;
1281			});
1282            var details = '';
1283            $dl.find(':input[name^=os]:visible').each(function() {
1284            	var $this = $(this);
1285            	if (!this.checked && !this.selected) {
1286            		// is it a select?  (also, ticket#91, look for text inputs too)
1287            		if (($this.find('option:selected').length == 0) && (this.type != 'text'))
1288            			return;
1289            	}
1290            	var vn, v = $this.val();
1291            	if (v) {
1292					vn = v.split('||')[0] || '';
1293					if (vn) {
1294		            	if (details.length > 0)
1295		            		details += ', ';
1296		            	details += vn;
1297					}
1298				}
1299            });
1300            data += ('&cid=' + SC.cid);
1301			            
1302			if (false !== Cart.addItem(true, data, details))
1303            	SC.showTabs(1);
1304            return false;
1305        });
1306
1307		// bind product change event (by MikeY)
1308		$('.pp-amt').bind('change blur', function() { 
1309			var $dl = $(this).closest('div.paysnap-item');
1310			var p = (this.name || ''); // name is 'os' on all products
1311			var start = parseFloat($dl.find(':input[name^=base_price]').val());
1312			var add = parseFloat(0.00);
1313			var amt = parseFloat(0.00);
1314			if ( isNaN( start ) )
1315				start = 0;
1316				 
1317			 // loop through all amt triggers
1318			 //$('#paysnap-p-'+p+' .pp-amt').each(function (i) {
1319			 $dl.find(':input[name^=os]').each(function(i) {
1320				var $this  = $(this);
1321				var name = this.name || '';
1322				var va, vn, v = $this.val();
1323	        	var temp = [];
1324				if(v) {
1325					temp = v.split("||");
1326					vn = temp[0];
1327					va = temp[1] || v; // detail amount
1328				}
1329			
1330			 	if(this.type == "select-one"){
1331			 		amt = parseFloat(va);// get new per item amount
1332			 	}
1333			 	else if(this.type =="radio" && this.checked){ // radio option
1334			 		amt = parseFloat(va);// get new per item amount
1335			 	}
1336			 	else if(this.type =="checkbox" && this.checked){ // checkbox option
1337			 		amt = parseFloat(va);// get new per item amount
1338			 	}
1339			 	else if(this.type =="text"){ 
1340			 		//amt = parseFloat(v);
1341					//if (isNaN(amt))
1342						amt = 0; // text option never effects price
1343			 	}
1344			
1345				if (isNaN(amt)) {
1346					Util.debug('NaN amount for input: ' + vn || name);
1347					return;
1348				}
1349			
1350				add = amt + add;
1351				amt=0; // zero it out to start next loop
1352			 });//each
1353				 
1354			// Ticket#88 - don't allow negative product values
1355			 var tempTotal = start + add;
1356			 if (tempTotal < 0)
1357				 tempTotal = 0;
1358			 
1359			 var newtotal = (tempTotal).toFixed(2);
1360			 var newFormattedTotal = Currency.format(tempTotal);
1361	 
1362			 $dl.find(':input[name^=amount]').val(newtotal);// change form input value for amount
1363			 $dl.find('.paysnap-amount').html(newFormattedTotal); // so we can see new amount
1364				 
1365		}); // change
1366
1367		// function to get psuedo selectedIndex from radio buttons and checkboxes.
1368		function getCheckedValue(n,v) {	
1369			var index = 0 ;
1370			$('input[name='+n+']').each(function (i) {
1371				if (this.value == v)
1372		  			index = i;
1373			});	
1374			return index;
1375		}
1376    },
1377
1378    showTabs: function(show) {
1379    	var footer = '<div class="ps-overlay-footer"><span>' + footer_text + '</span></div>';  
1380	
1381		if ( mobile ) 
1382			$('body').addClass('ps-mobile');
1383
1384		$[show ? 'blockUIPaysnap' : 'unblockUI']({ message: footer, bindEvents: 0 });
1385
1386		if ( show ) {
1387			SC.$slideoutPanel.fadeIn();
1388			SC.isOpen = true;
1389			if ( mobile )
1390				setTimeout(function() {
1391					SC.resizeCartForMobile();
1392				}, 100);
1393		}
1394		else {
1395			SC.$slideoutPanel.fadeOut();
1396			SC.isOpen = false;
1397    		if ( mobile )
1398    			$('#paysnap-contents').height( 'auto' );
1399
1400		}
1401    },
1402
1403    resizeCartForMobile: function() {
1404    	var h1 = $('#ps-modal-wrap').height();
1405    	var h2 = $('#ps-stretch').height();
1406    	$('#paysnap-contents').height( h1 - h2 );
1407    }
1408
1409});
1410
1411
1412
1413///////////////////////////////////
1414//
1415//  Cart definition
1416//
1417///////////////////////////////////
1418
1419var Cart = {
1420
1421    TOKEN: '{YDPS}',
1422    
1423    deleteSheet: '', // see "initialize" fn below
1424
1425    autoUpdate: true,
1426    stringFactory: null,
1427   /*
1428 getString: function(key) {
1429        return this.stringFactory.getString(key);
1430    },
1431*/
1432
1433    initialize: function(autoUpdate, stringFactory) {
1434        this.stringFactory = stringFactory;
1435        this.autoUpdate = autoUpdate;
1436        this.loadFromCookie();
1437        
1438        this.deleteSheet = '<div id="paysnap-delete-sheet" class="paysnap-sheet">'
1439        	+ ''+ delete_confirm +''
1440        	+ '<div>'
1441        	+ '<button class="btn-paysnap btn-danger paysnap-close-sheet"><i class="ps-icon-remove"></i> '+ cancel_string +'</button>'
1442        	+ ' <button id="paysnap-del-yes" class="btn-paysnap btn-success paysnap-close-sheet"><i class="ps-icon-ok"></i> '+ ok_string +'</button> '
1443        	+ '</div></div>'; 
1444    },
1445
1446    updateTotal: function() {
1447        if (!Cart.autoUpdate) {
1448            // read cart grandtotal from cookie
1449            var gt = Util.getCookie('total');
1450            if (gt) {
1451                gt = parseFloat(gt.replace(',',''));
1452                $('#paysnap-container .paysnap-cart-total').html(Currency.format(gt));
1453            }
1454            return;
1455        }
1456
1457        var cost = Cart.calcCartTotal();
1458        $('#paysnap-container .paysnap-cart-total').html(Currency.format(cost));
1459    },
1460
1461    calcCartTotal: function() {
1462        var qty = 0, cost = 0;
1463        $('#paysnap-cart tbody tr').each(function(i,o) {
1464            var $this = $(this), data = $this.data('paysnap');
1465            var q = parseInt(data.qty, 10);
1466            var c = parseFloat(data.cost.replace(',',''));
1467            qty += q;
1468            cost += parseFloat(q*c);
1469        });
1470       return cost;
1471    },
1472    
1473    updateCookie: function() {
1474        var s = '';
1475        $('#paysnap-cart tbody tr').each(function(i,o) {
1476            var $this = $(this);
1477            var data = $this.data('paysnap');
1478            if (s.length)
1479                s += Cart.TOKEN;
1480            s += data.s;
1481			if (!/details=/.test(data.s))
1482	            s += '&details=' + data.details;
1483        });
1484        Util.setCookie('cart',s);
1485    },
1486
1487    addItem: function(updateCookie, s, details) {
1488        var item 
1489        try { 
1490        	item = s.match(/(item_name+=[^&]+)/)[1].split('=')[1]; 
1491        }
1492        catch(x) { 
1493        	item = 'Untitled Product';
1494        } 
1495        
1496        item = decodeURIComponent(item);
1497        
1498        var pid = item;
1499        details = details || (s.match(/(details=[^&]+)/)||['','='])[1].split('=')[1];
1500
1501		var cost, qty;
1502		try { 
1503			cost = s.match(/(amount+=[^&]+)/)[1].split('=')[1]; 
1504		}
1505		catch(x) { 
1506			cost = '0';
1507		}
1508		if (isNaN(parseFloat(cost))) {
1509			Util.debug('invalid cost: ' + cost);
1510			return false;
1511		}
1512		
1513		try { 
1514			qty = s.match(/(quantity+=[^&]+)/)[1].split('=')[1]; 
1515		}
1516		catch(x) { 
1517			qty = 1;
1518			s = s + '&quantity=1';
1519		}
1520
1521		if (isNaN(parseInt(qty, 10))) {
1522			Util.debug('invalid qty, setting to 1');
1523			qty = 1;
1524		}		
1525		var total = parseFloat(cost) * parseFloat(qty);	
1526		item = item.replace(/\+/g, '%20');
1527        item = decodeURIComponent(item);
1528	
1529		var key = item + '%%' + details + '%%' + cost;
1530		
1531		// see if this product/options combo already exists in cart - if so, just bump the qty
1532		var bail = false;
1533		$('#paysnap-cart table tbody tr').each(function() {
1534			var $this = $(this);
1535			var data = $this.data('paysnap');
1536			if (data.key != key)
1537				return; // keep looping
1538			data.qty = parseInt(data.qty, 10) + parseInt(qty, 10);
1539			data.s = data.s.replace(/quantity+=\d+/,'quantity='+data.qty); //[yd]
1540	        var cost = data.s.match(/(amount+=[^&]+)/)[1].split('=')[1]; //[yd]
1541			var total = parseFloat(cost) * parseFloat(data.qty);	
1542			$this.find('input.paysnap-qty').val(data.qty);
1543			$this.find('.paysnap-row-total').html(data.qty+' x ' + Currency.format(parseFloat(cost.replace(',',''))) 
1544        		+ ' = ' + Currency.format(parseFloat(total)));
1545			
1546			Cart.updateCookie();
1547			Cart.updateTotal();
1548			bail = true;
1549		});
1550		if (bail)
1551			return;
1552
1553        // add item to cart
1554        var row = '<tr>'
1555        	+ '<td><input class="paysnap-qty paysnap-number form-control input-sm" style="width:40" type="number" value="'+qty+'" name="qty" size="4" /></td>'
1556            + '<td class="paysnap-delete"><i class="ps-icon-remove-circle ps-icon-2x"></i>'
1557            + '<input type="hidden" name="item" value="'+item+'" /><input type="hidden" name="pid" value="'+pid+'" />'
1558			+ '</td><td>'
1559        	+ '<input type="hidden" name="cost" value="'+cost+'" />'
1560        	+ '<span class="paysnap-product-name">' + item + '</span>';
1561        if (details)
1562        	row += '<span class="paysnap-product-details">' + details + '</span>';
1563        row += '<span class="paysnap-product-details paysnap-row-total">'+qty+' x ' + Currency.format(parseFloat(cost.replace(',',''))) 
1564        	+ ' = ' + Currency.format(parseFloat(total)) + '</span>';
1565        row += '</td>';
1566
1567        var $row = $(row).appendTo('#paysnap-cart tbody');
1568
1569        $('.paysnap-delete',$row).click(function() {
1570			var $block = $('#paysnap-contents').blockWithSheet(Cart.deleteSheet, function(e) {
1571                e.preventDefault();
1572				$block.unblock();
1573                if (this.id == 'paysnap-del-yes') {
1574                    $.event.trigger('yabdab-cart-item-delete', ['pid='+pid]);
1575                    Cart.tiger();
1576                    if (!Cart.autoUpdate)
1577                        return false;
1578
1579                    $row.remove();
1580
1581                    Cart.updateCookie();
1582
1583                    if ($('#paysnap-cart tbody tr').size() === 0) {
1584                        $('#paysnap-cart').hide();
1585                        $('#paysnap-cart-empty').show();
1586                        Cart.updateTotal();
1587                    }
1588                    else {
1589                        Cart.updateTotal();
1590                    }
1591                    Cart.tiger();
1592                }
1593                return false;
1594            });
1595        });
1596
1597        $('.paysnap-qty',$row).bind('keydown', function(e) {
1598            var w = e.which;
1599            if ((w >= 48 || w <= 57) || (w >= 96 && w <= 105))
1600				return true;
1601            			return false;
1602        }).bind('focus', function() {
1603            this.select();
1604        }).bind('change', function(e) {
1605            var $this = $(this);
1606            var $currRow = $this.parents('tr:first');
1607            var data = $currRow.data('paysnap');
1608
1609            var q = parseInt($this.val(), 10);
1610			if (isNaN(q)) {
1611				e.preventDefault();
1612				var prevQty = (data.s.match(/quantity=(\d+)/)||[])[1];
1613				setTimeout(function(){
1614					$this.val(prevQty).focus()
1615				},20);
1616				return;
1617			}
1618            if (q === 0) {
1619                $('.paysnap-delete',$row).triggerHandler('click');
1620                return;
1621            }
1622			$(this).val(q);
1623
1624            var cartContents = $('#paysnap-cart').serialize();
1625            $.event.trigger('yabdab-cart-item-update', [cartContents]);
1626            if (!Cart.autoUpdate)
1627                return;
1628
1629            // update meta
1630
1631			data.s = data.s.replace(/quantity+=\d+/,'quantity='+q);
1632
1633            data.qty = q;
1634            var rowTotal = parseFloat(q * data.cost.replace(',',''));
1635            
1636            var details2 = q +' x ' + Currency.format(parseFloat(data.cost.replace(',',''))) 
1637            	+ ' = ' + Currency.format(rowTotal);            
1638            
1639            $('.paysnap-row-total',$currRow).html(details2);
1640            Cart.updateCookie();
1641            Cart.updateTotal();
1642        });
1643
1644        $row.data('paysnap', { s: s, qty: qty, cost: cost, details: details, key: key });
1645
1646        setTimeout(function() {
1647            $('#paysnap-cart-empty').hide();
1648            $('#paysnap-cart').show();
1649        }, 200);
1650
1651        if (updateCookie)
1652            Cart.updateCookie();
1653        Cart.updateTotal();
1654        this.tiger();
1655    },
1656
1657    tiger: function() {
1658        if (this.noTiger) return;
1659        // tiger stripe
1660       // $('#paysnap-cart tbody tr').css('backgroundColor','#fff').filter(':even').css('backgroundColor', '#eaf3ff');
1661       // Use addClass instead - MY 040609
1662       $('#paysnap-cart tbody tr').removeClass().addClass('paysnap-row-one').filter(':even').addClass('paysnap-row-two');
1663    },
1664
1665    setCookie: function(cart, grandtotal) {
1666        Util.setCookie('cart', cart);
1667        Util.setCookie('total', grandtotal);
1668    },
1669
1670    emptyCart: function() {
1671        // $('#paysnap-cart table tbody tr').remove();
1672        Util.setCookie('cart', '');
1673        Util.setCookie('total', '');
1674    },
1675
1676    loadFromCookie: function() {
1677        var c = Util.getCookie('cart');
1678        if (!$.trim(c)) {
1679            $('#paysnap-cart').hide();
1680            $('#paysnap-cart-empty').show();
1681            return;
1682        }
1683
1684        $('#paysnap-cart table tbody tr').remove();
1685
1686        this.noTiger = true; // raise fence
1687
1688        //c = c.replace(/lang=[^&]*/,'');
1689        c = c.replace(/callback=jsonp[0-9]*/,'');
1690        c = c.replace(/_=[0-9]*/,'');
1691        c = c.replace(/pid=/g,Cart.TOKEN+'pid=');
1692        c = c.replace(/^&*/,'');
1693        var re = new RegExp('^'+Cart.TOKEN);
1694        c = c.replace(re,'');
1695
1696        var a = c.split(Cart.TOKEN);
1697        for (var i=0; i < a.length; i++) {
1698            var s = a[i];
1699            s = s.replace(/&+/,'&');
1700            s = s.replace(/^&/,'');
1701            s = s.replace(/&$/,'');
1702            if ($.trim(s) == '')
1703                continue;
1704            Cart.addItem(false,s);
1705        }
1706
1707        if ($('#paysnap-cart tbody tr').length == 0) {
1708            $('#paysnap-cart').hide();
1709            $('#paysnap-cart-empty').show();
1710        }
1711
1712        this.noTiger = false; // lower fence
1713        this.updateTotal();
1714        this.tiger();
1715    }
1716};
1717
1718
1719$(window).load(function(){
1720
1721	if(debug == 'True') {
1722		// load debug window
1723		var debugInfo = $("#"+stack_id+" .ydps-debug").html();
1724		$.blockUIPaysnap({ message : debugInfo });
1725		//$('#block-button', '.blockMsg').click($.unblockUI);
1726	}  
1727	
1728	// Make sure everything is entered....
1729
1730	if(!business)
1731		$('#'+stack_id).before('<p class="ydps-error"><b>PayPal Email</b> is Required for PaySnap to Function Properly.</p>');
1732	
1733	if(!return_url)
1734		$('#'+stack_id).before('<p class="ydps-error"><b>Return URL</b> is Required for PaySnap to Function Properly.</p>');
1735	
1736	if(!cancel_url)
1737		$('#'+stack_id).before('<p class="ydps-error"><b>Cancel URL</b> is Required for PaySnap to Function Properly.</p>');
1738	
1739
1740});
1741
1742
1743}; // paysnap fn
1744
1745paysnap($); // call it
1746//----------------------------------------------------------//
1747// + PAYSNAP v.2.0.3  (END)
1748//----------------------------------------------------------//
1749
1750return stack;})(stacks.stacks_in_149);
1751stacks.stacks_in_237 = {};
1752stacks.stacks_in_237 = (function(stack) {
1753var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
1754  
1755});
1756
1757return stack;})(stacks.stacks_in_237);
1758stacks.stacks_in_250 = {};
1759stacks.stacks_in_250 = (function(stack) {
1760var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
1761  
1762});
1763
1764return stack;})(stacks.stacks_in_250);
1765stacks.stacks_in_204 = {};
1766stacks.stacks_in_204 = (function(stack) {
1767var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
1768  
1769});
1770
1771return stack;})(stacks.stacks_in_204);
1772stacks.stacks_in_205 = {};
1773stacks.stacks_in_205 = (function(stack) {
1774var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){
1775  
1776});
1777
1778return stack;})(stacks.stacks_in_205);

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.