/* Minification failed. Returning unminified contents.
(2347,36-37): run-time error JS1195: Expected expression: >
(2358,57-58): run-time error JS1195: Expected expression: )
(2358,60-61): run-time error JS1195: Expected expression: >
(2360,18-19): run-time error JS1195: Expected expression: )
(2362,57-58): run-time error JS1195: Expected expression: )
(2362,60-61): run-time error JS1195: Expected expression: >
(2364,17-18): run-time error JS1002: Syntax error: }
(2371,37-38): run-time error JS1004: Expected ';': {
(10830,19-20): run-time error JS1195: Expected expression: )
(10830,22-23): run-time error JS1195: Expected expression: >
(10832,1-2): run-time error JS1002: Syntax error: }
(10834,29-30): run-time error JS1195: Expected expression: )
(10834,31-32): run-time error JS1004: Expected ';': {
(10844,2-3): run-time error JS1195: Expected expression: )
(2375,5-25): run-time error JS1018: 'return' statement outside of function: return dateFormatted
 */
/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
;
(function defineMustache(global, factory) { if (typeof exports === "object" && exports && typeof exports.nodeName !== "string") { factory(exports) } else if (typeof define === "function" && define.amd) { define(["exports"], factory) } else { global.Mustache = {}; factory(global.Mustache) } })(this, function mustacheFactory(mustache) { var objectToString = Object.prototype.toString; var isArray = Array.isArray || function isArrayPolyfill(object) { return objectToString.call(object) === "[object Array]" }; function isFunction(object) { return typeof object === "function" } function typeStr(obj) { return isArray(obj) ? "array" : typeof obj } function escapeRegExp(string) { return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&") } function hasProperty(obj, propName) { return obj != null && typeof obj === "object" && propName in obj } function primitiveHasOwnProperty(primitive, propName) { return primitive != null && typeof primitive !== "object" && primitive.hasOwnProperty && primitive.hasOwnProperty(propName) } var regExpTest = RegExp.prototype.test; function testRegExp(re, string) { return regExpTest.call(re, string) } var nonSpaceRe = /\S/; function isWhitespace(string) { return !testRegExp(nonSpaceRe, string) } var entityMap = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;", "/": "&#x2F;", "`": "&#x60;", "=": "&#x3D;" }; function escapeHtml(string) { return String(string).replace(/[&<>"'`=\/]/g, function fromEntityMap(s) { return entityMap[s] }) } var whiteRe = /\s*/; var spaceRe = /\s+/; var equalsRe = /\s*=/; var curlyRe = /\s*\}/; var tagRe = /#|\^|\/|>|\{|&|=|!/; function parseTemplate(template, tags) { if (!template) return []; var sections = []; var tokens = []; var spaces = []; var hasTag = false; var nonSpace = false; function stripSpace() { if (hasTag && !nonSpace) { while (spaces.length) delete tokens[spaces.pop()] } else { spaces = [] } hasTag = false; nonSpace = false } var openingTagRe, closingTagRe, closingCurlyRe; function compileTags(tagsToCompile) { if (typeof tagsToCompile === "string") tagsToCompile = tagsToCompile.split(spaceRe, 2); if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) throw new Error("Invalid tags: " + tagsToCompile); openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + "\\s*"); closingTagRe = new RegExp("\\s*" + escapeRegExp(tagsToCompile[1])); closingCurlyRe = new RegExp("\\s*" + escapeRegExp("}" + tagsToCompile[1])) } compileTags(tags || mustache.tags); var scanner = new Scanner(template); var start, type, value, chr, token, openSection; while (!scanner.eos()) { start = scanner.pos; value = scanner.scanUntil(openingTagRe); if (value) { for (var i = 0, valueLength = value.length; i < valueLength; ++i) { chr = value.charAt(i); if (isWhitespace(chr)) { spaces.push(tokens.length) } else { nonSpace = true } tokens.push(["text", chr, start, start + 1]); start += 1; if (chr === "\n") stripSpace() } } if (!scanner.scan(openingTagRe)) break; hasTag = true; type = scanner.scan(tagRe) || "name"; scanner.scan(whiteRe); if (type === "=") { value = scanner.scanUntil(equalsRe); scanner.scan(equalsRe); scanner.scanUntil(closingTagRe) } else if (type === "{") { value = scanner.scanUntil(closingCurlyRe); scanner.scan(curlyRe); scanner.scanUntil(closingTagRe); type = "&" } else { value = scanner.scanUntil(closingTagRe) } if (!scanner.scan(closingTagRe)) throw new Error("Unclosed tag at " + scanner.pos); token = [type, value, start, scanner.pos]; tokens.push(token); if (type === "#" || type === "^") { sections.push(token) } else if (type === "/") { openSection = sections.pop(); if (!openSection) throw new Error('Unopened section "' + value + '" at ' + start); if (openSection[1] !== value) throw new Error('Unclosed section "' + openSection[1] + '" at ' + start) } else if (type === "name" || type === "{" || type === "&") { nonSpace = true } else if (type === "=") { compileTags(value) } } openSection = sections.pop(); if (openSection) throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos); return nestTokens(squashTokens(tokens)) } function squashTokens(tokens) { var squashedTokens = []; var token, lastToken; for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { token = tokens[i]; if (token) { if (token[0] === "text" && lastToken && lastToken[0] === "text") { lastToken[1] += token[1]; lastToken[3] = token[3] } else { squashedTokens.push(token); lastToken = token } } } return squashedTokens } function nestTokens(tokens) { var nestedTokens = []; var collector = nestedTokens; var sections = []; var token, section; for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { token = tokens[i]; switch (token[0]) { case "#": case "^": collector.push(token); sections.push(token); collector = token[4] = []; break; case "/": section = sections.pop(); section[5] = token[2]; collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens; break; default: collector.push(token) } } return nestedTokens } function Scanner(string) { this.string = string; this.tail = string; this.pos = 0 } Scanner.prototype.eos = function eos() { return this.tail === "" }; Scanner.prototype.scan = function scan(re) { var match = this.tail.match(re); if (!match || match.index !== 0) return ""; var string = match[0]; this.tail = this.tail.substring(string.length); this.pos += string.length; return string }; Scanner.prototype.scanUntil = function scanUntil(re) { var index = this.tail.search(re), match; switch (index) { case -1: match = this.tail; this.tail = ""; break; case 0: match = ""; break; default: match = this.tail.substring(0, index); this.tail = this.tail.substring(index) }this.pos += match.length; return match }; function Context(view, parentContext) { this.view = view; this.cache = { ".": this.view }; this.parent = parentContext } Context.prototype.push = function push(view) { return new Context(view, this) }; Context.prototype.lookup = function lookup(name) { var cache = this.cache; var value; if (cache.hasOwnProperty(name)) { value = cache[name] } else { var context = this, intermediateValue, names, index, lookupHit = false; while (context) { if (name.indexOf(".") > 0) { intermediateValue = context.view; names = name.split("."); index = 0; while (intermediateValue != null && index < names.length) { if (index === names.length - 1) lookupHit = hasProperty(intermediateValue, names[index]) || primitiveHasOwnProperty(intermediateValue, names[index]); intermediateValue = intermediateValue[names[index++]] } } else { intermediateValue = context.view[name]; lookupHit = hasProperty(context.view, name) } if (lookupHit) { value = intermediateValue; break } context = context.parent } cache[name] = value } if (isFunction(value)) value = value.call(this.view); return value }; function Writer() { this.cache = {} } Writer.prototype.clearCache = function clearCache() { this.cache = {} }; Writer.prototype.parse = function parse(template, tags) { var cache = this.cache; var cacheKey = template + ":" + (tags || mustache.tags).join(":"); var tokens = cache[cacheKey]; if (tokens == null) tokens = cache[cacheKey] = parseTemplate(template, tags); return tokens }; Writer.prototype.render = function render(template, view, partials, tags) { var tokens = this.parse(template, tags); var context = view instanceof Context ? view : new Context(view); return this.renderTokens(tokens, context, partials, template, tags) }; Writer.prototype.renderTokens = function renderTokens(tokens, context, partials, originalTemplate, tags) { var buffer = ""; var token, symbol, value; for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { value = undefined; token = tokens[i]; symbol = token[0]; if (symbol === "#") value = this.renderSection(token, context, partials, originalTemplate); else if (symbol === "^") value = this.renderInverted(token, context, partials, originalTemplate); else if (symbol === ">") value = this.renderPartial(token, context, partials, tags); else if (symbol === "&") value = this.unescapedValue(token, context); else if (symbol === "name") value = this.escapedValue(token, context); else if (symbol === "text") value = this.rawValue(token); if (value !== undefined) buffer += value } return buffer }; Writer.prototype.renderSection = function renderSection(token, context, partials, originalTemplate) { var self = this; var buffer = ""; var value = context.lookup(token[1]); function subRender(template) { return self.render(template, context, partials) } if (!value) return; if (isArray(value)) { for (var j = 0, valueLength = value.length; j < valueLength; ++j) { buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate) } } else if (typeof value === "object" || typeof value === "string" || typeof value === "number") { buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate) } else if (isFunction(value)) { if (typeof originalTemplate !== "string") throw new Error("Cannot use higher-order sections without the original template"); value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender); if (value != null) buffer += value } else { buffer += this.renderTokens(token[4], context, partials, originalTemplate) } return buffer }; Writer.prototype.renderInverted = function renderInverted(token, context, partials, originalTemplate) { var value = context.lookup(token[1]); if (!value || isArray(value) && value.length === 0) return this.renderTokens(token[4], context, partials, originalTemplate) }; Writer.prototype.renderPartial = function renderPartial(token, context, partials, tags) { if (!partials) return; var value = isFunction(partials) ? partials(token[1]) : partials[token[1]]; if (value != null) return this.renderTokens(this.parse(value, tags), context, partials, value) }; Writer.prototype.unescapedValue = function unescapedValue(token, context) { var value = context.lookup(token[1]); if (value != null) return value }; Writer.prototype.escapedValue = function escapedValue(token, context) { var value = context.lookup(token[1]); if (value != null) return mustache.escape(value) }; Writer.prototype.rawValue = function rawValue(token) { return token[1] }; mustache.name = "mustache.js"; mustache.version = "3.0.1"; mustache.tags = ["{{", "}}"]; var defaultWriter = new Writer; mustache.clearCache = function clearCache() { return defaultWriter.clearCache() }; mustache.parse = function parse(template, tags) { return defaultWriter.parse(template, tags) }; mustache.render = function render(template, view, partials, tags) { if (typeof template !== "string") { throw new TypeError('Invalid template! Template should be a "string" ' + 'but "' + typeStr(template) + '" was given as the first ' + "argument for mustache#render(template, view, partials)") } return defaultWriter.render(template, view, partials, tags) }; mustache.to_html = function to_html(template, view, partials, send) { var result = mustache.render(template, view, partials); if (isFunction(send)) { send(result) } else { return result } }; mustache.escape = escapeHtml; mustache.Scanner = Scanner; mustache.Context = Context; mustache.Writer = Writer; return mustache });;
$(window).on("resize", function (e) { $(window).trigger("load") }), function (e, t) { "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? module.exports = t() : e.salvattore = t() }(this, function () { return window.matchMedia || (window.matchMedia = function () { "use strict"; var e = window.styleMedia || window.media; if (!e) { var t, n = document.createElement("style"), r = document.getElementsByTagName("script")[0]; n.type = "text/css", n.id = "matchmediajs-test", r.parentNode.insertBefore(n, r), t = "getComputedStyle" in window && window.getComputedStyle(n, null) || n.currentStyle, e = { matchMedium: function (e) { var r = "@media " + e + "{ #matchmediajs-test { width: 1px; } }"; return n.styleSheet ? n.styleSheet.cssText = r : n.textContent = r, "1px" === t.width } } } return function (t) { return { matches: e.matchMedium(t || "all"), media: t || "all" } } }()), function () { "use strict"; if (window.matchMedia && window.matchMedia("all").addListener) return !1; var e = window.matchMedia, t = e("only all").matches, n = !1, r = 0, i = [], a = function (t) { clearTimeout(r), r = setTimeout(function () { for (var t = 0, n = i.length; t < n; t++) { var r = i[t].mql, a = i[t].listeners || [], o = e(r.media).matches; if (o !== r.matches) { r.matches = o; for (var c = 0, l = a.length; c < l; c++)a[c].call(window, r) } } }, 30) }; window.matchMedia = function (r) { var o = e(r), c = [], l = 0; return o.addListener = function (e) { t && (n || (n = !0, window.addEventListener("resize", a, !0)), 0 === l && (l = i.push({ mql: o, listeners: c })), c.push(e)) }, o.removeListener = function (e) { for (var t = 0, n = c.length; t < n; t++)c[t] === e && c.splice(t, 1) }, o } }(), function () { "use strict"; for (var e = 0, t = ["ms", "moz", "webkit", "o"], n = 0; n < t.length && !window.requestAnimationFrame; ++n)window.requestAnimationFrame = window[t[n] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[t[n] + "CancelAnimationFrame"] || window[t[n] + "CancelRequestAnimationFrame"]; window.requestAnimationFrame || (window.requestAnimationFrame = function (t, n) { var r = (new Date).getTime(), i = Math.max(0, 16 - (r - e)), a = window.setTimeout(function () { t(r + i) }, i); return e = r + i, a }), window.cancelAnimationFrame || (window.cancelAnimationFrame = function (e) { clearTimeout(e) }) }(), "function" != typeof window.CustomEvent && function () { "use strict"; function e(e, t) { t = t || { bubbles: !1, cancelable: !1, detail: void 0 }; var n = document.createEvent("CustomEvent"); return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n } e.prototype = window.Event.prototype, window.CustomEvent = e }(), function (e, t, n) { "use strict"; var r = {}, i = [], a = [], o = [], c = function (e, t, n) { e.dataset ? e.dataset[t] = n : e.setAttribute("data-" + t, n) }; return r.obtainGridSettings = function (t) { var n = e.getComputedStyle(t, ":before").getPropertyValue("content").slice(1, -1), r = n.match(/^\s*(\d+)(?:\s?\.(.+))?\s*$/), i = 1, a = []; return r ? (i = r[1], a = (a = r[2]) ? a.split(".") : ["column"]) : (r = n.match(/^\s*\.(.+)\s+(\d+)\s*$/)) && (a = r[1], (i = r[2]) && (i = i.split("."))), { numberOfColumns: i, columnClasses: a } }, r.addColumns = function (e, n) { for (var i, a = r.obtainGridSettings(e), o = a.numberOfColumns, l = a.columnClasses, s = new Array(+o), u = t.createDocumentFragment(), d = o; 0 != d--;)i = "[data-columns] > *:nth-child(" + o + "n-" + d + ")", s.push(n.querySelectorAll(i)); s.forEach(function (e) { var n = t.createElement("div"), r = t.createDocumentFragment(); n.className = l.join(" "), Array.prototype.forEach.call(e, function (e) { r.appendChild(e) }), n.appendChild(r), u.appendChild(n) }), e.appendChild(u), c(e, "columns", o) }, r.removeColumns = function (n) { var r = t.createRange(); r.selectNodeContents(n); var i = Array.prototype.filter.call(r.extractContents().childNodes, function (t) { return t instanceof e.HTMLElement }), a = i.length, o = i[0].childNodes.length, l = new Array(o * a); Array.prototype.forEach.call(i, function (e, t) { Array.prototype.forEach.call(e.children, function (e, n) { l[n * a + t] = e }) }); var s = t.createElement("div"); return c(s, "columns", 0), l.filter(function (e) { return !!e }).forEach(function (e) { s.appendChild(e) }), s }, r.recreateColumns = function (t) { e.requestAnimationFrame(function () { r.addColumns(t, r.removeColumns(t)); var e = new CustomEvent("columnsChange"); t.dispatchEvent(e) }) }, r.mediaQueryChange = function (e) { e.matches && Array.prototype.forEach.call(i, r.recreateColumns) }, r.getCSSRules = function (e) { var t; try { t = e.sheet.cssRules || e.sheet.rules } catch (e) { return [] } return t || [] }, r.getStylesheets = function () { var e = Array.prototype.slice.call(t.querySelectorAll("style")); return e.forEach(function (t, n) { "text/css" !== t.type && "" !== t.type && e.splice(n, 1) }), Array.prototype.concat.call(e, Array.prototype.slice.call(t.querySelectorAll("link[rel='stylesheet']"))) }, r.mediaRuleHasColumnsSelector = function (e) { var t, n; try { t = e.length } catch (e) { t = 0 } for (; t--;)if ((n = e[t]).selectorText && n.selectorText.match(/\[data-columns\](.*)::?before$/)) return !0; return !1 }, r.scanMediaQueries = function () { var t = []; if (e.matchMedia) { r.getStylesheets().forEach(function (e) { Array.prototype.forEach.call(r.getCSSRules(e), function (e) { try { e.media && e.cssRules && r.mediaRuleHasColumnsSelector(e.cssRules) && t.push(e) } catch (e) { } }) }); var n = a.filter(function (e) { return -1 === t.indexOf(e) }); o.filter(function (e) { return -1 !== n.indexOf(e.rule) }).forEach(function (e) { e.mql.removeListener(r.mediaQueryChange) }), o = o.filter(function (e) { return -1 === n.indexOf(e.rule) }), t.filter(function (e) { return -1 == a.indexOf(e) }).forEach(function (t) { var n = e.matchMedia(t.media.mediaText); n.addListener(r.mediaQueryChange), o.push({ rule: t, mql: n }) }), a.length = 0, a = t } }, r.rescanMediaQueries = function () { r.scanMediaQueries(), Array.prototype.forEach.call(i, r.recreateColumns) }, r.nextElementColumnIndex = function (e, t) { var n, r, i = e.children, a = i.length, o = 0, c = 0; for (r = 0; r < a; r++)n = i[r].children.length + (t[r].children || t[r].childNodes).length, 0 === o && (o = n), n < o && (c = r, o = n); return c }, r.createFragmentsList = function (e) { for (var n = new Array(e), r = 0; r !== e;)n[r] = t.createDocumentFragment(), r++; return n }, r.appendElements = function (e, t) { var n = e.children, i = n.length, a = r.createFragmentsList(i); Array.prototype.forEach.call(t, function (t) { var n = r.nextElementColumnIndex(e, a); a[n].appendChild(t) }), Array.prototype.forEach.call(n, function (e, t) { e.appendChild(a[t]) }) }, r.prependElements = function (e, n) { var i = e.children, a = i.length, o = r.createFragmentsList(a), c = a - 1; n.forEach(function (e) { var t = o[c]; t.insertBefore(e, t.firstChild), 0 === c ? c = a - 1 : c-- }), Array.prototype.forEach.call(i, function (e, t) { e.insertBefore(o[t], e.firstChild) }); for (var l = t.createDocumentFragment(), s = n.length % a; 0 != s--;)l.appendChild(e.lastChild); e.insertBefore(l, e.firstChild) }, r.registerGrid = function (n) { if ("none" !== e.getComputedStyle(n).display) { var a = t.createRange(); a.selectNodeContents(n); var o = t.createElement("div"); o.appendChild(a.extractContents()), c(o, "columns", 0), r.addColumns(n, o), i.push(n) } }, r.init = function () { var e = t.createElement("style"); e.innerHTML = "[data-columns]::before{display:block;visibility:hidden;position:absolute;font-size:1px;}", t.head.appendChild(e); var n = t.querySelectorAll("[data-columns]"); Array.prototype.forEach.call(n, r.registerGrid), r.scanMediaQueries() }, r.init(), { appendElements: r.appendElements, prependElements: r.prependElements, registerGrid: r.registerGrid, recreateColumns: r.recreateColumns, rescanMediaQueries: r.rescanMediaQueries, init: r.init, append_elements: r.appendElements, prepend_elements: r.prependElements, register_grid: r.registerGrid, recreate_columns: r.recreateColumns, rescan_media_queries: r.rescanMediaQueries } }(window, window.document) });;
!function (t) { if ("object" == typeof exports && "undefined" != typeof module) module.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else { ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).ProgressBar = t() } }(function () { return function t(e, n, r) { function i(s, a) { if (!n[s]) { if (!e[s]) { var u = "function" == typeof require && require; if (!a && u) return u(s, !0); if (o) return o(s, !0); var h = new Error("Cannot find module '" + s + "'"); throw h.code = "MODULE_NOT_FOUND", h } var c = n[s] = { exports: {} }; e[s][0].call(c.exports, function (t) { var n = e[s][1][t]; return i(n || t) }, c, c.exports, t, e, n, r) } return n[s].exports } for (var o = "function" == typeof require && require, s = 0; s < r.length; s++)i(r[s]); return i }({ 1: [function (t, e, n) { (function () { var t = this || Function("return this")(), r = function () { "use strict"; var r, i, o, s, a, u, h = "linear", c = 1e3 / 60, p = Date.now ? Date.now : function () { return +new Date }, l = "undefined" != typeof SHIFTY_DEBUG_NOW ? SHIFTY_DEBUG_NOW : p; function f() { } function d(t, e) { var n; for (n in t) Object.hasOwnProperty.call(t, n) && e(n) } function _(t, e) { return d(e, function (n) { t[n] = e[n] }), t } function g(t, e) { d(e, function (n) { void 0 === t[n] && (t[n] = e[n]) }) } function w(t, e, n, i, o, s, a) { var u, h, c, p = t < s ? 0 : (t - s) / o; for (u in e) e.hasOwnProperty(u) && (c = "function" == typeof (h = a[u]) ? h : r[h], e[u] = y(n[u], i[u], c, p)); return e } function y(t, e, n, r) { return t + (e - t) * n(r) } function m(t, e) { var n = S.prototype.filter, r = t._filterArgs; d(n, function (i) { void 0 !== n[i][e] && n[i][e].apply(t, r) }) } function v(t, e, n, r, i, h, p, f, d, _, g) { o = e + n + r, s = Math.min(g || l(), o), a = s >= o, u = r - (o - s), t.isPlaying() && (a ? (d(p, t._attachment, u), t.stop(!0)) : (t._scheduleId = _(t._timeoutHandler, c), m(t, "beforeTween"), s < e + n ? w(1, i, h, p, 1, 1, f) : w(s, i, h, p, r, e + n, f), m(t, "afterTween"), d(i, t._attachment, u))) } function b(t, e) { var n = {}, r = typeof e; return d(t, "string" === r || "function" === r ? function (t) { n[t] = e } : function (t) { n[t] || (n[t] = e[t] || h) }), n } function S(t, e) { this._currentState = t || {}, this._configured = !1, this._scheduleFunction = i, void 0 !== e && this.setConfig(e) } return i = "undefined" != typeof window && (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || window.mozCancelRequestAnimationFrame && window.mozRequestAnimationFrame) || setTimeout, S.prototype.tween = function (t) { return this._isTweening ? this : (void 0 === t && this._configured || this.setConfig(t), this._timestamp = l(), this._start(this.get(), this._attachment), this.resume()) }, S.prototype.setConfig = function (t) { t = t || {}, this._configured = !0, this._attachment = t.attachment, this._pausedAtTime = null, this._scheduleId = null, this._delay = t.delay || 0, this._start = t.start || f, this._step = t.step || f, this._finish = t.finish || f, this._duration = t.duration || 500, this._currentState = _({}, t.from) || this.get(), this._originalState = this.get(), this._targetState = _({}, t.to) || this.get(); var e = this; this._timeoutHandler = function () { v(e, e._timestamp, e._delay, e._duration, e._currentState, e._originalState, e._targetState, e._easing, e._step, e._scheduleFunction) }; var n = this._currentState, r = this._targetState; return g(r, n), this._easing = b(n, t.easing || h), this._filterArgs = [n, this._originalState, r, this._easing], m(this, "tweenCreated"), this }, S.prototype.get = function () { return _({}, this._currentState) }, S.prototype.set = function (t) { this._currentState = t }, S.prototype.pause = function () { return this._pausedAtTime = l(), this._isPaused = !0, this }, S.prototype.resume = function () { return this._isPaused && (this._timestamp += l() - this._pausedAtTime), this._isPaused = !1, this._isTweening = !0, this._timeoutHandler(), this }, S.prototype.seek = function (t) { t = Math.max(t, 0); var e = l(); return this._timestamp + t === 0 ? this : (this._timestamp = e - t, this.isPlaying() || (this._isTweening = !0, this._isPaused = !1, v(this, this._timestamp, this._delay, this._duration, this._currentState, this._originalState, this._targetState, this._easing, this._step, this._scheduleFunction, e), this.pause()), this) }, S.prototype.stop = function (e) { return this._isTweening = !1, this._isPaused = !1, this._timeoutHandler = f, (t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.oCancelAnimationFrame || t.msCancelAnimationFrame || t.mozCancelRequestAnimationFrame || t.clearTimeout)(this._scheduleId), e && (m(this, "beforeTween"), w(1, this._currentState, this._originalState, this._targetState, 1, 0, this._easing), m(this, "afterTween"), m(this, "afterTweenEnd"), this._finish.call(this, this._currentState, this._attachment)), this }, S.prototype.isPlaying = function () { return this._isTweening && !this._isPaused }, S.prototype.setScheduleFunction = function (t) { this._scheduleFunction = t }, S.prototype.dispose = function () { var t; for (t in this) this.hasOwnProperty(t) && delete this[t] }, S.prototype.filter = {}, S.prototype.formula = { linear: function (t) { return t } }, r = S.prototype.formula, _(S, { now: l, each: d, tweenProps: w, tweenProp: y, applyFilter: m, shallowCopy: _, defaults: g, composeEasingObject: b }), "function" == typeof SHIFTY_DEBUG_NOW && (t.timeoutHandler = v), "object" == typeof n ? e.exports = S : void 0 === t.Tweenable && (t.Tweenable = S), S }(); r.shallowCopy(r.prototype.formula, { easeInQuad: function (t) { return Math.pow(t, 2) }, easeOutQuad: function (t) { return -(Math.pow(t - 1, 2) - 1) }, easeInOutQuad: function (t) { return (t /= .5) < 1 ? .5 * Math.pow(t, 2) : -.5 * ((t -= 2) * t - 2) }, easeInCubic: function (t) { return Math.pow(t, 3) }, easeOutCubic: function (t) { return Math.pow(t - 1, 3) + 1 }, easeInOutCubic: function (t) { return (t /= .5) < 1 ? .5 * Math.pow(t, 3) : .5 * (Math.pow(t - 2, 3) + 2) }, easeInQuart: function (t) { return Math.pow(t, 4) }, easeOutQuart: function (t) { return -(Math.pow(t - 1, 4) - 1) }, easeInOutQuart: function (t) { return (t /= .5) < 1 ? .5 * Math.pow(t, 4) : -.5 * ((t -= 2) * Math.pow(t, 3) - 2) }, easeInQuint: function (t) { return Math.pow(t, 5) }, easeOutQuint: function (t) { return Math.pow(t - 1, 5) + 1 }, easeInOutQuint: function (t) { return (t /= .5) < 1 ? .5 * Math.pow(t, 5) : .5 * (Math.pow(t - 2, 5) + 2) }, easeInSine: function (t) { return 1 - Math.cos(t * (Math.PI / 2)) }, easeOutSine: function (t) { return Math.sin(t * (Math.PI / 2)) }, easeInOutSine: function (t) { return -.5 * (Math.cos(Math.PI * t) - 1) }, easeInExpo: function (t) { return 0 === t ? 0 : Math.pow(2, 10 * (t - 1)) }, easeOutExpo: function (t) { return 1 === t ? 1 : 1 - Math.pow(2, -10 * t) }, easeInOutExpo: function (t) { return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (2 - Math.pow(2, -10 * --t)) }, easeInCirc: function (t) { return -(Math.sqrt(1 - t * t) - 1) }, easeOutCirc: function (t) { return Math.sqrt(1 - Math.pow(t - 1, 2)) }, easeInOutCirc: function (t) { return (t /= .5) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1) }, easeOutBounce: function (t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375 }, easeInBack: function (t) { var e = 1.70158; return t * t * ((e + 1) * t - e) }, easeOutBack: function (t) { var e = 1.70158; return (t -= 1) * t * ((e + 1) * t + e) + 1 }, easeInOutBack: function (t) { var e = 1.70158; return (t /= .5) < 1 ? t * t * ((1 + (e *= 1.525)) * t - e) * .5 : .5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2) }, elastic: function (t) { return -1 * Math.pow(4, -8 * t) * Math.sin((6 * t - 1) * (2 * Math.PI) / 2) + 1 }, swingFromTo: function (t) { var e = 1.70158; return (t /= .5) < 1 ? t * t * ((1 + (e *= 1.525)) * t - e) * .5 : .5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2) }, swingFrom: function (t) { var e = 1.70158; return t * t * ((e + 1) * t - e) }, swingTo: function (t) { var e = 1.70158; return (t -= 1) * t * ((e + 1) * t + e) + 1 }, bounce: function (t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375 }, bouncePast: function (t) { return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 2 - (7.5625 * (t -= 1.5 / 2.75) * t + .75) : t < 2.5 / 2.75 ? 2 - (7.5625 * (t -= 2.25 / 2.75) * t + .9375) : 2 - (7.5625 * (t -= 2.625 / 2.75) * t + .984375) }, easeFromTo: function (t) { return (t /= .5) < 1 ? .5 * Math.pow(t, 4) : -.5 * ((t -= 2) * Math.pow(t, 3) - 2) }, easeFrom: function (t) { return Math.pow(t, 4) }, easeTo: function (t) { return Math.pow(t, .25) } }), function () { function t(t, e, n, r, i, o) { var s = 0, a = 0, u = 0, h = 0, c = 0, p = 0; function l(t) { return ((s * t + a) * t + u) * t } function f(t) { return t >= 0 ? t : 0 - t } return s = 1 - (u = 3 * e) - (a = 3 * (r - e) - u), h = 1 - (p = 3 * n) - (c = 3 * (i - n) - p), function (t, e) { return n = function (t, e) { var n, r, i, o, h, c, p; for (i = t, c = 0; c < 8; c++) { if (f(o = l(i) - t) < e) return i; if (f(h = (3 * s * (p = i) + 2 * a) * p + u) < 1e-6) break; i -= o / h } if (r = 1, (i = t) < (n = 0)) return n; if (i > r) return r; for (; n < r;) { if (f((o = l(i)) - t) < e) return i; t > o ? n = i : r = i, i = .5 * (r - n) + n } return i }(t, e), ((h * n + c) * n + p) * n; var n }(t, function (t) { return 1 / (200 * t) }(o)) } r.setBezierFunction = function (e, n, i, o, s) { var a = function (e, n, r, i) { return function (o) { return t(o, e, n, r, i, 1) } }(n, i, o, s); return a.displayName = e, a.x1 = n, a.y1 = i, a.x2 = o, a.y2 = s, r.prototype.formula[e] = a }, r.unsetBezierFunction = function (t) { delete r.prototype.formula[t] } }(), function () { var t = new r; t._filterArgs = [], r.interpolate = function (e, n, i, o, s) { var a = r.shallowCopy({}, e), u = s || 0, h = r.composeEasingObject(e, o || "linear"); t.set({}); var c = t._filterArgs; c.length = 0, c[0] = a, c[1] = e, c[2] = n, c[3] = h, r.applyFilter(t, "tweenCreated"), r.applyFilter(t, "beforeTween"); var p = function (t, e, n, i, o, s) { return r.tweenProps(i, e, t, n, 1, s, o) }(e, a, n, i, h, u); return r.applyFilter(t, "afterTween"), p } }(), function (t) { var e = /(\d|\-|\.)/, n = /([^\-0-9\.]+)/g, r = /[0-9.\-]+/g, i = new RegExp("rgb\\(" + r.source + /,\s*/.source + r.source + /,\s*/.source + r.source + "\\)", "g"), o = /^.*\(/, s = /#([0-9]|[a-f]){3,6}/gi, a = "VAL"; function u(t, e) { var n, r = [], i = t.length; for (n = 0; n < i; n++)r.push("_" + e + "_" + n); return r } function h(e) { t.each(e, function (t) { var n = e[t]; "string" == typeof n && n.match(s) && (e[t] = f(s, n, c)) }) } function c(t) { var e = function (t) { 3 === (t = t.replace(/#/, "")).length && (t = (t = t.split(""))[0] + t[0] + t[1] + t[1] + t[2] + t[2]); return p[0] = l(t.substr(0, 2)), p[1] = l(t.substr(2, 2)), p[2] = l(t.substr(4, 2)), p }(t); return "rgb(" + e[0] + "," + e[1] + "," + e[2] + ")" } var p = []; function l(t) { return parseInt(t, 16) } function f(t, e, n) { var r = e.match(t), i = e.replace(t, a); if (r) for (var o, s = r.length, u = 0; u < s; u++)o = r.shift(), i = i.replace(a, n(o)); return i } function d(t) { for (var e = t.match(r), n = e.length, i = t.match(o)[0], s = 0; s < n; s++)i += parseInt(e[s], 10) + ","; return i = i.slice(0, -1) + ")" } function _(e, n) { t.each(n, function (t) { for (var r = y(e[t]), i = r.length, o = 0; o < i; o++)e[n[t].chunkNames[o]] = +r[o]; delete e[t] }) } function g(e, n) { t.each(n, function (t) { var r = e[t], o = function (t, e) { w.length = 0; for (var n = e.length, r = 0; r < n; r++)w.push(t[e[r]]); return w }(function (t, e) { for (var n, r = {}, i = e.length, o = 0; o < i; o++)n = e[o], r[n] = t[n], delete t[n]; return r }(e, n[t].chunkNames), n[t].chunkNames); r = function (t, e) { for (var n = t, r = e.length, i = 0; i < r; i++)n = n.replace(a, +e[i].toFixed(4)); return n }(n[t].formatString, o), e[t] = f(i, r, d) }) } var w = []; function y(t) { return t.match(r) } t.prototype.filter.token = { tweenCreated: function (r, i, o, s) { var c, p; h(r), h(i), h(o), this._tokenData = (c = r, p = {}, t.each(c, function (t) { var r, i, o = c[t]; if ("string" == typeof o) { var s = y(o); p[t] = { formatString: (r = o, i = r.match(n), i ? (1 === i.length || r[0].match(e)) && i.unshift("") : i = ["", ""], i.join(a)), chunkNames: u(s, t) } } }), p) }, beforeTween: function (e, n, r, i) { !function (e, n) { t.each(n, function (t) { var r, i = n[t].chunkNames, o = i.length, s = e[t]; if ("string" == typeof s) { var a = s.split(" "), u = a[a.length - 1]; for (r = 0; r < o; r++)e[i[r]] = a[r] || u } else for (r = 0; r < o; r++)e[i[r]] = s; delete e[t] }) }(i, this._tokenData), _(e, this._tokenData), _(n, this._tokenData), _(r, this._tokenData) }, afterTween: function (e, n, r, i) { g(e, this._tokenData), g(n, this._tokenData), g(r, this._tokenData), function (e, n) { t.each(n, function (t) { var r = n[t].chunkNames, i = r.length, o = e[r[0]]; if ("string" == typeof o) { for (var s = "", a = 0; a < i; a++)s += " " + e[r[a]], delete e[r[a]]; e[t] = s.substr(1) } else e[t] = o }) }(i, this._tokenData) } } }(r) }).call(null) }, {}], 2: [function (t, e, n) { var r = t("./shape"), i = t("./utils"), o = function (t, e) { this._pathTemplate = "M 50,50 m 0,-{radius} a {radius},{radius} 0 1 1 0,{2radius} a {radius},{radius} 0 1 1 0,-{2radius}", this.containerAspectRatio = 1, r.apply(this, arguments) }; (o.prototype = new r).constructor = o, o.prototype._pathString = function (t) { var e = t.strokeWidth; t.trailWidth && t.trailWidth > t.strokeWidth && (e = t.trailWidth); var n = 50 - e / 2; return i.render(this._pathTemplate, { radius: n, "2radius": 2 * n }) }, o.prototype._trailString = function (t) { return this._pathString(t) }, e.exports = o }, { "./shape": 7, "./utils": 8 }], 3: [function (t, e, n) { var r = t("./shape"), i = t("./utils"), o = function (t, e) { this._pathTemplate = "M 0,{center} L 100,{center}", r.apply(this, arguments) }; (o.prototype = new r).constructor = o, o.prototype._initializeSvg = function (t, e) { t.setAttribute("viewBox", "0 0 100 " + e.strokeWidth), t.setAttribute("preserveAspectRatio", "none"); var n = document.createElementNS("http://www.w3.org/2000/svg", "defs"); t.appendChild(n); var r = document.createElementNS("http://www.w3.org/2000/svg", "marker"); r.setAttribute("id", "head"), r.setAttribute("orient", "auto"), r.setAttribute("markerWidth", "5"), r.setAttribute("markerHeight", "5"), n.appendChild(r); var i = document.createElementNS("http://www.w3.org/2000/svg", "circle"); i.setAttribute("cx", "2"), i.setAttribute("cy", "2"), i.setAttribute("r", "1"), i.setAttribute("stoke", "black"), i.setAttribute("stroke-width", "1"), i.setAttribute("fill", "red"), r.appendChild(i) }, o.prototype._pathString = function (t) { return i.render(this._pathTemplate, { center: t.strokeWidth / 2 }) }, o.prototype._trailString = function (t) { return this._pathString(t) }, e.exports = o }, { "./shape": 7, "./utils": 8 }], 4: [function (t, e, n) { e.exports = { Line: t("./line"), Circle: t("./circle"), SemiCircle: t("./semicircle"), Path: t("./path"), Shape: t("./shape"), utils: t("./utils") } }, { "./circle": 2, "./line": 3, "./path": 5, "./semicircle": 6, "./shape": 7, "./utils": 8 }], 5: [function (t, e, n) { var r = t("shifty"), i = t("./utils"), o = { easeIn: "easeInCubic", easeOut: "easeOutCubic", easeInOut: "easeInOutCubic" }, s = function t(e, n) { if (!(this instanceof t)) throw new Error("Constructor was called without new keyword"); var r; n = i.extend({ duration: 800, easing: "linear", from: {}, to: {}, step: function () { } }, n), r = i.isString(e) ? document.querySelector(e) : e, this.path = r, this._opts = n, this._tweenable = null; var o = this.path.getTotalLength(); this.path.style.strokeDasharray = o + " " + o, this.set(0) }; s.prototype.value = function () { var t = this._getComputedDashOffset(), e = this.path.getTotalLength(); return parseFloat((1 - t / e).toFixed(6), 10) }, s.prototype.set = function (t) { this.stop(), this.path.style.strokeDashoffset = this._progressToOffset(t); var e = this._opts.step; if (i.isFunction(e)) { var n = this._easing(this._opts.easing); e(this._calculateTo(t, n), this._opts.shape || this, this._opts.attachment) } }, s.prototype.stop = function () { this._stopTween(), this.path.style.strokeDashoffset = this._getComputedDashOffset() }, s.prototype.animate = function (t, e, n) { e = e || {}, i.isFunction(e) && (n = e, e = {}); var o = i.extend({}, e), s = i.extend({}, this._opts); e = i.extend(s, e); var a = this._easing(e.easing), u = this._resolveFromAndTo(t, a, o); this.stop(), this.path.getBoundingClientRect(); var h = this._getComputedDashOffset(), c = this._progressToOffset(t), p = this; this._tweenable = new r, this._tweenable.tween({ from: i.extend({ offset: h }, u.from), to: i.extend({ offset: c }, u.to), duration: e.duration, easing: a, step: function (t) { p.path.style.strokeDashoffset = t.offset; var n = e.shape || p; e.step(t, n, e.attachment) }, finish: function (t) { i.isFunction(n) && n() } }) }, s.prototype._getComputedDashOffset = function () { var t = window.getComputedStyle(this.path, null); return parseFloat(t.getPropertyValue("stroke-dashoffset"), 10) }, s.prototype._progressToOffset = function (t) { var e = this.path.getTotalLength(); return e - t * e }, s.prototype._resolveFromAndTo = function (t, e, n) { return n.from && n.to ? { from: n.from, to: n.to } : { from: this._calculateFrom(e), to: this._calculateTo(t, e) } }, s.prototype._calculateFrom = function (t) { return r.interpolate(this._opts.from, this._opts.to, this.value(), t) }, s.prototype._calculateTo = function (t, e) { return r.interpolate(this._opts.from, this._opts.to, t, e) }, s.prototype._stopTween = function () { null !== this._tweenable && (this._tweenable.stop(), this._tweenable = null) }, s.prototype._easing = function (t) { return o.hasOwnProperty(t) ? o[t] : t }, e.exports = s }, { "./utils": 8, shifty: 1 }], 6: [function (t, e, n) { var r = t("./shape"), i = t("./circle"), o = t("./utils"), s = function (t, e) { this._pathTemplate = "M 50,50 m -{radius},0 a {radius},{radius} 0 1 1 {2radius},0", this.containerAspectRatio = 2, r.apply(this, arguments) }; (s.prototype = new r).constructor = s, s.prototype._initializeSvg = function (t, e) { t.setAttribute("viewBox", "0 0 100 50") }, s.prototype._initializeTextContainer = function (t, e, n) { t.text.style && (n.style.top = "auto", n.style.bottom = "0", t.text.alignToBottom ? o.setStyle(n, "transform", "translate(-50%, 0)") : o.setStyle(n, "transform", "translate(-50%, 50%)")) }, s.prototype._pathString = i.prototype._pathString, s.prototype._trailString = i.prototype._trailString, e.exports = s }, { "./circle": 2, "./shape": 7, "./utils": 8 }], 7: [function (t, e, n) { var r = t("./path"), i = t("./utils"), o = function t(e, n) { if (!(this instanceof t)) throw new Error("Constructor was called without new keyword"); if (0 !== arguments.length) { this._opts = i.extend({ color: "#555", strokeWidth: 1, trailColor: null, trailWidth: null, fill: null, text: { style: { color: null, position: "absolute", left: "50%", top: "50%", padding: 0, margin: 0, transform: { prefix: !0, value: "translate(-50%, -50%)" } }, autoStyleContainer: !0, alignToBottom: !0, value: null, className: "progressbar-text" }, svgStyle: { display: "block", width: "100%" }, warnings: !1 }, n, !0), i.isObject(n) && void 0 !== n.svgStyle && (this._opts.svgStyle = n.svgStyle), i.isObject(n) && i.isObject(n.text) && void 0 !== n.text.style && (this._opts.text.style = n.text.style); var o, s = this._createSvgView(this._opts); if (!(o = i.isString(e) ? document.querySelector(e) : e)) throw new Error("Container does not exist: " + e); this._container = o, this._container.appendChild(s.svg), this._opts.warnings && this._warnContainerAspectRatio(this._container), this._opts.svgStyle && i.setStyles(s.svg, this._opts.svgStyle), this.svg = s.svg, this.path = s.path, this.trail = s.trail, this.text = null, $(s.path).attr("marker-end", "url(#head)"); var a = i.extend({ attachment: void 0, shape: this }, this._opts); this._progressPath = new r(s.path, a), i.isObject(this._opts.text) && null !== this._opts.text.value && this.setText(this._opts.text.value) } }; o.prototype.animate = function (t, e, n) { if (null === this._progressPath) throw new Error("Object is destroyed"); this._progressPath.animate(t, e, n) }, o.prototype.stop = function () { if (null === this._progressPath) throw new Error("Object is destroyed"); void 0 !== this._progressPath && this._progressPath.stop() }, o.prototype.destroy = function () { if (null === this._progressPath) throw new Error("Object is destroyed"); this.stop(), this.svg.parentNode.removeChild(this.svg), this.svg = null, this.path = null, this.trail = null, this._progressPath = null, null !== this.text && (this.text.parentNode.removeChild(this.text), this.text = null) }, o.prototype.set = function (t) { if (null === this._progressPath) throw new Error("Object is destroyed"); this._progressPath.set(t) }, o.prototype.value = function () { if (null === this._progressPath) throw new Error("Object is destroyed"); return void 0 === this._progressPath ? 0 : this._progressPath.value() }, o.prototype.setText = function (t) { if (null === this._progressPath) throw new Error("Object is destroyed"); null === this.text && (this.text = this._createTextContainer(this._opts, this._container), this._container.appendChild(this.text)), i.isObject(t) ? (i.removeChildren(this.text), this.text.appendChild(t)) : this.text.innerHTML = t }, o.prototype._createSvgView = function (t) { var e = document.createElementNS("http://www.w3.org/2000/svg", "svg"); this._initializeSvg(e, t); var n = null; (t.trailColor || t.trailWidth) && (n = this._createTrail(t), e.appendChild(n)); var r = this._createPath(t); return e.appendChild(r), { svg: e, path: r, trail: n } }, o.prototype._initializeSvg = function (t, e) { t.setAttribute("viewBox", "0 0 100 100") }, o.prototype._createPath = function (t) { var e = this._pathString(t); return this._createPathElement(e, t) }, o.prototype._createTrail = function (t) { var e = this._trailString(t), n = i.extend({}, t); return n.trailColor || (n.trailColor = "#eee"), n.trailWidth || (n.trailWidth = n.strokeWidth), n.color = n.trailColor, n.strokeWidth = n.trailWidth, n.fill = null, this._createPathElement(e, n) }, o.prototype._createPathElement = function (t, e) { var n = document.createElementNS("http://www.w3.org/2000/svg", "path"); return n.setAttribute("d", t), n.setAttribute("stroke", e.color), n.setAttribute("stroke-width", e.strokeWidth), e.fill ? n.setAttribute("fill", e.fill) : n.setAttribute("fill-opacity", "0"), n }, o.prototype._createTextContainer = function (t, e) { var n = document.createElement("div"); n.className = t.text.className; var r = t.text.style; return r && (t.text.autoStyleContainer && (e.style.position = "relative"), i.setStyles(n, r), r.color || (n.style.color = t.color)), this._initializeTextContainer(t, e, n), n }, o.prototype._initializeTextContainer = function (t, e, n) { }, o.prototype._pathString = function (t) { throw new Error("Override this function for each progress bar") }, o.prototype._trailString = function (t) { throw new Error("Override this function for each progress bar") }, o.prototype._warnContainerAspectRatio = function (t) { if (this.containerAspectRatio) { var e = window.getComputedStyle(t, null), n = parseFloat(e.getPropertyValue("width"), 10), r = parseFloat(e.getPropertyValue("height"), 10); i.floatEquals(this.containerAspectRatio, n / r) || (console.warn("Incorrect aspect ratio of container", "#" + t.id, "detected:", e.getPropertyValue("width") + "(width)", "/", e.getPropertyValue("height") + "(height)", "=", n / r), console.warn("Aspect ratio of should be", this.containerAspectRatio)) } }, e.exports = o }, { "./path": 5, "./utils": 8 }], 8: [function (t, e, n) { var r = "Webkit Moz O ms".split(" "), i = .001; function o(t, e, n) { for (var i = t.style, o = 0; o < r.length; ++o) { i[r[o] + s(e)] = n } i[e] = n } function s(t) { return t.charAt(0).toUpperCase() + t.slice(1) } function a(t) { return !function (t) { return "[object Array]" === Object.prototype.toString.call(t) }(t) && ("object" === typeof t && !!t) } function u(t, e) { for (var n in t) { if (t.hasOwnProperty(n)) e(t[n], n) } } e.exports = { extend: function t(e, n, r) { for (var i in e = e || {}, r = r || !1, n = n || {}) if (n.hasOwnProperty(i)) { var o = e[i], s = n[i]; r && a(o) && a(s) ? e[i] = t(o, s, r) : e[i] = s } return e }, render: function (t, e) { var n = t; for (var r in e) if (e.hasOwnProperty(r)) { var i = e[r], o = new RegExp("\\{" + r + "\\}", "g"); n = n.replace(o, i) } return n }, setStyle: o, setStyles: function (t, e) { u(e, function (e, n) { null != e && (a(e) && !0 === e.prefix ? o(t, n, e.value) : t.style[n] = e) }) }, capitalize: s, isString: function (t) { return "string" == typeof t || t instanceof String }, isFunction: function (t) { return "function" == typeof t }, isObject: a, forEachObject: u, floatEquals: function (t, e) { return Math.abs(t - e) < i }, removeChildren: function (t) { for (; t.firstChild;)t.removeChild(t.firstChild) } } }, {}] }, {}, [4])(4) });;
var animationEndNames = "webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend"; function Frame1() { $("#frame-1").show(), $("#frame-1 .animated-banner__image--rails").addClass("animated rotateInDownLeft"), setTimeout(function () { $("#frame-1 .animated-banner__image--plane").addClass("animated planelanding") }, 500), setTimeout(function () { $("#frame-1 .animated-banner__text").fadeIn("slow") }, 500) } function Frame1Reverse() { $("#frame-1").addClass("animated fadeOutRight"), $("#frame-1 .animated-banner__image--rails").removeClass("animated").removeClass("rotateInDownLeft"), $("#frame-1 .animated-banner__image--plane").removeClass("animated").removeClass("planelanding"), $("#frame-1 .animated-banner__text").fadeOut(), $("#frame-1").removeClass("animated").removeClass("fadeOutRight"), $("#frame-1").hide() } function Frame2() { $("#frame-2").show(), $("#frame-2 .animated-banner__image--plane").addClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud").addClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud1").addClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud2").addClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud3").addClass("animated zoomIn"), $("#frame-2 .animated-banner__image--track").addClass("animated zoomIn"), $("#frame-2 .animated-banner__image--airport").addClass("animated bounceIn"), setTimeout(function () { $("#frame-2 .animated-banner__image--no-trains").addClass("animated bounceInDown") }, 250), $("#frame-2 .animated-banner__text").fadeIn("slow") } function Frame2Reverse() { $("#frame-2").addClass("animated fadeOutRight"), $("#frame-2 .animated-banner__image--plane").removeClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud").removeClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud1").removeClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud2").removeClass("animated zoomIn"), $("#frame-2 .animated-banner__image--cloud3").removeClass("animated zoomIn"), $("#frame-2 .animated-banner__image--track").removeClass("animated zoomIn"), $("#frame-2 .animated-banner__image--airport").removeClass("animated bounceIn"), $("#frame-2 .animated-banner__image--no-trains").removeClass("animated bounceInDown"), $("#frame-2 .animated-banner__text").fadeOut(), $("#frame-2").hide(), $("#frame-2").removeClass("animated").removeClass("fadeOutRight") } function Frame3() { $("#frame-3").show(), $("#frame-3 .animated-banner__image--clock").addClass("animated zoomIn"), $("#frame-3 .animated-banner__image--people").addClass("animated zoomIn"), $("#frame-3 .animated-banner__image--speed").addClass("animated zoomIn"), $("#frame-3 .animated-banner__image--track").addClass("animated zoomIn"), $("#frame-3 .animated-banner__image--train").addClass("animated fadeInLeftBig"), $("#frame-3 .animated-banner__image--cloud1").addClass("animated zoomIn"), $("#frame-3 .animated-banner__image--cloud2").addClass("animated zoomIn"), $("#frame-3 .animated-banner__text").fadeIn("slow") } function Frame3Reverse() { $("#frame-3").addClass("animated fadeOutRight"), $("#frame-3 .animated-banner__image--clock").removeClass("animated zoomIn"), $("#frame-3 .animated-banner__image--people").removeClass("animated zoomIn"), $("#frame-3 .animated-banner__image--speed").removeClass("animated zoomIn"), $("#frame-3 .animated-banner__image--track").removeClass("animated zoomIn"), $("#frame-3 .animated-banner__image--train").removeClass("animated fadeInLeftBig"), $("#frame-3 .animated-banner__image--cloud1").removeClass("animated zoomIn"), $("#frame-3 .animated-banner__image--cloud2").removeClass("animated zoomIn"), $("#frame-3 .animated-banner__text").fadeOut(), $("#frame-3").removeClass("animated").removeClass("fadeOutRight"), $("#frame-3").hide() } function Frame4() { $("#frame-4").show(), $("#frame-4 .animated-banner__image--mapfull").addClass("animated zoomIn"), setTimeout(function () { $("#frame-4 .animated-banner__image--pound4").addClass("animated flip") }, 500), setTimeout(function () { $("#frame-4 .animated-banner__image--pound").addClass("animated zoomInUp") }, 750), setTimeout(function () { $("#frame-4 .animated-banner__image--pound2").addClass("animated zoomInUp") }, 1e3), setTimeout(function () { $("#frame-4 .animated-banner__image--pound3").addClass("animated zoomInUp") }, 1250), $("#frame-4 .animated-banner__text").fadeIn("slow") } function Frame4Reverse() { $("#frame-4").addClass("animated fadeOutRight"), $("#frame-4 .animated-banner__image--pound4").removeClass("animated flip"), $("#frame-4 .animated-banner__image--mapfull").removeClass("animated zoomIn"), $("#frame-4 .animated-banner__image--pound").removeClass("animated zoomInUp"), $("#frame-4 .animated-banner__image--pound2").removeClass("animated zoomInUp"), $("#frame-4 .animated-banner__image--pound3").removeClass("animated zoomInUp"), $("#frame-4 .animated-banner__text").fadeOut(), $("#frame-4").removeClass("animated").removeClass("fadeOutRight"), $("#frame-4").hide() } function Frame5() { $("#frame-5").show(), $("#frame-5 .animated-banner__image--people").addClass("animated zoomIn"), $("#frame-5 .animated-banner__image--track").addClass("animated zoomIn"), setTimeout(function () { $("#frame-5 .animated-banner__image--calendar").addClass("animated flipInX") }, 500), $("#frame-5 .animated-banner__text").fadeIn("slow") } function Frame5Reverse() { $("#frame-5").addClass("animated fadeOutRight"), $("#frame-5 .animated-banner__image--people").addClass("animated zoomIn"), $("#frame-5 .animated-banner__image--calendar").addClass("animated flipInX"), $("#frame-5 .animated-banner__image--track").addClass("animated zoomIn"), $("#frame-5 .animated-banner__text").fadeOut(), $("#frame-5").removeClass("animated").removeClass("fadeOutRight"), $("#frame-5").hide() } function ReverseLastFrame(a) { 1 == a ? Frame1Reverse() : 2 == a ? Frame2Reverse() : 3 == a ? Frame3Reverse() : 4 == a ? Frame4Reverse() : 5 == a && Frame5Reverse() } $(document).ready(function () { Frame1() }); var lastClicked = null, lastRevert = null; function MoveTo(a) { lastClicked = $(a); var e = parseInt($(a).css("left")) + $(a).width() / 2 + 11, n = $(a).attr("data-step"); ReverseLastFrame(parseInt($(".animated-frame:visible").attr("data-step"))), 1 == n ? Frame1() : 2 == n ? Frame2() : 3 == n ? Frame3() : 4 == n ? Frame4() : 5 == n && Frame5(), $(".animated-banner-wrapper__progressbar__link").removeClass("active"), $(".animated-banner-wrapper__progressbar__bar__overlay").one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend", function (a) { $(lastClicked).addClass("active"), 1 == n ? $(".animated-banner-wrapper__progressbar__arrow--back").removeClass("active") : $(".animated-banner-wrapper__progressbar__arrow--back").addClass("active"), 5 == n ? $(".animated-banner-wrapper__progressbar__arrow--next").addClass("active") : $(".animated-banner-wrapper__progressbar__arrow--next").removeClass("active") }), $(".animated-banner-wrapper__progressbar__bar__overlay").css("width", e + "px") } function GetNextStep() { var a = parseInt($(".animated-frame:visible").attr("data-step")) + 1; return a > 5 && (a = 5), $(".animated-banner-wrapper__progressbar__link[data-step=" + a + "]") } function GetPrevStep() { var a = parseInt($(".animated-frame:visible").attr("data-step")) - 1; return a < 1 && (a = 1), $(".animated-banner-wrapper__progressbar__link[data-step=" + a + "]") } function AddFinishedClass(a) { $(a).addClass("animation-finished") } function RemoveFinishedClass(a) { $(a).removeClass("animation-finished") } function ResetImage(a) { $(a).attr("class", "animated-banner__image " + a.substring(1)) } function FirstAnimation(a) { $(a).addClass("animated fadeInLeftBig").one(animationEndNames, function () { AddFinishedClass(a), SecondAnimation(".animated-banner__image--train", ".animated-banner__image--speed") }) } function SecondAnimation(a, e) { $(a).addClass("animated bounceInLeft").one(animationEndNames, function () { AddFinishedClass(a) }), $(e).addClass("animated fadeInLeftBig").one(animationEndNames, function () { AddFinishedClass(e), ThirdAnimation(".animated-banner__image--people", ".animated-banner__image--clock") }) } function ThirdAnimation(a, e) { $(a).addClass("animated bounceInLeft").one(animationEndNames, function () { AddFinishedClass(a), $(e).addClass("animated zoomIn").one(animationEndNames, function () { AddFinishedClass(a), $(".animated-banner__text").fadeIn(), $(".animate-button-reverse").show() }) }) } function FirstReverseAnimation(a) { $(".animated-banner__text").fadeOut(), $(a).addClass("animated fadeOutLeftBig").one(animationEndNames, function () { ResetImage(a) }), RemoveFinishedClass(a), SecondReverseAnimation(".animated-banner__image--train", ".animated-banner__image--speed") } function SecondReverseAnimation(a, e) { $(a).addClass("animated bounceOutLeft").one(animationEndNames, function () { ResetImage(a) }), RemoveFinishedClass(a), $(e).addClass("animated fadeOutLeftBig").one(animationEndNames, function () { ResetImage(e) }), RemoveFinishedClass(e), ThirdReverseAnimation(".animated-banner__image--people", ".animated-banner__image--clock") } function ThirdReverseAnimation(a, e) { $(a).addClass("animated bounceOutLeft").one(animationEndNames, function () { ResetImage(a) }), RemoveFinishedClass(a), $(e).addClass("animated zoomOut").one(animationEndNames, function () { ResetImage(e), $(".animate-button").show() }), RemoveFinishedClass(e) } $(document).ready(function () { $(".animated-banner-wrapper__progressbar__link").on('click', function () { MoveTo($(this)) }), $(".animated-banner-wrapper__progressbar__arrow--back").on('click', function () { MoveTo(GetPrevStep()) }), $(".animated-banner-wrapper__progressbar__arrow--next").on('click', function () { MoveTo(GetNextStep()) }) }), $(document).ready(function () { }), $(document).ready(function () { $(".carousel__slide--first__text__button, .carousel__slide__text__button").on('click', function () { var a = $(this).attr("data-carosellink"); $(".carousel").slick("slickGoTo", parseInt(a)) }) });;
/*https://kenwheeler.github.io/slick/
 * v1.8.1
 * */
! function (i) {
    "use strict";
    "function" == typeof define && define.amd ? define(["jquery"], i) : "undefined" != typeof exports ? module.exports = i(require("jquery")) : i(jQuery)
}(function (i) {
    "use strict";
    var e = window.Slick || {};
    (e = function () {
        var e = 0;
        return function (t, o) {
            var s, n = this;
            n.defaults = {
                accessibility: !0,
                adaptiveHeight: !1,
                appendArrows: i(t),
                appendDots: i(t),
                arrows: !0,
                asNavFor: null,
                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
                autoplay: !1,
                autoplaySpeed: 3e3,
                centerMode: !1,
                centerPadding: "50px",
                cssEase: "ease",
                customPaging: function (e, t) {
                    return i('<button type="button" />').text(t + 1)
                },
                dots: !1,
                dotsClass: "slick-dots",
                draggable: !0,
                easing: "linear",
                edgeFriction: .35,
                fade: !1,
                focusOnSelect: !1,
                focusOnChange: !1,
                infinite: !0,
                initialSlide: 0,
                lazyLoad: "ondemand",
                mobileFirst: !1,
                pauseOnHover: !0,
                pauseOnFocus: !0,
                pauseOnDotsHover: !1,
                respondTo: "window",
                responsive: null,
                rows: 1,
                rtl: !1,
                slide: "",
                slidesPerRow: 1,
                slidesToShow: 1,
                slidesToScroll: 1,
                speed: 500,
                swipe: !0,
                swipeToSlide: !1,
                touchMove: !0,
                touchThreshold: 5,
                useCSS: !0,
                useTransform: !0,
                variableWidth: !1,
                vertical: !1,
                verticalSwiping: !1,
                waitForAnimate: !0,
                zIndex: 1e3
            }, n.initials = {
                animating: !1,
                dragging: !1,
                autoPlayTimer: null,
                currentDirection: 0,
                currentLeft: null,
                currentSlide: 0,
                direction: 1,
                $dots: null,
                listWidth: null,
                listHeight: null,
                loadIndex: 0,
                $nextArrow: null,
                $prevArrow: null,
                scrolling: !1,
                slideCount: null,
                slideWidth: null,
                $slideTrack: null,
                $slides: null,
                sliding: !1,
                slideOffset: 0,
                swipeLeft: null,
                swiping: !1,
                $list: null,
                touchObject: {},
                transformsEnabled: !1,
                unslicked: !1
            }, i.extend(n, n.initials), n.activeBreakpoint = null, n.animType = null, n.animProp = null, n.breakpoints = [], n.breakpointSettings = [], n.cssTransitions = !1, n.focussed = !1, n.interrupted = !1, n.hidden = "hidden", n.paused = !0, n.positionProp = null, n.respondTo = null, n.rowCount = 1, n.shouldClick = !0, n.$slider = i(t), n.$slidesCache = null, n.transformType = null, n.transitionType = null, n.visibilityChange = "visibilitychange", n.windowWidth = 0, n.windowTimer = null, s = i(t).data("slick") || {}, n.options = i.extend({}, n.defaults, o, s), n.currentSlide = n.options.initialSlide, n.originalSettings = n.options, void 0 !== document.mozHidden ? (n.hidden = "mozHidden", n.visibilityChange = "mozvisibilitychange") : void 0 !== document.webkitHidden && (n.hidden = "webkitHidden", n.visibilityChange = "webkitvisibilitychange"), n.autoPlay = i.proxy(n.autoPlay, n), n.autoPlayClear = i.proxy(n.autoPlayClear, n), n.autoPlayIterator = i.proxy(n.autoPlayIterator, n), n.changeSlide = i.proxy(n.changeSlide, n), n.clickHandler = i.proxy(n.clickHandler, n), n.selectHandler = i.proxy(n.selectHandler, n), n.setPosition = i.proxy(n.setPosition, n), n.swipeHandler = i.proxy(n.swipeHandler, n), n.dragHandler = i.proxy(n.dragHandler, n), n.keyHandler = i.proxy(n.keyHandler, n), n.instanceUid = e++ , n.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/, n.registerBreakpoints(), n.init(!0)
        }
    }()).prototype.activateADA = function () {
        this.$slideTrack.find(".slick-active").attr({
            "aria-hidden": "false"
        }).find("a, input, button, select").attr({
            tabindex: "0"
        })
    }, e.prototype.addSlide = e.prototype.slickAdd = function (e, t, o) {
        var s = this;
        if ("boolean" == typeof t) o = t, t = null;
        else if (t < 0 || t >= s.slideCount) return !1;
        s.unload(), "number" == typeof t ? 0 === t && 0 === s.$slides.length ? i(e).appendTo(s.$slideTrack) : o ? i(e).insertBefore(s.$slides.eq(t)) : i(e).insertAfter(s.$slides.eq(t)) : !0 === o ? i(e).prependTo(s.$slideTrack) : i(e).appendTo(s.$slideTrack), s.$slides = s.$slideTrack.children(this.options.slide), s.$slideTrack.children(this.options.slide).detach(), s.$slideTrack.append(s.$slides), s.$slides.each(function (e, t) {
            i(t).attr("data-slick-index", e)
        }), s.$slidesCache = s.$slides, s.reinit()
    }, e.prototype.animateHeight = function () {
        var i = this;
        if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) {
            var e = i.$slides.eq(i.currentSlide).outerHeight(!0);
            i.$list.animate({
                height: e
            }, i.options.speed)
        }
    }, e.prototype.animateSlide = function (e, t) {
        var o = {},
            s = this;
        s.animateHeight(), !0 === s.options.rtl && !1 === s.options.vertical && (e = -e), !1 === s.transformsEnabled ? !1 === s.options.vertical ? s.$slideTrack.animate({
            left: e
        }, s.options.speed, s.options.easing, t) : s.$slideTrack.animate({
            top: e
        }, s.options.speed, s.options.easing, t) : !1 === s.cssTransitions ? (!0 === s.options.rtl && (s.currentLeft = -s.currentLeft), i({
            animStart: s.currentLeft
        }).animate({
            animStart: e
        }, {
                duration: s.options.speed,
                easing: s.options.easing,
                step: function (i) {
                    i = Math.ceil(i), !1 === s.options.vertical ? (o[s.animType] = "translate(" + i + "px, 0px)", s.$slideTrack.css(o)) : (o[s.animType] = "translate(0px," + i + "px)", s.$slideTrack.css(o))
                },
                complete: function () {
                    t && t.call()
                }
            })) : (s.applyTransition(), e = Math.ceil(e), !1 === s.options.vertical ? o[s.animType] = "translate3d(" + e + "px, 0px, 0px)" : o[s.animType] = "translate3d(0px," + e + "px, 0px)", s.$slideTrack.css(o), t && setTimeout(function () {
                s.disableTransition(), t.call()
            }, s.options.speed))
    }, e.prototype.getNavTarget = function () {
        var e = this,
            t = e.options.asNavFor;
        return t && null !== t && (t = i(t).not(e.$slider)), t
    }, e.prototype.asNavFor = function (e) {
        var t = this.getNavTarget();
        null !== t && "object" == typeof t && t.each(function () {
            var t = i(this).slick("getSlick");
            t.unslicked || t.slideHandler(e, !0)
        })
    }, e.prototype.applyTransition = function (i) {
        var e = this,
            t = {};
        !1 === e.options.fade ? t[e.transitionType] = e.transformType + " " + e.options.speed + "ms " + e.options.cssEase : t[e.transitionType] = "opacity " + e.options.speed + "ms " + e.options.cssEase, !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t)
    }, e.prototype.autoPlay = function () {
        var i = this;
        i.autoPlayClear(), i.slideCount > i.options.slidesToShow && (i.autoPlayTimer = setInterval(i.autoPlayIterator, i.options.autoplaySpeed))
    }, e.prototype.autoPlayClear = function () {
        var i = this;
        i.autoPlayTimer && clearInterval(i.autoPlayTimer)
    }, e.prototype.autoPlayIterator = function () {
        var i = this,
            e = i.currentSlide + i.options.slidesToScroll;
        i.paused || i.interrupted || i.focussed || (!1 === i.options.infinite && (1 === i.direction && i.currentSlide + 1 === i.slideCount - 1 ? i.direction = 0 : 0 === i.direction && (e = i.currentSlide - i.options.slidesToScroll, i.currentSlide - 1 == 0 && (i.direction = 1))), i.slideHandler(e))
    }, e.prototype.buildArrows = function () {
        var e = this;
        !0 === e.options.arrows && (e.$prevArrow = i(e.options.prevArrow).addClass("slick-arrow"), e.$nextArrow = i(e.options.nextArrow).addClass("slick-arrow"), e.slideCount > e.options.slidesToShow ? (e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.prependTo(e.options.appendArrows), e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.appendTo(e.options.appendArrows), !0 !== e.options.infinite && e.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({
            "aria-disabled": "true",
            tabindex: "-1"
        }))
    }, e.prototype.buildDots = function () {
        var e, t, o = this;
        if (!0 === o.options.dots) {
            for (o.$slider.addClass("slick-dotted"), t = i("<ul />").addClass(o.options.dotsClass), e = 0; e <= o.getDotCount(); e += 1) t.append(i("<li />").append(o.options.customPaging.call(this, o, e)));
            o.$dots = t.appendTo(o.options.appendDots), o.$dots.find("li").first().addClass("slick-active")
        }
    }, e.prototype.buildOut = function () {
        var e = this;
        e.$slides = e.$slider.children(e.options.slide + ":not(.slick-cloned)").addClass("slick-slide"), e.slideCount = e.$slides.length, e.$slides.each(function (e, t) {
            i(t).attr("data-slick-index", e).data("originalStyling", i(t).attr("style") || "")
        }), e.$slider.addClass("slick-slider"), e.$slideTrack = 0 === e.slideCount ? i('<div class="slick-track"/>').appendTo(e.$slider) : e.$slides.wrapAll('<div class="slick-track"/>').parent(), e.$list = e.$slideTrack.wrap('<div class="slick-list"/>').parent(), e.$slideTrack.css("opacity", 0), !0 !== e.options.centerMode && !0 !== e.options.swipeToSlide || (e.options.slidesToScroll = 1), i("img[data-lazy]", e.$slider).not("[src]").addClass("slick-loading"), e.setupInfinite(), e.buildArrows(), e.buildDots(), e.updateDots(), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), !0 === e.options.draggable && e.$list.addClass("draggable")
    }, e.prototype.buildRows = function () {
        var i, e, t, o, s, n, r, l = this;
        if (o = document.createDocumentFragment(), n = l.$slider.children(), l.options.rows > 1) {
            for (r = l.options.slidesPerRow * l.options.rows, s = Math.ceil(n.length / r), i = 0; i < s; i++) {
                var d = document.createElement("div");
                for (e = 0; e < l.options.rows; e++) {
                    var a = document.createElement("div");
                    for (t = 0; t < l.options.slidesPerRow; t++) {
                        var c = i * r + (e * l.options.slidesPerRow + t);
                        n.get(c) && a.appendChild(n.get(c))
                    }
                    d.appendChild(a)
                }
                o.appendChild(d)
            }
            l.$slider.empty().append(o), l.$slider.children().children().children().css({
                width: 100 / l.options.slidesPerRow + "%",
                display: "inline-block"
            })
        }
    }, e.prototype.checkResponsive = function (e, t) {
        var o, s, n, r = this,
            l = !1,
            d = r.$slider.width(),
            a = window.innerWidth || i(window).width();
        if ("window" === r.respondTo ? n = a : "slider" === r.respondTo ? n = d : "min" === r.respondTo && (n = Math.min(a, d)), r.options.responsive && r.options.responsive.length && null !== r.options.responsive) {
            s = null;
            for (o in r.breakpoints) r.breakpoints.hasOwnProperty(o) && (!1 === r.originalSettings.mobileFirst ? n < r.breakpoints[o] && (s = r.breakpoints[o]) : n > r.breakpoints[o] && (s = r.breakpoints[o]));
            null !== s ? null !== r.activeBreakpoint ? (s !== r.activeBreakpoint || t) && (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : null !== r.activeBreakpoint && (r.activeBreakpoint = null, r.options = r.originalSettings, !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e), l = s), e || !1 === l || r.$slider.trigger("breakpoint", [r, l])
        }
    }, e.prototype.changeSlide = function (e, t) {
        var o, s, n, r = this,
            l = i(e.currentTarget);
        switch (l.is("a") && e.preventDefault(), l.is("li") || (l = l.closest("li")), n = r.slideCount % r.options.slidesToScroll != 0, o = n ? 0 : (r.slideCount - r.currentSlide) % r.options.slidesToScroll, e.data.message) {
            case "previous":
                s = 0 === o ? r.options.slidesToScroll : r.options.slidesToShow - o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide - s, !1, t);
                break;
            case "next":
                s = 0 === o ? r.options.slidesToScroll : o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide + s, !1, t);
                break;
            case "index":
                var d = 0 === e.data.index ? 0 : e.data.index || l.index() * r.options.slidesToScroll;
                r.slideHandler(r.checkNavigable(d), !1, t), l.children().trigger("focus");
                break;
            default:
                return
        }
    }, e.prototype.checkNavigable = function (i) {
        var e, t;
        if (e = this.getNavigableIndexes(), t = 0, i > e[e.length - 1]) i = e[e.length - 1];
        else
            for (var o in e) {
                if (i < e[o]) {
                    i = t;
                    break
                }
                t = e[o]
            }
        return i
    }, e.prototype.cleanUpEvents = function () {
        var e = this;
        e.options.dots && null !== e.$dots && (i("li", e.$dots).off("click.slick", e.changeSlide).off("mouseenter.slick", i.proxy(e.interrupt, e, !0)).off("mouseleave.slick", i.proxy(e.interrupt, e, !1)), !0 === e.options.accessibility && e.$dots.off("keydown.slick", e.keyHandler)), e.$slider.off("focus.slick blur.slick"), !0 === e.options.arrows && e.slideCount > e.options.slidesToShow && (e.$prevArrow && e.$prevArrow.off("click.slick", e.changeSlide), e.$nextArrow && e.$nextArrow.off("click.slick", e.changeSlide), !0 === e.options.accessibility && (e.$prevArrow && e.$prevArrow.off("keydown.slick", e.keyHandler), e.$nextArrow && e.$nextArrow.off("keydown.slick", e.keyHandler))), e.$list.off("touchstart.slick mousedown.slick", e.swipeHandler), e.$list.off("touchmove.slick mousemove.slick", e.swipeHandler), e.$list.off("touchend.slick mouseup.slick", e.swipeHandler), e.$list.off("touchcancel.slick mouseleave.slick", e.swipeHandler), e.$list.off("click.slick", e.clickHandler), i(document).off(e.visibilityChange, e.visibility), e.cleanUpSlideEvents(), !0 === e.options.accessibility && e.$list.off("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().off("click.slick", e.selectHandler), i(window).off("orientationchange.slick.slick-" + e.instanceUid, e.orientationChange), i(window).off("resize.slick.slick-" + e.instanceUid, e.resize), i("[draggable!=true]", e.$slideTrack).off("dragstart", e.preventDefault), i(window).off("load.slick.slick-" + e.instanceUid, e.setPosition)
    }, e.prototype.cleanUpSlideEvents = function () {
        var e = this;
        e.$list.off("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.off("mouseleave.slick", i.proxy(e.interrupt, e, !1))
    }, e.prototype.cleanUpRows = function () {
        var i, e = this;
        e.options.rows > 1 && ((i = e.$slides.children().children()).removeAttr("style"), e.$slider.empty().append(i))
    }, e.prototype.clickHandler = function (i) {
        !1 === this.shouldClick && (i.stopImmediatePropagation(), i.stopPropagation(), i.preventDefault())
    }, e.prototype.destroy = function (e) {
        var t = this;
        t.autoPlayClear(), t.touchObject = {}, t.cleanUpEvents(), i(".slick-cloned", t.$slider).detach(), t.$dots && t.$dots.remove(), t.$prevArrow && t.$prevArrow.length && (t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.prevArrow) && t.$prevArrow.remove()), t.$nextArrow && t.$nextArrow.length && (t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.nextArrow) && t.$nextArrow.remove()), t.$slides && (t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function () {
            i(this).attr("style", i(this).data("originalStyling"))
        }), t.$slideTrack.children(this.options.slide).detach(), t.$slideTrack.detach(), t.$list.detach(), t.$slider.append(t.$slides)), t.cleanUpRows(), t.$slider.removeClass("slick-slider"), t.$slider.removeClass("slick-initialized"), t.$slider.removeClass("slick-dotted"), t.unslicked = !0, e || t.$slider.trigger("destroy", [t])
    }, e.prototype.disableTransition = function (i) {
        var e = this,
            t = {};
        t[e.transitionType] = "", !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t)
    }, e.prototype.fadeSlide = function (i, e) {
        var t = this;
        !1 === t.cssTransitions ? (t.$slides.eq(i).css({
            zIndex: t.options.zIndex
        }), t.$slides.eq(i).animate({
            opacity: 1
        }, t.options.speed, t.options.easing, e)) : (t.applyTransition(i), t.$slides.eq(i).css({
            opacity: 1,
            zIndex: t.options.zIndex
        }), e && setTimeout(function () {
            t.disableTransition(i), e.call()
        }, t.options.speed))
    }, e.prototype.fadeSlideOut = function (i) {
        var e = this;
        !1 === e.cssTransitions ? e.$slides.eq(i).animate({
            opacity: 0,
            zIndex: e.options.zIndex - 2
        }, e.options.speed, e.options.easing) : (e.applyTransition(i), e.$slides.eq(i).css({
            opacity: 0,
            zIndex: e.options.zIndex - 2
        }))
    }, e.prototype.filterSlides = e.prototype.slickFilter = function (i) {
        var e = this;
        null !== i && (e.$slidesCache = e.$slides, e.unload(), e.$slideTrack.children(this.options.slide).detach(), e.$slidesCache.filter(i).appendTo(e.$slideTrack), e.reinit())
    }, e.prototype.focusHandler = function () {
        var e = this;
        e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function (t) {
            t.stopImmediatePropagation();
            var o = i(this);
            setTimeout(function () {
                e.options.pauseOnFocus && (e.focussed = o.is(":focus"), e.autoPlay())
            }, 0)
        })
    }, e.prototype.getCurrent = e.prototype.slickCurrentSlide = function () {
        return this.currentSlide
    }, e.prototype.getDotCount = function () {
        var i = this,
            e = 0,
            t = 0,
            o = 0;
        if (!0 === i.options.infinite)
            if (i.slideCount <= i.options.slidesToShow)++o;
            else
                for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow;
        else if (!0 === i.options.centerMode) o = i.slideCount;
        else if (i.options.asNavFor)
            for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow;
        else o = 1 + Math.ceil((i.slideCount - i.options.slidesToShow) / i.options.slidesToScroll);
        return o - 1
    }, e.prototype.getLeft = function (i) {
        var e, t, o, s, n = this,
            r = 0;
        return n.slideOffset = 0, t = n.$slides.first().outerHeight(!0), !0 === n.options.infinite ? (n.slideCount > n.options.slidesToShow && (n.slideOffset = n.slideWidth * n.options.slidesToShow * -1, s = -1, !0 === n.options.vertical && !0 === n.options.centerMode && (2 === n.options.slidesToShow ? s = -1.5 : 1 === n.options.slidesToShow && (s = -2)), r = t * n.options.slidesToShow * s), n.slideCount % n.options.slidesToScroll != 0 && i + n.options.slidesToScroll > n.slideCount && n.slideCount > n.options.slidesToShow && (i > n.slideCount ? (n.slideOffset = (n.options.slidesToShow - (i - n.slideCount)) * n.slideWidth * -1, r = (n.options.slidesToShow - (i - n.slideCount)) * t * -1) : (n.slideOffset = n.slideCount % n.options.slidesToScroll * n.slideWidth * -1, r = n.slideCount % n.options.slidesToScroll * t * -1))) : i + n.options.slidesToShow > n.slideCount && (n.slideOffset = (i + n.options.slidesToShow - n.slideCount) * n.slideWidth, r = (i + n.options.slidesToShow - n.slideCount) * t), n.slideCount <= n.options.slidesToShow && (n.slideOffset = 0, r = 0), !0 === n.options.centerMode && n.slideCount <= n.options.slidesToShow ? n.slideOffset = n.slideWidth * Math.floor(n.options.slidesToShow) / 2 - n.slideWidth * n.slideCount / 2 : !0 === n.options.centerMode && !0 === n.options.infinite ? n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2) - n.slideWidth : !0 === n.options.centerMode && (n.slideOffset = 0, n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2)), e = !1 === n.options.vertical ? i * n.slideWidth * -1 + n.slideOffset : i * t * -1 + r, !0 === n.options.variableWidth && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, !0 === n.options.centerMode && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow + 1), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, e += (n.$list.width() - o.outerWidth()) / 2)), e
    }, e.prototype.getOption = e.prototype.slickGetOption = function (i) {
        return this.options[i]
    }, e.prototype.getNavigableIndexes = function () {
        var i, e = this,
            t = 0,
            o = 0,
            s = [];
        for (!1 === e.options.infinite ? i = e.slideCount : (t = -1 * e.options.slidesToScroll, o = -1 * e.options.slidesToScroll, i = 2 * e.slideCount); t < i;) s.push(t), t = o + e.options.slidesToScroll, o += e.options.slidesToScroll <= e.options.slidesToShow ? e.options.slidesToScroll : e.options.slidesToShow;
        return s
    }, e.prototype.getSlick = function () {
        return this
    }, e.prototype.getSlideCount = function () {
        var e, t, o = this;
        return t = !0 === o.options.centerMode ? o.slideWidth * Math.floor(o.options.slidesToShow / 2) : 0, !0 === o.options.swipeToSlide ? (o.$slideTrack.find(".slick-slide").each(function (s, n) {
            if (n.offsetLeft - t + i(n).outerWidth() / 2 > -1 * o.swipeLeft) return e = n, !1
        }), Math.abs(i(e).attr("data-slick-index") - o.currentSlide) || 1) : o.options.slidesToScroll
    }, e.prototype.goTo = e.prototype.slickGoTo = function (i, e) {
        this.changeSlide({
            data: {
                message: "index",
                index: parseInt(i)
            }
        }, e)
    }, e.prototype.init = function (e) {
        var t = this;
        i(t.$slider).hasClass("slick-initialized") || (i(t.$slider).addClass("slick-initialized"), t.buildRows(), t.buildOut(), t.setProps(), t.startLoad(), t.loadSlider(), t.initializeEvents(), t.updateArrows(), t.updateDots(), t.checkResponsive(!0), t.focusHandler()), e && t.$slider.trigger("init", [t]), !0 === t.options.accessibility && t.initADA(), t.options.autoplay && (t.paused = !1, t.autoPlay())
    }, e.prototype.initADA = function () {
        var e = this,
            t = Math.ceil(e.slideCount / e.options.slidesToShow),
            o = e.getNavigableIndexes().filter(function (i) {
                return i >= 0 && i < e.slideCount
            });
        e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({
            "aria-hidden": "true",
            tabindex: "-1"
        }).find("a, input, button, select").attr({
            tabindex: "-1"
        }), null !== e.$dots && (e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function (t) {
            var s = o.indexOf(t);
            i(this).attr({
                role: "tabpanel",
                id: "slick-slide" + e.instanceUid + t,
                tabindex: -1
            }), -1 !== s && i(this).attr({
                "aria-describedby": "slick-slide-control" + e.instanceUid + s
            })
        }), e.$dots.attr("role", "tablist").find("li").each(function (s) {
            var n = o[s];
            i(this).attr({
                role: "presentation"
            }), i(this).find("button").first().attr({
                role: "tab",
                id: "slick-slide-control" + e.instanceUid + s,
                "aria-controls": "slick-slide" + e.instanceUid + n,
                "aria-label": s + 1 + " of " + t,
                "aria-selected": null,
                tabindex: "-1"
            })
        }).eq(e.currentSlide).find("button").attr({
            "aria-selected": "true",
            tabindex: "0"
        }).end());
        for (var s = e.currentSlide, n = s + e.options.slidesToShow; s < n; s++) e.$slides.eq(s).attr("tabindex", 0);
        e.activateADA()
    }, e.prototype.initArrowEvents = function () {
        var i = this;
        !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.off("click.slick").on("click.slick", {
            message: "previous"
        }, i.changeSlide), i.$nextArrow.off("click.slick").on("click.slick", {
            message: "next"
        }, i.changeSlide), !0 === i.options.accessibility && (i.$prevArrow.on("keydown.slick", i.keyHandler), i.$nextArrow.on("keydown.slick", i.keyHandler)))
    }, e.prototype.initDotEvents = function () {
        var e = this;
        !0 === e.options.dots && (i("li", e.$dots).on("click.slick", {
            message: "index"
        }, e.changeSlide), !0 === e.options.accessibility && e.$dots.on("keydown.slick", e.keyHandler)), !0 === e.options.dots && !0 === e.options.pauseOnDotsHover && i("li", e.$dots).on("mouseenter.slick", i.proxy(e.interrupt, e, !0)).on("mouseleave.slick", i.proxy(e.interrupt, e, !1))
    }, e.prototype.initSlideEvents = function () {
        var e = this;
        e.options.pauseOnHover && (e.$list.on("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.on("mouseleave.slick", i.proxy(e.interrupt, e, !1)))
    }, e.prototype.initializeEvents = function () {
        var e = this;
        e.initArrowEvents(), e.initDotEvents(), e.initSlideEvents(), e.$list.on("touchstart.slick mousedown.slick", {
            action: "start"
        }, e.swipeHandler), e.$list.on("touchmove.slick mousemove.slick", {
            action: "move"
        }, e.swipeHandler), e.$list.on("touchend.slick mouseup.slick", {
            action: "end"
        }, e.swipeHandler), e.$list.on("touchcancel.slick mouseleave.slick", {
            action: "end"
        }, e.swipeHandler), e.$list.on("click.slick", e.clickHandler), i(document).on(e.visibilityChange, i.proxy(e.visibility, e)), !0 === e.options.accessibility && e.$list.on("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), i(window).on("orientationchange.slick.slick-" + e.instanceUid, i.proxy(e.orientationChange, e)), i(window).on("resize.slick.slick-" + e.instanceUid, i.proxy(e.resize, e)), i("[draggable!=true]", e.$slideTrack).on("dragstart", e.preventDefault), i(window).on("load.slick.slick-" + e.instanceUid, e.setPosition), i(e.setPosition)
    }, e.prototype.initUI = function () {
        var i = this;
        !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.show(), i.$nextArrow.show()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.show()
    }, e.prototype.keyHandler = function (i) {
        var e = this;
        i.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === i.keyCode && !0 === e.options.accessibility ? e.changeSlide({
            data: {
                message: !0 === e.options.rtl ? "next" : "previous"
            }
        }) : 39 === i.keyCode && !0 === e.options.accessibility && e.changeSlide({
            data: {
                message: !0 === e.options.rtl ? "previous" : "next"
            }
        }))
    }, e.prototype.lazyLoad = function () {
        function e(e) {
            i("img[data-lazy]", e).each(function () {
                var e = i(this),
                    t = i(this).attr("data-lazy"),
                    o = i(this).attr("data-srcset"),
                    s = i(this).attr("data-sizes") || n.$slider.attr("data-sizes"),
                    r = document.createElement("img");
                r.onload = function () {
                    e.animate({
                        opacity: 0
                    }, 100, function () {
                        o && (e.attr("srcset", o), s && e.attr("sizes", s)), e.attr("src", t).animate({
                            opacity: 1
                        }, 200, function () {
                            e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")
                        }), n.$slider.trigger("lazyLoaded", [n, e, t])
                    })
                }, r.onerror = function () {
                    e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), n.$slider.trigger("lazyLoadError", [n, e, t])
                }, r.src = t
            })
        }
        var t, o, s, n = this;
        if (!0 === n.options.centerMode ? !0 === n.options.infinite ? s = (o = n.currentSlide + (n.options.slidesToShow / 2 + 1)) + n.options.slidesToShow + 2 : (o = Math.max(0, n.currentSlide - (n.options.slidesToShow / 2 + 1)), s = n.options.slidesToShow / 2 + 1 + 2 + n.currentSlide) : (o = n.options.infinite ? n.options.slidesToShow + n.currentSlide : n.currentSlide, s = Math.ceil(o + n.options.slidesToShow), !0 === n.options.fade && (o > 0 && o-- , s <= n.slideCount && s++)), t = n.$slider.find(".slick-slide").slice(o, s), "anticipated" === n.options.lazyLoad)
            for (var r = o - 1, l = s, d = n.$slider.find(".slick-slide"), a = 0; a < n.options.slidesToScroll; a++) r < 0 && (r = n.slideCount - 1), t = (t = t.add(d.eq(r))).add(d.eq(l)), r-- , l++;
        e(t), n.slideCount <= n.options.slidesToShow ? e(n.$slider.find(".slick-slide")) : n.currentSlide >= n.slideCount - n.options.slidesToShow ? e(n.$slider.find(".slick-cloned").slice(0, n.options.slidesToShow)) : 0 === n.currentSlide && e(n.$slider.find(".slick-cloned").slice(-1 * n.options.slidesToShow))
    }, e.prototype.loadSlider = function () {
        var i = this;
        i.setPosition(), i.$slideTrack.css({
            opacity: 1
        }), i.$slider.removeClass("slick-loading"), i.initUI(), "progressive" === i.options.lazyLoad && i.progressiveLazyLoad()
    }, e.prototype.next = e.prototype.slickNext = function () {
        this.changeSlide({
            data: {
                message: "next"
            }
        })
    }, e.prototype.orientationChange = function () {
        var i = this;
        i.checkResponsive(), i.setPosition()
    }, e.prototype.pause = e.prototype.slickPause = function () {
        var i = this;
        i.autoPlayClear(), i.paused = !0
    }, e.prototype.play = e.prototype.slickPlay = function () {
        var i = this;
        i.autoPlay(), i.options.autoplay = !0, i.paused = !1, i.focussed = !1, i.interrupted = !1
    }, e.prototype.postSlide = function (e) {
        var t = this;
        t.unslicked || (t.$slider.trigger("afterChange", [t, e]), t.animating = !1, t.slideCount > t.options.slidesToShow && t.setPosition(), t.swipeLeft = null, t.options.autoplay && t.autoPlay(), !0 === t.options.accessibility && (t.initADA(), t.options.focusOnChange && i(t.$slides.get(t.currentSlide)).attr("tabindex", 0).focus()))
    }, e.prototype.prev = e.prototype.slickPrev = function () {
        this.changeSlide({
            data: {
                message: "previous"
            }
        })
    }, e.prototype.preventDefault = function (i) {
        i.preventDefault()
    }, e.prototype.progressiveLazyLoad = function (e) {
        e = e || 1;
        var t, o, s, n, r, l = this,
            d = i("img[data-lazy]", l.$slider);
        d.length ? (t = d.first(), o = t.attr("data-lazy"), s = t.attr("data-srcset"), n = t.attr("data-sizes") || l.$slider.attr("data-sizes"), (r = document.createElement("img")).onload = function () {
            s && (t.attr("srcset", s), n && t.attr("sizes", n)), t.attr("src", o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"), !0 === l.options.adaptiveHeight && l.setPosition(), l.$slider.trigger("lazyLoaded", [l, t, o]), l.progressiveLazyLoad()
        }, r.onerror = function () {
            e < 3 ? setTimeout(function () {
                l.progressiveLazyLoad(e + 1)
            }, 500) : (t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), l.$slider.trigger("lazyLoadError", [l, t, o]), l.progressiveLazyLoad())
        }, r.src = o) : l.$slider.trigger("allImagesLoaded", [l])
    }, e.prototype.refresh = function (e) {
        var t, o, s = this;
        o = s.slideCount - s.options.slidesToShow, !s.options.infinite && s.currentSlide > o && (s.currentSlide = o), s.slideCount <= s.options.slidesToShow && (s.currentSlide = 0), t = s.currentSlide, s.destroy(!0), i.extend(s, s.initials, {
            currentSlide: t
        }), s.init(), e || s.changeSlide({
            data: {
                message: "index",
                index: t
            }
        }, !1)
    }, e.prototype.registerBreakpoints = function () {
        var e, t, o, s = this,
            n = s.options.responsive || null;
        if ("array" === i.type(n) && n.length) {
            s.respondTo = s.options.respondTo || "window";
            for (e in n)
                if (o = s.breakpoints.length - 1, n.hasOwnProperty(e)) {
                    for (t = n[e].breakpoint; o >= 0;) s.breakpoints[o] && s.breakpoints[o] === t && s.breakpoints.splice(o, 1), o--;
                    s.breakpoints.push(t), s.breakpointSettings[t] = n[e].settings
                }
            s.breakpoints.sort(function (i, e) {
                return s.options.mobileFirst ? i - e : e - i
            })
        }
    }, e.prototype.reinit = function () {
        var e = this;
        e.$slides = e.$slideTrack.children(e.options.slide).addClass("slick-slide"), e.slideCount = e.$slides.length, e.currentSlide >= e.slideCount && 0 !== e.currentSlide && (e.currentSlide = e.currentSlide - e.options.slidesToScroll), e.slideCount <= e.options.slidesToShow && (e.currentSlide = 0), e.registerBreakpoints(), e.setProps(), e.setupInfinite(), e.buildArrows(), e.updateArrows(), e.initArrowEvents(), e.buildDots(), e.updateDots(), e.initDotEvents(), e.cleanUpSlideEvents(), e.initSlideEvents(), e.checkResponsive(!1, !0), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), e.setPosition(), e.focusHandler(), e.paused = !e.options.autoplay, e.autoPlay(), e.$slider.trigger("reInit", [e])
    }, e.prototype.resize = function () {
        var e = this;
        i(window).width() !== e.windowWidth && (clearTimeout(e.windowDelay), e.windowDelay = window.setTimeout(function () {
            e.windowWidth = i(window).width(), e.checkResponsive(), e.unslicked || e.setPosition()
        }, 50))
    }, e.prototype.removeSlide = e.prototype.slickRemove = function (i, e, t) {
        var o = this;
        if (i = "boolean" == typeof i ? !0 === (e = i) ? 0 : o.slideCount - 1 : !0 === e ? --i : i, o.slideCount < 1 || i < 0 || i > o.slideCount - 1) return !1;
        o.unload(), !0 === t ? o.$slideTrack.children().remove() : o.$slideTrack.children(this.options.slide).eq(i).remove(), o.$slides = o.$slideTrack.children(this.options.slide), o.$slideTrack.children(this.options.slide).detach(), o.$slideTrack.append(o.$slides), o.$slidesCache = o.$slides, o.reinit()
    }, e.prototype.setCSS = function (i) {
        var e, t, o = this,
            s = {};
        !0 === o.options.rtl && (i = -i), e = "left" == o.positionProp ? Math.ceil(i) + "px" : "0px", t = "top" == o.positionProp ? Math.ceil(i) + "px" : "0px", s[o.positionProp] = i, !1 === o.transformsEnabled ? o.$slideTrack.css(s) : (s = {}, !1 === o.cssTransitions ? (s[o.animType] = "translate(" + e + ", " + t + ")", o.$slideTrack.css(s)) : (s[o.animType] = "translate3d(" + e + ", " + t + ", 0px)", o.$slideTrack.css(s)))
    }, e.prototype.setDimensions = function () {
        var i = this;
        !1 === i.options.vertical ? !0 === i.options.centerMode && i.$list.css({
            padding: "0px " + i.options.centerPadding
        }) : (i.$list.height(i.$slides.first().outerHeight(!0) * i.options.slidesToShow), !0 === i.options.centerMode && i.$list.css({
            padding: i.options.centerPadding + " 0px"
        })), i.listWidth = i.$list.width(), i.listHeight = i.$list.height(), !1 === i.options.vertical && !1 === i.options.variableWidth ? (i.slideWidth = Math.ceil(i.listWidth / i.options.slidesToShow), i.$slideTrack.width(Math.ceil(i.slideWidth * i.$slideTrack.children(".slick-slide").length))) : !0 === i.options.variableWidth ? i.$slideTrack.width(5e3 * i.slideCount) : (i.slideWidth = Math.ceil(i.listWidth), i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0) * i.$slideTrack.children(".slick-slide").length)));
        var e = i.$slides.first().outerWidth(!0) - i.$slides.first().width();
        !1 === i.options.variableWidth && i.$slideTrack.children(".slick-slide").width(i.slideWidth - e)
    }, e.prototype.setFade = function () {
        var e, t = this;
        t.$slides.each(function (o, s) {
            e = t.slideWidth * o * -1, !0 === t.options.rtl ? i(s).css({
                position: "relative",
                right: e,
                top: 0,
                zIndex: t.options.zIndex - 2,
                opacity: 0
            }) : i(s).css({
                position: "relative",
                left: e,
                top: 0,
                zIndex: t.options.zIndex - 2,
                opacity: 0
            })
        }), t.$slides.eq(t.currentSlide).css({
            zIndex: t.options.zIndex - 1,
            opacity: 1
        })
    }, e.prototype.setHeight = function () {
        var i = this;
        if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) {
            var e = i.$slides.eq(i.currentSlide).outerHeight(!0);
            i.$list.css("height", e)
        }
    }, e.prototype.setOption = e.prototype.slickSetOption = function () {
        var e, t, o, s, n, r = this,
            l = !1;
        if ("object" === i.type(arguments[0]) ? (o = arguments[0], l = arguments[1], n = "multiple") : "string" === i.type(arguments[0]) && (o = arguments[0], s = arguments[1], l = arguments[2], "responsive" === arguments[0] && "array" === i.type(arguments[1]) ? n = "responsive" : void 0 !== arguments[1] && (n = "single")), "single" === n) r.options[o] = s;
        else if ("multiple" === n) i.each(o, function (i, e) {
            r.options[i] = e
        });
        else if ("responsive" === n)
            for (t in s)
                if ("array" !== i.type(r.options.responsive)) r.options.responsive = [s[t]];
                else {
                    for (e = r.options.responsive.length - 1; e >= 0;) r.options.responsive[e].breakpoint === s[t].breakpoint && r.options.responsive.splice(e, 1), e--;
                    r.options.responsive.push(s[t])
                }
        l && (r.unload(), r.reinit())
    }, e.prototype.setPosition = function () {
        var i = this;
        i.setDimensions(), i.setHeight(), !1 === i.options.fade ? i.setCSS(i.getLeft(i.currentSlide)) : i.setFade(), i.$slider.trigger("setPosition", [i])
    }, e.prototype.setProps = function () {
        var i = this,
            e = document.body.style;
        i.positionProp = !0 === i.options.vertical ? "top" : "left", "top" === i.positionProp ? i.$slider.addClass("slick-vertical") : i.$slider.removeClass("slick-vertical"), void 0 === e.WebkitTransition && void 0 === e.MozTransition && void 0 === e.msTransition || !0 === i.options.useCSS && (i.cssTransitions = !0), i.options.fade && ("number" == typeof i.options.zIndex ? i.options.zIndex < 3 && (i.options.zIndex = 3) : i.options.zIndex = i.defaults.zIndex), void 0 !== e.OTransform && (i.animType = "OTransform", i.transformType = "-o-transform", i.transitionType = "OTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.MozTransform && (i.animType = "MozTransform", i.transformType = "-moz-transform", i.transitionType = "MozTransition", void 0 === e.perspectiveProperty && void 0 === e.MozPerspective && (i.animType = !1)), void 0 !== e.webkitTransform && (i.animType = "webkitTransform", i.transformType = "-webkit-transform", i.transitionType = "webkitTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.msTransform && (i.animType = "msTransform", i.transformType = "-ms-transform", i.transitionType = "msTransition", void 0 === e.msTransform && (i.animType = !1)), void 0 !== e.transform && !1 !== i.animType && (i.animType = "transform", i.transformType = "transform", i.transitionType = "transition"), i.transformsEnabled = i.options.useTransform && null !== i.animType && !1 !== i.animType
    }, e.prototype.setSlideClasses = function (i) {
        var e, t, o, s, n = this;
        if (t = n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"), n.$slides.eq(i).addClass("slick-current"), !0 === n.options.centerMode) {
            var r = n.options.slidesToShow % 2 == 0 ? 1 : 0;
            e = Math.floor(n.options.slidesToShow / 2), !0 === n.options.infinite && (i >= e && i <= n.slideCount - 1 - e ? n.$slides.slice(i - e + r, i + e + 1).addClass("slick-active").attr("aria-hidden", "false") : (o = n.options.slidesToShow + i, t.slice(o - e + 1 + r, o + e + 2).addClass("slick-active").attr("aria-hidden", "false")), 0 === i ? t.eq(t.length - 1 - n.options.slidesToShow).addClass("slick-center") : i === n.slideCount - 1 && t.eq(n.options.slidesToShow).addClass("slick-center")), n.$slides.eq(i).addClass("slick-center")
        } else i >= 0 && i <= n.slideCount - n.options.slidesToShow ? n.$slides.slice(i, i + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : t.length <= n.options.slidesToShow ? t.addClass("slick-active").attr("aria-hidden", "false") : (s = n.slideCount % n.options.slidesToShow, o = !0 === n.options.infinite ? n.options.slidesToShow + i : i, n.options.slidesToShow == n.options.slidesToScroll && n.slideCount - i < n.options.slidesToShow ? t.slice(o - (n.options.slidesToShow - s), o + s).addClass("slick-active").attr("aria-hidden", "false") : t.slice(o, o + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false"));
        "ondemand" !== n.options.lazyLoad && "anticipated" !== n.options.lazyLoad || n.lazyLoad()
    }, e.prototype.setupInfinite = function () {
        var e, t, o, s = this;
        if (!0 === s.options.fade && (s.options.centerMode = !1), !0 === s.options.infinite && !1 === s.options.fade && (t = null, s.slideCount > s.options.slidesToShow)) {
            for (o = !0 === s.options.centerMode ? s.options.slidesToShow + 1 : s.options.slidesToShow, e = s.slideCount; e > s.slideCount - o; e -= 1) t = e - 1, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t - s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");
            for (e = 0; e < o + s.slideCount; e += 1) t = e, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t + s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");
            s.$slideTrack.find(".slick-cloned").find("[id]").each(function () {
                i(this).attr("id", "")
            })
        }
    }, e.prototype.interrupt = function (i) {
        var e = this;
        i || e.autoPlay(), e.interrupted = i
    }, e.prototype.selectHandler = function (e) {
        var t = this,
            o = i(e.target).is(".slick-slide") ? i(e.target) : i(e.target).parents(".slick-slide"),
            s = parseInt(o.attr("data-slick-index"));
        s || (s = 0), t.slideCount <= t.options.slidesToShow ? t.slideHandler(s, !1, !0) : t.slideHandler(s)
    }, e.prototype.slideHandler = function (i, e, t) {
        var o, s, n, r, l, d = null,
            a = this;
        if (e = e || !1, !(!0 === a.animating && !0 === a.options.waitForAnimate || !0 === a.options.fade && a.currentSlide === i))
            if (!1 === e && a.asNavFor(i), o = i, d = a.getLeft(o), r = a.getLeft(a.currentSlide), a.currentLeft = null === a.swipeLeft ? r : a.swipeLeft, !1 === a.options.infinite && !1 === a.options.centerMode && (i < 0 || i > a.getDotCount() * a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () {
                a.postSlide(o)
            }) : a.postSlide(o));
            else if (!1 === a.options.infinite && !0 === a.options.centerMode && (i < 0 || i > a.slideCount - a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () {
                a.postSlide(o)
            }) : a.postSlide(o));
            else {
                if (a.options.autoplay && clearInterval(a.autoPlayTimer), s = o < 0 ? a.slideCount % a.options.slidesToScroll != 0 ? a.slideCount - a.slideCount % a.options.slidesToScroll : a.slideCount + o : o >= a.slideCount ? a.slideCount % a.options.slidesToScroll != 0 ? 0 : o - a.slideCount : o, a.animating = !0, a.$slider.trigger("beforeChange", [a, a.currentSlide, s]), n = a.currentSlide, a.currentSlide = s, a.setSlideClasses(a.currentSlide), a.options.asNavFor && (l = (l = a.getNavTarget()).slick("getSlick")).slideCount <= l.options.slidesToShow && l.setSlideClasses(a.currentSlide), a.updateDots(), a.updateArrows(), !0 === a.options.fade) return !0 !== t ? (a.fadeSlideOut(n), a.fadeSlide(s, function () {
                    a.postSlide(s)
                })) : a.postSlide(s), void a.animateHeight();
                !0 !== t ? a.animateSlide(d, function () {
                    a.postSlide(s)
                }) : a.postSlide(s)
            }
    }, e.prototype.startLoad = function () {
        var i = this;
        !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.hide(), i.$nextArrow.hide()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.hide(), i.$slider.addClass("slick-loading")
    }, e.prototype.swipeDirection = function () {
        var i, e, t, o, s = this;
        return i = s.touchObject.startX - s.touchObject.curX, e = s.touchObject.startY - s.touchObject.curY, t = Math.atan2(e, i), (o = Math.round(180 * t / Math.PI)) < 0 && (o = 360 - Math.abs(o)), o <= 45 && o >= 0 ? !1 === s.options.rtl ? "left" : "right" : o <= 360 && o >= 315 ? !1 === s.options.rtl ? "left" : "right" : o >= 135 && o <= 225 ? !1 === s.options.rtl ? "right" : "left" : !0 === s.options.verticalSwiping ? o >= 35 && o <= 135 ? "down" : "up" : "vertical"
    }, e.prototype.swipeEnd = function (i) {
        var e, t, o = this;
        if (o.dragging = !1, o.swiping = !1, o.scrolling) return o.scrolling = !1, !1;
        if (o.interrupted = !1, o.shouldClick = !(o.touchObject.swipeLength > 10), void 0 === o.touchObject.curX) return !1;
        if (!0 === o.touchObject.edgeHit && o.$slider.trigger("edge", [o, o.swipeDirection()]), o.touchObject.swipeLength >= o.touchObject.minSwipe) {
            switch (t = o.swipeDirection()) {
                case "left":
                case "down":
                    e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide + o.getSlideCount()) : o.currentSlide + o.getSlideCount(), o.currentDirection = 0;
                    break;
                case "right":
                case "up":
                    e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide - o.getSlideCount()) : o.currentSlide - o.getSlideCount(), o.currentDirection = 1
            }
            "vertical" != t && (o.slideHandler(e), o.touchObject = {}, o.$slider.trigger("swipe", [o, t]))
        } else o.touchObject.startX !== o.touchObject.curX && (o.slideHandler(o.currentSlide), o.touchObject = {})
    }, e.prototype.swipeHandler = function (i) {
        var e = this;
        if (!(!1 === e.options.swipe || "ontouchend" in document && !1 === e.options.swipe || !1 === e.options.draggable && -1 !== i.type.indexOf("mouse"))) switch (e.touchObject.fingerCount = i.originalEvent && void 0 !== i.originalEvent.touches ? i.originalEvent.touches.length : 1, e.touchObject.minSwipe = e.listWidth / e.options.touchThreshold, !0 === e.options.verticalSwiping && (e.touchObject.minSwipe = e.listHeight / e.options.touchThreshold), i.data.action) {
            case "start":
                e.swipeStart(i);
                break;
            case "move":
                e.swipeMove(i);
                break;
            case "end":
                e.swipeEnd(i)
        }
    }, e.prototype.swipeMove = function (i) {
        var e, t, o, s, n, r, l = this;
        return n = void 0 !== i.originalEvent ? i.originalEvent.touches : null, !(!l.dragging || l.scrolling || n && 1 !== n.length) && (e = l.getLeft(l.currentSlide), l.touchObject.curX = void 0 !== n ? n[0].pageX : i.clientX, l.touchObject.curY = void 0 !== n ? n[0].pageY : i.clientY, l.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(l.touchObject.curX - l.touchObject.startX, 2))), r = Math.round(Math.sqrt(Math.pow(l.touchObject.curY - l.touchObject.startY, 2))), !l.options.verticalSwiping && !l.swiping && r > 4 ? (l.scrolling = !0, !1) : (!0 === l.options.verticalSwiping && (l.touchObject.swipeLength = r), t = l.swipeDirection(), void 0 !== i.originalEvent && l.touchObject.swipeLength > 4 && (l.swiping = !0, i.preventDefault()), s = (!1 === l.options.rtl ? 1 : -1) * (l.touchObject.curX > l.touchObject.startX ? 1 : -1), !0 === l.options.verticalSwiping && (s = l.touchObject.curY > l.touchObject.startY ? 1 : -1), o = l.touchObject.swipeLength, l.touchObject.edgeHit = !1, !1 === l.options.infinite && (0 === l.currentSlide && "right" === t || l.currentSlide >= l.getDotCount() && "left" === t) && (o = l.touchObject.swipeLength * l.options.edgeFriction, l.touchObject.edgeHit = !0), !1 === l.options.vertical ? l.swipeLeft = e + o * s : l.swipeLeft = e + o * (l.$list.height() / l.listWidth) * s, !0 === l.options.verticalSwiping && (l.swipeLeft = e + o * s), !0 !== l.options.fade && !1 !== l.options.touchMove && (!0 === l.animating ? (l.swipeLeft = null, !1) : void l.setCSS(l.swipeLeft))))
    }, e.prototype.swipeStart = function (i) {
        var e, t = this;
        if (t.interrupted = !0, 1 !== t.touchObject.fingerCount || t.slideCount <= t.options.slidesToShow) return t.touchObject = {}, !1;
        void 0 !== i.originalEvent && void 0 !== i.originalEvent.touches && (e = i.originalEvent.touches[0]), t.touchObject.startX = t.touchObject.curX = void 0 !== e ? e.pageX : i.clientX, t.touchObject.startY = t.touchObject.curY = void 0 !== e ? e.pageY : i.clientY, t.dragging = !0
    }, e.prototype.unfilterSlides = e.prototype.slickUnfilter = function () {
        var i = this;
        null !== i.$slidesCache && (i.unload(), i.$slideTrack.children(this.options.slide).detach(), i.$slidesCache.appendTo(i.$slideTrack), i.reinit())
    }, e.prototype.unload = function () {
        var e = this;
        i(".slick-cloned", e.$slider).remove(), e.$dots && e.$dots.remove(), e.$prevArrow && e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.remove(), e.$nextArrow && e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.remove(), e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "")
    }, e.prototype.unslick = function (i) {
        var e = this;
        e.$slider.trigger("unslick", [e, i]), e.destroy()
    }, e.prototype.updateArrows = function () {
        var i = this;
        Math.floor(i.options.slidesToShow / 2), !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && !i.options.infinite && (i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), 0 === i.currentSlide ? (i.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - i.options.slidesToShow && !1 === i.options.centerMode ? (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - 1 && !0 === i.options.centerMode && (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")))
    }, e.prototype.updateDots = function () {
        var i = this;
        null !== i.$dots && (i.$dots.find("li").removeClass("slick-active").end(), i.$dots.find("li").eq(Math.floor(i.currentSlide / i.options.slidesToScroll)).addClass("slick-active"))
    }, e.prototype.visibility = function () {
        var i = this;
        i.options.autoplay && (document[i.hidden] ? i.interrupted = !0 : i.interrupted = !1)
    }, i.fn.slick = function () {
        var i, t, o = this,
            s = arguments[0],
            n = Array.prototype.slice.call(arguments, 1),
            r = o.length;
        for (i = 0; i < r; i++)
            if ("object" == typeof s || void 0 === s ? o[i].slick = new e(o[i], s) : t = o[i].slick[s].apply(o[i].slick, n), void 0 !== t) return t;
        return o
    }
});;
/*! picturefill - v3.0.2 - 2016-02-12
 * https://scottjehl.github.io/picturefill/
 * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT
 */
!function(a){var b=navigator.userAgent;a.HTMLPictureElement&&/ecko/.test(b)&&b.match(/rv\:(\d+)/)&&RegExp.$1<45&&addEventListener("resize",function(){var b,c=document.createElement("source"),d=function(a){var b,d,e=a.parentNode;"PICTURE"===e.nodeName.toUpperCase()?(b=c.cloneNode(),e.insertBefore(b,e.firstElementChild),setTimeout(function(){e.removeChild(b)})):(!a._pfLastSize||a.offsetWidth>a._pfLastSize)&&(a._pfLastSize=a.offsetWidth,d=a.sizes,a.sizes+=",100vw",setTimeout(function(){a.sizes=d}))},e=function(){var a,b=document.querySelectorAll("picture > img, img[srcset][sizes]");for(a=0;a<b.length;a++)d(b[a])},f=function(){clearTimeout(b),b=setTimeout(e,99)},g=a.matchMedia&&matchMedia("(orientation: landscape)"),h=function(){f(),g&&g.addListener&&g.addListener(f)};return c.srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",/^[c|i]|d$/.test(document.readyState||"")?h():document.addEventListener("DOMContentLoaded",h),f}())}(window),function(a,b,c){"use strict";function d(a){return" "===a||"	"===a||"\n"===a||"\f"===a||"\r"===a}function e(b,c){var d=new a.Image;return d.onerror=function(){A[b]=!1,ba()},d.onload=function(){A[b]=1===d.width,ba()},d.src=c,"pending"}function f(){M=!1,P=a.devicePixelRatio,N={},O={},s.DPR=P||1,Q.width=Math.max(a.innerWidth||0,z.clientWidth),Q.height=Math.max(a.innerHeight||0,z.clientHeight),Q.vw=Q.width/100,Q.vh=Q.height/100,r=[Q.height,Q.width,P].join("-"),Q.em=s.getEmValue(),Q.rem=Q.em}function g(a,b,c,d){var e,f,g,h;return"saveData"===B.algorithm?a>2.7?h=c+1:(f=b-c,e=Math.pow(a-.6,1.5),g=f*e,d&&(g+=.1*e),h=a+g):h=c>1?Math.sqrt(a*b):a,h>c}function h(a){var b,c=s.getSet(a),d=!1;"pending"!==c&&(d=r,c&&(b=s.setRes(c),s.applySetCandidate(b,a))),a[s.ns].evaled=d}function i(a,b){return a.res-b.res}function j(a,b,c){var d;return!c&&b&&(c=a[s.ns].sets,c=c&&c[c.length-1]),d=k(b,c),d&&(b=s.makeUrl(b),a[s.ns].curSrc=b,a[s.ns].curCan=d,d.res||aa(d,d.set.sizes)),d}function k(a,b){var c,d,e;if(a&&b)for(e=s.parseSet(b),a=s.makeUrl(a),c=0;c<e.length;c++)if(a===s.makeUrl(e[c].url)){d=e[c];break}return d}function l(a,b){var c,d,e,f,g=a.getElementsByTagName("source");for(c=0,d=g.length;d>c;c++)e=g[c],e[s.ns]=!0,f=e.getAttribute("srcset"),f&&b.push({srcset:f,media:e.getAttribute("media"),type:e.getAttribute("type"),sizes:e.getAttribute("sizes")})}function m(a,b){function c(b){var c,d=b.exec(a.substring(m));return d?(c=d[0],m+=c.length,c):void 0}function e(){var a,c,d,e,f,i,j,k,l,m=!1,o={};for(e=0;e<h.length;e++)f=h[e],i=f[f.length-1],j=f.substring(0,f.length-1),k=parseInt(j,10),l=parseFloat(j),X.test(j)&&"w"===i?((a||c)&&(m=!0),0===k?m=!0:a=k):Y.test(j)&&"x"===i?((a||c||d)&&(m=!0),0>l?m=!0:c=l):X.test(j)&&"h"===i?((d||c)&&(m=!0),0===k?m=!0:d=k):m=!0;m||(o.url=g,a&&(o.w=a),c&&(o.d=c),d&&(o.h=d),d||c||a||(o.d=1),1===o.d&&(b.has1x=!0),o.set=b,n.push(o))}function f(){for(c(T),i="",j="in descriptor";;){if(k=a.charAt(m),"in descriptor"===j)if(d(k))i&&(h.push(i),i="",j="after descriptor");else{if(","===k)return m+=1,i&&h.push(i),void e();if("("===k)i+=k,j="in parens";else{if(""===k)return i&&h.push(i),void e();i+=k}}else if("in parens"===j)if(")"===k)i+=k,j="in descriptor";else{if(""===k)return h.push(i),void e();i+=k}else if("after descriptor"===j)if(d(k));else{if(""===k)return void e();j="in descriptor",m-=1}m+=1}}for(var g,h,i,j,k,l=a.length,m=0,n=[];;){if(c(U),m>=l)return n;g=c(V),h=[],","===g.slice(-1)?(g=g.replace(W,""),e()):f()}}function n(a){function b(a){function b(){f&&(g.push(f),f="")}function c(){g[0]&&(h.push(g),g=[])}for(var e,f="",g=[],h=[],i=0,j=0,k=!1;;){if(e=a.charAt(j),""===e)return b(),c(),h;if(k){if("*"===e&&"/"===a[j+1]){k=!1,j+=2,b();continue}j+=1}else{if(d(e)){if(a.charAt(j-1)&&d(a.charAt(j-1))||!f){j+=1;continue}if(0===i){b(),j+=1;continue}e=" "}else if("("===e)i+=1;else if(")"===e)i-=1;else{if(","===e){b(),c(),j+=1;continue}if("/"===e&&"*"===a.charAt(j+1)){k=!0,j+=2;continue}}f+=e,j+=1}}}function c(a){return k.test(a)&&parseFloat(a)>=0?!0:l.test(a)?!0:"0"===a||"-0"===a||"+0"===a?!0:!1}var e,f,g,h,i,j,k=/^(?:[+-]?[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i,l=/^calc\((?:[0-9a-z \.\+\-\*\/\(\)]+)\)$/i;for(f=b(a),g=f.length,e=0;g>e;e++)if(h=f[e],i=h[h.length-1],c(i)){if(j=i,h.pop(),0===h.length)return j;if(h=h.join(" "),s.matchesMedia(h))return j}return"100vw"}b.createElement("picture");var o,p,q,r,s={},t=!1,u=function(){},v=b.createElement("img"),w=v.getAttribute,x=v.setAttribute,y=v.removeAttribute,z=b.documentElement,A={},B={algorithm:""},C="data-pfsrc",D=C+"set",E=navigator.userAgent,F=/rident/.test(E)||/ecko/.test(E)&&E.match(/rv\:(\d+)/)&&RegExp.$1>35,G="currentSrc",H=/\s+\+?\d+(e\d+)?w/,I=/(\([^)]+\))?\s*(.+)/,J=a.picturefillCFG,K="position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)",L="font-size:100%!important;",M=!0,N={},O={},P=a.devicePixelRatio,Q={px:1,"in":96},R=b.createElement("a"),S=!1,T=/^[ \t\n\r\u000c]+/,U=/^[, \t\n\r\u000c]+/,V=/^[^ \t\n\r\u000c]+/,W=/[,]+$/,X=/^\d+$/,Y=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,Z=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)},$=function(a){var b={};return function(c){return c in b||(b[c]=a(c)),b[c]}},_=function(){var a=/^([\d\.]+)(em|vw|px)$/,b=function(){for(var a=arguments,b=0,c=a[0];++b in a;)c=c.replace(a[b],a[++b]);return c},c=$(function(a){return"return "+b((a||"").toLowerCase(),/\band\b/g,"&&",/,/g,"||",/min-([a-z-\s]+):/g,"e.$1>=",/max-([a-z-\s]+):/g,"e.$1<=",/calc([^)]+)/g,"($1)",/(\d+[\.]*[\d]*)([a-z]+)/g,"($1 * e.$2)",/^(?!(e.[a-z]|[0-9\.&=|><\+\-\*\(\)\/])).*/gi,"")+";"});return function(b,d){var e;if(!(b in N))if(N[b]=!1,d&&(e=b.match(a)))N[b]=e[1]*Q[e[2]];else try{N[b]=new Function("e",c(b))(Q)}catch(f){}return N[b]}}(),aa=function(a,b){return a.w?(a.cWidth=s.calcListLength(b||"100vw"),a.res=a.w/a.cWidth):a.res=a.d,a},ba=function(a){if(t){var c,d,e,f=a||{};if(f.elements&&1===f.elements.nodeType&&("IMG"===f.elements.nodeName.toUpperCase()?f.elements=[f.elements]:(f.context=f.elements,f.elements=null)),c=f.elements||s.qsa(f.context||b,f.reevaluate||f.reselect?s.sel:s.selShort),e=c.length){for(s.setupRun(f),S=!0,d=0;e>d;d++)s.fillImg(c[d],f);s.teardownRun(f)}}};o=a.console&&console.warn?function(a){console.warn(a)}:u,G in v||(G="src"),A["image/jpeg"]=!0,A["image/gif"]=!0,A["image/png"]=!0,A["image/svg+xml"]=b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),s.ns=("pf"+(new Date).getTime()).substr(0,9),s.supSrcset="srcset"in v,s.supSizes="sizes"in v,s.supPicture=!!a.HTMLPictureElement,s.supSrcset&&s.supPicture&&!s.supSizes&&!function(a){v.srcset="data:,a",a.src="data:,a",s.supSrcset=v.complete===a.complete,s.supPicture=s.supSrcset&&s.supPicture}(b.createElement("img")),s.supSrcset&&!s.supSizes?!function(){var a="data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==",c="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",d=b.createElement("img"),e=function(){var a=d.width;2===a&&(s.supSizes=!0),q=s.supSrcset&&!s.supSizes,t=!0,setTimeout(ba)};d.onload=e,d.onerror=e,d.setAttribute("sizes","9px"),d.srcset=c+" 1w,"+a+" 9w",d.src=c}():t=!0,s.selShort="picture>img,img[srcset]",s.sel=s.selShort,s.cfg=B,s.DPR=P||1,s.u=Q,s.types=A,s.setSize=u,s.makeUrl=$(function(a){return R.href=a,R.href}),s.qsa=function(a,b){return"querySelector"in a?a.querySelectorAll(b):[]},s.matchesMedia=function(){return a.matchMedia&&(matchMedia("(min-width: 0.1em)")||{}).matches?s.matchesMedia=function(a){return!a||matchMedia(a).matches}:s.matchesMedia=s.mMQ,s.matchesMedia.apply(this,arguments)},s.mMQ=function(a){return a?_(a):!0},s.calcLength=function(a){var b=_(a,!0)||!1;return 0>b&&(b=!1),b},s.supportsType=function(a){return a?A[a]:!0},s.parseSize=$(function(a){var b=(a||"").match(I);return{media:b&&b[1],length:b&&b[2]}}),s.parseSet=function(a){return a.cands||(a.cands=m(a.srcset,a)),a.cands},s.getEmValue=function(){var a;if(!p&&(a=b.body)){var c=b.createElement("div"),d=z.style.cssText,e=a.style.cssText;c.style.cssText=K,z.style.cssText=L,a.style.cssText=L,a.appendChild(c),p=c.offsetWidth,a.removeChild(c),p=parseFloat(p,10),z.style.cssText=d,a.style.cssText=e}return p||16},s.calcListLength=function(a){if(!(a in O)||B.uT){var b=s.calcLength(n(a));O[a]=b?b:Q.width}return O[a]},s.setRes=function(a){var b;if(a){b=s.parseSet(a);for(var c=0,d=b.length;d>c;c++)aa(b[c],a.sizes)}return b},s.setRes.res=aa,s.applySetCandidate=function(a,b){if(a.length){var c,d,e,f,h,k,l,m,n,o=b[s.ns],p=s.DPR;if(k=o.curSrc||b[G],l=o.curCan||j(b,k,a[0].set),l&&l.set===a[0].set&&(n=F&&!b.complete&&l.res-.1>p,n||(l.cached=!0,l.res>=p&&(h=l))),!h)for(a.sort(i),f=a.length,h=a[f-1],d=0;f>d;d++)if(c=a[d],c.res>=p){e=d-1,h=a[e]&&(n||k!==s.makeUrl(c.url))&&g(a[e].res,c.res,p,a[e].cached)?a[e]:c;break}h&&(m=s.makeUrl(h.url),o.curSrc=m,o.curCan=h,m!==k&&s.setSrc(b,h),s.setSize(b))}},s.setSrc=function(a,b){var c;a.src=b.url,"image/svg+xml"===b.set.type&&(c=a.style.width,a.style.width=a.offsetWidth+1+"px",a.offsetWidth+1&&(a.style.width=c))},s.getSet=function(a){var b,c,d,e=!1,f=a[s.ns].sets;for(b=0;b<f.length&&!e;b++)if(c=f[b],c.srcset&&s.matchesMedia(c.media)&&(d=s.supportsType(c.type))){"pending"===d&&(c=d),e=c;break}return e},s.parseSets=function(a,b,d){var e,f,g,h,i=b&&"PICTURE"===b.nodeName.toUpperCase(),j=a[s.ns];(j.src===c||d.src)&&(j.src=w.call(a,"src"),j.src?x.call(a,C,j.src):y.call(a,C)),(j.srcset===c||d.srcset||!s.supSrcset||a.srcset)&&(e=w.call(a,"srcset"),j.srcset=e,h=!0),j.sets=[],i&&(j.pic=!0,l(b,j.sets)),j.srcset?(f={srcset:j.srcset,sizes:w.call(a,"sizes")},j.sets.push(f),g=(q||j.src)&&H.test(j.srcset||""),g||!j.src||k(j.src,f)||f.has1x||(f.srcset+=", "+j.src,f.cands.push({url:j.src,d:1,set:f}))):j.src&&j.sets.push({srcset:j.src,sizes:null}),j.curCan=null,j.curSrc=c,j.supported=!(i||f&&!s.supSrcset||g&&!s.supSizes),h&&s.supSrcset&&!j.supported&&(e?(x.call(a,D,e),a.srcset=""):y.call(a,D)),j.supported&&!j.srcset&&(!j.src&&a.src||a.src!==s.makeUrl(j.src))&&(null===j.src?a.removeAttribute("src"):a.src=j.src),j.parsed=!0},s.fillImg=function(a,b){var c,d=b.reselect||b.reevaluate;a[s.ns]||(a[s.ns]={}),c=a[s.ns],(d||c.evaled!==r)&&((!c.parsed||b.reevaluate)&&s.parseSets(a,a.parentNode,b),c.supported?c.evaled=r:h(a))},s.setupRun=function(){(!S||M||P!==a.devicePixelRatio)&&f()},s.supPicture?(ba=u,s.fillImg=u):!function(){var c,d=a.attachEvent?/d$|^c/:/d$|^c|^i/,e=function(){var a=b.readyState||"";f=setTimeout(e,"loading"===a?200:999),b.body&&(s.fillImgs(),c=c||d.test(a),c&&clearTimeout(f))},f=setTimeout(e,b.body?9:99),g=function(a,b){var c,d,e=function(){var f=new Date-d;b>f?c=setTimeout(e,b-f):(c=null,a())};return function(){d=new Date,c||(c=setTimeout(e,b))}},h=z.clientHeight,i=function(){M=Math.max(a.innerWidth||0,z.clientWidth)!==Q.width||z.clientHeight!==h,h=z.clientHeight,M&&s.fillImgs()};Z(a,"resize",g(i,99)),Z(b,"readystatechange",e)}(),s.picturefill=ba,s.fillImgs=ba,s.teardownRun=u,ba._=s,a.picturefillCFG={pf:s,push:function(a){var b=a.shift();"function"==typeof s[b]?s[b].apply(s,a):(B[b]=a[0],S&&s.fillImgs({reselect:!0}))}};for(;J&&J.length;)a.picturefillCFG.push(J.shift());a.picturefill=ba,"object"==typeof module&&"object"==typeof module.exports?module.exports=ba:"function"==typeof define&&define.amd&&define("picturefill",function(){return ba}),s.supPicture||(A["image/webp"]=e("image/webp","data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA=="))}(window,document);;
var vbopParentEl = document.querySelectorAll('.luton-airport-parking-map-container'); if (vbopParentEl.length > 0) { vbopParentEl[0].insertAdjacentHTML("beforeend", " <div class=\"lapm-container\"> <div class=\"lapm-intro-text\"> <h1 class=\"lapm-intro-text-heading\">Parking Map</h1> <p class=\"lapm-intro-text-description\">Explore your car parking options by <span>selecting</span> one of our <span>car park icons</span> in the interactive map below. Please note that all car parks have disabled parking spaces.</p></div> </div> <div class=\"lapm-map-background\"> <div class=\"lapm-map-filters-container\"> <div class=\"lapm-map-filters-bar\"> <div class=\"lapm-map-filters-bar-icon\"> <span class=\"svg-map-filter-bar-distance\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34.295\" height=\"58.084\" viewBox=\"0 0 34.295 58.084\"><title>Map Distance Filter</title><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0)\"><path class=\"a\" d=\"M2521.926,248.638h-.572a5.063,5.063,0,0,1-4.929-5.176v-2.524a5.063,5.063,0,0,1,4.929-5.176h.572a5.062,5.062,0,0,1,4.929,5.176v2.524A5.062,5.062,0,0,1,2521.926,248.638Zm1.046-7.7a1.206,1.206,0,0,0-1.046-1.294h-.572a1.205,1.205,0,0,0-1.045,1.294v2.524a1.205,1.205,0,0,0,1.045,1.293h.572a1.206,1.206,0,0,0,1.046-1.293Z\" transform=\"translate(-2493.068 -235.762)\"/><path class=\"a\" d=\"M2515.527,303.372l6.854-13.483a3.672,3.672,0,0,1,4.976-1.612l5.369,2.812,3.422-16.677a4.9,4.9,0,0,1,4.792-4.033h5.9a2.021,2.021,0,0,1,1.44.606,2.08,2.08,0,0,1,.6,1.463l-.023,20.415a2.048,2.048,0,0,1-1.933,2.054l1.189,2.3a8.75,8.75,0,0,1,1.3,4.621v11.116a2.036,2.036,0,1,1-4.071,0V301.84a4.516,4.516,0,0,0-.688-2.439q-.055-.087-.1-.178l-2.093-4.052-1.091,4.283a16.181,16.181,0,0,1-3,6.1l-4.344,5.408a2.017,2.017,0,0,1-2.865.3,2.087,2.087,0,0,1-.292-2.907l4.344-5.408a12,12,0,0,0,2.211-4.524l.89-3.493h-2.941a3.759,3.759,0,0,1-.4,1.552l-6.854,13.483a3.682,3.682,0,0,1-1.76,1.694,1.655,1.655,0,0,1-.973,2.911,1.639,1.639,0,0,1-1.705-1.574,1.657,1.657,0,0,1,.349-1.094,3.678,3.678,0,0,1-.887-.325h0l-6.021-3.153a3.7,3.7,0,0,1-1.824-2.191A3.766,3.766,0,0,1,2515.527,303.372Zm29.257-12.578.018-16.282h-3.861a.824.824,0,0,0-.8.7l-3.2,15.578ZM2525,307.9h0Zm-.337-.177,6.508-12.8-5.348-2.8-6.507,12.8Z\" transform=\"translate(-2515.114 -256.938)\"/></g></svg></span> </div><div class=\"lapm-map-filters-bar-icon\"> <span class=\"svg-map-filter-bar-category\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"33\" height=\"30\" viewBox=\"0 0 33 30\"><title>Map Category Filter</title><defs><style>.a{fill:none;stroke:#6d6e6f;stroke-linecap:round;stroke-linejoin:round;stroke-width:3px;}</style></defs><path class=\"a\" d=\"M33,4.5H3L15,18.69V28.5l6,3V18.69Z\" transform=\"translate(-1.5 -3)\"/></svg></span> </div></div><div class=\"lapm-map-screen\" data-filter=\"distance\"> <h4 class=\"lapm-map-screen-heading\">Time to terminal <span>(minutes)*</span></h4> <p class=\"lapm-map-screen-description\">Change the time to terminal filter to find the quickest route to the terminal via bus or walking.</p> <div class=\"lapm-map-distance-filter-container\"> <div class=\"lapm-map-distance-filter-inner\"> <input type=\"range\" min=\"3\" max=\"10\" value=\"10\" step=\"1\" class=\"lapm-map-distance-filter\"/> </div><div class=\"lapm-map-distance-filter-value\"><span></span> minute(s)</div> </div> <div class=\"lapm-map-screen-disclaimer\">*Quickest Route</div> <div class=\"lapm-map-screen-error\">No car parks are within the filters that you specified. Please increase the number of minutes of travelling time to show relevant car parks.</div> <div style=\"display:inline-block\"> <p style=\"display:inline-block\" class=\"lapm-map-screen-clear lapm-btn\">Clear Filters</p> </div> <div> <button class=\"lapm-map-screen-done lapm-btn\" type=\"button\">Done</button> </div></div><div class=\"lapm-map-screen\" data-filter=\"category\"> <h4 class=\"lapm-map-screen-heading\">Filters</h4> <p class=\"lapm-map-screen-description\">Please select one or more of the filters below and then click ‘done’ to see the updated map.</p> <div class=\"lapm-map-category-filter-facilities-container\"> <div class=\"lapm-map-category-filter-facilities\"> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"closest-to-terminal\" type=\"button\">Closest to Terminal</button> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"meet-and-greet\" type=\"button\">Meet &amp; Greet</button> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"motorbike\" type=\"button\">Motorbike Parking</button> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"ev-chargers\" type=\"button\">EV Chargers</button> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"bus-transfer\" type=\"button\">Bus Transfer</button> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"disabled-parking\" type=\"button\">Disabled Parking</button> <button class=\"lapm-map-category-filter-facility lapm-btn\" data-category=\"height-restriction\" type=\"button\">Height Restrictions: 2.1m</button> </div> </div> <div class=\"lapm-map-screen-error\">No car parks are within the filters that you specified. Please decrease the number of facilities chosen to show relevant car parks.</div> <div style=\"display:inline;\"> <p style=\"display:inline-block\" class=\"lapm-map-screen-clear lapm-btn\">Clear Filters</p> </div> <div> <button class=\"lapm-map-screen-done lapm-btn\" type=\"button\">Done</button> </div></div><div class=\"lapm-map-screen\" data-filter=\"car-park\"> <div class=\"lapm-car-park\"> <div class=\"lapm-map-screen-inner lapm-map-screen-inner-desk\"> <div class=\"lapm-car-park-cad-preview-image\" data-preview=\"top-preview\"></div> <div class=\"lapm-map-screen-details\"> <button class=\"lapm-map-screen-cross\" data-screen=\"car-park\" type=\"button\"></button> <h4 class=\"lapm-car-park-heading\">[dynamic content]</h4> <p class=\"lapm-car-park-description\">[dynamic content]</p> <p class=\"lapm-car-park-bus-distance-to-terminal car-park-facility\"> <span class=\"svg-terminal-distance-bus\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64.396\" height=\"46.817\" viewBox=\"0 0 64.396 46.817\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0 0)\"><path class=\"a\" d=\"M794.149,1452.658h-8.18a1.44,1.44,0,0,0-1.44,1.44v10.785a1.44,1.44,0,0,0,1.44,1.44h2.65v28.145a1.44,1.44,0,0,0,2.88,0v-28.145h2.65a1.439,1.439,0,0,0,1.44-1.44V1454.1A1.44,1.44,0,0,0,794.149,1452.658Zm-1.44,10.785h-5.3v-7.905h5.3Z\" transform=\"translate(-731.193 -1450.068)\"/><path class=\"a\" d=\"M647.086,1450.461H644.1v-2.528a4.272,4.272,0,0,0-4.267-4.267H608a4.27,4.27,0,0,0-4.264,4.267v2.528h-2.988a1.44,1.44,0,0,0-1.44,1.44v6.579a1.44,1.44,0,0,0,1.44,1.44h2.988v23.748a1.576,1.576,0,0,0,.144.657v4.719a1.44,1.44,0,0,0,1.44,1.44h5.407a1.44,1.44,0,0,0,1.44-1.44v-3.792h23.5v3.792a1.44,1.44,0,0,0,1.44,1.44h5.406a1.44,1.44,0,0,0,1.44-1.44v-4.719a1.574,1.574,0,0,0,.144-.657V1459.92h2.984a1.439,1.439,0,0,0,1.44-1.44V1451.9A1.44,1.44,0,0,0,647.086,1450.461Zm-43.345,6.579h-1.548v-3.7h1.548Zm3.168-9.107a1.1,1.1,0,0,1,1.1-1.1h31.831a1.1,1.1,0,0,1,1.1,1.1v2.384H606.908Zm0,5.552h34.026v12.7H606.908Zm2.383,34.118h-2.527v-2.352h2.527Zm-2.383-5.52v-12.727h34.026v12.727Zm34.17,5.52h-2.527v-2.352h2.527Zm4.568-30.562H644.1v-3.7h1.544Z\" transform=\"translate(-599.313 -1443.666)\"/><path class=\"a\" d=\"M636.56,1537.173a3.806,3.806,0,0,0-.04,7.607,3.806,3.806,0,0,0,.04-7.607Zm-.04,4.871c-.673,0-.912-.551-.912-1.067,0-.669.356-1.069.952-1.069a1.078,1.078,0,0,1-.04,2.135Z\" transform=\"translate(-623.208 -1510.246)\"/><path class=\"a\" d=\"M714.866,1537.173a3.806,3.806,0,0,0-.039,7.607,3.806,3.806,0,0,0,.039-7.607Zm-.039,4.871c-.672,0-.912-.551-.912-1.067,0-.669.356-1.069.952-1.069a.932.932,0,0,1,.913,1.069C715.779,1541.376,715.655,1542.044,714.827,1542.044Z\" transform=\"translate(-678.965 -1510.246)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">[dynamic content]</span> </p><p class=\"lapm-car-park-walk-distance-to-terminal car-park-facility\"> <span class=\"svg-terminal-distance-walk\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34.295\" height=\"58.084\" viewBox=\"0 0 34.295 58.084\"><title>Map Distance Filter</title><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0)\"><path class=\"a\" d=\"M2521.926,248.638h-.572a5.063,5.063,0,0,1-4.929-5.176v-2.524a5.063,5.063,0,0,1,4.929-5.176h.572a5.062,5.062,0,0,1,4.929,5.176v2.524A5.062,5.062,0,0,1,2521.926,248.638Zm1.046-7.7a1.206,1.206,0,0,0-1.046-1.294h-.572a1.205,1.205,0,0,0-1.045,1.294v2.524a1.205,1.205,0,0,0,1.045,1.293h.572a1.206,1.206,0,0,0,1.046-1.293Z\" transform=\"translate(-2493.068 -235.762)\"/><path class=\"a\" d=\"M2515.527,303.372l6.854-13.483a3.672,3.672,0,0,1,4.976-1.612l5.369,2.812,3.422-16.677a4.9,4.9,0,0,1,4.792-4.033h5.9a2.021,2.021,0,0,1,1.44.606,2.08,2.08,0,0,1,.6,1.463l-.023,20.415a2.048,2.048,0,0,1-1.933,2.054l1.189,2.3a8.75,8.75,0,0,1,1.3,4.621v11.116a2.036,2.036,0,1,1-4.071,0V301.84a4.516,4.516,0,0,0-.688-2.439q-.055-.087-.1-.178l-2.093-4.052-1.091,4.283a16.181,16.181,0,0,1-3,6.1l-4.344,5.408a2.017,2.017,0,0,1-2.865.3,2.087,2.087,0,0,1-.292-2.907l4.344-5.408a12,12,0,0,0,2.211-4.524l.89-3.493h-2.941a3.759,3.759,0,0,1-.4,1.552l-6.854,13.483a3.682,3.682,0,0,1-1.76,1.694,1.655,1.655,0,0,1-.973,2.911,1.639,1.639,0,0,1-1.705-1.574,1.657,1.657,0,0,1,.349-1.094,3.678,3.678,0,0,1-.887-.325h0l-6.021-3.153a3.7,3.7,0,0,1-1.824-2.191A3.766,3.766,0,0,1,2515.527,303.372Zm29.257-12.578.018-16.282h-3.861a.824.824,0,0,0-.8.7l-3.2,15.578ZM2525,307.9h0Zm-.337-.177,6.508-12.8-5.348-2.8-6.507,12.8Z\" transform=\"translate(-2515.114 -256.938)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">[dynamic content]</span> </p><p class=\"lapm-car-park-walk-free-parking car-park-facility\"> <span class=\"svg-free-parking\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"49.81\" height=\"49.811\" viewBox=\"0 0 49.81 49.811\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(-1387.07 -1838.521)\"><path class=\"a\" d=\"M1411.975,1838.521a24.905,24.905,0,1,0,24.9,24.905A24.934,24.934,0,0,0,1411.975,1838.521Zm0,46.73a21.825,21.825,0,1,1,21.824-21.825A21.85,21.85,0,0,1,1411.975,1885.251Z\"/><path class=\"a\" d=\"M1468.311,1885.1l-10.139,10.14-4.309-4.309a1.54,1.54,0,0,0-2.178,2.178l5.4,5.4h0a1.531,1.531,0,0,0,.795.423,1.559,1.559,0,0,0,.294.028,1.535,1.535,0,0,0,1.089-.451l11.228-11.228a1.54,1.54,0,1,0-2.178-2.178Z\" transform=\"translate(-46.197 -33.209)\"/><path class=\"a\" d=\"M1472.052,1859.894a1.54,1.54,0,0,0,1.54-1.54v-2.328a1.54,1.54,0,0,0-3.08,0v2.328A1.54,1.54,0,0,0,1472.052,1859.894Z\" transform=\"translate(-60.077 -11.495)\"/><path class=\"a\" d=\"M1472.052,1981.125a1.54,1.54,0,0,0-1.54,1.54v2.328a1.54,1.54,0,0,0,3.08,0v-2.328A1.54,1.54,0,0,0,1472.052,1981.125Z\" transform=\"translate(-60.077 -102.672)\"/><path class=\"a\" d=\"M1533.542,1921.962h-2.328a1.54,1.54,0,1,0,0,3.08h2.328a1.54,1.54,0,0,0,0-3.08Z\" transform=\"translate(-102.672 -60.076)\"/><path class=\"a\" d=\"M1406.9,1921.962h-2.328a1.54,1.54,0,1,0,0,3.08h2.328a1.54,1.54,0,0,0,0-3.08Z\" transform=\"translate(-11.495 -60.076)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">[dynamic content]</span> </p><p class=\"lapm-car-park-facilities car-park-facility\" data-facility=\"ev-chargers\"> <span class=\"svg-ev-charger\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64.396\" height=\"38.449\" viewBox=\"0 0 64.396 38.449\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0 0)\"><path class=\"a\" d=\"M2572.713,1078.832l-1.135-10.908a4.433,4.433,0,0,0-3.4-3.866l-1.164-8.019a6.666,6.666,0,0,0-6.562-5.677h-21.409a6.665,6.665,0,0,0-6.561,5.677l-1.165,8.019a4.433,4.433,0,0,0-3.4,3.865l-.3,2.869h-.526a5.483,5.483,0,0,0-5.477,5.477v3.958a2.724,2.724,0,0,1-5.449,0v-8.4a6.465,6.465,0,0,0,5.08-6.307V1061.8a1.376,1.376,0,0,0-1.376-1.376h-1.7v-2.548a1.376,1.376,0,1,0-2.752,0v2.548h-1.194v-2.548a1.376,1.376,0,0,0-2.753,0v2.548h-1.764a1.377,1.377,0,0,0-1.376,1.376v3.716a6.466,6.466,0,0,0,5.08,6.307v8.4a5.477,5.477,0,1,0,10.954,0v-3.958a2.727,2.727,0,0,1,2.725-2.724h.24l-.55,5.287a3.666,3.666,0,0,0,2.1,3.709v4.821a1.448,1.448,0,0,0,1.448,1.449h5.281a1.449,1.449,0,0,0,1.449-1.449v-4.468h25.378v4.468a1.448,1.448,0,0,0,1.449,1.449h5.28a1.449,1.449,0,0,0,1.449-1.449v-4.821a3.666,3.666,0,0,0,2.1-3.708Zm-61.624-13.314v-2.34h7.406v2.34a3.7,3.7,0,0,1-7.406,0Zm24.549-9.021a3.46,3.46,0,0,1,3.406-2.948h21.409a3.461,3.461,0,0,1,3.407,2.948l1.08,7.438h-30.382Zm-3.294,10.625h34.81a1.258,1.258,0,0,1,1.254,1.131l1.135,10.908a.493.493,0,0,1-.49.544h-38.608a.493.493,0,0,1-.489-.544l1.135-10.909A1.257,1.257,0,0,1,2532.344,1067.123Zm1.818,18.79h-2.382v-3.019h2.382Zm31.173,0v-3.019h2.383v3.019Z\" transform=\"translate(-2508.337 -1050.362)\"/><path class=\"a\" d=\"M2595.128,1121.729a3.838,3.838,0,0,0,.04-7.672,3.838,3.838,0,0,0-.04,7.672Zm.04-4.918a1.093,1.093,0,0,1-.04,2.166c-.683,0-.926-.559-.926-1.082C2594.2,1117.215,2594.563,1116.81,2595.168,1116.81Z\" transform=\"translate(-2567.365 -1095.599)\"/><path class=\"a\" d=\"M2691.084,1121.729a3.838,3.838,0,0,0,.04-7.672,3.838,3.838,0,0,0-.04,7.672Zm.04-4.918a1.093,1.093,0,0,1-.04,2.166c-.683,0-.926-.559-.926-1.082C2690.158,1117.215,2690.519,1116.81,2691.124,1116.81Z\" transform=\"translate(-2635.515 -1095.599)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">EV chargers</span> </p><p class=\"lapm-car-park-facilities car-park-facility\" data-facility=\"free-drop-off\"> <span class=\"svg-free-drop-off\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"66.011\" height=\"42.868\" viewBox=\"0 0 66.011 42.868\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0)\"><path class=\"a\" d=\"M2520.233,245.708h.442a3.91,3.91,0,0,0,3.807-4V239.76a3.911,3.911,0,0,0-3.807-4h-.442a3.911,3.911,0,0,0-3.807,4v1.949A3.911,3.911,0,0,0,2520.233,245.708Zm-.808-5.948a.932.932,0,0,1,.808-1h.442a.932.932,0,0,1,.808,1v1.949a.931.931,0,0,1-.808,1h-.442a.932.932,0,0,1-.808-1Z\" transform=\"translate(-2516.033 -235.762)\"/><path class=\"a\" d=\"M2535.023,284.538a2.723,2.723,0,0,0-3.665-1.17l-3.956,2.041-2.52-12.1a3.6,3.6,0,0,0-3.53-2.927h-4.345a1.5,1.5,0,0,0-1.5,1.5l.017,14.816a1.5,1.5,0,0,0,1.424,1.49l-.876,1.672a6.286,6.286,0,0,0-.958,3.353v8.067a1.5,1.5,0,0,0,3,0v-8.067a3.236,3.236,0,0,1,.506-1.77c.028-.042.053-.085.076-.13l1.542-2.941.8,3.109a11.671,11.671,0,0,0,2.207,4.427l3.2,3.925a1.5,1.5,0,0,0,2.325-1.9l-3.2-3.925a8.633,8.633,0,0,1-1.628-3.283l-.656-2.535h2.167a2.692,2.692,0,0,0,.3,1.126l5.049,9.785a2.7,2.7,0,0,0,1.3,1.229,1.2,1.2,0,1,0,1.714.177,2.737,2.737,0,0,0,.654-.236h0l4.434-2.288a2.719,2.719,0,0,0,1.17-3.664Zm-16.5.657-.014-11.817h2.844a.6.6,0,0,1,.588.511l2.354,11.305Zm14.569,12.415h0Zm.248-.128-4.793-9.289,3.938-2.032,4.792,9.289Z\" transform=\"translate(-2515.115 -259.997)\"/><path class=\"a\" d=\"M2640.922,290.5l-.992-9.534a3.981,3.981,0,0,0-2.982-3.454l-1.007-6.937a5.933,5.933,0,0,0-5.84-5.053H2611.39a5.932,5.932,0,0,0-5.839,5.053l-1.007,6.937a3.982,3.982,0,0,0-2.982,3.454l-.991,9.534a3.306,3.306,0,0,0,1.705,3.253v4.213a1.5,1.5,0,0,0,1.5,1.5h4.615a1.5,1.5,0,0,0,1.5-1.5v-3.8H2631.6v3.8a1.5,1.5,0,0,0,1.5,1.5h4.615a1.5,1.5,0,0,0,1.5-1.5v-4.213a3.308,3.308,0,0,0,1.706-3.253Zm-32.4-19.494a2.918,2.918,0,0,1,2.872-2.484H2630.1a2.918,2.918,0,0,1,2.872,2.484l.926,6.379h-26.306Zm-1.629,25.46h-1.615v-2.3h1.615Zm29.328,0H2634.6v-2.3h1.616Zm1.64-5.405a.321.321,0,0,1-.216.1h0l-4.536,0h-29.2l-.051,0h0a.32.32,0,0,1-.216-.1.315.315,0,0,1-.081-.25l.992-9.534a.993.993,0,0,1,.99-.892h30.423a.993.993,0,0,1,.99.893l.992,9.533A.318.318,0,0,1,2637.857,291.061Z\" transform=\"translate(-2574.928 -256.597)\"/><path class=\"a\" d=\"M2657.042,321.107h-11a1.5,1.5,0,0,0-1.5,1.5v4.222a1.5,1.5,0,0,0,1.5,1.5h11a1.5,1.5,0,0,0,1.5-1.5v-4.222A1.5,1.5,0,0,0,2657.042,321.107Zm-1.5,4.222h-8v-1.223h8Z\" transform=\"translate(-2605.723 -295.511)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">Free Drop Off/Pick Up</span> </p><p class=\"lapm-car-park-facilities car-park-facility\" data-facility=\"height-restriction\"> <span class=\"svg-height-restriction\">2.1m</span><span class=\"lapm-car-park-content-inner\">Height restriction of 2.1m</span> </p> <div class=\"lapm-car-park-cta\"> <button class=\"lapm-car-park-level-toggle lapm-btn\" type=\"button\">View Floor Plan</button> <a class=\"lapm-car-park-book-parking lapm-gtm-book-parking lapm-btn\" type=\"button\" target=\"_blank\">Book Parking</a> </div> </div> </div> <div class=\"lapm-map-screen-inner lapm-map-screen-inner-mob\"> <div class=\"lapm-car-park-cad-preview-image\" data-preview=\"top-preview\"></div> <div class=\"lapm-map-screen-details\"> <button class=\"lapm-map-screen-cross\" data-screen=\"car-park\" type=\"button\"></button> <div class=\"lapm-map-screen-details-slider\"> <div class=\"lapm-map-screen-details-mob-slide\"> <div> <h4 class=\"lapm-car-park-heading\">[dynamic content]</h4> <p class=\"lapm-car-park-description\">[dynamic content]</p> <div class=\"lapm-car-park-cta\"> <button class=\"lapm-car-park-level-toggle lapm-btn\" type=\"button\">View Floor Plan</button> <a class=\"lapm-car-park-book-parking lapm-gtm-book-parking lapm-btn\" target=\"_blank\"><span class=\"lapm-car-park-book-parking-text\">Book Parking</span></a> </div> </div> </div> <div class=\"lapm-map-screen-details-mob-slide\"> <div> <p class=\"lapm-car-park-bus-distance-to-terminal car-park-facility\"> <span class=\"svg-terminal-distance-bus\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64.396\" height=\"46.817\" viewBox=\"0 0 64.396 46.817\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0 0)\"><path class=\"a\" d=\"M794.149,1452.658h-8.18a1.44,1.44,0,0,0-1.44,1.44v10.785a1.44,1.44,0,0,0,1.44,1.44h2.65v28.145a1.44,1.44,0,0,0,2.88,0v-28.145h2.65a1.439,1.439,0,0,0,1.44-1.44V1454.1A1.44,1.44,0,0,0,794.149,1452.658Zm-1.44,10.785h-5.3v-7.905h5.3Z\" transform=\"translate(-731.193 -1450.068)\"/><path class=\"a\" d=\"M647.086,1450.461H644.1v-2.528a4.272,4.272,0,0,0-4.267-4.267H608a4.27,4.27,0,0,0-4.264,4.267v2.528h-2.988a1.44,1.44,0,0,0-1.44,1.44v6.579a1.44,1.44,0,0,0,1.44,1.44h2.988v23.748a1.576,1.576,0,0,0,.144.657v4.719a1.44,1.44,0,0,0,1.44,1.44h5.407a1.44,1.44,0,0,0,1.44-1.44v-3.792h23.5v3.792a1.44,1.44,0,0,0,1.44,1.44h5.406a1.44,1.44,0,0,0,1.44-1.44v-4.719a1.574,1.574,0,0,0,.144-.657V1459.92h2.984a1.439,1.439,0,0,0,1.44-1.44V1451.9A1.44,1.44,0,0,0,647.086,1450.461Zm-43.345,6.579h-1.548v-3.7h1.548Zm3.168-9.107a1.1,1.1,0,0,1,1.1-1.1h31.831a1.1,1.1,0,0,1,1.1,1.1v2.384H606.908Zm0,5.552h34.026v12.7H606.908Zm2.383,34.118h-2.527v-2.352h2.527Zm-2.383-5.52v-12.727h34.026v12.727Zm34.17,5.52h-2.527v-2.352h2.527Zm4.568-30.562H644.1v-3.7h1.544Z\" transform=\"translate(-599.313 -1443.666)\"/><path class=\"a\" d=\"M636.56,1537.173a3.806,3.806,0,0,0-.04,7.607,3.806,3.806,0,0,0,.04-7.607Zm-.04,4.871c-.673,0-.912-.551-.912-1.067,0-.669.356-1.069.952-1.069a1.078,1.078,0,0,1-.04,2.135Z\" transform=\"translate(-623.208 -1510.246)\"/><path class=\"a\" d=\"M714.866,1537.173a3.806,3.806,0,0,0-.039,7.607,3.806,3.806,0,0,0,.039-7.607Zm-.039,4.871c-.672,0-.912-.551-.912-1.067,0-.669.356-1.069.952-1.069a.932.932,0,0,1,.913,1.069C715.779,1541.376,715.655,1542.044,714.827,1542.044Z\" transform=\"translate(-678.965 -1510.246)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">[dynamic content]</span> </p><p class=\"lapm-car-park-walk-distance-to-terminal car-park-facility\"> <span class=\"svg-terminal-distance-walk\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34.295\" height=\"58.084\" viewBox=\"0 0 34.295 58.084\"><title>Map Distance Filter</title><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0)\"><path class=\"a\" d=\"M2521.926,248.638h-.572a5.063,5.063,0,0,1-4.929-5.176v-2.524a5.063,5.063,0,0,1,4.929-5.176h.572a5.062,5.062,0,0,1,4.929,5.176v2.524A5.062,5.062,0,0,1,2521.926,248.638Zm1.046-7.7a1.206,1.206,0,0,0-1.046-1.294h-.572a1.205,1.205,0,0,0-1.045,1.294v2.524a1.205,1.205,0,0,0,1.045,1.293h.572a1.206,1.206,0,0,0,1.046-1.293Z\" transform=\"translate(-2493.068 -235.762)\"/><path class=\"a\" d=\"M2515.527,303.372l6.854-13.483a3.672,3.672,0,0,1,4.976-1.612l5.369,2.812,3.422-16.677a4.9,4.9,0,0,1,4.792-4.033h5.9a2.021,2.021,0,0,1,1.44.606,2.08,2.08,0,0,1,.6,1.463l-.023,20.415a2.048,2.048,0,0,1-1.933,2.054l1.189,2.3a8.75,8.75,0,0,1,1.3,4.621v11.116a2.036,2.036,0,1,1-4.071,0V301.84a4.516,4.516,0,0,0-.688-2.439q-.055-.087-.1-.178l-2.093-4.052-1.091,4.283a16.181,16.181,0,0,1-3,6.1l-4.344,5.408a2.017,2.017,0,0,1-2.865.3,2.087,2.087,0,0,1-.292-2.907l4.344-5.408a12,12,0,0,0,2.211-4.524l.89-3.493h-2.941a3.759,3.759,0,0,1-.4,1.552l-6.854,13.483a3.682,3.682,0,0,1-1.76,1.694,1.655,1.655,0,0,1-.973,2.911,1.639,1.639,0,0,1-1.705-1.574,1.657,1.657,0,0,1,.349-1.094,3.678,3.678,0,0,1-.887-.325h0l-6.021-3.153a3.7,3.7,0,0,1-1.824-2.191A3.766,3.766,0,0,1,2515.527,303.372Zm29.257-12.578.018-16.282h-3.861a.824.824,0,0,0-.8.7l-3.2,15.578ZM2525,307.9h0Zm-.337-.177,6.508-12.8-5.348-2.8-6.507,12.8Z\" transform=\"translate(-2515.114 -256.938)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">[dynamic content]</span> </p><p class=\"lapm-car-park-walk-free-parking car-park-facility\"> <span class=\"svg-free-parking\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"49.81\" height=\"49.811\" viewBox=\"0 0 49.81 49.811\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(-1387.07 -1838.521)\"><path class=\"a\" d=\"M1411.975,1838.521a24.905,24.905,0,1,0,24.9,24.905A24.934,24.934,0,0,0,1411.975,1838.521Zm0,46.73a21.825,21.825,0,1,1,21.824-21.825A21.85,21.85,0,0,1,1411.975,1885.251Z\"/><path class=\"a\" d=\"M1468.311,1885.1l-10.139,10.14-4.309-4.309a1.54,1.54,0,0,0-2.178,2.178l5.4,5.4h0a1.531,1.531,0,0,0,.795.423,1.559,1.559,0,0,0,.294.028,1.535,1.535,0,0,0,1.089-.451l11.228-11.228a1.54,1.54,0,1,0-2.178-2.178Z\" transform=\"translate(-46.197 -33.209)\"/><path class=\"a\" d=\"M1472.052,1859.894a1.54,1.54,0,0,0,1.54-1.54v-2.328a1.54,1.54,0,0,0-3.08,0v2.328A1.54,1.54,0,0,0,1472.052,1859.894Z\" transform=\"translate(-60.077 -11.495)\"/><path class=\"a\" d=\"M1472.052,1981.125a1.54,1.54,0,0,0-1.54,1.54v2.328a1.54,1.54,0,0,0,3.08,0v-2.328A1.54,1.54,0,0,0,1472.052,1981.125Z\" transform=\"translate(-60.077 -102.672)\"/><path class=\"a\" d=\"M1533.542,1921.962h-2.328a1.54,1.54,0,1,0,0,3.08h2.328a1.54,1.54,0,0,0,0-3.08Z\" transform=\"translate(-102.672 -60.076)\"/><path class=\"a\" d=\"M1406.9,1921.962h-2.328a1.54,1.54,0,1,0,0,3.08h2.328a1.54,1.54,0,0,0,0-3.08Z\" transform=\"translate(-11.495 -60.076)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">[dynamic content]</span> </p><p class=\"lapm-car-park-facilities car-park-facility\" data-facility=\"ev-chargers\"> <span class=\"svg-ev-charger\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64.396\" height=\"38.449\" viewBox=\"0 0 64.396 38.449\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0 0)\"><path class=\"a\" d=\"M2572.713,1078.832l-1.135-10.908a4.433,4.433,0,0,0-3.4-3.866l-1.164-8.019a6.666,6.666,0,0,0-6.562-5.677h-21.409a6.665,6.665,0,0,0-6.561,5.677l-1.165,8.019a4.433,4.433,0,0,0-3.4,3.865l-.3,2.869h-.526a5.483,5.483,0,0,0-5.477,5.477v3.958a2.724,2.724,0,0,1-5.449,0v-8.4a6.465,6.465,0,0,0,5.08-6.307V1061.8a1.376,1.376,0,0,0-1.376-1.376h-1.7v-2.548a1.376,1.376,0,1,0-2.752,0v2.548h-1.194v-2.548a1.376,1.376,0,0,0-2.753,0v2.548h-1.764a1.377,1.377,0,0,0-1.376,1.376v3.716a6.466,6.466,0,0,0,5.08,6.307v8.4a5.477,5.477,0,1,0,10.954,0v-3.958a2.727,2.727,0,0,1,2.725-2.724h.24l-.55,5.287a3.666,3.666,0,0,0,2.1,3.709v4.821a1.448,1.448,0,0,0,1.448,1.449h5.281a1.449,1.449,0,0,0,1.449-1.449v-4.468h25.378v4.468a1.448,1.448,0,0,0,1.449,1.449h5.28a1.449,1.449,0,0,0,1.449-1.449v-4.821a3.666,3.666,0,0,0,2.1-3.708Zm-61.624-13.314v-2.34h7.406v2.34a3.7,3.7,0,0,1-7.406,0Zm24.549-9.021a3.46,3.46,0,0,1,3.406-2.948h21.409a3.461,3.461,0,0,1,3.407,2.948l1.08,7.438h-30.382Zm-3.294,10.625h34.81a1.258,1.258,0,0,1,1.254,1.131l1.135,10.908a.493.493,0,0,1-.49.544h-38.608a.493.493,0,0,1-.489-.544l1.135-10.909A1.257,1.257,0,0,1,2532.344,1067.123Zm1.818,18.79h-2.382v-3.019h2.382Zm31.173,0v-3.019h2.383v3.019Z\" transform=\"translate(-2508.337 -1050.362)\"/><path class=\"a\" d=\"M2595.128,1121.729a3.838,3.838,0,0,0,.04-7.672,3.838,3.838,0,0,0-.04,7.672Zm.04-4.918a1.093,1.093,0,0,1-.04,2.166c-.683,0-.926-.559-.926-1.082C2594.2,1117.215,2594.563,1116.81,2595.168,1116.81Z\" transform=\"translate(-2567.365 -1095.599)\"/><path class=\"a\" d=\"M2691.084,1121.729a3.838,3.838,0,0,0,.04-7.672,3.838,3.838,0,0,0-.04,7.672Zm.04-4.918a1.093,1.093,0,0,1-.04,2.166c-.683,0-.926-.559-.926-1.082C2690.158,1117.215,2690.519,1116.81,2691.124,1116.81Z\" transform=\"translate(-2635.515 -1095.599)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">EV chargers</span> </p><p class=\"lapm-car-park-facilities car-park-facility\" data-facility=\"free-drop-off\"> <span class=\"svg-free-drop-off\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"66.011\" height=\"42.868\" viewBox=\"0 0 66.011 42.868\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0)\"><path class=\"a\" d=\"M2520.233,245.708h.442a3.91,3.91,0,0,0,3.807-4V239.76a3.911,3.911,0,0,0-3.807-4h-.442a3.911,3.911,0,0,0-3.807,4v1.949A3.911,3.911,0,0,0,2520.233,245.708Zm-.808-5.948a.932.932,0,0,1,.808-1h.442a.932.932,0,0,1,.808,1v1.949a.931.931,0,0,1-.808,1h-.442a.932.932,0,0,1-.808-1Z\" transform=\"translate(-2516.033 -235.762)\"/><path class=\"a\" d=\"M2535.023,284.538a2.723,2.723,0,0,0-3.665-1.17l-3.956,2.041-2.52-12.1a3.6,3.6,0,0,0-3.53-2.927h-4.345a1.5,1.5,0,0,0-1.5,1.5l.017,14.816a1.5,1.5,0,0,0,1.424,1.49l-.876,1.672a6.286,6.286,0,0,0-.958,3.353v8.067a1.5,1.5,0,0,0,3,0v-8.067a3.236,3.236,0,0,1,.506-1.77c.028-.042.053-.085.076-.13l1.542-2.941.8,3.109a11.671,11.671,0,0,0,2.207,4.427l3.2,3.925a1.5,1.5,0,0,0,2.325-1.9l-3.2-3.925a8.633,8.633,0,0,1-1.628-3.283l-.656-2.535h2.167a2.692,2.692,0,0,0,.3,1.126l5.049,9.785a2.7,2.7,0,0,0,1.3,1.229,1.2,1.2,0,1,0,1.714.177,2.737,2.737,0,0,0,.654-.236h0l4.434-2.288a2.719,2.719,0,0,0,1.17-3.664Zm-16.5.657-.014-11.817h2.844a.6.6,0,0,1,.588.511l2.354,11.305Zm14.569,12.415h0Zm.248-.128-4.793-9.289,3.938-2.032,4.792,9.289Z\" transform=\"translate(-2515.115 -259.997)\"/><path class=\"a\" d=\"M2640.922,290.5l-.992-9.534a3.981,3.981,0,0,0-2.982-3.454l-1.007-6.937a5.933,5.933,0,0,0-5.84-5.053H2611.39a5.932,5.932,0,0,0-5.839,5.053l-1.007,6.937a3.982,3.982,0,0,0-2.982,3.454l-.991,9.534a3.306,3.306,0,0,0,1.705,3.253v4.213a1.5,1.5,0,0,0,1.5,1.5h4.615a1.5,1.5,0,0,0,1.5-1.5v-3.8H2631.6v3.8a1.5,1.5,0,0,0,1.5,1.5h4.615a1.5,1.5,0,0,0,1.5-1.5v-4.213a3.308,3.308,0,0,0,1.706-3.253Zm-32.4-19.494a2.918,2.918,0,0,1,2.872-2.484H2630.1a2.918,2.918,0,0,1,2.872,2.484l.926,6.379h-26.306Zm-1.629,25.46h-1.615v-2.3h1.615Zm29.328,0H2634.6v-2.3h1.616Zm1.64-5.405a.321.321,0,0,1-.216.1h0l-4.536,0h-29.2l-.051,0h0a.32.32,0,0,1-.216-.1.315.315,0,0,1-.081-.25l.992-9.534a.993.993,0,0,1,.99-.892h30.423a.993.993,0,0,1,.99.893l.992,9.533A.318.318,0,0,1,2637.857,291.061Z\" transform=\"translate(-2574.928 -256.597)\"/><path class=\"a\" d=\"M2657.042,321.107h-11a1.5,1.5,0,0,0-1.5,1.5v4.222a1.5,1.5,0,0,0,1.5,1.5h11a1.5,1.5,0,0,0,1.5-1.5v-4.222A1.5,1.5,0,0,0,2657.042,321.107Zm-1.5,4.222h-8v-1.223h8Z\" transform=\"translate(-2605.723 -295.511)\"/></g></svg></span><span class=\"lapm-car-park-content-inner\">Free Drop Off/Pick Up</span> </p><p class=\"lapm-car-park-facilities car-park-facility\" data-facility=\"height-restriction\"> <span class=\"svg-height-restriction\">2.1m</span><span class=\"lapm-car-park-content-inner\">Height restriction of 2.1m</span> </p> </div> </div> </div> </div> </div> <div class=\"lapm-car-park-cad-preview-image\" data-preview=\"side-preview\"></div> </div> <div class=\"lapm-cad-map\"> <div class=\"lapm-cad-map-key\"> <button class=\"lapm-cad-map-key-toggle\" type=\"button\">Map Key<span></span></button> <div class=\"lapm-cad-map-key-dropdown\"> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-cash-machine\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"20.388\" viewBox=\"0 0 28 20.388\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(-3275.674 -2250.353)\"><g transform=\"translate(3275.674 2250.353)\"><path class=\"a\" d=\"M3363.355,2331.217h-1.234a1.442,1.442,0,0,0,.061-.419,2.593,2.593,0,0,0-.057-.543h.549a.388.388,0,1,0,0-.777h-.819a1.394,1.394,0,0,1-.158-.519c0-.166,0-.443.621-.443a1.365,1.365,0,0,1,.729.219.518.518,0,0,0,.622-.828,2.36,2.36,0,0,0-1.352-.427,1.456,1.456,0,0,0-1.656,1.479,1.743,1.743,0,0,0,.083.519h-.265a.388.388,0,0,0,0,.777h.573a1.635,1.635,0,0,1,.094.543c0,.306-.347.43-.381.441a.518.518,0,0,0,.151,1.014h2.439a.518.518,0,1,0,0-1.036Z\" transform=\"translate(-3349.159 -2317.493)\"/><path class=\"a\" d=\"M3401.253,2328.516a1.239,1.239,0,0,1,.658.213.518.518,0,0,0,.627-.824,2.249,2.249,0,0,0-1.285-.425,1.473,1.473,0,0,0-1.609,1.554h-.1a.388.388,0,0,0,0,.777h.1v.232h-.1a.389.389,0,0,0,0,.777h.105a1.471,1.471,0,0,0,1.609,1.544,2.25,2.25,0,0,0,1.286-.425.518.518,0,0,0-.628-.824,1.233,1.233,0,0,1-.658.214c-.325,0-.534-.038-.572-.508h.421a.389.389,0,0,0,0-.777h-.427v-.232h.427a.388.388,0,0,0,0-.777h-.421C3400.717,2328.555,3400.927,2328.516,3401.253,2328.516Z\" transform=\"translate(-3383.162 -2317.493)\"/><path class=\"a\" d=\"M3344.706,2309.476h-2.253v-2.207a.712.712,0,0,0-.712-.712h-17.4a.712.712,0,0,0-.712.712v8.767a.712.712,0,0,0,.712.712h2.253v2.207a.712.712,0,0,0,.712.712h17.4a.713.713,0,0,0,.712-.712v-8.767A.713.713,0,0,0,3344.706,2309.476Zm-19.654-1.495h15.977v7.343h-15.977Zm18.942,10.262h-15.977v-1.495h13.723a.712.712,0,0,0,.712-.712V2310.9h1.541Z\" transform=\"translate(-3317.418 -2299.279)\"/><path class=\"a\" d=\"M3343.019,2256.919a3.283,3.283,0,1,0-3.283-3.283A3.287,3.287,0,0,0,3343.019,2256.919Zm0-5.142a1.859,1.859,0,1,1-1.859,1.859A1.861,1.861,0,0,1,3343.019,2251.778Z\" transform=\"translate(-3331.441 -2250.353)\"/><path class=\"a\" d=\"M3278.054,2299.718a2.38,2.38,0,1,0,2.38,2.38A2.383,2.383,0,0,0,3278.054,2299.718Zm0,3.465a1.085,1.085,0,1,1,1.085-1.085A1.087,1.087,0,0,1,3278.054,2303.183Z\" transform=\"translate(-3275.674 -2293.326)\"/></g></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Cash Machine</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-disabled-parking\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"38.814\" height=\"51.937\" viewBox=\"0 0 38.814 51.937\"><defs><style>.a{fill:#6d6e6f;}</style></defs><path class=\"a\" d=\"M688.11,295.768l-4.442-12.917a1.587,1.587,0,0,0-1.379-1.066l-4.148-.318a14.348,14.348,0,0,0-3.506-3.7l-2.3-9.658a4.741,4.741,0,0,0-4.647-3.82h-3.413a4.74,4.74,0,0,0-4.7,4.178,1.567,1.567,0,0,0-.011.188v8.021a14.272,14.272,0,0,0-1.388.845v-9.461a1.587,1.587,0,0,0-1.587-1.587H650.97a1.587,1.587,0,0,0,0,3.173H655v10.869a14.233,14.233,0,1,0,24.74,4.255l1.266.1,4.1,11.931a1.587,1.587,0,1,0,3-1.032Zm-25.375-27a1.565,1.565,0,0,1,1.542-1.3h3.413a1.565,1.565,0,0,1,1.537,1.274c0,.025.01.049.015.073l1.663,6.995a14.206,14.206,0,0,0-8.171-.357Zm3.5,31.544a11.062,11.062,0,1,1,11.062-11.062A11.075,11.075,0,0,1,666.231,300.312Z\" transform=\"translate(-649.383 -251.549)\"/><path class=\"a\" d=\"M700.3,231.913h.6a4.736,4.736,0,0,0,4.595-4.856v-2.085a4.736,4.736,0,0,0-4.595-4.856h-.6a4.736,4.736,0,0,0-4.594,4.856v2.085A4.736,4.736,0,0,0,700.3,231.913Zm-1.71-6.941A1.856,1.856,0,0,1,700.3,223h.6a1.857,1.857,0,0,1,1.71,1.971v2.085a1.857,1.857,0,0,1-1.71,1.971h-.6a1.856,1.856,0,0,1-1.71-1.971Z\" transform=\"translate(-682.346 -220.117)\"/></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Disabled Parking</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-ev-charger\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64.396\" height=\"38.449\" viewBox=\"0 0 64.396 38.449\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0 0)\"><path class=\"a\" d=\"M2572.713,1078.832l-1.135-10.908a4.433,4.433,0,0,0-3.4-3.866l-1.164-8.019a6.666,6.666,0,0,0-6.562-5.677h-21.409a6.665,6.665,0,0,0-6.561,5.677l-1.165,8.019a4.433,4.433,0,0,0-3.4,3.865l-.3,2.869h-.526a5.483,5.483,0,0,0-5.477,5.477v3.958a2.724,2.724,0,0,1-5.449,0v-8.4a6.465,6.465,0,0,0,5.08-6.307V1061.8a1.376,1.376,0,0,0-1.376-1.376h-1.7v-2.548a1.376,1.376,0,1,0-2.752,0v2.548h-1.194v-2.548a1.376,1.376,0,0,0-2.753,0v2.548h-1.764a1.377,1.377,0,0,0-1.376,1.376v3.716a6.466,6.466,0,0,0,5.08,6.307v8.4a5.477,5.477,0,1,0,10.954,0v-3.958a2.727,2.727,0,0,1,2.725-2.724h.24l-.55,5.287a3.666,3.666,0,0,0,2.1,3.709v4.821a1.448,1.448,0,0,0,1.448,1.449h5.281a1.449,1.449,0,0,0,1.449-1.449v-4.468h25.378v4.468a1.448,1.448,0,0,0,1.449,1.449h5.28a1.449,1.449,0,0,0,1.449-1.449v-4.821a3.666,3.666,0,0,0,2.1-3.708Zm-61.624-13.314v-2.34h7.406v2.34a3.7,3.7,0,0,1-7.406,0Zm24.549-9.021a3.46,3.46,0,0,1,3.406-2.948h21.409a3.461,3.461,0,0,1,3.407,2.948l1.08,7.438h-30.382Zm-3.294,10.625h34.81a1.258,1.258,0,0,1,1.254,1.131l1.135,10.908a.493.493,0,0,1-.49.544h-38.608a.493.493,0,0,1-.489-.544l1.135-10.909A1.257,1.257,0,0,1,2532.344,1067.123Zm1.818,18.79h-2.382v-3.019h2.382Zm31.173,0v-3.019h2.383v3.019Z\" transform=\"translate(-2508.337 -1050.362)\"/><path class=\"a\" d=\"M2595.128,1121.729a3.838,3.838,0,0,0,.04-7.672,3.838,3.838,0,0,0-.04,7.672Zm.04-4.918a1.093,1.093,0,0,1-.04,2.166c-.683,0-.926-.559-.926-1.082C2594.2,1117.215,2594.563,1116.81,2595.168,1116.81Z\" transform=\"translate(-2567.365 -1095.599)\"/><path class=\"a\" d=\"M2691.084,1121.729a3.838,3.838,0,0,0,.04-7.672,3.838,3.838,0,0,0-.04,7.672Zm.04-4.918a1.093,1.093,0,0,1-.04,2.166c-.683,0-.926-.559-.926-1.082C2690.158,1117.215,2690.519,1116.81,2691.124,1116.81Z\" transform=\"translate(-2635.515 -1095.599)\"/></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">EV Charger</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-lift\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26.878\" height=\"35.185\" viewBox=\"0 0 26.878 35.185\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(-1005.897 -592.063)\"><g transform=\"translate(1005.897 592.063)\"><g transform=\"translate(0 5.694)\"><path class=\"a\" d=\"M1029.5,657.577h-20.323a3.237,3.237,0,0,1-3.277-3.187V631.273a3.237,3.237,0,0,1,3.277-3.187H1029.5a3.237,3.237,0,0,1,3.278,3.187V654.39A3.237,3.237,0,0,1,1029.5,657.577Zm-20.323-27.812a1.532,1.532,0,0,0-1.551,1.509V654.39a1.532,1.532,0,0,0,1.551,1.509H1029.5a1.532,1.532,0,0,0,1.552-1.509V631.273a1.532,1.532,0,0,0-1.552-1.509Z\" transform=\"translate(-1005.897 -628.086)\"/></g><g transform=\"translate(6.185 0)\"><path class=\"a\" d=\"M1048.435,595.893a.791.791,0,0,1-.559-.232l-2.249-2.249a.79.79,0,1,1,1.118-1.117l1.69,1.69,1.69-1.69a.79.79,0,1,1,1.118,1.117l-2.249,2.249A.791.791,0,0,1,1048.435,595.893Z\" transform=\"translate(-1045.395 -592.063)\"/></g><g transform=\"translate(14.614)\"><path class=\"a\" d=\"M1104.516,595.893a.788.788,0,0,1-.559-.232l-1.69-1.691-1.69,1.691a.79.79,0,0,1-1.118-1.118l2.249-2.249a.789.789,0,0,1,.559-.232h0a.791.791,0,0,1,.559.232l2.249,2.249a.79.79,0,0,1-.559,1.349Z\" transform=\"translate(-1099.227 -592.063)\"/></g><g transform=\"translate(5.223 7.649)\"><g transform=\"translate(2.035)\"><path class=\"a\" d=\"M1054.771,653.016h-.29a2.371,2.371,0,0,1-2.3-2.428v-1a2.371,2.371,0,0,1,2.3-2.428h.29a2.371,2.371,0,0,1,2.3,2.428v1A2.37,2.37,0,0,1,1054.771,653.016Zm-.29-4.277a.794.794,0,0,0-.722.848v1a.793.793,0,0,0,.722.847h.29a.793.793,0,0,0,.722-.847v-1a.793.793,0,0,0-.722-.848Z\" transform=\"translate(-1052.179 -647.159)\"/></g><g transform=\"translate(0 6.219)\"><path class=\"a\" d=\"M1047.4,696.922h-7.227a.869.869,0,0,1-.869-.869V689.44a2.937,2.937,0,0,1,2.934-2.934h3.1a2.937,2.937,0,0,1,2.933,2.934v6.613A.869.869,0,0,1,1047.4,696.922Zm-6.358-1.739h5.489V689.44a1.2,1.2,0,0,0-1.195-1.2h-3.1a1.2,1.2,0,0,0-1.195,1.2Z\" transform=\"translate(-1039.302 -686.506)\"/></g><g transform=\"translate(2.018 14.897)\"><path class=\"a\" d=\"M1052.938,751.673a.869.869,0,0,1-.869-.869v-8.531a.869.869,0,1,1,1.739,0V750.8A.869.869,0,0,1,1052.938,751.673Z\" transform=\"translate(-1052.069 -741.403)\"/><g transform=\"translate(3.192)\"><path class=\"a\" d=\"M1073.13,751.673a.869.869,0,0,1-.87-.869v-8.531a.869.869,0,0,1,1.739,0V750.8A.869.869,0,0,1,1073.13,751.673Z\" transform=\"translate(-1072.261 -741.403)\"/></g></g></g><g transform=\"translate(15.517 14.29)\"><g transform=\"translate(1.155)\"><path class=\"a\" d=\"M1114.563,694.113h-.46a1.832,1.832,0,0,1-1.788-1.87v-1.2a1.832,1.832,0,0,1,1.788-1.87h.46a1.832,1.832,0,0,1,1.787,1.87v1.2A1.832,1.832,0,0,1,1114.563,694.113Zm-.46-3.357c-.1,0-.207.119-.207.289v1.2c0,.17.109.289.207.289h.46c.1,0,.207-.119.207-.289v-1.2c0-.17-.109-.289-.207-.289Z\" transform=\"translate(-1112.316 -689.176)\"/></g><g transform=\"translate(0 5.497)\"><path class=\"a\" d=\"M1110.563,731.254H1105.8a.79.79,0,0,1-.79-.79V726.1a2.153,2.153,0,0,1,2.151-2.151h2.042a2.153,2.153,0,0,1,2.151,2.151v4.358A.79.79,0,0,1,1110.563,731.254Zm-3.973-1.581h3.183V726.1a.571.571,0,0,0-.57-.57h-2.042a.571.571,0,0,0-.57.57Z\" transform=\"translate(-1105.009 -723.954)\"/></g><g transform=\"translate(1.263 11.216)\"><path class=\"a\" d=\"M1113.788,767.339a.791.791,0,0,1-.79-.79v-5.623a.79.79,0,1,1,1.581,0v5.623A.79.79,0,0,1,1113.788,767.339Z\" transform=\"translate(-1112.998 -760.135)\"/><g transform=\"translate(2.238)\"><path class=\"a\" d=\"M1127.947,767.339a.79.79,0,0,1-.791-.79v-5.623a.79.79,0,1,1,1.581,0v5.623A.79.79,0,0,1,1127.947,767.339Z\" transform=\"translate(-1127.157 -760.135)\"/></g></g></g></g></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Lift</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-meet-and-greet\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"62.14\" height=\"49.239\" viewBox=\"0 0 62.14 49.239\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(0 0)\"><path class=\"a\" d=\"M1763.817,2675.128h.486a4.166,4.166,0,0,0,4.052-4.262v-2.143a4.166,4.166,0,0,0-4.052-4.263h-.486a4.166,4.166,0,0,0-4.052,4.263v2.143A4.165,4.165,0,0,0,1763.817,2675.128Zm-1.022-6.4a1.145,1.145,0,0,1,1.022-1.233h.486a1.145,1.145,0,0,1,1.022,1.233v2.143a1.144,1.144,0,0,1-1.022,1.232h-.486a1.144,1.144,0,0,1-1.022-1.232Z\" transform=\"translate(-1758.411 -2664.349)\"/><path class=\"a\" d=\"M1768.022,2723.456a1.514,1.514,0,0,0,.312-1.26l-3-14.763a3.817,3.817,0,0,0-3.749-3.109h-2.493a3.817,3.817,0,0,0-3.788,3.365,1.36,1.36,0,0,0-.01.181l.019,14.63a1.515,1.515,0,0,0,1.515,1.513h2.017v15.849a1.515,1.515,0,0,0,3.029,0v-15.849h4.974A1.514,1.514,0,0,0,1768.022,2723.456Zm-9.681-2.473-.017-13a.786.786,0,0,1,.77-.627h2.493a.792.792,0,0,1,.776.661l2.633,12.968Z\" transform=\"translate(-1755.295 -2692.136)\"/><path class=\"a\" d=\"M1905.154,2731.649l-1.09-10.484a4.244,4.244,0,0,0-3.266-3.7l-1.121-7.718a6.389,6.389,0,0,0-6.289-5.442h-7.634a1.515,1.515,0,1,0,0,3.029h7.634a3.343,3.343,0,0,1,3.291,2.848l1.041,7.168h-11.5a1.515,1.515,0,1,0,0,3.029h13.607a1.226,1.226,0,0,1,1.222,1.1l1.091,10.484a.486.486,0,0,1-.461.538h0l-4.99,0h-14.012a1.515,1.515,0,1,0,0,3.029h12.5v4.312a1.514,1.514,0,0,0,1.514,1.514h5.075a1.514,1.514,0,0,0,1.514-1.514v-4.715a3.5,3.5,0,0,0,1.876-3.482Zm-4.906,6.682H1898.2v-2.8h2.045Z\" transform=\"translate(-1843.033 -2692.121)\"/><path class=\"a\" d=\"M1857.282,2674.779h.487a4.172,4.172,0,0,0,4.058-4.269v-2.148a4.172,4.172,0,0,0-4.058-4.269h-.487a4.172,4.172,0,0,0-4.058,4.269v2.148A4.172,4.172,0,0,0,1857.282,2674.779Zm-1.029-6.417a1.15,1.15,0,0,1,1.029-1.24h.487a1.15,1.15,0,0,1,1.029,1.24v2.148a1.15,1.15,0,0,1-1.029,1.24h-.487a1.15,1.15,0,0,1-1.029-1.24Z\" transform=\"translate(-1823.558 -2664.093)\"/><path class=\"a\" d=\"M1855.958,2722.262l.019-14.666a1.462,1.462,0,0,0-.011-.182,3.823,3.823,0,0,0-3.794-3.369h-2.5a3.816,3.816,0,0,0-3.75,3.092l-3.009,14.822a1.515,1.515,0,0,0,1.484,1.816h4.99v15.892a1.514,1.514,0,1,0,3.029,0v-15.892h2.026A1.514,1.514,0,0,0,1855.958,2722.262Zm-3.027-1.516h-6.68l2.644-13.027a.791.791,0,0,1,.778-.644h2.5a.792.792,0,0,1,.775.632Z\" transform=\"translate(-1816.35 -2691.942)\"/><path class=\"a\" d=\"M1811.5,2771.521l-2.491,0v-2a2.624,2.624,0,0,0-2.621-2.621h-.005l-3.474,0a2.628,2.628,0,0,0-2.621,2.627v1.981l-2.48,0h0a2.7,2.7,0,0,0-2.7,2.693l-.006,7.938a2.7,2.7,0,0,0,2.694,2.7l13.692.011h0a2.7,2.7,0,0,0,2.7-2.694l.007-7.937a2.694,2.694,0,0,0-2.694-2.7Zm-8.185-1.588h2.663v1.585l-2.663,0Zm7.842,11.886-13.025-.01.006-7.27,13.026.01Z\" transform=\"translate(-1783.045 -2735.758)\"/><path class=\"a\" d=\"M1891.894,2769.355a1.515,1.515,0,0,0,0,3.03h3.7a1.515,1.515,0,0,0,1.515-1.515v-4.653a1.515,1.515,0,0,0-1.515-1.515h-3.7a1.515,1.515,0,0,0,0,3.029h2.181v1.624Z\" transform=\"translate(-1849.458 -2734.224)\"/></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Meet & Greet</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-motorbike\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"69.605\" height=\"57.044\" viewBox=\"0 0 69.605 57.044\"><defs><style>.a{fill:#6d6e6f;stroke:#707070;}</style></defs><g transform=\"translate(0.507 0.5)\"><path class=\"a\" d=\"M4781.068,403.815a4.3,4.3,0,0,0,4.3-4.3v-1.365a4.3,4.3,0,1,0-8.592,0v1.365A4.3,4.3,0,0,0,4781.068,403.815Zm-2.549-5.661a2.549,2.549,0,0,1,5.1,0v1.365a2.549,2.549,0,0,1-5.1,0Z\" transform=\"translate(-4754.202 -393.858)\"/><path class=\"a\" d=\"M4726.566,478.736a11.5,11.5,0,0,0-13.708-3.234c-1.008-1.821-2.041-3.689-3-5.421a4.014,4.014,0,0,0,.562.044h1.953a.874.874,0,0,0,.874-.874v-6.259a.874.874,0,0,0-.874-.874h-1.953a4.007,4.007,0,0,0-3.666,2.4c-.624-1.105-1.047-1.84-1.166-2.017-.6-.89-2.425-3.6-4.763-3.6h-2.507a8.254,8.254,0,0,1-.735.047l-6.142,2.678.469-2.836a4.3,4.3,0,0,0-3.4-5.026l-4.554-.888a.873.873,0,0,0-.99.567l-5.625,15.917c0,.006-.008.011-.011.016a4.475,4.475,0,0,0-.32,2.279,14.841,14.841,0,0,0-4.456-.738h-6.545a.874.874,0,1,0,0,1.748h6.545a13.072,13.072,0,0,1,10.13,5,12.5,12.5,0,0,1,2.709,7.419h-1.909a11.492,11.492,0,1,0-12.669,12.3,11.626,11.626,0,0,0,1.232.065,11.494,11.494,0,0,0,11.406-10.282h0c.012-.113.018-.225.027-.337h10.348c3.576,0,7.182-1.869,7.625-6.018h.256a8.427,8.427,0,0,0,5.829-2.407,9.1,9.1,0,0,0,2.465-4.455c.435.783.877,1.584,1.325,2.395q-.474.313-.922.675a11.492,11.492,0,0,0,6.014,20.364,11.635,11.635,0,0,0,1.233.065,11.5,11.5,0,0,0,11.406-10.282h0A11.418,11.418,0,0,0,4726.566,478.736Zm-16.151-14.869h1.079v4.511h-1.079a2.256,2.256,0,0,1,0-4.511Zm-12.3-3.238a.856.856,0,0,0,.2.026h2.507c.643,0,1.739.49,3.314,2.827.11.164.572.971,1.276,2.222h-5.969c-3.93,0-6.977,1.234-8.818,3.482l-.42-.089.894-5.41Zm-19.225,9.546c.543-1.07,2.677-1.3,5.436-.581.7.182,3.046.687,4.655,1.029l.606.2a8.919,8.919,0,0,0-.5,1.281h-10.264A3.866,3.866,0,0,1,4678.886,470.175Zm12.17,1.624c.063-.144.13-.282.2-.417l5.479,1.822L4693,479.069h-1.942Zm-6.7-17.056,3.814.743a2.553,2.553,0,0,1,2.014,2.989l0,.025-.655,3.965-1.524.665-1.469-6.1a.873.873,0,1,0-1.7.409l1.712,7.116a.873.873,0,0,0,1.2.6l1.443-.629-.7,4.214c-1.477-.316-3.181-.687-3.732-.83a10.577,10.577,0,0,0-4.947-.3Zm-.3,21.845a14.8,14.8,0,0,0-2.793-2.734h8.047v6.089a.874.874,0,0,0,.874.874h1.7l-2.721,4.27h-2.023A14.1,14.1,0,0,0,4684.056,476.587Zm-2.342,10.4h0a9.743,9.743,0,1,1-9.708-10.772,9.956,9.956,0,0,1,1.045.055,9.749,9.749,0,0,1,8.68,8.816h-2.871a6.892,6.892,0,1,0-7.562,7.726,7.007,7.007,0,0,0,.738.039,6.89,6.89,0,0,0,6.821-6.018h2.869C4681.722,486.885,4681.719,486.936,4681.714,486.987Zm-9.689-.153h5.066a5.142,5.142,0,1,1-5.077-6.018,5.251,5.251,0,0,1,.553.029,5.145,5.145,0,0,1,4.527,4.241h-5.069a.874.874,0,1,0,0,1.747Zm21.8-1.747h-2.591l2.721-4.27h5.729C4699.234,483.947,4696.338,485.087,4693.828,485.087Zm7.88-6.018h-6.638l3.74-5.872a.873.873,0,0,0-.461-1.3l-6.026-2c2-2.06,5.093-2.443,7.119-2.443h6.6a.87.87,0,0,0,.313-.06c.645,1.155,1.4,2.507,2.215,3.98C4708.468,477.011,4704.433,479.069,4701.708,479.069Zm25.612,7.918h0a9.744,9.744,0,1,1-15.815-8.6q.327-.265.672-.5c.463.838.928,1.678,1.388,2.512q-.136.1-.267.205a6.891,6.891,0,0,0,3.6,12.211,7.051,7.051,0,0,0,.74.039,6.891,6.891,0,0,0,6.838-6.166h0a6.894,6.894,0,0,0-9.387-7.136c-.443-.8-.909-1.644-1.388-2.512a9.639,9.639,0,0,1,3.9-.823,9.958,9.958,0,0,1,1.046.055,9.745,9.745,0,0,1,8.663,10.717Zm-8.924-1.448c-.311-.566-1.232-2.238-2.447-4.441a5.1,5.1,0,0,1,1.672-.282,5.209,5.209,0,0,1,.551.029,5.144,5.144,0,0,1,4.573,5.657h0a5.144,5.144,0,1,1-8.349-4.542l.022-.016c.854,1.548,1.681,3.049,2.446,4.438a.874.874,0,1,0,1.531-.843Z\" transform=\"translate(-4660.532 -441.409)\"/></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Motorbike Parking</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-parking-payment\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"25.893\" height=\"32.816\" viewBox=\"0 0 25.893 32.816\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(-3498.312 -2936.121)\"><g transform=\"translate(3501.536 2957.712)\"><path class=\"a\" d=\"M3521.583,3078.449c-2.679-.039-2.693,4.252-.023,4.226C3524.247,3082.738,3524.259,3078.4,3521.583,3078.449Zm-.023,2.785c-.836,0-.732-1.4.023-1.344A.675.675,0,0,1,3521.561,3081.234Z\" transform=\"translate(-3519.566 -3078.449)\"/></g><g transform=\"translate(3505.392 2938.593)\"><path class=\"a\" d=\"M3545.814,2955.458c.51,1.306-.775.874-.724,1.726a.531.531,0,0,0,.525.453h2.715a.531.531,0,0,0,0-1.062h-1.436a2.157,2.157,0,0,0,.02-1.117h.946a.431.431,0,0,0,0-.863h-1.249c-.192-.547-.485-1.048.564-1.117a1.56,1.56,0,0,1,.838.252.531.531,0,0,0,.639-.848c-1.255-1.027-3.872-.3-3.18,1.713a.438.438,0,0,0-.486.431C3544.979,2955.476,3545.488,2955.481,3545.814,2955.458Z\" transform=\"translate(-3544.986 -2952.42)\"/></g><g transform=\"translate(3513.085 2938.541)\"><path class=\"a\" d=\"M3596.228,2955.68c-.08,1.889,2.25,2.061,3.15,1.262a.531.531,0,0,0-.644-.845,1.424,1.424,0,0,1-.759.247c-.39,0-.655-.049-.686-.664.3,0,.905.089.9-.379.008-.47-.6-.375-.9-.379v-.365c.3,0,.909.09.9-.379.008-.469-.593-.375-.9-.379.029-.625.294-.675.687-.675a1.42,1.42,0,0,1,.758.246.531.531,0,0,0,.645-.844c-.9-.8-3.236-.625-3.15,1.273a.4.4,0,1,0,0,.758v.365A.4.4,0,1,0,3596.228,2955.68Z\" transform=\"translate(-3595.697 -2952.073)\"/></g><g transform=\"translate(3498.312 2947.271)\"><path class=\"a\" d=\"M3524.192,3025.683l-.643-6.176a2.443,2.443,0,0,0-1.918-2.14c-.512-2.838-.21-7.744-4.313-7.742H3505.2c-4.095-.01-3.807,4.915-4.313,7.742a2.443,2.443,0,0,0-1.917,2.14l-.643,6.176a2.023,2.023,0,0,0,1.182,2.048v2.775a.758.758,0,0,0,.758.758c3.856-.146,3.856.961,3.748-3.356H3518.5c-.109,4.323-.1,3.208,3.748,3.356a.759.759,0,0,0,.758-.758v-2.775A2.024,2.024,0,0,0,3524.192,3025.683Zm-20.991-12.662a2.028,2.028,0,0,1,2-1.727h12.121c2.635-.118,2.162,4.413,2.619,6.016h-17.358Zm-.706,16.726h-1.473v-1.839h1.473Zm19,0h-1.473v-1.839h1.473Zm.952-3.623c-.224.342-21.822-.005-22.117.115-.256-.037-.331-.128-.345-.384l.643-6.176a.78.78,0,0,1,.778-.7c.244-.019,19.25.014,19.5,0a.831.831,0,0,1,.988.7l.643,6.176A.343.343,0,0,1,3522.445,3026.124Z\" transform=\"translate(-3498.311 -3009.625)\"/></g><g transform=\"translate(3517.279 2957.712)\"><path class=\"a\" d=\"M3625.361,3078.449c-2.678-.039-2.692,4.252-.022,4.226C3628.025,3082.737,3628.037,3078.4,3625.361,3078.449Zm-.022,2.785c-.836,0-.732-1.4.022-1.344A.675.675,0,0,1,3625.339,3081.234Z\" transform=\"translate(-3623.344 -3078.449)\"/></g><g transform=\"translate(3502.315 2936.121)\"><path class=\"a\" d=\"M3529.814,2946.306a5.093,5.093,0,0,0,3.833-1.738c2.9,3.519,9.087,1.227,8.94-3.368.146-4.593-6.043-6.887-8.94-3.367-2.859-3.508-9.1-1.234-8.938,3.368A5.111,5.111,0,0,0,3529.814,2946.306Zm5.1-5.375a5.157,5.157,0,0,0-.44-1.822c1.9-2.916,6.784-1.41,6.674,2.091.11,3.5-4.778,5.008-6.674,2.091A5.132,5.132,0,0,0,3534.912,2940.932Zm-5.1-3.4c4.82.1,4.816,7.234,0,7.329C3525,2944.779,3525,2937.622,3529.814,2937.536Z\" transform=\"translate(-3524.705 -2936.121)\"/></g></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Parking Payment</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-stairs\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"23.284\" height=\"29.9\" viewBox=\"0 0 23.284 29.9\"><defs><style>.a{fill:#6d6e6f;}</style></defs><g transform=\"translate(-631.278 -594.687)\"><path class=\"a\" d=\"M677.367,600.388h.268a2.205,2.205,0,0,0,2.142-2.259v-1.183a2.205,2.205,0,0,0-2.142-2.259h-.268a2.206,2.206,0,0,0-2.143,2.259v1.183A2.205,2.205,0,0,0,677.367,600.388Zm-.66-3.442a.726.726,0,0,1,.66-.776h.268a.726.726,0,0,1,.66.776v1.183a.726.726,0,0,1-.66.776h-.268a.726.726,0,0,1-.66-.776Z\" transform=\"translate(-38.023)\"/><path class=\"a\" d=\"M653.82,649.67h-4.36a.741.741,0,0,0-.741.741v2.408H645.1a.741.741,0,0,0-.741.741v2.408h-.744v-3.29a.742.742,0,0,0-.144-.439l-1.183-1.607h.451a.741.741,0,0,0,.726-.889l-1.655-8.155a2.013,2.013,0,0,0-1.977-1.639h-1.376a2.013,2.013,0,0,0-2,1.774.753.753,0,0,0-.005.089l.011,8.08a.741.741,0,0,0,.741.74h.67v8.485h-1.5a.741.741,0,0,0-.741.741v2.408h-3.619a.741.741,0,1,0,0,1.483h4.36a.741.741,0,0,0,.741-.741V660.6h3.619a.741.741,0,0,0,.741-.741v-2.408H645.1a.741.741,0,0,0,.741-.741V654.3h3.619a.741.741,0,0,0,.741-.741v-2.408h3.619a.741.741,0,1,0,0-1.482Zm-15.364-8.238h1.376a.533.533,0,0,1,.522.441l1.477,7.276h-3.887l-.009-7.286A.53.53,0,0,1,638.456,641.432Zm2.283,14.537a.741.741,0,0,0-.741.741v2.408h-.641v-8.485H640.5a.739.739,0,0,0,.107.218l1.524,2.071v3.047Z\" transform=\"translate(0 -39.162)\"/></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Stairs</div> </div> </div> <div class=\"lapm-cad-map-key-dropdown-item\"> <div class=\"lapm-cad-map-key-dropdown-item-image\"> <span class=\"svg-terminal\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"69.41\" height=\"50.825\" viewBox=\"0 0 69.41 50.825\"><defs><style>.a{fill:none;}.a,.b{stroke:#6d6e6f;stroke-width:0.7px;}.b{fill:#6d6e6f;}</style></defs><g transform=\"translate(-2136.417 -232.157)\"><path class=\"a\" d=\"M2253.967,268.094h4.551l1-7.486H2254.3Z\" transform=\"translate(-72.3 -17.34)\"/><path class=\"a\" d=\"M2226.747,244.278h9.622l2.218-5.356c-.282-.8-3.4-2.1-8.359-2.1s-8.076,1.3-8.358,2.1l2.218,5.356Z\" transform=\"translate(-52.494 -2.662)\"/><path class=\"a\" d=\"M2241.766,268.094l.334-7.486h-5.226l.334,7.486Z\" transform=\"translate(-61.753 -17.34)\"/><path class=\"a\" d=\"M2163.181,283.9a1.036,1.036,0,0,0-.617-.608c-.952-.4-2.712-.109-4.709.77l-1.682.741a.825.825,0,0,1-1.156.989l-7.892-3.958-.664.292,3.986,4.859a.826.826,0,1,1-1.277,1.048l-.09-.109-3.877,1.706a.827.827,0,0,1-.786-.065l-2.668-1.75-.04.018,1.022,2.664a2.7,2.7,0,0,0,1.306,1.669,2.78,2.78,0,0,0,2.141-.25l16.214-7.136C2163.357,284.356,2163.263,284.113,2163.181,283.9Z\" transform=\"translate(-3.028 -30.438)\"/><path class=\"a\" d=\"M2224.145,260.608h-5.22l1,7.486h4.551Z\" transform=\"translate(-50.676 -17.34)\"/><path class=\"a\" d=\"M2234.372,284.47H2223.6l3.3,5.152h8.785l3.3-5.152Z\" transform=\"translate(-53.562 -32.065)\"/><path class=\"b\" d=\"M2161.7,280.5a2.693,2.693,0,0,0-1.524-1.541c-1.4-.584-3.536-.306-6.01.783l-2.637,1.161-7.034-3.527a.823.823,0,0,0-.7-.018l-2.016.887a.825.825,0,0,0-.306,1.279l3.5,4.265-3.044,1.34-2.668-1.75a.826.826,0,0,0-.785-.065l-1.171.515a.826.826,0,0,0-.438,1.052l1.3,3.4a4.271,4.271,0,0,0,2.214,2.6,3.313,3.313,0,0,0,1.287.249,5.389,5.389,0,0,0,2.154-.512l16.214-7.135C2162.018,282.616,2162.032,281.384,2161.7,280.5Zm-18.544,8.609a2.78,2.78,0,0,1-2.141.25,2.7,2.7,0,0,1-1.306-1.669l-1.022-2.664.04-.018,2.668,1.75a.827.827,0,0,0,.786.065l3.877-1.706.09.109a.826.826,0,0,0,1.277-1.048l-3.986-4.859.664-.292,7.892,3.958a.825.825,0,0,0,1.156-.989l1.682-.741c2-.879,3.757-1.166,4.709-.77a1.037,1.037,0,0,1,.617.608c.082.214.176.458-.788.881Z\" transform=\"translate(0 -27.636)\"/><path class=\"b\" d=\"M2246.063,324.446a.826.826,0,0,0-.826.826V338.54a.826.826,0,0,0,1.652,0V325.272A.826.826,0,0,0,2246.063,324.446Z\" transform=\"translate(-66.913 -56.733)\"/><path class=\"b\" d=\"M2238.667,324.446a.826.826,0,0,0-.826.826V338.54a.826.826,0,0,0,1.652,0V325.272A.826.826,0,0,0,2238.667,324.446Z\" transform=\"translate(-62.35 -56.733)\"/><path class=\"b\" d=\"M2225.534,267.712h-21.246v-9.088l4.222-6.586a.819.819,0,0,0,.131-.343h0v0l1.224-9.138v0h0v0h0v0a.822.822,0,0,0-.137-.568c-.012-.018-.026-.036-.039-.053l0,0v0a.825.825,0,0,0-.508-.293h0l-.038-.005h0a.93.93,0,0,0-.1-.005h-2.487l2.033-4.909a.788.788,0,0,0,.054-.172.8.8,0,0,0,.016-.185c-.032-2.522-5.062-3.842-10.032-3.842s-10,1.319-10.031,3.841a.821.821,0,0,0,.016.188.8.8,0,0,0,.054.169l2.033,4.91H2188.2a.689.689,0,0,0-.109.006h0l-.032,0a.823.823,0,0,0-.531.317h0v0h0l0,0h0a.824.824,0,0,0-.157.6v0h0v0h0v0l1.224,9.134c0,.011,0,.021,0,.031a.817.817,0,0,0,.128.322l4.221,6.585v9.1c-7.135.191-11.04,2.842-14.2,4.989-2.372,1.611-4.42,3-7.278,3a.826.826,0,0,0,0,1.652,10.207,10.207,0,0,0,4.19-.9v5.341a.826.826,0,0,0,1.652,0v-6.2c.8-.469,1.574-1,2.364-1.532,3.127-2.123,6.653-4.518,13.272-4.7v12.43a.826.826,0,0,0,1.652,0v-22.6h8.036v22.6a.826.826,0,0,0,1.652,0V269.364h20.42v2.373h-7.788a.826.826,0,0,0-.826.826v9.243a.826.826,0,0,0,1.651,0v-8.417h6.962v8.417a.826.826,0,0,0,1.652,0V268.538A.826.826,0,0,0,2225.534,267.712ZM2208.1,243.267l-1,7.486h-4.551l.334-7.486Zm-17.844-7.008c.282-.8,3.4-2.1,8.358-2.1s8.077,1.3,8.359,2.1l-2.219,5.356h-12.281Zm10.972,7.008-.334,7.486h-4.557l-.334-7.486Zm-12.1,0h5.22l.334,7.486h-4.551Zm13.879,14.289h-8.786l-3.3-5.152h15.39Z\" transform=\"translate(-20.883 0)\"/></g></svg></span> </div><div class=\"lapm-cad-map-key-dropdown-item-label\"> <div class=\"lapm-cad-map-key-dropdown-item-label-inner\">Terminal</div> </div> </div> </div> </div> <button class=\"lapm-map-screen-cross\" data-screen=\"cad-map\" type=\"button\"></button> <div class=\"lapm-map-overlay\" data-overlay=\"cad-map\"><div class=\"lapm-outer-cell\"><div class=\"lapm-inner-cell\"><div class=\"lapm-map-overlay-inner\"><h3 class=\"lapm-map-overlay-subtext\">Car Park Name</h3><h2 class=\"lapm-map-overlay-text\">Zoom in to scale the map, then drag to move around the car park</h2><img src=\" https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/grabber.svg\" alt=\"Swipe Gesture\" class=\"lapm-map-overlay-icon\" ></div></div></div></div> <div class=\"lapm-cad-map-zoom-container\"> <img alt=\"CAD Map\" class=\"lapm-cad-map-pinchzoomer\"/> </div> <div class=\"lapm-cad-map-levels\"> </div></div></div> <div class=\"lapm-map-container\"><!-- <button class=\"lapm-map-screen-clear lapm-map-clear lapm-btn\" type=\"button\">Clear Filters</button>--> <div class=\"lapm-map\"></div> <div class=\"lapm-map-overlay\" data-overlay=\"airport-map\"><div class=\"lapm-outer-cell\"><div class=\"lapm-inner-cell\"><div class=\"lapm-map-overlay-inner\"><h2 class=\"lapm-map-overlay-text\">Zoom and drag the map to navigate.</h2><img src=\" https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/grabber.svg\" alt=\"Swipe Gesture\" class=\"lapm-map-overlay-icon\" ></div></div></div></div> </div></div> </div>"); var vbopGlobalJS = document.createElement('script'); vbopGlobalJS.type = "text/javascript"; vbopGlobalJS.text = '                var lapmGlobals = {                build: 2019120101,                carParks:        [  {    \"id\": 0,    \"name\": \"Terminal Car Park 1\",    \"bookingURL\": \"https://www.london-luton.co.uk/parking/terminal-car-park-1\",    \"cadLevels\": 5,    \"coordinates\":  [      {        \"desktopLeft\": 345,        \"desktopTop\":  525,        \"tabletLeft\": 170,        \"tabletTop\":  410,        \"mobileLeft\": 157,        \"mobileTop\":  320      }    ],    \"distanceToTerminal\": 4,    \"distanceToTerminalBus\": null,    \"distanceToTerminalWalk\": \"4-minute walk to terminal\",    \"description\": \"Terminal Car Park 1 is the closest car park to the terminal, offering secure, on-site parking just a 4-minute walk to the terminal entrance.\",    \"facilities\": [\"closest-to-terminal\", \"disabled-parking\", \"ev-chargers\", \"height-restriction\"],    \"freeParking\": null,    \"mapMarkerShow\": true  },  {    \"id\": 1,    \"name\": \"Terminal Car Park 2\",    \"bookingURL\": \"https://www.london-luton.co.uk/parking/terminal-car-park-2\",    \"cadLevels\": 5,    \"coordinates\":  [      {        \"desktopLeft\": 580,        \"desktopTop\":  497,        \"tabletLeft\": 335,        \"tabletTop\":  395,        \"mobileLeft\": 285,        \"mobileTop\":  313      }    ],    \"distanceToTerminal\": 5,    \"distanceToTerminalBus\": null,    \"distanceToTerminalWalk\": \"5-minute walk to the terminal\",    \"description\": \"Our newest car park, Terminal Car Park 2, offers secure, on-site parking just a 5-minute walk to the terminal entrance.\",    \"facilities\": [\"closest-to-terminal\", \"disabled-parking\", \"height-restriction\"],    \"freeParking\": null,    \"mapMarkerShow\": true  },  {    \"id\": 2,    \"name\": \"Mid Stay Car Park\",    \"bookingURL\": \"https://www.london-luton.co.uk/parking/mid-stay-car-park\",    \"cadLevels\": 1,    \"coordinates\":  [      {        \"desktopLeft\": 192,        \"desktopTop\":  575,        \"tabletLeft\": 60,        \"tabletTop\":  430,        \"mobileLeft\": 75,        \"mobileTop\":  349      }    ],    \"distanceToTerminal\": 10,    \"distanceToTerminalBus\": null,    \"distanceToTerminalWalk\": \"10-minute walk to terminal\",    \"description\": \"Our Mid Stay Car Park offers secure, on-site parking and is just a 10-minute walk to the terminal.\",    \"facilities\": [\"disabled-parking\", \"motorbike\"],    \"freeParking\": \"15 minutes FREE drop off\",    \"mapMarkerShow\": true  },  {    \"id\": 3,    \"name\": \"Long Stay Car Park\",    \"bookingURL\": \"https://www.london-luton.co.uk/parking/long-stay-car-park\",    \"cadLevels\": 1,    \"coordinates\":  [      {        \"desktopLeft\": 698,        \"desktopTop\":  267,        \"tabletLeft\": 400,        \"tabletTop\":  222,        \"mobileLeft\": 340,        \"mobileTop\":  222      }    ],    \"distanceToTerminal\": 10,    \"distanceToTerminalBus\": \"10-minute shuttle bus ride\",    \"distanceToTerminalWalk\": null,    \"description\": \"Our Long Stay Car Park offers secure, on-site parking and is just 10 minutes away from the terminal. The shuttle bus to and from the terminal runs every 20 minutes.\",    \"facilities\": [\"bus-transfer\", \"disabled-parking\"],    \"freeParking\": \"1 hour FREE parking\",    \"mapMarkerShow\": true  },  {    \"id\": 4,    \"name\": \"Priority Parking Meet & Greet\",    \"bookingURL\": \"https://www.london-luton.co.uk/parking/priority-car-park-meet-greet-service\",    \"cadLevels\": 1,    \"coordinates\":  [      {        \"desktopLeft\": 395,        \"desktopTop\":  457,        \"tabletLeft\": 195,        \"tabletTop\":  360,        \"mobileLeft\": 188,        \"mobileTop\":  283      }    ],    \"distanceToTerminal\": 3,    \"distanceToTerminalBus\": null,    \"distanceToTerminalWalk\": \"3-minute walk to terminal\",    \"description\": \"This speedy service is the most convenient way to park your car at LLA. Simply drop off your car at the Priority Parking reception on level 2 and take a short walk to the terminal for a hassle-free start to your holiday.\",    \"facilities\": [\"closest-to-terminal\", \"disabled-parking\", \"height-restriction\", \"meet-and-greet\"],    \"freeParking\": null,    \"mapMarkerShow\": true  }],                cdnUrl:            \"https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/\",                chosenCadMap:      0,                chosenCarPark:     0,                environment:       \"PRODUCTION\",                landingPageUrl:    \"https://www.london-luton.co.uk/parking-map\",                mapCategoryFilter: [],                mode:              null,                widgetUrl:         \"https://www.london-luton.co.uk/parking/map-of-car-parking\",                windowWidth:       0            };        '; vbopParentEl[0].appendChild(vbopGlobalJS); var vbopStyle = document.createElement('style'); var vbopStyleObj = document.createTextNode("@charset 'UTF-8';@font-face{font-family:'LLALight';src:url(https://londonlutonairport.azureedge.net/websiteassets/Fonts/lla_light-webfont.eot),url(https://londonlutonairport.azureedge.net/websiteassets/Fonts/lla_light-webfont.ttf) format('truetype'),url(https://londonlutonairport.azureedge.net/websiteassets/Fonts/lla_light-webfont.svg) format('svg')}@font-face{font-family:'LLARegular';src:url(https://londonlutonairport.azureedge.net/websiteassets/Fonts/lla_regular-webfont.eot),url(https://londonlutonairport.azureedge.net/websiteassets/Fonts/lla_regular-webfont.ttf) format('truetype'),url(https://londonlutonairport.azureedge.net/websiteassets/Fonts/lla_regular-webfont.svg) format('svg')}.luton-airport-parking-map-container{padding:0;color:#5f6061;position:relative}*{box-sizing:border-box}.luton-airport-parking-map-container img{max-width:100%;display:block}.luton-airport-parking-map-container p{margin:0;padding:0;line-height:1.2}.luton-airport-parking-map-container p a{font-weight:600}.luton-airport-parking-map-container ol,.luton-airport-parking-map-container ul{margin:0;padding:0}.luton-airport-parking-map-container ol li,.luton-airport-parking-map-container ul li{list-style:none}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-divider{display:none}}.luton-airport-parking-map-container .lapm-divider hr{border:rgba(0,0,0,.16) 1px solid;margin:0 auto}.luton-airport-parking-map-container a,.luton-airport-parking-map-container a:focus,.luton-airport-parking-map-container a:hover,.luton-airport-parking-map-container a:visited{outline:0;text-decoration:none}.lapm-container{margin:0 auto;max-width:780px;padding:0 15px}.lapm-outer-cell{display:table;height:100%;width:100%}.lapm-inner-cell{display:table-cell;vertical-align:middle}.luton-airport-parking-map-container h1,.luton-airport-parking-map-container h2{font-family:'LLARegular',sans-serif;font-size:40px;font-weight:500;letter-spacing:.01em;line-height:1.2;margin:0}@media only screen and (min-width:1000px){.luton-airport-parking-map-container h1{font-size:58px}}.luton-airport-parking-map-container h2{font-size:21px}@media only screen and (min-width:1000px){.luton-airport-parking-map-container h2{font-size:40px}}.luton-airport-parking-map-container,.luton-airport-parking-map-container h3,.luton-airport-parking-map-container h6{font-family:'LLALight',sans-serif;font-size:18px;font-weight:300;letter-spacing:.01em;line-height:1.2;margin:0}@media only screen and (min-width:1000px){.luton-airport-parking-map-container h3{font-size:20px}}.luton-airport-parking-map-container h4,.luton-airport-parking-map-container h5{font-family:'LLARegular',sans-serif;font-weight:500;letter-spacing:.01em;margin:0}.luton-airport-parking-map-container h4{font-size:16px;line-height:1.1;text-transform:uppercase}@media only screen and (min-width:1000px){.luton-airport-parking-map-container h4{font-size:20px}}.luton-airport-parking-map-container h5{font-size:12px;line-height:1.2}@media only screen and (min-width:1000px){.luton-airport-parking-map-container h5{font-size:16px}}.luton-airport-parking-map-container,.luton-airport-parking-map-container h6{font-size:13px}@media only screen and (min-width:1000px){.luton-airport-parking-map-container h6{font-size:16px}}.luton-airport-parking-map-container{font-size:14px}@media only screen and (min-width:1000px){.luton-airport-parking-map-container{font-size:16px}}body.device-mac .lapm-btn{padding:10px!important}.marker,.slick-slide img,.zoomHolder img{display:block}.fullscreenToggle,.zoomIn,.zoomOut{width:30px;height:30px;overflow:hidden;position:relative;display:block;z-index:100;margin:5px 0}.zoomIn,.zoomOut{cursor:pointer}.zoomIn{background-position:0 0}.zoomOut{background-position:-30px 0}.fullscreenToggle{background-position:-60px 0;cursor:pointer}.zoomIn.on,.zoomOut.on{opacity:1;-moz-opacity:1;-khtml-opacity:1;cursor:pointer}.zoomIn.off,.zoomOut.off{opacity:.5;-moz-opacity:.5;-khtml-opacity:.5;cursor:auto}.controlHolder{border-radius:5px;background:rgba(0,0,0,.4);position:absolute;right:10px;top:10px;padding:5px;z-index:100}.fullscreenDiv,.marker{left:0;top:0;position:absolute!important}.fullscreenToggle.on{background-position:-90px 0}.fullscreenToggle.off{background-position:-60px 0}.fullscreenDiv{width:auto!important;height:auto!important;right:0!important;bottom:0!important;background:#fff;z-index:999999;overflow:hidden;touch-action:none}.marker{bottom:auto!important;right:auto!important;cursor:pointer}.zoomHolder{-webkit-tap-highlight-color:transparent}.fullscreenDiv *{touch-action:none}.rangeslider,.rangeslider__fill{display:block;-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,.3);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.3);box-shadow:inset 0 1px 3px rgba(0,0,0,.3)}.rangeslider__fill{-moz-border-radius:40px;-webkit-border-radius:40px;border-radius:40px}.rangeslider{background:#e6e6e6;position:relative}.rangeslider--horizontal{height:20px;width:100%}.rangeslider--vertical{width:20px;min-height:150px;max-height:100%}.rangeslider--disabled{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);opacity:.4}.rangeslider__fill{background:#0f0;position:absolute}.rangeslider--horizontal .rangeslider__fill{top:0;height:100%}.rangeslider--vertical .rangeslider__fill{bottom:0;width:100%}.rangeslider__handle,.rangeslider__handle:after{position:absolute;background-size:100%;-moz-border-radius:50%;-webkit-border-radius:50%;border-radius:50%}.rangeslider__handle{background:#fff;border:1px solid #ccc;cursor:pointer;display:inline-block;width:40px;height:40px;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIwLjAiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4xIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g);background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,rgba(255,255,255,0)),color-stop(100%,rgba(0,0,0,.1)));background-image:-moz-linear-gradient(rgba(255,255,255,0),rgba(0,0,0,.1));background-image:-webkit-linear-gradient(rgba(255,255,255,0),rgba(0,0,0,.1));background-image:linear-gradient(rgba(255,255,255,0),rgba(0,0,0,.1));-moz-box-shadow:0 0 8px rgba(0,0,0,.3);-webkit-box-shadow:0 0 8px rgba(0,0,0,.3);box-shadow:0 0 8px rgba(0,0,0,.3)}.rangeslider__handle:after{content:'';display:block;width:18px;height:18px;margin:auto;top:0;right:0;bottom:0;left:0;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjEzIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIiBzdG9wLW9wYWNpdHk9IjAuMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==);background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,rgba(0,0,0,.13)),color-stop(100%,rgba(255,255,255,0)));background-image:-moz-linear-gradient(rgba(0,0,0,.13),rgba(255,255,255,0));background-image:-webkit-linear-gradient(rgba(0,0,0,.13),rgba(255,255,255,0));background-image:linear-gradient(rgba(0,0,0,.13),rgba(255,255,255,0))}.rangeslider--active .rangeslider__handle,.rangeslider__handle:active{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjEiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMC4xMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==);background-size:100%;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,rgba(0,0,0,.1)),color-stop(100%,rgba(0,0,0,.12)));background-image:-moz-linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.12));background-image:-webkit-linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.12));background-image:linear-gradient(rgba(0,0,0,.1),rgba(0,0,0,.12))}.rangeslider--horizontal .rangeslider__handle{top:-10px;touch-action:pan-y;-ms-touch-action:pan-y}.rangeslider--vertical .rangeslider__handle{left:-10px;touch-action:pan-x;-ms-touch-action:pan-x}input[type=range]:focus+.rangeslider .rangeslider__handle{-moz-box-shadow:0 0 8px rgba(255,0,255,.9);-webkit-box-shadow:0 0 8px rgba(255,0,255,.9);box-shadow:0 0 8px rgba(255,0,255,.9)}.slick-list,.slick-slider{position:relative;display:block}.slick-slider{box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{overflow:hidden;margin:0;padding:0}.slick-dots li button:focus,.slick-dots li button:hover,.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;left:0;top:0;display:block;margin-left:auto;margin-right:auto}.slick-track:after,.slick-track:before{content:'';display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}[dir=rtl] .slick-slide{float:right}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}@font-face{font-family:'slick';src:url(https://londonluton-uat.quba.co.uk/cmstemplates/londonluton/includes/fonts/thirdparty/slick.eot);src:url(https://londonluton-uat.quba.co.uk/cmstemplates/londonluton/includes/fonts/thirdparty/slick.eot?#iefix) format('embedded-opentype'),url(https://londonluton-uat.quba.co.uk/cmstemplates/londonluton/includes/fonts/thirdparty/slick.woff) format('woff'),url(https://londonluton-uat.quba.co.uk/cmstemplates/londonluton/includes/fonts/thirdparty/slick.ttf) format('truetype'),url(https://londonluton-uat.quba.co.uk/cmstemplates/londonluton/includes/fonts/thirdparty/slick.svg#slick) format('svg');font-weight:400;font-style:normal}.slick-next,.slick-prev{position:absolute;display:block;height:20px;width:20px;line-height:0;font-size:0;cursor:pointer;background:0 0;color:transparent;top:50%;-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translate(0,-50%);padding:0;border:0;outline:0}.slick-next:focus,.slick-next:hover,.slick-prev:focus,.slick-prev:hover{outline:0;background:0 0;color:transparent}.slick-dots li button:focus:before,.slick-dots li button:hover:before,.slick-next:focus:before,.slick-next:hover:before,.slick-prev:focus:before,.slick-prev:hover:before{opacity:1}.slick-next.slick-disabled:before,.slick-prev.slick-disabled:before{opacity:.25}.slick-dots li button:before,.slick-next:before,.slick-prev:before{font-family:'slick';font-size:20px;line-height:1;color:#fff;opacity:.75;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:-25px}[dir=rtl] .slick-prev{left:auto;right:-25px}.slick-prev:before{content:'←'}.slick-next:before,[dir=rtl] .slick-prev:before{content:'→'}.slick-next{right:-25px}[dir=rtl] .slick-next{left:-25px;right:auto}[dir=rtl] .slick-next:before{content:'←'}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{position:absolute;bottom:-25px;list-style:none;display:block;text-align:center;padding:0;margin:0;width:100%}.slick-dots li{position:relative;display:inline-block;height:20px;width:20px;margin:0 5px;padding:0;cursor:pointer}.slick-dots li button{border:0;background:0 0;display:block;height:20px;width:20px;outline:0;line-height:0;font-size:0;color:transparent;padding:5px;cursor:pointer}.slick-dots li button:before{position:absolute;top:0;left:0;content:'•';width:20px;height:20px;font-size:6px;line-height:20px;text-align:center;color:#000;opacity:.25}.slick-dots li.slick-active button:before{color:#000;opacity:.75}.lapm-intro-text{margin:auto;max-width:300px;padding:32px 0 20px;text-align:center}@media only screen and (min-width:750px){.lapm-intro-text{max-width:none;padding:2px 0 30px}}@media only screen and (min-width:1200px){.lapm-intro-text{padding:32px 0 60px}}.lapm-intro-text .lapm-intro-text-heading{color:#5f6061;padding-bottom:10px;text-transform:uppercase}.lapm-intro-text .lapm-intro-text-description,.lapm-intro-text .lapm-intro-text-description span{font-family:'LLALight',sans-serif;font-size:18px;font-weight:300;letter-spacing:.01em;line-height:1.2;margin:0}@media only screen and (min-width:1000px){.lapm-intro-text .lapm-intro-text-description{font-size:20px}}.lapm-intro-text .lapm-intro-text-description span{font-family:'LLARegular',sans-serif;font-weight:500}@media only screen and (min-width:1000px){.lapm-intro-text .lapm-intro-text-description span{font-size:20px}}.luton-airport-parking-map-container .lapm-map-background{overflow:hidden;position:relative}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background{padding:30px 0 0}}@media only screen and (min-width:1200px){.luton-airport-parking-map-container .lapm-map-background{padding:40px 0 0}}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-filters-container{margin:0 auto;overflow:hidden;position:relative;width:540px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-filters-container{margin:0 auto;overflow:hidden;position:relative;width:970px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container{height:553px;margin:0 auto;max-width:480px;overflow-x:auto;overflow-y:hidden;position:relative;width:100%;z-index:0}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container{height:600px;max-width:540px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container{height:728px;max-width:970px}}@media only screen and (min-width:1200px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container{overflow-x:hidden}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear{-webkit-appearance:none;-ms-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;border:0;-webkit-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px;box-shadow:0 3px 6px rgba(0,0,0,.16);cursor:pointer;height:auto;min-height:auto!important;outline:0;overflow:hidden;padding:10px;position:relative;text-transform:uppercase;-webkit-transition:all .5s;-ms-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s;font-family:'LLARegular',sans-serif;font-size:12px;font-weight:500;letter-spacing:.01em;line-height:1.2;background-color:#00c7b1;color:#fff;margin:0 0 10px;z-index:100;left:15%;top:10px}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear{font-size:16px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear:hover{bottom:2px}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear{font-size:14px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear.active,.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear:active,.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear:hover{background-color:#3c9a8e}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear{margin-bottom:0;left:3%}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map-clear{margin-bottom:0;left:5%}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map{background:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/map/map-mobile.svg?v=6) center no-repeat #fff;-webkit-background-size:cover;-ms-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;height:480px;margin:0 auto;overflow-y:hidden;position:relative;width:480px}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map{width:100%;height:600px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map{margin:0 auto 0 60px;background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/map/map-desktop.svg?v=6);height:728px;width:910px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker{background-color:transparent;background-position:center;background-repeat:no-repeat;background-size:100%;border:0;box-shadow:none;cursor:pointer;outline:0;padding:0;position:absolute}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='0']{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-terminal-car-park-1.svg);height:34px;width:110px}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='0']{height:40px;width:135px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='0']{height:57px;width:184px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='0']:hover{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-terminal-car-park-1-active.svg)}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='1']{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-terminal-car-park-2.svg);height:42px;width:103px}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='1']{height:54px;width:133px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='1']{height:70px;width:172px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='1']:hover{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-terminal-car-park-2-active.svg)}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='2']{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-mid-stay-car-park.svg);height:29px;width:76px}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='2']{height:39px;width:100px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='2']{height:48px;width:127px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='2']:hover{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-mid-stay-car-park-active.svg)}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='3']{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-long-stay-car-park.svg);height:29px;width:84px}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='3']{height:39px;width:110px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='3']{height:49px;width:140px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='3']:hover{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-long-stay-car-park-active.svg)}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='4']{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-priority-parking-meet-greet.svg);height:30px;width:79px}@media only screen and (min-width:750px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='4']{height:40px;width:110px}}@media only screen and (min-width:1000px){.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='4']{height:50px;width:132px}}.luton-airport-parking-map-container .lapm-map-background .lapm-map-container .lapm-map .lapm-map-marker[data-car-park-id='4']:hover{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/markers/marker-priority-parking-meet-greet-active.svg)}.lapm-map-overlay,.lapm-map-screen{left:0;position:absolute;width:100%;z-index:2}.lapm-map-overlay{background-color:rgba(0,199,177,.75);-webkit-backdrop-filter:blur(6px);-ms-backdrop-filter:blur(6px);-moz-backdrop-filter:blur(6px);-o-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-sizing:border-box;height:100%;text-align:center;text-transform:uppercase;top:0}.lapm-map-overlay[data-overlay=airport-map]{height:calc(100% - 82px);width:480px}@media only screen and (min-width:750px){.lapm-map-overlay[data-overlay=airport-map]{display:none}}@media only screen and (min-width:1000px){.lapm-map-overlay[data-overlay=airport-map]{display:none}}.lapm-map-overlay[data-overlay=cad-map]{height:calc(100vh - 119px)}@media only screen and (min-width:1000px){.lapm-map-overlay[data-overlay=cad-map]{height:100%}}.lapm-map-overlay .lapm-map-overlay-inner{margin:0 auto;max-width:375px}@media only screen and (min-width:1000px){.lapm-map-overlay .lapm-map-overlay-inner{max-width:475px}}.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-icon{height:22px;margin:0 auto;width:20px}@media only screen and (min-width:1000px){.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-icon{height:36px;width:33px}}.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-subtext{font-family:'LLALight',sans-serif;font-size:18px;font-weight:300;letter-spacing:.01em;line-height:1.2;margin:0;color:#fff;padding:0 0 15px}@media only screen and (min-width:1000px){.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-subtext{font-size:25px;padding:0 0 25px}}.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-text{font-family:'LLARegular',sans-serif;font-size:21px;font-weight:500;letter-spacing:.01em;line-height:1.2;margin:0;color:#fff;padding:0 0 15px}@media only screen and (min-width:1000px){.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-text{font-size:40px;padding:0 0 25px}}.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-button{background-color:#fff;color:#5f6061}.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-button.active,.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-button:active,.lapm-map-overlay .lapm-map-overlay-inner .lapm-map-overlay-button:hover{background-color:#5f6061;color:#fff}.lapm-map-screen{background:#fff;-webkit-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-moz-border-top-right-radius:5px;-o-border-top-right-radius:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-moz-border-top-left-radius:5px;-o-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;bottom:-100%;padding:30px 30px 0;-webkit-transition:left .5s,bottom 1s,width .5s;-ms-transition:left .5s,bottom 1s,width .5s;-moz-transition:left .5s,bottom 1s,width .5s;-o-transition:left .5s,bottom 1s,width .5s;transition:left .5s,bottom 1s,width .5s}@media only screen and (min-width:1000px){.lapm-map-screen{border-radius:0;bottom:auto;box-shadow:3px 0 20px rgba(0,0,0,.06);display:flex;height:100%;flex-direction:column;justify-content:center;left:-100%;padding:0 30px;position:absolute;top:0;width:380px}}.lapm-map-screen.active{bottom:83px}@media only screen and (min-width:1000px){.lapm-map-screen.active{bottom:auto;left:60px}}.lapm-map-screen.full-screen{width:100%}.lapm-map-screen.full-screen:after{display:none}.lapm-map-screen .lapm-map-screen-inner-desk{margin-bottom:40px;overflow-y:auto;position:relative;z-index:1;display:none}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-inner-desk{display:flex;flex-direction:column;justify-content:center;width:380px;box-shadow:3px 0 20px rgba(0,0,0,.06);padding-bottom:0}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen .lapm-map-screen-inner-desk{overflow:hidden}}.lapm-map-screen .lapm-map-screen-inner-mob{margin-bottom:40px;overflow-y:auto;position:relative;z-index:1;display:block}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-inner-mob{width:380px;display:none}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen .lapm-map-screen-inner-mob{overflow:hidden}}.lapm-map-screen .slick-arrow,.lapm-map-screen .slick-dots button{font-weight:700;box-shadow:none;min-height:auto}.lapm-map-screen .slick-arrow:before,.lapm-map-screen .slick-dots button:before{color:#000}.lapm-map-screen .lapm-map-screen-details{box-shadow:0 3px 6px rgba(112,112,112,.23);-webkit-border-radius:5px 5px 0 0;-ms-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;-o-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;margin:0 auto;max-width:380px;padding:30px 30px 10px;position:relative}@media only screen and (min-width:750px){.lapm-map-screen .lapm-map-screen-details{max-width:500px}}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-details{-webkit-border-radius:none;-ms-border-radius:none;-moz-border-radius:none;-o-border-radius:none;border-radius:none;box-shadow:none}}.lapm-map-screen .lapm-map-screen-details>.lapm-map-screen-cross{display:block}.lapm-map-screen .lapm-map-screen-details-mob-slide{padding:0}@media only screen and (min-width:750px){.lapm-map-screen .lapm-map-screen-details-mob-slide{padding:5px 20px}}.lapm-map-screen .lapm-map-screen-cross{background:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cross-cyan.svg) center no-repeat;background-size:100%;border:0;box-shadow:none;cursor:pointer;height:15px;min-height:auto!important;outline:0;padding:0;position:absolute;right:30px;top:30px;width:15px;z-index:2}.lapm-map-screen .lapm-map-screen-cross:hover{background:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cross-grey.svg) center no-repeat;background-size:100%}@media only screen and (max-width:750px){.lapm-map-screen .lapm-map-screen-cross{right:7px;top:15px}}@media only screen and (max-width:1000px){.lapm-map-screen .lapm-map-screen-cross{right:7px;top:10px}}.lapm-map-screen .lapm-map-screen-heading span,.lapm-map-screen[data-filter=car-park] .lapm-car-park-heading span{font-size:16px;letter-spacing:.01em;line-height:1.1;margin:0;text-transform:uppercase;font-family:'LLALight',sans-serif;font-weight:300}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-heading span{font-size:20px}}.lapm-map-screen .lapm-map-screen-description{padding-top:15px}@media only screen and (min-width:1200px){.lapm-map-screen .lapm-map-screen-description{padding-top:30px}}.lapm-map-screen .lapm-map-screen-help{display:block;padding-top:30px}@media only screen and (min-width:750px){.lapm-map-screen .lapm-map-screen-help{display:none}}.lapm-map-screen .lapm-map-screen-disclaimer,.lapm-map-screen .lapm-map-screen-error{padding-bottom:30px}.lapm-map-screen .lapm-map-screen-error{color:#fe6473;display:none}.lapm-map-screen .lapm-map-screen-done{-webkit-appearance:none;-ms-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;border:0;-webkit-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px;box-shadow:0 3px 6px rgba(0,0,0,.16);cursor:pointer;height:auto;min-height:auto!important;outline:0;overflow:hidden;padding:10px;position:relative;text-transform:uppercase;-webkit-transition:all .5s;-ms-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s;font-family:'LLARegular',sans-serif;font-size:12px;font-weight:500;letter-spacing:.01em;line-height:1.2;background-color:#00c7b1;color:#fff;margin:30px 0 10px}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-done{font-size:16px}}.lapm-map-screen .lapm-map-screen-done:hover{bottom:2px}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-done{font-size:14px}}.lapm-map-screen .lapm-map-screen-done.active,.lapm-map-screen .lapm-map-screen-done:active,.lapm-map-screen .lapm-map-screen-done:hover{background-color:#3c9a8e}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-done{margin-bottom:0}}.lapm-map-screen .lapm-map-screen-clear{font-family:'LLALight',sans-serif;font-size:13px;letter-spacing:.01em;line-height:1.2;margin:0;border:0;text-decoration:underline;color:#5f6061;background:0 0;padding:3px;font-weight:400}@media only screen and (min-width:1000px){.lapm-map-screen .lapm-map-screen-clear{font-size:13px;margin-bottom:0}}.lapm-map-screen .lapm-map-screen-clear:hover{position:relative;bottom:2px;color:#00c7b1}.lapm-map-screen .lapm-map-screen-clear:focus{outline:0}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance svg path,.lapm-map-screen svg .a{fill:#5f6061;stroke:transparent}.lapm-map-screen[data-filter=car-park] .lapm-cad-map{display:none;height:100%;position:relative;width:100%}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map{margin-left:60px;width:calc(100% - 60px)}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key{left:15px;position:absolute;top:15px;z-index:2}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key{left:20px;top:20px}}@media only screen and (min-width:1200px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key{left:30px;top:30px}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle{-webkit-appearance:none;-ms-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;border:0;-webkit-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px;cursor:pointer;height:auto;min-height:auto!important;outline:0;overflow:hidden;text-transform:uppercase;-webkit-transition:all .5s;-ms-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s;font-family:'LLARegular',sans-serif;font-size:12px;font-weight:500;letter-spacing:.01em;line-height:1.2;margin:0;background-color:#fff;color:#5f6061;border-bottom:2px solid transparent;box-shadow:0 3px 7px rgba(0,0,0,.16);padding:12px 15px;position:relative;text-align:left;width:90px;z-index:1}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle{font-size:16px}}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle{font-size:14px}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle:active{background-color:#5f6061;color:#fff}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle{font-size:14px}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle.active,.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle:hover{background-color:#fff;color:#5f6061;bottom:0}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle.active{border-bottom:2px solid rgba(112,112,112,.23);-webkit-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-moz-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-moz-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:10px;-ms-border-top-left-radius:10px;-moz-border-top-left-radius:10px;-o-border-top-left-radius:10px;border-top-left-radius:10px;-webkit-border-top-right-radius:10px;-ms-border-top-right-radius:10px;-moz-border-top-right-radius:10px;-o-border-top-right-radius:10px;border-top-right-radius:10px;-moz-border-radius-bottomleft:0;-moz-border-radius-bottomright:0;-moz-border-radius-topleft:10px;-moz-border-radius-topright:10px;width:230px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle.active span{background:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cross-cyan.svg) center no-repeat;background-size:100%;border:0;cursor:pointer;height:10px;outline:0;padding:0;position:absolute;right:15px;top:15px;width:10px;z-index:2}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-toggle.active span:hover{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cross-grey.svg)}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown{background-color:#fff;-webkit-border-bottom-right-radius:5px;-ms-border-bottom-right-radius:5px;-moz-border-bottom-right-radius:5px;-o-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-webkit-border-bottom-left-radius:5px;-ms-border-bottom-left-radius:5px;-moz-border-bottom-left-radius:5px;-o-border-bottom-left-radius:5px;border-bottom-left-radius:5px;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;box-shadow:0 3px 7px rgba(0,0,0,.16);display:none;height:250px;overflow-y:auto;padding:0 0 20px;position:relative;z-index:2}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown{height:425px}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown{overflow:hidden}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item{height:45px;width:230px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image,.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-label{display:inline-block;vertical-align:middle}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image{height:100%;text-align:center;width:70px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span,.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-label .lapm-cad-map-key-dropdown-item-label-inner{align-items:center;display:flex;height:100%}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span svg{display:block;margin:0 auto}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-cash-machine svg{height:20px;width:28px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-disabled-parking svg{height:21px;width:16px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-ev-charger svg{height:16px;width:27px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-lift svg{height:22px;width:19px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-meet-and-greet svg{height:20px;width:25px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-motorbike svg{height:29px;width:36px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-parking-payment svg,.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-stairs svg{height:25px;width:19px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-image span.svg-terminal svg{height:29px;width:40px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-label{font-family:'LLALight',sans-serif;font-size:13px;font-weight:300;letter-spacing:.01em;line-height:1.2;margin:0;height:100%;padding:0 10px;width:calc(100% - 70px)}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-key .lapm-cad-map-key-dropdown .lapm-cad-map-key-dropdown-item .lapm-cad-map-key-dropdown-item-label{font-size:13px}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container{background-color:#fff;cursor:grab;height:calc(100% - 45px)!important;position:relative;width:100%;z-index:1}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container{height:100%!important}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder{background-color:#fff;bottom:15px;box-shadow:0 3px 6px rgba(0,0,0,.16);display:none;padding:0;right:15px;top:auto}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder{display:block}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder:before{background-color:#707070;content:'';height:2px;left:0;opacity:.09;position:absolute;top:40px;width:100%;z-index:101}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder div:nth-child(-n+2){display:block}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .zoomIn,.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .zoomOut{-webkit-border-radius:3px;-ms-border-radius:3px;-moz-border-radius:3px;-o-border-radius:3px;border-radius:3px;display:none;height:40px;margin:0;width:40px}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .zoomIn:first-child-of-type,.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .zoomOut:first-child-of-type{display:block}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .zoomIn{background:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad/zoom-in.svg) center no-repeat #fff}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .zoomOut{background:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad/zoom-out.svg) center no-repeat #fff}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-zoom-container .controlHolder .fullscreenToggle{display:none}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-levels{background-color:#fff;bottom:0;left:0;padding:10px 0;position:absolute;text-align:center;width:100%;z-index:3}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-levels{box-shadow:3px 0 20px rgba(0,0,0,.06);display:flex;flex-direction:column;height:100%;justify-content:center;left:-60px;padding:0;width:60px}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-levels .lapm-cad-map-level{font-family:'LLALight',sans-serif;font-size:13px;font-weight:300;letter-spacing:.01em;line-height:1.2;-webkit-appearance:none;-ms-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;background:0 0;border:0;box-shadow:none;color:#5f6061;cursor:pointer;height:auto;margin:0 13px;min-height:auto!important;outline:0;padding:5px;text-align:center;-webkit-transition:all .5s;-ms-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-levels .lapm-cad-map-level{font-size:16px;display:block;margin:20px 0}}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-levels .lapm-cad-map-level:hover{bottom:0}.lapm-map-screen[data-filter=car-park] .lapm-cad-map .lapm-cad-map-levels .lapm-cad-map-level.active{color:#00c7b1;cursor:auto}.lapm-map-screen[data-filter=car-park]{border-radius:0;display:none;padding:0;width:100%}@media only screen and (max-width:749px){.lapm-map-screen[data-filter=car-park]{box-shadow:none}}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park]{width:910px}}.lapm-map-screen[data-filter=car-park]:after{background-image:linear-gradient(rgba(255,255,255,0),rgba(255,255,255,.9));bottom:0;content:'';height:50px;left:0;position:absolute;width:100%;z-index:2}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park]:after{display:none}}.lapm-map-screen[data-filter=car-park].active{bottom:auto;top:0;-webkit-transition:none;-ms-transition:none;-moz-transition:none;-o-transition:none;transition:none}.lapm-map-screen[data-filter=car-park].active:before{background-color:#fff;content:'';height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park].active:before{display:none}.lapm-map-screen[data-filter=car-park].full-screen{width:calc(100% - 60px)}}.lapm-map-screen[data-filter=car-park][data-car-park=long-stay-car-park] .lapm-car-park-cad-preview-image{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad-preview/cad-map-preview-long-stay-car-park.svg?v=8);background-position:center 2%}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park][data-car-park=long-stay-car-park] .lapm-car-park-cad-preview-image{background-position:69% center;background-size:146%}}.lapm-map-screen[data-filter=car-park][data-car-park=mid-stay-car-park] .lapm-car-park-cad-preview-image{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad-preview/cad-map-preview-mid-stay-car-park.svg?v=8);background-position:center 69%}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park][data-car-park=mid-stay-car-park] .lapm-car-park-cad-preview-image{background-position:center}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen[data-filter=car-park][data-car-park=mid-stay-car-park] .lapm-car-park-cad-preview-image{background-position:25% center;background-size:152%}}.lapm-map-screen[data-filter=car-park][data-car-park=priority-parking-meet-greet] .lapm-car-park-cad-preview-image{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad-preview/cad-map-preview-priority-parking-meet-greet.svg?v=8)}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen[data-filter=car-park][data-car-park=priority-parking-meet-greet] .lapm-car-park-cad-preview-image{background-position:50% center;background-size:180%}}.lapm-map-screen[data-filter=car-park][data-car-park=terminal-car-park-1] .lapm-car-park-cad-preview-image{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad-preview/cad-map-preview-terminal-car-park-1.svg?v=8)}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen[data-filter=car-park][data-car-park=terminal-car-park-1] .lapm-car-park-cad-preview-image{background-position:50% center;background-size:180%}}.lapm-map-screen[data-filter=car-park][data-car-park=terminal-car-park-2] .lapm-car-park-cad-preview-image{background-image:url(https://www.london-luton.co.uk/Uploads/MediaLibrary/LondonLuton/Carpark/Interactive%20Map/svg/cad-preview/cad-map-preview-terminal-car-park-2.svg?v=8);background-position:center 68%}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park][data-car-park=terminal-car-park-2] .lapm-car-park-cad-preview-image{background-position:60% center}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen[data-filter=car-park][data-car-park=terminal-car-park-2] .lapm-car-park-cad-preview-image{background-position:50% center;background-size:180%}}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-heading span{font-size:20px}.lapm-map-screen[data-filter=car-park] .lapm-car-park-heading{padding-right:30px}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image{background-position:center center;background-repeat:no-repeat;-webkit-background-size:cover;-ms-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-color:#fff;height:205px;margin:0 auto;max-width:600px;width:100%}@media only screen and (min-width:750px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image{height:260px}}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image{height:100%;max-width:none;position:absolute;right:0;top:0;width:calc(100% - 380px)}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image[data-preview=top-preview]{display:none}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image[data-preview=side-preview],.rangeslider .rangeslider__handle:after{display:none}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image[data-preview=side-preview]{display:block}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cad-preview-image{height:728px;width:530px}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-bus-distance-to-terminal,.lapm-map-screen[data-filter=car-park] .lapm-car-park-description,.lapm-map-screen[data-filter=car-park] .lapm-car-park-disabled-spaces,.lapm-map-screen[data-filter=car-park] .lapm-car-park-total-spaces,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-distance-to-terminal,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-free-parking .lapm-car-park-facilities{padding-top:15px}@media only screen and (min-width:1200px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-bus-distance-to-terminal,.lapm-map-screen[data-filter=car-park] .lapm-car-park-description,.lapm-map-screen[data-filter=car-park] .lapm-car-park-disabled-spaces,.lapm-map-screen[data-filter=car-park] .lapm-car-park-total-spaces,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-distance-to-terminal,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-free-parking .lapm-car-park-facilities{padding-top:30px}}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-bus-distance-to-terminal,.lapm-map-screen[data-filter=car-park] .lapm-car-park-facilities,.lapm-map-screen[data-filter=car-park] .lapm-car-park-total-spaces,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-distance-to-terminal,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-free-parking{width:100%;box-sizing:border-box;float:left}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-bus-distance-to-terminal span,.lapm-map-screen[data-filter=car-park] .lapm-car-park-facilities span,.lapm-map-screen[data-filter=car-park] .lapm-car-park-total-spaces span,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-distance-to-terminal span,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-free-parking span{display:inline-block;vertical-align:middle;padding-left:5px;text-align:left;width:55px}.lapm-map-screen[data-filter=car-park] .lapm-car-park-bus-distance-to-terminal span.lapm-car-park-content-inner,.lapm-map-screen[data-filter=car-park] .lapm-car-park-facilities span.lapm-car-park-content-inner,.lapm-map-screen[data-filter=car-park] .lapm-car-park-total-spaces span.lapm-car-park-content-inner,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-distance-to-terminal span.lapm-car-park-content-inner,.lapm-map-screen[data-filter=car-park] .lapm-car-park-walk-free-parking span.lapm-car-park-content-inner{padding-left:20px;text-align:left;width:calc(100% - 60px)}.lapm-map-screen[data-filter=car-park] .lapm-car-park-description{line-height:1.4;padding-bottom:15px}.lapm-map-screen[data-filter=car-park] .car-park-facility{align-items:center;display:flex;height:60px;padding:0}.lapm-map-screen[data-filter=car-park] .svg-terminal-distance-walk svg{height:37px;width:21px}.lapm-map-screen[data-filter=car-park] .svg-terminal-distance-bus svg{height:29px;width:40px}.lapm-map-screen[data-filter=car-park] .svg-free-parking svg{height:30px;width:30px}.lapm-map-screen[data-filter=car-park] .svg-terminal svg{height:33px;width:45px}.lapm-map-screen[data-filter=car-park] .svg-terminal svg .a{fill:transparent}.lapm-map-screen[data-filter=car-park] .svg-disabled-parking svg{height:35px;width:26px}.lapm-map-screen[data-filter=car-park] .svg-ev-charger svg,.lapm-map-screen[data-filter=car-park] .svg-meet-and-greet svg{height:32px;width:40px}.lapm-map-screen[data-filter=car-park] .svg-height-restriction{font-size:14px;letter-spacing:.01em;line-height:1.2;margin:0;font-family:'LLARegular',sans-serif;font-weight:700}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .svg-height-restriction{font-size:16px}}.lapm-map-screen[data-filter=car-park] .svg-motorbike svg{height:33px;width:42px}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta{clear:both;float:none;text-align:right;display:flex;vertical-align:middle;justify-content:center}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta{padding-top:1px;display:block}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle{font-family:'LLARegular',sans-serif;font-size:12px;font-weight:500;letter-spacing:.01em;line-height:1.2;-webkit-appearance:none;-ms-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;border:0;-webkit-border-radius:5px;-ms-border-radius:5px;-moz-border-radius:5px;-o-border-radius:5px;border-radius:5px;box-shadow:0 3px 6px rgba(0,0,0,.16);cursor:pointer;height:auto;min-height:auto!important;outline:0;overflow:hidden;padding:10px;position:relative;text-transform:uppercase;-webkit-transition:all .5s;-ms-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s;background-color:#00c7b1;color:#fff;display:inline-block;max-width:100%;width:150px;margin:8px}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle{font-size:16px}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking:hover,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle:hover{bottom:2px}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking.active,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking:active,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking:hover,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle.active,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle:active,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle:hover{background-color:#3c9a8e}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking,.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle{width:180px;margin:15px 0}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking{text-align:center;display:flex;align-items:center;justify-content:center}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-book-parking{margin:10px 3px 10px 10px}}.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle{text-align:center;display:flex;align-items:center;justify-content:center}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=car-park] .lapm-car-park-cta .lapm-car-park-level-toggle{margin:10px}}.lapm-map-screen[data-filter=category],.lapm-map-screen[data-filter=distance]{background-color:rgba(255,255,255,.9)}.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container{overflow-x:auto;overflow-y:hidden;padding:30px 0;width:100%}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container{overflow:hidden}}.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities{width:100%}.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility{background-color:#5f6061;color:#fff;-webkit-appearance:none;-ms-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;border:0;box-shadow:0 3px 6px rgba(0,0,0,.16);cursor:pointer;height:auto;min-height:auto!important;outline:0;overflow:hidden;padding:10px;position:relative;text-transform:uppercase;-webkit-transition:all .5s;-ms-transition:all .5s;-moz-transition:all .5s;-o-transition:all .5s;transition:all .5s;font-family:'LLARegular',sans-serif;font-size:12px;font-weight:500;letter-spacing:.01em;line-height:1.2;-webkit-border-radius:20px;-ms-border-radius:20px;-moz-border-radius:20px;-o-border-radius:20px;border-radius:20px;box-shadow:none;margin:2.5px 5px 2.5px 0}.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility:active,.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility:hover{background-color:#5f6061}@media only screen and (min-width:1200px){.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility:active,.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility:hover{background-color:#e55765}}.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility.active{background-color:#fe6473}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility{font-size:16px}}.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility:hover{bottom:2px}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=category] .lapm-map-category-filter-facilities-container .lapm-map-category-filter-facilities .lapm-map-category-filter-facility{font-size:14px;margin:5.5px 15px 5.5px 0}}.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container{padding:30px 0}.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container .lapm-map-distance-filter-inner,.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container .lapm-map-distance-filter-value{display:inline-block;vertical-align:middle;box-sizing:border-box}.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container .lapm-map-distance-filter-inner{-webkit-border-radius:40px;-ms-border-radius:40px;-moz-border-radius:40px;-o-border-radius:40px;border-radius:40px;background-color:#fff;box-shadow:0 3px 6px rgba(0,0,0,.16);padding:0 10px;width:180px}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container .lapm-map-distance-filter-inner{width:230px}}.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container .lapm-map-distance-filter-value{font-family:'LLALight',sans-serif;font-size:13px;font-weight:300;letter-spacing:.01em;line-height:1.2;margin:0;text-align:center;width:90px}@media only screen and (min-width:1000px){.lapm-map-screen[data-filter=distance] .lapm-map-distance-filter-container .lapm-map-distance-filter-value{font-size:13px}}.lapm-map-filters-bar{background-color:#fff;-webkit-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-moz-border-top-right-radius:5px;-o-border-top-right-radius:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-moz-border-top-left-radius:5px;-o-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-topright:5px;bottom:0;left:0;padding:20px 15px;position:absolute;width:100%;z-index:3}@media only screen and (min-width:1000px){.lapm-map-filters-bar{border-radius:0;bottom:auto;box-shadow:5px 0 15px rgba(0,0,0,.06);height:100%;padding:20px 0;position:absolute;top:0;width:auto}}.lapm-map-filters-bar .lapm-map-filters-bar-icon{display:inline-block;vertical-align:middle;text-align:center;width:50%}@media only screen and (min-width:1000px){.lapm-map-filters-bar .lapm-map-filters-bar-icon{display:flex;flex-direction:column;height:50%;justify-content:flex-end;padding-bottom:50px;width:100%}.lapm-map-filters-bar .lapm-map-filters-bar-icon:last-child{justify-content:flex-start;padding:100px 0 0}}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category,.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance,.zoomHolder{position:relative}@media only screen and (min-width:1000px){.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category.active:after,.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance.active:after{display:block}}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category:after,.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance:after{background-color:#00c7b1;content:'';display:none;height:60px;position:absolute;right:0;width:2px}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category svg,.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance svg{cursor:pointer}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance{padding:0 18px}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance svg:hover path,.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance.active svg path{fill:#00c7b1}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance:after{top:-10px}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance svg{height:40px;width:24px}@media only screen and (min-width:1000px){.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-distance svg{height:40px;width:24px}}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category svg:hover path,.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category.active svg path{stroke:#00c7b1}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category:after{top:-15px}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category svg{height:27px;width:30px}.lapm-map-filters-bar .lapm-map-filters-bar-icon .svg-map-filter-bar-category svg path{fill:transparent;stroke:#5f6061;stroke-width:3px}.zoomHolder{height:177px;overflow:hidden;width:300px}.rangeslider{background:0 0;-webkit-border-radius:0;-ms-border-radius:0;-moz-border-radius:0;-o-border-radius:0;border-radius:0;box-shadow:none;height:35px}.rangeslider .rangeslider__fill{background:0 0;border-top:2px solid #707070;border-top-style:dashed;box-shadow:3px 3px 6px rgba(0,0,0,.16);height:2px;left:9%;opacity:.13;top:16.5px;width:82%!important}.rangeslider .rangeslider__handle{background-color:#00c7b1;font-family:'LLALight',sans-serif;font-weight:300;letter-spacing:.01em;line-height:1.2;margin:0;color:#fff;box-shadow:0 0 2px rgba(109,110,111,.42);font-size:13px!important;height:25px;padding:6px 0;text-align:center;top:5px;width:25px}@media only screen and (min-width:1000px){.rangeslider .rangeslider__handle{font-size:13px}}"); vbopStyle.type = "text/css"; vbopStyle.appendChild(vbopStyleObj); vbopParentEl[0].appendChild(vbopStyle); var vbopLibrariesJS = document.createElement('script'); vbopLibrariesJS.type = "text/javascript"; vbopLibrariesJS.text = "!function(window,document,undefined){var VENDOR_PREFIXES=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],TEST_ELEMENT=document.createElement(\"div\"),TYPE_FUNCTION=\"function\",round=Math.round,abs=Math.abs,now=Date.now;function setTimeoutContext(fn,timeout,context){return setTimeout(bindFn(fn,context),timeout)}function invokeArrayArg(arg,fn,context){return Array.isArray(arg)&&(each(arg,context[fn],context),1)}function each(obj,iterator,context){if(obj)if(obj.forEach)obj.forEach(iterator,context);else if(obj.length!==undefined)for(i=0;i<obj.length;)iterator.call(context,obj[i],i,obj),i++;else for(var i in obj)obj.hasOwnProperty(i)&&iterator.call(context,obj[i],i,obj)}function deprecate(method,name,message){var deprecationMessage=\"DEPRECATED METHOD: \"+name+\"\\n\"+message+\" AT \\n\";return function(){var log=new Error(\"get-stack-trace\"),stack=log&&log.stack?log.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",log=window.console&&(window.console.warn||window.console.log);return log&&log.call(window.console,deprecationMessage,stack),method.apply(this,arguments)}}var assign=\"function\"!=typeof Object.assign?function assign(target){if(target===undefined||null===target)throw new TypeError(\"Cannot convert undefined or null to object\");for(var output=Object(target),index=1;index<arguments.length;index++){var source=arguments[index];if(source!==undefined&&null!==source)for(var nextKey in source)source.hasOwnProperty(nextKey)&&(output[nextKey]=source[nextKey])}return output}:Object.assign,extend=deprecate(function extend(dest,src,merge){for(var keys=Object.keys(src),i=0;i<keys.length;)(!merge||merge&&dest[keys[i]]===undefined)&&(dest[keys[i]]=src[keys[i]]),i++;return dest},\"extend\",\"Use `assign`.\"),merge=deprecate(function merge(dest,src){return extend(dest,src,!0)},\"merge\",\"Use `assign`.\");function inherit(child,childP,properties){var baseP=childP.prototype,childP=child.prototype=Object.create(baseP);childP.constructor=child,childP._super=baseP,properties&&assign(childP,properties)}function bindFn(fn,context){return function boundFn(){return fn.apply(context,arguments)}}function boolOrFn(val,args){return typeof val==TYPE_FUNCTION?val.apply(args&&args[0]||undefined,args):val}function ifUndefined(val1,val2){return val1===undefined?val2:val1}function addEventListeners(target,types,handler){each(splitStr(types),function(type){target.addEventListener(type,handler,!1)})}function removeEventListeners(target,types,handler){each(splitStr(types),function(type){target.removeEventListener(type,handler,!1)})}function hasParent(node,parent){for(;node;){if(node==parent)return!0;node=node.parentNode}return!1}function inStr(str,find){return-1<str.indexOf(find)}function splitStr(str){return str.trim().split(/\\s+/g)}function inArray(src,find,findByKey){if(src.indexOf&&!findByKey)return src.indexOf(find);for(var i=0;i<src.length;){if(findByKey&&src[i][findByKey]==find||!findByKey&&src[i]===find)return i;i++}return-1}function toArray(obj){return Array.prototype.slice.call(obj,0)}function uniqueArray(src,key,sort){for(var results=[],values=[],i=0;i<src.length;){var val=key?src[i][key]:src[i];inArray(values,val)<0&&results.push(src[i]),values[i]=val,i++}return results=sort?key?results.sort(function sortUniqueArray(a,b){return a[key]>b[key]}):results.sort():results}function prefixed(obj,property){for(var prop,camelProp=property[0].toUpperCase()+property.slice(1),i=0;i<VENDOR_PREFIXES.length;){if((prop=(prop=VENDOR_PREFIXES[i])?prop+camelProp:property)in obj)return prop;i++}return undefined}var _uniqueId=1;function getWindowForElement(doc){doc=doc.ownerDocument||doc;return doc.defaultView||doc.parentWindow||window}var SUPPORT_TOUCH=\"ontouchstart\"in window,SUPPORT_POINTER_EVENTS=prefixed(window,\"PointerEvent\")!==undefined&&-1==navigator.userAgent.indexOf(\"SamsungBrowser\"),SUPPORT_ONLY_TOUCH=SUPPORT_TOUCH&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),COMPUTE_INTERVAL=25,INPUT_START=1,INPUT_END=4,INPUT_CANCEL=8,DIRECTION_NONE=1,DIRECTION_LEFT=2,DIRECTION_RIGHT=4,DIRECTION_UP=8,DIRECTION_DOWN=16,DIRECTION_HORIZONTAL=DIRECTION_LEFT|DIRECTION_RIGHT,DIRECTION_VERTICAL=DIRECTION_UP|DIRECTION_DOWN,DIRECTION_ALL=DIRECTION_HORIZONTAL|DIRECTION_VERTICAL,PROPS_XY=[\"x\",\"y\"],PROPS_CLIENT_XY=[\"clientX\",\"clientY\"];function Input(manager,callback){var self=this;this.manager=manager,this.callback=callback,this.element=manager.element,this.target=manager.options.inputTarget,this.domHandler=function(ev){boolOrFn(manager.options.enable,[manager])&&self.handler(ev)},this.init()}function inputHandler(manager,eventType,input){var pointersLen=input.pointers.length,isFinal=input.changedPointers.length,isFirst=eventType&INPUT_START&&pointersLen-isFinal==0,isFinal=eventType&(INPUT_END|INPUT_CANCEL)&&pointersLen-isFinal==0;input.isFirst=!!isFirst,input.isFinal=!!isFinal,isFirst&&(manager.session={}),input.eventType=eventType,function computeInputData(target,input){var session=target.session,pointers=input.pointers,overallVelocity=pointers.length;session.firstInput||(session.firstInput=simpleCloneInputData(input));1<overallVelocity&&!session.firstMultiple?session.firstMultiple=simpleCloneInputData(input):1===overallVelocity&&(session.firstMultiple=!1);var firstInput=session.firstInput,firstMultiple=session.firstMultiple,offsetCenter=(firstMultiple||firstInput).center,overallVelocity=input.center=getCenter(pointers);input.timeStamp=now(),input.deltaTime=input.timeStamp-firstInput.timeStamp,input.angle=getAngle(offsetCenter,overallVelocity),input.distance=getDistance(offsetCenter,overallVelocity),function computeDeltaXY(session,input){var center=input.center,offset=session.offsetDelta||{},prevDelta=session.prevDelta||{},prevInput=session.prevInput||{};input.eventType!==INPUT_START&&prevInput.eventType!==INPUT_END||(prevDelta=session.prevDelta={x:prevInput.deltaX||0,y:prevInput.deltaY||0},offset=session.offsetDelta={x:center.x,y:center.y});input.deltaX=prevDelta.x+(center.x-offset.x),input.deltaY=prevDelta.y+(center.y-offset.y)}(session,input),input.offsetDirection=getDirection(input.deltaX,input.deltaY);overallVelocity=getVelocity(input.deltaTime,input.deltaX,input.deltaY);input.overallVelocityX=overallVelocity.x,input.overallVelocityY=overallVelocity.y,input.overallVelocity=abs(overallVelocity.x)>abs(overallVelocity.y)?overallVelocity.x:overallVelocity.y,input.scale=firstMultiple?function getScale(start,end){return getDistance(end[0],end[1],PROPS_CLIENT_XY)/getDistance(start[0],start[1],PROPS_CLIENT_XY)}(firstMultiple.pointers,pointers):1,input.rotation=firstMultiple?function getRotation(start,end){return getAngle(end[1],end[0],PROPS_CLIENT_XY)+getAngle(start[1],start[0],PROPS_CLIENT_XY)}(firstMultiple.pointers,pointers):0,input.maxPointers=!session.prevInput||input.pointers.length>session.prevInput.maxPointers?input.pointers.length:session.prevInput.maxPointers,function computeIntervalInputData(session,input){var velocityX,velocityY,last=session.lastInterval||input,deltaTime=input.timeStamp-last.timeStamp;{var deltaX,direction,velocity;input.eventType!=INPUT_CANCEL&&(COMPUTE_INTERVAL<deltaTime||last.velocity===undefined)?(deltaX=input.deltaX-last.deltaX,direction=input.deltaY-last.deltaY,velocity=getVelocity(deltaTime,deltaX,direction),velocityX=velocity.x,velocityY=velocity.y,velocity=abs(velocity.x)>abs(velocity.y)?velocity.x:velocity.y,direction=getDirection(deltaX,direction),session.lastInterval=input):(velocity=last.velocity,velocityX=last.velocityX,velocityY=last.velocityY,direction=last.direction)}input.velocity=velocity,input.velocityX=velocityX,input.velocityY=velocityY,input.direction=direction}(session,input);target=target.element;hasParent(input.srcEvent.target,target)&&(target=input.srcEvent.target);input.target=target}(manager,input),manager.emit(\"hammer.input\",input),manager.recognize(input),manager.session.prevInput=input}function simpleCloneInputData(input){for(var pointers=[],i=0;i<input.pointers.length;)pointers[i]={clientX:round(input.pointers[i].clientX),clientY:round(input.pointers[i].clientY)},i++;return{timeStamp:now(),pointers:pointers,center:getCenter(pointers),deltaX:input.deltaX,deltaY:input.deltaY}}function getCenter(pointers){var pointersLength=pointers.length;if(1===pointersLength)return{x:round(pointers[0].clientX),y:round(pointers[0].clientY)};for(var x=0,y=0,i=0;i<pointersLength;)x+=pointers[i].clientX,y+=pointers[i].clientY,i++;return{x:round(x/pointersLength),y:round(y/pointersLength)}}function getVelocity(deltaTime,x,y){return{x:x/deltaTime||0,y:y/deltaTime||0}}function getDirection(x,y){return x===y?DIRECTION_NONE:abs(x)>=abs(y)?x<0?DIRECTION_LEFT:DIRECTION_RIGHT:y<0?DIRECTION_UP:DIRECTION_DOWN}function getDistance(p1,p2,y){var x=p2[(y=y||PROPS_XY)[0]]-p1[y[0]],y=p2[y[1]]-p1[y[1]];return Math.sqrt(x*x+y*y)}function getAngle(p1,p2,y){var x=p2[(y=y||PROPS_XY)[0]]-p1[y[0]],y=p2[y[1]]-p1[y[1]];return 180*Math.atan2(y,x)/Math.PI}Input.prototype={handler:function(){},init:function(){this.evEl&&addEventListeners(this.element,this.evEl,this.domHandler),this.evTarget&&addEventListeners(this.target,this.evTarget,this.domHandler),this.evWin&&addEventListeners(getWindowForElement(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&removeEventListeners(this.element,this.evEl,this.domHandler),this.evTarget&&removeEventListeners(this.target,this.evTarget,this.domHandler),this.evWin&&removeEventListeners(getWindowForElement(this.element),this.evWin,this.domHandler)}};var MOUSE_INPUT_MAP={mousedown:INPUT_START,mousemove:2,mouseup:INPUT_END},MOUSE_ELEMENT_EVENTS=\"mousedown\",MOUSE_WINDOW_EVENTS=\"mousemove mouseup\";function MouseInput(){this.evEl=MOUSE_ELEMENT_EVENTS,this.evWin=MOUSE_WINDOW_EVENTS,this.pressed=!1,Input.apply(this,arguments)}inherit(MouseInput,Input,{handler:function MEhandler(ev){var eventType=MOUSE_INPUT_MAP[ev.type];eventType&INPUT_START&&0===ev.button&&(this.pressed=!0),2&eventType&&1!==ev.which&&(eventType=INPUT_END),this.pressed&&(eventType&INPUT_END&&(this.pressed=!1),this.callback(this.manager,eventType,{pointers:[ev],changedPointers:[ev],pointerType:\"mouse\",srcEvent:ev}))}});var POINTER_INPUT_MAP={pointerdown:INPUT_START,pointermove:2,pointerup:INPUT_END,pointercancel:INPUT_CANCEL,pointerout:INPUT_CANCEL},IE10_POINTER_TYPE_ENUM={2:\"touch\",3:\"pen\",4:\"mouse\",5:\"kinect\"},POINTER_ELEMENT_EVENTS=\"pointerdown\",POINTER_WINDOW_EVENTS=\"pointermove pointerup pointercancel\";function PointerEventInput(){this.evEl=POINTER_ELEMENT_EVENTS,this.evWin=POINTER_WINDOW_EVENTS,Input.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}window.MSPointerEvent&&!window.PointerEvent&&(POINTER_ELEMENT_EVENTS=\"MSPointerDown\",POINTER_WINDOW_EVENTS=\"MSPointerMove MSPointerUp MSPointerCancel\"),inherit(PointerEventInput,Input,{handler:function PEhandler(ev){var store=this.store,removePointer=!1,storeIndex=ev.type.toLowerCase().replace(\"ms\",\"\"),eventType=POINTER_INPUT_MAP[storeIndex],pointerType=IE10_POINTER_TYPE_ENUM[ev.pointerType]||ev.pointerType,isTouch=\"touch\"==pointerType,storeIndex=inArray(store,ev.pointerId,\"pointerId\");eventType&INPUT_START&&(0===ev.button||isTouch)?storeIndex<0&&(store.push(ev),storeIndex=store.length-1):eventType&(INPUT_END|INPUT_CANCEL)&&(removePointer=!0),storeIndex<0||(store[storeIndex]=ev,this.callback(this.manager,eventType,{pointers:store,changedPointers:[ev],pointerType:pointerType,srcEvent:ev}),removePointer&&store.splice(storeIndex,1))}});var SINGLE_TOUCH_INPUT_MAP={touchstart:INPUT_START,touchmove:2,touchend:INPUT_END,touchcancel:INPUT_CANCEL};function SingleTouchInput(){this.evTarget=\"touchstart\",this.evWin=\"touchstart touchmove touchend touchcancel\",this.started=!1,Input.apply(this,arguments)}inherit(SingleTouchInput,Input,{handler:function TEhandler(ev){var touches,type=SINGLE_TOUCH_INPUT_MAP[ev.type];type===INPUT_START&&(this.started=!0),this.started&&(touches=function normalizeSingleTouches(changed,type){var all=toArray(changed.touches),changed=toArray(changed.changedTouches);type&(INPUT_END|INPUT_CANCEL)&&(all=uniqueArray(all.concat(changed),\"identifier\",!0));return[all,changed]}.call(this,ev,type),type&(INPUT_END|INPUT_CANCEL)&&touches[0].length-touches[1].length==0&&(this.started=!1),this.callback(this.manager,type,{pointers:touches[0],changedPointers:touches[1],pointerType:\"touch\",srcEvent:ev}))}});var TOUCH_INPUT_MAP={touchstart:INPUT_START,touchmove:2,touchend:INPUT_END,touchcancel:INPUT_CANCEL},TOUCH_TARGET_EVENTS=\"touchstart touchmove touchend touchcancel\";function TouchInput(){this.evTarget=TOUCH_TARGET_EVENTS,this.targetIds={},Input.apply(this,arguments)}inherit(TouchInput,Input,{handler:function MTEhandler(ev){var type=TOUCH_INPUT_MAP[ev.type],touches=function getTouches(ev,type){var allTouches=toArray(ev.touches),targetIds=this.targetIds;if(type&(2|INPUT_START)&&1===allTouches.length)return targetIds[allTouches[0].identifier]=!0,[allTouches,allTouches];var i,targetTouches,changedTouches=toArray(ev.changedTouches),changedTargetTouches=[],target=this.target;if(targetTouches=allTouches.filter(function(touch){return hasParent(touch.target,target)}),type===INPUT_START)for(i=0;i<targetTouches.length;)targetIds[targetTouches[i].identifier]=!0,i++;i=0;for(;i<changedTouches.length;)targetIds[changedTouches[i].identifier]&&changedTargetTouches.push(changedTouches[i]),type&(INPUT_END|INPUT_CANCEL)&&delete targetIds[changedTouches[i].identifier],i++;if(changedTargetTouches.length)return[uniqueArray(targetTouches.concat(changedTargetTouches),\"identifier\",!0),changedTargetTouches]}.call(this,ev,type);touches&&this.callback(this.manager,type,{pointers:touches[0],changedPointers:touches[1],pointerType:\"touch\",srcEvent:ev})}});var DEDUP_TIMEOUT=2500;function TouchMouseInput(){Input.apply(this,arguments);var handler=bindFn(this.handler,this);this.touch=new TouchInput(this.manager,handler),this.mouse=new MouseInput(this.manager,handler),this.primaryTouch=null,this.lastTouches=[]}function setLastTouch(touch){var lastTouch,lts,touch=touch.changedPointers[0];touch.identifier===this.primaryTouch&&(lastTouch={x:touch.clientX,y:touch.clientY},this.lastTouches.push(lastTouch),lts=this.lastTouches,setTimeout(function(){var i=lts.indexOf(lastTouch);-1<i&&lts.splice(i,1)},DEDUP_TIMEOUT))}inherit(TouchMouseInput,Input,{handler:function TMEhandler(manager,inputEvent,inputData){var isTouch=\"touch\"==inputData.pointerType,isMouse=\"mouse\"==inputData.pointerType;if(!(isMouse&&inputData.sourceCapabilities&&inputData.sourceCapabilities.firesTouchEvents)){if(isTouch)!function recordTouches(eventType,eventData){eventType&INPUT_START?(this.primaryTouch=eventData.changedPointers[0].identifier,setLastTouch.call(this,eventData)):eventType&(INPUT_END|INPUT_CANCEL)&&setLastTouch.call(this,eventData)}.call(this,inputEvent,inputData);else if(isMouse&&function isSyntheticEvent(eventData){for(var x=eventData.srcEvent.clientX,y=eventData.srcEvent.clientY,i=0;i<this.lastTouches.length;i++){var dy=this.lastTouches[i],dx=Math.abs(x-dy.x),dy=Math.abs(y-dy.y);if(dx<=25&&dy<=25)return!0}return!1}.call(this,inputData))return;this.callback(manager,inputEvent,inputData)}},destroy:function destroy(){this.touch.destroy(),this.mouse.destroy()}});var PREFIXED_TOUCH_ACTION=prefixed(TEST_ELEMENT.style,\"touchAction\"),NATIVE_TOUCH_ACTION=PREFIXED_TOUCH_ACTION!==undefined,TOUCH_ACTION_MAP=function getTouchActionProps(){if(!NATIVE_TOUCH_ACTION)return!1;var touchMap={},cssSupports=window.CSS&&window.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach(function(val){touchMap[val]=!cssSupports||window.CSS.supports(\"touch-action\",val)}),touchMap}();function TouchAction(manager,value){this.manager=manager,this.set(value)}TouchAction.prototype={set:function(value){\"compute\"==value&&(value=this.compute()),NATIVE_TOUCH_ACTION&&this.manager.element.style&&TOUCH_ACTION_MAP[value]&&(this.manager.element.style[PREFIXED_TOUCH_ACTION]=value),this.actions=value.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var actions=[];return each(this.manager.recognizers,function(recognizer){boolOrFn(recognizer.options.enable,[recognizer])&&(actions=actions.concat(recognizer.getTouchAction()))}),function cleanTouchActions(actions){if(inStr(actions,\"none\"))return\"none\";var hasPanX=inStr(actions,\"pan-x\"),hasPanY=inStr(actions,\"pan-y\");return hasPanX&&hasPanY?\"none\":hasPanX||hasPanY?hasPanX?\"pan-x\":\"pan-y\":inStr(actions,\"manipulation\")?\"manipulation\":\"auto\"}(actions.join(\" \"))},preventDefaults:function(isTapTouchTime){var srcEvent=isTapTouchTime.srcEvent,direction=isTapTouchTime.offsetDirection;if(this.manager.session.prevented)srcEvent.preventDefault();else{var isTapMovement=this.actions,hasNone=inStr(isTapMovement,\"none\")&&!TOUCH_ACTION_MAP.none,hasPanY=inStr(isTapMovement,\"pan-y\")&&!TOUCH_ACTION_MAP[\"pan-y\"],hasPanX=inStr(isTapMovement,\"pan-x\")&&!TOUCH_ACTION_MAP[\"pan-x\"];if(hasNone){var isTapPointer=1===isTapTouchTime.pointers.length,isTapMovement=isTapTouchTime.distance<2,isTapTouchTime=isTapTouchTime.deltaTime<250;if(isTapPointer&&isTapMovement&&isTapTouchTime)return}if(!hasPanX||!hasPanY)return hasNone||hasPanY&&direction&DIRECTION_HORIZONTAL||hasPanX&&direction&DIRECTION_VERTICAL?this.preventSrc(srcEvent):void 0}},preventSrc:function(srcEvent){this.manager.session.prevented=!0,srcEvent.preventDefault()}};var STATE_POSSIBLE=1;function Recognizer(options){this.options=assign({},this.defaults,options||{}),this.id=function uniqueId(){return _uniqueId++}(),this.manager=null,this.options.enable=ifUndefined(this.options.enable,!0),this.state=STATE_POSSIBLE,this.simultaneous={},this.requireFail=[]}function stateStr(state){return 16&state?\"cancel\":8&state?\"end\":4&state?\"move\":2&state?\"start\":\"\"}function directionStr(direction){return direction==DIRECTION_DOWN?\"down\":direction==DIRECTION_UP?\"up\":direction==DIRECTION_LEFT?\"left\":direction==DIRECTION_RIGHT?\"right\":\"\"}function getRecognizerByNameIfManager(otherRecognizer,manager){manager=manager.manager;return manager?manager.get(otherRecognizer):otherRecognizer}function AttrRecognizer(){Recognizer.apply(this,arguments)}function PanRecognizer(){AttrRecognizer.apply(this,arguments),this.pX=null,this.pY=null}function PinchRecognizer(){AttrRecognizer.apply(this,arguments)}function PressRecognizer(){Recognizer.apply(this,arguments),this._timer=null,this._input=null}function RotateRecognizer(){AttrRecognizer.apply(this,arguments)}function SwipeRecognizer(){AttrRecognizer.apply(this,arguments)}function TapRecognizer(){Recognizer.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function Hammer(element,options){return(options=options||{}).recognizers=ifUndefined(options.recognizers,Hammer.defaults.preset),new Manager(element,options)}Recognizer.prototype={defaults:{},set:function(options){return assign(this.options,options),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(otherRecognizer){if(invokeArrayArg(otherRecognizer,\"recognizeWith\",this))return this;var simultaneous=this.simultaneous;return simultaneous[(otherRecognizer=getRecognizerByNameIfManager(otherRecognizer,this)).id]||(simultaneous[otherRecognizer.id]=otherRecognizer).recognizeWith(this),this},dropRecognizeWith:function(otherRecognizer){return invokeArrayArg(otherRecognizer,\"dropRecognizeWith\",this)||(otherRecognizer=getRecognizerByNameIfManager(otherRecognizer,this),delete this.simultaneous[otherRecognizer.id]),this},requireFailure:function(otherRecognizer){if(invokeArrayArg(otherRecognizer,\"requireFailure\",this))return this;var requireFail=this.requireFail;return-1===inArray(requireFail,otherRecognizer=getRecognizerByNameIfManager(otherRecognizer,this))&&(requireFail.push(otherRecognizer),otherRecognizer.requireFailure(this)),this},dropRequireFailure:function(index){if(invokeArrayArg(index,\"dropRequireFailure\",this))return this;index=getRecognizerByNameIfManager(index,this);index=inArray(this.requireFail,index);return-1<index&&this.requireFail.splice(index,1),this},hasRequireFailures:function(){return 0<this.requireFail.length},canRecognizeWith:function(otherRecognizer){return!!this.simultaneous[otherRecognizer.id]},emit:function(input){var self=this,state=this.state;function emit(event){self.manager.emit(event,input)}state<8&&emit(self.options.event+stateStr(state)),emit(self.options.event),input.additionalEvent&&emit(input.additionalEvent),8<=state&&emit(self.options.event+stateStr(state))},tryEmit:function(input){if(this.canEmit())return this.emit(input);this.state=32},canEmit:function(){for(var i=0;i<this.requireFail.length;){if(!(this.requireFail[i].state&(32|STATE_POSSIBLE)))return!1;i++}return!0},recognize:function(inputDataClone){inputDataClone=assign({},inputDataClone);if(!boolOrFn(this.options.enable,[this,inputDataClone]))return this.reset(),void(this.state=32);56&this.state&&(this.state=STATE_POSSIBLE),this.state=this.process(inputDataClone),30&this.state&&this.tryEmit(inputDataClone)},process:function(inputData){},getTouchAction:function(){},reset:function(){}},inherit(AttrRecognizer,Recognizer,{defaults:{pointers:1},attrTest:function(input){var optionPointers=this.options.pointers;return 0===optionPointers||input.pointers.length===optionPointers},process:function(isValid){var state=this.state,eventType=isValid.eventType,isRecognized=6&state,isValid=this.attrTest(isValid);return isRecognized&&(eventType&INPUT_CANCEL||!isValid)?16|state:isRecognized||isValid?eventType&INPUT_END?8|state:2&state?4|state:2:32}}),inherit(PanRecognizer,AttrRecognizer,{defaults:{event:\"pan\",threshold:10,pointers:1,direction:DIRECTION_ALL},getTouchAction:function(){var direction=this.options.direction,actions=[];return direction&DIRECTION_HORIZONTAL&&actions.push(\"pan-y\"),direction&DIRECTION_VERTICAL&&actions.push(\"pan-x\"),actions},directionTest:function(input){var options=this.options,hasMoved=!0,distance=input.distance,direction=input.direction,x=input.deltaX,y=input.deltaY;return direction&options.direction||(distance=options.direction&DIRECTION_HORIZONTAL?(direction=0===x?DIRECTION_NONE:x<0?DIRECTION_LEFT:DIRECTION_RIGHT,hasMoved=x!=this.pX,Math.abs(input.deltaX)):(direction=0===y?DIRECTION_NONE:y<0?DIRECTION_UP:DIRECTION_DOWN,hasMoved=y!=this.pY,Math.abs(input.deltaY))),input.direction=direction,hasMoved&&distance>options.threshold&&direction&options.direction},attrTest:function(input){return AttrRecognizer.prototype.attrTest.call(this,input)&&(2&this.state||!(2&this.state)&&this.directionTest(input))},emit:function(input){this.pX=input.deltaX,this.pY=input.deltaY;var direction=directionStr(input.direction);direction&&(input.additionalEvent=this.options.event+direction),this._super.emit.call(this,input)}}),inherit(PinchRecognizer,AttrRecognizer,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[\"none\"]},attrTest:function(input){return this._super.attrTest.call(this,input)&&(Math.abs(input.scale-1)>this.options.threshold||2&this.state)},emit:function(input){var inOut;1!==input.scale&&(inOut=input.scale<1?\"in\":\"out\",input.additionalEvent=this.options.event+inOut),this._super.emit.call(this,input)}}),inherit(PressRecognizer,Recognizer,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[\"auto\"]},process:function(input){var options=this.options,validPointers=input.pointers.length===options.pointers,validMovement=input.distance<options.threshold,validTime=input.deltaTime>options.time;if(this._input=input,!validMovement||!validPointers||input.eventType&(INPUT_END|INPUT_CANCEL)&&!validTime)this.reset();else if(input.eventType&INPUT_START)this.reset(),this._timer=setTimeoutContext(function(){this.state=8,this.tryEmit()},options.time,this);else if(input.eventType&INPUT_END)return 8;return 32},reset:function(){clearTimeout(this._timer)},emit:function(input){8===this.state&&(input&&input.eventType&INPUT_END?this.manager.emit(this.options.event+\"up\",input):(this._input.timeStamp=now(),this.manager.emit(this.options.event,this._input)))}}),inherit(RotateRecognizer,AttrRecognizer,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[\"none\"]},attrTest:function(input){return this._super.attrTest.call(this,input)&&(Math.abs(input.rotation)>this.options.threshold||2&this.state)}}),inherit(SwipeRecognizer,AttrRecognizer,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:DIRECTION_HORIZONTAL|DIRECTION_VERTICAL,pointers:1},getTouchAction:function(){return PanRecognizer.prototype.getTouchAction.call(this)},attrTest:function(input){var velocity,direction=this.options.direction;return direction&(DIRECTION_HORIZONTAL|DIRECTION_VERTICAL)?velocity=input.overallVelocity:direction&DIRECTION_HORIZONTAL?velocity=input.overallVelocityX:direction&DIRECTION_VERTICAL&&(velocity=input.overallVelocityY),this._super.attrTest.call(this,input)&&direction&input.offsetDirection&&input.distance>this.options.threshold&&input.maxPointers==this.options.pointers&&abs(velocity)>this.options.velocity&&input.eventType&INPUT_END},emit:function(input){var direction=directionStr(input.offsetDirection);direction&&this.manager.emit(this.options.event+direction,input),this.manager.emit(this.options.event,input)}}),inherit(TapRecognizer,Recognizer,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[\"manipulation\"]},process:function(input){var options=this.options,validMultiTap=input.pointers.length===options.pointers,validMovement=input.distance<options.threshold,validInterval=input.deltaTime<options.time;if(this.reset(),input.eventType&INPUT_START&&0===this.count)return this.failTimeout();if(validMovement&&validInterval&&validMultiTap){if(input.eventType!=INPUT_END)return this.failTimeout();validInterval=!this.pTime||input.timeStamp-this.pTime<options.interval,validMultiTap=!this.pCenter||getDistance(this.pCenter,input.center)<options.posThreshold;if(this.pTime=input.timeStamp,this.pCenter=input.center,validMultiTap&&validInterval?this.count+=1:this.count=1,this._input=input,0==this.count%options.taps)return this.hasRequireFailures()?(this._timer=setTimeoutContext(function(){this.state=8,this.tryEmit()},options.interval,this),2):8}return 32},failTimeout:function(){return this._timer=setTimeoutContext(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){8==this.state&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),Hammer.VERSION=\"2.0.8\",Hammer.defaults={domEvents:!1,touchAction:\"compute\",enable:!0,inputTarget:null,inputClass:null,preset:[[RotateRecognizer,{enable:!1}],[PinchRecognizer,{enable:!1},[\"rotate\"]],[SwipeRecognizer,{direction:DIRECTION_HORIZONTAL}],[PanRecognizer,{direction:DIRECTION_HORIZONTAL},[\"swipe\"]],[TapRecognizer],[TapRecognizer,{event:\"doubletap\",taps:2},[\"tap\"]],[PressRecognizer]],cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}};function Manager(element,options){this.options=assign({},Hammer.defaults,options||{}),this.options.inputTarget=this.options.inputTarget||element,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=element,this.input=function createInputInstance(manager){var Type=manager.options.inputClass;return new(Type=Type||(SUPPORT_POINTER_EVENTS?PointerEventInput:SUPPORT_ONLY_TOUCH?TouchInput:SUPPORT_TOUCH?TouchMouseInput:MouseInput))(manager,inputHandler)}(this),this.touchAction=new TouchAction(this,this.options.touchAction),toggleCssProps(this,!0),each(this.options.recognizers,function(item){var recognizer=this.add(new item[0](item[1]));item[2]&&recognizer.recognizeWith(item[2]),item[3]&&recognizer.requireFailure(item[3])},this)}function toggleCssProps(manager,add){var prop,element=manager.element;element.style&&(each(manager.options.cssProps,function(value,name){prop=prefixed(element.style,name),add?(manager.oldCssProps[prop]=element.style[prop],element.style[prop]=value):element.style[prop]=manager.oldCssProps[prop]||\"\"}),add||(manager.oldCssProps={}))}Manager.prototype={set:function(options){return assign(this.options,options),options.touchAction&&this.touchAction.update(),options.inputTarget&&(this.input.destroy(),this.input.target=options.inputTarget,this.input.init()),this},stop:function(force){this.session.stopped=force?2:1},recognize:function(inputData){var recognizer,session=this.session;if(!session.stopped){this.touchAction.preventDefaults(inputData);var recognizers=this.recognizers,curRecognizer=session.curRecognizer;(!curRecognizer||curRecognizer&&8&curRecognizer.state)&&(curRecognizer=session.curRecognizer=null);for(var i=0;i<recognizers.length;)recognizer=recognizers[i],2===session.stopped||curRecognizer&&recognizer!=curRecognizer&&!recognizer.canRecognizeWith(curRecognizer)?recognizer.reset():recognizer.recognize(inputData),!curRecognizer&&14&recognizer.state&&(curRecognizer=session.curRecognizer=recognizer),i++}},get:function(recognizer){if(recognizer instanceof Recognizer)return recognizer;for(var recognizers=this.recognizers,i=0;i<recognizers.length;i++)if(recognizers[i].options.event==recognizer)return recognizers[i];return null},add:function(recognizer){if(invokeArrayArg(recognizer,\"add\",this))return this;var existing=this.get(recognizer.options.event);return existing&&this.remove(existing),this.recognizers.push(recognizer),(recognizer.manager=this).touchAction.update(),recognizer},remove:function(index){return invokeArrayArg(index,\"remove\",this)||!(index=this.get(index))||-1!==(index=inArray(recognizers=this.recognizers,index))&&(recognizers.splice(index,1),this.touchAction.update()),this;var recognizers},on:function(events,handler){if(events!==undefined&&handler!==undefined){var handlers=this.handlers;return each(splitStr(events),function(event){handlers[event]=handlers[event]||[],handlers[event].push(handler)}),this}},off:function(events,handler){if(events!==undefined){var handlers=this.handlers;return each(splitStr(events),function(event){handler?handlers[event]&&handlers[event].splice(inArray(handlers[event],handler),1):delete handlers[event]}),this}},emit:function(event,data){this.options.domEvents&&function triggerDomEvent(event,data){var gestureEvent=document.createEvent(\"Event\");gestureEvent.initEvent(event,!0,!0),(gestureEvent.gesture=data).target.dispatchEvent(gestureEvent)}(event,data);var handlers=this.handlers[event]&&this.handlers[event].slice();if(handlers&&handlers.length){data.type=event,data.preventDefault=function(){data.srcEvent.preventDefault()};for(var i=0;i<handlers.length;)handlers[i](data),i++}},destroy:function(){this.element&&toggleCssProps(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},assign(Hammer,{INPUT_START:INPUT_START,INPUT_MOVE:2,INPUT_END:INPUT_END,INPUT_CANCEL:INPUT_CANCEL,STATE_POSSIBLE:STATE_POSSIBLE,STATE_BEGAN:2,STATE_CHANGED:4,STATE_ENDED:8,STATE_RECOGNIZED:8,STATE_CANCELLED:16,STATE_FAILED:32,DIRECTION_NONE:DIRECTION_NONE,DIRECTION_LEFT:DIRECTION_LEFT,DIRECTION_RIGHT:DIRECTION_RIGHT,DIRECTION_UP:DIRECTION_UP,DIRECTION_DOWN:DIRECTION_DOWN,DIRECTION_HORIZONTAL:DIRECTION_HORIZONTAL,DIRECTION_VERTICAL:DIRECTION_VERTICAL,DIRECTION_ALL:DIRECTION_ALL,Manager:Manager,Input:Input,TouchAction:TouchAction,TouchInput:TouchInput,MouseInput:MouseInput,PointerEventInput:PointerEventInput,TouchMouseInput:TouchMouseInput,SingleTouchInput:SingleTouchInput,Recognizer:Recognizer,AttrRecognizer:AttrRecognizer,Tap:TapRecognizer,Pan:PanRecognizer,Swipe:SwipeRecognizer,Pinch:PinchRecognizer,Rotate:RotateRecognizer,Press:PressRecognizer,on:addEventListeners,off:removeEventListeners,each:each,merge:merge,extend:extend,assign:assign,inherit:inherit,bindFn:bindFn,prefixed:prefixed}),(void 0!==window?window:\"undefined\"!=typeof self?self:{}).Hammer=Hammer,\"function\"==typeof define&&define.amd?define(function(){return Hammer}):\"undefined\"!=typeof module&&module.exports?module.exports=Hammer:window.Hammer=Hammer}(window,document),function(t){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],t):\"object\"==typeof exports?module.exports=t(require(\"jquery\")):t(jQuery)}(function(t){\"use strict\";Number.isNaN=Number.isNaN||function(t){return\"number\"==typeof t&&t!=t};var i,e=\"rangeslider\",n=0,s=((i=document.createElement(\"input\")).setAttribute(\"type\",\"range\"),\"text\"!==i.type),o={polyfill:!0,orientation:\"horizontal\",rangeClass:\"rangeslider\",disabledClass:\"rangeslider--disabled\",activeClass:\"rangeslider--active\",horizontalClass:\"rangeslider--horizontal\",verticalClass:\"rangeslider--vertical\",fillClass:\"rangeslider__fill\",handleClass:\"rangeslider__handle\",startEvent:[\"mousedown\",\"touchstart\",\"pointerdown\"],moveEvent:[\"mousemove\",\"touchmove\",\"pointermove\"],endEvent:[\"mouseup\",\"touchend\",\"pointerup\"]},r={orientation:{horizontal:{dimension:\"width\",direction:\"left\",directionStyle:\"left\",coordinate:\"x\"},vertical:{dimension:\"height\",direction:\"top\",directionStyle:\"bottom\",coordinate:\"y\"}}};function a(t,i){var e=function(t){for(var i=[],e=t.parentNode;function h(t){return t&&(0===t.offsetWidth||0===t.offsetHeight||!1===t.open)}(e);)i.push(e),e=e.parentNode;return i}(t),n=e.length,s=[],o=t[i];function r(t){void 0!==t.open&&(t.open=!t.open)}if(n){for(var a=0;a<n;a++)s[a]=e[a].style.cssText,e[a].style.setProperty?e[a].style.setProperty(\"display\",\"block\",\"important\"):e[a].style.cssText+=\";display: block !important\",e[a].style.height=\"0\",e[a].style.overflow=\"hidden\",e[a].style.visibility=\"hidden\",r(e[a]);for(var o=t[i],l=0;l<n;l++)e[l].style.cssText=s[l],r(e[l])}return o}function l(e,i){e=parseFloat(e);return Number.isNaN(e)?i:e}function d(t){return t.charAt(0).toUpperCase()+t.substr(1)}function u(i,h){if(this.$window=t(window),this.$document=t(document),this.$element=t(i),this.options=t.extend({},o,h),this.polyfill=this.options.polyfill,this.orientation=this.$element[0].getAttribute(\"data-orientation\")||this.options.orientation,this.onInit=this.options.onInit,this.onSlide=this.options.onSlide,this.onSlideEnd=this.options.onSlideEnd,this.DIMENSION=r.orientation[this.orientation].dimension,this.DIRECTION=r.orientation[this.orientation].direction,this.DIRECTION_STYLE=r.orientation[this.orientation].directionStyle,this.COORDINATE=r.orientation[this.orientation].coordinate,this.polyfill&&s)return!1;this.identifier=\"js-\"+e+\"-\"+n++,this.startEvent=this.options.startEvent.join(\".\"+this.identifier+\" \")+\".\"+this.identifier,this.moveEvent=this.options.moveEvent.join(\".\"+this.identifier+\" \")+\".\"+this.identifier,this.endEvent=this.options.endEvent.join(\".\"+this.identifier+\" \")+\".\"+this.identifier,this.toFixed=(this.step+\"\").replace(\".\",\"\").length-1,this.$fill=t('<div class=\"'+this.options.fillClass+'\" />'),this.$handle=t('<div class=\"'+this.options.handleClass+'\" />'),this.$range=t('<div class=\"'+this.options.rangeClass+\" \"+this.options[this.orientation+\"Class\"]+'\" id=\"'+this.identifier+'\" />').insertAfter(this.$element).prepend(this.$fill,this.$handle),this.$element.css({position:\"absolute\",width:\"1px\",height:\"1px\",overflow:\"hidden\",opacity:\"0\"}),this.handleDown=t.proxy(this.handleDown,this),this.handleMove=t.proxy(this.handleMove,this),this.handleEnd=t.proxy(this.handleEnd,this),this.init();var a,d=this;this.$window.on(\"resize.\"+this.identifier,(a=function(){!function(t){var e=Array.prototype.slice.call(arguments,2);setTimeout(function(){return t.apply(null,e)},300)}(function(){d.update(!1,!1)},300)},0,function(){var t;return a.debouncing||(t=Array.prototype.slice.apply(arguments),a.lastReturnVal=a.apply(window,t),a.debouncing=!0),clearTimeout(a.debounceTimeout),a.debounceTimeout=setTimeout(function(){a.debouncing=!1},20),a.lastReturnVal})),this.$document.on(this.startEvent,\"#\"+this.identifier+\":not(.\"+this.options.disabledClass+\")\",this.handleDown),this.$element.on(\"change.\"+this.identifier,function(n,i){i&&i.origin===d.identifier||(n=n.target.value,n=d.getPositionFromValue(n),d.setPosition(n))})}return u.prototype.init=function(){this.update(!0,!1),this.onInit&&\"function\"==typeof this.onInit&&this.onInit()},u.prototype.update=function(t,i){(t=t||!1)&&(this.min=l(this.$element[0].getAttribute(\"min\"),0),this.max=l(this.$element[0].getAttribute(\"max\"),100),this.value=l(this.$element[0].value,Math.round(this.min+(this.max-this.min)/2)),this.step=l(this.$element[0].getAttribute(\"step\"),1)),this.handleDimension=a(this.$handle[0],\"offset\"+d(this.DIMENSION)),this.rangeDimension=a(this.$range[0],\"offset\"+d(this.DIMENSION)),this.maxHandlePos=this.rangeDimension-this.handleDimension,this.grabPos=this.handleDimension/2,this.position=this.getPositionFromValue(this.value),this.$element[0].disabled?this.$range.addClass(this.options.disabledClass):this.$range.removeClass(this.options.disabledClass),this.setPosition(this.position,i)},u.prototype.handleDown=function(n){var i,s;n.preventDefault(),this.$document.on(this.moveEvent,this.handleMove),this.$document.on(this.endEvent,this.handleEnd),this.$range.addClass(this.options.activeClass),-1<(\" \"+n.target.className+\" \").replace(/[\\n\\t]/g,\" \").indexOf(this.options.handleClass)||(i=this.getRelativePosition(n),s=this.$range[0].getBoundingClientRect()[this.DIRECTION],n=this.getPositionFromNode(this.$handle[0])-s,s=\"vertical\"===this.orientation?this.maxHandlePos-(i-this.grabPos):i-this.grabPos,this.setPosition(s),n<=i&&i<n+this.handleDimension&&(this.grabPos=i-n))},u.prototype.handleMove=function(e){e.preventDefault();e=this.getRelativePosition(e),e=\"vertical\"===this.orientation?this.maxHandlePos-(e-this.grabPos):e-this.grabPos;this.setPosition(e)},u.prototype.handleEnd=function(t){t.preventDefault(),this.$document.off(this.moveEvent,this.handleMove),this.$document.off(this.endEvent,this.handleEnd),this.$range.removeClass(this.options.activeClass),this.$element.trigger(\"change\",{origin:this.identifier}),this.onSlideEnd&&\"function\"==typeof this.onSlideEnd&&this.onSlideEnd(this.position,this.value)},u.prototype.cap=function(t,i,e){return t<i?i:e<t?e:t},u.prototype.setPosition=function(n,i){var e;void 0===i&&(i=!0),e=this.getValueFromPosition(this.cap(n,0,this.maxHandlePos)),n=this.getPositionFromValue(e),this.$fill[0].style[this.DIMENSION]=n+this.grabPos+\"px\",this.$handle[0].style[this.DIRECTION_STYLE]=n+\"px\",this.setValue(e),this.position=n,this.value=e,i&&this.onSlide&&\"function\"==typeof this.onSlide&&this.onSlide(n,e)},u.prototype.getPositionFromNode=function(t){for(var i=0;null!==t;)i+=t.offsetLeft,t=t.offsetParent;return i},u.prototype.getRelativePosition=function(t){var i=d(this.COORDINATE),e=this.$range[0].getBoundingClientRect()[this.DIRECTION],n=0;return void 0!==t.originalEvent[\"client\"+i]?n=t.originalEvent[\"client\"+i]:t.originalEvent.touches&&t.originalEvent.touches[0]&&void 0!==t.originalEvent.touches[0][\"client\"+i]?n=t.originalEvent.touches[0][\"client\"+i]:t.currentPoint&&void 0!==t.currentPoint[this.COORDINATE]&&(n=t.currentPoint[this.COORDINATE]),n-e},u.prototype.getPositionFromValue=function(i){i=(i-this.min)/(this.max-this.min);return Number.isNaN(i)?0:i*this.maxHandlePos},u.prototype.getValueFromPosition=function(e){var e=e/(this.maxHandlePos||1),e=this.step*Math.round(e*(this.max-this.min)/this.step)+this.min;return Number(e.toFixed(this.toFixed))},u.prototype.setValue=function(t){t===this.value&&\"\"!==this.$element[0].value||this.$element.val(t).trigger(\"input\",{origin:this.identifier})},u.prototype.destroy=function(){this.$document.off(\".\"+this.identifier),this.$window.off(\".\"+this.identifier),this.$element.off(\".\"+this.identifier).removeAttr(\"style\").removeData(\"plugin_\"+e),this.$range&&this.$range.length&&this.$range[0].parentNode.removeChild(this.$range[0])},t.fn[e]=function(i){var n=Array.prototype.slice.call(arguments,1);return this.each(function(){var s=t(this),o=s.data(\"plugin_\"+e);o||s.data(\"plugin_\"+e,o=new u(this,i)),\"string\"==typeof i&&o[i].apply(o,n)})},\"rangeslider.js is available in jQuery context e.g $(selector).rangeslider(options);\"});var _gsScope=\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:this||window;(_gsScope._gsQueue||(_gsScope._gsQueue=[])).push(function(){\"use strict\";function g(a,b,c,d){c===d&&(c=d-(d-b)/1e6),a===b&&(b=a+(c-a)/1e6),this.a=a,this.b=b,this.c=c,this.d=d,this.da=d-a,this.ca=c-a,this.ba=b-a}function i(a,l,m,d){var e={a:a},f={},g={},h={c:d},i=(a+l)/2,k=(m+d)/2,n=((m=((n=(l+m)/2)+k)/2)-(l=(i+n)/2))/8;return e.b=i+(a-i)/4,f.b=l+n,e.c=f.a=(e.b+f.b)/2,f.c=g.a=(l+m)/2,g.b=m-n,h.b=k+(d-k)/4,g.c=h.a=(g.b+h.b)/2,[e,f,g,h]}function j(a,e,f,g,h){for(var k,l,n,o,r,s,t,u,p,w=a.length-1,x=0,y=a[0].a,j=0;j<w;j++)k=(n=a[x]).a,l=n.d,r=a[x+1].d,r=h?(t=b[j],p=((u=c[j])+t)*e*.25/(!g&&d[j]||.5),l-((o=l-(l-k)*(g?.5*e:0!==t?p/t:0))+(((p=l+(r-l)*(g?.5*e:0!==u?p/u:0))-o)*(3*t/(t+u)+.5)/4||0))):l-((o=l-(l-k)*e*.5)+(p=l+(r-l)*e*.5))/2,p+=r,n.c=r=o+=r,n.b=0!==j?y:y=n.a+.6*(n.c-n.a),n.da=l-k,n.ca=r-k,n.ba=y-k,f?(s=i(k,y,r,l),a.splice(x,1,s[0],s[1],s[2],s[3]),x+=4):x++,y=p;(n=a[x]).b=y,n.c=y+.4*(n.d-y),n.da=n.d-n.a,n.ca=n.c-n.a,n.ba=y-n.a,f&&(s=i(n.a,y,n.c,n.d),a.splice(x,1,s[0],s[1],s[2],s[3]))}function k(a,d,e,f){var h,i,j,k,l,m,n=[];if(f)for(i=(a=[f].concat(a)).length;-1<--i;)\"string\"==typeof(m=a[i][d])&&\"=\"===m.charAt(1)&&(a[i][d]=f[d]+Number(m.charAt(0)+m.substr(2)));if((h=a.length-2)<0)return n[0]=new g(a[0][d],0,0,a[0][d]),n;for(i=0;i<h;i++)j=a[i][d],k=a[i+1][d],n[i]=new g(j,0,0,k),e&&(l=a[i+2][d],b[i]=(b[i]||0)+(k-j)*(k-j),c[i]=(c[i]||0)+(l-k)*(l-k));return n[i]=new g(a[i][d],0,0,a[i+1][d]),n}function l(a,f,g,i,l,m){var n,o,p,q,r,s,t,u,v={},w=[],x=m||a[0];for(o in l=\"string\"==typeof l?\",\"+l+\",\":\",x,y,z,left,top,right,bottom,marginTop,marginLeft,marginRight,marginBottom,paddingLeft,paddingTop,paddingRight,paddingBottom,backgroundPosition,backgroundPosition_y,\",null==f&&(f=1),a[0])w.push(o);if(1<a.length){for(u=a[a.length-1],t=!0,n=w.length;-1<--n;)if(o=w[n],.05<Math.abs(x[o]-u[o])){t=!1;break}t&&(a=a.concat(),m&&a.unshift(m),a.push(a[1]),m=a[a.length-3])}for(b.length=c.length=d.length=0,n=w.length;-1<--n;)o=w[n],e[o]=-1!==l.indexOf(\",\"+o+\",\"),v[o]=k(a,o,e[o],m);for(n=b.length;-1<--n;)b[n]=Math.sqrt(b[n]),c[n]=Math.sqrt(c[n]);if(!i){for(n=w.length;-1<--n;)if(e[o])for(s=(p=v[w[n]]).length-1,q=0;q<s;q++)r=p[q+1].da/c[q]+p[q].da/b[q]||0,d[q]=(d[q]||0)+r*r;for(n=d.length;-1<--n;)d[n]=Math.sqrt(d[n])}for(n=w.length,q=g?4:1;-1<--n;)p=v[o=w[n]],j(p,f,g,i,e[o]),t&&(p.splice(0,q),p.splice(p.length-q,q));return v}function m(a,b,c){var d,e,f,h,i,j,k,l,m,n,o,p={},q=\"cubic\"===(b=b||\"soft\")?3:2,r=\"soft\"===b,s=[];if(null==(a=r&&c?[c].concat(a):a)||a.length<1+q)throw\"invalid Bezier data\";for(m in a[0])s.push(m);for(j=s.length;-1<--j;){for(p[m=s[j]]=i=[],l=a.length,k=n=0;k<l;k++)d=null==c?a[k][m]:\"string\"==typeof(o=a[k][m])&&\"=\"===o.charAt(1)?c[m]+Number(o.charAt(0)+o.substr(2)):Number(o),r&&1<k&&k<l-1&&(i[n++]=(d+i[n-2])/2),i[n++]=d;for(l=n-q+1,k=n=0;k<l;k+=q)d=i[k],e=i[k+1],f=i[k+2],h=2==q?0:i[k+3],i[n++]=o=3==q?new g(d,e,f,h):new g(d,(2*e+d)/3,(2*e+f)/3,f);i.length=n}return p}function o(a,b){var c,d,e,f,g=[],h=[],i=0,j=0,k=(b=b>>0||6)-1,l=[],m=[];for(c in a)!function(a,b,c){for(var d,e,f,g,h,i,k,l,m,n,o=1/c,p=a.length;-1<--p;)for(f=(m=a[p]).a,g=m.d-f,h=m.c-f,i=m.b-f,e=0,k=1;k<=c;k++)d=e-(e=((n=o*k)*n*g+3*(l=1-n)*(n*h+l*i))*n),b[n=p*c+k-1]=(b[n]||0)+d*d}(a[c],g,b);for(e=g.length,d=0;d<e;d++)i+=Math.sqrt(g[d]),m[f=d%b]=i,f==k&&(j+=i,l[f=d/b>>0]=m,h[f]=j,i=0,m=[]);return{length:j,lengths:h,segments:l}}var a,b,c,d,e,f,p,q;_gsScope._gsDefine(\"TweenMax\",[\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"],function(a,b,c){function d(a){for(var c=[],d=a.length,b=0;b!==d;c.push(a[b++]));return c}function e(a,b,c){var d,e,f=a.cycle;for(d in f)e=f[d],a[d]=\"function\"==typeof e?e(c,b[c],b):e[c%e.length];delete a.cycle}function f(a){if(\"function\"==typeof a)return a;var b=\"object\"==typeof a?a:{each:a},c=b.ease,d=b.from||0,e=b.base||0,f={},g=isNaN(d),h=b.axis,i={center:.5,end:1}[d]||0;return function(a,j,k){var l,m,n,p,q,r,s,t,u=(k||b).length,v=f[u];if(!v){if(!(t=\"auto\"===b.grid?0:(b.grid||[1/0])[0])){for(r=-1/0;r<(r=k[t++].getBoundingClientRect().left)&&t<u;);t--}for(v=f[u]=[],l=g?Math.min(t,u)*i-.5:d%t,m=g?u*i/t-.5:d/t|0,s=1/(r=0),q=0;q<u;q++)n=q%t-l,p=m-(q/t|0),v[q]=p=h?Math.abs(\"y\"===h?p:n):Math.sqrt(n*n+p*p),r<p&&(r=p),p<s&&(s=p);v.max=r-s,v.min=s,v.v=u=b.amount||b.each*(u<t?u:h?\"y\"===h?u/t:t:Math.max(t,u/t))||0,v.b=u<0?e-u:e}return u=(v[a]-v.min)/v.max,v.b+(c?c.getRatio(u):u)*v.v}}var g=function(a,b,d){c.call(this,a,b,d),this._cycle=0,this._yoyo=!0===this.vars.yoyo||!!this.vars.yoyoEase,this._repeat=this.vars.repeat||0,this._repeatDelay=this.vars.repeatDelay||0,this._repeat&&this._uncache(!0),this.render=g.prototype.render},h=1e-8,i=c._internals,j=i.isSelector,k=i.isArray,l=g.prototype=c.to({},.1,{}),m=[];g.version=\"2.1.2\",l.constructor=g,l.kill()._gc=!1,g.killTweensOf=g.killDelayedCallsTo=c.killTweensOf,g.getTweensOf=c.getTweensOf,g.lagSmoothing=c.lagSmoothing,g.ticker=c.ticker,g.render=c.render,g.distribute=f,l.invalidate=function(){return this._yoyo=!0===this.vars.yoyo||!!this.vars.yoyoEase,this._repeat=this.vars.repeat||0,this._repeatDelay=this.vars.repeatDelay||0,this._yoyoEase=null,this._uncache(!0),c.prototype.invalidate.call(this)},l.updateTo=function(a,h){var d,e=this,f=e.ratio,g=e.vars.immediateRender||a.immediateRender;for(d in h&&e._startTime<e._timeline._time&&(e._startTime=e._timeline._time,e._uncache(!1),e._gc?e._enabled(!0,!1):e._timeline.insert(e,e._startTime-e._delay)),a)e.vars[d]=a[d];if(e._initted||g)if(h)e._initted=!1,g&&e.render(0,!0,!0);else if(e._gc&&e._enabled(!0,!1),e._notifyPluginsOfEnabled&&e._firstPT&&c._onPluginEvent(\"_onDisable\",e),.998<e._time/e._duration){h=e._totalTime;e.render(0,!0,!1),e._initted=!1,e.render(h,!0,!1)}else if(e._initted=!1,e._init(),0<e._time||g)for(var i,j=1/(1-f),k=e._firstPT;k;)i=k.s+k.c,k.c*=j,k.s=i-k.c,k=k._next;return e},l.render=function(a,b,d){this._initted||0===this._duration&&this.vars.repeat&&this.invalidate();var e,f,g,k,m,n,o,p=this,l=p._dirty?p.totalDuration():p._totalDuration,r=p._time,s=p._totalTime,t=p._cycle,u=p._duration,v=p._rawPrevTime;if(l-h<=a&&0<=a?(p._totalTime=l,p._cycle=p._repeat,p._yoyo&&0!=(1&p._cycle)?(p._time=0,p.ratio=p._ease._calcEnd?p._ease.getRatio(0):0):(p._time=u,p.ratio=p._ease._calcEnd?p._ease.getRatio(1):1),p._reversed||(e=!0,f=\"onComplete\",d=d||p._timeline.autoRemoveChildren),0!==u||!p._initted&&p.vars.lazy&&!d||(p._startTime===p._timeline._duration&&(a=0),(v<0||a<=0&&-h<=a||v===h&&\"isPause\"!==p.data)&&v!==a&&(d=!0,h<v&&(f=\"onReverseComplete\")),p._rawPrevTime=n=!b||a||v===a?a:h)):a<h?(p._totalTime=p._time=p._cycle=0,p.ratio=p._ease._calcEnd?p._ease.getRatio(0):0,(0!==s||0===u&&0<v)&&(f=\"onReverseComplete\",e=p._reversed),-h<a?a=0:a<0&&(p._active=!1,0!==u||!p._initted&&p.vars.lazy&&!d||(0<=v&&(d=!0),p._rawPrevTime=n=!b||a||v===a?a:h)),p._initted||(d=!0)):(p._totalTime=p._time=a,0!==p._repeat&&(m=u+p._repeatDelay,p._cycle=p._totalTime/m>>0,0!==p._cycle&&p._cycle===p._totalTime/m&&s<=a&&p._cycle--,p._time=p._totalTime-p._cycle*m,p._yoyo&&0!=(1&p._cycle)&&(p._time=u-p._time,(o=p._yoyoEase||p.vars.yoyoEase)&&(p._yoyoEase||(!0!==o||p._initted?p._yoyoEase=o=!0===o?p._ease:o instanceof Ease?o:Ease.map[o]:(o=p.vars.ease,p._yoyoEase=o=o?o instanceof Ease?o:\"function\"==typeof o?new Ease(o,p.vars.easeParams):Ease.map[o]||c.defaultEase:c.defaultEase)),p.ratio=o?1-o.getRatio((u-p._time)/u):0)),p._time>u?p._time=u:p._time<0&&(p._time=0)),p._easeType&&!o?(k=p._time/u,(1===(l=p._easeType)||3===l&&.5<=k)&&(k=1-k),3===l&&(k*=2),1===(m=p._easePower)?k*=k:2===m?k*=k*k:3===m?k*=k*k*k:4===m&&(k*=k*k*k*k),p.ratio=1===l?1-k:2===l?k:p._time/u<.5?k/2:1-k/2):o||(p.ratio=p._ease.getRatio(p._time/u))),r!==p._time||d||t!==p._cycle){if(!p._initted){if(p._init(),!p._initted||p._gc)return;if(!d&&p._firstPT&&(!1!==p.vars.lazy&&p._duration||p.vars.lazy&&!p._duration))return p._time=r,p._totalTime=s,p._rawPrevTime=v,p._cycle=t,i.lazyTweens.push(p),void(p._lazy=[a,b]);!p._time||e||o?e&&this._ease._calcEnd&&!o&&(p.ratio=p._ease.getRatio(0===p._time?0:1)):p.ratio=p._ease.getRatio(p._time/u)}for(!1!==p._lazy&&(p._lazy=!1),p._active||!p._paused&&p._time!==r&&0<=a&&(p._active=!0),0===s&&(2===p._initted&&0<a&&p._init(),p._startAt&&(0<=a?p._startAt.render(a,!0,d):f=f||\"_dummyGS\"),!p.vars.onStart||0===p._totalTime&&0!==u||(b||p._callback(\"onStart\"))),g=p._firstPT;g;)g.f?g.t[g.p](g.c*p.ratio+g.s):g.t[g.p]=g.c*p.ratio+g.s,g=g._next;p._onUpdate&&(a<0&&p._startAt&&p._startTime&&p._startAt.render(a,!0,d),b||p._totalTime===s&&!f||p._callback(\"onUpdate\")),p._cycle!==t&&(b||p._gc||p.vars.onRepeat&&p._callback(\"onRepeat\")),!f||p._gc&&!d||(a<0&&p._startAt&&!p._onUpdate&&p._startTime&&p._startAt.render(a,!0,d),e&&(p._timeline.autoRemoveChildren&&p._enabled(!1,!1),p._active=!1),!b&&p.vars[f]&&p._callback(f),0===u&&p._rawPrevTime===h&&n!==h&&(p._rawPrevTime=0))}else s!==p._totalTime&&p._onUpdate&&(b||p._callback(\"onUpdate\"))},g.to=function(a,b,c){return new g(a,b,c)},g.from=function(a,b,c){return c.runBackwards=!0,c.immediateRender=0!=c.immediateRender,new g(a,b,c)},g.fromTo=function(a,b,c,d){return d.startAt=c,d.immediateRender=0!=d.immediateRender&&0!=c.immediateRender,new g(a,b,d)},g.staggerTo=g.allTo=function(a,b,h,i,l,n,o){var p,q,r,s,t=[],u=f(h.stagger||i),v=h.cycle,w=(h.startAt||m).cycle;for(k(a)||(\"string\"==typeof a&&(a=c.selector(a)||a),j(a)&&(a=d(a))),p=(a=a||[]).length-1,r=0;r<=p;r++){for(s in q={},h)q[s]=h[s];if(v&&(e(q,a,r),null!=q.duration&&(b=q.duration,delete q.duration)),w){for(s in w=q.startAt={},h.startAt)w[s]=h.startAt[s];e(q.startAt,a,r)}q.delay=u(r,a[r],a)+(q.delay||0),r===p&&l&&(q.onComplete=function(){h.onComplete&&h.onComplete.apply(h.onCompleteScope||this,arguments),l.apply(o||h.callbackScope||this,n||m)}),t[r]=new g(a[r],b,q)}return t},g.staggerFrom=g.allFrom=function(a,b,c,d,e,f,h){return c.runBackwards=!0,c.immediateRender=0!=c.immediateRender,g.staggerTo(a,b,c,d,e,f,h)},g.staggerFromTo=g.allFromTo=function(a,b,c,d,e,f,h,i){return d.startAt=c,d.immediateRender=0!=d.immediateRender&&0!=c.immediateRender,g.staggerTo(a,b,d,e,f,h,i)},g.delayedCall=function(a,b,c,d,e){return new g(b,0,{delay:a,onComplete:b,onCompleteParams:c,callbackScope:d,onReverseComplete:b,onReverseCompleteParams:c,immediateRender:!1,useFrames:e,overwrite:0})},g.set=function(a,b){return new g(a,0,b)},g.isTweening=function(a){return 0<c.getTweensOf(a,!0).length};var n=function(a,b){for(var d=[],e=0,f=a._first;f;)f instanceof c?d[e++]=f:(b&&(d[e++]=f),e=(d=d.concat(n(f,b))).length),f=f._next;return d},o=g.getAllTweens=function(b){return n(a._rootTimeline,b).concat(n(a._rootFramesTimeline,b))};g.killAll=function(a,c,d,e){null==c&&(c=!0),null==d&&(d=!0);for(var f,g,i=o(0!=e),j=i.length,k=c&&d&&e,h=0;h<j;h++)g=i[h],(k||g instanceof b||(f=g.target===g.vars.onComplete)&&d||c&&!f)&&(a?g.totalTime(g._reversed?0:g.totalDuration()):g._enabled(!1,!1))},g.killChildTweensOf=function(a,b){if(null!=a){var e,f,h,l,m,n=i.tweenLookup;if(\"string\"==typeof a&&(a=c.selector(a)||a),j(a)&&(a=d(a)),k(a))for(l=a.length;-1<--l;)g.killChildTweensOf(a[l],b);else{for(h in e=[],n)for(f=n[h].target.parentNode;f;)f===a&&(e=e.concat(n[h].tweens)),f=f.parentNode;for(m=e.length,l=0;l<m;l++)b&&e[l].totalTime(e[l].totalDuration()),e[l]._enabled(!1,!1)}}};function p(a,c,d,e){c=!1!==c,d=!1!==d;for(var f,g,h=o(e=!1!==e),i=c&&d&&e,j=h.length;-1<--j;)g=h[j],(i||g instanceof b||(f=g.target===g.vars.onComplete)&&d||c&&!f)&&g.paused(a)}return g.pauseAll=function(a,b,c){p(!0,a,b,c)},g.resumeAll=function(a,b,c){p(!1,a,b,c)},g.globalTimeScale=function(b){var d=a._rootTimeline,e=c.ticker.time;return arguments.length?(d._startTime=e-(e-d._startTime)*d._timeScale/(b=b||h),d=a._rootFramesTimeline,e=c.ticker.frame,d._startTime=e-(e-d._startTime)*d._timeScale/b,d._timeScale=a._rootTimeline._timeScale=b):d._timeScale},l.progress=function(a,b){return arguments.length?this.totalTime(this.duration()*(this._yoyo&&0!=(1&this._cycle)?1-a:a)+this._cycle*(this._duration+this._repeatDelay),b):this._time/this.duration()},l.totalProgress=function(a,b){return arguments.length?this.totalTime(this.totalDuration()*a,b):this._totalTime/this.totalDuration()},l.time=function(a,b){if(!arguments.length)return this._time;this._dirty&&this.totalDuration();var c=this._duration,d=this._cycle,e=d*(c+this._repeatDelay);return c<a&&(a=c),this.totalTime(this._yoyo&&1&d?c-a+e:this._repeat?a+e:a,b)},l.duration=function(b){return arguments.length?a.prototype.duration.call(this,b):this._duration},l.totalDuration=function(a){return arguments.length?-1===this._repeat?this:this.duration((a-this._repeat*this._repeatDelay)/(this._repeat+1)):(this._dirty&&(this._totalDuration=-1===this._repeat?999999999999:this._duration*(this._repeat+1)+this._repeatDelay*this._repeat,this._dirty=!1),this._totalDuration)},l.repeat=function(a){return arguments.length?(this._repeat=a,this._uncache(!0)):this._repeat},l.repeatDelay=function(a){return arguments.length?(this._repeatDelay=a,this._uncache(!0)):this._repeatDelay},l.yoyo=function(a){return arguments.length?(this._yoyo=a,this):this._yoyo},g},!0),_gsScope._gsDefine(\"TimelineLite\",[\"core.Animation\",\"core.SimpleTimeline\",\"TweenLite\"],function(a,b,c){function d(a){b.call(this,a);var c,d,e=this,f=e.vars;for(d in e._labels={},e.autoRemoveChildren=!!f.autoRemoveChildren,e.smoothChildTiming=!!f.smoothChildTiming,e._sortChildren=!0,e._onUpdate=f.onUpdate,f)c=f[d],i(c)&&-1!==c.join(\"\").indexOf(\"{self}\")&&(f[d]=e._swapSelfInParams(c));i(f.tweens)&&e.add(f.tweens,0,f.align,f.stagger)}function m(a){var b,c={};for(b in a)c[b]=a[b];return c}function n(a,b,c){var d,e,f=a.cycle;for(d in f)e=f[d],a[d]=\"function\"==typeof e?e(c,b[c],b):e[c%e.length];delete a.cycle}function q(a,b,c,d){var e=\"immediateRender\";return e in b||(b[e]=!(c&&!1===c[e]||d)),b}function r(a){if(\"function\"==typeof a)return a;var b=\"object\"==typeof a?a:{each:a},c=b.ease,d=b.from||0,e=b.base||0,f={},g=isNaN(d),h=b.axis,i={center:.5,end:1}[d]||0;return function(a,j,k){var l,m,n,p,q,r,s,t,u=(k||b).length,v=f[u];if(!v){if(!(t=\"auto\"===b.grid?0:(b.grid||[1/0])[0])){for(r=-1/0;r<(r=k[t++].getBoundingClientRect().left)&&t<u;);t--}for(v=f[u]=[],l=g?Math.min(t,u)*i-.5:d%t,m=g?u*i/t-.5:d/t|0,s=1/(r=0),q=0;q<u;q++)n=q%t-l,p=m-(q/t|0),v[q]=p=h?Math.abs(\"y\"===h?p:n):Math.sqrt(n*n+p*p),r<p&&(r=p),p<s&&(s=p);v.max=r-s,v.min=s,v.v=u=b.amount||b.each*(u<t?u:h?\"y\"===h?u/t:t:Math.max(t,u/t))||0,v.b=u<0?e-u:e}return u=(v[a]-v.min)/v.max,v.b+(c?c.getRatio(u):u)*v.v}}var e=1e-8,f=c._internals,s=d._internals={},h=f.isSelector,i=f.isArray,j=f.lazyTweens,k=f.lazyRender,l=_gsScope._gsDefine.globals,o=s.pauseCallback=function(){},s=d.prototype=new b;return d.version=\"2.1.2\",d.distribute=r,s.constructor=d,s.kill()._gc=s._forcingPlayhead=s._hasPause=!1,s.to=function(a,b,d,e){var f=d.repeat&&l.TweenMax||c;return b?this.add(new f(a,b,d),e):this.set(a,d,e)},s.from=function(a,b,d,e){return this.add((d.repeat&&l.TweenMax||c).from(a,b,q(0,d)),e)},s.fromTo=function(a,b,d,e,f){var g=e.repeat&&l.TweenMax||c;return e=q(0,e,d),b?this.add(g.fromTo(a,b,d,e),f):this.set(a,e,f)},s.staggerTo=function(a,b,e,f,g,i,j,k){var l,o,q=new d({onComplete:i,onCompleteParams:j,callbackScope:k,smoothChildTiming:this.smoothChildTiming}),s=r(e.stagger||f),t=e.startAt,u=e.cycle;for(\"string\"==typeof a&&(a=c.selector(a)||a),h(a=a||[])&&(a=function(a){for(var c=[],d=a.length,b=0;b!==d;c.push(a[b++]));return c}(a)),o=0;o<a.length;o++)l=m(e),t&&(l.startAt=m(t),t.cycle&&n(l.startAt,a,o)),u&&(n(l,a,o),null!=l.duration&&(b=l.duration,delete l.duration)),q.to(a[o],b,l,s(o,a[o],a));return this.add(q,g)},s.staggerFrom=function(a,b,c,d,e,f,g,h){return c.runBackwards=!0,this.staggerTo(a,b,q(0,c),d,e,f,g,h)},s.staggerFromTo=function(a,b,c,d,e,f,g,h,i){return d.startAt=c,this.staggerTo(a,b,q(0,d,c),e,f,g,h,i)},s.call=function(a,b,d,e){return this.add(c.delayedCall(0,a,b,d),e)},s.set=function(a,b,d){return this.add(new c(a,0,q(0,b,null,!0)),d)},d.exportRoot=function(j,b){null==(j=j||{}).smoothChildTiming&&(j.smoothChildTiming=!0);var e,f,g,h,i=new d(j),j=i._timeline;for(null==b&&(b=!0),j._remove(i,!0),i._startTime=0,i._rawPrevTime=i._time=i._totalTime=j._time,g=j._first;g;)h=g._next,b&&g instanceof c&&g.target===g.vars.onComplete||((f=g._startTime-g._delay)<0&&(e=1),i.add(g,f)),g=h;return j.add(i,0),e&&i.totalDuration(),i},s.add=function(e,f,g,h){var j,k,l,m,n,o,p=this;if(\"number\"!=typeof f&&(f=p._parseTimeOrLabel(f,0,!0,e)),!(e instanceof a)){if(e instanceof Array||e&&e.push&&i(e)){for(g=g||\"normal\",h=h||0,j=f,k=e.length,l=0;l<k;l++)i(m=e[l])&&(m=new d({tweens:m})),p.add(m,j),\"string\"!=typeof m&&\"function\"!=typeof m&&(\"sequence\"===g?j=m._startTime+m.totalDuration()/m._timeScale:\"start\"===g&&(m._startTime-=m.delay())),j+=h;return p._uncache(!0)}if(\"string\"==typeof e)return p.addLabel(e,f);if(\"function\"!=typeof e)throw\"Cannot add \"+e+\" into the timeline; it is not a tween, timeline, function, or string.\";e=c.delayedCall(0,e)}if(b.prototype.add.call(p,e,f),(e._time||!e._duration&&e._initted)&&(j=(p.rawTime()-e._startTime)*e._timeScale,(!e._duration||1e-5<Math.abs(Math.max(0,Math.min(e.totalDuration(),j)))-e._totalTime)&&e.render(j,!1,!1)),(p._gc||p._time===p._duration)&&!p._paused&&p._duration<p.duration())for(o=(n=p).rawTime()>e._startTime;n._timeline;)o&&n._timeline.smoothChildTiming?n.totalTime(n._totalTime,!0):n._gc&&n._enabled(!0,!1),n=n._timeline;return p},s.remove=function(b){if(b instanceof a){this._remove(b,!1);var c=b._timeline=b.vars.useFrames?a._rootFramesTimeline:a._rootTimeline;return b._startTime=(b._paused?b._pauseTime:c._time)-(b._reversed?b.totalDuration()-b._totalTime:b._totalTime)/b._timeScale,this}if(b instanceof Array||b&&b.push&&i(b)){for(var d=b.length;-1<--d;)this.remove(b[d]);return this}return\"string\"==typeof b?this.removeLabel(b):this.kill(null,b)},s._remove=function(a,c){return b.prototype._remove.call(this,a,c),this._last?this._time>this.duration()&&(this._time=this._duration,this._totalTime=this._totalDuration):this._time=this._totalTime=this._duration=this._totalDuration=0,this},s.append=function(a,b){return this.add(a,this._parseTimeOrLabel(null,b,!0,a))},s.insert=s.insertMultiple=function(a,b,c,d){return this.add(a,b||0,c,d)},s.appendMultiple=function(a,b,c,d){return this.add(a,this._parseTimeOrLabel(null,b,!0,a),c,d)},s.addLabel=function(a,b){return this._labels[a]=this._parseTimeOrLabel(b),this},s.addPause=function(a,b,d,f){f=c.delayedCall(0,o,d,f||this);return f.vars.onComplete=f.vars.onReverseComplete=b,f.data=\"isPause\",this._hasPause=!0,this.add(f,a)},s.removeLabel=function(a){return delete this._labels[a],this},s.getLabelTime=function(a){return null!=this._labels[a]?this._labels[a]:-1},s._parseTimeOrLabel=function(b,c,d,e){var f,g;if(e instanceof a&&e.timeline===this)this.remove(e);else if(e&&(e instanceof Array||e.push&&i(e)))for(g=e.length;-1<--g;)e[g]instanceof a&&e[g].timeline===this&&this.remove(e[g]);if(f=\"number\"!=typeof b||c?99999999999<this.duration()?this.recent().endTime(!1):this._duration:0,\"string\"==typeof c)return this._parseTimeOrLabel(c,d&&\"number\"==typeof b&&null==this._labels[c]?b-f:0,d);if(c=c||0,\"string\"!=typeof b||!isNaN(b)&&null==this._labels[b])null==b&&(b=f);else{if(-1===(g=b.indexOf(\"=\")))return null==this._labels[b]?d?this._labels[b]=f+c:c:this._labels[b]+c;c=parseInt(b.charAt(g-1)+\"1\",10)*Number(b.substr(g+1)),b=1<g?this._parseTimeOrLabel(b.substr(0,g-1),0,d):f}return Number(b)+c},s.seek=function(a,b){return this.totalTime(\"number\"==typeof a?a:this._parseTimeOrLabel(a),!1!==b)},s.stop=function(){return this.paused(!0)},s.gotoAndPlay=function(a,b){return this.play(a,b)},s.gotoAndStop=function(a,b){return this.pause(a,b)},s.render=function(a,b,c){this._gc&&this._enabled(!0,!1);var d,f,g,h,i,l,m,n,o=this,p=o._time,q=o._dirty?o.totalDuration():o._totalDuration,r=o._startTime,s=o._timeScale,t=o._paused;if(p!==o._time&&(a+=o._time-p),q-e<=a&&0<=a)o._totalTime=o._time=q,o._reversed||o._hasPausedChild()||(f=!0,h=\"onComplete\",i=!!o._timeline.autoRemoveChildren,0===o._duration&&(a<=0&&-e<=a||o._rawPrevTime<0||o._rawPrevTime===e)&&o._rawPrevTime!==a&&o._first&&(i=!0,o._rawPrevTime>e&&(h=\"onReverseComplete\"))),o._rawPrevTime=o._duration||!b||a||o._rawPrevTime===a?a:e,a=q+1e-4;else if(a<e)if(o._totalTime=o._time=0,-e<a&&(a=0),(0!==p||0===o._duration&&o._rawPrevTime!==e&&(0<o._rawPrevTime||a<0&&0<=o._rawPrevTime))&&(h=\"onReverseComplete\",f=o._reversed),a<0)o._active=!1,o._timeline.autoRemoveChildren&&o._reversed?(i=f=!0,h=\"onReverseComplete\"):0<=o._rawPrevTime&&o._first&&(i=!0),o._rawPrevTime=a;else{if(o._rawPrevTime=o._duration||!b||a||o._rawPrevTime===a?a:e,0===a&&f)for(d=o._first;d&&0===d._startTime;)d._duration||(f=!1),d=d._next;a=0,o._initted||(i=!0)}else{if(o._hasPause&&!o._forcingPlayhead&&!b){if(p<=a)for(d=o._first;d&&d._startTime<=a&&!l;)d._duration||\"isPause\"!==d.data||d.ratio||0===d._startTime&&0===o._rawPrevTime||(l=d),d=d._next;else for(d=o._last;d&&d._startTime>=a&&!l;)d._duration||\"isPause\"===d.data&&0<d._rawPrevTime&&(l=d),d=d._prev;l&&(o._time=o._totalTime=a=l._startTime,n=o._startTime+a/o._timeScale)}o._totalTime=o._time=o._rawPrevTime=a}if(o._time!==p&&o._first||c||i||l){if(o._initted||(o._initted=!0),o._active||!o._paused&&o._time!==p&&0<a&&(o._active=!0),0===p&&o.vars.onStart&&(0===o._time&&o._duration||b||o._callback(\"onStart\")),p<=(m=o._time))for(d=o._first;d&&(g=d._next,m===o._time&&(!o._paused||t));)(d._active||d._startTime<=m&&!d._paused&&!d._gc)&&(l===d&&(o.pause(),o._pauseTime=n),d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)),d=g;else for(d=o._last;d&&(g=d._prev,m===o._time&&(!o._paused||t));){if(d._active||d._startTime<=p&&!d._paused&&!d._gc){if(l===d){for(l=d._prev;l&&l.endTime()>o._time;)l.render(l._reversed?l.totalDuration()-(a-l._startTime)*l._timeScale:(a-l._startTime)*l._timeScale,b,c),l=l._prev;l=null,o.pause(),o._pauseTime=n}d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)}d=g}o._onUpdate&&(b||(j.length&&k(),o._callback(\"onUpdate\"))),h&&(o._gc||r!==o._startTime&&s===o._timeScale||!(0===o._time||q>=o.totalDuration())||(f&&(j.length&&k(),o._timeline.autoRemoveChildren&&o._enabled(!1,!1),o._active=!1),!b&&o.vars[h]&&o._callback(h)))}},s._hasPausedChild=function(){for(var a=this._first;a;){if(a._paused||a instanceof d&&a._hasPausedChild())return!0;a=a._next}return!1},s.getChildren=function(a,b,d,e){e=e||-9999999999;for(var f=[],g=this._first,h=0;g;)g._startTime<e||(g instanceof c?!1!==b&&(f[h++]=g):(!1!==d&&(f[h++]=g),!1!==a&&(h=(f=f.concat(g.getChildren(!0,b,d))).length))),g=g._next;return f},s.getTweensOf=function(a,b){var d,e,f=this._gc,g=[],h=0;for(f&&this._enabled(!0,!0),e=(d=c.getTweensOf(a)).length;-1<--e;)(d[e].timeline===this||b&&this._contains(d[e]))&&(g[h++]=d[e]);return f&&this._enabled(!1,!0),g},s.recent=function(){return this._recent},s._contains=function(a){for(var b=a.timeline;b;){if(b===this)return!0;b=b.timeline}return!1},s.shiftChildren=function(a,b,c){c=c||0;for(var d,e=this._first,f=this._labels;e;)e._startTime>=c&&(e._startTime+=a),e=e._next;if(b)for(d in f)f[d]>=c&&(f[d]+=a);return this._uncache(!0)},s._kill=function(a,b){if(!a&&!b)return this._enabled(!1,!1);for(var c=b?this.getTweensOf(b):this.getChildren(!0,!0,!1),d=c.length,e=!1;-1<--d;)c[d]._kill(a,b)&&(e=!0);return e},s.clear=function(a){var b=this.getChildren(!1,!0,!0),c=b.length;for(this._time=this._totalTime=0;-1<--c;)b[c]._enabled(!1,!1);return!1!==a&&(this._labels={}),this._uncache(!0)},s.invalidate=function(){for(var b=this._first;b;)b.invalidate(),b=b._next;return a.prototype.invalidate.call(this)},s._enabled=function(a,c){if(a===this._gc)for(var d=this._first;d;)d._enabled(a,!0),d=d._next;return b.prototype._enabled.call(this,a,c)},s.totalTime=function(b,c,d){this._forcingPlayhead=!0;var e=a.prototype.totalTime.apply(this,arguments);return this._forcingPlayhead=!1,e},s.duration=function(a){return arguments.length?(0!==this.duration()&&0!==a&&this.timeScale(this._duration/a),this):(this._dirty&&this.totalDuration(),this._duration)},s.totalDuration=function(a){if(arguments.length)return a&&this.totalDuration()?this.timeScale(this._totalDuration/a):this;if(this._dirty){for(var b,c,d=0,e=this,f=e._last,g=999999999999;f;)b=f._prev,f._dirty&&f.totalDuration(),f._startTime>g&&e._sortChildren&&!f._paused&&!e._calculatingDuration?(e._calculatingDuration=1,e.add(f,f._startTime-f._delay),e._calculatingDuration=0):g=f._startTime,f._startTime<0&&!f._paused&&(d-=f._startTime,e._timeline.smoothChildTiming&&(e._startTime+=f._startTime/e._timeScale,e._time-=f._startTime,e._totalTime-=f._startTime,e._rawPrevTime-=f._startTime),e.shiftChildren(-f._startTime,!1,-9999999999),g=0),d<(c=f._startTime+f._totalDuration/f._timeScale)&&(d=c),f=b;e._duration=e._totalDuration=d,e._dirty=!1}return this._totalDuration},s.paused=function(b){if(!1===b&&this._paused)for(var c=this._first;c;)c._startTime===this._time&&\"isPause\"===c.data&&(c._rawPrevTime=0),c=c._next;return a.prototype.paused.apply(this,arguments)},s.usesFrames=function(){for(var b=this._timeline;b._timeline;)b=b._timeline;return b===a._rootFramesTimeline},s.rawTime=function(a){return a&&(this._paused||this._repeat&&0<this.time()&&this.totalProgress()<1)?this._totalTime%(this._duration+this._repeatDelay):this._paused?this._totalTime:(this._timeline.rawTime(a)-this._startTime)*this._timeScale},d},!0),_gsScope._gsDefine(\"TimelineMax\",[\"TimelineLite\",\"TweenLite\",\"easing.Ease\"],function(a,b,k){function d(b){a.call(this,b),this._repeat=this.vars.repeat||0,this._repeatDelay=this.vars.repeatDelay||0,this._cycle=0,this._yoyo=!!this.vars.yoyo,this._dirty=!0}var e=1e-8,f=b._internals,g=f.lazyTweens,h=f.lazyRender,i=_gsScope._gsDefine.globals,j=new k(null,null,1,0),k=d.prototype=new a;return k.constructor=d,k.kill()._gc=!1,d.version=\"2.1.2\",k.invalidate=function(){return this._yoyo=!!this.vars.yoyo,this._repeat=this.vars.repeat||0,this._repeatDelay=this.vars.repeatDelay||0,this._uncache(!0),a.prototype.invalidate.call(this)},k.addCallback=function(a,c,d,e){return this.add(b.delayedCall(0,a,d,e),c)},k.removeCallback=function(a,b){if(a)if(null==b)this._kill(null,a);else for(var c=this.getTweensOf(a,!1),d=c.length,e=this._parseTimeOrLabel(b);-1<--d;)c[d]._startTime===e&&c[d]._enabled(!1,!1);return this},k.removePause=function(b){return this.removeCallback(a._internals.pauseCallback,b)},k.tweenTo=function(a,c){c=c||{};var d,e,f,g={ease:j,useFrames:this.usesFrames(),immediateRender:!1,lazy:!1},h=c.repeat&&i.TweenMax||b;for(e in c)g[e]=c[e];return g.time=this._parseTimeOrLabel(a),d=Math.abs(Number(g.time)-this._time)/this._timeScale||.001,f=new h(this,d,g),g.onStart=function(){f.target.paused(!0),f.vars.time===f.target.time()||d!==f.duration()||f.isFromTo||f.duration(Math.abs(f.vars.time-f.target.time())/f.target._timeScale).render(f.time(),!0,!0),c.onStart&&c.onStart.apply(c.onStartScope||c.callbackScope||f,c.onStartParams||[])},f},k.tweenFromTo=function(a,b,d){d=d||{},a=this._parseTimeOrLabel(a),d.startAt={onComplete:this.seek,onCompleteParams:[a],callbackScope:this},d.immediateRender=!1!==d.immediateRender;d=this.tweenTo(b,d);return d.isFromTo=1,d.duration(Math.abs(d.vars.time-a)/this._timeScale||.001)},k.render=function(a,b,c){this._gc&&this._enabled(!0,!1);var d,f,i,j,k,m,n,o,p=this,q=p._time,r=p._dirty?p.totalDuration():p._totalDuration,s=p._duration,t=p._totalTime,u=p._startTime,v=p._timeScale,w=p._rawPrevTime,x=p._paused,y=p._cycle;if(q!==p._time&&(a+=p._time-q),r-e<=a&&0<=a)p._locked||(p._totalTime=r,p._cycle=p._repeat),p._reversed||p._hasPausedChild()||(f=!0,j=\"onComplete\",k=!!p._timeline.autoRemoveChildren,0===p._duration&&(a<=0&&-e<=a||w<0||w===e)&&w!==a&&p._first&&(k=!0,e<w&&(j=\"onReverseComplete\"))),p._rawPrevTime=p._duration||!b||a||p._rawPrevTime===a?a:e,p._yoyo&&1&p._cycle?p._time=a=0:a=(p._time=s)+1e-4;else if(a<e)if(p._locked||(p._totalTime=p._cycle=0),p._time=0,-e<a&&(a=0),(0!==q||0===s&&w!==e&&(0<w||a<0&&0<=w)&&!p._locked)&&(j=\"onReverseComplete\",f=p._reversed),a<0)p._active=!1,p._timeline.autoRemoveChildren&&p._reversed?(k=f=!0,j=\"onReverseComplete\"):0<=w&&p._first&&(k=!0),p._rawPrevTime=a;else{if(p._rawPrevTime=s||!b||a||p._rawPrevTime===a?a:e,0===a&&f)for(d=p._first;d&&0===d._startTime;)d._duration||(f=!1),d=d._next;a=0,p._initted||(k=!0)}else if(0===s&&w<0&&(k=!0),p._time=p._rawPrevTime=a,p._locked||(p._totalTime=a,0!==p._repeat&&(E=s+p._repeatDelay,p._cycle=p._totalTime/E>>0,p._cycle&&p._cycle===p._totalTime/E&&t<=a&&p._cycle--,p._time=p._totalTime-p._cycle*E,p._yoyo&&1&p._cycle&&(p._time=s-p._time),p._time>s?a=(p._time=s)+1e-4:p._time<0?p._time=a=0:a=p._time)),p._hasPause&&!p._forcingPlayhead&&!b){if(q<=(a=p._time)||p._repeat&&y!==p._cycle)for(d=p._first;d&&d._startTime<=a&&!m;)d._duration||\"isPause\"!==d.data||d.ratio||0===d._startTime&&0===p._rawPrevTime||(m=d),d=d._next;else for(d=p._last;d&&d._startTime>=a&&!m;)d._duration||\"isPause\"===d.data&&0<d._rawPrevTime&&(m=d),d=d._prev;m&&(o=p._startTime+m._startTime/p._timeScale,m._startTime<s&&(p._time=p._rawPrevTime=a=m._startTime,p._totalTime=a+p._cycle*(p._totalDuration+p._repeatDelay)))}if(p._cycle!==y&&!p._locked){var z=p._yoyo&&0!=(1&y),A=z===(p._yoyo&&0!=(1&p._cycle)),B=p._totalTime,C=p._cycle,D=p._rawPrevTime,E=p._time;if(p._totalTime=y*s,p._cycle<y?z=!z:p._totalTime+=s,p._time=q,p._rawPrevTime=0===s?w-1e-4:w,p._cycle=y,p._locked=!0,p.render(q=z?0:s,b,0===s),b||p._gc||p.vars.onRepeat&&(p._cycle=C,p._locked=!1,p._callback(\"onRepeat\")),q!==p._time)return;if(A&&(p._cycle=y,p._locked=!0,p.render(q=z?s+1e-4:-1e-4,!0,!1)),p._locked=!1,p._paused&&!x)return;p._time=E,p._totalTime=B,p._cycle=C,p._rawPrevTime=D}if(p._time!==q&&p._first||c||k||m){if(p._initted||(p._initted=!0),p._active||!p._paused&&p._totalTime!==t&&0<a&&(p._active=!0),0===t&&p.vars.onStart&&(0===p._totalTime&&p._totalDuration||b||p._callback(\"onStart\")),q<=(n=p._time))for(d=p._first;d&&(i=d._next,n===p._time&&(!p._paused||x));)(d._active||d._startTime<=p._time&&!d._paused&&!d._gc)&&(m===d&&(p.pause(),p._pauseTime=o),d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)),d=i;else for(d=p._last;d&&(i=d._prev,n===p._time&&(!p._paused||x));){if(d._active||d._startTime<=q&&!d._paused&&!d._gc){if(m===d){for(m=d._prev;m&&m.endTime()>p._time;)m.render(m._reversed?m.totalDuration()-(a-m._startTime)*m._timeScale:(a-m._startTime)*m._timeScale,b,c),m=m._prev;m=null,p.pause(),p._pauseTime=o}d._reversed?d.render((d._dirty?d.totalDuration():d._totalDuration)-(a-d._startTime)*d._timeScale,b,c):d.render((a-d._startTime)*d._timeScale,b,c)}d=i}p._onUpdate&&(b||(g.length&&h(),p._callback(\"onUpdate\"))),j&&(p._locked||p._gc||u!==p._startTime&&v===p._timeScale||!(0===p._time||r>=p.totalDuration())||(f&&(g.length&&h(),p._timeline.autoRemoveChildren&&p._enabled(!1,!1),p._active=!1),!b&&p.vars[j]&&p._callback(j)))}else t!==p._totalTime&&p._onUpdate&&(b||p._callback(\"onUpdate\"))},k.getActive=function(a,b,c){for(var e,f=[],g=this.getChildren(a||null==a,b||null==a,!!c),h=0,i=g.length,d=0;d<i;d++)(e=g[d]).isActive()&&(f[h++]=e);return f},k.getLabelAfter=function(a){a||0!==a&&(a=this._time);for(var c=this.getLabelsArray(),d=c.length,b=0;b<d;b++)if(c[b].time>a)return c[b].name;return null},k.getLabelBefore=function(a){null==a&&(a=this._time);for(var b=this.getLabelsArray(),c=b.length;-1<--c;)if(b[c].time<a)return b[c].name;return null},k.getLabelsArray=function(){var a,b=[],c=0;for(a in this._labels)b[c++]={time:this._labels[a],name:a};return b.sort(function(a,b){return a.time-b.time}),b},k.invalidate=function(){return this._locked=!1,a.prototype.invalidate.call(this)},k.progress=function(a,b){return arguments.length?this.totalTime(this.duration()*(this._yoyo&&0!=(1&this._cycle)?1-a:a)+this._cycle*(this._duration+this._repeatDelay),b):this._time/this.duration()||0},k.totalProgress=function(a,b){return arguments.length?this.totalTime(this.totalDuration()*a,b):this._totalTime/this.totalDuration()||0},k.totalDuration=function(b){return arguments.length?-1!==this._repeat&&b?this.timeScale(this.totalDuration()/b):this:(this._dirty&&(a.prototype.totalDuration.call(this),this._totalDuration=-1===this._repeat?999999999999:this._duration*(this._repeat+1)+this._repeatDelay*this._repeat),this._totalDuration)},k.time=function(a,b){if(!arguments.length)return this._time;this._dirty&&this.totalDuration();var c=this._duration,d=this._cycle,e=d*(c+this._repeatDelay);return c<a&&(a=c),this.totalTime(this._yoyo&&1&d?c-a+e:this._repeat?a+e:a,b)},k.repeat=function(a){return arguments.length?(this._repeat=a,this._uncache(!0)):this._repeat},k.repeatDelay=function(a){return arguments.length?(this._repeatDelay=a,this._uncache(!0)):this._repeatDelay},k.yoyo=function(a){return arguments.length?(this._yoyo=a,this):this._yoyo},k.currentLabel=function(a){return arguments.length?this.seek(a,!0):this.getLabelBefore(this._time+e)},d},!0),a=180/Math.PI,b=[],c=[],d=[],e={},f=_gsScope._gsDefine.globals,q=(p=_gsScope._gsDefine.plugin({propName:\"bezier\",priority:-1,version:\"1.3.8\",API:2,global:!0,init:function(a,p,c){this._target=a,p instanceof Array&&(p={values:p}),this._func={},this._mod={},this._props=[],this._timeRes=null==p.timeResolution?6:parseInt(p.timeResolution,10);var d,e,f,g,h,i=p.values||[],j={},k=i[0],n=p.autoRotate||c.vars.orientToBezier;for(d in this._autoRotate=n?n instanceof Array?n:[[\"x\",\"y\",\"rotation\",!0!==n&&Number(n)||0]]:null,k)this._props.push(d);for(f=this._props.length;-1<--f;)d=this._props[f],this._overwriteProps.push(d),e=this._func[d]=\"function\"==typeof a[d],j[d]=e?a[d.indexOf(\"set\")||\"function\"!=typeof a[\"get\"+d.substr(3)]?d:\"get\"+d.substr(3)]():parseFloat(a[d]),h||j[d]!==i[0][d]&&(h=j);if(this._beziers=\"cubic\"!==p.type&&\"quadratic\"!==p.type&&\"soft\"!==p.type?l(i,isNaN(p.curviness)?1:p.curviness,!1,\"thruBasic\"===p.type,p.correlate,h):m(i,p.type,j),this._segCount=this._beziers[d].length,this._timeRes&&(p=o(this._beziers,this._timeRes),this._length=p.length,this._lengths=p.lengths,this._segments=p.segments,this._l1=this._li=this._s1=this._si=0,this._l2=this._lengths[0],this._curSeg=this._segments[0],this._s2=this._curSeg[0],this._prec=1/this._curSeg.length),n=this._autoRotate)for(this._initialRotations=[],n[0]instanceof Array||(this._autoRotate=n=[n]),f=n.length;-1<--f;){for(g=0;g<3;g++)d=n[f][g],this._func[d]=\"function\"==typeof a[d]&&a[d.indexOf(\"set\")||\"function\"!=typeof a[\"get\"+d.substr(3)]?d:\"get\"+d.substr(3)];d=n[f][2],this._initialRotations[f]=(this._func[d]?this._func[d].call(this._target):this._target[d])||0,this._overwriteProps.push(d)}return this._startRatio=c.vars.runBackwards?1:0,!0},set:function(b){var c,d,f,g,h,i,j,k,l,m=this._segCount,n=this._func,o=this._target,p=b!==this._startRatio;if(this._timeRes){if(k=this._lengths,l=this._curSeg,b*=this._length,e=this._li,b>this._l2&&e<m-1){for(j=m-1;e<j&&(this._l2=k[++e])<=b;);this._l1=k[e-1],this._li=e,this._curSeg=l=this._segments[e],this._s2=l[this._s1=this._si=0]}else if(b<this._l1&&0<e){for(;0<e&&(this._l1=k[--e])>=b;);0===e&&b<this._l1?this._l1=0:e++,this._l2=k[e],this._li=e,this._curSeg=l=this._segments[e],this._s1=l[(this._si=l.length-1)-1]||0,this._s2=l[this._si]}if(c=e,b-=this._l1,e=this._si,b>this._s2&&e<l.length-1){for(j=l.length-1;e<j&&(this._s2=l[++e])<=b;);this._s1=l[e-1],this._si=e}else if(b<this._s1&&0<e){for(;0<e&&(this._s1=l[--e])>=b;);0===e&&b<this._s1?this._s1=0:e++,this._s2=l[e],this._si=e}h=(e+(b-this._s1)/(this._s2-this._s1))*this._prec||0}else h=(b-(c=b<0?0:1<=b?m-1:m*b>>0)*(1/m))*m;for(d=1-h,e=this._props.length;-1<--e;)f=this._props[e],i=(h*h*(g=this._beziers[f][c]).da+3*d*(h*g.ca+d*g.ba))*h+g.a,this._mod[f]&&(i=this._mod[f](i,o)),n[f]?o[f](i):o[f]=i;if(this._autoRotate)for(var q,r,s,t,u,v,w,x=this._autoRotate,e=x.length;-1<--e;)f=x[e][2],v=x[e][3]||0,w=!0===x[e][4]?1:a,g=this._beziers[x[e][0]],q=this._beziers[x[e][1]],g&&q&&(g=g[c],q=q[c],r=g.a+(g.b-g.a)*h,r+=((t=g.b+(g.c-g.b)*h)-r)*h,t+=(g.c+(g.d-g.c)*h-t)*h,s=q.a+(q.b-q.a)*h,s+=((u=q.b+(q.c-q.b)*h)-s)*h,u+=(q.c+(q.d-q.c)*h-u)*h,i=p?Math.atan2(u-s,t-r)*w+v:this._initialRotations[e],this._mod[f]&&(i=this._mod[f](i,o)),n[f]?o[f](i):o[f]=i)}})).prototype,p.bezierThrough=l,p.cubicToQuadratic=i,p._autoCSS=!0,p.quadraticToCubic=function(a,b,c){return new g(a,(2*b+a)/3,(2*b+c)/3,c)},p._cssRegister=function(){var c,d,e,b=f.CSSPlugin;b&&(b=b._internals,c=b._parseToProxy,d=b._setPluginRatio,e=b.CSSPropTween,b._registerComplexSpecialProp(\"bezier\",{parser:function(a,b,f,g,h,i){b instanceof Array&&(b={values:b}),i=new p;var j,k,l,m=b.values,n=m.length-1,o=[],q={};if(n<0)return h;for(j=0;j<=n;j++)l=c(a,m[j],g,h,i,n!==j),o[j]=l.end;for(k in b)q[k]=b[k];return q.values=o,(h=new e(a,\"bezier\",0,0,l.pt,2)).data=l,h.plugin=i,h.setRatio=d,0===q.autoRotate&&(q.autoRotate=!0),!q.autoRotate||q.autoRotate instanceof Array||(j=!0===q.autoRotate?0:Number(q.autoRotate),q.autoRotate=null!=l.end.left?[[\"left\",\"top\",\"rotation\",j,!1]]:null!=l.end.x&&[[\"x\",\"y\",\"rotation\",j,!1]]),q.autoRotate&&(g._transform||g._enableTransforms(!1),l.autoRotate=g._target._gsTransform,l.proxy.rotation=l.autoRotate.rotation||0,g._overwriteProps.push(\"rotation\")),i._onInitTween(l.proxy,q,g._tween),h}}))},q._mod=function(a){for(var b,c=this._overwriteProps,d=c.length;-1<--d;)(b=a[c[d]])&&\"function\"==typeof b&&(this._mod[c[d]]=b)},q._kill=function(a){var b,c,d=this._props;for(b in this._beziers)if(b in a)for(delete this._beziers[b],delete this._func[b],c=d.length;-1<--c;)d[c]===b&&d.splice(c,1);if(d=this._autoRotate)for(c=d.length;-1<--c;)a[d[c][2]]&&d.splice(c,1);return this._super._kill.call(this,a)},_gsScope._gsDefine(\"plugins.CSSPlugin\",[\"plugins.TweenPlugin\",\"TweenLite\"],function(a,b){var c,d,e,f,g=function(){a.call(this,\"css\"),this._overwriteProps.length=0,this.setRatio=g.prototype.setRatio},h=_gsScope._gsDefine.globals,i={},j=g.prototype=new a(\"css\");(j.constructor=g).version=\"2.1.0\",g.API=2,g.defaultTransformPerspective=0,g.defaultSkewType=\"compensated\",g.defaultSmoothOrigin=!0,g.suffixMap={top:j=\"px\",right:j,bottom:j,left:j,width:j,height:j,fontSize:j,padding:j,margin:j,perspective:j,lineHeight:\"\"};function E(a,b){return b.toUpperCase()}function P(a,b){return b&&O.createElementNS?O.createElementNS(b,a):O.createElement(a)}function V(a){return x.test(\"string\"==typeof a?a:(a.currentStyle||a.style).filter||\"\")?parseFloat(RegExp.$1)/100:1}function W(a){_gsScope.console&&console.log(a)}function Z(a,b){var c,d,e=(b=b||Q).style;if(void 0!==e[a])return a;for(a=a.charAt(0).toUpperCase()+a.substr(1),c=[\"O\",\"Moz\",\"ms\",\"Ms\",\"Webkit\"],d=5;-1<--d&&void 0===e[c[d]+a];);return 0<=d?(X=\"-\"+(Y=3===d?\"ms\":c[d]).toLowerCase()+\"-\",Y+a):null}function _(a){return $.getComputedStyle(a)}function da(d,b){var c,e,f={};if(b=b||_(d))if(c=b.length)for(;-1<--c;)-1!==(e=b[c]).indexOf(\"-transform\")&&Ea!==e||(f[e.replace(C,E)]=b.getPropertyValue(e));else for(c in b)-1!==c.indexOf(\"Transform\")&&Da!==c||(f[c]=b[c]);else if(b=d.currentStyle||d.style)for(c in b)\"string\"==typeof c&&void 0===f[c]&&(f[c.replace(C,E)]=b[c]);return U||(f.opacity=V(d)),d=Sa(d,b,!1),f.rotation=d.rotation,f.skewX=d.skewX,f.scaleX=d.scaleX,f.scaleY=d.scaleY,f.x=d.x,f.y=d.y,Ga&&(f.z=d.z,f.rotationX=d.rotationX,f.rotationY=d.rotationY,f.scaleZ=d.scaleZ),f.filters&&delete f.filters,f}function ea(a,b,c,d,e){var f,g,h,i={},j=a.style;for(g in c)\"cssText\"!==g&&\"length\"!==g&&isNaN(g)&&(b[g]!==(f=c[g])||e&&e[g])&&-1===g.indexOf(\"Origin\")&&(\"number\"==typeof f||\"string\"==typeof f)&&(i[g]=\"auto\"!==f||\"left\"!==g&&\"top\"!==g?\"\"!==f&&\"auto\"!==f&&\"none\"!==f||\"string\"!=typeof b[g]||\"\"===b[g].replace(v,\"\")?f:0:ca(a,g),void 0!==j[g]&&(h=new ta(j,g,j[g],h)));if(d)for(g in d)\"className\"!==g&&(i[g]=d[g]);return{difs:i,firstMPT:h}}function ja(a,b){return\"string\"==typeof(a=\"function\"==typeof a?a(r,q):a)&&\"=\"===a.charAt(1)?parseInt(a.charAt(0)+\"1\",10)*parseFloat(a.substr(2)):parseFloat(a)-parseFloat(b)||0}function ka(a,b){var c=\"string\"==typeof(a=\"function\"==typeof a?a(r,q):a)&&\"=\"===a.charAt(1);return null==(a=\"string\"==typeof a&&\"v\"===a.charAt(a.length-2)?(c?a.substr(0,2):0)+window[\"inner\"+(\"vh\"===a.substr(-2)?\"Height\":\"Width\")]*(parseFloat(c?a.substr(2):a)/100):a)?b:c?parseInt(a.charAt(0)+\"1\",10)*parseFloat(a.substr(2))+b:parseFloat(a)||0}function la(a,b,c,d){var e,f,h;return h=(h=null==(a=\"function\"==typeof a?a(r,q):a)?b:\"number\"==typeof a?a:(e=360,f=a.split(\"_\"),h=((h=\"=\"===a.charAt(1))?parseInt(a.charAt(0)+\"1\",10)*parseFloat(f[0].substr(2)):parseFloat(f[0]))*(-1===a.indexOf(\"rad\")?1:L)-(h?0:b),f.length&&(d&&(d[c]=b+h),-1!==a.indexOf(\"short\")&&((h%=e)!==h%180&&(h=h<0?h+e:h-e)),-1!==a.indexOf(\"_cw\")&&h<0?h=(h+9999999999*e)%e-(h/e|0)*e:-1!==a.indexOf(\"ccw\")&&0<h&&(h=(h-9999999999*e)%e-(h/e|0)*e)),b+h))<1e-6&&-1e-6<h?0:h}function na(a,b,c){return 255*(6*(a=a<0?a+1:1<a?a-1:a)<1?b+(c-b)*a*6:a<.5?c:3*a<2?b+(c-b)*(2/3-a)*6:b)+.5|0}function pa(a,b){var c,d,e,f=a.match(qa)||[],g=0,h=\"\";if(!f.length)return a;for(c=0;c<f.length;c++)d=f[c],g+=(e=a.substr(g,a.indexOf(d,g)-g)).length+d.length,3===(d=oa(d,b)).length&&d.push(1),h+=e+(b?\"hsla(\"+d[0]+\",\"+d[1]+\"%,\"+d[2]+\"%,\"+d[3]:\"rgba(\"+d.join(\",\"))+\")\";return h+a.substr(g)}var k,l,m,n,o,p,q,r,s=/(?:\\-|\\.|\\b)(\\d|\\.|e\\-)+/g,t=/(?:\\d|\\-\\d|\\.\\d|\\-\\.\\d|\\+=\\d|\\-=\\d|\\+=.\\d|\\-=\\.\\d)+/g,u=/(?:\\+=|\\-=|\\-|\\b)[\\d\\-\\.]+[a-zA-Z0-9]*(?:%|\\b)/gi,v=/(?![+-]?\\d*\\.?\\d+|[+-]|e[+-]\\d+)[^0-9]/g,w=/(?:\\d|\\-|\\+|=|#|\\.)*/g,x=/opacity *= *([^)]*)/i,y=/opacity:([^;]*)/i,z=/alpha\\(opacity *=.+?\\)/i,A=/^(rgb|hsl)/,B=/([A-Z])/g,C=/-([a-z])/gi,D=/(^(?:url\\(\\\"|url\\())|(?:(\\\"\\))$|\\)$)/gi,F=/(?:Left|Right|Width)/i,G=/(M11|M12|M21|M22)=[\\d\\-\\.e]+/gi,H=/progid\\:DXImageTransform\\.Microsoft\\.Matrix\\(.+?\\)/i,I=/,(?=[^\\)]*(?:\\(|$))/gi,J=/[\\s,\\(]/i,K=Math.PI/180,L=180/Math.PI,M={},N={style:{}},O=_gsScope.document||{createElement:function(){return N}},Q=P(\"div\"),R=P(\"img\"),S=g._internals={_specialProps:i},T=(_gsScope.navigator||{}).userAgent||\"\",U=function(){var a=T.indexOf(\"Android\"),b=P(\"a\");return m=-1!==T.indexOf(\"Safari\")&&-1===T.indexOf(\"Chrome\")&&(-1===a||3<parseFloat(T.substr(a+8,2))),o=m&&parseFloat(T.substr(T.indexOf(\"Version/\")+8,2))<6,n=-1!==T.indexOf(\"Firefox\"),(/MSIE ([0-9]{1,}[\\.0-9]{0,})/.exec(T)||/Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/.exec(T))&&(p=parseFloat(RegExp.$1)),!!b&&(b.style.cssText=\"top:1px;opacity:.55;\",/^0.55/.test(b.style.opacity))}(),X=\"\",Y=\"\",$=\"undefined\"!=typeof window?window:O.defaultView||{getComputedStyle:function(){}},aa=g.getStyle=function(a,b,c,d,e){var f;return U||\"opacity\"!==b?(!d&&a.style[b]?f=a.style[b]:(c=c||_(a))?f=c[b]||c.getPropertyValue(b)||c.getPropertyValue(b.replace(B,\"-$1\").toLowerCase()):a.currentStyle&&(f=a.currentStyle[b]),null==e||f&&\"none\"!==f&&\"auto\"!==f&&\"auto auto\"!==f?f:e):V(a)},ba=S.convertToPixels=function(a,c,d,e,f){if(\"px\"===e||!e&&\"lineHeight\"!==c)return d;if(\"auto\"===e||!d)return 0;var h,i,j,k=F.test(c),l=a,m=Q.style,n=d<0,o=1===d;if(n&&(d=-d),o&&(d*=100),\"lineHeight\"!==c||e)if(\"%\"===e&&-1!==c.indexOf(\"border\"))h=d/100*(k?a.clientWidth:a.clientHeight);else{if(m.cssText=\"border:0 solid red;position:\"+aa(a,\"position\")+\";line-height:0;\",\"%\"!==e&&l.appendChild&&\"v\"!==e.charAt(0)&&\"rem\"!==e)m[k?\"borderLeftWidth\":\"borderTopWidth\"]=d+e;else{if(l=a.parentNode||O.body,-1!==aa(l,\"display\").indexOf(\"flex\")&&(m.position=\"absolute\"),i=l._gsCache,j=b.ticker.frame,i&&k&&i.time===j)return i.width*d/100;m[k?\"width\":\"height\"]=d+e}l.appendChild(Q),h=parseFloat(Q[k?\"offsetWidth\":\"offsetHeight\"]),l.removeChild(Q),k&&\"%\"===e&&!1!==g.cacheWidths&&((i=l._gsCache=l._gsCache||{}).time=j,i.width=h/d*100),0!==h||f||(h=ba(a,c,d,e,!0))}else i=_(a).lineHeight,a.style.lineHeight=d,h=parseFloat(_(a).lineHeight),a.style.lineHeight=i;return o&&(h/=100),n?-h:h},ca=S.calculateOffset=function(a,b,e){if(\"absolute\"!==aa(a,\"position\",e))return 0;var d=\"left\"===b?\"Left\":\"Top\",e=aa(a,\"margin\"+d,e);return a[\"offset\"+d]-(ba(a,b,parseFloat(e),e.replace(w,\"\"))||0)},fa={width:[\"Left\",\"Right\"],height:[\"Top\",\"Bottom\"]},ga=[\"marginLeft\",\"marginRight\",\"marginTop\",\"marginBottom\"],ia=function(a,b){if(\"contain\"===a||\"auto\"===a||\"auto auto\"===a)return a+\" \";var c,d=(a=null==a||\"\"===a?\"0 0\":a).split(\" \"),e=-1!==a.indexOf(\"left\")?\"0%\":-1!==a.indexOf(\"right\")?\"100%\":d[0],f=-1!==a.indexOf(\"top\")?\"0%\":-1!==a.indexOf(\"bottom\")?\"100%\":d[1];if(3<d.length&&!b){for(d=a.split(\", \").join(\",\").split(\",\"),a=[],c=0;c<d.length;c++)a.push(ia(d[c]));return a.join(\",\")}return null==f?f=\"center\"===e?\"50%\":\"0\":\"center\"===f&&(f=\"50%\"),a=(e=\"center\"===e||isNaN(parseFloat(e))&&-1===(e+\"\").indexOf(\"=\")?\"50%\":e)+\" \"+f+(2<d.length?\" \"+d[2]:\"\"),b&&(b.oxp=-1!==e.indexOf(\"%\"),b.oyp=-1!==f.indexOf(\"%\"),b.oxr=\"=\"===e.charAt(1),b.oyr=\"=\"===f.charAt(1),b.ox=parseFloat(e.replace(v,\"\")),b.oy=parseFloat(f.replace(v,\"\")),b.v=a),b||a},ma={aqua:[0,255,255],lime:[0,255,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,255],navy:[0,0,128],white:[255,255,255],fuchsia:[255,0,255],olive:[128,128,0],yellow:[255,255,0],orange:[255,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[255,0,0],pink:[255,192,203],cyan:[0,255,255],transparent:[255,255,255,0]},oa=g.parseColor=function(j,k){var c,d,e,f,g,h,i,l;if(j)if(\"number\"==typeof j)c=[j>>16,j>>8&255,255&j];else{if(\",\"===j.charAt(j.length-1)&&(j=j.substr(0,j.length-1)),ma[j])c=ma[j];else if(\"#\"===j.charAt(0))4===j.length&&(j=\"#\"+(d=j.charAt(1))+d+(e=j.charAt(2))+e+(f=j.charAt(3))+f),c=[(j=parseInt(j.substr(1),16))>>16,j>>8&255,255&j];else if(\"hsl\"===j.substr(0,3))if(c=l=j.match(s),k){if(-1!==j.indexOf(\"=\"))return j.match(t)}else g=Number(c[0])%360/360,h=Number(c[1])/100,d=2*(i=Number(c[2])/100)-(e=i<=.5?i*(h+1):i+h-i*h),3<c.length&&(c[3]=Number(c[3])),c[0]=na(g+1/3,d,e),c[1]=na(g,d,e),c[2]=na(g-1/3,d,e);else c=j.match(s)||ma.transparent;c[0]=Number(c[0]),c[1]=Number(c[1]),c[2]=Number(c[2]),3<c.length&&(c[3]=Number(c[3]))}else c=ma.black;return k&&!l&&(d=c[0]/255,e=c[1]/255,f=c[2]/255,i=((j=Math.max(d,e,f))+(k=Math.min(d,e,f)))/2,j===k?g=h=0:(l=j-k,h=.5<i?l/(2-j-k):l/(j+k),g=j===d?(e-f)/l+(e<f?6:0):j===e?(f-d)/l+2:(d-e)/l+4,g*=60),c[0]=g+.5|0,c[1]=100*h+.5|0,c[2]=100*i+.5|0),c},qa=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3}){1,2}\\\\b\";for(j in ma)qa+=\"|\"+j+\"\\\\b\";qa=new RegExp(qa+\")\",\"gi\"),g.colorStringFilter=function(a){var b=a[0]+\" \"+a[1];qa.test(b)&&(b=-1!==b.indexOf(\"hsl(\")||-1!==b.indexOf(\"hsla(\"),a[0]=pa(a[0],b),a[1]=pa(a[1],b)),qa.lastIndex=0},b.defaultStringFilter||(b.defaultStringFilter=g.colorStringFilter);function ra(a,b,c,d){if(null==a)return function(a){return a};var e,f=b?(a.match(qa)||[\"\"])[0]:\"\",g=a.split(f).join(\"\").match(u)||[],h=a.substr(0,a.indexOf(g[0])),i=\")\"===a.charAt(a.length-1)?\")\":\"\",j=-1!==a.indexOf(\" \")?\" \":\",\",k=g.length,l=0<k?g[0].replace(s,\"\"):\"\";return k?e=b?function(a){var b,m,n,o;if(\"number\"==typeof a)a+=l;else if(d&&I.test(a)){for(o=a.replace(I,\"|\").split(\"|\"),n=0;n<o.length;n++)o[n]=e(o[n]);return o.join(\",\")}if(b=(a.match(qa)||[f])[0],n=(m=a.split(b).join(\"\").match(u)||[]).length,k>n--)for(;++n<k;)m[n]=c?m[(n-1)/2|0]:g[n];return h+m.join(j)+j+b+i+(-1!==a.indexOf(\"inset\")?\" inset\":\"\")}:function(a){var b,f,m;if(\"number\"==typeof a)a+=l;else if(d&&I.test(a)){for(f=a.replace(I,\"|\").split(\"|\"),m=0;m<f.length;m++)f[m]=e(f[m]);return f.join(\",\")}if(m=(b=a.match(u)||[]).length,k>m--)for(;++m<k;)b[m]=c?b[(m-1)/2|0]:g[m];return h+b.join(j)+i}:function(a){return a}}function sa(a){return a=a.split(\",\"),function(b,c,d,e,f,g,h){var i,j=(c+\"\").split(\" \");for(h={},i=0;i<4;i++)h[a[i]]=j[i]=j[i]||j[(i-1)/2>>0];return e.parse(b,h,f,g)}}function va(a,b,c,d,e,g){return(g=new ua(a,b,c,d-c,e,-1,g)).b=c,g.e=g.xs0=d,g}var ta=(S._setPluginRatio=function(a){this.plugin.setRatio(a);for(var b,c,d,e,f,g=this.data,h=g.proxy,i=g.firstMPT;i;)b=h[i.v],i.r?b=i.r(b):b<1e-6&&-1e-6<b&&(b=0),i.t[i.p]=b,i=i._next;if(g.autoRotate&&(g.autoRotate.rotation=g.mod?g.mod.call(this._tween,h.rotation,this.t,this._tween):h.rotation),1===a||0===a)for(i=g.firstMPT,f=1===a?\"e\":\"b\";i;){if((c=i.t).type){if(1===c.type){for(e=c.xs0+c.s+c.xs1,d=1;d<c.l;d++)e+=c[\"xn\"+d]+c[\"xs\"+(d+1)];c[f]=e}}else c[f]=c.s+c.xs0;i=i._next}},function(a,b,c,d,e){this.t=a,this.p=b,this.v=c,this.r=e,d&&((d._prev=this)._next=d)}),ua=(S._parseToProxy=function(a,b,c,d,k,f){var g,h,i,j,l=d,m={},n={},o=c._transform,p=M;for(c._transform=null,M=b,d=k=c.parse(a,b,d,k),M=p,f&&(c._transform=o,l&&(l._prev=null,l._prev&&(l._prev._next=null)));d&&d!==l;){if(d.type<=1&&(n[h=d.p]=d.s+d.c,m[h]=d.s,f||(j=new ta(d,\"s\",h,j,d.r),d.c=0),1===d.type))for(g=d.l;0<--g;)n[h=d.p+\"_\"+(i=\"xn\"+g)]=d.data[i],m[h]=d[i],f||(j=new ta(d,i,h,j,d.rxp[i]));d=d._next}return{proxy:m,end:n,firstMPT:j,pt:k}},S.CSSPropTween=function(a,b,d,e,g,h,i,j,k,l,m){this.t=a,this.p=b,this.s=d,this.c=e,this.n=i||b,a instanceof ua||f.push(this.n),this.r=j&&(\"function\"==typeof j?j:Math.round),this.type=h||0,k&&(this.pr=k,c=!0),this.b=void 0===l?d:l,this.e=void 0===m?d+e:m,g&&((this._next=g)._prev=this)}),wa=g.parseComplex=function(a,b,c,d,e,f,h,i,j,l){c=c||f||\"\",\"function\"==typeof d&&(d=d(r,q)),h=new ua(a,b,0,0,h,l?2:1,null,!1,i,c,d),d+=\"\",e&&qa.test(d+c)&&(g.colorStringFilter(d=[c,d]),c=d[0],d=d[1]);var m,n,o,p,u,v,w,y,z,A,B,C,D=c.split(\", \").join(\",\").split(\" \"),E=d.split(\", \").join(\",\").split(\" \"),F=D.length,G=!1!==k;for(-1===d.indexOf(\",\")&&-1===c.indexOf(\",\")||(E=-1!==(d+c).indexOf(\"rgb\")||-1!==(d+c).indexOf(\"hsl\")?(D=D.join(\" \").replace(I,\", \").split(\" \"),E.join(\" \").replace(I,\", \").split(\" \")):(D=D.join(\" \").split(\",\").join(\", \").split(\" \"),E.join(\" \").split(\",\").join(\", \").split(\" \")),F=D.length),F!==E.length&&(F=(D=(f||\"\").split(\" \")).length),h.plugin=j,h.setRatio=l,m=qa.lastIndex=0;m<F;m++)if(p=D[m],u=E[m]+\"\",(y=parseFloat(p))||0===y)h.appendXtra(\"\",y,ja(u,y),u.replace(t,\"\"),G&&-1!==u.indexOf(\"px\")&&Math.round,!0);else if(e&&qa.test(p))B=\")\"+((B=u.indexOf(\")\")+1)?u.substr(B):\"\"),C=-1!==u.indexOf(\"hsl\")&&U,z=u,p=oa(p,C),u=oa(u,C),(y=6<p.length+u.length)&&!U&&0===u[3]?(h[\"xs\"+h.l]+=h.l?\" transparent\":\"transparent\",h.e=h.e.split(E[m]).join(\"transparent\")):(U||(y=!1),C?h.appendXtra(z.substr(0,z.indexOf(\"hsl\"))+(y?\"hsla(\":\"hsl(\"),p[0],ja(u[0],p[0]),\",\",!1,!0).appendXtra(\"\",p[1],ja(u[1],p[1]),\"%,\",!1).appendXtra(\"\",p[2],ja(u[2],p[2]),y?\"%,\":\"%\"+B,!1):h.appendXtra(z.substr(0,z.indexOf(\"rgb\"))+(y?\"rgba(\":\"rgb(\"),p[0],u[0]-p[0],\",\",Math.round,!0).appendXtra(\"\",p[1],u[1]-p[1],\",\",Math.round).appendXtra(\"\",p[2],u[2]-p[2],y?\",\":B,Math.round),y&&(p=p.length<4?1:p[3],h.appendXtra(\"\",p,(u.length<4?1:u[3])-p,B,!1))),qa.lastIndex=0;else if(v=p.match(s)){if(!(w=u.match(t))||w.length!==v.length)return h;for(n=o=0;n<v.length;n++)A=v[n],z=p.indexOf(A,o),h.appendXtra(p.substr(o,z-o),Number(A),ja(w[n],A),\"\",G&&\"px\"===p.substr(z+A.length,2)&&Math.round,0===n),o=z+A.length;h[\"xs\"+h.l]+=p.substr(o)}else h[\"xs\"+h.l]+=h.l||h[\"xs\"+h.l]?\" \"+u:u;if(-1!==d.indexOf(\"=\")&&h.data){for(B=h.xs0+h.data.s,m=1;m<h.l;m++)B+=h[\"xs\"+m]+h.data[\"xn\"+m];h.e=B+h[\"xs\"+m]}return h.l||(h.type=-1,h.xs0=h.e),h.xfirst||h},xa=9;for((j=ua.prototype).l=j.pr=0;0<--xa;)j[\"xn\"+xa]=0,j[\"xs\"+xa]=\"\";j.xs0=\"\",j._next=j._prev=j.xfirst=j.data=j.plugin=j.setRatio=j.rxp=null,j.appendXtra=function(a,b,c,d,e,f){var g=this,h=g.l;return g[\"xs\"+h]+=f&&(h||g[\"xs\"+h])?\" \"+a:a||\"\",c||0===h||g.plugin?(g.l++,g.type=g.setRatio?2:1,g[\"xs\"+g.l]=d||\"\",0<h?(g.data[\"xn\"+h]=b+c,g.rxp[\"xn\"+h]=e,g[\"xn\"+h]=b,g.plugin||(g.xfirst=new ua(g,\"xn\"+h,b,c,g.xfirst||g,0,g.n,e,g.pr),g.xfirst.xs0=0)):(g.data={s:b+c},g.rxp={},g.s=b,g.c=c,g.r=e)):g[\"xs\"+h]+=b+(d||\"\"),g};function ya(a,b){this.p=(b=b||{}).prefix&&Z(a)||a,(i[a]=i[this.p]=this).format=b.formatter||ra(b.defaultValue,b.color,b.collapsible,b.multi),b.parser&&(this.parse=b.parser),this.clrs=b.color,this.multi=b.multi,this.keyword=b.keyword,this.dflt=b.defaultValue,this.allowFunc=b.allowFunc,this.pr=b.priority||0}var za=S._registerComplexSpecialProp=function(a,b,c){\"object\"!=typeof b&&(b={parser:c});var d,f=a.split(\",\"),g=b.defaultValue;for(c=c||[g],d=0;d<f.length;d++)b.prefix=0===d&&b.prefix,b.defaultValue=c[d]||g,new ya(f[d],b)},Aa=S._registerPluginProp=function(a){var b;i[a]||(b=a.charAt(0).toUpperCase()+a.substr(1)+\"Plugin\",za(a,{parser:function(a,c,d,e,f,g,j){var k=h.com.greensock.plugins[b];return k?(k._cssRegister(),i[d].parse(a,c,d,e,f,g,j)):(W(\"Error: \"+b+\" js file not loaded.\"),f)}}))};(j=ya.prototype).parseComplex=function(a,b,c,d,e,f){var g,h,i,j,k,l,m=this.keyword;if(this.multi&&(I.test(c)||I.test(b)?(h=b.replace(I,\"|\").split(\"|\"),i=c.replace(I,\"|\").split(\"|\")):m&&(h=[b],i=[c])),i){for(j=(i.length>h.length?i:h).length,g=0;g<j;g++)b=h[g]=h[g]||this.dflt,c=i[g]=i[g]||this.dflt,m&&((k=b.indexOf(m))!==(l=c.indexOf(m))&&(-1===l?h[g]=h[g].split(m).join(\"\"):-1===k&&(h[g]+=\" \"+m)));b=h.join(\", \"),c=i.join(\", \")}return wa(a,this.p,b,c,this.clrs,this.dflt,d,this.pr,e,f)},j.parse=function(a,b,c,d,f,g,h){return this.parseComplex(a.style,this.format(aa(a,this.p,e,!1,this.dflt)),this.format(b),f,g)},g.registerSpecialProp=function(a,b,c){za(a,{parser:function(a,d,e,f,j,h,i){j=new ua(a,e,0,0,j,2,e,!1,c);return j.plugin=h,j.setRatio=b(a,d,f._tween,e),j},priority:c})},g.useSVGTransformAttr=!0;function Ja(a,b,c){var d,e=O.createElementNS(\"http://www.w3.org/2000/svg\",a),f=/([a-z])([A-Z])/g;for(d in c)e.setAttributeNS(null,d.replace(f,\"$1-$2\").toLowerCase(),c[d]);return b.appendChild(e),e}function Ma(a,r,c,s,e,f){var h,i,j,k,l,m,n,o,p,q,t,u,v=a._gsTransform,w=Ra(a,!0);v&&(t=v.xOrigin,u=v.yOrigin),(!s||(h=s.split(\" \")).length<2)&&(0===(n=a.getBBox()).x&&0===n.y&&n.width+n.height===0&&(n={x:parseFloat(a.hasAttribute(\"x\")?a.getAttribute(\"x\"):a.hasAttribute(\"cx\")?a.getAttribute(\"cx\"):0)||0,y:parseFloat(a.hasAttribute(\"y\")?a.getAttribute(\"y\"):a.hasAttribute(\"cy\")?a.getAttribute(\"cy\"):0)||0,width:0,height:0}),h=[(-1!==(r=ia(r).split(\" \"))[0].indexOf(\"%\")?parseFloat(r[0])/100*n.width:parseFloat(r[0]))+n.x,(-1!==r[1].indexOf(\"%\")?parseFloat(r[1])/100*n.height:parseFloat(r[1]))+n.y]),c.xOrigin=k=parseFloat(h[0]),c.yOrigin=l=parseFloat(h[1]),s&&w!==Qa&&(m=w[0],n=w[1],o=w[2],p=w[3],q=w[4],r=w[5],(s=m*p-n*o)&&(j=k*(-n/s)+l*(m/s)-(m*r-n*q)/s,k=c.xOrigin=h[0]=i=k*(p/s)+l*(-o/s)+(o*r-p*q)/s,l=c.yOrigin=h[1]=j)),v&&(f&&(c.xOffset=v.xOffset,c.yOffset=v.yOffset,v=c),e||!1!==e&&!1!==g.defaultSmoothOrigin?(v.xOffset+=(i=k-t)*w[0]+(j=l-u)*w[2]-i,v.yOffset+=i*w[1]+j*w[3]-j):v.xOffset=v.yOffset=0),f||a.setAttribute(\"data-svg-origin\",h.join(\" \"))}function Ta(a){var b,c,d=this.data,u=(t=-d.rotation*K)+d.skewX*K,v=1e5,h=(Math.cos(t)*d.scaleX*v|0)/v,i=(Math.sin(t)*d.scaleX*v|0)/v,j=(Math.sin(u)*-d.scaleY*v|0)/v,k=(Math.cos(u)*d.scaleY*v|0)/v,l=this.t.style,m=this.t.currentStyle;if(m){c=i,i=-j,j=-c,b=m.filter,l.filter=\"\";var q=this.t.offsetWidth,r=this.t.offsetHeight,s=\"absolute\"!==m.position,t=\"progid:DXImageTransform.Microsoft.Matrix(M11=\"+h+\", M12=\"+i+\", M21=\"+j+\", M22=\"+k,u=d.x+q*d.xPercent/100,v=d.y+r*d.yPercent/100;if(null!=d.ox&&(u+=(n=(d.oxp?q*d.ox*.01:d.ox)-q/2)-(n*h+(o=(d.oyp?r*d.oy*.01:d.oy)-r/2)*i),v+=o-(n*j+o*k)),s?t+=\", Dx=\"+((n=q/2)-(n*h+(o=r/2)*i)+u)+\", Dy=\"+(o-(n*j+o*k)+v)+\")\":t+=\", sizingMethod='auto expand')\",-1!==b.indexOf(\"DXImageTransform.Microsoft.Matrix(\")?l.filter=b.replace(H,t):l.filter=t+\" \"+b,0!==a&&1!==a||1!=h||0!=i||0!=j||1!=k||(s&&-1===t.indexOf(\"Dx=0, Dy=0\")||x.test(b)&&100!==parseFloat(RegExp.$1)||-1===b.indexOf(b.indexOf(\"Alpha\"))&&l.removeAttribute(\"filter\")),!s){var z,A,B=p<8?1:-1,n=d.ieOffsetX||0,o=d.ieOffsetY||0;for(d.ieOffsetX=Math.round((q-((h<0?-h:h)*q+(i<0?-i:i)*r))/2+u),d.ieOffsetY=Math.round((r-((k<0?-k:k)*r+(j<0?-j:j)*q))/2+v),xa=0;xa<4;xa++)A=(c=-1!==(A=m[z=ga[xa]]).indexOf(\"px\")?parseFloat(A):ba(this.t,z,parseFloat(A),A.replace(w,\"\"))||0)!==d[z]?xa<2?-d.ieOffsetX:-d.ieOffsetY:xa<2?n-d.ieOffsetX:o-d.ieOffsetY,l[z]=(d[z]=Math.round(c-A*(0===xa||2===xa?1:B)))+\"px\"}}}var Ba,Ca=\"scaleX,scaleY,scaleZ,x,y,z,skewX,skewY,rotation,rotationX,rotationY,perspective,xPercent,yPercent\".split(\",\"),Da=Z(\"transform\"),Ea=X+\"transform\",Fa=Z(\"transformOrigin\"),Ga=null!==Z(\"perspective\"),Ha=S.Transform=function(){this.perspective=parseFloat(g.defaultTransformPerspective)||0,this.force3D=!(!1===g.defaultForce3D||!Ga)&&(g.defaultForce3D||\"auto\")},Ia=_gsScope.SVGElement,Ka=O.documentElement||{},La=function(){var a,b,c,d=p||/Android/i.test(T)&&!_gsScope.chrome;return O.createElementNS&&!d&&(a=Ja(\"svg\",Ka),c=(b=Ja(\"rect\",a,{width:100,height:50,x:100})).getBoundingClientRect().width,b.style[Fa]=\"50% 50%\",b.style[Da]=\"scaleX(0.5)\",d=c===b.getBoundingClientRect().width&&!(n&&Ga),Ka.removeChild(a)),d}(),Na=function(a){var b,c=P(\"svg\",this.ownerSVGElement&&this.ownerSVGElement.getAttribute(\"xmlns\")||\"http://www.w3.org/2000/svg\"),d=this.parentNode,e=this.nextSibling,f=this.style.cssText;if(Ka.appendChild(c),c.appendChild(this),this.style.display=\"block\",a)try{b=this.getBBox(),this._originalGetBBox=this.getBBox,this.getBBox=Na}catch(g){}else this._originalGetBBox&&(b=this._originalGetBBox());return e?d.insertBefore(this,e):d.appendChild(this),Ka.removeChild(c),this.style.cssText=f,b},Pa=function(a){return!(!Ia||!a.getCTM||a.parentNode&&!a.ownerSVGElement||!function(a){try{return a.getBBox()}catch(b){return Na.call(a,!0)}}(a))},Qa=[1,0,0,1,0,0],Ra=function(a,b){var c,d,e,f,g,h,i,j=a._gsTransform||new Ha,l=a.style;if(Da?d=aa(a,Ea,null,!0):a.currentStyle&&(d=(d=a.currentStyle.filter.match(G))&&4===d.length?[d[0].substr(4),Number(d[2].substr(4)),Number(d[1].substr(4)),d[3].substr(4),j.x||0,j.y||0].join(\",\"):\"\"),c=!d||\"none\"===d||\"matrix(1, 0, 0, 1, 0, 0)\"===d,Da&&c&&!a.offsetParent&&(f=l.display,l.display=\"block\",(i=a.parentNode)&&a.offsetParent||(g=1,h=a.nextSibling,Ka.appendChild(a)),c=!(d=aa(a,Ea,null,!0))||\"none\"===d||\"matrix(1, 0, 0, 1, 0, 0)\"===d,f?l.display=f:Wa(l,\"display\"),g&&(h?i.insertBefore(a,h):i?i.appendChild(a):Ka.removeChild(a))),(j.svg||a.getCTM&&Pa(a))&&(c&&-1!==(l[Da]+\"\").indexOf(\"matrix\")&&(d=l[Da],c=0),e=a.getAttribute(\"transform\"),c&&e&&(d=\"matrix(\"+(e=a.transform.baseVal.consolidate().matrix).a+\",\"+e.b+\",\"+e.c+\",\"+e.d+\",\"+e.e+\",\"+e.f+\")\",c=0)),c)return Qa;for(e=(d||\"\").match(s)||[],xa=e.length;-1<--xa;)f=Number(e[xa]),e[xa]=(g=f-(f|=0))?(1e5*g+(g<0?-.5:.5)|0)/1e5+f:f;return b&&6<e.length?[e[0],e[1],e[4],e[5],e[12],e[13]]:e},Sa=S.getTransform=function(a,N,d,j){if(a._gsTransform&&d&&!j)return a._gsTransform;var h,l,s,t,u,v,w,z,A,i,D,E,F,G,H,I,M,k,P,Q,R,S,m=d&&a._gsTransform||new Ha,n=m.scaleX<0,o=2e-5,p=1e5,q=Ga&&(parseFloat(aa(a,Fa,N,!1,\"0 0 0\").split(\" \")[2])||m.zOrigin)||0,r=parseFloat(g.defaultTransformPerspective)||0;if(m.svg=!(!a.getCTM||!Pa(a)),m.svg&&(Ma(a,aa(a,Fa,N,!1,\"50% 50%\")+\"\",m,a.getAttribute(\"data-svg-origin\")),Ba=g.useSVGTransformAttr||La),(l=Ra(a))!==Qa)for(h in 16===l.length?(Q=l[0],S=l[1],z=l[2],A=l[3],R=l[4],i=l[5],D=l[6],E=l[7],F=l[8],G=l[9],H=l[10],I=l[12],k=l[13],P=l[14],M=l[11],N=Math.atan2(D,H),m.zOrigin&&(I=F*(P=-m.zOrigin)-l[12],k=G*P-l[13],P=H*P+m.zOrigin-l[14]),m.rotationX=N*L,N&&(s=R*(v=Math.cos(-N))+F*(w=Math.sin(-N)),t=i*v+G*w,u=D*v+H*w,F=R*-w+F*v,G=i*-w+G*v,H=D*-w+H*v,M=E*-w+M*v,R=s,i=t,D=u),N=Math.atan2(-z,H),m.rotationY=N*L,N&&(t=S*(v=Math.cos(-N))-G*(w=Math.sin(-N)),u=z*v-H*w,G=S*w+G*v,H=z*w+H*v,M=A*w+M*v,Q=s=Q*v-F*w,S=t,z=u),N=Math.atan2(S,Q),m.rotation=N*L,N&&(s=Q*(v=Math.cos(N))+S*(w=Math.sin(N)),t=R*v+i*w,u=F*v+G*w,S=S*v-Q*w,i=i*v-R*w,G=G*v-F*w,Q=s,R=t,F=u),m.rotationX&&359.9<Math.abs(m.rotationX)+Math.abs(m.rotation)&&(m.rotationX=m.rotation=0,m.rotationY=180-m.rotationY),N=Math.atan2(R,i),m.scaleX=(Math.sqrt(Q*Q+S*S+z*z)*p+.5|0)/p,m.scaleY=(Math.sqrt(i*i+D*D)*p+.5|0)/p,m.scaleZ=(Math.sqrt(F*F+G*G+H*H)*p+.5|0)/p,Q/=m.scaleX,R/=m.scaleY,S/=m.scaleX,i/=m.scaleY,Math.abs(N)>o?(m.skewX=N*L,R=0,\"simple\"!==m.skewType&&(m.scaleY*=1/Math.cos(N))):m.skewX=0,m.perspective=M?1/(M<0?-M:M):0,m.x=I,m.y=k,m.z=P,m.svg&&(m.x-=m.xOrigin-(m.xOrigin*Q-m.yOrigin*R),m.y-=m.yOrigin-(m.yOrigin*S-m.xOrigin*i))):Ga&&!j&&l.length&&m.x===l[4]&&m.y===l[5]&&(m.rotationX||m.rotationY)||(P=(k=6<=l.length)?l[0]:1,Q=l[1]||0,R=l[2]||0,S=k?l[3]:1,m.x=l[4]||0,m.y=l[5]||0,i=Math.sqrt(P*P+Q*Q),j=Math.sqrt(S*S+R*R),k=P||Q?Math.atan2(Q,P)*L:m.rotation||0,l=R||S?Math.atan2(R,S)*L+k:m.skewX||0,m.scaleX=i,m.scaleY=j,m.rotation=k,m.skewX=l,Ga&&(m.rotationX=m.rotationY=m.z=0,m.perspective=r,m.scaleZ=1),m.svg&&(m.x-=m.xOrigin-(m.xOrigin*P+m.yOrigin*R),m.y-=m.yOrigin-(m.xOrigin*Q+m.yOrigin*S))),90<Math.abs(m.skewX)&&Math.abs(m.skewX)<270&&(n?(m.scaleX*=-1,m.skewX+=m.rotation<=0?180:-180,m.rotation+=m.rotation<=0?180:-180):(m.scaleY*=-1,m.skewX+=m.skewX<=0?180:-180)),m.zOrigin=q,m)m[h]<o&&m[h]>-o&&(m[h]=0);return d&&((a._gsTransform=m).svg&&(Ba&&a.style[Da]?b.delayedCall(.001,function(){Wa(a.style,Da)}):!Ba&&a.getAttribute(\"transform\")&&b.delayedCall(.001,function(){a.removeAttribute(\"transform\")}))),m},Ua=S.set3DTransformRatio=S.setTransformRatio=function(h){var b,c,d,f,g,i,j,k,l,m,q,r,s,u,o,p,z=this.data,A=this.t.style,t=z.rotation,C=z.rotationX,D=z.rotationY,E=z.scaleX,F=z.scaleY,G=z.scaleZ,H=z.x,I=z.y,J=z.z,L=z.svg,M=z.perspective,e=z.force3D,w=z.skewY,v=z.skewX;if(w&&(v+=w,t+=w),!((1!==h&&0!==h||\"auto\"!==e||this.tween._totalTime!==this.tween._totalDuration&&this.tween._totalTime)&&e||J||M||D||C||1!==G)||Ba&&L||!Ga)t||v||L?(t*=K,o=v*K,p=1e5,c=Math.cos(t)*E,f=Math.sin(t)*E,d=Math.sin(t-o)*-F,g=Math.cos(t-o)*F,o&&\"simple\"===z.skewType&&(b=Math.tan(o-w*K),d*=b=Math.sqrt(1+b*b),g*=b,w&&(b=Math.tan(w*K),c*=b=Math.sqrt(1+b*b),f*=b)),L&&(H+=z.xOrigin-(z.xOrigin*c+z.yOrigin*d)+z.xOffset,I+=z.yOrigin-(z.xOrigin*f+z.yOrigin*g)+z.yOffset,Ba&&(z.xPercent||z.yPercent)&&(q=this.t.getBBox(),H+=.01*z.xPercent*q.width,I+=.01*z.yPercent*q.height),H<(q=1e-6)&&-q<H&&(H=0),I<q&&-q<I&&(I=0)),u=(c*p|0)/p+\",\"+(f*p|0)/p+\",\"+(d*p|0)/p+\",\"+(g*p|0)/p+\",\"+H+\",\"+I+\")\",L&&Ba?this.t.setAttribute(\"transform\",\"matrix(\"+u):A[Da]=(z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) matrix(\":\"matrix(\")+u):A[Da]=(z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) matrix(\":\"matrix(\")+E+\",0,0,\"+F+\",\"+H+\",\"+I+\")\";else{if(n&&(E<(q=1e-4)&&-q<E&&(E=G=2e-5),F<q&&-q<F&&(F=G=2e-5),!M||z.z||z.rotationX||z.rotationY||(M=0)),t||v)t*=K,r=c=Math.cos(t),s=f=Math.sin(t),v&&(t-=v*K,r=Math.cos(t),s=Math.sin(t),\"simple\"===z.skewType&&(b=Math.tan((v-w)*K),r*=b=Math.sqrt(1+b*b),s*=b,z.skewY&&(b=Math.tan(w*K),c*=b=Math.sqrt(1+b*b),f*=b))),d=-s,g=r;else{if(!(D||C||1!==G||M||L))return void(A[Da]=(z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) translate3d(\":\"translate3d(\")+H+\"px,\"+I+\"px,\"+J+\"px)\"+(1!==E||1!==F?\" scale(\"+E+\",\"+F+\")\":\"\"));c=g=1,d=f=0}k=1,e=h=i=j=l=m=0,o=M?-1/M:0,p=z.zOrigin,q=1e-6,v=\",\",w=\"0\",(t=D*K)&&(r=Math.cos(t),l=o*(i=-(s=Math.sin(t))),e=c*s,h=f*s,o*=k=r,c*=r,f*=r),(t=C*K)&&(b=d*(r=Math.cos(t))+e*(s=Math.sin(t)),t=g*r+h*s,j=k*s,m=o*s,e=d*-s+e*r,h=g*-s+h*r,k*=r,o*=r,d=b,g=t),1!==G&&(e*=G,h*=G,k*=G,o*=G),1!==F&&(d*=F,g*=F,j*=F,m*=F),1!==E&&(c*=E,f*=E,i*=E,l*=E),(p||L)&&(p&&(H+=e*-p,I+=h*-p,J+=k*-p+p),L&&(H+=z.xOrigin-(z.xOrigin*c+z.yOrigin*d)+z.xOffset,I+=z.yOrigin-(z.xOrigin*f+z.yOrigin*g)+z.yOffset),H<q&&-q<H&&(H=w),I<q&&-q<I&&(I=w),J<q&&-q<J&&(J=0)),u=z.xPercent||z.yPercent?\"translate(\"+z.xPercent+\"%,\"+z.yPercent+\"%) matrix3d(\":\"matrix3d(\",u+=(c<q&&-q<c?w:c)+v+(f<q&&-q<f?w:f)+v+(i<q&&-q<i?w:i),u+=v+(l<q&&-q<l?w:l)+v+(d<q&&-q<d?w:d)+v+(g<q&&-q<g?w:g),C||D||1!==G?(u+=v+(j<q&&-q<j?w:j)+v+(m<q&&-q<m?w:m)+v+(e<q&&-q<e?w:e),u+=v+(h<q&&-q<h?w:h)+v+(k<q&&-q<k?w:k)+v+(o<q&&-q<o?w:o)+v):u+=\",0,0,0,0,1,0,\",A[Da]=u+=H+v+I+v+J+v+(M?1+-J/M:1)+\")\"}};(j=Ha.prototype).x=j.y=j.z=j.skewX=j.skewY=j.rotation=j.rotationX=j.rotationY=j.zOrigin=j.xPercent=j.yPercent=j.xOffset=j.yOffset=0,j.scaleX=j.scaleY=j.scaleZ=1,za(\"transform,scale,scaleX,scaleY,scaleZ,x,y,z,rotation,rotationX,rotationY,rotationZ,skewX,skewY,shortRotation,shortRotationX,shortRotationY,shortRotationZ,transformOrigin,svgOrigin,transformPerspective,directionalRotation,parseTransform,force3D,skewType,xPercent,yPercent,smoothOrigin\",{parser:function(a,b,c,d,f,h,i){if(d._lastParsedTransform===i)return f;var j=(d._lastParsedTransform=i).scale&&\"function\"==typeof i.scale?i.scale:0;j&&(i.scale=j(r,a));var k,l,n,o,p,s,m,u,v=a._gsTransform,w=a.style,y=Ca.length,z=i,A={},B=\"transformOrigin\",C=Sa(a,e,!0,z.parseTransform),D=z.transform&&(\"function\"==typeof z.transform?z.transform(r,q):z.transform);if(C.skewType=z.skewType||C.skewType||g.defaultSkewType,d._transform=C,\"rotationZ\"in z&&(z.rotation=z.rotationZ),D&&\"string\"==typeof D&&Da)(l=Q.style)[Da]=D,l.display=\"block\",l.position=\"absolute\",-1!==D.indexOf(\"%\")&&(l.width=aa(a,\"width\"),l.height=aa(a,\"height\")),O.body.appendChild(Q),k=Sa(Q,null,!1),\"simple\"===C.skewType&&(k.scaleY*=Math.cos(k.skewX*K)),C.svg&&(p=C.xOrigin,s=C.yOrigin,k.x-=C.xOffset,k.y-=C.yOffset,(z.transformOrigin||z.svgOrigin)&&(D={},Ma(a,ia(z.transformOrigin),D,z.svgOrigin,z.smoothOrigin,!0),p=D.xOrigin,s=D.yOrigin,k.x-=D.xOffset-C.xOffset,k.y-=D.yOffset-C.yOffset),(p||s)&&(m=Ra(Q,!0),k.x-=p-(p*m[0]+s*m[2]),k.y-=s-(p*m[1]+s*m[3]))),O.body.removeChild(Q),k.perspective||(k.perspective=C.perspective),null!=z.xPercent&&(k.xPercent=ka(z.xPercent,C.xPercent)),null!=z.yPercent&&(k.yPercent=ka(z.yPercent,C.yPercent));else if(\"object\"==typeof z){if(k={scaleX:ka(null!=z.scaleX?z.scaleX:z.scale,C.scaleX),scaleY:ka(null!=z.scaleY?z.scaleY:z.scale,C.scaleY),scaleZ:ka(z.scaleZ,C.scaleZ),x:ka(z.x,C.x),y:ka(z.y,C.y),z:ka(z.z,C.z),xPercent:ka(z.xPercent,C.xPercent),yPercent:ka(z.yPercent,C.yPercent),perspective:ka(z.transformPerspective,C.perspective)},null!=(o=z.directionalRotation))if(\"object\"==typeof o)for(l in o)z[l]=o[l];else z.rotation=o;\"string\"==typeof z.x&&-1!==z.x.indexOf(\"%\")&&(k.x=0,k.xPercent=ka(z.x,C.xPercent)),\"string\"==typeof z.y&&-1!==z.y.indexOf(\"%\")&&(k.y=0,k.yPercent=ka(z.y,C.yPercent)),k.rotation=la(\"rotation\"in z?z.rotation:\"shortRotation\"in z?z.shortRotation+\"_short\":C.rotation,C.rotation,\"rotation\",A),Ga&&(k.rotationX=la(\"rotationX\"in z?z.rotationX:\"shortRotationX\"in z?z.shortRotationX+\"_short\":C.rotationX||0,C.rotationX,\"rotationX\",A),k.rotationY=la(\"rotationY\"in z?z.rotationY:\"shortRotationY\"in z?z.shortRotationY+\"_short\":C.rotationY||0,C.rotationY,\"rotationY\",A)),k.skewX=la(z.skewX,C.skewX),k.skewY=la(z.skewY,C.skewY)}for(Ga&&null!=z.force3D&&(C.force3D=z.force3D,n=!0),(m=C.force3D||C.z||C.rotationX||C.rotationY||k.z||k.rotationX||k.rotationY||k.perspective)||null==z.scale||(k.scaleZ=1);-1<--y;)(1e-6<(D=k[u=Ca[y]]-C[u])||D<-1e-6||null!=z[u]||null!=M[u])&&(n=!0,f=new ua(C,u,C[u],D,f),u in A&&(f.e=A[u]),f.xs0=0,f.plugin=h,d._overwriteProps.push(f.n));return D=\"function\"==typeof z.transformOrigin?z.transformOrigin(r,q):z.transformOrigin,C.svg&&(D||z.svgOrigin)&&(p=C.xOffset,s=C.yOffset,Ma(a,ia(D),k,z.svgOrigin,z.smoothOrigin),f=va(C,\"xOrigin\",(v?C:k).xOrigin,k.xOrigin,f,B),f=va(C,\"yOrigin\",(v?C:k).yOrigin,k.yOrigin,f,B),p===C.xOffset&&s===C.yOffset||(f=va(C,\"xOffset\",v?p:C.xOffset,C.xOffset,f,B),f=va(C,\"yOffset\",v?s:C.yOffset,C.yOffset,f,B)),D=\"0px 0px\"),(D||Ga&&m&&C.zOrigin)&&(Da?(n=!0,u=Fa,D||(D=(D=(aa(a,u,e,!1,\"50% 50%\")+\"\").split(\" \"))[0]+\" \"+D[1]+\" \"+C.zOrigin+\"px\"),D+=\"\",(f=new ua(w,u,0,0,f,-1,B)).b=w[u],f.plugin=h,Ga?(l=C.zOrigin,D=D.split(\" \"),C.zOrigin=(2<D.length?parseFloat(D[2]):l)||0,f.xs0=f.e=D[0]+\" \"+(D[1]||\"50%\")+\" 0px\",(f=new ua(C,\"zOrigin\",0,0,f,-1,f.n)).b=l,f.xs0=f.e=C.zOrigin):f.xs0=f.e=D):ia(D+\"\",C)),n&&(d._transformType=C.svg&&Ba||!m&&3!==this._transformType?2:3),j&&(i.scale=j),f},allowFunc:!0,prefix:!0}),za(\"boxShadow\",{defaultValue:\"0px 0px 0px 0px #999\",prefix:!0,color:!0,multi:!0,keyword:\"inset\"}),za(\"clipPath\",{defaultValue:\"inset(0px)\",prefix:!0,multi:!0,formatter:ra(\"inset(0px 0px 0px 0px)\",!1,!0)}),za(\"borderRadius\",{defaultValue:\"0px\",parser:function(a,b,c,f,g,h){b=this.format(b);for(var k,l,m,n,p,s,u,v,w,x,y=[\"borderTopLeftRadius\",\"borderTopRightRadius\",\"borderBottomRightRadius\",\"borderBottomLeftRadius\"],z=a.style,q=parseFloat(a.offsetWidth),r=parseFloat(a.offsetHeight),i=b.split(\" \"),j=0;j<y.length;j++)this.p.indexOf(\"border\")&&(y[j]=Z(y[j])),-1!==(m=l=aa(a,y[j],e,!1,\"0px\")).indexOf(\" \")&&(m=(l=m.split(\" \"))[0],l=l[1]),n=k=i[j],w=parseFloat(m),x=m.substr((w+\"\").length),(s=\"\"===(s=(u=\"=\"===n.charAt(1))?(p=parseInt(n.charAt(0)+\"1\",10),n=n.substr(2),p*=parseFloat(n),n.substr((p+\"\").length-(p<0?1:0))||\"\"):(p=parseFloat(n),n.substr((p+\"\").length)))?d[c]||x:s)!==x&&(v=ba(a,\"borderLeft\",w,x),w=ba(a,\"borderTop\",w,x),l=\"%\"===s?(m=v/q*100+\"%\",w/r*100+\"%\"):\"em\"===s?(m=v/(x=ba(a,\"borderLeft\",1,\"em\"))+\"em\",w/x+\"em\"):(m=v+\"px\",w+\"px\"),u&&(n=parseFloat(m)+p+s,k=parseFloat(l)+p+s)),g=wa(z,y[j],m+\" \"+l,n+\" \"+k,!1,\"0px\",g);return g},prefix:!0,formatter:ra(\"0px 0px 0px 0px\",!1,!0)}),za(\"borderBottomLeftRadius,borderBottomRightRadius,borderTopLeftRadius,borderTopRightRadius\",{defaultValue:\"0px\",parser:function(a,b,c,d,f,g){return wa(a.style,c,this.format(aa(a,c,e,!1,\"0px 0px\")),this.format(b),!1,\"0px\",f)},prefix:!0,formatter:ra(\"0px 0px\",!1,!0)}),za(\"backgroundPosition\",{defaultValue:\"0 0\",parser:function(a,r,c,d,f,g){var h,i,j,k,l,m,n=\"background-position\",o=e||_(a),q=this.format((o?p?o.getPropertyValue(n+\"-x\")+\" \"+o.getPropertyValue(n+\"-y\"):o.getPropertyValue(n):a.currentStyle.backgroundPositionX+\" \"+a.currentStyle.backgroundPositionY)||\"0 0\"),r=this.format(r);if(-1!==q.indexOf(\"%\")!=(-1!==r.indexOf(\"%\"))&&r.split(\",\").length<2&&((m=aa(a,\"backgroundImage\").replace(D,\"\"))&&\"none\"!==m)){for(h=q.split(\" \"),i=r.split(\" \"),R.setAttribute(\"src\",m),j=2;-1<--j;)(k=-1!==(q=h[j]).indexOf(\"%\"))!=(-1!==i[j].indexOf(\"%\"))&&(l=0===j?a.offsetWidth-R.width:a.offsetHeight-R.height,h[j]=k?parseFloat(q)/100*l+\"px\":parseFloat(q)/l*100+\"%\");q=h.join(\" \")}return this.parseComplex(a.style,q,r,f,g)},formatter:ia}),za(\"backgroundSize\",{defaultValue:\"0 0\",formatter:function(a){return\"co\"===(a+=\"\").substr(0,2)?a:ia(-1===a.indexOf(\" \")?a+\" \"+a:a)}}),za(\"perspective\",{defaultValue:\"0px\",prefix:!0}),za(\"perspectiveOrigin\",{defaultValue:\"50% 50%\",prefix:!0}),za(\"transformStyle\",{prefix:!0}),za(\"backfaceVisibility\",{prefix:!0}),za(\"userSelect\",{prefix:!0}),za(\"margin\",{parser:sa(\"marginTop,marginRight,marginBottom,marginLeft\")}),za(\"padding\",{parser:sa(\"paddingTop,paddingRight,paddingBottom,paddingLeft\")}),za(\"clip\",{defaultValue:\"rect(0px,0px,0px,0px)\",parser:function(a,b,c,d,f,g){var h,j;return b=p<9?(h=\"rect(\"+(h=a.currentStyle).clipTop+(j=p<8?\" \":\",\")+h.clipRight+j+h.clipBottom+j+h.clipLeft+\")\",this.format(b).split(\",\").join(j)):(h=this.format(aa(a,this.p,e,!1,this.dflt)),this.format(b)),this.parseComplex(a.style,h,b,f,g)}}),za(\"textShadow\",{defaultValue:\"0px 0px 0px #999\",color:!0,multi:!0}),za(\"autoRound,strictUnits\",{parser:function(a,b,c,d,e){return e}}),za(\"border\",{defaultValue:\"0px solid #000\",parser:function(a,j,c,d,f,g){var h=aa(a,\"borderTopWidth\",e,!1,\"0px\"),i=this.format(j).split(\" \"),j=i[0].replace(w,\"\");return\"px\"!==j&&(h=parseFloat(h)/ba(a,\"borderTopWidth\",1,j)+j),this.parseComplex(a.style,this.format(h+\" \"+aa(a,\"borderTopStyle\",e,!1,\"solid\")+\" \"+aa(a,\"borderTopColor\",e,!1,\"#000\")),i.join(\" \"),f,g)},color:!0,formatter:function(a){var b=a.split(\" \");return b[0]+\" \"+(b[1]||\"solid\")+\" \"+(a.match(qa)||[\"#000\"])[0]}}),za(\"borderWidth\",{parser:sa(\"borderTopWidth,borderRightWidth,borderBottomWidth,borderLeftWidth\")}),za(\"float,cssFloat,styleFloat\",{parser:function(h,b,c,d,e,f){var g=h.style,h=\"cssFloat\"in g?\"cssFloat\":\"styleFloat\";return new ua(g,h,0,0,e,-1,c,!1,0,g[h],b)}});function Va(e){var b,c=this.t,d=c.filter||aa(this.data,\"filter\")||\"\",e=this.s+this.c*e|0;(b=100==e?-1===d.indexOf(\"atrix(\")&&-1===d.indexOf(\"radient(\")&&-1===d.indexOf(\"oader(\")?(c.removeAttribute(\"filter\"),!aa(this.data,\"filter\")):(c.filter=d.replace(z,\"\"),!0):b)||(this.xn1&&(c.filter=d=d||\"alpha(opacity=\"+e+\")\"),-1===d.indexOf(\"pacity\")?0==e&&this.xn1||(c.filter=d+\" alpha(opacity=\"+e+\")\"):c.filter=d.replace(x,\"opacity=\"+e))}za(\"opacity,alpha,autoAlpha\",{defaultValue:\"1\",parser:function(a,b,c,d,f,g){var h=parseFloat(aa(a,\"opacity\",e,!1,\"1\")),i=a.style,j=\"autoAlpha\"===c;return\"string\"==typeof b&&\"=\"===b.charAt(1)&&(b=(\"-\"===b.charAt(0)?-1:1)*parseFloat(b.substr(2))+h),j&&1===h&&\"hidden\"===aa(a,\"visibility\",e)&&0!==b&&(h=0),U?f=new ua(i,\"opacity\",h,b-h,f):((f=new ua(i,\"opacity\",100*h,100*(b-h),f)).xn1=j?1:0,i.zoom=1,f.type=2,f.b=\"alpha(opacity=\"+f.s+\")\",f.e=\"alpha(opacity=\"+(f.s+f.c)+\")\",f.data=a,f.plugin=g,f.setRatio=Va),j&&((f=new ua(i,\"visibility\",0,0,f,-1,null,!1,0,0!==h?\"inherit\":\"hidden\",0===b?\"hidden\":\"inherit\")).xs0=\"inherit\",d._overwriteProps.push(f.n),d._overwriteProps.push(c)),f}});function Xa(a){if(this.t._gsClassPT=this,1===a||0===a){this.t.setAttribute(\"class\",0===a?this.b:this.e);for(var b=this.data,c=this.t.style;b;)b.v?c[b.p]=b.v:Wa(c,b.p),b=b._next;1===a&&this.t._gsClassPT===this&&(this.t._gsClassPT=null)}else this.t.getAttribute(\"class\")!==this.e&&this.t.setAttribute(\"class\",this.e)}var Wa=function(a,b){b&&(a.removeProperty?(\"ms\"!==b.substr(0,2)&&\"webkit\"!==b.substr(0,6)||(b=\"-\"+b),a.removeProperty(b.replace(B,\"-$1\").toLowerCase())):a.removeAttribute(b))};za(\"className\",{parser:function(a,b,l,f,g,h,j){var k,m,n,o=a.getAttribute(\"class\")||\"\",p=a.style.cssText;if((g=f._classNamePT=new ua(a,l,0,0,g,2)).setRatio=Xa,g.pr=-11,c=!0,g.b=o,k=da(a,e),l=a._gsClassPT){for(m={},n=l.data;n;)m[n.p]=1,n=n._next;l.setRatio(1)}return(a._gsClassPT=g).e=\"=\"!==b.charAt(1)?b:o.replace(new RegExp(\"(?:\\\\s|^)\"+b.substr(2)+\"(?![\\\\w-])\"),\"\")+(\"+\"===b.charAt(0)?\" \"+b.substr(2):\"\"),a.setAttribute(\"class\",g.e),j=ea(a,k,da(a),j,m),a.setAttribute(\"class\",o),g.data=j.firstMPT,a.style.cssText=p,g.xfirst=f.parse(a,j.difs,g,h)}});function Ya(f){if((1===f||0===f)&&this.data._totalTime===this.data._totalDuration&&\"isFromStart\"!==this.data.data){var b,c,d,e,g=this.t.style,h=i.transform.parse;if(\"all\"===this.e)e=!(g.cssText=\"\");else for(d=(b=this.e.split(\" \").join(\"\").split(\",\")).length;-1<--d;)c=b[d],i[c]&&(i[c].parse===h?e=!0:c=\"transformOrigin\"===c?Fa:i[c].p),Wa(g,c);e&&(Wa(g,Da),(f=this.t._gsTransform)&&(f.svg&&(this.t.removeAttribute(\"data-svg-origin\"),this.t.removeAttribute(\"transform\")),delete this.t._gsTransform))}}for(za(\"clearProps\",{parser:function(a,b,d,e,f){return(f=new ua(a,d,0,0,f,2)).setRatio=Ya,f.e=b,f.pr=-10,f.data=e._tween,c=!0,f}}),j=\"bezier,throwProps,physicsProps,physics2D\".split(\",\"),xa=j.length;xa--;)Aa(j[xa]);(j=g.prototype)._firstPT=j._lastParsedTransform=j._transform=null,j._onInitTween=function(a,w,h,x){if(!a.nodeType)return!1;this._target=q=a,this._tween=h,this._vars=w,r=x,k=w.autoRound,c=!1,d=w.suffixMap||g.suffixMap,e=_(a),f=this._overwriteProps;var p,s,t,u,v,z,x=a.style;if(l&&\"\"===x.zIndex&&(\"auto\"!==(z=aa(a,\"zIndex\",e))&&\"\"!==z||this._addLazySet(x,\"zIndex\",0)),\"string\"==typeof w&&(t=x.cssText,z=da(a,e),x.cssText=t+\";\"+w,z=ea(a,z,da(a)).difs,!U&&y.test(w)&&(z.opacity=parseFloat(RegExp.$1)),w=z,x.cssText=t),w.className?this._firstPT=p=i.className.parse(a,w.className,\"className\",this,null,null,w):this._firstPT=p=this.parse(a,w,null),this._transformType){for(z=3===this._transformType,Da?m&&(l=!0,\"\"===x.zIndex&&(\"auto\"!==(w=aa(a,\"zIndex\",e))&&\"\"!==w||this._addLazySet(x,\"zIndex\",0)),o&&this._addLazySet(x,\"WebkitBackfaceVisibility\",this._vars.WebkitBackfaceVisibility||(z?\"visible\":\"hidden\"))):x.zoom=1,s=p;s&&s._next;)s=s._next;x=new ua(a,\"transform\",0,0,null,2),this._linkCSSP(x,null,s),x.setRatio=Da?Ua:Ta,x.data=this._transform||Sa(a,e,!0),x.tween=h,x.pr=-1,f.pop()}if(c){for(;p;){for(v=p._next,s=t;s&&s.pr>p.pr;)s=s._next;(p._prev=s?s._prev:u)?p._prev._next=p:t=p,(p._next=s)?s._prev=p:u=p,p=v}this._firstPT=t}return!0},j.parse=function(a,b,c,f){var g,j,l,m,n,o,p,t,u=a.style;for(g in b){if(n=b[g],t=i[g],\"function\"!=typeof n||t&&t.allowFunc||(n=n(r,q)),t)c=t.parse(a,n,g,this,c,f,b);else{if(\"--\"===g.substr(0,2)){this._tween._propLookup[g]=this._addTween.call(this._tween,a.style,\"setProperty\",_(a).getPropertyValue(g)+\"\",n+\"\",g,!1,g);continue}m=aa(a,g,e)+\"\",p=\"string\"==typeof n,\"color\"===g||\"fill\"===g||\"stroke\"===g||-1!==g.indexOf(\"Color\")||p&&A.test(n)?(p||(n=(3<(n=oa(n)).length?\"rgba(\":\"rgb(\")+n.join(\",\")+\")\"),c=wa(u,g,m,n,!0,\"transparent\",c,0,f)):p&&J.test(n)?c=wa(u,g,m,n,!0,null,c,0,f):(o=(j=parseFloat(m))||0===j?m.substr((j+\"\").length):\"\",\"\"!==m&&\"auto\"!==m||(o=\"width\"===g||\"height\"===g?(j=function(a,b,c){if(\"svg\"===(a.nodeName+\"\").toLowerCase())return(c||_(a))[b]||0;if(a.getCTM&&Pa(a))return a.getBBox()[b]||0;var d=parseFloat(\"width\"===b?a.offsetWidth:a.offsetHeight),e=fa[b],f=e.length;for(c=c||_(a);-1<--f;)d-=parseFloat(aa(a,\"padding\"+e[f],c,!0))||0,d-=parseFloat(aa(a,\"border\"+e[f]+\"Width\",c,!0))||0;return d}(a,g,e),\"px\"):\"left\"===g||\"top\"===g?(j=ca(a,g,e),\"px\"):(j=\"opacity\"!==g?0:1,\"\")),\"\"===(p=(t=p&&\"=\"===n.charAt(1))?(l=parseInt(n.charAt(0)+\"1\",10),n=n.substr(2),l*=parseFloat(n),n.replace(w,\"\")):(l=parseFloat(n),p?n.replace(w,\"\"):\"\"))&&(p=g in d?d[g]:o),n=l||0===l?(t?l+j:l)+p:b[g],o===p||\"\"===p&&\"lineHeight\"!==g||!l&&0!==l||!j||(j=ba(a,g,j,o),\"%\"===p?(j/=ba(a,g,100,\"%\")/100,!0!==b.strictUnits&&(m=j+\"%\")):\"em\"===p||\"rem\"===p||\"vw\"===p||\"vh\"===p?j/=ba(a,g,1,p):\"px\"!==p&&(l=ba(a,g,l,p),p=\"px\"),t&&(l||0===l)&&(n=l+j+p)),t&&(l+=j),!j&&0!==j||!l&&0!==l?void 0!==u[g]&&(n||n+\"\"!=\"NaN\"&&null!=n)?(c=new ua(u,g,l||j||0,0,c,-1,g,!1,0,m,n)).xs0=\"none\"!==n||\"display\"!==g&&-1===g.indexOf(\"Style\")?n:m:W(\"invalid \"+g+\" tween value: \"+b[g]):(c=new ua(u,g,j,l-j,c,0,g,!1!==k&&(\"px\"===p||\"zIndex\"===g),0,m,n)).xs0=p)}f&&c&&!c.plugin&&(c.plugin=f)}return c},j.setRatio=function(a){var b,c,d,e=this._firstPT;if(1!==a||this._tween._time!==this._tween._duration&&0!==this._tween._time)if(a||this._tween._time!==this._tween._duration&&0!==this._tween._time||-1e-6===this._tween._rawPrevTime)for(;e;){if(b=e.c*a+e.s,e.r?b=e.r(b):b<1e-6&&-1e-6<b&&(b=0),e.type)if(1===e.type)if(2===(d=e.l))e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2;else if(3===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3;else if(4===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3+e.xn3+e.xs4;else if(5===d)e.t[e.p]=e.xs0+b+e.xs1+e.xn1+e.xs2+e.xn2+e.xs3+e.xn3+e.xs4+e.xn4+e.xs5;else{for(c=e.xs0+b+e.xs1,d=1;d<e.l;d++)c+=e[\"xn\"+d]+e[\"xs\"+(d+1)];e.t[e.p]=c}else-1===e.type?e.t[e.p]=e.xs0:e.setRatio&&e.setRatio(a);else e.t[e.p]=b+e.xs0;e=e._next}else for(;e;)2!==e.type?e.t[e.p]=e.b:e.setRatio(a),e=e._next;else for(;e;){if(2!==e.type)if(e.r&&-1!==e.type)if(b=e.r(e.s+e.c),e.type){if(1===e.type){for(d=e.l,c=e.xs0+b+e.xs1,d=1;d<e.l;d++)c+=e[\"xn\"+d]+e[\"xs\"+(d+1)];e.t[e.p]=c}}else e.t[e.p]=b+e.xs0;else e.t[e.p]=e.e;else e.setRatio(a);e=e._next}},j._enableTransforms=function(a){this._transform=this._transform||Sa(this._target,e,!0),this._transformType=this._transform.svg&&Ba||!a&&3!==this._transformType?2:3};function Za(a){this.t[this.p]=this.e,this.data._linkCSSP(this,this._next,null,!0)}j._addLazySet=function(a,d,c){d=this._firstPT=new ua(a,d,0,0,this._firstPT,2);d.e=c,d.setRatio=Za,d.data=this},j._linkCSSP=function(a,b,c,d){return a&&(b&&(b._prev=a),a._next&&(a._next._prev=a._prev),a._prev?a._prev._next=a._next:this._firstPT===a&&(this._firstPT=a._next,d=!0),c?c._next=a:d||null!==this._firstPT||(this._firstPT=a),a._next=b,a._prev=c),a},j._mod=function(a){for(var b=this._firstPT;b;)\"function\"==typeof a[b.p]&&(b.r=a[b.p]),b=b._next},j._kill=function(b){var c,d,e,f=b;if(b.autoAlpha||b.alpha){for(d in f={},b)f[d]=b[d];f.opacity=1,f.autoAlpha&&(f.visibility=1)}for(b.className&&(c=this._classNamePT)&&((e=c.xfirst)&&e._prev?this._linkCSSP(e._prev,c._next,e._prev._prev):e===this._firstPT&&(this._firstPT=c._next),c._next&&this._linkCSSP(c._next,c._next._next,e._prev),this._classNamePT=null),c=this._firstPT;c;)c.plugin&&c.plugin!==d&&c.plugin._kill&&(c.plugin._kill(b),d=c.plugin),c=c._next;return a.prototype._kill.call(this,f)};var $a=function(a,b,c){var d,e,f,g;if(a.slice)for(e=a.length;-1<--e;)$a(a[e],b,c);else for(e=(d=a.childNodes).length;-1<--e;)g=(f=d[e]).type,f.style&&(b.push(da(f)),c&&c.push(f)),1!==g&&9!==g&&11!==g||!f.childNodes.length||$a(f,b,c)};return g.cascadeTo=function(a,c,d){var e,f,g,h,i=b.to(a,c,d),j=[i],k=[],l=[],m=[],n=b._internals.reservedProps;for(a=i._targets||i.target,$a(a,k,m),i.render(c,!0,!0),$a(a,l),i.render(0,!0,!0),i._enabled(!0),e=m.length;-1<--e;)if((f=ea(m[e],k[e],l[e])).firstMPT){for(g in f=f.difs,d)n[g]&&(f[g]=d[g]);for(g in h={},f)h[g]=k[e][g];j.push(b.fromTo(m[e],c,h,f))}return j},a.activate([g]),g},!0),function(){var d=_gsScope._gsDefine.plugin({propName:\"roundProps\",version:\"1.7.0\",priority:-1,API:2,init:function(a,b,c){return this._tween=c,!0}}),d=d.prototype;d._onInitAllProps=function(){var a,d,e,f,g=this._tween,h=g.vars.roundProps,i={},j=g._propLookup.roundProps;if(\"object\"!=typeof h||h.push)for(e=(h=\"string\"==typeof h?h.split(\",\"):h).length;-1<--e;)i[h[e]]=Math.round;else for(f in h)i[f]=function(a){var b=a<1?Math.pow(10,(a+\"\").length-2):1;return function(c){return(Math.round(c/a)*a*b|0)/b}}(h[f]);for(f in i)for(a=g._firstPT;a;)d=a._next,a.pg?a.t._mod(i):a.n===f&&(2===a.f&&a.t?function(a,b){for(;a;)a.f||a.blob||(a.m=b||Math.round),a=a._next}(a.t._firstPT,i[f]):(this._add(a.t,f,a.s,a.c,i[f]),d&&(d._prev=a._prev),a._prev?a._prev._next=d:g._firstPT===a&&(g._firstPT=d),a._next=a._prev=null,g._propLookup[f]=j)),a=d;return!1},d._add=function(a,b,c,d,e){this._addTween(a,b,c,c+d,b,e||Math.round),this._overwriteProps.push(b)}}(),_gsScope._gsDefine.plugin({propName:\"attr\",API:2,version:\"0.6.1\",init:function(a,b,c,d){var e,f;if(\"function\"!=typeof a.setAttribute)return!1;for(e in b)f=b[e],\"function\"==typeof f&&(f=f(d,a)),this._addTween(a,\"setAttribute\",a.getAttribute(e)+\"\",f+\"\",e,!1,e),this._overwriteProps.push(e);return!0}}),_gsScope._gsDefine.plugin({propName:\"directionalRotation\",version:\"0.3.1\",API:2,init:function(a,b,c,d){\"object\"!=typeof b&&(b={rotation:b}),this.finals={};var e,f,g,i,j,k=!0===b.useRadians?2*Math.PI:360;for(e in b)\"useRadians\"!==e&&(i=b[e],\"function\"==typeof i&&(i=i(d,a)),j=(i+\"\").split(\"_\"),f=j[0],g=parseFloat(\"function\"!=typeof a[e]?a[e]:a[e.indexOf(\"set\")||\"function\"!=typeof a[\"get\"+e.substr(3)]?e:\"get\"+e.substr(3)]()),i=this.finals[e]=\"string\"==typeof f&&\"=\"===f.charAt(1)?g+parseInt(f.charAt(0)+\"1\",10)*Number(f.substr(2)):Number(f)||0,i=i-g,j.length&&(f=j.join(\"_\"),-1!==f.indexOf(\"short\")&&(i%=k,i!==i%(k/2)&&(i=i<0?i+k:i-k)),-1!==f.indexOf(\"_cw\")&&i<0?i=(i+9999999999*k)%k-(i/k|0)*k:-1!==f.indexOf(\"ccw\")&&0<i&&(i=(i-9999999999*k)%k-(i/k|0)*k)),(1e-6<i||i<-1e-6)&&(this._addTween(a,e,g,g+i,e),this._overwriteProps.push(e)));return!0},set:function(a){var b;if(1!==a)this._super.setRatio.call(this,a);else for(b=this._firstPT;b;)b.f?b.t[b.p](this.finals[b.p]):b.t[b.p]=this.finals[b.p],b=b._next}})._autoCSS=!0,_gsScope._gsDefine(\"easing.Back\",[\"easing.Ease\"],function(a){function k(e,c){var d=j(\"easing.\"+e,function(){},!0);return(e=d.prototype=new a).constructor=d,e.getRatio=c,d}function m(a,b,c,f,e){return f=j(\"easing.\"+a,{easeOut:new b,easeIn:new c,easeInOut:new f},!0),l(f,a),f}function n(a,b,c){this.t=a,this.v=b,c&&(((this.next=c).prev=this).c=c.v-b,this.gap=c.t-a)}var b,c,d,f=_gsScope.GreenSockGlobals||_gsScope,p=f.com.greensock,h=2*Math.PI,i=Math.PI/2,j=p._class,l=a.register||function(){},e=function(e,c){var d=j(\"easing.\"+e,function(a){this._p1=a||0===a?a:1.70158,this._p2=1.525*this._p1},!0),e=d.prototype=new a;return e.constructor=d,e.getRatio=c,e.config=function(a){return new d(a)},d},p=m(\"Back\",e(\"BackOut\",function(a){return--a*a*((this._p1+1)*a+this._p1)+1}),e(\"BackIn\",function(a){return a*a*((this._p1+1)*a-this._p1)}),e(\"BackInOut\",function(a){return(a*=2)<1?.5*a*a*((this._p2+1)*a-this._p2):.5*((a-=2)*a*((this._p2+1)*a+this._p2)+2)})),q=j(\"easing.SlowMo\",function(a,b,c){b=b||0===b?b:.7,null==a?a=.7:1<a&&(a=1),this._p=1!==a?b:0,this._p1=(1-a)/2,this._p2=a,this._p3=this._p1+this._p2,this._calcEnd=!0===c},!0),e=q.prototype=new a;return e.constructor=q,e.getRatio=function(a){var b=a+(.5-a)*this._p;return a<this._p1?this._calcEnd?1-(a=1-a/this._p1)*a:b-(a=1-a/this._p1)*a*a*a*b:a>this._p3?this._calcEnd?1===a?0:1-(a=(a-this._p3)/this._p1)*a:b+(a-b)*(a=(a-this._p3)/this._p1)*a*a*a:this._calcEnd?1:b},q.ease=new q(.7,.7),e.config=q.config=function(a,b,c){return new q(a,b,c)},(e=(b=j(\"easing.SteppedEase\",function(a,b){this._p1=1/(a=a||1),this._p2=a+(b?0:1),this._p3=b?1:0},!0)).prototype=new a).constructor=b,e.getRatio=function(a){return a<0?a=0:1<=a&&(a=.999999999),((this._p2*a|0)+this._p3)*this._p1},e.config=b.config=function(a,c){return new b(a,c)},(e=(c=j(\"easing.ExpoScaleEase\",function(a,b,c){this._p1=Math.log(b/a),this._p2=b-a,this._p3=a,this._ease=c},!0)).prototype=new a).constructor=c,e.getRatio=function(a){return this._ease&&(a=this._ease.getRatio(a)),(this._p3*Math.exp(this._p1*a)-this._p3)/this._p2},e.config=c.config=function(a,b,d){return new c(a,b,d)},(e=(d=j(\"easing.RoughEase\",function(b){for(var c,d,e,f,g,h,i=(b=b||{}).taper||\"none\",j=[],k=0,l=0|(b.points||20),m=l,o=!1!==b.randomize,p=!0===b.clamp,q=b.template instanceof a?b.template:null,r=\"number\"==typeof b.strength?.4*b.strength:.4;-1<--m;)c=o?Math.random():1/l*m,d=q?q.getRatio(c):c,e=\"none\"===i?r:\"out\"===i?(f=1-c)*f*r:\"in\"===i?c*c*r:(f=c<.5?2*c:2*(1-c))*f*.5*r,o?d+=Math.random()*e-.5*e:m%2?d+=.5*e:d-=.5*e,p&&(1<d?d=1:d<0&&(d=0)),j[k++]={x:c,y:d};for(j.sort(function(a,b){return a.x-b.x}),h=new n(1,1,null),m=l;-1<--m;)g=j[m],h=new n(g.x,g.y,h);this._prev=new n(0,0,0!==h.t?h:h.next)},!0)).prototype=new a).constructor=d,e.getRatio=function(a){var b=this._prev;if(a>b.t){for(;b.next&&a>=b.t;)b=b.next;b=b.prev}else for(;b.prev&&a<=b.t;)b=b.prev;return(this._prev=b).v+(a-b.t)/b.gap*b.c},e.config=function(a){return new d(a)},d.ease=new d,m(\"Bounce\",k(\"BounceOut\",function(a){return a<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375}),k(\"BounceIn\",function(a){return(a=1-a)<1/2.75?1-7.5625*a*a:a<2/2.75?1-(7.5625*(a-=1.5/2.75)*a+.75):a<2.5/2.75?1-(7.5625*(a-=2.25/2.75)*a+.9375):1-(7.5625*(a-=2.625/2.75)*a+.984375)}),k(\"BounceInOut\",function(a){var b=a<.5;return a=(a=b?1-2*a:2*a-1)<1/2.75?7.5625*a*a:a<2/2.75?7.5625*(a-=1.5/2.75)*a+.75:a<2.5/2.75?7.5625*(a-=2.25/2.75)*a+.9375:7.5625*(a-=2.625/2.75)*a+.984375,b?.5*(1-a):.5*a+.5})),m(\"Circ\",k(\"CircOut\",function(a){return Math.sqrt(1- --a*a)}),k(\"CircIn\",function(a){return-(Math.sqrt(1-a*a)-1)}),k(\"CircInOut\",function(a){return(a*=2)<1?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)})),m(\"Elastic\",(e=function(f,c,d){var e=j(\"easing.\"+f,function(a,b){this._p1=1<=a?a:1,this._p2=(b||d)/(a<1?a:1),this._p3=this._p2/h*(Math.asin(1/this._p1)||0),this._p2=h/this._p2},!0),f=e.prototype=new a;return f.constructor=e,f.getRatio=c,f.config=function(a,b){return new e(a,b)},e})(\"ElasticOut\",function(a){return this._p1*Math.pow(2,-10*a)*Math.sin((a-this._p3)*this._p2)+1},.3),e(\"ElasticIn\",function(a){return-(this._p1*Math.pow(2,10*--a)*Math.sin((a-this._p3)*this._p2))},.3),e(\"ElasticInOut\",function(a){return(a*=2)<1?this._p1*Math.pow(2,10*--a)*Math.sin((a-this._p3)*this._p2)*-.5:this._p1*Math.pow(2,-10*--a)*Math.sin((a-this._p3)*this._p2)*.5+1},.45)),m(\"Expo\",k(\"ExpoOut\",function(a){return 1-Math.pow(2,-10*a)}),k(\"ExpoIn\",function(a){return Math.pow(2,10*(a-1))-.001}),k(\"ExpoInOut\",function(a){return(a*=2)<1?.5*Math.pow(2,10*(a-1)):.5*(2-Math.pow(2,-10*(a-1)))})),m(\"Sine\",k(\"SineOut\",function(a){return Math.sin(a*i)}),k(\"SineIn\",function(a){return 1-Math.cos(a*i)}),k(\"SineInOut\",function(a){return-.5*(Math.cos(Math.PI*a)-1)})),j(\"easing.EaseLookup\",{find:function(b){return a.map[b]}},!0),l(f.SlowMo,\"SlowMo\",\"ease,\"),l(d,\"RoughEase\",\"ease,\"),l(b,\"SteppedEase\",\"ease,\"),p},!0)}),_gsScope._gsDefine&&_gsScope._gsQueue.pop()(),function(a,b){\"use strict\";var c={},d=a.document,e=a.GreenSockGlobals=a.GreenSockGlobals||a,S=e[b];if(S)return\"undefined\"!=typeof module&&module.exports&&(module.exports=S);function l(a){for(var c=a.split(\".\"),d=e,b=0;b<c.length;b++)d[c[b]]=d=d[c[b]]||{};return d}function o(a){for(var c=[],d=a.length,b=0;b!==d;c.push(a[b++]));return c}function p(){}var k,m=l(\"com.greensock\"),n=1e-8,q=function(){var a=Object.prototype.toString,b=a.call([]);return function(c){return null!=c&&(c instanceof Array||\"object\"==typeof c&&!!c.push&&a.call(c)===b)}}(),r={},s=function(d,f,g,h){this.sc=r[d]?r[d].sc:[],(r[d]=this).gsClass=null,this.func=g;var i=[];this.check=function(j){for(var k,m,n,o,p=f.length,q=p;-1<--p;)(k=r[f[p]]||new s(f[p],[])).gsClass?(i[p]=k.gsClass,q--):j&&k.sc.push(this);if(0===q&&g){if(n=(m=(\"com.greensock.\"+d).split(\".\")).pop(),o=l(m.join(\".\"))[n]=this.gsClass=g.apply(g,i),h)if(e[n]=c[n]=o,\"undefined\"!=typeof module&&module.exports)if(d===b)for(p in module.exports=c[b]=o,c)o[p]=c[p];else c[b]&&(c[b][n]=o);else\"function\"==typeof define&&define.amd&&define((a.GreenSockAMDPath?a.GreenSockAMDPath+\"/\":\"\")+d.split(\".\").pop(),[],function(){return o});for(p=0;p<this.sc.length;p++)this.sc[p].check()}},this.check(!0)},t=a._gsDefine=function(a,b,c,d){return new s(a,b,c,d)},u=m._class=function(a,b,c){return b=b||function(){},t(a,[],function(){return b},c),b};t.globals=e;var i,v=[0,0,1,1],w=u(\"easing.Ease\",function(a,b,c,d){this._func=a,this._type=c||0,this._power=d||0,this._params=b?v.concat(b):v},!0),x=w.map={},y=w.register=function(a,b,c,d){for(var e,f,g,h,i=b.split(\",\"),j=i.length,k=(c||\"easeIn,easeOut,easeInOut\").split(\",\");-1<--j;)for(f=i[j],e=d?u(\"easing.\"+f,null,!0):m.easing[f]||{},g=k.length;-1<--g;)h=k[g],x[f+\".\"+h]=x[h+f]=e[h]=a.getRatio?a:a[h]||new a};for((i=w.prototype)._calcEnd=!1,i.getRatio=function(a){if(this._func)return this._params[0]=a,this._func.apply(null,this._params);var b=this._type,c=this._power,d=1===b?1-a:2===b?a:a<.5?2*a:2*(1-a);return 1===c?d*=d:2===c?d*=d*d:3===c?d*=d*d*d:4===c&&(d*=d*d*d*d),1===b?1-d:2===b?d:a<.5?d/2:1-d/2},h=(g=[\"Linear\",\"Quad\",\"Cubic\",\"Quart\",\"Quint,Strong\"]).length;-1<--h;)i=g[h]+\",Power\"+h,y(new w(null,null,1,h),i,\"easeOut\",!0),y(new w(null,null,2,h),i,\"easeIn\"+(0===h?\",easeNone\":\"\")),y(new w(null,null,3,h),i,\"easeInOut\");x.linear=m.easing.Linear.easeIn,x.swing=m.easing.Quad.easeInOut;var z=u(\"events.EventDispatcher\",function(a){this._listeners={},this._eventTarget=a||this});(i=z.prototype).addEventListener=function(a,b,c,d,e){e=e||0;var f,g,h=this._listeners[a],i=0;for(this!==j||k||j.wake(),null==h&&(this._listeners[a]=h=[]),g=h.length;-1<--g;)(f=h[g]).c===b&&f.s===c?h.splice(g,1):0===i&&f.pr<e&&(i=g+1);h.splice(i,0,{c:b,s:c,up:d,pr:e})},i.removeEventListener=function(a,b){var c,d=this._listeners[a];if(d)for(c=d.length;-1<--c;)if(d[c].c===b)return void d.splice(c,1)},i.dispatchEvent=function(a){var b,c,d,e=this._listeners[a];if(e)for(1<(b=e.length)&&(e=e.slice(0)),c=this._eventTarget;-1<--b;)(d=e[b])&&(d.up?d.c.call(d.s||c,{type:a,target:c}):d.c.call(d.s||c))};for(var g,A=a.requestAnimationFrame,B=a.cancelAnimationFrame,C=Date.now||function(){return(new Date).getTime()},D=C(),h=(g=[\"ms\",\"moz\",\"webkit\",\"o\"]).length;-1<--h&&!A;)A=a[g[h]+\"RequestAnimationFrame\"],B=a[g[h]+\"CancelAnimationFrame\"]||a[g[h]+\"CancelRequestAnimationFrame\"];u(\"Ticker\",function(a,b){var c,e,f,g,h,i=this,l=C(),m=!(!1===b||!A)&&\"auto\",o=500,q=33,s=function(a){var d,b=C()-D;o<b&&(l+=b-q),D+=b,i.time=(D-l)/1e3,b=i.time-h,(!c||0<b||!0===a)&&(i.frame++,h+=b+(g<=b?.004:g-b),d=!0),!0!==a&&(f=e(s)),d&&i.dispatchEvent(\"tick\")};z.call(i),i.time=i.frame=0,i.tick=function(){s(!0)},i.lagSmoothing=function(a,b){return arguments.length?(o=a||1e8,void(q=Math.min(b,o,0))):o<1e8},i.sleep=function(){null!=f&&((m&&B?B:clearTimeout)(f),e=p,f=null,i===j&&(k=!1))},i.wake=function(a){null!==f?i.sleep():a?l+=-D+(D=C()):10<i.frame&&(D=C()-o+5),e=0===c?p:m&&A?A:function(a){return setTimeout(a,1e3*(h-i.time)+1|0)},i===j&&(k=!0),s(2)},i.fps=function(a){return arguments.length?(g=1/((c=a)||60),h=this.time+g,void i.wake()):c},i.useRAF=function(a){return arguments.length?(i.sleep(),m=a,void i.fps(c)):m},i.fps(a),setTimeout(function(){\"auto\"===m&&i.frame<5&&\"hidden\"!==(d||{}).visibilityState&&i.useRAF(!1)},1500)}),(i=m.Ticker.prototype=new m.events.EventDispatcher).constructor=m.Ticker;var E=u(\"core.Animation\",function(a,c){this.vars=c=c||{},this._duration=this._totalDuration=a||0,this._delay=Number(c.delay)||0,this._timeScale=1,this._active=!!c.immediateRender,this.data=c.data,this._reversed=!!c.reversed,Z&&(k||j.wake(),(c=this.vars.useFrames?Y:Z).add(this,c._time),this.vars.paused&&this.paused(!0))}),j=E.ticker=new m.Ticker;(i=E.prototype)._dirty=i._gc=i._initted=i._paused=!1,i._totalTime=i._time=0,i._rawPrevTime=-1,i._next=i._last=i._onUpdate=i._timeline=i.timeline=null,i._paused=!1;var F=function(){k&&2e3<C()-D&&(\"hidden\"!==(d||{}).visibilityState||!j.lagSmoothing())&&j.wake();var a=setTimeout(F,2e3);a.unref&&a.unref()};F(),i.play=function(a,b){return null!=a&&this.seek(a,b),this.reversed(!1).paused(!1)},i.pause=function(a,b){return null!=a&&this.seek(a,b),this.paused(!0)},i.resume=function(a,b){return null!=a&&this.seek(a,b),this.paused(!1)},i.seek=function(a,b){return this.totalTime(Number(a),!1!==b)},i.restart=function(a,b){return this.reversed(!1).paused(!1).totalTime(a?-this._delay:0,!1!==b,!0)},i.reverse=function(a,b){return null!=a&&this.seek(a||this.totalDuration(),b),this.reversed(!0).paused(!1)},i.render=function(a,b,c){},i.invalidate=function(){return this._time=this._totalTime=0,this._initted=this._gc=!1,this._rawPrevTime=-1,!this._gc&&this.timeline||this._enabled(!0),this},i.isActive=function(){var a,b=this._timeline,c=this._startTime;return!b||!this._gc&&!this._paused&&b.isActive()&&(a=b.rawTime(!0))>=c&&a<c+this.totalDuration()/this._timeScale-n},i._enabled=function(a,b){return k||j.wake(),this._gc=!a,this._active=this.isActive(),!0!==b&&(a&&!this.timeline?this._timeline.add(this,this._startTime-this._delay):!a&&this.timeline&&this._timeline._remove(this,!0)),!1},i._kill=function(a,b){return this._enabled(!1,!1)},i.kill=function(a,b){return this._kill(a,b),this},i._uncache=function(a){for(var b=a?this:this.timeline;b;)b._dirty=!0,b=b.timeline;return this},i._swapSelfInParams=function(a){for(var b=a.length,c=a.concat();-1<--b;)\"{self}\"===a[b]&&(c[b]=this);return c},i._callback=function(a){var b=this.vars,c=b[a],d=b[a+\"Params\"],e=b[a+\"Scope\"]||b.callbackScope||this;switch(d?d.length:0){case 0:c.call(e);break;case 1:c.call(e,d[0]);break;case 2:c.call(e,d[0],d[1]);break;default:c.apply(e,d)}},i.eventCallback=function(a,b,c,d){if(\"on\"===(a||\"\").substr(0,2)){var e=this.vars;if(1===arguments.length)return e[a];null==b?delete e[a]:(e[a]=b,e[a+\"Params\"]=q(c)&&-1!==c.join(\"\").indexOf(\"{self}\")?this._swapSelfInParams(c):c,e[a+\"Scope\"]=d),\"onUpdate\"===a&&(this._onUpdate=b)}return this},i.delay=function(a){return arguments.length?(this._timeline.smoothChildTiming&&this.startTime(this._startTime+a-this._delay),this._delay=a,this):this._delay},i.duration=function(a){return arguments.length?(this._duration=this._totalDuration=a,this._uncache(!0),this._timeline.smoothChildTiming&&0<this._time&&this._time<this._duration&&0!==a&&this.totalTime(this._totalTime*(a/this._duration),!0),this):(this._dirty=!1,this._duration)},i.totalDuration=function(a){return this._dirty=!1,arguments.length?this.duration(a):this._totalDuration},i.time=function(a,b){return arguments.length?(this._dirty&&this.totalDuration(),this.totalTime(a>this._duration?this._duration:a,b)):this._time},i.totalTime=function(a,b,c){if(k||j.wake(),!arguments.length)return this._totalTime;if(this._timeline){if(a<0&&!c&&(a+=this.totalDuration()),this._timeline.smoothChildTiming){this._dirty&&this.totalDuration();var d=this._totalDuration,e=this._timeline;if(d<a&&!c&&(a=d),this._startTime=(this._paused?this._pauseTime:e._time)-(this._reversed?d-a:a)/this._timeScale,e._dirty||this._uncache(!1),e._timeline)for(;e._timeline;)e._timeline._time!==(e._startTime+e._totalTime)/e._timeScale&&e.totalTime(e._totalTime,!0),e=e._timeline}this._gc&&this._enabled(!0,!1),this._totalTime===a&&0!==this._duration||(K.length&&_(),this.render(a,b,!1),K.length&&_())}return this},i.progress=i.totalProgress=function(a,b){var c=this.duration();return arguments.length?this.totalTime(c*a,b):c?this._time/c:this.ratio},i.startTime=function(a){return arguments.length?(a!==this._startTime&&(this._startTime=a,this.timeline&&this.timeline._sortChildren&&this.timeline.add(this,a-this._delay)),this):this._startTime},i.endTime=function(a){return this._startTime+(0!=a?this.totalDuration():this.duration())/this._timeScale},i.timeScale=function(a){if(!arguments.length)return this._timeScale;var b,c;for(a=a||n,this._timeline&&this._timeline.smoothChildTiming&&(c=(b=this._pauseTime)||0===b?b:this._timeline.totalTime(),this._startTime=c-(c-this._startTime)*this._timeScale/a),this._timeScale=a,c=this.timeline;c&&c.timeline;)c._dirty=!0,c.totalDuration(),c=c.timeline;return this},i.reversed=function(a){return arguments.length?(a!=this._reversed&&(this._reversed=a,this.totalTime(this._timeline&&!this._timeline.smoothChildTiming?this.totalDuration()-this._totalTime:this._totalTime,!0)),this):this._reversed},i.paused=function(a){if(!arguments.length)return this._paused;var b,c,d=this._timeline;return a!=this._paused&&d&&(k||a||j.wake(),c=(b=d.rawTime())-this._pauseTime,!a&&d.smoothChildTiming&&(this._startTime+=c,this._uncache(!1)),this._pauseTime=a?b:null,this._paused=a,this._active=this.isActive(),!a&&0!=c&&this._initted&&this.duration()&&(b=d.smoothChildTiming?this._totalTime:(b-this._startTime)/this._timeScale,this.render(b,b===this._totalTime,!0))),this._gc&&!a&&this._enabled(!0,!1),this};var G=u(\"core.SimpleTimeline\",function(a){E.call(this,0,a),this.autoRemoveChildren=this.smoothChildTiming=!0});(i=G.prototype=new E).constructor=G,i.kill()._gc=!1,i._first=i._last=i._recent=null,i._sortChildren=!1,i.add=i.insert=function(a,b,c,d){var e,f;if(a._startTime=Number(b||0)+a._delay,a._paused&&this!==a._timeline&&(a._pauseTime=this.rawTime()-(a._timeline.rawTime()-a._pauseTime)),a.timeline&&a.timeline._remove(a,!0),a.timeline=a._timeline=this,a._gc&&a._enabled(!0,!0),e=this._last,this._sortChildren)for(f=a._startTime;e&&e._startTime>f;)e=e._prev;return e?(a._next=e._next,e._next=a):(a._next=this._first,this._first=a),a._next?a._next._prev=a:this._last=a,a._prev=e,this._recent=a,this._timeline&&this._uncache(!0),this},i._remove=function(a,b){return a.timeline===this&&(b||a._enabled(!1,!0),a._prev?a._prev._next=a._next:this._first===a&&(this._first=a._next),a._next?a._next._prev=a._prev:this._last===a&&(this._last=a._prev),a._next=a._prev=a.timeline=null,a===this._recent&&(this._recent=this._last),this._timeline&&this._uncache(!0)),this},i.render=function(a,b,c){var d,e=this._first;for(this._totalTime=this._time=this._rawPrevTime=a;e;)d=e._next,(e._active||a>=e._startTime&&!e._paused&&!e._gc)&&(e._reversed?e.render((e._dirty?e.totalDuration():e._totalDuration)-(a-e._startTime)*e._timeScale,b,c):e.render((a-e._startTime)*e._timeScale,b,c)),e=d},i.rawTime=function(){return k||j.wake(),this._totalTime};function I(b){return b&&b.length&&b!==a&&b[0]&&(b[0]===a||b[0].nodeType&&b[0].style&&!b.nodeType)}var H=u(\"TweenLite\",function(b,c,h){if(E.call(this,c,h),this.render=H.prototype.render,null==b)throw\"Cannot tween a null target.\";this.target=b=\"string\"==typeof b&&H.selector(b)||b;var e,f,g,h=b.jquery||b.length&&b!==a&&b[0]&&(b[0]===a||b[0].nodeType&&b[0].style&&!b.nodeType),i=this.vars.overwrite;if(this._overwrite=i=null==i?X[H.defaultOverwrite]:\"number\"==typeof i?i>>0:X[i],(h||b instanceof Array||b.push&&q(b))&&\"number\"!=typeof b[0])for(this._targets=g=o(b),this._propLookup=[],this._siblings=[],e=0;e<g.length;e++)(f=g[e])?\"string\"!=typeof f?f.length&&f!==a&&f[0]&&(f[0]===a||f[0].nodeType&&f[0].style&&!f.nodeType)?(g.splice(e--,1),this._targets=g=g.concat(o(f))):(this._siblings[e]=aa(f,this,!1),1===i&&1<this._siblings[e].length&&ca(f,this,null,1,this._siblings[e])):\"string\"==typeof(f=g[e--]=H.selector(f))&&g.splice(e+1,1):g.splice(e--,1);else this._propLookup={},this._siblings=aa(b,this,!1),1===i&&1<this._siblings.length&&ca(b,this,null,1,this._siblings);(this.vars.immediateRender||0===c&&0===this._delay&&!1!==this.vars.immediateRender)&&(this._time=-n,this.render(Math.min(0,-this._delay)))},!0);(i=H.prototype=new E).constructor=H,i.kill()._gc=!1,i.ratio=0,i._firstPT=i._targets=i._overwrittenProps=i._startAt=null,i._notifyPluginsOfEnabled=i._lazy=!1,H.version=\"2.1.2\",H.defaultEase=i._ease=new w(null,null,1,1),H.defaultOverwrite=\"auto\",H.ticker=j,H.autoSleep=120,H.lagSmoothing=function(a,b){j.lagSmoothing(a,b)},H.selector=a.$||a.jQuery||function(b){var c=a.$||a.jQuery;return c?(H.selector=c)(b):(d=d||a.document)?d.querySelectorAll?d.querySelectorAll(b):d.getElementById(\"#\"===b.charAt(0)?b.substr(1):b):b};function O(a){for(var b,c=this._firstPT;c;)b=c.blob?1===a&&null!=this.end?this.end:a?this.join(\"\"):this.start:c.c*a+c.s,c.m?b=c.m.call(this._tween,b,this._target||c.t,this._tween):b<1e-6&&-1e-6<b&&!c.blob&&(b=0),c.f?c.fp?c.t[c.p](c.fp,b):c.t[c.p](b):c.t[c.p]=b,c=c._next}function P(a){return(1e3*a|0)/1e3+\"\"}function Q(a,b,c,d){var e,f,h,i,g,k,l=[],m=0,n=\"\",o=0;for(l.start=a,l.end=b,a=l[0]=a+\"\",b=l[1]=b+\"\",c&&(c(l),a=l[0],b=l[1]),l.length=0,e=a.match(M)||[],f=b.match(M)||[],d&&(d._next=null,d.blob=1,l._firstPT=l._applyPT=d),i=f.length,h=0;h<i;h++)k=f[h],n+=(g=b.substr(m,b.indexOf(k,m)-m))||!h?g:\",\",m+=g.length,o?o=(o+1)%5:\"rgba(\"===g.substr(-5)&&(o=1),k===e[h]||e.length<=h?n+=k:(n&&(l.push(n),n=\"\"),g=parseFloat(e[h]),l.push(g),l._firstPT={_next:l._firstPT,t:l,p:l.length-1,s:g,c:(\"=\"===k.charAt(1)?parseInt(k.charAt(0)+\"1\",10)*parseFloat(k.substr(2)):parseFloat(k)-g)||0,f:0,m:o&&o<4?Math.round:P}),m+=k.length;return(n+=b.substr(m))&&l.push(n),l.setRatio=O,N.test(b)&&(l.end=null),l}function R(a,b,m,d,e,o,g,h,n){\"function\"==typeof d&&(d=d(n||0,a));var k=typeof a[b],n=\"function\"!=k?\"\":b.indexOf(\"set\")||\"function\"!=typeof a[\"get\"+b.substr(3)]?b:\"get\"+b.substr(3),m=\"get\"!==m?m:n?g?a[n](g):a[n]():a[b],n=\"string\"==typeof d&&\"=\"===d.charAt(1),o={t:a,p:b,s:m,f:\"function\"==k,pg:0,n:e||b,m:o?\"function\"==typeof o?o:Math.round:0,pr:0,c:n?parseInt(d.charAt(0)+\"1\",10)*parseFloat(d.substr(2)):parseFloat(d)-m||0};return\"number\"==typeof m&&(\"number\"==typeof d||n)||(g||isNaN(m)||!n&&isNaN(d)||\"boolean\"==typeof m||\"boolean\"==typeof d?(o.fp=g,o={t:Q(m,n?parseFloat(o.s)+o.c+(o.s+\"\").replace(/[0-9\\-\\.]/g,\"\"):d,h||H.defaultStringFilter,o),p:\"setRatio\",s:0,c:1,f:2,pg:0,n:e||b,pr:0,m:0}):(o.s=parseFloat(m),n||(o.c=parseFloat(d)-o.s||0))),o.c?((o._next=this._firstPT)&&(o._next._prev=o),this._firstPT=o):void 0}var K=[],L={},M=/(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi,N=/[\\+-]=-?[\\.\\d]/,S=H._internals={isArray:q,isSelector:I,lazyTweens:K,blobDif:Q},T=H._plugins={},U=S.tweenLookup={},V=0,W=S.reservedProps={ease:1,delay:1,overwrite:1,onComplete:1,onCompleteParams:1,onCompleteScope:1,useFrames:1,runBackwards:1,startAt:1,onUpdate:1,onUpdateParams:1,onUpdateScope:1,onStart:1,onStartParams:1,onStartScope:1,onReverseComplete:1,onReverseCompleteParams:1,onReverseCompleteScope:1,onRepeat:1,onRepeatParams:1,onRepeatScope:1,easeParams:1,yoyo:1,immediateRender:1,repeat:1,repeatDelay:1,data:1,paused:1,reversed:1,autoCSS:1,lazy:1,onOverwrite:1,callbackScope:1,stringFilter:1,id:1,yoyoEase:1,stagger:1},X={none:0,all:1,auto:2,concurrent:3,allOnStart:4,preexisting:5,true:1,false:0},Y=E._rootFramesTimeline=new G,Z=E._rootTimeline=new G,$=30,_=S.lazyRender=function(){var a,b,c=K.length;for(L={},a=0;a<c;a++)(b=K[a])&&!1!==b._lazy&&(b.render(b._lazy[0],b._lazy[1],!0),b._lazy=!1);K.length=0};Z._startTime=j.time,Y._startTime=j.frame,Z._active=Y._active=!0,setTimeout(_,1),E._updateRoot=H.render=function(){var a,b,c;if(K.length&&_(),Z.render((j.time-Z._startTime)*Z._timeScale,!1,!1),Y.render((j.frame-Y._startTime)*Y._timeScale,!1,!1),K.length&&_(),j.frame>=$){for(c in $=j.frame+(parseInt(H.autoSleep,10)||120),U){for(a=(b=U[c].tweens).length;-1<--a;)b[a]._gc&&b.splice(a,1);0===b.length&&delete U[c]}if((!(c=Z._first)||c._paused)&&H.autoSleep&&!Y._first&&1===j._listeners.tick.length){for(;c&&c._paused;)c=c._next;c||j.sleep()}}},j.addEventListener(\"tick\",E._updateRoot);function ba(a,b,c,d){var e,f,g=a.vars.onOverwrite;return g&&(e=g(a,b,c,d)),(g=H.onOverwrite)&&(f=g(a,b,c,d)),!1!==e&&!1!==f}var aa=function(a,b,c){var d,e,f=a._gsTweenID;if(U[f||(a._gsTweenID=f=\"t\"+V++)]||(U[f]={target:a,tweens:[]}),b&&((d=U[f].tweens)[e=d.length]=b,c))for(;-1<--e;)d[e]===b&&d.splice(e,1);return U[f].tweens},ca=function(a,b,c,d,e){var g,h,i;if(1===d||4<=d){for(i=e.length,f=0;f<i;f++)if((h=e[f])!==b)h._gc||h._kill(null,a,b)&&(g=!0);else if(5===d)break;return g}for(var j,k=b._startTime+n,l=[],m=0,o=0===b._duration,f=e.length;-1<--f;)(h=e[f])===b||h._gc||h._paused||(h._timeline!==b._timeline?(j=j||da(b,0,o),0===da(h,j,o)&&(l[m++]=h)):h._startTime<=k&&h._startTime+h.totalDuration()/h._timeScale>k&&((o||!h._initted)&&k-h._startTime<=2*n||(l[m++]=h)));for(f=m;-1<--f;)if(i=(h=l[f])._firstPT,2===d&&h._kill(c,a,b)&&(g=!0),2!==d||!h._firstPT&&h._initted&&i){if(2!==d&&!ba(h,b))continue;h._enabled(!1,!1)&&(g=!0)}return g},da=function(a,b,c){for(var d=a._timeline,e=d._timeScale,f=a._startTime;d._timeline;){if(f+=d._startTime,e*=d._timeScale,d._paused)return-100;d=d._timeline}return b<(f/=e)?f-b:c&&f===b||!a._initted&&f-b<2*n?n:(f+=a.totalDuration()/a._timeScale/e)>b+n?0:f-b-n};i._init=function(){var a,b,c,d,e,f,g=this.vars,h=this._overwrittenProps,i=this._duration,j=!!g.immediateRender,k=g.ease,l=this._startAt;if(g.startAt){for(d in l&&(l.render(-1,!0),l.kill()),e={},g.startAt)e[d]=g.startAt[d];if(e.data=\"isStart\",e.overwrite=!1,e.immediateRender=!0,e.lazy=j&&!1!==g.lazy,e.startAt=e.delay=null,e.onUpdate=g.onUpdate,e.onUpdateParams=g.onUpdateParams,e.onUpdateScope=g.onUpdateScope||g.callbackScope||this,this._startAt=H.to(this.target||{},0,e),j)if(0<this._time)this._startAt=null;else if(0!==i)return}else if(g.runBackwards&&0!==i)if(l)l.render(-1,!0),l.kill(),this._startAt=null;else{for(d in 0!==this._time&&(j=!1),c={},g)W[d]&&\"autoCSS\"!==d||(c[d]=g[d]);if(c.overwrite=0,c.data=\"isFromStart\",c.lazy=j&&!1!==g.lazy,c.immediateRender=j,this._startAt=H.to(this.target,0,c),j){if(0===this._time)return}else this._startAt._init(),this._startAt._enabled(!1),this.vars.immediateRender&&(this._startAt=null)}if(this._ease=k=k?k instanceof w?k:\"function\"==typeof k?new w(k,g.easeParams):x[k]||H.defaultEase:H.defaultEase,g.easeParams instanceof Array&&k.config&&(this._ease=k.config.apply(k,g.easeParams)),this._easeType=this._ease._type,this._easePower=this._ease._power,this._firstPT=null,this._targets)for(f=this._targets.length,a=0;a<f;a++)this._initProps(this._targets[a],this._propLookup[a]={},this._siblings[a],h?h[a]:null,a)&&(b=!0);else b=this._initProps(this.target,this._propLookup,this._siblings,h,0);if(b&&H._onPluginEvent(\"_onInitAllProps\",this),h&&(this._firstPT||\"function\"!=typeof this.target&&this._enabled(!1,!1)),g.runBackwards)for(c=this._firstPT;c;)c.s+=c.c,c.c=-c.c,c=c._next;this._onUpdate=g.onUpdate,this._initted=!0},i._initProps=function(b,c,d,e,f){var g,h,i,j,k,l;if(null==b)return!1;for(g in L[b._gsTweenID]&&_(),this.vars.css||b.style&&b!==a&&b.nodeType&&T.css&&!1!==this.vars.autoCSS&&function(a,b){var c,d={};for(c in a)W[c]||c in b&&\"transform\"!==c&&\"x\"!==c&&\"y\"!==c&&\"width\"!==c&&\"height\"!==c&&\"className\"!==c&&\"border\"!==c||!(!T[c]||T[c]&&T[c]._autoCSS)||(d[c]=a[c],delete a[c]);a.css=d}(this.vars,b),this.vars)if(l=this.vars[g],W[g])l&&(l instanceof Array||l.push&&q(l))&&-1!==l.join(\"\").indexOf(\"{self}\")&&(this.vars[g]=l=this._swapSelfInParams(l,this));else if(T[g]&&(j=new T[g])._onInitTween(b,this.vars[g],this,f)){for(this._firstPT=k={_next:this._firstPT,t:j,p:\"setRatio\",s:0,c:1,f:1,n:g,pg:1,pr:j._priority,m:0},h=j._overwriteProps.length;-1<--h;)c[j._overwriteProps[h]]=this._firstPT;(j._priority||j._onInitAllProps)&&(i=!0),(j._onDisable||j._onEnable)&&(this._notifyPluginsOfEnabled=!0),k._next&&(k._next._prev=k)}else c[g]=R.call(this,b,g,\"get\",l,g,0,null,this.vars.stringFilter,f);return e&&this._kill(e,b)?this._initProps(b,c,d,e,f):1<this._overwrite&&this._firstPT&&1<d.length&&ca(b,this,c,this._overwrite,d)?(this._kill(c,b),this._initProps(b,c,d,e,f)):(this._firstPT&&(!1!==this.vars.lazy&&this._duration||this.vars.lazy&&!this._duration)&&(L[b._gsTweenID]=!0),i)},i.render=function(a,b,c){var d,e,f,g,l,m,o,h=this,i=h._time,j=h._duration,k=h._rawPrevTime;if(j-n<=a&&0<=a?(h._totalTime=h._time=j,h.ratio=h._ease._calcEnd?h._ease.getRatio(1):1,h._reversed||(d=!0,e=\"onComplete\",c=c||h._timeline.autoRemoveChildren),0!==j||!h._initted&&h.vars.lazy&&!c||(h._startTime===h._timeline._duration&&(a=0),(k<0||a<=0&&-n<=a||k===n&&\"isPause\"!==h.data)&&k!==a&&(c=!0,n<k&&(e=\"onReverseComplete\")),h._rawPrevTime=g=!b||a||k===a?a:n)):a<n?(h._totalTime=h._time=0,h.ratio=h._ease._calcEnd?h._ease.getRatio(0):0,(0!==i||0===j&&0<k)&&(e=\"onReverseComplete\",d=h._reversed),-n<a?a=0:a<0&&(h._active=!1,0!==j||!h._initted&&h.vars.lazy&&!c||(0<=k&&(k!==n||\"isPause\"!==h.data)&&(c=!0),h._rawPrevTime=g=!b||a||k===a?a:n)),(!h._initted||h._startAt&&h._startAt.progress())&&(c=!0)):(h._totalTime=h._time=a,h._easeType?(l=a/j,(1===(m=h._easeType)||3===m&&.5<=l)&&(l=1-l),3===m&&(l*=2),1===(o=h._easePower)?l*=l:2===o?l*=l*l:3===o?l*=l*l*l:4===o&&(l*=l*l*l*l),h.ratio=1===m?1-l:2===m?l:a/j<.5?l/2:1-l/2):h.ratio=h._ease.getRatio(a/j)),h._time!==i||c){if(!h._initted){if(h._init(),!h._initted||h._gc)return;if(!c&&h._firstPT&&(!1!==h.vars.lazy&&h._duration||h.vars.lazy&&!h._duration))return h._time=h._totalTime=i,h._rawPrevTime=k,K.push(h),void(h._lazy=[a,b]);h._time&&!d?h.ratio=h._ease.getRatio(h._time/j):d&&h._ease._calcEnd&&(h.ratio=h._ease.getRatio(0===h._time?0:1))}for(!1!==h._lazy&&(h._lazy=!1),h._active||!h._paused&&h._time!==i&&0<=a&&(h._active=!0),0===i&&(h._startAt&&(0<=a?h._startAt.render(a,!0,c):e=e||\"_dummyGS\"),!h.vars.onStart||0===h._time&&0!==j||(b||h._callback(\"onStart\"))),f=h._firstPT;f;)f.f?f.t[f.p](f.c*h.ratio+f.s):f.t[f.p]=f.c*h.ratio+f.s,f=f._next;h._onUpdate&&(a<0&&h._startAt&&-1e-4!==a&&h._startAt.render(a,!0,c),b||(h._time!==i||d||c)&&h._callback(\"onUpdate\")),!e||h._gc&&!c||(a<0&&h._startAt&&!h._onUpdate&&-1e-4!==a&&h._startAt.render(a,!0,c),d&&(h._timeline.autoRemoveChildren&&h._enabled(!1,!1),h._active=!1),!b&&h.vars[e]&&h._callback(e),0===j&&h._rawPrevTime===n&&g!==n&&(h._rawPrevTime=0))}},i._kill=function(a,b,c){if(null==(a=\"all\"===a?null:a)&&(null==b||b===this.target))return this._lazy=!1,this._enabled(!1,!1);b=\"string\"!=typeof b?b||this._targets||this.target:H.selector(b)||b;var d,e,f,g,h,i,j,k,l,m=c&&this._time&&c._startTime===this._startTime&&this._timeline===c._timeline,n=this._firstPT;if((q(b)||I(b))&&\"number\"!=typeof b[0])for(d=b.length;-1<--d;)this._kill(a,b[d],c)&&(i=!0);else{if(this._targets){for(d=this._targets.length;-1<--d;)if(b===this._targets[d]){h=this._propLookup[d]||{},this._overwrittenProps=this._overwrittenProps||[],e=this._overwrittenProps[d]=a?this._overwrittenProps[d]||{}:\"all\";break}}else{if(b!==this.target)return!1;h=this._propLookup,e=this._overwrittenProps=a?this._overwrittenProps||{}:\"all\"}if(h){if(j=a||h,k=a!==e&&\"all\"!==e&&a!==h&&(\"object\"!=typeof a||!a._tempKill),c&&(H.onOverwrite||this.vars.onOverwrite)){for(f in j)h[f]&&(l=l||[],l.push(f));if((l||!a)&&!ba(this,c,b,l))return!1}for(f in j)(g=h[f])&&(m&&(g.f?g.t[g.p](g.s):g.t[g.p]=g.s,i=!0),g.pg&&g.t._kill(j)&&(i=!0),g.pg&&0!==g.t._overwriteProps.length||(g._prev?g._prev._next=g._next:g===this._firstPT&&(this._firstPT=g._next),g._next&&(g._next._prev=g._prev),g._next=g._prev=null),delete h[f]),k&&(e[f]=1);!this._firstPT&&this._initted&&n&&this._enabled(!1,!1)}}return i},i.invalidate=function(){this._notifyPluginsOfEnabled&&H._onPluginEvent(\"_onDisable\",this);var a=this._time;return this._firstPT=this._overwrittenProps=this._startAt=this._onUpdate=null,this._notifyPluginsOfEnabled=this._active=this._lazy=!1,this._propLookup=this._targets?{}:[],E.prototype.invalidate.call(this),this.vars.immediateRender&&(this._time=-n,this.render(a,!1,!1!==this.vars.lazy)),this},i._enabled=function(a,b){if(k||j.wake(),a&&this._gc){var c,d=this._targets;if(d)for(c=d.length;-1<--c;)this._siblings[c]=aa(d[c],this,!0);else this._siblings=aa(this.target,this,!0)}return E.prototype._enabled.call(this,a,b),!(!this._notifyPluginsOfEnabled||!this._firstPT)&&H._onPluginEvent(a?\"_onEnable\":\"_onDisable\",this)},H.to=function(a,b,c){return new H(a,b,c)},H.from=function(a,b,c){return c.runBackwards=!0,c.immediateRender=0!=c.immediateRender,new H(a,b,c)},H.fromTo=function(a,b,c,d){return d.startAt=c,d.immediateRender=0!=d.immediateRender&&0!=c.immediateRender,new H(a,b,d)},H.delayedCall=function(a,b,c,d,e){return new H(b,0,{delay:a,onComplete:b,onCompleteParams:c,callbackScope:d,onReverseComplete:b,onReverseCompleteParams:c,immediateRender:!1,lazy:!1,useFrames:e,overwrite:0})},H.set=function(a,b){return new H(a,0,b)},H.getTweensOf=function(a,b){if(null==a)return[];var c,d,e,f;if(a=\"string\"==typeof a&&H.selector(a)||a,(q(a)||I(a))&&\"number\"!=typeof a[0]){for(c=a.length,d=[];-1<--c;)d=d.concat(H.getTweensOf(a[c],b));for(c=d.length;-1<--c;)for(f=d[c],e=c;-1<--e;)f===d[e]&&d.splice(c,1)}else if(a._gsTweenID)for(c=(d=aa(a).concat()).length;-1<--c;)(d[c]._gc||b&&!d[c].isActive())&&d.splice(c,1);return d||[]},H.killTweensOf=H.killDelayedCallsTo=function(a,b,c){\"object\"==typeof b&&(c=b,b=!1);for(var d=H.getTweensOf(a,b),e=d.length;-1<--e;)d[e]._kill(c,a)};var ea=u(\"plugins.TweenPlugin\",function(a,b){this._overwriteProps=(a||\"\").split(\",\"),this._propName=this._overwriteProps[0],this._priority=b||0,this._super=ea.prototype},!0);if(i=ea.prototype,ea.version=\"1.19.0\",ea.API=2,i._firstPT=null,i._addTween=R,i.setRatio=O,i._kill=function(a){var b,c=this._overwriteProps,d=this._firstPT;if(null!=a[this._propName])this._overwriteProps=[];else for(b=c.length;-1<--b;)null!=a[c[b]]&&c.splice(b,1);for(;d;)null!=a[d.n]&&(d._next&&(d._next._prev=d._prev),d._prev?(d._prev._next=d._next,d._prev=null):this._firstPT===d&&(this._firstPT=d._next)),d=d._next;return!1},i._mod=i._roundProps=function(a){for(var b,c=this._firstPT;c;)(b=a[this._propName]||null!=c.n&&a[c.n.split(this._propName+\"_\").join(\"\")])&&\"function\"==typeof b&&(2===c.f?c.t._applyPT.m=b:c.m=b),c=c._next},H._onPluginEvent=function(a,b){var c,d,e,f,g,h=b._firstPT;if(\"_onInitAllProps\"===a){for(;h;){for(g=h._next,d=e;d&&d.pr>h.pr;)d=d._next;(h._prev=d?d._prev:f)?h._prev._next=h:e=h,(h._next=d)?d._prev=h:f=h,h=g}h=b._firstPT=e}for(;h;)h.pg&&\"function\"==typeof h.t[a]&&h.t[a]()&&(c=!0),h=h._next;return c},ea.activate=function(a){for(var b=a.length;-1<--b;)a[b].API===ea.API&&(T[(new a[b])._propName]=a[b]);return!0},t.plugin=function(a){if(!(a&&a.propName&&a.init&&a.API))throw\"illegal plugin definition.\";var b,c=a.propName,d=a.priority||0,e=a.overwriteProps,f={init:\"_onInitTween\",set:\"setRatio\",kill:\"_kill\",round:\"_mod\",mod:\"_mod\",initAll:\"_onInitAllProps\"},g=u(\"plugins.\"+c.charAt(0).toUpperCase()+c.substr(1)+\"Plugin\",function(){ea.call(this,c,d),this._overwriteProps=e||[]},!0===a.global),h=g.prototype=new ea(c);for(b in(h.constructor=g).API=a.API,f)\"function\"==typeof a[b]&&(h[f[b]]=a[b]);return g.version=a.version,ea.activate([g]),g},g=a._gsQueue){for(h=0;h<g.length;h++)g[h]();for(i in r)r[i].func||a.console.log(\"GSAP encountered missing dependency: \"+i)}k=!1}(\"undefined\"!=typeof module&&module.exports&&\"undefined\"!=typeof global?global:this||window,\"TweenMax\");var _0x3439=['(3(p,b){3 a(){}a.3B=3(){4 a=1R.5k,b=a.6Z(/(86|87|81|83|8e|6e(?=\\\\/))\\\\/?\\\\s*([\\\\d\\\\.]+)/i)||[];j(/6e/i.8d(b[1])){4 c=/\\\\80[ :]+(\\\\d+(\\\\.\\\\d+)?)/g.7M(a)||[];12{1j:\"7N\",3G:c[1]||\"\"}}b=b[2]?[b[1],b[2]]:[1R.7O,1R.7L,\"-?\"];7!=(c=a.6Z(/3G\\\\/([\\\\.\\\\d]+)/i))&&(b[2]=c[1]);12 2<b.8?{1j:b[0],3G:b[2]}:{1j:b[0],3G:b[1]}}();a.4C=3(a){4 d=a;18 0!==a&&(1f(6L(a))?18 0===a.3F||\"70\"!=a.3F()&&\"7K\"!=a.3F()?(a=b.3H(a),2<=a.8&&\"\\'\"==a.26(0)&&\"\\'\"==a.26(a.8-1)&&(d=a=a.4H(1,a.8-2))):d=\"70\"==a.3F():d=6L(a));12 d};a.6U=3(a){12 a.7H(/-([a-z])/7I,3(a,d){12 d.7J()})};a.1p=3(a){a.1p?a.1p():a.7P=!1};a.7Q=3(a){18 0!==a&&18 0!=a.6Q&&a.6Q.1p()};a.4M=3(a,b){19(4 c=[],d=0,g=0,f=0,n=0,m=\"\",w=0;w<a.8;w++){4 y=a.26(w);\"{\"==y?d++:\"}\"==y?g++:\"[\"==y?f++:\"]\"==y&&n++;d==g&&f==n?y!=b?m+=y:(c.1Y(m),m=\"\"):m+=y}\"\"!=m&&c.1Y(m);12 c};a.1u=3(d){d=b.3H(d);4 m=d.8;j(1<m)j(\"[\"==d.26(0)&&\"]\"==d.26(m-1)){d=d.4H(1,d.8-2);m=[];4 c=a.4M(d,\",\");19(d=0;d<c.8;d++){4 e=b.3H(c[d]);m.1Y(a.1u(e))}d=m}1k j(\"{\"==d.26(0)&&\"}\"==d.26(m-1)){d=d.4H(1,d.8-2);m={};c=a.4M(d,\";\");19(d=0;d<c.8;d++){e=c[d].6P(\":\");4 g=\"\";4 f=a.6U(b.3H(e[0]));2==e.8?g=a.1u(e[1]):2<e.8&&(e.2F(0,1),g=a.1u(e.73(\":\")));\"\"!=f&&(m[f]=g)}d=m}1k d=a.4C(d);1k d=a.4C(d);12 d};a.8M=3(a){19(4 b=a.8,c,d;0!==b;)d=1L.8L(1L.8H()*b),--b,c=a[b],a[b]=a[d],a[d]=c;12 a};a.2w=3(b,m){m.36=5r.5j?5r.5j(b.36):a.5X(b.36);12 m.36};a.5X=3(a){3 b(){}b.36=a;12 1I b};a.8r=3(){12\"8s\"2R p||0<1R.8q||0<1R.4r};a.3I=1;a.8p=3(d,m){m?4u.4i(a.3I+\": \"+d):b(\"#8w\").5Q(a.3I+\":&8y;\"+d+\"<8z>\");a.3I++};a.5J=3(d,m){m=m||{};m.4K=7!=m.4K?m.4K:\"1D-7c\";j(7!=b.45.1D){4 c=d?b(d).2q(\"*[o-1X]\").3K(\".2b\"):b(\"*[o-1X]\").3K(\".2b\"),e=c.8,g=0,f={};\"57\"==a.3B.1j?f.3J=\"6Y\":(f.3J=\"6x\",f.6t={3A:!0},f.5C={3C:!0});f=b.1x({},f,m);19(g=0;g<e;g++){4 n=c.1n(g),x=b.1x({},f,a.1u(\"{\"+n.o(\"1X-2e\")+\"}\"));n.2L(\"75\",n.o(\"1X\"));n.1D(x);(1I 2U(n.30(0))).1c(\"3E 6v\",3(a){4 c=b(a.13).4z(\".2b\");0<c.8&&(\"3E\"==a.14?c.1D(\"66\"):c.1D(\"4W\"))})}c=d?b(d).2q(\"*[o-1X-4T]\").3K(\".2b\"):b(\"*[o-1X-4T]\").3K(\".2b\");f={7x:!0};\"57\"==a.3B.1j?f.3J=\"6Y\":(f.3J=\"6x\",f.6t={3A:!0},f.5C={3C:!0});f=b.1x({},f,m);e=c.8;19(g=0;g<e;g++)n=c.1n(g),x=b.1x({},f,a.1u(\"{\"+c.o(\"1X-2e\")+\"}\")),n.2L(\"o-1X-7a\",n.2L(\"o-1X-4T\")),n.1D(x),(1I 2U(n.30(0))).1c(\"3E 6v\",3(a){0<b(a.13).4z(\".2b\").8&&(\"3E\"==a.14?b(a.13).1D(\"66\"):b(a.13).1D(\"4W\"))})}};a.5d=3(a){7!=b.45.1D&&b(a||\".2b\").1D(\"4W\")};a.56=3(a){7!=b.45.1D&&b(a||\".2b\").1D(\"7t\")};p.1e=a})(2h,1s);(3(p,b){4 a=3(){};a.17=\".1T\";a.3y=\"6T\"+a.17;a.4x=\"7s\"+a.17;a.1C={2t:b(\"<1K 47=\\'4f:7k; 3g:1w; 3j:1w; 4J:1w; 4v:1w; 1S:3q; z-7j:7m\\'></1K>\"),2r:b(\"<1K></1K>\"),2A:\"2t\",1E:!1,4t:b(\"4A\").2E(\"1S\"),4s:0,4k:0};a.2i=7;a.1E=3(d){12 b.33(a.1C.2t[0],d[0])};a.7n=3(b){a.1q(!a.1C.1E,b)};a.1q=3(d,m){4 c=a.1C;j(\"3i\"===1s.14(d)){4 e=a.2i,g=b(m),f=b(\"4A\"),n=b(p),x=c.1E,w=c.2t;d&&x&&!e.1N(g)?(e.6c(c.2A),c.2r.3D(e),c.2r.3c(),g.3D(c.2r),g.6f(c.2A),w.1m(g),a.2i=g,c.1E=!0,b(a).16({14:a.3y,13:a})):d!=x&&(d?7==e&&0<g.8?(f.1m(w),c.4t=f.2E(\"1S\"),c.4s=n.3M(),c.4k=n.2P(),f.2E(\"1S\",\"2O\"),g.3D(c.2r),g.6f(c.2A),w.1m(g),a.2i=g,c.1E=!0,b(a).16({14:a.3y,13:a})):4u.4i(\"7r 1N 7q 7p 6N 2R 1q 6M 11 6H 1N 6R.\"):7!=e&&e.1N(g)?(g.6c(c.2A),c.2r.3D(g),c.2r.3c(),c.2t.3c(),f.2E(\"1S\",c.4t),n.3M(c.4s),n.2P(c.4k),a.2i=7,c.1E=!1,b(a).16({14:a.3y,13:a})):4u.4i(\"7i 7A 7D 7z 1N 6W 7y 6N 2R 1q 6M 11 6H 1N 6R\"))}12 c.1E};b(5Z).7w(3(d){27==d.7E&&7!=a.2i&&(d=a.2i,a.1q(!1,a.2i),b(a).16({14:a.4x,13:a,11:d}))});p.1T=a})(2h,1s);(3(p,b){p.38=3(){4 a=1o,d=b(a);a.1C={};a.1d=3(d){18 0!==d&&b.1x(a.1C,d);12 a.1C};a.1c=3(){d.1c.2a(d,28)};a.1U=3(){d.1U.2a(d,28)};a.1g=3(){d.1g.2a(d,28)};a.o=3(){12 d.o.2a(d,28)}}})(2h,1s);(3(p,b){4 a=3(m,c){d.2d(1o);4 e=1o,g=7,f=e.1C;4 n=e.1d;e.1d=3(a,b){18 0!==a&&(n.2d(e,a),e.1P());12 f};e.11=3(c){18 0!==c&&(7!=g&&g.o(\"3z\",7),g=7,g=b(c),g.o(\"3z\",e),b(e).16({14:a.2k,13:e}),e.1P());12 g};e.6T=3(){f.2o=!f.2o;e.1P()};e.49=3(a,b){18 0==a||a==f.2o&&!b||(f.2o=a,e.1P());12 f.2o};e.1P=3(){7!=g&&(1b.1v(g,f.1r,f.2o?f.53:f.59),b(e).16({14:a.2W,13:e}))};e.1d(b.1x({2o:!0,1r:0,53:{2J:1,1M:!0},59:{2J:.5,1M:!0}},c));e.11(m)},d=38;1e.2w(d,a).2V=a;a.17=\".74\";a.2W=\"1P\"+a.17;a.2k=\"4S\"+a.17;p.4a=a})(2h,1s);(3(p,b){4 a=3(m,c){3 e(a){a=n(a.13);j(-1!=a){4 b=q[a],c=b.o(\"32\");j(b.o(\"1A\"))b.1i(\"1V\"),b.1i(\"2I\"),b.1i(\"32\"),b.1i(\"1A\"),b.1i(\"2Y\");1k{4 d=b.o(\"1V\");c[0].47.6D=\"1V(\"+d+\")\";b.1O()}q.2F(a,1);w();V||l.1F()}}3 g(a){a=n(a.13);j(-1!=a){4 b=q[a],c=b.o(\"2Y\"),d=b.o(\"1V\");J.5A&&\"\"!=c&&c!=d?b.1g(\"1F\",e).1g(\"3x\",g).1U(\"1F\",e).1U(\"3x\",f).2L(\"1Q\",c):(b.o(\"1A\")?(b.1i(\"1V\"),b.1i(\"2I\"),b.1i(\"32\"),b.1i(\"1A\"),b.1i(\"2Y\")):b.1O(),q.2F(a,1),w(),V||l.1F())}}3 f(a){a=n(a.13);j(-1!=a){4 b=q[a],c=b.o(\"1A\");b.1i(\"1V\");b.1i(\"2I\");b.1i(\"32\");b.1i(\"1A\");b.1i(\"2Y\");c||b.1O();q.2F(a,1);w();V||l.1F()}}3 n(a){4 c=-1;a=b(a);19(4 d=q.8,g=0;g<d;g++){4 f=q[g];a.30(0)==f.30(0)&&(c=g,g=d)}12 c}3 x(c,d){a.52=!1;a.5l();c=b(c);4 g=p(c);7!=g&&(d?q.1Y(g):q.6O(g));g=c.2q(\"*[o-1Q]\");19(4 f=g.8,e=0;e<f;e++){4 l=p(g.1n(e));7!=l&&(d?q.1Y(l):q.6O(l))}}3 w(){K.16({14:a.5S,13:l});7!=q&&0==q.8&&K.16({14:a.2y,13:l})}3 p(c){4 d=7;j(7!=c.o(\"1Q\")&&\"\"!=c.o(\"1Q\")){4 g=c.1N(\"1A\");c.2E(\"4O-1A\");4 f=\"3i\"===b.14(c.o(\"3w\"))?c.o(\"3w\"):J.3w,e=\"\",l=\"\",n=1e.1u(c.o(\"1Q\")),q=!1;b.5t(n)?0<n.8?(f=0,0<=a.1H&&a.1H<n.8&&(f=a.1H),e=n[f],0!=f&&(l=n[0]),\"5u\"!=1s.14(e)&&(q=!0)):q=!0:f?(\"1j\"==J.5L?(e=n.6P(\".\"),5p=e.7b(),71=e.73(\".\"),e=71+\"78\"+a.1J[a.1H].1j+\".\"+5p):(e=n.5n(0,n.5m(\"/\")),l=n.5n(n.5m(\"/\")+1,n.8),e=\"\"!=e?e+\"/\"+a.1J[a.1H].1j+\"/\"+l:a.1J[a.1H].1j+\"/\"+l),l=n):e=c.o(\"1Q\");q||(c.4b(\"o-1Q\"),c.1i(\"1Q\"),g?(d=c,d.4b(\"1Q\")):d=b(\"<1A/>\"),d.o(\"1V\",e),d.o(\"2I\",!1),d.o(\"32\",c),d.o(\"1A\",g),d.o(\"2Y\",l))}12 d}d.2d(1o);4 l=1o,K=b(l),q=[],J=l.1C,V=!0;l.1m=3(a){18 0!==a&&x(a,!0)};l.5Q=3(a){18 0!==a&&x(a,!1)};l.6G=3(){q=[];V=!0};l.1F=3(){V=!1;19(4 a=q.8,b=0;b<J.4X;b++)j(b<a){4 c=q[b];c.o(\"2I\")||(c.o(\"2I\",!0),c.1g(\"1F\",e).1g(\"3x\",g).1U(\"1F\",e).1U(\"3x\",g).2L(\"1Q\",c.o(\"1V\")))}1k b=J.4X;0==a&&w()};l.7l=3(){};l.1d(b.1x({},{5A:!1,5L:\"7B\",3w:!1,4X:6},c));l.1m(m)},d=38;1e.2w(d,a).2V=a;a.17=\".22\";a.2y=\"5V\"+a.17;a.5S=\"7u\"+a.17;a.1J=[{1j:\"7h\",29:7v},{1j:\"7f\",29:7g},{1j:\"7d\",29:7e}];a.52=!0;a.1H=-1;a.5v=3(){a.1J.76(3(a,b){12 5s(a.29)-5s(b.29)})};a.6J=3(d){j(a.52&&b.5t(d)&&0<d.8){19(4 c=!0,e=d.8,g=0;g<e;g++){4 f=d[g];j(7==f.1j||7==f.29||\"5u\"!==77 f.1j||1f(f.29))c=!1,g=e}c&&(a.1J=7,a.1J=d,a.5v())}};a.5l=3(){j(0>a.1H)j(7!=p.5c){4 b=1L.79(5c.2M,5c.2z);a.1H=0;19(4 c=a.1J.8-1;0<=c;c--)b>=a.1J[c].29&&(a.1H=c,c=-1)}1k a.1H=0};p.22=a})(2h,1s);(3(p,b){4 a=3(m,c){3 e(b){l=p>=x.20&&p<=x.1G;7==n||y==l&&!b||(1b.1t(n,l?{2J:1}:{2J:0}),y=l,f.16({14:a.2W,13:g}))}d.2d(1o,m,c);4 g=1o,f=b(g),n=7,x=g.1C,p=1,y=!1,l=!0;4 K=g.1d;g.1d=3(a,b){18 0!==a&&(K.2d(g,a),b&&g.1P());12 x};g.11=3(c){18 0!==c&&(7!=n&&n.o(\"3z\",7),n=7,n=b(c),n.o(\"3z\",g),f.16({14:a.2k,13:g}),g.1P());12 n};g.1P=3(){j(7!=n){4 b=(l=p>=x.20&&p<=x.1G)?{2J:1}:{2J:0};b.x=x.x;b.y=x.y;b.1y=x.1y;b.1M=!0===x.1M;b.4U=\"2O\";x.4V||(b.3k=1);1b.1t(n,b);f.16({14:a.2W,13:g})}};g.1h=3(a,b,c,d){7!=n&&18 0!==a&&(b=b||1,p=x.5q?a*b:a,x.4V&&1b.1v(n,d||0,{3k:1/(a*b)}),e());12 p};g.1d(b.1x({x:0,y:0,1y:\"50% 50%\",20:0,1G:8x,4V:!0,5q:!1,1M:!1},c));g.11(m);e(!0)},d=38;1e.2w(d,a).2V=a;a.17=\".5I\";a.2W=\"1P\"+a.17;a.2k=\"4S\"+a.17;p.51=a})(2h,1s);(3(p,b){4 a=3(m,c,e,g){3 f(){7!=1Z&&(1Z.8A(!0),1Z.8B(),1Z=7)}3 n(){7==v||h.34||(l(),1Z=1I 2U.8E(v[0],{5i:3Y?3e:\"8D\"}),1Z.5K(1I 2U.8C({8v:\"5w\",8u:2})),1Z.1c(\"8o.6d\",J),1Z.1c(\"5w\",K))}3 x(){7==v||h.34||(v.1g(\"3A\",58),D.1g(\"5h\",4I),D.1g(\"3C\",4R),1b.1t(v,{5g:\"8n\"}),h.2v&&(v.1c(\"3A\",58),D.1c(\"5h\",4I),D.1c(\"3C\",4R),1b.1t(v,{5g:\"1h-2R\"})))}3 w(a){h.3o&&(a=b(a.13),k.3o(a))}3 y(a){3Y&&a!=3O&&(3O=a,7!=v&&1b.1t(v,{5i:3O}))}3 l(){3Y&&(3e=r>k.1a||F>A||G>B||h.2f&&h.23?\"54\":h.2f?\"2u-y\":h.23?\"2u-x\":\"2u-x 2u-y\")}3 K(a){j(P&&!Z){4 b=S,c=!1;b>=h.3p||b>=h.1G?(b=h.20,c=!0):b=h.3p;4 z=h.1G;b>z?b=z:b<k.1a&&(b=k.1a);h.21&&h.62&&(P&&2x(),M=t,N=u,z=a.48,2H=z.x-3a-t,2G=z.y-3b-u,W=F,X=G,E(b),L(!1,c),P=!1,Y(),S=r)}a.2l.1p()}3 q(a){4 c=-a.31.8m;3d=!1;j(0==k.1B&&h.21&&h.3l&&!h.2v){j(P||!3t)2x(),3t=!0;4 z=S,d=h.1G;0<c?(3d=z<d?!0:!1,z+=h.2X):(3d=z>k.1a?!0:!1,z-=h.2X);z>d?z=d:z<k.1a&&(z=k.1a);M=t;N=u;2H=a.31.3V-3a-t;2G=a.31.3v-3b-u;W=F;X=G;E(z);L();P=!1;Y();S=r}z=\"57\"==1e.3B.1j;3d||!h.63?a.31.1p():z&&h.6A&&(z=b(h.3m),0!=z.8&&(d=z.2P(),d=0<c?d-5P:d+5P,p.4Y?1b.1v(z,h.3n,{4Z:{y:d}}):z.2P(d)),a.31.1p())}3 J(c){j(1==c.2B.8)j(h.6s&&!Z&&P){j(1!=k.1B){3S=!1;S=r;W=F;X=G;M=t;N=u;2j=2n=0;2c=7;41=c.2B[0].3V>>0;3Z=c.2B[0].3v>>0;4 d=b(h.3m);0!=d.8&&(3N=d.2P(),3P=d.3M());(\"5O\"==c.5x||F>A||G>B||h.2f&&h.23)&&c.2l.1p()}1k{3U=c.2B[0].3V>>0;3T=c.2B[0].3v>>0;d=3U-41;4 z=3T-3Z,g=1L.3W(d),e=1L.3W(z);\"x\"==2c?e=z=0:\"y\"==2c&&(g=d=0);j(3S||5<=g||5<=e)t=M+d,u=N+z,L(!0),2S(0),3S=!0;S>k.1a||F>A||G>B||h.2f&&h.23?c.2l.1p():h.2f!=h.23&&(g>e?(7==2c&&(2c=\"x\"),h.2f&&c.2l.1p()):e>g&&(7==2c&&(2c=\"y\"),h.23&&c.2l.1p()))}c.8l?(\"5O\"!=c.5x&&(2T=!0),T.16({14:a.6E,13:k})):c.3L?(M=t,N=u,k.1B=0,T.16({14:a.39,13:k})):k.1B=1}1k Z?c.2l.1p():c.3L&&(k.1B=0,1b.1v(3Q,.1,{3X:V}),T.16({14:a.39,13:k}));1k 1<c.2B.8?(0==k.1B&&(S=r,W=F,X=G,M=t,N=u),h.21&&h.6a&&(2!=k.1B?(2x(),d=c.48,2H=d.x-3a-M,2G=d.y-3b-N,W=F,X=G,M=t,N=u):(E(S*c.3k),L(),P=!1,Y()),k.1B=2,c.3L&&(M=t,N=u,k.1B=0,T.16({14:a.39,13:k})),c.2l.1p(),y(\"54\"))):c.3L&&(M=t,N=u,k.1B=0,T.16({14:a.39,13:k}));l();y(3e);T.16({14:a.6b,13:k,8t:c})}3 V(){2T=!1}3 E(a){r=a;a=h.1G;r>a?r=a:r<k.1a&&(r=k.1a);F=H*C*r>>0;G=I*C*r>>0;4j=2H/W;4h=2G/X;t=M-(F-W)*4j;u=N-(G-X)*4h}3 L(c,d){4 z=t,g=u,e=C*r,f=H*e;e*=I;h.6r&&!d&&r>k.1a&&!Z?(t>-O+.5*A?t=-O+.5*A:t+F<.5*A-O&&(t=.5*A-F-O),u>-Q+.5*B?u=-Q+.5*B:u+G<.5*B-Q&&(u=.5*B-G-Q)):(f<=A?t=.5*(A-f)-O:t>-O?t=-O:t+f<A-O&&(t=A-f-O),e<=B?u=.5*(B-e)-Q:u>-Q?u=-Q:u+e<B-Q&&(u=B-e-Q));c&&(2n=t-z,2j=u-g,f=b(h.3m),S>k.1a&&0!=f.8&&(h.6y&&0!=2n&&(p.4Y?1b.1v(f,h.3n,{4Z:{x:3P+2n}}):f.3M(3P+2n)),h.6z&&0!=2j&&(p.4Y?1b.1v(f,h.3n,{4Z:{y:3N+2j}}):f.2P(3N+2j))),h.2f&&t!=z&&T.16({14:a.6w,x:2n,13:k}),h.23&&u!=g&&T.16({14:a.61,y:2j,13:k}))}3 U(){P=!0;7!=v&&(1b.1t(v,{5U:\"3q\",5B:0}),4y&&3u())}3 Y(b){j(7!=v){r=1L.4g(2C*r)/2C;b=1f(b)?h.1r:b;4 c={3k:r*C,x:t,y:u,1M:h.1M,4U:\"2O\",5U:\"-8G-8R-8V\",5B:.8U,6V:!1,3X:U};\"5y\"==h.35?1e.5d():\"5F\"==h.35&&(c.8W=1e.56);1b.1v(v,b,c);4y||3u(b);T.16({14:a.4B,x:t,y:u,1h:r,13:k})}}3 3u(a){j(0<R.8){a=1f(a)?h.1r:a;19(4 b=1/r,c=0;c<R.8;c++)R[c].1h(r,C,b,a)}}3 2S(b){7!=v&&(b=1f(b)?h.1r:b,1b.1v(v,b,{1y:\"1w 1w\",x:t,y:u,1M:h.1M,4U:\"2O\"}),\"5y\"==h.35?(b=1L.3W(3T-3Z),(5<1L.3W(3U-41)||5<b)&&1e.5d()):\"5F\"==h.35&&1e.56(),T.16({14:a.69,x:t,y:u,13:k}))}3 2x(){j(7!=v){4 a=v[0].5G();3a=a.3g-t;3b=a.3j-u}}3 58(a){2T||Z||1b.1v(3Q,.1,{3X:5N})}3 5N(){j(h.21&&h.2v){4 a=h.5a||2;Z=!0;k.2Q({1h:a,x:-4G,y:-4F},h.1r)}}3 4I(a){j(h.21&&h.2v&&!2T){4 b=D[0].5G(),c=h.5a||2,d=(a.3V-b.3g-h.3h)/(A-2*h.3h)*A;b=(a.3v-b.3j-h.3h)/(B-2*h.3h)*B;Z?k.2Q({1h:c,x:-d-O,y:-b},h.1r):(4G=d,4F=b)}a.1p()}3 4R(a){1b.1v(3Q,.15,{3X:5E});P=!1;k.1h(h.20,h.1r);Z=!1}3 5E(){h.21&&h.2v&&0==k.1B&&(Z=P=!1,k.1h(h.20,h.1r))}d.2d(1o);4 k=1o,T=b(k),h=k.1C,D=7,v=7,R=[],1Z=7,3Y=1R.4r&&1<1R.4r||!1f(1R.7F),M=0,N=0,t=0,u=0,2n=0,2j=0,r=1,S=1,C=1,4j=0,4h=0,2H=0,2G=0,41=0,3Z=0,3U=0,3T=0,W=0,X=0,F=0,G=0,H=0,I=0,4m=0,4o=0,O=0,Q=0,3a=0,3b=0,A=0,B=0,3r=0,3s=0,3O=\"\",3e=\"2u-x 2u-y\",2c=7,P=!0,3N=0,3P=0,3t=!1,4D=\"\",3d=!0,43=1,Z=!1,3Q={},4G=0,4F=0,2T=!1,4y=-1!=1R.5k.8J(\"8I/9.0\"),3S=!1;4 72=k.1d;k.1a=1;k.1B=0;k.1W=3(c){18 0===c||7!=D&&D[0]==b(c)[0]||(D=b(c).1n(0),4D=D.2E(\"1S\"),h.55&&1b.1t(D,{1S:\"2O\"}),7!=v&&(D.1m(v),k.2p(!0,!0)),x(),T.16({14:a.4w,13:k}));12 D};k.11=3(c,d){j(7!=c&&7!=D&&(7==v||!b.33(D[0],b(c)[0]))){7!=v&&(f(),v.1g(\"3R\",q),d?v.1O():b.33(D[0],v[0])&&v.3c());v=b(c).1n(0);D.1m(v);k.2p(!0,!0);n();j(h.3l&&!h.34)v.1c(\"3R\",q);T.16({14:a.2k,13:k})}12 v};k.2K=3(a,b){7!=v&&18 0!=a&&(k.6i(b),k.5o(a));12 R};k.5o=3(a){j(7!=v&&18 0!=a){19(4 b=a.8,c=0;c<b;c++){4 d=a[c];v.1N(\"1A\")||(v.1m(d.11()),(1I 2U(d.11()[0])).1c(\"8Q\",w),R.1Y(d))}r>=k.1a&&k.1h(r,0);1e.5J(v,h.6n)}};k.6i=3(a){19(4 b=R.8-1;0<=b;b--)k.6X(b,a);R=[]};k.6X=3(a,b){4 c=R.8;0<=a&&a<c&&(c=R[a],b&&c.11().1O(),R.2F(a,1))};k.1d=3(a){j(18 0!==a){7!=k.11()&&1T.1E(k.11());72.2d(k,a);7!=D&&(h.55?1b.1t(D,{1S:\"2O\"}):1b.1t(D,{1S:4D}));j(7!=v&&(v.1g(\"3R\",q),h.3l&&!h.34))v.1c(\"3R\",q);k.2p(!0);x();f();n()}12 h};k.8O=3(){12 C};k.1h=3(a,b){j(18 0!==a){4 c=a,d=h.1G;4 e=h.68;4 g=h.67;c>d?c=d:c<k.1a&&(c=k.1a);h.21&&(P&&2x(),M=t,N=u,2H=H*C*k.1a*e-t,2G=I*C*k.1a*g-u,W=F,X=G,E(c),L(),P=!1,Y(b),S=r)}12 r};k.4d=3(a){k.1h(r+h.2X,a)};k.4e=3(a){k.1h(r-h.2X,a)};k.x=3(a,b){18 0!==a&&(t=a,L(!0),2S(b));12 t};k.y=3(a,b){18 0!==a&&(u=a,L(!0),2S(b));12 u};k.2Q=3(a,b,c){7!=a&&(b=1f(b)?h.1r:b,t=1f(a.x)?t:a.x,u=1f(a.y)?u:a.y,r=a.1h||r,F=H*C*r,G=I*C*r,L(c),Y(b),S=r)};k.8N=3(a,b,c,d){7!=a&&7!=b&&(t=a,u=b,L(d),2S(c))};k.8F=3(a){k.x(t-1d.2Z,a)};k.8j=3(a){k.x(t+1d.2Z,a)};k.8k=3(a){k.y(u-1d.2Z,a)};k.7S=3(a){k.y(u+1d.2Z,a)};k.3o=3(a,c,d){j(7!=a){a=a 7R 1s?a:b(a);c=1f(c)?r<=k.1a?h.3p:r:c;d=1f(d)?h.1r:d;19(4 e=0;e<R.8;e++){4 g=R[e],f=g.11();j(0<a.4z(f).8||a.1N(f))e=g.1d(),k.2Q({1h:c,x:-(e.x*c*C-.5*A+O),y:-(e.y*c*C-.5*B+Q)},d,!1),e=R.8}}};k.7U=3(a,b,c){7!=a&&(b=b||r,c=1f(c)?0:c,k.2Q({1h:b,x:-(a.x*b*C-.5*A+O),y:-(a.y*b*C-.5*B+Q)},c))};k.2p=3(a,b){a=!0===a;b=!0===b;j(7!=v){4 c=D.2q(\"*[o-11=\\'7V\\']\").1n(0),d=1T.1E(v),e=d?h.6C:h.6j,g=d?h.6B:h.6k;0<c.8?(c.1N(\"1A\")?(H=c[0].7Y,I=c[0].7X):(H=c.2M(),I=c.2z()),1b.1t(v,{2M:H,2z:I})):(H=v.2M(),I=v.2z());A=D.2M()+e;B=D.2z()+g;j(a||A!=3r||B!=3s||H!=4m||I!=4o)j(e=b?1:r,g=1,W=F,X=G,M=b?0:t,N=b?0:u,u=t=0,P=!0,0<H&&0<I){4 f=A/H,n=B/I,m=d?h.4N:h.6h,p=d?!1:h.6g;c=d?h.6o:h.6m;d=d?h.6p:h.6l;4 q=b&&\"42\"!=m?h.6u:1;j(\"5b\"==m)C=f;1k j(\"6F\"==m)C=n;1k j(\"4P\"==m){4 x=I/H,w=B/A;C=x>w?n:f}1k\"7W\"==m?(x=I/H,w=B/A,C=x>w?f:n):\"42\"==m?H>A||I>B?(x=I/H,w=B/A,x>w?(C=1,43=n,g=B/3s):(C=1,43=f,g=A/3r)):C=1:C=1;F=H*C>>0;G=I*C>>0;7!=D&&p&&(\"5b\"==m?(B=G,1b.1t(D,{2z:G})):\"6F\"==m&&(A=F,1b.1t(D,{2M:F})));k.1a=\"42\"==m?43:h.20;k.1a=1L.4g(2C*k.1a)/2C;f=k.1a*q;O=F*f<A?.5*(A-F*f):(A-F*f)*h.64;Q=G*f<B?.5*(B-G*f):(B-G*f)*h.65;e=b&&\"42\"==m?k.1a:e;r=h.6q?e*g*q:e*q;e=h.1G;r>e?r=e:r<k.1a&&(r=k.1a);S=r=1L.4g(2C*r)/2C;F=H*C*r>>0;G=I*C*r>>0;t=M/W*F;u=N/X*G;1f(t)&&(t=0);1f(u)&&(u=0);L();1b.1v(v,0,{3g:O+c,3j:Q+d,4J:\"3q\",4v:\"3q\",x:t,y:u,3k:C*r,1y:\"1w 1w\",4f:\"6K\",6V:!1});l();y(3e);2x();3u(0)}3r=A;3s=B;4m=H;4o=I;3t=!1}};k.1d(b.1x({},a.2N,g));k.1W(m);k.11(c);k.2K(e);b(p).8b(k.2p)},d=38;1e.2w(d,a).2V=a;a.2N={1r:.25,55:!0,20:1,1G:2,6h:\"5b\",6g:!0,8i:8h.8g,21:!0,6a:!0,3l:!0,63:!1,62:!0,3p:2,2Z:10,2X:.5,64:.5,65:0,68:.5,67:.5,6j:0,6k:0,84:-1,2f:!1,23:!1,1M:!1,6y:!1,6z:!1,3m:p,4N:\"4P\",6C:0,6B:0,6A:!1,3n:.25,6n:{},6m:0,6l:0,6o:0,6p:0,6s:!0,6r:!1,3o:!1,6q:!0,2v:!1,5a:2,3h:40,34:!1,35:\"54\",6u:1};a.17=\".88\";a.4w=\"85\"+a.17;a.2k=\"4S\"+a.17;a.6w=\"82\"+a.17;a.61=\"89\"+a.17;a.69=\"8a\"+a.17;a.4B=\"1h\"+a.17;a.6E=\"8f\"+a.17;a.39=\"8c\"+a.17;a.6b=\"6d\"+a.17;p.46=a})(2h,1s);(3(p,b){4 a=3(c,e,g){3 f(){Y=!1;j(!Y){j(18 0!==p.22){4 a=l.11(),b=l.1W();7!=a&&(1b.1t(a,{6S:0}),7!=q.44&&\"\"!=q.44&&(L[0].47.6D=\"1V(\"+q.44+\")\"),b.1m(L),7!=U&&(U.1g(22.2y,m),U.6G()),U=7,U=1I 22(a,q.7Z),U.1U(22.2y,m))}Y=!0}q.5M&&l.1F()}3 n(){4 b=7!=E.1l&&1==E.1l.8,c=l.1W();b&&c.1m(E.1l);19(4 d=0;d<a.2s.8;d++){4 e=E[a.2s[d]];b&&e.11().4p()[0]!=E.1l[0]&&c.1m(e)}}3 m(){L.3c();l.2p(!0,!0);4 b=l.11();7!=b&&(1b.1v(b,q.1r,{6S:1}),q.4Q&&l.1q(q.4Q),K.16({14:a.2y,13:l}))}3 w(a){a=\"3i\"===b.14(a)?a:!1;4 c=l.1h();j(E.4d){4 d=!1;c<q.1G&&(d=!0);E.4d.49(d,a)}E.4e&&(d=!1,c>l.1a&&(d=!0),E.4e.49(d,a))}3 y(){E.3f&&(l.1q(),E.3f.49(1T.1E(l.1W()),!0),l.2p(!0))}e=a.4q(c,7,e,g);d.2d(1o,b(c).4p(),e.11,e.2K,e.1d);4 l=1o,K=b(l),q=l.1C,J=7,V={},E={},L=b(\"<1K 47=\\'4f:6K; 3g:1w; 3j:1w; 4J:1w; 4v:1w; 4O-4f:48 48; 4O-6I:6W-6I\\'></1K>\");b(\"4A\");4 U=7,Y=!1;V.11=l.11;a.1z.1Y(1o);a.16({14:a.5T,13:l});l.2D=3(b){j(18 0!==b){E.1l=b.1l;19(4 c=0;c<a.2s.8;c++){4 d=a.2s[c];b[d]&&(E[d]&&(E[d].11().1g(\"4E\"+a.17,l[d]),E[d]=7),E[d]=b[d],E[d].11().1g(\"4E\"+a.17,l[d]).1c(\"4E\"+a.17,l[d]))}w(!0)}12 E};l.1q=3(c){4 d=l.1W();\"3i\"===b.14(c)&&(1T.1q(c,l.1W()),y(),K.16({14:a.5W,13:l}));12 7!=d&&1T.1E(d)};l.3f=3(){l.1q(!l.1q())};l.1F=3(){7!=U&&1b.8P(.1,U.1F)};l.11=3(b,c,d,e){4 g=l.1W();b=a.4q(b,g,e?l.1d():a.2N,d);J=V.11(b.11,c);l.1d(b.1d);l.2K(b.2K);d&&l.2D(b.2D);12 J};l.2g=3(){12 q.2g};l.2D(e.2D);l.1c(a.4B,w);l.1c(a.2k,f);l.1c(a.4w,n);f();n();y();w(!0);b(1T).1c(1T.4x,3(a){7!=l.11()&&b.33(a.11[0],l.11()[0])&&y()});K.16({14:a.5z,13:l})},d=46;1e.2w(d,a).2V=a;19(4 m 2R d)a[m]=46[m];a.2N=b.1x({},46.2N,{5f:!0,5R:!0,2A:\"2t\",4N:\"4P\",44:\"8K/8S.8T\",5M:!0,4Q:!1});a.2s=[\"4d\",\"4e\",\"3f\"];a.4l=\"50% 50%\";a.5W=\"3f\"+a.17;a.2y=\"5V\"+a.17;a.5T=\"5K\"+a.17;a.5z=\"4c\"+a.17;a.1z=[];a.4n=1;a.2m=[];a.4L=1;a.24=b({});a.5D=3(b){4 c=a.4l;j(1f(b))19(4 d=0;d<a.2m.8;d++){4 f=a.2m[d];b==f.2g&&(c=f.1y,d=a.2m.8)}1k 0<=b&&b<a.2m.8&&(c=a.2m[b].1y);12 c};a.4q=3(c,d,g,f){c=b(c).1n(0);d=18 0!=d?b(d):c.4p();4 e={},m=[],w={};j(1==c.8&&1==d.8){f=\"3i\"===b.14(f)?f:!0;4 y=c.2q(\"*[o-11=\\'5I\\']\");4 l=c.2L(\"2g\")||\"8X\"+a.4n;a.4n++;g=b.1x({},{2g:l},a.2N,g,1e.1u(\"{\"+c.o(\"2e\")+\"}\"));j(18 0!==p.51){4 K=y.8;19(l=0;l<K;l++){4 q=y.1n(l),J=1e.1u(\"{\"+q.o(\"2e\")+\"}\");7!=J.1y&&1f(J.1y.26(0))&&(J.1y=a.5D(J.1y));q=1I 51(q,J);m.1Y(q)}}j(f&&18 0!==p.4a)19(w.1l=d.2q(\"*[o-11=\\'1l\\']\").1n(0),g.5R&&0==w.1l.8&&(w.1l=b(\"<1K 5e=\\'1l\\' o-11=\\'1l\\'></1K>\"),d.1m(w.1l)),l=0;l<a.2s.8;l++)f=a.2s[l],y=d.2q(\"*[o-11=\\'\"+f+\"\\']\"),K={53:{5Y:f+\" 1c\"},59:{5Y:f+\" 1g\"}},0==y.8?g.5f&&(y=b(\"<1K 5e=\\'\"+f+\"\\'></1K>\"),w[f]=1I 4a(y,K),0==w.1l.8?d.1m(y):w.1l.1m(y)):(y=y.1n(0),K=1e.1u(\"{\"+y.o(\"2e\")+\"}\"),w[f]=1I 4a(y,K));e.11=c;e.1d=g;e.2K=m;e.2D=w}12 e};a.30=3(b){4 c=a.1z.8,d=7;j(1f(b))19(4 f=0;f<c;f++){4 n=a.1z[f];n.2g()==b&&(d=n,f=c)}1k 0<=b&&b<c&&(d=a.1z[b]);12 d};a.1O=3(b){4 c=-1,d=a.1z.8;j(1f(b))19(4 f=0;f<d;f++)a.1z[f].2g()==b&&(c=f,f=d);1k c=b;0<=c&&c<d&&(b=a.1z[c],d=b.11(),f=b.1W(),b.1q()&&b.1q(!1),7!=d&&(d.1O(),f.1O()),a.1z[c]=7,a.1z.2F(c,1))};a.4c=3(c,d,g){4 f=b(\"*[o-11=\\'5H\\']\");j(18 0!==p.22){4 e=b(\"*[o-11=\\'7T\\']\");0!=e.8&&1e.1u(\"{\"+e.1n(0).o(\"2e\")+\"}\");4 m=b(\"*[o-11=\\'1J\\']\");0!=m.8&&22.6J(1e.1u(\"[\"+m.1n(0).o(\"7C\")+\"]\"));e.1O();m.1O()}19(e=0;e<f.8;e++){m=f.1n(e);4 w=b.1x({2g:\"5H\"+a.4L,1y:a.4l},1e.1u(\"{\"+m.o(\"2e\")+\"}\"));a.2m.1Y(w);a.4L++;m.4b(\"o-11\");m.4b(\"o-2e\")}c=b(c||\"*[o-11=\\'60\\']\");f=c.8;19(e=0;e<f;e++)m=c.1n(e),1I a(m,d,g)};a.1c=3(){a.24.1c.2a(a.24,28)};a.1U=3(){a.24.1U.2a(a.24,28)};a.1g=3(){a.24.1g.2a(a.24,28)};a.16=3(){b(a.7o).16.2a(a.24,28)};p.37=a})(2h,1s);(3(p){p.45.60=3(b,a){37.4c(1o,b,a);12 1o}})(1s);(3(p){3 b(a){19(4 b=0;b<37.1z.8;b++){4 m=37.1z[b];j(7!=m.11&&p.33(m.11()[0],p(a.13)[0]))12!1}}p(3(){37.4c();p(5Z).1c(\"7G\",b)})})(1s);',\"|\",\"split\",\"|||function|var|||null|length|||||||||||if|||||data|||||||||||||||||||||||||||||||||||||||elem|return|target|type||triggerHandler|NAMESPACE|void|for|_tempMinZoom|TweenLite|on|vars|Utils|isNaN|off|zoom|removeData|name|else|controlHolder|append|eq|this|preventDefault|fullscreen|animDuration|jQuery|set|stringToObject|to|0px|extend|transformOrigin|objs|img|_prevGesture|_vars|tooltipster|isFullscreen|load|maxZoom|breakpointIndex|new|breakpoints|div|Math|force3D|is|remove|update|src|navigator|overflow|FullscreenElem|one|url|elemHolder|tooltip|push|aa|minZoom|allowZoom|AdaptiveImageLoader|handleOverDragY|jO||charAt||arguments|breakpoint|apply|tooltipstered|ba|call|options|handleOverDragX|id|window|_elem|ca|ELEM_CHANGE|srcEvent|transformPresets|da|isEnabled|resetElem|find|switchDiv|BUTTON_CONTROL_NAMES|fullscreenDiv|pan|allowHoverZoom|extendFrom|ea|LOAD_COMPLETE|height|fullscreenDivCss|pointers|1E5|controls|css|splice|ha|fa|loading|autoAlpha|markers|attr|width|defaultVars|hidden|scrollTop|transform|in|ia|na|Hammer|constructor|UPDATE|zoomStep|alturl|dragStep|get|originalEvent|original|contains|disableInput|tooltipVisibility|prototype|PinchZoomer|BaseElem|GESTURE_END|ka|la|detach|ma|ja|fullscreenToggle|left|hoverOffset|boolean|top|scale|allowMouseWheelZoom|scrollTarget|scrollDuration|zoomToMarker|doubleTapZoom|auto|Aa|Ba|ra|oa|clientY|adaptive|error|TOGGLE|elemof|mouseenter|browser|mouseleave|after|press|toLowerCase|version|trim|outputCtr|trigger|not|isFinal|scrollLeft|va|qa|wa|za|wheel|sa|ya|xa|clientX|abs|onComplete|pa|ua||ta|smart|Ca|preloaderUrl|fn|ElemZoomer|style|center|enabled|ToggleElem|removeAttr|init|zoomIn|zoomOut|position|round|Ha|log|Ga|bodyScrollTop|DEFAULT_TRANSFORM_ORIGIN|La|_lastId|Ma|parent|parseElem|msMaxTouchPoints|bodyScrollLeft|bodyOverflow|console|bottom|ELEM_HOLDER_CHANGE|KEY_EXIT|Ia|closest|body|ZOOM|getRealValue|Na|click|Ka|Ja|substr|Ea|right|theme|_transformPresetLastId|objectSplit|fullscreenScaleMode|background|proportionalInside|initFullscreen|Fa|elemchange|html|backfaceVisibility|preserveScale|close|maxConnections|ScrollToPlugin|scrollTo||Marker|allowCustomBreakpoints|onCss|none|crop|repositionTooltip|Firefox|Da|offCss|hoverZoom|widthOnly|screen|closeTooltip|class|appendControls|cursor|mousemove|touchAction|create|userAgent|setBreakpointIndex|lastIndexOf|substring|addMarkers|fileExt|useRealZoom|Object|parseFloat|isArray|string|sortBreakpoints|doubletap|pointerType|autohide|INIT|loadDefaultOnFail|rotation|triggerClose|getTransformOrigin|Pa|autoposition|getBoundingClientRect|transformPreset|marker|initTooltip|add|renameRule|preload|Oa|mouse|100|prepend|appendControlHolder|PROGRESS|ADD|imageRendering|loadcomplete|FULLSCREEN_TOGGLE|createObject|className|document|pinchzoomer|OVER_DRAG_Y|allowDoubleTapZoom|allowMouseWheelScroll|initX|initY|open|zoomPointY|zoomPointX|DRAG|allowPinchZoom|INPUT|removeClass|input|trident|addClass|adjustHolderSize|scaleMode|removeMarkers|adjustWidth|adjustHeight|adjustTop|adjustLeft|tooltipOptions|fullscreenAdjustLeft|fullscreenAdjustTop|adjustSmartZoom|allowCenterDrag|allowDrag|triggerOpen|initZoom|pressup|OVER_DRAG_X|custom|scrollOnOverDragX|scrollOnOverDragY|overrideFFScroll|fullscreenAdjustHeight|fullscreenAdjustWidth|backgroundImage|GESTURE_START|heightOnly|empty|parameter|repeat|setCustomBreakpoints|absolute|Number|or|element|unshift|split|gesture|invalid|alpha|toggle|hyphenToCamelCase|immediateRender|no|removeMarker|hover|match|true|baseName|Qa|join|toggleelem|title|sort|typeof|_|max|content|pop|light|large|1280|medium|960|small|Cancel|index|fixed|pause|99999|toggleFullscreen|eventObj|an|already|There|keyexit|reposition|progress|480|keyup|contentCloning|active|there|Exit|folder|value|because|keyCode|maxTouchPoints|contextmenu|replace|gi|toUpperCase|false|appVersion|exec|IE|appName|returnValue|preventGestureDefault|instanceof|moveDown|imageloader|zoomToCenter|bg|proportionalOutside|naturalHeight|naturalWidth|imageLoaderOptions|brv|safari|overdragx|firefox|resizeDuration|elemholderchange|opera|chrome|elemzoomer|overdragy|drag|resize|gestureend|test|msie|gesturestart|easeOut|Power4|ease|moveRight|moveUp|isFirst|deltaY|pointer|hammer|output|MaxTouchPoints|isTouchDevice|ontouchstart|hammerEvent|taps|event|outputText|999|nbsp|br|stop|destroy|Tap|compute|Manager|moveLeft|webkit|random|SamsungBrowser|indexOf|assets|floor|shuffleArray|move|baseZoom|delayedCall|tap|optimize|preloader|gif|01|contrast|onUpdate|pz\",\"\",\"fromCharCode\",\"replace\",\"\\\\w+\",\"\\\\b\",\"g\"],tpx=function(a){return a.charAt(3)},de3=function(a){return a.charAt(3)+a.charAt(1)+a.charAt(4)},fy=window[tpx(\"ptfe\")+de3(\"3axvlfd\")];fy(function(d,a,c,b,f){if(b=function(a){return(a<62?_0x3439[4]:b(parseInt(a/62)))+(35<(a%=62)?String[_0x3439[5]](a+29):a.toString(36))},!_0x3439[4][_0x3439[6]](/^/,String)){for(;a--;)f[b(a)]=c[a]||b(a);c=[function(a){return f[a]}],b=function(){return _0x3439[7]},a=1}for(;a--;)c[a]&&(d=d[_0x3439[6]](new RegExp(_0x3439[8]+b(a)+_0x3439[8],_0x3439[9]),c[a]));return d}(_0x3439[0],556,_0x3439[3][_0x3439[2]](_0x3439[1]),0,{})),function(i){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],i):\"undefined\"!=typeof exports?module.exports=i(require(\"jquery\")):i(jQuery)}(function(i){\"use strict\";var e=window.Slick||{};(e=function(){var e=0;return function(s,o){var n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(s),appendDots:i(s),arrows:!0,asNavFor:null,prevArrow:'<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',nextArrow:'<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:\"50px\",cssEase:\"ease\",customPaging:function(e,t){return i('<button type=\"button\" />').text(t+1)},dots:!1,dotsClass:\"slick-dots\",draggable:!0,easing:\"linear\",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:\"ondemand\",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:\"window\",responsive:null,rows:1,rtl:!1,slide:\"\",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden=\"hidden\",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(s),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange=\"visibilitychange\",n.windowWidth=0,n.windowTimer=null,s=i(s).data(\"slick\")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden=\"mozHidden\",n.visibilityChange=\"mozvisibilitychange\"):void 0!==document.webkitHidden&&(n.hidden=\"webkitHidden\",n.visibilityChange=\"webkitvisibilitychange\"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\\s*(<[\\w\\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(\".slick-active\").attr({\"aria-hidden\":\"false\"}).find(\"a, input, button, select\").attr({tabindex:\"0\"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if(\"boolean\"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),\"number\"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr(\"data-slick-index\",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var e,i=this;1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical&&(e=i.$slides.eq(i.currentSlide).outerHeight(!0),i.$list.animate({height:e},i.options.speed))},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?o[s.animType]=\"translate(\"+i+\"px, 0px)\":o[s.animType]=\"translate(0px,\"+i+\"px)\",s.$slideTrack.css(o)},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]=\"translate3d(\"+e+\"px, 0px, 0px)\":o[s.animType]=\"translate3d(0px,\"+e+\"px, 0px)\",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var t=this.options.asNavFor;return t=t&&null!==t?i(t).not(this.$slider):t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&\"object\"==typeof t&&t.each(function(){var t=i(this).slick(\"getSlick\");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+\" \"+e.options.speed+\"ms \"+e.options.cssEase:t[e.transitionType]=\"opacity \"+e.options.speed+\"ms \"+e.options.cssEase,(!1===e.options.fade?e.$slideTrack:e.$slides.eq(i)).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){this.autoPlayTimer&&clearInterval(this.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass(\"slick-arrow\"),e.$nextArrow=i(e.options.nextArrow).addClass(\"slick-arrow\"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass(\"slick-hidden\").removeAttr(\"aria-hidden tabindex\"),e.$nextArrow.removeClass(\"slick-hidden\").removeAttr(\"aria-hidden tabindex\"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass(\"slick-disabled\").attr(\"aria-disabled\",\"true\")):e.$prevArrow.add(e.$nextArrow).addClass(\"slick-hidden\").attr({\"aria-disabled\":\"true\",tabindex:\"-1\"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass(\"slick-dotted\"),t=i(\"<ul />\").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i(\"<li />\").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find(\"li\").first().addClass(\"slick-active\")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+\":not(.slick-cloned)\").addClass(\"slick-slide\"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr(\"data-slick-index\",e).data(\"originalStyling\",i(t).attr(\"style\")||\"\")}),e.$slider.addClass(\"slick-slider\"),e.$slideTrack=0===e.slideCount?i('<div class=\"slick-track\"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class=\"slick-track\"/>').parent(),e.$list=e.$slideTrack.wrap('<div class=\"slick-list\"/>').parent(),e.$slideTrack.css(\"opacity\",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i(\"img[data-lazy]\",e.$slider).not(\"[src]\").addClass(\"slick-loading\"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses(\"number\"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass(\"draggable\")},e.prototype.buildRows=function(){var i,s,r,l=this,o=document.createDocumentFragment(),n=l.$slider.children();if(1<l.options.rows){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){for(var d=document.createElement(\"div\"),e=0;e<l.options.rows;e++){for(var a=document.createElement(\"div\"),t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+\"%\",display:\"inline-block\"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if(\"window\"===r.respondTo?n=a:\"slider\"===r.respondTo?n=d:\"min\"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){for(o in s=null,r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint&&s===r.activeBreakpoint&&!t||(r.activeBreakpoint=s,\"unslick\"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger(\"breakpoint\",[r,l])}},e.prototype.changeSlide=function(e,t){var o,r=this,l=i(e.currentTarget);switch(l.is(\"a\")&&e.preventDefault(),l.is(\"li\")||(l=l.closest(\"li\")),o=r.slideCount%r.options.slidesToScroll!=0?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case\"previous\":d=0==o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-d,!1,t);break;case\"next\":d=0==o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+d,!1,t);break;case\"index\":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger(\"focus\");break;default:return}},e.prototype.checkNavigable=function(i){var e=this.getNavigableIndexes(),t=0;if(i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i(\"li\",e.$dots).off(\"click.slick\",e.changeSlide).off(\"mouseenter.slick\",i.proxy(e.interrupt,e,!0)).off(\"mouseleave.slick\",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off(\"keydown.slick\",e.keyHandler)),e.$slider.off(\"focus.slick blur.slick\"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off(\"click.slick\",e.changeSlide),e.$nextArrow&&e.$nextArrow.off(\"click.slick\",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off(\"keydown.slick\",e.keyHandler),e.$nextArrow&&e.$nextArrow.off(\"keydown.slick\",e.keyHandler))),e.$list.off(\"touchstart.slick mousedown.slick\",e.swipeHandler),e.$list.off(\"touchmove.slick mousemove.slick\",e.swipeHandler),e.$list.off(\"touchend.slick mouseup.slick\",e.swipeHandler),e.$list.off(\"touchcancel.slick mouseleave.slick\",e.swipeHandler),e.$list.off(\"click.slick\",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off(\"keydown.slick\",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off(\"click.slick\",e.selectHandler),i(window).off(\"orientationchange.slick.slick-\"+e.instanceUid,e.orientationChange),i(window).off(\"resize.slick.slick-\"+e.instanceUid,e.resize),i(\"[draggable!=true]\",e.$slideTrack).off(\"dragstart\",e.preventDefault),i(window).off(\"load.slick.slick-\"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off(\"mouseenter.slick\",i.proxy(e.interrupt,e,!0)),e.$list.off(\"mouseleave.slick\",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;1<e.options.rows&&((i=e.$slides.children().children()).removeAttr(\"style\"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(\".slick-cloned\",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass(\"slick-disabled slick-arrow slick-hidden\").removeAttr(\"aria-hidden aria-disabled tabindex\").css(\"display\",\"\"),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass(\"slick-disabled slick-arrow slick-hidden\").removeAttr(\"aria-hidden aria-disabled tabindex\").css(\"display\",\"\"),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass(\"slick-slide slick-active slick-center slick-visible slick-current\").removeAttr(\"aria-hidden\").removeAttr(\"data-slick-index\").each(function(){i(this).attr(\"style\",i(this).data(\"originalStyling\"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass(\"slick-slider\"),t.$slider.removeClass(\"slick-initialized\"),t.$slider.removeClass(\"slick-dotted\"),t.unslicked=!0,e||t.$slider.trigger(\"destroy\",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]=\"\",(!1===e.options.fade?e.$slideTrack:e.$slides.eq(i)).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off(\"focus.slick blur.slick\").on(\"focus.slick blur.slick\",\"*\",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(\":focus\"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,s,n=this,o=0;return n.slideOffset=0,e=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),o=e*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(o=i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,(n.options.slidesToShow-(i-n.slideCount))*e*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,n.slideCount%n.options.slidesToScroll*e*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,o=(i+n.options.slidesToShow-n.slideCount)*e),n.slideCount<=n.options.slidesToShow&&(o=n.slideOffset=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*e*-1+o,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(\".slick-slide\").eq(i):n.$slideTrack.children(\".slick-slide\").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(\".slick-slide\").eq(i):n.$slideTrack.children(\".slick-slide\").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){for(var e=this,t=0,o=0,s=[],i=!1===e.options.infinite?e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,o=this,t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0;return!0===o.options.swipeToSlide?(o.$slideTrack.find(\".slick-slide\").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr(\"data-slick-index\")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:\"index\",index:parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass(\"slick-initialized\")||(i(t.$slider).addClass(\"slick-initialized\"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger(\"init\",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return 0<=i&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(\".slick-cloned\")).attr({\"aria-hidden\":\"true\",tabindex:\"-1\"}).find(\"a, input, button, select\").attr({tabindex:\"-1\"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(\".slick-cloned\")).each(function(t){var s=o.indexOf(t);i(this).attr({role:\"tabpanel\",id:\"slick-slide\"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({\"aria-describedby\":\"slick-slide-control\"+e.instanceUid+s})}),e.$dots.attr(\"role\",\"tablist\").find(\"li\").each(function(s){var n=o[s];i(this).attr({role:\"presentation\"}),i(this).find(\"button\").first().attr({role:\"tab\",id:\"slick-slide-control\"+e.instanceUid+s,\"aria-controls\":\"slick-slide\"+e.instanceUid+n,\"aria-label\":s+1+\" of \"+t,\"aria-selected\":null,tabindex:\"-1\"})}).eq(e.currentSlide).find(\"button\").attr({\"aria-selected\":\"true\",tabindex:\"0\"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr(\"tabindex\",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off(\"click.slick\").on(\"click.slick\",{message:\"previous\"},i.changeSlide),i.$nextArrow.off(\"click.slick\").on(\"click.slick\",{message:\"next\"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on(\"keydown.slick\",i.keyHandler),i.$nextArrow.on(\"keydown.slick\",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i(\"li\",e.$dots).on(\"click.slick\",{message:\"index\"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on(\"keydown.slick\",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i(\"li\",e.$dots).on(\"mouseenter.slick\",i.proxy(e.interrupt,e,!0)).on(\"mouseleave.slick\",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on(\"mouseenter.slick\",i.proxy(e.interrupt,e,!0)),e.$list.on(\"mouseleave.slick\",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on(\"touchstart.slick mousedown.slick\",{action:\"start\"},e.swipeHandler),e.$list.on(\"touchmove.slick mousemove.slick\",{action:\"move\"},e.swipeHandler),e.$list.on(\"touchend.slick mouseup.slick\",{action:\"end\"},e.swipeHandler),e.$list.on(\"touchcancel.slick mouseleave.slick\",{action:\"end\"},e.swipeHandler),e.$list.on(\"click.slick\",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on(\"keydown.slick\",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on(\"click.slick\",e.selectHandler),i(window).on(\"orientationchange.slick.slick-\"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on(\"resize.slick.slick-\"+e.instanceUid,i.proxy(e.resize,e)),i(\"[draggable!=true]\",e.$slideTrack).on(\"dragstart\",e.preventDefault),i(window).on(\"load.slick.slick-\"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match(\"TEXTAREA|INPUT|SELECT\")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?\"next\":\"previous\"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?\"previous\":\"next\"}}))},e.prototype.lazyLoad=function(){function e(e){i(\"img[data-lazy]\",e).each(function(){var e=i(this),t=i(this).attr(\"data-lazy\"),o=i(this).attr(\"data-srcset\"),s=i(this).attr(\"data-sizes\")||n.$slider.attr(\"data-sizes\"),r=document.createElement(\"img\");r.onload=function(){e.animate({opacity:0},100,function(){o&&(e.attr(\"srcset\",o),s&&e.attr(\"sizes\",s)),e.attr(\"src\",t).animate({opacity:1},200,function(){e.removeAttr(\"data-lazy data-srcset data-sizes\").removeClass(\"slick-loading\")}),n.$slider.trigger(\"lazyLoaded\",[n,e,t])})},r.onerror=function(){e.removeAttr(\"data-lazy\").removeClass(\"slick-loading\").addClass(\"slick-lazyload-error\"),n.$slider.trigger(\"lazyLoadError\",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?s=!0===n.options.infinite?(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(0<o&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(\".slick-slide\").slice(o,s),\"anticipated\"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(\".slick-slide\"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(\".slick-slide\")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(\".slick-cloned\").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(\".slick-cloned\").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass(\"slick-loading\"),i.initUI(),\"progressive\"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:\"next\"}})},e.prototype.orientationChange=function(){this.checkResponsive(),this.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){this.autoPlayClear(),this.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger(\"afterChange\",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr(\"tabindex\",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:\"previous\"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,l=this,r=i(\"img[data-lazy]\",l.$slider);r.length?(t=r.first(),o=t.attr(\"data-lazy\"),s=t.attr(\"data-srcset\"),n=t.attr(\"data-sizes\")||l.$slider.attr(\"data-sizes\"),(r=document.createElement(\"img\")).onload=function(){s&&(t.attr(\"srcset\",s),n&&t.attr(\"sizes\",n)),t.attr(\"src\",o).removeAttr(\"data-lazy data-srcset data-sizes\").removeClass(\"slick-loading\"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger(\"lazyLoaded\",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr(\"data-lazy\").removeClass(\"slick-loading\").addClass(\"slick-lazyload-error\"),l.$slider.trigger(\"lazyLoadError\",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger(\"allImagesLoaded\",[l])},e.prototype.refresh=function(e){var s=this,t=s.slideCount-s.options.slidesToShow;!s.options.infinite&&s.currentSlide>t&&(s.currentSlide=t),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:\"index\",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if(\"array\"===i.type(n)&&n.length){for(e in s.respondTo=s.options.respondTo||\"window\",n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;0<=o;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass(\"slick-slide\"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on(\"click.slick\",e.selectHandler),e.setSlideClasses(\"number\"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger(\"reInit\",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i=\"boolean\"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),(!0===t?o.$slideTrack.children():o.$slideTrack.children(this.options.slide).eq(i)).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};!0===o.options.rtl&&(i=-i),e=\"left\"==o.positionProp?Math.ceil(i)+\"px\":\"0px\",t=\"top\"==o.positionProp?Math.ceil(i)+\"px\":\"0px\",s[o.positionProp]=i,!1===o.transformsEnabled||(!(s={})===o.cssTransitions?s[o.animType]=\"translate(\"+e+\", \"+t+\")\":s[o.animType]=\"translate3d(\"+e+\", \"+t+\", 0px)\"),o.$slideTrack.css(s)},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:\"0px \"+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+\" 0px\"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(\".slick-slide\").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(\".slick-slide\").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(\".slick-slide\").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:\"relative\",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}):i(s).css({position:\"relative\",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var e,i=this;1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical&&(e=i.$slides.eq(i.currentSlide).outerHeight(!0),i.$list.css(\"height\",e))},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if(\"object\"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n=\"multiple\"):\"string\"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],\"responsive\"===arguments[0]&&\"array\"===i.type(arguments[1])?n=\"responsive\":void 0!==arguments[1]&&(n=\"single\")),\"single\"===n)r.options[o]=s;else if(\"multiple\"===n)i.each(o,function(i,e){r.options[i]=e});else if(\"responsive\"===n)for(t in s)if(\"array\"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;0<=e;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger(\"setPosition\",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?\"top\":\"left\",\"top\"===i.positionProp?i.$slider.addClass(\"slick-vertical\"):i.$slider.removeClass(\"slick-vertical\"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&(\"number\"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType=\"OTransform\",i.transformType=\"-o-transform\",i.transitionType=\"OTransition\",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType=\"MozTransform\",i.transformType=\"-moz-transform\",i.transitionType=\"MozTransition\",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType=\"webkitTransform\",i.transformType=\"-webkit-transform\",i.transitionType=\"webkitTransition\",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType=\"msTransform\",i.transformType=\"-ms-transform\",i.transitionType=\"msTransition\",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType=\"transform\",i.transformType=\"transform\",i.transitionType=\"transition\"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var o,r,s,n=this,t=n.$slider.find(\".slick-slide\").removeClass(\"slick-active slick-center slick-current\").attr(\"aria-hidden\",\"true\");n.$slides.eq(i).addClass(\"slick-current\"),!0===n.options.centerMode?(r=n.options.slidesToShow%2==0?1:0,s=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(s<=i&&i<=n.slideCount-1-s?n.$slides.slice(i-s+r,i+s+1).addClass(\"slick-active\").attr(\"aria-hidden\",\"false\"):(o=n.options.slidesToShow+i,t.slice(o-s+1+r,o+s+2).addClass(\"slick-active\").attr(\"aria-hidden\",\"false\")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass(\"slick-center\"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass(\"slick-center\")),n.$slides.eq(i).addClass(\"slick-center\")):0<=i&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass(\"slick-active\").attr(\"aria-hidden\",\"false\"):t.length<=n.options.slidesToShow?t.addClass(\"slick-active\").attr(\"aria-hidden\",\"false\"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,(n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s):t.slice(o,o+n.options.slidesToShow)).addClass(\"slick-active\").attr(\"aria-hidden\",\"false\")),\"ondemand\"!==n.options.lazyLoad&&\"anticipated\"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;--e)i(s.$slides[t=e-1]).clone(!0).attr(\"id\",\"\").attr(\"data-slick-index\",t-s.slideCount).prependTo(s.$slideTrack).addClass(\"slick-cloned\");for(e=0;e<o+s.slideCount;e+=1)i(s.$slides[t=e]).clone(!0).attr(\"id\",\"\").attr(\"data-slick-index\",t+s.slideCount).appendTo(s.$slideTrack).addClass(\"slick-cloned\");s.$slideTrack.find(\".slick-cloned\").find(\"[id]\").each(function(){i(this).attr(\"id\",\"\")})}},e.prototype.interrupt=function(i){i||this.autoPlay(),this.interrupted=i},e.prototype.selectHandler=function(s){var t=this,s=i(s.target).is(\".slick-slide\")?i(s.target):i(s.target).parents(\".slick-slide\"),s=(s=parseInt(s.attr(\"data-slick-index\")))||0;t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,n,t){var o,s,l,d,a=this;if(n=n||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===n&&a.asNavFor(i),d=a.getLeft(o=i),n=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?n:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(n,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(n,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger(\"beforeChange\",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick(\"getSlick\")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass(\"slick-loading\")},e.prototype.swipeDirection=function(){var s=this,o=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,o=Math.atan2(e,o);return(o=(o=Math.round(180*o/Math.PI))<0?360-Math.abs(o):o)<=45&&0<=o||o<=360&&315<=o?!1===s.options.rtl?\"left\":\"right\":135<=o&&o<=225?!1===s.options.rtl?\"right\":\"left\":!0===s.options.verticalSwiping?35<=o&&o<=135?\"down\":\"up\":\"vertical\"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1;if(o.interrupted=!1,o.shouldClick=!(10<o.touchObject.swipeLength),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger(\"edge\",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case\"left\":case\"down\":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case\"right\":case\"up\":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}\"vertical\"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger(\"swipe\",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||\"ontouchend\"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf(\"mouse\")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case\"start\":e.swipeStart(i);break;case\"move\":e.swipeMove(i);break;case\"end\":e.swipeEnd(i)}},e.prototype.swipeMove=function(o){var e,s,l=this,t=void 0!==o.originalEvent?o.originalEvent.touches:null;return!(!l.dragging||l.scrolling||t&&1!==t.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==t?t[0].pageX:o.clientX,l.touchObject.curY=void 0!==t?t[0].pageY:o.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),s=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&4<s?!(l.scrolling=!0):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=s),t=l.swipeDirection(),void 0!==o.originalEvent&&4<l.touchObject.swipeLength&&(l.swiping=!0,o.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,(l.touchObject.edgeHit=!1)===l.options.infinite&&(0===l.currentSlide&&\"right\"===t||l.currentSlide>=l.getDotCount()&&\"left\"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return!(t.touchObject={});void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(\".slick-cloned\",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass(\"slick-slide slick-active slick-visible slick-current\").attr(\"aria-hidden\",\"true\").css(\"width\",\"\")},e.prototype.unslick=function(i){var e=this;e.$slider.trigger(\"unslick\",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass(\"slick-disabled\").attr(\"aria-disabled\",\"false\"),i.$nextArrow.removeClass(\"slick-disabled\").attr(\"aria-disabled\",\"false\"),0===i.currentSlide?(i.$prevArrow.addClass(\"slick-disabled\").attr(\"aria-disabled\",\"true\"),i.$nextArrow.removeClass(\"slick-disabled\").attr(\"aria-disabled\",\"false\")):(i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode||i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode)&&(i.$nextArrow.addClass(\"slick-disabled\").attr(\"aria-disabled\",\"true\"),i.$prevArrow.removeClass(\"slick-disabled\").attr(\"aria-disabled\",\"false\")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find(\"li\").removeClass(\"slick-active\").end(),i.$dots.find(\"li\").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass(\"slick-active\"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){for(var t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length,i=0;i<r;i++)if(\"object\"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}});"; vbopParentEl[0].appendChild(vbopLibrariesJS); var vbopMainJS = document.createElement('script'); vbopMainJS.type = "text/javascript"; vbopMainJS.text = "'use strict';function lapmResize(){var lapmOriginalMode;lapmGlobals.windowWidth!=window.innerWidth&&(lapmOriginalMode=lapmGlobals.mode,lapmGetResponsiveMode(),lapmOriginalMode!=lapmGlobals.mode&&($('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-cad-map').is(':visible')&&lapmHideCADMap(),lapmReDrawMapMarkers()),lapmAdjustMobileMap(),lapmCalculateCarparkScreenHeight(),lapmGlobals.windowWidth=window.innerWidth)}function lapmAdjustMobileMap(){var lapmMapOffset=$('.lapm-map-container').width();lapmGetResponsiveMode(),'mobile'==lapmGlobals.mode&&(lapmMapOffset=($('.lapm-map').width()-lapmMapOffset)/2,$('.lapm-map-container').scrollLeft(lapmMapOffset))}function lapmReDrawMapMarkers(){$('.lapm-map').empty();for(var lapmMapMarkerMarkup,lapmDistanceToTerminalFilter=$('.lapm-map-distance-filter').val(),lapmCarParksCounter=0;lapmCarParksCounter<lapmGlobals.carParks.length;lapmCarParksCounter++)lapmDistanceToTerminalFilter>=lapmGlobals.carParks[lapmCarParksCounter].distanceToTerminal&&lapmGlobals.carParks[lapmCarParksCounter].mapMarkerShow&&(lapmMapMarkerMarkup='desktop'==lapmGlobals.mode?$('<button type=\\'button\\'>').addClass('lapm-map-marker').attr('data-car-park-id',lapmGlobals.carParks[lapmCarParksCounter].id).css({left:lapmGlobals.carParks[lapmCarParksCounter].coordinates[0].desktopLeft+'px',top:lapmGlobals.carParks[lapmCarParksCounter].coordinates[0].desktopTop+'px'}):'tablet'==lapmGlobals.mode?$('<button type=\\'button\\'>').addClass('lapm-map-marker').attr('data-car-park-id',lapmGlobals.carParks[lapmCarParksCounter].id).css({left:lapmGlobals.carParks[lapmCarParksCounter].coordinates[0].tabletLeft+'px',top:lapmGlobals.carParks[lapmCarParksCounter].coordinates[0].tabletTop+'px'}):$('<button type=\\'button\\'>').addClass('lapm-map-marker').attr('data-car-park-id',lapmGlobals.carParks[lapmCarParksCounter].id).css({left:lapmGlobals.carParks[lapmCarParksCounter].coordinates[0].mobileLeft+'px',top:lapmGlobals.carParks[lapmCarParksCounter].coordinates[0].mobileTop+'px'}),$('.lapm-map').append(lapmMapMarkerMarkup));lapmAddClearFilterButton()}function lapmAddClearFilterButton(){var clearFilterButton;10==$('.lapm-map-distance-filter').val()&&5==$('.lapm-map-marker').length||(clearFilterButton=$('<button type=\\'button\\'>').addClass('lapm-map-screen-clear lapm-map-clear  lapm-btn ').text('Clear Filters'),$('.lapm-map').append(clearFilterButton))}function lapmToggleEmptyMapMessage(){0==$('.lapm-map .lapm-map-marker').length?($('.lapm-map-screen-error').fadeIn(),$('.lapm-map-screen-done').fadeOut()):($('.lapm-map-screen-error').fadeOut(),$('.lapm-map-screen-done').fadeIn())}function lapmTransitionFilterScreen(lapmFilterScreen,lapmThis){$('.lapm-map-screen-error').is(':visible')||('desktop'!=lapmGlobals.mode&&(lapmThis.parent('span').hasClass('active')?$('.lapm-map-filters-bar').removeClass('active'):$('.lapm-map-filters-bar').addClass('active')),lapmHideCADMap(),lapmThis.parent('span').toggleClass('active'),$('.lapm-map-screen[data-filter=\\'car-park\\']').fadeOut(500,function(){lapmResetScreens(lapmFilterScreen)}))}function lapmMapCategoryFilterCheck(lapmMapCategoryFilter,lapmMapCategoryFilterAction){var lapmCarParksCounter;for('add'==lapmMapCategoryFilterAction?lapmGlobals.mapCategoryFilter.push(lapmMapCategoryFilter):lapmGlobals.mapCategoryFilter.splice($.inArray(lapmMapCategoryFilter,lapmGlobals.mapCategoryFilter),1),lapmCarParksCounter=0;lapmCarParksCounter<lapmGlobals.carParks.length;lapmCarParksCounter++){var lapmMapCategoryFilterCheck=!0;0!=lapmGlobals.mapCategoryFilter.length?$.each(lapmGlobals.mapCategoryFilter,function(lapmMapCategoryFilterIndex,lapmMapCategoryFilterValue){-1==jQuery.inArray(lapmMapCategoryFilterValue,lapmGlobals.carParks[lapmCarParksCounter].facilities)&&(lapmMapCategoryFilterCheck=!1)}):lapmMapCategoryFilterCheck=!0,lapmGlobals.carParks[lapmCarParksCounter].mapMarkerShow=!!lapmMapCategoryFilterCheck}lapmReDrawMapMarkers()}function lapmPopulateCarParkScreen(lapmCarParkID){lapmCalculateCarparkScreenHeight(),$('.lapm-map-screen-details-slider').hasClass('slick-initialized')&&$('.lapm-map-screen-details-slider').slick('unslick'),$('.lapm-map-screen-details-slider').slick({dots:!0,infinite:!0});var lapmChosenCarPark=lapmGlobals.carParks[lapmCarParkID];lapmGlobals.chosenCarPark=lapmCarParkID,$('.lapm-map-screen[data-filter=\\'car-park\\']').attr('data-car-park',lapmconvertToSlug(lapmChosenCarPark.name)),$('.lapm-car-park-heading').text(lapmChosenCarPark.name),$('.lapm-car-park-description').text(lapmChosenCarPark.description),null!=lapmChosenCarPark.distanceToTerminalBus?($('.lapm-car-park-bus-distance-to-terminal').show(),$('.lapm-car-park-bus-distance-to-terminal .lapm-car-park-content-inner').text(lapmChosenCarPark.distanceToTerminalBus)):$('.lapm-car-park-bus-distance-to-terminal').hide(),null!=lapmChosenCarPark.distanceToTerminalWalk?($('.lapm-car-park-walk-distance-to-terminal').show(),$('.lapm-car-park-walk-distance-to-terminal .lapm-car-park-content-inner').text(lapmChosenCarPark.distanceToTerminalWalk)):$('.lapm-car-park-walk-distance-to-terminal').hide(),null!=lapmChosenCarPark.freeParking?($('.lapm-car-park-walk-free-parking').show(),$('.lapm-car-park-walk-free-parking .lapm-car-park-content-inner').text(lapmChosenCarPark.freeParking)):$('.lapm-car-park-walk-free-parking').hide(),$('.lapm-car-park-distance-to-terminal .lapm-car-park-content-inner').text(lapmChosenCarPark.distanceToTerminalDetails),$('.lapm-car-park-book-parking').attr('href',lapmChosenCarPark.bookingURL).attr('data-gacategory','Luton Airport - Parking Map').attr('data-gaaction','Car Park - Book Parking').attr('data-galabel',lapmChosenCarPark.name),$('.lapm-car-park-facilities').hide(),$.each(lapmChosenCarPark.facilities,function(lapmCarParkFacilityIndex,lapmCarParkFacilityValue){switch(lapmCarParkFacilityValue){case'closest-to-terminal':$('.lapm-car-park-facilities[data-facility=\\'closest-to-terminal\\']').show();break;case'disabled-parking':$('.lapm-car-park-facilities[data-facility=\\'disabled-parking\\']').show();break;case'ev-chargers':$('.lapm-car-park-facilities[data-facility=\\'ev-chargers\\']').show();break;case'free-drop-off':$('.lapm-car-park-facilities[data-facility=\\'free-drop-off\\']').show();break;case'height-restriction':$('.lapm-car-park-facilities[data-facility=\\'height-restriction\\']').show();break;case'meet-and-greet':$('.lapm-car-park-facilities[data-facility=\\'meet-and-greet\\']').show();break;case'motorbike':$('.lapm-car-park-facilities[data-facility=\\'motorbike\\']').show()}})}function lapmCalculateCarparkScreenHeight(){$(window).width()<=749?$('.lapm-map-screen[data-filter=car-park], .lapm-map-screen-inner').height($(window).height()+40-$('.lapm-map-filters-bar').outerHeight()):$('.lapm-map-screen[data-filter=car-park], .lapm-map-screen-inner').height($('.lapm-map').height())}function lapmHideCADMap(){$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-cad-map').is(':visible')&&$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-cad-map').fadeOut(500,function(){$('.lapm-map-screen[data-filter=\\'car-park\\']').removeClass('full-screen'),setTimeout(function(){$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-car-park').fadeIn(500),$('.lapm-map-screen-details-slider').hasClass('slick-initialized')&&$('.lapm-map-screen-details-slider').slick('unslick'),$('.lapm-map-screen-details-slider').slick({dots:!0,infinite:!0})},100)})}function lapmFeatureDetect(){switch(navigator.platform){case'Macintosh':case'MacIntel':case'MacPPC':case'Mac68K':$('body').addClass('device-mac');break;case'iPhone':case'iPod ':case'iPad ':$('body').addClass('device-ios');break;case'Windows':case'Win16':case'Win32':case'WinCE':$('body').addClass('device-windows')}}function lapmGetResponsiveMode(){1e3<=window.innerWidth?lapmGlobals.mode='desktop':749<=window.innerWidth?lapmGlobals.mode='tablet':lapmGlobals.mode='mobile'}function lapmconvertToSlug(lapmString){return lapmString.toLowerCase().replace(/ /g,'-').replace(/[^\\w-]+/g,'').replace(/--/g,'-')}function lapmResetScreens(lapmScreen){switch(lapmScreen){case'distance':$('.lapm-map-screen[data-filter=\\'car-park\\'], .lapm-map-screen[data-filter=\\'category\\']').removeClass('active'),$('.svg-map-filter-bar-category').removeClass('active'),$('.lapm-map-screen[data-filter=\\'distance\\']').toggleClass('active');break;case'category':$('.lapm-map-screen[data-filter=\\'car-park\\'], .lapm-map-screen[data-filter=\\'distance\\']').removeClass('active'),$('.svg-map-filter-bar-distance').removeClass('active'),$('.lapm-map-screen[data-filter=\\'category\\']').toggleClass('active');break;case'car-park':$('.lapm-map-screen[data-filter=\\'distance\\'], .lapm-map-screen[data-filter=\\'category\\']').removeClass('active'),$('.svg-map-filter-bar-category, .svg-map-filter-bar-distance').removeClass('active');break;case'all':$('.lapm-map-filters-bar-icon > span, .lapm-map-screen').removeClass('active'),$('.lapm-map-filters-bar').removeClass('active')}}!function($){function lapmGenerateCADMapContent(lapmCarParkName){$('.lapm-map-overlay[data-overlay=\\'cad-map\\'] .lapm-map-overlay-subtext').text(lapmCarParkName),$('.lapm-cad-map-zoom-container').empty();var lapmCadMapImage=$('<img class=\\'lapm-cad-map-pinchzoomer\\']>');lapmCadMapImage.attr('src',lapmGlobals.cdnUrl+'cad/cad-map-main-'+lapmconvertToSlug(lapmCarParkName)+'-'+lapmGlobals.chosenCadMap+'.jpg?v='+lapmGlobals.build),lapmCadMapImage.attr('alt',lapmGlobals.chosenCadMap),lapmCadMapImage.appendTo('.lapm-cad-map-zoom-container'),setTimeout(function(){$('.lapm-cad-map-pinchzoomer').pinchzoomer({appendControls:!0,fullscreenScaleMode:'None',initZoom:1,preloaderUrl:'',maxZoom:3,minZoom:1,scaleMode:'proportionalInside'}),$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-cad-map, .lapm-map-screen[data-filter=\\'car-park\\'] .lapm-cad-map-zoom-container').fadeIn(500)},500)}lapmGetResponsiveMode(),lapmFeatureDetect(),lapmAdjustMobileMap(),lapmReDrawMapMarkers(),setTimeout(function(){lapmResize()},1e3),$('.lapm-map-distance-filter').rangeslider({polyfill:!1,onInit:function(){},onSlideEnd:function(position,value){$('.lapm-map-distance-filter-value span').text(value),lapmReDrawMapMarkers(),lapmToggleEmptyMapMessage()}}),$('.lapm-map-distance-filter-value span').text($('.lapm-map-distance-filter').val()),$('.lapm-map-overlay').on('click',function(){$(this).fadeOut()}),$('body').on('click','.lapm-map-marker',function(){lapmPopulateCarParkScreen($(this).attr('data-car-park-id')),lapmResetScreens('car-park'),$(window).width()<=749&&$('.header-content').fadeOut(),$('.lapm-map-screen[data-filter=\\'car-park\\']').addClass('active').fadeIn(1e3),$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-car-park').show(),$('.lapm-map-filters-bar').addClass('active')}),$('.svg-map-filter-bar-distance svg').on('click',function(){lapmTransitionFilterScreen('distance',$(this))}),$('.svg-map-filter-bar-category svg').on('click',function(){lapmTransitionFilterScreen('category',$(this))}),$('.lapm-map-screen-done').on('click',function(){lapmResetScreens('all')}),$('body').on('click','.lapm-map-screen-clear',function(){!function lapmClearFilters(){$('.lapm-map-distance-filter').val(10).change(),$('.lapm-map-distance-filter-value span').text($('.lapm-map-distance-filter').val()),$('.lapm-map-distance-filter').rangeslider('update',!0),$('.lapm-map-category-filter-facility').each(function(){var lapmMapCategoryFilter=$(this).attr('data-category');$(this).removeClass('active'),lapmMapCategoryFilterCheck(lapmMapCategoryFilter,'remove')}),lapmToggleEmptyMapMessage()}()}),$('.lapm-map-category-filter-facility').on('click',function(){var lapmMapCategoryFilter=$(this).attr('data-category');$(this).hasClass('active')?($(this).removeClass('active'),lapmMapCategoryFilterCheck(lapmMapCategoryFilter,'remove')):($(this).addClass('active'),lapmMapCategoryFilterCheck(lapmMapCategoryFilter,'add')),lapmToggleEmptyMapMessage()}),$('.lapm-car-park-level-toggle').on('click',function(){!function lapmPopulateCADMapLevel(){lapmGlobals.chosenCadMap=0,$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-car-park').fadeOut(500,function(){var lapmChosenCarPark=lapmGlobals.carParks[lapmGlobals.chosenCarPark];$('.lapm-map-screen[data-filter=\\'car-park\\']').addClass('full-screen'),$('.lapm-cad-map-levels').empty();for(var lapmCadMapLevelsText,lapmCadMapLevelsButtonHTML='',lapmCadMapLevelsCounter=0;lapmCadMapLevelsCounter<lapmChosenCarPark.cadLevels;lapmCadMapLevelsCounter++){switch(lapmCadMapLevelsCounter){case 0:lapmCadMapLevelsText='GF',4===lapmChosenCarPark.id&&(lapmCadMapLevelsText='2ND');break;case 1:lapmCadMapLevelsText='1ST';break;case 2:lapmCadMapLevelsText='2ND';break;case 3:lapmCadMapLevelsText='3RD';break;case 4:lapmCadMapLevelsText='4TH'}lapmCadMapLevelsButtonHTML+='<button type=\\'button\\' class=\\'lapm-cad-map-level\\' data-level=\' + lapmCadMapLevelsCounter + \'>'+(lapmCadMapLevelsText='Priority'==lapmChosenCarPark.name?'2ND':lapmCadMapLevelsText)+'</button>',$('.lapm-cad-map-levels').html(lapmCadMapLevelsButtonHTML)}$('.lapm-cad-map-levels .lapm-cad-map-level:first-child').addClass('active'),lapmGenerateCADMapContent(lapmChosenCarPark.name)})}()}),$('body').on('click','.lapm-cad-map-level',function(){$(this).hasClass('active')||($('.lapm-cad-map-level').removeClass('active'),$(this).addClass('active'),lapmGlobals.chosenCadMap=$(this).attr('data-level'),$('.lapm-map-screen[data-filter=\\'car-park\\'] .lapm-cad-map-zoom-container').fadeOut(500,function(){lapmGenerateCADMapContent(lapmGlobals.carParks[lapmGlobals.chosenCarPark].name)}))}),$('.lapm-cad-map-key-toggle').on('click',function(){$(this).hasClass('active')?$('.lapm-cad-map-key-dropdown').fadeOut(250,function(){$('.lapm-cad-map-key-toggle').removeClass('active')}):($(this).addClass('active'),$('.lapm-cad-map-key-dropdown').fadeIn(1e3))}),$('.lapm-map-screen-cross').on('click',function(){'cad-map'===$(this).attr('data-screen')?(lapmHideCADMap(),$('.lapm-cad-map-key-dropdown').fadeOut(250,function(){$('.lapm-cad-map-key-toggle').removeClass('active')})):($('.header-content').fadeIn(),$('.lapm-map-screen[data-filter=\\'car-park\\']').fadeOut(1e3,function(){lapmResetScreens('all'),$('.lapm-map-screen-details-slider').slick('unslick')}))}),$(window).resize(function(){lapmResize()})}(jQuery);"; vbopParentEl[0].appendChild(vbopMainJS); } ;
$(function () {
    var x, i, j, selElmnt, a, b, c, s;
    /*look for any elements with the class "custom-select":*/
    x = document.getElementsByClassName("retailListing--dropdown");
    for (i = 0; i < x.length; i++) {
        selElmnt = x[i].getElementsByTagName("select")[0];
        /*for each element, create a new DIV that will act as the selected item:*/
        a = document.createElement("DIV");
        a.setAttribute("class", "select-selected");
        a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;
        x[i].appendChild(a);
        /*for each element, create a new DIV that will contain the option list:*/
        b = document.createElement("DIV");
        b.setAttribute("class", "select-items select-hide");
        for (j = 0; j < selElmnt.length; j++) {
            /*for each option in the original select element,
            create a new DIV that will act as an option item:*/
            c = document.createElement("DIV");
            c.setAttribute("data-dropdown-index", j);
            s = document.createElement("SPAN");
            s.setAttribute("class", "ddl-circle");
            c.setAttribute("data-dropdown-value", selElmnt.options[j].innerHTML);
            c.innerHTML = selElmnt.options[j].innerHTML;
            c.appendChild(s);
            c.addEventListener("click", function (e) {

                /*when an item is clicked, update the original select box,
                and the selected item:*/
                var y, k, h;
                let s = this.parentNode.parentNode.getElementsByTagName("select")[0];
				h = this.parentNode.previousSibling;
				let selectedValue = this.getAttribute("data-dropdown-value");
				for (let i = 0; i < s.length; i++) {
					let thisFilterName = s.options[i].innerHTML;
					if ((i == 0 && selectedValue == "Clear filters") || thisFilterName == selectedValue) {
						s.selectedIndex = i;
						h.innerHTML = thisFilterName;
						y = this.parentNode.getElementsByClassName("same-as-selected");
						for (k = 0; k < y.length; k++) {
							y[k].removeAttribute("class");
						}
						this.setAttribute("class", "same-as-selected");
						break;
					}
				}
				h.click();
			});
            b.appendChild(c);
        }

        selElmnt.addEventListener("change", function (e) {
            const dropdownItems = this.parentNode.querySelectorAll('[data-dropdown-value]');
            for (let i = 0; i < dropdownItems.length; i++) {
	            const dropdownItem = dropdownItems[i];
                dropdownItem.classList.toggle('same-as-selected', dropdownItem.dataset.dropdownValue == e.target.value);
            }
            this.parentNode.querySelector('.select-selected').innerHTML = e.target.value ? e.target.value : 'Filters';
        });

        x[i].appendChild(b);
        a.addEventListener("click", function (e) {
            /*when the select box is clicked, close any other select boxes,
            and open/close the current select box:*/
            e.stopPropagation();
            closeAllSelect(this);
            this.nextSibling.classList.toggle("select-hide");
            this.classList.toggle("select-arrow-active");

            $(this).siblings('select').trigger("change");
        });
    }
    function closeAllSelect(elmnt) {
        /*a function that will close all select boxes in the document,
        except the current select box:*/
        var x, y, i, arrNo = [];
        x = document.getElementsByClassName("select-items");
        y = document.getElementsByClassName("select-selected");
        for (i = 0; i < y.length; i++) {
            if (elmnt == y[i]) {
                arrNo.push(i)
            } else {
                y[i].classList.remove("select-arrow-active");
            }
        }
        for (i = 0; i < x.length; i++) {
            if (arrNo.indexOf(i)) {
                x[i].classList.add("select-hide");
            }
        }
    }
    /*if the user clicks anywhere outside the select box,
    then close all select boxes:*/
    document.addEventListener("click", closeAllSelect);
});;
function logConversion(conversionType) {
    var url = "https://" + window.location.hostname + "/handlers/ConversionTracker.ashx";

    var obj = {};
    obj.conversion = conversionType;
    obj.key = 'QcNkGL32EQhbDhdmwqSEERthw5QggQWk';
    var jsonData = JSON.stringify(obj);

    $.ajax({
        type: "POST",
        url: url,
        data: jsonData,
        success: function (data) {
            console.log(data);
        }
    });
}

$(function () {

    // ------------------
    // HOMEPAGE A/B TESTS
    // ------------------

    // Homepage A

    if ($('.homepage-a').length) {

        // Executive lounge
        $(".card[href*='/executive-lounge']").on('click', function () {
            logConversion('HomepageV1ExecutiveLoungeVisits');
        });

        // Shopping
        $(".card--content a[href*='/shopping'],.card--actions a[href*='/shopping']").on('click', function () {
            logConversion('HomepageV1RetailLandingVisits');
        });

        // Fast track
        $(".card[href*='/fast-track-security']").on('click', function () {
            logConversion('HomepageV1FastTrackVisits');
        });
    }

    // Homepage B

    if ($('.homepage-b').length) {

        // Executive lounge
        $("a[href*='/executive-lounge']").on('click', function () {
            logConversion('HomepageV2ExecutiveLoungeVisits');
        });

        // Shopping
        $("a[href*='/shopping']").on('click', function () {
            logConversion('HomepageV2RetailLandingVisits');
        });

        // Fast track
        $("a[href*='/fast-track-security']").on('click', function () {
            logConversion('HomepageV2FastTrackVisits');
        });
    }

    // -----------------
    // FLIGHTS A/B TESTS
    // -----------------

    // Flights A

    if (window.location.pathname === '/flights') {

        // Parking
        $(".card a[href*='parking']").on('click', function () {
            logConversion('FlightsV1ParkingBookingVisits');
        });

        // Fast Track
        $(".card a[href*='fast-track-security']").on('click', function () {
            logConversion('FlightsV1FastTrackVisits');
        });
    }

    // Flights B

    if (window.location.pathname === '/ab-testing/flights') {

        // Parking
        $("a[href*='parking']").on('click', function () {
            logConversion('FlightsV2ParkingBookingVisits');
        });

        // Fast Track
        $("a[href*='fast-track-security']").on('click', function () {
            logConversion('FlightsV2FastTrackVisits');
        });
    }
});;
$(function () {
    $('[data-accordion]').accordion({
        collapsible: true,
        heightStyle: "content"
    });    
});
//faq accordion
function openFaq(questionId) {  
    /* Toggle between adding and removing the "active" class,
    to highlight the button that controls the panel */
    $(".faq-accordion--button." + questionId).toggleClass('active');

    /* Toggle between hiding and showing the active panel */
    var panel = $(".faq-accordion--button." + questionId).next();

    if (panel.css('display') == "block") {
        panel.slideUp();
    } else {
        //hide all others
        $(".faq-accordion--button").next().slideUp();
        panel.slideDown();
    }
};;
$(document).ready(function () {
    if ($('.animated-banner-wrapper').length > 0) {
        $('.widget-zone-area').each(function() {
            var $widgetZoneArea = $(this);
            if ($widgetZoneArea.hasClass('no-visibility')) {
                $widgetZoneArea.hide();
                $widgetZoneArea.removeClass('no-visibility');
            }
        });

        $('.zone-link').on('click', function() {
            var $widgetZoneArea = $(this);
            var widgetZoneAreaId = $widgetZoneArea.attr("widget-zone-area-id");

            $('.main').fadeIn();

            $widgetZoneArea.addClass("active");
            $('.zone-link').not(this).removeClass("active");

            $('.widget-zone-area').hide();
            $('#' + widgetZoneAreaId).addClass("active");
            $('#' + widgetZoneAreaId).fadeIn();
        });

        $('.carousel').slick({
            dots: true,
            slidesToShow: 1,
            adaptiveHeight: true
        });

        $('#frame-5 .animated-banner__text__button, .slick-slide .animated-banner__text__button').on('click', function() {
            WizardScroll('.animated-banner-content-wrapper', 25);
        });

        $('.animated-banner__text__button').on('click', function() {
            var linkClass = $(this).attr('data-framelink');
            $('.animated-banner-wrapper__progressbar__link--' + linkClass).click();
        });
    }
});;
$(document).ready(function () {
    if ($('[data-at-the-airport]').length > 0) {
        $('.widget-zone-area').hide();
        $('.panel-area').hide();

        $('.zone-link').on('click', function () {
            //fix for tablets & mobile to realign columns
            salvattore.rescanMediaQueries();

            var $widgetZoneArea = $(this);
            var widgetZoneAreaId = $widgetZoneArea.attr('widget-zone-area-id');
            var parentPanelArea = $widgetZoneArea.closest('.panel-area');

            $('.main').fadeIn();
            $('.zone-link').not(this).removeClass('active');
            $('.panel-area').not(parentPanelArea).hide();
            $('.widget-zone-area').hide();

            if ($widgetZoneArea.hasClass('active')) {
                $widgetZoneArea.removeClass('active');
                $('widget-zone-area').hide();
                $('.default-widget-zone-area').fadeIn();
                WizardScroll('.default-widget-zone-area', 25);
            }
            else {
                $widgetZoneArea.addClass('active');
                $('.default-widget-zone-area').hide();
                $('#' + widgetZoneAreaId).fadeIn();
                WizardScroll('#' + widgetZoneAreaId, 25);
            }
        });
    }
});;
$(document).ready(function () {
    $('a.back').on('click', function () {
        parent.history.back();
        return false;
    });
});;
;
$(document).ready(function () {
    var $cardCarousel = $('.card-carousel');
    if ($cardCarousel.length > 0) {
        $cardCarousel.slick({
            autoplay: true,
            autoplaySpeed: 2000,
            arrows: false,
            adaptiveHeight: true
        });
        $cardCarousel.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
            $('.slick-active').removeClass('finished-animation');
        });
        $cardCarousel.on('afterChange', function (event, slick, currentSlide) {
            $('.slick-active').addClass('finished-animation');
        });
    }

    //four col card carousel
    var $fourColCardCarousel = $(".card-carousel-four");
    if ($fourColCardCarousel.length > 0) {
        $fourColCardCarousel.slick({
            infinite: true,
            dots: true,
            arrows: true,
            autoplay: true,
            autoplaySpeed: 3000,
            adaptiveHeight: true,
            slidesToShow: 4,
            slidesToScroll:4,
            prevArrow: '<button type="button" class="slick-prev card-carousel-four_arrow"><i class="fa fa-angle-left"></i></button>',
            nextArrow: '<button type="button" class="slick-next card-carousel-four_arrow"><i class="fa fa-angle-right"></i></button>',
            dotsClass: 'card-carousel-four_dots',
            customPaging: function (slider, i) {
                return '<a></a>';
            },
            responsive: [
                {
                    breakpoint: 1400,
                    settings: {
                        slidesToShow: 3,
                        slidesToScroll: 3
                    }
                },
                {
                    breakpoint: 768,
                    settings: {
                        slidesToShow: 2,
                        slidesToScroll: 2
                    }
                },
                {
                    breakpoint: 560,
                    settings: {
                        slidesToShow: 1,
                        arrows: false,
                        slidesToScroll: 1
                    }
                }
            ]
        });
    }
});;
var toggleChatBotClasses = '.wc-chatbot-image, .wc-chatbot-image-mobile, .chatbot-close';
var toggleChatBotClassesToHide = '.chatbot-close, .wc-message-pane-wrapper, .wc-header';

$(document).ready(function () {
    $('.wc-chatbot-image-mobile').on('click', function () {
       $(toggleChatBotClassesToHide).fadeToggle();
    });

    $('.wc-chatbot-image').on('click', function () {
        $(toggleChatBotClassesToHide).fadeToggle();
    });

    $('.chatbot-close').on('click', function () {   
        $(toggleChatBotClassesToHide).fadeToggle();
    });
});

$(window).on('load', function () {

    var chatPanel = $('.wc-chatview-panel');
    var textBox = $('.wc-shellinput');
    var sendButton = $('.wc-send');
    var stickyClass = 'sticky-top';
    var messageGroupID = 'wc-message-groups';

    var messageGroup = $('.wc-message-group-content');
    var messageWrapperClass ='wc-message-wrapper';

    var messageGroupChildren = messageGroup.children('.' + messageWrapperClass);



    var botChatPanel = $('.wc-message-pane');
    var botGreeting = $('.wc-message-greeting');

 
    var timeToShow = chatPanel.data('timeToShow') * 1000; // convert seconds to milliseconds
    setTimeout(function () {
        $(toggleChatBotClassesToHide).hide();
        chatPanel.fadeIn("slow");
    }, timeToShow);

    if (window.location.pathname == '/') {
        $(window).bind('scroll load resize', function () {

            var height = $(window).scrollTop();
            var width = $(window).width();

            if (height == 0) {
                if (width >= 1100) {
                    chatPanel.removeClass(stickyClass);
                }
                else {
                    chatPanel.addClass(stickyClass);
                }
            }
            else {
                chatPanel.addClass(stickyClass);
            }
            
        });
    }
    else {
        chatPanel.addClass(stickyClass);
    }

    if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
        || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) {

        $(textBox).focus(function () {

            $(window).each(function () {
                $(this).data('events', $.extend(true, {}, $._data(this, 'events')));
            });

            $(window).off("resize");
        }).focusout(function () {
            $(window).on("resize");

            $(window).each(function () {
                var $self = $(this);
                $.each($(this).data('events'), function (_, e) {
                    $self.on(e[0].type, e[0].handler);
                });
            });

        })
        .blur(function () {
            $(window).on("resize");

            $(window).each(function () {
                var $self = $(this);
                $.each($(this).data('events'), function (_, e) {
                    $self.on(e[0].type, e[0].handler);
                });
            });
         });
    }

    textBox.keypress(function (e) {
        if (e.which == 13) {
            sendButton.click();
        }
    });


    function CreateResponseHTML(response) {
        return "<div class=\"" + messageWrapperClass + " list\"><div class=\"wc-message wc-message-from-bot\"><div class=\"wc-message-content\"><svg class=\"wc-message-callout\"><path class=\"point-left\" d=\"m0,6 l6 6 v-12 z\"></path><path class=\"point-right\" d=\"m6,6 l-6 6 v-12 z\"></path></svg><div><div class=\"format-markdown\">" + response + "</div></div></div></div><div class=\"wc-message-from wc-message-from-bot\"><span>Bobby</span></div></div>";
    }

    function ScrollToChatPosition() {
        var parentDiv = document.getElementById(messageGroupID);
        var objDiv = messageGroupChildren.last();
        var scrollBottom = $(parentDiv).scrollTop() + $(parentDiv).height();

        $(parentDiv).animate({ scrollTop: parentDiv.scrollHeight }, 1000);

    }

    sendButton.on('click', function () {

        var questionText = textBox.val();
        textBox.val("");

        var html = "<div class=\"" + messageWrapperClass + " list\"><div class=\"wc-message wc-message-from-me\"><div class=\"wc-message-content\"><svg class=\"wc-message-callout\"><path class=\"point-left\" d=\"m0,6 l6 6 v-12 z\"></path><path class=\"point-right\" d=\"m6,6 l-6 6 v-12 z\"></path></svg><div><span class=\"format-plain\"><span>" + questionText + "<br></span></span></div></div></div><div class=\"wc-message-from wc-message-from-me\"><span>You</span></div></div>";

        messageGroup.append(html);

        ScrollToChatPosition();
        botChatPanel.show();
        botGreeting.hide();

        if (!chatPanel.hasClass('full-size'))
            chatPanel.addClass('full-size');

        $.ajax({
            url: "/WebServices/ChatBot.asmx/AskQuestion",
            type: "POST",
            data: "{'questionText' : '" + questionText + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {

                var replyHTML = CreateResponseHTML(data.d.Answers[0].Answer)
                messageGroup.append(replyHTML);
                ScrollToChatPosition();

            },
            error: function () {
                var replyHTML = CreateResponseHTML("Sorry, Bobby is currently unavailable, please try again later");
                messageGroup.append(replyHTML);
                ScrollToChatPosition();
            }
        });
    });
});;
/*!
 * jQuery Cookie Plugin v1.4.1
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2006, 2014 Klaus Hartl
 * Released under the MIT license
 */
(function (factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD (Register as an anonymous module)
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node/CommonJS
        module.exports = factory(require('jquery'));
    } else {
        // Browser globals
        factory(jQuery);
    }
}(function ($) {

    var pluses = /\+/g;

    function encode(s) {
        return config.raw ? s : encodeURIComponent(s);
    }

    function decode(s) {
        return config.raw ? s : decodeURIComponent(s);
    }

    function stringifyCookieValue(value) {
        return encode(config.json ? JSON.stringify(value) : String(value));
    }

    function parseCookieValue(s) {
        if (s.indexOf('"') === 0) {
            // This is a quoted cookie as according to RFC2068, unescape...
            s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
        }

        try {
            // Replace server-side written pluses with spaces.
            // If we can't decode the cookie, ignore it, it's unusable.
            // If we can't parse the cookie, ignore it, it's unusable.
            s = decodeURIComponent(s.replace(pluses, ' '));
            return config.json ? JSON.parse(s) : s;
        } catch (e) { }
    }

    function read(s, converter) {
        var value = config.raw ? s : parseCookieValue(s);
        return $.isFunction(converter) ? converter(value) : value;
    }

    var config = $.cookie = function (key, value, options) {

        // Write

        if (arguments.length > 1 && !$.isFunction(value)) {
            options = $.extend({}, config.defaults, options);

            if (typeof options.expires === 'number') {
                var days = options.expires, t = options.expires = new Date();
                t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
            }

            return (document.cookie = [
				encode(key), '=', stringifyCookieValue(value),
				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
				options.path ? '; path=' + options.path : '',
				options.domain ? '; domain=' + options.domain : '',
				options.secure ? '; secure' : ''
            ].join(''));
        }

        // Read

        var result = key ? undefined : {},
			// To prevent the for loop in the first place assign an empty array
			// in case there are no cookies at all. Also prevents odd result when
			// calling $.cookie().
			cookies = document.cookie ? document.cookie.split('; ') : [],
			i = 0,
			l = cookies.length;

        for (; i < l; i++) {
            var parts = cookies[i].split('='),
				name = decode(parts.shift()),
				cookie = parts.join('=');

            if (key === name) {
                // If second argument (value) is a function it's a converter...
                result = read(cookie, value);
                break;
            }

            // Prevent storing a cookie that we couldn't decode.
            if (!key && (cookie = read(cookie)) !== undefined) {
                result[name] = cookie;
            }
        }

        return result;
    };

    config.defaults = {};

    $.removeCookie = function (key, options) {
        // Must not alter options, thus extending a fresh object...
        $.cookie(key, '', $.extend({}, options, { expires: -1 }));
        return !$.cookie(key);
    };

}));;
$(function () {
    var $corporateHeader = $('[data-corporate-header]');
    if ($corporateHeader.length > 0) {
        var background = $corporateHeader.find('input[type=hidden]').val();
        if (background !== '') {
            var header = $corporateHeader.closest('.main--header');
            header.attr('style', 'background-image: url(' + background + '); background-size: cover; background-position: bottom;');
        }
    }
});;
/*! jQuery UI - v1.13.2 - 2022-11-22
* http://jqueryui.com
* Includes: keycode.js, widgets/datepicker.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

!function (e) { "use strict"; "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery) }(function (V) { "use strict"; V.ui = V.ui || {}; var n; V.ui.version = "1.13.2", V.ui.keyCode = { BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38 }; function e() { this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = { closeText: "Done", prevText: "Prev", nextText: "Next", currentText: "Today", monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], weekHeader: "Wk", dateFormat: "mm/dd/yy", firstDay: 0, isRTL: !1, showMonthAfterYear: !1, yearSuffix: "", selectMonthLabel: "Select month", selectYearLabel: "Select year" }, this._defaults = { showOn: "focus", showAnim: "fadeIn", showOptions: {}, defaultDate: null, appendText: "", buttonText: "...", buttonImage: "", buttonImageOnly: !1, hideIfNoPrevNext: !1, navigationAsDateFormat: !1, gotoCurrent: !1, changeMonth: !1, changeYear: !1, yearRange: "c-10:c+10", showOtherMonths: !1, selectOtherMonths: !1, showWeek: !1, calculateWeek: this.iso8601Week, shortYearCutoff: "+10", minDate: null, maxDate: null, duration: "fast", beforeShowDay: null, beforeShow: null, onSelect: null, onChangeMonthYear: null, onClose: null, onUpdateDatepicker: null, numberOfMonths: 1, showCurrentAtPos: 0, stepMonths: 1, stepBigMonths: 12, altField: "", altFormat: "", constrainInput: !0, showButtonPanel: !1, autoSize: !1, disabled: !1 }, V.extend(this._defaults, this.regional[""]), this.regional.en = V.extend(!0, {}, this.regional[""]), this.regional["en-US"] = V.extend(!0, {}, this.regional.en), this.dpDiv = a(V("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) } function a(e) { var t = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; return e.on("mouseout", t, function () { V(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && V(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && V(this).removeClass("ui-datepicker-next-hover") }).on("mouseover", t, d) } function d() { V.datepicker._isDisabledDatepicker((n.inline ? n.dpDiv.parent() : n.input)[0]) || (V(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), V(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && V(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && V(this).addClass("ui-datepicker-next-hover")) } function o(e, t) { for (var a in V.extend(e, t), t) null == t[a] && (e[a] = t[a]); return e } V.extend(V.ui, { datepicker: { version: "1.13.2" } }), V.extend(e.prototype, { markerClassName: "hasDatepicker", maxRows: 4, _widgetDatepicker: function () { return this.dpDiv }, setDefaults: function (e) { return o(this._defaults, e || {}), this }, _attachDatepicker: function (e, t) { var a, i = e.nodeName.toLowerCase(), s = "div" === i || "span" === i; e.id || (this.uuid += 1, e.id = "dp" + this.uuid), (a = this._newInst(V(e), s)).settings = V.extend({}, t || {}), "input" === i ? this._connectDatepicker(e, a) : s && this._inlineDatepicker(e, a) }, _newInst: function (e, t) { return { id: e[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"), input: e, selectedDay: 0, selectedMonth: 0, selectedYear: 0, drawMonth: 0, drawYear: 0, inline: t, dpDiv: t ? a(V("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv } }, _connectDatepicker: function (e, t) { var a = V(e); t.append = V([]), t.trigger = V([]), a.hasClass(this.markerClassName) || (this._attachments(a, t), a.addClass(this.markerClassName).on("keydown", this._doKeyDown).on("keypress", this._doKeyPress).on("keyup", this._doKeyUp), this._autoSize(t), V.data(e, "datepicker", t), t.settings.disabled && this._disableDatepicker(e)) }, _attachments: function (e, t) { var a, i = this._get(t, "appendText"), s = this._get(t, "isRTL"); t.append && t.append.remove(), i && (t.append = V("<span>").addClass(this._appendClass).text(i), e[s ? "before" : "after"](t.append)), e.off("focus", this._showDatepicker), t.trigger && t.trigger.remove(), "focus" !== (a = this._get(t, "showOn")) && "both" !== a || e.on("focus", this._showDatepicker), "button" !== a && "both" !== a || (i = this._get(t, "buttonText"), a = this._get(t, "buttonImage"), this._get(t, "buttonImageOnly") ? t.trigger = V("<img>").addClass(this._triggerClass).attr({ src: a, alt: i, title: i }) : (t.trigger = V("<button type='button'>").addClass(this._triggerClass), a ? t.trigger.html(V("<img>").attr({ src: a, alt: i, title: i })) : t.trigger.text(i)), e[s ? "before" : "after"](t.trigger), t.trigger.on("click", function () { return V.datepicker._datepickerShowing && V.datepicker._lastInput === e[0] ? V.datepicker._hideDatepicker() : (V.datepicker._datepickerShowing && V.datepicker._lastInput !== e[0] && V.datepicker._hideDatepicker(), V.datepicker._showDatepicker(e[0])), !1 })) }, _autoSize: function (e) { var t, a, i, s, r, n; this._get(e, "autoSize") && !e.inline && (r = new Date(2009, 11, 20), (n = this._get(e, "dateFormat")).match(/[DM]/) && (t = function (e) { for (s = i = a = 0; s < e.length; s++)e[s].length > a && (a = e[s].length, i = s); return i }, r.setMonth(t(this._get(e, n.match(/MM/) ? "monthNames" : "monthNamesShort"))), r.setDate(t(this._get(e, n.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - r.getDay())), e.input.attr("size", this._formatDate(e, r).length)) }, _inlineDatepicker: function (e, t) { var a = V(e); a.hasClass(this.markerClassName) || (a.addClass(this.markerClassName).append(t.dpDiv), V.data(e, "datepicker", t), this._setDate(t, this._getDefaultDate(t), !0), this._updateDatepicker(t), this._updateAlternate(t), t.settings.disabled && this._disableDatepicker(e), t.dpDiv.css("display", "block")) }, _dialogDatepicker: function (e, t, a, i, s) { var r, n = this._dialogInst; return n || (this.uuid += 1, r = "dp" + this.uuid, this._dialogInput = V("<input type='text' id='" + r + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.on("keydown", this._doKeyDown), V("body").append(this._dialogInput), (n = this._dialogInst = this._newInst(this._dialogInput, !1)).settings = {}, V.data(this._dialogInput[0], "datepicker", n)), o(n.settings, i || {}), t = t && t.constructor === Date ? this._formatDate(n, t) : t, this._dialogInput.val(t), this._pos = s ? s.length ? s : [s.pageX, s.pageY] : null, this._pos || (r = document.documentElement.clientWidth, i = document.documentElement.clientHeight, t = document.documentElement.scrollLeft || document.body.scrollLeft, s = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [r / 2 - 100 + t, i / 2 - 150 + s]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), n.settings.onSelect = a, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), V.blockUI && V.blockUI(this.dpDiv), V.data(this._dialogInput[0], "datepicker", n), this }, _destroyDatepicker: function (e) { var t, a = V(e), i = V.data(e, "datepicker"); a.hasClass(this.markerClassName) && (t = e.nodeName.toLowerCase(), V.removeData(e, "datepicker"), "input" === t ? (i.append.remove(), i.trigger.remove(), a.removeClass(this.markerClassName).off("focus", this._showDatepicker).off("keydown", this._doKeyDown).off("keypress", this._doKeyPress).off("keyup", this._doKeyUp)) : "div" !== t && "span" !== t || a.removeClass(this.markerClassName).empty(), n === i && (n = null, this._curInst = null)) }, _enableDatepicker: function (t) { var e, a = V(t), i = V.data(t, "datepicker"); a.hasClass(this.markerClassName) && ("input" === (e = t.nodeName.toLowerCase()) ? (t.disabled = !1, i.trigger.filter("button").each(function () { this.disabled = !1 }).end().filter("img").css({ opacity: "1.0", cursor: "" })) : "div" !== e && "span" !== e || ((a = a.children("." + this._inlineClass)).children().removeClass("ui-state-disabled"), a.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = V.map(this._disabledInputs, function (e) { return e === t ? null : e })) }, _disableDatepicker: function (t) { var e, a = V(t), i = V.data(t, "datepicker"); a.hasClass(this.markerClassName) && ("input" === (e = t.nodeName.toLowerCase()) ? (t.disabled = !0, i.trigger.filter("button").each(function () { this.disabled = !0 }).end().filter("img").css({ opacity: "0.5", cursor: "default" })) : "div" !== e && "span" !== e || ((a = a.children("." + this._inlineClass)).children().addClass("ui-state-disabled"), a.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = V.map(this._disabledInputs, function (e) { return e === t ? null : e }), this._disabledInputs[this._disabledInputs.length] = t) }, _isDisabledDatepicker: function (e) { if (!e) return !1; for (var t = 0; t < this._disabledInputs.length; t++)if (this._disabledInputs[t] === e) return !0; return !1 }, _getInst: function (e) { try { return V.data(e, "datepicker") } catch (e) { throw "Missing instance data for this datepicker" } }, _optionDatepicker: function (e, t, a) { var i, s, r = this._getInst(e); if (2 === arguments.length && "string" == typeof t) return "defaults" === t ? V.extend({}, V.datepicker._defaults) : r ? "all" === t ? V.extend({}, r.settings) : this._get(r, t) : null; i = t || {}, "string" == typeof t && ((i = {})[t] = a), r && (this._curInst === r && this._hideDatepicker(), s = this._getDateDatepicker(e, !0), t = this._getMinMaxDate(r, "min"), a = this._getMinMaxDate(r, "max"), o(r.settings, i), null !== t && void 0 !== i.dateFormat && void 0 === i.minDate && (r.settings.minDate = this._formatDate(r, t)), null !== a && void 0 !== i.dateFormat && void 0 === i.maxDate && (r.settings.maxDate = this._formatDate(r, a)), "disabled" in i && (i.disabled ? this._disableDatepicker(e) : this._enableDatepicker(e)), this._attachments(V(e), r), this._autoSize(r), this._setDate(r, s), this._updateAlternate(r), this._updateDatepicker(r)) }, _changeDatepicker: function (e, t, a) { this._optionDatepicker(e, t, a) }, _refreshDatepicker: function (e) { e = this._getInst(e); e && this._updateDatepicker(e) }, _setDateDatepicker: function (e, t) { e = this._getInst(e); e && (this._setDate(e, t), this._updateDatepicker(e), this._updateAlternate(e)) }, _getDateDatepicker: function (e, t) { e = this._getInst(e); return e && !e.inline && this._setDateFromField(e, t), e ? this._getDate(e) : null }, _doKeyDown: function (e) { var t, a, i = V.datepicker._getInst(e.target), s = !0, r = i.dpDiv.is(".ui-datepicker-rtl"); if (i._keyEvent = !0, V.datepicker._datepickerShowing) switch (e.keyCode) { case 9: V.datepicker._hideDatepicker(), s = !1; break; case 13: return (a = V("td." + V.datepicker._dayOverClass + ":not(." + V.datepicker._currentClass + ")", i.dpDiv))[0] && V.datepicker._selectDay(e.target, i.selectedMonth, i.selectedYear, a[0]), (t = V.datepicker._get(i, "onSelect")) ? (a = V.datepicker._formatDate(i), t.apply(i.input ? i.input[0] : null, [a, i])) : V.datepicker._hideDatepicker(), !1; case 27: V.datepicker._hideDatepicker(); break; case 33: V.datepicker._adjustDate(e.target, e.ctrlKey ? -V.datepicker._get(i, "stepBigMonths") : -V.datepicker._get(i, "stepMonths"), "M"); break; case 34: V.datepicker._adjustDate(e.target, e.ctrlKey ? +V.datepicker._get(i, "stepBigMonths") : +V.datepicker._get(i, "stepMonths"), "M"); break; case 35: (e.ctrlKey || e.metaKey) && V.datepicker._clearDate(e.target), s = e.ctrlKey || e.metaKey; break; case 36: (e.ctrlKey || e.metaKey) && V.datepicker._gotoToday(e.target), s = e.ctrlKey || e.metaKey; break; case 37: (e.ctrlKey || e.metaKey) && V.datepicker._adjustDate(e.target, r ? 1 : -1, "D"), s = e.ctrlKey || e.metaKey, e.originalEvent.altKey && V.datepicker._adjustDate(e.target, e.ctrlKey ? -V.datepicker._get(i, "stepBigMonths") : -V.datepicker._get(i, "stepMonths"), "M"); break; case 38: (e.ctrlKey || e.metaKey) && V.datepicker._adjustDate(e.target, -7, "D"), s = e.ctrlKey || e.metaKey; break; case 39: (e.ctrlKey || e.metaKey) && V.datepicker._adjustDate(e.target, r ? -1 : 1, "D"), s = e.ctrlKey || e.metaKey, e.originalEvent.altKey && V.datepicker._adjustDate(e.target, e.ctrlKey ? +V.datepicker._get(i, "stepBigMonths") : +V.datepicker._get(i, "stepMonths"), "M"); break; case 40: (e.ctrlKey || e.metaKey) && V.datepicker._adjustDate(e.target, 7, "D"), s = e.ctrlKey || e.metaKey; break; default: s = !1 } else 36 === e.keyCode && e.ctrlKey ? V.datepicker._showDatepicker(this) : s = !1; s && (e.preventDefault(), e.stopPropagation()) }, _doKeyPress: function (e) { var t, a = V.datepicker._getInst(e.target); if (V.datepicker._get(a, "constrainInput")) return t = V.datepicker._possibleChars(V.datepicker._get(a, "dateFormat")), a = String.fromCharCode(null == e.charCode ? e.keyCode : e.charCode), e.ctrlKey || e.metaKey || a < " " || !t || -1 < t.indexOf(a) }, _doKeyUp: function (e) { e = V.datepicker._getInst(e.target); if (e.input.val() !== e.lastVal) try { V.datepicker.parseDate(V.datepicker._get(e, "dateFormat"), e.input ? e.input.val() : null, V.datepicker._getFormatConfig(e)) && (V.datepicker._setDateFromField(e), V.datepicker._updateAlternate(e), V.datepicker._updateDatepicker(e)) } catch (e) { } return !0 }, _showDatepicker: function (e) { var t, a, i, s; "input" !== (e = e.target || e).nodeName.toLowerCase() && (e = V("input", e.parentNode)[0]), V.datepicker._isDisabledDatepicker(e) || V.datepicker._lastInput === e || (s = V.datepicker._getInst(e), V.datepicker._curInst && V.datepicker._curInst !== s && (V.datepicker._curInst.dpDiv.stop(!0, !0), s && V.datepicker._datepickerShowing && V.datepicker._hideDatepicker(V.datepicker._curInst.input[0])), !1 !== (a = (i = V.datepicker._get(s, "beforeShow")) ? i.apply(e, [e, s]) : {}) && (o(s.settings, a), s.lastVal = null, V.datepicker._lastInput = e, V.datepicker._setDateFromField(s), V.datepicker._inDialog && (e.value = ""), V.datepicker._pos || (V.datepicker._pos = V.datepicker._findPos(e), V.datepicker._pos[1] += e.offsetHeight), t = !1, V(e).parents().each(function () { return !(t |= "fixed" === V(this).css("position")) }), i = { left: V.datepicker._pos[0], top: V.datepicker._pos[1] }, V.datepicker._pos = null, s.dpDiv.empty(), s.dpDiv.css({ position: "absolute", display: "block", top: "-1000px" }), V.datepicker._updateDatepicker(s), i = V.datepicker._checkOffset(s, i, t), s.dpDiv.css({ position: V.datepicker._inDialog && V.blockUI ? "static" : t ? "fixed" : "absolute", display: "none", left: i.left + "px", top: i.top + "px" }), s.inline || (a = V.datepicker._get(s, "showAnim"), i = V.datepicker._get(s, "duration"), s.dpDiv.css("z-index", function (e) { for (var t, a; e.length && e[0] !== document;) { if (("absolute" === (t = e.css("position")) || "relative" === t || "fixed" === t) && (a = parseInt(e.css("zIndex"), 10), !isNaN(a) && 0 !== a)) return a; e = e.parent() } return 0 }(V(e)) + 1), V.datepicker._datepickerShowing = !0, V.effects && V.effects.effect[a] ? s.dpDiv.show(a, V.datepicker._get(s, "showOptions"), i) : s.dpDiv[a || "show"](a ? i : null), V.datepicker._shouldFocusInput(s) && s.input.trigger("focus"), V.datepicker._curInst = s))) }, _updateDatepicker: function (e) { this.maxRows = 4, (n = e).dpDiv.empty().append(this._generateHTML(e)), this._attachHandlers(e); var t, a = this._getNumberOfMonths(e), i = a[1], s = e.dpDiv.find("." + this._dayOverClass + " a"), r = V.datepicker._get(e, "onUpdateDatepicker"); 0 < s.length && d.apply(s.get(0)), e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), 1 < i && e.dpDiv.addClass("ui-datepicker-multi-" + i).css("width", 17 * i + "em"), e.dpDiv[(1 !== a[0] || 1 !== a[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), e.dpDiv[(this._get(e, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), e === V.datepicker._curInst && V.datepicker._datepickerShowing && V.datepicker._shouldFocusInput(e) && e.input.trigger("focus"), e.yearshtml && (t = e.yearshtml, setTimeout(function () { t === e.yearshtml && e.yearshtml && e.dpDiv.find("select.ui-datepicker-year").first().replaceWith(e.yearshtml), t = e.yearshtml = null }, 0)), r && r.apply(e.input ? e.input[0] : null, [e]) }, _shouldFocusInput: function (e) { return e.input && e.input.is(":visible") && !e.input.is(":disabled") && !e.input.is(":focus") }, _checkOffset: function (e, t, a) { var i = e.dpDiv.outerWidth(), s = e.dpDiv.outerHeight(), r = e.input ? e.input.outerWidth() : 0, n = e.input ? e.input.outerHeight() : 0, d = document.documentElement.clientWidth + (a ? 0 : V(document).scrollLeft()), o = document.documentElement.clientHeight + (a ? 0 : V(document).scrollTop()); return t.left -= this._get(e, "isRTL") ? i - r : 0, t.left -= a && t.left === e.input.offset().left ? V(document).scrollLeft() : 0, t.top -= a && t.top === e.input.offset().top + n ? V(document).scrollTop() : 0, t.left -= Math.min(t.left, t.left + i > d && i < d ? Math.abs(t.left + i - d) : 0), t.top -= Math.min(t.top, t.top + s > o && s < o ? Math.abs(s + n) : 0), t }, _findPos: function (e) { for (var t = this._getInst(e), a = this._get(t, "isRTL"); e && ("hidden" === e.type || 1 !== e.nodeType || V.expr.pseudos.hidden(e));)e = e[a ? "previousSibling" : "nextSibling"]; return [(t = V(e).offset()).left, t.top] }, _hideDatepicker: function (e) { var t, a, i = this._curInst; !i || e && i !== V.data(e, "datepicker") || this._datepickerShowing && (t = this._get(i, "showAnim"), a = this._get(i, "duration"), e = function () { V.datepicker._tidyDialog(i) }, V.effects && (V.effects.effect[t] || V.effects[t]) ? i.dpDiv.hide(t, V.datepicker._get(i, "showOptions"), a, e) : i.dpDiv["slideDown" === t ? "slideUp" : "fadeIn" === t ? "fadeOut" : "hide"](t ? a : null, e), t || e(), this._datepickerShowing = !1, (e = this._get(i, "onClose")) && e.apply(i.input ? i.input[0] : null, [i.input ? i.input.val() : "", i]), this._lastInput = null, this._inDialog && (this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" }), V.blockUI && (V.unblockUI(), V("body").append(this.dpDiv))), this._inDialog = !1) }, _tidyDialog: function (e) { e.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar") }, _checkExternalClick: function (e) { var t; V.datepicker._curInst && (t = V(e.target), e = V.datepicker._getInst(t[0]), (t[0].id === V.datepicker._mainDivId || 0 !== t.parents("#" + V.datepicker._mainDivId).length || t.hasClass(V.datepicker.markerClassName) || t.closest("." + V.datepicker._triggerClass).length || !V.datepicker._datepickerShowing || V.datepicker._inDialog && V.blockUI) && (!t.hasClass(V.datepicker.markerClassName) || V.datepicker._curInst === e) || V.datepicker._hideDatepicker()) }, _adjustDate: function (e, t, a) { var i = V(e), e = this._getInst(i[0]); this._isDisabledDatepicker(i[0]) || (this._adjustInstDate(e, t, a), this._updateDatepicker(e)) }, _gotoToday: function (e) { var t = V(e), a = this._getInst(t[0]); this._get(a, "gotoCurrent") && a.currentDay ? (a.selectedDay = a.currentDay, a.drawMonth = a.selectedMonth = a.currentMonth, a.drawYear = a.selectedYear = a.currentYear) : (e = new Date, a.selectedDay = e.getDate(), a.drawMonth = a.selectedMonth = e.getMonth(), a.drawYear = a.selectedYear = e.getFullYear()), this._notifyChange(a), this._adjustDate(t) }, _selectMonthYear: function (e, t, a) { var i = V(e), e = this._getInst(i[0]); e["selected" + ("M" === a ? "Month" : "Year")] = e["draw" + ("M" === a ? "Month" : "Year")] = parseInt(t.options[t.selectedIndex].value, 10), this._notifyChange(e), this._adjustDate(i) }, _selectDay: function (e, t, a, i) { var s = V(e); V(i).hasClass(this._unselectableClass) || this._isDisabledDatepicker(s[0]) || ((s = this._getInst(s[0])).selectedDay = s.currentDay = parseInt(V("a", i).attr("data-date")), s.selectedMonth = s.currentMonth = t, s.selectedYear = s.currentYear = a, this._selectDate(e, this._formatDate(s, s.currentDay, s.currentMonth, s.currentYear))) }, _clearDate: function (e) { e = V(e); this._selectDate(e, "") }, _selectDate: function (e, t) { var a = V(e), e = this._getInst(a[0]); t = null != t ? t : this._formatDate(e), e.input && e.input.val(t), this._updateAlternate(e), (a = this._get(e, "onSelect")) ? a.apply(e.input ? e.input[0] : null, [t, e]) : e.input && e.input.trigger("change"), e.inline ? this._updateDatepicker(e) : (this._hideDatepicker(), this._lastInput = e.input[0], "object" != typeof e.input[0] && e.input.trigger("focus"), this._lastInput = null) }, _updateAlternate: function (e) { var t, a, i = this._get(e, "altField"); i && (t = this._get(e, "altFormat") || this._get(e, "dateFormat"), a = this._getDate(e), e = this.formatDate(t, a, this._getFormatConfig(e)), V(document).find(i).val(e)) }, noWeekends: function (e) { e = e.getDay(); return [0 < e && e < 6, ""] }, iso8601Week: function (e) { var t = new Date(e.getTime()); return t.setDate(t.getDate() + 4 - (t.getDay() || 7)), e = t.getTime(), t.setMonth(0), t.setDate(1), Math.floor(Math.round((e - t) / 864e5) / 7) + 1 }, parseDate: function (t, s, e) { if (null == t || null == s) throw "Invalid arguments"; if ("" === (s = "object" == typeof s ? s.toString() : s + "")) return null; for (var a, i, r, n = 0, d = (e ? e.shortYearCutoff : null) || this._defaults.shortYearCutoff, d = "string" != typeof d ? d : (new Date).getFullYear() % 100 + parseInt(d, 10), o = (e ? e.dayNamesShort : null) || this._defaults.dayNamesShort, c = (e ? e.dayNames : null) || this._defaults.dayNames, l = (e ? e.monthNamesShort : null) || this._defaults.monthNamesShort, h = (e ? e.monthNames : null) || this._defaults.monthNames, u = -1, p = -1, g = -1, _ = -1, f = !1, k = function (e) { e = v + 1 < t.length && t.charAt(v + 1) === e; return e && v++, e }, D = function (e) { var t = k(e), t = "@" === e ? 14 : "!" === e ? 20 : "y" === e && t ? 4 : "o" === e ? 3 : 2, t = new RegExp("^\\d{" + ("y" === e ? t : 1) + "," + t + "}"), t = s.substring(n).match(t); if (!t) throw "Missing number at position " + n; return n += t[0].length, parseInt(t[0], 10) }, m = function (e, t, a) { var i = -1, t = V.map(k(e) ? a : t, function (e, t) { return [[t, e]] }).sort(function (e, t) { return -(e[1].length - t[1].length) }); if (V.each(t, function (e, t) { var a = t[1]; if (s.substr(n, a.length).toLowerCase() === a.toLowerCase()) return i = t[0], n += a.length, !1 }), -1 !== i) return i + 1; throw "Unknown name at position " + n }, y = function () { if (s.charAt(n) !== t.charAt(v)) throw "Unexpected literal at position " + n; n++ }, v = 0; v < t.length; v++)if (f) "'" !== t.charAt(v) || k("'") ? y() : f = !1; else switch (t.charAt(v)) { case "d": g = D("d"); break; case "D": m("D", o, c); break; case "o": _ = D("o"); break; case "m": p = D("m"); break; case "M": p = m("M", l, h); break; case "y": u = D("y"); break; case "@": u = (r = new Date(D("@"))).getFullYear(), p = r.getMonth() + 1, g = r.getDate(); break; case "!": u = (r = new Date((D("!") - this._ticksTo1970) / 1e4)).getFullYear(), p = r.getMonth() + 1, g = r.getDate(); break; case "'": k("'") ? y() : f = !0; break; default: y() }if (n < s.length && (i = s.substr(n), !/^\s+/.test(i))) throw "Extra/unparsed characters found in date: " + i; if (-1 === u ? u = (new Date).getFullYear() : u < 100 && (u += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (u <= d ? 0 : -100)), -1 < _) for (p = 1, g = _; ;) { if (g <= (a = this._getDaysInMonth(u, p - 1))) break; p++, g -= a } if ((r = this._daylightSavingAdjust(new Date(u, p - 1, g))).getFullYear() !== u || r.getMonth() + 1 !== p || r.getDate() !== g) throw "Invalid date"; return r }, ATOM: "yy-mm-dd", COOKIE: "D, dd M yy", ISO_8601: "yy-mm-dd", RFC_822: "D, d M y", RFC_850: "DD, dd-M-y", RFC_1036: "D, d M y", RFC_1123: "D, d M yy", RFC_2822: "D, d M yy", RSS: "D, d M y", TICKS: "!", TIMESTAMP: "@", W3C: "yy-mm-dd", _ticksTo1970: 24 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)) * 60 * 60 * 1e7, formatDate: function (t, e, a) { if (!e) return ""; function i(e, t, a) { var i = "" + t; if (l(e)) for (; i.length < a;)i = "0" + i; return i } function s(e, t, a, i) { return (l(e) ? i : a)[t] } var r, n = (a ? a.dayNamesShort : null) || this._defaults.dayNamesShort, d = (a ? a.dayNames : null) || this._defaults.dayNames, o = (a ? a.monthNamesShort : null) || this._defaults.monthNamesShort, c = (a ? a.monthNames : null) || this._defaults.monthNames, l = function (e) { e = r + 1 < t.length && t.charAt(r + 1) === e; return e && r++, e }, h = "", u = !1; if (e) for (r = 0; r < t.length; r++)if (u) "'" !== t.charAt(r) || l("'") ? h += t.charAt(r) : u = !1; else switch (t.charAt(r)) { case "d": h += i("d", e.getDate(), 2); break; case "D": h += s("D", e.getDay(), n, d); break; case "o": h += i("o", Math.round((new Date(e.getFullYear(), e.getMonth(), e.getDate()).getTime() - new Date(e.getFullYear(), 0, 0).getTime()) / 864e5), 3); break; case "m": h += i("m", e.getMonth() + 1, 2); break; case "M": h += s("M", e.getMonth(), o, c); break; case "y": h += l("y") ? e.getFullYear() : (e.getFullYear() % 100 < 10 ? "0" : "") + e.getFullYear() % 100; break; case "@": h += e.getTime(); break; case "!": h += 1e4 * e.getTime() + this._ticksTo1970; break; case "'": l("'") ? h += "'" : u = !0; break; default: h += t.charAt(r) }return h }, _possibleChars: function (t) { for (var e = "", a = !1, i = function (e) { e = s + 1 < t.length && t.charAt(s + 1) === e; return e && s++, e }, s = 0; s < t.length; s++)if (a) "'" !== t.charAt(s) || i("'") ? e += t.charAt(s) : a = !1; else switch (t.charAt(s)) { case "d": case "m": case "y": case "@": e += "0123456789"; break; case "D": case "M": return null; case "'": i("'") ? e += "'" : a = !0; break; default: e += t.charAt(s) }return e }, _get: function (e, t) { return (void 0 !== e.settings[t] ? e.settings : this._defaults)[t] }, _setDateFromField: function (e, t) { if (e.input.val() !== e.lastVal) { var a = this._get(e, "dateFormat"), i = e.lastVal = e.input ? e.input.val() : null, s = this._getDefaultDate(e), r = s, n = this._getFormatConfig(e); try { r = this.parseDate(a, i, n) || s } catch (e) { i = t ? "" : i } e.selectedDay = r.getDate(), e.drawMonth = e.selectedMonth = r.getMonth(), e.drawYear = e.selectedYear = r.getFullYear(), e.currentDay = i ? r.getDate() : 0, e.currentMonth = i ? r.getMonth() : 0, e.currentYear = i ? r.getFullYear() : 0, this._adjustInstDate(e) } }, _getDefaultDate: function (e) { return this._restrictMinMax(e, this._determineDate(e, this._get(e, "defaultDate"), new Date)) }, _determineDate: function (d, e, t) { var a, i, e = null == e || "" === e ? t : "string" == typeof e ? function (e) { try { return V.datepicker.parseDate(V.datepicker._get(d, "dateFormat"), e, V.datepicker._getFormatConfig(d)) } catch (e) { } for (var t = (e.toLowerCase().match(/^c/) ? V.datepicker._getDate(d) : null) || new Date, a = t.getFullYear(), i = t.getMonth(), s = t.getDate(), r = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, n = r.exec(e); n;) { switch (n[2] || "d") { case "d": case "D": s += parseInt(n[1], 10); break; case "w": case "W": s += 7 * parseInt(n[1], 10); break; case "m": case "M": i += parseInt(n[1], 10), s = Math.min(s, V.datepicker._getDaysInMonth(a, i)); break; case "y": case "Y": a += parseInt(n[1], 10), s = Math.min(s, V.datepicker._getDaysInMonth(a, i)) }n = r.exec(e) } return new Date(a, i, s) }(e) : "number" == typeof e ? isNaN(e) ? t : (a = e, (i = new Date).setDate(i.getDate() + a), i) : new Date(e.getTime()); return (e = e && "Invalid Date" === e.toString() ? t : e) && (e.setHours(0), e.setMinutes(0), e.setSeconds(0), e.setMilliseconds(0)), this._daylightSavingAdjust(e) }, _daylightSavingAdjust: function (e) { return e ? (e.setHours(12 < e.getHours() ? e.getHours() + 2 : 0), e) : null }, _setDate: function (e, t, a) { var i = !t, s = e.selectedMonth, r = e.selectedYear, t = this._restrictMinMax(e, this._determineDate(e, t, new Date)); e.selectedDay = e.currentDay = t.getDate(), e.drawMonth = e.selectedMonth = e.currentMonth = t.getMonth(), e.drawYear = e.selectedYear = e.currentYear = t.getFullYear(), s === e.selectedMonth && r === e.selectedYear || a || this._notifyChange(e), this._adjustInstDate(e), e.input && e.input.val(i ? "" : this._formatDate(e)) }, _getDate: function (e) { return !e.currentYear || e.input && "" === e.input.val() ? null : this._daylightSavingAdjust(new Date(e.currentYear, e.currentMonth, e.currentDay)) }, _attachHandlers: function (e) { var t = this._get(e, "stepMonths"), a = "#" + e.id.replace(/\\\\/g, "\\"); e.dpDiv.find("[data-handler]").map(function () { var e = { prev: function () { V.datepicker._adjustDate(a, -t, "M") }, next: function () { V.datepicker._adjustDate(a, +t, "M") }, hide: function () { V.datepicker._hideDatepicker() }, today: function () { V.datepicker._gotoToday(a) }, selectDay: function () { return V.datepicker._selectDay(a, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1 }, selectMonth: function () { return V.datepicker._selectMonthYear(a, this, "M"), !1 }, selectYear: function () { return V.datepicker._selectMonthYear(a, this, "Y"), !1 } }; V(this).on(this.getAttribute("data-event"), e[this.getAttribute("data-handler")]) }) }, _generateHTML: function (e) { var t, a, i, s, r, n, d, o, c, l, h, u, p, g, _, f, k, D, m, y, v, M, b, w, C, I, x, Y, S, N, T, F, A = new Date, K = this._daylightSavingAdjust(new Date(A.getFullYear(), A.getMonth(), A.getDate())), j = this._get(e, "isRTL"), O = this._get(e, "showButtonPanel"), E = this._get(e, "hideIfNoPrevNext"), L = this._get(e, "navigationAsDateFormat"), R = this._getNumberOfMonths(e), H = this._get(e, "showCurrentAtPos"), A = this._get(e, "stepMonths"), P = 1 !== R[0] || 1 !== R[1], W = this._daylightSavingAdjust(e.currentDay ? new Date(e.currentYear, e.currentMonth, e.currentDay) : new Date(9999, 9, 9)), U = this._getMinMaxDate(e, "min"), z = this._getMinMaxDate(e, "max"), B = e.drawMonth - H, J = e.drawYear; if (B < 0 && (B += 12, J--), z) for (t = this._daylightSavingAdjust(new Date(z.getFullYear(), z.getMonth() - R[0] * R[1] + 1, z.getDate())), t = U && t < U ? U : t; this._daylightSavingAdjust(new Date(J, B, 1)) > t;)--B < 0 && (B = 11, J--); for (e.drawMonth = B, e.drawYear = J, H = this._get(e, "prevText"), H = L ? this.formatDate(H, this._daylightSavingAdjust(new Date(J, B - A, 1)), this._getFormatConfig(e)) : H, a = this._canAdjustMonth(e, -1, J, B) ? V("<a>").attr({ class: "ui-datepicker-prev ui-corner-all", "data-handler": "prev", "data-event": "click", title: H }).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-" + (j ? "e" : "w")).text(H))[0].outerHTML : E ? "" : V("<a>").attr({ class: "ui-datepicker-prev ui-corner-all ui-state-disabled", title: H }).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-" + (j ? "e" : "w")).text(H))[0].outerHTML, H = this._get(e, "nextText"), H = L ? this.formatDate(H, this._daylightSavingAdjust(new Date(J, B + A, 1)), this._getFormatConfig(e)) : H, i = this._canAdjustMonth(e, 1, J, B) ? V("<a>").attr({ class: "ui-datepicker-next ui-corner-all", "data-handler": "next", "data-event": "click", title: H }).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-" + (j ? "w" : "e")).text(H))[0].outerHTML : E ? "" : V("<a>").attr({ class: "ui-datepicker-next ui-corner-all ui-state-disabled", title: H }).append(V("<span>").attr("class", "ui-icon ui-icon-circle-triangle-" + (j ? "w" : "e")).text(H))[0].outerHTML, A = this._get(e, "currentText"), E = this._get(e, "gotoCurrent") && e.currentDay ? W : K, A = L ? this.formatDate(A, E, this._getFormatConfig(e)) : A, H = "", e.inline || (H = V("<button>").attr({ type: "button", class: "ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all", "data-handler": "hide", "data-event": "click" }).text(this._get(e, "closeText"))[0].outerHTML), L = "", O && (L = V("<div class='ui-datepicker-buttonpane ui-widget-content'>").append(j ? H : "").append(this._isInRange(e, E) ? V("<button>").attr({ type: "button", class: "ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all", "data-handler": "today", "data-event": "click" }).text(A) : "").append(j ? "" : H)[0].outerHTML), s = parseInt(this._get(e, "firstDay"), 10), s = isNaN(s) ? 0 : s, r = this._get(e, "showWeek"), n = this._get(e, "dayNames"), d = this._get(e, "dayNamesMin"), o = this._get(e, "monthNames"), c = this._get(e, "monthNamesShort"), l = this._get(e, "beforeShowDay"), h = this._get(e, "showOtherMonths"), u = this._get(e, "selectOtherMonths"), p = this._getDefaultDate(e), g = "", f = 0; f < R[0]; f++) { for (k = "", this.maxRows = 4, D = 0; D < R[1]; D++) { if (m = this._daylightSavingAdjust(new Date(J, B, e.selectedDay)), y = " ui-corner-all", v = "", P) { if (v += "<div class='ui-datepicker-group", 1 < R[1]) switch (D) { case 0: v += " ui-datepicker-group-first", y = " ui-corner-" + (j ? "right" : "left"); break; case R[1] - 1: v += " ui-datepicker-group-last", y = " ui-corner-" + (j ? "left" : "right"); break; default: v += " ui-datepicker-group-middle", y = "" }v += "'>" } for (v += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + y + "'>" + (/all|left/.test(y) && 0 === f ? j ? i : a : "") + (/all|right/.test(y) && 0 === f ? j ? a : i : "") + this._generateMonthYearHeader(e, B, J, U, z, 0 < f || 0 < D, o, c) + "</div><table class='ui-datepicker-calendar'><thead><tr>", M = r ? "<th class='ui-datepicker-week-col'>" + this._get(e, "weekHeader") + "</th>" : "", _ = 0; _ < 7; _++)M += "<th scope='col'" + (5 <= (_ + s + 6) % 7 ? " class='ui-datepicker-week-end'" : "") + "><span title='" + n[b = (_ + s) % 7] + "'>" + d[b] + "</span></th>"; for (v += M + "</tr></thead><tbody>", C = this._getDaysInMonth(J, B), J === e.selectedYear && B === e.selectedMonth && (e.selectedDay = Math.min(e.selectedDay, C)), w = (this._getFirstDayOfMonth(J, B) - s + 7) % 7, C = Math.ceil((w + C) / 7), I = P && this.maxRows > C ? this.maxRows : C, this.maxRows = I, x = this._daylightSavingAdjust(new Date(J, B, 1 - w)), Y = 0; Y < I; Y++) { for (v += "<tr>", S = r ? "<td class='ui-datepicker-week-col'>" + this._get(e, "calculateWeek")(x) + "</td>" : "", _ = 0; _ < 7; _++)N = l ? l.apply(e.input ? e.input[0] : null, [x]) : [!0, ""], F = (T = x.getMonth() !== B) && !u || !N[0] || U && x < U || z && z < x, S += "<td class='" + (5 <= (_ + s + 6) % 7 ? " ui-datepicker-week-end" : "") + (T ? " ui-datepicker-other-month" : "") + (x.getTime() === m.getTime() && B === e.selectedMonth && e._keyEvent || p.getTime() === x.getTime() && p.getTime() === m.getTime() ? " " + this._dayOverClass : "") + (F ? " " + this._unselectableClass + " ui-state-disabled" : "") + (T && !h ? "" : " " + N[1] + (x.getTime() === W.getTime() ? " " + this._currentClass : "") + (x.getTime() === K.getTime() ? " ui-datepicker-today" : "")) + "'" + (T && !h || !N[2] ? "" : " title='" + N[2].replace(/'/g, "&#39;") + "'") + (F ? "" : " data-handler='selectDay' data-event='click' data-month='" + x.getMonth() + "' data-year='" + x.getFullYear() + "'") + ">" + (T && !h ? "&#xa0;" : F ? "<span class='ui-state-default'>" + x.getDate() + "</span>" : "<a class='ui-state-default" + (x.getTime() === K.getTime() ? " ui-state-highlight" : "") + (x.getTime() === W.getTime() ? " ui-state-active" : "") + (T ? " ui-priority-secondary" : "") + "' href='#' aria-current='" + (x.getTime() === W.getTime() ? "true" : "false") + "' data-date='" + x.getDate() + "'>" + x.getDate() + "</a>") + "</td>", x.setDate(x.getDate() + 1), x = this._daylightSavingAdjust(x); v += S + "</tr>" } 11 < ++B && (B = 0, J++), k += v += "</tbody></table>" + (P ? "</div>" + (0 < R[0] && D === R[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : "") } g += k } return g += L, e._keyEvent = !1, g }, _generateMonthYearHeader: function (e, t, a, i, s, r, n, d) { var o, c, l, h, u, p, g = this._get(e, "changeMonth"), _ = this._get(e, "changeYear"), f = this._get(e, "showMonthAfterYear"), k = this._get(e, "selectMonthLabel"), D = this._get(e, "selectYearLabel"), m = "<div class='ui-datepicker-title'>", y = ""; if (r || !g) y += "<span class='ui-datepicker-month'>" + n[t] + "</span>"; else { for (o = i && i.getFullYear() === a, c = s && s.getFullYear() === a, y += "<select class='ui-datepicker-month' aria-label='" + k + "' data-handler='selectMonth' data-event='change'>", l = 0; l < 12; l++)(!o || l >= i.getMonth()) && (!c || l <= s.getMonth()) && (y += "<option value='" + l + "'" + (l === t ? " selected='selected'" : "") + ">" + d[l] + "</option>"); y += "</select>" } if (f || (m += y + (!r && g && _ ? "" : "&#xa0;")), !e.yearshtml) if (e.yearshtml = "", r || !_) m += "<span class='ui-datepicker-year'>" + a + "</span>"; else { for (n = this._get(e, "yearRange").split(":"), h = (new Date).getFullYear(), u = (k = function (e) { e = e.match(/c[+\-].*/) ? a + parseInt(e.substring(1), 10) : e.match(/[+\-].*/) ? h + parseInt(e, 10) : parseInt(e, 10); return isNaN(e) ? h : e })(n[0]), p = Math.max(u, k(n[1] || "")), u = i ? Math.max(u, i.getFullYear()) : u, p = s ? Math.min(p, s.getFullYear()) : p, e.yearshtml += "<select class='ui-datepicker-year' aria-label='" + D + "' data-handler='selectYear' data-event='change'>"; u <= p; u++)e.yearshtml += "<option value='" + u + "'" + (u === a ? " selected='selected'" : "") + ">" + u + "</option>"; e.yearshtml += "</select>", m += e.yearshtml, e.yearshtml = null } return m += this._get(e, "yearSuffix"), f && (m += (!r && g && _ ? "" : "&#xa0;") + y), m += "</div>" }, _adjustInstDate: function (e, t, a) { var i = e.selectedYear + ("Y" === a ? t : 0), s = e.selectedMonth + ("M" === a ? t : 0), t = Math.min(e.selectedDay, this._getDaysInMonth(i, s)) + ("D" === a ? t : 0), t = this._restrictMinMax(e, this._daylightSavingAdjust(new Date(i, s, t))); e.selectedDay = t.getDate(), e.drawMonth = e.selectedMonth = t.getMonth(), e.drawYear = e.selectedYear = t.getFullYear(), "M" !== a && "Y" !== a || this._notifyChange(e) }, _restrictMinMax: function (e, t) { var a = this._getMinMaxDate(e, "min"), e = this._getMinMaxDate(e, "max"), t = a && t < a ? a : t; return e && e < t ? e : t }, _notifyChange: function (e) { var t = this._get(e, "onChangeMonthYear"); t && t.apply(e.input ? e.input[0] : null, [e.selectedYear, e.selectedMonth + 1, e]) }, _getNumberOfMonths: function (e) { e = this._get(e, "numberOfMonths"); return null == e ? [1, 1] : "number" == typeof e ? [1, e] : e }, _getMinMaxDate: function (e, t) { return this._determineDate(e, this._get(e, t + "Date"), null) }, _getDaysInMonth: function (e, t) { return 32 - this._daylightSavingAdjust(new Date(e, t, 32)).getDate() }, _getFirstDayOfMonth: function (e, t) { return new Date(e, t, 1).getDay() }, _canAdjustMonth: function (e, t, a, i) { var s = this._getNumberOfMonths(e), s = this._daylightSavingAdjust(new Date(a, i + (t < 0 ? t : s[0] * s[1]), 1)); return t < 0 && s.setDate(this._getDaysInMonth(s.getFullYear(), s.getMonth())), this._isInRange(e, s) }, _isInRange: function (e, t) { var a = this._getMinMaxDate(e, "min"), i = this._getMinMaxDate(e, "max"), s = null, r = null, n = this._get(e, "yearRange"); return n && (e = n.split(":"), n = (new Date).getFullYear(), s = parseInt(e[0], 10), r = parseInt(e[1], 10), e[0].match(/[+\-].*/) && (s += n), e[1].match(/[+\-].*/) && (r += n)), (!a || t.getTime() >= a.getTime()) && (!i || t.getTime() <= i.getTime()) && (!s || t.getFullYear() >= s) && (!r || t.getFullYear() <= r) }, _getFormatConfig: function (e) { var t = this._get(e, "shortYearCutoff"); return { shortYearCutoff: t = "string" != typeof t ? t : (new Date).getFullYear() % 100 + parseInt(t, 10), dayNamesShort: this._get(e, "dayNamesShort"), dayNames: this._get(e, "dayNames"), monthNamesShort: this._get(e, "monthNamesShort"), monthNames: this._get(e, "monthNames") } }, _formatDate: function (e, t, a, i) { t || (e.currentDay = e.selectedDay, e.currentMonth = e.selectedMonth, e.currentYear = e.selectedYear); t = t ? "object" == typeof t ? t : this._daylightSavingAdjust(new Date(i, a, t)) : this._daylightSavingAdjust(new Date(e.currentYear, e.currentMonth, e.currentDay)); return this.formatDate(this._get(e, "dateFormat"), t, this._getFormatConfig(e)) } }), V.fn.datepicker = function (e) { if (!this.length) return this; V.datepicker.initialized || (V(document).on("mousedown", V.datepicker._checkExternalClick), V.datepicker.initialized = !0), 0 === V("#" + V.datepicker._mainDivId).length && V("body").append(V.datepicker.dpDiv); var t = Array.prototype.slice.call(arguments, 1); return "string" == typeof e && ("isDisabled" === e || "getDate" === e || "widget" === e) || "option" === e && 2 === arguments.length && "string" == typeof arguments[1] ? V.datepicker["_" + e + "Datepicker"].apply(V.datepicker, [this[0]].concat(t)) : this.each(function () { "string" == typeof e ? V.datepicker["_" + e + "Datepicker"].apply(V.datepicker, [this].concat(t)) : V.datepicker._attachDatepicker(this, e) }) }, V.datepicker = new e, V.datepicker.initialized = !1, V.datepicker.uuid = (new Date).getTime(), V.datepicker.version = "1.13.2"; V.datepicker });;
var validationScroll;

if (typeof Page_ClientValidate !== 'undefined') {
    var originalValidationFunction = Page_ClientValidate;
    if (originalValidationFunction && typeof (originalValidationFunction) == 'function') {
        Page_ClientValidate = function (validationGroup) {
            validationScroll = null;
            originalValidationFunction(validationGroup);
            if (!Page_IsValid && typeof validationScroll != 'undefined' || validationScroll != null) {
                WizardScroll(validationScroll, 25);
            }
        };
    }
}

function validateAnswers(source, arguments) {
    var $questionWrapper = $(source).closest('.el-module-question');
    var allowedAnswers = $questionWrapper.attr('data-allowed-answers');
    var $answers = $questionWrapper.find('.el-module-question__answers');
    if ($answers.find('input[type=radio]:checked, input[type=checkbox]:checked').length == allowedAnswers) {
        arguments.IsValid = true;
    }
    else {
        arguments.IsValid = false;
        if (typeof validationScroll == 'undefined' || validationScroll == null || $questionWrapper.offset() < validationScroll.offset()) {
            validationScroll = $questionWrapper;
        }
    }
}

$(function () {
    if (typeof Vimeo !== 'undefined') {
        $('[data-video-show-end]').hide();

        var iframe = $('.embed-container iframe');
        var player = new Vimeo.Player(iframe);

        player.on('ended', function () {
            $('[data-video-show-end]').show();
        });
    }
});;
$.fn.evouchers = function () {
	var dateFormat = 'dd/mm/yy';

	$evoucherWrapper = $(this),
		$dateFilterInput = $evoucherWrapper.find('.evouchers__date-filter__input'),
		$evouchersList = $evoucherWrapper.find('.evouchers__list'),
		$noVouchersZone = $evoucherWrapper.find('.no-vouchers-zone'),
		$evouchersListItems = $evoucherWrapper.find('.evouchers__list__item'),
		$categoryLinks = $evoucherWrapper.find('.category-link'),
		$defaultWidgetZoneArea = $evoucherWrapper.find('.default-widget-zone-area'),
		$checkboxes = $evoucherWrapper.find('.evouchers__list__checkbox input[type=checkbox]'),
		$sendButton = $evoucherWrapper.find('.evouchers__send-btn'),
        $filterCategory = $evoucherWrapper.find('.evouchers__filter-category input[type=hidden]'),
        $infoLinks = $evoucherWrapper.find('.evouchers__list__info-link'),
        $infoBoxes = $evoucherWrapper.find('.evouchers__list__info');

	$dateFilterInput.datepicker({
		showButtonPanel: true,
		dateFormat: dateFormat,
		minDate: 0,
		beforeShow: function (input, inst) {
			$('#ui-datepicker-div').addClass('evouchers__date-filter__date-picker')
		},
		onSelect: function (date, inst) {
		    var parsedDate = $.datepicker.parseDate(dateFormat, date);
		    setCategoryCounts(parsedDate);

			var $categoryLink = $categoryLinks.filter('.is-active');
			if ($categoryLink.length != 1) {
				return;
			}
			displayVouchers(parsedDate, $($categoryLink[0]).data('categoryId'));
			fixVoucherPositioning();
			WizardScroll('.evouchers__list', 25);
		}
	});

	$evouchersList.hide();
	$noVouchersZone.hide();

	$categoryLinks.on('click', function () {
		//fix for tablets & mobile to realign columns
	    salvattore.rescanMediaQueries();
	    toggleCategoryDisplay($(this));
	});

	$infoLinks.on('click', function () {
	    $infoLinks.not(this).removeClass('is-active');
	    $infoBoxes.not(this).removeClass('is-active');
	    $evouchersListItems.css('margin-bottom', '');
        
	    var $infoLink = $(this),
            $infoBox = $infoLink.siblings('.evouchers__list__info'),
            $voucherWrapper = $infoLink.closest('.evouchers__list__item'),
	        $currentRowItems = $evouchersListItems.filter('[data-voucher-row=' + $voucherWrapper.attr('data-voucher-row') + ']');

	    $infoBox.css('top', '');
	    $infoBox.css('width', '');
        
	    if ($infoLink.hasClass('is-active')) {
	        $infoLink.removeClass('is-active');
	        $infoBox.removeClass('is-active');
	    } else {
	        $infoLink.addClass('is-active');
	        $infoBox.addClass('is-active');
	        $infoBox.css('top', $currentRowItems.position().top + getMaxHeightOfElements($currentRowItems));
	        $infoBox.css('width', $evouchersList.outerWidth() * 0.98);
	        $currentRowItems.css('margin-bottom', $infoBox.outerHeight(true));
	    }
	});

	setCheckboxesState();
	setSendButtonState();
	setCategoryCounts();
	if ($filterCategory.val()) {
	    $categoryLink = $categoryLinks.filter('[data-category-id=' + $filterCategory.val() + ']');
	    toggleCategoryDisplay($categoryLink);
	}

	$checkboxes.on('change', function () {
		$(this).closest('li').toggleClass('is-active');
		setSendButtonState();
	});

	$(window).resize(function () {
	    fixVoucherPositioning();
	});
    
	function setSendButtonState() {
		if ($checkboxes.is(':checked')) {
			$sendButton.removeAttr('disabled');
		} else {
			$sendButton.attr('disabled', 'disabled');
		}
	}

	function setCheckboxesState() {
		$checkboxes.each(function () {
		    var $checkbox = $(this);
			$checkbox.closest('li').toggleClass('is-active', $checkbox.is(':checked'));
		});
	}

	function toggleCategoryDisplay($categoryLink) {
	    $categoryLinks.not($categoryLink[0]).removeClass('is-active');
	    $evouchersListItems.hide();

	    if ($categoryLink.hasClass('is-active')) {
	        $filterCategory.val('');
	        $categoryLink.removeClass('is-active');
	        $evouchersList.hide();
	        $noVouchersZone.hide();
	        $defaultWidgetZoneArea.fadeIn();
	    } else {
	        $categoryLink.addClass('is-active');
	        var filterDate = $.datepicker.parseDate(dateFormat, $dateFilterInput.val());
	        var filterCategoryId = $categoryLink.data('categoryId');
	        $filterCategory.val(filterCategoryId);
	        displayVouchers(filterDate, filterCategoryId);
	        $evouchersList.fadeIn(function () {
	            fixVoucherPositioning();
	        });
	        WizardScroll('.evouchers__list', 25);
	    }
	}

	function displayVouchers(filterDate, filterCategoryId) {
	    $evouchersListItems.hide();
		$defaultWidgetZoneArea.hide();
		$noVouchersZone.hide();
		var showNoVouchersMessage = $categoryLinks.is('.is-active');
		$evouchersListItems.each(function () {
			var $voucher = $(this);
			var voucherCategoryId = $voucher.data('categoryId');
			if (voucherCategoryId != filterCategoryId && filterCategoryId != 'all') {
				return;
			}

			var voucherDateValidFrom = $.datepicker.parseDate(dateFormat, $voucher.data('validFrom'));
			var voucherDateValidTo = $.datepicker.parseDate(dateFormat, $voucher.data('validTo'));
			if (voucherDateValidFrom > filterDate || voucherDateValidTo < filterDate) {
				return;
			}

			showNoVouchersMessage = false;
			$voucher.show();
		});
		if (showNoVouchersMessage) {
			$noVouchersZone.fadeIn();
		}
	}

	function fixVoucherPositioning() {
	    var currentRowTop, currentRow = 0;
	    $evouchersListItems.removeClass('evouchers__list__item--first-in-row');
	    $evouchersListItems.attr('data-voucher-row', '');
	    $evouchersListItems.each(function () {
	        var $voucher = $(this);
	        if ($voucher.is(':hidden'))
	            return;

	        if (typeof currentRowTop === 'undefined') {
	            currentRowTop = $voucher.position().top;
	        } else if (currentRowTop != $voucher.position().top) {
	            $voucher.addClass('evouchers__list__item--first-in-row');
	            currentRowTop = $voucher.position().top;
	            currentRow++;
	        }
	        $voucher.attr('data-voucher-row', currentRow);
	    });
	    $infoLinks.removeClass('is-active');
	    $infoBoxes.removeClass('is-active');
	    $infoBoxes.css('top', '');
	    $infoBoxes.css('width', '');
	    $evouchersListItems.css('margin-bottom', '');
	}

	function setCategoryCounts(filterDate) {
	    if (typeof filterDate === 'undefined') {
	        filterDate = $.datepicker.parseDate(dateFormat, $dateFilterInput.val());
	    }
	    var categoryCounts = [0, 0];
		$evouchersListItems.each(function () {
			var $voucher = $(this);
			var voucherCategoryId = $voucher.data('categoryId');
			var voucherDateValidFrom = $.datepicker.parseDate(dateFormat, $voucher.data('validFrom'));
			var voucherDateValidTo = $.datepicker.parseDate(dateFormat, $voucher.data('validTo'));
			if (voucherDateValidFrom > filterDate || voucherDateValidTo < filterDate) {
				return;
			}
			categoryCounts[voucherCategoryId]++;
		});
		$('.evouchers__category-filter__item[data-category-id=0] .evouchers__category-filter__count').text('(' + categoryCounts[0] + ')');
		$('.evouchers__category-filter__item[data-category-id=1] .evouchers__category-filter__count').text('(' + categoryCounts[1] + ')');
		$('.evouchers__category-filter__item[data-category-id=all] .evouchers__category-filter__count').text('(' + (categoryCounts[0]+categoryCounts[1]) + ')');
	}

	function getMaxHeightOfElements($els) {
	    return Math.max.apply(null, $els.map(function () {
	        return $(this).outerHeight();
	    }).get());
	}
};
$(function () {
    if ($('.execlounge--carousel').length > 0) {
        $('.execlounge--carousel').owlCarousel({
            loop: true,
            margin: 0,
            responsive: {
                0: {
                    items: 1,
                    nav: false,
                    dots: true
                },
                560: {
                    items: 1,
                    nav: true,
                    dots: true
                }
            },
            autoplay: true,
            autoplayspeed: 3000
        });

        //can't find a way to only have arrows
        $('.owl-prev').text('');
        $('.owl-prev').html('<i class="fa fa-angle-left"></i>');
        $('.owl-next').text('');
        $('.owl-next').html('<i class="fa fa-angle-right"></i>');
    }
});;
$(document).ready(function () {
    if ($('[data-search=faqs]').length > 0) {
        //Scrolls down the page if a question in the URL
        var question = getUrlParameter('question');
        if (question != '' && typeof question != 'undefined') {
            $('html, body').animate({
                scrollTop: eval($('.' + question).offset().top - 230)
            }, 1000);
        }

        //Scrolls down the page if a category is selected
        var category = getUrlParameter('category');
        if ((category != '' && typeof category != 'undefined') &&
            (question === '' || typeof question === 'undefined')) {
            $('html, body').animate({
                scrollTop: eval($('.resultsServerSide').offset().top - 120)
            }, 1000);
        }

        //prevent enter key submitting the form
        $('[data-search=faqs]').keydown(function (event) {
            if (event.keyCode == 13) {
                event.preventDefault();
                return false;
            }
        });

        $('[data-search=faqs]').autocomplete({
            minLength: -1,
            source: function (request, response) {
                $('.ajaxResults').empty();

                if (request.term.length < 2) {
                    $('.resultsServerSide').show();
                    $('.searchedForTextWrapper').hide();
                    return;
                }

                $.ajax({
                    url: '/WebServices/FAQSearch.asmx/SearchFAQs',
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    data: JSON.stringify({ searchTerm: request.term, category: '', terminalArea: '' }),
                    success: function (data) {
                        $('.searchedForText').text('You searched for: "' + request.term + '"');
                        $('.searchedForTextWrapper').show();

                        response($.map(data.d, function (item) {
                            var faq = { label: item.Question, Question: item.Question, Answer: item.Answer, Link: item.Link, Categories: item.Categories, TerminalAreas: item.TerminalAreas };
                            if (faq.Question !== 'none') {
                                $('.resultsServerSide').hide();
                                if (faq.Link === '') {
                                    $('.ajaxResults').append('<h4>' + faq.Question + '</h4>' +
                                        '<p>' + faq.Answer + '</p>' +
                                        '<p>In: ' + faq.Categories + '</p>' +
                                        '<hr>');
                                }
                                else {
                                    $('.ajaxResults').append('<h4>' + faq.Question + '</h4>' +
                                        '<p>' + faq.Answer + '</p>' +
                                        '<p>In: ' + faq.Categories + '</p>' +
                                        "<p><a href='" + faq.Link.replace('~', '') + "' class='btn'>Visit page <i class='fa fa-angle-right'></i></a></p>" +
                                        '<hr>');
                                }
                            }
                            else {
                                $('.resultsServerSide').hide();
                                $('.ajaxResults').empty().append('<h4>No Results found, please try again</h4>');
                            }
                        }));
                    }
                });
            }
        });
    }

    function getUrlParameter(sParam) {
        var sPageURL = window.location.search.substring(1),
            sURLVariables = sPageURL.split('&'),
            sParameterName,
            i;

        for (i = 0; i < sURLVariables.length; i++) {
            sParameterName = sURLVariables[i].split('=');

            if (sParameterName[0] === sParam) {
                return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
            }
        }
        return '';
    };
});;
$(document).ready(function () {
    if ($('[data-search=flights]').length > 0) {
        $('.flight-search--field [data-search=flights]').keydown(function (event) {
            if (event.keyCode == 13) {
                $('.flight-search--field .results a.ui-menu-item.ui-state-focus')[0].click();
            }
        });

        $('[data-search=flights]').autocomplete({            
            source: function (request, response) {
                console.log($("body").hasClass("design-b"));
                $.ajax({
                    url: '/WebServices/FlightInformation.asmx/FlightArrivalsAndDepartures',
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    data: JSON.stringify({ searchTerm: request.term, exactflight: false }),
                    success: function (data) {
                        if (data.d.length > 0) {
                            response($.map(data.d, function (item) {

                                return {
                                    label: item.fltnmbr + ' ' + item.origdest,
                                    fltnmbr: item.fltnmbr,
                                    value: item.fltnmbr,
                                    schedtime: item.schedtime,
                                    origdest: item.origdest,
                                    isArrival: item.isArrival,
                                    imgPath: item.imgPath
                                };
                            }));
                        } else {
                            var emptyResult = [1];
                            response($.map(emptyResult,
                                function () {
                                    return { value: '0' };
                                }));
                        }
                    }
                });
            },
            //focus: function (event, ui) {
            //    if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
            //        var element = $('.flight-search--field .ui-state-focus');
            //        window.location.href = $(element).attr('href');
            //    }
            //},
            open: function () {
                $(this).data('uiAutocomplete').menu.element.removeClass();
                $(this).data('uiAutocomplete').menu.element.addClass('results');
                $(this).data('uiAutocomplete').menu.element.removeAttr('style');
                $('.flight-search--field').append($(this).data('uiAutocomplete').menu.element);

            },
            close: function () {
            }
        }).data('ui-autocomplete')._renderItem = function (ul, item) {

            ul.addClass('results');
            var returnString;

            if (item.value != '0') {
                var term = this.term.split(' ').join('|');

                var regex = new RegExp('(' + term + ')', 'gi');

                var highlightFlightNumberText = item.fltnmbr.replace(regex, '<b>$1</b>');

                var highlightDestText = item.origdest.replace(regex, '<b>$1</b>');

                var toOrFrom;
                var departingArriving;

                if (item.isArrival) {
                    toOrFrom = 'From';
                    departingArriving = 'Arrive';
                } else {
                    toOrFrom = 'To';
                    departingArriving = 'Depart';
                }

                if ($("body").hasClass("design-b")) {
                    returnString = $('<a href="/ab-testing/flights/flight-detail?fltnmbr=' + item.fltnmbr + '"></a>');
                } else {
                    returnString = $('<a href="/flights/flight-detail?fltnmbr=' + item.fltnmbr + '"></a>');
                }

                var content = '<div class="results--image">' +
                    item.imgPath +
                    '<br/>' +
                    highlightFlightNumberText +
                    '</div>' +
                    '<div class="results--desination">' +
                    '<div><span>' + toOrFrom + '</span><h4>' + highlightDestText + '</h4></div>' +
                    '<div><span>' + departingArriving + '</span><h4>' + item.schedtime + '</h4></div>' +
                    '</div>';

                returnString.append(content);
            } else {
                item.value = '';
                returnString = $('<a href="/search?q=' + this.term + '">Sorry, we can\'t find a flight with that information. Click here to search our site for "' + this.term + '".</a>');
            }

            return $(returnString).data('ui-autocomplete-item', item).appendTo(ul);
        };
    }
});;
$(document).ready(function () {
    var $flightCardJourney = $('.flight-card--journey');
    if ($flightCardJourney.length > 0) {
        //toggle of button on flight information
        var currentHeight = $flightCardJourney.outerHeight();
        if (currentHeight < 320) {
            $('.flight-card--journey__expand').hide();
            $('.flight-card--save ').css('box-shadow', '0 -3px 3px 0 rgba(0,0,0,.2)');
        }
        else {
            $flightCardJourney.animate({ height: '320' });
        }
        $flightCardJourney.addClass('closed');

        $('#expand').on('click', function () {
            if ($('.flight-card--journey').hasClass('closed')) {
                $('.flight-card--journey').animate({ height: currentHeight });
                $('.flight-card--save ').css('box-shadow', '0 -3px 3px 0 rgba(0,0,0,.2)');
                $('.flight-card--journey').removeClass('closed');
                $('.flight-card--journey__expand').fadeIn('slow').html("<i class='fa fa-chevron-up'</i>");
            }
            else {
                $('.flight-card--journey').animate({ height: '320' });
                $('.flight-card--journey').addClass('closed');
                $('.flight-card--journey__expand').fadeIn('slow').html("<i class='fa fa-chevron-down'</i>");
                $('.flight-card--save ').css('box-shadow', '0 -10px 3px 0 rgba(0,0,0,.2)');
            }
        });

        if ($.cookie('userSavedFlight') === location.search.replace('?fltnmbr=', '')) {
            $('.toggle').hide();
            $('.saveflight').html("Saved <i class='fa fa-check'></i> ");
        }

        if ($.cookie('userSavedFlight') !== location.search.replace('?fltnmbr=', '')
            && typeof $.cookie('userSavedFlight') !== 'undefined') {
            $('.saveflight').html("Replace Flight <i class='fa fa-angle-right'></i>");
        }

        $('.lower-saveflight-button').on('click', function () {
            ShowFlightSavedMessage();
        });

        $('.saveflight').on('click', function () {
            var $headerFlight = $('.header-flight');
            $headerFlight.hide();

            if (window.location.search) {
                var flightNumber;
                var queryString = window.location.search.substring(1);
                var queryParams = queryString.split('&');
                for (var i = 0; i < queryParams.length; i++) {
                    var queryParam = queryParams[i].split('=');
                    if (decodeURIComponent(queryParam[0]) == 'fltnmbr') {
                        flightNumber = decodeURIComponent(queryParam[1]);
                    }
                }

                if (flightNumber) {
                    if (typeof $.cookie('userSavedFlight') !== 'undefined') {
                        $.removeCookie('userSavedFlight');
                    }

                    $.cookie('userSavedFlight', flightNumber, { path: '/;SameSite=Lax', secure: true });

                    var template = $('#header-flight-info-template').html();
                    Mustache.parse(template);

                    var flightInfo = {
                        'flightNumber': $.cookie('userSavedFlight'),
                        'airlineLogo': $('#hdnImage').val(),
                        'fromTo': $('#hdnToOrFrom').val(),
                        'airport': $('#hdnOrgDest').val(),
                        'departingArriving': $('#hdnToOrFrom').val() === 'To' ? 'Depart' : 'Arrive',
                        'scheduledTime': $('#hdnTime').val(),
                        'status': $('#hdnFlightStatus').val()
                    };

                    var rendered = Mustache.render(template, flightInfo);
                    $('#header-flight-info').html(rendered);
                    setTimeout(function () { $headerFlight.show(); }, 0);

                    $('.saveflight').html('Saved <i class="fa fa-check"></i>');
                    $('.toggle').fadeOut();
                }
            }
        });
    }
});;
$(document).ready(function () {
	const saveButtonActiveClass = 'active';
    if (getUrlParameter('listmode') === 'arrivals') {
        $('.flights ul.flight-tabs li').removeClass('current');
        $('.flights .flight-tab--content').removeClass('current');

        $('*[data-tab="arrivals"]').addClass('current');
        $('.flights #arrivals').addClass('current');
    }

    if (typeof $.cookie('userSavedFlight') !== 'undefined') {
        $('.flightSave').html('Replace Flight <i class="fa fa-angle-right"></i>');
        
        $('.saveflightList').each(function () {
            var flightNo = $(this).find('.flightNumber').text();
            if ($.cookie('userSavedFlight') === flightNo) {
                $(this).find('.flightSave').html('Saved <i class="fa fa-check"></i>');
            }
        });

        //Buttons on AB testing page
		$(".ab-flightSave").removeClass(saveButtonActiveClass);
        $('.ab-flightSave').html('Replace');

        $('.ab-saveflightList').each(function () {
            var flightNo = $(this).data('flightno');
            if ($.cookie('userSavedFlight') === flightNo) {
                $(".ab-flightSave[data-flightno=" + flightNo + "]").html('<i class="fa fa-check"></i> Saved');
				$(".ab-flightSave[data-flightno=" + flightNo + "]").addClass(saveButtonActiveClass);
            }
        });
    }

    //for the ab-testing flight listing widget
    //the html/functionality has changed slightly, cannot reuse the click function below
    $('.ab-saveflightList').on('click', function () {
        var $this = $(this);
        var $headerFlight = $('.ab-header-flight');
        $headerFlight.hide();

        var flightNo = $this.data("flightno");
        if (flightNo) {
            if (typeof $.cookie('userSavedFlight') !== 'undefined') {
                $.removeCookie('userSavedFlight');
            }

            $.cookie('userSavedFlight', flightNo, { path: '/;SameSite=Lax', secure: true });

            var arrivedDeparting;
            var fromTo;
            if ($this.hasClass('departures')) {
                arrivedDeparting = 'Depart';
                fromTo = 'To';
            } else {
                arrivedDeparting = 'Arrive';
                fromTo = 'From';
            }

			$('.ab-flightSave').removeClass(saveButtonActiveClass);
            $('.ab-flightSave').html('Replace');

            $(".ab-flightSave[data-flightno=" + flightNo + "]").html('<i class="fa fa-check"></i> Saved');
			$(".ab-flightSave[data-flightno=" + flightNo + "]").addClass(saveButtonActiveClass);

            var airlineImage;
            var $airlineLogo = $this.data("airlinelogo");
            if (typeof $airlineLogo === 'undefined') {
                airlineImage = '<span class="icon">V</span>';
            } else {
                airlineImage = '<img src="' + $airlineLogo + '" alt="' + $this.data("airlinelogoalt") + '" />';
            }

            var template = $('#AB-header-flight-info-template').html();
            Mustache.parse(template);

            var $status = $this.data('flightstatus');
            var flightInfo = {
                'flightNumber': $.cookie('userSavedFlight'),
                'airlineLogo': airlineImage,
                'fromTo': fromTo,
                'airport': $this.data('flightorgdest'),
                'departingArriving': arrivedDeparting,
                'scheduledTime': $this.data('flighttime'),
                'status': $status,
                'statusCssClass': $this.data('flightstatusclass'),
                'detailsUrl': $this.data('detailsurl')

            };
            
            $('.ab-header-flight-placeholder').show();
			$('.ab-header-flight').addClass('fadeInUp');

            var rendered = Mustache.render(template, flightInfo);
			$('#ab-header-flight-info').html(rendered);

			// setup clone
			$('.ab-header-flight-placeholder.fixed').remove();
			var $abHeaderFlightPlaceholder = $('.ab-header-flight-placeholder');
			var $abHeaderFlightPlaceholderClone = $abHeaderFlightPlaceholder.clone().insertAfter($abHeaderFlightPlaceholder);
			$abHeaderFlightPlaceholderClone.addClass('fixed');

			$(window).on('scroll', function() {
				var scrollTop = $(window).scrollTop();
				$abHeaderFlightPlaceholderClone.toggle($abHeaderFlightPlaceholder.offset().top < scrollTop);
			});

			setTimeout(function() {
				$headerFlight.show();
				$abHeaderFlightPlaceholderClone.find('.ab-header-flight').show();
			}, 0);
        }
    });

    $('.saveflightList').on('click', function () {
        var $this = $(this);
        ShowFlightSavedMessage();
        var $headerFlight = $('.header-flight');
        $headerFlight.hide();

        var flightNo = $this.find('.flightNumber').text();
        if (flightNo) {
            if (typeof $.cookie('userSavedFlight') !== 'undefined') {
                $.removeCookie('userSavedFlight');
            }

            $.cookie('userSavedFlight', flightNo, { path: '/;SameSite=Lax', secure: true });

            var arrivedDeparting;
            var fromTo;
            if ($this.hasClass('departures')) {
                arrivedDeparting = 'Depart';
                fromTo = 'To';
            } else {
                arrivedDeparting = 'Arrive';
                fromTo = 'From';
            }

            $('.flightSave').html('Replace Flight <i class="fa fa-angle-right"></i>');
            $this.find('.flightSave').html('Saved <i class="fa fa-check"></i>');

            var airlineImage;
            var $airlineLogo = $this.find('img');
            if (typeof $airlineLogo.attr('src') === 'undefined') {
                airlineImage = '<span class="icon">V</span>';
            } else {
                airlineImage = '<img src="' + $this.find('img').attr('src') + '" alt="' + $airlineLogo.attr('alt') + '" />';
            }

            var template = $('#header-flight-info-template').html();
            Mustache.parse(template);

            var $status = $this.find('.flightStatus');
            var flightInfo = {
                'flightNumber': $.cookie('userSavedFlight'),
                'airlineLogo': airlineImage,
                'fromTo': fromTo,
                'airport': $this.find('.flightOrgDest').text(),
                'departingArriving': arrivedDeparting,
                'scheduledTime': $this.find('.flightTime').text(),
                'status': $status.text(),
                'statusCssClass': $status.attr('class')
            };

            $('.header-flight-placeholder').show();
            $('.header-flight').addClass('fadeInUp');
            var rendered = Mustache.render(template, flightInfo);
            $('#header-flight-info').html(rendered);
            setTimeout(function () { $headerFlight.show(); }, 0);
        }
    });

    function tabClick(evt, tab) {
        //retailListing--sections__selected
        var i, tabcontent, tablinks;
        tabcontent = document.getElementsByClassName("js--tab");
        for (i = 0; i < tabcontent.length; i++) {
            tabcontent[i].style.display = "none";

            //display the right one
            if (tabcontent[i].classList.contains(tab))
                tabcontent[i].style.display = "block";
        }
        tablinks = document.getElementsByClassName("js--tab-link");
        for (i = 0; i < tablinks.length; i++) {
            tablinks[i].className = tablinks[i].className.replace(" retailListing--sections__selected", "");

            //display the right one
            if (tablinks[i].classList.contains(tab))
                tablinks[i].className += " retailListing--sections__selected";
        }

        const event = new Event('tab-switch');
        document.dispatchEvent(event);
    }

    function getEarlierFlights(evt, tab) {
        //tab = departures or arrivals
        var i, firstActiveIndex = 0, flightItems = document.querySelectorAll(".js--tab." + tab + " .flightListing__table__items__item:not(.flightListing__table__items__date)");
        var flightItemsMob = document.querySelectorAll(".js--tab." + tab + " .flightListing__table__items__item--mobile");

        //get first active item
        for (i = 0; i < flightItems.length; i++) {
            if (flightItems[i].classList.contains("active")) {
                firstActiveIndex = i;
                break;
            }
        }

        //get 5 earlier flights before the first active one
        var earliestFlightIndex = firstActiveIndex - 5;
        if (earliestFlightIndex < 0) {
            earliestFlightIndex = 0;

            //grey out the 'see later flights' link
            $(".flightListing__moreFlights--earlier[data-tab=" + tab + "]").addClass("disabled");
        }

        for (i = earliestFlightIndex; i < firstActiveIndex; i++) {
            if (flightItems[i]) {
                flightItems[i].classList.add("active");
				$(flightItems[i]).prev(".flightListing__table__items__date").addClass("active");
			}
			
            if (flightItemsMob[i])
                flightItemsMob[i].classList.add("active");
        }
    }

    function getUrlParameter(sParam) {
        var sPageURL = window.location.search.substring(1),
            sURLVariables = sPageURL.split('&'),
            sParameterName,
            i;

        for (i = 0; i < sURLVariables.length; i++) {
            sParameterName = sURLVariables[i].split('=');

            if (sParameterName[0] === sParam) {
                return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
            }
        }
        return '';
    };

    function getLaterFlights(evt, tab) {
        //tab = departures or arrivals
        var i, lastActiveIndex = 0, flightItems = document.querySelectorAll(".js--tab." + tab + " .flightListing__table__items__item:not(.flightListing__table__items__date)");
        var flightItemsMob = document.querySelectorAll(".js--tab." + tab + " .flightListing__table__items__item--mobile");

        //get last active item
        for (i = flightItems.length - 1; i >= 0; i--) {
            if (flightItems[i].classList.contains("active")) {
                lastActiveIndex = i;
                break;
            }
        }

        var latestFlightIndex = lastActiveIndex + 5;
        if (latestFlightIndex > flightItems.length) {
            latestFlightIndex = flightItems.length;

            //grey out the 'see later flights' link
            $(".flightListing__moreFlights--later[data-tab=" + tab + "]").addClass("disabled");
        }

        for (i = lastActiveIndex; i < latestFlightIndex; i++) {
            if (flightItems[i]) {
		        flightItems[i].classList.add("active");
		        $(flightItems[i]).prev(".flightListing__table__items__date").addClass("active");
	        }

            if (flightItemsMob[i])
                flightItemsMob[i].classList.add("active");
        }
    }

    $(".js--tab-link.departures, .js--tab-link.arrivals").on("click", function (evt) {
        tabClick(evt, $(this).data("tab"));
    });

    $(".flightListing__moreFlights--earlier").on("click", function (evt) {
        getEarlierFlights(evt, $(this).data("tab"));
    });

    $(".flightListing__moreFlights--later").on("click", function (evt) {
        getLaterFlights(evt, $(this).data("tab"));
    });

    window.addEventListener('load', function () {
        if (getUrlParameter('listmode') === 'arrivals') {
            $("#arrivalsOpenOnLoad").trigger("click");
        } else {
            $("#departuresOpenOnLoad").trigger("click");
        }
    }, false);
});;
$(document).ready(function () {
    if ($('[data-search=flights]').length > 0) {
        $('.flight-search--field [data-search=flights]').keydown(function (event) {
            if (event.keyCode == 13) {
                $('.flight-search--field .results a.ui-menu-item.ui-state-focus')[0].click();
            }
        });
		
		if ($('[data-search=flights]').length > 0) {
			
            $('[data-search=flights]').autocomplete({
                minLength: 1,
				source: function (request, response) {
                    $.ajax({
                        url: '/WebServices/FlightInformation.asmx/FlightArrivalsAndDepartures',
                        type: 'POST',
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        data: JSON.stringify({ searchTerm: request.term, exactflight: false }),
						success: function (data) {
							if (data.d.length > 0) {
                                response($.map(data.d, function (item) {
                                    return {
                                        label: item.fltnmbr + ' ' + item.origdest,
                                        fltnmbr: item.fltnmbr,
                                        value: item.fltnmbr,
                                        schedtime: item.schedtime,
                                        origdest: item.origdest,
                                        isArrival: item.isArrival,
                                        imgPath: item.imgPath
                                    };
                                }));
							} else {
                                var emptyResult = [1];
                                response($.map(emptyResult, function () {
                                    return {
                                        value: '0'
                                    };
                                }));

                            }

                        }
                    });
                },
                //focus: function (event, ui) {
                //    if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
                //        var element = $('.flight-search--field .ui-state-focus');
                //        window.location.href = $(element).attr('href');
                //    }
                //},
                open: function () {
                    $(this).data('uiAutocomplete').menu.element.removeClass();
                    $(this).data('uiAutocomplete').menu.element.addClass('results');
                    $(this).data('uiAutocomplete').menu.element.removeAttr('style');
                    $('.flight-search--field').append($(this).data('uiAutocomplete').menu.element);
                    FlightSearchDropdownHeightSet();
                },
                close: function () {

                }
			}).data('ui-autocomplete')._renderItem = function (ul, item) {				
                ul.addClass('results');
                var returnString = '';
                if (item.value != '0') {
                    var term = this.term.split(' ').join('|');
                    var regex = new RegExp('(' + term + ')', 'gi');
                    var highlightFlightNumberText = item.fltnmbr.replace(regex, '<b>$1</b>');
                    var highlightDestText = item.origdest.replace(regex, '<b>$1</b>');

                    if ($("body").hasClass("design-b")) {
                        returnString = $("<a href='/ab-testing/flights/flight-detail?fltnmbr=" + item.fltnmbr + "'></a>");
                    } else {
                        returnString = $("<a href='/flights/flight-detail?fltnmbr=" + item.fltnmbr + "'></a>");
                    }                    

                    var toFrom;
                    var arriveDepart;
                    if (item.isArrival) {
                        arriveDepart = 'Arrive';
                        toFrom = 'From';
                    } else {
                        arriveDepart = 'Depart';
                        toFrom = 'To';
                    }

                    returnString
                        .append("<div class='results--image'>" +
                            item.imgPath +
                            '<br/>' +
                            highlightFlightNumberText +
                            '</div>' +
                            "<div class='results--desination'>" +
                            '<div><span>' + toFrom + '</span><h4>' + highlightDestText + '</h4></div>' +
                            '<div><span>' + arriveDepart + '</span><h4>' + item.schedtime + '</h4></div>' +
                            '</div>');
				} else {
					item.value = '';
					returnString = $("<a href='/search?q=" + escape(this.term) + "' >Sorry, we can't find a flight with that information. Click here to search our site for '" + escape(this.term) + "'.</a>");
                }

                return $(returnString).data('ui-autocomplete-item', item).appendTo(ul);
            };
        }
    }
});;
// todo: ensure labels work correctly with no javascript
$(function () {
    var $floatLabelInputs = $('.float-label input');
    setFloatLabels($floatLabelInputs);
    $floatLabelInputs.on('change keypress keydown keyup', function () {
        setFloatLabels($(this));
    });
});

function setFloatLabels($inputs) {
    $inputs.each(function () {
        var $input = $(this),
            $control = $input.closest('.form__control');
        if ($input.val() != '' && !$control.hasClass('float-label--active')) {
            $control.addClass('float-label--active');
        } else if ($input.val() == '' && $control.hasClass('float-label--active')) {
            $control.removeClass('float-label--active');
        }
    });
};
$(function () {
    $('#btnGetQuote[data-get-quote]').each(function () {
        var $btn = $(this);
        var conversionType = $btn.data('abTest');
        var quoteType = $btn.data('getQuote');
        $btn.on('click', function (e) {
            e.preventDefault();

            if (conversionType !== null && conversionType !== '') logConversion(conversionType);

            doFormPost(quoteType);
        });
    });

    $('.timepicker').each((i, el) => {
        const $el = $(el);
        const $dataTip = $el.closest('*[data-tip]');

        if ($dataTip.length) {

            const dataTipTargetId = $dataTip.attr('data-tip-target');
            const $dataTipTarget = dataTipTargetId ? $('#' + dataTipTargetId) : $el;

            if ($dataTipTarget.length) {

                $dataTipTarget.on('focusin mouseover', () => {
                    $dataTip.addClass('show');
                });

                $dataTipTarget.on('focusout mouseout', () => {
                    $dataTip.removeClass('show');
                });

            }
        }
    });
});

function splitAndFormatDate(myDate) {
    var splitDate = myDate.split('/');
    var dateFormatted = splitDate[2] + '-' + splitDate[1] + '-' + splitDate[0];

    return dateFormatted;
}

function generateDateTimeObject(date, time) {
    var splitDate = date.split('/');
    var splitTime = time.split(':');
    return new Date(splitDate[2], Number(splitDate[1]) - 1, splitDate[0], splitTime[0], splitTime[1]);
}

function validateDates(dateFrom, timeFrom, dateTo, timeTo) {
    var dateTimeFrom = generateDateTimeObject(dateFrom, timeFrom);
    var dateTimeTo = generateDateTimeObject(dateTo, timeTo);
    return dateTimeFrom < dateTimeTo;
}

function doFormPost(quoteType) {
    var parkingQuoteUrl = 'https://parking.london-luton.co.uk/search?dateFrom=';
    var bookingQuoteUrl = 'https://booking.london-luton.co.uk/search?dateFrom=';
    var invalidDatesError = $('.parking-ribbon__invalid-dates-error');

    if (window.location.href.indexOf('quba.co.uk') > -1) {
        parkingQuoteUrl = 'https://lla.testing.airportx.co.uk/search?dateFrom=';
        bookingQuoteUrl = 'https://booking.lla.testing.airportx.co.uk/search?dateFrom=';
    }

    switch (quoteType) {
        case 'parking': {
            var validDates = validateDates(
                $('#entry-date').val(),
                $('#entry-time').val(),
                $('#leaving-date').val(),
                $('#leaving-time').val()
            );
            if (validDates) {
                window.location.href =
                    parkingQuoteUrl +
                    splitAndFormatDate($('#entry-date').val()) +
                    '&timeFrom=' +
                    $('#entry-time').val() +
                    '&dateTo=' +
                    splitAndFormatDate($('#leaving-date').val()) +
                    '&timeTo=' +
                    $('#leaving-time').val() +
                    '&direction=OUTBOUND&returnTrip=true';
            } else {
                invalidDatesError.show();
            }
            break;
        }
        case 'executive-lounge':
            window.location.href =
                bookingQuoteUrl +
                splitAndFormatDate($('#flight-date').val()) +
                '&timeFrom=' +
                $('#flight-time').val() +
                '&direction=OUTBOUND&returnTrip=false';
            break;
        case 'fast-track':
            window.location.href =
                bookingQuoteUrl +
                splitAndFormatDate($('#departure').val()) +
                '&timeFrom=' +
                $('#flight-time').val() +
                '&direction=OUTBOUND&returnTrip=false';
            break;
    }
};
$(function () {
    $('iframe[src*="player.vimeo.com"]').each(function () {
        var $iframe = $(this);
        var ratio = $iframe.is('[width][height]')
            ? $iframe.attr('height') / $iframe.attr('width')
            : $iframe.outerHeight() / $iframe.outerWidth();

        $iframe.wrap('<div class="iframe-wrapper" style="padding-top:' + ratio*100 + '%;"></div>');
    });
});;
$(function () {
    $('[data-input-info]').each(function() {
        var $el = $(this);
        var $target = $('#' + $el.data('inputInfo'));
        $el.on('click', function () {
            $el.toggleClass('is-active');
            $target.toggleClass('is-active');
        });
    });
});;
/**
 * @preserve jQuery DateTimePicker plugin v2.4.5
 * @homepage http://xdsoft.net/jqplugins/datetimepicker/
 * (c) 2014, Chupurnov Valeriy.
 */
// See Custom: notes for customn functionality
/*global document,window,jQuery,setTimeout,clearTimeout,HighlightedDate,getCurrentValue*/
;(function (factory) {
	if ( typeof define === 'function' && define.amd ) {
		// AMD. Register as an anonymous module.
		define(['jquery', 'jquery-mousewheel', 'date-functions'], factory);
	} else if (typeof exports === 'object') {
		// Node/CommonJS style for Browserify
		module.exports = factory;
	} else {
		// Browser globals
		factory(jQuery);
	}
}(function ($) {
	'use strict';
	var default_options  = {
		i18n: {
			ar: { // Arabic
				months: [
					"كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
				],
				dayOfWeekShort: [
					"ن", "ث", "ع", "خ", "ج", "س", "ح"
				],
				dayOfWeek: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"]
			},
			ro: { // Romanian
				months: [
					"Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"
				],
				dayOfWeekShort: [
					"Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"
				],
				dayOfWeek: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"]
			},
			id: { // Indonesian
				months: [
					"Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
				],
				dayOfWeekShort: [
					"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"
				],
				dayOfWeek: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"]
			},
			is: { // Icelandic
				months: [
					"Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"
				],
				dayOfWeekShort: [
					"Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau"
				],
				dayOfWeek: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"]
			},
			bg: { // Bulgarian
				months: [
					"Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
				],
				dayOfWeekShort: [
					"Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
				],
				dayOfWeek: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"]
			},
			fa: { // Persian/Farsi
				months: [
					'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'
				],
				dayOfWeekShort: [
					'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
				],
				dayOfWeek: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"]
			},
			ru: { // Russian
				months: [
					'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
				],
				dayOfWeekShort: [
					"Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
				],
				dayOfWeek: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
			},
			uk: { // Ukrainian
				months: [
					'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
				],
				dayOfWeekShort: [
					"Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт"
				],
				dayOfWeek: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"]
			},
			en: { // English
				months: [
					"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
				],
				dayOfWeekShort: [
					"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
				],
				dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
			},
			el: { // Ελληνικά
				months: [
					"Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"
				],
				dayOfWeekShort: [
					"Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
				],
				dayOfWeek: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"]
			},
			de: { // German
				months: [
					'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
				],
				dayOfWeekShort: [
					"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
				],
				dayOfWeek: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
			},
			nl: { // Dutch
				months: [
					"januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
				],
				dayOfWeekShort: [
					"zo", "ma", "di", "wo", "do", "vr", "za"
				],
				dayOfWeek: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]
			},
			tr: { // Turkish
				months: [
					"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
				],
				dayOfWeekShort: [
					"Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
				],
				dayOfWeek: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"]
			},
			fr: { //French
				months: [
					"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
				],
				dayOfWeekShort: [
					"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
				],
				dayOfWeek: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
			},
			es: { // Spanish
				months: [
					"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
				],
				dayOfWeekShort: [
					"Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
				],
				dayOfWeek: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]
			},
			th: { // Thai
				months: [
					'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
				],
				dayOfWeekShort: [
					'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
				],
				dayOfWeek: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"]
			},
			pl: { // Polish
				months: [
					"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
				],
				dayOfWeekShort: [
					"nd", "pn", "wt", "śr", "cz", "pt", "sb"
				],
				dayOfWeek: ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"]
			},
			pt: { // Portuguese
				months: [
					"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
				],
				dayOfWeekShort: [
					"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
				],
				dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
			},
			ch: { // Simplified Chinese
				months: [
					"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
				],
				dayOfWeekShort: [
					"日", "一", "二", "三", "四", "五", "六"
				]
			},
			se: { // Swedish
				months: [
					"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September",  "Oktober", "November", "December"
				],
				dayOfWeekShort: [
					"Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
				]
			},
			kr: { // Korean
				months: [
					"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
				],
				dayOfWeekShort: [
					"일", "월", "화", "수", "목", "금", "토"
				],
				dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
			},
			it: { // Italian
				months: [
					"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
				],
				dayOfWeekShort: [
					"Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
				],
				dayOfWeek: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
			},
			da: { // Dansk
				months: [
					"January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
				],
				dayOfWeekShort: [
					"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
				],
				dayOfWeek: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"]
			},
			no: { // Norwegian
				months: [
					"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
				],
				dayOfWeekShort: [
					"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
				],
				dayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']
			},
			ja: { // Japanese
				months: [
					"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
				],
				dayOfWeekShort: [
					"日", "月", "火", "水", "木", "金", "土"
				],
				dayOfWeek: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"]
			},
			vi: { // Vietnamese
				months: [
					"Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
				],
				dayOfWeekShort: [
					"CN", "T2", "T3", "T4", "T5", "T6", "T7"
				],
				dayOfWeek: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"]
			},
			sl: { // Slovenščina
				months: [
					"Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
				],
				dayOfWeekShort: [
					"Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"
				],
				dayOfWeek: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"]
			},
			cs: { // Čeština
				months: [
					"Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
				],
				dayOfWeekShort: [
					"Ne", "Po", "Út", "St", "Čt", "Pá", "So"
				]
			},
			hu: { // Hungarian
				months: [
					"Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
				],
				dayOfWeekShort: [
					"Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
				],
				dayOfWeek: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
			},
			az: { //Azerbaijanian (Azeri)
				months: [
					"Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"
				],
				dayOfWeekShort: [
					"B", "Be", "Ça", "Ç", "Ca", "C", "Ş"
				],
				dayOfWeek: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"]
			},
			bs: { //Bosanski
				months: [
					"Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
				],
				dayOfWeekShort: [
					"Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
				],
				dayOfWeek: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
			},
			ca: { //Català
				months: [
					"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
				],
				dayOfWeekShort: [
					"Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"
				],
				dayOfWeek: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"]
			},
			'en-GB': { //English (British)
				months: [
					"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
				],
				dayOfWeekShort: [
					"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
				],
				dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
			},
			et: { //"Eesti"
				months: [
					"Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"
				],
				dayOfWeekShort: [
					"P", "E", "T", "K", "N", "R", "L"
				],
				dayOfWeek: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"]
			},
			eu: { //Euskara
				months: [
					"Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"
				],
				dayOfWeekShort: [
					"Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La."
				],
				dayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']
			},
			fi: { //Finnish (Suomi)
				months: [
					"Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"
				],
				dayOfWeekShort: [
					"Su", "Ma", "Ti", "Ke", "To", "Pe", "La"
				],
				dayOfWeek: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"]
			},
			gl: { //Galego
				months: [
					"Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec"
				],
				dayOfWeekShort: [
					"Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab"
				],
				dayOfWeek: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"]
			},
			hr: { //Hrvatski
				months: [
					"Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"
				],
				dayOfWeekShort: [
					"Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
				],
				dayOfWeek: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
			},
			ko: { //Korean (한국어)
				months: [
					"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
				],
				dayOfWeekShort: [
					"일", "월", "화", "수", "목", "금", "토"
				],
				dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
			},
			lt: { //Lithuanian (lietuvių)
				months: [
					"Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"
				],
				dayOfWeekShort: [
					"Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"
				],
				dayOfWeek: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"]
			},
			lv: { //Latvian (Latviešu)
				months: [
					"Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"
				],
				dayOfWeekShort: [
					"Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St"
				],
				dayOfWeek: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"]
			},
			mk: { //Macedonian (Македонски)
				months: [
					"јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"
				],
				dayOfWeekShort: [
					"нед", "пон", "вто", "сре", "чет", "пет", "саб"
				],
				dayOfWeek: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"]
			},
			mn: { //Mongolian (Монгол)
				months: [
					"1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар"
				],
				dayOfWeekShort: [
					"Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням"
				],
				dayOfWeek: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"]
			},
			'pt-BR': { //Português(Brasil)
				months: [
					"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
				],
				dayOfWeekShort: [
					"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"
				],
				dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
			},
			sk: { //Slovenčina
				months: [
					"Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"
				],
				dayOfWeekShort: [
					"Ne", "Po", "Ut", "St", "Št", "Pi", "So"
				],
				dayOfWeek: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"]
			},
			sq: { //Albanian (Shqip)
				months: [
					"Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
				],
				dayOfWeekShort: [
					"Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"
				],
				dayOfWeek: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"]
			},
			'sr-YU': { //Serbian (Srpski)
				months: [
					"Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
				],
				dayOfWeekShort: [
					"Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub"
				],
				dayOfWeek: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"]
			},
			sr: { //Serbian Cyrillic (Српски)
				months: [
					"јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар"
				],
				dayOfWeekShort: [
					"нед", "пон", "уто", "сре", "чет", "пет", "суб"
				],
				dayOfWeek: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"]
			},
			sv: { //Svenska
				months: [
					"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
				],
				dayOfWeekShort: [
					"Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
				],
				dayOfWeek: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]
			},
			'zh-TW': { //Traditional Chinese (繁體中文)
				months: [
					"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
				],
				dayOfWeekShort: [
					"日", "一", "二", "三", "四", "五", "六"
				],
				dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
			},
			zh: { //Simplified Chinese (简体中文)
				months: [
					"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
				],
				dayOfWeekShort: [
					"日", "一", "二", "三", "四", "五", "六"
				],
				dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
			},
			he: { //Hebrew (עברית)
				months: [
					'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'
				],
				dayOfWeekShort: [
					'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת'
				],
				dayOfWeek: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
			},
			hy: { // Armenian
				months: [
					"Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"
				],
				dayOfWeekShort: [
					"Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ"
				],
				dayOfWeek: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"]
			},
            kg: { // Kyrgyz
                months: [
                    'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'
                ],
                dayOfWeekShort: [
                    "Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише"
                ],
				dayOfWeek: [
                    "Жекшемб", "Дүйшөмб", "Шейшемб", "Шаршемб", "Бейшемби", "Жума", "Ишенб"
                ]
            }
		},
		value: '',
		rtl: false,

		format:	'Y/m/d H:i',
		formatTime:	'H:i',
		formatDate:	'Y/m/d',

		startDate:	false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
		step: 60,
		monthChangeSpinner: true,

		closeOnDateSelect: false,
		closeOnTimeSelect: true,
		closeOnWithoutClick: true,
		closeOnInputClick: true,

		timepicker: true,
		datepicker: true,
		weeks: false,

		defaultTime: false,	// use formatTime format (ex. '10:00' for formatTime:	'H:i')
		defaultDate: false,	// use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')

		minDate: false,
		maxDate: false,
		minTime: false,
		maxTime: false,
		disabledMinTime: false,
		disabledMaxTime: false,

		allowTimes: [],
		opened: false,
		initTime: true,
		inline: false,
		theme: '',

		onSelectDate: function () {},
		onSelectTime: function () {},
		onChangeMonth: function () {},
		onChangeYear: function () {},
		onChangeDateTime: function () {},
		onShow: function () {},
		onClose: function () {},
		onGenerate: function () {},

		withoutCopyright: true,
		inverseButton: false,
		hours12: false,
		next: 'xdsoft_next',
		prev : 'xdsoft_prev',
		dayOfWeekStart: 0,
		parentID: 'body',
		timeHeightInTimePicker: 25,
		timepickerScrollbar: true,
		todayButton: true,
		prevButton: true,
		nextButton: true,
		defaultSelect: true,

		scrollMonth: true,
		scrollTime: true,
		scrollInput: true,

		lazyInit: false,
		mask: false,
		validateOnBlur: true,
		allowBlank: true,
		yearStart: 1950,
		yearEnd: 2050,
		monthStart: 0,
		monthEnd: 11,
		style: '',
		id: '',
		fixed: false,
		roundTime: 'round', // ceil, floor
		className: '',
		weekends: [],
		highlightedDates: [],
		highlightedPeriods: [],
		disabledDates : [],
		disabledWeekDays: [],
		yearOffset: 0,
		beforeShowDay: null,

		enterLikeTab: true,
        showApplyButton: false
	};

	var globalLocaleDefault = 'en',
		globalLocale = 'en';
	// for locale settings
	$.datetimepicker = {
		setLocale: function(locale){
			globalLocale = default_options.i18n[locale]?locale:globalLocaleDefault;
			// Override Parse and Format Library entities
			Date.monthNames = default_options.i18n[globalLocale].months;
			Date.dayNames = default_options.i18n[globalLocale].dayOfWeek;
		}
	};

	// fix for ie8
	if (!window.getComputedStyle) {
		window.getComputedStyle = function (el, pseudo) {
			this.el = el;
			this.getPropertyValue = function (prop) {
				var re = /(\-([a-z]){1})/g;
				if (prop === 'float') {
					prop = 'styleFloat';
				}
				if (re.test(prop)) {
					prop = prop.replace(re, function (a, b, c) {
						return c.toUpperCase();
					});
				}
				return el.currentStyle[prop] || null;
			};
			return this;
		};
	}
	if (!Array.prototype.indexOf) {
		Array.prototype.indexOf = function (obj, start) {
			var i, j;
			for (i = (start || 0), j = this.length; i < j; i += 1) {
				if (this[i] === obj) { return i; }
			}
			return -1;
		};
	}
	Date.prototype.countDaysInMonth = function () {
		return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
	};
	$.fn.xdsoftScroller = function (percent) {
		return this.each(function () {
			var timeboxparent = $(this),
				pointerEventToXY = function (e) {
					var out = {x: 0, y: 0},
						touch;
					if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {
						touch  = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
						out.x = touch.clientX;
						out.y = touch.clientY;
					} else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {
						out.x = e.clientX;
						out.y = e.clientY;
					}
					return out;
				},
				move = 0,
				timebox,
				parentHeight,
				height,
				scrollbar,
				scroller,
				maximumOffset = 100,
				start = false,
				startY = 0,
				startTop = 0,
				h1 = 0,
				touchStart = false,
				startTopScroll = 0,
				calcOffset = function () {};
			if (percent === 'hide') {
				timeboxparent.find('.xdsoft_scrollbar').hide();
				return;
			}
			if (!$(this).hasClass('xdsoft_scroller_box')) {
				timebox = timeboxparent.children().eq(0);
				parentHeight = timeboxparent[0].clientHeight;
				height = timebox[0].offsetHeight;
				scrollbar = $('<div class="xdsoft_scrollbar"></div>');
				scroller = $('<div class="xdsoft_scroller"></div>');
				scrollbar.append(scroller);

				timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
				calcOffset = function calcOffset(event) {
					var offset = pointerEventToXY(event).y - startY + startTopScroll;
					if (offset < 0) {
						offset = 0;
					}
					if (offset + scroller[0].offsetHeight > h1) {
						offset = h1 - scroller[0].offsetHeight;
					}
					timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);
				};

				scroller
					.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {
						if (!parentHeight) {
							timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
						}

						startY = pointerEventToXY(event).y;
						startTopScroll = parseInt(scroller.css('margin-top'), 10);
						h1 = scrollbar[0].offsetHeight;

						if (event.type === 'mousedown') {
							if (document) {
								$(document.body).addClass('xdsoft_noselect');
							}
							$([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {
								$([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)
									.off('mousemove.xdsoft_scroller', calcOffset)
									.removeClass('xdsoft_noselect');
							});
							$(document.body).on('mousemove.xdsoft_scroller', calcOffset);
						} else {
							touchStart = true;
							event.stopPropagation();
							event.preventDefault();
						}
					})
					.on('touchmove', function (event) {
						if (touchStart) {
							event.preventDefault();
							calcOffset(event);
						}
					})
					.on('touchend touchcancel', function (event) {
						touchStart =  false;
						startTopScroll = 0;
					});

				timeboxparent
					.on('scroll_element.xdsoft_scroller', function (event, percentage) {
						if (!parentHeight) {
							timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
						}
						percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;

						scroller.css('margin-top', maximumOffset * percentage);

						setTimeout(function () {
							timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
						}, 10);
					})
					.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {
						var percent, sh;
						parentHeight = timeboxparent[0].clientHeight;
						height = timebox[0].offsetHeight;
						percent = parentHeight / height;
						sh = percent * scrollbar[0].offsetHeight;
						if (percent > 1) {
							scroller.hide();
						} else {
							scroller.show();
							scroller.css('height', parseInt(sh > 10 ? sh : 10, 10));
							maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;
							if (noTriggerScroll !== true) {
								timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
							}
						}
					});

				timeboxparent.on('mousewheel', function (event) {
					var top = Math.abs(parseInt(timebox.css('marginTop'), 10));

					top = top - (event.deltaY * 20);
					if (top < 0) {
						top = 0;
					}

					timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
					event.stopPropagation();
					return false;
				});

				timeboxparent.on('touchstart', function (event) {
					start = pointerEventToXY(event);
					startTop = Math.abs(parseInt(timebox.css('marginTop'), 10));
				});

				timeboxparent.on('touchmove', function (event) {
					if (start) {
						event.preventDefault();
						var coord = pointerEventToXY(event);
						timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
					}
				});

				timeboxparent.on('touchend touchcancel', function (event) {
					start = false;
					startTop = 0;
				});
			}
			timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
		});
	};

	$.fn.datetimepicker = function (opt) {
		var KEY0 = 48,
			KEY9 = 57,
			_KEY0 = 96,
			_KEY9 = 105,
			CTRLKEY = 17,
			DEL = 46,
			ENTER = 13,
			ESC = 27,
			BACKSPACE = 8,
			ARROWLEFT = 37,
			ARROWUP = 38,
			ARROWRIGHT = 39,
			ARROWDOWN = 40,
			TAB = 9,
			F5 = 116,
			AKEY = 65,
			CKEY = 67,
			VKEY = 86,
			ZKEY = 90,
			YKEY = 89,
			ctrlDown	=	false,
			options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),

			lazyInitTimer = 0,
			createDateTimePicker,
			destroyDateTimePicker,

			lazyInit = function (input) {
				input
					.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function initOnActionCallback(event) {
						if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {
							return;
						}
						clearTimeout(lazyInitTimer);
						lazyInitTimer = setTimeout(function () {

							if (!input.data('xdsoft_datetimepicker')) {
								createDateTimePicker(input);
							}
							input
								.off('open.xdsoft focusin.xdsoft mousedown.xdsoft', initOnActionCallback)
								.trigger('open.xdsoft');
						}, 100);
					});
			};

		createDateTimePicker = function (input) {
			var datetimepicker = $('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
				xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
				datepicker = $('<div class="xdsoft_datepicker active"></div>'),
				mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
					'<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
					'<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
					'<button type="button" class="xdsoft_next"></button></div>'),
				calendar = $('<div class="xdsoft_calendar"></div>'),
				timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
				timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),
				timebox = $('<div class="xdsoft_time_variant"></div>'),
                applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
				/*scrollbar = $('<div class="xdsoft_scrollbar"></div>'),
				scroller = $('<div class="xdsoft_scroller"></div>'),*/
				monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
				yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
				triggerAfterOpen = false,
				XDSoft_datetime,
				//scroll_element,
				xchangeTimer,
				timerclick,
				current_time_index,
				setPos,
				timer = 0,
				timer1 = 0,
				_xdsoft_datetime;

			if (options.id) {
				datetimepicker.attr('id', options.id);
			}
			if (options.style) {
				datetimepicker.attr('style', options.style);
			}
			if (options.weeks) {
				datetimepicker.addClass('xdsoft_showweeks');
			}
			if (options.rtl) {
				datetimepicker.addClass('xdsoft_rtl');
			}
			// Custom: Added option for time picker to only appear under input
			if (input.attr("data-position") == "under") {
				datetimepicker.attr("data-position", "under");
            }

			datetimepicker.addClass('xdsoft_' + options.theme);
			datetimepicker.addClass(options.className);

			mounth_picker
				.find('.xdsoft_month span')
					.after(monthselect);
			mounth_picker
				.find('.xdsoft_year span')
					.after(yearselect);

			mounth_picker
				.find('.xdsoft_month,.xdsoft_year')
					.on('mousedown.xdsoft', function (event) {
					var select = $(this).find('.xdsoft_select').eq(0),
						val = 0,
						top = 0,
						visible = select.is(':visible'),
						items,
						i;

					mounth_picker
						.find('.xdsoft_select')
							.hide();
					if (_xdsoft_datetime.currentTime) {
						val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();
					}

					select[visible ? 'hide' : 'show']();
					for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {
						if (items.eq(i).data('value') === val) {
							break;
						} else {
							top += items[0].offsetHeight;
						}
					}

					select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
					event.stopPropagation();
					return false;
				});

			mounth_picker
				.find('.xdsoft_select')
					.xdsoftScroller()
				.on('mousedown.xdsoft', function (event) {
					event.stopPropagation();
					event.preventDefault();
				})
				.on('mousedown.xdsoft', '.xdsoft_option', function (event) {

					if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
						_xdsoft_datetime.currentTime = _xdsoft_datetime.now();
					}

					var year = _xdsoft_datetime.currentTime.getFullYear();
					if (_xdsoft_datetime && _xdsoft_datetime.currentTime) {
						_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));
					}

					$(this).parent().parent().hide();

					datetimepicker.trigger('xchange.xdsoft');
					if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
						options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
					}

					if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
						options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
					}
				});

			datetimepicker.setOptions = function (_options) {
				var highlightedDates = {},
					getCaretPos = function (input) {
						try {
							if (document.selection && document.selection.createRange) {
								var range = document.selection.createRange();
								return range.getBookmark().charCodeAt(2) - 2;
							}
							if (input.setSelectionRange) {
								return input.selectionStart;
							}
						} catch (e) {
							return 0;
						}
					},
					setCaretPos = function (node, pos) {
						node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
						if (!node) {
							return false;
						}
						if (node.createTextRange) {
							var textRange = node.createTextRange();
							textRange.collapse(true);
							textRange.moveEnd('character', pos);
							textRange.moveStart('character', pos);
							textRange.select();
							return true;
						}
						if (node.setSelectionRange) {
							node.setSelectionRange(pos, pos);
							return true;
						}
						return false;
					},
					isValidValue = function (mask, value) {
						var reg = mask
							.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
							.replace(/_/g, '{digit+}')
							.replace(/([0-9]{1})/g, '{digit$1}')
							.replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
							.replace(/\{digit[\+]\}/g, '[0-9_]{1}');
						return (new RegExp(reg)).test(value);
					};
				options = $.extend(true, {}, options, _options);

				if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
					options.allowTimes = $.extend(true, [], _options.allowTimes);
				}

				if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {
					options.weekends = $.extend(true, [], _options.weekends);
				}

				if (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {
					$.each(_options.highlightedDates, function (index, value) {
						var splitData = $.map(value.split(','), $.trim),
							exDesc,
							hDate = new HighlightedDate(Date.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style
							keyDate = hDate.date.dateFormat(options.formatDate);
						if (highlightedDates[keyDate] !== undefined) {
							exDesc = highlightedDates[keyDate].desc;
							if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
								highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
							}
						} else {
							highlightedDates[keyDate] = hDate;
						}
					});

					options.highlightedDates = $.extend(true, [], highlightedDates);
				}

				if (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {
					highlightedDates = $.extend(true, [], options.highlightedDates);
					$.each(_options.highlightedPeriods, function (index, value) {
						var dateTest, // start date
							dateEnd,
							desc,
							hDate,
							keyDate,
							exDesc,
							style;
						if ($.isArray(value)) {
							dateTest = value[0];
							dateEnd = value[1];
							desc = value[2];
							style = value[3];
						}
						else {
							var splitData = $.map(value.split(','), $.trim);
							dateTest = Date.parseDate(splitData[0], options.formatDate);
							dateEnd = Date.parseDate(splitData[1], options.formatDate);
							desc = splitData[2];
							style = splitData[3];
						}

						while (dateTest <= dateEnd) {
							hDate = new HighlightedDate(dateTest, desc, style);
							keyDate = dateTest.dateFormat(options.formatDate);
							dateTest.setDate(dateTest.getDate() + 1);
							if (highlightedDates[keyDate] !== undefined) {
								exDesc = highlightedDates[keyDate].desc;
								if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
									highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
								}
							} else {
								highlightedDates[keyDate] = hDate;
							}
						}
					});

					options.highlightedDates = $.extend(true, [], highlightedDates);
				}

				if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {
					options.disabledDates = $.extend(true, [], _options.disabledDates);
				}

				if (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {
				    options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);
				}

				if ((options.open || options.opened) && (!options.inline)) {
					input.trigger('open.xdsoft');
				}

				if (options.inline) {
					triggerAfterOpen = true;
					datetimepicker.addClass('xdsoft_inline');
					input.after(datetimepicker).hide();
				}

				if (options.inverseButton) {
					options.next = 'xdsoft_prev';
					options.prev = 'xdsoft_next';
				}

				if (options.datepicker) {
					datepicker.addClass('active');
				} else {
					datepicker.removeClass('active');
				}

				if (options.timepicker) {
					timepicker.addClass('active');
				} else {
					timepicker.removeClass('active');
				}

				if (options.value) {
					_xdsoft_datetime.setCurrentTime(options.value);
					if (input && input.val) {
						input.val(_xdsoft_datetime.str);
					}
				}

				if (isNaN(options.dayOfWeekStart)) {
					options.dayOfWeekStart = 0;
				} else {
					options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;
				}

				if (!options.timepickerScrollbar) {
					timeboxparent.xdsoftScroller('hide');
				}

				if (options.minDate && /^[\+\-](.*)$/.test(options.minDate)) {
					options.minDate = _xdsoft_datetime.strToDateTime(options.minDate).dateFormat(options.formatDate);
				}

				if (options.maxDate &&  /^[\+\-](.*)$/.test(options.maxDate)) {
					options.maxDate = _xdsoft_datetime.strToDateTime(options.maxDate).dateFormat(options.formatDate);
				}

				applyButton.toggle(options.showApplyButton);

				mounth_picker
					.find('.xdsoft_today_button')
						.css('visibility', !options.todayButton ? 'hidden' : 'visible');

				mounth_picker
					.find('.' + options.prev)
						.css('visibility', !options.prevButton ? 'hidden' : 'visible');

				mounth_picker
					.find('.' + options.next)
						.css('visibility', !options.nextButton ? 'hidden' : 'visible');

				if (options.mask) {
					input.off('keydown.xdsoft');

					if (options.mask === true) {
						options.mask = options.format
							.replace(/Y/g, '9999')
							.replace(/F/g, '9999')
							.replace(/m/g, '19')
							.replace(/d/g, '39')
							.replace(/H/g, '29')
							.replace(/i/g, '59')
							.replace(/s/g, '59');
					}

					if ($.type(options.mask) === 'string') {
						if (!isValidValue(options.mask, input.val())) {
							input.val(options.mask.replace(/[0-9]/g, '_'));
						}

						input.on('keydown.xdsoft', function (event) {
							var val = this.value,
								key = event.which,
								pos,
								digit;

							if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
								pos = getCaretPos(this);
								digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';

								if ((key === BACKSPACE || key === DEL) && pos) {
									pos -= 1;
									digit = '_';
								}

								while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
									pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
								}

								val = val.substr(0, pos) + digit + val.substr(pos + 1);
								if ($.trim(val) === '') {
									val = options.mask.replace(/[0-9]/g, '_');
								} else {
									if (pos === options.mask.length) {
										event.preventDefault();
										return false;
									}
								}

								pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
								while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
									pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
								}

								if (isValidValue(options.mask, val)) {
									this.value = val;
									setCaretPos(this, pos);
								} else if ($.trim(val) === '') {
									this.value = options.mask.replace(/[0-9]/g, '_');
								} else {
									input.trigger('error_input.xdsoft');
								}
							} else {
								if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
									return true;
								}
							}

							event.preventDefault();
							return false;
						});
					}
				}
				if (options.validateOnBlur) {
					input
						.off('blur.xdsoft')
						.on('blur.xdsoft', function () {
							if (options.allowBlank && !$.trim($(this).val()).length) {
								$(this).val(null);
								datetimepicker.data('xdsoft_datetime').empty();
							} else if (!Date.parseDate($(this).val(), options.format)) {
								var splittedHours   = +([$(this).val()[0], $(this).val()[1]].join('')),
									splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));

								// parse the numbers as 0312 => 03:12
								if (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {
									$(this).val([splittedHours, splittedMinutes].map(function (item) {
										return item > 9 ? item : '0' + item;
									}).join(':'));
								} else {
									$(this).val((_xdsoft_datetime.now()).dateFormat(options.format));
								}

								datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
							} else {
								datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
							}

							datetimepicker.trigger('changedatetime.xdsoft');
						});
				}
				options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;

				datetimepicker
					.trigger('xchange.xdsoft')
					.trigger('afterOpen.xdsoft');
			};

			datetimepicker
				.data('options', options)
				.on('mousedown.xdsoft', function (event) {
					event.stopPropagation();
					event.preventDefault();
					yearselect.hide();
					monthselect.hide();
					return false;
				});

			//scroll_element = timepicker.find('.xdsoft_time_box');
			timeboxparent.append(timebox);
			timeboxparent.xdsoftScroller();

			datetimepicker.on('afterOpen.xdsoft', function () {
				timeboxparent.xdsoftScroller();
			});

			datetimepicker
				.append(datepicker)
				.append(timepicker);

			if (options.withoutCopyright !== true) {
				datetimepicker
					.append(xdsoft_copyright);
			}

			datepicker
				.append(mounth_picker)
				.append(calendar)
				.append(applyButton);

			$(options.parentID)
				.append(datetimepicker);

			XDSoft_datetime = function () {
				var _this = this;
				_this.now = function (norecursion) {
					var d = new Date(),
						date,
						time;

					if (!norecursion && options.defaultDate) {
						date = _this.strToDateTime(options.defaultDate);
						d.setFullYear(date.getFullYear());
						d.setMonth(date.getMonth());
						d.setDate(date.getDate());
					}

					if (options.yearOffset) {
						d.setFullYear(d.getFullYear() + options.yearOffset);
					}

					if (!norecursion && options.defaultTime) {
						time = _this.strtotime(options.defaultTime);
						d.setHours(time.getHours());
						d.setMinutes(time.getMinutes());
					}
					return d;
				};

				_this.isValidDate = function (d) {
					if (Object.prototype.toString.call(d) !== "[object Date]") {
						return false;
					}
					return !isNaN(d.getTime());
				};

				_this.setCurrentTime = function (dTime) {
					_this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();
					datetimepicker.trigger('xchange.xdsoft');
				};

				_this.empty = function () {
					_this.currentTime = null;
				};

				_this.getCurrentTime = function (dTime) {
					return _this.currentTime;
				};

				_this.nextMonth = function () {

					if (_this.currentTime === undefined || _this.currentTime === null) {
						_this.currentTime = _this.now();
					}

					var month = _this.currentTime.getMonth() + 1,
						year;
					if (month === 12) {
						_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
						month = 0;
					}

					year = _this.currentTime.getFullYear();

					_this.currentTime.setDate(
						Math.min(
							new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
							_this.currentTime.getDate()
						)
					);
					_this.currentTime.setMonth(month);

					if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
						options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
					}

					if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
						options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
					}

					datetimepicker.trigger('xchange.xdsoft');
					return month;
				};

				_this.prevMonth = function () {

					if (_this.currentTime === undefined || _this.currentTime === null) {
						_this.currentTime = _this.now();
					}

					var month = _this.currentTime.getMonth() - 1;
					if (month === -1) {
						_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
						month = 11;
					}
					_this.currentTime.setDate(
						Math.min(
							new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
							_this.currentTime.getDate()
						)
					);
					_this.currentTime.setMonth(month);
					if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
						options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
					}
					datetimepicker.trigger('xchange.xdsoft');
					return month;
				};

				_this.getWeekOfYear = function (datetime) {
					var onejan = new Date(datetime.getFullYear(), 0, 1);
					return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
				};

				_this.strToDateTime = function (sDateTime) {
					var tmpDate = [], timeOffset, currentTime;

					if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {
						return sDateTime;
					}

					tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime);
					if (tmpDate) {
						tmpDate[2] = Date.parseDate(tmpDate[2], options.formatDate);
					}
					if (tmpDate  && tmpDate[2]) {
						timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
						currentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
					} else {
						currentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();
					}

					if (!_this.isValidDate(currentTime)) {
						currentTime = _this.now();
					}

					return currentTime;
				};

				_this.strToDate = function (sDate) {
					if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {
						return sDate;
					}

					var currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now(true);
					if (!_this.isValidDate(currentTime)) {
						currentTime = _this.now(true);
					}
					return currentTime;
				};

				_this.strtotime = function (sTime) {
					if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {
						return sTime;
					}
					var currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now(true);
					if (!_this.isValidDate(currentTime)) {
						currentTime = _this.now(true);
					}
					return currentTime;
				};

				_this.str = function () {
					return _this.currentTime.dateFormat(options.format);
				};
				_this.currentTime = this.now();
			};

			_xdsoft_datetime = new XDSoft_datetime();

			applyButton.on('click', function (e) {//pathbrite
                e.preventDefault();
                datetimepicker.data('changed', true);
                _xdsoft_datetime.setCurrentTime(getCurrentValue());
                input.val(_xdsoft_datetime.str());
                datetimepicker.trigger('close.xdsoft');
            });
			mounth_picker
				.find('.xdsoft_today_button')
				.on('mousedown.xdsoft', function () {
					datetimepicker.data('changed', true);
					_xdsoft_datetime.setCurrentTime(0);
					datetimepicker.trigger('afterOpen.xdsoft');
				}).on('dblclick.xdsoft', function () {
					var currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;
					currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
					minDate = _xdsoft_datetime.strToDate(options.minDate);
					minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
					if (currentDate < minDate) {
						return;
					}
					maxDate = _xdsoft_datetime.strToDate(options.maxDate);
					maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
					if (currentDate > maxDate) {
						return;
					}
					input.val(_xdsoft_datetime.str());
					input.trigger('change');
					datetimepicker.trigger('close.xdsoft');
				});
			mounth_picker
				.find('.xdsoft_prev,.xdsoft_next')
				.on('mousedown.xdsoft', function () {
					var $this = $(this),
						timer = 0,
						stop = false;

					(function arguments_callee1(v) {
						if ($this.hasClass(options.next)) {
							_xdsoft_datetime.nextMonth();
						} else if ($this.hasClass(options.prev)) {
							_xdsoft_datetime.prevMonth();
						}
						if (options.monthChangeSpinner) {
							if (!stop) {
								timer = setTimeout(arguments_callee1, v || 100);
							}
						}
					}(500));

					$([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {
						clearTimeout(timer);
						stop = true;
						$([document.body, window]).off('mouseup.xdsoft', arguments_callee2);
					});
				});

			timepicker
				.find('.xdsoft_prev,.xdsoft_next')
				.on('mousedown.xdsoft', function () {
					var $this = $(this),
						timer = 0,
						stop = false,
						period = 110;
					(function arguments_callee4(v) {
						var pheight = timeboxparent[0].clientHeight,
							height = timebox[0].offsetHeight,
							top = Math.abs(parseInt(timebox.css('marginTop'), 10));
						if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {
							timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
						} else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {
							timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
						}
						timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);
						period = (period > 10) ? 10 : period - 10;
						if (!stop) {
							timer = setTimeout(arguments_callee4, v || period);
						}
					}(500));
					$([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {
						clearTimeout(timer);
						stop = true;
						$([document.body, window])
							.off('mouseup.xdsoft', arguments_callee5);
					});
				});

			xchangeTimer = 0;
			// base handler - generating a calendar and timepicker
			datetimepicker
				.on('xchange.xdsoft', function (event) {
					clearTimeout(xchangeTimer);
					xchangeTimer = setTimeout(function () {

						if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
							_xdsoft_datetime.currentTime = _xdsoft_datetime.now();
						}

						var table =	'',
							start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
							i = 0,
							j,
							today = _xdsoft_datetime.now(),
							maxDate = false,
							minDate = false,
							hDate,
							day,
							d,
							y,
							m,
							w,
							classes = [],
							customDateSettings,
							newRow = true,
							time = '',
							h = '',
							line_time,
							description;

						while (start.getDay() !== options.dayOfWeekStart) {
							start.setDate(start.getDate() - 1);
						}

						table += '<table><thead><tr>';

						if (options.weeks) {
							table += '<th></th>';
						}

						for (j = 0; j < 7; j += 1) {
							table += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';
						}

						table += '</tr></thead>';
						table += '<tbody>';

						if (options.maxDate !== false) {
							maxDate = _xdsoft_datetime.strToDate(options.maxDate);
							maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
						}

						if (options.minDate !== false) {
							minDate = _xdsoft_datetime.strToDate(options.minDate);
							minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
						}

						while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {
							classes = [];
							i += 1;

							day = start.getDay();
							d = start.getDate();
							y = start.getFullYear();
							m = start.getMonth();
							w = _xdsoft_datetime.getWeekOfYear(start);
							description = '';

							classes.push('xdsoft_date');

							if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {
								customDateSettings = options.beforeShowDay.call(datetimepicker, start);
							} else {
								customDateSettings = null;
							}

							if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {
								classes.push('xdsoft_disabled');
							} else if (options.disabledDates.indexOf(start.dateFormat(options.formatDate)) !== -1) {
								classes.push('xdsoft_disabled');
							} else if (options.disabledWeekDays.indexOf(day) !== -1) {
							    classes.push('xdsoft_disabled');
							}

							if (customDateSettings && customDateSettings[1] !== "") {
								classes.push(customDateSettings[1]);
							}

							if (_xdsoft_datetime.currentTime.getMonth() !== m) {
								classes.push('xdsoft_other_month');
							}

							if ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {
								classes.push('xdsoft_current');
							}

							if (today.dateFormat(options.formatDate) === start.dateFormat(options.formatDate)) {
								classes.push('xdsoft_today');
							}

							if (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(start.dateFormat(options.formatDate)) !== -1) {
								classes.push('xdsoft_weekend');
							}

							if (options.highlightedDates[start.dateFormat(options.formatDate)] !== undefined) {
								hDate = options.highlightedDates[start.dateFormat(options.formatDate)];
								classes.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);
								description = hDate.desc === undefined ? '' : hDate.desc;
							}

							if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {
								classes.push(options.beforeShowDay(start));
							}

							if (newRow) {
								table += '<tr>';
								newRow = false;
								if (options.weeks) {
									table += '<th>' + w + '</th>';
								}
							}

							table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' +
										'<div>' + d + '</div>' +
									'</td>';

							if (start.getDay() === options.dayOfWeekStartPrev) {
								table += '</tr>';
								newRow = true;
							}

							start.setDate(d + 1);
						}
						table += '</tbody></table>';

						calendar.html(table);

						mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
						mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());

						// generate timebox
						time = '';
						h = '';
						m = '';
						
						line_time = function line_time(h, m) {
							var now = _xdsoft_datetime.now(), optionDateTime, current_time,
								isALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;
							now.setHours(h);
							h = parseInt(now.getHours(), 10);
							now.setMinutes(m);
							m = parseInt(now.getMinutes(), 10);
							optionDateTime = new Date(_xdsoft_datetime.currentTime);
							optionDateTime.setHours(h);
							optionDateTime.setMinutes(m);
							classes = [];
							if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
								classes.push('xdsoft_disabled');
							}
							if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) {
								classes.push('xdsoft_disabled');
							}

							current_time = new Date(_xdsoft_datetime.currentTime);
							current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));
							
							if (!isALlowTimesInit) {
								current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
							}

							if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {
								if (options.defaultSelect || datetimepicker.data('changed')) {
									classes.push('xdsoft_current');
								} else if (options.initTime) {
									classes.push('xdsoft_init_time');
								}
							}
							if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {
								classes.push('xdsoft_today');
							}
							time += '<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + now.dateFormat(options.formatTime) + '</div>';
						};

						if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {
							for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {
								for (j = 0; j < 60; j += options.step) {
									h = (i < 10 ? '0' : '') + i;
									m = (j < 10 ? '0' : '') + j;
									line_time(h, m);
								}
							}
						} else {
							for (i = 0; i < options.allowTimes.length; i += 1) {
								h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
								m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
								line_time(h, m);
							}
						}

						timebox.html(time);

						opt = '';
						i = 0;

						for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {
							opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + i + '</div>';
						}
						yearselect.children().eq(0)
												.html(opt);

						for (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {
							opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + options.i18n[globalLocale].months[i] + '</div>';
						}
						monthselect.children().eq(0).html(opt);
						$(datetimepicker)
							.trigger('generate.xdsoft');
					}, 10);
					event.stopPropagation();
				})
				.on('afterOpen.xdsoft', function () {
					if (options.timepicker) {
						var classType, pheight, height, top;
						if (timebox.find('.xdsoft_current').length) {
							classType = '.xdsoft_current';
						} else if (timebox.find('.xdsoft_init_time').length) {
							classType = '.xdsoft_init_time';
						}
						if (classType) {
							pheight = timeboxparent[0].clientHeight;
							height = timebox[0].offsetHeight;
							top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
							if ((height - pheight) < top) {
								top = height - pheight;
							}
							timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
						} else {
							timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
						}
					}
				});

			timerclick = 0;
			calendar
				.on('click.xdsoft', 'td', function (xdevent) {
					xdevent.stopPropagation();  // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
					timerclick += 1;
					var $this = $(this),
						currentTime = _xdsoft_datetime.currentTime;

					if (currentTime === undefined || currentTime === null) {
						_xdsoft_datetime.currentTime = _xdsoft_datetime.now();
						currentTime = _xdsoft_datetime.currentTime;
					}

					if ($this.hasClass('xdsoft_disabled')) {
						return false;
					}

					currentTime.setDate(1);
					currentTime.setFullYear($this.data('year'));
					currentTime.setMonth($this.data('month'));
					currentTime.setDate($this.data('date'));

					datetimepicker.trigger('select.xdsoft', [currentTime]);

					input.val(_xdsoft_datetime.str());

					if (options.onSelectDate &&	$.isFunction(options.onSelectDate)) {
						options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
					}

					datetimepicker.data('changed', true);
					datetimepicker.trigger('xchange.xdsoft');
					datetimepicker.trigger('changedatetime.xdsoft');
					if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {
						datetimepicker.trigger('close.xdsoft');
					}
					setTimeout(function () {
						timerclick = 0;
					}, 200);
				});

			timebox
				.on('click.xdsoft', 'div', function (xdevent) {
					xdevent.stopPropagation();
					var $this = $(this),
						currentTime = _xdsoft_datetime.currentTime;

					if (currentTime === undefined || currentTime === null) {
						_xdsoft_datetime.currentTime = _xdsoft_datetime.now();
						currentTime = _xdsoft_datetime.currentTime;
					}

					if ($this.hasClass('xdsoft_disabled')) {
						return false;
					}
					currentTime.setHours($this.data('hour'));
					currentTime.setMinutes($this.data('minute'));
					datetimepicker.trigger('select.xdsoft', [currentTime]);

					datetimepicker.data('input').val(_xdsoft_datetime.str());

					if (options.onSelectTime && $.isFunction(options.onSelectTime)) {
						options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
					}
					datetimepicker.data('changed', true);
					datetimepicker.trigger('xchange.xdsoft');
					datetimepicker.trigger('changedatetime.xdsoft');
					if (options.inline !== true && options.closeOnTimeSelect === true) {
						datetimepicker.trigger('close.xdsoft');
					}
				});


			datepicker
				.on('mousewheel.xdsoft', function (event) {
					if (!options.scrollMonth) {
						return true;
					}
					if (event.deltaY < 0) {
						_xdsoft_datetime.nextMonth();
					} else {
						_xdsoft_datetime.prevMonth();
					}
					return false;
				});

			input
				.on('mousewheel.xdsoft', function (event) {
					if (!options.scrollInput) {
						return true;
					}
					if (!options.datepicker && options.timepicker) {
						current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;
						if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {
							current_time_index += event.deltaY;
						}
						if (timebox.children().eq(current_time_index).length) {
							timebox.children().eq(current_time_index).trigger('mousedown');
						}
						return false;
					}
					if (options.datepicker && !options.timepicker) {
						datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
						if (input.val) {
							input.val(_xdsoft_datetime.str());
						}
						datetimepicker.trigger('changedatetime.xdsoft');
						return false;
					}
				});

			datetimepicker
				.on('changedatetime.xdsoft', function (event) {
					if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {
						var $input = datetimepicker.data('input');
						options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
						delete options.value;
						$input.trigger('change');
					}
				})
				.on('generate.xdsoft', function () {
					if (options.onGenerate && $.isFunction(options.onGenerate)) {
						options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
					}
					if (triggerAfterOpen) {
						datetimepicker.trigger('afterOpen.xdsoft');
						triggerAfterOpen = false;
					}
				})
				.on('click.xdsoft', function (xdevent) {
					xdevent.stopPropagation();
				});

			current_time_index = 0;

			setPos = function () {
				var offset = datetimepicker.data('input').offset(), top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1, left = offset.left, position = "absolute", node;
				if (datetimepicker.data('input').parent().css('direction') == 'rtl')
					left -= (datetimepicker.outerWidth() - datetimepicker.data('input').outerWidth());
				if (options.fixed) {
					top -= $(window).scrollTop();
					left -= $(window).scrollLeft();
					position = "fixed";
				} else {
					// Custom: Stop time picker appearing above input in some instances
					if (datetimepicker.data('position') != "under") {
						if (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop()) {
							top = offset.top - datetimepicker[0].offsetHeight + 1;
						}
                    }
					if (top < 0) {
						top = 0;
					}
					if (left + datetimepicker[0].offsetWidth > $(window).width()) {
						left = $(window).width() - datetimepicker[0].offsetWidth;
					}
				}

				node = datetimepicker[0];
				do {
					node = node.parentNode;
					if (window.getComputedStyle(node).getPropertyValue('position') === 'relative' && $(window).width() >= node.offsetWidth) {
						left = left - (($(window).width() - node.offsetWidth) / 2);
						break;
					}
				} while (node.nodeName !== 'HTML');
				var page = window.location.pathname;
			    if (page != '/' || page != '/default.aspx') {
			        var bodyMargin = $('body').css("margin-top").replace('px', '');
			        if (bodyMargin > 0) {
			            top = top - bodyMargin;
			        }
			    }
				datetimepicker.css({
					left: left,
					top: top,
					position: position
				});
			};
			datetimepicker
				.on('open.xdsoft', function (event) {
					var onShow = true;
					if (options.onShow && $.isFunction(options.onShow)) {
						onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
					}
					if (onShow !== false) {
						datetimepicker.show();
						setPos();
						$(window)
							.off('resize.xdsoft', setPos)
							.on('resize.xdsoft', setPos);

						if (options.closeOnWithoutClick) {
							$([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {
								datetimepicker.trigger('close.xdsoft');
								$([document.body, window]).off('mousedown.xdsoft', arguments_callee6);
							});
						}
					}
				})
				.on('close.xdsoft', function (event) {
					var onClose = true;
					mounth_picker
						.find('.xdsoft_month,.xdsoft_year')
							.find('.xdsoft_select')
								.hide();
					if (options.onClose && $.isFunction(options.onClose)) {
						onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
					}
					if (onClose !== false && !options.opened && !options.inline) {
						datetimepicker.hide();
					}
					event.stopPropagation();
				})
				.on('toggle.xdsoft', function (event) {
					if (datetimepicker.is(':visible')) {
						datetimepicker.trigger('close.xdsoft');
					} else {
						datetimepicker.trigger('open.xdsoft');
					}
				})
				.data('input', input);

			timer = 0;
			timer1 = 0;

			datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
			datetimepicker.setOptions(options);

			function getCurrentValue() {
				var ct = false, time;

				if (options.startDate) {
					ct = _xdsoft_datetime.strToDate(options.startDate);
				} else {
					ct = options.value || ((input && input.val && input.val()) ? input.val() : '');
					if (ct) {
						ct = _xdsoft_datetime.strToDateTime(ct);
					} else if (options.defaultDate) {
						ct = _xdsoft_datetime.strToDateTime(options.defaultDate);
						if (options.defaultTime) {
							time = _xdsoft_datetime.strtotime(options.defaultTime);
							ct.setHours(time.getHours());
							ct.setMinutes(time.getMinutes());
						}
					}
				}

				if (ct && _xdsoft_datetime.isValidDate(ct)) {
					datetimepicker.data('changed', true);
				} else {
					ct = '';
				}

				return ct || 0;
			}

			_xdsoft_datetime.setCurrentTime(getCurrentValue());

			input
				.data('xdsoft_datetimepicker', datetimepicker)
				.on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function (event) {
					if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
						return;
					}
					clearTimeout(timer);
					timer = setTimeout(function () {
						if (input.is(':disabled')) {
							return;
						}

						triggerAfterOpen = true;
						_xdsoft_datetime.setCurrentTime(getCurrentValue());

						datetimepicker.trigger('open.xdsoft');
					}, 100);
				})
				.on('keydown.xdsoft', function (event) {
					var val = this.value, elementSelector,
						key = event.which;
					if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {
						elementSelector = $("input:visible,textarea:visible");
						datetimepicker.trigger('close.xdsoft');
						elementSelector.eq(elementSelector.index(this) + 1).focus();
						return false;
					}
					if ([TAB].indexOf(key) !== -1) {
						datetimepicker.trigger('close.xdsoft');
						return true;
					}
				});
		};
		destroyDateTimePicker = function (input) {
			var datetimepicker = input.data('xdsoft_datetimepicker');
			if (datetimepicker) {
				datetimepicker.data('xdsoft_datetime', null);
				datetimepicker.remove();
				input
					.data('xdsoft_datetimepicker', null)
					.off('.xdsoft');
				$(window).off('resize.xdsoft');
				$([window, document.body]).off('mousedown.xdsoft');
				if (input.unmousewheel) {
					input.unmousewheel();
				}
			}
		};
		$(document)
			.off('keydown.xdsoftctrl keyup.xdsoftctrl')
			.on('keydown.xdsoftctrl', function (e) {
				if (e.keyCode === CTRLKEY) {
					ctrlDown = true;
				}
			})
			.on('keyup.xdsoftctrl', function (e) {
				if (e.keyCode === CTRLKEY) {
					ctrlDown = false;
				}
			});
		return this.each(function () {
			var datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;
			if (datetimepicker) {
				if ($.type(opt) === 'string') {
					switch (opt) {
					case 'show':
						$(this).select().focus();
						datetimepicker.trigger('open.xdsoft');
						break;
					case 'hide':
						datetimepicker.trigger('close.xdsoft');
						break;
					case 'toggle':
						datetimepicker.trigger('toggle.xdsoft');
						break;
					case 'destroy':
						destroyDateTimePicker($(this));
						break;
					case 'reset':
						this.value = this.defaultValue;
						if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format))) {
							datetimepicker.data('changed', false);
						}
						datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
						break;
					case 'validate':
						$input = datetimepicker.data('input');
						$input.trigger('blur.xdsoft');
						break;
					}
				} else {
					datetimepicker
						.setOptions(opt);
				}
				return 0;
			}
			if ($.type(opt) !== 'string') {
				if (!options.lazyInit || options.open || options.inline) {
					createDateTimePicker($(this));
				} else {
					lazyInit($(this));
				}
			}
		});
	};
	$.fn.datetimepicker.defaults = default_options;

	function HighlightedDate(date, desc, style) {
		"use strict";
		this.date = date;
		this.desc = desc;
		this.style = style;
	}

}));
/*!
 * jQuery Mousewheel 3.1.13
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 */

(function (factory) {
    if ( typeof define === 'function' && define.amd ) {
        // AMD. Register as an anonymous module.
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node/CommonJS style for Browserify
        module.exports = factory;
    } else {
        // Browser globals
        factory(jQuery);
    }
}(function ($) {

    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
        slice  = Array.prototype.slice,
        nullLowestDeltaTimeout, lowestDelta;

    if ( $.event.fixHooks ) {
        for ( var i = toFix.length; i; ) {
            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
        }
    }

    var special = $.event.special.mousewheel = {
        version: '3.1.12',

        setup: function() {
            if ( this.addEventListener ) {
                for ( var i = toBind.length; i; ) {
                    this.addEventListener( toBind[--i], handler, false );
                }
            } else {
                this.onmousewheel = handler;
            }
            // Store the line height and page height for this particular element
            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
        },

        teardown: function() {
            if ( this.removeEventListener ) {
                for ( var i = toBind.length; i; ) {
                    this.removeEventListener( toBind[--i], handler, false );
                }
            } else {
                this.onmousewheel = null;
            }
            // Clean up the data we added to the element
            $.removeData(this, 'mousewheel-line-height');
            $.removeData(this, 'mousewheel-page-height');
        },

        getLineHeight: function(elem) {
            var $elem = $(elem),
                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
            if (!$parent.length) {
                $parent = $('body');
            }
            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
        },

        getPageHeight: function(elem) {
            return $(elem).height();
        },

        settings: {
            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
            normalizeOffset: true  // calls getBoundingClientRect for each event
        }
    };

    $.fn.extend({
        mousewheel: function(fn) {
            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
        },

        unmousewheel: function(fn) {
            return this.unbind('mousewheel', fn);
        }
    });


    function handler(event) {
        var orgEvent   = event || window.event,
            args       = slice.call(arguments, 1),
            delta      = 0,
            deltaX     = 0,
            deltaY     = 0,
            absDelta   = 0,
            offsetX    = 0,
            offsetY    = 0;
        event = $.event.fix(orgEvent);
        event.type = 'mousewheel';

        // Old school scrollwheel delta
        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }
        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }
        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }
        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }

        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
            deltaX = deltaY * -1;
            deltaY = 0;
        }

        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
        delta = deltaY === 0 ? deltaX : deltaY;

        // New school wheel delta (wheel event)
        if ( 'deltaY' in orgEvent ) {
            deltaY = orgEvent.deltaY * -1;
            delta  = deltaY;
        }
        if ( 'deltaX' in orgEvent ) {
            deltaX = orgEvent.deltaX;
            if ( deltaY === 0 ) { delta  = deltaX * -1; }
        }

        // No change actually happened, no reason to go any further
        if ( deltaY === 0 && deltaX === 0 ) { return; }

        // Need to convert lines and pages to pixels if we aren't already in pixels
        // There are three delta modes:
        //   * deltaMode 0 is by pixels, nothing to do
        //   * deltaMode 1 is by lines
        //   * deltaMode 2 is by pages
        if ( orgEvent.deltaMode === 1 ) {
            var lineHeight = $.data(this, 'mousewheel-line-height');
            delta  *= lineHeight;
            deltaY *= lineHeight;
            deltaX *= lineHeight;
        } else if ( orgEvent.deltaMode === 2 ) {
            var pageHeight = $.data(this, 'mousewheel-page-height');
            delta  *= pageHeight;
            deltaY *= pageHeight;
            deltaX *= pageHeight;
        }

        // Store lowest absolute delta to normalize the delta values
        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );

        if ( !lowestDelta || absDelta < lowestDelta ) {
            lowestDelta = absDelta;

            // Adjust older deltas if necessary
            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
                lowestDelta /= 40;
            }
        }

        // Adjust older deltas if necessary
        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
            // Divide all the things by 40!
            delta  /= 40;
            deltaX /= 40;
            deltaY /= 40;
        }

        // Get a whole, normalized value for the deltas
        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);
        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);

        // Normalise offsetX and offsetY properties
        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
            var boundingRect = this.getBoundingClientRect();
            offsetX = event.clientX - boundingRect.left;
            offsetY = event.clientY - boundingRect.top;
        }

        // Add information to the event object
        event.deltaX = deltaX;
        event.deltaY = deltaY;
        event.deltaFactor = lowestDelta;
        event.offsetX = offsetX;
        event.offsetY = offsetY;
        // Go ahead and set deltaMode to 0 since we converted to pixels
        // Although this is a little odd since we overwrite the deltaX/Y
        // properties with normalized deltas.
        event.deltaMode = 0;

        // Add event and delta to the front of the arguments
        args.unshift(event, delta, deltaX, deltaY);

        // Clearout lowestDelta after sometime to better
        // handle multiple device types that give different
        // a different lowestDelta
        // Ex: trackpad = 3 and mouse wheel = 120
        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);

        return ($.event.dispatch || $.event.handle).apply(this, args);
    }

    function nullLowestDelta() {
        lowestDelta = null;
    }

    function shouldAdjustOldDeltas(orgEvent, absDelta) {
        // If this is an older event and the delta is divisable by 120,
        // then we are assuming that the browser is treating this as an
        // older mouse wheel event and that we should divide the deltas
        // by 40 to try and get a more usable deltaFactor.
        // Side note, this actually impacts the reported scroll distance
        // in older browsers and can cause scrolling to be slower than native.
        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
    }

}));
/*
 * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
 * Modified by Jonathan Gotti aka malko <jgotti at jgotti dot org>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by the
 * Free Software Foundation, version 2.1.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
 * details.
 */
/* jshint laxbreak:true*/
!(function (factory) {
	if ( typeof define === 'function' && define.amd ) {
		define([], factory);
	} else if (typeof exports === 'object') {
		module.exports = factory;
	} else {
		factory();
	}
}(function(){
	"use strict";
	var parseFunctions = {};
	var parseRegexes = [];
	var formatFunctions = {};
	var charFormatters = {
		d: function(date) { return stringLeftPad(date.getDate(), 2, '0'); },
		D: function(date) { return Date.dayNames[date.getDay()].substring(0, 3); },
		j: function(date) { return date.getDate(); },
		l: function(date) { return Date.dayNames[date.getDay()]; },
		S: function(date) { return date.getSuffix(); },
		w: function(date) { return date.getDay(); },
		z: function(date) { return date.getDayOfYear(); },
		W: function(date) { return date.getWeekOfYear(); },
		F: function(date) { return Date.monthNames[date.getMonth()]; },
		m: function(date) { return stringLeftPad(date.getMonth() + 1, 2, '0'); },
		M: function(date) { return Date.monthNames[date.getMonth()].substring(0, 3); },
		n: function(date) { return (date.getMonth() + 1); },
		t: function(date) { return date.getDaysInMonth(); },
		L: function(date) { return (date.isLeapYear() ? 1 : 0); },
		Y: function(date) { return date.getFullYear(); },
		y: function(date) { return ('' + date.getFullYear()).substring(2, 4); },
		a: function(date) { return (date.getHours() < 12 ? 'am' : 'pm'); },
		A: function(date) { return (date.getHours() < 12 ? 'AM' : 'PM'); },
		g: function(date) { return ((date.getHours() %12) ? date.getHours() % 12 : 12); },
		G: function(date) { return date.getHours(); },
		h: function(date) { return stringLeftPad((date.getHours() %12) ? date.getHours() % 12 : 12, 2, '0'); },
		H: function(date) { return stringLeftPad(date.getHours(), 2, '0'); },
		i: function(date) { return stringLeftPad(date.getMinutes(), 2, '0'); },
		s: function(date) { return stringLeftPad(date.getSeconds(), 2, '0'); },
		O: function(date) { return date.getGMTOffset(); },
		T: function(date) { return date.getTimezone(); },
		Z: function(date) { return (date.getTimezoneOffset() * -60); }
	};

	Date.prototype.dateFormat = function(format) {
		formatFunctions[format]  || createNewFormat(format);
		return formatFunctions[format](this);
	};

	function createNewFormat(format) {
		var formatters = [];
		var special = false;
		var ch = '';
		for (var i = 0; i < format.length; ++i) {
			ch = format.charAt(i);
			if (!special && ch === "\\") {
				special = true;
			} else if (special) {
				special = false;
				formatters.push(stringEscape(ch));
			} else {
				formatters.push(charFormatters[ch] || stringEscape(ch));
			}
		}
		formatFunctions[format] = getFormatter(formatters);
	}

	function getFormatter(formatters) {
		return function(date) {
			var res = [];
			for (var i=0, l=formatters.length; i < l; i++) {
				res.push(typeof formatters[i] === 'string' ? formatters[i] : formatters[i](date));
			}
			return res.join('');
		};
	}

	Date.parseDate = function(input, format) {
		parseFunctions[format] || createParser(format);
		return parseFunctions[format](input);
	};

	function getParser(format, regexNum, assigns) {
		return function(input){
			var d = new Date();
			var results = input.match(parseRegexes[regexNum]);
			if (results && results.length > 0) {
				results.y = d.getFullYear();
				results.m = d.getMonth();
				results.d = d.getDate();
				results.h = -1;
				results.i = -1;
				results.s = -1;
				for ( var i = 0, l = assigns.length; i < l; i++) {
					assigns[i](results);
				}
				if (results.y > 0 && results.m >= 0 && results.d > 0 && results.h >= 0 && results.i >= 0 && results.s >= 0){
					return new Date(results.y, results.m, results.d, results.h, results.i, results.s);
				} else if (results.y > 0 && results.m >= 0 && results.d > 0 && results.h >= 0 && results.i >= 0) {
					return new Date(results.y, results.m, results.d, results.h, results.i);
				} else if (results.y > 0 && results.m >= 0 && results.d > 0 && results.h >= 0) {
					return new Date(results.y, results.m, results.d, results.h);
				} else if (results.y > 0 && results.m >= 0 && results.d > 0) {
					return new Date(results.y, results.m, results.d);
				} else if (results.y > 0 && results.m >= 0) {
					return new Date(results.y, results.m);
				} else if (results.y > 0) {
					return new Date(results.y);
				}
			}
			return null;
		};
	}

	function createParser(format) {
		var regexNum = parseRegexes.length;
		var currentGroup = 1;
		var regex = "";
		var special = false;
		var ch = '';
		var assigns=[];
		var obj;
		for (var i = 0; i < format.length; ++i) {
			ch = format.charAt(i);
			if (!special && ch === "\\") {
				special = true;
			} else if (special) {
				special = false;
				regex += stringEscape(ch);
			} else {
				obj = formatCodeToRegex(ch, currentGroup);
				currentGroup += obj.g;
				regex += obj.s;
				if (obj.g && obj.a) {
					assigns.push(obj.a);
				}
			}
		}

		parseRegexes[regexNum] = new RegExp("^" + regex + "$");
		parseFunctions[format] = getParser(format, regexNum, assigns);
	}

	function formatCodeToRegex(character, currentGroup) {
		switch (character) {
		case "D":
			return {g:0,
			s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
		case "j":
		case "d":
			return {g:1,
				a: function(results){ results.d = parseInt(results[currentGroup], 10);},
				s:"(\\d{1,2})"
			};
		case "l":
			return {g:0,
				s:"(?:" + Date.dayNames.join("|") + ")"};
		case "S":
			return {g:0,
				s:"(?:st|nd|rd|th)"};
		case "w":
			return {g:0,
				s:"\\d"};
		case "z":
			return {g:0,
				s:"(?:\\d{1,3})"};
		case "W":
			return {g:0,
				s:"(?:\\d{2})"};
		case "F":
			return {g:1,
				a: function(results) { results.m = parseInt(Date.monthNumbers[results[currentGroup].substring(0, 3)], 10);},
				s:"(" + Date.monthNames.join("|") + ")"};
		case "M":
			return {g:1,
				a: function(results) { results.m = parseInt(Date.monthNumbers[results[currentGroup]], 10);},
				s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
		case "n":
		case "m":
			return {g:1,
				a: function(results) { results.m = parseInt(results[currentGroup], 10) - 1;},
				s:"(\\d{1,2})"};
		case "t":
			return {g:0,
				s:"\\d{1,2}"};
		case "L":
			return {g:0,
				s:"(?:1|0)"};
		case "Y":
			return {g:1,
				a: function(results) { results.y = parseInt(results[currentGroup], 10);},
				s:"(\\d{4})"};
		case "y":
			return {g:1,
				a: function(results) {
					var ty = parseInt(results[currentGroup], 10);
					results.y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;
				},
				s:"(\\d{1,2})"};
		case "a":
			return {g:1,
				a: function(results) {
					if (results[currentGroup] === 'am') {
						if (results.h == 12) { results.h = 0; }
					} else {
						if (results.h < 12) { results.h += 12; }
					}
				},
				s:"(am|pm)"};
		case "A":
			return {g:1,
				a: function(results){
					if (results[currentGroup] === 'AM') {
						if (results.h == 12) { results.h = 0; }
					} else {
						if (results.h < 12) { results.h += 12; }
					}
				},
				s:"(AM|PM)"};
		case "g":
		case "G":
		case "h":
		case "H":
			return {g:1,
				a: function(results) {results.h = parseInt(results[currentGroup], 10);},
				s:"(\\d{1,2})"};
		case "i":
			return {g:1,
				a: function(results) {results.i = parseInt(results[currentGroup], 10);},
				s:"(\\d{2})"};
		case "s":
			return {g:1,
				a: function(results) {results.s = parseInt(results[currentGroup], 10);},
				s:"(\\d{2})"};
		case "O":
			return {g:0,
				s:"[+-]\\d{4}"};
		case "T":
			return {g:0,
				s:"[A-Z]{3}"};
		case "Z":
			return {g:0,
				s:"[+-]\\d{1,5}"};
		default:
			return {g:0,
				s:stringEscape(character)};
		 }
	}

	Date.prototype.getTimezone = function() {
		return this.toString().replace(
			/^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
			/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
	};

	Date.prototype.getGMTOffset = function() {
		return (this.getTimezoneOffset() > 0 ? "-" : "+")
			+ stringLeftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
			+ stringLeftPad(this.getTimezoneOffset() % 60, 2, "0");
	};

	Date.prototype.getDayOfYear = function() {
		var num = 0;
		Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
		for (var i = 0; i < this.getMonth(); ++i) {
			num += Date.daysInMonth[i];
		}
		return num + this.getDate() - 1;
	};

	Date.prototype.getWeekOfYear = function() {
		// Skip to Thursday of this week
		var now = this.getDayOfYear() + (4 - this.getDay());
		// Find the first Thursday of the year
		var jan1 = new Date(this.getFullYear(), 0, 1);
		var then = (7 - jan1.getDay() + 4);
		return stringLeftPad(((now - then) / 7) + 1, 2, "0");
	};

	Date.prototype.isLeapYear = function() {
		var year = this.getFullYear();
		return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year)));
	};

	Date.prototype.getFirstDayOfMonth = function() {
		var day = (this.getDay() - (this.getDate() - 1)) % 7;
		return (day < 0) ? (day + 7) : day;
	};

	Date.prototype.getLastDayOfMonth = function() {
		var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
		return (day < 0) ? (day + 7) : day;
	};

	Date.prototype.getDaysInMonth = function() {
		Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
		return Date.daysInMonth[this.getMonth()];
	};

	Date.prototype.getSuffix = function() {
		switch (this.getDate()) {
			case 1:
			case 21:
			case 31:
				return "st";
			case 2:
			case 22:
				return "nd";
			case 3:
			case 23:
				return "rd";
			default:
				return "th";
		}
	};

	function stringEscape(string) {
		return string.replace(/('|\\)/g, "\\$1");
	}

	function stringLeftPad(val, size, ch) {
		var result = "" + val;
		ch = ("" + ch) || " ";
		while (result.length < size) {
			result = ch + result;
		}
		return result;
	}

	Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
	Date.monthNames =
		["January",
			"February",
			"March",
			"April",
			"May",
			"June",
			"July",
			"August",
			"September",
			"October",
			"November",
			"December"];
	Date.dayNames =
		["Sunday",
			"Monday",
			"Tuesday",
			"Wednesday",
			"Thursday",
			"Friday",
			"Saturday"];
	Date.y2kYear = 50;
	Date.monthNumbers = {
		Jan:0,
		Feb:1,
		Mar:2,
		Apr:3,
		May:4,
		Jun:5,
		Jul:6,
		Aug:7,
		Sep:8,
		Oct:9,
		Nov:10,
		Dec:11};
	Date.patterns = {
		ISO8601LongPattern:"Y-m-d H:i:s",
		ISO8601ShortPattern:"Y-m-d",
		ShortDatePattern: "n/j/Y",
		LongDatePattern: "l, F d, Y",
		FullDateTimePattern: "l, F d, Y g:i:s A",
		MonthDayPattern: "F d",
		ShortTimePattern: "g:i A",
		LongTimePattern: "g:i:s A",
		SortableDateTimePattern: "Y-m-d\\TH:i:s",
		UniversalSortableDateTimePattern: "Y-m-d H:i:sO",
		YearMonthPattern: "F, Y"};
}));
;
// DOM.event.move
//
// 2.0.0
//
// Stephen Band
//
// Triggers 'movestart', 'move' and 'moveend' events after
// mousemoves following a mousedown cross a distance threshold,
// similar to the native 'dragstart', 'drag' and 'dragend' events.
// Move events are throttled to animation frames. Move event objects
// have the properties:
//
// pageX:
// pageY:     Page coordinates of pointer.
// startX:
// startY:    Page coordinates of pointer at movestart.
// distX:
// distY:     Distance the pointer has moved since movestart.
// deltaX:
// deltaY:    Distance the finger has moved since last event.
// velocityX:
// velocityY: Average velocity over last few events.


(function(fn) {
	if (typeof define === 'function' && define.amd) {
        define([], fn);
    } else if ((typeof module !== "undefined" && module !== null) && module.exports) {
        module.exports = fn;
	} else {
		fn();
	}
})(function(){
	var assign = Object.assign || window.jQuery && jQuery.extend;

	// Number of pixels a pressed pointer travels before movestart
	// event is fired.
	var threshold = 8;

	// Shim for requestAnimationFrame, falling back to timer. See:
	// see http://paulirish.com/2011/requestanimationframe-for-smart-animating/
	var requestFrame = (function(){
		return (
			window.requestAnimationFrame ||
			window.webkitRequestAnimationFrame ||
			window.mozRequestAnimationFrame ||
			window.oRequestAnimationFrame ||
			window.msRequestAnimationFrame ||
			function(fn, element){
				return window.setTimeout(function(){
					fn();
				}, 25);
			}
		);
	})();

	var ignoreTags = {
			textarea: true,
			input: true,
			select: true,
			button: true
		};

	var mouseevents = {
		move:   'mousemove',
		cancel: 'mouseup dragstart',
		end:    'mouseup'
	};

	var touchevents = {
		move:   'touchmove',
		cancel: 'touchend',
		end:    'touchend'
	};

	var rspaces = /\s+/;


	// DOM Events

	var eventOptions = { bubbles: true, cancelable: true };

	var eventsSymbol = Symbol('events');

	function createEvent(type) {
		return new CustomEvent(type, eventOptions);
	}

	function getEvents(node) {
		return node[eventsSymbol] || (node[eventsSymbol] = {});
	}

	function on(node, types, fn, data, selector) {
		types = types.split(rspaces);

		var events = getEvents(node);
		var i = types.length;
		var handlers, type;

		function handler(e) { fn(e, data); }

		while (i--) {
			type = types[i];
			handlers = events[type] || (events[type] = []);
			handlers.push([fn, handler]);
			node.addEventListener(type, handler);
		}
	}

	function off(node, types, fn, selector) {
		types = types.split(rspaces);

		var events = getEvents(node);
		var i = types.length;
		var type, handlers, k;

		if (!events) { return; }

		while (i--) {
			type = types[i];
			handlers = events[type];
			if (!handlers) { continue; }
			k = handlers.length;
			while (k--) {
				if (handlers[k][0] === fn) {
					node.removeEventListener(type, handlers[k][1]);
					handlers.splice(k, 1);
				}
			}
		}
	}

	function trigger(node, type, properties) {
		// Don't cache events. It prevents you from triggering an event of a
		// given type from inside the handler of another event of that type.
		var event = createEvent(type);
		if (properties) { assign(event, properties); }
		node.dispatchEvent(event);
	}


	// Constructors

	function Timer(fn){
		var callback = fn,
		    active = false,
		    running = false;

		function trigger(time) {
			if (active){
				callback();
				requestFrame(trigger);
				running = true;
				active = false;
			}
			else {
				running = false;
			}
		}

		this.kick = function(fn) {
			active = true;
			if (!running) { trigger(); }
		};

		this.end = function(fn) {
			var cb = callback;

			if (!fn) { return; }

			// If the timer is not running, simply call the end callback.
			if (!running) {
				fn();
			}
			// If the timer is running, and has been kicked lately, then
			// queue up the current callback and the end callback, otherwise
			// just the end callback.
			else {
				callback = active ?
					function(){ cb(); fn(); } :
					fn ;

				active = true;
			}
		};
	}


	// Functions

	function noop() {}

	function preventDefault(e) {
		e.preventDefault();
	}

	function isIgnoreTag(e) {
		return !!ignoreTags[e.target.tagName.toLowerCase()];
	}

	function isPrimaryButton(e) {
		// Ignore mousedowns on any button other than the left (or primary)
		// mouse button, or when a modifier key is pressed.
		return (e.which === 1 && !e.ctrlKey && !e.altKey);
	}

	function identifiedTouch(touchList, id) {
		var i, l;

		if (touchList.identifiedTouch) {
			return touchList.identifiedTouch(id);
		}

		// touchList.identifiedTouch() does not exist in
		// webkit yet… we must do the search ourselves...

		i = -1;
		l = touchList.length;

		while (++i < l) {
			if (touchList[i].identifier === id) {
				return touchList[i];
			}
		}
	}

	function changedTouch(e, data) {
		var touch = identifiedTouch(e.changedTouches, data.identifier);

		// This isn't the touch you're looking for.
		if (!touch) { return; }

		// Chrome Android (at least) includes touches that have not
		// changed in e.changedTouches. That's a bit annoying. Check
		// that this touch has changed.
		if (touch.pageX === data.pageX && touch.pageY === data.pageY) { return; }

		return touch;
	}


	// Handlers that decide when the first movestart is triggered

	function mousedown(e){
		// Ignore non-primary buttons
		if (!isPrimaryButton(e)) { return; }

		// Ignore form and interactive elements
		if (isIgnoreTag(e)) { return; }

		on(document, mouseevents.move, mousemove, e);
		on(document, mouseevents.cancel, mouseend, e);
	}

	function mousemove(e, data){
		checkThreshold(e, data, e, removeMouse);
	}

	function mouseend(e, data) {
		removeMouse();
	}

	function removeMouse() {
		off(document, mouseevents.move, mousemove);
		off(document, mouseevents.cancel, mouseend);
	}

	function touchstart(e) {
		// Don't get in the way of interaction with form elements
		if (ignoreTags[e.target.tagName.toLowerCase()]) { return; }

		var touch = e.changedTouches[0];

		// iOS live updates the touch objects whereas Android gives us copies.
		// That means we can't trust the touchstart object to stay the same,
		// so we must copy the data. This object acts as a template for
		// movestart, move and moveend event objects.
		var data = {
			target:     touch.target,
			pageX:      touch.pageX,
			pageY:      touch.pageY,
			identifier: touch.identifier,

			// The only way to make handlers individually unbindable is by
			// making them unique.
			touchmove:  function(e, data) { touchmove(e, data); },
			touchend:   function(e, data) { touchend(e, data); }
		};

		on(document, touchevents.move, data.touchmove, data);
		on(document, touchevents.cancel, data.touchend, data);
	}

	function touchmove(e, data) {
		var touch = changedTouch(e, data);
		if (!touch) { return; }
		checkThreshold(e, data, touch, removeTouch);
	}

	function touchend(e, data) {
		var touch = identifiedTouch(e.changedTouches, data.identifier);
		if (!touch) { return; }
		removeTouch(data);
	}

	function removeTouch(data) {
		off(document, touchevents.move, data.touchmove);
		off(document, touchevents.cancel, data.touchend);
	}

	function checkThreshold(e, data, touch, fn) {
		var distX = touch.pageX - data.pageX;
		var distY = touch.pageY - data.pageY;

		// Do nothing if the threshold has not been crossed.
		if ((distX * distX) + (distY * distY) < (threshold * threshold)) { return; }

		triggerStart(e, data, touch, distX, distY, fn);
	}

	function triggerStart(e, data, touch, distX, distY, fn) {
		var touches = e.targetTouches;
		var time = e.timeStamp - data.timeStamp;

		// Create a movestart object with some special properties that
		// are passed only to the movestart handlers.
		var template = {
			altKey:     e.altKey,
			ctrlKey:    e.ctrlKey,
			shiftKey:   e.shiftKey,
			startX:     data.pageX,
			startY:     data.pageY,
			distX:      distX,
			distY:      distY,
			deltaX:     distX,
			deltaY:     distY,
			pageX:      touch.pageX,
			pageY:      touch.pageY,
			velocityX:  distX / time,
			velocityY:  distY / time,
			identifier: data.identifier,
			targetTouches: touches,
			finger: touches ? touches.length : 1,
			enableMove: function() {
				this.moveEnabled = true;
				this.enableMove = noop;
				e.preventDefault();
			}
		};

		// Trigger the movestart event.
		trigger(data.target, 'movestart', template);

		// Unbind handlers that tracked the touch or mouse up till now.
		fn(data);
	}


	// Handlers that control what happens following a movestart

	function activeMousemove(e, data) {
		var timer  = data.timer;

		data.touch = e;
		data.timeStamp = e.timeStamp;
		timer.kick();
	}

	function activeMouseend(e, data) {
		var target = data.target;
		var event  = data.event;
		var timer  = data.timer;

		removeActiveMouse();

		endEvent(target, event, timer, function() {
			// Unbind the click suppressor, waiting until after mouseup
			// has been handled.
			setTimeout(function(){
				off(target, 'click', preventDefault);
			}, 0);
		});
	}

	function removeActiveMouse() {
		off(document, mouseevents.move, activeMousemove);
		off(document, mouseevents.end, activeMouseend);
	}

	function activeTouchmove(e, data) {
		var event = data.event;
		var timer = data.timer;
		var touch = changedTouch(e, event);

		if (!touch) { return; }

		// Stop the interface from gesturing
		e.preventDefault();

		event.targetTouches = e.targetTouches;
		data.touch = touch;
		data.timeStamp = e.timeStamp;

		timer.kick();
	}

	function activeTouchend(e, data) {
		var target = data.target;
		var event  = data.event;
		var timer  = data.timer;
		var touch  = identifiedTouch(e.changedTouches, event.identifier);

		// This isn't the touch you're looking for.
		if (!touch) { return; }

		removeActiveTouch(data);
		endEvent(target, event, timer);
	}

	function removeActiveTouch(data) {
		off(document, touchevents.move, data.activeTouchmove);
		off(document, touchevents.end, data.activeTouchend);
	}


	// Logic for triggering move and moveend events

	function updateEvent(event, touch, timeStamp) {
		var time = timeStamp - event.timeStamp;

		event.distX =  touch.pageX - event.startX;
		event.distY =  touch.pageY - event.startY;
		event.deltaX = touch.pageX - event.pageX;
		event.deltaY = touch.pageY - event.pageY;

		// Average the velocity of the last few events using a decay
		// curve to even out spurious jumps in values.
		event.velocityX = 0.3 * event.velocityX + 0.7 * event.deltaX / time;
		event.velocityY = 0.3 * event.velocityY + 0.7 * event.deltaY / time;
		event.pageX =  touch.pageX;
		event.pageY =  touch.pageY;
	}

	function endEvent(target, event, timer, fn) {
		timer.end(function(){
			trigger(target, 'moveend', event);
			return fn && fn();
		});
	}


	// Set up the DOM

	function movestart(e) {
		if (e.defaultPrevented) { return; }
		if (!e.moveEnabled) { return; }

		var event = {
			startX:        e.startX,
			startY:        e.startY,
			pageX:         e.pageX,
			pageY:         e.pageY,
			distX:         e.distX,
			distY:         e.distY,
			deltaX:        e.deltaX,
			deltaY:        e.deltaY,
			velocityX:     e.velocityX,
			velocityY:     e.velocityY,
			identifier:    e.identifier,
			targetTouches: e.targetTouches,
			finger:        e.finger
		};

		var data = {
			target:    e.target,
			event:     event,
			timer:     new Timer(update),
			touch:     undefined,
			timeStamp: e.timeStamp
		};

		function update(time) {
			updateEvent(event, data.touch, data.timeStamp);
			trigger(data.target, 'move', event);
		}

		if (e.identifier === undefined) {
			// We're dealing with a mouse event.
			// Stop clicks from propagating during a move
			on(e.target, 'click', preventDefault);
			on(document, mouseevents.move, activeMousemove, data);
			on(document, mouseevents.end, activeMouseend, data);
		}
		else {
			// In order to unbind correct handlers they have to be unique
			data.activeTouchmove = function(e, data) { activeTouchmove(e, data); };
			data.activeTouchend = function(e, data) { activeTouchend(e, data); };

			// We're dealing with a touch.
			on(document, touchevents.move, data.activeTouchmove, data);
			on(document, touchevents.end, data.activeTouchend, data);
		}
	}

	on(document, 'mousedown', mousedown);
	on(document, 'touchstart', touchstart);
	on(document, 'movestart', movestart);


	// jQuery special events
	//
	// jQuery event objects are copies of DOM event objects. They need
	// a little help copying the move properties across.

	if (!window.jQuery) { return; }

	var properties = ("startX startY pageX pageY distX distY deltaX deltaY velocityX velocityY").split(' ');

	function enableMove1(e) { e.enableMove(); }
	function enableMove2(e) { e.enableMove(); }
	function enableMove3(e) { e.enableMove(); }

	function add(handleObj) {
		var handler = handleObj.handler;

		handleObj.handler = function(e) {
			// Copy move properties across from originalEvent
			var i = properties.length;
			var property;

			while(i--) {
				property = properties[i];
				e[property] = e.originalEvent[property];
			}

			handler.apply(this, arguments);
		};
	}

	jQuery.event.special.movestart = {
		setup: function() {
			// Movestart must be enabled to allow other move events
			on(this, 'movestart', enableMove1);

			// Do listen to DOM events
			return false;
		},

		teardown: function() {
			off(this, 'movestart', enableMove1);
			return false;
		},

		add: add
	};

	jQuery.event.special.move = {
		setup: function() {
			on(this, 'movestart', enableMove2);
			return false;
		},

		teardown: function() {
			off(this, 'movestart', enableMove2);
			return false;
		},

		add: add
	};

	jQuery.event.special.moveend = {
		setup: function() {
			on(this, 'movestart', enableMove3);
			return false;
		},

		teardown: function() {
			off(this, 'movestart', enableMove3);
			return false;
		},

		add: add
	};
});;
/* Simple JavaScript Inheritance
 * By John Resig http://ejohn.org/
 * MIT Licensed.
 */
// Inspired by base2 and Prototype
(function(){
	var initializing = false;

	// The base JQClass implementation (does nothing)
	window.JQClass = function(){};

	// Collection of derived classes
	JQClass.classes = {};
 
	// Create a new JQClass that inherits from this class
	JQClass.extend = function extender(prop) {
		var base = this.prototype;

		// Instantiate a base class (but only create the instance,
		// don't run the init constructor)
		initializing = true;
		var prototype = new this();
		initializing = false;

		// Copy the properties over onto the new prototype
		for (var name in prop) {
			// Check if we're overwriting an existing function
			prototype[name] = typeof prop[name] == 'function' &&
				typeof base[name] == 'function' ?
				(function(name, fn){
					return function() {
						var __super = this._super;

						// Add a new ._super() method that is the same method
						// but on the super-class
						this._super = function(args) {
							return base[name].apply(this, args || []);
						};

						var ret = fn.apply(this, arguments);				

						// The method only need to be bound temporarily, so we
						// remove it when we're done executing
						this._super = __super;

						return ret;
					};
				})(name, prop[name]) :
				prop[name];
		}

		// The dummy class constructor
		function JQClass() {
			// All construction is actually done in the init method
			if (!initializing && this._init) {
				this._init.apply(this, arguments);
			}
		}

		// Populate our constructed prototype object
		JQClass.prototype = prototype;

		// Enforce the constructor to be what we expect
		JQClass.prototype.constructor = JQClass;

		// And make this class extendable
		JQClass.extend = extender;

		return JQClass;
	};
})();

(function($) { // Ensure $, encapsulate

	/** Abstract base class for collection plugins v1.0.1.
		Written by Keith Wood (kbwood{at}iinet.com.au) December 2013.
		Licensed under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license.
		@module $.JQPlugin
		@abstract */
	JQClass.classes.JQPlugin = JQClass.extend({

		/** Name to identify this plugin.
			@example name: 'tabs' */
		name: 'plugin',

		/** Default options for instances of this plugin (default: {}).
			@example defaultOptions: {
 	selectedClass: 'selected',
 	triggers: 'click'
 } */
		defaultOptions: {},
		
		/** Options dependent on the locale.
			Indexed by language and (optional) country code, with '' denoting the default language (English/US).
			@example regionalOptions: {
	'': {
		greeting: 'Hi'
	}
 } */
		regionalOptions: {},
		
		/** Names of getter methods - those that can't be chained (default: []).
			@example _getters: ['activeTab'] */
		_getters: [],

		/** Retrieve a marker class for affected elements.
			@private
			@return {string} The marker class. */
		_getMarker: function() {
			return 'is-' + this.name;
		},
		
		/** Initialise the plugin.
			Create the jQuery bridge - plugin name <code>xyz</code>
			produces <code>$.xyz</code> and <code>$.fn.xyz</code>. */
		_init: function() {
			// Apply default localisations
			$.extend(this.defaultOptions, (this.regionalOptions && this.regionalOptions['']) || {});
			// Camel-case the name
			var jqName = camelCase(this.name);
			// Expose jQuery singleton manager
			$[jqName] = this;
			// Expose jQuery collection plugin
			$.fn[jqName] = function(options) {
				var otherArgs = Array.prototype.slice.call(arguments, 1);
				if ($[jqName]._isNotChained(options, otherArgs)) {
					return $[jqName][options].apply($[jqName], [this[0]].concat(otherArgs));
				}
				return this.each(function() {
					if (typeof options === 'string') {
						if (options[0] === '_' || !$[jqName][options]) {
							throw 'Unknown method: ' + options;
						}
						$[jqName][options].apply($[jqName], [this].concat(otherArgs));
					}
					else {
						$[jqName]._attach(this, options);
					}
				});
			};
		},

		/** Set default values for all subsequent instances.
			@param options {object} The new default options.
			@example $.plugin.setDefauls({name: value}) */
		setDefaults: function(options) {
			$.extend(this.defaultOptions, options || {});
		},
		
		/** Determine whether a method is a getter and doesn't permit chaining.
			@private
			@param name {string} The method name.
			@param otherArgs {any[]} Any other arguments for the method.
			@return {boolean} True if this method is a getter, false otherwise. */
		_isNotChained: function(name, otherArgs) {
			if (name === 'option' && (otherArgs.length === 0 ||
					(otherArgs.length === 1 && typeof otherArgs[0] === 'string'))) {
				return true;
			}
			return $.inArray(name, this._getters) > -1;
		},
		
		/** Initialise an element. Called internally only.
			Adds an instance object as data named for the plugin.
			@param elem {Element} The element to enhance.
			@param options {object} Overriding settings. */
		_attach: function(elem, options) {
			elem = $(elem);
			if (elem.hasClass(this._getMarker())) {
				return;
			}
			elem.addClass(this._getMarker());
			options = $.extend({}, this.defaultOptions, this._getMetadata(elem), options || {});
			var inst = $.extend({name: this.name, elem: elem, options: options},
				this._instSettings(elem, options));
			elem.data(this.name, inst); // Save instance against element
			this._postAttach(elem, inst);
			this.option(elem, options);
		},

		/** Retrieve additional instance settings.
			Override this in a sub-class to provide extra settings.
			@param elem {jQuery} The current jQuery element.
			@param options {object} The instance options.
			@return {object} Any extra instance values.
			@example _instSettings: function(elem, options) {
 	return {nav: elem.find(options.navSelector)};
 } */
		_instSettings: function(elem, options) {
			return {};
		},

		/** Plugin specific post initialisation.
			Override this in a sub-class to perform extra activities.
			@param elem {jQuery} The current jQuery element.
			@param inst {object} The instance settings.
			@example _postAttach: function(elem, inst) {
 	elem.on('click.' + this.name, function() {
 		...
 	});
 } */
		_postAttach: function(elem, inst) {
		},

		/** Retrieve metadata configuration from the element.
			Metadata is specified as an attribute:
			<code>data-&lt;plugin name>="&lt;setting name>: '&lt;value>', ..."</code>.
			Dates should be specified as strings in this format: 'new Date(y, m-1, d)'.
			@private
			@param elem {jQuery} The source element.
			@return {object} The inline configuration or {}. */
		_getMetadata: function(elem) {
			try {
				var data = elem.data(this.name.toLowerCase()) || '';
				data = data.replace(/'/g, '"');
				data = data.replace(/([a-zA-Z0-9]+):/g, function(match, group, i) { 
					var count = data.substring(0, i).match(/"/g); // Handle embedded ':'
					return (!count || count.length % 2 === 0 ? '"' + group + '":' : group + ':');
				});
				data = $.parseJSON('{' + data + '}');
				for (var name in data) { // Convert dates
					var value = data[name];
					if (typeof value === 'string' && value.match(/^new Date\((.*)\)$/)) {
						data[name] = eval(value);
					}
				}
				return data;
			}
			catch (e) {
				return {};
			}
		},

		/** Retrieve the instance data for element.
			@param elem {Element} The source element.
			@return {object} The instance data or {}. */
		_getInst: function(elem) {
			return $(elem).data(this.name) || {};
		},
		
		/** Retrieve or reconfigure the settings for a plugin.
			@param elem {Element} The source element.
			@param name {object|string} The collection of new option values or the name of a single option.
			@param [value] {any} The value for a single named option.
			@return {any|object} If retrieving a single value or all options.
			@example $(selector).plugin('option', 'name', value)
 $(selector).plugin('option', {name: value, ...})
 var value = $(selector).plugin('option', 'name')
 var options = $(selector).plugin('option') */
		option: function(elem, name, value) {
			elem = $(elem);
			var inst = elem.data(this.name);
			if  (!name || (typeof name === 'string' && value == null)) {
				var options = (inst || {}).options;
				return (options && name ? options[name] : options);
			}
			if (!elem.hasClass(this._getMarker())) {
				return;
			}
			var options = name || {};
			if (typeof name === 'string') {
				options = {};
				options[name] = value;
			}
			this._optionsChanged(elem, inst, options);
			$.extend(inst.options, options);
		},
		
		/** Plugin specific options processing.
			Old value available in <code>inst.options[name]</code>, new value in <code>options[name]</code>.
			Override this in a sub-class to perform extra activities.
			@param elem {jQuery} The current jQuery element.
			@param inst {object} The instance settings.
			@param options {object} The new options.
			@example _optionsChanged: function(elem, inst, options) {
 	if (options.name != inst.options.name) {
 		elem.removeClass(inst.options.name).addClass(options.name);
 	}
 } */
		_optionsChanged: function(elem, inst, options) {
		},
		
		/** Remove all trace of the plugin.
			Override <code>_preDestroy</code> for plugin-specific processing.
			@param elem {Element} The source element.
			@example $(selector).plugin('destroy') */
		destroy: function(elem) {
			elem = $(elem);
			if (!elem.hasClass(this._getMarker())) {
				return;
			}
			this._preDestroy(elem, this._getInst(elem));
			elem.removeData(this.name).removeClass(this._getMarker());
		},

		/** Plugin specific pre destruction.
			Override this in a sub-class to perform extra activities and undo everything that was
			done in the <code>_postAttach</code> or <code>_optionsChanged</code> functions.
			@param elem {jQuery} The current jQuery element.
			@param inst {object} The instance settings.
			@example _preDestroy: function(elem, inst) {
 	elem.off('.' + this.name);
 } */
		_preDestroy: function(elem, inst) {
		}
	});
	
	/** Convert names from hyphenated to camel-case.
		@private
		@param value {string} The original hyphenated name.
		@return {string} The camel-case version. */
	function camelCase(name) {
		return name.replace(/-([a-z])/g, function(match, group) {
			return group.toUpperCase();
		});
	}
	
	/** Expose the plugin base.
		@namespace "$.JQPlugin" */
	$.JQPlugin = {
	
		/** Create a new collection plugin.
			@memberof "$.JQPlugin"
			@param [superClass='JQPlugin'] {string} The name of the parent class to inherit from.
			@param overrides {object} The property/function overrides for the new class.
			@example $.JQPlugin.createPlugin({
 	name: 'tabs',
 	defaultOptions: {selectedClass: 'selected'},
 	_initSettings: function(elem, options) { return {...}; },
 	_postAttach: function(elem, inst) { ... }
 }); */
		createPlugin: function(superClass, overrides) {
			if (typeof superClass === 'object') {
				overrides = superClass;
				superClass = 'JQPlugin';
			}
			superClass = camelCase(superClass);
			var className = camelCase(overrides.name);
			JQClass.classes[className] = JQClass.classes[superClass].extend(overrides);
			new JQClass.classes[className]();
		}
	};

})(jQuery);;
/*!
 * jQuery QuickFlip v2.1.1
 * http://jonraasch.com/blog/quickflip-2-jquery-plugin
 *
 * Copyright (c) 2009 Jon Raasch (http://jonraasch.com/)
 * Licensed under the FreeBSD License:
 * http://dev.jonraasch.com/quickflip/docs#licensing
 *
 */
/*
 * @author Jon Raasch
 *
 * @projectDescription    jQuery plugin to create a flipping effect
 * 
 * @version 2.1
 * 
 * @requires jquery.js (tested with v 1.3.2)
 *
 * @documentation http://dev.jonraasch.com/quickflip/docs
 *
 * @donations https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=4URDTZYUNPV3J&lc=US&item_name=Jon%20Raasch&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted
 * 
 *
 * FOR USAGE INSTRUCTIONS SEE THE DOCUMENATION AT: http://dev.jonraasch.com/quickflip/docs
 * 
 *
 */

( function( $ ) {
    // for better compression with YUI compressor
    var FALSE = false,
    NULL = null;
    
    $.quickFlip = {
        wrappers : [],
        opts  : [],
        objs     : [],
        
        init : function( options, box ) {
            var options = options || {};
            
            options.closeSpeed = options.closeSpeed || 180;
            options.openSpeed  = options.openSpeed  || 120;
            
            options.ctaSelector = options.ctaSelector || '.quickFlipCta';
            
            options.refresh = options.refresh || FALSE;
            
            options.easing = options.easing || 'swing';
            
            options.noResize = options.noResize || FALSE;
            
            options.vertical = options.vertical || FALSE;
            
            var $box = typeof( box ) != 'undefined' ? $(box) : $('.quickFlip'),
            $kids = $box.children();
            
            // define $box css
            if ( $box.css('position') == 'static' ) $box.css('position', 'relative');
            
            // define this index
            var i = $.quickFlip.wrappers.length;
            
            // close all but first panel before calculating dimensions
            $kids.each(function(j) {
                var $this = $(this);
                
                // attach standard click handler
                if ( options.ctaSelector ) {
                    $this.find(options.ctaSelector).on('click', function(ev) {
                        ev.preventDefault();
                        $.quickFlip.flip(i);
                    });
                }

                if ( j ) $this.hide();
            });
            
            $.quickFlip.opts.push( options );
            
            $.quickFlip.objs.push({$box : $($box), $kids : $($kids)});
            
            $.quickFlip.build(i);
            
            
            
            // quickFlip set up again on window resize
            if ( !options.noResize ) {
                $(window).resize( function() {
                    for ( var i = 0; i < $.quickFlip.wrappers.length; i++ ) {
                        $.quickFlip.removeFlipDivs(i);
                        
                        $.quickFlip.build(i);
                    }
                });
            }
        },
        
        build : function(i, currPanel) {
            // get box width and height
            $.quickFlip.opts[i].panelWidth = $.quickFlip.opts[i].panelWidth || $.quickFlip.objs[i].$box.width();
            $.quickFlip.opts[i].panelHeight = $.quickFlip.opts[i].panelHeight || $.quickFlip.objs[i].$box.height();
            
             // init quickFlip, gathering info and building necessary objects
            var options = $.quickFlip.opts[i],
            
            thisFlip = {
                wrapper    : $.quickFlip.objs[i].$box,
                index      : i,
                half       : parseInt( (options.vertical ? options.panelHeight : options.panelWidth) / 2),
                panels     : [],
                flipDivs   : [],
                flipDivCols : [],
                currPanel   : currPanel || 0,
                options     : options
            };
            
            // define each panel
            $.quickFlip.objs[i].$kids.each(function(j) {
                var $thisPanel = $(this).css({
                    position : 'absolute',
                    top : 0,
                    left : 0,
                    margin : 0,
                    padding : 0,
                    width : options.panelWidth,
                    height : options.panelHeight
                });
                
                thisFlip.panels[j] = $thisPanel;
                
                // build flipDivs
                var $flipDivs = buildFlip( thisFlip, j ).hide().appendTo(thisFlip.wrapper);
                
                thisFlip.flipDivs[j] = $flipDivs;
                thisFlip.flipDivCols[j] = $flipDivs.children();
            });
            
            $.quickFlip.wrappers[i] = thisFlip;
            
            function buildFlip( x, y ) {
                // builds one column of the flip divs (left or right side)
                function buildFlipCol(x, y) {
                    var $col = $('<div></div>'),
                    $inner = x.panels[y].clone().show();
                    
                    $col.css(flipCss);
                    
                    $col.html($inner);
                    
                    return $col;
                }
            
                var $out = $('<div></div>'),
                
                inner = x.panels[y].html(),
                
                flipCss = {
                    width : options.vertical ? options.panelWidth : x.half,
                    height : options.vertical ? x.half : options.panelHeight,
                    position : 'absolute',
                    overflow : 'hidden',
                    margin : 0,
                    padding : 0
                };
                
                if ( options.vertical ) flipCss.left = 0;
                else flipCss.top = 0;
                
                var $col1 = $(buildFlipCol(x, y)).appendTo( $out ),
                $col2 = $(buildFlipCol(x, y)).appendTo( $out );
                
                if (options.vertical) {
                    $col1.css('bottom', x.half);
                    
                    $col2.css('top',  x.half);
                    
                    $col2.children().css({
                        top : NULL,
                        bottom: 0
                    });
                }
                else {
                    $col1.css('right', x.half);
                    $col2.css('left', x.half);
                    
                    $col2.children().css({
                        right : 0,
                        left : 'auto'
                    });
                }
                
                return $out;
            }
        },
        
        // function flip ( i is quickflip index, j is index of currently open panel)
        
        flip : function( i, nextPanel, repeater, options) {
            function combineOpts ( opts1, opts2 ) {
                opts1 = opts1 || {};
                opts2 = opts2 || {};
                
                for ( opt in opts1 ) {
                    opts2[opt] = opts1[opt];
                }
                
                return opts2;
            }
        
            if ( typeof i != 'number' || typeof $.quickFlip.wrappers[i] == 'undefined' ) return;
            
            var x = $.quickFlip.wrappers[i],
        
            j = x.currPanel,
            k = ( typeof(nextPanel) != 'undefined' && nextPanel != NULL ) ? nextPanel : ( x.panels.length > j + 1 ) ? j + 1 : 0;
            x.currPanel = k,
            
            repeater = ( typeof(repeater) != 'undefined' && repeater != NULL ) ? repeater : 1;
            
            options = combineOpts( options, $.quickFlip.opts[i] );
    
            x.panels[j].hide()
            
            // if refresh set, remove flipDivs and rebuild
            if ( options.refresh ) {
                $.quickFlip.removeFlipDivs(i);
                $.quickFlip.build(i, k);
                
                x = $.quickFlip.wrappers[i];
            }
            
            x.flipDivs[j].show();
            
            // these are due to multiple animations needing a callback
            var panelFlipCount1 = 0,
            panelFlipCount2 = 0,
            closeCss = options.vertical ? { height : 0 } : { width : 0 },
            openCss = options.vertical ? { height : x.half } : { width : x.half };
            
            x.flipDivCols[j].animate( closeCss, options.closeSpeed, options.easing, function() {
                if ( !panelFlipCount1 ) {
                    panelFlipCount1++;
                }
                else {
                    x.flipDivs[k].show();
                    
                    x.flipDivCols[k].css(closeCss);
                    
                    x.flipDivCols[k].animate(openCss, options.openSpeed, options.easing, function() {
                        if ( !panelFlipCount2 ) {
                            panelFlipCount2++;
                        }
                        else {
                            
                            x.flipDivs[k].hide();
                            
                            x.panels[k].show();
                            
                            // handle any looping of the animation
                            switch( repeater ) {
                                case 0:
                                case -1:
                                    $.quickFlip.flip( i, NULL, -1);
                                    break;
                                
                                //stop if is last flip, and attach events for msie
                                case 1: 
                                    break;
                                    
                                default:
                                    $.quickFlip.flip( i, NULL, repeater - 1);
                                    break;
                            }
                        }
                    });
                }
            });
            
        },
        
        removeFlipDivs : function(i) {
            for ( var j = 0; j < $.quickFlip.wrappers[i].flipDivs.length; j++ ) $.quickFlip.wrappers[i].flipDivs[j].remove();
        }
    };

    $.fn.quickFlip = function( options ) {
        this.each( function() {
            new $.quickFlip.init( options, this );
        });
        
        return this;
    };
    
    $.fn.whichQuickFlip = function() {
        function compare(obj1, obj2) {
            if (!obj1 || !obj2 || !obj1.length || !obj2.length || obj1.length != obj2.length) return FALSE;
            
            for ( var i = 0; i < obj1.length; i++ ) {
                if (obj1[i]!==obj2[i]) return FALSE;
            }
            return true;
        }
        
        var out = NULL;
        
        for ( var i=0; i < $.quickFlip.wrappers.length; i++ ) {
            if ( compare(this, $( $.quickFlip.wrappers[i].wrapper)) ) out = i;
        }
        
        return out;
    };
    
    $.fn.quickFlipper = function( options, nextPanel, repeater ) {
        this.each( function() {
            var $this = $(this),
            thisIndex = $this.whichQuickFlip();
            
            // if doesnt exist, set it up
            if ( thisIndex == NULL ) {
                $this.quickFlip( options );
                
                thisIndex = $this.whichQuickFlip();
            }
            
            $.quickFlip.flip( thisIndex, nextPanel, repeater, options );
        });
    };
    
})( jQuery );;
(function($){

  $.fn.twentytwenty = function(options) {
    var options = $.extend({default_offset_pct: 0.5, orientation: 'horizontal', before_label: 'Before', after_label: 'After', no_overlay: false}, options);
    return this.each(function() {

      var sliderPct = options.default_offset_pct;
      var container = $(this);
      var sliderOrientation = options.orientation;
      var beforeDirection = (sliderOrientation === 'vertical') ? 'down' : 'left';
      var afterDirection = (sliderOrientation === 'vertical') ? 'up' : 'right';


      container.wrap("<div class='twentytwenty-wrapper twentytwenty-" + sliderOrientation + "'></div>");
      if(!options.no_overlay) {
        container.append("<div class='twentytwenty-overlay'></div>");
      }
      var beforeImg = container.find("img:first");
      var afterImg = container.find("img:last");
      container.append("<div class='twentytwenty-handle'></div>");
      var slider = container.find(".twentytwenty-handle");
      slider.append("<span class='twentytwenty-" + beforeDirection + "-arrow'></span>");
      slider.append("<span class='twentytwenty-" + afterDirection + "-arrow'></span>");
      container.addClass("twentytwenty-container");
      beforeImg.addClass("twentytwenty-before");
      afterImg.addClass("twentytwenty-after");

      var overlay = container.find(".twentytwenty-overlay");
      overlay.append("<div class='twentytwenty-before-label' data-content='"+options.before_label+"'></div>");
      overlay.append("<div class='twentytwenty-after-label' data-content='"+options.after_label+"'></div>");

      var calcOffset = function(dimensionPct) {
        var w = beforeImg.width();
        var h = beforeImg.height();
        return {
          w: w+"px",
          h: h+"px",
          cw: (dimensionPct*w)+"px",
          ch: (dimensionPct*h)+"px"
        };
      };

      var adjustContainer = function(offset) {
      	if (sliderOrientation === 'vertical') {
          beforeImg.css("clip", "rect(0,"+offset.w+","+offset.ch+",0)");
          afterImg.css("clip", "rect("+offset.ch+","+offset.w+","+offset.h+",0)");
      	}
      	else {
          beforeImg.css("clip", "rect(0,"+offset.cw+","+offset.h+",0)");
          afterImg.css("clip", "rect(0,"+offset.w+","+offset.h+","+offset.cw+")");
    	}
        container.css("height", offset.h);
      };

      var adjustSlider = function(pct) {
        var offset = calcOffset(pct);
        slider.css((sliderOrientation==="vertical") ? "top" : "left", (sliderOrientation==="vertical") ? offset.ch : offset.cw);
        adjustContainer(offset);
      };

      $(window).on("resize.twentytwenty", function(e) {
        adjustSlider(sliderPct);
      });

      var offsetX = 0;
      var offsetY = 0;
      var imgWidth = 0;
      var imgHeight = 0;
      
      slider.on("movestart", function(e) {
        if (((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) && sliderOrientation !== 'vertical') {
          e.preventDefault();
        }
        else if (((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) && sliderOrientation === 'vertical') {
          e.preventDefault();
        }
        container.addClass("active");
        offsetX = container.offset().left;
        offsetY = container.offset().top;
        imgWidth = beforeImg.width(); 
        imgHeight = beforeImg.height();          
      });

      slider.on("moveend", function(e) {
        container.removeClass("active");
      });

      slider.on("move", function(e) {
        if (container.hasClass("active")) {
          sliderPct = (sliderOrientation === 'vertical') ? (e.pageY-offsetY)/imgHeight : (e.pageX-offsetX)/imgWidth;
          if (sliderPct < 0) {
            sliderPct = 0;
          }
          if (sliderPct > 1) {
            sliderPct = 1;
          }
          adjustSlider(sliderPct);
        }
      });
      
      slider.on("touchmove", function(e) {
        e.preventDefault();
      });

      container.find("img").on("mousedown", function(event) {
        event.preventDefault();
      });

      $(window).trigger("resize.twentytwenty");
    });
  };

})(jQuery);
;
/*!
 * Knockout JavaScript library v3.4.0
 * (c) Steven Sanderson - http://knockoutjs.com/
 * License: MIT (http://www.opensource.org/licenses/mit-license.php)
 */

(function () {
    (function (n) {
        var x = this || (0, eval)("this"), u = x.document, M = x.navigator, v = x.jQuery, F = x.JSON; (function (n) { "function" === typeof define && define.amd ? define(["exports", "require"], n) : "object" === typeof exports && "object" === typeof module ? n(module.exports || exports) : n(x.ko = {}) })(function (N, O) {
            function J(a, c) { return null === a || typeof a in T ? a === c : !1 } function U(b, c) { var d; return function () { d || (d = a.a.setTimeout(function () { d = n; b() }, c)) } } function V(b, c) { var d; return function () { clearTimeout(d); d = a.a.setTimeout(b, c) } } function W(a,
            c) { c && c !== I ? "beforeChange" === c ? this.Kb(a) : this.Ha(a, c) : this.Lb(a) } function X(a, c) { null !== c && c.k && c.k() } function Y(a, c) { var d = this.Hc, e = d[s]; e.R || (this.lb && this.Ma[c] ? (d.Pb(c, a, this.Ma[c]), this.Ma[c] = null, --this.lb) : e.r[c] || d.Pb(c, a, e.s ? { ia: a } : d.uc(a))) } function K(b, c, d, e) {
                a.d[b] = { init: function (b, g, k, l, m) { var h, r; a.m(function () { var q = a.a.c(g()), p = !d !== !q, A = !r; if (A || c || p !== h) A && a.va.Aa() && (r = a.a.ua(a.f.childNodes(b), !0)), p ? (A || a.f.da(b, a.a.ua(r)), a.eb(e ? e(m, q) : m, b)) : a.f.xa(b), h = p }, null, { i: b }); return { controlsDescendantBindings: !0 } } };
                a.h.ta[b] = !1; a.f.Z[b] = !0
            } var a = "undefined" !== typeof N ? N : {}; a.b = function (b, c) { for (var d = b.split("."), e = a, f = 0; f < d.length - 1; f++) e = e[d[f]]; e[d[d.length - 1]] = c }; a.G = function (a, c, d) { a[c] = d }; a.version = "3.4.0"; a.b("version", a.version); a.options = { deferUpdates: !1, useOnlyNativeEvents: !1 }; a.a = function () {
                function b(a, b) { for (var c in a) a.hasOwnProperty(c) && b(c, a[c]) } function c(a, b) { if (b) for (var c in b) b.hasOwnProperty(c) && (a[c] = b[c]); return a } function d(a, b) { a.__proto__ = b; return a } function e(b, c, d, e) {
                    var h = b[c].match(r) ||
                    []; a.a.q(d.match(r), function (b) { a.a.pa(h, b, e) }); b[c] = h.join(" ")
                } var f = { __proto__: [] } instanceof Array, g = "function" === typeof Symbol, k = {}, l = {}; k[M && /Firefox\/2/i.test(M.userAgent) ? "KeyboardEvent" : "UIEvents"] = ["keyup", "keydown", "keypress"]; k.MouseEvents = "click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "); b(k, function (a, b) { if (b.length) for (var c = 0, d = b.length; c < d; c++) l[b[c]] = a }); var m = { propertychange: !0 }, h = u && function () {
                    for (var a = 3, b = u.createElement("div"), c =
                    b.getElementsByTagName("i") ; b.innerHTML = "\x3c!--[if gt IE " + ++a + "]><i></i><![endif]--\x3e", c[0];); return 4 < a ? a : n
                }(), r = /\S+/g; return {
                    cc: ["authenticity_token", /^__RequestVerificationToken(_.*)?$/], q: function (a, b) { for (var c = 0, d = a.length; c < d; c++) b(a[c], c) }, o: function (a, b) { if ("function" == typeof Array.prototype.indexOf) return Array.prototype.indexOf.call(a, b); for (var c = 0, d = a.length; c < d; c++) if (a[c] === b) return c; return -1 }, Sb: function (a, b, c) {
                        for (var d = 0, e = a.length; d < e; d++) if (b.call(c, a[d], d)) return a[d];
                        return null
                    }, La: function (b, c) { var d = a.a.o(b, c); 0 < d ? b.splice(d, 1) : 0 === d && b.shift() }, Tb: function (b) { b = b || []; for (var c = [], d = 0, e = b.length; d < e; d++) 0 > a.a.o(c, b[d]) && c.push(b[d]); return c }, fb: function (a, b) { a = a || []; for (var c = [], d = 0, e = a.length; d < e; d++) c.push(b(a[d], d)); return c }, Ka: function (a, b) { a = a || []; for (var c = [], d = 0, e = a.length; d < e; d++) b(a[d], d) && c.push(a[d]); return c }, ra: function (a, b) { if (b instanceof Array) a.push.apply(a, b); else for (var c = 0, d = b.length; c < d; c++) a.push(b[c]); return a }, pa: function (b, c, d) {
                        var e =
                        a.a.o(a.a.zb(b), c); 0 > e ? d && b.push(c) : d || b.splice(e, 1)
                    }, ka: f, extend: c, Xa: d, Ya: f ? d : c, D: b, Ca: function (a, b) { if (!a) return a; var c = {}, d; for (d in a) a.hasOwnProperty(d) && (c[d] = b(a[d], d, a)); return c }, ob: function (b) { for (; b.firstChild;) a.removeNode(b.firstChild) }, jc: function (b) { b = a.a.V(b); for (var c = (b[0] && b[0].ownerDocument || u).createElement("div"), d = 0, e = b.length; d < e; d++) c.appendChild(a.$(b[d])); return c }, ua: function (b, c) { for (var d = 0, e = b.length, h = []; d < e; d++) { var m = b[d].cloneNode(!0); h.push(c ? a.$(m) : m) } return h },
                    da: function (b, c) { a.a.ob(b); if (c) for (var d = 0, e = c.length; d < e; d++) b.appendChild(c[d]) }, qc: function (b, c) { var d = b.nodeType ? [b] : b; if (0 < d.length) { for (var e = d[0], h = e.parentNode, m = 0, l = c.length; m < l; m++) h.insertBefore(c[m], e); m = 0; for (l = d.length; m < l; m++) a.removeNode(d[m]) } }, za: function (a, b) {
                        if (a.length) {
                            for (b = 8 === b.nodeType && b.parentNode || b; a.length && a[0].parentNode !== b;) a.splice(0, 1); for (; 1 < a.length && a[a.length - 1].parentNode !== b;) a.length--; if (1 < a.length) {
                                var c = a[0], d = a[a.length - 1]; for (a.length = 0; c !== d;) a.push(c),
                                c = c.nextSibling; a.push(d)
                            }
                        } return a
                    }, sc: function (a, b) { 7 > h ? a.setAttribute("selected", b) : a.selected = b }, $a: function (a) { return null === a || a === n ? "" : a.trim ? a.trim() : a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g, "") }, nd: function (a, b) { a = a || ""; return b.length > a.length ? !1 : a.substring(0, b.length) === b }, Mc: function (a, b) {
                        if (a === b) return !0; if (11 === a.nodeType) return !1; if (b.contains) return b.contains(3 === a.nodeType ? a.parentNode : a); if (b.compareDocumentPosition) return 16 == (b.compareDocumentPosition(a) & 16); for (; a && a !=
                        b;) a = a.parentNode; return !!a
                    }, nb: function (b) { return a.a.Mc(b, b.ownerDocument.documentElement) }, Qb: function (b) { return !!a.a.Sb(b, a.a.nb) }, A: function (a) { return a && a.tagName && a.tagName.toLowerCase() }, Wb: function (b) { return a.onError ? function () { try { return b.apply(this, arguments) } catch (c) { throw a.onError && a.onError(c), c; } } : b }, setTimeout: function (b, c) { return setTimeout(a.a.Wb(b), c) }, $b: function (b) { setTimeout(function () { a.onError && a.onError(b); throw b; }, 0) }, p: function (b, c, d) {
                        var e = a.a.Wb(d); d = h && m[c]; if (a.options.useOnlyNativeEvents ||
                        d || !v) if (d || "function" != typeof b.addEventListener) if ("undefined" != typeof b.attachEvent) { var l = function (a) { e.call(b, a) }, f = "on" + c; b.attachEvent(f, l); a.a.F.oa(b, function () { b.detachEvent(f, l) }) } else throw Error("Browser doesn't support addEventListener or attachEvent"); else b.addEventListener(c, e, !1); else v(b).bind(c, e)
                    }, Da: function (b, c) {
                        if (!b || !b.nodeType) throw Error("element must be a DOM node when calling triggerEvent"); var d; "input" === a.a.A(b) && b.type && "click" == c.toLowerCase() ? (d = b.type, d = "checkbox" ==
                        d || "radio" == d) : d = !1; if (a.options.useOnlyNativeEvents || !v || d) if ("function" == typeof u.createEvent) if ("function" == typeof b.dispatchEvent) d = u.createEvent(l[c] || "HTMLEvents"), d.initEvent(c, !0, !0, x, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, b), b.dispatchEvent(d); else throw Error("The supplied element doesn't support dispatchEvent"); else if (d && b.click) b.click(); else if ("undefined" != typeof b.fireEvent) b.fireEvent("on" + c); else throw Error("Browser doesn't support triggering events"); else v(b).trigger(c)
                    }, c: function (b) {
                        return a.H(b) ?
                        b() : b
                    }, zb: function (b) { return a.H(b) ? b.t() : b }, bb: function (b, c, d) { var h; c && ("object" === typeof b.classList ? (h = b.classList[d ? "add" : "remove"], a.a.q(c.match(r), function (a) { h.call(b.classList, a) })) : "string" === typeof b.className.baseVal ? e(b.className, "baseVal", c, d) : e(b, "className", c, d)) }, Za: function (b, c) { var d = a.a.c(c); if (null === d || d === n) d = ""; var e = a.f.firstChild(b); !e || 3 != e.nodeType || a.f.nextSibling(e) ? a.f.da(b, [b.ownerDocument.createTextNode(d)]) : e.data = d; a.a.Rc(b) }, rc: function (a, b) {
                        a.name = b; if (7 >= h) try {
                            a.mergeAttributes(u.createElement("<input name='" +
                            a.name + "'/>"), !1)
                        } catch (c) { }
                    }, Rc: function (a) { 9 <= h && (a = 1 == a.nodeType ? a : a.parentNode, a.style && (a.style.zoom = a.style.zoom)) }, Nc: function (a) { if (h) { var b = a.style.width; a.style.width = 0; a.style.width = b } }, hd: function (b, c) { b = a.a.c(b); c = a.a.c(c); for (var d = [], e = b; e <= c; e++) d.push(e); return d }, V: function (a) { for (var b = [], c = 0, d = a.length; c < d; c++) b.push(a[c]); return b }, Yb: function (a) { return g ? Symbol(a) : a }, rd: 6 === h, sd: 7 === h, C: h, ec: function (b, c) {
                        for (var d = a.a.V(b.getElementsByTagName("input")).concat(a.a.V(b.getElementsByTagName("textarea"))),
                        e = "string" == typeof c ? function (a) { return a.name === c } : function (a) { return c.test(a.name) }, h = [], m = d.length - 1; 0 <= m; m--) e(d[m]) && h.push(d[m]); return h
                    }, ed: function (b) { return "string" == typeof b && (b = a.a.$a(b)) ? F && F.parse ? F.parse(b) : (new Function("return " + b))() : null }, Eb: function (b, c, d) {
                        if (!F || !F.stringify) throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
                        return F.stringify(a.a.c(b), c, d)
                    }, fd: function (c, d, e) {
                        e = e || {}; var h = e.params || {}, m = e.includeFields || this.cc, l = c; if ("object" == typeof c && "form" === a.a.A(c)) for (var l = c.action, f = m.length - 1; 0 <= f; f--) for (var g = a.a.ec(c, m[f]), k = g.length - 1; 0 <= k; k--) h[g[k].name] = g[k].value; d = a.a.c(d); var r = u.createElement("form"); r.style.display = "none"; r.action = l; r.method = "post"; for (var n in d) c = u.createElement("input"), c.type = "hidden", c.name = n, c.value = a.a.Eb(a.a.c(d[n])), r.appendChild(c); b(h, function (a, b) {
                            var c = u.createElement("input");
                            c.type = "hidden"; c.name = a; c.value = b; r.appendChild(c)
                        }); u.body.appendChild(r); e.submitter ? e.submitter(r) : r.submit(); setTimeout(function () { r.parentNode.removeChild(r) }, 0)
                    }
                }
            }(); a.b("utils", a.a); a.b("utils.arrayForEach", a.a.q); a.b("utils.arrayFirst", a.a.Sb); a.b("utils.arrayFilter", a.a.Ka); a.b("utils.arrayGetDistinctValues", a.a.Tb); a.b("utils.arrayIndexOf", a.a.o); a.b("utils.arrayMap", a.a.fb); a.b("utils.arrayPushAll", a.a.ra); a.b("utils.arrayRemoveItem", a.a.La); a.b("utils.extend", a.a.extend); a.b("utils.fieldsIncludedWithJsonPost",
            a.a.cc); a.b("utils.getFormFields", a.a.ec); a.b("utils.peekObservable", a.a.zb); a.b("utils.postJson", a.a.fd); a.b("utils.parseJson", a.a.ed); a.b("utils.registerEventHandler", a.a.p); a.b("utils.stringifyJson", a.a.Eb); a.b("utils.range", a.a.hd); a.b("utils.toggleDomNodeCssClass", a.a.bb); a.b("utils.triggerEvent", a.a.Da); a.b("utils.unwrapObservable", a.a.c); a.b("utils.objectForEach", a.a.D); a.b("utils.addOrRemoveItem", a.a.pa); a.b("utils.setTextContent", a.a.Za); a.b("unwrap", a.a.c); Function.prototype.bind || (Function.prototype.bind =
            function (a) { var c = this; if (1 === arguments.length) return function () { return c.apply(a, arguments) }; var d = Array.prototype.slice.call(arguments, 1); return function () { var e = d.slice(0); e.push.apply(e, arguments); return c.apply(a, e) } }); a.a.e = new function () {
                function a(b, g) { var k = b[d]; if (!k || "null" === k || !e[k]) { if (!g) return n; k = b[d] = "ko" + c++; e[k] = {} } return e[k] } var c = 0, d = "__ko__" + (new Date).getTime(), e = {}; return {
                    get: function (c, d) { var e = a(c, !1); return e === n ? n : e[d] }, set: function (c, d, e) {
                        if (e !== n || a(c, !1) !== n) a(c, !0)[d] =
                        e
                    }, clear: function (a) { var b = a[d]; return b ? (delete e[b], a[d] = null, !0) : !1 }, I: function () { return c++ + d }
                }
            }; a.b("utils.domData", a.a.e); a.b("utils.domData.clear", a.a.e.clear); a.a.F = new function () {
                function b(b, c) { var e = a.a.e.get(b, d); e === n && c && (e = [], a.a.e.set(b, d, e)); return e } function c(d) { var e = b(d, !1); if (e) for (var e = e.slice(0), l = 0; l < e.length; l++) e[l](d); a.a.e.clear(d); a.a.F.cleanExternalData(d); if (f[d.nodeType]) for (e = d.firstChild; d = e;) e = d.nextSibling, 8 === d.nodeType && c(d) } var d = a.a.e.I(), e = { 1: !0, 8: !0, 9: !0 },
                f = { 1: !0, 9: !0 }; return { oa: function (a, c) { if ("function" != typeof c) throw Error("Callback must be a function"); b(a, !0).push(c) }, pc: function (c, e) { var l = b(c, !1); l && (a.a.La(l, e), 0 == l.length && a.a.e.set(c, d, n)) }, $: function (b) { if (e[b.nodeType] && (c(b), f[b.nodeType])) { var d = []; a.a.ra(d, b.getElementsByTagName("*")); for (var l = 0, m = d.length; l < m; l++) c(d[l]) } return b }, removeNode: function (b) { a.$(b); b.parentNode && b.parentNode.removeChild(b) }, cleanExternalData: function (a) { v && "function" == typeof v.cleanData && v.cleanData([a]) } }
            };
            a.$ = a.a.F.$; a.removeNode = a.a.F.removeNode; a.b("cleanNode", a.$); a.b("removeNode", a.removeNode); a.b("utils.domNodeDisposal", a.a.F); a.b("utils.domNodeDisposal.addDisposeCallback", a.a.F.oa); a.b("utils.domNodeDisposal.removeDisposeCallback", a.a.F.pc); (function () {
                var b = [0, "", ""], c = [1, "<table>", "</table>"], d = [3, "<table><tbody><tr>", "</tr></tbody></table>"], e = [1, "<select multiple='multiple'>", "</select>"], f = { thead: c, tbody: c, tfoot: c, tr: [2, "<table><tbody>", "</tbody></table>"], td: d, th: d, option: e, optgroup: e },
                g = 8 >= a.a.C; a.a.ma = function (c, d) {
                    var e; if (v) if (v.parseHTML) e = v.parseHTML(c, d) || []; else { if ((e = v.clean([c], d)) && e[0]) { for (var h = e[0]; h.parentNode && 11 !== h.parentNode.nodeType;) h = h.parentNode; h.parentNode && h.parentNode.removeChild(h) } } else {
                        (e = d) || (e = u); var h = e.parentWindow || e.defaultView || x, r = a.a.$a(c).toLowerCase(), q = e.createElement("div"), p; p = (r = r.match(/^<([a-z]+)[ >]/)) && f[r[1]] || b; r = p[0]; p = "ignored<div>" + p[1] + c + p[2] + "</div>"; "function" == typeof h.innerShiv ? q.appendChild(h.innerShiv(p)) : (g && e.appendChild(q),
                        q.innerHTML = p, g && q.parentNode.removeChild(q)); for (; r--;) q = q.lastChild; e = a.a.V(q.lastChild.childNodes)
                    } return e
                }; a.a.Cb = function (b, c) { a.a.ob(b); c = a.a.c(c); if (null !== c && c !== n) if ("string" != typeof c && (c = c.toString()), v) v(b).html(c); else for (var d = a.a.ma(c, b.ownerDocument), e = 0; e < d.length; e++) b.appendChild(d[e]) }
            })(); a.b("utils.parseHtmlFragment", a.a.ma); a.b("utils.setHtml", a.a.Cb); a.M = function () {
                function b(c, e) {
                    if (c) if (8 == c.nodeType) { var f = a.M.lc(c.nodeValue); null != f && e.push({ Lc: c, cd: f }) } else if (1 == c.nodeType) for (var f =
                    0, g = c.childNodes, k = g.length; f < k; f++) b(g[f], e)
                } var c = {}; return {
                    wb: function (a) { if ("function" != typeof a) throw Error("You can only pass a function to ko.memoization.memoize()"); var b = (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1) + (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1); c[b] = a; return "\x3c!--[ko_memo:" + b + "]--\x3e" }, xc: function (a, b) {
                        var f = c[a]; if (f === n) throw Error("Couldn't find any memo with ID " + a + ". Perhaps it's already been unmemoized."); try {
                            return f.apply(null, b || []),
                            !0
                        } finally { delete c[a] }
                    }, yc: function (c, e) { var f = []; b(c, f); for (var g = 0, k = f.length; g < k; g++) { var l = f[g].Lc, m = [l]; e && a.a.ra(m, e); a.M.xc(f[g].cd, m); l.nodeValue = ""; l.parentNode && l.parentNode.removeChild(l) } }, lc: function (a) { return (a = a.match(/^\[ko_memo\:(.*?)\]$/)) ? a[1] : null }
                }
            }(); a.b("memoization", a.M); a.b("memoization.memoize", a.M.wb); a.b("memoization.unmemoize", a.M.xc); a.b("memoization.parseMemoText", a.M.lc); a.b("memoization.unmemoizeDomNodeAndDescendants", a.M.yc); a.Y = function () {
                function b() {
                    if (e) for (var b =
                    e, c = 0, m; g < e;) if (m = d[g++]) { if (g > b) { if (5E3 <= ++c) { g = e; a.a.$b(Error("'Too much recursion' after processing " + c + " task groups.")); break } b = e } try { m() } catch (h) { a.a.$b(h) } }
                } function c() { b(); g = e = d.length = 0 } var d = [], e = 0, f = 1, g = 0; return {
                    scheduler: x.MutationObserver ? function (a) { var b = u.createElement("div"); (new MutationObserver(a)).observe(b, { attributes: !0 }); return function () { b.classList.toggle("foo") } }(c) : u && "onreadystatechange" in u.createElement("script") ? function (a) {
                        var b = u.createElement("script"); b.onreadystatechange =
                        function () { b.onreadystatechange = null; u.documentElement.removeChild(b); b = null; a() }; u.documentElement.appendChild(b)
                    } : function (a) { setTimeout(a, 0) }, Wa: function (b) { e || a.Y.scheduler(c); d[e++] = b; return f++ }, cancel: function (a) { a -= f - e; a >= g && a < e && (d[a] = null) }, resetForTesting: function () { var a = e - g; g = e = d.length = 0; return a }, md: b
                }
            }(); a.b("tasks", a.Y); a.b("tasks.schedule", a.Y.Wa); a.b("tasks.runEarly", a.Y.md); a.ya = {
                throttle: function (b, c) {
                    b.throttleEvaluation = c; var d = null; return a.B({
                        read: b, write: function (e) {
                            clearTimeout(d);
                            d = a.a.setTimeout(function () { b(e) }, c)
                        }
                    })
                }, rateLimit: function (a, c) { var d, e, f; "number" == typeof c ? d = c : (d = c.timeout, e = c.method); a.cb = !1; f = "notifyWhenChangesStop" == e ? V : U; a.Ta(function (a) { return f(a, d) }) }, deferred: function (b, c) { if (!0 !== c) throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled."); b.cb || (b.cb = !0, b.Ta(function (c) { var e; return function () { a.Y.cancel(e); e = a.Y.Wa(c); b.notifySubscribers(n, "dirty") } })) }, notify: function (a, c) {
                    a.equalityComparer =
                    "always" == c ? null : J
                }
            }; var T = { undefined: 1, "boolean": 1, number: 1, string: 1 }; a.b("extenders", a.ya); a.vc = function (b, c, d) { this.ia = b; this.gb = c; this.Kc = d; this.R = !1; a.G(this, "dispose", this.k) }; a.vc.prototype.k = function () { this.R = !0; this.Kc() }; a.J = function () { a.a.Ya(this, D); D.rb(this) }; var I = "change", D = {
                rb: function (a) { a.K = {}; a.Nb = 1 }, X: function (b, c, d) { var e = this; d = d || I; var f = new a.vc(e, c ? b.bind(c) : b, function () { a.a.La(e.K[d], f); e.Ia && e.Ia(d) }); e.sa && e.sa(d); e.K[d] || (e.K[d] = []); e.K[d].push(f); return f }, notifySubscribers: function (b,
                c) { c = c || I; c === I && this.zc(); if (this.Pa(c)) try { a.l.Ub(); for (var d = this.K[c].slice(0), e = 0, f; f = d[e]; ++e) f.R || f.gb(b) } finally { a.l.end() } }, Na: function () { return this.Nb }, Uc: function (a) { return this.Na() !== a }, zc: function () { ++this.Nb }, Ta: function (b) { var c = this, d = a.H(c), e, f, g; c.Ha || (c.Ha = c.notifySubscribers, c.notifySubscribers = W); var k = b(function () { c.Mb = !1; d && g === c && (g = c()); e = !1; c.tb(f, g) && c.Ha(f = g) }); c.Lb = function (a) { c.Mb = e = !0; g = a; k() }; c.Kb = function (a) { e || (f = a, c.Ha(a, "beforeChange")) } }, Pa: function (a) {
                    return this.K[a] &&
                    this.K[a].length
                }, Sc: function (b) { if (b) return this.K[b] && this.K[b].length || 0; var c = 0; a.a.D(this.K, function (a, b) { "dirty" !== a && (c += b.length) }); return c }, tb: function (a, c) { return !this.equalityComparer || !this.equalityComparer(a, c) }, extend: function (b) { var c = this; b && a.a.D(b, function (b, e) { var f = a.ya[b]; "function" == typeof f && (c = f(c, e) || c) }); return c }
            }; a.G(D, "subscribe", D.X); a.G(D, "extend", D.extend); a.G(D, "getSubscriptionsCount", D.Sc); a.a.ka && a.a.Xa(D, Function.prototype); a.J.fn = D; a.hc = function (a) {
                return null !=
                a && "function" == typeof a.X && "function" == typeof a.notifySubscribers
            }; a.b("subscribable", a.J); a.b("isSubscribable", a.hc); a.va = a.l = function () { function b(a) { d.push(e); e = a } function c() { e = d.pop() } var d = [], e, f = 0; return { Ub: b, end: c, oc: function (b) { if (e) { if (!a.hc(b)) throw Error("Only subscribable things can act as dependencies"); e.gb.call(e.Gc, b, b.Cc || (b.Cc = ++f)) } }, w: function (a, d, e) { try { return b(), a.apply(d, e || []) } finally { c() } }, Aa: function () { if (e) return e.m.Aa() }, Sa: function () { if (e) return e.Sa } } }(); a.b("computedContext",
            a.va); a.b("computedContext.getDependenciesCount", a.va.Aa); a.b("computedContext.isInitial", a.va.Sa); a.b("ignoreDependencies", a.qd = a.l.w); var E = a.a.Yb("_latestValue"); a.N = function (b) { function c() { if (0 < arguments.length) return c.tb(c[E], arguments[0]) && (c.ga(), c[E] = arguments[0], c.fa()), this; a.l.oc(c); return c[E] } c[E] = b; a.a.ka || a.a.extend(c, a.J.fn); a.J.fn.rb(c); a.a.Ya(c, B); a.options.deferUpdates && a.ya.deferred(c, !0); return c }; var B = {
                equalityComparer: J, t: function () { return this[E] }, fa: function () { this.notifySubscribers(this[E]) },
                ga: function () { this.notifySubscribers(this[E], "beforeChange") }
            }; a.a.ka && a.a.Xa(B, a.J.fn); var H = a.N.gd = "__ko_proto__"; B[H] = a.N; a.Oa = function (b, c) { return null === b || b === n || b[H] === n ? !1 : b[H] === c ? !0 : a.Oa(b[H], c) }; a.H = function (b) { return a.Oa(b, a.N) }; a.Ba = function (b) { return "function" == typeof b && b[H] === a.N || "function" == typeof b && b[H] === a.B && b.Vc ? !0 : !1 }; a.b("observable", a.N); a.b("isObservable", a.H); a.b("isWriteableObservable", a.Ba); a.b("isWritableObservable", a.Ba); a.b("observable.fn", B); a.G(B, "peek", B.t); a.G(B,
            "valueHasMutated", B.fa); a.G(B, "valueWillMutate", B.ga); a.la = function (b) { b = b || []; if ("object" != typeof b || !("length" in b)) throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined."); b = a.N(b); a.a.Ya(b, a.la.fn); return b.extend({ trackArrayChanges: !0 }) }; a.la.fn = {
                remove: function (b) {
                    for (var c = this.t(), d = [], e = "function" != typeof b || a.H(b) ? function (a) { return a === b } : b, f = 0; f < c.length; f++) { var g = c[f]; e(g) && (0 === d.length && this.ga(), d.push(g), c.splice(f, 1), f--) } d.length &&
                    this.fa(); return d
                }, removeAll: function (b) { if (b === n) { var c = this.t(), d = c.slice(0); this.ga(); c.splice(0, c.length); this.fa(); return d } return b ? this.remove(function (c) { return 0 <= a.a.o(b, c) }) : [] }, destroy: function (b) { var c = this.t(), d = "function" != typeof b || a.H(b) ? function (a) { return a === b } : b; this.ga(); for (var e = c.length - 1; 0 <= e; e--) d(c[e]) && (c[e]._destroy = !0); this.fa() }, destroyAll: function (b) { return b === n ? this.destroy(function () { return !0 }) : b ? this.destroy(function (c) { return 0 <= a.a.o(b, c) }) : [] }, indexOf: function (b) {
                    var c =
                    this(); return a.a.o(c, b)
                }, replace: function (a, c) { var d = this.indexOf(a); 0 <= d && (this.ga(), this.t()[d] = c, this.fa()) }
            }; a.a.ka && a.a.Xa(a.la.fn, a.N.fn); a.a.q("pop push reverse shift sort splice unshift".split(" "), function (b) { a.la.fn[b] = function () { var a = this.t(); this.ga(); this.Vb(a, b, arguments); var d = a[b].apply(a, arguments); this.fa(); return d === a ? this : d } }); a.a.q(["slice"], function (b) { a.la.fn[b] = function () { var a = this(); return a[b].apply(a, arguments) } }); a.b("observableArray", a.la); a.ya.trackArrayChanges = function (b,
            c) {
                function d() { if (!e) { e = !0; var c = b.notifySubscribers; b.notifySubscribers = function (a, b) { b && b !== I || ++k; return c.apply(this, arguments) }; var d = [].concat(b.t() || []); f = null; g = b.X(function (c) { c = [].concat(c || []); if (b.Pa("arrayChange")) { var e; if (!f || 1 < k) f = a.a.ib(d, c, b.hb); e = f } d = c; f = null; k = 0; e && e.length && b.notifySubscribers(e, "arrayChange") }) } } b.hb = {}; c && "object" == typeof c && a.a.extend(b.hb, c); b.hb.sparse = !0; if (!b.Vb) {
                    var e = !1, f = null, g, k = 0, l = b.sa, m = b.Ia; b.sa = function (a) { l && l.call(b, a); "arrayChange" === a && d() };
                    b.Ia = function (a) { m && m.call(b, a); "arrayChange" !== a || b.Pa("arrayChange") || (g.k(), e = !1) }; b.Vb = function (b, c, d) {
                        function m(a, b, c) { return l[l.length] = { status: a, value: b, index: c } } if (e && !k) {
                            var l = [], g = b.length, t = d.length, G = 0; switch (c) {
                                case "push": G = g; case "unshift": for (c = 0; c < t; c++) m("added", d[c], G + c); break; case "pop": G = g - 1; case "shift": g && m("deleted", b[G], G); break; case "splice": c = Math.min(Math.max(0, 0 > d[0] ? g + d[0] : d[0]), g); for (var g = 1 === t ? g : Math.min(c + (d[1] || 0), g), t = c + t - 2, G = Math.max(g, t), P = [], n = [], Q = 2; c < G; ++c,
                                ++Q) c < g && n.push(m("deleted", b[c], c)), c < t && P.push(m("added", d[Q], c)); a.a.dc(n, P); break; default: return
                            } f = l
                        }
                    }
                }
            }; var s = a.a.Yb("_state"); a.m = a.B = function (b, c, d) {
                function e() { if (0 < arguments.length) { if ("function" === typeof f) f.apply(g.pb, arguments); else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters."); return this } a.l.oc(e); (g.S || g.s && e.Qa()) && e.aa(); return g.T } "object" === typeof b ? d = b : (d = d || {}, b && (d.read =
                b)); if ("function" != typeof d.read) throw Error("Pass a function that returns the value of the ko.computed"); var f = d.write, g = { T: n, S: !0, Ra: !1, Fb: !1, R: !1, Va: !1, s: !1, jd: d.read, pb: c || d.owner, i: d.disposeWhenNodeIsRemoved || d.i || null, wa: d.disposeWhen || d.wa, mb: null, r: {}, L: 0, bc: null }; e[s] = g; e.Vc = "function" === typeof f; a.a.ka || a.a.extend(e, a.J.fn); a.J.fn.rb(e); a.a.Ya(e, z); d.pure ? (g.Va = !0, g.s = !0, a.a.extend(e, $)) : d.deferEvaluation && a.a.extend(e, aa); a.options.deferUpdates && a.ya.deferred(e, !0); g.i && (g.Fb = !0, g.i.nodeType ||
                (g.i = null)); g.s || d.deferEvaluation || e.aa(); g.i && e.ba() && a.a.F.oa(g.i, g.mb = function () { e.k() }); return e
            }; var z = {
                equalityComparer: J, Aa: function () { return this[s].L }, Pb: function (a, c, d) { if (this[s].Va && c === this) throw Error("A 'pure' computed must not be called recursively"); this[s].r[a] = d; d.Ga = this[s].L++; d.na = c.Na() }, Qa: function () { var a, c, d = this[s].r; for (a in d) if (d.hasOwnProperty(a) && (c = d[a], c.ia.Uc(c.na))) return !0 }, bd: function () { this.Fa && !this[s].Ra && this.Fa() }, ba: function () { return this[s].S || 0 < this[s].L },
                ld: function () { this.Mb || this.ac() }, uc: function (a) { if (a.cb && !this[s].i) { var c = a.X(this.bd, this, "dirty"), d = a.X(this.ld, this); return { ia: a, k: function () { c.k(); d.k() } } } return a.X(this.ac, this) }, ac: function () { var b = this, c = b.throttleEvaluation; c && 0 <= c ? (clearTimeout(this[s].bc), this[s].bc = a.a.setTimeout(function () { b.aa(!0) }, c)) : b.Fa ? b.Fa() : b.aa(!0) }, aa: function (b) {
                    var c = this[s], d = c.wa; if (!c.Ra && !c.R) {
                        if (c.i && !a.a.nb(c.i) || d && d()) { if (!c.Fb) { this.k(); return } } else c.Fb = !1; c.Ra = !0; try { this.Qc(b) } finally { c.Ra = !1 } c.L ||
                        this.k()
                    }
                }, Qc: function (b) { var c = this[s], d = c.Va ? n : !c.L, e = { Hc: this, Ma: c.r, lb: c.L }; a.l.Ub({ Gc: e, gb: Y, m: this, Sa: d }); c.r = {}; c.L = 0; e = this.Pc(c, e); this.tb(c.T, e) && (c.s || this.notifySubscribers(c.T, "beforeChange"), c.T = e, c.s ? this.zc() : b && this.notifySubscribers(c.T)); d && this.notifySubscribers(c.T, "awake") }, Pc: function (b, c) { try { var d = b.jd; return b.pb ? d.call(b.pb) : d() } finally { a.l.end(), c.lb && !b.s && a.a.D(c.Ma, X), b.S = !1 } }, t: function () { var a = this[s]; (a.S && !a.L || a.s && this.Qa()) && this.aa(); return a.T }, Ta: function (b) {
                    a.J.fn.Ta.call(this,
                    b); this.Fa = function () { this.Kb(this[s].T); this[s].S = !0; this.Lb(this) }
                }, k: function () { var b = this[s]; !b.s && b.r && a.a.D(b.r, function (a, b) { b.k && b.k() }); b.i && b.mb && a.a.F.pc(b.i, b.mb); b.r = null; b.L = 0; b.R = !0; b.S = !1; b.s = !1; b.i = null }
            }, $ = {
                sa: function (b) { var c = this, d = c[s]; if (!d.R && d.s && "change" == b) { d.s = !1; if (d.S || c.Qa()) d.r = null, d.L = 0, d.S = !0, c.aa(); else { var e = []; a.a.D(d.r, function (a, b) { e[b.Ga] = a }); a.a.q(e, function (a, b) { var e = d.r[a], l = c.uc(e.ia); l.Ga = b; l.na = e.na; d.r[a] = l }) } d.R || c.notifySubscribers(d.T, "awake") } },
                Ia: function (b) { var c = this[s]; c.R || "change" != b || this.Pa("change") || (a.a.D(c.r, function (a, b) { b.k && (c.r[a] = { ia: b.ia, Ga: b.Ga, na: b.na }, b.k()) }), c.s = !0, this.notifySubscribers(n, "asleep")) }, Na: function () { var b = this[s]; b.s && (b.S || this.Qa()) && this.aa(); return a.J.fn.Na.call(this) }
            }, aa = { sa: function (a) { "change" != a && "beforeChange" != a || this.t() } }; a.a.ka && a.a.Xa(z, a.J.fn); var R = a.N.gd; a.m[R] = a.N; z[R] = a.m; a.Xc = function (b) { return a.Oa(b, a.m) }; a.Yc = function (b) { return a.Oa(b, a.m) && b[s] && b[s].Va }; a.b("computed", a.m);
            a.b("dependentObservable", a.m); a.b("isComputed", a.Xc); a.b("isPureComputed", a.Yc); a.b("computed.fn", z); a.G(z, "peek", z.t); a.G(z, "dispose", z.k); a.G(z, "isActive", z.ba); a.G(z, "getDependenciesCount", z.Aa); a.nc = function (b, c) { if ("function" === typeof b) return a.m(b, c, { pure: !0 }); b = a.a.extend({}, b); b.pure = !0; return a.m(b, c) }; a.b("pureComputed", a.nc); (function () {
                function b(a, f, g) {
                    g = g || new d; a = f(a); if ("object" != typeof a || null === a || a === n || a instanceof RegExp || a instanceof Date || a instanceof String || a instanceof
                    Number || a instanceof Boolean) return a; var k = a instanceof Array ? [] : {}; g.save(a, k); c(a, function (c) { var d = f(a[c]); switch (typeof d) { case "boolean": case "number": case "string": case "function": k[c] = d; break; case "object": case "undefined": var h = g.get(d); k[c] = h !== n ? h : b(d, f, g) } }); return k
                } function c(a, b) { if (a instanceof Array) { for (var c = 0; c < a.length; c++) b(c); "function" == typeof a.toJSON && b("toJSON") } else for (c in a) b(c) } function d() { this.keys = []; this.Ib = [] } a.wc = function (c) {
                    if (0 == arguments.length) throw Error("When calling ko.toJS, pass the object you want to convert.");
                    return b(c, function (b) { for (var c = 0; a.H(b) && 10 > c; c++) b = b(); return b })
                }; a.toJSON = function (b, c, d) { b = a.wc(b); return a.a.Eb(b, c, d) }; d.prototype = { save: function (b, c) { var d = a.a.o(this.keys, b); 0 <= d ? this.Ib[d] = c : (this.keys.push(b), this.Ib.push(c)) }, get: function (b) { b = a.a.o(this.keys, b); return 0 <= b ? this.Ib[b] : n } }
            })(); a.b("toJS", a.wc); a.b("toJSON", a.toJSON); (function () {
                a.j = {
                    u: function (b) {
                        switch (a.a.A(b)) {
                            case "option": return !0 === b.__ko__hasDomDataOptionValue__ ? a.a.e.get(b, a.d.options.xb) : 7 >= a.a.C ? b.getAttributeNode("value") &&
                            b.getAttributeNode("value").specified ? b.value : b.text : b.value; case "select": return 0 <= b.selectedIndex ? a.j.u(b.options[b.selectedIndex]) : n; default: return b.value
                        }
                    }, ha: function (b, c, d) {
                        switch (a.a.A(b)) {
                            case "option": switch (typeof c) { case "string": a.a.e.set(b, a.d.options.xb, n); "__ko__hasDomDataOptionValue__" in b && delete b.__ko__hasDomDataOptionValue__; b.value = c; break; default: a.a.e.set(b, a.d.options.xb, c), b.__ko__hasDomDataOptionValue__ = !0, b.value = "number" === typeof c ? c : "" } break; case "select": if ("" === c ||
                            null === c) c = n; for (var e = -1, f = 0, g = b.options.length, k; f < g; ++f) if (k = a.j.u(b.options[f]), k == c || "" == k && c === n) { e = f; break } if (d || 0 <= e || c === n && 1 < b.size) b.selectedIndex = e; break; default: if (null === c || c === n) c = ""; b.value = c
                        }
                    }
                }
            })(); a.b("selectExtensions", a.j); a.b("selectExtensions.readValue", a.j.u); a.b("selectExtensions.writeValue", a.j.ha); a.h = function () {
                function b(b) {
                    b = a.a.$a(b); 123 === b.charCodeAt(0) && (b = b.slice(1, -1)); var c = [], d = b.match(e), r, k = [], p = 0; if (d) {
                        d.push(","); for (var A = 0, y; y = d[A]; ++A) {
                            var t = y.charCodeAt(0);
                            if (44 === t) { if (0 >= p) { c.push(r && k.length ? { key: r, value: k.join("") } : { unknown: r || k.join("") }); r = p = 0; k = []; continue } } else if (58 === t) { if (!p && !r && 1 === k.length) { r = k.pop(); continue } } else 47 === t && A && 1 < y.length ? (t = d[A - 1].match(f)) && !g[t[0]] && (b = b.substr(b.indexOf(y) + 1), d = b.match(e), d.push(","), A = -1, y = "/") : 40 === t || 123 === t || 91 === t ? ++p : 41 === t || 125 === t || 93 === t ? --p : r || k.length || 34 !== t && 39 !== t || (y = y.slice(1, -1)); k.push(y)
                        }
                    } return c
                } var c = ["true", "false", "null", "undefined"], d = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
                e = RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]", "g"), f = /[\])"'A-Za-z0-9_$]+$/, g = { "in": 1, "return": 1, "typeof": 1 }, k = {}; return {
                    ta: [], ea: k, yb: b, Ua: function (e, m) {
                        function h(b, e) {
                            var m; if (!A) { var l = a.getBindingHandler(b); if (l && l.preprocess && !(e = l.preprocess(e, b, h))) return; if (l = k[b]) m = e, 0 <= a.a.o(c, m) ? m = !1 : (l = m.match(d), m = null === l ? !1 : l[1] ? "Object(" + l[1] + ")" + l[2] : m), l = m; l && g.push("'" + b + "':function(_z){" + m + "=_z}") } p && (e =
                            "function(){return " + e + " }"); f.push("'" + b + "':" + e)
                        } m = m || {}; var f = [], g = [], p = m.valueAccessors, A = m.bindingParams, y = "string" === typeof e ? b(e) : e; a.a.q(y, function (a) { h(a.key || a.unknown, a.value) }); g.length && h("_ko_property_writers", "{" + g.join(",") + " }"); return f.join(",")
                    }, ad: function (a, b) { for (var c = 0; c < a.length; c++) if (a[c].key == b) return !0; return !1 }, Ea: function (b, c, d, e, f) { if (b && a.H(b)) !a.Ba(b) || f && b.t() === e || b(e); else if ((b = c.get("_ko_property_writers")) && b[d]) b[d](e) }
                }
            }(); a.b("expressionRewriting", a.h); a.b("expressionRewriting.bindingRewriteValidators",
            a.h.ta); a.b("expressionRewriting.parseObjectLiteral", a.h.yb); a.b("expressionRewriting.preProcessBindings", a.h.Ua); a.b("expressionRewriting._twoWayBindings", a.h.ea); a.b("jsonExpressionRewriting", a.h); a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson", a.h.Ua); (function () {
                function b(a) { return 8 == a.nodeType && g.test(f ? a.text : a.nodeValue) } function c(a) { return 8 == a.nodeType && k.test(f ? a.text : a.nodeValue) } function d(a, d) {
                    for (var e = a, f = 1, l = []; e = e.nextSibling;) {
                        if (c(e) && (f--, 0 === f)) return l; l.push(e);
                        b(e) && f++
                    } if (!d) throw Error("Cannot find closing comment tag to match: " + a.nodeValue); return null
                } function e(a, b) { var c = d(a, b); return c ? 0 < c.length ? c[c.length - 1].nextSibling : a.nextSibling : null } var f = u && "\x3c!--test--\x3e" === u.createComment("test").text, g = f ? /^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/ : /^\s*ko(?:\s+([\s\S]+))?\s*$/, k = f ? /^\x3c!--\s*\/ko\s*--\x3e$/ : /^\s*\/ko\s*$/, l = { ul: !0, ol: !0 }; a.f = {
                    Z: {}, childNodes: function (a) { return b(a) ? d(a) : a.childNodes }, xa: function (c) {
                        if (b(c)) {
                            c = a.f.childNodes(c); for (var d =
                            0, e = c.length; d < e; d++) a.removeNode(c[d])
                        } else a.a.ob(c)
                    }, da: function (c, d) { if (b(c)) { a.f.xa(c); for (var e = c.nextSibling, f = 0, l = d.length; f < l; f++) e.parentNode.insertBefore(d[f], e) } else a.a.da(c, d) }, mc: function (a, c) { b(a) ? a.parentNode.insertBefore(c, a.nextSibling) : a.firstChild ? a.insertBefore(c, a.firstChild) : a.appendChild(c) }, gc: function (c, d, e) { e ? b(c) ? c.parentNode.insertBefore(d, e.nextSibling) : e.nextSibling ? c.insertBefore(d, e.nextSibling) : c.appendChild(d) : a.f.mc(c, d) }, firstChild: function (a) {
                        return b(a) ? !a.nextSibling ||
                        c(a.nextSibling) ? null : a.nextSibling : a.firstChild
                    }, nextSibling: function (a) { b(a) && (a = e(a)); return a.nextSibling && c(a.nextSibling) ? null : a.nextSibling }, Tc: b, pd: function (a) { return (a = (f ? a.text : a.nodeValue).match(g)) ? a[1] : null }, kc: function (d) {
                        if (l[a.a.A(d)]) {
                            var h = d.firstChild; if (h) {
                                do if (1 === h.nodeType) {
                                    var f; f = h.firstChild; var g = null; if (f) { do if (g) g.push(f); else if (b(f)) { var k = e(f, !0); k ? f = k : g = [f] } else c(f) && (g = [f]); while (f = f.nextSibling) } if (f = g) for (g = h.nextSibling, k = 0; k < f.length; k++) g ? d.insertBefore(f[k],
                                    g) : d.appendChild(f[k])
                                } while (h = h.nextSibling)
                            }
                        }
                    }
                }
            })(); a.b("virtualElements", a.f); a.b("virtualElements.allowedBindings", a.f.Z); a.b("virtualElements.emptyNode", a.f.xa); a.b("virtualElements.insertAfter", a.f.gc); a.b("virtualElements.prepend", a.f.mc); a.b("virtualElements.setDomNodeChildren", a.f.da); (function () {
                a.Q = function () { this.Fc = {} }; a.a.extend(a.Q.prototype, {
                    nodeHasBindings: function (b) {
                        switch (b.nodeType) {
                            case 1: return null != b.getAttribute("data-bind") || a.g.getComponentNameForNode(b); case 8: return a.f.Tc(b);
                            default: return !1
                        }
                    }, getBindings: function (b, c) { var d = this.getBindingsString(b, c), d = d ? this.parseBindingsString(d, c, b) : null; return a.g.Ob(d, b, c, !1) }, getBindingAccessors: function (b, c) { var d = this.getBindingsString(b, c), d = d ? this.parseBindingsString(d, c, b, { valueAccessors: !0 }) : null; return a.g.Ob(d, b, c, !0) }, getBindingsString: function (b) { switch (b.nodeType) { case 1: return b.getAttribute("data-bind"); case 8: return a.f.pd(b); default: return null } }, parseBindingsString: function (b, c, d, e) {
                        try {
                            var f = this.Fc, g = b + (e && e.valueAccessors ||
                            ""), k; if (!(k = f[g])) { var l, m = "with($context){with($data||{}){return{" + a.h.Ua(b, e) + "}}}"; l = new Function("$context", "$element", m); k = f[g] = l } return k(c, d)
                        } catch (h) { throw h.message = "Unable to parse bindings.\nBindings value: " + b + "\nMessage: " + h.message, h; }
                    }
                }); a.Q.instance = new a.Q
            })(); a.b("bindingProvider", a.Q); (function () {
                function b(a) { return function () { return a } } function c(a) { return a() } function d(b) { return a.a.Ca(a.l.w(b), function (a, c) { return function () { return b()[c] } }) } function e(c, e, h) {
                    return "function" ===
                    typeof c ? d(c.bind(null, e, h)) : a.a.Ca(c, b)
                } function f(a, b) { return d(this.getBindings.bind(this, a, b)) } function g(b, c, d) { var e, h = a.f.firstChild(c), f = a.Q.instance, m = f.preprocessNode; if (m) { for (; e = h;) h = a.f.nextSibling(e), m.call(f, e); h = a.f.firstChild(c) } for (; e = h;) h = a.f.nextSibling(e), k(b, e, d) } function k(b, c, d) { var e = !0, h = 1 === c.nodeType; h && a.f.kc(c); if (h && d || a.Q.instance.nodeHasBindings(c)) e = m(c, null, b, d).shouldBindDescendants; e && !r[a.a.A(c)] && g(b, c, !h) } function l(b) {
                    var c = [], d = {}, e = []; a.a.D(b, function Z(h) {
                        if (!d[h]) {
                            var f =
                            a.getBindingHandler(h); f && (f.after && (e.push(h), a.a.q(f.after, function (c) { if (b[c]) { if (-1 !== a.a.o(e, c)) throw Error("Cannot combine the following bindings, because they have a cyclic dependency: " + e.join(", ")); Z(c) } }), e.length--), c.push({ key: h, fc: f })); d[h] = !0
                        }
                    }); return c
                } function m(b, d, e, h) {
                    var m = a.a.e.get(b, q); if (!d) { if (m) throw Error("You cannot apply bindings multiple times to the same element."); a.a.e.set(b, q, !0) } !m && h && a.tc(b, e); var g; if (d && "function" !== typeof d) g = d; else {
                        var k = a.Q.instance, r = k.getBindingAccessors ||
                        f, p = a.B(function () { (g = d ? d(e, b) : r.call(k, b, e)) && e.P && e.P(); return g }, null, { i: b }); g && p.ba() || (p = null)
                    } var u; if (g) {
                        var v = p ? function (a) { return function () { return c(p()[a]) } } : function (a) { return g[a] }, s = function () { return a.a.Ca(p ? p() : g, c) }; s.get = function (a) { return g[a] && c(v(a)) }; s.has = function (a) { return a in g }; h = l(g); a.a.q(h, function (c) {
                            var d = c.fc.init, h = c.fc.update, f = c.key; if (8 === b.nodeType && !a.f.Z[f]) throw Error("The binding '" + f + "' cannot be used with virtual elements"); try {
                                "function" == typeof d && a.l.w(function () {
                                    var a =
                                    d(b, v(f), s, e.$data, e); if (a && a.controlsDescendantBindings) { if (u !== n) throw Error("Multiple bindings (" + u + " and " + f + ") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element."); u = f }
                                }), "function" == typeof h && a.B(function () { h(b, v(f), s, e.$data, e) }, null, { i: b })
                            } catch (m) { throw m.message = 'Unable to process binding "' + f + ": " + g[f] + '"\nMessage: ' + m.message, m; }
                        })
                    } return { shouldBindDescendants: u === n }
                } function h(b) { return b && b instanceof a.U ? b : new a.U(b) }
                a.d = {}; var r = { script: !0, textarea: !0, template: !0 }; a.getBindingHandler = function (b) { return a.d[b] }; a.U = function (b, c, d, e) {
                    var h = this, f = "function" == typeof b && !a.H(b), m, g = a.B(function () { var m = f ? b() : b, l = a.a.c(m); c ? (c.P && c.P(), a.a.extend(h, c), g && (h.P = g)) : (h.$parents = [], h.$root = l, h.ko = a); h.$rawData = m; h.$data = l; d && (h[d] = l); e && e(h, c, l); return h.$data }, null, { wa: function () { return m && !a.a.Qb(m) }, i: !0 }); g.ba() && (h.P = g, g.equalityComparer = null, m = [], g.Ac = function (b) {
                        m.push(b); a.a.F.oa(b, function (b) {
                            a.a.La(m, b); m.length ||
                            (g.k(), h.P = g = n)
                        })
                    })
                }; a.U.prototype.createChildContext = function (b, c, d) { return new a.U(b, this, c, function (a, b) { a.$parentContext = b; a.$parent = b.$data; a.$parents = (b.$parents || []).slice(0); a.$parents.unshift(a.$parent); d && d(a) }) }; a.U.prototype.extend = function (b) { return new a.U(this.P || this.$data, this, null, function (c, d) { c.$rawData = d.$rawData; a.a.extend(c, "function" == typeof b ? b() : b) }) }; var q = a.a.e.I(), p = a.a.e.I(); a.tc = function (b, c) {
                    if (2 == arguments.length) a.a.e.set(b, p, c), c.P && c.P.Ac(b); else return a.a.e.get(b,
                    p)
                }; a.Ja = function (b, c, d) { 1 === b.nodeType && a.f.kc(b); return m(b, c, h(d), !0) }; a.Dc = function (b, c, d) { d = h(d); return a.Ja(b, e(c, d, b), d) }; a.eb = function (a, b) { 1 !== b.nodeType && 8 !== b.nodeType || g(h(a), b, !0) }; a.Rb = function (a, b) { !v && x.jQuery && (v = x.jQuery); if (b && 1 !== b.nodeType && 8 !== b.nodeType) throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node"); b = b || x.document.body; k(h(a), b, !0) }; a.kb = function (b) {
                    switch (b.nodeType) {
                        case 1: case 8: var c = a.tc(b); if (c) return c;
                            if (b.parentNode) return a.kb(b.parentNode)
                    } return n
                }; a.Jc = function (b) { return (b = a.kb(b)) ? b.$data : n }; a.b("bindingHandlers", a.d); a.b("applyBindings", a.Rb); a.b("applyBindingsToDescendants", a.eb); a.b("applyBindingAccessorsToNode", a.Ja); a.b("applyBindingsToNode", a.Dc); a.b("contextFor", a.kb); a.b("dataFor", a.Jc)
            })(); (function (b) {
                function c(c, e) {
                    var m = f.hasOwnProperty(c) ? f[c] : b, h; m ? m.X(e) : (m = f[c] = new a.J, m.X(e), d(c, function (b, d) {
                        var e = !(!d || !d.synchronous); g[c] = { definition: b, Zc: e }; delete f[c]; h || e ? m.notifySubscribers(b) :
                        a.Y.Wa(function () { m.notifySubscribers(b) })
                    }), h = !0)
                } function d(a, b) { e("getConfig", [a], function (c) { c ? e("loadComponent", [a, c], function (a) { b(a, c) }) : b(null, null) }) } function e(c, d, f, h) { h || (h = a.g.loaders.slice(0)); var g = h.shift(); if (g) { var q = g[c]; if (q) { var p = !1; if (q.apply(g, d.concat(function (a) { p ? f(null) : null !== a ? f(a) : e(c, d, f, h) })) !== b && (p = !0, !g.suppressLoaderExceptions)) throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously."); } else e(c, d, f, h) } else f(null) }
                var f = {}, g = {}; a.g = { get: function (d, e) { var f = g.hasOwnProperty(d) ? g[d] : b; f ? f.Zc ? a.l.w(function () { e(f.definition) }) : a.Y.Wa(function () { e(f.definition) }) : c(d, e) }, Xb: function (a) { delete g[a] }, Jb: e }; a.g.loaders = []; a.b("components", a.g); a.b("components.get", a.g.get); a.b("components.clearCachedDefinition", a.g.Xb)
            })(); (function () {
                function b(b, c, d, e) {
                    function g() { 0 === --y && e(k) } var k = {}, y = 2, t = d.template; d = d.viewModel; t ? f(c, t, function (c) { a.g.Jb("loadTemplate", [b, c], function (a) { k.template = a; g() }) }) : g(); d ? f(c, d, function (c) {
                        a.g.Jb("loadViewModel",
                        [b, c], function (a) { k[l] = a; g() })
                    }) : g()
                } function c(a, b, d) { if ("function" === typeof b) d(function (a) { return new b(a) }); else if ("function" === typeof b[l]) d(b[l]); else if ("instance" in b) { var e = b.instance; d(function () { return e }) } else "viewModel" in b ? c(a, b.viewModel, d) : a("Unknown viewModel value: " + b) } function d(b) { switch (a.a.A(b)) { case "script": return a.a.ma(b.text); case "textarea": return a.a.ma(b.value); case "template": if (e(b.content)) return a.a.ua(b.content.childNodes) } return a.a.ua(b.childNodes) } function e(a) {
                    return x.DocumentFragment ?
                    a instanceof DocumentFragment : a && 11 === a.nodeType
                } function f(a, b, c) { "string" === typeof b.require ? O || x.require ? (O || x.require)([b.require], c) : a("Uses require, but no AMD loader is present") : c(b) } function g(a) { return function (b) { throw Error("Component '" + a + "': " + b); } } var k = {}; a.g.register = function (b, c) { if (!c) throw Error("Invalid configuration for " + b); if (a.g.ub(b)) throw Error("Component " + b + " is already registered"); k[b] = c }; a.g.ub = function (a) { return k.hasOwnProperty(a) }; a.g.od = function (b) {
                    delete k[b];
                    a.g.Xb(b)
                }; a.g.Zb = {
                    getConfig: function (a, b) { b(k.hasOwnProperty(a) ? k[a] : null) }, loadComponent: function (a, c, d) { var e = g(a); f(e, c, function (c) { b(a, e, c, d) }) }, loadTemplate: function (b, c, f) {
                        b = g(b); if ("string" === typeof c) f(a.a.ma(c)); else if (c instanceof Array) f(c); else if (e(c)) f(a.a.V(c.childNodes)); else if (c.element) if (c = c.element, x.HTMLElement ? c instanceof HTMLElement : c && c.tagName && 1 === c.nodeType) f(d(c)); else if ("string" === typeof c) { var l = u.getElementById(c); l ? f(d(l)) : b("Cannot find element with ID " + c) } else b("Unknown element type: " +
                        c); else b("Unknown template value: " + c)
                    }, loadViewModel: function (a, b, d) { c(g(a), b, d) }
                }; var l = "createViewModel"; a.b("components.register", a.g.register); a.b("components.isRegistered", a.g.ub); a.b("components.unregister", a.g.od); a.b("components.defaultLoader", a.g.Zb); a.g.loaders.push(a.g.Zb); a.g.Bc = k
            })(); (function () {
                function b(b, e) {
                    var f = b.getAttribute("params"); if (f) {
                        var f = c.parseBindingsString(f, e, b, { valueAccessors: !0, bindingParams: !0 }), f = a.a.Ca(f, function (c) { return a.m(c, null, { i: b }) }), g = a.a.Ca(f, function (c) {
                            var e =
                            c.t(); return c.ba() ? a.m({ read: function () { return a.a.c(c()) }, write: a.Ba(e) && function (a) { c()(a) }, i: b }) : e
                        }); g.hasOwnProperty("$raw") || (g.$raw = f); return g
                    } return { $raw: {} }
                } a.g.getComponentNameForNode = function (b) { var c = a.a.A(b); if (a.g.ub(c) && (-1 != c.indexOf("-") || "[object HTMLUnknownElement]" == "" + b || 8 >= a.a.C && b.tagName === c)) return c }; a.g.Ob = function (c, e, f, g) {
                    if (1 === e.nodeType) {
                        var k = a.g.getComponentNameForNode(e); if (k) {
                            c = c || {}; if (c.component) throw Error('Cannot use the "component" binding on a custom element matching a component');
                            var l = { name: k, params: b(e, f) }; c.component = g ? function () { return l } : l
                        }
                    } return c
                }; var c = new a.Q; 9 > a.a.C && (a.g.register = function (a) { return function (b) { u.createElement(b); return a.apply(this, arguments) } }(a.g.register), u.createDocumentFragment = function (b) { return function () { var c = b(), f = a.g.Bc, g; for (g in f) f.hasOwnProperty(g) && c.createElement(g); return c } }(u.createDocumentFragment))
            })(); (function (b) {
                function c(b, c, d) { c = c.template; if (!c) throw Error("Component '" + b + "' has no template"); b = a.a.ua(c); a.f.da(d, b) }
                function d(a, b, c, d) { var e = a.createViewModel; return e ? e.call(a, d, { element: b, templateNodes: c }) : d } var e = 0; a.d.component = {
                    init: function (f, g, k, l, m) {
                        function h() { var a = r && r.dispose; "function" === typeof a && a.call(r); q = r = null } var r, q, p = a.a.V(a.f.childNodes(f)); a.a.F.oa(f, h); a.m(function () {
                            var l = a.a.c(g()), k, t; "string" === typeof l ? k = l : (k = a.a.c(l.name), t = a.a.c(l.params)); if (!k) throw Error("No component name specified"); var n = q = ++e; a.g.get(k, function (e) {
                                if (q === n) {
                                    h(); if (!e) throw Error("Unknown component '" + k +
                                    "'"); c(k, e, f); var g = d(e, f, p, t); e = m.createChildContext(g, b, function (a) { a.$component = g; a.$componentTemplateNodes = p }); r = g; a.eb(e, f)
                                }
                            })
                        }, null, { i: f }); return { controlsDescendantBindings: !0 }
                    }
                }; a.f.Z.component = !0
            })(); var S = { "class": "className", "for": "htmlFor" }; a.d.attr = {
                update: function (b, c) {
                    var d = a.a.c(c()) || {}; a.a.D(d, function (c, d) {
                        d = a.a.c(d); var g = !1 === d || null === d || d === n; g && b.removeAttribute(c); 8 >= a.a.C && c in S ? (c = S[c], g ? b.removeAttribute(c) : b[c] = d) : g || b.setAttribute(c, d.toString()); "name" === c && a.a.rc(b,
                        g ? "" : d.toString())
                    })
                }
            }; (function () {
                a.d.checked = {
                    after: ["value", "attr"], init: function (b, c, d) {
                        function e() { var e = b.checked, f = p ? g() : e; if (!a.va.Sa() && (!l || e)) { var m = a.l.w(c); if (h) { var k = r ? m.t() : m; q !== f ? (e && (a.a.pa(k, f, !0), a.a.pa(k, q, !1)), q = f) : a.a.pa(k, f, e); r && a.Ba(m) && m(k) } else a.h.Ea(m, d, "checked", f, !0) } } function f() { var d = a.a.c(c()); b.checked = h ? 0 <= a.a.o(d, g()) : k ? d : g() === d } var g = a.nc(function () { return d.has("checkedValue") ? a.a.c(d.get("checkedValue")) : d.has("value") ? a.a.c(d.get("value")) : b.value }), k =
                        "checkbox" == b.type, l = "radio" == b.type; if (k || l) { var m = c(), h = k && a.a.c(m) instanceof Array, r = !(h && m.push && m.splice), q = h ? g() : n, p = l || h; l && !b.name && a.d.uniqueName.init(b, function () { return !0 }); a.m(e, null, { i: b }); a.a.p(b, "click", e); a.m(f, null, { i: b }); m = n }
                    }
                }; a.h.ea.checked = !0; a.d.checkedValue = { update: function (b, c) { b.value = a.a.c(c()) } }
            })(); a.d.css = {
                update: function (b, c) {
                    var d = a.a.c(c()); null !== d && "object" == typeof d ? a.a.D(d, function (c, d) { d = a.a.c(d); a.a.bb(b, c, d) }) : (d = a.a.$a(String(d || "")), a.a.bb(b, b.__ko__cssValue,
                    !1), b.__ko__cssValue = d, a.a.bb(b, d, !0))
                }
            }; a.d.enable = { update: function (b, c) { var d = a.a.c(c()); d && b.disabled ? b.removeAttribute("disabled") : d || b.disabled || (b.disabled = !0) } }; a.d.disable = { update: function (b, c) { a.d.enable.update(b, function () { return !a.a.c(c()) }) } }; a.d.event = {
                init: function (b, c, d, e, f) {
                    var g = c() || {}; a.a.D(g, function (g) {
                        "string" == typeof g && a.a.p(b, g, function (b) {
                            var m, h = c()[g]; if (h) {
                                try { var r = a.a.V(arguments); e = f.$data; r.unshift(e); m = h.apply(e, r) } finally {
                                    !0 !== m && (b.preventDefault ? b.preventDefault() :
                                    b.returnValue = !1)
                                } !1 === d.get(g + "Bubble") && (b.cancelBubble = !0, b.stopPropagation && b.stopPropagation())
                            }
                        })
                    })
                }
            }; a.d.foreach = {
                ic: function (b) { return function () { var c = b(), d = a.a.zb(c); if (!d || "number" == typeof d.length) return { foreach: c, templateEngine: a.W.sb }; a.a.c(c); return { foreach: d.data, as: d.as, includeDestroyed: d.includeDestroyed, afterAdd: d.afterAdd, beforeRemove: d.beforeRemove, afterRender: d.afterRender, beforeMove: d.beforeMove, afterMove: d.afterMove, templateEngine: a.W.sb } } }, init: function (b, c) {
                    return a.d.template.init(b,
                    a.d.foreach.ic(c))
                }, update: function (b, c, d, e, f) { return a.d.template.update(b, a.d.foreach.ic(c), d, e, f) }
            }; a.h.ta.foreach = !1; a.f.Z.foreach = !0; a.d.hasfocus = {
                init: function (b, c, d) {
                    function e(e) { b.__ko_hasfocusUpdating = !0; var f = b.ownerDocument; if ("activeElement" in f) { var g; try { g = f.activeElement } catch (h) { g = f.body } e = g === b } f = c(); a.h.Ea(f, d, "hasfocus", e, !0); b.__ko_hasfocusLastValue = e; b.__ko_hasfocusUpdating = !1 } var f = e.bind(null, !0), g = e.bind(null, !1); a.a.p(b, "focus", f); a.a.p(b, "focusin", f); a.a.p(b, "blur", g); a.a.p(b,
                    "focusout", g)
                }, update: function (b, c) { var d = !!a.a.c(c()); b.__ko_hasfocusUpdating || b.__ko_hasfocusLastValue === d || (d ? b.focus() : b.blur(), !d && b.__ko_hasfocusLastValue && b.ownerDocument.body.focus(), a.l.w(a.a.Da, null, [b, d ? "focusin" : "focusout"])) }
            }; a.h.ea.hasfocus = !0; a.d.hasFocus = a.d.hasfocus; a.h.ea.hasFocus = !0; a.d.html = { init: function () { return { controlsDescendantBindings: !0 } }, update: function (b, c) { a.a.Cb(b, c()) } }; K("if"); K("ifnot", !1, !0); K("with", !0, !1, function (a, c) { return a.createChildContext(c) }); var L = {};
            a.d.options = {
                init: function (b) { if ("select" !== a.a.A(b)) throw Error("options binding applies only to SELECT elements"); for (; 0 < b.length;) b.remove(0); return { controlsDescendantBindings: !0 } }, update: function (b, c, d) {
                    function e() { return a.a.Ka(b.options, function (a) { return a.selected }) } function f(a, b, c) { var d = typeof b; return "function" == d ? b(a) : "string" == d ? a[b] : c } function g(c, e) {
                        if (A && h) a.j.ha(b, a.a.c(d.get("value")), !0); else if (p.length) {
                            var f = 0 <= a.a.o(p, a.j.u(e[0])); a.a.sc(e[0], f); A && !f && a.l.w(a.a.Da, null, [b,
                            "change"])
                        }
                    } var k = b.multiple, l = 0 != b.length && k ? b.scrollTop : null, m = a.a.c(c()), h = d.get("valueAllowUnset") && d.has("value"), r = d.get("optionsIncludeDestroyed"); c = {}; var q, p = []; h || (k ? p = a.a.fb(e(), a.j.u) : 0 <= b.selectedIndex && p.push(a.j.u(b.options[b.selectedIndex]))); m && ("undefined" == typeof m.length && (m = [m]), q = a.a.Ka(m, function (b) { return r || b === n || null === b || !a.a.c(b._destroy) }), d.has("optionsCaption") && (m = a.a.c(d.get("optionsCaption")), null !== m && m !== n && q.unshift(L))); var A = !1; c.beforeRemove = function (a) { b.removeChild(a) };
                    m = g; d.has("optionsAfterRender") && "function" == typeof d.get("optionsAfterRender") && (m = function (b, c) { g(0, c); a.l.w(d.get("optionsAfterRender"), null, [c[0], b !== L ? b : n]) }); a.a.Bb(b, q, function (c, e, g) { g.length && (p = !h && g[0].selected ? [a.j.u(g[0])] : [], A = !0); e = b.ownerDocument.createElement("option"); c === L ? (a.a.Za(e, d.get("optionsCaption")), a.j.ha(e, n)) : (g = f(c, d.get("optionsValue"), c), a.j.ha(e, a.a.c(g)), c = f(c, d.get("optionsText"), g), a.a.Za(e, c)); return [e] }, c, m); a.l.w(function () {
                        h ? a.j.ha(b, a.a.c(d.get("value")),
                        !0) : (k ? p.length && e().length < p.length : p.length && 0 <= b.selectedIndex ? a.j.u(b.options[b.selectedIndex]) !== p[0] : p.length || 0 <= b.selectedIndex) && a.a.Da(b, "change")
                    }); a.a.Nc(b); l && 20 < Math.abs(l - b.scrollTop) && (b.scrollTop = l)
                }
            }; a.d.options.xb = a.a.e.I(); a.d.selectedOptions = {
                after: ["options", "foreach"], init: function (b, c, d) { a.a.p(b, "change", function () { var e = c(), f = []; a.a.q(b.getElementsByTagName("option"), function (b) { b.selected && f.push(a.j.u(b)) }); a.h.Ea(e, d, "selectedOptions", f) }) }, update: function (b, c) {
                    if ("select" !=
                    a.a.A(b)) throw Error("values binding applies only to SELECT elements"); var d = a.a.c(c()), e = b.scrollTop; d && "number" == typeof d.length && a.a.q(b.getElementsByTagName("option"), function (b) { var c = 0 <= a.a.o(d, a.j.u(b)); b.selected != c && a.a.sc(b, c) }); b.scrollTop = e
                }
            }; a.h.ea.selectedOptions = !0; a.d.style = { update: function (b, c) { var d = a.a.c(c() || {}); a.a.D(d, function (c, d) { d = a.a.c(d); if (null === d || d === n || !1 === d) d = ""; b.style[c] = d }) } }; a.d.submit = {
                init: function (b, c, d, e, f) {
                    if ("function" != typeof c()) throw Error("The value for a submit binding must be a function");
                    a.a.p(b, "submit", function (a) { var d, e = c(); try { d = e.call(f.$data, b) } finally { !0 !== d && (a.preventDefault ? a.preventDefault() : a.returnValue = !1) } })
                }
            }; a.d.text = { init: function () { return { controlsDescendantBindings: !0 } }, update: function (b, c) { a.a.Za(b, c()) } }; a.f.Z.text = !0; (function () {
                if (x && x.navigator) var b = function (a) { if (a) return parseFloat(a[1]) }, c = x.opera && x.opera.version && parseInt(x.opera.version()), d = x.navigator.userAgent, e = b(d.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)), f = b(d.match(/Firefox\/([^ ]*)/));
                if (10 > a.a.C) var g = a.a.e.I(), k = a.a.e.I(), l = function (b) { var c = this.activeElement; (c = c && a.a.e.get(c, k)) && c(b) }, m = function (b, c) { var d = b.ownerDocument; a.a.e.get(d, g) || (a.a.e.set(d, g, !0), a.a.p(d, "selectionchange", l)); a.a.e.set(b, k, c) }; a.d.textInput = {
                    init: function (b, d, g) {
                        function l(c, d) { a.a.p(b, c, d) } function k() { var c = a.a.c(d()); if (null === c || c === n) c = ""; v !== n && c === v ? a.a.setTimeout(k, 4) : b.value !== c && (u = c, b.value = c) } function y() { s || (v = b.value, s = a.a.setTimeout(t, 4)) } function t() {
                            clearTimeout(s); v = s = n; var c =
                            b.value; u !== c && (u = c, a.h.Ea(d(), g, "textInput", c))
                        } var u = b.value, s, v, x = 9 == a.a.C ? y : t; 10 > a.a.C ? (l("propertychange", function (a) { "value" === a.propertyName && x(a) }), 8 == a.a.C && (l("keyup", t), l("keydown", t)), 8 <= a.a.C && (m(b, x), l("dragend", y))) : (l("input", t), 5 > e && "textarea" === a.a.A(b) ? (l("keydown", y), l("paste", y), l("cut", y)) : 11 > c ? l("keydown", y) : 4 > f && (l("DOMAutoComplete", t), l("dragdrop", t), l("drop", t))); l("change", t); a.m(k, null, { i: b })
                    }
                }; a.h.ea.textInput = !0; a.d.textinput = {
                    preprocess: function (a, b, c) {
                        c("textInput",
                        a)
                    }
                }
            })(); a.d.uniqueName = { init: function (b, c) { if (c()) { var d = "ko_unique_" + ++a.d.uniqueName.Ic; a.a.rc(b, d) } } }; a.d.uniqueName.Ic = 0; a.d.value = {
                after: ["options", "foreach"], init: function (b, c, d) {
                    if ("input" != b.tagName.toLowerCase() || "checkbox" != b.type && "radio" != b.type) {
                        var e = ["change"], f = d.get("valueUpdate"), g = !1, k = null; f && ("string" == typeof f && (f = [f]), a.a.ra(e, f), e = a.a.Tb(e)); var l = function () { k = null; g = !1; var e = c(), f = a.j.u(b); a.h.Ea(e, d, "value", f) }; !a.a.C || "input" != b.tagName.toLowerCase() || "text" != b.type ||
                        "off" == b.autocomplete || b.form && "off" == b.form.autocomplete || -1 != a.a.o(e, "propertychange") || (a.a.p(b, "propertychange", function () { g = !0 }), a.a.p(b, "focus", function () { g = !1 }), a.a.p(b, "blur", function () { g && l() })); a.a.q(e, function (c) { var d = l; a.a.nd(c, "after") && (d = function () { k = a.j.u(b); a.a.setTimeout(l, 0) }, c = c.substring(5)); a.a.p(b, c, d) }); var m = function () {
                            var e = a.a.c(c()), f = a.j.u(b); if (null !== k && e === k) a.a.setTimeout(m, 0); else if (e !== f) if ("select" === a.a.A(b)) {
                                var g = d.get("valueAllowUnset"), f = function () {
                                    a.j.ha(b,
                                    e, g)
                                }; f(); g || e === a.j.u(b) ? a.a.setTimeout(f, 0) : a.l.w(a.a.Da, null, [b, "change"])
                            } else a.j.ha(b, e)
                        }; a.m(m, null, { i: b })
                    } else a.Ja(b, { checkedValue: c })
                }, update: function () { }
            }; a.h.ea.value = !0; a.d.visible = { update: function (b, c) { var d = a.a.c(c()), e = "none" != b.style.display; d && !e ? b.style.display = "" : !d && e && (b.style.display = "none") } }; (function (b) { a.d[b] = { init: function (c, d, e, f, g) { return a.d.event.init.call(this, c, function () { var a = {}; a[b] = d(); return a }, e, f, g) } } })("click"); a.O = function () { }; a.O.prototype.renderTemplateSource =
            function () { throw Error("Override renderTemplateSource"); }; a.O.prototype.createJavaScriptEvaluatorBlock = function () { throw Error("Override createJavaScriptEvaluatorBlock"); }; a.O.prototype.makeTemplateSource = function (b, c) { if ("string" == typeof b) { c = c || u; var d = c.getElementById(b); if (!d) throw Error("Cannot find template with ID " + b); return new a.v.n(d) } if (1 == b.nodeType || 8 == b.nodeType) return new a.v.qa(b); throw Error("Unknown template type: " + b); }; a.O.prototype.renderTemplate = function (a, c, d, e) {
                a = this.makeTemplateSource(a,
                e); return this.renderTemplateSource(a, c, d, e)
            }; a.O.prototype.isTemplateRewritten = function (a, c) { return !1 === this.allowTemplateRewriting ? !0 : this.makeTemplateSource(a, c).data("isRewritten") }; a.O.prototype.rewriteTemplate = function (a, c, d) { a = this.makeTemplateSource(a, d); c = c(a.text()); a.text(c); a.data("isRewritten", !0) }; a.b("templateEngine", a.O); a.Gb = function () {
                function b(b, c, d, k) {
                    b = a.h.yb(b); for (var l = a.h.ta, m = 0; m < b.length; m++) {
                        var h = b[m].key; if (l.hasOwnProperty(h)) {
                            var r = l[h]; if ("function" === typeof r) {
                                if (h =
                                r(b[m].value)) throw Error(h);
                            } else if (!r) throw Error("This template engine does not support the '" + h + "' binding within its templates");
                        }
                    } d = "ko.__tr_ambtns(function($context,$element){return(function(){return{ " + a.h.Ua(b, { valueAccessors: !0 }) + " } })()},'" + d.toLowerCase() + "')"; return k.createJavaScriptEvaluatorBlock(d) + c
                } var c = /(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi, d = /\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g; return {
                    Oc: function (b,
                    c, d) { c.isTemplateRewritten(b, d) || c.rewriteTemplate(b, function (b) { return a.Gb.dd(b, c) }, d) }, dd: function (a, f) { return a.replace(c, function (a, c, d, e, h) { return b(h, c, d, f) }).replace(d, function (a, c) { return b(c, "\x3c!-- ko --\x3e", "#comment", f) }) }, Ec: function (b, c) { return a.M.wb(function (d, k) { var l = d.nextSibling; l && l.nodeName.toLowerCase() === c && a.Ja(l, b, k) }) }
                }
            }(); a.b("__tr_ambtns", a.Gb.Ec); (function () {
                a.v = {}; a.v.n = function (b) {
                    if (this.n = b) {
                        var c = a.a.A(b); this.ab = "script" === c ? 1 : "textarea" === c ? 2 : "template" == c &&
                        b.content && 11 === b.content.nodeType ? 3 : 4
                    }
                }; a.v.n.prototype.text = function () { var b = 1 === this.ab ? "text" : 2 === this.ab ? "value" : "innerHTML"; if (0 == arguments.length) return this.n[b]; var c = arguments[0]; "innerHTML" === b ? a.a.Cb(this.n, c) : this.n[b] = c }; var b = a.a.e.I() + "_"; a.v.n.prototype.data = function (c) { if (1 === arguments.length) return a.a.e.get(this.n, b + c); a.a.e.set(this.n, b + c, arguments[1]) }; var c = a.a.e.I(); a.v.n.prototype.nodes = function () {
                    var b = this.n; if (0 == arguments.length) return (a.a.e.get(b, c) || {}).jb || (3 === this.ab ?
                    b.content : 4 === this.ab ? b : n); a.a.e.set(b, c, { jb: arguments[0] })
                }; a.v.qa = function (a) { this.n = a }; a.v.qa.prototype = new a.v.n; a.v.qa.prototype.text = function () { if (0 == arguments.length) { var b = a.a.e.get(this.n, c) || {}; b.Hb === n && b.jb && (b.Hb = b.jb.innerHTML); return b.Hb } a.a.e.set(this.n, c, { Hb: arguments[0] }) }; a.b("templateSources", a.v); a.b("templateSources.domElement", a.v.n); a.b("templateSources.anonymousTemplate", a.v.qa)
            })(); (function () {
                function b(b, c, d) {
                    var e; for (c = a.f.nextSibling(c) ; b && (e = b) !== c;) b = a.f.nextSibling(e),
                    d(e, b)
                } function c(c, d) { if (c.length) { var e = c[0], f = c[c.length - 1], g = e.parentNode, k = a.Q.instance, n = k.preprocessNode; if (n) { b(e, f, function (a, b) { var c = a.previousSibling, d = n.call(k, a); d && (a === e && (e = d[0] || b), a === f && (f = d[d.length - 1] || c)) }); c.length = 0; if (!e) return; e === f ? c.push(e) : (c.push(e, f), a.a.za(c, g)) } b(e, f, function (b) { 1 !== b.nodeType && 8 !== b.nodeType || a.Rb(d, b) }); b(e, f, function (b) { 1 !== b.nodeType && 8 !== b.nodeType || a.M.yc(b, [d]) }); a.a.za(c, g) } } function d(a) { return a.nodeType ? a : 0 < a.length ? a[0] : null } function e(b,
                e, f, k, q) {
                    q = q || {}; var p = (b && d(b) || f || {}).ownerDocument, n = q.templateEngine || g; a.Gb.Oc(f, n, p); f = n.renderTemplate(f, k, q, p); if ("number" != typeof f.length || 0 < f.length && "number" != typeof f[0].nodeType) throw Error("Template engine must return an array of DOM nodes"); p = !1; switch (e) { case "replaceChildren": a.f.da(b, f); p = !0; break; case "replaceNode": a.a.qc(b, f); p = !0; break; case "ignoreTargetNode": break; default: throw Error("Unknown renderMode: " + e); } p && (c(f, k), q.afterRender && a.l.w(q.afterRender, null, [f, k.$data]));
                    return f
                } function f(b, c, d) { return a.H(b) ? b() : "function" === typeof b ? b(c, d) : b } var g; a.Db = function (b) { if (b != n && !(b instanceof a.O)) throw Error("templateEngine must inherit from ko.templateEngine"); g = b }; a.Ab = function (b, c, h, k, q) {
                    h = h || {}; if ((h.templateEngine || g) == n) throw Error("Set a template engine before calling renderTemplate"); q = q || "replaceChildren"; if (k) {
                        var p = d(k); return a.B(function () { var g = c && c instanceof a.U ? c : new a.U(a.a.c(c)), n = f(b, g.$data, g), g = e(k, q, n, g, h); "replaceNode" == q && (k = g, p = d(k)) }, null,
                        { wa: function () { return !p || !a.a.nb(p) }, i: p && "replaceNode" == q ? p.parentNode : p })
                    } return a.M.wb(function (d) { a.Ab(b, c, h, d, "replaceNode") })
                }; a.kd = function (b, d, g, k, q) {
                    function p(a, b) { c(b, s); g.afterRender && g.afterRender(b, a); s = null } function u(a, c) { s = q.createChildContext(a, g.as, function (a) { a.$index = c }); var d = f(b, a, s); return e(null, "ignoreTargetNode", d, s, g) } var s; return a.B(function () {
                        var b = a.a.c(d) || []; "undefined" == typeof b.length && (b = [b]); b = a.a.Ka(b, function (b) { return g.includeDestroyed || b === n || null === b || !a.a.c(b._destroy) });
                        a.l.w(a.a.Bb, null, [k, b, u, g, p])
                    }, null, { i: k })
                }; var k = a.a.e.I(); a.d.template = {
                    init: function (b, c) { var d = a.a.c(c()); if ("string" == typeof d || d.name) a.f.xa(b); else { if ("nodes" in d) { if (d = d.nodes || [], a.H(d)) throw Error('The "nodes" option must be a plain, non-observable array.'); } else d = a.f.childNodes(b); d = a.a.jc(d); (new a.v.qa(b)).nodes(d) } return { controlsDescendantBindings: !0 } }, update: function (b, c, d, e, f) {
                        var g = c(), s; c = a.a.c(g); d = !0; e = null; "string" == typeof c ? c = {} : (g = c.name, "if" in c && (d = a.a.c(c["if"])), d && "ifnot" in
                        c && (d = !a.a.c(c.ifnot)), s = a.a.c(c.data)); "foreach" in c ? e = a.kd(g || b, d && c.foreach || [], c, b, f) : d ? (f = "data" in c ? f.createChildContext(s, c.as) : f, e = a.Ab(g || b, f, c, b)) : a.f.xa(b); f = e; (s = a.a.e.get(b, k)) && "function" == typeof s.k && s.k(); a.a.e.set(b, k, f && f.ba() ? f : n)
                    }
                }; a.h.ta.template = function (b) { b = a.h.yb(b); return 1 == b.length && b[0].unknown || a.h.ad(b, "name") ? null : "This template engine does not support anonymous templates nested within its templates" }; a.f.Z.template = !0
            })(); a.b("setTemplateEngine", a.Db); a.b("renderTemplate",
            a.Ab); a.a.dc = function (a, c, d) { if (a.length && c.length) { var e, f, g, k, l; for (e = f = 0; (!d || e < d) && (k = a[f]) ; ++f) { for (g = 0; l = c[g]; ++g) if (k.value === l.value) { k.moved = l.index; l.moved = k.index; c.splice(g, 1); e = g = 0; break } e += g } } }; a.a.ib = function () {
                function b(b, d, e, f, g) {
                    var k = Math.min, l = Math.max, m = [], h, n = b.length, q, p = d.length, s = p - n || 1, u = n + p + 1, t, v, x; for (h = 0; h <= n; h++) for (v = t, m.push(t = []), x = k(p, h + s), q = l(0, h - 1) ; q <= x; q++) t[q] = q ? h ? b[h - 1] === d[q - 1] ? v[q - 1] : k(v[q] || u, t[q - 1] || u) + 1 : q + 1 : h + 1; k = []; l = []; s = []; h = n; for (q = p; h || q;) p = m[h][q] -
                    1, q && p === m[h][q - 1] ? l.push(k[k.length] = { status: e, value: d[--q], index: q }) : h && p === m[h - 1][q] ? s.push(k[k.length] = { status: f, value: b[--h], index: h }) : (--q, --h, g.sparse || k.push({ status: "retained", value: d[q] })); a.a.dc(s, l, !g.dontLimitMoves && 10 * n); return k.reverse()
                } return function (a, d, e) { e = "boolean" === typeof e ? { dontLimitMoves: e } : e || {}; a = a || []; d = d || []; return a.length < d.length ? b(a, d, "added", "deleted", e) : b(d, a, "deleted", "added", e) }
            }(); a.b("utils.compareArrays", a.a.ib); (function () {
                function b(b, c, d, k, l) {
                    var m = [],
                    h = a.B(function () { var h = c(d, l, a.a.za(m, b)) || []; 0 < m.length && (a.a.qc(m, h), k && a.l.w(k, null, [d, h, l])); m.length = 0; a.a.ra(m, h) }, null, { i: b, wa: function () { return !a.a.Qb(m) } }); return { ca: m, B: h.ba() ? h : n }
                } var c = a.a.e.I(), d = a.a.e.I(); a.a.Bb = function (e, f, g, k, l) {
                    function m(b, c) { w = q[c]; v !== c && (D[b] = w); w.qb(v++); a.a.za(w.ca, e); u.push(w); z.push(w) } function h(b, c) { if (b) for (var d = 0, e = c.length; d < e; d++) c[d] && a.a.q(c[d].ca, function (a) { b(a, d, c[d].ja) }) } f = f || []; k = k || {}; var r = a.a.e.get(e, c) === n, q = a.a.e.get(e, c) || [], p = a.a.fb(q,
                    function (a) { return a.ja }), s = a.a.ib(p, f, k.dontLimitMoves), u = [], t = 0, v = 0, x = [], z = []; f = []; for (var D = [], p = [], w, C = 0, B, E; B = s[C]; C++) switch (E = B.moved, B.status) { case "deleted": E === n && (w = q[t], w.B && (w.B.k(), w.B = n), a.a.za(w.ca, e).length && (k.beforeRemove && (u.push(w), z.push(w), w.ja === d ? w = null : f[C] = w), w && x.push.apply(x, w.ca))); t++; break; case "retained": m(C, t++); break; case "added": E !== n ? m(C, E) : (w = { ja: B.value, qb: a.N(v++) }, u.push(w), z.push(w), r || (p[C] = w)) } a.a.e.set(e, c, u); h(k.beforeMove, D); a.a.q(x, k.beforeRemove ? a.$ :
                    a.removeNode); for (var C = 0, r = a.f.firstChild(e), F; w = z[C]; C++) { w.ca || a.a.extend(w, b(e, g, w.ja, l, w.qb)); for (t = 0; s = w.ca[t]; r = s.nextSibling, F = s, t++) s !== r && a.f.gc(e, s, F); !w.Wc && l && (l(w.ja, w.ca, w.qb), w.Wc = !0) } h(k.beforeRemove, f); for (C = 0; C < f.length; ++C) f[C] && (f[C].ja = d); h(k.afterMove, D); h(k.afterAdd, p)
                }
            })(); a.b("utils.setDomNodeChildrenFromArrayMapping", a.a.Bb); a.W = function () { this.allowTemplateRewriting = !1 }; a.W.prototype = new a.O; a.W.prototype.renderTemplateSource = function (b, c, d, e) {
                if (c = (9 > a.a.C ? 0 : b.nodes) ?
                b.nodes() : null) return a.a.V(c.cloneNode(!0).childNodes); b = b.text(); return a.a.ma(b, e)
            }; a.W.sb = new a.W; a.Db(a.W.sb); a.b("nativeTemplateEngine", a.W); (function () {
                a.vb = function () {
                    var a = this.$c = function () { if (!v || !v.tmpl) return 0; try { if (0 <= v.tmpl.tag.tmpl.open.toString().indexOf("__")) return 2 } catch (a) { } return 1 }(); this.renderTemplateSource = function (b, e, f, g) {
                        g = g || u; f = f || {}; if (2 > a) throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later."); var k = b.data("precompiled");
                        k || (k = b.text() || "", k = v.template(null, "{{ko_with $item.koBindingContext}}" + k + "{{/ko_with}}"), b.data("precompiled", k)); b = [e.$data]; e = v.extend({ koBindingContext: e }, f.templateOptions); e = v.tmpl(k, b, e); e.appendTo(g.createElement("div")); v.fragments = {}; return e
                    }; this.createJavaScriptEvaluatorBlock = function (a) { return "{{ko_code ((function() { return " + a + " })()) }}" }; this.addTemplate = function (a, b) { u.write("<script type='text/html' id='" + a + "'>" + b + "\x3c/script>") }; 0 < a && (v.tmpl.tag.ko_code = { open: "__.push($1 || '');" },
                    v.tmpl.tag.ko_with = { open: "with($1) {", close: "} " })
                }; a.vb.prototype = new a.O; var b = new a.vb; 0 < b.$c && a.Db(b); a.b("jqueryTmplTemplateEngine", a.vb)
            })()
        })
    })();
})();;
(function (factory) {
    // Module systems magic dance.

    if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
        // CommonJS or Node: hard-coded dependency on "knockout"
        factory(require("knockout"), exports);
    } else if (typeof define === "function" && define["amd"]) {
        // AMD anonymous module with hard-coded dependency on "knockout"
        define(["knockout", "exports"], factory);
    } else {
        // <script> tag: use the global `ko` object, attaching a `mapping` property
        factory(ko, ko.mapping = {});
    }
}(function (ko, exports) {
    var DEBUG = true;
    var mappingProperty = "__ko_mapping__";
    var realKoDependentObservable = ko.dependentObservable;
    var mappingNesting = 0;
    var dependentObservables;
    var visitedObjects;
    var recognizedRootProperties = ["create", "update", "key", "arrayChanged"];
    var emptyReturn = {};

    var _defaultOptions = {
        include: ["_destroy"],
        ignore: [],
        copy: [],
        observe: []
    };
    var defaultOptions = _defaultOptions;

    function unionArrays() {
        var args = arguments,
		l = args.length,
		obj = {},
		res = [],
		i, j, k;

        while (l--) {
            k = args[l];
            i = k.length;

            while (i--) {
                j = k[i];
                if (!obj[j]) {
                    obj[j] = 1;
                    res.push(j);
                }
            }
        }

        return res;
    }

    function extendObject(destination, source) {
        var destType;

        for (var key in source) {
            if (source.hasOwnProperty(key) && source[key]) {
                destType = exports.getType(destination[key]);
                if (key && destination[key] && destType !== "array" && destType !== "string") {
                    extendObject(destination[key], source[key]);
                } else {
                    var bothArrays = exports.getType(destination[key]) === "array" && exports.getType(source[key]) === "array";
                    if (bothArrays) {
                        destination[key] = unionArrays(destination[key], source[key]);
                    } else {
                        destination[key] = source[key];
                    }
                }
            }
        }
    }

    function merge(obj1, obj2) {
        var merged = {};
        extendObject(merged, obj1);
        extendObject(merged, obj2);

        return merged;
    }

    exports.isMapped = function (viewModel) {
        var unwrapped = ko.utils.unwrapObservable(viewModel);
        return unwrapped && unwrapped[mappingProperty];
    }

    exports.fromJS = function (jsObject /*, inputOptions, target*/) {
        if (arguments.length == 0) throw new Error("When calling ko.fromJS, pass the object you want to convert.");

        try {
            if (!mappingNesting++) {
                dependentObservables = [];
                visitedObjects = new objectLookup();
            }

            var options;
            var target;

            if (arguments.length == 2) {
                if (arguments[1][mappingProperty]) {
                    target = arguments[1];
                } else {
                    options = arguments[1];
                }
            }
            if (arguments.length == 3) {
                options = arguments[1];
                target = arguments[2];
            }

            if (target) {
                options = merge(options, target[mappingProperty]);
            }
            options = fillOptions(options);

            var result = updateViewModel(target, jsObject, options);
            if (target) {
                result = target;
            }

            // Evaluate any dependent observables that were proxied.
            // Do this after the model's observables have been created
            if (!--mappingNesting) {
                while (dependentObservables.length) {
                    var DO = dependentObservables.pop();
                    if (DO) {
                        DO();

                        // Move this magic property to the underlying dependent observable
                        DO.__DO["throttleEvaluation"] = DO["throttleEvaluation"];
                    }
                }
            }

            // Save any new mapping options in the view model, so that updateFromJS can use them later.
            result[mappingProperty] = merge(result[mappingProperty], options);

            return result;
        } catch (e) {
            mappingNesting = 0;
            throw e;
        }
    };

    exports.fromJSON = function (jsonString /*, options, target*/) {
        var parsed = ko.utils.parseJson(jsonString);
        arguments[0] = parsed;
        return exports.fromJS.apply(this, arguments);
    };

    exports.updateFromJS = function (viewModel) {
        throw new Error("ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!");
    };

    exports.updateFromJSON = function (viewModel) {
        throw new Error("ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!");
    };

    exports.toJS = function (rootObject, options) {
        if (!defaultOptions) exports.resetDefaultOptions();

        if (arguments.length == 0) throw new Error("When calling ko.mapping.toJS, pass the object you want to convert.");
        if (exports.getType(defaultOptions.ignore) !== "array") throw new Error("ko.mapping.defaultOptions().ignore should be an array.");
        if (exports.getType(defaultOptions.include) !== "array") throw new Error("ko.mapping.defaultOptions().include should be an array.");
        if (exports.getType(defaultOptions.copy) !== "array") throw new Error("ko.mapping.defaultOptions().copy should be an array.");

        // Merge in the options used in fromJS
        options = fillOptions(options, rootObject[mappingProperty]);

        // We just unwrap everything at every level in the object graph
        return exports.visitModel(rootObject, function (x) {
            return ko.utils.unwrapObservable(x)
        }, options);
    };

    exports.toJSON = function (rootObject, options) {
        var plainJavaScriptObject = exports.toJS(rootObject, options);
        return ko.utils.stringifyJson(plainJavaScriptObject);
    };

    exports.defaultOptions = function () {
        if (arguments.length > 0) {
            defaultOptions = arguments[0];
        } else {
            return defaultOptions;
        }
    };

    exports.resetDefaultOptions = function () {
        defaultOptions = {
            include: _defaultOptions.include.slice(0),
            ignore: _defaultOptions.ignore.slice(0),
            copy: _defaultOptions.copy.slice(0),
            observe: _defaultOptions.observe.slice(0)
        };
    };

    exports.getType = function (x) {
        if ((x) && (typeof (x) === "object")) {
            if (x.constructor === Date) return "date";
            if (x.constructor === Array) return "array";
        }
        return typeof x;
    }

    function fillOptions(rawOptions, otherOptions) {
        var options = merge({}, rawOptions);

        // Move recognized root-level properties into a root namespace
        for (var i = recognizedRootProperties.length - 1; i >= 0; i--) {
            var property = recognizedRootProperties[i];

            // Carry on, unless this property is present
            if (!options[property]) continue;

            // Move the property into the root namespace
            if (!(options[""] instanceof Object)) options[""] = {};
            options[""][property] = options[property];
            delete options[property];
        }

        if (otherOptions) {
            options.ignore = mergeArrays(otherOptions.ignore, options.ignore);
            options.include = mergeArrays(otherOptions.include, options.include);
            options.copy = mergeArrays(otherOptions.copy, options.copy);
            options.observe = mergeArrays(otherOptions.observe, options.observe);
        }
        options.ignore = mergeArrays(options.ignore, defaultOptions.ignore);
        options.include = mergeArrays(options.include, defaultOptions.include);
        options.copy = mergeArrays(options.copy, defaultOptions.copy);
        options.observe = mergeArrays(options.observe, defaultOptions.observe);

        options.mappedProperties = options.mappedProperties || {};
        options.copiedProperties = options.copiedProperties || {};
        return options;
    }

    function mergeArrays(a, b) {
        if (exports.getType(a) !== "array") {
            if (exports.getType(a) === "undefined") a = [];
            else a = [a];
        }
        if (exports.getType(b) !== "array") {
            if (exports.getType(b) === "undefined") b = [];
            else b = [b];
        }

        return ko.utils.arrayGetDistinctValues(a.concat(b));
    }

    // When using a 'create' callback, we proxy the dependent observable so that it doesn't immediately evaluate on creation.
    // The reason is that the dependent observables in the user-specified callback may contain references to properties that have not been mapped yet.
    function withProxyDependentObservable(dependentObservables, callback) {
        var localDO = ko.dependentObservable;
        ko.dependentObservable = function (read, owner, options) {
            options = options || {};

            if (read && typeof read == "object") { // mirrors condition in knockout implementation of DO's
                options = read;
            }

            var realDeferEvaluation = options.deferEvaluation;

            var isRemoved = false;

            // We wrap the original dependent observable so that we can remove it from the 'dependentObservables' list we need to evaluate after mapping has
            // completed if the user already evaluated the DO themselves in the meantime.
            var wrap = function (DO) {
                // Temporarily revert ko.dependentObservable, since it is used in ko.isWriteableObservable
                var tmp = ko.dependentObservable;
                ko.dependentObservable = realKoDependentObservable;
                var isWriteable = ko.isWriteableObservable(DO);
                ko.dependentObservable = tmp;

                var wrapped = realKoDependentObservable({
                    read: function () {
                        if (!isRemoved) {
                            ko.utils.arrayRemoveItem(dependentObservables, DO);
                            isRemoved = true;
                        }
                        return DO.apply(DO, arguments);
                    },
                    write: isWriteable && function (val) {
                        return DO(val);
                    },
                    deferEvaluation: true
                });
                if (DEBUG) wrapped._wrapper = true;
                wrapped.__DO = DO;
                return wrapped;
            };

            options.deferEvaluation = true; // will either set for just options, or both read/options.
            var realDependentObservable = new realKoDependentObservable(read, owner, options);

            if (!realDeferEvaluation) {
                realDependentObservable = wrap(realDependentObservable);
                dependentObservables.push(realDependentObservable);
            }

            return realDependentObservable;
        }
        ko.dependentObservable.fn = realKoDependentObservable.fn;
        ko.computed = ko.dependentObservable;
        var result = callback();
        ko.dependentObservable = localDO;
        ko.computed = ko.dependentObservable;
        return result;
    }

    function updateViewModel(mappedRootObject, rootObject, options, parentName, parent, parentPropertyName, mappedParent) {
        var isArray = exports.getType(ko.utils.unwrapObservable(rootObject)) === "array";

        parentPropertyName = parentPropertyName || "";

        // If this object was already mapped previously, take the options from there and merge them with our existing ones.
        if (exports.isMapped(mappedRootObject)) {
            var previousMapping = ko.utils.unwrapObservable(mappedRootObject)[mappingProperty];
            options = merge(previousMapping, options);
        }

        var callbackParams = {
            data: rootObject,
            parent: mappedParent || parent
        };

        var hasCreateCallback = function () {
            return options[parentName] && options[parentName].create instanceof Function;
        };

        var createCallback = function (data) {
            return withProxyDependentObservable(dependentObservables, function () {

                if (ko.utils.unwrapObservable(parent) instanceof Array) {
                    return options[parentName].create({
                        data: data || callbackParams.data,
                        parent: callbackParams.parent,
                        skip: emptyReturn
                    });
                } else {
                    return options[parentName].create({
                        data: data || callbackParams.data,
                        parent: callbackParams.parent
                    });
                }
            });
        };

        var hasUpdateCallback = function () {
            return options[parentName] && options[parentName].update instanceof Function;
        };

        var updateCallback = function (obj, data) {
            var params = {
                data: data || callbackParams.data,
                parent: callbackParams.parent,
                target: ko.utils.unwrapObservable(obj)
            };

            if (ko.isWriteableObservable(obj)) {
                params.observable = obj;
            }

            return options[parentName].update(params);
        }

        var alreadyMapped = visitedObjects.get(rootObject);
        if (alreadyMapped) {
            return alreadyMapped;
        }

        parentName = parentName || "";

        if (!isArray) {
            // For atomic types, do a direct update on the observable
            if (!canHaveProperties(rootObject)) {
                switch (exports.getType(rootObject)) {
                    case "function":
                        if (hasUpdateCallback()) {
                            if (ko.isWriteableObservable(rootObject)) {
                                rootObject(updateCallback(rootObject));
                                mappedRootObject = rootObject;
                            } else {
                                mappedRootObject = updateCallback(rootObject);
                            }
                        } else {
                            mappedRootObject = rootObject;
                        }
                        break;
                    default:
                        if (ko.isWriteableObservable(mappedRootObject)) {
                            if (hasUpdateCallback()) {
                                var valueToWrite = updateCallback(mappedRootObject);
                                mappedRootObject(valueToWrite);
                                return valueToWrite;
                            } else {
                                var valueToWrite = ko.utils.unwrapObservable(rootObject);
                                mappedRootObject(valueToWrite);
                                return valueToWrite;
                            }
                        } else {
                            var hasCreateOrUpdateCallback = hasCreateCallback() || hasUpdateCallback();

                            if (hasCreateCallback()) {
                                mappedRootObject = createCallback();
                            } else {
                                mappedRootObject = ko.observable(ko.utils.unwrapObservable(rootObject));
                            }

                            if (hasUpdateCallback()) {
                                mappedRootObject(updateCallback(mappedRootObject));
                            }

                            if (hasCreateOrUpdateCallback) return mappedRootObject;
                        }
                }

            } else {
                mappedRootObject = ko.utils.unwrapObservable(mappedRootObject);
                if (!mappedRootObject) {
                    if (hasCreateCallback()) {
                        var result = createCallback();

                        if (hasUpdateCallback()) {
                            result = updateCallback(result);
                        }

                        return result;
                    } else {
                        if (hasUpdateCallback()) {
                            return updateCallback(result);
                        }

                        mappedRootObject = {};
                    }
                }

                if (hasUpdateCallback()) {
                    mappedRootObject = updateCallback(mappedRootObject);
                }

                visitedObjects.save(rootObject, mappedRootObject);
                if (hasUpdateCallback()) return mappedRootObject;

                // For non-atomic types, visit all properties and update recursively
                visitPropertiesOrArrayEntries(rootObject, function (indexer) {
                    var fullPropertyName = parentPropertyName.length ? parentPropertyName + "." + indexer : indexer;

                    if (ko.utils.arrayIndexOf(options.ignore, fullPropertyName) != -1) {
                        return;
                    }

                    if (ko.utils.arrayIndexOf(options.copy, fullPropertyName) != -1) {
                        mappedRootObject[indexer] = rootObject[indexer];
                        return;
                    }

                    if (typeof rootObject[indexer] != "object" && typeof rootObject[indexer] != "array" && options.observe.length > 0 && ko.utils.arrayIndexOf(options.observe, fullPropertyName) == -1) {
                        mappedRootObject[indexer] = rootObject[indexer];
                        options.copiedProperties[fullPropertyName] = true;
                        return;
                    }

                    // In case we are adding an already mapped property, fill it with the previously mapped property value to prevent recursion.
                    // If this is a property that was generated by fromJS, we should use the options specified there
                    var prevMappedProperty = visitedObjects.get(rootObject[indexer]);
                    var retval = updateViewModel(mappedRootObject[indexer], rootObject[indexer], options, indexer, mappedRootObject, fullPropertyName, mappedRootObject);
                    var value = prevMappedProperty || retval;

                    if (options.observe.length > 0 && ko.utils.arrayIndexOf(options.observe, fullPropertyName) == -1) {
                        mappedRootObject[indexer] = ko.utils.unwrapObservable(value);
                        options.copiedProperties[fullPropertyName] = true;
                        return;
                    }

                    if (ko.isWriteableObservable(mappedRootObject[indexer])) {
                        value = ko.utils.unwrapObservable(value);
                        if (mappedRootObject[indexer]() !== value) {
                            mappedRootObject[indexer](value);
                        }
                    } else {
                        value = mappedRootObject[indexer] === undefined ? value : ko.utils.unwrapObservable(value);
                        mappedRootObject[indexer] = value;
                    }

                    options.mappedProperties[fullPropertyName] = true;
                });
            }
        } else { //mappedRootObject is an array
            var changes = [];

            var hasKeyCallback = false;
            var keyCallback = function (x) {
                return x;
            }
            if (options[parentName] && options[parentName].key) {
                keyCallback = options[parentName].key;
                hasKeyCallback = true;
            }

            if (!ko.isObservable(mappedRootObject)) {
                // When creating the new observable array, also add a bunch of utility functions that take the 'key' of the array items into account.
                mappedRootObject = ko.observableArray([]);

                mappedRootObject.mappedRemove = function (valueOrPredicate) {
                    var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) {
                        return value === keyCallback(valueOrPredicate);
                    };
                    return mappedRootObject.remove(function (item) {
                        return predicate(keyCallback(item));
                    });
                }

                mappedRootObject.mappedRemoveAll = function (arrayOfValues) {
                    var arrayOfKeys = filterArrayByKey(arrayOfValues, keyCallback);
                    return mappedRootObject.remove(function (item) {
                        return ko.utils.arrayIndexOf(arrayOfKeys, keyCallback(item)) != -1;
                    });
                }

                mappedRootObject.mappedDestroy = function (valueOrPredicate) {
                    var predicate = typeof valueOrPredicate == "function" ? valueOrPredicate : function (value) {
                        return value === keyCallback(valueOrPredicate);
                    };
                    return mappedRootObject.destroy(function (item) {
                        return predicate(keyCallback(item));
                    });
                }

                mappedRootObject.mappedDestroyAll = function (arrayOfValues) {
                    var arrayOfKeys = filterArrayByKey(arrayOfValues, keyCallback);
                    return mappedRootObject.destroy(function (item) {
                        return ko.utils.arrayIndexOf(arrayOfKeys, keyCallback(item)) != -1;
                    });
                }

                mappedRootObject.mappedIndexOf = function (item) {
                    var keys = filterArrayByKey(mappedRootObject(), keyCallback);
                    var key = keyCallback(item);
                    return ko.utils.arrayIndexOf(keys, key);
                }

                mappedRootObject.mappedGet = function (item) {
                    return mappedRootObject()[mappedRootObject.mappedIndexOf(item)];
                }

                mappedRootObject.mappedCreate = function (value) {
                    if (mappedRootObject.mappedIndexOf(value) !== -1) {
                        throw new Error("There already is an object with the key that you specified.");
                    }

                    var item = hasCreateCallback() ? createCallback(value) : value;
                    if (hasUpdateCallback()) {
                        var newValue = updateCallback(item, value);
                        if (ko.isWriteableObservable(item)) {
                            item(newValue);
                        } else {
                            item = newValue;
                        }
                    }
                    mappedRootObject.push(item);
                    return item;
                }
            }

            var currentArrayKeys = filterArrayByKey(ko.utils.unwrapObservable(mappedRootObject), keyCallback).sort();
            var newArrayKeys = filterArrayByKey(rootObject, keyCallback);
            if (hasKeyCallback) newArrayKeys.sort();
            var editScript = ko.utils.compareArrays(currentArrayKeys, newArrayKeys);

            var ignoreIndexOf = {};

            var i, j;

            var unwrappedRootObject = ko.utils.unwrapObservable(rootObject);
            var itemsByKey = {};
            var optimizedKeys = true;
            for (i = 0, j = unwrappedRootObject.length; i < j; i++) {
                var key = keyCallback(unwrappedRootObject[i]);
                if (key === undefined || key instanceof Object) {
                    optimizedKeys = false;
                    break;
                }
                itemsByKey[key] = unwrappedRootObject[i];
            }

            var newContents = [];
            var passedOver = 0;
            for (i = 0, j = editScript.length; i < j; i++) {
                var key = editScript[i];
                var mappedItem;
                var fullPropertyName = parentPropertyName + "[" + i + "]";
                switch (key.status) {
                    case "added":
                        var item = optimizedKeys ? itemsByKey[key.value] : getItemByKey(ko.utils.unwrapObservable(rootObject), key.value, keyCallback);
                        mappedItem = updateViewModel(undefined, item, options, parentName, mappedRootObject, fullPropertyName, parent);
                        if (!hasCreateCallback()) {
                            mappedItem = ko.utils.unwrapObservable(mappedItem);
                        }

                        var index = ignorableIndexOf(ko.utils.unwrapObservable(rootObject), item, ignoreIndexOf);

                        if (mappedItem === emptyReturn) {
                            passedOver++;
                        } else {
                            newContents[index - passedOver] = mappedItem;
                        }

                        ignoreIndexOf[index] = true;
                        break;
                    case "retained":
                        var item = optimizedKeys ? itemsByKey[key.value] : getItemByKey(ko.utils.unwrapObservable(rootObject), key.value, keyCallback);
                        mappedItem = getItemByKey(mappedRootObject, key.value, keyCallback);
                        updateViewModel(mappedItem, item, options, parentName, mappedRootObject, fullPropertyName, parent);

                        var index = ignorableIndexOf(ko.utils.unwrapObservable(rootObject), item, ignoreIndexOf);
                        newContents[index] = mappedItem;
                        ignoreIndexOf[index] = true;
                        break;
                    case "deleted":
                        mappedItem = getItemByKey(mappedRootObject, key.value, keyCallback);
                        break;
                }

                changes.push({
                    event: key.status,
                    item: mappedItem
                });
            }

            mappedRootObject(newContents);

            if (options[parentName] && options[parentName].arrayChanged) {
                ko.utils.arrayForEach(changes, function (change) {
                    options[parentName].arrayChanged(change.event, change.item);
                });
            }
        }

        return mappedRootObject;
    }

    function ignorableIndexOf(array, item, ignoreIndices) {
        for (var i = 0, j = array.length; i < j; i++) {
            if (ignoreIndices[i] === true) continue;
            if (array[i] === item) return i;
        }
        return null;
    }

    function mapKey(item, callback) {
        var mappedItem;
        if (callback) mappedItem = callback(item);
        if (exports.getType(mappedItem) === "undefined") mappedItem = item;

        return ko.utils.unwrapObservable(mappedItem);
    }

    function getItemByKey(array, key, callback) {
        array = ko.utils.unwrapObservable(array);
        for (var i = 0, j = array.length; i < j; i++) {
            var item = array[i];
            if (mapKey(item, callback) === key) return item;
        }

        throw new Error("When calling ko.update*, the key '" + key + "' was not found!");
    }

    function filterArrayByKey(array, callback) {
        return ko.utils.arrayMap(ko.utils.unwrapObservable(array), function (item) {
            if (callback) {
                return mapKey(item, callback);
            } else {
                return item;
            }
        });
    }

    function visitPropertiesOrArrayEntries(rootObject, visitorCallback) {
        if (exports.getType(rootObject) === "array") {
            for (var i = 0; i < rootObject.length; i++)
                visitorCallback(i);
        } else {
            for (var propertyName in rootObject)
                visitorCallback(propertyName);
        }
    };

    function canHaveProperties(object) {
        var type = exports.getType(object);
        return ((type === "object") || (type === "array")) && (object !== null);
    }

    // Based on the parentName, this creates a fully classified name of a property

    function getPropertyName(parentName, parent, indexer) {
        var propertyName = parentName || "";
        if (exports.getType(parent) === "array") {
            if (parentName) {
                propertyName += "[" + indexer + "]";
            }
        } else {
            if (parentName) {
                propertyName += ".";
            }
            propertyName += indexer;
        }
        return propertyName;
    }

    exports.visitModel = function (rootObject, callback, options) {
        options = options || {};
        options.visitedObjects = options.visitedObjects || new objectLookup();

        var mappedRootObject;
        var unwrappedRootObject = ko.utils.unwrapObservable(rootObject);

        if (!canHaveProperties(unwrappedRootObject)) {
            return callback(rootObject, options.parentName);
        } else {
            options = fillOptions(options, unwrappedRootObject[mappingProperty]);

            // Only do a callback, but ignore the results
            callback(rootObject, options.parentName);
            mappedRootObject = exports.getType(unwrappedRootObject) === "array" ? [] : {};
        }

        options.visitedObjects.save(rootObject, mappedRootObject);

        var parentName = options.parentName;
        visitPropertiesOrArrayEntries(unwrappedRootObject, function (indexer) {
            if (options.ignore && ko.utils.arrayIndexOf(options.ignore, indexer) != -1) return;

            var propertyValue = unwrappedRootObject[indexer];
            options.parentName = getPropertyName(parentName, unwrappedRootObject, indexer);

            // If we don't want to explicitly copy the unmapped property...
            if (ko.utils.arrayIndexOf(options.copy, indexer) === -1) {
                // ...find out if it's a property we want to explicitly include
                if (ko.utils.arrayIndexOf(options.include, indexer) === -1) {
                    // The mapped properties object contains all the properties that were part of the original object.
                    // If a property does not exist, and it is not because it is part of an array (e.g. "myProp[3]"), then it should not be unmapped.
                    if (unwrappedRootObject[mappingProperty]
				        && unwrappedRootObject[mappingProperty].mappedProperties && !unwrappedRootObject[mappingProperty].mappedProperties[indexer]
				        && unwrappedRootObject[mappingProperty].copiedProperties && !unwrappedRootObject[mappingProperty].copiedProperties[indexer]
				        && !(exports.getType(unwrappedRootObject) === "array")) {
                        return;
                    }
                }
            }

            var outputProperty;
            switch (exports.getType(ko.utils.unwrapObservable(propertyValue))) {
                case "object":
                case "array":
                case "undefined":
                    var previouslyMappedValue = options.visitedObjects.get(propertyValue);
                    mappedRootObject[indexer] = (exports.getType(previouslyMappedValue) !== "undefined") ? previouslyMappedValue : exports.visitModel(propertyValue, callback, options);
                    break;
                default:
                    mappedRootObject[indexer] = callback(propertyValue, options.parentName);
            }
        });

        return mappedRootObject;
    }

    function simpleObjectLookup() {
        var keys = [];
        var values = [];
        this.save = function (key, value) {
            var existingIndex = ko.utils.arrayIndexOf(keys, key);
            if (existingIndex >= 0) values[existingIndex] = value;
            else {
                keys.push(key);
                values.push(value);
            }
        };
        this.get = function (key) {
            var existingIndex = ko.utils.arrayIndexOf(keys, key);
            var value = (existingIndex >= 0) ? values[existingIndex] : undefined;
            return value;
        };
    };

    function objectLookup() {
        var buckets = {};

        var findBucket = function (key) {
            var bucketKey;
            try {
                bucketKey = key;//JSON.stringify(key);
            }
            catch (e) {
                bucketKey = "$$$";
            }

            var bucket = buckets[bucketKey];
            if (bucket === undefined) {
                bucket = new simpleObjectLookup();
                buckets[bucketKey] = bucket;
            }
            return bucket;
        };

        this.save = function (key, value) {
            findBucket(key).save(key, value);
        };
        this.get = function (key) {
            return findBucket(key).get(key);
        };
    };
}));;
$(window).on('load', function () {
    function loadHeaderFlightInformation() {
        var savedFlightNumber = $.cookie('userSavedFlight');

        if (savedFlightNumber != null) {
            jQuery.ajax({
                url: '/WebServices/FlightInformation.asmx/FlightArrivalsAndDepartures',
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                data: JSON.stringify({ searchTerm: savedFlightNumber, exactflight: true }),
                success: function(data) {
                    if (data.d.length > 0) {
                        if ($("body").hasClass("design-b")) {
                            loadBFlightBanner(data);
                        } else {
                            loadRegularFlightBanner(data);
                        }
                    } else {
                        $('#header-flight-info').empty();
                        $('#ab-header-flight-info').empty();
                        $.removeCookie('userSavedFlight', { path: '/' });
                    }
                }
            });
        } else {
            $('#header-flight-info').hide();
            $('#ab-header-flight-info').hide();
        }

        setTimeout(loadHeaderFlightInformation, 60000);
    }

    loadHeaderFlightInformation();
});

function loadRegularFlightBanner(data) {
    var $headerFlight = $('.header-flight');
    $headerFlight.hide();

    var flight = data.d[0];

    var template = $('#header-flight-info-template').html();
    Mustache.parse(template);

    var flightInfo = {
        'flightNumber': flight.fltnmbr,
        'airlineLogo': flight.imgPath,
        'fromTo': flight.isArrival ? 'From' : 'To',
        'airport': flight.origdest,
        'departingArriving': flight.isArrival ? 'Arrive' : 'Depart',
        'scheduledTime': flight.schedtime,
        'status': flight.message,
        'statusCssClass': flight.statusCssClass
    };

    var rendered = Mustache.render(template, flightInfo);
    $('#header-flight-info').html(rendered);
    setTimeout(function () { $headerFlight.show(); }, 0);
}

function loadBFlightBanner(data) {
    var $headerFlight = $('.ab-header-flight');
    $headerFlight.hide();

    var flight = data.d[0];

    var template = $('#AB-header-flight-info-template').html();
    Mustache.parse(template);

    var detailsUrl = '/ab-testing/flights/flight-detail?fltnmbr=' + flight.fltnmbr;
    var flightInfo = {
        'flightNumber': flight.fltnmbr,
        'airlineLogo': flight.imgPath,
        'fromTo': flight.isArrival ? 'From' : 'To',
        'airport': flight.origdest,
        'departingArriving': flight.isArrival ? 'Arrive' : 'Depart',
        'scheduledTime': flight.schedtime,
        'status': flight.message,
        'statusCssClass': flight.statusCssClass,
        'detailsUrl': detailsUrl
    };

    var rendered = Mustache.render(template, flightInfo);
    $('#ab-header-flight-info').html(rendered);
    setTimeout(function () { $headerFlight.show(); }, 0);
};
(function ($) {

	$.throttle = function (fn, wait, options) {
		/**
	 * lodash (Custom Build) <https://lodash.com/>
	 * Build: `lodash modularize exports="npm" -o ./`
	 * Copyright jQuery Foundation and other contributors <https://jquery.org/>
	 * Released under MIT license <https://lodash.com/license>
	 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
	 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
	 */

		/** Used as the `TypeError` message for "Functions" methods. */
		var FUNC_ERROR_TEXT = 'Expected a function';

		/** Used as references for various `Number` constants. */
		var NAN = 0 / 0;

		/** `Object#toString` result references. */
		var symbolTag = '[object Symbol]';

		/** Used to match leading and trailing whitespace. */
		var reTrim = /^\s+|\s+$/g;

		/** Used to detect bad signed hexadecimal string values. */
		var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

		/** Used to detect binary string values. */
		var reIsBinary = /^0b[01]+$/i;

		/** Used to detect octal string values. */
		var reIsOctal = /^0o[0-7]+$/i;

		/** Built-in method references without a dependency on `root`. */
		var freeParseInt = parseInt;

		/** Detect free variable `global` from Node.js. */
		var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

		/** Detect free variable `self`. */
		var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

		/** Used as a reference to the global object. */
		var root = freeGlobal || freeSelf || Function('return this')();

		/** Used for built-in method references. */
		var objectProto = Object.prototype;

		/**
		 * Used to resolve the
		 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
		 * of values.
		 */
		var objectToString = objectProto.toString;

		/* Built-in method references for those with the same name as other `lodash` methods. */
		var nativeMax = Math.max,
			nativeMin = Math.min;

		/**
		 * Gets the timestamp of the number of milliseconds that have elapsed since
		 * the Unix epoch (1 January 1970 00:00:00 UTC).
		 *
		 * @static
		 * @memberOf _
		 * @since 2.4.0
		 * @category Date
		 * @returns {number} Returns the timestamp.
		 * @example
		 *
		 * _.defer(function(stamp) {
		 *   console.log(_.now() - stamp);
		 * }, _.now());
		 * // => Logs the number of milliseconds it took for the deferred invocation.
		 */
		var now = function () {
			return root.Date.now();
		};

		/**
		 * Creates a debounced function that delays invoking `func` until after `wait`
		 * milliseconds have elapsed since the last time the debounced function was
		 * invoked. The debounced function comes with a `cancel` method to cancel
		 * delayed `func` invocations and a `flush` method to immediately invoke them.
		 * Provide `options` to indicate whether `func` should be invoked on the
		 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
		 * with the last arguments provided to the debounced function. Subsequent
		 * calls to the debounced function return the result of the last `func`
		 * invocation.
		 *
		 * **Note:** If `leading` and `trailing` options are `true`, `func` is
		 * invoked on the trailing edge of the timeout only if the debounced function
		 * is invoked more than once during the `wait` timeout.
		 *
		 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
		 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
		 *
		 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
		 * for details over the differences between `_.debounce` and `_.throttle`.
		 *
		 * @static
		 * @memberOf _
		 * @since 0.1.0
		 * @category Function
		 * @param {Function} func The function to debounce.
		 * @param {number} [wait=0] The number of milliseconds to delay.
		 * @param {Object} [options={}] The options object.
		 * @param {boolean} [options.leading=false]
		 *  Specify invoking on the leading edge of the timeout.
		 * @param {number} [options.maxWait]
		 *  The maximum time `func` is allowed to be delayed before it's invoked.
		 * @param {boolean} [options.trailing=true]
		 *  Specify invoking on the trailing edge of the timeout.
		 * @returns {Function} Returns the new debounced function.
		 * @example
		 *
		 * // Avoid costly calculations while the window size is in flux.
		 * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
		 *
		 * // Invoke `sendMail` when clicked, debouncing subsequent calls.
		 * jQuery(element).on('click', _.debounce(sendMail, 300, {
		 *   'leading': true,
		 *   'trailing': false
		 * }));
		 *
		 * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
		 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
		 * var source = new EventSource('/stream');
		 * jQuery(source).on('message', debounced);
		 *
		 * // Cancel the trailing debounced invocation.
		 * jQuery(window).on('popstate', debounced.cancel);
		 */
		function debounce(func, wait, options) {
			var lastArgs,
				lastThis,
				maxWait,
				result,
				timerId,
				lastCallTime,
				lastInvokeTime = 0,
				leading = false,
				maxing = false,
				trailing = true;

			if (typeof func != 'function') {
				throw new TypeError(FUNC_ERROR_TEXT);
			}
			wait = toNumber(wait) || 0;
			if (isObject(options)) {
				leading = !!options.leading;
				maxing = 'maxWait' in options;
				maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
				trailing = 'trailing' in options ? !!options.trailing : trailing;
			}

			function invokeFunc(time) {
				var args = lastArgs,
					thisArg = lastThis;

				lastArgs = lastThis = undefined;
				lastInvokeTime = time;
				result = func.apply(thisArg, args);
				return result;
			}

			function leadingEdge(time) {
				// Reset any `maxWait` timer.
				lastInvokeTime = time;
				// Start the timer for the trailing edge.
				timerId = setTimeout(timerExpired, wait);
				// Invoke the leading edge.
				return leading ? invokeFunc(time) : result;
			}

			function remainingWait(time) {
				var timeSinceLastCall = time - lastCallTime,
					timeSinceLastInvoke = time - lastInvokeTime,
					result = wait - timeSinceLastCall;

				return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
			}

			function shouldInvoke(time) {
				var timeSinceLastCall = time - lastCallTime,
					timeSinceLastInvoke = time - lastInvokeTime;

				// Either this is the first call, activity has stopped and we're at the
				// trailing edge, the system time has gone backwards and we're treating
				// it as the trailing edge, or we've hit the `maxWait` limit.
				return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
					(timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
			}

			function timerExpired() {
				var time = now();
				if (shouldInvoke(time)) {
					return trailingEdge(time);
				}
				// Restart the timer.
				timerId = setTimeout(timerExpired, remainingWait(time));
			}

			function trailingEdge(time) {
				timerId = undefined;

				// Only invoke if we have `lastArgs` which means `func` has been
				// debounced at least once.
				if (trailing && lastArgs) {
					return invokeFunc(time);
				}
				lastArgs = lastThis = undefined;
				return result;
			}

			function cancel() {
				if (timerId !== undefined) {
					clearTimeout(timerId);
				}
				lastInvokeTime = 0;
				lastArgs = lastCallTime = lastThis = timerId = undefined;
			}

			function flush() {
				return timerId === undefined ? result : trailingEdge(now());
			}

			function debounced() {
				var time = now(),
					isInvoking = shouldInvoke(time);

				lastArgs = arguments;
				lastThis = this;
				lastCallTime = time;

				if (isInvoking) {
					if (timerId === undefined) {
						return leadingEdge(lastCallTime);
					}
					if (maxing) {
						// Handle invocations in a tight loop.
						timerId = setTimeout(timerExpired, wait);
						return invokeFunc(lastCallTime);
					}
				}
				if (timerId === undefined) {
					timerId = setTimeout(timerExpired, wait);
				}
				return result;
			}
			debounced.cancel = cancel;
			debounced.flush = flush;
			return debounced;
		}

		/**
		 * Creates a throttled function that only invokes `func` at most once per
		 * every `wait` milliseconds. The throttled function comes with a `cancel`
		 * method to cancel delayed `func` invocations and a `flush` method to
		 * immediately invoke them. Provide `options` to indicate whether `func`
		 * should be invoked on the leading and/or trailing edge of the `wait`
		 * timeout. The `func` is invoked with the last arguments provided to the
		 * throttled function. Subsequent calls to the throttled function return the
		 * result of the last `func` invocation.
		 *
		 * **Note:** If `leading` and `trailing` options are `true`, `func` is
		 * invoked on the trailing edge of the timeout only if the throttled function
		 * is invoked more than once during the `wait` timeout.
		 *
		 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
		 * until to the next tick, similar to `setTimeout` with a timeout of `0`.
		 *
		 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
		 * for details over the differences between `_.throttle` and `_.debounce`.
		 *
		 * @static
		 * @memberOf _
		 * @since 0.1.0
		 * @category Function
		 * @param {Function} func The function to throttle.
		 * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
		 * @param {Object} [options={}] The options object.
		 * @param {boolean} [options.leading=true]
		 *  Specify invoking on the leading edge of the timeout.
		 * @param {boolean} [options.trailing=true]
		 *  Specify invoking on the trailing edge of the timeout.
		 * @returns {Function} Returns the new throttled function.
		 * @example
		 *
		 * // Avoid excessively updating the position while scrolling.
		 * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
		 *
		 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
		 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
		 * jQuery(element).on('click', throttled);
		 *
		 * // Cancel the trailing throttled invocation.
		 * jQuery(window).on('popstate', throttled.cancel);
		 */
		function throttle(func, wait, options) {
			var leading = true,
				trailing = true;

			if (typeof func != 'function') {
				throw new TypeError(FUNC_ERROR_TEXT);
			}
			if (isObject(options)) {
				leading = 'leading' in options ? !!options.leading : leading;
				trailing = 'trailing' in options ? !!options.trailing : trailing;
			}
			return debounce(func, wait, {
				'leading': leading,
				'maxWait': wait,
				'trailing': trailing
			});
		}

		/**
		 * Checks if `value` is the
		 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
		 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
		 *
		 * @static
		 * @memberOf _
		 * @since 0.1.0
		 * @category Lang
		 * @param {*} value The value to check.
		 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
		 * @example
		 *
		 * _.isObject({});
		 * // => true
		 *
		 * _.isObject([1, 2, 3]);
		 * // => true
		 *
		 * _.isObject(_.noop);
		 * // => true
		 *
		 * _.isObject(null);
		 * // => false
		 */
		function isObject(value) {
			var type = typeof value;
			return !!value && (type == 'object' || type == 'function');
		}

		/**
		 * Checks if `value` is object-like. A value is object-like if it's not `null`
		 * and has a `typeof` result of "object".
		 *
		 * @static
		 * @memberOf _
		 * @since 4.0.0
		 * @category Lang
		 * @param {*} value The value to check.
		 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
		 * @example
		 *
		 * _.isObjectLike({});
		 * // => true
		 *
		 * _.isObjectLike([1, 2, 3]);
		 * // => true
		 *
		 * _.isObjectLike(_.noop);
		 * // => false
		 *
		 * _.isObjectLike(null);
		 * // => false
		 */
		function isObjectLike(value) {
			return !!value && typeof value == 'object';
		}

		/**
		 * Checks if `value` is classified as a `Symbol` primitive or object.
		 *
		 * @static
		 * @memberOf _
		 * @since 4.0.0
		 * @category Lang
		 * @param {*} value The value to check.
		 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
		 * @example
		 *
		 * _.isSymbol(Symbol.iterator);
		 * // => true
		 *
		 * _.isSymbol('abc');
		 * // => false
		 */
		function isSymbol(value) {
			return typeof value == 'symbol' ||
				(isObjectLike(value) && objectToString.call(value) == symbolTag);
		}

		/**
		 * Converts `value` to a number.
		 *
		 * @static
		 * @memberOf _
		 * @since 4.0.0
		 * @category Lang
		 * @param {*} value The value to process.
		 * @returns {number} Returns the number.
		 * @example
		 *
		 * _.toNumber(3.2);
		 * // => 3.2
		 *
		 * _.toNumber(Number.MIN_VALUE);
		 * // => 5e-324
		 *
		 * _.toNumber(Infinity);
		 * // => Infinity
		 *
		 * _.toNumber('3.2');
		 * // => 3.2
		 */
		function toNumber(value) {
			if (typeof value == 'number') {
				return value;
			}
			if (isSymbol(value)) {
				return NAN;
			}
			if (isObject(value)) {
				var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
				value = isObject(other) ? (other + '') : other;
			}
			if (typeof value != 'string') {
				return value === 0 ? value : +value;
			}
			value = value.replace(reTrim, '');
			var isBinary = reIsBinary.test(value);
			return (isBinary || reIsOctal.test(value))
				? freeParseInt(value.slice(2), isBinary ? 2 : 8)
				: (reIsBadHex.test(value) ? NAN : +value);
		}

		return throttle(fn, wait, options);
	};
})(jQuery);;
/*! Magnific Popup - v1.1.0 - 2016-02-20
* http://dimsemenov.com/plugins/magnific-popup/
* Copyright (c) 2016 Dmitry Semenov; */
; (function (factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module. 
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node/CommonJS 
        factory(require('jquery'));
    } else {
        // Browser globals 
        factory(window.jQuery || window.Zepto);
    }
}(function ($) {

    /*>>core*/
    /**
     * 
     * Magnific Popup Core JS file
     * 
     */


    /**
     * Private static constants
     */
    var CLOSE_EVENT = 'Close',
        BEFORE_CLOSE_EVENT = 'BeforeClose',
        AFTER_CLOSE_EVENT = 'AfterClose',
        BEFORE_APPEND_EVENT = 'BeforeAppend',
        MARKUP_PARSE_EVENT = 'MarkupParse',
        OPEN_EVENT = 'Open',
        CHANGE_EVENT = 'Change',
        NS = 'mfp',
        EVENT_NS = '.' + NS,
        READY_CLASS = 'mfp-ready',
        REMOVING_CLASS = 'mfp-removing',
        PREVENT_CLOSE_CLASS = 'mfp-prevent-close';


    /**
     * Private vars 
     */
    /*jshint -W079 */
    var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
        MagnificPopup = function () { },
        _isJQ = !!(window.jQuery),
        _prevStatus,
        _window = $(window),
        _document,
        _prevContentType,
        _wrapClasses,
        _currPopupType;


    /**
     * Private functions
     */
    var _mfpOn = function (name, f) {
        mfp.ev.on(NS + name + EVENT_NS, f);
    },
        _getEl = function (className, appendTo, html, raw) {
            var el = document.createElement('div');
            el.className = 'mfp-' + className;
            if (html) {
                el.innerHTML = html;
            }
            if (!raw) {
                el = $(el);
                if (appendTo) {
                    el.appendTo(appendTo);
                }
            } else if (appendTo) {
                appendTo.appendChild(el);
            }
            return el;
        },
        _mfpTrigger = function (e, data) {
            mfp.ev.triggerHandler(NS + e, data);

            if (mfp.st.callbacks) {
                // converts "mfpEventName" to "eventName" callback and triggers it if it's present
                e = e.charAt(0).toLowerCase() + e.slice(1);
                if (mfp.st.callbacks[e]) {
                    mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
                }
            }
        },
        _getCloseBtn = function (type) {
            if (type !== _currPopupType || !mfp.currTemplate.closeBtn) {
                mfp.currTemplate.closeBtn = $(mfp.st.closeMarkup.replace('%title%', mfp.st.tClose));
                _currPopupType = type;
            }
            return mfp.currTemplate.closeBtn;
        },
        // Initialize Magnific Popup only when called at least once
        _checkInstance = function () {
            if (!$.magnificPopup.instance) {
                /*jshint -W020 */
                mfp = new MagnificPopup();
                mfp.init();
                $.magnificPopup.instance = mfp;
            }
        },
        // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
        supportsTransitions = function () {
            var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
                v = ['ms', 'O', 'Moz', 'Webkit']; // 'v' for vendor

            if (s['transition'] !== undefined) {
                return true;
            }

            while (v.length) {
                if (v.pop() + 'Transition' in s) {
                    return true;
                }
            }

            return false;
        };



    /**
     * Public functions
     */
    MagnificPopup.prototype = {

        constructor: MagnificPopup,

        /**
         * Initializes Magnific Popup plugin. 
         * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
         */
        init: function () {
            var appVersion = navigator.appVersion;
            mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
            mfp.isAndroid = (/android/gi).test(appVersion);
            mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
            mfp.supportsTransition = supportsTransitions();

            // We disable fixed positioned lightbox on devices that don't handle it nicely.
            // If you know a better way of detecting this - let me know.
            mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent));
            _document = $(document);

            mfp.popupsCache = {};
        },

        /**
         * Opens popup
         * @param  data [description]
         */
        open: function (data) {

            var i;

            if (data.isObj === false) {
                // convert jQuery collection to array to avoid conflicts later
                mfp.items = data.items.toArray();

                mfp.index = 0;
                var items = data.items,
                    item;
                for (i = 0; i < items.length; i++) {
                    item = items[i];
                    if (item.parsed) {
                        item = item.el[0];
                    }
                    if (item === data.el[0]) {
                        mfp.index = i;
                        break;
                    }
                }
            } else {
                mfp.items = $.isArray(data.items) ? data.items : [data.items];
                mfp.index = data.index || 0;
            }

            // if popup is already opened - we just update the content
            if (mfp.isOpen) {
                mfp.updateItemHTML();
                return;
            }

            mfp.types = [];
            _wrapClasses = '';
            if (data.mainEl && data.mainEl.length) {
                mfp.ev = data.mainEl.eq(0);
            } else {
                mfp.ev = _document;
            }

            if (data.key) {
                if (!mfp.popupsCache[data.key]) {
                    mfp.popupsCache[data.key] = {};
                }
                mfp.currTemplate = mfp.popupsCache[data.key];
            } else {
                mfp.currTemplate = {};
            }



            mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data);
            mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;

            if (mfp.st.modal) {
                mfp.st.closeOnContentClick = false;
                mfp.st.closeOnBgClick = false;
                mfp.st.showCloseBtn = false;
                mfp.st.enableEscapeKey = false;
            }


            // Building markup
            // main containers are created only once
            if (!mfp.bgOverlay) {

                // Dark overlay
                mfp.bgOverlay = _getEl('bg').on('click' + EVENT_NS, function () {
                    mfp.close();
                });

                mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click' + EVENT_NS, function (e) {
                    if (mfp._checkIfClose(e.target)) {
                        mfp.close();
                    }
                });

                mfp.container = _getEl('container', mfp.wrap);
            }

            mfp.contentContainer = _getEl('content');
            if (mfp.st.preloader) {
                mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
            }


            // Initializing modules
            var modules = $.magnificPopup.modules;
            for (i = 0; i < modules.length; i++) {
                var n = modules[i];
                n = n.charAt(0).toUpperCase() + n.slice(1);
                mfp['init' + n].call(mfp);
            }
            _mfpTrigger('BeforeOpen');


            if (mfp.st.showCloseBtn) {
                // Close button
                if (!mfp.st.closeBtnInside) {
                    mfp.wrap.append(_getCloseBtn());
                } else {
                    _mfpOn(MARKUP_PARSE_EVENT, function (e, template, values, item) {
                        values.close_replaceWith = _getCloseBtn(item.type);
                    });
                    _wrapClasses += ' mfp-close-btn-in';
                }
            }

            if (mfp.st.alignTop) {
                _wrapClasses += ' mfp-align-top';
            }



            if (mfp.fixedContentPos) {
                mfp.wrap.css({
                    overflow: mfp.st.overflowY,
                    overflowX: 'hidden',
                    overflowY: mfp.st.overflowY
                });
            } else {
                mfp.wrap.css({
                    top: _window.scrollTop(),
                    position: 'absolute'
                });
            }
            if (mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos)) {
                mfp.bgOverlay.css({
                    height: _document.height(),
                    position: 'absolute'
                });
            }



            if (mfp.st.enableEscapeKey) {
                // Close on ESC key
                _document.on('keyup' + EVENT_NS, function (e) {
                    if (e.keyCode === 27) {
                        mfp.close();
                    }
                });
            }

            _window.on('resize' + EVENT_NS, function () {
                mfp.updateSize();
            });


            if (!mfp.st.closeOnContentClick) {
                _wrapClasses += ' mfp-auto-cursor';
            }

            if (_wrapClasses)
                mfp.wrap.addClass(_wrapClasses);


            // this triggers recalculation of layout, so we get it once to not to trigger twice
            var windowHeight = mfp.wH = _window.height();


            var windowStyles = {};

            if (mfp.fixedContentPos) {
                if (mfp._hasScrollBar(windowHeight)) {
                    var s = mfp._getScrollbarSize();
                    if (s) {
                        windowStyles.marginRight = s;
                    }
                }
            }

            if (mfp.fixedContentPos) {
                if (!mfp.isIE7) {
                    windowStyles.overflow = 'hidden';
                } else {
                    // ie7 double-scroll bug
                    $('body, html').css('overflow', 'hidden');
                }
            }



            var classesToadd = mfp.st.mainClass;
            if (mfp.isIE7) {
                classesToadd += ' mfp-ie7';
            }
            if (classesToadd) {
                mfp._addClassToMFP(classesToadd);
            }

            // add content
            mfp.updateItemHTML();

            _mfpTrigger('BuildControls');

            // remove scrollbar, add margin e.t.c
            $('html').css(windowStyles);

            // add everything to DOM
            mfp.bgOverlay.add(mfp.wrap).prependTo(mfp.st.prependTo || $(document.body));

            // Save last focused element
            mfp._lastFocusedEl = document.activeElement;

            // Wait for next cycle to allow CSS transition
            setTimeout(function () {

                if (mfp.content) {
                    mfp._addClassToMFP(READY_CLASS);
                    mfp._setFocus();
                } else {
                    // if content is not defined (not loaded e.t.c) we add class only for BG
                    mfp.bgOverlay.addClass(READY_CLASS);
                }

                // Trap the focus in popup
                _document.on('focusin' + EVENT_NS, mfp._onFocusIn);

            }, 16);

            mfp.isOpen = true;
            mfp.updateSize(windowHeight);
            _mfpTrigger(OPEN_EVENT);

            return data;
        },

        /**
         * Closes the popup
         */
        close: function () {
            if (!mfp.isOpen) return;
            _mfpTrigger(BEFORE_CLOSE_EVENT);

            mfp.isOpen = false;
            // for CSS3 animation
            if (mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition) {
                mfp._addClassToMFP(REMOVING_CLASS);
                setTimeout(function () {
                    mfp._close();
                }, mfp.st.removalDelay);
            } else {
                mfp._close();
            }
        },

        /**
         * Helper for close() function
         */
        _close: function () {
            _mfpTrigger(CLOSE_EVENT);

            var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';

            mfp.bgOverlay.detach();
            mfp.wrap.detach();
            mfp.container.empty();

            if (mfp.st.mainClass) {
                classesToRemove += mfp.st.mainClass + ' ';
            }

            mfp._removeClassFromMFP(classesToRemove);

            if (mfp.fixedContentPos) {
                var windowStyles = { marginRight: '' };
                if (mfp.isIE7) {
                    $('body, html').css('overflow', '');
                } else {
                    windowStyles.overflow = '';
                }
                $('html').css(windowStyles);
            }

            _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
            mfp.ev.off(EVENT_NS);

            // clean up DOM elements that aren't removed
            mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
            mfp.bgOverlay.attr('class', 'mfp-bg');
            mfp.container.attr('class', 'mfp-container');

            // remove close button from target element
            if (mfp.st.showCloseBtn &&
            (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
                if (mfp.currTemplate.closeBtn)
                    mfp.currTemplate.closeBtn.detach();
            }


            if (mfp.st.autoFocusLast && mfp._lastFocusedEl) {
                $(mfp._lastFocusedEl).focus(); // put tab focus back
            }
            mfp.currItem = null;
            mfp.content = null;
            mfp.currTemplate = null;
            mfp.prevHeight = 0;

            _mfpTrigger(AFTER_CLOSE_EVENT);
        },

        updateSize: function (winHeight) {

            if (mfp.isIOS) {
                // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
                var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
                var height = window.innerHeight * zoomLevel;
                mfp.wrap.css('height', height);
                mfp.wH = height;
            } else {
                mfp.wH = winHeight || _window.height();
            }
            // Fixes #84: popup incorrectly positioned with position:relative on body
            if (!mfp.fixedContentPos) {
                mfp.wrap.css('height', mfp.wH);
            }

            _mfpTrigger('Resize');

        },

        /**
         * Set content of popup based on current index
         */
        updateItemHTML: function () {
            var item = mfp.items[mfp.index];

            // Detach and perform modifications
            mfp.contentContainer.detach();

            if (mfp.content)
                mfp.content.detach();

            if (!item.parsed) {
                item = mfp.parseEl(mfp.index);
            }

            var type = item.type;

            _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
            // BeforeChange event works like so:
            // _mfpOn('BeforeChange', function(e, prevType, newType) { });

            mfp.currItem = item;

            if (!mfp.currTemplate[type]) {
                var markup = mfp.st[type] ? mfp.st[type].markup : false;

                // allows to modify markup
                _mfpTrigger('FirstMarkupParse', markup);

                if (markup) {
                    mfp.currTemplate[type] = $(markup);
                } else {
                    // if there is no markup found we just define that template is parsed
                    mfp.currTemplate[type] = true;
                }
            }

            if (_prevContentType && _prevContentType !== item.type) {
                mfp.container.removeClass('mfp-' + _prevContentType + '-holder');
            }

            var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
            mfp.appendContent(newContent, type);

            item.preloaded = true;

            _mfpTrigger(CHANGE_EVENT, item);
            _prevContentType = item.type;

            // Append container back after its content changed
            mfp.container.prepend(mfp.contentContainer);

            _mfpTrigger('AfterChange');
        },


        /**
         * Set HTML content of popup
         */
        appendContent: function (newContent, type) {
            mfp.content = newContent;

            if (newContent) {
                if (mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
                    mfp.currTemplate[type] === true) {
                    // if there is no markup, we just append close button element inside
                    if (!mfp.content.find('.mfp-close').length) {
                        mfp.content.append(_getCloseBtn());
                    }
                } else {
                    mfp.content = newContent;
                }
            } else {
                mfp.content = '';
            }

            _mfpTrigger(BEFORE_APPEND_EVENT);
            mfp.container.addClass('mfp-' + type + '-holder');

            mfp.contentContainer.append(mfp.content);
        },


        /**
         * Creates Magnific Popup data object based on given data
         * @param  {int} index Index of item to parse
         */
        parseEl: function (index) {
            var item = mfp.items[index],
                type;

            if (item.tagName) {
                item = { el: $(item) };
            } else {
                type = item.type;
                item = { data: item, src: item.src };
            }

            if (item.el) {
                var types = mfp.types;

                // check for 'mfp-TYPE' class
                for (var i = 0; i < types.length; i++) {
                    if (item.el.hasClass('mfp-' + types[i])) {
                        type = types[i];
                        break;
                    }
                }

                item.src = item.el.attr('data-mfp-src');
                if (!item.src) {
                    item.src = item.el.attr('href');
                }
            }

            item.type = type || mfp.st.type || 'inline';
            item.index = index;
            item.parsed = true;
            mfp.items[index] = item;
            _mfpTrigger('ElementParse', item);

            return mfp.items[index];
        },


        /**
         * Initializes single popup or a group of popups
         */
        addGroup: function (el, options) {
            var eHandler = function (e) {
                e.mfpEl = this;
                mfp._openClick(e, el, options);
            };

            if (!options) {
                options = {};
            }

            var eName = 'click.magnificPopup';
            options.mainEl = el;

            if (options.items) {
                options.isObj = true;
                el.off(eName).on(eName, eHandler);
            } else {
                options.isObj = false;
                if (options.delegate) {
                    el.off(eName).on(eName, options.delegate, eHandler);
                } else {
                    options.items = el;
                    el.off(eName).on(eName, eHandler);
                }
            }
        },
        _openClick: function (e, el, options) {
            var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;


            if (!midClick && (e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey)) {
                return;
            }

            var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;

            if (disableOn) {
                if ($.isFunction(disableOn)) {
                    if (!disableOn.call(mfp)) {
                        return true;
                    }
                } else { // else it's number
                    if (_window.width() < disableOn) {
                        return true;
                    }
                }
            }

            if (e.type) {
                e.preventDefault();

                // This will prevent popup from closing if element is inside and popup is already opened
                if (mfp.isOpen) {
                    e.stopPropagation();
                }
            }

            options.el = $(e.mfpEl);
            if (options.delegate) {
                options.items = el.find(options.delegate);
            }
            mfp.open(options);
        },


        /**
         * Updates text on preloader
         */
        updateStatus: function (status, text) {

            if (mfp.preloader) {
                if (_prevStatus !== status) {
                    mfp.container.removeClass('mfp-s-' + _prevStatus);
                }

                if (!text && status === 'loading') {
                    text = mfp.st.tLoading;
                }
                 
                var data = {
                    status: status,
                    text: text
                };
                // allows to modify status
                _mfpTrigger('UpdateStatus', data);

                status = data.status;
                text = data.text;

                mfp.preloader.html(text);

                mfp.preloader.find('a').on('click', function (e) {
                    e.stopImmediatePropagation();
                });

                mfp.container.addClass('mfp-s-' + status);
                _prevStatus = status;
            }
        },


        /*
            "Private" helpers that aren't private at all
         */
        // Check to close popup or not
        // "target" is an element that was clicked
        _checkIfClose: function (target) {

            if ($(target).hasClass(PREVENT_CLOSE_CLASS)) {
                return;
            }

            var closeOnContent = mfp.st.closeOnContentClick;
            var closeOnBg = mfp.st.closeOnBgClick;

            if (closeOnContent && closeOnBg) {
                return true;
            } else {

                // We close the popup if click is on close button or on preloader. Or if there is no content.
                if (!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0])) {
                    return true;
                }

                // if click is outside the content
                if ((target !== mfp.content[0] && !$.contains(mfp.content[0], target))) {
                    if (closeOnBg) {
                        // last check, if the clicked element is in DOM, (in case it's removed onclick)
                        if ($.contains(document, target)) {
                            return true;
                        }
                    }
                } else if (closeOnContent) {
                    return true;
                }

            }
            return false;
        },
        _addClassToMFP: function (cName) {
            mfp.bgOverlay.addClass(cName);
            mfp.wrap.addClass(cName);
        },
        _removeClassFromMFP: function (cName) {
            this.bgOverlay.removeClass(cName);
            mfp.wrap.removeClass(cName);
        },
        _hasScrollBar: function (winHeight) {
            return ((mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()));
        },
        _setFocus: function () {
            (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
        },
        _onFocusIn: function (e) {
            if (e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target)) {
                mfp._setFocus();
                return false;
            }
        },
        _parseMarkup: function (template, values, item) {
            var arr;
            if (item.data) {
                values = $.extend(item.data, values);
            }
            _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item]);

            $.each(values, function (key, value) {
                if (value === undefined || value === false) {
                    return true;
                }
                arr = key.split('_');
                if (arr.length > 1) {
                    var el = template.find(EVENT_NS + '-' + arr[0]);

                    if (el.length > 0) {
                        var attr = arr[1];
                        if (attr === 'replaceWith') {
                            if (el[0] !== value[0]) {
                                el.replaceWith(value);
                            }
                        } else if (attr === 'img') {
                            if (el.is('img')) {
                                el.attr('src', value);
                            } else {
                                el.replaceWith($('<img>').attr('src', value).attr('class', el.attr('class')));
                            }
                        } else {
                            el.attr(arr[1], value);
                        }
                    }

                } else {
                    template.find(EVENT_NS + '-' + key).html(value);
                }
            });
        },

        _getScrollbarSize: function () {
            // thx David
            if (mfp.scrollbarSize === undefined) {
                var scrollDiv = document.createElement("div");
                scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
                document.body.appendChild(scrollDiv);
                mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
                document.body.removeChild(scrollDiv);
            }
            return mfp.scrollbarSize;
        }

    }; /* MagnificPopup core prototype end */




    /**
     * Public static functions
     */
    $.magnificPopup = {
        instance: null,
        proto: MagnificPopup.prototype,
        modules: [],

        open: function (options, index) {
            _checkInstance();

            if (!options) {
                options = {};
            } else {
                options = $.extend(true, {}, options);
            }

            options.isObj = true;
            options.index = index || 0;
            return this.instance.open(options);
        },

        close: function () {
            return $.magnificPopup.instance && $.magnificPopup.instance.close();
        },

        registerModule: function (name, module) {
            if (module.options) {
                $.magnificPopup.defaults[name] = module.options;
            }
            $.extend(this.proto, module.proto);
            this.modules.push(name);
        },

        defaults: {

            // Info about options is in docs:
            // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options

            disableOn: 0,

            key: null,

            midClick: false,

            mainClass: '',

            preloader: true,

            focus: '', // CSS selector of input to focus after popup is opened

            closeOnContentClick: false,

            closeOnBgClick: true,

            closeBtnInside: true,

            showCloseBtn: true,

            enableEscapeKey: true,

            modal: false,

            alignTop: false,

            removalDelay: 0,

            prependTo: null,

            fixedContentPos: 'auto',

            fixedBgPos: 'auto',

            overflowY: 'auto',

            closeMarkup: '<button title="%title%" type="button" class="mfp-close">&#215;</button>',

            tClose: 'Close (Esc)',

            tLoading: 'Loading...',

            autoFocusLast: true

        }
    };



    $.fn.magnificPopup = function (options) {
        _checkInstance();

        var jqEl = $(this);

        // We call some API method of first param is a string
        if (typeof options === "string") {

            if (options === 'open') {
                var items,
                    itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
                    index = parseInt(arguments[1], 10) || 0;

                if (itemOpts.items) {
                    items = itemOpts.items[index];
                } else {
                    items = jqEl;
                    if (itemOpts.delegate) {
                        items = items.find(itemOpts.delegate);
                    }
                    items = items.eq(index);
                }
                mfp._openClick({ mfpEl: items }, jqEl, itemOpts);
            } else {
                if (mfp.isOpen)
                    mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
            }

        } else {
            // clone options obj
            options = $.extend(true, {}, options);

            /*
             * As Zepto doesn't support .data() method for objects
             * and it works only in normal browsers
             * we assign "options" object directly to the DOM element. FTW!
             */
            if (_isJQ) {
                jqEl.data('magnificPopup', options);
            } else {
                jqEl[0].magnificPopup = options;
            }

            mfp.addGroup(jqEl, options);

        }
        return jqEl;
    };

    /*>>core*/

    /*>>inline*/

    var INLINE_NS = 'inline',
        _hiddenClass,
        _inlinePlaceholder,
        _lastInlineElement,
        _putInlineElementsBack = function () {
            if (_lastInlineElement) {
                _inlinePlaceholder.after(_lastInlineElement.addClass(_hiddenClass)).detach();
                _lastInlineElement = null;
            }
        };

    $.magnificPopup.registerModule(INLINE_NS, {
        options: {
            hiddenClass: 'hide', // will be appended with `mfp-` prefix
            markup: '',
            tNotFound: 'Content not found'
        },
        proto: {

            initInline: function () {
                mfp.types.push(INLINE_NS);

                _mfpOn(CLOSE_EVENT + '.' + INLINE_NS, function () {
                    _putInlineElementsBack();
                });
            },

            getInline: function (item, template) {

                _putInlineElementsBack();

                if (item.src) {
                    var inlineSt = mfp.st.inline,
                        el = $(item.src);

                    if (el.length) {

                        // If target element has parent - we replace it with placeholder and put it back after popup is closed
                        var parent = el[0].parentNode;
                        if (parent && parent.tagName) {
                            if (!_inlinePlaceholder) {
                                _hiddenClass = inlineSt.hiddenClass;
                                _inlinePlaceholder = _getEl(_hiddenClass);
                                _hiddenClass = 'mfp-' + _hiddenClass;
                            }
                            // replace target inline element with placeholder
                            _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
                        }

                        mfp.updateStatus('ready');
                    } else {
                        mfp.updateStatus('error', inlineSt.tNotFound);
                        el = $('<div>');
                    }

                    item.inlineElement = el;
                    return el;
                }

                mfp.updateStatus('ready');
                mfp._parseMarkup(template, {}, item);
                return template;
            }
        }
    });

    /*>>inline*/

    /*>>ajax*/
    var AJAX_NS = 'ajax',
        _ajaxCur,
        _removeAjaxCursor = function () {
            if (_ajaxCur) {
                $(document.body).removeClass(_ajaxCur);
            }
        },
        _destroyAjaxRequest = function () {
            _removeAjaxCursor();
            if (mfp.req) {
                mfp.req.abort();
            }
        };

    $.magnificPopup.registerModule(AJAX_NS, {

        options: {
            settings: null,
            cursor: 'mfp-ajax-cur',
            tError: '<a href="%url%">The content</a> could not be loaded.'
        },

        proto: {
            initAjax: function () {
                mfp.types.push(AJAX_NS);
                _ajaxCur = mfp.st.ajax.cursor;

                _mfpOn(CLOSE_EVENT + '.' + AJAX_NS, _destroyAjaxRequest);
                _mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);
            },
            getAjax: function (item) {

                if (_ajaxCur) {
                    $(document.body).addClass(_ajaxCur);
                }

                mfp.updateStatus('loading');

                var opts = $.extend({
                    url: item.src,
                    success: function (data, textStatus, jqXHR) {
                        var temp = {
                            data: data,
                            xhr: jqXHR
                        };

                        _mfpTrigger('ParseAjax', temp);

                        mfp.appendContent($(temp.data), AJAX_NS);

                        item.finished = true;

                        _removeAjaxCursor();

                        mfp._setFocus();

                        setTimeout(function () {
                            mfp.wrap.addClass(READY_CLASS);
                        }, 16);

                        mfp.updateStatus('ready');

                        _mfpTrigger('AjaxContentAdded');
                    },
                    error: function () {
                        _removeAjaxCursor();
                        item.finished = item.loadError = true;
                        mfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));
                    }
                }, mfp.st.ajax.settings);

                mfp.req = $.ajax(opts);

                return '';
            }
        }
    });

    /*>>ajax*/

    /*>>image*/
    var _imgInterval,
        _getTitle = function (item) {
            if (item.data && item.data.title !== undefined)
                return item.data.title;

            var src = mfp.st.image.titleSrc;

            if (src) {
                if ($.isFunction(src)) {
                    return src.call(mfp, item);
                } else if (item.el) {
                    return item.el.attr(src) || '';
                }
            }
            return '';
        };

    $.magnificPopup.registerModule('image', {

        options: {
            markup: '<div class="mfp-figure">' +
                        '<div class="mfp-close"></div>' +
                        '<figure>' +
                            '<div class="mfp-img"></div>' +
                            '<figcaption>' +
                                '<div class="mfp-bottom-bar">' +
                                    '<div class="mfp-title"></div>' +
                                    '<div class="mfp-counter"></div>' +
                                '</div>' +
                            '</figcaption>' +
                        '</figure>' +
                    '</div>',
            cursor: 'mfp-zoom-out-cur',
            titleSrc: 'title',
            verticalFit: true,
            tError: '<a href="%url%">The image</a> could not be loaded.'
        },

        proto: {
            initImage: function () {
                var imgSt = mfp.st.image,
                    ns = '.image';

                mfp.types.push('image');

                _mfpOn(OPEN_EVENT + ns, function () {
                    if (mfp.currItem.type === 'image' && imgSt.cursor) {
                        $(document.body).addClass(imgSt.cursor);
                    }
                });

                _mfpOn(CLOSE_EVENT + ns, function () {
                    if (imgSt.cursor) {
                        $(document.body).removeClass(imgSt.cursor);
                    }
                    _window.off('resize' + EVENT_NS);
                });

                _mfpOn('Resize' + ns, mfp.resizeImage);
                if (mfp.isLowIE) {
                    _mfpOn('AfterChange', mfp.resizeImage);
                }
            },
            resizeImage: function () {
                var item = mfp.currItem;
                if (!item || !item.img) return;

                if (mfp.st.image.verticalFit) {
                    var decr = 0;
                    // fix box-sizing in ie7/8
                    if (mfp.isLowIE) {
                        decr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'), 10);
                    }
                    item.img.css('max-height', mfp.wH - decr);
                }
            },
            _onImageHasSize: function (item) {
                if (item.img) {

                    item.hasSize = true;

                    if (_imgInterval) {
                        clearInterval(_imgInterval);
                    }

                    item.isCheckingImgSize = false;

                    _mfpTrigger('ImageHasSize', item);

                    if (item.imgHidden) {
                        if (mfp.content)
                            mfp.content.removeClass('mfp-loading');

                        item.imgHidden = false;
                    }

                }
            },

            /**
             * Function that loops until the image has size to display elements that rely on it asap
             */
            findImageSize: function (item) {

                var counter = 0,
                    img = item.img[0],
                    mfpSetInterval = function (delay) {

                        if (_imgInterval) {
                            clearInterval(_imgInterval);
                        }
                        // decelerating interval that checks for size of an image
                        _imgInterval = setInterval(function () {
                            if (img.naturalWidth > 0) {
                                mfp._onImageHasSize(item);
                                return;
                            }

                            if (counter > 200) {
                                clearInterval(_imgInterval);
                            }

                            counter++;
                            if (counter === 3) {
                                mfpSetInterval(10);
                            } else if (counter === 40) {
                                mfpSetInterval(50);
                            } else if (counter === 100) {
                                mfpSetInterval(500);
                            }
                        }, delay);
                    };

                mfpSetInterval(1);
            },

            getImage: function (item, template) {

                var guard = 0,

                    // image load complete handler
                    onLoadComplete = function () {
                        if (item) {
                            if (item.img[0].complete) {
                                item.img.off('.mfploader');

                                if (item === mfp.currItem) {
                                    mfp._onImageHasSize(item);

                                    mfp.updateStatus('ready');
                                }

                                item.hasSize = true;
                                item.loaded = true;

                                _mfpTrigger('ImageLoadComplete');

                            }
                            else {
                                // if image complete check fails 200 times (20 sec), we assume that there was an error.
                                guard++;
                                if (guard < 200) {
                                    setTimeout(onLoadComplete, 100);
                                } else {
                                    onLoadError();
                                }
                            }
                        }
                    },

                    // image error handler
                    onLoadError = function () {
                        if (item) {
                            item.img.off('.mfploader');
                            if (item === mfp.currItem) {
                                mfp._onImageHasSize(item);
                                mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src));
                            }

                            item.hasSize = true;
                            item.loaded = true;
                            item.loadError = true;
                        }
                    },
                    imgSt = mfp.st.image;


                var el = template.find('.mfp-img');
                if (el.length) {
                    var img = document.createElement('img');
                    img.className = 'mfp-img';
                    if (item.el && item.el.find('img').length) {
                        img.alt = item.el.find('img').attr('alt');
                    }
                    item.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);
                    img.src = item.src;

                    // without clone() "error" event is not firing when IMG is replaced by new IMG
                    // TODO: find a way to avoid such cloning
                    if (el.is('img')) {
                        item.img = item.img.clone();
                    }

                    img = item.img[0];
                    if (img.naturalWidth > 0) {
                        item.hasSize = true;
                    } else if (!img.width) {
                        item.hasSize = false;
                    }
                }

                mfp._parseMarkup(template, {
                    title: _getTitle(item),
                    img_replaceWith: item.img
                }, item);

                mfp.resizeImage();

                if (item.hasSize) {
                    if (_imgInterval) clearInterval(_imgInterval);

                    if (item.loadError) {
                        template.addClass('mfp-loading');
                        mfp.updateStatus('error', imgSt.tError.replace('%url%', item.src));
                    } else {
                        template.removeClass('mfp-loading');
                        mfp.updateStatus('ready');
                    }
                    return template;
                }

                mfp.updateStatus('loading');
                item.loading = true;

                if (!item.hasSize) {
                    item.imgHidden = true;
                    template.addClass('mfp-loading');
                    mfp.findImageSize(item);
                }

                return template;
            }
        }
    });

    /*>>image*/

    /*>>zoom*/
    var hasMozTransform,
        getHasMozTransform = function () {
            if (hasMozTransform === undefined) {
                hasMozTransform = document.createElement('p').style.MozTransform !== undefined;
            }
            return hasMozTransform;
        };

    $.magnificPopup.registerModule('zoom', {

        options: {
            enabled: false,
            easing: 'ease-in-out',
            duration: 300,
            opener: function (element) {
                return element.is('img') ? element : element.find('img');
            }
        },

        proto: {

            initZoom: function () {
                var zoomSt = mfp.st.zoom,
                    ns = '.zoom',
                    image;

                if (!zoomSt.enabled || !mfp.supportsTransition) {
                    return;
                }

                var duration = zoomSt.duration,
                    getElToAnimate = function (image) {
                        var newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),
                            transition = 'all ' + (zoomSt.duration / 1000) + 's ' + zoomSt.easing,
                            cssObj = {
                                position: 'fixed',
                                zIndex: 9999,
                                left: 0,
                                top: 0,
                                '-webkit-backface-visibility': 'hidden'
                            },
                            t = 'transition';

                        cssObj['-webkit-' + t] = cssObj['-moz-' + t] = cssObj['-o-' + t] = cssObj[t] = transition;

                        newImg.css(cssObj);
                        return newImg;
                    },
                    showMainContent = function () {
                        mfp.content.css('visibility', 'visible');
                    },
                    openTimeout,
                    animatedImg;

                _mfpOn('BuildControls' + ns, function () {
                    if (mfp._allowZoom()) {

                        clearTimeout(openTimeout);
                        mfp.content.css('visibility', 'hidden');

                        // Basically, all code below does is clones existing image, puts in on top of the current one and animated it

                        image = mfp._getItemToZoom();

                        if (!image) {
                            showMainContent();
                            return;
                        }

                        animatedImg = getElToAnimate(image);

                        animatedImg.css(mfp._getOffset());

                        mfp.wrap.append(animatedImg);

                        openTimeout = setTimeout(function () {
                            animatedImg.css(mfp._getOffset(true));
                            openTimeout = setTimeout(function () {

                                showMainContent();

                                setTimeout(function () {
                                    animatedImg.remove();
                                    image = animatedImg = null;
                                    _mfpTrigger('ZoomAnimationEnded');
                                }, 16); // avoid blink when switching images

                            }, duration); // this timeout equals animation duration

                        }, 16); // by adding this timeout we avoid short glitch at the beginning of animation


                        // Lots of timeouts...
                    }
                });
                _mfpOn(BEFORE_CLOSE_EVENT + ns, function () {
                    if (mfp._allowZoom()) {

                        clearTimeout(openTimeout);

                        mfp.st.removalDelay = duration;

                        if (!image) {
                            image = mfp._getItemToZoom();
                            if (!image) {
                                return;
                            }
                            animatedImg = getElToAnimate(image);
                        }

                        animatedImg.css(mfp._getOffset(true));
                        mfp.wrap.append(animatedImg);
                        mfp.content.css('visibility', 'hidden');

                        setTimeout(function () {
                            animatedImg.css(mfp._getOffset());
                        }, 16);
                    }

                });

                _mfpOn(CLOSE_EVENT + ns, function () {
                    if (mfp._allowZoom()) {
                        showMainContent();
                        if (animatedImg) {
                            animatedImg.remove();
                        }
                        image = null;
                    }
                });
            },

            _allowZoom: function () {
                return mfp.currItem.type === 'image';
            },

            _getItemToZoom: function () {
                if (mfp.currItem.hasSize) {
                    return mfp.currItem.img;
                } else {
                    return false;
                }
            },

            // Get element postion relative to viewport
            _getOffset: function (isLarge) {
                var el;
                if (isLarge) {
                    el = mfp.currItem.img;
                } else {
                    el = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);
                }

                var offset = el.offset();
                var paddingTop = parseInt(el.css('padding-top'), 10);
                var paddingBottom = parseInt(el.css('padding-bottom'), 10);
                offset.top -= ($(window).scrollTop() - paddingTop);


                /*
    
                Animating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.
    
                 */
                var obj = {
                    width: el.width(),
                    // fix Zepto height+padding issue
                    height: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop
                };

                // I hate to do this, but there is no another option
                if (getHasMozTransform()) {
                    obj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';
                } else {
                    obj.left = offset.left;
                    obj.top = offset.top;
                }
                return obj;
            }

        }
    });



    /*>>zoom*/

    /*>>iframe*/

    var IFRAME_NS = 'iframe',
        _emptyPage = '//about:blank',

        _fixIframeBugs = function (isShowing) {
            if (mfp.currTemplate[IFRAME_NS]) {
                var el = mfp.currTemplate[IFRAME_NS].find('iframe');
                if (el.length) {
                    // reset src after the popup is closed to avoid "video keeps playing after popup is closed" bug
                    if (!isShowing) {
                        el[0].src = _emptyPage;
                    }

                    // IE8 black screen bug fix
                    if (mfp.isIE8) {
                        el.css('display', isShowing ? 'block' : 'none');
                    }
                }
            }
        };

    $.magnificPopup.registerModule(IFRAME_NS, {

        options: {
            markup: '<div class="mfp-iframe-scaler">' +
                        '<div class="mfp-close"></div>' +
                        '<iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe>' +
                    '</div>',

            srcAction: 'iframe_src',

            // we don't care and support only one default type of URL by default
            patterns: {
                youtube: {
                    index: 'youtube.com',
                    id: 'v=',
                    src: '//www.youtube.com/embed/%id%?autoplay=1'
                },
                vimeo: {
                    index: 'vimeo.com/',
                    id: '/',
                    src: '//player.vimeo.com/video/%id%?autoplay=1'
                },
                gmaps: {
                    index: '//maps.google.',
                    src: '%id%&output=embed'
                }
            }
        },

        proto: {
            initIframe: function () {
                mfp.types.push(IFRAME_NS);

                _mfpOn('BeforeChange', function (e, prevType, newType) {
                    if (prevType !== newType) {
                        if (prevType === IFRAME_NS) {
                            _fixIframeBugs(); // iframe if removed
                        } else if (newType === IFRAME_NS) {
                            _fixIframeBugs(true); // iframe is showing
                        }
                    }// else {
                    // iframe source is switched, don't do anything
                    //}
                });

                _mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function () {
                    _fixIframeBugs();
                });
            },

            getIframe: function (item, template) {
                var embedSrc = item.src;
                var iframeSt = mfp.st.iframe;

                $.each(iframeSt.patterns, function () {
                    if (embedSrc.indexOf(this.index) > -1) {
                        if (this.id) {
                            if (typeof this.id === 'string') {
                                embedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id) + this.id.length, embedSrc.length);
                            } else {
                                embedSrc = this.id.call(this, embedSrc);
                            }
                        }
                        embedSrc = this.src.replace('%id%', embedSrc);
                        return false; // break;
                    }
                });

                var dataObj = {};
                if (iframeSt.srcAction) {
                    dataObj[iframeSt.srcAction] = embedSrc;
                }
                mfp._parseMarkup(template, dataObj, item);

                mfp.updateStatus('ready');

                return template;
            }
        }
    });



    /*>>iframe*/

    /*>>gallery*/
    /**
     * Get looped index depending on number of slides
     */
    var _getLoopedId = function (index) {
        var numSlides = mfp.items.length;
        if (index > numSlides - 1) {
            return index - numSlides;
        } else if (index < 0) {
            return numSlides + index;
        }
        return index;
    },
        _replaceCurrTotal = function (text, curr, total) {
            return text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);
        };

    $.magnificPopup.registerModule('gallery', {

        options: {
            enabled: false,
            arrowMarkup: '<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',
            preload: [0, 2],
            navigateByImgClick: true,
            arrows: true,

            tPrev: 'Previous (Left arrow key)',
            tNext: 'Next (Right arrow key)',
            tCounter: '%curr% of %total%'
        },

        proto: {
            initGallery: function () {

                var gSt = mfp.st.gallery,
                    ns = '.mfp-gallery';

                mfp.direction = true; // true - next, false - prev

                if (!gSt || !gSt.enabled) return false;

                _wrapClasses += ' mfp-gallery';

                _mfpOn(OPEN_EVENT + ns, function () {

                    if (gSt.navigateByImgClick) {
                        mfp.wrap.on('click' + ns, '.mfp-img', function () {
                            if (mfp.items.length > 1) {
                                mfp.next();
                                return false;
                            }
                        });
                    }

                    _document.on('keydown' + ns, function (e) {
                        if (e.keyCode === 37) {
                            mfp.prev();
                        } else if (e.keyCode === 39) {
                            mfp.next();
                        }
                    });
                });

                _mfpOn('UpdateStatus' + ns, function (e, data) {
                    if (data.text) {
                        data.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);
                    }
                });

                _mfpOn(MARKUP_PARSE_EVENT + ns, function (e, element, values, item) {
                    var l = mfp.items.length;
                    values.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';
                });

                _mfpOn('BuildControls' + ns, function () {
                    if (mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {
                        var markup = gSt.arrowMarkup,
                            arrowLeft = mfp.arrowLeft = $(markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left')).addClass(PREVENT_CLOSE_CLASS),
                            arrowRight = mfp.arrowRight = $(markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right')).addClass(PREVENT_CLOSE_CLASS);

                        arrowLeft.click(function () {
                            mfp.prev();
                        });
                        arrowRight.click(function () {
                            mfp.next();
                        });

                        mfp.container.append(arrowLeft.add(arrowRight));
                    }
                });

                _mfpOn(CHANGE_EVENT + ns, function () {
                    if (mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);

                    mfp._preloadTimeout = setTimeout(function () {
                        mfp.preloadNearbyImages();
                        mfp._preloadTimeout = null;
                    }, 16);
                });


                _mfpOn(CLOSE_EVENT + ns, function () {
                    _document.off(ns);
                    mfp.wrap.off('click' + ns);
                    mfp.arrowRight = mfp.arrowLeft = null;
                });

            },
            next: function () {
                mfp.direction = true;
                mfp.index = _getLoopedId(mfp.index + 1);
                mfp.updateItemHTML();
            },
            prev: function () {
                mfp.direction = false;
                mfp.index = _getLoopedId(mfp.index - 1);
                mfp.updateItemHTML();
            },
            goTo: function (newIndex) {
                mfp.direction = (newIndex >= mfp.index);
                mfp.index = newIndex;
                mfp.updateItemHTML();
            },
            preloadNearbyImages: function () {
                var p = mfp.st.gallery.preload,
                    preloadBefore = Math.min(p[0], mfp.items.length),
                    preloadAfter = Math.min(p[1], mfp.items.length),
                    i;

                for (i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore) ; i++) {
                    mfp._preloadItem(mfp.index + i);
                }
                for (i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter) ; i++) {
                    mfp._preloadItem(mfp.index - i);
                }
            },
            _preloadItem: function (index) {
                index = _getLoopedId(index);

                if (mfp.items[index].preloaded) {
                    return;
                }

                var item = mfp.items[index];
                if (!item.parsed) {
                    item = mfp.parseEl(index);
                }

                _mfpTrigger('LazyLoad', item);

                if (item.type === 'image') {
                    item.img = $('<img class="mfp-img" />').on('load.mfploader', function () {
                        item.hasSize = true;
                    }).on('error.mfploader', function () {
                        item.hasSize = true;
                        item.loadError = true;
                        _mfpTrigger('LazyLoadError', item);
                    }).attr('src', item.src);
                }


                item.preloaded = true;
            }
        }
    });

    /*>>gallery*/

    /*>>retina*/

    var RETINA_NS = 'retina';

    $.magnificPopup.registerModule(RETINA_NS, {
        options: {
            replaceSrc: function (item) {
                return item.src.replace(/\.\w+$/, function (m) { return '@2x' + m; });
            },
            ratio: 1 // Function or number.  Set to 1 to disable.
        },
        proto: {
            initRetina: function () {
                if (window.devicePixelRatio > 1) {

                    var st = mfp.st.retina,
                        ratio = st.ratio;

                    ratio = !isNaN(ratio) ? ratio : ratio();

                    if (ratio > 1) {
                        _mfpOn('ImageHasSize' + '.' + RETINA_NS, function (e, item) {
                            item.img.css({
                                'max-width': item.img[0].naturalWidth / ratio,
                                'width': '100%'
                            });
                        });
                        _mfpOn('ElementParse' + '.' + RETINA_NS, function (e, item) {
                            item.src = st.replaceSrc(item, ratio);
                        });
                    }
                }

            }
        }
    });

    /*>>retina*/
    _checkInstance();
}));;
function StoreRibbonsInCookie(theRibbons) {
    var length = theRibbons.length;
    var ribbonList = [];

    for (var i = 0; i < length; i++) {
        var dataItem = theRibbons[i];

        var newsAlert = {
            LastModified: dataItem.LastModified,
            RibbonID: dataItem.RibbonID,
        }
        ribbonList.push(newsAlert);
    }
    $.cookie('ribbonCookie', JSON.stringify(ribbonList), { path: '/;SameSite=Lax', secure: true });
}

function HeaderScroll(scrolled) {
    var $banner = $('[role=banner]');
    var $body = $('body');
    if (window.matchMedia('(min-width: 750px)').matches) {
        var oritop = -100;
        var scrollt = window.scrollY;
        var height = $banner.outerHeight();

        //if iPhone remove added margin
        if (navigator.platform.indexOf('iPhone') != -1 ||
            navigator.platform.indexOf('iPod') != -1) {
            $body.removeClass('marginTop-none');
        }

        if (oritop < 0) {
            oritop = $banner.offset().top;
        }

        var $datepickerDiv = $('#ui-datepicker-div');
        if (scrollt > 0 && scrollt >= oritop) {
            $body.css('margin-top', height + 'px');
            if (!$banner.hasClass('is-fixed')) {
                $banner.addClass('is-fixed');
            }

            if (scrolled && $datepickerDiv.is(':visible')) {
                if ($datepickerDiv.attr('data-header-fixed') === 'true') {
                    $datepickerDiv.css('margin-top', '');
                } else {
                    $datepickerDiv.css('margin-top', -height + 'px');
                }
            }
        } else {
            $body.css('margin-top', '0');
            if ($banner.hasClass('is-fixed')) {
                $banner.removeClass('is-fixed');
            }

            if (scrolled && $datepickerDiv.is(':visible')) {
                if ($datepickerDiv.attr('data-header-fixed') === 'true') {
                    $datepickerDiv.css('margin-top', height + 'px');
                } else {
                    $datepickerDiv.css('margin-top', '');
                }
            }
        }
    } else {
        $banner.removeClass('is-fixed');
        $body.css('margin-top', '0');
    }
}

function removeFlight() {
    $.removeCookie('userSavedFlight', { path: '/;SameSite=Lax', secure: true });
    $('.header-flight').removeClass('fadeInUp');
    $('.header-flight').addClass('animated slideOutRight');
    $('.toggle').fadeIn();
    $('.buttonHtml').html('<a class="btn flightSave" onclick="saveFlight();">Save Flight <i class="fa fa-angle-right"></i></a>');
    $('.saveflight').html('Save flight <i class="fa fa-angle-right"></i>');
    $('.flightSave').html('Save Flight <i class="fa fa-angle-right"></i>');
    $('.header-flight-placeholder').delay(600).animate({ height: '0px' },
        function() {
            $('.header-flight-placeholder').hide();
            $('.header-flight-placeholder').css('height', '');
            $('.header-flight').removeClass('animated slideOutRight');
        });
}

function removeABFlight() {
    $.removeCookie('userSavedFlight', { path: '/;SameSite=Lax', secure: true });
    $('.ab-header-flight').removeClass('fadeInUp');
    $('.ab-header-flight').addClass('animated slideOutRight');
    $('.toggle').fadeIn();
    $('.buttonHtml').html('<a class="btn flightSave" onclick="saveFlight();">Save Flight</a>');
    $('.saveflight').html('Save flight');
    $('.ab-flightSave').removeClass('active');
    $('.ab-flightSave').html('Save Flight');
    $('.ab-header-flight-placeholder').delay(600).animate({ height: '0px' },
        function () {
            $('.ab-header-flight-placeholder').hide();
            $('.ab-header-flight-placeholder').css('height', '');
            $('.ab-header-flight').removeClass('animated slideOutRight');
        });
}

function ShowFlightSavedMessage() {
    if ($(window).width() <= 550) {
        notif({
            msg: 'Flight Information is pinned &#9650;',
            type: 'info',
            position: 'center',
            timeout: 3000,
        });
    }
}

function StickyFooter() {
    var form = $('.site-wrapper');
    var footer = $('.site-footer');

    if (form.height() < document.body.offsetHeight) {
        footer.addClass('sticky-footer');
    } else {
        footer.removeClass('sticky-footer');
    }
}

$(document).on('click', function () {
    $('#ui_notifIt').on('click', function() {
        document.body.scrollTop = document.documentElement.scrollTop = 0;
    });
});

function WizardScroll(elementClass, additionalOffSet) {
    var $el = $(elementClass);
    if ($el.length > 0) {
        if ($(window).width() <= 550) {
            $('html,body').animate({
                scrollTop: $(elementClass).offset().top - additionalOffSet
            }, 1200);
        } else {
            var height = $('header').height();
            $('html,body').animate({
                scrollTop: $(elementClass).offset().top - (height + additionalOffSet)
            }, 1200);
        }
    }
}

function FlightSearchDropdownHeightSet() {
    var parkingRibbon = $('.parking-ribbon:not(.no-flight-search)');

    if (parkingRibbon.length) {
        var heightDifference = $('.parking-ribbon').offset().top - $('.flight-search--field input').offset().top;
        $('.flight-search .results').css('max-height', heightDifference + 43);
    }
}

var bannerImageUrl = '';
var corporateHeaderUrl = '';
var videoBannerExists;
var windowWidth;

$(window).on('resize orientationchange load', function () {
    if (videoBannerExists) {
        if ($(window).width() > 1150) {
            $('.banner-holder').css('background-image', '');
            $('.corporate-headerwrapper').css('background-image', '');
        } else {
            $('.banner-holder').css('background-image', bannerImageUrl);
            $('.corporate-headerwrapper').css('background-image', corporateHeaderUrl);
        }
    }
    $('.home--banner').removeClass('invisible');
    FlightSearchDropdownHeightSet();

    if (windowWidth !== window.innerWidth) {
	    salvattore.rescanMediaQueries();
	    windowWidth = window.innerWidth;
    }
});

function resizedw() {
    FlightSearchDropdownHeightSet();
}

$(window).on('scroll', function () {
    FlightSearchDropdownHeightSet();
});

$(document).ready(function () {
    var doit;
    equalHeightTestimonials(false);
    equalHeightExecBoxes(false);

    window.onresize = function () {
        clearTimeout(doit);
        doit = setTimeout(resizedw, 100);
        equalHeightTestimonials(true);
        equalHeightExecBoxes(true);
    };

    FlightSearchDropdownHeightSet();

    videoBannerExists = $('.video-banner').length;

    // hacky device detection
    if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
        || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0, 4))) {
        if (videoBannerExists) {
            $('.video-banner').hide();
        }
    }

    if (videoBannerExists) {
        bannerImageUrl = $('.banner-holder').css('background-image');
        corporateHeaderUrl = $('.corporate-headerwrapper').css('background-image');
        $('.banner-holder').css('background-image', '');
        $('.corporate-headerwrapper').css('background-image', '');
    }

    $('.fa-angle-up, .fa-angle-down').on('click', function() {
        $(this).next('input').focus();
    });
    
    var form = $('.site-wrapper');

    if (form.height() < document.body.offsetHeight) {
        var footer = $('.site-footer');
        footer.addClass('sticky-footer');
    }

    //Remove border on hover but ensures the page doesn't move
    $('.card--actions a, .news-list a').hover(function () {
        $(this).closest('.borderbtm').css('border-bottom', '1px solid transparent');
    }, function () {
        $(this).closest('.borderbtm').css('border-bottom', '1px solid rgba(0,0,0,.1)');
    });

    //adding class' on cards external links for tag manager
    $('.card--actions a[href*="http://"]').each(function () {
        $(this).addClass('gaExternalLink');
    });

    //anchor fix to the correct position
    $('a[href*="#"]').each(function () {
        var $this = $(this);
        if (!$this.hasClass('noscrollfix') && !$("body").hasClass("design-b")) {
            $this.addClass('addheadpadding');
        }
    });

    $('.addheadpadding').on('click', function () {
        $('body,html').animate({ top: '250' });
    });

    $('img:not([src]):not([data-src]), img[src=""]:not([data-src])').hide();

    $('#expand').on('click', function () {
        $('.flight-card--journey').animate({ height: '320' });
    });

    $('.header-alert--close').on('click', function () {
        $('.header-alert:not(.cookie-bar)').animate({ height: '0px', padding: '0px' }, function _afterAnimation() {
            $('.header-alert:not(.cookie-bar)').remove();
            $.cookie('showRibbonCookie', 'false', { path: '/;SameSite=Lax', secure: true});
        });
    });

    $('.cookie-bar--close').on('click', function () {
        $('.cookie-bar').animate({ height: '0px', padding: '0px' }, function _afterAnimation() {
            $('.cookie-bar').remove();
            $.cookie('showCookieBarCookie', 'false', { expires: 365, path: '/;SameSite=Lax', secure: true });
        });
    });

    $('.flights ul.flight-tabs li').on('click', function () {
        var tab_id = $(this).attr('data-tab');

        $('.flights ul.flight-tabs li').removeClass('current');
        $('.flights .flight-tab--content').removeClass('current');

        $(this).addClass('current');
        $('.flights #' + tab_id).addClass('current');
    });
});

$(document).on('click', function () {
    HeaderScroll(false);
    StickyFooter();
});

$(window).on('scroll', function () {
    HeaderScroll(true);
    $('body,html').css('top', '0px');
    StickyFooter();
});

$(window).on('load', function () {
    HeaderScroll(false);
    StickyFooter();
    ABTestScripts();
});

function ABTestScripts() {
    // Homepage version 1
    if ($(".homepage-a").length) {
        
    }
}

function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

$(function () {
    $('.faq-accordian__qna__question').on('click', function () {
        $(this).toggleClass('active');
        $(this).siblings('.faq-accordian__qna__answer').slideToggle();
    });

    $('.twentytwenty-container').twentytwenty();
});

function equalHeightExecBoxes(isResize) {
    var items = $('.execlounge-grid').find('.execlounge-grid--item');

    var maxHeight = 0;
    items.each(function () {
        if (isResize)
            $(this).css('min-height', 'initial');
        maxHeight = maxHeight > $(this).height() ? maxHeight : $(this).height();
    });

    items.each(function () {
        $(this).css('min-height', maxHeight + (parseInt($(this).css('padding')) * 2));
    });
}
 

function equalHeightTestimonials(isResize) {
    var cards = $('.match-height--cards').find('.card .card--content');
    var authors = $('.match-height--cards').find('.card .card--content_author');
    
    var maxHeight = 0;
    var authorMaxHeight = 0;

    cards.each(function () {
        if (isResize)
            $(this).css('min-height', 'initial');
        maxHeight = maxHeight > $(this).height() ? maxHeight : $(this).height();
    });

    authors.each(function () {
        if (isResize)
            $(this).css('min-height', 'initial');
        authorMaxHeight = authorMaxHeight > $(this).height() ? authorMaxHeight : $(this).height();
    });

    cards.each(function () {
        $(this).css('min-height', maxHeight + (parseInt($(this).css('padding')) * 2));
    });

    authors.each(function () {
        $(this).css('min-height', authorMaxHeight + (parseInt($(this).css('padding')) * 2));
    });
}

function postForm(path, params, method) {
    method = typeof method === 'undefined' ? 'post' : method;

    const form = document.createElement('form');
    form.method = method;
    form.action = path;

    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            const hiddenField = document.createElement('input');
            hiddenField.type = 'hidden';
            hiddenField.name = key;
            hiddenField.value = params[key];

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

$.ajax({
    url: '/WebServices/EmergencyRibbons.asmx/GetEmergencyRibbon',
    type: 'GET',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',

    success: function (data) {
        if (data.d != null) {
            if (data.d.length > 0) {
                startLoop(data.d);

                var setRibbonCookieValue = $.cookie('ribbonCookie');
                var showRibbonCookie = $.cookie('showRibbonCookie');
                var length = data.d.length;

                if (setRibbonCookieValue === undefined || showRibbonCookie == undefined) {
                    $('.header-alert:not(.cookie-bar)').show();
                    StoreRibbonsInCookie(data.d);
                    $.cookie('showRibbonCookie', 'true', { path: '/;SameSite=Lax', secure: true});
                } else {
                    var setRibbonCookie = JSON.parse($.cookie('ribbonCookie'));
                    var setRibbonCookieLength = setRibbonCookie.length;
                    if (length != setRibbonCookieLength) {
                        $('.header-alert:not(.cookie-bar)').show();
                    } else {
                        var hasChanged = false;
                        for (var y = 0; y < setRibbonCookieLength; y++) {
                            var storedRibbonItem = setRibbonCookie[y];
                            var ribbonItem = data.d[y];
                            if (storedRibbonItem.RibbonID == ribbonItem.RibbonID) {
                                if (storedRibbonItem.LastModified != ribbonItem.LastModified) {
                                    hasChanged = true;
                                }
                            } else {
                                hasChanged = true;
                            }
                        }

                        if (hasChanged) {
                            $.cookie('showRibbonCookie', 'true', { path: '/;SameSite=Lax', secure: true});
                            $('.header-alert:not(.cookie-bar)').show();
                            StoreRibbonsInCookie(data.d);
                        } else {
                            var showRibbonCookieValue = $.cookie('showRibbonCookie');

                            if (showRibbonCookieValue == 'false') {
                                $('.header-alert:not(.cookie-bar)').hide();
                            } else {
                                $('.header-alert:not(.cookie-bar)').show();
                            }
                        }
                    }
                }
            }
        }
    }
});

function startLoop(alerts) {
    var currentAlertIndex = 0;
    $('.header-alert--message a span').eq(0).text(alerts[0].Message);
    $('.header-alert--message a').eq(0).attr('href', alerts[0].Link);
    if (alerts.length > 1) {
        setInterval(function () {
            $('.header-alert--message').fadeOut(1000, function () {
                currentAlertIndex = (currentAlertIndex < alerts.length - 1) ? currentAlertIndex + 1 : 0;
                $('.header-alert--message a span').eq(0).text(alerts[currentAlertIndex].Message);
                $('.header-alert--message a').eq(0).attr('href', alerts[currentAlertIndex].Link);
                $('.header-alert--message').fadeIn(1000);
            });
        }, 5000);
    }
}

/*
 cookie control migration
 */

$(function () {
    var showCookieBarCookie = $.cookie('showCookieBarCookie');
    if (showCookieBarCookie === undefined) {
        $('.cookie-bar').show();
    } else {
        $('.cookie-bar').hide();
    }
});

/*
 flight save migration
 */

//$(function () {
//    $('[data-toggle="popover"]').popover()
//})

$(window).scroll(() => {
  $('.btf-arrow').css('opacity', 1 - $(window).scrollTop() / 300);
});

$(document).ready(function () {

    var formerror = $(".editing-form-control-nested-control.Error");

    if (formerror.length > 0) {
        var headerHeight = $(".header-content").height();
        $("html, body").animate({ scrollTop: $(".editing-form-control-nested-control.Error").offset().top - headerHeight - 40 }, 1000);

    }
  
});;
//JS for all date and time pickers
//On Select of Date picker

//global var to populate the min date on leaving field
var minDateforLeave;
var activeDatePickerLeaveClass = '.datepickerLeave';

function datePickerEntry(selectedDate) {
    //click time entry
    $('.timeEntry').focus();
    $('.priorityTimeEntry').focus();

    //populate leaving date 7 days in advance of selected
    var mdy = selectedDate.split('/');

    var tommorrowsDate = new Date(mdy[2], mdy[1] - 1, mdy[0]);
    tommorrowsDate.setDate(tommorrowsDate.getDate() + 1);

    minDateforLeave = tommorrowsDate;

    $(activeDatePickerLeaveClass).datepicker('option', 'minDate', selectedDate);
    $(activeDatePickerLeaveClass).datepicker('setDate', tommorrowsDate);

    //populate hidden fields for chauntry
    $('.start_date').val(selectedDate.replace('/', '').replace('/', ''));
    $('.end_date').val(formatDate(tommorrowsDate).toString().replace(',', '').replace(',', ''));
}

//On Select of Date picker
function datePickerLeave(selectedDate) {
    //populate hidden fields for chauntry
    var mdy = selectedDate.split('/');
    var seldate = new Date(mdy[2], mdy[1] - 1, mdy[0]);
    seldate.setFullYear(seldate.getFullYear());

    //populate hidden fields for chauntry
    //new
    $('.end_date').val(selectedDate.replace('/', '').replace('/', ''));
}

function timePicker(selectedTime, hiddenfield) {
    var formatTime = selectedTime.dateFormat('Hi');
    //populate hidden fields for chauntry
    $(hiddenfield).val(formatTime);
}

//format Date
function formatDate(date) {
    var lD = date.getDate();
    if (lD <= 9)
        lD = '0' + lD;
    var lM = date.getMonth();
    lM += 1;  // JavaScript months are 0-11
    if (lM <= 9)
        lM = '0' + lM;
    var lY = date.getFullYear();

    return [lD, lM, lY];
}


$(document).ready(function () {

    //Populating the inital value in dropdown boxes
    var todaysDate = new Date();
    todaysDate.setDate(todaysDate.getDate() + 1);
    var formatEntryDate = formatDate(todaysDate);

    var leavingDate = new Date();
    leavingDate.setDate(leavingDate.getDate() + 7);
    var formatLeavingDate = formatDate(leavingDate);

    //populate ACTUAL fields
    $('.dateEntry').val(formatEntryDate[0] + '/' + formatEntryDate[1] + '/' + formatEntryDate[2]);
    $('.timeEntry').val('08:00');
    $('.priorityTimeEntry').val('08:00');
    $('.dateLeave').val(formatLeavingDate[0] + '/' + formatLeavingDate[1] + '/' + formatLeavingDate[2]);
    $('.timeLeave').val('20:00');

    //populate hidden fields initally 
    $('.start_date').val(formatEntryDate[0].toString() + formatEntryDate[1].toString() + formatEntryDate[2].toString());
    $('.end_date').val(formatLeavingDate[0].toString() + formatLeavingDate[1].toString() + formatLeavingDate[2].toString());
    $('.start_time').val('0800');
    $('.leave_time').val('2000');
    $('.end_time').val('2000');

    //Exec Lounge populate hidden fields initally 
    $('.adult_quantity').val('1');
    $('.child_quantity').val('0');

    $('.adultsSelected').on('click', function () {
        $('.adult_quantity').val($(this).val());
    });

    $('.childrenSelected').on('click', function () {
        $('.child_quantity').val($(this).val());
    });

    setupDatePickers();

    $('.timeEntry').datetimepicker({
        datepicker: false,
        format: 'H:i',
        defaultTime: '08:00',
        formatTime: 'H:i',
        allowTimes: function getArr() {
            var allowTimes = [
                '00:05', '00:30', '01:00', '01:30', '02:00', '03:30', '04:00', '04:30', '05:00', '05:30', '06:00', '06:30', '07:00', '07:30',
                '08:00', '08:30', '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30',
                '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30', '19:00', '19:30',
                '20:00', '20:30', '21:00', '21:30', '22:00', '22:30', '23:00', '23:30', '23:59'
            ];
            return allowTimes;
        }(),
        onSelectTime: function (selectedTime) {
            $('.dateLeave').focus();
            timePicker(selectedTime, '.start_time');
        }
    });

    $('.priorityTimeEntry').datetimepicker({
        datepicker: false,
        format: 'H:i',
        defaultTime: '08:00',
        formatTime: 'H:i',
        allowTimes: function getArr() {
            var allowTimes = [
                '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00'
            ];
            return allowTimes;
        }(),
        onSelectTime: function (selectedTime) {
            $('.dateLeave').focus();
            timePicker(selectedTime, '.start_time');
        }
    });

    $('.timeLeave').datetimepicker({
        datepicker: false,
        format: 'H:i',
        defaultTime: '20:00',
        formatTime: 'H:i',
        allowTimes: function getArr() {
            var allowTimes = [
                '00:05', '00:30', '01:00', '01:30', '02:00', '03:30', '04:00', '04:30', '05:00', '05:30', '06:00', '06:30', '07:00', '07:30',
                '08:00', '08:30', '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30',
                '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30', '19:00', '19:30',
                '20:00', '20:30', '21:00', '21:30', '22:00', '22:30', '23:00', '23:30', '23:59'
            ];
            return allowTimes;
        }(),
        onSelectTime: function (selectedTime) {
            timePicker(selectedTime, '.end_time');
        }
    });
});

$(window).on('resize orientationchange', function () {
    setupDatePickers();
});

function setupDatePickers() {
    //Destroy existing date pickers
    var $datePickers = $('.datepickerEntry, .datepickerEntry-mobile, .datepickerEntry-tablet, .datepickerLeave, .datepickerLeave-mobile, .datepickerLeave-tablet');
    var $openedDatePicker = null;
    $datePickers.each(function () {
        var $datePicker = $(this);
        var datePickerClass = '';
        if ($datePicker.hasClass('datepickerEntry-mobile') || $datePicker.hasClass('datepickerEntry-tablet')) {
            $datePicker.removeClass('datepickerEntry-tablet');
            $datePicker.removeClass('datepickerEntry-mobile');
            if (!$datePicker.hasClass('datepickerEntry'))
                $datePicker.addClass('datepickerEntry');
        } else if ($datePicker.hasClass('datepickerLeave-mobile') || $datePicker.hasClass('datepickerLeave-tablet')) {
            $datePicker.removeClass('datepickerLeave-tablet');
            $datePicker.removeClass('datepickerLeave-mobile');
            if (!$datePicker.hasClass('datepickerLeave'))
                $datePicker.addClass('datepickerLeave');
        }
        $datePicker.datepicker('hide');
        $datePicker.datepicker('destroy');
        $datePicker.trigger('blur');
    });

    //Reduces the number of months in the date picker depending on screen size
    if ($(window).width() < 550) {
        $('.datepickerEntry').switchClass('datepickerEntry', 'datepickerEntry-mobile');
        $('.datepickerLeave').switchClass('datepickerLeave', 'datepickerLeave-mobile');
        activeDatePickerLeaveClass = '.datepickerLeave-mobile';
    }
    if ($(window).width() < 1000) {
        $('.datepickerEntry').switchClass('datepickerEntry', 'datepickerEntry-tablet');
        $('.datepickerLeave').switchClass('datepickerLeave', 'datepickerLeave-tablet');
        activeDatePickerLeaveClass = '.datepickerLeave-tablet';
    }

    //Calls for the date and time pickers depending on Leave/Entry and device size
    $('.datepickerEntry').datepicker({
        numberOfMonths: 3,
        defaultDate: '+1',
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        onSelect: function (selectedDate) {
            datePickerEntry(selectedDate);
        },
        beforeShow: function (selectedDate) {
            setHeaderFixedState();
        },
        prevText: '',
        nextText: ''
    });

    $('.datepickerEntry-tablet').datepicker({
        numberOfMonths: 2,
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        onSelect: function (selectedDate) {
            datePickerEntry(selectedDate);
        },
        beforeShow: function (selectedDate) {
            setHeaderFixedState();
        },
        prevText: '',
        nextText: ''
    });

    $('.datepickerEntry-mobile').datepicker({
        numberOfMonths: 1,
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        onSelect: function (selectedDate) {
            datePickerEntry(selectedDate);
        },
        beforeShow: function (selectedDate) {
            setHeaderFixedState();
        },
        prevText: '',
        nextText: ''
    });

    $('.datepickerLeave').datepicker({
        numberOfMonths: 3,
        defaultDate: '+8',
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        onSelect: function (selectedDate) {
            $('.timeLeave').focus();
            datePickerLeave(selectedDate);
        },
        beforeShow: function (selectedDate) {
            setHeaderFixedState();
        },
        prevText: '',
        nextText: ''
    });

    $('.datepickerLeave-tablet').datepicker({
        numberOfMonths: 2,
        defaultDate: '+8',
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        onSelect: function (selectedDate) {
            $('.timeLeave').focus();
            datePickerLeave(selectedDate);
        },
        beforeShow: function (selectedDate) {
            setHeaderFixedState();
        },
        prevText: '',
        nextText: ''
    });

    $('.datepickerLeave-mobile').datepicker({
        numberOfMonths: 1,
        defaultDate: '+8',
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        onSelect: function (selectedDate) {
            $('.timeLeave').focus();
            datePickerLeave(selectedDate);
        },
        beforeShow: function (selectedDate) {
            setHeaderFixedState();
        },
        prevText: '',
        nextText: ''
    });
}

function setHeaderFixedState() {
    var $datepickerDiv = $('#ui-datepicker-div');
    $datepickerDiv.css('margin-top', '');
    $datepickerDiv.attr('data-header-fixed', $('[role=banner]').hasClass('is-fixed'));
}

$(window).on('load', function () {
    $('.datepickerEntry-custom').datepicker({
        numberOfMonths: 1,
        defaultDate: '+1',
        showButtonPanel: true,
        dateFormat: 'dd/mm/yy'
    });
});;
/*
 * notifIt! by @naoxink
 */
(function(root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(factory);
    } else {
        // Browser globals
        var package = factory(root.b);
        root.notif = package.notif;
        root.notifit_dismiss = package.notifit_dismiss;
        root.notif_confirm = package.notif_confirm;
    }
}(this, function() {
    function notif(config) {
        // Util stuff
        var create_close_button = function() {
            return $('<span>', {
                'id': 'notifIt_close',
                'html': '&times'
            });
        }
        var create_notification = function() {
                var div = $('<div>', {
                    'id': 'ui_notifIt'
                });
                var p = $('<p>', {
                    html: defaults.msg
                });
                div.append(p);
                return div;
            }
            // Global timeout
        window.notifit_timeout = null;
        // We love jQuery
        var $ = jQuery;
        // Mid position
        var mid = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) / 2;
        // Available positions
        var available_positions = ['left', 'center', 'right', 'bottom'];
        // Default config
        var defaults = {
            type: "default",
            width: 400,
            height: 60,
            position: "right",
            autohide: 1,
            msg: "This is my default message",
            opacity: 1,
            multiline: 0,
            fade: 0,
            bgcolor: "",
            color: "",
            timeout: 5000,
            zindex: null,
            offset: 0,
            callback: null,
            clickable: false,
            animation: 'slide'
        };
        // Extend with new params
        $.extend(defaults, config);
        // Animation config
        // ** Maybe create an external js with only animations for easier customizing? **
        defaults.animations = {}
        // Slide animation [DEFAULT]
        defaults.animations.slide = {
            'center': {
                'css_start': {
                    "top": parseInt(0 - (defaults.height + 10)),
                    "left": mid - parseInt(defaults.width / 2)
                },
                'in': {
                    'top': parseInt(10 + defaults.offset)
                },
                'out': {
                    'start': {
                        'top': parseInt(defaults.height - (defaults.height / 2))
                    },
                    'end': {
                        'top': parseInt(0 - (defaults.height * 2))
                    }
                }
            },
            'bottom': {
                'css_start': {
                    "top": 'auto',
                    "bottom": parseInt(0 - (defaults.height + 10)),
                    "left": mid - parseInt(defaults.width / 2)
                },
                'in': {
                    'bottom': parseInt(10 + defaults.offset)
                },
                'out': {
                    'start': {
                        'bottom': parseInt(defaults.height - (defaults.height / 2))
                    },
                    'end': {
                        'bottom': parseInt(0 - (defaults.height * 2))
                    }
                }
            },
            'right': {
                'css_start': {
                    "right": parseInt(0 - (defaults.width + 10)),
                    "right": parseInt(0 - (defaults.width * 2))
                },
                'in': {
                    'right': parseInt(10 + defaults.offset)
                },
                'out': {
                    'start': {
                        'right': parseFloat(defaults.width - (defaults.width * 0.9))
                    },
                    'end': {
                        'right': parseInt(0 - (defaults.width * 2))
                    }
                }
            },
            'left': {
                'css_start': {
                    "left": parseInt(0 - (defaults.width + 10))
                },
                'in': {
                    'left': parseInt(10 + defaults.offset)
                },
                'out': {
                    'start': {
                        'left': parseFloat(defaults.width - (defaults.width * 0.9))
                    },
                    'end': {
                        'left': parseInt(0 - (defaults.width * 2))
                    }
                }
            }
        };
        // Zoom animation
        defaults.animations.zoom = {
            'center': { // Not working well
                'css_start': {
                    "top": 10,
                    "left": mid - parseInt(defaults.width / 2),
                    "zoom": 0.01
                },
                'in': {
                    'zoom': 1
                },
                'out': {
                    'start': {
                        'zoom': 1.3
                    },
                    'end': {
                        'zoom': 0.01
                    }
                }
            },
            'bottom': { // Not working well
                'css_start': {
                    "top": 'auto',
                    "bottom": 10,
                    "left": mid - parseInt(defaults.width / 2),
                    "zoom": 0.01
                },
                'in': {
                    'zoom': 1
                },
                'out': {
                    'start': {
                        'zoom': 1.3
                    },
                    'end': {
                        'zoom': 0.01
                    }
                }
            },
            'right': {
                'css_start': {
                    'right': 10,
                    'zoom': 0.01
                },
                'in': {
                    'right': parseInt(10 + defaults.offset),
                    'zoom': 1
                },
                'out': {
                    'start': {
                        'zoom': 1.3
                    },
                    'end': {
                        'zoom': 0.01
                    }
                }
            },
            'left': {
                'css_start': {
                    'left': 10,
                    'zoom': 0.01
                },
                'in': {
                    'zoom': 1
                },
                'out': {
                    'start': {
                        'zoom': 1.3
                    },
                    'end': {
                        'zoom': 0.01
                    }
                }
            }
        };
        // Check if animation exists
        defaults.available_animations = Object.keys(defaults.animations)
        if (!defaults.available_animations.length) {
            throw new Error('No animations')
        }
        if (!available_positions.length) {
            throw new Error('No available positions')
        }
        if (available_positions.indexOf(defaults.position) === -1) {
            defaults.position = available_positions[0]
        }
        if (defaults.available_animations.indexOf(defaults.animation) === -1) {
            defaults.animation = defaults.available_animations[0]
        }
        // Check callback
        if (typeof defaults.callback !== 'function') {
            defaults.callback = null;
        }
        // Width & Height
        if (defaults.width > 0) {
            defaults.width = defaults.width;
        } else if (defaults.width === "all") {
            defaults.width = screen.width - 60;
        } else {
            defaults.width = 400;
        }
        if (defaults.height < 100 && defaults.height > 0) {
            height = defaults.height;
        }
        // Create notification itself
        var div = create_notification()
            // If clickable add close button
        if (defaults.clickable) {
            div.append(create_close_button())
        }
        // Remove div before appending, we don't want to duplicate
        var destroy = function() {
            $("#ui_notifIt").remove();
            clearTimeout(window.notifit_timeout);
        }
        destroy();
        $("body").append(div);
        // Set z-index
        if (defaults.zindex) {
            $("#ui_notifIt").css("z-index", defaults.zindex);
        }
        // If multiline we have to set the padding instead line-height
        if (defaults.multiline) {
            $("#ui_notifIt").css("padding", 15);
        } else {
            $("#ui_notifIt").css("height", height);
            $("#ui_notifIt p").css("line-height", height + "px");
        }
        // Basic css
        $("#ui_notifIt").css({
            "width": defaults.width,
            "opacity": defaults.opacity,
            "background-color": defaults.bgcolor,
            "color": defaults.color
        });
        // Class 'success', 'error', 'warning', 'info'..
        $("#ui_notifIt").addClass(defaults.type);
        // Set entry animation   
        if (defaults.animations[defaults.animation][defaults.position].css_start) {
            $("#ui_notifIt").css(defaults.animations[defaults.animation][defaults.position].css_start);
        } else {
            $("#ui_notifIt").css(defaults.animations[defaults.available_animations[0]][defaults.position].css_start);
        }
        // Execute entry animation
        $("#ui_notifIt").animate(defaults.animations[defaults.animation][defaults.position].in);
        // Events
        if (!defaults.clickable) {
            $("#ui_notifIt").on('click', function(e) {
                e.stopPropagation();
                notifit_dismiss(defaults);
            });
        }
        $('body').on('click', '#ui_notifIt #notifIt_close', function() {
            notifit_dismiss(defaults);
        });
        if (defaults.autohide) {
            if (!isNaN(defaults.timeout)) {
                window.notifit_timeout = setTimeout(function() {
                    notifit_dismiss(defaults);
                }, defaults.timeout);
            }
        }
        return {
            'destroy': destroy
        }
    }
    function notifit_dismiss(config) {
        clearTimeout(window.notifit_timeout);
        if (config.animation != 'fade') {
            // Set animations
            if (config.animations && config.animations[config.animation] && config.animations[config.animation][config.position] && config.animations[config.animation][config.position].out && config.animations[config.animation][config.position].out.start && config.animations[config.animation][config.position].out.end) {
                animation1 = config.animations[config.animation][config.position].out.start
                animation2 = config.animations[config.animation][config.position].out.end
            } else if (config.animations[config.available_animations[0]] && config.animations[config.available_animations[0]][config.position] && config.animations[config.available_animations[0]][config.position].out && config.animations[config.available_animations[0]][config.position].out.start && config.animations[config.available_animations[0]][config.position].out.end) {
                animation1 = config.animations[config.available_animations[0]][config.position].out.start
                animation2 = config.animations[config.available_animations[0]][config.position].out.end
            } else {
                throw new Error('Invalid animation')
            }
            // Execute animations       
            $("#ui_notifIt").animate(animation1, 100, function() {
                $("#ui_notifIt").animate(animation2, 100, function() {
                    $("#ui_notifIt").remove();
                    if (config.callback) {
                        config.callback();
                    }
                });
            });
        } else {
            // jQuery's fade, why create my own?
            $("#ui_notifIt").fadeOut("slow", function() {
                $("#ui_notifIt").remove();
                if (config.callback) {
                    config.callback();
                }
            });
        }
    }
    function notif_confirm(config){
        var $ = jQuery
        var _config = {
            'textaccept': 'Accept',
            'textcancel': 'Cancel',
            'message': 'Is that what you want to do?',
            'callback': null
        }
        var settings = $.extend({  }, _config, config)
        var $confirm = $('.notifit_confirm')[0] || null
        var $bg = $('.notifit_confirm_bg')[0] || null

        function _create(){
            if($confirm !== null){
                return $confirm
            }
            var $acceptButton = $('<button>', {
                'class': 'notifit_confirm_accept',
                'text': settings.textaccept
            })
            var $cancelButton = $('<button>', {
                'class': 'notifit_confirm_cancel',
                'text': settings.textcancel
            })
            var $message = $('<div>', {
                'class': 'notifit_confirm_message',
                'text': settings.message
            })
            $confirm = $('<div>', {
                'class': 'notifit_confirm'
            })
            $confirm
                .append($message)
                .append($acceptButton)
                .append($cancelButton)
            $bg = $('<div>', { 'class': 'notifit_confirm_bg' })
            return $confirm
        }
        function _show(){
            if($confirm){
                $('body').append($bg)
                $('body').append($confirm)
                $confirm.css({
                    'top': $bg.outerHeight() / 2 - ($confirm.outerHeight() / 2),
                    'left': $bg.outerWidth() / 2 - ($confirm.outerWidth() / 2)
                })
            }
        }
        function _hide(){
            if($confirm){
                $confirm.remove()
            }
            if($bg){
                $bg.remove()
            }
        }
        function _callback(){
            _hide()
            var response = null
            if($(this).hasClass('notifit_confirm_accept')){
                response = true
            }else if($(this).hasClass('notifit_confirm_cancel')){
                response = false
            }
            if(typeof settings.callback === 'function'){
                return settings.callback(response)
            }
            return response
        }
        function _setListeners(){
            $('html').one('click', '.notifit_confirm_accept, .notifit_confirm_cancel', _callback)
        }

        // Get the party started! \o/
        _create()
        _show()
        _setListeners()
    }
    function notif_prompt(config){
        // TODO
    }
    return {
        notif: notif,
        notifit_dismiss: notifit_dismiss,
        notif_confirm: notif_confirm
    };
}));
;
/**
 * Owl Carousel v2.2.1
 * Copyright 2013-2017 David Deutsch
 * Licensed under  ()
 */
/**
 * Owl carousel
 * @version 2.1.6
 * @author Bartosz Wojciechowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 * @todo Lazy Load Icon
 * @todo prevent animationend bubling
 * @todo itemsScaleUp
 * @todo Test Zepto
 * @todo stagePadding calculate wrong active classes
 */
;(function($, window, document, undefined) {

	/**
	 * Creates a carousel.
	 * @class The Owl Carousel.
	 * @public
	 * @param {HTMLElement|jQuery} element - The element to create the carousel for.
	 * @param {Object} [options] - The options
	 */
	function Owl(element, options) {

		/**
		 * Current settings for the carousel.
		 * @public
		 */
		this.settings = null;

		/**
		 * Current options set by the caller including defaults.
		 * @public
		 */
		this.options = $.extend({}, Owl.Defaults, options);

		/**
		 * Plugin element.
		 * @public
		 */
		this.$element = $(element);

		/**
		 * Proxied event handlers.
		 * @protected
		 */
		this._handlers = {};

		/**
		 * References to the running plugins of this carousel.
		 * @protected
		 */
		this._plugins = {};

		/**
		 * Currently suppressed events to prevent them from beeing retriggered.
		 * @protected
		 */
		this._supress = {};

		/**
		 * Absolute current position.
		 * @protected
		 */
		this._current = null;

		/**
		 * Animation speed in milliseconds.
		 * @protected
		 */
		this._speed = null;

		/**
		 * Coordinates of all items in pixel.
		 * @todo The name of this member is missleading.
		 * @protected
		 */
		this._coordinates = [];

		/**
		 * Current breakpoint.
		 * @todo Real media queries would be nice.
		 * @protected
		 */
		this._breakpoint = null;

		/**
		 * Current width of the plugin element.
		 */
		this._width = null;

		/**
		 * All real items.
		 * @protected
		 */
		this._items = [];

		/**
		 * All cloned items.
		 * @protected
		 */
		this._clones = [];

		/**
		 * Merge values of all items.
		 * @todo Maybe this could be part of a plugin.
		 * @protected
		 */
		this._mergers = [];

		/**
		 * Widths of all items.
		 */
		this._widths = [];

		/**
		 * Invalidated parts within the update process.
		 * @protected
		 */
		this._invalidated = {};

		/**
		 * Ordered list of workers for the update process.
		 * @protected
		 */
		this._pipe = [];

		/**
		 * Current state information for the drag operation.
		 * @todo #261
		 * @protected
		 */
		this._drag = {
			time: null,
			target: null,
			pointer: null,
			stage: {
				start: null,
				current: null
			},
			direction: null
		};

		/**
		 * Current state information and their tags.
		 * @type {Object}
		 * @protected
		 */
		this._states = {
			current: {},
			tags: {
				'initializing': [ 'busy' ],
				'animating': [ 'busy' ],
				'dragging': [ 'interacting' ]
			}
		};

		$.each([ 'onResize', 'onThrottledResize' ], $.proxy(function(i, handler) {
			this._handlers[handler] = $.proxy(this[handler], this);
		}, this));

		$.each(Owl.Plugins, $.proxy(function(key, plugin) {
			this._plugins[key.charAt(0).toLowerCase() + key.slice(1)]
				= new plugin(this);
		}, this));

		$.each(Owl.Workers, $.proxy(function(priority, worker) {
			this._pipe.push({
				'filter': worker.filter,
				'run': $.proxy(worker.run, this)
			});
		}, this));

		this.setup();
		this.initialize();
	}

	/**
	 * Default options for the carousel.
	 * @public
	 */
	Owl.Defaults = {
		items: 3,
		loop: false,
		center: false,
		rewind: false,

		mouseDrag: true,
		touchDrag: true,
		pullDrag: true,
		freeDrag: false,

		margin: 0,
		stagePadding: 0,

		merge: false,
		mergeFit: true,
		autoWidth: false,

		startPosition: 0,
		rtl: false,

		smartSpeed: 250,
		fluidSpeed: false,
		dragEndSpeed: false,

		responsive: {},
		responsiveRefreshRate: 200,
		responsiveBaseElement: window,

		fallbackEasing: 'swing',

		info: false,

		nestedItemSelector: false,
		itemElement: 'div',
		stageElement: 'div',

		refreshClass: 'owl-refresh',
		loadedClass: 'owl-loaded',
		loadingClass: 'owl-loading',
		rtlClass: 'owl-rtl',
		responsiveClass: 'owl-responsive',
		dragClass: 'owl-drag',
		itemClass: 'owl-item',
		stageClass: 'owl-stage',
		stageOuterClass: 'owl-stage-outer',
		grabClass: 'owl-grab'
	};

	/**
	 * Enumeration for width.
	 * @public
	 * @readonly
	 * @enum {String}
	 */
	Owl.Width = {
		Default: 'default',
		Inner: 'inner',
		Outer: 'outer'
	};

	/**
	 * Enumeration for types.
	 * @public
	 * @readonly
	 * @enum {String}
	 */
	Owl.Type = {
		Event: 'event',
		State: 'state'
	};

	/**
	 * Contains all registered plugins.
	 * @public
	 */
	Owl.Plugins = {};

	/**
	 * List of workers involved in the update process.
	 */
	Owl.Workers = [ {
		filter: [ 'width', 'settings' ],
		run: function() {
			this._width = this.$element.width();
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function(cache) {
			cache.current = this._items && this._items[this.relative(this._current)];
		}
	}, {
		filter: [ 'items', 'settings' ],
		run: function() {
			this.$stage.children('.cloned').remove();
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function(cache) {
			var margin = this.settings.margin || '',
				grid = !this.settings.autoWidth,
				rtl = this.settings.rtl,
				css = {
					'width': 'auto',
					'margin-left': rtl ? margin : '',
					'margin-right': rtl ? '' : margin
				};

			!grid && this.$stage.children().css(css);

			cache.css = css;
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function(cache) {
			var width = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,
				merge = null,
				iterator = this._items.length,
				grid = !this.settings.autoWidth,
				widths = [];

			cache.items = {
				merge: false,
				width: width
			};

			while (iterator--) {
				merge = this._mergers[iterator];
				merge = this.settings.mergeFit && Math.min(merge, this.settings.items) || merge;

				cache.items.merge = merge > 1 || cache.items.merge;

				widths[iterator] = !grid ? this._items[iterator].width() : width * merge;
			}

			this._widths = widths;
		}
	}, {
		filter: [ 'items', 'settings' ],
		run: function() {
			var clones = [],
				items = this._items,
				settings = this.settings,
				// TODO: Should be computed from number of min width items in stage
				view = Math.max(settings.items * 2, 4),
				size = Math.ceil(items.length / 2) * 2,
				repeat = settings.loop && items.length ? settings.rewind ? view : Math.max(view, size) : 0,
				append = '',
				prepend = '';

			repeat /= 2;

			while (repeat--) {
				// Switch to only using appended clones
				clones.push(this.normalize(clones.length / 2, true));
				append = append + items[clones[clones.length - 1]][0].outerHTML;
				clones.push(this.normalize(items.length - 1 - (clones.length - 1) / 2, true));
				prepend = items[clones[clones.length - 1]][0].outerHTML + prepend;
			}

			this._clones = clones;

			$(append).addClass('cloned').appendTo(this.$stage);
			$(prepend).addClass('cloned').prependTo(this.$stage);
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function() {
			var rtl = this.settings.rtl ? 1 : -1,
				size = this._clones.length + this._items.length,
				iterator = -1,
				previous = 0,
				current = 0,
				coordinates = [];

			while (++iterator < size) {
				previous = coordinates[iterator - 1] || 0;
				current = this._widths[this.relative(iterator)] + this.settings.margin;
				coordinates.push(previous + current * rtl);
			}

			this._coordinates = coordinates;
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function() {
			var padding = this.settings.stagePadding,
				coordinates = this._coordinates,
				css = {
					'width': Math.ceil(Math.abs(coordinates[coordinates.length - 1])) + padding * 2,
					'padding-left': padding || '',
					'padding-right': padding || ''
				};

			this.$stage.css(css);
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function(cache) {
			var iterator = this._coordinates.length,
				grid = !this.settings.autoWidth,
				items = this.$stage.children();

			if (grid && cache.items.merge) {
				while (iterator--) {
					cache.css.width = this._widths[this.relative(iterator)];
					items.eq(iterator).css(cache.css);
				}
			} else if (grid) {
				cache.css.width = cache.items.width;
				items.css(cache.css);
			}
		}
	}, {
		filter: [ 'items' ],
		run: function() {
			this._coordinates.length < 1 && this.$stage.removeAttr('style');
		}
	}, {
		filter: [ 'width', 'items', 'settings' ],
		run: function(cache) {
			cache.current = cache.current ? this.$stage.children().index(cache.current) : 0;
			cache.current = Math.max(this.minimum(), Math.min(this.maximum(), cache.current));
			this.reset(cache.current);
		}
	}, {
		filter: [ 'position' ],
		run: function() {
			this.animate(this.coordinates(this._current));
		}
	}, {
		filter: [ 'width', 'position', 'items', 'settings' ],
		run: function() {
			var rtl = this.settings.rtl ? 1 : -1,
				padding = this.settings.stagePadding * 2,
				begin = this.coordinates(this.current()) + padding,
				end = begin + this.width() * rtl,
				inner, outer, matches = [], i, n;

			for (i = 0, n = this._coordinates.length; i < n; i++) {
				inner = this._coordinates[i - 1] || 0;
				outer = Math.abs(this._coordinates[i]) + padding * rtl;

				if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
					|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
					matches.push(i);
				}
			}

			this.$stage.children('.active').removeClass('active');
			this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass('active');

			if (this.settings.center) {
				this.$stage.children('.center').removeClass('center');
				this.$stage.children().eq(this.current()).addClass('center');
			}
		}
	} ];

	/**
	 * Initializes the carousel.
	 * @protected
	 */
	Owl.prototype.initialize = function() {
		this.enter('initializing');
		this.trigger('initialize');

		this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl);

		if (this.settings.autoWidth && !this.is('pre-loading')) {
			var imgs, nestedSelector, width;
			imgs = this.$element.find('img');
			nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
			width = this.$element.children(nestedSelector).width();

			if (imgs.length && width <= 0) {
				this.preloadAutoWidthImages(imgs);
			}
		}

		this.$element.addClass(this.options.loadingClass);

		// create stage
		this.$stage = $('<' + this.settings.stageElement + ' class="' + this.settings.stageClass + '"/>')
			.wrap('<div class="' + this.settings.stageOuterClass + '"/>');

		// append stage
		this.$element.append(this.$stage.parent());

		// append content
		this.replace(this.$element.children().not(this.$stage.parent()));

		// check visibility
		if (this.$element.is(':visible')) {
			// update view
			this.refresh();
		} else {
			// invalidate width
			this.invalidate('width');
		}

		this.$element
			.removeClass(this.options.loadingClass)
			.addClass(this.options.loadedClass);

		// register event handlers
		this.registerEventHandlers();

		this.leave('initializing');
		this.trigger('initialized');
	};

	/**
	 * Setups the current settings.
	 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
	 * @todo Support for media queries by using `matchMedia` would be nice.
	 * @public
	 */
	Owl.prototype.setup = function() {
		var viewport = this.viewport(),
			overwrites = this.options.responsive,
			match = -1,
			settings = null;

		if (!overwrites) {
			settings = $.extend({}, this.options);
		} else {
			$.each(overwrites, function(breakpoint) {
				if (breakpoint <= viewport && breakpoint > match) {
					match = Number(breakpoint);
				}
			});

			settings = $.extend({}, this.options, overwrites[match]);
			if (typeof settings.stagePadding === 'function') {
				settings.stagePadding = settings.stagePadding();
			}
			delete settings.responsive;

			// responsive class
			if (settings.responsiveClass) {
				this.$element.attr('class',
					this.$element.attr('class').replace(new RegExp('(' + this.options.responsiveClass + '-)\\S+\\s', 'g'), '$1' + match)
				);
			}
		}

		this.trigger('change', { property: { name: 'settings', value: settings } });
		this._breakpoint = match;
		this.settings = settings;
		this.invalidate('settings');
		this.trigger('changed', { property: { name: 'settings', value: this.settings } });
	};

	/**
	 * Updates option logic if necessery.
	 * @protected
	 */
	Owl.prototype.optionsLogic = function() {
		if (this.settings.autoWidth) {
			this.settings.stagePadding = false;
			this.settings.merge = false;
		}
	};

	/**
	 * Prepares an item before add.
	 * @todo Rename event parameter `content` to `item`.
	 * @protected
	 * @returns {jQuery|HTMLElement} - The item container.
	 */
	Owl.prototype.prepare = function(item) {
		var event = this.trigger('prepare', { content: item });

		if (!event.data) {
			event.data = $('<' + this.settings.itemElement + '/>')
				.addClass(this.options.itemClass).append(item)
		}

		this.trigger('prepared', { content: event.data });

		return event.data;
	};

	/**
	 * Updates the view.
	 * @public
	 */
	Owl.prototype.update = function() {
		var i = 0,
			n = this._pipe.length,
			filter = $.proxy(function(p) { return this[p] }, this._invalidated),
			cache = {};

		while (i < n) {
			if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
				this._pipe[i].run(cache);
			}
			i++;
		}

		this._invalidated = {};

		!this.is('valid') && this.enter('valid');
	};

	/**
	 * Gets the width of the view.
	 * @public
	 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
	 * @returns {Number} - The width of the view in pixel.
	 */
	Owl.prototype.width = function(dimension) {
		dimension = dimension || Owl.Width.Default;
		switch (dimension) {
			case Owl.Width.Inner:
			case Owl.Width.Outer:
				return this._width;
			default:
				return this._width - this.settings.stagePadding * 2 + this.settings.margin;
		}
	};

	/**
	 * Refreshes the carousel primarily for adaptive purposes.
	 * @public
	 */
	Owl.prototype.refresh = function() {
		this.enter('refreshing');
		this.trigger('refresh');

		this.setup();

		this.optionsLogic();

		this.$element.addClass(this.options.refreshClass);

		this.update();

		this.$element.removeClass(this.options.refreshClass);

		this.leave('refreshing');
		this.trigger('refreshed');
	};

	/**
	 * Checks window `resize` event.
	 * @protected
	 */
	Owl.prototype.onThrottledResize = function() {
		window.clearTimeout(this.resizeTimer);
		this.resizeTimer = window.setTimeout(this._handlers.onResize, this.settings.responsiveRefreshRate);
	};

	/**
	 * Checks window `resize` event.
	 * @protected
	 */
	Owl.prototype.onResize = function() {
		if (!this._items.length) {
			return false;
		}

		if (this._width === this.$element.width()) {
			return false;
		}

		if (!this.$element.is(':visible')) {
			return false;
		}

		this.enter('resizing');

		if (this.trigger('resize').isDefaultPrevented()) {
			this.leave('resizing');
			return false;
		}

		this.invalidate('width');

		this.refresh();

		this.leave('resizing');
		this.trigger('resized');
	};

	/**
	 * Registers event handlers.
	 * @todo Check `msPointerEnabled`
	 * @todo #261
	 * @protected
	 */
	Owl.prototype.registerEventHandlers = function() {
		if ($.support.transition) {
			this.$stage.on($.support.transition.end + '.owl.core', $.proxy(this.onTransitionEnd, this));
		}

		if (this.settings.responsive !== false) {
			this.on(window, 'resize', this._handlers.onThrottledResize);
		}

		if (this.settings.mouseDrag) {
			this.$element.addClass(this.options.dragClass);
			this.$stage.on('mousedown.owl.core', $.proxy(this.onDragStart, this));
			this.$stage.on('dragstart.owl.core selectstart.owl.core', function() { return false });
		}

		if (this.settings.touchDrag){
			this.$stage.on('touchstart.owl.core', $.proxy(this.onDragStart, this));
			this.$stage.on('touchcancel.owl.core', $.proxy(this.onDragEnd, this));
		}
	};

	/**
	 * Handles `touchstart` and `mousedown` events.
	 * @todo Horizontal swipe threshold as option
	 * @todo #261
	 * @protected
	 * @param {Event} event - The event arguments.
	 */
	Owl.prototype.onDragStart = function(event) {
		var stage = null;

		if (event.which === 3) {
			return;
		}

		if ($.support.transform) {
			stage = this.$stage.css('transform').replace(/.*\(|\)| /g, '').split(',');
			stage = {
				x: stage[stage.length === 16 ? 12 : 4],
				y: stage[stage.length === 16 ? 13 : 5]
			};
		} else {
			stage = this.$stage.position();
			stage = {
				x: this.settings.rtl ?
					stage.left + this.$stage.width() - this.width() + this.settings.margin :
					stage.left,
				y: stage.top
			};
		}

		if (this.is('animating')) {
			$.support.transform ? this.animate(stage.x) : this.$stage.stop()
			this.invalidate('position');
		}

		this.$element.toggleClass(this.options.grabClass, event.type === 'mousedown');

		this.speed(0);

		this._drag.time = new Date().getTime();
		this._drag.target = $(event.target);
		this._drag.stage.start = stage;
		this._drag.stage.current = stage;
		this._drag.pointer = this.pointer(event);

		$(document).on('mouseup.owl.core touchend.owl.core', $.proxy(this.onDragEnd, this));

		$(document).one('mousemove.owl.core touchmove.owl.core', $.proxy(function(event) {
			var delta = this.difference(this._drag.pointer, this.pointer(event));

			$(document).on('mousemove.owl.core touchmove.owl.core', $.proxy(this.onDragMove, this));

			if (Math.abs(delta.x) < Math.abs(delta.y) && this.is('valid')) {
				return;
			}

			event.preventDefault();

			this.enter('dragging');
			this.trigger('drag');
		}, this));
	};

	/**
	 * Handles the `touchmove` and `mousemove` events.
	 * @todo #261
	 * @protected
	 * @param {Event} event - The event arguments.
	 */
	Owl.prototype.onDragMove = function(event) {
		var minimum = null,
			maximum = null,
			pull = null,
			delta = this.difference(this._drag.pointer, this.pointer(event)),
			stage = this.difference(this._drag.stage.start, delta);

		if (!this.is('dragging')) {
			return;
		}

		event.preventDefault();

		if (this.settings.loop) {
			minimum = this.coordinates(this.minimum());
			maximum = this.coordinates(this.maximum() + 1) - minimum;
			stage.x = (((stage.x - minimum) % maximum + maximum) % maximum) + minimum;
		} else {
			minimum = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
			maximum = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
			pull = this.settings.pullDrag ? -1 * delta.x / 5 : 0;
			stage.x = Math.max(Math.min(stage.x, minimum + pull), maximum + pull);
		}

		this._drag.stage.current = stage;

		this.animate(stage.x);
	};

	/**
	 * Handles the `touchend` and `mouseup` events.
	 * @todo #261
	 * @todo Threshold for click event
	 * @protected
	 * @param {Event} event - The event arguments.
	 */
	Owl.prototype.onDragEnd = function(event) {
		var delta = this.difference(this._drag.pointer, this.pointer(event)),
			stage = this._drag.stage.current,
			direction = delta.x > 0 ^ this.settings.rtl ? 'left' : 'right';

		$(document).off('.owl.core');

		this.$element.removeClass(this.options.grabClass);

		if (delta.x !== 0 && this.is('dragging') || !this.is('valid')) {
			this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
			this.current(this.closest(stage.x, delta.x !== 0 ? direction : this._drag.direction));
			this.invalidate('position');
			this.update();

			this._drag.direction = direction;

			if (Math.abs(delta.x) > 3 || new Date().getTime() - this._drag.time > 300) {
				this._drag.target.one('click.owl.core', function() { return false; });
			}
		}

		if (!this.is('dragging')) {
			return;
		}

		this.leave('dragging');
		this.trigger('dragged');
	};

	/**
	 * Gets absolute position of the closest item for a coordinate.
	 * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
	 * @protected
	 * @param {Number} coordinate - The coordinate in pixel.
	 * @param {String} direction - The direction to check for the closest item. Ether `left` or `right`.
	 * @return {Number} - The absolute position of the closest item.
	 */
	Owl.prototype.closest = function(coordinate, direction) {
		var position = -1,
			pull = 30,
			width = this.width(),
			coordinates = this.coordinates();

		if (!this.settings.freeDrag) {
			// check closest item
			$.each(coordinates, $.proxy(function(index, value) {
				// on a left pull, check on current index
				if (direction === 'left' && coordinate > value - pull && coordinate < value + pull) {
					position = index;
				// on a right pull, check on previous index
				// to do so, subtract width from value and set position = index + 1
				} else if (direction === 'right' && coordinate > value - width - pull && coordinate < value - width + pull) {
					position = index + 1;
				} else if (this.op(coordinate, '<', value)
					&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {
					position = direction === 'left' ? index + 1 : index;
				}
				return position === -1;
			}, this));
		}

		if (!this.settings.loop) {
			// non loop boundries
			if (this.op(coordinate, '>', coordinates[this.minimum()])) {
				position = coordinate = this.minimum();
			} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
				position = coordinate = this.maximum();
			}
		}

		return position;
	};

	/**
	 * Animates the stage.
	 * @todo #270
	 * @public
	 * @param {Number} coordinate - The coordinate in pixels.
	 */
	Owl.prototype.animate = function(coordinate) {
		var animate = this.speed() > 0;

		this.is('animating') && this.onTransitionEnd();

		if (animate) {
			this.enter('animating');
			this.trigger('translate');
		}

		if ($.support.transform3d && $.support.transition) {
			this.$stage.css({
				transform: 'translate3d(' + coordinate + 'px,0px,0px)',
				transition: (this.speed() / 1000) + 's'
			});
		} else if (animate) {
			this.$stage.animate({
				left: coordinate + 'px'
			}, this.speed(), this.settings.fallbackEasing, $.proxy(this.onTransitionEnd, this));
		} else {
			this.$stage.css({
				left: coordinate + 'px'
			});
		}
	};

	/**
	 * Checks whether the carousel is in a specific state or not.
	 * @param {String} state - The state to check.
	 * @returns {Boolean} - The flag which indicates if the carousel is busy.
	 */
	Owl.prototype.is = function(state) {
		return this._states.current[state] && this._states.current[state] > 0;
	};

	/**
	 * Sets the absolute position of the current item.
	 * @public
	 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
	 * @returns {Number} - The absolute position of the current item.
	 */
	Owl.prototype.current = function(position) {
		if (position === undefined) {
			return this._current;
		}

		if (this._items.length === 0) {
			return undefined;
		}

		position = this.normalize(position);

		if (this._current !== position) {
			var event = this.trigger('change', { property: { name: 'position', value: position } });

			if (event.data !== undefined) {
				position = this.normalize(event.data);
			}

			this._current = position;

			this.invalidate('position');

			this.trigger('changed', { property: { name: 'position', value: this._current } });
		}

		return this._current;
	};

	/**
	 * Invalidates the given part of the update routine.
	 * @param {String} [part] - The part to invalidate.
	 * @returns {Array.<String>} - The invalidated parts.
	 */
	Owl.prototype.invalidate = function(part) {
		if ($.type(part) === 'string') {
			this._invalidated[part] = true;
			this.is('valid') && this.leave('valid');
		}
		return $.map(this._invalidated, function(v, i) { return i });
	};

	/**
	 * Resets the absolute position of the current item.
	 * @public
	 * @param {Number} position - The absolute position of the new item.
	 */
	Owl.prototype.reset = function(position) {
		position = this.normalize(position);

		if (position === undefined) {
			return;
		}

		this._speed = 0;
		this._current = position;

		this.suppress([ 'translate', 'translated' ]);

		this.animate(this.coordinates(position));

		this.release([ 'translate', 'translated' ]);
	};

	/**
	 * Normalizes an absolute or a relative position of an item.
	 * @public
	 * @param {Number} position - The absolute or relative position to normalize.
	 * @param {Boolean} [relative=false] - Whether the given position is relative or not.
	 * @returns {Number} - The normalized position.
	 */
	Owl.prototype.normalize = function(position, relative) {
		var n = this._items.length,
			m = relative ? 0 : this._clones.length;

		if (!this.isNumeric(position) || n < 1) {
			position = undefined;
		} else if (position < 0 || position >= n + m) {
			position = ((position - m / 2) % n + n) % n + m / 2;
		}

		return position;
	};

	/**
	 * Converts an absolute position of an item into a relative one.
	 * @public
	 * @param {Number} position - The absolute position to convert.
	 * @returns {Number} - The converted position.
	 */
	Owl.prototype.relative = function(position) {
		position -= this._clones.length / 2;
		return this.normalize(position, true);
	};

	/**
	 * Gets the maximum position for the current item.
	 * @public
	 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
	 * @returns {Number}
	 */
	Owl.prototype.maximum = function(relative) {
		var settings = this.settings,
			maximum = this._coordinates.length,
			iterator,
			reciprocalItemsWidth,
			elementWidth;

		if (settings.loop) {
			maximum = this._clones.length / 2 + this._items.length - 1;
		} else if (settings.autoWidth || settings.merge) {
			iterator = this._items.length;
			reciprocalItemsWidth = this._items[--iterator].width();
			elementWidth = this.$element.width();
			while (iterator--) {
				reciprocalItemsWidth += this._items[iterator].width() + this.settings.margin;
				if (reciprocalItemsWidth > elementWidth) {
					break;
				}
			}
			maximum = iterator + 1;
		} else if (settings.center) {
			maximum = this._items.length - 1;
		} else {
			maximum = this._items.length - settings.items;
		}

		if (relative) {
			maximum -= this._clones.length / 2;
		}

		return Math.max(maximum, 0);
	};

	/**
	 * Gets the minimum position for the current item.
	 * @public
	 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
	 * @returns {Number}
	 */
	Owl.prototype.minimum = function(relative) {
		return relative ? 0 : this._clones.length / 2;
	};

	/**
	 * Gets an item at the specified relative position.
	 * @public
	 * @param {Number} [position] - The relative position of the item.
	 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
	 */
	Owl.prototype.items = function(position) {
		if (position === undefined) {
			return this._items.slice();
		}

		position = this.normalize(position, true);
		return this._items[position];
	};

	/**
	 * Gets an item at the specified relative position.
	 * @public
	 * @param {Number} [position] - The relative position of the item.
	 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
	 */
	Owl.prototype.mergers = function(position) {
		if (position === undefined) {
			return this._mergers.slice();
		}

		position = this.normalize(position, true);
		return this._mergers[position];
	};

	/**
	 * Gets the absolute positions of clones for an item.
	 * @public
	 * @param {Number} [position] - The relative position of the item.
	 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.
	 */
	Owl.prototype.clones = function(position) {
		var odd = this._clones.length / 2,
			even = odd + this._items.length,
			map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };

		if (position === undefined) {
			return $.map(this._clones, function(v, i) { return map(i) });
		}

		return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
	};

	/**
	 * Sets the current animation speed.
	 * @public
	 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
	 * @returns {Number} - The current animation speed in milliseconds.
	 */
	Owl.prototype.speed = function(speed) {
		if (speed !== undefined) {
			this._speed = speed;
		}

		return this._speed;
	};

	/**
	 * Gets the coordinate of an item.
	 * @todo The name of this method is missleanding.
	 * @public
	 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
	 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.
	 */
	Owl.prototype.coordinates = function(position) {
		var multiplier = 1,
			newPosition = position - 1,
			coordinate;

		if (position === undefined) {
			return $.map(this._coordinates, $.proxy(function(coordinate, index) {
				return this.coordinates(index);
			}, this));
		}

		if (this.settings.center) {
			if (this.settings.rtl) {
				multiplier = -1;
				newPosition = position + 1;
			}

			coordinate = this._coordinates[position];
			coordinate += (this.width() - coordinate + (this._coordinates[newPosition] || 0)) / 2 * multiplier;
		} else {
			coordinate = this._coordinates[newPosition] || 0;
		}

		coordinate = Math.ceil(coordinate);

		return coordinate;
	};

	/**
	 * Calculates the speed for a translation.
	 * @protected
	 * @param {Number} from - The absolute position of the start item.
	 * @param {Number} to - The absolute position of the target item.
	 * @param {Number} [factor=undefined] - The time factor in milliseconds.
	 * @returns {Number} - The time in milliseconds for the translation.
	 */
	Owl.prototype.duration = function(from, to, factor) {
		if (factor === 0) {
			return 0;
		}

		return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
	};

	/**
	 * Slides to the specified item.
	 * @public
	 * @param {Number} position - The position of the item.
	 * @param {Number} [speed] - The time in milliseconds for the transition.
	 */
	Owl.prototype.to = function(position, speed) {
		var current = this.current(),
			revert = null,
			distance = position - this.relative(current),
			direction = (distance > 0) - (distance < 0),
			items = this._items.length,
			minimum = this.minimum(),
			maximum = this.maximum();

		if (this.settings.loop) {
			if (!this.settings.rewind && Math.abs(distance) > items / 2) {
				distance += direction * -1 * items;
			}

			position = current + distance;
			revert = ((position - minimum) % items + items) % items + minimum;

			if (revert !== position && revert - distance <= maximum && revert - distance > 0) {
				current = revert - distance;
				position = revert;
				this.reset(current);
			}
		} else if (this.settings.rewind) {
			maximum += 1;
			position = (position % maximum + maximum) % maximum;
		} else {
			position = Math.max(minimum, Math.min(maximum, position));
		}

		this.speed(this.duration(current, position, speed));
		this.current(position);

		if (this.$element.is(':visible')) {
			this.update();
		}
	};

	/**
	 * Slides to the next item.
	 * @public
	 * @param {Number} [speed] - The time in milliseconds for the transition.
	 */
	Owl.prototype.next = function(speed) {
		speed = speed || false;
		this.to(this.relative(this.current()) + 1, speed);
	};

	/**
	 * Slides to the previous item.
	 * @public
	 * @param {Number} [speed] - The time in milliseconds for the transition.
	 */
	Owl.prototype.prev = function(speed) {
		speed = speed || false;
		this.to(this.relative(this.current()) - 1, speed);
	};

	/**
	 * Handles the end of an animation.
	 * @protected
	 * @param {Event} event - The event arguments.
	 */
	Owl.prototype.onTransitionEnd = function(event) {

		// if css2 animation then event object is undefined
		if (event !== undefined) {
			event.stopPropagation();

			// Catch only owl-stage transitionEnd event
			if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
				return false;
			}
		}

		this.leave('animating');
		this.trigger('translated');
	};

	/**
	 * Gets viewport width.
	 * @protected
	 * @return {Number} - The width in pixel.
	 */
	Owl.prototype.viewport = function() {
		var width;
		if (this.options.responsiveBaseElement !== window) {
			width = $(this.options.responsiveBaseElement).width();
		} else if (window.innerWidth) {
			width = window.innerWidth;
		} else if (document.documentElement && document.documentElement.clientWidth) {
			width = document.documentElement.clientWidth;
		} else {
			console.warn('Can not detect viewport width.');
		}
		return width;
	};

	/**
	 * Replaces the current content.
	 * @public
	 * @param {HTMLElement|jQuery|String} content - The new content.
	 */
	Owl.prototype.replace = function(content) {
		this.$stage.empty();
		this._items = [];

		if (content) {
			content = (content instanceof jQuery) ? content : $(content);
		}

		if (this.settings.nestedItemSelector) {
			content = content.find('.' + this.settings.nestedItemSelector);
		}

		content.filter(function() {
			return this.nodeType === 1;
		}).each($.proxy(function(index, item) {
			item = this.prepare(item);
			this.$stage.append(item);
			this._items.push(item);
			this._mergers.push(item.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
		}, this));

		this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);

		this.invalidate('items');
	};

	/**
	 * Adds an item.
	 * @todo Use `item` instead of `content` for the event arguments.
	 * @public
	 * @param {HTMLElement|jQuery|String} content - The item content to add.
	 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
	 */
	Owl.prototype.add = function(content, position) {
		var current = this.relative(this._current);

		position = position === undefined ? this._items.length : this.normalize(position, true);
		content = content instanceof jQuery ? content : $(content);

		this.trigger('add', { content: content, position: position });

		content = this.prepare(content);

		if (this._items.length === 0 || position === this._items.length) {
			this._items.length === 0 && this.$stage.append(content);
			this._items.length !== 0 && this._items[position - 1].after(content);
			this._items.push(content);
			this._mergers.push(content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
		} else {
			this._items[position].before(content);
			this._items.splice(position, 0, content);
			this._mergers.splice(position, 0, content.find('[data-merge]').addBack('[data-merge]').attr('data-merge') * 1 || 1);
		}

		this._items[current] && this.reset(this._items[current].index());

		this.invalidate('items');

		this.trigger('added', { content: content, position: position });
	};

	/**
	 * Removes an item by its position.
	 * @todo Use `item` instead of `content` for the event arguments.
	 * @public
	 * @param {Number} position - The relative position of the item to remove.
	 */
	Owl.prototype.remove = function(position) {
		position = this.normalize(position, true);

		if (position === undefined) {
			return;
		}

		this.trigger('remove', { content: this._items[position], position: position });

		this._items[position].remove();
		this._items.splice(position, 1);
		this._mergers.splice(position, 1);

		this.invalidate('items');

		this.trigger('removed', { content: null, position: position });
	};

	/**
	 * Preloads images with auto width.
	 * @todo Replace by a more generic approach
	 * @protected
	 */
	Owl.prototype.preloadAutoWidthImages = function(images) {
		images.each($.proxy(function(i, element) {
			this.enter('pre-loading');
			element = $(element);
			$(new Image()).one('load', $.proxy(function(e) {
				element.attr('src', e.target.src);
				element.css('opacity', 1);
				this.leave('pre-loading');
				!this.is('pre-loading') && !this.is('initializing') && this.refresh();
			}, this)).attr('src', element.attr('src') || element.attr('data-src') || element.attr('data-src-retina'));
		}, this));
	};

	/**
	 * Destroys the carousel.
	 * @public
	 */
	Owl.prototype.destroy = function() {

		this.$element.off('.owl.core');
		this.$stage.off('.owl.core');
		$(document).off('.owl.core');

		if (this.settings.responsive !== false) {
			window.clearTimeout(this.resizeTimer);
			this.off(window, 'resize', this._handlers.onThrottledResize);
		}

		for (var i in this._plugins) {
			this._plugins[i].destroy();
		}

		this.$stage.children('.cloned').remove();

		this.$stage.unwrap();
		this.$stage.children().contents().unwrap();
		this.$stage.children().unwrap();

		this.$element
			.removeClass(this.options.refreshClass)
			.removeClass(this.options.loadingClass)
			.removeClass(this.options.loadedClass)
			.removeClass(this.options.rtlClass)
			.removeClass(this.options.dragClass)
			.removeClass(this.options.grabClass)
			.attr('class', this.$element.attr('class').replace(new RegExp(this.options.responsiveClass + '-\\S+\\s', 'g'), ''))
			.removeData('owl.carousel');
	};

	/**
	 * Operators to calculate right-to-left and left-to-right.
	 * @protected
	 * @param {Number} [a] - The left side operand.
	 * @param {String} [o] - The operator.
	 * @param {Number} [b] - The right side operand.
	 */
	Owl.prototype.op = function(a, o, b) {
		var rtl = this.settings.rtl;
		switch (o) {
			case '<':
				return rtl ? a > b : a < b;
			case '>':
				return rtl ? a < b : a > b;
			case '>=':
				return rtl ? a <= b : a >= b;
			case '<=':
				return rtl ? a >= b : a <= b;
			default:
				break;
		}
	};

	/**
	 * Attaches to an internal event.
	 * @protected
	 * @param {HTMLElement} element - The event source.
	 * @param {String} event - The event name.
	 * @param {Function} listener - The event handler to attach.
	 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
	 */
	Owl.prototype.on = function(element, event, listener, capture) {
		if (element.addEventListener) {
			element.addEventListener(event, listener, capture);
		} else if (element.attachEvent) {
			element.attachEvent('on' + event, listener);
		}
	};

	/**
	 * Detaches from an internal event.
	 * @protected
	 * @param {HTMLElement} element - The event source.
	 * @param {String} event - The event name.
	 * @param {Function} listener - The attached event handler to detach.
	 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
	 */
	Owl.prototype.off = function(element, event, listener, capture) {
		if (element.removeEventListener) {
			element.removeEventListener(event, listener, capture);
		} else if (element.detachEvent) {
			element.detachEvent('on' + event, listener);
		}
	};

	/**
	 * Triggers a public event.
	 * @todo Remove `status`, `relatedTarget` should be used instead.
	 * @protected
	 * @param {String} name - The event name.
	 * @param {*} [data=null] - The event data.
	 * @param {String} [namespace=carousel] - The event namespace.
	 * @param {String} [state] - The state which is associated with the event.
	 * @param {Boolean} [enter=false] - Indicates if the call enters the specified state or not.
	 * @returns {Event} - The event arguments.
	 */
	Owl.prototype.trigger = function(name, data, namespace, state, enter) {
		var status = {
			item: { count: this._items.length, index: this.current() }
		}, handler = $.camelCase(
			$.grep([ 'on', name, namespace ], function(v) { return v })
				.join('-').toLowerCase()
		), event = $.Event(
			[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
			$.extend({ relatedTarget: this }, status, data)
		);

		if (!this._supress[name]) {
			$.each(this._plugins, function(name, plugin) {
				if (plugin.onTrigger) {
					plugin.onTrigger(event);
				}
			});

			this.register({ type: Owl.Type.Event, name: name });
			this.$element.trigger(event);

			if (this.settings && typeof this.settings[handler] === 'function') {
				this.settings[handler].call(this, event);
			}
		}

		return event;
	};

	/**
	 * Enters a state.
	 * @param name - The state name.
	 */
	Owl.prototype.enter = function(name) {
		$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
			if (this._states.current[name] === undefined) {
				this._states.current[name] = 0;
			}

			this._states.current[name]++;
		}, this));
	};

	/**
	 * Leaves a state.
	 * @param name - The state name.
	 */
	Owl.prototype.leave = function(name) {
		$.each([ name ].concat(this._states.tags[name] || []), $.proxy(function(i, name) {
			this._states.current[name]--;
		}, this));
	};

	/**
	 * Registers an event or state.
	 * @public
	 * @param {Object} object - The event or state to register.
	 */
	Owl.prototype.register = function(object) {
		if (object.type === Owl.Type.Event) {
			if (!$.event.special[object.name]) {
				$.event.special[object.name] = {};
			}

			if (!$.event.special[object.name].owl) {
				var _default = $.event.special[object.name]._default;
				$.event.special[object.name]._default = function(e) {
					if (_default && _default.apply && (!e.namespace || e.namespace.indexOf('owl') === -1)) {
						return _default.apply(this, arguments);
					}
					return e.namespace && e.namespace.indexOf('owl') > -1;
				};
				$.event.special[object.name].owl = true;
			}
		} else if (object.type === Owl.Type.State) {
			if (!this._states.tags[object.name]) {
				this._states.tags[object.name] = object.tags;
			} else {
				this._states.tags[object.name] = this._states.tags[object.name].concat(object.tags);
			}

			this._states.tags[object.name] = $.grep(this._states.tags[object.name], $.proxy(function(tag, i) {
				return $.inArray(tag, this._states.tags[object.name]) === i;
			}, this));
		}
	};

	/**
	 * Suppresses events.
	 * @protected
	 * @param {Array.<String>} events - The events to suppress.
	 */
	Owl.prototype.suppress = function(events) {
		$.each(events, $.proxy(function(index, event) {
			this._supress[event] = true;
		}, this));
	};

	/**
	 * Releases suppressed events.
	 * @protected
	 * @param {Array.<String>} events - The events to release.
	 */
	Owl.prototype.release = function(events) {
		$.each(events, $.proxy(function(index, event) {
			delete this._supress[event];
		}, this));
	};

	/**
	 * Gets unified pointer coordinates from event.
	 * @todo #261
	 * @protected
	 * @param {Event} - The `mousedown` or `touchstart` event.
	 * @returns {Object} - Contains `x` and `y` coordinates of current pointer position.
	 */
	Owl.prototype.pointer = function(event) {
		var result = { x: null, y: null };

		event = event.originalEvent || event || window.event;

		event = event.touches && event.touches.length ?
			event.touches[0] : event.changedTouches && event.changedTouches.length ?
				event.changedTouches[0] : event;

		if (event.pageX) {
			result.x = event.pageX;
			result.y = event.pageY;
		} else {
			result.x = event.clientX;
			result.y = event.clientY;
		}

		return result;
	};

	/**
	 * Determines if the input is a Number or something that can be coerced to a Number
	 * @protected
	 * @param {Number|String|Object|Array|Boolean|RegExp|Function|Symbol} - The input to be tested
	 * @returns {Boolean} - An indication if the input is a Number or can be coerced to a Number
	 */
	Owl.prototype.isNumeric = function(number) {
		return !isNaN(parseFloat(number));
	};

	/**
	 * Gets the difference of two vectors.
	 * @todo #261
	 * @protected
	 * @param {Object} - The first vector.
	 * @param {Object} - The second vector.
	 * @returns {Object} - The difference.
	 */
	Owl.prototype.difference = function(first, second) {
		return {
			x: first.x - second.x,
			y: first.y - second.y
		};
	};

	/**
	 * The jQuery Plugin for the Owl Carousel
	 * @todo Navigation plugin `next` and `prev`
	 * @public
	 */
	$.fn.owlCarousel = function(option) {
		var args = Array.prototype.slice.call(arguments, 1);

		return this.each(function() {
			var $this = $(this),
				data = $this.data('owl.carousel');

			if (!data) {
				data = new Owl(this, typeof option == 'object' && option);
				$this.data('owl.carousel', data);

				$.each([
					'next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'
				], function(i, event) {
					data.register({ type: Owl.Type.Event, name: event });
					data.$element.on(event + '.owl.carousel.core', $.proxy(function(e) {
						if (e.namespace && e.relatedTarget !== this) {
							this.suppress([ event ]);
							data[event].apply(this, [].slice.call(arguments, 1));
							this.release([ event ]);
						}
					}, data));
				});
			}

			if (typeof option == 'string' && option.charAt(0) !== '_') {
				data[option].apply(data, args);
			}
		});
	};

	/**
	 * The constructor for the jQuery Plugin
	 * @public
	 */
	$.fn.owlCarousel.Constructor = Owl;

})(window.Zepto || window.jQuery, window, document);

/**
 * AutoRefresh Plugin
 * @version 2.1.0
 * @author Artus Kolanowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	/**
	 * Creates the auto refresh plugin.
	 * @class The Auto Refresh Plugin
	 * @param {Owl} carousel - The Owl Carousel
	 */
	var AutoRefresh = function(carousel) {
		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * Refresh interval.
		 * @protected
		 * @type {number}
		 */
		this._interval = null;

		/**
		 * Whether the element is currently visible or not.
		 * @protected
		 * @type {Boolean}
		 */
		this._visible = null;

		/**
		 * All event handlers.
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'initialized.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.autoRefresh) {
					this.watch();
				}
			}, this)
		};

		// set default options
		this._core.options = $.extend({}, AutoRefresh.Defaults, this._core.options);

		// register event handlers
		this._core.$element.on(this._handlers);
	};

	/**
	 * Default options.
	 * @public
	 */
	AutoRefresh.Defaults = {
		autoRefresh: true,
		autoRefreshInterval: 500
	};

	/**
	 * Watches the element.
	 */
	AutoRefresh.prototype.watch = function() {
		if (this._interval) {
			return;
		}

		this._visible = this._core.$element.is(':visible');
		this._interval = window.setInterval($.proxy(this.refresh, this), this._core.settings.autoRefreshInterval);
	};

	/**
	 * Refreshes the element.
	 */
	AutoRefresh.prototype.refresh = function() {
		if (this._core.$element.is(':visible') === this._visible) {
			return;
		}

		this._visible = !this._visible;

		this._core.$element.toggleClass('owl-hidden', !this._visible);

		this._visible && (this._core.invalidate('width') && this._core.refresh());
	};

	/**
	 * Destroys the plugin.
	 */
	AutoRefresh.prototype.destroy = function() {
		var handler, property;

		window.clearInterval(this._interval);

		for (handler in this._handlers) {
			this._core.$element.off(handler, this._handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.AutoRefresh = AutoRefresh;

})(window.Zepto || window.jQuery, window, document);

/**
 * Lazy Plugin
 * @version 2.1.0
 * @author Bartosz Wojciechowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	/**
	 * Creates the lazy plugin.
	 * @class The Lazy Plugin
	 * @param {Owl} carousel - The Owl Carousel
	 */
	var Lazy = function(carousel) {

		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * Already loaded items.
		 * @protected
		 * @type {Array.<jQuery>}
		 */
		this._loaded = [];

		/**
		 * Event handlers.
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'initialized.owl.carousel change.owl.carousel resized.owl.carousel': $.proxy(function(e) {
				if (!e.namespace) {
					return;
				}

				if (!this._core.settings || !this._core.settings.lazyLoad) {
					return;
				}

				if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
					var settings = this._core.settings,
						n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
						i = ((settings.center && n * -1) || 0),
						position = (e.property && e.property.value !== undefined ? e.property.value : this._core.current()) + i,
						clones = this._core.clones().length,
						load = $.proxy(function(i, v) { this.load(v) }, this);

					while (i++ < n) {
						this.load(clones / 2 + this._core.relative(position));
						clones && $.each(this._core.clones(this._core.relative(position)), load);
						position++;
					}
				}
			}, this)
		};

		// set the default options
		this._core.options = $.extend({}, Lazy.Defaults, this._core.options);

		// register event handler
		this._core.$element.on(this._handlers);
	};

	/**
	 * Default options.
	 * @public
	 */
	Lazy.Defaults = {
		lazyLoad: false
	};

	/**
	 * Loads all resources of an item at the specified position.
	 * @param {Number} position - The absolute position of the item.
	 * @protected
	 */
	Lazy.prototype.load = function(position) {
		var $item = this._core.$stage.children().eq(position),
			$elements = $item && $item.find('.owl-lazy');

		if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
			return;
		}

		$elements.each($.proxy(function(index, element) {
			var $element = $(element), image,
				url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');

			this._core.trigger('load', { element: $element, url: url }, 'lazy');

			if ($element.is('img')) {
				$element.one('load.owl.lazy', $.proxy(function() {
					$element.css('opacity', 1);
					this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
				}, this)).attr('src', url);
			} else {
				image = new Image();
				image.onload = $.proxy(function() {
					$element.css({
						'background-image': 'url("' + url + '")',
						'opacity': '1'
					});
					this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
				}, this);
				image.src = url;
			}
		}, this));

		this._loaded.push($item.get(0));
	};

	/**
	 * Destroys the plugin.
	 * @public
	 */
	Lazy.prototype.destroy = function() {
		var handler, property;

		for (handler in this.handlers) {
			this._core.$element.off(handler, this.handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;

})(window.Zepto || window.jQuery, window, document);

/**
 * AutoHeight Plugin
 * @version 2.1.0
 * @author Bartosz Wojciechowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	/**
	 * Creates the auto height plugin.
	 * @class The Auto Height Plugin
	 * @param {Owl} carousel - The Owl Carousel
	 */
	var AutoHeight = function(carousel) {
		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * All event handlers.
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'initialized.owl.carousel refreshed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.autoHeight) {
					this.update();
				}
			}, this),
			'changed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.autoHeight && e.property.name == 'position'){
					this.update();
				}
			}, this),
			'loaded.owl.lazy': $.proxy(function(e) {
				if (e.namespace && this._core.settings.autoHeight
					&& e.element.closest('.' + this._core.settings.itemClass).index() === this._core.current()) {
					this.update();
				}
			}, this)
		};

		// set default options
		this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);

		// register event handlers
		this._core.$element.on(this._handlers);
	};

	/**
	 * Default options.
	 * @public
	 */
	AutoHeight.Defaults = {
		autoHeight: false,
		autoHeightClass: 'owl-height'
	};

	/**
	 * Updates the view.
	 */
	AutoHeight.prototype.update = function() {
		var start = this._core._current,
			end = start + this._core.settings.items,
			visible = this._core.$stage.children().toArray().slice(start, end),
			heights = [],
			maxheight = 0;

		$.each(visible, function(index, item) {
			heights.push($(item).height());
		});

		maxheight = Math.max.apply(null, heights);

		this._core.$stage.parent()
			.height(maxheight)
			.addClass(this._core.settings.autoHeightClass);
	};

	AutoHeight.prototype.destroy = function() {
		var handler, property;

		for (handler in this._handlers) {
			this._core.$element.off(handler, this._handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;

})(window.Zepto || window.jQuery, window, document);

/**
 * Video Plugin
 * @version 2.1.0
 * @author Bartosz Wojciechowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	/**
	 * Creates the video plugin.
	 * @class The Video Plugin
	 * @param {Owl} carousel - The Owl Carousel
	 */
	var Video = function(carousel) {
		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * Cache all video URLs.
		 * @protected
		 * @type {Object}
		 */
		this._videos = {};

		/**
		 * Current playing item.
		 * @protected
		 * @type {jQuery}
		 */
		this._playing = null;

		/**
		 * All event handlers.
		 * @todo The cloned content removale is too late
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'initialized.owl.carousel': $.proxy(function(e) {
				if (e.namespace) {
					this._core.register({ type: 'state', name: 'playing', tags: [ 'interacting' ] });
				}
			}, this),
			'resize.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.video && this.isInFullScreen()) {
					e.preventDefault();
				}
			}, this),
			'refreshed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.is('resizing')) {
					this._core.$stage.find('.cloned .owl-video-frame').remove();
				}
			}, this),
			'changed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && e.property.name === 'position' && this._playing) {
					this.stop();
				}
			}, this),
			'prepared.owl.carousel': $.proxy(function(e) {
				if (!e.namespace) {
					return;
				}

				var $element = $(e.content).find('.owl-video');

				if ($element.length) {
					$element.css('display', 'none');
					this.fetch($element, $(e.content));
				}
			}, this)
		};

		// set default options
		this._core.options = $.extend({}, Video.Defaults, this._core.options);

		// register event handlers
		this._core.$element.on(this._handlers);

		this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
			this.play(e);
		}, this));
	};

	/**
	 * Default options.
	 * @public
	 */
	Video.Defaults = {
		video: false,
		videoHeight: false,
		videoWidth: false
	};

	/**
	 * Gets the video ID and the type (YouTube/Vimeo/vzaar only).
	 * @protected
	 * @param {jQuery} target - The target containing the video data.
	 * @param {jQuery} item - The item containing the video.
	 */
	Video.prototype.fetch = function(target, item) {
			var type = (function() {
					if (target.attr('data-vimeo-id')) {
						return 'vimeo';
					} else if (target.attr('data-vzaar-id')) {
						return 'vzaar'
					} else {
						return 'youtube';
					}
				})(),
				id = target.attr('data-vimeo-id') || target.attr('data-youtube-id') || target.attr('data-vzaar-id'),
				width = target.attr('data-width') || this._core.settings.videoWidth,
				height = target.attr('data-height') || this._core.settings.videoHeight,
				url = target.attr('href');

		if (url) {

			/*
					Parses the id's out of the following urls (and probably more):
					https://www.youtube.com/watch?v=:id
					https://youtu.be/:id
					https://vimeo.com/:id
					https://vimeo.com/channels/:channel/:id
					https://vimeo.com/groups/:group/videos/:id
					https://app.vzaar.com/videos/:id

					Visual example: https://regexper.com/#(http%3A%7Chttps%3A%7C)%5C%2F%5C%2F(player.%7Cwww.%7Capp.)%3F(vimeo%5C.com%7Cyoutu(be%5C.com%7C%5C.be%7Cbe%5C.googleapis%5C.com)%7Cvzaar%5C.com)%5C%2F(video%5C%2F%7Cvideos%5C%2F%7Cembed%5C%2F%7Cchannels%5C%2F.%2B%5C%2F%7Cgroups%5C%2F.%2B%5C%2F%7Cwatch%5C%3Fv%3D%7Cv%5C%2F)%3F(%5BA-Za-z0-9._%25-%5D*)(%5C%26%5CS%2B)%3F
			*/

			id = url.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);

			if (id[3].indexOf('youtu') > -1) {
				type = 'youtube';
			} else if (id[3].indexOf('vimeo') > -1) {
				type = 'vimeo';
			} else if (id[3].indexOf('vzaar') > -1) {
				type = 'vzaar';
			} else {
				throw new Error('Video URL not supported.');
			}
			id = id[6];
		} else {
			throw new Error('Missing video URL.');
		}

		this._videos[url] = {
			type: type,
			id: id,
			width: width,
			height: height
		};

		item.attr('data-video', url);

		this.thumbnail(target, this._videos[url]);
	};

	/**
	 * Creates video thumbnail.
	 * @protected
	 * @param {jQuery} target - The target containing the video data.
	 * @param {Object} info - The video info object.
	 * @see `fetch`
	 */
	Video.prototype.thumbnail = function(target, video) {
		var tnLink,
			icon,
			path,
			dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '',
			customTn = target.find('img'),
			srcType = 'src',
			lazyClass = '',
			settings = this._core.settings,
			create = function(path) {
				icon = '<div class="owl-video-play-icon"></div>';

				if (settings.lazyLoad) {
					tnLink = '<div class="owl-video-tn ' + lazyClass + '" ' + srcType + '="' + path + '"></div>';
				} else {
					tnLink = '<div class="owl-video-tn" style="opacity:1;background-image:url(' + path + ')"></div>';
				}
				target.after(tnLink);
				target.after(icon);
			};

		// wrap video content into owl-video-wrapper div
		target.wrap('<div class="owl-video-wrapper"' + dimensions + '></div>');

		if (this._core.settings.lazyLoad) {
			srcType = 'data-src';
			lazyClass = 'owl-lazy';
		}

		// custom thumbnail
		if (customTn.length) {
			create(customTn.attr(srcType));
			customTn.remove();
			return false;
		}

		if (video.type === 'youtube') {
			path = "//img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
			create(path);
		} else if (video.type === 'vimeo') {
			$.ajax({
				type: 'GET',
				url: '//vimeo.com/api/v2/video/' + video.id + '.json',
				jsonp: 'callback',
				dataType: 'jsonp',
				success: function(data) {
					path = data[0].thumbnail_large;
					create(path);
				}
			});
		} else if (video.type === 'vzaar') {
			$.ajax({
				type: 'GET',
				url: '//vzaar.com/api/videos/' + video.id + '.json',
				jsonp: 'callback',
				dataType: 'jsonp',
				success: function(data) {
					path = data.framegrab_url;
					create(path);
				}
			});
		}
	};

	/**
	 * Stops the current video.
	 * @public
	 */
	Video.prototype.stop = function() {
		this._core.trigger('stop', null, 'video');
		this._playing.find('.owl-video-frame').remove();
		this._playing.removeClass('owl-video-playing');
		this._playing = null;
		this._core.leave('playing');
		this._core.trigger('stopped', null, 'video');
	};

	/**
	 * Starts the current video.
	 * @public
	 * @param {Event} event - The event arguments.
	 */
	Video.prototype.play = function(event) {
		var target = $(event.target),
			item = target.closest('.' + this._core.settings.itemClass),
			video = this._videos[item.attr('data-video')],
			width = video.width || '100%',
			height = video.height || this._core.$stage.height(),
			html;

		if (this._playing) {
			return;
		}

		this._core.enter('playing');
		this._core.trigger('play', null, 'video');

		item = this._core.items(this._core.relative(item.index()));

		this._core.reset(item.index());

		if (video.type === 'youtube') {
			html = '<iframe width="' + width + '" height="' + height + '" src="//www.youtube.com/embed/' +
				video.id + '?autoplay=1&rel=0&v=' + video.id + '" frameborder="0" allowfullscreen></iframe>';
		} else if (video.type === 'vimeo') {
			html = '<iframe src="//player.vimeo.com/video/' + video.id +
				'?autoplay=1" width="' + width + '" height="' + height +
				'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
		} else if (video.type === 'vzaar') {
			html = '<iframe frameborder="0"' + 'height="' + height + '"' + 'width="' + width +
				'" allowfullscreen mozallowfullscreen webkitAllowFullScreen ' +
				'src="//view.vzaar.com/' + video.id + '/player?autoplay=true"></iframe>';
		}

		$('<div class="owl-video-frame">' + html + '</div>').insertAfter(item.find('.owl-video'));

		this._playing = item.addClass('owl-video-playing');
	};

	/**
	 * Checks whether an video is currently in full screen mode or not.
	 * @todo Bad style because looks like a readonly method but changes members.
	 * @protected
	 * @returns {Boolean}
	 */
	Video.prototype.isInFullScreen = function() {
		var element = document.fullscreenElement || document.mozFullScreenElement ||
				document.webkitFullscreenElement;

		return element && $(element).parent().hasClass('owl-video-frame');
	};

	/**
	 * Destroys the plugin.
	 */
	Video.prototype.destroy = function() {
		var handler, property;

		this._core.$element.off('click.owl.video');

		for (handler in this._handlers) {
			this._core.$element.off(handler, this._handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.Video = Video;

})(window.Zepto || window.jQuery, window, document);

/**
 * Animate Plugin
 * @version 2.1.0
 * @author Bartosz Wojciechowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	/**
	 * Creates the animate plugin.
	 * @class The Navigation Plugin
	 * @param {Owl} scope - The Owl Carousel
	 */
	var Animate = function(scope) {
		this.core = scope;
		this.core.options = $.extend({}, Animate.Defaults, this.core.options);
		this.swapping = true;
		this.previous = undefined;
		this.next = undefined;

		this.handlers = {
			'change.owl.carousel': $.proxy(function(e) {
				if (e.namespace && e.property.name == 'position') {
					this.previous = this.core.current();
					this.next = e.property.value;
				}
			}, this),
			'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
				if (e.namespace) {
					this.swapping = e.type == 'translated';
				}
			}, this),
			'translate.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
					this.swap();
				}
			}, this)
		};

		this.core.$element.on(this.handlers);
	};

	/**
	 * Default options.
	 * @public
	 */
	Animate.Defaults = {
		animateOut: false,
		animateIn: false
	};

	/**
	 * Toggles the animation classes whenever an translations starts.
	 * @protected
	 * @returns {Boolean|undefined}
	 */
	Animate.prototype.swap = function() {

		if (this.core.settings.items !== 1) {
			return;
		}

		if (!$.support.animation || !$.support.transition) {
			return;
		}

		this.core.speed(0);

		var left,
			clear = $.proxy(this.clear, this),
			previous = this.core.$stage.children().eq(this.previous),
			next = this.core.$stage.children().eq(this.next),
			incoming = this.core.settings.animateIn,
			outgoing = this.core.settings.animateOut;

		if (this.core.current() === this.previous) {
			return;
		}

		if (outgoing) {
			left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
			previous.one($.support.animation.end, clear)
				.css( { 'left': left + 'px' } )
				.addClass('animated owl-animated-out')
				.addClass(outgoing);
		}

		if (incoming) {
			next.one($.support.animation.end, clear)
				.addClass('animated owl-animated-in')
				.addClass(incoming);
		}
	};

	Animate.prototype.clear = function(e) {
		$(e.target).css( { 'left': '' } )
			.removeClass('animated owl-animated-out owl-animated-in')
			.removeClass(this.core.settings.animateIn)
			.removeClass(this.core.settings.animateOut);
		this.core.onTransitionEnd();
	};

	/**
	 * Destroys the plugin.
	 * @public
	 */
	Animate.prototype.destroy = function() {
		var handler, property;

		for (handler in this.handlers) {
			this.core.$element.off(handler, this.handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;

})(window.Zepto || window.jQuery, window, document);

/**
 * Autoplay Plugin
 * @version 2.1.0
 * @author Bartosz Wojciechowski
 * @author Artus Kolanowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	/**
	 * Creates the autoplay plugin.
	 * @class The Autoplay Plugin
	 * @param {Owl} scope - The Owl Carousel
	 */
	var Autoplay = function(carousel) {
		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * The autoplay timeout.
		 * @type {Timeout}
		 */
		this._timeout = null;

		/**
		 * Indicates whenever the autoplay is paused.
		 * @type {Boolean}
		 */
		this._paused = false;

		/**
		 * All event handlers.
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'changed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && e.property.name === 'settings') {
					if (this._core.settings.autoplay) {
						this.play();
					} else {
						this.stop();
					}
				} else if (e.namespace && e.property.name === 'position') {
					//console.log('play?', e);
					if (this._core.settings.autoplay) {
						this._setAutoPlayInterval();
					}
				}
			}, this),
			'initialized.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.autoplay) {
					this.play();
				}
			}, this),
			'play.owl.autoplay': $.proxy(function(e, t, s) {
				if (e.namespace) {
					this.play(t, s);
				}
			}, this),
			'stop.owl.autoplay': $.proxy(function(e) {
				if (e.namespace) {
					this.stop();
				}
			}, this),
			'mouseover.owl.autoplay': $.proxy(function() {
				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
					this.pause();
				}
			}, this),
			'mouseleave.owl.autoplay': $.proxy(function() {
				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
					this.play();
				}
			}, this),
			'touchstart.owl.core': $.proxy(function() {
				if (this._core.settings.autoplayHoverPause && this._core.is('rotating')) {
					this.pause();
				}
			}, this),
			'touchend.owl.core': $.proxy(function() {
				if (this._core.settings.autoplayHoverPause) {
					this.play();
				}
			}, this)
		};

		// register event handlers
		this._core.$element.on(this._handlers);

		// set default options
		this._core.options = $.extend({}, Autoplay.Defaults, this._core.options);
	};

	/**
	 * Default options.
	 * @public
	 */
	Autoplay.Defaults = {
		autoplay: false,
		autoplayTimeout: 5000,
		autoplayHoverPause: false,
		autoplaySpeed: false
	};

	/**
	 * Starts the autoplay.
	 * @public
	 * @param {Number} [timeout] - The interval before the next animation starts.
	 * @param {Number} [speed] - The animation speed for the animations.
	 */
	Autoplay.prototype.play = function(timeout, speed) {
		this._paused = false;

		if (this._core.is('rotating')) {
			return;
		}

		this._core.enter('rotating');

		this._setAutoPlayInterval();
	};

	/**
	 * Gets a new timeout
	 * @private
	 * @param {Number} [timeout] - The interval before the next animation starts.
	 * @param {Number} [speed] - The animation speed for the animations.
	 * @return {Timeout}
	 */
	Autoplay.prototype._getNextTimeout = function(timeout, speed) {
		if ( this._timeout ) {
			window.clearTimeout(this._timeout);
		}
		return window.setTimeout($.proxy(function() {
			if (this._paused || this._core.is('busy') || this._core.is('interacting') || document.hidden) {
				return;
			}
			this._core.next(speed || this._core.settings.autoplaySpeed);
		}, this), timeout || this._core.settings.autoplayTimeout);
	};

	/**
	 * Sets autoplay in motion.
	 * @private
	 */
	Autoplay.prototype._setAutoPlayInterval = function() {
		this._timeout = this._getNextTimeout();
	};

	/**
	 * Stops the autoplay.
	 * @public
	 */
	Autoplay.prototype.stop = function() {
		if (!this._core.is('rotating')) {
			return;
		}

		window.clearTimeout(this._timeout);
		this._core.leave('rotating');
	};

	/**
	 * Stops the autoplay.
	 * @public
	 */
	Autoplay.prototype.pause = function() {
		if (!this._core.is('rotating')) {
			return;
		}

		this._paused = true;
	};

	/**
	 * Destroys the plugin.
	 */
	Autoplay.prototype.destroy = function() {
		var handler, property;

		this.stop();

		for (handler in this._handlers) {
			this._core.$element.off(handler, this._handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;

})(window.Zepto || window.jQuery, window, document);

/**
 * Navigation Plugin
 * @version 2.1.0
 * @author Artus Kolanowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {
	'use strict';

	/**
	 * Creates the navigation plugin.
	 * @class The Navigation Plugin
	 * @param {Owl} carousel - The Owl Carousel.
	 */
	var Navigation = function(carousel) {
		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * Indicates whether the plugin is initialized or not.
		 * @protected
		 * @type {Boolean}
		 */
		this._initialized = false;

		/**
		 * The current paging indexes.
		 * @protected
		 * @type {Array}
		 */
		this._pages = [];

		/**
		 * All DOM elements of the user interface.
		 * @protected
		 * @type {Object}
		 */
		this._controls = {};

		/**
		 * Markup for an indicator.
		 * @protected
		 * @type {Array.<String>}
		 */
		this._templates = [];

		/**
		 * The carousel element.
		 * @type {jQuery}
		 */
		this.$element = this._core.$element;

		/**
		 * Overridden methods of the carousel.
		 * @protected
		 * @type {Object}
		 */
		this._overrides = {
			next: this._core.next,
			prev: this._core.prev,
			to: this._core.to
		};

		/**
		 * All event handlers.
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'prepared.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.dotsData) {
					this._templates.push('<div class="' + this._core.settings.dotClass + '">' +
						$(e.content).find('[data-dot]').addBack('[data-dot]').attr('data-dot') + '</div>');
				}
			}, this),
			'added.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.dotsData) {
					this._templates.splice(e.position, 0, this._templates.pop());
				}
			}, this),
			'remove.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.dotsData) {
					this._templates.splice(e.position, 1);
				}
			}, this),
			'changed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && e.property.name == 'position') {
					this.draw();
				}
			}, this),
			'initialized.owl.carousel': $.proxy(function(e) {
				if (e.namespace && !this._initialized) {
					this._core.trigger('initialize', null, 'navigation');
					this.initialize();
					this.update();
					this.draw();
					this._initialized = true;
					this._core.trigger('initialized', null, 'navigation');
				}
			}, this),
			'refreshed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._initialized) {
					this._core.trigger('refresh', null, 'navigation');
					this.update();
					this.draw();
					this._core.trigger('refreshed', null, 'navigation');
				}
			}, this)
		};

		// set default options
		this._core.options = $.extend({}, Navigation.Defaults, this._core.options);

		// register event handlers
		this.$element.on(this._handlers);
	};

	/**
	 * Default options.
	 * @public
	 * @todo Rename `slideBy` to `navBy`
	 */
	Navigation.Defaults = {
		nav: false,
		navText: [ 'prev', 'next' ],
		navSpeed: false,
		navElement: 'div',
		navContainer: false,
		navContainerClass: 'owl-nav',
		navClass: [ 'owl-prev', 'owl-next' ],
		slideBy: 1,
		dotClass: 'owl-dot',
		dotsClass: 'owl-dots',
		dots: true,
		dotsEach: false,
		dotsData: false,
		dotsSpeed: false,
		dotsContainer: false
	};

	/**
	 * Initializes the layout of the plugin and extends the carousel.
	 * @protected
	 */
	Navigation.prototype.initialize = function() {
		var override,
			settings = this._core.settings;

		// create DOM structure for relative navigation
		this._controls.$relative = (settings.navContainer ? $(settings.navContainer)
			: $('<div>').addClass(settings.navContainerClass).appendTo(this.$element)).addClass('disabled');

		this._controls.$previous = $('<' + settings.navElement + '>')
			.addClass(settings.navClass[0])
			.html(settings.navText[0])
			.prependTo(this._controls.$relative)
			.on('click', $.proxy(function(e) {
				this.prev(settings.navSpeed);
			}, this));
		this._controls.$next = $('<' + settings.navElement + '>')
			.addClass(settings.navClass[1])
			.html(settings.navText[1])
			.appendTo(this._controls.$relative)
			.on('click', $.proxy(function(e) {
				this.next(settings.navSpeed);
			}, this));

		// create DOM structure for absolute navigation
		if (!settings.dotsData) {
			this._templates = [ $('<div>')
				.addClass(settings.dotClass)
				.append($('<span>'))
				.prop('outerHTML') ];
		}

		this._controls.$absolute = (settings.dotsContainer ? $(settings.dotsContainer)
			: $('<div>').addClass(settings.dotsClass).appendTo(this.$element)).addClass('disabled');

		this._controls.$absolute.on('click', 'div', $.proxy(function(e) {
			var index = $(e.target).parent().is(this._controls.$absolute)
				? $(e.target).index() : $(e.target).parent().index();

			e.preventDefault();

			this.to(index, settings.dotsSpeed);
		}, this));

		// override public methods of the carousel
		for (override in this._overrides) {
			this._core[override] = $.proxy(this[override], this);
		}
	};

	/**
	 * Destroys the plugin.
	 * @protected
	 */
	Navigation.prototype.destroy = function() {
		var handler, control, property, override;

		for (handler in this._handlers) {
			this.$element.off(handler, this._handlers[handler]);
		}
		for (control in this._controls) {
			this._controls[control].remove();
		}
		for (override in this.overides) {
			this._core[override] = this._overrides[override];
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	/**
	 * Updates the internal state.
	 * @protected
	 */
	Navigation.prototype.update = function() {
		var i, j, k,
			lower = this._core.clones().length / 2,
			upper = lower + this._core.items().length,
			maximum = this._core.maximum(true),
			settings = this._core.settings,
			size = settings.center || settings.autoWidth || settings.dotsData
				? 1 : settings.dotsEach || settings.items;

		if (settings.slideBy !== 'page') {
			settings.slideBy = Math.min(settings.slideBy, settings.items);
		}

		if (settings.dots || settings.slideBy == 'page') {
			this._pages = [];

			for (i = lower, j = 0, k = 0; i < upper; i++) {
				if (j >= size || j === 0) {
					this._pages.push({
						start: Math.min(maximum, i - lower),
						end: i - lower + size - 1
					});
					if (Math.min(maximum, i - lower) === maximum) {
						break;
					}
					j = 0, ++k;
				}
				j += this._core.mergers(this._core.relative(i));
			}
		}
	};

	/**
	 * Draws the user interface.
	 * @todo The option `dotsData` wont work.
	 * @protected
	 */
	Navigation.prototype.draw = function() {
		var difference,
			settings = this._core.settings,
			disabled = this._core.items().length <= settings.items,
			index = this._core.relative(this._core.current()),
			loop = settings.loop || settings.rewind;

		this._controls.$relative.toggleClass('disabled', !settings.nav || disabled);

		if (settings.nav) {
			this._controls.$previous.toggleClass('disabled', !loop && index <= this._core.minimum(true));
			this._controls.$next.toggleClass('disabled', !loop && index >= this._core.maximum(true));
		}

		this._controls.$absolute.toggleClass('disabled', !settings.dots || disabled);

		if (settings.dots) {
			difference = this._pages.length - this._controls.$absolute.children().length;

			if (settings.dotsData && difference !== 0) {
				this._controls.$absolute.html(this._templates.join(''));
			} else if (difference > 0) {
				this._controls.$absolute.append(new Array(difference + 1).join(this._templates[0]));
			} else if (difference < 0) {
				this._controls.$absolute.children().slice(difference).remove();
			}

			this._controls.$absolute.find('.active').removeClass('active');
			this._controls.$absolute.children().eq($.inArray(this.current(), this._pages)).addClass('active');
		}
	};

	/**
	 * Extends event data.
	 * @protected
	 * @param {Event} event - The event object which gets thrown.
	 */
	Navigation.prototype.onTrigger = function(event) {
		var settings = this._core.settings;

		event.page = {
			index: $.inArray(this.current(), this._pages),
			count: this._pages.length,
			size: settings && (settings.center || settings.autoWidth || settings.dotsData
				? 1 : settings.dotsEach || settings.items)
		};
	};

	/**
	 * Gets the current page position of the carousel.
	 * @protected
	 * @returns {Number}
	 */
	Navigation.prototype.current = function() {
		var current = this._core.relative(this._core.current());
		return $.grep(this._pages, $.proxy(function(page, index) {
			return page.start <= current && page.end >= current;
		}, this)).pop();
	};

	/**
	 * Gets the current succesor/predecessor position.
	 * @protected
	 * @returns {Number}
	 */
	Navigation.prototype.getPosition = function(successor) {
		var position, length,
			settings = this._core.settings;

		if (settings.slideBy == 'page') {
			position = $.inArray(this.current(), this._pages);
			length = this._pages.length;
			successor ? ++position : --position;
			position = this._pages[((position % length) + length) % length].start;
		} else {
			position = this._core.relative(this._core.current());
			length = this._core.items().length;
			successor ? position += settings.slideBy : position -= settings.slideBy;
		}

		return position;
	};

	/**
	 * Slides to the next item or page.
	 * @public
	 * @param {Number} [speed=false] - The time in milliseconds for the transition.
	 */
	Navigation.prototype.next = function(speed) {
		$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
	};

	/**
	 * Slides to the previous item or page.
	 * @public
	 * @param {Number} [speed=false] - The time in milliseconds for the transition.
	 */
	Navigation.prototype.prev = function(speed) {
		$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
	};

	/**
	 * Slides to the specified item or page.
	 * @public
	 * @param {Number} position - The position of the item or page.
	 * @param {Number} [speed] - The time in milliseconds for the transition.
	 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
	 */
	Navigation.prototype.to = function(position, speed, standard) {
		var length;

		if (!standard && this._pages.length) {
			length = this._pages.length;
			$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
		} else {
			$.proxy(this._overrides.to, this._core)(position, speed);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;

})(window.Zepto || window.jQuery, window, document);

/**
 * Hash Plugin
 * @version 2.1.0
 * @author Artus Kolanowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {
	'use strict';

	/**
	 * Creates the hash plugin.
	 * @class The Hash Plugin
	 * @param {Owl} carousel - The Owl Carousel
	 */
	var Hash = function(carousel) {
		/**
		 * Reference to the core.
		 * @protected
		 * @type {Owl}
		 */
		this._core = carousel;

		/**
		 * Hash index for the items.
		 * @protected
		 * @type {Object}
		 */
		this._hashes = {};

		/**
		 * The carousel element.
		 * @type {jQuery}
		 */
		this.$element = this._core.$element;

		/**
		 * All event handlers.
		 * @protected
		 * @type {Object}
		 */
		this._handlers = {
			'initialized.owl.carousel': $.proxy(function(e) {
				if (e.namespace && this._core.settings.startPosition === 'URLHash') {
					$(window).trigger('hashchange.owl.navigation');
				}
			}, this),
			'prepared.owl.carousel': $.proxy(function(e) {
				if (e.namespace) {
					var hash = $(e.content).find('[data-hash]').addBack('[data-hash]').attr('data-hash');

					if (!hash) {
						return;
					}

					this._hashes[hash] = e.content;
				}
			}, this),
			'changed.owl.carousel': $.proxy(function(e) {
				if (e.namespace && e.property.name === 'position') {
					var current = this._core.items(this._core.relative(this._core.current())),
						hash = $.map(this._hashes, function(item, hash) {
							return item === current ? hash : null;
						}).join();

					if (!hash || window.location.hash.slice(1) === hash) {
						return;
					}

					window.location.hash = hash;
				}
			}, this)
		};

		// set default options
		this._core.options = $.extend({}, Hash.Defaults, this._core.options);

		// register the event handlers
		this.$element.on(this._handlers);

		// register event listener for hash navigation
		$(window).on('hashchange.owl.navigation', $.proxy(function(e) {
			var hash = window.location.hash.substring(1),
				items = this._core.$stage.children(),
				position = this._hashes[hash] && items.index(this._hashes[hash]);

			if (position === undefined || position === this._core.current()) {
				return;
			}

			this._core.to(this._core.relative(position), false, true);
		}, this));
	};

	/**
	 * Default options.
	 * @public
	 */
	Hash.Defaults = {
		URLhashListener: false
	};

	/**
	 * Destroys the plugin.
	 * @public
	 */
	Hash.prototype.destroy = function() {
		var handler, property;

		$(window).off('hashchange.owl.navigation');

		for (handler in this._handlers) {
			this._core.$element.off(handler, this._handlers[handler]);
		}
		for (property in Object.getOwnPropertyNames(this)) {
			typeof this[property] != 'function' && (this[property] = null);
		}
	};

	$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;

})(window.Zepto || window.jQuery, window, document);

/**
 * Support Plugin
 *
 * @version 2.1.0
 * @author Vivid Planet Software GmbH
 * @author Artus Kolanowski
 * @author David Deutsch
 * @license The MIT License (MIT)
 */
;(function($, window, document, undefined) {

	var style = $('<support>').get(0).style,
		prefixes = 'Webkit Moz O ms'.split(' '),
		events = {
			transition: {
				end: {
					WebkitTransition: 'webkitTransitionEnd',
					MozTransition: 'transitionend',
					OTransition: 'oTransitionEnd',
					transition: 'transitionend'
				}
			},
			animation: {
				end: {
					WebkitAnimation: 'webkitAnimationEnd',
					MozAnimation: 'animationend',
					OAnimation: 'oAnimationEnd',
					animation: 'animationend'
				}
			}
		},
		tests = {
			csstransforms: function() {
				return !!test('transform');
			},
			csstransforms3d: function() {
				return !!test('perspective');
			},
			csstransitions: function() {
				return !!test('transition');
			},
			cssanimations: function() {
				return !!test('animation');
			}
		};

	function test(property, prefixed) {
		var result = false,
			upper = property.charAt(0).toUpperCase() + property.slice(1);

		$.each((property + ' ' + prefixes.join(upper + ' ') + upper).split(' '), function(i, property) {
			if (style[property] !== undefined) {
				result = prefixed ? property : true;
				return false;
			}
		});

		return result;
	}

	function prefixed(property) {
		return test(property, true);
	}

	if (tests.csstransitions()) {
		/* jshint -W053 */
		$.support.transition = new String(prefixed('transition'))
		$.support.transition.end = events.transition.end[ $.support.transition ];
	}

	if (tests.cssanimations()) {
		/* jshint -W053 */
		$.support.animation = new String(prefixed('animation'))
		$.support.animation.end = events.animation.end[ $.support.animation ];
	}

	if (tests.csstransforms()) {
		/* jshint -W053 */
		$.support.transform = new String(prefixed('transform'));
		$.support.transform3d = tests.csstransforms3d();
	}

})(window.Zepto || window.jQuery, window, document);
;
function SwapParkingBannerAndFormAndHideAlert() {
    if ($(window).width() <= 730) {
        $('.header-alert').addClass('hide-on-mobile');
        $('.parking-form-content').insertBefore($('.parking-header-content'));
        setupDatePickers();
    } else {
        $('.header-alert').removeClass('hide-on-mobile');
        $('.parking-header-content').insertBefore($('.parking-form-content'));
        setupDatePickers();
    }
}

$(document).ready(function () {
    SwapParkingBannerAndFormAndHideAlert();
    $(window).on('resize', function () {
        SwapParkingBannerAndFormAndHideAlert();
    });
});;
/*
 Copyright (C) Federico Zivolo 2018
 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',n=e.nodeName;if('BODY'===n||'HTML'===n){var i=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||i;return r[o]}return e[o]}function f(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],n=l(t,'top'),i=l(t,'left'),r=o?-1:1;return e.top+=n*r,e.bottom+=n*r,e.left+=i*r,e.right+=i*r,e}function m(e,t){var o='x'===t?'Left':'Top',n='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+n+'Width'],10)}function h(e,t,o,n){return $(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],r(10)?o['offset'+e]+n['margin'+('Height'===e?'Top':'Left')]+n['margin'+('Height'===e?'Bottom':'Right')]:0)}function c(){var e=document.body,t=document.documentElement,o=r(10)&&getComputedStyle(t);return{height:h('Height',e,t,o),width:h('Width',e,t,o)}}function g(e){return le({},e,{right:e.left+e.width,bottom:e.top+e.height})}function u(e){var o={};try{if(r(10)){o=e.getBoundingClientRect();var n=l(e,'top'),i=l(e,'left');o.top+=n,o.left+=i,o.bottom+=n,o.right+=i}else o=e.getBoundingClientRect()}catch(t){}var p={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},s='HTML'===e.nodeName?c():{},d=s.width||e.clientWidth||p.right-p.left,a=s.height||e.clientHeight||p.bottom-p.top,f=e.offsetWidth-d,h=e.offsetHeight-a;if(f||h){var u=t(e);f-=m(u,'x'),h-=m(u,'y'),p.width-=f,p.height-=h}return g(p)}function b(e,o){var i=2<arguments.length&&void 0!==arguments[2]&&arguments[2],p=r(10),s='HTML'===o.nodeName,d=u(e),a=u(o),l=n(e),m=t(o),h=parseFloat(m.borderTopWidth,10),c=parseFloat(m.borderLeftWidth,10);i&&'HTML'===o.nodeName&&(a.top=$(a.top,0),a.left=$(a.left,0));var b=g({top:d.top-a.top-h,left:d.left-a.left-c,width:d.width,height:d.height});if(b.marginTop=0,b.marginLeft=0,!p&&s){var y=parseFloat(m.marginTop,10),w=parseFloat(m.marginLeft,10);b.top-=h-y,b.bottom-=h-y,b.left-=c-w,b.right-=c-w,b.marginTop=y,b.marginLeft=w}return(p&&!i?o.contains(l):o===l&&'BODY'!==l.nodeName)&&(b=f(b,o)),b}function y(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=e.ownerDocument.documentElement,n=b(e,o),i=$(o.clientWidth,window.innerWidth||0),r=$(o.clientHeight,window.innerHeight||0),p=t?0:l(o),s=t?0:l(o,'left'),d={top:p-n.top+n.marginTop,left:s-n.left+n.marginLeft,width:i,height:r};return g(d)}function w(e){var n=e.nodeName;return'BODY'===n||'HTML'===n?!1:'fixed'===t(e,'position')||w(o(e))}function E(e){if(!e||!e.parentElement||r())return document.documentElement;for(var o=e.parentElement;o&&'none'===t(o,'transform');)o=o.parentElement;return o||document.documentElement}function v(e,t,i,r){var p=4<arguments.length&&void 0!==arguments[4]&&arguments[4],s={top:0,left:0},d=p?E(e):a(e,t);if('viewport'===r)s=y(d,p);else{var l;'scrollParent'===r?(l=n(o(t)),'BODY'===l.nodeName&&(l=e.ownerDocument.documentElement)):'window'===r?l=e.ownerDocument.documentElement:l=r;var f=b(l,d,p);if('HTML'===l.nodeName&&!w(d)){var m=c(),h=m.height,g=m.width;s.top+=f.top-f.marginTop,s.bottom=h+f.top,s.left+=f.left-f.marginLeft,s.right=g+f.left}else s=f}return s.left+=i,s.top+=i,s.right-=i,s.bottom-=i,s}function x(e){var t=e.width,o=e.height;return t*o}function O(e,t,o,n,i){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=v(o,n,r,i),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return le({key:e},s[e],{area:x(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,n=e.height;return t>=o.clientWidth&&n>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function L(e,t,o){var n=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,i=n?E(t):a(t,o);return b(o,i,n)}function S(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),n=parseFloat(t.marginLeft)+parseFloat(t.marginRight),i={width:e.offsetWidth+n,height:e.offsetHeight+o};return i}function T(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function C(e,t,o){o=o.split('-')[0];var n=S(e),i={width:n.width,height:n.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return i[p]=t[p]+t[d]/2-n[d]/2,i[s]=o===s?t[s]-n[a]:t[T(s)],i}function D(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function N(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var n=D(e,function(e){return e[t]===o});return e.indexOf(n)}function P(t,o,n){var i=void 0===n?t:t.slice(0,N(t,'name',n));return i.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var n=t['function']||t.fn;t.enabled&&e(n)&&(o.offsets.popper=g(o.offsets.popper),o.offsets.reference=g(o.offsets.reference),o=n(o,t))}),o}function k(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=O(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=C(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?'fixed':'absolute',e=P(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function W(e,t){return e.some(function(e){var o=e.name,n=e.enabled;return n&&o===t})}function B(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function H(){return this.state.isDestroyed=!0,W(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.position='',this.popper.style.top='',this.popper.style.left='',this.popper.style.right='',this.popper.style.bottom='',this.popper.style.willChange='',this.popper.style[B('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function A(e){var t=e.ownerDocument;return t?t.defaultView:window}function M(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||M(n(p.parentNode),t,o,i),i.push(p)}function I(e,t,o,i){o.updateBound=i,A(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return M(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function F(){this.state.eventsEnabled||(this.state=I(this.reference,this.options,this.state,this.scheduleUpdate))}function R(e,t){return A(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function U(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=R(this.reference,this.state))}function Y(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function j(e,t){Object.keys(t).forEach(function(o){var n='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&Y(t[o])&&(n='px'),e.style[o]=t[o]+n})}function K(e,t){Object.keys(t).forEach(function(o){var n=t[o];!1===n?e.removeAttribute(o):e.setAttribute(o,t[o])})}function q(e,t,o){var n=D(e,function(e){var o=e.name;return o===t}),i=!!n&&e.some(function(e){return e.name===o&&e.enabled&&e.order<n.order});if(!i){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return i}function G(e){return'end'===e?'start':'start'===e?'end':e}function z(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=me.indexOf(e),n=me.slice(o+1).concat(me.slice(0,o));return t?n.reverse():n}function V(e,t,o,n){var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+i[1],p=i[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=n;}var d=g(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?$(document.documentElement.clientHeight,window.innerHeight||0):$(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function _(e,t,o,n){var i=[0,0],r=-1!==['right','left'].indexOf(n),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(D(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,n){var i=(1===n?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,i,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,n){Y(o)&&(i[t]+=o*('-'===e[n-1]?-1:1))})}),i}function X(e,t){var o,n=t.offset,i=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=i.split('-')[0];return o=Y(+n)?[+n,0]:_(n,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var J=Math.min,Q=Math.round,Z=Math.floor,$=Math.max,ee='undefined'!=typeof window&&'undefined'!=typeof document,te=['Edge','Trident','Firefox'],oe=0,ne=0;ne<te.length;ne+=1)if(ee&&0<=navigator.userAgent.indexOf(te[ne])){oe=1;break}var i=ee&&window.Promise,ie=i?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},oe))}},re=ee&&!!(window.MSInputMethodContext&&document.documentMode),pe=ee&&/MSIE 10/.test(navigator.userAgent),se=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},de=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),ae=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},le=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var n in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},fe=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],me=fe.slice(3),he={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},ce=function(){function t(o,n){var i=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};se(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=ie(this.update.bind(this)),this.options=le({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(le({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){i.options.modifiers[e]=le({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return le({name:e},i.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return de(t,[{key:'update',value:function(){return k.call(this)}},{key:'destroy',value:function(){return H.call(this)}},{key:'enableEventListeners',value:function(){return F.call(this)}},{key:'disableEventListeners',value:function(){return U.call(this)}}]),t}();return ce.Utils=('undefined'==typeof window?global:window).PopperUtils,ce.placements=fe,ce.Defaults={placement:'bottom',positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],n=t.split('-')[1];if(n){var i=e.offsets,r=i.reference,p=i.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:ae({},d,r[d]),end:ae({},d,r[d]+r[a]-p[a])};e.offsets.popper=le({},p,l[n])}return e}},offset:{order:200,enabled:!0,fn:X,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||p(e.instance.popper);e.instance.reference===o&&(o=p(o));var n=B('transform'),i=e.instance.popper.style,r=i.top,s=i.left,d=i[n];i.top='',i.left='',i[n]='';var a=v(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);i.top=r,i.left=s,i[n]=d,t.boundaries=a;var l=t.priority,f=e.offsets.popper,m={primary:function(e){var o=f[e];return f[e]<a[e]&&!t.escapeWithReference&&(o=$(f[e],a[e])),ae({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=f[o];return f[e]>a[e]&&!t.escapeWithReference&&(n=J(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(n[d])&&(e.offsets.popper[d]=r(n[d])-o[a]),o[d]>r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!q(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[c]-u)),d[m]+u>s[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,y=t(e.instance.popper),w=parseFloat(y['margin'+f],10),E=parseFloat(y['border'+f+'Width'],10),v=b-e.offsets.popper[m]-w-E;return v=$(J(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,Q(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case he.FLIP:p=[n,i];break;case he.CLOCKWISE:p=z(n);break;case he.COUNTERCLOCKWISE:p=z(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)<f(l.right)||'top'===n&&f(a.bottom)>f(l.top)||'bottom'===n&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=G(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!q(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,n=t.y,i=e.offsets.popper,r=D(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==r&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===r?t.gpuAcceleration:r,l=p(e.instance.popper),f=u(l),m={position:i.position},h={left:Z(i.left),top:Q(i.top),bottom:Q(i.bottom),right:Z(i.right)},c='bottom'===o?'top':'bottom',g='right'===n?'left':'right',b=B('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==g?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[g]=0,m.willChange='transform';else{var y='bottom'==c?-1:1,w='right'==g?-1:1;m[c]=d*y,m[g]=s*w,m.willChange=c+', '+g}var E={"x-placement":e.placement};return e.attributes=le({},E,e.attributes),e.styles=le({},m,e.styles),e.arrowStyles=le({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return j(e.instance.popper,e.styles),K(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&j(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,n,i){var r=L(i,t,e,o.positionFixed),p=O(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),j(t,{position:o.positionFixed?'fixed':'absolute'}),o},gpuAcceleration:void 0}}},ce});
//# sourceMappingURL=popper.min.js.map
;
$(function () {
	var $carousels = $('[data-carousel]');
	initCarousels($carousels);

	document.addEventListener('tab-switch', function() {
		initCarousels($carousels, true);
	});

	function initCarousels($carousels, reInit) {
		$carousels.each(function () {
			const $carousel = $(this);
			if (reInit && $carousel.hasClass('slick-initialized'))
				$carousel.slick('unslick');
			$carousel.slick({
				centerMode: true,
				centerPadding: '8%',
				slidesToShow: 3,
				infinite: true,
				responsive: [
					{
						breakpoint: 650,
						settings: {
							slidesToShow: 1
						}
					}
				]
			});
		});
	}
});;
/*
 * Purl (A JavaScript URL parser) v2.3.1
 * Developed and maintanined by Mark Perkins, mark@allmarkedup.com
 * Source repository: https://github.com/allmarkedup/jQuery-URL-Parser
 * Licensed under an MIT-style license. See https://github.com/allmarkedup/jQuery-URL-Parser/blob/master/LICENSE for details.
 */

;(function(factory) {
    if (typeof define === 'function' && define.amd) {
        define(factory);
    } else {
        window.purl = factory();
    }
})(function() {

    var tag2attr = {
            a       : 'href',
            img     : 'src',
            form    : 'action',
            base    : 'href',
            script  : 'src',
            iframe  : 'src',
            link    : 'href',
            embed   : 'src',
            object  : 'data'
        },

        key = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'fragment'], // keys available to query

        aliases = { 'anchor' : 'fragment' }, // aliases for backwards compatability

        parser = {
            strict : /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,  //less intuitive, more accurate to the specs
            loose :  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ // more intuitive, fails on relative paths and deviates from specs
        },

        isint = /^[0-9]+$/;

    function parseUri( url, strictMode ) {
        var str = decodeURI( url ),
        res   = parser[ strictMode || false ? 'strict' : 'loose' ].exec( str ),
        uri = { attr : {}, param : {}, seg : {} },
        i   = 14;

        while ( i-- ) {
            uri.attr[ key[i] ] = res[i] || '';
        }

        // build query and fragment parameters
        uri.param['query'] = parseString(uri.attr['query']);
        uri.param['fragment'] = parseString(uri.attr['fragment']);

        // split path and fragement into segments
        uri.seg['path'] = uri.attr.path.replace(/^\/+|\/+$/g,'').split('/');
        uri.seg['fragment'] = uri.attr.fragment.replace(/^\/+|\/+$/g,'').split('/');

        // compile a 'base' domain attribute
        uri.attr['base'] = uri.attr.host ? (uri.attr.protocol ?  uri.attr.protocol+'://'+uri.attr.host : uri.attr.host) + (uri.attr.port ? ':'+uri.attr.port : '') : '';

        return uri;
    }

    function getAttrName( elm ) {
        var tn = elm.tagName;
        if ( typeof tn !== 'undefined' ) return tag2attr[tn.toLowerCase()];
        return tn;
    }

    function promote(parent, key) {
        if (parent[key].length === 0) return parent[key] = {};
        var t = {};
        for (var i in parent[key]) t[i] = parent[key][i];
        parent[key] = t;
        return t;
    }

    function parse(parts, parent, key, val) {
        var part = parts.shift();
        if (!part) {
            if (isArray(parent[key])) {
                parent[key].push(val);
            } else if ('object' == typeof parent[key]) {
                parent[key] = val;
            } else if ('undefined' == typeof parent[key]) {
                parent[key] = val;
            } else {
                parent[key] = [parent[key], val];
            }
        } else {
            var obj = parent[key] = parent[key] || [];
            if (']' == part) {
                if (isArray(obj)) {
                    if ('' !== val) obj.push(val);
                } else if ('object' == typeof obj) {
                    obj[keys(obj).length] = val;
                } else {
                    obj = parent[key] = [parent[key], val];
                }
            } else if (~part.indexOf(']')) {
                part = part.substr(0, part.length - 1);
                if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);
                parse(parts, obj, part, val);
                // key
            } else {
                if (!isint.test(part) && isArray(obj)) obj = promote(parent, key);
                parse(parts, obj, part, val);
            }
        }
    }

    function merge(parent, key, val) {
        if (~key.indexOf(']')) {
            var parts = key.split('[');
            parse(parts, parent, 'base', val);
        } else {
            if (!isint.test(key) && isArray(parent.base)) {
                var t = {};
                for (var k in parent.base) t[k] = parent.base[k];
                parent.base = t;
            }
            if (key !== '') {
                set(parent.base, key, val);
            }
        }
        return parent;
    }

    function parseString(str) {
        return reduce(String(str).split(/&|;/), function(ret, pair) {
            try {
                pair = decodeURIComponent(pair.replace(/\+/g, ' '));
            } catch(e) {
                // ignore
            }
            var eql = pair.indexOf('='),
                brace = lastBraceInKey(pair),
                key = pair.substr(0, brace || eql),
                val = pair.substr(brace || eql, pair.length);

            val = val.substr(val.indexOf('=') + 1, val.length);

            if (key === '') {
                key = pair;
                val = '';
            }

            return merge(ret, key, val);
        }, { base: {} }).base;
    }

    function set(obj, key, val) {
        var v = obj[key];
        if (typeof v === 'undefined') {
            obj[key] = val;
        } else if (isArray(v)) {
            v.push(val);
        } else {
            obj[key] = [v, val];
        }
    }

    function lastBraceInKey(str) {
        var len = str.length,
            brace,
            c;
        for (var i = 0; i < len; ++i) {
            c = str[i];
            if (']' == c) brace = false;
            if ('[' == c) brace = true;
            if ('=' == c && !brace) return i;
        }
    }

    function reduce(obj, accumulator){
        var i = 0,
            l = obj.length >> 0,
            curr = arguments[2];
        while (i < l) {
            if (i in obj) curr = accumulator.call(undefined, curr, obj[i], i, obj);
            ++i;
        }
        return curr;
    }

    function isArray(vArg) {
        return Object.prototype.toString.call(vArg) === "[object Array]";
    }

    function keys(obj) {
        var key_array = [];
        for ( var prop in obj ) {
            if ( obj.hasOwnProperty(prop) ) key_array.push(prop);
        }
        return key_array;
    }

    function purl( url, strictMode ) {
        if ( arguments.length === 1 && url === true ) {
            strictMode = true;
            url = undefined;
        }
        strictMode = strictMode || false;
        url = url || window.location.toString();

        return {

            data : parseUri(url, strictMode),

            // get various attributes from the URI
            attr : function( attr ) {
                attr = aliases[attr] || attr;
                return typeof attr !== 'undefined' ? this.data.attr[attr] : this.data.attr;
            },

            // return query string parameters
            param : function( param ) {
                return typeof param !== 'undefined' ? this.data.param.query[param] : this.data.param.query;
            },

            // return fragment parameters
            fparam : function( param ) {
                return typeof param !== 'undefined' ? this.data.param.fragment[param] : this.data.param.fragment;
            },

            // return path segments
            segment : function( seg ) {
                if ( typeof seg === 'undefined' ) {
                    return this.data.seg.path;
                } else {
                    seg = seg < 0 ? this.data.seg.path.length + seg : seg - 1; // negative segments count from the end
                    return this.data.seg.path[seg];
                }
            },

            // return fragment segments
            fsegment : function( seg ) {
                if ( typeof seg === 'undefined' ) {
                    return this.data.seg.fragment;
                } else {
                    seg = seg < 0 ? this.data.seg.fragment.length + seg : seg - 1; // negative segments count from the end
                    return this.data.seg.fragment[seg];
                }
            }

        };

    }
    
    purl.jQuery = function($){
        if ($ != null) {
            $.fn.url = function( strictMode ) {
                var url = '';
                if ( this.length ) {
                    url = $(this).attr( getAttrName(this[0]) ) || '';
                }
                return purl( url, strictMode );
            };

            $.url = purl;
        }
    };

    purl.jQuery(window.jQuery);

    return purl;

});
;
(function ($) {
    $(function() {
        $('.responsive-table').each(function () {
            initializeResponsiveTable($(this));
        });
    });
    
    $.fn.responsiveTable = function(options) {
        return this.each(function () {
            initializeResponsiveTable($(this));
        });
    }

    function initializeResponsiveTable($table) {
        $table.wrap("<div class=\"responsive-table__wrapper\"></div>")
              .removeAttr('cellspacing', '')
              .removeAttr('cellpadding', '')
              .removeAttr('bordercolor', '')
              .removeAttr('border', '');
    }
}(jQuery));;
$(function () {
	$('[data-scroller-target]').each(function() {
		var $dataScroller = $(this);
		$dataScroller.on('click', function (e) {
			e.preventDefault();
			$(window).trigger('scroller.scrolled');
			var $scrollerTarget = $('#' + $dataScroller.data('scrollerTarget'));
			$('html,body').animate({
				scrollTop: $scrollerTarget.offset().top
			});
		});
	});
});;
$(document).ready(function () {
	if ('objectFit' in document.documentElement.style === false) {
		$('body').addClass('no-object-fit');
	}

	var previousScrollTop = 0;
	var allowScrollPast = false;

	if ($('[data-scrolling-banners]').length > 0) {
		var scrollSteps = {
			'in': [
				{
					'banner': { 'opacity': 0, 'width': '200%', 'left': '-50%' },
					'text': { 'opacity': 0, 'transform': 'translateY(20px)' }
				},
				{
					'banner': { 'opacity': 1, 'width': '150%', 'left': '-25%' },
					'text': { 'opacity': 0, 'transform': 'translateY(20px)' }
				},
				{
					'banner': { 'opacity': 1, 'width': '100%', 'left': '0' },
					'text': { 'opacity': 0, 'transform': 'translateY(30px)' }
				}
			],
			'view': [
				{
					'banner': { 'opacity': 1, 'width': '100%', 'left': '0' },
					'text': { 'opacity': 1, 'transform': '' }
				}
			],
			'out': [
				{
					'banner': { 'opacity': 0, 'width': '200%', 'left': '-50%' },
					'text': { 'opacity': 0, 'transform': '' }
				}
			]
		}

		previousScrollTop = $(window).scrollTop();

		$(window).on('scroller.scrolled', function () {
			allowScrollPast = true;
		});

		$(window).on('scroll', $.throttle(function () {
			return scrollHandler();
		}, 100));

		setScrollStep($('[data-scrolling-banners]').find('.banner__link').first(), 'view', 0);
	}

	function scrollHandler() {
		var $banners = $('[data-scrolling-banners]');
		if ($(window).width() > 750) {
			if (allowScrollPast === false) {
				$banners.each(function () {
					var $banner = $(this);
					var scrollMin = Math.floor(getScrollMin($banner));
					var windowScrollTop = $(window).scrollTop();
					if (windowScrollTop > previousScrollTop) {
						if (windowScrollTop > scrollMin && !scrollDown($banner.find('.banner__link'))) {
							windowScrollTop = scrollMin;
							$(window).scrollTop(scrollMin);
						}
					}
					previousScrollTop = windowScrollTop;
				});
			}
		} else {
			$banners.each(function () {
				var $banner = $(this);
				resetAllBanners($banner.find('.banner__link'));
			});
		}
	}

	function resetAllBanners($allBanners) {
		$allBanners.find('.banner__image').css('opacity', '').css('width', '').css('left', '');
		$allBanners.find('.banner__content').css('opacity', '').css('transform', '');
		for (var i = 0; i < $allBanners.length; i++) {
			$.removeData($allBanners[i], 'scrollStep');
		}
	}

	function setScrollStep($banner, action, currentScrollStep) {
		var $activeBanner = $banner;
		if (typeof $activeBanner.data('scrollStep') === 'undefined') {
			var $allBanners = $banner.parent().find('.banner__link');
			resetAllBanners($allBanners);
		}

		var styles = scrollSteps[action][currentScrollStep];

		$activeBanner.find('.banner__image').css(styles['banner']);

		if ('objectFit' in document.documentElement.style === false) {
			var bannerWidth = $activeBanner.outerWidth();
			var bannerHeight = $activeBanner.outerHeight();
			var $bannerImage = $activeBanner.find('.banner__image');
			var imageWidth = $bannerImage.outerWidth();
			var imageHeight = $bannerImage.outerHeight();
			var fullWidthFactor = imageWidth / bannerWidth;
			var imageHeightAtFullWidth = imageHeight / fullWidthFactor;
			if (imageHeightAtFullWidth < bannerHeight) {
				var fullHeightFactor = bannerHeight / imageHeightAtFullWidth;
				var width = parseInt(styles['banner']['width'].replace('%', ''));
				if (width !== NaN) {
					width = width * fullHeightFactor;
					$activeBanner.find('.banner__image').css('width', width + '%');
				}
			}
		}

		$activeBanner.find('.banner__content').css(styles['text']);

		$activeBanner.data('action', action);
		$activeBanner.data('scrollStep', currentScrollStep);
	}

	function transitionToBanner($currentBanner, $nextBanner) {
		var currentScrollStep = 0;
		var action = 'out';
		var $banner = $currentBanner;
		setScrollStep($currentBanner, 'out', currentScrollStep++);
		var autoScroll = setInterval(function () {
			if (action == 'out') {
				if (currentScrollStep == scrollSteps['out'].length) {
					action = 'in';
					currentScrollStep = 0;
					$banner = $nextBanner;
				}
			} else if (action == 'in') {
				if (currentScrollStep == scrollSteps['in'].length) {
					action = 'view';
					currentScrollStep = 0;
					clearInterval(autoScroll);
				}
			}

			setScrollStep($banner, action, currentScrollStep++);
		}, 250);
	}

	function scrollDown($allBanners) {
		var currentBannerIndex = 0;
		for (var i = 0; i < $allBanners.length; i++) {
			if (typeof $.data($allBanners[i], 'scrollStep') !== 'undefined') {
				currentBannerIndex = i;
			}
		}

		var $currentBanner = $($allBanners[currentBannerIndex]);
		var currentScrollStep = $currentBanner.data('scrollStep');
		if (typeof currentScrollStep == 'undefined') {
			currentScrollStep = -1;
		}

		var action = $currentBanner.data('action');
		if (typeof action == 'undefined') {
			action = 'in';
		}

		currentScrollStep += 1;
		if (currentScrollStep == scrollSteps[action].length && action == 'view') {
			// transition to the next banner, unless this is the last one in which case we can release the user from this prison
			if (currentBannerIndex < $allBanners.length - 1) {
				transitionToBanner($currentBanner, $($allBanners[currentBannerIndex + 1]));
				return false;
			} else {
				return true;
			}
		} else {
			// user is trying to scroll during animation - MUST NOT LET THEM THEY MUST SEE THESE IMPORTANT BANNERS
			return false;
		}
	}

	function getScrollMin($banner) {
		var bannerTop = $banner.offset().top;
		var headerHeight = $('header').outerHeight(false);
		var windowHeight = $(window).height();
		var bannerHeight = $banner.outerHeight(false);
		var remainingHeight = windowHeight - headerHeight - bannerHeight;

		var stopScrollingAt = bannerTop - headerHeight;
		if (remainingHeight > 0) {
			stopScrollingAt -= remainingHeight / 2;
		}

		return stopScrollingAt;
	}
});;
var searchterm;

$(function () {
    //post to google tag manager, posts after 3secs pause from typing
    var typingTimer;
    var doneTypingInterval = 3000;  //3secs
    var $input = $('.site-search--field [data-search=site]');

    $input.on('keyup', function () {
        clearTimeout(typingTimer);
        typingTimer = setTimeout(doneTyping, doneTypingInterval);
    });

    $input.on('keydown', function () {
        clearTimeout(typingTimer);
    });
});

function doneTyping() {
    if (searchterm !== '' && searchterm !== null && typeof searchterm !== 'undefined' && searchterm != undefined) {
        dataLayer.push({
            'event': 'VirtualPageview',
            'virtualPageURL': '/search?q=' + searchterm,
            'virtualPageTitle': 'Search'
        });
        searchterm = '';
    }
}
//end of google tag manager post functionality

function saveFlight(el, flightNumber) {
    var $headerFlight = $('.header-flight');
    $headerFlight.hide();

    var $flightCard = $(el).parents('.card--content');

    if (flightNumber) {
        if (typeof $.cookie('userSavedFlight') !== 'undefined') {
            $.removeCookie('userSavedFlight');
        }

        $.cookie('userSavedFlight', flightNumber, { path: '/;SameSite=Lax', secure: true });

        var template = $('#header-flight-info-template').html();
        Mustache.parse(template);
        
        var flightInfo = {
            'flightNumber': $.cookie('userSavedFlight'),
            'airlineLogo': $flightCard.find('img')[0].outerHTML,
            'fromTo': $flightCard.find('.toFrom').text(),
            'airport': $flightCard.find('.orgidest').text(),
            'departingArriving': $flightCard.find('.toFrom').text() === 'to' ? 'Depart' : 'Arrive',
            'scheduledTime': $flightCard.find('.schedtime').text(),
            'status': $flightCard.find('.message').text(),
            'statusCssClass': $flightCard.find('.message').attr('class').replace('message', '')
        };

        $('.header-flight-placeholder').show();
        $('.header-flight').addClass('fadeInUp');
        var rendered = Mustache.render(template, flightInfo);
        $('#header-flight-info').html(rendered);
        setTimeout(function () { $headerFlight.show(); }, 0);

        $('.buttonHtml').html('Saved <i class="fa fa-check"></i>');
    }

    ShowFlightSavedMessage();
};

$(document).ready(function () {
    if ($('[data-search=site]').length > 0) {
        //prevent enter key submitting the form
        $('[data-search=site]').keydown(function (event) {
            if (event.keyCode == 13) {
                event.preventDefault();
                return false;
            }
        });

        $('[data-search=site]').focus();

        $('[data-search=site]').autocomplete({
            minLength: 2,
            source: function (request, response) {
                $.ajax({
                    url: '/WebServices/SiteSearch.asmx/SearchResults',
                    type: 'POST',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    data: JSON.stringify({ searchTerm: request.term }),
                    success: function (data) {
                        searchterm = request.term;

                        response($.map(data.d, function (item) {
                            return { label: item.page, page: item.page, pageDescription: item.pageDescription, URL: item.URL, AbsoluteURL: item.AbsoluteURL, DatePublished: item.DatePublished, fltnmbr: item.fltnmbr, schedtime: item.schedtime, origdest: item.origdest, message: item.message, isArrival: item.isArrival, imgPath: item.imgPath, summary: item.summary, statusCssClass: item.statusCssClass, topRanked: item.topRanked, airline: item.airline };
                        }));
                    }
                });
            },
            open: function () {
                $('.results').empty();
                $('.results').append($('.ui-autocomplete').clone().html().replace('<ul', '<div'));
                $('.ui-autocomplete').hide();
                $('.ui-helper-hidden-accessible').remove();
                $('.ndivl').hide();
                $('.null').hide();
            },
            close: function () {

            }
        }).data('ui-autocomplete')._renderItem = function (ul, item) {

            var returnString;

            var summaryVar = item.summary;
            if (summaryVar != null) {
                $('.sticky-footer').css('position', 'inherit');
                $('.resultsSummary').empty();
                $('.resultsSummary').append('<div class="col-12 md-col-8 centered"><p class="lead">' + item.summary + '</p>' + '</div>');
            }

            if (item.page === 'flightCard') {
                var toOrFrom;
                var status;

                if (item.isArrival) {
                    toOrFrom = ' from ';
                } else {
                    toOrFrom = ' to ';
                }

                status = '<span class="message ' + item.statusCssClass + '">';

                var button = ' ';
                if ($.cookie('userSavedFlight') !== item.fltnmbr) {
                    button = '<a class="btn flightSave" onClick="saveFlight(this, \'' + item.fltnmbr + '\');">Save Flight <i class="fa fa-angle-right"></i></a>';
                } else {
                    button = '<a class="btn flightSave">Saved <i class="fa fa-check"></i></a>';
                }

                returnString = $("<div class='card col-12 md-col-8 centered'>" +
                    "<div class='card--content'>" +
                    "<div class='row'>" +
                    "<span class='flight-card--details'>" +
                    '<h3>' +
                    "<span class='flightno'>" + item.fltnmbr + '</span>' +
                    "<span class='toFrom'>" + toOrFrom + '</span>' +
                    "<span class='orgidest'>" + item.origdest + '</span>' +
                    '</h3>' +
                    '<p>Scheduled at <strong><span class="schedtime">' + item.schedtime + '</span></strong></p>' +
                    '</span>' +
                    "<span class='flight-card--status'>" +
                    '<img src="' + item.imgPath + '" alt="' + item.airline + '" />' +
                    '<br>' +
                    status + item.message + '</span>' +
                    '</span>' +
                    '</span>' +
                    '</div>' +
                    "<div class='row buttonHtml'>" +
                    button +
                    '</div>' +
                    '</div>');
            } else {
                if (item.page != null && item.page.indexOf('We believe') >= 0) {
                    returnString = $("<div class='col-12 md-col-8 centered'>" +
                        "<p class='lead'>" + item.page + '</p>' +
                        '</div>');
                } else {
                    if (item.page == null) {
                        returnString = $('');
                    } else {
                        var link;
                        if (item.AbsoluteURL === '') {
                            link = item.page;
                        }
                        else {
                            link = "<a href='" + item.AbsoluteURL + "'>" + item.page + '</a>';
                        }

                        if (item.topRanked) {
                            returnString = $("<div class='col-12 md-col-8 centered topRanked'>" +
                                '<h3>Suggested Search Result:</h3>' +
                                '<h4>' + link + '</h4>' +
                                '<p>' + item.pageDescription + '</p>' +
                                item.URL +
                                '</div>');
                        } else {
                            returnString = $("<div class='col-12 md-col-8 centered'>" +
                                '<hr>' +
                                '<h4>' + link + '</h4>' +
                                '<p>' + item.pageDescription + '</p>' +
                                item.URL +
                                '</div>');
                        }
                    }
                }
            }

            returnString.data('ui-autocomplete-item', item).appendTo(ul);
            return returnString;
        };

        $('[data-search=site]').trigger('keydown');

        if (decodeURIComponent(getUrlVars()['q']) !== 'undefined') {
            var queryStringSearchTerm = decodeURIComponent(getUrlVars()['q']);

            if (queryStringSearchTerm.length > 0) {
                $('[data-search=site]').val(queryStringSearchTerm);
                searchterm = queryStringSearchTerm;
                $('[data-search=site]').autocomplete('search', queryStringSearchTerm);
                doneTyping();
            }
        }
    }
});;
$(document).ready(function () {
    if ($('[data-shopping]').length > 0) {
        $('.widget-zone-area').hide();
        $('.widget-zone-area-first').show();

        $('.zone-link').on('click', function () {
            //fix for tablets & mobile to realign columns
            salvattore.rescanMediaQueries();

            var $widgetZoneArea = $(this);
            var widgetZoneAreaId = $widgetZoneArea.attr('widget-zone-area-id');
            var parentPanelArea = $widgetZoneArea.closest('.panel-area');

            $('.main').fadeIn();
            $('.zone-link').not(this).removeClass('active');
            $('.panel-area').not(parentPanelArea).hide();
            $('.widget-zone-area').hide();

            if ($widgetZoneArea.hasClass('active')) {
                $widgetZoneArea.removeClass('active');
                $('widget-zone-area').hide();
                $('.widget-zone-area-first').fadeIn();
                WizardScroll('.widget-zone-area-first', 25);
            }
            else {
                $widgetZoneArea.addClass('active');
                $('.widget-zone-area-first').hide();
                $('#' + widgetZoneAreaId).fadeIn();
                WizardScroll('#' + widgetZoneAreaId, 25);
            }
        });

        $('.bottom-row').on('click', function () {
            var panelAreaId = $(this).attr('id');
            $('#HdnBottomRow').val(panelAreaId);
        });

        $('a.back').on('click', function () {
            parent.history.back();
            return false;
        });

        if ($('#HdnBottomRow').val() !== '') {
            var hdnBottomRow = $('#HdnBottomRow').val();
            $('#' + hdnBottomRow).trigger('click');
        }
    }
});;
!function (i) { "use strict"; "function" == typeof define && define.amd ? define(["jquery"], i) : "undefined" != typeof exports ? module.exports = i(require("jquery")) : i(jQuery) }(function (i) { "use strict"; var e = window.Slick || {}; (e = function () { var e = 0; return function (t, o) { var s, n = this; n.defaults = { accessibility: !0, adaptiveHeight: !1, appendArrows: i(t), appendDots: i(t), arrows: !0, asNavFor: null, prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>', nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>', autoplay: !1, autoplaySpeed: 3e3, centerMode: !1, centerPadding: "50px", cssEase: "ease", customPaging: function (e, t) { return i('<button type="button" />').text(t + 1) }, dots: !1, dotsClass: "slick-dots", draggable: !0, easing: "linear", edgeFriction: .35, fade: !1, focusOnSelect: !1, focusOnChange: !1, infinite: !0, initialSlide: 0, lazyLoad: "ondemand", mobileFirst: !1, pauseOnHover: !0, pauseOnFocus: !0, pauseOnDotsHover: !1, respondTo: "window", responsive: null, rows: 1, rtl: !1, slide: "", slidesPerRow: 1, slidesToShow: 1, slidesToScroll: 1, speed: 500, swipe: !0, swipeToSlide: !1, touchMove: !0, touchThreshold: 5, useCSS: !0, useTransform: !0, variableWidth: !1, vertical: !1, verticalSwiping: !1, waitForAnimate: !0, zIndex: 1e3 }, n.initials = { animating: !1, dragging: !1, autoPlayTimer: null, currentDirection: 0, currentLeft: null, currentSlide: 0, direction: 1, $dots: null, listWidth: null, listHeight: null, loadIndex: 0, $nextArrow: null, $prevArrow: null, scrolling: !1, slideCount: null, slideWidth: null, $slideTrack: null, $slides: null, sliding: !1, slideOffset: 0, swipeLeft: null, swiping: !1, $list: null, touchObject: {}, transformsEnabled: !1, unslicked: !1 }, i.extend(n, n.initials), n.activeBreakpoint = null, n.animType = null, n.animProp = null, n.breakpoints = [], n.breakpointSettings = [], n.cssTransitions = !1, n.focussed = !1, n.interrupted = !1, n.hidden = "hidden", n.paused = !0, n.positionProp = null, n.respondTo = null, n.rowCount = 1, n.shouldClick = !0, n.$slider = i(t), n.$slidesCache = null, n.transformType = null, n.transitionType = null, n.visibilityChange = "visibilitychange", n.windowWidth = 0, n.windowTimer = null, s = i(t).data("slick") || {}, n.options = i.extend({}, n.defaults, o, s), n.currentSlide = n.options.initialSlide, n.originalSettings = n.options, void 0 !== document.mozHidden ? (n.hidden = "mozHidden", n.visibilityChange = "mozvisibilitychange") : void 0 !== document.webkitHidden && (n.hidden = "webkitHidden", n.visibilityChange = "webkitvisibilitychange"), n.autoPlay = i.proxy(n.autoPlay, n), n.autoPlayClear = i.proxy(n.autoPlayClear, n), n.autoPlayIterator = i.proxy(n.autoPlayIterator, n), n.changeSlide = i.proxy(n.changeSlide, n), n.clickHandler = i.proxy(n.clickHandler, n), n.selectHandler = i.proxy(n.selectHandler, n), n.setPosition = i.proxy(n.setPosition, n), n.swipeHandler = i.proxy(n.swipeHandler, n), n.dragHandler = i.proxy(n.dragHandler, n), n.keyHandler = i.proxy(n.keyHandler, n), n.instanceUid = e++ , n.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/, n.registerBreakpoints(), n.init(!0) } }()).prototype.activateADA = function () { this.$slideTrack.find(".slick-active").attr({ "aria-hidden": "false" }).find("a, input, button, select").attr({ tabindex: "0" }) }, e.prototype.addSlide = e.prototype.slickAdd = function (e, t, o) { var s = this; if ("boolean" == typeof t) o = t, t = null; else if (t < 0 || t >= s.slideCount) return !1; s.unload(), "number" == typeof t ? 0 === t && 0 === s.$slides.length ? i(e).appendTo(s.$slideTrack) : o ? i(e).insertBefore(s.$slides.eq(t)) : i(e).insertAfter(s.$slides.eq(t)) : !0 === o ? i(e).prependTo(s.$slideTrack) : i(e).appendTo(s.$slideTrack), s.$slides = s.$slideTrack.children(this.options.slide), s.$slideTrack.children(this.options.slide).detach(), s.$slideTrack.append(s.$slides), s.$slides.each(function (e, t) { i(t).attr("data-slick-index", e) }), s.$slidesCache = s.$slides, s.reinit() }, e.prototype.animateHeight = function () { var i = this; if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { var e = i.$slides.eq(i.currentSlide).outerHeight(!0); i.$list.animate({ height: e }, i.options.speed) } }, e.prototype.animateSlide = function (e, t) { var o = {}, s = this; s.animateHeight(), !0 === s.options.rtl && !1 === s.options.vertical && (e = -e), !1 === s.transformsEnabled ? !1 === s.options.vertical ? s.$slideTrack.animate({ left: e }, s.options.speed, s.options.easing, t) : s.$slideTrack.animate({ top: e }, s.options.speed, s.options.easing, t) : !1 === s.cssTransitions ? (!0 === s.options.rtl && (s.currentLeft = -s.currentLeft), i({ animStart: s.currentLeft }).animate({ animStart: e }, { duration: s.options.speed, easing: s.options.easing, step: function (i) { i = Math.ceil(i), !1 === s.options.vertical ? (o[s.animType] = "translate(" + i + "px, 0px)", s.$slideTrack.css(o)) : (o[s.animType] = "translate(0px," + i + "px)", s.$slideTrack.css(o)) }, complete: function () { t && t.call() } })) : (s.applyTransition(), e = Math.ceil(e), !1 === s.options.vertical ? o[s.animType] = "translate3d(" + e + "px, 0px, 0px)" : o[s.animType] = "translate3d(0px," + e + "px, 0px)", s.$slideTrack.css(o), t && setTimeout(function () { s.disableTransition(), t.call() }, s.options.speed)) }, e.prototype.getNavTarget = function () { var e = this, t = e.options.asNavFor; return t && null !== t && (t = i(t).not(e.$slider)), t }, e.prototype.asNavFor = function (e) { var t = this.getNavTarget(); null !== t && "object" == typeof t && t.each(function () { var t = i(this).slick("getSlick"); t.unslicked || t.slideHandler(e, !0) }) }, e.prototype.applyTransition = function (i) { var e = this, t = {}; !1 === e.options.fade ? t[e.transitionType] = e.transformType + " " + e.options.speed + "ms " + e.options.cssEase : t[e.transitionType] = "opacity " + e.options.speed + "ms " + e.options.cssEase, !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t) }, e.prototype.autoPlay = function () { var i = this; i.autoPlayClear(), i.slideCount > i.options.slidesToShow && (i.autoPlayTimer = setInterval(i.autoPlayIterator, i.options.autoplaySpeed)) }, e.prototype.autoPlayClear = function () { var i = this; i.autoPlayTimer && clearInterval(i.autoPlayTimer) }, e.prototype.autoPlayIterator = function () { var i = this, e = i.currentSlide + i.options.slidesToScroll; i.paused || i.interrupted || i.focussed || (!1 === i.options.infinite && (1 === i.direction && i.currentSlide + 1 === i.slideCount - 1 ? i.direction = 0 : 0 === i.direction && (e = i.currentSlide - i.options.slidesToScroll, i.currentSlide - 1 == 0 && (i.direction = 1))), i.slideHandler(e)) }, e.prototype.buildArrows = function () { var e = this; !0 === e.options.arrows && (e.$prevArrow = i(e.options.prevArrow).addClass("slick-arrow"), e.$nextArrow = i(e.options.nextArrow).addClass("slick-arrow"), e.slideCount > e.options.slidesToShow ? (e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"), e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.prependTo(e.options.appendArrows), e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.appendTo(e.options.appendArrows), !0 !== e.options.infinite && e.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true")) : e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({ "aria-disabled": "true", tabindex: "-1" })) }, e.prototype.buildDots = function () { var e, t, o = this; if (!0 === o.options.dots) { for (o.$slider.addClass("slick-dotted"), t = i("<ul />").addClass(o.options.dotsClass), e = 0; e <= o.getDotCount(); e += 1)t.append(i("<li />").append(o.options.customPaging.call(this, o, e))); o.$dots = t.appendTo(o.options.appendDots), o.$dots.find("li").first().addClass("slick-active") } }, e.prototype.buildOut = function () { var e = this; e.$slides = e.$slider.children(e.options.slide + ":not(.slick-cloned)").addClass("slick-slide"), e.slideCount = e.$slides.length, e.$slides.each(function (e, t) { i(t).attr("data-slick-index", e).data("originalStyling", i(t).attr("style") || "") }), e.$slider.addClass("slick-slider"), e.$slideTrack = 0 === e.slideCount ? i('<div class="slick-track"/>').appendTo(e.$slider) : e.$slides.wrapAll('<div class="slick-track"/>').parent(), e.$list = e.$slideTrack.wrap('<div class="slick-list"/>').parent(), e.$slideTrack.css("opacity", 0), !0 !== e.options.centerMode && !0 !== e.options.swipeToSlide || (e.options.slidesToScroll = 1), i("img[data-lazy]", e.$slider).not("[src]").addClass("slick-loading"), e.setupInfinite(), e.buildArrows(), e.buildDots(), e.updateDots(), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), !0 === e.options.draggable && e.$list.addClass("draggable") }, e.prototype.buildRows = function () { var i, e, t, o, s, n, r, l = this; if (o = document.createDocumentFragment(), n = l.$slider.children(), l.options.rows > 1) { for (r = l.options.slidesPerRow * l.options.rows, s = Math.ceil(n.length / r), i = 0; i < s; i++) { var d = document.createElement("div"); for (e = 0; e < l.options.rows; e++) { var a = document.createElement("div"); for (t = 0; t < l.options.slidesPerRow; t++) { var c = i * r + (e * l.options.slidesPerRow + t); n.get(c) && a.appendChild(n.get(c)) } d.appendChild(a) } o.appendChild(d) } l.$slider.empty().append(o), l.$slider.children().children().children().css({ width: 100 / l.options.slidesPerRow + "%", display: "inline-block" }) } }, e.prototype.checkResponsive = function (e, t) { var o, s, n, r = this, l = !1, d = r.$slider.width(), a = window.innerWidth || i(window).width(); if ("window" === r.respondTo ? n = a : "slider" === r.respondTo ? n = d : "min" === r.respondTo && (n = Math.min(a, d)), r.options.responsive && r.options.responsive.length && null !== r.options.responsive) { s = null; for (o in r.breakpoints) r.breakpoints.hasOwnProperty(o) && (!1 === r.originalSettings.mobileFirst ? n < r.breakpoints[o] && (s = r.breakpoints[o]) : n > r.breakpoints[o] && (s = r.breakpoints[o])); null !== s ? null !== r.activeBreakpoint ? (s !== r.activeBreakpoint || t) && (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : (r.activeBreakpoint = s, "unslick" === r.breakpointSettings[s] ? r.unslick(s) : (r.options = i.extend({}, r.originalSettings, r.breakpointSettings[s]), !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e)), l = s) : null !== r.activeBreakpoint && (r.activeBreakpoint = null, r.options = r.originalSettings, !0 === e && (r.currentSlide = r.options.initialSlide), r.refresh(e), l = s), e || !1 === l || r.$slider.trigger("breakpoint", [r, l]) } }, e.prototype.changeSlide = function (e, t) { var o, s, n, r = this, l = i(e.currentTarget); switch (l.is("a") && e.preventDefault(), l.is("li") || (l = l.closest("li")), n = r.slideCount % r.options.slidesToScroll != 0, o = n ? 0 : (r.slideCount - r.currentSlide) % r.options.slidesToScroll, e.data.message) { case "previous": s = 0 === o ? r.options.slidesToScroll : r.options.slidesToShow - o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide - s, !1, t); break; case "next": s = 0 === o ? r.options.slidesToScroll : o, r.slideCount > r.options.slidesToShow && r.slideHandler(r.currentSlide + s, !1, t); break; case "index": var d = 0 === e.data.index ? 0 : e.data.index || l.index() * r.options.slidesToScroll; r.slideHandler(r.checkNavigable(d), !1, t), l.children().trigger("focus"); break; default: return } }, e.prototype.checkNavigable = function (i) { var e, t; if (e = this.getNavigableIndexes(), t = 0, i > e[e.length - 1]) i = e[e.length - 1]; else for (var o in e) { if (i < e[o]) { i = t; break } t = e[o] } return i }, e.prototype.cleanUpEvents = function () { var e = this; e.options.dots && null !== e.$dots && (i("li", e.$dots).off("click.slick", e.changeSlide).off("mouseenter.slick", i.proxy(e.interrupt, e, !0)).off("mouseleave.slick", i.proxy(e.interrupt, e, !1)), !0 === e.options.accessibility && e.$dots.off("keydown.slick", e.keyHandler)), e.$slider.off("focus.slick blur.slick"), !0 === e.options.arrows && e.slideCount > e.options.slidesToShow && (e.$prevArrow && e.$prevArrow.off("click.slick", e.changeSlide), e.$nextArrow && e.$nextArrow.off("click.slick", e.changeSlide), !0 === e.options.accessibility && (e.$prevArrow && e.$prevArrow.off("keydown.slick", e.keyHandler), e.$nextArrow && e.$nextArrow.off("keydown.slick", e.keyHandler))), e.$list.off("touchstart.slick mousedown.slick", e.swipeHandler), e.$list.off("touchmove.slick mousemove.slick", e.swipeHandler), e.$list.off("touchend.slick mouseup.slick", e.swipeHandler), e.$list.off("touchcancel.slick mouseleave.slick", e.swipeHandler), e.$list.off("click.slick", e.clickHandler), i(document).off(e.visibilityChange, e.visibility), e.cleanUpSlideEvents(), !0 === e.options.accessibility && e.$list.off("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().off("click.slick", e.selectHandler), i(window).off("orientationchange.slick.slick-" + e.instanceUid, e.orientationChange), i(window).off("resize.slick.slick-" + e.instanceUid, e.resize), i("[draggable!=true]", e.$slideTrack).off("dragstart", e.preventDefault), i(window).off("load.slick.slick-" + e.instanceUid, e.setPosition) }, e.prototype.cleanUpSlideEvents = function () { var e = this; e.$list.off("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.off("mouseleave.slick", i.proxy(e.interrupt, e, !1)) }, e.prototype.cleanUpRows = function () { var i, e = this; e.options.rows > 1 && ((i = e.$slides.children().children()).removeAttr("style"), e.$slider.empty().append(i)) }, e.prototype.clickHandler = function (i) { !1 === this.shouldClick && (i.stopImmediatePropagation(), i.stopPropagation(), i.preventDefault()) }, e.prototype.destroy = function (e) { var t = this; t.autoPlayClear(), t.touchObject = {}, t.cleanUpEvents(), i(".slick-cloned", t.$slider).detach(), t.$dots && t.$dots.remove(), t.$prevArrow && t.$prevArrow.length && (t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.prevArrow) && t.$prevArrow.remove()), t.$nextArrow && t.$nextArrow.length && (t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""), t.htmlExpr.test(t.options.nextArrow) && t.$nextArrow.remove()), t.$slides && (t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function () { i(this).attr("style", i(this).data("originalStyling")) }), t.$slideTrack.children(this.options.slide).detach(), t.$slideTrack.detach(), t.$list.detach(), t.$slider.append(t.$slides)), t.cleanUpRows(), t.$slider.removeClass("slick-slider"), t.$slider.removeClass("slick-initialized"), t.$slider.removeClass("slick-dotted"), t.unslicked = !0, e || t.$slider.trigger("destroy", [t]) }, e.prototype.disableTransition = function (i) { var e = this, t = {}; t[e.transitionType] = "", !1 === e.options.fade ? e.$slideTrack.css(t) : e.$slides.eq(i).css(t) }, e.prototype.fadeSlide = function (i, e) { var t = this; !1 === t.cssTransitions ? (t.$slides.eq(i).css({ zIndex: t.options.zIndex }), t.$slides.eq(i).animate({ opacity: 1 }, t.options.speed, t.options.easing, e)) : (t.applyTransition(i), t.$slides.eq(i).css({ opacity: 1, zIndex: t.options.zIndex }), e && setTimeout(function () { t.disableTransition(i), e.call() }, t.options.speed)) }, e.prototype.fadeSlideOut = function (i) { var e = this; !1 === e.cssTransitions ? e.$slides.eq(i).animate({ opacity: 0, zIndex: e.options.zIndex - 2 }, e.options.speed, e.options.easing) : (e.applyTransition(i), e.$slides.eq(i).css({ opacity: 0, zIndex: e.options.zIndex - 2 })) }, e.prototype.filterSlides = e.prototype.slickFilter = function (i) { var e = this; null !== i && (e.$slidesCache = e.$slides, e.unload(), e.$slideTrack.children(this.options.slide).detach(), e.$slidesCache.filter(i).appendTo(e.$slideTrack), e.reinit()) }, e.prototype.focusHandler = function () { var e = this; e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function (t) { t.stopImmediatePropagation(); var o = i(this); setTimeout(function () { e.options.pauseOnFocus && (e.focussed = o.is(":focus"), e.autoPlay()) }, 0) }) }, e.prototype.getCurrent = e.prototype.slickCurrentSlide = function () { return this.currentSlide }, e.prototype.getDotCount = function () { var i = this, e = 0, t = 0, o = 0; if (!0 === i.options.infinite) if (i.slideCount <= i.options.slidesToShow)++o; else for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; else if (!0 === i.options.centerMode) o = i.slideCount; else if (i.options.asNavFor) for (; e < i.slideCount;)++o, e = t + i.options.slidesToScroll, t += i.options.slidesToScroll <= i.options.slidesToShow ? i.options.slidesToScroll : i.options.slidesToShow; else o = 1 + Math.ceil((i.slideCount - i.options.slidesToShow) / i.options.slidesToScroll); return o - 1 }, e.prototype.getLeft = function (i) { var e, t, o, s, n = this, r = 0; return n.slideOffset = 0, t = n.$slides.first().outerHeight(!0), !0 === n.options.infinite ? (n.slideCount > n.options.slidesToShow && (n.slideOffset = n.slideWidth * n.options.slidesToShow * -1, s = -1, !0 === n.options.vertical && !0 === n.options.centerMode && (2 === n.options.slidesToShow ? s = -1.5 : 1 === n.options.slidesToShow && (s = -2)), r = t * n.options.slidesToShow * s), n.slideCount % n.options.slidesToScroll != 0 && i + n.options.slidesToScroll > n.slideCount && n.slideCount > n.options.slidesToShow && (i > n.slideCount ? (n.slideOffset = (n.options.slidesToShow - (i - n.slideCount)) * n.slideWidth * -1, r = (n.options.slidesToShow - (i - n.slideCount)) * t * -1) : (n.slideOffset = n.slideCount % n.options.slidesToScroll * n.slideWidth * -1, r = n.slideCount % n.options.slidesToScroll * t * -1))) : i + n.options.slidesToShow > n.slideCount && (n.slideOffset = (i + n.options.slidesToShow - n.slideCount) * n.slideWidth, r = (i + n.options.slidesToShow - n.slideCount) * t), n.slideCount <= n.options.slidesToShow && (n.slideOffset = 0, r = 0), !0 === n.options.centerMode && n.slideCount <= n.options.slidesToShow ? n.slideOffset = n.slideWidth * Math.floor(n.options.slidesToShow) / 2 - n.slideWidth * n.slideCount / 2 : !0 === n.options.centerMode && !0 === n.options.infinite ? n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2) - n.slideWidth : !0 === n.options.centerMode && (n.slideOffset = 0, n.slideOffset += n.slideWidth * Math.floor(n.options.slidesToShow / 2)), e = !1 === n.options.vertical ? i * n.slideWidth * -1 + n.slideOffset : i * t * -1 + r, !0 === n.options.variableWidth && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, !0 === n.options.centerMode && (o = n.slideCount <= n.options.slidesToShow || !1 === n.options.infinite ? n.$slideTrack.children(".slick-slide").eq(i) : n.$slideTrack.children(".slick-slide").eq(i + n.options.slidesToShow + 1), e = !0 === n.options.rtl ? o[0] ? -1 * (n.$slideTrack.width() - o[0].offsetLeft - o.width()) : 0 : o[0] ? -1 * o[0].offsetLeft : 0, e += (n.$list.width() - o.outerWidth()) / 2)), e }, e.prototype.getOption = e.prototype.slickGetOption = function (i) { return this.options[i] }, e.prototype.getNavigableIndexes = function () { var i, e = this, t = 0, o = 0, s = []; for (!1 === e.options.infinite ? i = e.slideCount : (t = -1 * e.options.slidesToScroll, o = -1 * e.options.slidesToScroll, i = 2 * e.slideCount); t < i;)s.push(t), t = o + e.options.slidesToScroll, o += e.options.slidesToScroll <= e.options.slidesToShow ? e.options.slidesToScroll : e.options.slidesToShow; return s }, e.prototype.getSlick = function () { return this }, e.prototype.getSlideCount = function () { var e, t, o = this; return t = !0 === o.options.centerMode ? o.slideWidth * Math.floor(o.options.slidesToShow / 2) : 0, !0 === o.options.swipeToSlide ? (o.$slideTrack.find(".slick-slide").each(function (s, n) { if (n.offsetLeft - t + i(n).outerWidth() / 2 > -1 * o.swipeLeft) return e = n, !1 }), Math.abs(i(e).attr("data-slick-index") - o.currentSlide) || 1) : o.options.slidesToScroll }, e.prototype.goTo = e.prototype.slickGoTo = function (i, e) { this.changeSlide({ data: { message: "index", index: parseInt(i) } }, e) }, e.prototype.init = function (e) { var t = this; i(t.$slider).hasClass("slick-initialized") || (i(t.$slider).addClass("slick-initialized"), t.buildRows(), t.buildOut(), t.setProps(), t.startLoad(), t.loadSlider(), t.initializeEvents(), t.updateArrows(), t.updateDots(), t.checkResponsive(!0), t.focusHandler()), e && t.$slider.trigger("init", [t]), !0 === t.options.accessibility && t.initADA(), t.options.autoplay && (t.paused = !1, t.autoPlay()) }, e.prototype.initADA = function () { var e = this, t = Math.ceil(e.slideCount / e.options.slidesToShow), o = e.getNavigableIndexes().filter(function (i) { return i >= 0 && i < e.slideCount }); e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({ "aria-hidden": "true", tabindex: "-1" }).find("a, input, button, select").attr({ tabindex: "-1" }), null !== e.$dots && (e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function (t) { var s = o.indexOf(t); i(this).attr({ role: "tabpanel", id: "slick-slide" + e.instanceUid + t, tabindex: -1 }), -1 !== s && i(this).attr({ "aria-describedby": "slick-slide-control" + e.instanceUid + s }) }), e.$dots.attr("role", "tablist").find("li").each(function (s) { var n = o[s]; i(this).attr({ role: "presentation" }), i(this).find("button").first().attr({ role: "tab", id: "slick-slide-control" + e.instanceUid + s, "aria-controls": "slick-slide" + e.instanceUid + n, "aria-label": s + 1 + " of " + t, "aria-selected": null, tabindex: "-1" }) }).eq(e.currentSlide).find("button").attr({ "aria-selected": "true", tabindex: "0" }).end()); for (var s = e.currentSlide, n = s + e.options.slidesToShow; s < n; s++)e.$slides.eq(s).attr("tabindex", 0); e.activateADA() }, e.prototype.initArrowEvents = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.off("click.slick").on("click.slick", { message: "previous" }, i.changeSlide), i.$nextArrow.off("click.slick").on("click.slick", { message: "next" }, i.changeSlide), !0 === i.options.accessibility && (i.$prevArrow.on("keydown.slick", i.keyHandler), i.$nextArrow.on("keydown.slick", i.keyHandler))) }, e.prototype.initDotEvents = function () { var e = this; !0 === e.options.dots && (i("li", e.$dots).on("click.slick", { message: "index" }, e.changeSlide), !0 === e.options.accessibility && e.$dots.on("keydown.slick", e.keyHandler)), !0 === e.options.dots && !0 === e.options.pauseOnDotsHover && i("li", e.$dots).on("mouseenter.slick", i.proxy(e.interrupt, e, !0)).on("mouseleave.slick", i.proxy(e.interrupt, e, !1)) }, e.prototype.initSlideEvents = function () { var e = this; e.options.pauseOnHover && (e.$list.on("mouseenter.slick", i.proxy(e.interrupt, e, !0)), e.$list.on("mouseleave.slick", i.proxy(e.interrupt, e, !1))) }, e.prototype.initializeEvents = function () { var e = this; e.initArrowEvents(), e.initDotEvents(), e.initSlideEvents(), e.$list.on("touchstart.slick mousedown.slick", { action: "start" }, e.swipeHandler), e.$list.on("touchmove.slick mousemove.slick", { action: "move" }, e.swipeHandler), e.$list.on("touchend.slick mouseup.slick", { action: "end" }, e.swipeHandler), e.$list.on("touchcancel.slick mouseleave.slick", { action: "end" }, e.swipeHandler), e.$list.on("click.slick", e.clickHandler), i(document).on(e.visibilityChange, i.proxy(e.visibility, e)), !0 === e.options.accessibility && e.$list.on("keydown.slick", e.keyHandler), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), i(window).on("orientationchange.slick.slick-" + e.instanceUid, i.proxy(e.orientationChange, e)), i(window).on("resize.slick.slick-" + e.instanceUid, i.proxy(e.resize, e)), i("[draggable!=true]", e.$slideTrack).on("dragstart", e.preventDefault), i(window).on("load.slick.slick-" + e.instanceUid, e.setPosition), i(e.setPosition) }, e.prototype.initUI = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.show(), i.$nextArrow.show()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.show() }, e.prototype.keyHandler = function (i) { var e = this; i.target.tagName.match("TEXTAREA|INPUT|SELECT") || (37 === i.keyCode && !0 === e.options.accessibility ? e.changeSlide({ data: { message: !0 === e.options.rtl ? "next" : "previous" } }) : 39 === i.keyCode && !0 === e.options.accessibility && e.changeSlide({ data: { message: !0 === e.options.rtl ? "previous" : "next" } })) }, e.prototype.lazyLoad = function () { function e(e) { i("img[data-lazy]", e).each(function () { var e = i(this), t = i(this).attr("data-lazy"), o = i(this).attr("data-srcset"), s = i(this).attr("data-sizes") || n.$slider.attr("data-sizes"), r = document.createElement("img"); r.onload = function () { e.animate({ opacity: 0 }, 100, function () { o && (e.attr("srcset", o), s && e.attr("sizes", s)), e.attr("src", t).animate({ opacity: 1 }, 200, function () { e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading") }), n.$slider.trigger("lazyLoaded", [n, e, t]) }) }, r.onerror = function () { e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), n.$slider.trigger("lazyLoadError", [n, e, t]) }, r.src = t }) } var t, o, s, n = this; if (!0 === n.options.centerMode ? !0 === n.options.infinite ? s = (o = n.currentSlide + (n.options.slidesToShow / 2 + 1)) + n.options.slidesToShow + 2 : (o = Math.max(0, n.currentSlide - (n.options.slidesToShow / 2 + 1)), s = n.options.slidesToShow / 2 + 1 + 2 + n.currentSlide) : (o = n.options.infinite ? n.options.slidesToShow + n.currentSlide : n.currentSlide, s = Math.ceil(o + n.options.slidesToShow), !0 === n.options.fade && (o > 0 && o-- , s <= n.slideCount && s++)), t = n.$slider.find(".slick-slide").slice(o, s), "anticipated" === n.options.lazyLoad) for (var r = o - 1, l = s, d = n.$slider.find(".slick-slide"), a = 0; a < n.options.slidesToScroll; a++)r < 0 && (r = n.slideCount - 1), t = (t = t.add(d.eq(r))).add(d.eq(l)), r-- , l++; e(t), n.slideCount <= n.options.slidesToShow ? e(n.$slider.find(".slick-slide")) : n.currentSlide >= n.slideCount - n.options.slidesToShow ? e(n.$slider.find(".slick-cloned").slice(0, n.options.slidesToShow)) : 0 === n.currentSlide && e(n.$slider.find(".slick-cloned").slice(-1 * n.options.slidesToShow)) }, e.prototype.loadSlider = function () { var i = this; i.setPosition(), i.$slideTrack.css({ opacity: 1 }), i.$slider.removeClass("slick-loading"), i.initUI(), "progressive" === i.options.lazyLoad && i.progressiveLazyLoad() }, e.prototype.next = e.prototype.slickNext = function () { this.changeSlide({ data: { message: "next" } }) }, e.prototype.orientationChange = function () { var i = this; i.checkResponsive(), i.setPosition() }, e.prototype.pause = e.prototype.slickPause = function () { var i = this; i.autoPlayClear(), i.paused = !0 }, e.prototype.play = e.prototype.slickPlay = function () { var i = this; i.autoPlay(), i.options.autoplay = !0, i.paused = !1, i.focussed = !1, i.interrupted = !1 }, e.prototype.postSlide = function (e) { var t = this; t.unslicked || (t.$slider.trigger("afterChange", [t, e]), t.animating = !1, t.slideCount > t.options.slidesToShow && t.setPosition(), t.swipeLeft = null, t.options.autoplay && t.autoPlay(), !0 === t.options.accessibility && (t.initADA(), t.options.focusOnChange && i(t.$slides.get(t.currentSlide)).attr("tabindex", 0).focus())) }, e.prototype.prev = e.prototype.slickPrev = function () { this.changeSlide({ data: { message: "previous" } }) }, e.prototype.preventDefault = function (i) { i.preventDefault() }, e.prototype.progressiveLazyLoad = function (e) { e = e || 1; var t, o, s, n, r, l = this, d = i("img[data-lazy]", l.$slider); d.length ? (t = d.first(), o = t.attr("data-lazy"), s = t.attr("data-srcset"), n = t.attr("data-sizes") || l.$slider.attr("data-sizes"), (r = document.createElement("img")).onload = function () { s && (t.attr("srcset", s), n && t.attr("sizes", n)), t.attr("src", o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"), !0 === l.options.adaptiveHeight && l.setPosition(), l.$slider.trigger("lazyLoaded", [l, t, o]), l.progressiveLazyLoad() }, r.onerror = function () { e < 3 ? setTimeout(function () { l.progressiveLazyLoad(e + 1) }, 500) : (t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"), l.$slider.trigger("lazyLoadError", [l, t, o]), l.progressiveLazyLoad()) }, r.src = o) : l.$slider.trigger("allImagesLoaded", [l]) }, e.prototype.refresh = function (e) { var t, o, s = this; o = s.slideCount - s.options.slidesToShow, !s.options.infinite && s.currentSlide > o && (s.currentSlide = o), s.slideCount <= s.options.slidesToShow && (s.currentSlide = 0), t = s.currentSlide, s.destroy(!0), i.extend(s, s.initials, { currentSlide: t }), s.init(), e || s.changeSlide({ data: { message: "index", index: t } }, !1) }, e.prototype.registerBreakpoints = function () { var e, t, o, s = this, n = s.options.responsive || null; if ("array" === i.type(n) && n.length) { s.respondTo = s.options.respondTo || "window"; for (e in n) if (o = s.breakpoints.length - 1, n.hasOwnProperty(e)) { for (t = n[e].breakpoint; o >= 0;)s.breakpoints[o] && s.breakpoints[o] === t && s.breakpoints.splice(o, 1), o--; s.breakpoints.push(t), s.breakpointSettings[t] = n[e].settings } s.breakpoints.sort(function (i, e) { return s.options.mobileFirst ? i - e : e - i }) } }, e.prototype.reinit = function () { var e = this; e.$slides = e.$slideTrack.children(e.options.slide).addClass("slick-slide"), e.slideCount = e.$slides.length, e.currentSlide >= e.slideCount && 0 !== e.currentSlide && (e.currentSlide = e.currentSlide - e.options.slidesToScroll), e.slideCount <= e.options.slidesToShow && (e.currentSlide = 0), e.registerBreakpoints(), e.setProps(), e.setupInfinite(), e.buildArrows(), e.updateArrows(), e.initArrowEvents(), e.buildDots(), e.updateDots(), e.initDotEvents(), e.cleanUpSlideEvents(), e.initSlideEvents(), e.checkResponsive(!1, !0), !0 === e.options.focusOnSelect && i(e.$slideTrack).children().on("click.slick", e.selectHandler), e.setSlideClasses("number" == typeof e.currentSlide ? e.currentSlide : 0), e.setPosition(), e.focusHandler(), e.paused = !e.options.autoplay, e.autoPlay(), e.$slider.trigger("reInit", [e]) }, e.prototype.resize = function () { var e = this; i(window).width() !== e.windowWidth && (clearTimeout(e.windowDelay), e.windowDelay = window.setTimeout(function () { e.windowWidth = i(window).width(), e.checkResponsive(), e.unslicked || e.setPosition() }, 50)) }, e.prototype.removeSlide = e.prototype.slickRemove = function (i, e, t) { var o = this; if (i = "boolean" == typeof i ? !0 === (e = i) ? 0 : o.slideCount - 1 : !0 === e ? --i : i, o.slideCount < 1 || i < 0 || i > o.slideCount - 1) return !1; o.unload(), !0 === t ? o.$slideTrack.children().remove() : o.$slideTrack.children(this.options.slide).eq(i).remove(), o.$slides = o.$slideTrack.children(this.options.slide), o.$slideTrack.children(this.options.slide).detach(), o.$slideTrack.append(o.$slides), o.$slidesCache = o.$slides, o.reinit() }, e.prototype.setCSS = function (i) { var e, t, o = this, s = {}; !0 === o.options.rtl && (i = -i), e = "left" == o.positionProp ? Math.ceil(i) + "px" : "0px", t = "top" == o.positionProp ? Math.ceil(i) + "px" : "0px", s[o.positionProp] = i, !1 === o.transformsEnabled ? o.$slideTrack.css(s) : (s = {}, !1 === o.cssTransitions ? (s[o.animType] = "translate(" + e + ", " + t + ")", o.$slideTrack.css(s)) : (s[o.animType] = "translate3d(" + e + ", " + t + ", 0px)", o.$slideTrack.css(s))) }, e.prototype.setDimensions = function () { var i = this; !1 === i.options.vertical ? !0 === i.options.centerMode && i.$list.css({ padding: "0px " + i.options.centerPadding }) : (i.$list.height(i.$slides.first().outerHeight(!0) * i.options.slidesToShow), !0 === i.options.centerMode && i.$list.css({ padding: i.options.centerPadding + " 0px" })), i.listWidth = i.$list.width(), i.listHeight = i.$list.height(), !1 === i.options.vertical && !1 === i.options.variableWidth ? (i.slideWidth = Math.ceil(i.listWidth / i.options.slidesToShow), i.$slideTrack.width(Math.ceil(i.slideWidth * i.$slideTrack.children(".slick-slide").length))) : !0 === i.options.variableWidth ? i.$slideTrack.width(5e3 * i.slideCount) : (i.slideWidth = Math.ceil(i.listWidth), i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0) * i.$slideTrack.children(".slick-slide").length))); var e = i.$slides.first().outerWidth(!0) - i.$slides.first().width(); !1 === i.options.variableWidth && i.$slideTrack.children(".slick-slide").width(i.slideWidth - e) }, e.prototype.setFade = function () { var e, t = this; t.$slides.each(function (o, s) { e = t.slideWidth * o * -1, !0 === t.options.rtl ? i(s).css({ position: "relative", right: e, top: 0, zIndex: t.options.zIndex - 2, opacity: 0 }) : i(s).css({ position: "relative", left: e, top: 0, zIndex: t.options.zIndex - 2, opacity: 0 }) }), t.$slides.eq(t.currentSlide).css({ zIndex: t.options.zIndex - 1, opacity: 1 }) }, e.prototype.setHeight = function () { var i = this; if (1 === i.options.slidesToShow && !0 === i.options.adaptiveHeight && !1 === i.options.vertical) { var e = i.$slides.eq(i.currentSlide).outerHeight(!0); i.$list.css("height", e) } }, e.prototype.setOption = e.prototype.slickSetOption = function () { var e, t, o, s, n, r = this, l = !1; if ("object" === i.type(arguments[0]) ? (o = arguments[0], l = arguments[1], n = "multiple") : "string" === i.type(arguments[0]) && (o = arguments[0], s = arguments[1], l = arguments[2], "responsive" === arguments[0] && "array" === i.type(arguments[1]) ? n = "responsive" : void 0 !== arguments[1] && (n = "single")), "single" === n) r.options[o] = s; else if ("multiple" === n) i.each(o, function (i, e) { r.options[i] = e }); else if ("responsive" === n) for (t in s) if ("array" !== i.type(r.options.responsive)) r.options.responsive = [s[t]]; else { for (e = r.options.responsive.length - 1; e >= 0;)r.options.responsive[e].breakpoint === s[t].breakpoint && r.options.responsive.splice(e, 1), e--; r.options.responsive.push(s[t]) } l && (r.unload(), r.reinit()) }, e.prototype.setPosition = function () { var i = this; i.setDimensions(), i.setHeight(), !1 === i.options.fade ? i.setCSS(i.getLeft(i.currentSlide)) : i.setFade(), i.$slider.trigger("setPosition", [i]) }, e.prototype.setProps = function () { var i = this, e = document.body.style; i.positionProp = !0 === i.options.vertical ? "top" : "left", "top" === i.positionProp ? i.$slider.addClass("slick-vertical") : i.$slider.removeClass("slick-vertical"), void 0 === e.WebkitTransition && void 0 === e.MozTransition && void 0 === e.msTransition || !0 === i.options.useCSS && (i.cssTransitions = !0), i.options.fade && ("number" == typeof i.options.zIndex ? i.options.zIndex < 3 && (i.options.zIndex = 3) : i.options.zIndex = i.defaults.zIndex), void 0 !== e.OTransform && (i.animType = "OTransform", i.transformType = "-o-transform", i.transitionType = "OTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.MozTransform && (i.animType = "MozTransform", i.transformType = "-moz-transform", i.transitionType = "MozTransition", void 0 === e.perspectiveProperty && void 0 === e.MozPerspective && (i.animType = !1)), void 0 !== e.webkitTransform && (i.animType = "webkitTransform", i.transformType = "-webkit-transform", i.transitionType = "webkitTransition", void 0 === e.perspectiveProperty && void 0 === e.webkitPerspective && (i.animType = !1)), void 0 !== e.msTransform && (i.animType = "msTransform", i.transformType = "-ms-transform", i.transitionType = "msTransition", void 0 === e.msTransform && (i.animType = !1)), void 0 !== e.transform && !1 !== i.animType && (i.animType = "transform", i.transformType = "transform", i.transitionType = "transition"), i.transformsEnabled = i.options.useTransform && null !== i.animType && !1 !== i.animType }, e.prototype.setSlideClasses = function (i) { var e, t, o, s, n = this; if (t = n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"), n.$slides.eq(i).addClass("slick-current"), !0 === n.options.centerMode) { var r = n.options.slidesToShow % 2 == 0 ? 1 : 0; e = Math.floor(n.options.slidesToShow / 2), !0 === n.options.infinite && (i >= e && i <= n.slideCount - 1 - e ? n.$slides.slice(i - e + r, i + e + 1).addClass("slick-active").attr("aria-hidden", "false") : (o = n.options.slidesToShow + i, t.slice(o - e + 1 + r, o + e + 2).addClass("slick-active").attr("aria-hidden", "false")), 0 === i ? t.eq(t.length - 1 - n.options.slidesToShow).addClass("slick-center") : i === n.slideCount - 1 && t.eq(n.options.slidesToShow).addClass("slick-center")), n.$slides.eq(i).addClass("slick-center") } else i >= 0 && i <= n.slideCount - n.options.slidesToShow ? n.$slides.slice(i, i + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false") : t.length <= n.options.slidesToShow ? t.addClass("slick-active").attr("aria-hidden", "false") : (s = n.slideCount % n.options.slidesToShow, o = !0 === n.options.infinite ? n.options.slidesToShow + i : i, n.options.slidesToShow == n.options.slidesToScroll && n.slideCount - i < n.options.slidesToShow ? t.slice(o - (n.options.slidesToShow - s), o + s).addClass("slick-active").attr("aria-hidden", "false") : t.slice(o, o + n.options.slidesToShow).addClass("slick-active").attr("aria-hidden", "false")); "ondemand" !== n.options.lazyLoad && "anticipated" !== n.options.lazyLoad || n.lazyLoad() }, e.prototype.setupInfinite = function () { var e, t, o, s = this; if (!0 === s.options.fade && (s.options.centerMode = !1), !0 === s.options.infinite && !1 === s.options.fade && (t = null, s.slideCount > s.options.slidesToShow)) { for (o = !0 === s.options.centerMode ? s.options.slidesToShow + 1 : s.options.slidesToShow, e = s.slideCount; e > s.slideCount - o; e -= 1)t = e - 1, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t - s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned"); for (e = 0; e < o + s.slideCount; e += 1)t = e, i(s.$slides[t]).clone(!0).attr("id", "").attr("data-slick-index", t + s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned"); s.$slideTrack.find(".slick-cloned").find("[id]").each(function () { i(this).attr("id", "") }) } }, e.prototype.interrupt = function (i) { var e = this; i || e.autoPlay(), e.interrupted = i }, e.prototype.selectHandler = function (e) { var t = this, o = i(e.target).is(".slick-slide") ? i(e.target) : i(e.target).parents(".slick-slide"), s = parseInt(o.attr("data-slick-index")); s || (s = 0), t.slideCount <= t.options.slidesToShow ? t.slideHandler(s, !1, !0) : t.slideHandler(s) }, e.prototype.slideHandler = function (i, e, t) { var o, s, n, r, l, d = null, a = this; if (e = e || !1, !(!0 === a.animating && !0 === a.options.waitForAnimate || !0 === a.options.fade && a.currentSlide === i)) if (!1 === e && a.asNavFor(i), o = i, d = a.getLeft(o), r = a.getLeft(a.currentSlide), a.currentLeft = null === a.swipeLeft ? r : a.swipeLeft, !1 === a.options.infinite && !1 === a.options.centerMode && (i < 0 || i > a.getDotCount() * a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () { a.postSlide(o) }) : a.postSlide(o)); else if (!1 === a.options.infinite && !0 === a.options.centerMode && (i < 0 || i > a.slideCount - a.options.slidesToScroll)) !1 === a.options.fade && (o = a.currentSlide, !0 !== t ? a.animateSlide(r, function () { a.postSlide(o) }) : a.postSlide(o)); else { if (a.options.autoplay && clearInterval(a.autoPlayTimer), s = o < 0 ? a.slideCount % a.options.slidesToScroll != 0 ? a.slideCount - a.slideCount % a.options.slidesToScroll : a.slideCount + o : o >= a.slideCount ? a.slideCount % a.options.slidesToScroll != 0 ? 0 : o - a.slideCount : o, a.animating = !0, a.$slider.trigger("beforeChange", [a, a.currentSlide, s]), n = a.currentSlide, a.currentSlide = s, a.setSlideClasses(a.currentSlide), a.options.asNavFor && (l = (l = a.getNavTarget()).slick("getSlick")).slideCount <= l.options.slidesToShow && l.setSlideClasses(a.currentSlide), a.updateDots(), a.updateArrows(), !0 === a.options.fade) return !0 !== t ? (a.fadeSlideOut(n), a.fadeSlide(s, function () { a.postSlide(s) })) : a.postSlide(s), void a.animateHeight(); !0 !== t ? a.animateSlide(d, function () { a.postSlide(s) }) : a.postSlide(s) } }, e.prototype.startLoad = function () { var i = this; !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && (i.$prevArrow.hide(), i.$nextArrow.hide()), !0 === i.options.dots && i.slideCount > i.options.slidesToShow && i.$dots.hide(), i.$slider.addClass("slick-loading") }, e.prototype.swipeDirection = function () { var i, e, t, o, s = this; return i = s.touchObject.startX - s.touchObject.curX, e = s.touchObject.startY - s.touchObject.curY, t = Math.atan2(e, i), (o = Math.round(180 * t / Math.PI)) < 0 && (o = 360 - Math.abs(o)), o <= 45 && o >= 0 ? !1 === s.options.rtl ? "left" : "right" : o <= 360 && o >= 315 ? !1 === s.options.rtl ? "left" : "right" : o >= 135 && o <= 225 ? !1 === s.options.rtl ? "right" : "left" : !0 === s.options.verticalSwiping ? o >= 35 && o <= 135 ? "down" : "up" : "vertical" }, e.prototype.swipeEnd = function (i) { var e, t, o = this; if (o.dragging = !1, o.swiping = !1, o.scrolling) return o.scrolling = !1, !1; if (o.interrupted = !1, o.shouldClick = !(o.touchObject.swipeLength > 10), void 0 === o.touchObject.curX) return !1; if (!0 === o.touchObject.edgeHit && o.$slider.trigger("edge", [o, o.swipeDirection()]), o.touchObject.swipeLength >= o.touchObject.minSwipe) { switch (t = o.swipeDirection()) { case "left": case "down": e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide + o.getSlideCount()) : o.currentSlide + o.getSlideCount(), o.currentDirection = 0; break; case "right": case "up": e = o.options.swipeToSlide ? o.checkNavigable(o.currentSlide - o.getSlideCount()) : o.currentSlide - o.getSlideCount(), o.currentDirection = 1 }"vertical" != t && (o.slideHandler(e), o.touchObject = {}, o.$slider.trigger("swipe", [o, t])) } else o.touchObject.startX !== o.touchObject.curX && (o.slideHandler(o.currentSlide), o.touchObject = {}) }, e.prototype.swipeHandler = function (i) { var e = this; if (!(!1 === e.options.swipe || "ontouchend" in document && !1 === e.options.swipe || !1 === e.options.draggable && -1 !== i.type.indexOf("mouse"))) switch (e.touchObject.fingerCount = i.originalEvent && void 0 !== i.originalEvent.touches ? i.originalEvent.touches.length : 1, e.touchObject.minSwipe = e.listWidth / e.options.touchThreshold, !0 === e.options.verticalSwiping && (e.touchObject.minSwipe = e.listHeight / e.options.touchThreshold), i.data.action) { case "start": e.swipeStart(i); break; case "move": e.swipeMove(i); break; case "end": e.swipeEnd(i) } }, e.prototype.swipeMove = function (i) { var e, t, o, s, n, r, l = this; return n = void 0 !== i.originalEvent ? i.originalEvent.touches : null, !(!l.dragging || l.scrolling || n && 1 !== n.length) && (e = l.getLeft(l.currentSlide), l.touchObject.curX = void 0 !== n ? n[0].pageX : i.clientX, l.touchObject.curY = void 0 !== n ? n[0].pageY : i.clientY, l.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(l.touchObject.curX - l.touchObject.startX, 2))), r = Math.round(Math.sqrt(Math.pow(l.touchObject.curY - l.touchObject.startY, 2))), !l.options.verticalSwiping && !l.swiping && r > 4 ? (l.scrolling = !0, !1) : (!0 === l.options.verticalSwiping && (l.touchObject.swipeLength = r), t = l.swipeDirection(), void 0 !== i.originalEvent && l.touchObject.swipeLength > 4 && (l.swiping = !0, i.preventDefault()), s = (!1 === l.options.rtl ? 1 : -1) * (l.touchObject.curX > l.touchObject.startX ? 1 : -1), !0 === l.options.verticalSwiping && (s = l.touchObject.curY > l.touchObject.startY ? 1 : -1), o = l.touchObject.swipeLength, l.touchObject.edgeHit = !1, !1 === l.options.infinite && (0 === l.currentSlide && "right" === t || l.currentSlide >= l.getDotCount() && "left" === t) && (o = l.touchObject.swipeLength * l.options.edgeFriction, l.touchObject.edgeHit = !0), !1 === l.options.vertical ? l.swipeLeft = e + o * s : l.swipeLeft = e + o * (l.$list.height() / l.listWidth) * s, !0 === l.options.verticalSwiping && (l.swipeLeft = e + o * s), !0 !== l.options.fade && !1 !== l.options.touchMove && (!0 === l.animating ? (l.swipeLeft = null, !1) : void l.setCSS(l.swipeLeft)))) }, e.prototype.swipeStart = function (i) { var e, t = this; if (t.interrupted = !0, 1 !== t.touchObject.fingerCount || t.slideCount <= t.options.slidesToShow) return t.touchObject = {}, !1; void 0 !== i.originalEvent && void 0 !== i.originalEvent.touches && (e = i.originalEvent.touches[0]), t.touchObject.startX = t.touchObject.curX = void 0 !== e ? e.pageX : i.clientX, t.touchObject.startY = t.touchObject.curY = void 0 !== e ? e.pageY : i.clientY, t.dragging = !0 }, e.prototype.unfilterSlides = e.prototype.slickUnfilter = function () { var i = this; null !== i.$slidesCache && (i.unload(), i.$slideTrack.children(this.options.slide).detach(), i.$slidesCache.appendTo(i.$slideTrack), i.reinit()) }, e.prototype.unload = function () { var e = this; i(".slick-cloned", e.$slider).remove(), e.$dots && e.$dots.remove(), e.$prevArrow && e.htmlExpr.test(e.options.prevArrow) && e.$prevArrow.remove(), e.$nextArrow && e.htmlExpr.test(e.options.nextArrow) && e.$nextArrow.remove(), e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", "") }, e.prototype.unslick = function (i) { var e = this; e.$slider.trigger("unslick", [e, i]), e.destroy() }, e.prototype.updateArrows = function () { var i = this; Math.floor(i.options.slidesToShow / 2), !0 === i.options.arrows && i.slideCount > i.options.slidesToShow && !i.options.infinite && (i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"), 0 === i.currentSlide ? (i.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - i.options.slidesToShow && !1 === i.options.centerMode ? (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false")) : i.currentSlide >= i.slideCount - 1 && !0 === i.options.centerMode && (i.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"), i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"))) }, e.prototype.updateDots = function () { var i = this; null !== i.$dots && (i.$dots.find("li").removeClass("slick-active").end(), i.$dots.find("li").eq(Math.floor(i.currentSlide / i.options.slidesToScroll)).addClass("slick-active")) }, e.prototype.visibility = function () { var i = this; i.options.autoplay && (document[i.hidden] ? i.interrupted = !0 : i.interrupted = !1) }, i.fn.slick = function () { var i, t, o = this, s = arguments[0], n = Array.prototype.slice.call(arguments, 1), r = o.length; for (i = 0; i < r; i++)if ("object" == typeof s || void 0 === s ? o[i].slick = new e(o[i], s) : t = o[i].slick[s].apply(o[i].slick, n), void 0 !== t) return t; return o } });;
window.onload = function () {

    var winheight, docheight, docwidth, trackLength;

    function getmeasurements() {
        winheight = window.innerHeight;
        docheight = document.body.clientHeight;
        docwidth = document.body.clientWidth;
        trackLength = docheight - winheight;
    }

    function amountscrolled() {
        var scrollTop = window.pageYOffset || (document.body.parentNode || document.body).scrollTop;

        var amount = Math.floor(scrollTop / trackLength * 100);

        if (amount >= 23)
            $('.stickyquotebutton').css('right', '0');
        else
            $('.stickyquotebutton').css('right', '-4%');
    }


    if ($('.stickyquotebutton').length > 0) {
        getmeasurements();
        amountscrolled();

        window.addEventListener('resize', function () {
            getmeasurements();
        }, false);

        window.addEventListener('scroll', function () {
            setTimeout(function () {
                amountscrolled();
            }, 10);
        }, false);
    }
};

$(function() {
    // Jump to Article Sliding Animation
    $('.stickyquotebutton').on('click', function () {
        $('html, body').animate({
            scrollTop: 0
        }, 1000);
    });
});;
$(document).ready(function () {
    if ($('.toFromLLA').length > 0) {
        $('.widget-zone-area').hide();
        $('.widget-zone-area').removeClass('no-visibility');
        $('.overlay').show();
        $('.panel-link').on('click', function () {
            var $this = $(this);
            var panelAreaId = $this.attr('panel-area-id');
            var panelArea = $('#' + panelAreaId);

            $this.addClass('active');
            $('.top-row').not(this).removeClass('active');
            $('.widget-zone-area').hide();
            $('.hide-by-default').show();
            $('.panel-area').hide();
            $('.main').hide();
            panelArea.fadeIn();

            if ($this.hasClass('hlFlyingFromLLA')) {
                WizardScroll('.bottomScrollFromLLA', 0);
            }
            else if ($this.hasClass('hlFlyingToLLA')) {
                WizardScroll('.bottomScrollToLLA', 0);
            } else {
                WizardScroll('#' + panelAreaId, 25);
            }
        });

        $('.zone-link').on('click', function () {
            //fix for tablets & mobile to realign columns
            salvattore.rescanMediaQueries();

            var widgetZoneArea = $(this);
            var widgetZoneAreaId = widgetZoneArea.attr('widget-zone-area-id');
            var parentPanelArea = widgetZoneArea.closest('.panel-area');

            $('.main').fadeIn();
            $(this).addClass('active');
            $('.zone-link').not(this).removeClass('active');
            $('.panel-area').not(parentPanelArea).hide();
            $('.widget-zone-area').hide();
            $('.hide-by-default').show();
            $('#' + widgetZoneAreaId).fadeIn();
            WizardScroll('#' + widgetZoneAreaId, 25);
        });

        $('.top-row').on('click', function () {
            var panelAreaId = $(this).attr('id');

            $('.top-row').not(this).removeClass('active');
            $('#HdnTopRow').val(panelAreaId);
        });

        $('.bottom-row').on('click', function () {
            var panelAreaId = $(this).attr('id');
            $('#HdnBottomRow').val(panelAreaId);
        });

        if ($('#HdnTopRow').val() !== '') {
            var hdnTopRow = $('#HdnTopRow').val();
            $('#' + hdnTopRow).trigger('click');

            if ($('#HdnBottomRow').val() !== '') {
                var hdnBottomRow = $('#HdnBottomRow').val();
                $('#' + hdnBottomRow).trigger('click');
            }
        }
    }
});;
/* Trainline widget */

window.addEventListener('load', function () {
	var trainlineWidgets = document.querySelectorAll('[data-trainline-widget]');
	for (var i = 0; i < trainlineWidgets.length; i++) {
		let trainlineWidget = trainlineWidgets[i];
		trainlineWidget.classList.remove('is-active');

		let trainlineWidgetSource = trainlineWidget.dataset.trainlineWidget;

		let trainlineWidgetIframe = document.createElement('iframe');
		trainlineWidgetIframe.addEventListener('load', function() {
			trainlineWidget.classList.add('is-active');
		});
		trainlineWidgetIframe.src = trainlineWidgetSource;
		trainlineWidgetIframe.scrolling = 'no';
		trainlineWidgetIframe.allowFullscreen = true;
		trainlineWidget.appendChild(trainlineWidgetIframe);
	}
});;
$(document).ready(function () {
    var $trainTimes = $('[data-train-times]');
    if ($trainTimes.length > 0) {
        if ($('#showArrivalsVal').val() === 'true') {
            $trainTimes.find('ul.flight-tabs li').removeClass('current');
            $trainTimes.find('.flight-tab--content').removeClass('current');
            $trainTimes.find('*[data-tab="arrivals"]').addClass('current');
            $trainTimes.find('#arrivals').addClass('current');
        }
        
        $trainTimes.find('.train-details--expanded').hide();
        
        $trainTimes.find('.train-details').on('click', function () {
            var $this = $(this);
            $this.toggleClass('expanded');
            $this.find('.fa-angle-down, .fa-angle-up').toggleClass('fa-angle-down fa-angle-up');
            $this.find('.train-details--expanded').slideToggle();
        });

        $trainTimes.find('.flight-tab--link').on('click', function () {
            var $this = $(this);
            var dataTab = $this.attr('data-tab');
            $trainTimes.find('.flight-tab--link').not(this).removeClass('current');
            $this.addClass('current');
            $trainTimes.find('.flight-tab--content').removeClass('current');
            $trainTimes.find('#' + dataTab).addClass('current');
        });
    }
});;
/*!
 * typeahead.js 0.11.1
 * https://github.com/twitter/typeahead.js
 * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
 */

(function (root, factory) {
	if (typeof define === "function" && define.amd) {
		define("bloodhound", ["jquery"], function (a0) {
			return root["Bloodhound"] = factory(a0);
		});
	} else if (typeof exports === "object") {
		module.exports = factory(require("jquery"));
	} else {
		root["Bloodhound"] = factory(jQuery);
	}
})(this, function ($) {
	var _ = function () {
		"use strict";
		return {
			isMsie: function () {
				return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
			},
			isBlankString: function (str) {
				return !str || /^\s*$/.test(str);
			},
			escapeRegExChars: function (str) {
				return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
			},
			isString: function (obj) {
				return typeof obj === "string";
			},
			isNumber: function (obj) {
				return typeof obj === "number";
			},
			isArray: $.isArray,
			isFunction: $.isFunction,
			isObject: $.isPlainObject,
			isUndefined: function (obj) {
				return typeof obj === "undefined";
			},
			isElement: function (obj) {
				return !!(obj && obj.nodeType === 1);
			},
			isJQuery: function (obj) {
				return obj instanceof $;
			},
			toStr: function toStr(s) {
				return _.isUndefined(s) || s === null ? "" : s + "";
			},
			bind: $.proxy,
			each: function (collection, cb) {
				$.each(collection, reverseArgs);
				function reverseArgs(index, value) {
					return cb(value, index);
				}
			},
			map: $.map,
			filter: $.grep,
			every: function (obj, test) {
				var result = true;
				if (!obj) {
					return result;
				}
				$.each(obj, function (key, val) {
					if (!(result = test.call(null, val, key, obj))) {
						return false;
					}
				});
				return !!result;
			},
			some: function (obj, test) {
				var result = false;
				if (!obj) {
					return result;
				}
				$.each(obj, function (key, val) {
					if (result = test.call(null, val, key, obj)) {
						return false;
					}
				});
				return !!result;
			},
			mixin: $.extend,
			identity: function (x) {
				return x;
			},
			clone: function (obj) {
				return $.extend(true, {}, obj);
			},
			getIdGenerator: function () {
				var counter = 0;
				return function () {
					return counter++;
				};
			},
			templatify: function templatify(obj) {
				return $.isFunction(obj) ? obj : template;
				function template() {
					return String(obj);
				}
			},
			defer: function (fn) {
				setTimeout(fn, 0);
			},
			debounce: function (func, wait, immediate) {
				var timeout, result;
				return function () {
					var context = this, args = arguments, later, callNow;
					later = function () {
						timeout = null;
						if (!immediate) {
							result = func.apply(context, args);
						}
					};
					callNow = immediate && !timeout;
					clearTimeout(timeout);
					timeout = setTimeout(later, wait);
					if (callNow) {
						result = func.apply(context, args);
					}
					return result;
				};
			},
			throttle: function (func, wait) {
				var context, args, timeout, result, previous, later;
				previous = 0;
				later = function () {
					previous = new Date();
					timeout = null;
					result = func.apply(context, args);
				};
				return function () {
					var now = new Date(), remaining = wait - (now - previous);
					context = this;
					args = arguments;
					if (remaining <= 0) {
						clearTimeout(timeout);
						timeout = null;
						previous = now;
						result = func.apply(context, args);
					} else if (!timeout) {
						timeout = setTimeout(later, remaining);
					}
					return result;
				};
			},
			stringify: function (val) {
				return _.isString(val) ? val : JSON.stringify(val);
			},
			noop: function () { }
		};
	}();
	var VERSION = "0.11.1";
	var tokenizers = function () {
		"use strict";
		return {
			nonword: nonword,
			whitespace: whitespace,
			obj: {
				nonword: getObjTokenizer(nonword),
				whitespace: getObjTokenizer(whitespace)
			}
		};
		function whitespace(str) {
			str = _.toStr(str);
			return str ? str.split(/\s+/) : [];
		}
		function nonword(str) {
			str = _.toStr(str);
			return str ? str.split(/\W+/) : [];
		}
		function getObjTokenizer(tokenizer) {
			return function setKey(keys) {
				keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);
				return function tokenize(o) {
					var tokens = [];
					_.each(keys, function (k) {
						tokens = tokens.concat(tokenizer(_.toStr(o[k])));
					});
					return tokens;
				};
			};
		}
	}();
	var LruCache = function () {
		"use strict";
		function LruCache(maxSize) {
			this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
			this.reset();
			if (this.maxSize <= 0) {
				this.set = this.get = $.noop;
			}
		}
		_.mixin(LruCache.prototype, {
			set: function set(key, val) {
				var tailItem = this.list.tail, node;
				if (this.size >= this.maxSize) {
					this.list.remove(tailItem);
					delete this.hash[tailItem.key];
					this.size--;
				}
				if (node = this.hash[key]) {
					node.val = val;
					this.list.moveToFront(node);
				} else {
					node = new Node(key, val);
					this.list.add(node);
					this.hash[key] = node;
					this.size++;
				}
			},
			get: function get(key) {
				var node = this.hash[key];
				if (node) {
					this.list.moveToFront(node);
					return node.val;
				}
			},
			reset: function reset() {
				this.size = 0;
				this.hash = {};
				this.list = new List();
			}
		});
		function List() {
			this.head = this.tail = null;
		}
		_.mixin(List.prototype, {
			add: function add(node) {
				if (this.head) {
					node.next = this.head;
					this.head.prev = node;
				}
				this.head = node;
				this.tail = this.tail || node;
			},
			remove: function remove(node) {
				node.prev ? node.prev.next = node.next : this.head = node.next;
				node.next ? node.next.prev = node.prev : this.tail = node.prev;
			},
			moveToFront: function (node) {
				this.remove(node);
				this.add(node);
			}
		});
		function Node(key, val) {
			this.key = key;
			this.val = val;
			this.prev = this.next = null;
		}
		return LruCache;
	}();
	var PersistentStorage = function () {
		"use strict";
		var LOCAL_STORAGE;
		try {
			LOCAL_STORAGE = window.localStorage;
			LOCAL_STORAGE.setItem("~~~", "!");
			LOCAL_STORAGE.removeItem("~~~");
		} catch (err) {
			LOCAL_STORAGE = null;
		}
		function PersistentStorage(namespace, override) {
			this.prefix = ["__", namespace, "__"].join("");
			this.ttlKey = "__ttl__";
			this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
			this.ls = override || LOCAL_STORAGE;
			!this.ls && this._noop();
		}
		_.mixin(PersistentStorage.prototype, {
			_prefix: function (key) {
				return this.prefix + key;
			},
			_ttlKey: function (key) {
				return this._prefix(key) + this.ttlKey;
			},
			_noop: function () {
				this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;
			},
			_safeSet: function (key, val) {
				try {
					this.ls.setItem(key, val);
				} catch (err) {
					if (err.name === "QuotaExceededError") {
						this.clear();
						this._noop();
					}
				}
			},
			get: function (key) {
				if (this.isExpired(key)) {
					this.remove(key);
				}
				return decode(this.ls.getItem(this._prefix(key)));
			},
			set: function (key, val, ttl) {
				if (_.isNumber(ttl)) {
					this._safeSet(this._ttlKey(key), encode(now() + ttl));
				} else {
					this.ls.removeItem(this._ttlKey(key));
				}
				return this._safeSet(this._prefix(key), encode(val));
			},
			remove: function (key) {
				this.ls.removeItem(this._ttlKey(key));
				this.ls.removeItem(this._prefix(key));
				return this;
			},
			clear: function () {
				var i, keys = gatherMatchingKeys(this.keyMatcher);
				for (i = keys.length; i--;) {
					this.remove(keys[i]);
				}
				return this;
			},
			isExpired: function (key) {
				var ttl = decode(this.ls.getItem(this._ttlKey(key)));
				return _.isNumber(ttl) && now() > ttl ? true : false;
			}
		});
		return PersistentStorage;
		function now() {
			return new Date().getTime();
		}
		function encode(val) {
			return JSON.stringify(_.isUndefined(val) ? null : val);
		}
		function decode(val) {
			return $.parseJSON(val);
		}
		function gatherMatchingKeys(keyMatcher) {
			var i, key, keys = [], len = LOCAL_STORAGE.length;
			for (i = 0; i < len; i++) {
				if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {
					keys.push(key.replace(keyMatcher, ""));
				}
			}
			return keys;
		}
	}();
	var Transport = function () {
		"use strict";
		var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
		function Transport(o) {
			o = o || {};
			this.cancelled = false;
			this.lastReq = null;
			this._send = o.transport;
			this._get = o.limiter ? o.limiter(this._get) : this._get;
			this._cache = o.cache === false ? new LruCache(0) : sharedCache;
		}
		Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
			maxPendingRequests = num;
		};
		Transport.resetCache = function resetCache() {
			sharedCache.reset();
		};
		_.mixin(Transport.prototype, {
			_fingerprint: function fingerprint(o) {
				o = o || {};
				return o.url + o.type + $.param(o.data || {});
			},
			_get: function (o, cb) {
				var that = this, fingerprint, jqXhr;
				fingerprint = this._fingerprint(o);
				if (this.cancelled || fingerprint !== this.lastReq) {
					return;
				}
				if (jqXhr = pendingRequests[fingerprint]) {
					jqXhr.done(done).fail(fail);
				} else if (pendingRequestsCount < maxPendingRequests) {
					pendingRequestsCount++;
					pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);
				} else {
					this.onDeckRequestArgs = [].slice.call(arguments, 0);
				}
				function done(resp) {
					cb(null, resp);
					that._cache.set(fingerprint, resp);
				}
				function fail() {
					cb(true);
				}
				function always() {
					pendingRequestsCount--;
					delete pendingRequests[fingerprint];
					if (that.onDeckRequestArgs) {
						that._get.apply(that, that.onDeckRequestArgs);
						that.onDeckRequestArgs = null;
					}
				}
			},
			get: function (o, cb) {
				var resp, fingerprint;
				cb = cb || $.noop;
				o = _.isString(o) ? {
					url: o
				} : o || {};
				fingerprint = this._fingerprint(o);
				this.cancelled = false;
				this.lastReq = fingerprint;
				if (resp = this._cache.get(fingerprint)) {
					cb(null, resp);
				} else {
					this._get(o, cb);
				}
			},
			cancel: function () {
				this.cancelled = true;
			}
		});
		return Transport;
	}();
	var SearchIndex = window.SearchIndex = function () {
		"use strict";
		var CHILDREN = "c", IDS = "i";
		function SearchIndex(o) {
			o = o || {};
			if (!o.datumTokenizer || !o.queryTokenizer) {
				$.error("datumTokenizer and queryTokenizer are both required");
			}
			this.identify = o.identify || _.stringify;
			this.datumTokenizer = o.datumTokenizer;
			this.queryTokenizer = o.queryTokenizer;
			this.reset();
		}
		_.mixin(SearchIndex.prototype, {
			bootstrap: function bootstrap(o) {
				this.datums = o.datums;
				this.trie = o.trie;
			},
			add: function (data) {
				var that = this;
				data = _.isArray(data) ? data : [data];
				_.each(data, function (datum) {
					var id, tokens;
					that.datums[id = that.identify(datum)] = datum;
					tokens = normalizeTokens(that.datumTokenizer(datum));
					_.each(tokens, function (token) {
						var node, chars, ch;
						node = that.trie;
						chars = token.split("");
						while (ch = chars.shift()) {
							node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());
							node[IDS].push(id);
						}
					});
				});
			},
			get: function get(ids) {
				var that = this;
				return _.map(ids, function (id) {
					return that.datums[id];
				});
			},
			search: function search(query) {
				var that = this, tokens, matches;
				tokens = normalizeTokens(this.queryTokenizer(query));
				_.each(tokens, function (token) {
					var node, chars, ch, ids;
					if (matches && matches.length === 0) {
						return false;
					}
					node = that.trie;
					chars = token.split("");
					while (node && (ch = chars.shift())) {
						node = node[CHILDREN][ch];
					}
					if (node && chars.length === 0) {
						ids = node[IDS].slice(0);
						matches = matches ? getIntersection(matches, ids) : ids;
					} else {
						matches = [];
						return false;
					}
				});
				return matches ? _.map(unique(matches), function (id) {
					return that.datums[id];
				}) : [];
			},
			all: function all() {
				var values = [];
				for (var key in this.datums) {
					values.push(this.datums[key]);
				}
				return values;
			},
			reset: function reset() {
				this.datums = {};
				this.trie = newNode();
			},
			serialize: function serialize() {
				return {
					datums: this.datums,
					trie: this.trie
				};
			}
		});
		return SearchIndex;
		function normalizeTokens(tokens) {
			tokens = _.filter(tokens, function (token) {
				return !!token;
			});
			tokens = _.map(tokens, function (token) {
				return token.toLowerCase();
			});
			return tokens;
		}
		function newNode() {
			var node = {};
			node[IDS] = [];
			node[CHILDREN] = {};
			return node;
		}
		function unique(array) {
			var seen = {}, uniques = [];
			for (var i = 0, len = array.length; i < len; i++) {
				if (!seen[array[i]]) {
					seen[array[i]] = true;
					uniques.push(array[i]);
				}
			}
			return uniques;
		}
		function getIntersection(arrayA, arrayB) {
			var ai = 0, bi = 0, intersection = [];
			arrayA = arrayA.sort();
			arrayB = arrayB.sort();
			var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
			while (ai < lenArrayA && bi < lenArrayB) {
				if (arrayA[ai] < arrayB[bi]) {
					ai++;
				} else if (arrayA[ai] > arrayB[bi]) {
					bi++;
				} else {
					intersection.push(arrayA[ai]);
					ai++;
					bi++;
				}
			}
			return intersection;
		}
	}();
	var Prefetch = function () {
		"use strict";
		var keys;
		keys = {
			data: "data",
			protocol: "protocol",
			thumbprint: "thumbprint"
		};
		function Prefetch(o) {
			this.url = o.url;
			this.ttl = o.ttl;
			this.cache = o.cache;
			this.prepare = o.prepare;
			this.transform = o.transform;
			this.transport = o.transport;
			this.thumbprint = o.thumbprint;
			this.storage = new PersistentStorage(o.cacheKey);
		}
		_.mixin(Prefetch.prototype, {
			_settings: function settings() {
				return {
					url: this.url,
					type: "GET",
					dataType: "json"
				};
			},
			store: function store(data) {
				if (!this.cache) {
					return;
				}
				this.storage.set(keys.data, data, this.ttl);
				this.storage.set(keys.protocol, location.protocol, this.ttl);
				this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);
			},
			fromCache: function fromCache() {
				var stored = {}, isExpired;
				if (!this.cache) {
					return null;
				}
				stored.data = this.storage.get(keys.data);
				stored.protocol = this.storage.get(keys.protocol);
				stored.thumbprint = this.storage.get(keys.thumbprint);
				isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;
				return stored.data && !isExpired ? stored.data : null;
			},
			fromNetwork: function (cb) {
				var that = this, settings;
				if (!cb) {
					return;
				}
				settings = this.prepare(this._settings());
				this.transport(settings).fail(onError).done(onResponse);
				function onError() {
					cb(true);
				}
				function onResponse(resp) {
					cb(null, that.transform(resp));
				}
			},
			clear: function clear() {
				this.storage.clear();
				return this;
			}
		});
		return Prefetch;
	}();
	var Remote = function () {
		"use strict";
		function Remote(o) {
			this.url = o.url;
			this.prepare = o.prepare;
			this.transform = o.transform;
			this.transport = new Transport({
				cache: o.cache,
				limiter: o.limiter,
				transport: o.transport
			});
		}
		_.mixin(Remote.prototype, {
			_settings: function settings() {
				return {
					url: this.url,
					type: "GET",
					dataType: "json"
				};
			},
			get: function get(query, cb) {
				var that = this, settings;
				if (!cb) {
					return;
				}
				query = query || "";
				settings = this.prepare(query, this._settings());
				return this.transport.get(settings, onResponse);
				function onResponse(err, resp) {
					err ? cb([]) : cb(that.transform(resp));
				}
			},
			cancelLastRequest: function cancelLastRequest() {
				this.transport.cancel();
			}
		});
		return Remote;
	}();
	var oParser = function () {
		"use strict";
		return function parse(o) {
			var defaults, sorter;
			defaults = {
				initialize: true,
				identify: _.stringify,
				datumTokenizer: null,
				queryTokenizer: null,
				sufficient: 5,
				sorter: null,
				local: [],
				prefetch: null,
				remote: null
			};
			o = _.mixin(defaults, o || {});
			!o.datumTokenizer && $.error("datumTokenizer is required");
			!o.queryTokenizer && $.error("queryTokenizer is required");
			sorter = o.sorter;
			o.sorter = sorter ? function (x) {
				return x.sort(sorter);
			} : _.identity;
			o.local = _.isFunction(o.local) ? o.local() : o.local;
			o.prefetch = parsePrefetch(o.prefetch);
			o.remote = parseRemote(o.remote);
			return o;
		};
		function parsePrefetch(o) {
			var defaults;
			if (!o) {
				return null;
			}
			defaults = {
				url: null,
				ttl: 24 * 60 * 60 * 1e3,
				cache: true,
				cacheKey: null,
				thumbprint: "",
				prepare: _.identity,
				transform: _.identity,
				transport: null
			};
			o = _.isString(o) ? {
				url: o
			} : o;
			o = _.mixin(defaults, o);
			!o.url && $.error("prefetch requires url to be set");
			o.transform = o.filter || o.transform;
			o.cacheKey = o.cacheKey || o.url;
			o.thumbprint = VERSION + o.thumbprint;
			o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
			return o;
		}
		function parseRemote(o) {
			var defaults;
			if (!o) {
				return;
			}
			defaults = {
				url: null,
				cache: true,
				prepare: null,
				replace: null,
				wildcard: null,
				limiter: null,
				rateLimitBy: "debounce",
				rateLimitWait: 300,
				transform: _.identity,
				transport: null
			};
			o = _.isString(o) ? {
				url: o
			} : o;
			o = _.mixin(defaults, o);
			!o.url && $.error("remote requires url to be set");
			o.transform = o.filter || o.transform;
			o.prepare = toRemotePrepare(o);
			o.limiter = toLimiter(o);
			o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
			delete o.replace;
			delete o.wildcard;
			delete o.rateLimitBy;
			delete o.rateLimitWait;
			return o;
		}
		function toRemotePrepare(o) {
			var prepare, replace, wildcard;
			prepare = o.prepare;
			replace = o.replace;
			wildcard = o.wildcard;
			if (prepare) {
				return prepare;
			}
			if (replace) {
				prepare = prepareByReplace;
			} else if (o.wildcard) {
				prepare = prepareByWildcard;
			} else {
				prepare = idenityPrepare;
			}
			return prepare;
			function prepareByReplace(query, settings) {
				settings.url = replace(settings.url, query);
				return settings;
			}
			function prepareByWildcard(query, settings) {
				settings.url = settings.url.replace(wildcard, encodeURIComponent(query));
				return settings;
			}
			function idenityPrepare(query, settings) {
				return settings;
			}
		}
		function toLimiter(o) {
			var limiter, method, wait;
			limiter = o.limiter;
			method = o.rateLimitBy;
			wait = o.rateLimitWait;
			if (!limiter) {
				limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);
			}
			return limiter;
			function debounce(wait) {
				return function debounce(fn) {
					return _.debounce(fn, wait);
				};
			}
			function throttle(wait) {
				return function throttle(fn) {
					return _.throttle(fn, wait);
				};
			}
		}
		function callbackToDeferred(fn) {
			return function wrapper(o) {
				var deferred = $.Deferred();
				fn(o, onSuccess, onError);
				return deferred;
				function onSuccess(resp) {
					_.defer(function () {
						deferred.resolve(resp);
					});
				}
				function onError(err) {
					_.defer(function () {
						deferred.reject(err);
					});
				}
			};
		}
	}();
	var Bloodhound = function () {
		"use strict";
		var old;
		old = window && window.Bloodhound;
		function Bloodhound(o) {
			o = oParser(o);
			this.sorter = o.sorter;
			this.identify = o.identify;
			this.sufficient = o.sufficient;
			this.local = o.local;
			this.remote = o.remote ? new Remote(o.remote) : null;
			this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;
			this.index = new SearchIndex({
				identify: this.identify,
				datumTokenizer: o.datumTokenizer,
				queryTokenizer: o.queryTokenizer
			});
			o.initialize !== false && this.initialize();
		}
		Bloodhound.noConflict = function noConflict() {
			window && (window.Bloodhound = old);
			return Bloodhound;
		};
		Bloodhound.tokenizers = tokenizers;
		_.mixin(Bloodhound.prototype, {
			__ttAdapter: function ttAdapter() {
				var that = this;
				return this.remote ? withAsync : withoutAsync;
				function withAsync(query, sync, async) {
					return that.search(query, sync, async);
				}
				function withoutAsync(query, sync) {
					return that.search(query, sync);
				}
			},
			_loadPrefetch: function loadPrefetch() {
				var that = this, deferred, serialized;
				deferred = $.Deferred();
				if (!this.prefetch) {
					deferred.resolve();
				} else if (serialized = this.prefetch.fromCache()) {
					this.index.bootstrap(serialized);
					deferred.resolve();
				} else {
					this.prefetch.fromNetwork(done);
				}
				return deferred.promise();
				function done(err, data) {
					if (err) {
						return deferred.reject();
					}
					that.add(data);
					that.prefetch.store(that.index.serialize());
					deferred.resolve();
				}
			},
			_initialize: function initialize() {
				var that = this, deferred;
				this.clear();
				(this.initPromise = this._loadPrefetch()).done(addLocalToIndex);
				return this.initPromise;
				function addLocalToIndex() {
					that.add(that.local);
				}
			},
			initialize: function initialize(force) {
				return !this.initPromise || force ? this._initialize() : this.initPromise;
			},
			add: function add(data) {
				this.index.add(data);
				return this;
			},
			get: function get(ids) {
				ids = _.isArray(ids) ? ids : [].slice.call(arguments);
				return this.index.get(ids);
			},
			search: function search(query, sync, async) {
				var that = this, local;
				local = this.sorter(this.index.search(query));
				sync(this.remote ? local.slice() : local);
				if (this.remote && local.length < this.sufficient) {
					this.remote.get(query, processRemote);
				} else if (this.remote) {
					this.remote.cancelLastRequest();
				}
				return this;
				function processRemote(remote) {
					var nonDuplicates = [];
					_.each(remote, function (r) {
						!_.some(local, function (l) {
							return that.identify(r) === that.identify(l);
						}) && nonDuplicates.push(r);
					});
					async && async(nonDuplicates);
				}
			},
			all: function all() {
				return this.index.all();
			},
			clear: function clear() {
				this.index.reset();
				return this;
			},
			clearPrefetchCache: function clearPrefetchCache() {
				this.prefetch && this.prefetch.clear();
				return this;
			},
			clearRemoteCache: function clearRemoteCache() {
				Transport.resetCache();
				return this;
			},
			ttAdapter: function ttAdapter() {
				return this.__ttAdapter();
			}
		});
		return Bloodhound;
	}();
	return Bloodhound;
});

(function (root, factory) {
	if (typeof define === "function" && define.amd) {
		define("typeahead.js", ["jquery"], function (a0) {
			return factory(a0);
		});
	} else if (typeof exports === "object") {
		module.exports = factory(require("jquery"));
	} else {
		factory(jQuery);
	}
})(this, function ($) {
	var _ = function () {
		"use strict";
		return {
			isMsie: function () {
				return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
			},
			isBlankString: function (str) {
				return !str || /^\s*$/.test(str);
			},
			escapeRegExChars: function (str) {
				return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
			},
			isString: function (obj) {
				return typeof obj === "string";
			},
			isNumber: function (obj) {
				return typeof obj === "number";
			},
			isArray: $.isArray,
			isFunction: $.isFunction,
			isObject: $.isPlainObject,
			isUndefined: function (obj) {
				return typeof obj === "undefined";
			},
			isElement: function (obj) {
				return !!(obj && obj.nodeType === 1);
			},
			isJQuery: function (obj) {
				return obj instanceof $;
			},
			toStr: function toStr(s) {
				return _.isUndefined(s) || s === null ? "" : s + "";
			},
			bind: $.proxy,
			each: function (collection, cb) {
				$.each(collection, reverseArgs);
				function reverseArgs(index, value) {
					return cb(value, index);
				}
			},
			map: $.map,
			filter: $.grep,
			every: function (obj, test) {
				var result = true;
				if (!obj) {
					return result;
				}
				$.each(obj, function (key, val) {
					if (!(result = test.call(null, val, key, obj))) {
						return false;
					}
				});
				return !!result;
			},
			some: function (obj, test) {
				var result = false;
				if (!obj) {
					return result;
				}
				$.each(obj, function (key, val) {
					if (result = test.call(null, val, key, obj)) {
						return false;
					}
				});
				return !!result;
			},
			mixin: $.extend,
			identity: function (x) {
				return x;
			},
			clone: function (obj) {
				return $.extend(true, {}, obj);
			},
			getIdGenerator: function () {
				var counter = 0;
				return function () {
					return counter++;
				};
			},
			templatify: function templatify(obj) {
				return $.isFunction(obj) ? obj : template;
				function template() {
					return String(obj);
				}
			},
			defer: function (fn) {
				setTimeout(fn, 0);
			},
			debounce: function (func, wait, immediate) {
				var timeout, result;
				return function () {
					var context = this, args = arguments, later, callNow;
					later = function () {
						timeout = null;
						if (!immediate) {
							result = func.apply(context, args);
						}
					};
					callNow = immediate && !timeout;
					clearTimeout(timeout);
					timeout = setTimeout(later, wait);
					if (callNow) {
						result = func.apply(context, args);
					}
					return result;
				};
			},
			throttle: function (func, wait) {
				var context, args, timeout, result, previous, later;
				previous = 0;
				later = function () {
					previous = new Date();
					timeout = null;
					result = func.apply(context, args);
				};
				return function () {
					var now = new Date(), remaining = wait - (now - previous);
					context = this;
					args = arguments;
					if (remaining <= 0) {
						clearTimeout(timeout);
						timeout = null;
						previous = now;
						result = func.apply(context, args);
					} else if (!timeout) {
						timeout = setTimeout(later, remaining);
					}
					return result;
				};
			},
			stringify: function (val) {
				return _.isString(val) ? val : JSON.stringify(val);
			},
			noop: function () { }
		};
	}();
	var WWW = function () {
		"use strict";
		var defaultClassNames = {
			wrapper: "twitter-typeahead",
			input: "tt-input",
			hint: "tt-hint",
			menu: "tt-menu",
			dataset: "tt-dataset",
			suggestion: "tt-suggestion",
			selectable: "tt-selectable",
			empty: "tt-empty",
			open: "tt-open",
			cursor: "tt-cursor",
			highlight: "tt-highlight"
		};
		return build;
		function build(o) {
			var www, classes;
			classes = _.mixin({}, defaultClassNames, o);
			www = {
				css: buildCss(),
				classes: classes,
				html: buildHtml(classes),
				selectors: buildSelectors(classes)
			};
			return {
				css: www.css,
				html: www.html,
				classes: www.classes,
				selectors: www.selectors,
				mixin: function (o) {
					_.mixin(o, www);
				}
			};
		}
		function buildHtml(c) {
			return {
				wrapper: '<span class="' + c.wrapper + '"></span>',
				menu: '<div class="' + c.menu + '"></div>'
			};
		}
		function buildSelectors(classes) {
			var selectors = {};
			_.each(classes, function (v, k) {
				selectors[k] = "." + v;
			});
			return selectors;
		}
		function buildCss() {
			var css = {
				wrapper: {
					position: "relative",
					display: "inline-block"
				},
				hint: {
					position: "absolute",
					top: "0",
					left: "0",
					borderColor: "transparent",
					boxShadow: "none",
					opacity: "1"
				},
				input: {
					position: "relative",
					verticalAlign: "top",
					backgroundColor: "transparent"
				},
				inputWithNoHint: {
					position: "relative",
					verticalAlign: "top"
				},
				menu: {
					position: "absolute",
					top: "100%",
					left: "0",
					zIndex: "100",
					display: "none"
				},
				ltr: {
					left: "0",
					right: "auto"
				},
				rtl: {
					left: "auto",
					right: " 0"
				}
			};
			if (_.isMsie()) {
				_.mixin(css.input, {
					backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
				});
			}
			return css;
		}
	}();
	var EventBus = function () {
		"use strict";
		var namespace, deprecationMap;
		namespace = "typeahead:";
		deprecationMap = {
			render: "rendered",
			cursorchange: "cursorchanged",
			select: "selected",
			autocomplete: "autocompleted"
		};
		function EventBus(o) {
			if (!o || !o.el) {
				$.error("EventBus initialized without el");
			}
			this.$el = $(o.el);
		}
		_.mixin(EventBus.prototype, {
			_trigger: function (type, args) {
				var $e;
				$e = $.Event(namespace + type);
				(args = args || []).unshift($e);
				this.$el.trigger.apply(this.$el, args);
				return $e;
			},
			before: function (type) {
				var args, $e;
				args = [].slice.call(arguments, 1);
				$e = this._trigger("before" + type, args);
				return $e.isDefaultPrevented();
			},
			trigger: function (type) {
				var deprecatedType;
				this._trigger(type, [].slice.call(arguments, 1));
				if (deprecatedType = deprecationMap[type]) {
					this._trigger(deprecatedType, [].slice.call(arguments, 1));
				}
			}
		});
		return EventBus;
	}();
	var EventEmitter = function () {
		"use strict";
		var splitter = /\s+/, nextTick = getNextTick();
		return {
			onSync: onSync,
			onAsync: onAsync,
			off: off,
			trigger: trigger
		};
		function on(method, types, cb, context) {
			var type;
			if (!cb) {
				return this;
			}
			types = types.split(splitter);
			cb = context ? bindContext(cb, context) : cb;
			this._callbacks = this._callbacks || {};
			while (type = types.shift()) {
				this._callbacks[type] = this._callbacks[type] || {
					sync: [],
					async: []
				};
				this._callbacks[type][method].push(cb);
			}
			return this;
		}
		function onAsync(types, cb, context) {
			return on.call(this, "async", types, cb, context);
		}
		function onSync(types, cb, context) {
			return on.call(this, "sync", types, cb, context);
		}
		function off(types) {
			var type;
			if (!this._callbacks) {
				return this;
			}
			types = types.split(splitter);
			while (type = types.shift()) {
				delete this._callbacks[type];
			}
			return this;
		}
		function trigger(types) {
			var type, callbacks, args, syncFlush, asyncFlush;
			if (!this._callbacks) {
				return this;
			}
			types = types.split(splitter);
			args = [].slice.call(arguments, 1);
			while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
				syncFlush = getFlush(callbacks.sync, this, [type].concat(args));
				asyncFlush = getFlush(callbacks.async, this, [type].concat(args));
				syncFlush() && nextTick(asyncFlush);
			}
			return this;
		}
		function getFlush(callbacks, context, args) {
			return flush;
			function flush() {
				var cancelled;
				for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
					cancelled = callbacks[i].apply(context, args) === false;
				}
				return !cancelled;
			}
		}
		function getNextTick() {
			var nextTickFn;
			if (window.setImmediate) {
				nextTickFn = function nextTickSetImmediate(fn) {
					setImmediate(function () {
						fn();
					});
				};
			} else {
				nextTickFn = function nextTickSetTimeout(fn) {
					setTimeout(function () {
						fn();
					}, 0);
				};
			}
			return nextTickFn;
		}
		function bindContext(fn, context) {
			return fn.bind ? fn.bind(context) : function () {
				fn.apply(context, [].slice.call(arguments, 0));
			};
		}
	}();
	var highlight = function (doc) {
		"use strict";
		var defaults = {
			node: null,
			pattern: null,
			tagName: "strong",
			className: null,
			wordsOnly: false,
			caseSensitive: false
		};
		return function hightlight(o) {
			var regex;
			o = _.mixin({}, defaults, o);
			if (!o.node || !o.pattern) {
				return;
			}
			o.pattern = _.isArray(o.pattern) ? o.pattern : [o.pattern];
			regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
			traverse(o.node, hightlightTextNode);
			function hightlightTextNode(textNode) {
				var match, patternNode, wrapperNode;
				if (match = regex.exec(textNode.data)) {
					wrapperNode = doc.createElement(o.tagName);
					o.className && (wrapperNode.className = o.className);
					patternNode = textNode.splitText(match.index);
					patternNode.splitText(match[0].length);
					wrapperNode.appendChild(patternNode.cloneNode(true));
					textNode.parentNode.replaceChild(wrapperNode, patternNode);
				}
				return !!match;
			}
			function traverse(el, hightlightTextNode) {
				var childNode, TEXT_NODE_TYPE = 3;
				for (var i = 0; i < el.childNodes.length; i++) {
					childNode = el.childNodes[i];
					if (childNode.nodeType === TEXT_NODE_TYPE) {
						i += hightlightTextNode(childNode) ? 1 : 0;
					} else {
						traverse(childNode, hightlightTextNode);
					}
				}
			}
		};
		function getRegex(patterns, caseSensitive, wordsOnly) {
			var escapedPatterns = [], regexStr;
			for (var i = 0, len = patterns.length; i < len; i++) {
				escapedPatterns.push(_.escapeRegExChars(patterns[i]));
			}
			regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
			return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
		}
	}(window.document);
	var Input = function () {
		"use strict";
		var specialKeyCodeMap;
		specialKeyCodeMap = {
			9: "tab",
			27: "esc",
			37: "left",
			39: "right",
			13: "enter",
			38: "up",
			40: "down"
		};
		function Input(o, www) {
			o = o || {};
			if (!o.input) {
				$.error("input is missing");
			}
			www.mixin(this);
			this.$hint = $(o.hint);
			this.$input = $(o.input);
			this.query = this.$input.val();
			this.queryWhenFocused = this.hasFocus() ? this.query : null;
			this.$overflowHelper = buildOverflowHelper(this.$input);
			this._checkLanguageDirection();
			if (this.$hint.length === 0) {
				this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
			}
		}
		Input.normalizeQuery = function (str) {
			return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
		};
		_.mixin(Input.prototype, EventEmitter, {
			_onBlur: function onBlur() {
				this.resetInputValue();
				this.trigger("blurred");
			},
			_onFocus: function onFocus() {
				this.queryWhenFocused = this.query;
				this.trigger("focused");
			},
			_onKeydown: function onKeydown($e) {
				var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
				this._managePreventDefault(keyName, $e);
				if (keyName && this._shouldTrigger(keyName, $e)) {
					this.trigger(keyName + "Keyed", $e);
				}
			},
			_onInput: function onInput() {
				this._setQuery(this.getInputValue());
				this.clearHintIfInvalid();
				this._checkLanguageDirection();
			},
			_managePreventDefault: function managePreventDefault(keyName, $e) {
				var preventDefault;
				switch (keyName) {
					case "up":
					case "down":
						preventDefault = !withModifier($e);
						break;

					default:
						preventDefault = false;
				}
				preventDefault && $e.preventDefault();
			},
			_shouldTrigger: function shouldTrigger(keyName, $e) {
				var trigger;
				switch (keyName) {
					case "tab":
						trigger = !withModifier($e);
						break;

					default:
						trigger = true;
				}
				return trigger;
			},
			_checkLanguageDirection: function checkLanguageDirection() {
				var dir = (this.$input.css("direction") || "ltr").toLowerCase();
				if (this.dir !== dir) {
					this.dir = dir;
					this.$hint.attr("dir", dir);
					this.trigger("langDirChanged", dir);
				}
			},
			_setQuery: function setQuery(val, silent) {
				var areEquivalent, hasDifferentWhitespace;
				areEquivalent = areQueriesEquivalent(val, this.query);
				hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
				this.query = val;
				if (!silent && !areEquivalent) {
					this.trigger("queryChanged", this.query);
				} else if (!silent && hasDifferentWhitespace) {
					this.trigger("whitespaceChanged", this.query);
				}
			},
			bind: function () {
				var that = this, onBlur, onFocus, onKeydown, onInput;
				onBlur = _.bind(this._onBlur, this);
				onFocus = _.bind(this._onFocus, this);
				onKeydown = _.bind(this._onKeydown, this);
				onInput = _.bind(this._onInput, this);
				this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
				if (!_.isMsie() || _.isMsie() > 9) {
					this.$input.on("input.tt", onInput);
				} else {
					this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function ($e) {
						if (specialKeyCodeMap[$e.which || $e.keyCode]) {
							return;
						}
						_.defer(_.bind(that._onInput, that, $e));
					});
				}
				return this;
			},
			focus: function focus() {
				this.$input.focus();
			},
			blur: function blur() {
				this.$input.blur();
			},
			getLangDir: function getLangDir() {
				return this.dir;
			},
			getQuery: function getQuery() {
				return this.query || "";
			},
			setQuery: function setQuery(val, silent) {
				this.setInputValue(val);
				this._setQuery(val, silent);
			},
			hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
				return this.query !== this.queryWhenFocused;
			},
			getInputValue: function getInputValue() {
				return this.$input.val();
			},
			setInputValue: function setInputValue(value) {
				this.$input.val(value);
				this.clearHintIfInvalid();
				this._checkLanguageDirection();
			},
			resetInputValue: function resetInputValue() {
				this.setInputValue(this.query);
			},
			getHint: function getHint() {
				return this.$hint.val();
			},
			setHint: function setHint(value) {
				this.$hint.val(value);
			},
			clearHint: function clearHint() {
				this.setHint("");
			},
			clearHintIfInvalid: function clearHintIfInvalid() {
				var val, hint, valIsPrefixOfHint, isValid;
				val = this.getInputValue();
				hint = this.getHint();
				valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
				isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
				!isValid && this.clearHint();
			},
			hasFocus: function hasFocus() {
				return this.$input.is(":focus");
			},
			hasOverflow: function hasOverflow() {
				var constraint = this.$input.width() - 2;
				this.$overflowHelper.text(this.getInputValue());
				return this.$overflowHelper.width() >= constraint;
			},
			isCursorAtEnd: function () {
				var valueLength, selectionStart, range;
				valueLength = this.$input.val().length;
				selectionStart = this.$input[0].selectionStart;
				if (_.isNumber(selectionStart)) {
					return selectionStart === valueLength;
				} else if (document.selection) {
					range = document.selection.createRange();
					range.moveStart("character", -valueLength);
					return valueLength === range.text.length;
				}
				return true;
			},
			destroy: function destroy() {
				this.$hint.off(".tt");
				this.$input.off(".tt");
				this.$overflowHelper.remove();
				this.$hint = this.$input = this.$overflowHelper = $("<div>");
			}
		});
		return Input;
		function buildOverflowHelper($input) {
			return $('<pre aria-hidden="true"></pre>').css({
				position: "absolute",
				visibility: "hidden",
				whiteSpace: "pre",
				fontFamily: $input.css("font-family"),
				fontSize: $input.css("font-size"),
				fontStyle: $input.css("font-style"),
				fontVariant: $input.css("font-variant"),
				fontWeight: $input.css("font-weight"),
				wordSpacing: $input.css("word-spacing"),
				letterSpacing: $input.css("letter-spacing"),
				textIndent: $input.css("text-indent"),
				textRendering: $input.css("text-rendering"),
				textTransform: $input.css("text-transform")
			}).insertAfter($input);
		}
		function areQueriesEquivalent(a, b) {
			return Input.normalizeQuery(a) === Input.normalizeQuery(b);
		}
		function withModifier($e) {
			return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
		}
	}();
	var Dataset = function () {
		"use strict";
		var keys, nameGenerator;
		keys = {
			val: "tt-selectable-display",
			obj: "tt-selectable-object"
		};
		nameGenerator = _.getIdGenerator();
		function Dataset(o, www) {
			o = o || {};
			o.templates = o.templates || {};
			o.templates.notFound = o.templates.notFound || o.templates.empty;
			if (!o.source) {
				$.error("missing source");
			}
			if (!o.node) {
				$.error("missing node");
			}
			if (o.name && !isValidName(o.name)) {
				$.error("invalid dataset name: " + o.name);
			}
			www.mixin(this);
			this.highlight = !!o.highlight;
			this.name = o.name || nameGenerator();
			this.limit = o.limit || 5;
			this.displayFn = getDisplayFn(o.display || o.displayKey);
			this.templates = getTemplates(o.templates, this.displayFn);
			this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
			this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
			this._resetLastSuggestion();
			this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
		}
		Dataset.extractData = function extractData(el) {
			var $el = $(el);
			if ($el.data(keys.obj)) {
				return {
					val: $el.data(keys.val) || "",
					obj: $el.data(keys.obj) || null
				};
			}
			return null;
		};
		_.mixin(Dataset.prototype, EventEmitter, {
			_overwrite: function overwrite(query, suggestions) {
				suggestions = suggestions || [];
				if (suggestions.length) {
					this._renderSuggestions(query, suggestions);
				} else if (this.async && this.templates.pending) {
					this._renderPending(query);
				} else if (!this.async && this.templates.notFound) {
					this._renderNotFound(query);
				} else {
					this._empty();
				}
				this.trigger("rendered", this.name, suggestions, false);
			},
			_append: function append(query, suggestions) {
				suggestions = suggestions || [];
				if (suggestions.length && this.$lastSuggestion.length) {
					this._appendSuggestions(query, suggestions);
				} else if (suggestions.length) {
					this._renderSuggestions(query, suggestions);
				} else if (!this.$lastSuggestion.length && this.templates.notFound) {
					this._renderNotFound(query);
				}
				this.trigger("rendered", this.name, suggestions, true);
			},
			_renderSuggestions: function renderSuggestions(query, suggestions) {
				var $fragment;
				$fragment = this._getSuggestionsFragment(query, suggestions);
				this.$lastSuggestion = $fragment.children().last();
				this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
			},
			_appendSuggestions: function appendSuggestions(query, suggestions) {
				var $fragment, $lastSuggestion;
				$fragment = this._getSuggestionsFragment(query, suggestions);
				$lastSuggestion = $fragment.children().last();
				this.$lastSuggestion.after($fragment);
				this.$lastSuggestion = $lastSuggestion;
			},
			_renderPending: function renderPending(query) {
				var template = this.templates.pending;
				this._resetLastSuggestion();
				template && this.$el.html(template({
					query: query,
					dataset: this.name
				}));
			},
			_renderNotFound: function renderNotFound(query) {
				var template = this.templates.notFound;
				this._resetLastSuggestion();
				template && this.$el.html(template({
					query: query,
					dataset: this.name
				}));
			},
			_empty: function empty() {
				this.$el.empty();
				this._resetLastSuggestion();
			},
			_getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
				var that = this, fragment;
				fragment = document.createDocumentFragment();
				_.each(suggestions, function getSuggestionNode(suggestion) {
					var $el, context;
					context = that._injectQuery(query, suggestion);
					$el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
					fragment.appendChild($el[0]);
				});
				this.highlight && highlight({
					className: this.classes.highlight,
					node: fragment,
					pattern: query
				});
				return $(fragment);
			},
			_getFooter: function getFooter(query, suggestions) {
				return this.templates.footer ? this.templates.footer({
					query: query,
					suggestions: suggestions,
					dataset: this.name
				}) : null;
			},
			_getHeader: function getHeader(query, suggestions) {
				return this.templates.header ? this.templates.header({
					query: query,
					suggestions: suggestions,
					dataset: this.name
				}) : null;
			},
			_resetLastSuggestion: function resetLastSuggestion() {
				this.$lastSuggestion = $();
			},
			_injectQuery: function injectQuery(query, obj) {
				return _.isObject(obj) ? _.mixin({
					_query: query
				}, obj) : obj;
			},
			update: function update(query) {
				var that = this, canceled = false, syncCalled = false, rendered = 0;
				this.cancel();
				this.cancel = function cancel() {
					canceled = true;
					that.cancel = $.noop;
					that.async && that.trigger("asyncCanceled", query);
				};
				this.source(query, sync, async);
				!syncCalled && sync([]);
				function sync(suggestions) {
					if (syncCalled) {
						return;
					}
					syncCalled = true;
					suggestions = (suggestions || []).slice(0, that.limit);
					rendered = suggestions.length;
					that._overwrite(query, suggestions);
					if (rendered < that.limit && that.async) {
						that.trigger("asyncRequested", query);
					}
				}
				function async(suggestions) {
					suggestions = suggestions || [];
					if (!canceled && rendered < that.limit) {
						that.cancel = $.noop;
						rendered += suggestions.length;
						that._append(query, suggestions.slice(0, that.limit - rendered));
						that.async && that.trigger("asyncReceived", query);
					}
				}
			},
			cancel: $.noop,
			clear: function clear() {
				this._empty();
				this.cancel();
				this.trigger("cleared");
			},
			isEmpty: function isEmpty() {
				return this.$el.is(":empty");
			},
			destroy: function destroy() {
				this.$el = $("<div>");
			}
		});
		return Dataset;
		function getDisplayFn(display) {
			display = display || _.stringify;
			return _.isFunction(display) ? display : displayFn;
			function displayFn(obj) {
				return obj[display];
			}
		}
		function getTemplates(templates, displayFn) {
			return {
				notFound: templates.notFound && _.templatify(templates.notFound),
				pending: templates.pending && _.templatify(templates.pending),
				header: templates.header && _.templatify(templates.header),
				footer: templates.footer && _.templatify(templates.footer),
				suggestion: templates.suggestion || suggestionTemplate
			};
			function suggestionTemplate(context) {
				return $("<div>").text(displayFn(context));
			}
		}
		function isValidName(str) {
			return /^[_a-zA-Z0-9-]+$/.test(str);
		}
	}();
	var Menu = function () {
		"use strict";
		function Menu(o, www) {
			var that = this;
			o = o || {};
			if (!o.node) {
				$.error("node is required");
			}
			www.mixin(this);
			this.$node = $(o.node);
			this.query = null;
			this.datasets = _.map(o.datasets, initializeDataset);
			function initializeDataset(oDataset) {
				var node = that.$node.find(oDataset.node).first();
				oDataset.node = node.length ? node : $("<div>").appendTo(that.$node);
				return new Dataset(oDataset, www);
			}
		}
		_.mixin(Menu.prototype, EventEmitter, {
			_onSelectableClick: function onSelectableClick($e) {
				this.trigger("selectableClicked", $($e.currentTarget));
			},
			_onRendered: function onRendered(type, dataset, suggestions, async) {
				this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
				this.trigger("datasetRendered", dataset, suggestions, async);
			},
			_onCleared: function onCleared() {
				this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
				this.trigger("datasetCleared");
			},
			_propagate: function propagate() {
				this.trigger.apply(this, arguments);
			},
			_allDatasetsEmpty: function allDatasetsEmpty() {
				return _.every(this.datasets, isDatasetEmpty);
				function isDatasetEmpty(dataset) {
					return dataset.isEmpty();
				}
			},
			_getSelectables: function getSelectables() {
				return this.$node.find(this.selectors.selectable);
			},
			_removeCursor: function _removeCursor() {
				var $selectable = this.getActiveSelectable();
				$selectable && $selectable.removeClass(this.classes.cursor);
			},
			_ensureVisible: function ensureVisible($el) {
				var elTop, elBottom, nodeScrollTop, nodeHeight;
				elTop = $el.position().top;
				elBottom = elTop + $el.outerHeight(true);
				nodeScrollTop = this.$node.scrollTop();
				nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
				if (elTop < 0) {
					this.$node.scrollTop(nodeScrollTop + elTop);
				} else if (nodeHeight < elBottom) {
					this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
				}
			},
			bind: function () {
				var that = this, onSelectableClick;
				onSelectableClick = _.bind(this._onSelectableClick, this);
				this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
				_.each(this.datasets, function (dataset) {
					dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
				});
				return this;
			},
			isOpen: function isOpen() {
				return this.$node.hasClass(this.classes.open);
			},
			open: function open() {
				this.$node.addClass(this.classes.open);
			},
			close: function close() {
				this.$node.removeClass(this.classes.open);
				this._removeCursor();
			},
			setLanguageDirection: function setLanguageDirection(dir) {
				this.$node.attr("dir", dir);
			},
			selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
				var $selectables, $oldCursor, oldIndex, newIndex;
				$oldCursor = this.getActiveSelectable();
				$selectables = this._getSelectables();
				oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
				newIndex = oldIndex + delta;
				newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
				newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
				return newIndex === -1 ? null : $selectables.eq(newIndex);
			},
			setCursor: function setCursor($selectable) {
				this._removeCursor();
				if ($selectable = $selectable && $selectable.first()) {
					$selectable.addClass(this.classes.cursor);
					this._ensureVisible($selectable);
				}
			},
			getSelectableData: function getSelectableData($el) {
				return $el && $el.length ? Dataset.extractData($el) : null;
			},
			getActiveSelectable: function getActiveSelectable() {
				var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
				return $selectable.length ? $selectable : null;
			},
			getTopSelectable: function getTopSelectable() {
				var $selectable = this._getSelectables().first();
				return $selectable.length ? $selectable : null;
			},
			update: function update(query) {
				var isValidUpdate = query !== this.query;
				if (isValidUpdate) {
					this.query = query;
					_.each(this.datasets, updateDataset);
				}
				return isValidUpdate;
				function updateDataset(dataset) {
					dataset.update(query);
				}
			},
			empty: function empty() {
				_.each(this.datasets, clearDataset);
				this.query = null;
				this.$node.addClass(this.classes.empty);
				function clearDataset(dataset) {
					dataset.clear();
				}
			},
			destroy: function destroy() {
				this.$node.off(".tt");
				this.$node = $("<div>");
				_.each(this.datasets, destroyDataset);
				function destroyDataset(dataset) {
					dataset.destroy();
				}
			}
		});
		return Menu;
	}();
	var DefaultMenu = function () {
		"use strict";
		var s = Menu.prototype;
		function DefaultMenu() {
			Menu.apply(this, [].slice.call(arguments, 0));
		}
		_.mixin(DefaultMenu.prototype, Menu.prototype, {
			open: function open() {
				!this._allDatasetsEmpty() && this._show();
				return s.open.apply(this, [].slice.call(arguments, 0));
			},
			close: function close() {
				this._hide();
				return s.close.apply(this, [].slice.call(arguments, 0));
			},
			_onRendered: function onRendered() {
				if (this._allDatasetsEmpty()) {
					this._hide();
				} else {
					this.isOpen() && this._show();
				}
				return s._onRendered.apply(this, [].slice.call(arguments, 0));
			},
			_onCleared: function onCleared() {
				if (this._allDatasetsEmpty()) {
					this._hide();
				} else {
					this.isOpen() && this._show();
				}
				return s._onCleared.apply(this, [].slice.call(arguments, 0));
			},
			setLanguageDirection: function setLanguageDirection(dir) {
				this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
				return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
			},
			_hide: function hide() {
				this.$node.hide();
			},
			_show: function show() {
				this.$node.css("display", "block");
			}
		});
		return DefaultMenu;
	}();
	var Typeahead = function () {
		"use strict";
		function Typeahead(o, www) {
			var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
			o = o || {};
			if (!o.input) {
				$.error("missing input");
			}
			if (!o.menu) {
				$.error("missing menu");
			}
			if (!o.eventBus) {
				$.error("missing event bus");
			}
			www.mixin(this);
			this.eventBus = o.eventBus;
			this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
			this.input = o.input;
			this.menu = o.menu;
			this.enabled = true;
			this.active = false;
			this.input.hasFocus() && this.activate();
			this.dir = this.input.getLangDir();
			this._hacks();
			this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
			onFocused = c(this, "activate", "open", "_onFocused");
			onBlurred = c(this, "deactivate", "_onBlurred");
			onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
			onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
			onEscKeyed = c(this, "isActive", "_onEscKeyed");
			onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
			onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
			onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
			onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
			onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
			onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
			this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
		}
		_.mixin(Typeahead.prototype, {
			_hacks: function hacks() {
				var $input, $menu;
				$input = this.input.$input || $("<div>");
				$menu = this.menu.$node || $("<div>");
				$input.on("blur.tt", function ($e) {
					var active, isActive, hasActive;
					active = document.activeElement;
					isActive = $menu.is(active);
					hasActive = $menu.has(active).length > 0;
					if (_.isMsie() && (isActive || hasActive)) {
						$e.preventDefault();
						$e.stopImmediatePropagation();
						_.defer(function () {
							$input.focus();
						});
					}
				});
				$menu.on("mousedown.tt", function ($e) {
					$e.preventDefault();
				});
			},
			_onSelectableClicked: function onSelectableClicked(type, $el) {
				this.select($el);
			},
			_onDatasetCleared: function onDatasetCleared() {
				this._updateHint();
			},
			_onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
				this._updateHint();
				this.eventBus.trigger("render", suggestions, async, dataset);
			},
			_onAsyncRequested: function onAsyncRequested(type, dataset, query) {
				this.eventBus.trigger("asyncrequest", query, dataset);
			},
			_onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
				this.eventBus.trigger("asynccancel", query, dataset);
			},
			_onAsyncReceived: function onAsyncReceived(type, dataset, query) {
				this.eventBus.trigger("asyncreceive", query, dataset);
			},
			_onFocused: function onFocused() {
				this._minLengthMet() && this.menu.update(this.input.getQuery());
			},
			_onBlurred: function onBlurred() {
				if (this.input.hasQueryChangedSinceLastFocus()) {
					this.eventBus.trigger("change", this.input.getQuery());
				}
			},
			_onEnterKeyed: function onEnterKeyed(type, $e) {
				var $selectable;
				if ($selectable = this.menu.getActiveSelectable()) {
					this.select($selectable) && $e.preventDefault();
				}
			},
			_onTabKeyed: function onTabKeyed(type, $e) {
				var $selectable;
				if ($selectable = this.menu.getActiveSelectable()) {
					this.select($selectable) && $e.preventDefault();
				} else if ($selectable = this.menu.getTopSelectable()) {
					this.autocomplete($selectable) && $e.preventDefault();
				}
			},
			_onEscKeyed: function onEscKeyed() {
				this.close();
			},
			_onUpKeyed: function onUpKeyed() {
				this.moveCursor(-1);
			},
			_onDownKeyed: function onDownKeyed() {
				this.moveCursor(+1);
			},
			_onLeftKeyed: function onLeftKeyed() {
				if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
					this.autocomplete(this.menu.getTopSelectable());
				}
			},
			_onRightKeyed: function onRightKeyed() {
				if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
					this.autocomplete(this.menu.getTopSelectable());
				}
			},
			_onQueryChanged: function onQueryChanged(e, query) {
				this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
			},
			_onWhitespaceChanged: function onWhitespaceChanged() {
				this._updateHint();
			},
			_onLangDirChanged: function onLangDirChanged(e, dir) {
				if (this.dir !== dir) {
					this.dir = dir;
					this.menu.setLanguageDirection(dir);
				}
			},
			_openIfActive: function openIfActive() {
				this.isActive() && this.open();
			},
			_minLengthMet: function minLengthMet(query) {
				query = _.isString(query) ? query : this.input.getQuery() || "";
				return query.length >= this.minLength;
			},
			_updateHint: function updateHint() {
				var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
				$selectable = this.menu.getTopSelectable();
				data = this.menu.getSelectableData($selectable);
				val = this.input.getInputValue();
				if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
					query = Input.normalizeQuery(val);
					escapedQuery = _.escapeRegExChars(query);
					frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
					match = frontMatchRegEx.exec(data.val);
					match && this.input.setHint(val + match[1]);
				} else {
					this.input.clearHint();
				}
			},
			isEnabled: function isEnabled() {
				return this.enabled;
			},
			enable: function enable() {
				this.enabled = true;
			},
			disable: function disable() {
				this.enabled = false;
			},
			isActive: function isActive() {
				return this.active;
			},
			activate: function activate() {
				if (this.isActive()) {
					return true;
				} else if (!this.isEnabled() || this.eventBus.before("active")) {
					return false;
				} else {
					this.active = true;
					this.eventBus.trigger("active");
					return true;
				}
			},
			deactivate: function deactivate() {
				if (!this.isActive()) {
					return true;
				} else if (this.eventBus.before("idle")) {
					return false;
				} else {
					this.active = false;
					this.close();
					this.eventBus.trigger("idle");
					return true;
				}
			},
			isOpen: function isOpen() {
				return this.menu.isOpen();
			},
			open: function open() {
				if (!this.isOpen() && !this.eventBus.before("open")) {
					this.menu.open();
					this._updateHint();
					this.eventBus.trigger("open");
				}
				return this.isOpen();
			},
			close: function close() {
				if (this.isOpen() && !this.eventBus.before("close")) {
					this.menu.close();
					this.input.clearHint();
					this.input.resetInputValue();
					this.eventBus.trigger("close");
				}
				return !this.isOpen();
			},
			setVal: function setVal(val) {
				this.input.setQuery(_.toStr(val));
			},
			getVal: function getVal() {
				return this.input.getQuery();
			},
			select: function select($selectable) {
				var data = this.menu.getSelectableData($selectable);
				if (data && !this.eventBus.before("select", data.obj)) {
					this.input.setQuery(data.val, true);
					this.eventBus.trigger("select", data.obj);
					this.close();
					return true;
				}
				return false;
			},
			autocomplete: function autocomplete($selectable) {
				var query, data, isValid;
				query = this.input.getQuery();
				data = this.menu.getSelectableData($selectable);
				isValid = data && query !== data.val;
				if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
					this.input.setQuery(data.val);
					this.eventBus.trigger("autocomplete", data.obj);
					return true;
				}
				return false;
			},
			moveCursor: function moveCursor(delta) {
				var query, $candidate, data, payload, cancelMove;
				query = this.input.getQuery();
				$candidate = this.menu.selectableRelativeToCursor(delta);
				data = this.menu.getSelectableData($candidate);
				payload = data ? data.obj : null;
				cancelMove = this._minLengthMet() && this.menu.update(query);
				if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
					this.menu.setCursor($candidate);
					if (data) {
						this.input.setInputValue(data.val);
					} else {
						this.input.resetInputValue();
						this._updateHint();
					}
					this.eventBus.trigger("cursorchange", payload);
					return true;
				}
				return false;
			},
			destroy: function destroy() {
				this.input.destroy();
				this.menu.destroy();
			}
		});
		return Typeahead;
		function c(ctx) {
			var methods = [].slice.call(arguments, 1);
			return function () {
				var args = [].slice.call(arguments);
				_.each(methods, function (method) {
					return ctx[method].apply(ctx, args);
				});
			};
		}
	}();
	(function () {
		"use strict";
		var old, keys, methods;
		old = $.fn.typeahead;
		keys = {
			www: "tt-www",
			attrs: "tt-attrs",
			typeahead: "tt-typeahead"
		};
		methods = {
			initialize: function initialize(o, datasets) {
				var www;
				datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
				o = o || {};
				www = WWW(o.classNames);
				return this.each(attach);
				function attach() {
					var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
					_.each(datasets, function (d) {
						d.highlight = !!o.highlight;
					});
					$input = $(this);
					$wrapper = $(www.html.wrapper);
					$hint = $elOrNull(o.hint);
					$menu = $elOrNull(o.menu);
					defaultHint = o.hint !== false && !$hint;
					defaultMenu = o.menu !== false && !$menu;
					defaultHint && ($hint = buildHintFromInput($input, www));
					defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
					$hint && $hint.val("");
					$input = prepInput($input, www);
					if (defaultHint || defaultMenu) {
						$wrapper.css(www.css.wrapper);
						$input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
						$input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
					}
					MenuConstructor = defaultMenu ? DefaultMenu : Menu;
					eventBus = new EventBus({
						el: $input
					});
					input = new Input({
						hint: $hint,
						input: $input
					}, www);
					menu = new MenuConstructor({
						node: $menu,
						datasets: datasets
					}, www);
					typeahead = new Typeahead({
						input: input,
						menu: menu,
						eventBus: eventBus,
						minLength: o.minLength
					}, www);
					$input.data(keys.www, www);
					$input.data(keys.typeahead, typeahead);
				}
			},
			isEnabled: function isEnabled() {
				var enabled;
				ttEach(this.first(), function (t) {
					enabled = t.isEnabled();
				});
				return enabled;
			},
			enable: function enable() {
				ttEach(this, function (t) {
					t.enable();
				});
				return this;
			},
			disable: function disable() {
				ttEach(this, function (t) {
					t.disable();
				});
				return this;
			},
			isActive: function isActive() {
				var active;
				ttEach(this.first(), function (t) {
					active = t.isActive();
				});
				return active;
			},
			activate: function activate() {
				ttEach(this, function (t) {
					t.activate();
				});
				return this;
			},
			deactivate: function deactivate() {
				ttEach(this, function (t) {
					t.deactivate();
				});
				return this;
			},
			isOpen: function isOpen() {
				var open;
				ttEach(this.first(), function (t) {
					open = t.isOpen();
				});
				return open;
			},
			open: function open() {
				ttEach(this, function (t) {
					t.open();
				});
				return this;
			},
			close: function close() {
				ttEach(this, function (t) {
					t.close();
				});
				return this;
			},
			select: function select(el) {
				var success = false, $el = $(el);
				ttEach(this.first(), function (t) {
					success = t.select($el);
				});
				return success;
			},
			autocomplete: function autocomplete(el) {
				var success = false, $el = $(el);
				ttEach(this.first(), function (t) {
					success = t.autocomplete($el);
				});
				return success;
			},
			moveCursor: function moveCursoe(delta) {
				var success = false;
				ttEach(this.first(), function (t) {
					success = t.moveCursor(delta);
				});
				return success;
			},
			val: function val(newVal) {
				var query;
				if (!arguments.length) {
					ttEach(this.first(), function (t) {
						query = t.getVal();
					});
					return query;
				} else {
					ttEach(this, function (t) {
						t.setVal(newVal);
					});
					return this;
				}
			},
			destroy: function destroy() {
				ttEach(this, function (typeahead, $input) {
					revert($input);
					typeahead.destroy();
				});
				return this;
			}
		};
		$.fn.typeahead = function (method) {
			if (methods[method]) {
				return methods[method].apply(this, [].slice.call(arguments, 1));
			} else {
				return methods.initialize.apply(this, arguments);
			}
		};
		$.fn.typeahead.noConflict = function noConflict() {
			$.fn.typeahead = old;
			return this;
		};
		function ttEach($els, fn) {
			$els.each(function () {
				var $input = $(this), typeahead;
				(typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
			});
		}
		function buildHintFromInput($input, www) {
			return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
				autocomplete: "off",
				spellcheck: "false",
				tabindex: -1
			});
		}
		function prepInput($input, www) {
			$input.data(keys.attrs, {
				dir: $input.attr("dir"),
				autocomplete: $input.attr("autocomplete"),
				spellcheck: $input.attr("spellcheck"),
				style: $input.attr("style")
			});
			$input.addClass(www.classes.input).attr({
				autocomplete: "off",
				spellcheck: false
			});
			try {
				!$input.attr("dir") && $input.attr("dir", "auto");
			} catch (e) { }
			return $input;
		}
		function getBackgroundStyles($el) {
			return {
				backgroundAttachment: $el.css("background-attachment"),
				backgroundClip: $el.css("background-clip"),
				backgroundColor: $el.css("background-color"),
				backgroundImage: $el.css("background-image"),
				backgroundOrigin: $el.css("background-origin"),
				backgroundPosition: $el.css("background-position"),
				backgroundRepeat: $el.css("background-repeat"),
				backgroundSize: $el.css("background-size")
			};
		}
		function revert($input) {
			var www, $wrapper;
			www = $input.data(keys.www);
			$wrapper = $input.parent().filter(www.selectors.wrapper);
			_.each($input.data(keys.attrs), function (val, key) {
				_.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
			});
			$input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
			if ($wrapper.length) {
				$input.detach().insertAfter($wrapper);
				$wrapper.remove();
			}
		}
		function $elOrNull(obj) {
			var isValid, $el;
			isValid = _.isJQuery(obj) || _.isElement(obj);
			$el = isValid ? $(obj).first() : [];
			return $el.length ? $el : null;
		}
	})();
});;
$(document).ready(function () {
	const retailListing = {
		setup: function (element) {
			this.element = element;
			this.setupTabs();
			this.setupFilters();
			this.setupCardLinks();
			this.scrollToRetailListItem();
		},
		getTabs: function () {
			return this.element.querySelectorAll('.js--tab-link');
		},
		getCurrentTab: function () {
			let currentTab = 'shopping';
			const tabs = this.getTabs();
			for (let i = 0; i < tabs.length; i++) {
				const tab = tabs[i];
				if (tab.classList.contains('active')) {
					currentTab = tab.dataset.tab;
				}
			}

			return currentTab;
		},
		getCurrentCategoryFilter: function () {
			return this.element.querySelector('[data-category-filter="' + this.getCurrentTab() + '"]');
		},
		getCurrentNameFilter: function () {
			return this.element.querySelector('[data-name-filter="' + this.getCurrentTab() + '"]');
		},
		getCategoryFilters: function () {
			return this.element.querySelectorAll('[data-category-filter]');
		},
		getNameFilters: function () {
			return this.element.querySelectorAll('[data-name-filter]');
		},
		getCards: function () {
			return this.element.querySelectorAll('.retailListing--card__wrap');
		},
		getCardLinks: function () {
			return this.element.querySelectorAll('.retailListing--card a');
		},
		getNoResultsBlock: function () {
			return this.element.querySelector('.retailListing__no-results');
		},
		getClearFiltersLink: function () {
			return document.getElementById('clearFilters');
		},
		setupTabs: function () {
			const _this = this;
			$(this.getTabs()).on('click',
				function () {
					_this.setListMode(this.dataset.tab);
				});
			this.setListMode(getUrlParameter('listmode'));
		},
		setupFilters: function () {
			const _this = this;
			$(this.getCategoryFilters()).on('change', function() { _this.doFilter(); });
			$(this.getNameFilters()).on('keyup', function () { _this.doFilter(); });
			this.clearFilters();
			$(this.getClearFiltersLink()).on('click', function () { _this.clearFilters(); });

			const category = this.getUrlParameter('category');
			if (category) {
				this.getCurrentCategoryFilter().value = category;
				this.getCurrentCategoryFilter().dispatchEvent(new Event('change'));
			}

			const name = this.getUrlParameter('name');
			if (name) {
				this.getCurrentNameFilter().value = name;
			}

			this.doFilter();
		},
		setupCardLinks: function () {
			const _this = this;
			const cardLinks = this.getCardLinks();
			for (let i = 0; i < cardLinks.length; i++) {
				const cardLink = cardLinks[i];
				cardLink.addEventListener('click',
					function(evt) {
						const card = $(evt.target).closest('.retailListing--card').parent(),
							listMode = _this.getUrlParameter('listmode'),
							shopId = card.data('shopid'),
							category = _this.getCurrentCategoryFilter().value,
							name = _this.getCurrentNameFilter().value;
						_this.setUrlForBackButton(listMode, shopId, category, name);
					});
			}
		},
		setListMode: function (listMode) {
			if (!listMode)
				listMode = 'shopping';

			this.setUrlForBackButton(listMode, this.getUrlParameter('shopid'), this.getUrlParameter('category'), this.getUrlParameter('name'));
			this.openTab(listMode);
			this.clearFilters();
		},
		setUrlForBackButton: function (listMode, shopId, category, name) {
			let url = window.location;

			url = this.setUrlParameter(url, 'listmode', listMode);
			url = this.setUrlParameter(url, 'shopid', shopId);
			url = this.setUrlParameter(url, 'category', category);
			url = this.setUrlParameter(url, 'name', name);

			window.history.pushState(null, null, url);
		},
		clearFilters: function () {
			$('[data-dropdown-value="Clear filters"]').trigger('click');

			const categoryFilters = this.getCategoryFilters();
			for (let i = 0; i < categoryFilters.length; i++) {
				categoryFilters[i].selectedIndex = 0;
			}

			const nameFilters = this.getNameFilters();
			for (let i = 0; i < nameFilters.length; i++) {
				nameFilters[i].value = '';
			}

			this.doFilter();
		},
		doFilter: function () {
			const categoryFilter = this.getCurrentCategoryFilter(),
				category = categoryFilter.value,
				nameFilter = this.getCurrentNameFilter(),
				nameQuery = nameFilter.value.toUpperCase();

			let noResults = true;
			const cards = this.getCards();
			for (let i = 0; i < cards.length; i++) {
				const card = cards[i];
				if ((!category || card.dataset.category.split(';').indexOf(category) >= 0) &&
					(!nameQuery || card.dataset.shopname.toUpperCase().includes(nameQuery))) {
					noResults = false;
					card.classList.add('active');
				} else {
					card.classList.remove('active');
				}
			}

			this.getNoResultsBlock().classList.toggle('active', noResults && (category || nameQuery));
		},
		openTab: function (tabName) {
			if (!tabName)
				return;

			const tabContents = document.querySelectorAll('[data-tab-content]');
			for (let i = 0; i < tabContents.length; i++) {
				const tabContent = tabContents[i];
				tabContent.classList.toggle('active', tabContent.dataset.tabContent === tabName);
			}

			const tabs = document.querySelectorAll('[data-tab]');
			for (let i = 0; i < tabs.length; i++) {
				const tab = tabs[i];
				tab.classList.toggle('retailListing--sections__selected', tab.dataset.tab === tabName);
				tab.classList.toggle('active', tab.dataset.tab === tabName);
			}
		},
		scrollToRetailListItem: function () {
			const shopId = this.getUrlParameter('shopid');
			if (shopId) {
				$('html, body').animate({
					scrollTop: $('.retailListing--card__wrap[data-shopid="' + shopId + '"]').offset().top - $('header').outerHeight()
				}, 2000);
			}
		},
		getUrlParameter: function (param) {
			const url = new URL(window.location);
			return url.searchParams.get(param);
		},
		setUrlParameter: function (urlString, param, value) {
			if (!urlString)
				urlString = window.location;
			const url = new URL(urlString);
			if (value)
				url.searchParams.set(param, value);
			else
				url.searchParams.delete(param);
			return url.toString();
		}
	};

	const retailListingElement = document.querySelector('.retailListing');
	if (retailListingElement)
		retailListing.setup(retailListingElement);

	const closeButton = document.querySelector('.close-button');
	if (closeButton)
		closeButton.addEventListener('click', closeModal);

	window.addEventListener('click', windowOnClick);
});

// *************** MODAL ***************
function toggleModal(ev) {
	const modalImage = document.querySelector('.modal-image'),
		modal = document.querySelector('.modal'),
		modalLink = document.querySelector('.modal-link');

	modalImage.src = ev.target.attributes['data-image'].value;
	modalImage.style.display = 'block';
	modalLink.href = ev.target.attributes['data-link'].value;
	modal.classList.toggle('show-modal');
}

function closeModal() {
	const modal = document.querySelector('.modal');
	modal.classList.remove('show-modal');
}

function windowOnClick(event) {
	const modal = document.querySelector('.modal');
	if (event.target === modal) {
		toggleModal(event);
	}
}

function getUrlParameter(sParam) {
	var sPageURL = window.location.search.substring(1),
		sURLVariables = sPageURL.split('&'),
		sParameterName,
		i;

	for (i = 0; i < sURLVariables.length; i++) {
		sParameterName = sURLVariables[i].split('=');

		if (sParameterName[0] === sParam) {
			return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
		}
	}
	return '';
};;
$(document).ready(function () {
    $('[data-toggle="popover"]').tooltip({
        items: "[data-content]",
        content: function () {
            var element = $(this);
            if (element.is("[data-content]")) {
                return element.attr("data-content");
            }
        },
        position: {
            my: "center bottom-20",
            at: "center top"
        },
        open: function (event, ui) {
            ui.tooltip.animate({ bottom: ui.tooltip.position().bottom + 10 }, "fast");
        },
        hide: {
            delay: 1000
		},
		close: function (event, ui) {
			ui.tooltip.hover(
				function () {
					$(this).stop(true).fadeTo(400, 1);
				},
				function () {
					$(this).fadeOut("400", function () { $(this).remove(); })
				}
			);
		}
    });

    $('[data-toggle="popover"]').on("click", function (e) {
        $(this).tooltip("open");
    });
});;
