/* Minification failed. Returning unminified contents.
(5463,35-36): run-time error JS1195: Expected expression: >
(5467,5-6): run-time error JS1002: Syntax error: }
(5470,5-6): run-time error JS1002: Syntax error: }
(5493,31-32): run-time error JS1004: Expected ';': {
(5495,4-5): run-time error JS1195: Expected expression: ,
(5496,60-61): run-time error JS1004: Expected ';': {
(5502,4-5): run-time error JS1195: Expected expression: ,
(5503,63-64): run-time error JS1004: Expected ';': {
(5510,4-5): run-time error JS1195: Expected expression: ,
(5511,33-34): run-time error JS1195: Expected expression: )
(5511,35-36): run-time error JS1004: Expected ';': {
(5519,6-7): run-time error JS1195: Expected expression: ,
(5520,26-27): run-time error JS1195: Expected expression: )
(5520,28-29): run-time error JS1004: Expected ';': {
(5525,1-2): run-time error JS1002: Syntax error: }
(7267,19-20): run-time error JS1010: Expected identifier: {
(7267,28-29): run-time error JS1195: Expected expression: =
(7278,10-11): run-time error JS1100: Expected ',': )
(7282,13-14): run-time error JS1004: Expected ';': :
(7282,28-29): run-time error JS1004: Expected ';': {
(7308,19-20): run-time error JS1010: Expected identifier: {
(7308,28-29): run-time error JS1195: Expected expression: =
(7320,10-11): run-time error JS1195: Expected expression: )
(5465,73-79): run-time error JS1018: 'return' statement outside of function: return
 */
/* NUGET: BEGIN LICENSE TEXT
 *
 * Microsoft grants you the right to use these script files for the sole
 * purpose of either: (i) interacting through your browser with the Microsoft
 * website or online service, subject to the applicable licensing or use
 * terms; or (ii) using the files as included with a Microsoft product subject
 * to that product's license terms. Microsoft reserves all other rights to the
 * files not expressly granted by Microsoft, whether by implication, estoppel
 * or otherwise. Insofar as a script file is dual licensed under GPL,
 * Microsoft neither took the code under GPL nor distributes it thereunder but
 * under the terms set out in this paragraph. All notices and licenses
 * below are for informational purposes only.
 *
 * JQUERY CORE 1.10.2; Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; http://jquery.org/license
 * Includes Sizzle.js; Copyright 2013 jQuery Foundation, Inc. and other contributors; http://opensource.org/licenses/MIT
 *
 * NUGET: END LICENSE TEXT */
/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery-1.10.2.min.map
*/
(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}: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},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?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},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.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+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,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(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===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]||at.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]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!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,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.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"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},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)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):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):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
;
!function(a,b){"object"==typeof exports?module.exports=b():"function"==typeof define&&define.amd?define(b):a.Spinner=b()}(this,function(){"use strict";function a(a,b){var c,d=document.createElement(a||"div");for(c in b)d[c]=b[c];return d}function b(a){for(var b=1,c=arguments.length;c>b;b++)a.appendChild(arguments[b]);return a}function c(a,b,c,d){var e=["opacity",b,~~(100*a),c,d].join("-"),f=.01+c/d*100,g=Math.max(1-(1-a)/b*(100-f),a),h=j.substring(0,j.indexOf("Animation")).toLowerCase(),i=h&&"-"+h+"-"||"";return l[e]||(m.insertRule("@"+i+"keyframes "+e+"{0%{opacity:"+g+"}"+f+"%{opacity:"+a+"}"+(f+.01)+"%{opacity:1}"+(f+b)%100+"%{opacity:"+a+"}100%{opacity:"+g+"}}",m.cssRules.length),l[e]=1),e}function d(a,b){var c,d,e=a.style;for(b=b.charAt(0).toUpperCase()+b.slice(1),d=0;d<k.length;d++)if(c=k[d]+b,void 0!==e[c])return c;return void 0!==e[b]?b:void 0}function e(a,b){for(var c in b)a.style[d(a,c)||c]=b[c];return a}function f(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)void 0===a[d]&&(a[d]=c[d])}return a}function g(a,b){return"string"==typeof a?a:a[b%a.length]}function h(a){this.opts=f(a||{},h.defaults,n)}function i(){function c(b,c){return a("<"+b+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',c)}m.addRule(".spin-vml","behavior:url(#default#VML)"),h.prototype.lines=function(a,d){function f(){return e(c("group",{coordsize:k+" "+k,coordorigin:-j+" "+-j}),{width:k,height:k})}function h(a,h,i){b(m,b(e(f(),{rotation:360/d.lines*a+"deg",left:~~h}),b(e(c("roundrect",{arcsize:d.corners}),{width:j,height:d.width,left:d.radius,top:-d.width>>1,filter:i}),c("fill",{color:g(d.color,a),opacity:d.opacity}),c("stroke",{opacity:0}))))}var i,j=d.length+d.width,k=2*j,l=2*-(d.width+d.length)+"px",m=e(f(),{position:"absolute",top:l,left:l});if(d.shadow)for(i=1;i<=d.lines;i++)h(i,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(i=1;i<=d.lines;i++)h(i);return b(a,m)},h.prototype.opacity=function(a,b,c,d){var e=a.firstChild;d=d.shadow&&d.lines||0,e&&b+d<e.childNodes.length&&(e=e.childNodes[b+d],e=e&&e.firstChild,e=e&&e.firstChild,e&&(e.opacity=c))}}var j,k=["webkit","Moz","ms","O"],l={},m=function(){var c=a("style",{type:"text/css"});return b(document.getElementsByTagName("head")[0],c),c.sheet||c.styleSheet}(),n={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"50%",left:"50%",position:"absolute"};h.defaults={},f(h.prototype,{spin:function(b){this.stop();var c=this,d=c.opts,f=c.el=e(a(0,{className:d.className}),{position:d.position,width:0,zIndex:d.zIndex});d.radius+d.length+d.width;if(e(f,{left:d.left,top:d.top}),b&&b.insertBefore(f,b.firstChild||null),f.setAttribute("role","progressbar"),c.lines(f,c.opts),!j){var g,h=0,i=(d.lines-1)*(1-d.direction)/2,k=d.fps,l=k/d.speed,m=(1-d.opacity)/(l*d.trail/100),n=l/d.lines;!function o(){h++;for(var a=0;a<d.lines;a++)g=Math.max(1-(h+(d.lines-a)*n)%l*m,d.opacity),c.opacity(f,a*d.direction+i,g,d);c.timeout=c.el&&setTimeout(o,~~(1e3/k))}()}return c},stop:function(){var a=this.el;return a&&(clearTimeout(this.timeout),a.parentNode&&a.parentNode.removeChild(a),this.el=void 0),this},lines:function(d,f){function h(b,c){return e(a(),{position:"absolute",width:f.length+f.width+"px",height:f.width+"px",background:b,boxShadow:c,transformOrigin:"left",transform:"rotate("+~~(360/f.lines*k+f.rotate)+"deg) translate("+f.radius+"px,0)",borderRadius:(f.corners*f.width>>1)+"px"})}for(var i,k=0,l=(f.lines-1)*(1-f.direction)/2;k<f.lines;k++)i=e(a(),{position:"absolute",top:1+~(f.width/2)+"px",transform:f.hwaccel?"translate3d(0,0,0)":"",opacity:f.opacity,animation:j&&c(f.opacity,f.trail,l+k*f.direction,f.lines)+" "+1/f.speed+"s linear infinite"}),f.shadow&&b(i,e(h("#000","0 0 4px #000"),{top:"2px"})),b(d,b(i,h(g(f.color,k),"0 0 1px rgba(0,0,0,.1)")));return d},opacity:function(a,b,c){b<a.childNodes.length&&(a.childNodes[b].style.opacity=c)}});var o=e(a("group"),{behavior:"url(#default#VML)"});return!d(o,"transform")&&o.adj?i():j=d(o,"animation"),h});;
/*!
 * Ladda 1.0.0 (2016-03-08, 09:31)
 * http://lab.hakim.se/ladda
 * MIT licensed
 *
 * Copyright (C) 2016 Hakim El Hattab, http://hakim.se
 */
!function(a,b){"object"==typeof exports?module.exports=b(require("spin.js")):"function"==typeof define&&define.amd?define(["spin"],b):a.Ladda=b(a.Spinner)}(this,function(a){"use strict";function b(a){if("undefined"==typeof a)return void console.warn("Ladda button target must be defined.");if(/ladda-button/i.test(a.className)||(a.className+=" ladda-button"),a.hasAttribute("data-style")||a.setAttribute("data-style","expand-right"),!a.querySelector(".ladda-label")){var b=document.createElement("span");b.className="ladda-label",i(a,b)}var c,d=a.querySelector(".ladda-spinner");d||(d=document.createElement("span"),d.className="ladda-spinner"),a.appendChild(d);var e,f={start:function(){return c||(c=g(a)),a.setAttribute("disabled",""),a.setAttribute("data-loading",""),clearTimeout(e),c.spin(d),this.setProgress(0),this},startAfter:function(a){return clearTimeout(e),e=setTimeout(function(){f.start()},a),this},stop:function(){return a.removeAttribute("disabled"),a.removeAttribute("data-loading"),clearTimeout(e),c&&(e=setTimeout(function(){c.stop()},1e3)),this},toggle:function(){return this.isLoading()?this.stop():this.start(),this},setProgress:function(b){b=Math.max(Math.min(b,1),0);var c=a.querySelector(".ladda-progress");0===b&&c&&c.parentNode?c.parentNode.removeChild(c):(c||(c=document.createElement("div"),c.className="ladda-progress",a.appendChild(c)),c.style.width=(b||0)*a.offsetWidth+"px")},enable:function(){return this.stop(),this},disable:function(){return this.stop(),a.setAttribute("disabled",""),this},isLoading:function(){return a.hasAttribute("data-loading")},remove:function(){clearTimeout(e),a.removeAttribute("disabled",""),a.removeAttribute("data-loading",""),c&&(c.stop(),c=null);for(var b=0,d=j.length;d>b;b++)if(f===j[b]){j.splice(b,1);break}}};return j.push(f),f}function c(a,b){for(;a.parentNode&&a.tagName!==b;)a=a.parentNode;return b===a.tagName?a:void 0}function d(a){for(var b=["input","textarea","select"],c=[],d=0;d<b.length;d++)for(var e=a.getElementsByTagName(b[d]),f=0;f<e.length;f++)e[f].hasAttribute("required")&&c.push(e[f]);return c}function e(a,e){e=e||{};var f=[];"string"==typeof a?f=h(document.querySelectorAll(a)):"object"==typeof a&&"string"==typeof a.nodeName&&(f=[a]);for(var g=0,i=f.length;i>g;g++)!function(){var a=f[g];if("function"==typeof a.addEventListener){var h=b(a),i=-1;a.addEventListener("click",function(b){var f=!0,g=c(a,"FORM");if("undefined"!=typeof g)if("function"==typeof g.checkValidity)f=g.checkValidity();else for(var j=d(g),k=0;k<j.length;k++)""===j[k].value.replace(/^\s+|\s+$/g,"")&&(f=!1),"checkbox"!==j[k].type&&"radio"!==j[k].type||j[k].checked||(f=!1),"email"===j[k].type&&(f=/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/.test(j[k].value));f&&(h.startAfter(1),"number"==typeof e.timeout&&(clearTimeout(i),i=setTimeout(h.stop,e.timeout)),"function"==typeof e.callback&&e.callback.apply(null,[h]))},!1)}}()}function f(){for(var a=0,b=j.length;b>a;a++)j[a].stop()}function g(b){var c,d,e=b.offsetHeight;0===e&&(e=parseFloat(window.getComputedStyle(b).height)),e>32&&(e*=.8),b.hasAttribute("data-spinner-size")&&(e=parseInt(b.getAttribute("data-spinner-size"),10)),b.hasAttribute("data-spinner-color")&&(c=b.getAttribute("data-spinner-color")),b.hasAttribute("data-spinner-lines")&&(d=parseInt(b.getAttribute("data-spinner-lines"),10));var f=.2*e,g=.6*f,h=7>f?2:3;return new a({color:c||"#fff",lines:d||12,radius:f,length:g,width:h,zIndex:"auto",top:"auto",left:"auto",className:""})}function h(a){for(var b=[],c=0;c<a.length;c++)b.push(a[c]);return b}function i(a,b){var c=document.createRange();c.selectNodeContents(a),c.surroundContents(b),a.appendChild(b)}var j=[];return{bind:e,create:b,stopAll:f}});;
!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}});
;
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports?exports.autonumeric=t(require("jquery")):e.autonumeric=t(e.jQuery)}(this,function(e){return function(e){function t(i){if(a[i])return a[i].exports;var r=a[i]={exports:{},id:i,loaded:!1};return e[i].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var a={};return t.m=e,t.c=a,t.p="",t(0)}([function(e,t,a){var i,r,n;a(1),a(1);(function(){"use strict";function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var l=function(){function e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,a,i){return a&&e(t.prototype,a),i&&e(t,i),t}}(),s=function(){function e(e,t){var a=[],i=!0,r=!1,n=void 0;try{for(var o,l=e[Symbol.iterator]();!(i=(o=l.next()).done)&&(a.push(o.value),!t||a.length!==t);i=!0);}catch(e){r=!0,n=e}finally{try{!i&&l.return&&l.return()}finally{if(r)throw n}}return a}return function(t,a){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,a);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u=void 0,d=void 0,m=void 0,h=void 0,g=void 0,v=void 0,p=["b","caption","cite","code","const","dd","del","div","dfn","dt","em","h1","h2","h3","h4","h5","h6","ins","kdb","label","li","option","output","p","q","s","sample","span","strong","td","th","u"],f={digitGroupSeparator:",",noSeparatorOnFocus:!1,digitalGroupSpacing:"3",decimalCharacter:".",decimalCharacterAlternative:null,currencySymbol:"",currencySymbolPlacement:"p",negativePositiveSignPlacement:null,showPositiveSign:!1,suffixText:"",overrideMinMaxLimits:null,maximumValue:"9999999999999.99",minimumValue:"-9999999999999.99",decimalPlacesOverride:null,decimalPlacesShownOnFocus:null,scaleDivisor:null,scaleDecimalPlaces:null,scaleSymbol:null,saveValueToSessionStorage:!1,onInvalidPaste:"error",roundingMethod:"S",allowDecimalPadding:!0,negativeBracketsTypeOnBlur:null,emptyInputBehavior:"focus",leadingZero:"deny",formatOnPageLoad:!0,selectNumberOnly:!1,defaultValueOverride:null,unformatOnSubmit:!1,outputFormat:null,showWarnings:!0,failOnUnknownOption:!1},y={Backspace:8,Tab:9,Enter:13,Shift:16,Ctrl:17,Alt:18,PauseBreak:19,CapsLock:20,Esc:27,Space:32,PageUp:33,PageDown:34,End:35,Home:36,LeftArrow:37,UpArrow:38,RightArrow:39,DownArrow:40,Insert:45,Delete:46,num0:48,num1:49,num2:50,num3:51,num4:52,num5:53,num6:54,num7:55,num8:56,num9:57,a:65,b:66,c:67,d:68,e:69,f:70,g:71,h:72,i:73,j:74,k:75,l:76,m:77,n:78,o:79,p:80,q:81,r:82,s:83,t:84,u:85,v:86,w:87,x:88,y:89,z:90,Windows:91,RightClick:93,numpad0:96,numpad1:97,numpad2:98,numpad3:99,numpad4:100,numpad5:101,numpad6:102,numpad7:103,numpad8:104,numpad9:105,MultiplyNumpad:106,PlusNumpad:107,MinusNumpad:109,DotNumpad:110,SlashNumpad:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NumLock:144,ScrollLock:145,MyComputer:182,MyCalculator:183,Semicolon:186,Equal:187,Comma:188,Hyphen:189,Dot:190,Slash:191,Backquote:192,LeftBracket:219,Backslash:220,RightBracket:221,Quote:222,Command:224},S={Unidentified:"Unidentified",Alt:"Alt",AltGr:"AltGraph",CapsLock:"CapsLock",Ctrl:"Control",Fn:"Fn",FnLock:"FnLock",Hyper:"Hyper",Meta:"Meta",Windows:"Meta",Command:"Meta",NumLock:"NumLock",ScrollLock:"ScrollLock",Shift:"Shift",Super:"Super",Symbol:"Symbol",SymbolLock:"SymbolLock",Enter:"Enter",Tab:"Tab",Space:" ",DownArrow:"ArrowDown",LeftArrow:"ArrowLeft",RightArrow:"ArrowRight",UpArrow:"ArrowUp",End:"End",Home:"Home",PageDown:"PageDown",PageUp:"PageUp",Backspace:"Backspace",Clear:"Clear",Copy:"Copy",CrSel:"CrSel",Cut:"Cut",Delete:"Delete",EraseEof:"EraseEof",ExSel:"ExSel",Insert:"Insert",Paste:"Paste",Redo:"Redo",Undo:"Undo",Accept:"Accept",Again:"Again",Attn:"Attn",Cancel:"Cancel",ContextMenu:"ContextMenu",Esc:"Escape",Execute:"Execute",Find:"Find",Finish:"Finish",Help:"Help",Pause:"Pause",Play:"Play",Props:"Props",Select:"Select",ZoomIn:"ZoomIn",ZoomOut:"ZoomOut",BrightnessDown:"BrightnessDown",BrightnessUp:"BrightnessUp",Eject:"Eject",LogOff:"LogOff",Power:"Power",PowerOff:"PowerOff",PrintScreen:"PrintScreen",Hibernate:"Hibernate",Standby:"Standby",WakeUp:"WakeUp",Compose:"Compose",Dead:"Dead",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",Print:"Print",num0:"0",num1:"1",num2:"2",num3:"3",num4:"4",num5:"5",num6:"6",num7:"7",num8:"8",num9:"9",numpad0:"0",numpad1:"1",numpad2:"2",numpad3:"3",numpad4:"4",numpad5:"5",numpad6:"6",numpad7:"7",numpad8:"8",numpad9:"9",a:"a",b:"b",c:"c",d:"d",e:"e",f:"f",g:"g",h:"h",i:"i",j:"j",k:"k",l:"l",m:"m",n:"n",o:"o",p:"p",q:"q",r:"r",s:"s",t:"t",u:"u",v:"v",w:"w",x:"x",y:"y",z:"z",MultiplyNumpad:"*",PlusNumpad:"+",MinusNumpad:"-",DotNumpad:".",SlashNumpad:"/",Semicolon:";",Equal:"=",Comma:",",Hyphen:"-",Minus:"-",Plus:"+",Dot:".",Slash:"/",Backquote:"`",LeftBracket:"[",RightBracket:"]",Backslash:"\\",Quote:"'",NumpadDot:".",NumpadDotAlt:",",NumpadMultiply:"*",NumpadPlus:"+",NumpadMinus:"-",NumpadSlash:"/",NumpadDotObsoleteBrowsers:"Decimal",NumpadMultiplyObsoleteBrowsers:"Multiply",NumpadPlusObsoleteBrowsers:"Add",NumpadMinusObsoleteBrowsers:"Subtract",NumpadSlashObsoleteBrowsers:"Divide"},b="-999999999999.99",P="999999999999.99",C="U",w="deny",O=!0,x={French:{digitGroupSeparator:".",decimalCharacter:",",decimalCharacterAlternative:".",currencySymbol:" €",currencySymbolPlacement:"s",selectNumberOnly:O,roundingMethod:C,leadingZero:w,minimumValue:b,maximumValue:P},NorthAmerican:{digitGroupSeparator:",",decimalCharacter:".",currencySymbol:"$",currencySymbolPlacement:"p",selectNumberOnly:O,roundingMethod:C,leadingZero:w,minimumValue:b,maximumValue:P},British:{digitGroupSeparator:",",decimalCharacter:".",currencySymbol:"£",currencySymbolPlacement:"p",selectNumberOnly:O,roundingMethod:C,leadingZero:w,minimumValue:b,maximumValue:P},Swiss:{digitGroupSeparator:"'",decimalCharacter:".",currencySymbol:" CHF",currencySymbolPlacement:"s",selectNumberOnly:O,roundingMethod:C,leadingZero:w,minimumValue:b,maximumValue:P},Japanese:{digitGroupSeparator:",",decimalCharacter:".",currencySymbol:"¥",currencySymbolPlacement:"p",selectNumberOnly:O,roundingMethod:C,leadingZero:w,minimumValue:b,maximumValue:P}};x.Spanish=x.French,x.Chinese=x.Japanese,function(o){r=[a(1)],i=o,n="function"==typeof i?i.apply(t,r):i,!(void 0!==n&&(e.exports=n))}(function(e){function t(e){return null===e}function a(e){return void 0===e}function i(e){return null===e||void 0===e||""===e}function r(e){return"string"==typeof e||e instanceof String}function n(e){return"boolean"==typeof e}function b(e){var t=String(e).toLowerCase();return"true"===t||"false"===t}function P(e){return"object"===("undefined"==typeof e?"undefined":c(e))&&null!==e&&!Array.isArray(e)}function C(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}function w(e){return!A(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function O(e){return"number"==typeof e&&parseFloat(e)===parseInt(e,10)&&!isNaN(e)}function N(e,t){return Q(e,t.settingsClone,!0).replace(t.settingsClone.decimalCharacter,".")}function k(e,t){return!(!r(e)||!r(t)||""===e||""===t)&&e.indexOf(t)!==-1}function V(e,t){return!(!A(t)||t===[]||a(e))&&t.indexOf(e)!==-1}function A(e){if("[object Array]"===Object.prototype.toString.call([]))return Array.isArray(e)||"object"===("undefined"==typeof e?"undefined":c(e))&&"[object Array]"===Object.prototype.toString.call(e);throw new Error("toString message changed for Object Array")}function F(e){var t=e.split("."),i=s(t,2),r=i[1];return a(r)?0:r.length}function T(e){return"undefined"==typeof e.which?e.keyCode:e.which}function D(e){if("undefined"==typeof e.key||"Unidentified"===e.key)return String.fromCharCode(T(e));var t=void 0;switch(e.key){case"Decimal":t=S.NumpadDot;break;case"Multiply":t=S.NumpadMultiply;break;case"Add":t=S.NumpadPlus;break;case"Subtract":t=S.NumpadMinus;break;case"Divide":t=S.NumpadSlash;break;case"Del":t=S.Dot;break;default:t=e.key}return t}function B(e,t,a){var i=le(e);return se(t,i)>-1&&se(a,i)<1}function L(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return t?k(e,"-"):M(e)}function M(e){return"-"===e.charAt(0)}function E(e){return!/[1-9]/g.test(e)}function I(e){return M(e)?e:"-"+e}function _(e,t,a){return""+e.substr(0,t)+a+e.substr(t+a.length)}function K(e,t){return Math.max(t.minimumValue,Math.min(t.maximumValue,e))}function R(e,t,a){for(var i=new RegExp("[0-9"+a+"-]"),r=0,n=0;n<t;n++)i.test(e[n])&&r++;return r}function U(e,t,a,i){var r=a.length,n=e.length,o=void 0,l=0;for(o=0;o<r&&l<n&&l<t;o++)(e[l]===a[o]||"."===e[l]&&a[o]===i)&&l++;return o}function j(e,t){for(var a=0,i=0;i<t.length;i++)t[i]===e&&a++;return a}function G(e){return Math.max(e,e-1)}function $(e){var t={};if(a(e.selectionStart)){e.focus();var i=document.selection.createRange();t.length=i.text.length,i.moveStart("character",-e.value.length),t.end=i.text.length,t.start=t.end-t.length}else t.start=e.selectionStart,t.end=e.selectionEnd,t.length=t.end-t.start;return t}function Z(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(i(r)&&(r=t),a(e.selectionStart)){e.focus();var n=e.createTextRange();n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n.select()}else e.selectionStart=t,e.selectionEnd=r}function z(e){throw new Error(e)}function H(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];t&&console.warn("Warning: "+e)}function q(t,a){e.each(a,function(e,i){"function"==typeof i?a[e]=i(t,a,e):"function"==typeof t.autoNumeric[i]&&(a[e]=t.autoNumeric[i](t,a,e))})}function W(e,t){return Math.max(F(e),F(t))}function Q(e,t,i){if(""!==t.currencySymbol&&(e=e.replace(t.currencySymbol,"")),t.suffixText)for(;k(e,t.suffixText);)e=e.replace(t.suffixText,"");e=e.replace(t.skipFirstAutoStrip,"$1$2"),("s"===t.negativePositiveSignPlacement||"s"===t.currencySymbolPlacement&&"p"!==t.negativePositiveSignPlacement)&&L(e)&&""!==e&&(t.trailingNegative=!0),e=e.replace(t.skipLastAutoStrip,"$1"),e=e.replace(t.allowedAutoStrip,""),t.decimalCharacterAlternative&&(e=e.replace(t.decimalCharacterAlternative,t.decimalCharacter));var r=e.match(t.numRegAutoStrip);if(e=r?[r[1],r[2],r[3]].join(""):"","allow"===t.leadingZero||"keep"===t.leadingZero){var n="",o=e.split(t.decimalCharacter),l=s(o,2),c=l[0],u=l[1],d=c;k(d,t.negativeSignCharacter)&&(n=t.negativeSignCharacter,d=d.replace(t.negativeSignCharacter,"")),""===n&&d.length>t.mIntPos&&"0"===d.charAt(0)&&(d=d.slice(1)),""!==n&&d.length>t.mIntNeg&&"0"===d.charAt(0)&&(d=d.slice(1)),e=""+n+d+(a(u)?"":t.decimalCharacter+u)}return(i&&"deny"===t.leadingZero||!t.hasFocus&&"allow"===t.leadingZero)&&(e=e.replace(t.stripReg,"$1$2")),e}function J(e,t){if("p"===t.currencySymbolPlacement&&"l"===t.negativePositiveSignPlacement||"s"===t.currencySymbolPlacement&&"p"===t.negativePositiveSignPlacement){var a=t.negativeBracketsTypeOnBlur.split(","),i=s(a,2),r=i[0],n=i[1];t.hasFocus?t.hasFocus&&e.charAt(0)===r&&(e=e.replace(r,t.negativeSignCharacter),e=e.replace(n,"")):(e=e.replace(t.negativeSignCharacter,""),e=r+e+n)}return e}function Y(e,t){e=e.replace(t.currencySymbol,""),e=e.replace(t.digitGroupSeparator,""),"."!==t.decimalCharacter&&(e=e.replace(t.decimalCharacter,".")),L(e)&&e.lastIndexOf("-")===e.length-1&&(e=e.replace("-",""),e="-"+e);var a=_e(e,!0,!1,!1);return isNaN(a)||(e=a.toString()),e}function X(e,a){if(t(a)||"string"===a)return e;var i=void 0;switch(a){case"number":i=Number(e);break;case".-":i=L(e)?e.replace("-","")+"-":e;break;case",":case"-,":i=e.replace(".",",");break;case",-":i=e.replace(".",","),i=L(i)?i.replace("-","")+"-":i;break;case".":case"-.":i=e;break;default:z("The given outputFormat ["+a+"] option is not recognized.")}return i}function ee(e,t){return"."!==t.decimalCharacter&&(e=e.replace(t.decimalCharacter,".")),"-"!==t.negativeSignCharacter&&""!==t.negativeSignCharacter&&(e=e.replace(t.negativeSignCharacter,"-")),e.match(/\d/)||(e+="0"),e}function te(e,t){return"-"!==t.negativeSignCharacter&&""!==t.negativeSignCharacter&&(e=e.replace("-",t.negativeSignCharacter)),"."!==t.decimalCharacter&&(e=e.replace(".",t.decimalCharacter)),e}function ae(e,t,a){return""===e||e===t.negativeSignCharacter?"always"===t.emptyInputBehavior||a?"l"===t.negativePositiveSignPlacement?e+t.currencySymbol+t.suffixText:t.currencySymbol+e+t.suffixText:e:null}function ie(e,i){i.strip&&(e=Q(e,i,!1)),i.trailingNegative&&!L(e)&&(e="-"+e);var r=ae(e,i,!0),n=L(e),o=E(e);if(n&&(e=e.replace("-","")),!t(r))return r;i.digitalGroupSpacing=i.digitalGroupSpacing.toString();var l=void 0;switch(i.digitalGroupSpacing){case"2":l=/(\d)((\d)(\d{2}?)+)$/;break;case"2s":l=/(\d)((?:\d{2}){0,2}\d{3}(?:(?:\d{2}){2}\d{3})*?)$/;break;case"4":l=/(\d)((\d{4}?)+)$/;break;default:l=/(\d)((\d{3}?)+)$/}var c=e.split(i.decimalCharacter),u=s(c,2),d=u[0],m=u[1];if(i.decimalCharacterAlternative&&a(m)){var h=e.split(i.decimalCharacterAlternative),g=s(h,2);d=g[0],m=g[1]}if(""!==i.digitGroupSeparator)for(;l.test(d);)d=d.replace(l,"$1"+i.digitGroupSeparator+"$2");if(0===i.decimalPlacesOverride||a(m)?e=d:(m.length>i.decimalPlacesOverride&&(m=m.substring(0,i.decimalPlacesOverride)),e=d+i.decimalCharacter+m),i.trailingNegative=!1,"p"===i.currencySymbolPlacement)if(n)switch(i.negativePositiveSignPlacement){case"l":e=""+i.negativeSignCharacter+i.currencySymbol+e;break;case"r":e=""+i.currencySymbol+i.negativeSignCharacter+e;break;case"s":e=""+i.currencySymbol+e+i.negativeSignCharacter,i.trailingNegative=!0}else if(i.showPositiveSign&&!o)switch(i.negativePositiveSignPlacement){case"l":e=""+i.positiveSignCharacter+i.currencySymbol+e;break;case"r":e=""+i.currencySymbol+i.positiveSignCharacter+e;break;case"s":e=""+i.currencySymbol+e+i.positiveSignCharacter}else e=i.currencySymbol+e;if("s"===i.currencySymbolPlacement)if(n)switch(i.negativePositiveSignPlacement){case"r":e=""+e+i.currencySymbol+i.negativeSignCharacter,i.trailingNegative=!0;break;case"l":e=""+e+i.negativeSignCharacter+i.currencySymbol,i.trailingNegative=!0;break;case"p":e=""+i.negativeSignCharacter+e+i.currencySymbol}else if(i.showPositiveSign&&!o)switch(i.negativePositiveSignPlacement){case"r":e=""+e+i.currencySymbol+i.positiveSignCharacter;break;case"l":e=""+e+i.positiveSignCharacter+i.currencySymbol;break;case"p":e=""+i.positiveSignCharacter+e+i.currencySymbol}else e+=i.currencySymbol;return null!==i.negativeBracketsTypeOnBlur&&(i.rawValue<0||M(e))&&(e=J(e,i)),e+i.suffixText}function re(e,t){var a=void 0;switch(t){case 0:a=/(\.(?:\d*[1-9])?)0*$/;break;case 1:a=/(\.\d(?:\d*[1-9])?)0*$/;break;default:a=new RegExp("(\\.\\d{"+t+"}(?:\\d*[1-9])?)0*")}return e=e.replace(a,"$1"),0===t&&(e=e.replace(/\.$/,"")),e}function ne(e,t){if(e=""===e?"0":e.toString(),"N05"===t.roundingMethod||"CHF"===t.roundingMethod||"U05"===t.roundingMethod||"D05"===t.roundingMethod){switch(t.roundingMethod){case"N05":e=(Math.round(20*e)/20).toString();break;case"U05":e=(Math.ceil(20*e)/20).toString();break;default:e=(Math.floor(20*e)/20).toString()}var a=void 0;return a=k(e,".")?e.length-e.indexOf(".")<3?e+"0":e:e+".00"}var i="",r=0,n="",o=void 0;o=t.allowDecimalPadding?t.decimalPlacesOverride:0,M(e)&&(n="-",e=e.replace("-","")),e.match(/^\d/)||(e="0"+e),0===Number(e)&&(n=""),(Number(e)>0&&"keep"!==t.leadingZero||e.length>0&&"allow"===t.leadingZero)&&(e=e.replace(/^0*(\d)/,"$1"));var l=e.lastIndexOf("."),s=l===-1,c=s?e.length-1:l,u=e.length-1-c;if(u<=t.decimalPlacesOverride){if(i=e,u<o){s&&(i+=t.decimalCharacter);for(var d="000000";u<o;)d=d.substring(0,o-u),i+=d,u+=d.length}else u>o?i=re(i,o):0===u&&0===o&&(i=i.replace(/\.$/,""));return 0===Number(i)?i:n+i}var m=void 0;m=s?t.decimalPlacesOverride-1:t.decimalPlacesOverride+l;var h=Number(e.charAt(m+1)),g="."===e.charAt(m)?e.charAt(m-1)%2:e.charAt(m)%2,v=e.substring(0,m+1).split("");if(h>4&&"S"===t.roundingMethod||h>4&&"A"===t.roundingMethod&&""===n||h>5&&"A"===t.roundingMethod&&"-"===n||h>5&&"s"===t.roundingMethod||h>5&&"a"===t.roundingMethod&&""===n||h>4&&"a"===t.roundingMethod&&"-"===n||h>5&&"B"===t.roundingMethod||5===h&&"B"===t.roundingMethod&&1===g||h>0&&"C"===t.roundingMethod&&""===n||h>0&&"F"===t.roundingMethod&&"-"===n||h>0&&"U"===t.roundingMethod)for(r=v.length-1;r>=0;r-=1)if("."!==v[r]){if(v[r]=+v[r]+1,v[r]<10)break;r>0&&(v[r]="0")}return v=v.slice(0,m+1),i=re(v.join(""),o),0===Number(i)?i:n+i}function oe(e,t,a){if(e=a?ne(e,t):e,t.decimalCharacter&&t.decimalPlacesOverride){var i=e.split(t.decimalCharacter),r=s(i,2),n=r[0],o=r[1];if(o&&o.length>t.decimalPlacesOverride)if(t.decimalPlacesOverride>0){var l=o.substring(0,t.decimalPlacesOverride);e=""+n+t.decimalCharacter+l}else e=n}return e}function le(e){var t={},a=void 0,i=void 0,r=void 0,n=void 0;if(0===e&&1/e<0&&(e="-0"),e=e.toString(),M(e)?(e=e.slice(1),t.s=-1):t.s=1,a=e.indexOf("."),a>-1&&(e=e.replace(".","")),a<0&&(a=e.length),i=e.search(/[1-9]/i)===-1?e.length:e.search(/[1-9]/i),r=e.length,i===r)t.e=0,t.c=[0];else{for(n=r-1;"0"===e.charAt(n);n-=1)r-=1;for(r-=1,t.e=a-i-1,t.c=[],a=0;i<=r;i+=1)t.c[a]=+e.charAt(i),a+=1}return t}function se(e,t){var a=t.c,i=e.c,r=t.s,n=e.s,o=t.e,l=e.e;if(!a[0]||!i[0]){var s=void 0;return s=a[0]?r:i[0]?-n:0}if(r!==n)return r;var c=r<0;if(o!==l)return o>l^c?1:-1;for(r=-1,o=a.length,l=i.length,n=o<l?o:l,r+=1;r<n;r+=1)if(a[r]!==i[r])return a[r]>i[r]^c?1:-1;var u=void 0;return u=o===l?0:o>l^c?1:-1}function ce(e,t){e=e.toString(),e=e.replace(",",".");var a=le(t.minimumValue),i=le(t.maximumValue),r=le(e),n=void 0;switch(t.overrideMinMaxLimits){case"floor":n=[se(a,r)>-1,!0];break;case"ceiling":n=[!0,se(i,r)<1];break;case"ignore":n=[!0,!0];break;default:n=[se(a,r)>-1,se(i,r)<1]}return n}function ue(t){return r(t)&&(t="#"+t.replace(/(:|\.|\[|]|,|=)/g,"\\$1")),e(t)}function de(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=e.data("autoNumeric");r||(r={},e.data("autoNumeric",r));var n=r.holder;return(i||a(n)&&t)&&(n=new Re(e.get(0),t),r.holder=n),n}function me(e){e.oDec=e.decimalPlacesOverride,e.oPad=e.allowDecimalPadding,e.oBracket=e.negativeBracketsTypeOnBlur,e.oSep=e.digitGroupSeparator,e.oSign=e.currencySymbol,e.oSuffix=e.suffixText}function he(e){for(var t=e+"=",a=document.cookie.split(";"),i="",r=0;r<a.length;r+=1){for(i=a[r];" "===i.charAt(0);)i=i.substring(1,i.length);if(0===i.indexOf(t))return i.substring(t.length,i.length)}return null}function ge(){var e="modernizr";try{return sessionStorage.setItem(e,e),sessionStorage.removeItem(e),!0}catch(e){return!1}}function ve(e,t){return""===e?"":0===Number(e)&&"keep"!==t.leadingZero?"0":("keep"!==t.leadingZero&&(e=e.replace(/^(-)?0+(?=\d)/g,"$1"),k(e,".")&&(e=e.replace(/(\.[0-9]*?)0+$/,"$1"))),e=e.replace(/\.$/,""))}function pe(e){var t=e.split("."),a=s(t,2),r=a[0],n=a[1];if(i(n))return r;var o=n.replace(/0+$/g,""),l=void 0;return l=""===o?r:r+"."+o}function fe(e,t,i){if(t.saveValueToSessionStorage){var r=""===e.name||a(e.name)?"AUTO_"+e.id:"AUTO_"+decodeURIComponent(e.name),n=void 0,o=void 0;if(ge()===!1)switch(i){case"set":document.cookie=r+"="+t.rawValue+"; expires= ; path=/";break;case"wipe":n=new Date,n.setTime(n.getTime()+-864e5),o="; expires="+n.toUTCString(),document.cookie=r+"='' ;"+o+"; path=/";break;case"get":return he(r)}else switch(i){case"set":sessionStorage.setItem(r,t.rawValue);break;case"wipe":sessionStorage.removeItem(r);break;case"get":return sessionStorage.getItem(r)}}}function ye(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],a=arguments[1],i=ue(a),r=e("form").index(i),n=e("form:eq("+r+")")[0],o=[],l=[],u=/^(?:submit|button|image|reset|file)$/i,d=/^(?:input|select|textarea|keygen)/i,m=/^(?:checkbox|radio)$/i,h=/^(?:button|checkbox|color|date|datetime|datetime-local|email|file|image|month|number|password|radio|range|reset|search|submit|time|url|week)/i,g=0;if(e.each(n,function(e,t){""===t.name||!d.test(t.localName)||u.test(t.type)||t.disabled||!t.checked&&m.test(t.type)?l.push(-1):(l.push(g),g++)}),g=0,e.each(n,function(e,t){"input"!==t.localName||""!==t.type&&"text"!==t.type&&"hidden"!==t.type&&"tel"!==t.type?(o.push(-1),"input"===t.localName&&h.test(t.type)&&g++):(o.push(g),g++)}),t){var v=i.serializeArray();return e.each(v,function(t,a){var i=l.indexOf(t);if(i>-1&&o[i]>-1){var n=e("form:eq("+r+") input:eq("+o[i]+")"),s=n.data("autoNumeric");"object"===("undefined"==typeof s?"undefined":c(s))&&(a.value=n.autoNumeric("getLocalized").toString())}}),v}var p=function(){var t=i.serialize(),a=t.split("&");return e.each(a,function(t){var i=a[t].split("="),n=s(i,2),u=n[0],d=n[1],m=l.indexOf(t);if(m>-1&&o[m]>-1){var h=e("form:eq("+r+") input:eq("+o[m]+")"),g=h.data("autoNumeric");if("object"===("undefined"==typeof g?"undefined":c(g))&&null!==d){var v=h.autoNumeric("getLocalized").toString();a[t]=u+"="+v}}}),{v:a.join("&")}}();if("object"===("undefined"==typeof p?"undefined":c(p)))return p.v}function Se(e,t,a){var i=t.settingsClone;if("focusin"===a.type||"mouseenter"===a.type&&!e.is(":focus")&&"focus"===i.emptyInputBehavior){i.hasFocus=!0,null!==i.negativeBracketsTypeOnBlur&&""!==i.negativeSignCharacter&&e.val(J(a.target.value,i));var r=Q(a.target.value,i,!0);r=Y(r,i),r=ve(r,i),i.trailingNegative&&(r="-"+r);var n=void 0;i.decimalPlacesShownOnFocus?(i.decimalPlacesOverride=i.decimalPlacesShownOnFocus,n=ne(i.rawValue,i),e.val(ie(n,i))):i.scaleDivisor?(i.decimalPlacesOverride=Number(i.oDec),n=ne(i.rawValue,i),e.val(ie(n,i))):i.noSeparatorOnFocus?(i.digitGroupSeparator="",i.currencySymbol="",i.suffixText="",n=ne(i.rawValue,i),e.val(ie(n,i))):r!==i.rawValue&&e.autoNumeric("set",r),t.valueOnFocus=a.target.value,t.lastVal=t.valueOnFocus;var o=ae(t.valueOnFocus,i,!0);null!==o&&""!==o&&"focus"===i.emptyInputBehavior&&(e.val(o),o===i.currencySymbol&&"s"===i.currencySymbolPlacement&&Z(a.target,0,0))}}function be(e,t){return e._updateAutoNumericHolderEventKeycode(t),e.initialValueOnKeydown=t.target.value,e.that.readOnly?void(e.processed=!0):(e.eventKeyCode===y.Enter&&e.valueOnFocus!==t.target.value&&(Ke("change",t.target),e.valueOnFocus=t.target.value),e._updateAutoNumericHolderProperties(t),e._skipAlways(t)?void(e.processed=!0):e.eventKeyCode===y.Backspace||e.eventKeyCode===y.Delete?(e._processCharacterDeletion(),e.processed=!0,e._formatValue(t),t.target.value!==e.lastVal&&e.settingsClone.throwInput&&(Ke("input",t.target),t.preventDefault()),e.lastVal=t.target.value,void(e.settingsClone.throwInput=!0)):void(e.formatted=!1))}function Pe(e,t){var a=D(t);if(a!==S.Insert){var i=e.processed;if(e._updateAutoNumericHolderProperties(t),!e._skipAlways(t)){if(i)return void t.preventDefault();var r=e._processCharacterInsertion(t);if(r){if(e._formatValue(t),t.target.value!==e.lastVal&&e.settingsClone.throwInput)Ke("input",t.target),t.preventDefault();else{if((a===e.settings.decimalCharacter||a===e.settings.decimalCharacterAlternative)&&$(t.target).start===$(t.target).end&&$(t.target).start===t.target.value.indexOf(e.settings.decimalCharacter)){var n=$(t.target).start+1;Z(t.target,n,n)}t.preventDefault()}return e.lastVal=t.target.value,void(e.settingsClone.throwInput=!0)}t.preventDefault(),e.formatted=!1}}}function Ce(e,t,a){e._updateAutoNumericHolderProperties(a);var i=e._skipAlways(a);delete e.valuePartsBeforePaste,i||""===a.target.value||(a.target.value===e.settingsClone.currencySymbol?"s"===e.settingsClone.currencySymbolPlacement?Z(a.target,0,0):Z(a.target,e.settingsClone.currencySymbol.length,e.settingsClone.currencySymbol.length):e.eventKeyCode===y.Tab&&Z(a.target,0,a.target.value.length),(a.target.value===e.settingsClone.suffixText||""===e.settingsClone.rawValue&&""!==e.settingsClone.currencySymbol&&""!==e.settingsClone.suffixText)&&Z(a.target,0,0),null!==e.settingsClone.decimalPlacesShownOnFocus&&e.settingsClone.saveValueToSessionStorage&&fe(a.target,t,"set"),e.formatted||e._formatValue(a),a.target.value!==e.initialValueOnKeydown&&Ke("autoNumeric:formatted",a.target))}function we(e,t,a){if(!e.is(":focus")){var i=a.target.value,r=i,n=t.settingsClone;if(n.hasFocus=!1,n.saveValueToSessionStorage&&fe(a.target,n,"set"),n.noSeparatorOnFocus===!0&&(n.digitGroupSeparator=n.oSep,n.currencySymbol=n.oSign,n.suffixText=n.oSuffix),null!==n.decimalPlacesShownOnFocus&&(n.decimalPlacesOverride=n.oDec,n.allowDecimalPadding=n.oPad,n.negativeBracketsTypeOnBlur=n.oBracket),i=Q(i,n,!0),""!==i){n.trailingNegative&&!L(i)&&(i="-"+i,n.trailingNegative=!1);var o=ce(i,n),l=s(o,2),c=l[0],u=l[1];null===ae(i,n,!1)&&c&&u?(i=ee(i,n),n.rawValue=ve(i,n),n.scaleDivisor&&(i/=n.scaleDivisor,i=i.toString()),n.decimalPlacesOverride=n.scaleDivisor&&n.scaleDecimalPlaces?Number(n.scaleDecimalPlaces):n.decimalPlacesOverride,i=ne(i,n),i=te(i,n)):(c||e.trigger("autoNumeric:minExceeded"),u||e.trigger("autoNumeric:maxExceeded"),i=n.rawValue)}else"zero"===n.emptyInputBehavior?(n.rawValue="0",i=ne("0",n)):n.rawValue="";var d=ae(i,n,!1);null===d&&(d=ie(i,n)),d!==r&&(d=n.scaleSymbol?d+n.scaleSymbol:d,e.val(d)),d!==t.valueOnFocus&&(e.change(),delete t.valueOnFocus)}}function Oe(e,t,a){a.preventDefault();var i=a.clipboardData.getData("text/plain"),r=a.target.value,n=a.target.selectionStart||0,o=a.target.selectionEnd||0,l=o-n,s=!1;l===r.length&&(s=!0);var c=M(i);c&&(i=i.slice(1,i.length));var u=N(i,t),d=void 0;if(d="."===u?".":_e(u,!1,!1,!1),"."!==d&&(!w(d)||""===d))return void("error"===t.settings.onInvalidPaste&&z("The pasted value '"+i+"' is not a valid paste content."));var m=void 0,h=void 0;h=""===a.target.value?"":e.autoNumeric("get");var g=M(h),v=void 0,p=void 0;c&&!g?(h="-"+h,g=!0,v=!0):v=!1;var f=!1;switch(t.settings.onInvalidPaste){case"truncate":case"replace":var y=r.slice(0,n),S=r.slice(o,r.length);p=n!==o?N(y+S,t):N(r,t),g&&(p=I(p)),m=G(R(r,n,t.settings.decimalCharacter)),v&&m++;var b=p.slice(0,m),P=p.slice(m,p.length);"."===d&&(k(b,".")&&(f=!0,b=b.replace(".","")),P=P.replace(".",""));for(var C=le(t.settings.minimumValue),O=le(t.settings.maximumValue),x=p,V=0,A=b;V<d.length&&(A+=d[V],p=A+P,B(p,C,O));)x=p,V++;if(m+=V,"truncate"===t.settings.onInvalidPaste){p=x,f&&m--;break}for(var F=m,T=x.length;V<d.length&&F<T;)if("."!==x[F]){if(p=_(x,F,d[V]),!B(p,C,O))break;x=p,V++,F++}else F++;m=F,f&&m--,p=x;break;case"error":case"ignore":case"clamp":default:var D=r.slice(0,n),L=r.slice(o,r.length);if(p=n!==o?N(D+L,t):N(r,t),g&&(p=I(p)),m=G(R(r,n,t.settings.decimalCharacter)),v&&m++,b=p.slice(0,m),P=p.slice(m,p.length),"."===d&&(k(b,".")&&(f=!0,b=b.replace(".","")),P=P.replace(".","")),p=""+b+d+P,n===o){var E=G(R(r,n,t.settings.decimalCharacter));m=E+d.length}else if(s)m=p.length;else if(""===P)m=G(R(r,n,t.settings.decimalCharacter))+d.length;else{var $=G(R(r,o,t.settings.decimalCharacter)),H=a.target.value.slice(n,o);m=$-l+j(t.settings.digitGroupSeparator,H)+d.length}s||(v&&m++,f&&m--)}if(!w(p)||""===p)return void("error"===t.settings.onInvalidPaste&&z("The pasted value '"+i+"' would result into an invalid content '"+p+"'."));var q=!1,W=!1;try{e.autoNumeric("set",p),q=!0}catch(a){var Q=void 0;switch(t.settings.onInvalidPaste){case"clamp":Q=K(p,t.settings);try{e.autoNumeric("set",Q)}catch(e){z("Fatal error: Unable to set the clamped value '"+Q+"'.")}W=!0,q=!0,p=Q;break;case"error":case"truncate":case"replace":z("The pasted value '"+i+"' results in a value '"+p+"' that is outside of the minimum ["+t.settings.minimumValue+"] and maximum ["+t.settings.maximumValue+"] value range.");case"ignore":default:return}}var J=void 0;if(q)switch(t.settings.onInvalidPaste){case"clamp":if(W){"s"===t.settings.currencySymbolPlacement?Z(a.target,a.target.value.length-t.settings.currencySymbol.length):Z(a.target,a.target.value.length);break}case"error":case"ignore":case"truncate":case"replace":default:J=U(p,m,a.target.value,t.settings.decimalCharacter),Z(a.target,J)}q&&r!==a.target.value&&Ke("input",a.target)}function xe(e,t){t.target.value!==e.valueOnFocus&&Ke("change",t.target)}function Ne(e,t){e.closest("form").on("submit.autoNumeric",function(){if(t){var a=t.settingsClone;a.unformatOnSubmit&&e.val(a.rawValue)}})}function ke(e){var t=e.is("input[type=text], input[type=hidden], input[type=tel], input:not([type])");t||"input"!==e.prop("tagName").toLowerCase()||z('The input type "'+e.prop("type")+'" is not supported by autoNumeric');var a=e.prop("tagName").toLowerCase();return"input"===a||V(a,p)||z("The <"+a+"> tag is not supported by autoNumeric"),t}function Ve(e,t,a){var r=!0;if(t){var n=a.val(),o=Ie(n,e);if(e.formatOnPageLoad&&""!==n&&i(a.attr("value")))isNaN(o)||1/0===o?z("The value ["+n+"] used in the input is not a valid value autoNumeric can work with."):(a.autoNumeric("set",o),r=!1);else if(null!==e.defaultValueOverride&&e.defaultValueOverride.toString()!==n||null===e.defaultValueOverride&&""!==n&&n!==a.attr("value")||""!==n&&"hidden"===a.attr("type")&&!w(o)){if((null!==e.decimalPlacesShownOnFocus&&e.saveValueToSessionStorage||e.scaleDivisor&&e.saveValueToSessionStorage)&&(e.rawValue=fe(a[0],e,"get")),!e.saveValueToSessionStorage){var l=void 0;null!==e.negativeBracketsTypeOnBlur&&""!==e.negativeSignCharacter?(e.hasFocus=!0,l=J(n,e)):l=n,("s"===e.negativePositiveSignPlacement||"p"!==e.negativePositiveSignPlacement&&"s"===e.currencySymbolPlacement)&&""!==e.negativeSignCharacter&&L(n)?e.rawValue=e.negativeSignCharacter+Q(l,e,!0):e.rawValue=Q(l,e,!0)}r=!1}if(""===n)switch(e.emptyInputBehavior){case"focus":r=!1;break;case"always":a.val(e.currencySymbol),r=!1;break;case"zero":a.autoNumeric("set","0"),r=!1}else r&&n===a.attr("value")&&a.autoNumeric("set",n)}V(a.prop("tagName").toLowerCase(),e.tagList)&&""!==a.text()&&(null!==e.defaultValueOverride?e.defaultValueOverride===a.text()&&a.autoNumeric("set",a.text()):a.autoNumeric("set",a.text()))}function Ae(e){if(t(e.negativePositiveSignPlacement))if(a(e)||!i(e.negativePositiveSignPlacement)||i(e.currencySymbol))e.negativePositiveSignPlacement="l";else switch(e.currencySymbolPlacement){case"s":e.negativePositiveSignPlacement="p";break;case"p":e.negativePositiveSignPlacement="l"}}function Fe(e){var t=e.maximumValue.toString().split("."),a=s(t,1),i=a[0],r=e.minimumValue||0===e.minimumValue?e.minimumValue.toString().split("."):[],n=s(r,1),o=n[0];i=i.replace("-",""),o=o.replace("-",""),e.mIntPos=Math.max(i.length,1),e.mIntNeg=Math.max(o.length,1)}function Te(e){t(e.decimalPlacesOverride)&&(e.decimalPlacesOverride=W(e.minimumValue,e.maximumValue)),e.oDec=String(e.decimalPlacesOverride),e.decimalPlacesOverride=Number(e.decimalPlacesOverride)}function De(e){t(e.decimalCharacterAlternative)&&Number(e.decimalPlacesOverride)>0&&("."===e.decimalCharacter&&","!==e.digitGroupSeparator?e.decimalCharacterAlternative=",":","===e.decimalCharacter&&"."!==e.digitGroupSeparator&&(e.decimalCharacterAlternative="."))}function Be(e){var t="[0-9]",a="[^0-9]",i=e.negativeSignCharacter?"([-\\"+e.negativeSignCharacter+"]?)":"(-?)";e.aNegRegAutoStrip=i;var r=void 0;r=e.negativeSignCharacter?"\\"+e.negativeSignCharacter:"",e.skipFirstAutoStrip=new RegExp(i+"[^-"+r+"\\"+e.decimalCharacter+t+"].*?("+t+"|\\"+e.decimalCharacter+t+")"),e.skipLastAutoStrip=new RegExp("("+t+"\\"+e.decimalCharacter+"?)[^\\"+e.decimalCharacter+t+"]"+a+"*$");var n="-0123456789\\"+e.decimalCharacter;e.allowedAutoStrip=new RegExp("[^"+n+"]","g"),e.numRegAutoStrip=new RegExp(i+"(?:\\"+e.decimalCharacter+"?("+t+"+\\"+e.decimalCharacter+t+"+)|("+t+"*(?:\\"+e.decimalCharacter+t+"*)?))"),e.stripReg=new RegExp("^"+e.aNegRegAutoStrip+"0*("+t+")")}function Le(t){e.each(t,function(e,a){"true"!==a&&"false"!==a||(t[e]="true"===a),"number"==typeof a&&"aScale"!==e&&(t[e]=a.toString())})}function Me(e){var t={aSep:"digitGroupSeparator",nSep:"noSeparatorOnFocus",dGroup:"digitalGroupSpacing",aDec:"decimalCharacter",altDec:"decimalCharacterAlternative",aSign:"currencySymbol",pSign:"currencySymbolPlacement",pNeg:"negativePositiveSignPlacement",aSuffix:"suffixText",oLimits:"overrideMinMaxLimits",
vMax:"maximumValue",vMin:"minimumValue",mDec:"decimalPlacesOverride",eDec:"decimalPlacesShownOnFocus",scaleDecimal:"scaleDecimalPlaces",aStor:"saveValueToSessionStorage",mRound:"roundingMethod",aPad:"allowDecimalPadding",nBracket:"negativeBracketsTypeOnBlur",wEmpty:"emptyInputBehavior",lZero:"leadingZero",aForm:"formatOnPageLoad",sNumber:"selectNumberOnly",anDefault:"defaultValueOverride",unSetOnSubmit:"unformatOnSubmit",outputType:"outputFormat",debug:"showWarnings",digitGroupSeparator:!0,noSeparatorOnFocus:!0,digitalGroupSpacing:!0,decimalCharacter:!0,decimalCharacterAlternative:!0,currencySymbol:!0,currencySymbolPlacement:!0,negativePositiveSignPlacement:!0,showPositiveSign:!0,suffixText:!0,overrideMinMaxLimits:!0,maximumValue:!0,minimumValue:!0,decimalPlacesOverride:!0,decimalPlacesShownOnFocus:!0,scaleDivisor:!0,scaleDecimalPlaces:!0,scaleSymbol:!0,saveValueToSessionStorage:!0,onInvalidPaste:!0,roundingMethod:!0,allowDecimalPadding:!0,negativeBracketsTypeOnBlur:!0,emptyInputBehavior:!0,leadingZero:!0,formatOnPageLoad:!0,selectNumberOnly:!0,defaultValueOverride:!0,unformatOnSubmit:!0,outputFormat:!0,showWarnings:!0,failOnUnknownOption:!0,hasFocus:!0,runOnce:!0,rawValue:!0,trailingNegative:!0,caretFix:!0,throwInput:!0,strip:!0,tagList:!0,negativeSignCharacter:!0,positiveSignCharacter:!0,mIntPos:!0,mIntNeg:!0,oDec:!0,oPad:!0,oBracket:!0,oSep:!0,oSign:!0,oSuffix:!0,aNegRegAutoStrip:!0,skipFirstAutoStrip:!0,skipLastAutoStrip:!0,allowedAutoStrip:!0,numRegAutoStrip:!0,stripReg:!0,holder:!0};for(var a in e)if(e.hasOwnProperty(a)){if(t[a]===!0)continue;t.hasOwnProperty(a)?(H("You are using the deprecated option name '"+a+"'. Please use '"+t[a]+"' instead from now on. The old option name will be dropped soon.",!0),e[t[a]]=e[a],delete e[a]):e.failOnUnknownOption&&z("Option name '"+a+"' is unknown. Please fix the options passed to autoNumeric")}}function Ee(i,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=r.data("autoNumeric");if(!n&&t(i)||Me(i),n||a(o)){if(n)o=e.extend(o,i);else{var l=r.data();o=e.extend({},f,l,i,{hasFocus:!1,runOnce:!1,rawValue:"",trailingNegative:!1,caretFix:!1,throwInput:!0,strip:!0,tagList:p})}return Le(o),Ae(o),o.negativeSignCharacter=o.minimumValue<0?"-":"",o.positiveSignCharacter=o.maximumValue>=0?"+":"",q(r,o),Fe(o),Te(o),De(o),Be(o),g(o,!1),me(o),r.data("autoNumeric",o),o}return null}function Ie(e,t){var a=void 0;return w(Number(e))?a=e:(a=Y(e.toString(),t),w(Number(a))||(H('The value "'+e+'" being "set" is not numeric and therefore cannot be used appropriately.',t.showWarnings),a=NaN)),a}function _e(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=e.toString();if(""===r)return e;a&&(r=r.replace(/٫/,".")),i&&(r=r.replace(/٬/g,"")),r=r.replace(/[٠١٢٣٤٥٦٧٨٩]/g,function(e){return e.charCodeAt(0)-1632}).replace(/[۰۱۲۳۴۵۶۷۸۹]/g,function(e){return e.charCodeAt(0)-1776});var n=Number(r);return isNaN(n)?n:(t&&(r=n),r)}function Ke(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=void 0;window.CustomEvent?i=new CustomEvent(e,{detail:a,bubbles:!1,cancelable:!1}):(i=document.createEvent("CustomEvent"),i.initCustomEvent(e,!0,!0,{detail:a})),t.dispatchEvent(i)}var Re=function(){function t(a,i){o(this,t),this.settings=i,this.that=a,this.$that=e(a),this.formatted=!1,this.settingsClone=i,this.value=a.value}return l(t,[{key:"_updateAutoNumericHolderProperties",value:function(){this.value=this.that.value,this.selection=$(this.that),this.processed=!1,this.formatted=!1}},{key:"_updateAutoNumericHolderEventKeycode",value:function(e){this.eventKeyCode=T(e)}},{key:"_setSelection",value:function(e,t,i){e=Math.max(e,0),t=Math.min(t,this.that.value.length),this.selection={start:e,end:t,length:t-e},(a(i)||i)&&Z(this.that,e,t)}},{key:"_setCaretPosition",value:function(e,t){this._setSelection(e,e,t)}},{key:"_getLeftAndRightPartAroundTheSelection",value:function(){var e=this.value,t=e.substring(0,this.selection.start),a=e.substring(this.selection.end,e.length);return[t,a]}},{key:"_getUnformattedLeftAndRightPartAroundTheSelection",value:function(){var e=this.settingsClone,t=this._getLeftAndRightPartAroundTheSelection(),a=s(t,2),i=a[0],r=a[1];""===i&&""===r&&(e.trailingNegative=!1);var n=!0;return this.eventKeyCode===y.Hyphen&&0===Number(i)&&(n=!1),i=Q(i,this.settingsClone,n),r=Q(r,this.settingsClone,!1),e.trailingNegative&&!L(i)&&(i="-"+i,r="-"===r?"":r,e.trailingNegative=!1),[i,r]}},{key:"_normalizeParts",value:function(e,t){var a=this.settingsClone,i=!0;if(this.eventKeyCode===y.Hyphen&&0===Number(e)&&(i=!1),e=Q(e,a,i),t=Q(t,a,!1),"deny"!==a.leadingZero||this.eventKeyCode!==y.num0&&this.eventKeyCode!==y.numpad0||0!==Number(e)||k(e,a.decimalCharacter)||""===t||(e=e.substring(0,e.length-1)),a.trailingNegative&&!L(e)&&(e="-"+e,a.trailingNegative=!1),this.newValue=e+t,a.decimalCharacter){var r=this.newValue.match(new RegExp("^"+a.aNegRegAutoStrip+"\\"+a.decimalCharacter));r&&(e=e.replace(r[1],r[1]+"0"),this.newValue=e+t)}return[e,t]}},{key:"_setValueParts",value:function(e,t){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=this.settingsClone,r=this._normalizeParts(e,t),n=ce(this.newValue,i),o=s(n,2),l=o[0],c=o[1],u=r[0].length;if(this.newValue=r.join(""),l&&c){this.newValue=oe(this.newValue,i,a);var d=k(this.newValue,",")?this.newValue.replace(",","."):this.newValue;return""===d||d===i.negativeSignCharacter?i.rawValue="zero"===i.emptyInputBehavior?"0":"":i.rawValue=ve(d,i),u>this.newValue.length&&(u=this.newValue.length),1===u&&"0"===r[0]&&"deny"===i.leadingZero&&(u=""===r[1]||"0"===r[0]&&""!==r[1]?1:0),this.value=this.newValue,this._setCaretPosition(u,!1),!0}return l?c||this.$that.trigger("autoNumeric:maxExceeded"):this.$that.trigger("autoNumeric:minExceeded"),!1}},{key:"_getSignPosition",value:function(){var e=this.settingsClone,t=e.currencySymbol,a=this.that;if(t){var i=t.length;if("p"===e.currencySymbolPlacement){var r=e.negativeSignCharacter&&a.value&&a.value.charAt(0)===e.negativeSignCharacter;return r?[1,i+1]:[0,i]}var n=a.value.length;return[n-i,n]}return[1e3,-1]}},{key:"_expandSelectionOnSign",value:function(e){var t=this._getSignPosition(),a=this.selection;a.start<t[1]&&a.end>t[0]&&((a.start<t[0]||a.end>t[1])&&this.value.substring(Math.max(a.start,t[0]),Math.min(a.end,t[1])).match(/^\s*$/)?a.start<t[0]?this._setSelection(a.start,t[0],e):this._setSelection(t[1],a.end,e):this._setSelection(Math.min(a.start,t[0]),Math.max(a.end,t[1]),e))}},{key:"_checkPaste",value:function(){if(!a(this.valuePartsBeforePaste)){var e=this.valuePartsBeforePaste,t=this._getLeftAndRightPartAroundTheSelection(),i=s(t,2),r=i[0],n=i[1];delete this.valuePartsBeforePaste;var o=r.substr(0,e[0].length)+Q(r.substr(e[0].length),this.settingsClone,!0);this._setValueParts(o,n,!0)||(this.value=e.join(""),this._setCaretPosition(e[0].length,!1))}}},{key:"_skipAlways",value:function(e){if((e.ctrlKey||e.metaKey)&&"keyup"===e.type&&!a(this.valuePartsBeforePaste)||e.shiftKey&&this.eventKeyCode===y.Insert)return this._checkPaste(),!1;if(this.eventKeyCode>=y.F1&&this.eventKeyCode<=y.F12||this.eventKeyCode>=y.Windows&&this.eventKeyCode<=y.RightClick||this.eventKeyCode>=y.Tab&&this.eventKeyCode<y.Space||this.eventKeyCode<y.Backspace&&(0===e.which||e.which===this.eventKeyCode)||this.eventKeyCode===y.NumLock||this.eventKeyCode===y.ScrollLock||this.eventKeyCode===y.Insert||this.eventKeyCode===y.Command)return!0;if((e.ctrlKey||e.metaKey)&&this.eventKeyCode===y.a){if(this.settings.selectNumberOnly){e.preventDefault();var t=this.that.value.length,i=this.settings.currencySymbol.length,r=L(this.that.value)?1:0,n=this.settings.suffixText.length,o=this.settings.currencySymbolPlacement,l=this.settings.negativePositiveSignPlacement,s=void 0;s="s"===o?0:"l"===l&&1===r&&i>0?i+1:i;var c=void 0;if("p"===o)c=t-n;else switch(l){case"l":c=t-(n+i);break;case"r":c=i>0?t-(i+r+n):t-(i+n);break;default:c=t-(i+n)}Z(this.that,s,c)}return!0}return!e.ctrlKey&&!e.metaKey||this.eventKeyCode!==y.c&&this.eventKeyCode!==y.v&&this.eventKeyCode!==y.x?!(!e.ctrlKey&&!e.metaKey)||(this.eventKeyCode===y.LeftArrow||this.eventKeyCode===y.RightArrow?("keydown"!==e.type||e.shiftKey||(this.eventKeyCode!==y.LeftArrow||this.that.value.charAt(this.selection.start-2)!==this.settingsClone.digitGroupSeparator&&this.that.value.charAt(this.selection.start-2)!==this.settingsClone.decimalCharacter?this.eventKeyCode!==y.RightArrow||this.that.value.charAt(this.selection.start+1)!==this.settingsClone.digitGroupSeparator&&this.that.value.charAt(this.selection.start+1)!==this.settingsClone.decimalCharacter||this._setCaretPosition(this.selection.start+1):this._setCaretPosition(this.selection.start-1)),!0):this.eventKeyCode>=y.PageDown&&this.eventKeyCode<=y.DownArrow):("keydown"===e.type&&this._expandSelectionOnSign(),this.eventKeyCode!==y.v&&this.eventKeyCode!==y.Insert||("keydown"===e.type||"keypress"===e.type?a(this.valuePartsBeforePaste)&&(this.valuePartsBeforePaste=this._getLeftAndRightPartAroundTheSelection()):this._checkPaste()),"keydown"===e.type||"keypress"===e.type||this.eventKeyCode===y.c)}},{key:"_processCharacterDeletionIfTrailingNegativeSign",value:function(e){var t=s(e,2),a=t[0],i=t[1],r=this.settingsClone;return"p"===r.currencySymbolPlacement&&"s"===r.negativePositiveSignPlacement&&(this.eventKeyCode===y.Backspace?(r.caretFix=this.selection.start>=this.value.indexOf(r.suffixText)&&""!==r.suffixText,"-"===this.value.charAt(this.selection.start-1)?a=a.substring(1):this.selection.start<=this.value.length-r.suffixText.length&&(a=a.substring(0,a.length-1))):(r.caretFix=this.selection.start>=this.value.indexOf(r.suffixText)&&""!==r.suffixText,this.selection.start>=this.value.indexOf(r.currencySymbol)+r.currencySymbol.length&&(i=i.substring(1,i.length)),L(a)&&"-"===this.value.charAt(this.selection.start)&&(a=a.substring(1)))),"s"===r.currencySymbolPlacement&&"l"===r.negativePositiveSignPlacement&&(r.caretFix=this.selection.start>=this.value.indexOf(r.negativeSignCharacter)+r.negativeSignCharacter.length,this.eventKeyCode===y.Backspace?this.selection.start===this.value.indexOf(r.negativeSignCharacter)+r.negativeSignCharacter.length&&k(this.value,r.negativeSignCharacter)?a=a.substring(1):"-"!==a&&(this.selection.start<=this.value.indexOf(r.negativeSignCharacter)||!k(this.value,r.negativeSignCharacter))&&(a=a.substring(0,a.length-1)):("-"===a[0]&&(i=i.substring(1)),this.selection.start===this.value.indexOf(r.negativeSignCharacter)&&k(this.value,r.negativeSignCharacter)&&(a=a.substring(1)))),"s"===r.currencySymbolPlacement&&"r"===r.negativePositiveSignPlacement&&(r.caretFix=this.selection.start>=this.value.indexOf(r.negativeSignCharacter)+r.negativeSignCharacter.length,this.eventKeyCode===y.Backspace?this.selection.start===this.value.indexOf(r.negativeSignCharacter)+r.negativeSignCharacter.length?a=a.substring(1):"-"!==a&&this.selection.start<=this.value.indexOf(r.negativeSignCharacter)-r.currencySymbol.length?a=a.substring(0,a.length-1):""===a||k(this.value,r.negativeSignCharacter)||(a=a.substring(0,a.length-1)):(r.caretFix=this.selection.start>=this.value.indexOf(r.currencySymbol)&&""!==r.currencySymbol,this.selection.start===this.value.indexOf(r.negativeSignCharacter)&&(a=a.substring(1)),i=i.substring(1))),[a,i]}},{key:"_processCharacterDeletion",value:function(){var e=this.settingsClone,t=void 0,a=void 0;if(this.selection.length){this._expandSelectionOnSign(!1);var i=this._getUnformattedLeftAndRightPartAroundTheSelection(),r=s(i,2);t=r[0],a=r[1]}else{var n=this._getUnformattedLeftAndRightPartAroundTheSelection(),o=s(n,2);if(t=o[0],a=o[1],""===t&&""===a&&(e.throwInput=!1),("p"===e.currencySymbolPlacement&&"s"===e.negativePositiveSignPlacement||"s"===e.currencySymbolPlacement&&("l"===e.negativePositiveSignPlacement||"r"===e.negativePositiveSignPlacement))&&L(this.value)){var l=this._processCharacterDeletionIfTrailingNegativeSign([t,a]),c=s(l,2);t=c[0],a=c[1]}else this.eventKeyCode===y.Backspace?t=t.substring(0,t.length-1):a=a.substring(1,a.length)}this._setValueParts(t,a)}},{key:"_processCharacterInsertion",value:function(e){var t=this.settingsClone,a=this._getUnformattedLeftAndRightPartAroundTheSelection(),i=s(a,2),r=i[0],n=i[1];t.throwInput=!0;var o=D(e);if(o===t.decimalCharacter||t.decimalCharacterAlternative&&o===t.decimalCharacterAlternative||("."===o||","===o)&&this.eventKeyCode===y.DotNumpad)return!t.decimalPlacesOverride||!t.decimalCharacter||(!(!t.negativeSignCharacter||!k(n,t.negativeSignCharacter))||(!!k(r,t.decimalCharacter)||(n.indexOf(t.decimalCharacter)>0||(0===n.indexOf(t.decimalCharacter)&&(n=n.substr(1)),this._setValueParts(r+t.decimalCharacter,n),!0))));if(("-"===o||"+"===o)&&"-"===t.negativeSignCharacter)return!t||("p"===t.currencySymbolPlacement&&"s"===t.negativePositiveSignPlacement||"s"===t.currencySymbolPlacement&&"p"!==t.negativePositiveSignPlacement?(""===r&&k(n,t.negativeSignCharacter)&&(r=t.negativeSignCharacter,n=n.substring(1,n.length)),r=M(r)||k(r,t.negativeSignCharacter)?r.substring(1,r.length):"-"===o?t.negativeSignCharacter+r:r):(""===r&&k(n,t.negativeSignCharacter)&&(r=t.negativeSignCharacter,n=n.substring(1,n.length)),r=r.charAt(0)===t.negativeSignCharacter?r.substring(1,r.length):"-"===o?t.negativeSignCharacter+r:r),this._setValueParts(r,n),!0);var l=Number(o);return l>=0&&l<=9?(t.negativeSignCharacter&&""===r&&k(n,t.negativeSignCharacter)&&(r=t.negativeSignCharacter,n=n.substring(1,n.length)),t.maximumValue<=0&&t.minimumValue<t.maximumValue&&!k(this.value,t.negativeSignCharacter)&&"0"!==o&&(r=t.negativeSignCharacter+r),this._setValueParts(r+o,n),!0):(t.throwInput=!1,!1)}},{key:"_formatValue",value:function(t){var a=this,i=this.settingsClone,r=this.value,n=this._getUnformattedLeftAndRightPartAroundTheSelection(),o=s(n,1),l=o[0];if((""===i.digitGroupSeparator||""!==i.digitGroupSeparator&&!k(r,i.digitGroupSeparator))&&(""===i.currencySymbol||""!==i.currencySymbol&&!k(r,i.currencySymbol))){var c=r.split(i.decimalCharacter),u=s(c,1),d=u[0],m="";L(d)&&(m="-",d=d.replace("-",""),l=l.replace("-","")),""===m&&d.length>i.mIntPos&&"0"===l.charAt(0)&&(l=l.slice(1)),"-"===m&&d.length>i.mIntNeg&&"0"===l.charAt(0)&&(l=l.slice(1)),l=m+l}var h=ie(this.value,this.settingsClone),g=h.length;if(h){var v=l.split("");("s"===i.negativePositiveSignPlacement||"s"===i.currencySymbolPlacement&&"p"!==i.negativePositiveSignPlacement)&&"-"===v[0]&&""!==i.negativeSignCharacter&&(v.shift(),this.eventKeyCode!==y.Backspace&&this.eventKeyCode!==y.Delete||!i.caretFix||("s"===i.currencySymbolPlacement&&"l"===i.negativePositiveSignPlacement&&(v.push("-"),i.caretFix="keydown"===t.type),"p"===i.currencySymbolPlacement&&"s"===i.negativePositiveSignPlacement&&(v.push("-"),i.caretFix="keydown"===t.type),"s"===i.currencySymbolPlacement&&"r"===i.negativePositiveSignPlacement&&!function(){var r=i.currencySymbol.split(""),n=["\\","^","$",".","|","?","*","+","(",")","["],o=[];e.each(r,function(e,t){t=r[e],V(t,n)?o.push("\\"+t):o.push(t)}),a.eventKeyCode===y.Backspace&&o.push("-"),v.push(o.join("")),i.caretFix="keydown"===t.type}()));for(var p=0;p<v.length;p++)v[p].match("\\d")||(v[p]="\\"+v[p]);var f=new RegExp("^.*?"+v.join(".*?")),S=h.match(f);S?(g=S[0].length,i.showPositiveSign&&(0===g&&S.input.charAt(0)===i.positiveSignCharacter&&(g=1===S.input.indexOf(i.currencySymbol)?i.currencySymbol.length+1:1),0===g&&S.input.charAt(i.currencySymbol.length)===i.positiveSignCharacter&&(g=i.currencySymbol.length+1)),(0===g&&h.charAt(0)!==i.negativeSignCharacter||1===g&&h.charAt(0)===i.negativeSignCharacter)&&i.currencySymbol&&"p"===i.currencySymbolPlacement&&(g=this.settingsClone.currencySymbol.length+(M(h)?1:0))):(i.currencySymbol&&"s"===i.currencySymbolPlacement&&(g-=i.currencySymbol.length),i.suffixText&&(g-=i.suffixText.length))}h===this.that.value&&(h!==this.that.value||this.eventKeyCode!==y.num0&&this.eventKeyCode!==y.numpad0)||(this.that.value=h,this._setCaretPosition(g)),this.formatted=!0}}]),t}(),Ue={init:function(a){return this.each(function(){var i=e(this),r=ke(i),n=Ee(a,i,!1);if(t(n))return this;var o=de(i,n,!1);!n.runOnce&&n.formatOnPageLoad&&Ve(n,r,i),n.runOnce=!0,r&&(this.addEventListener("focusin",function(e){Se(i,o,e)},!1),this.addEventListener("mouseenter",function(e){Se(i,o,e)},!1),this.addEventListener("blur",function(e){we(i,o,e)},!1),this.addEventListener("mouseleave",function(e){we(i,o,e)},!1),this.addEventListener("keydown",function(e){be(o,e)},!1),this.addEventListener("keypress",function(e){Pe(o,e)},!1),this.addEventListener("keyup",function(e){Ce(o,n,e)},!1),this.addEventListener("blur",function(e){xe(o,e)},!1),this.addEventListener("paste",function(e){Oe(i,o,e)},!1),Ne(i,o))})},destroy:function(){return e(this).each(function(){var e=ue(this),t=e.data("autoNumeric");"object"===("undefined"==typeof t?"undefined":c(t))&&(e.val(""),fe(e[0],t,"wipe"),e.removeData("autoNumeric"),e.off(".autoNumeric"))})},wipe:function(){return e(this).each(function(){var e=ue(this),t=e.data("autoNumeric");"object"===("undefined"==typeof t?"undefined":c(t))&&(e.val(""),t.rawValue="",fe(e[0],t,"wipe"))})},update:function(t){return e(this).each(function(){var e=ue(this),a=e.autoNumeric("get"),i=Ee(t,e,!0);if(de(e,i,!0),""!==e.val()||""!==e.text())return e.autoNumeric("set",a)})},set:function(t){return e(this).each(function(){if(null!==t&&!a(t)){var e=ue(this),i=e.data("autoNumeric");"object"!==("undefined"==typeof i?"undefined":c(i))&&z('Initializing autoNumeric is required prior to calling the "set" method.'),i.trailingNegative=!1;var r=e.is("input[type=text], input[type=hidden], input[type=tel], input:not([type])"),n=Ie(t,i);if(isNaN(n))return e.val("");if(""===n)return e.val("");var o=ce(n,i),l=s(o,2),u=l[0],d=l[1],m=E(n);if(m&&(n="0"),!u||!d){i.rawValue="",fe(e[0],i,"wipe");var h=n;return n="",u||e.trigger("autoNumeric:minExceeded"),d||e.trigger("autoNumeric:maxExceeded"),z("The value ["+h+"] being set falls outside of the minimumValue ["+i.minimumValue+"] and maximumValue ["+i.maximumValue+"] range set for this element"),e.val("")}if(r||V(e.prop("tagName").toLowerCase(),i.tagList)){var g=!1,v=void 0;i.decimalPlacesShownOnFocus&&(v=i.decimalPlacesOverride,i.decimalPlacesOverride=Number(i.decimalPlacesShownOnFocus),n=ne(n,i),g=!0,i.decimalPlacesOverride=v),i.scaleDivisor&&!i.onOff&&(n=ne(n,i),i.rawValue=ve(n.replace(i.decimalCharacter,"."),i),n=Ie(n,i),n/=i.scaleDivisor,n=n.toString(),i.scaleDecimalPlaces&&(v=i.decimalPlacesOverride,i.decimalPlacesOverride=Number(i.scaleDecimalPlaces),n=ne(n,i),g=!0)),g||(n=ne(n,i)),i.scaleDivisor||(i.rawValue=ve(n.replace(i.decimalCharacter,"."),i)),n=te(n,i),n=ie(n,i),i.scaleDivisor&&i.scaleDecimalPlaces&&!i.onOff&&(i.decimalPlacesOverride=v)}return i.saveValueToSessionStorage&&(i.decimalPlacesShownOnFocus||i.scaleDivisor)&&fe(e[0],i,"set"),!i.hasFocus&&i.scaleSymbol&&(n+=i.scaleSymbol),r?e.val(n):!!V(e.prop("tagName").toLowerCase(),i.tagList)&&e.text(n)}})},unSet:function(){return e(this).each(function(){var e=ue(this),t=e.data("autoNumeric");"object"===("undefined"==typeof t?"undefined":c(t))&&(t.hasFocus=!0,e.val(e.autoNumeric("getLocalized")))})},reSet:function(){return e(this).each(function(){var e=ue(this),t=e.data("autoNumeric");"object"===("undefined"==typeof t?"undefined":c(t))&&e.autoNumeric("set",e.val())})},get:function(){var e=ue(this),t=e.is("input[type=text], input[type=hidden], input[type=tel], input:not([type])"),a=e.data("autoNumeric");"object"!==("undefined"==typeof a?"undefined":c(a))&&z('Initializing autoNumeric is required prior to calling the "get" method.');var i="";if(t?i=e.eq(0).val():V(e.prop("tagName").toLowerCase(),a.tagList)?i=e.eq(0).text():z('The "<'+e.prop("tagName").toLowerCase()+'>" tag is not supported by autoNumeric'),a.decimalPlacesShownOnFocus||a.scaleDivisor)i=a.rawValue;else{var r=L(i);if(!/\d/.test(i)&&"focus"===a.emptyInputBehavior)return"";""!==i&&null!==a.negativeBracketsTypeOnBlur&&(a.hasFocus=!0,i=J(i,a)),(a.runOnce||a.formatOnPageLoad===!1)&&(i=Q(i,a,!0),i=ve(i.replace(a.decimalCharacter,"."),a),a.trailingNegative&&r&&!L(i)&&0!==Number(i)&&(i="-"+i)),(""!==i||""===i&&"zero"===a.emptyInputBehavior)&&(i=ee(i,a))}return pe(i)},getLocalized:function(){var e=ue(this),t=e.autoNumeric("get"),a=e.data("autoNumeric");return 0===Number(t)&&"keep"!==a.leadingZero&&(t="0"),X(t,a.outputFormat)},getNumber:function(){var e=ue(this),t=e.autoNumeric("get");return X(t,"number")},getFormatted:function(){return this.hasOwnProperty("0")&&"value"in this[0]||z("Unable to get the formatted string from the element."),this[0].value},getString:function(){return ye(!1,this)},getArray:function(){return ye(!0,this)},getSettings:function(){return this.data("autoNumeric")}};e.fn.autoNumeric=function(e){if(Ue[e]){for(var t=arguments.length,a=Array(t>1?t-1:0),i=1;i<t;i++)a[i-1]=arguments[i];return Ue[e].apply(this,a)}return"object"!==("undefined"==typeof e?"undefined":c(e))&&e?void z('Method "'+e+'" is not supported by autoNumeric'):Ue.init.apply(this,[e])},m=function(){return f},e.fn.autoNumeric.defaults=f,h=function(){return x},e.fn.autoNumeric.lang=x,u=function(i){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(a(i)||null===i)return null;r(i)||w(i)||z('The value "'+i+'" being "set" is not numeric and therefore cannot be used appropriately.');var o=e.extend({},f,{strip:!1},n);i<0&&(o.negativeSignCharacter="-"),t(o.decimalPlacesOverride)&&(o.decimalPlacesOverride=W(o.minimumValue,o.maximumValue));var l=Ie(i,o);isNaN(l)&&z("The value ["+l+"] that you are trying to format is not a recognized number.");var c=ce(l,o),u=s(c,2),d=u[0],m=u[1];return d&&m||(Ke("autoFormat.autoNumeric",document,"Range test failed"),z("The value ["+l+"] being set falls outside of the minimumValue ["+o.minimumValue+"] and maximumValue ["+o.maximumValue+"] range set for this element")),l=ne(l,o),l=te(l,o),l=ie(l,o)},e.fn.autoFormat=u,d=function(t,i){if(a(t)||null===t)return null;if(w(t))return Number(t);(A(t)||P(t))&&z("A number or a string representing a number is needed to be able to unformat it, ["+t+"] given.");var r=e.extend({},f,{strip:!1},i),n="-0123456789\\"+r.decimalCharacter,o=new RegExp("[^"+n+"]","gi");return t=t.toString(),L(t)?r.negativeSignCharacter="-":r.negativeBracketsTypeOnBlur&&r.negativeBracketsTypeOnBlur.split(",")[0]===t.charAt(0)&&(r.negativeSignCharacter="-",r.hasFocus=!0,t=J(t,r)),t=t.replace(o,""),t=t.replace(r.decimalCharacter,"."),t=X(t,r.outputFormat)},e.fn.autoUnformat=d,g=function(a){var o=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];(i(a)||!P(a)||C(a))&&z("The userOptions are invalid ; it should be a valid object, ["+a+"] given."),t(a)||Me(a);var l=void 0;l=o?e.extend({},f,a):a,b(l.showWarnings)||n(l.showWarnings)||z("The debug option 'showWarnings' is invalid ; it should be either 'false' or 'true', ["+l.showWarnings+"] given.");var s=/^[0-9]+$/,c=/[0-9]+/,u=/^-?[0-9]+(\.?[0-9]+)?$/,d=/^[0-9]+(\.?[0-9]+)?$/;V(l.digitGroupSeparator,[",","."," "," "," "," ","","'","٬","˙"])||z("The thousand separator character option 'digitGroupSeparator' is invalid ; it should be ',', '.', '٬', '˙', \"'\", ' ', ' ', ' ', ' ' or empty (''), ["+l.digitGroupSeparator+"] given."),b(l.noSeparatorOnFocus)||n(l.noSeparatorOnFocus)||z("The 'noSeparatorOnFocus' option is invalid ; it should be either 'false' or 'true', ["+l.noSeparatorOnFocus+"] given."),s.test(l.digitalGroupSpacing)||z("The digital grouping for thousand separator option 'digitalGroupSpacing' is invalid ; it should be a positive integer, ["+l.digitalGroupSpacing+"] given."),V(l.decimalCharacter,[",",".","·","٫","⎖"])||z("The decimal separator character option 'decimalCharacter' is invalid ; it should be '.', ',', '·', '⎖' or '٫', ["+l.decimalCharacter+"] given."),l.decimalCharacter===l.digitGroupSeparator&&z("autoNumeric will not function properly when the decimal character 'decimalCharacter' ["+l.decimalCharacter+"] and the thousand separator 'digitGroupSeparator' ["+l.digitGroupSeparator+"] are the same character."),t(l.decimalCharacterAlternative)||r(l.decimalCharacterAlternative)||z("The alternate decimal separator character option 'decimalCharacterAlternative' is invalid ; it should be a string, ["+l.decimalCharacterAlternative+"] given."),""===l.currencySymbol||r(l.currencySymbol)||z("The currency symbol option 'currencySymbol' is invalid ; it should be a string, ["+l.currencySymbol+"] given."),V(l.currencySymbolPlacement,["p","s"])||z("The placement of the currency sign option 'currencySymbolPlacement' is invalid ; it should either be 'p' (prefix) or 's' (suffix), ["+l.currencySymbolPlacement+"] given."),V(l.negativePositiveSignPlacement,["p","s","l","r",null])||z("The placement of the negative sign option 'negativePositiveSignPlacement' is invalid ; it should either be 'p' (prefix), 's' (suffix), 'l' (left), 'r' (right) or 'null', ["+l.negativePositiveSignPlacement+"] given."),b(l.showPositiveSign)||n(l.showPositiveSign)||z("The show positive sign option 'showPositiveSign' is invalid ; it should be either 'false' or 'true', ["+l.showPositiveSign+"] given."),(!r(l.suffixText)||""!==l.suffixText&&(L(l.suffixText)||c.test(l.suffixText)))&&z("The additional suffix option 'suffixText' is invalid ; it should not contains the negative sign '-' nor any numerical characters, ["+l.suffixText+"] given."),t(l.overrideMinMaxLimits)||V(l.overrideMinMaxLimits,["ceiling","floor","ignore"])||z("The override min & max limits option 'overrideMinMaxLimits' is invalid ; it should either be 'ceiling', 'floor' or 'ignore', ["+l.overrideMinMaxLimits+"] given."),r(l.maximumValue)&&u.test(l.maximumValue)||z("The maximum possible value option 'maximumValue' is invalid ; it should be a string that represents a positive or negative number, ["+l.maximumValue+"] given."),r(l.minimumValue)&&u.test(l.minimumValue)||z("The minimum possible value option 'minimumValue' is invalid ; it should be a string that represents a positive or negative number, ["+l.minimumValue+"] given."),parseFloat(l.minimumValue)>parseFloat(l.maximumValue)&&z("The minimum possible value option is greater than the maximum possible value option ; 'minimumValue' ["+l.minimumValue+"] should be smaller than 'maximumValue' ["+l.maximumValue+"]."),t(l.decimalPlacesOverride)||O(l.decimalPlacesOverride)&&l.decimalPlacesOverride>=0||r(l.decimalPlacesOverride)&&s.test(l.decimalPlacesOverride)||z("The maximum number of decimal places option 'decimalPlacesOverride' is invalid ; it should be a positive integer, ["+l.decimalPlacesOverride+"] given.");var m=W(l.minimumValue,l.maximumValue);t(l.decimalPlacesOverride)||m===Number(l.decimalPlacesOverride)||H("Setting 'decimalPlacesOverride' to ["+l.decimalPlacesOverride+"] will override the decimals declared in 'minimumValue' ["+l.minimumValue+"] and 'maximumValue' ["+l.maximumValue+"].",l.showWarnings),l.allowDecimalPadding||t(l.decimalPlacesOverride)||H("Setting 'allowDecimalPadding' to [false] will override the current 'decimalPlacesOverride' setting ["+l.decimalPlacesOverride+"].",l.showWarnings),t(l.decimalPlacesShownOnFocus)||r(l.decimalPlacesShownOnFocus)&&s.test(l.decimalPlacesShownOnFocus)||z("The number of expanded decimal places option 'decimalPlacesShownOnFocus' is invalid ; it should be a positive integer, ["+l.decimalPlacesShownOnFocus+"] given."),!t(l.decimalPlacesShownOnFocus)&&!t(l.decimalPlacesOverride)&&Number(l.decimalPlacesOverride)>Number(l.decimalPlacesShownOnFocus)&&H("The extended decimal places 'decimalPlacesShownOnFocus' ["+l.decimalPlacesShownOnFocus+"] should be greater than the 'decimalPlacesOverride' ["+l.decimalPlacesOverride+"] value. Currently, this will limit the ability of your client to manually change some of the decimal places. Do you really want to do that?",l.showWarnings),t(l.scaleDivisor)||d.test(l.scaleDivisor)||z("The scale divisor option 'scaleDivisor' is invalid ; it should be a positive number, preferably an integer, ["+l.scaleDivisor+"] given."),t(l.scaleDecimalPlaces)||s.test(l.scaleDecimalPlaces)||z("The scale number of decimals option 'scaleDecimalPlaces' is invalid ; it should be a positive integer, ["+l.scaleDecimalPlaces+"] given."),t(l.scaleSymbol)||r(l.scaleSymbol)||z("The scale symbol option 'scaleSymbol' is invalid ; it should be a string, ["+l.scaleSymbol+"] given."),b(l.saveValueToSessionStorage)||n(l.saveValueToSessionStorage)||z("The save to session storage option 'saveValueToSessionStorage' is invalid ; it should be either 'false' or 'true', ["+l.saveValueToSessionStorage+"] given."),V(l.onInvalidPaste,["error","ignore","clamp","truncate","replace"])||z("The paste behavior option 'onInvalidPaste' is invalid ; it should either be 'error', 'ignore', 'clamp', 'truncate' or 'replace' (cf. documentation), ["+l.onInvalidPaste+"] given."),V(l.roundingMethod,["S","A","s","a","B","U","D","C","F","N05","CHF","U05","D05"])||z("The rounding method option 'roundingMethod' is invalid ; it should either be 'S', 'A', 's', 'a', 'B', 'U', 'D', 'C', 'F', 'N05', 'CHF', 'U05' or 'D05' (cf. documentation), ["+l.roundingMethod+"] given."),b(l.allowDecimalPadding)||n(l.allowDecimalPadding)||z("The control decimal padding option 'allowDecimalPadding' is invalid ; it should be either 'false' or 'true', ["+l.allowDecimalPadding+"] given."),t(l.negativeBracketsTypeOnBlur)||V(l.negativeBracketsTypeOnBlur,["(,)","[,]","<,>","{,}"])||z("The brackets for negative values option 'negativeBracketsTypeOnBlur' is invalid ; it should either be '(,)', '[,]', '<,>' or '{,}', ["+l.negativeBracketsTypeOnBlur+"] given."),V(l.emptyInputBehavior,["focus","press","always","zero"])||z("The display on empty string option 'emptyInputBehavior' is invalid ; it should either be 'focus', 'press', 'always' or 'zero', ["+l.emptyInputBehavior+"] given."),V(l.leadingZero,["allow","deny","keep"])||z("The leading zero behavior option 'leadingZero' is invalid ; it should either be 'allow', 'deny' or 'keep', ["+l.leadingZero+"] given."),b(l.formatOnPageLoad)||n(l.formatOnPageLoad)||z("The format on initialization option 'formatOnPageLoad' is invalid ; it should be either 'false' or 'true', ["+l.formatOnPageLoad+"] given."),b(l.selectNumberOnly)||n(l.selectNumberOnly)||z("The select number only option 'selectNumberOnly' is invalid ; it should be either 'false' or 'true', ["+l.selectNumberOnly+"] given."),t(l.defaultValueOverride)||""===l.defaultValueOverride||u.test(l.defaultValueOverride)||z("The unformatted default value option 'defaultValueOverride' is invalid ; it should be a string that represents a positive or negative number, ["+l.defaultValueOverride+"] given."),b(l.unformatOnSubmit)||n(l.unformatOnSubmit)||z("The remove formatting on submit option 'unformatOnSubmit' is invalid ; it should be either 'false' or 'true', ["+l.unformatOnSubmit+"] given."),t(l.outputFormat)||V(l.outputFormat,["string","number",".","-.",",","-,",".-",",-"])||z("The custom locale format option 'outputFormat' is invalid ; it should either be null, 'string', 'number', '.', '-.', ',', '-,', '.-' or ',-', ["+l.outputFormat+"] given."),b(l.failOnUnknownOption)||n(l.failOnUnknownOption)||z("The debug option 'failOnUnknownOption' is invalid ; it should be either 'false' or 'true', ["+l.failOnUnknownOption+"] given.")},e.fn.autoValidate=g,v=function(e){var t=!0;try{g(e)}catch(e){t=!1}return t},function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),a}return"function"!=typeof window.CustomEvent&&(e.prototype=window.Event.prototype,void(window.CustomEvent=e))}()}),t.default={format:u,unFormat:d,getDefaultConfig:m,getLanguages:h,validate:g,areSettingsValid:v}}).call(window)},function(t,a){t.exports=e}])});
//# sourceMappingURL=autoNumeric.min.js.map;
/*! iFrame Resizer (iframeSizer.min.js ) - v3.6.1 - 2018-04-29
 *  Desc: Force cross domain iframes to size to content.
 *  Requires: iframeResizer.contentWindow.min.js to be loaded into the target frame.
 *  Copyright: (c) 2018 David J. Bradshaw - dave@bradshaw.net
 *  License: MIT
 */

!function(a){"use strict";function b(a,b,c){"addEventListener"in window?a.addEventListener(b,c,!1):"attachEvent"in window&&a.attachEvent("on"+b,c)}function c(a,b,c){"removeEventListener"in window?a.removeEventListener(b,c,!1):"detachEvent"in window&&a.detachEvent("on"+b,c)}function d(){var a,b=["moz","webkit","o","ms"];for(a=0;a<b.length&&!O;a+=1)O=window[b[a]+"RequestAnimationFrame"];O||h("setup","RequestAnimationFrame not supported")}function e(a){var b="Host page: "+a;return window.top!==window.self&&(b=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+": "+a:"Nested host page: "+a),b}function f(a){return L+"["+e(a)+"]"}function g(a){return Q[a]?Q[a].log:H}function h(a,b){k("log",a,b,g(a))}function i(a,b){k("info",a,b,g(a))}function j(a,b){k("warn",a,b,!0)}function k(a,b,c,d){!0===d&&"object"==typeof window.console&&console[a](f(b),c)}function l(a){function d(){function a(){s(U),p(V),I("resizedCallback",U)}f("Height"),f("Width"),t(a,U,"init")}function e(){var a=T.substr(M).split(":");return{iframe:Q[a[0]]&&Q[a[0]].iframe,id:a[0],height:a[1],width:a[2],type:a[3]}}function f(a){var b=Number(Q[V]["max"+a]),c=Number(Q[V]["min"+a]),d=a.toLowerCase(),e=Number(U[d]);h(V,"Checking "+d+" is in range "+c+"-"+b),e<c&&(e=c,h(V,"Set "+d+" to min value")),e>b&&(e=b,h(V,"Set "+d+" to max value")),U[d]=""+e}function g(){function b(){function a(){var a=0,b=!1;for(h(V,"Checking connection is from allowed list of origins: "+d);a<d.length;a++)if(d[a]===c){b=!0;break}return b}function b(){var a=Q[V]&&Q[V].remoteHost;return h(V,"Checking connection is from: "+a),c===a}return d.constructor===Array?a():b()}var c=a.origin,d=Q[V]&&Q[V].checkOrigin;if(d&&""+c!="null"&&!b())throw new Error("Unexpected message received from: "+c+" for "+U.iframe.id+". Message was: "+a.data+". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.");return!0}function k(){return L===(""+T).substr(0,M)&&T.substr(M).split(":")[0]in Q}function l(){var a=U.type in{true:1,false:1,undefined:1};return a&&h(V,"Ignoring init message from meta parent page"),a}function w(a){return T.substr(T.indexOf(":")+K+a)}function x(a){h(V,"MessageCallback passed: {iframe: "+U.iframe.id+", message: "+a+"}"),I("messageCallback",{iframe:U.iframe,message:JSON.parse(a)}),h(V,"--")}function z(){var a=document.body.getBoundingClientRect(),b=U.iframe.getBoundingClientRect();return JSON.stringify({iframeHeight:b.height,iframeWidth:b.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(b.top-a.top,10),offsetLeft:parseInt(b.left-a.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})}function A(a,b){function c(){u("Send Page Info","pageInfo:"+z(),a,b)}y(c,32,b)}function B(){function a(a,b){function c(){Q[f]?A(Q[f].iframe,f):d()}["scroll","resize"].forEach(function(d){h(f,a+d+" listener for sendPageInfo"),b(window,d,c)})}function d(){a("Remove ",c)}function e(){a("Add ",b)}var f=V;e(),Q[f]&&(Q[f].stopPageInfo=d)}function C(){Q[V]&&Q[V].stopPageInfo&&(Q[V].stopPageInfo(),delete Q[V].stopPageInfo)}function D(){var a=!0;return null===U.iframe&&(j(V,"IFrame ("+U.id+") not found"),a=!1),a}function E(a){var b=a.getBoundingClientRect();return o(V),{x:Math.floor(Number(b.left)+Number(N.x)),y:Math.floor(Number(b.top)+Number(N.y))}}function F(a){function b(){N=f,G(),h(V,"--")}function c(){return{x:Number(U.width)+e.x,y:Number(U.height)+e.y}}function d(){window.parentIFrame?window.parentIFrame["scrollTo"+(a?"Offset":"")](f.x,f.y):j(V,"Unable to scroll to requested position, window.parentIFrame not found")}var e=a?E(U.iframe):{x:0,y:0},f=c();h(V,"Reposition requested from iFrame (offset x:"+e.x+" y:"+e.y+")"),window.top!==window.self?d():b()}function G(){!1!==I("scrollCallback",N)?p(V):q()}function H(a){function b(){var a=E(f);h(V,"Moving to in page link (#"+d+") at x: "+a.x+" y: "+a.y),N={x:a.x,y:a.y},G(),h(V,"--")}function c(){window.parentIFrame?window.parentIFrame.moveToAnchor(d):h(V,"In page link #"+d+" not found and window.parentIFrame not found")}var d=a.split("#")[1]||"",e=decodeURIComponent(d),f=document.getElementById(e)||document.getElementsByName(e)[0];f?b():window.top!==window.self?c():h(V,"In page link #"+d+" not found")}function I(a,b){return m(V,a,b)}function J(){switch(Q[V]&&Q[V].firstRun&&R(),U.type){case"close":Q[V].closeRequestCallback?m(V,"closeRequestCallback",Q[V].iframe):n(U.iframe);break;case"message":x(w(6));break;case"scrollTo":F(!1);break;case"scrollToOffset":F(!0);break;case"pageInfo":A(Q[V]&&Q[V].iframe,V),B();break;case"pageInfoStop":C();break;case"inPageLink":H(w(9));break;case"reset":r(U);break;case"init":d(),I("initCallback",U.iframe);break;default:d()}}function O(a){var b=!0;return Q[a]||(b=!1,j(U.type+" No settings for "+a+". Message was: "+T)),b}function P(){for(var a in Q)u("iFrame requested init",v(a),document.getElementById(a),a)}function R(){Q[V]&&(Q[V].firstRun=!1)}var T=a.data,U={},V=null;"[iFrameResizerChild]Ready"===T?P():k()?(U=e(),V=S=U.id,Q[V]&&(Q[V].loaded=!0),!l()&&O(V)&&(h(V,"Received: "+T),D()&&g()&&J())):i(V,"Ignored: "+T)}function m(a,b,c){var d=null,e=null;if(Q[a]){if("function"!=typeof(d=Q[a][b]))throw new TypeError(b+" on iFrame["+a+"] is not a function");e=d(c)}return e}function n(a){var b=a.id;h(b,"Removing iFrame: "+b),a.parentNode&&a.parentNode.removeChild(a),m(b,"closedCallback",b),h(b,"--"),delete Q[b]}function o(b){null===N&&(N={x:window.pageXOffset!==a?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==a?window.pageYOffset:document.documentElement.scrollTop},h(b,"Get page position: "+N.x+","+N.y))}function p(a){null!==N&&(window.scrollTo(N.x,N.y),h(a,"Set page position: "+N.x+","+N.y),q())}function q(){N=null}function r(a){function b(){s(a),u("reset","reset",a.iframe,a.id)}h(a.id,"Size reset requested by "+("init"===a.type?"host page":"iFrame")),o(a.id),t(b,a,"reset")}function s(a){function b(b){a.iframe.style[b]=a[b]+"px",h(a.id,"IFrame ("+e+") "+b+" set to "+a[b]+"px")}function c(b){I||"0"!==a[b]||(I=!0,h(e,"Hidden iFrame detected, creating visibility listener"),z())}function d(a){b(a),c(a)}var e=a.iframe.id;Q[e]&&(Q[e].sizeHeight&&d("height"),Q[e].sizeWidth&&d("width"))}function t(a,b,c){c!==b.type&&O?(h(b.id,"Requesting animation frame"),O(a)):a()}function u(a,b,c,d,e){function f(){var e=Q[d]&&Q[d].targetOrigin;h(d,"["+a+"] Sending msg to iframe["+d+"] ("+b+") targetOrigin: "+e),c.contentWindow.postMessage(L+b,e)}function g(){j(d,"["+a+"] IFrame("+d+") not found")}function i(){c&&"contentWindow"in c&&null!==c.contentWindow?f():g()}function k(){function a(){!Q[d]||Q[d].loaded||l||(l=!0,j(d,"IFrame has not responded within "+Q[d].warningTimeout/1e3+" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ingored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning."))}e&&Q[d]&&Q[d].warningTimeout&&(Q[d].msgTimeout=setTimeout(a,Q[d].warningTimeout))}var l=!1;d=d||c.id,Q[d]&&(i(),k())}function v(a){return a+":"+Q[a].bodyMarginV1+":"+Q[a].sizeWidth+":"+Q[a].log+":"+Q[a].interval+":"+Q[a].enablePublicMethods+":"+Q[a].autoResize+":"+Q[a].bodyMargin+":"+Q[a].heightCalculationMethod+":"+Q[a].bodyBackground+":"+Q[a].bodyPadding+":"+Q[a].tolerance+":"+Q[a].inPageLinks+":"+Q[a].resizeFrom+":"+Q[a].widthCalculationMethod}function w(c,d){function e(){function a(a){1/0!==Q[x][a]&&0!==Q[x][a]&&(c.style[a]=Q[x][a]+"px",h(x,"Set "+a+" = "+Q[x][a]+"px"))}function b(a){if(Q[x]["min"+a]>Q[x]["max"+a])throw new Error("Value for min"+a+" can not be greater than max"+a)}b("Height"),b("Width"),a("maxHeight"),a("minHeight"),a("maxWidth"),a("minWidth")}function f(){var a=d&&d.id||T.id+G++;return null!==document.getElementById(a)&&(a+=G++),a}function g(a){return S=a,""===a&&(c.id=a=f(),H=(d||{}).log,S=a,h(a,"Added missing iframe ID: "+a+" ("+c.src+")")),a}function i(){switch(h(x,"IFrame scrolling "+(Q[x]&&Q[x].scrolling?"enabled":"disabled")+" for "+x),c.style.overflow=!1===(Q[x]&&Q[x].scrolling)?"hidden":"auto",Q[x]&&Q[x].scrolling){case!0:c.scrolling="yes";break;case!1:c.scrolling="no";break;default:c.scrolling=Q[x]?Q[x].scrolling:"no"}}function k(){"number"!=typeof(Q[x]&&Q[x].bodyMargin)&&"0"!==(Q[x]&&Q[x].bodyMargin)||(Q[x].bodyMarginV1=Q[x].bodyMargin,Q[x].bodyMargin=Q[x].bodyMargin+"px")}function l(){var a=Q[x]&&Q[x].firstRun,b=Q[x]&&Q[x].heightCalculationMethod in P;!a&&b&&r({iframe:c,height:0,width:0,type:"init"})}function m(){Function.prototype.bind&&Q[x]&&(Q[x].iframe.iFrameResizer={close:n.bind(null,Q[x].iframe),resize:u.bind(null,"Window resize","resize",Q[x].iframe),moveToAnchor:function(a){u("Move to anchor","moveToAnchor:"+a,Q[x].iframe,x)},sendMessage:function(a){a=JSON.stringify(a),u("Send Message","message:"+a,Q[x].iframe,x)}})}function o(d){function e(){u("iFrame.onload",d,c,a,!0),l()}b(c,"load",e),u("init",d,c,a,!0)}function p(a){if("object"!=typeof a)throw new TypeError("Options is not an object")}function q(a){for(var b in T)T.hasOwnProperty(b)&&(Q[x][b]=a.hasOwnProperty(b)?a[b]:T[b])}function s(a){return""===a||"file://"===a?"*":a}function t(a){a=a||{},Q[x]={firstRun:!0,iframe:c,remoteHost:c.src.split("/").slice(0,3).join("/")},p(a),q(a),Q[x]&&(Q[x].targetOrigin=!0===Q[x].checkOrigin?s(Q[x].remoteHost):"*")}function w(){return x in Q&&"iFrameResizer"in c}var x=g(c.id);w()?j(x,"Ignored iFrame, already setup."):(t(d),i(),e(),k(),o(v(x)),m())}function x(a,b){null===R&&(R=setTimeout(function(){R=null,a()},b))}function y(a,b,c){U[c]||(U[c]=setTimeout(function(){U[c]=null,a()},b))}function z(){function a(){function a(a){function b(b){return"0px"===(Q[a]&&Q[a].iframe.style[b])}function c(a){return null!==a.offsetParent}Q[a]&&c(Q[a].iframe)&&(b("height")||b("width"))&&u("Visibility change","resize",Q[a].iframe,a)}for(var b in Q)a(b)}function b(b){h("window","Mutation observed: "+b[0].target+" "+b[0].type),x(a,16)}function c(){var a=document.querySelector("body"),c={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};new d(b).observe(a,c)}var d=window.MutationObserver||window.WebKitMutationObserver;d&&c()}function A(a){function b(){C("Window "+a,"resize")}h("window","Trigger event: "+a),x(b,16)}function B(){function a(){C("Tab Visable","resize")}"hidden"!==document.visibilityState&&(h("document","Trigger event: Visiblity change"),x(a,16))}function C(a,b){function c(a){return Q[a]&&"parent"===Q[a].resizeFrom&&Q[a].autoResize&&!Q[a].firstRun}for(var d in Q)c(d)&&u(a,b,document.getElementById(d),d)}function D(){b(window,"message",l),b(window,"resize",function(){A("resize")}),b(document,"visibilitychange",B),b(document,"-webkit-visibilitychange",B),b(window,"focusin",function(){A("focus")}),b(window,"focus",function(){A("focus")})}function E(){function b(a,b){function c(){if(!b.tagName)throw new TypeError("Object is not a valid DOM element");if("IFRAME"!==b.tagName.toUpperCase())throw new TypeError("Expected <IFRAME> tag, found <"+b.tagName+">")}b&&(c(),w(b,a),e.push(b))}function c(a){a&&a.enablePublicMethods&&j("enablePublicMethods option has been removed, public methods are now always available in the iFrame")}var e;return d(),D(),function(d,f){switch(e=[],c(d),typeof f){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(f||"iframe"),b.bind(a,d));break;case"object":b(d,f);break;default:throw new TypeError("Unexpected data type ("+typeof f+")")}return e}}function F(a){a.fn?a.fn.iFrameResize||(a.fn.iFrameResize=function(a){function b(b,c){w(c,a)}return this.filter("iframe").each(b).end()}):i("","Unable to bind to jQuery, it is not fully loaded.")}if("undefined"!=typeof window){var G=0,H=!1,I=!1,J="message",K=J.length,L="[iFrameSizer]",M=L.length,N=null,O=window.requestAnimationFrame,P={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},Q={},R=null,S="Host Page",T={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:"bodyOffset",id:"iFrameResizer",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:"parent",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:"scroll",closedCallback:function(){},initCallback:function(){},messageCallback:function(){j("MessageCallback function not defined")},resizedCallback:function(){},scrollCallback:function(){return!0}},U={};window.jQuery&&F(window.jQuery),"function"==typeof define&&define.amd?define([],E):"object"==typeof module&&"object"==typeof module.exports?module.exports=E():window.iFrameResize=window.iFrameResize||E()}}();
//# sourceMappingURL=iframeResizer.map;
/*! Selectric ϟ v1.13.0 (2017-08-22) - git.io/tjl9sQ - Copyright (c) 2017 Leonardo Santos - MIT License */
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(t,s){return void 0===s&&(s="undefined"!=typeof window?require("jquery"):require("jquery")(t)),e(s),s}:e(jQuery)}(function(e){"use strict";var t=e(document),s=e(window),l=["a","e","i","o","u","n","c","y"],i=[/[\xE0-\xE5]/g,/[\xE8-\xEB]/g,/[\xEC-\xEF]/g,/[\xF2-\xF6]/g,/[\xF9-\xFC]/g,/[\xF1]/g,/[\xE7]/g,/[\xFD-\xFF]/g],n=function(t,s){var l=this;l.element=t,l.$element=e(t),l.state={multiple:!!l.$element.attr("multiple"),enabled:!1,opened:!1,currValue:-1,selectedIdx:-1,highlightedIdx:-1},l.eventTriggers={open:l.open,close:l.close,destroy:l.destroy,refresh:l.refresh,init:l.init},l.init(s)};n.prototype={utils:{isMobile:function(){return/android|ip(hone|od|ad)/i.test(navigator.userAgent)},escapeRegExp:function(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},replaceDiacritics:function(e){for(var t=i.length;t--;)e=e.toLowerCase().replace(i[t],l[t]);return e},format:function(e){var t=arguments;return(""+e).replace(/\{(?:(\d+)|(\w+))\}/g,function(e,s,l){return l&&t[1]?t[1][l]:t[s]})},nextEnabledItem:function(e,t){for(;e[t=(t+1)%e.length].disabled;);return t},previousEnabledItem:function(e,t){for(;e[t=(t>0?t:e.length)-1].disabled;);return t},toDash:function(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()},triggerCallback:function(t,s){var l=s.element,i=s.options["on"+t],n=[l].concat([].slice.call(arguments).slice(1));e.isFunction(i)&&i.apply(l,n),e(l).trigger("selectric-"+this.toDash(t),n)},arrayToClassname:function(t){var s=e.grep(t,function(e){return!!e});return e.trim(s.join(" "))}},init:function(t){var s=this;if(s.options=e.extend(!0,{},e.fn.selectric.defaults,s.options,t),s.utils.triggerCallback("BeforeInit",s),s.destroy(!0),s.options.disableOnMobile&&s.utils.isMobile())return void(s.disableOnMobile=!0);s.classes=s.getClassNames();var l=e("<input/>",{class:s.classes.input,readonly:s.utils.isMobile()}),i=e("<div/>",{class:s.classes.items,tabindex:-1}),n=e("<div/>",{class:s.classes.scroll}),a=e("<div/>",{class:s.classes.prefix,html:s.options.arrowButtonMarkup}),o=e("<span/>",{class:"label"}),r=s.$element.wrap("<div/>").parent().append(a.prepend(o),i,l),u=e("<div/>",{class:s.classes.hideselect});s.elements={input:l,items:i,itemsScroll:n,wrapper:a,label:o,outerWrapper:r},s.options.nativeOnMobile&&s.utils.isMobile()&&(s.elements.input=void 0,u.addClass(s.classes.prefix+"-is-native"),s.$element.on("change",function(){s.refresh()})),s.$element.on(s.eventTriggers).wrap(u),s.originalTabindex=s.$element.prop("tabindex"),s.$element.prop("tabindex",-1),s.populate(),s.activate(),s.utils.triggerCallback("Init",s)},activate:function(){var e=this,t=e.elements.items.closest(":visible").children(":hidden").addClass(e.classes.tempshow),s=e.$element.width();t.removeClass(e.classes.tempshow),e.utils.triggerCallback("BeforeActivate",e),e.elements.outerWrapper.prop("class",e.utils.arrayToClassname([e.classes.wrapper,e.$element.prop("class").replace(/\S+/g,e.classes.prefix+"-$&"),e.options.responsive?e.classes.responsive:""])),e.options.inheritOriginalWidth&&s>0&&e.elements.outerWrapper.width(s),e.unbindEvents(),e.$element.prop("disabled")?(e.elements.outerWrapper.addClass(e.classes.disabled),e.elements.input&&e.elements.input.prop("disabled",!0)):(e.state.enabled=!0,e.elements.outerWrapper.removeClass(e.classes.disabled),e.$li=e.elements.items.removeAttr("style").find("li"),e.bindEvents()),e.utils.triggerCallback("Activate",e)},getClassNames:function(){var t=this,s=t.options.customClass,l={};return e.each("Input Items Open Disabled TempShow HideSelect Wrapper Focus Hover Responsive Above Below Scroll Group GroupLabel".split(" "),function(e,i){var n=s.prefix+i;l[i.toLowerCase()]=s.camelCase?n:t.utils.toDash(n)}),l.prefix=s.prefix,l},setLabel:function(){var t=this,s=t.options.labelBuilder;if(t.state.multiple){var l=e.isArray(t.state.currValue)?t.state.currValue:[t.state.currValue];l=0===l.length?[0]:l;var i=e.map(l,function(s){return e.grep(t.lookupItems,function(e){return e.index===s})[0]});i=e.grep(i,function(t){return i.length>1||0===i.length?""!==e.trim(t.value):t}),i=e.map(i,function(l){return e.isFunction(s)?s(l):t.utils.format(s,l)}),t.options.multiple.maxLabelEntries&&(i.length>=t.options.multiple.maxLabelEntries+1?(i=i.slice(0,t.options.multiple.maxLabelEntries),i.push(e.isFunction(s)?s({text:"..."}):t.utils.format(s,{text:"..."}))):i.slice(i.length-1)),t.elements.label.html(i.join(t.options.multiple.separator))}else{var n=t.lookupItems[t.state.currValue];t.elements.label.html(e.isFunction(s)?s(n):t.utils.format(s,n))}},populate:function(){var t=this,s=t.$element.children(),l=t.$element.find("option"),i=l.filter(":selected"),n=l.index(i),a=0,o=t.state.multiple?[]:0;i.length>1&&t.state.multiple&&(n=[],i.each(function(){n.push(e(this).index())})),t.state.currValue=~n?n:o,t.state.selectedIdx=t.state.currValue,t.state.highlightedIdx=t.state.currValue,t.items=[],t.lookupItems=[],s.length&&(s.each(function(s){var l=e(this);if(l.is("optgroup")){var i={element:l,label:l.prop("label"),groupDisabled:l.prop("disabled"),items:[]};l.children().each(function(s){var l=e(this);i.items[s]=t.getItemData(a,l,i.groupDisabled||l.prop("disabled")),t.lookupItems[a]=i.items[s],a++}),t.items[s]=i}else t.items[s]=t.getItemData(a,l,l.prop("disabled")),t.lookupItems[a]=t.items[s],a++}),t.setLabel(),t.elements.items.append(t.elements.itemsScroll.html(t.getItemsMarkup(t.items))))},getItemData:function(t,s,l){var i=this;return{index:t,element:s,value:s.val(),className:s.prop("class"),text:s.html(),slug:e.trim(i.utils.replaceDiacritics(s.html())),alt:s.attr("data-alt"),selected:s.prop("selected"),disabled:l}},getItemsMarkup:function(t){var s=this,l="<ul>";return e.isFunction(s.options.listBuilder)&&s.options.listBuilder&&(t=s.options.listBuilder(t)),e.each(t,function(t,i){void 0!==i.label?(l+=s.utils.format('<ul class="{1}"><li class="{2}">{3}</li>',s.utils.arrayToClassname([s.classes.group,i.groupDisabled?"disabled":"",i.element.prop("class")]),s.classes.grouplabel,i.element.prop("label")),e.each(i.items,function(e,t){l+=s.getItemMarkup(t.index,t)}),l+="</ul>"):l+=s.getItemMarkup(i.index,i)}),l+"</ul>"},getItemMarkup:function(t,s){var l=this,i=l.options.optionsItemBuilder,n={value:s.value,text:s.text,slug:s.slug,index:s.index};return l.utils.format('<li data-index="{1}" class="{2}">{3}</li>',t,l.utils.arrayToClassname([s.className,t===l.items.length-1?"last":"",s.disabled?"disabled":"",s.selected?"selected":""]),e.isFunction(i)?l.utils.format(i(s,this.$element,t),s):l.utils.format(i,n))},unbindEvents:function(){var e=this;e.elements.wrapper.add(e.$element).add(e.elements.outerWrapper).add(e.elements.input).off(".sl")},bindEvents:function(){var t=this;t.elements.outerWrapper.on("mouseenter.sl mouseleave.sl",function(s){e(this).toggleClass(t.classes.hover,"mouseenter"===s.type),t.options.openOnHover&&(clearTimeout(t.closeTimer),"mouseleave"===s.type?t.closeTimer=setTimeout(e.proxy(t.close,t),t.options.hoverIntentTimeout):t.open())}),t.elements.wrapper.on("click.sl",function(e){t.state.opened?t.close():t.open(e)}),t.options.nativeOnMobile&&t.utils.isMobile()||(t.$element.on("focus.sl",function(){t.elements.input.focus()}),t.elements.input.prop({tabindex:t.originalTabindex,disabled:!1}).on("keydown.sl",e.proxy(t.handleKeys,t)).on("focusin.sl",function(e){t.elements.outerWrapper.addClass(t.classes.focus),t.elements.input.one("blur",function(){t.elements.input.blur()}),t.options.openOnFocus&&!t.state.opened&&t.open(e)}).on("focusout.sl",function(){t.elements.outerWrapper.removeClass(t.classes.focus)}).on("input propertychange",function(){var s=t.elements.input.val(),l=new RegExp("^"+t.utils.escapeRegExp(s),"i");clearTimeout(t.resetStr),t.resetStr=setTimeout(function(){t.elements.input.val("")},t.options.keySearchTimeout),s.length&&e.each(t.items,function(e,s){if(!s.disabled){if(l.test(s.text)||l.test(s.slug))return void t.highlight(e);if(s.alt)for(var i=s.alt.split("|"),n=0;n<i.length&&i[n];n++)if(l.test(i[n].trim()))return void t.highlight(e)}})})),t.$li.on({mousedown:function(e){e.preventDefault(),e.stopPropagation()},click:function(){return t.select(e(this).data("index")),!1}})},handleKeys:function(t){var s=this,l=t.which,i=s.options.keys,n=e.inArray(l,i.previous)>-1,a=e.inArray(l,i.next)>-1,o=e.inArray(l,i.select)>-1,r=e.inArray(l,i.open)>-1,u=s.state.highlightedIdx,p=n&&0===u||a&&u+1===s.items.length,c=0;if(13!==l&&32!==l||t.preventDefault(),n||a){if(!s.options.allowWrap&&p)return;n&&(c=s.utils.previousEnabledItem(s.lookupItems,u)),a&&(c=s.utils.nextEnabledItem(s.lookupItems,u)),s.highlight(c)}if(o&&s.state.opened)return s.select(u),void(s.state.multiple&&s.options.multiple.keepMenuOpen||s.close());r&&!s.state.opened&&s.open()},refresh:function(){var e=this;e.populate(),e.activate(),e.utils.triggerCallback("Refresh",e)},setOptionsDimensions:function(){var e=this,t=e.elements.items.closest(":visible").children(":hidden").addClass(e.classes.tempshow),s=e.options.maxHeight,l=e.elements.items.outerWidth(),i=e.elements.wrapper.outerWidth()-(l-e.elements.items.width());!e.options.expandToItemText||i>l?e.finalWidth=i:(e.elements.items.css("overflow","scroll"),e.elements.outerWrapper.width(9e4),e.finalWidth=e.elements.items.width(),e.elements.items.css("overflow",""),e.elements.outerWrapper.width("")),e.elements.items.width(e.finalWidth).height()>s&&e.elements.items.height(s),t.removeClass(e.classes.tempshow)},isInViewport:function(){var e=this;if(!0===e.options.forceRenderAbove)e.elements.outerWrapper.addClass(e.classes.above);else if(!0===e.options.forceRenderBelow)e.elements.outerWrapper.addClass(e.classes.below);else{var t=s.scrollTop(),l=s.height(),i=e.elements.outerWrapper.offset().top,n=e.elements.outerWrapper.outerHeight(),a=i+n+e.itemsHeight<=t+l,o=i-e.itemsHeight>t,r=!a&&o,u=!r;e.elements.outerWrapper.toggleClass(e.classes.above,r),e.elements.outerWrapper.toggleClass(e.classes.below,u)}},detectItemVisibility:function(t){var s=this,l=s.$li.filter("[data-index]");s.state.multiple&&(t=e.isArray(t)&&0===t.length?0:t,t=e.isArray(t)?Math.min.apply(Math,t):t);var i=l.eq(t).outerHeight(),n=l[t].offsetTop,a=s.elements.itemsScroll.scrollTop(),o=n+2*i;s.elements.itemsScroll.scrollTop(o>a+s.itemsHeight?o-s.itemsHeight:n-i<a?n-i:a)},open:function(s){var l=this;if(l.options.nativeOnMobile&&l.utils.isMobile())return!1;l.utils.triggerCallback("BeforeOpen",l),s&&(s.preventDefault(),l.options.stopPropagation&&s.stopPropagation()),l.state.enabled&&(l.setOptionsDimensions(),e("."+l.classes.hideselect,"."+l.classes.open).children().selectric("close"),l.state.opened=!0,l.itemsHeight=l.elements.items.outerHeight(),l.itemsInnerHeight=l.elements.items.height(),l.elements.outerWrapper.addClass(l.classes.open),l.elements.input.val(""),s&&"focusin"!==s.type&&l.elements.input.focus(),setTimeout(function(){t.on("click.sl",e.proxy(l.close,l)).on("scroll.sl",e.proxy(l.isInViewport,l))},1),l.isInViewport(),l.options.preventWindowScroll&&t.on("mousewheel.sl DOMMouseScroll.sl","."+l.classes.scroll,function(t){var s=t.originalEvent,i=e(this).scrollTop(),n=0;"detail"in s&&(n=-1*s.detail),"wheelDelta"in s&&(n=s.wheelDelta),"wheelDeltaY"in s&&(n=s.wheelDeltaY),"deltaY"in s&&(n=-1*s.deltaY),(i===this.scrollHeight-l.itemsInnerHeight&&n<0||0===i&&n>0)&&t.preventDefault()}),l.detectItemVisibility(l.state.selectedIdx),l.highlight(l.state.multiple?-1:l.state.selectedIdx),l.utils.triggerCallback("Open",l))},close:function(){var e=this;e.utils.triggerCallback("BeforeClose",e),t.off(".sl"),e.elements.outerWrapper.removeClass(e.classes.open),e.state.opened=!1,e.utils.triggerCallback("Close",e)},change:function(){var t=this;t.utils.triggerCallback("BeforeChange",t),t.state.multiple?(e.each(t.lookupItems,function(e){t.lookupItems[e].selected=!1,t.$element.find("option").prop("selected",!1)}),e.each(t.state.selectedIdx,function(e,s){t.lookupItems[s].selected=!0,t.$element.find("option").eq(s).prop("selected",!0)}),t.state.currValue=t.state.selectedIdx,t.setLabel(),t.utils.triggerCallback("Change",t)):t.state.currValue!==t.state.selectedIdx&&(t.$element.prop("selectedIndex",t.state.currValue=t.state.selectedIdx).data("value",t.lookupItems[t.state.selectedIdx].text),t.setLabel(),t.utils.triggerCallback("Change",t))},highlight:function(e){var t=this,s=t.$li.filter("[data-index]").removeClass("highlighted");t.utils.triggerCallback("BeforeHighlight",t),void 0===e||-1===e||t.lookupItems[e].disabled||(s.eq(t.state.highlightedIdx=e).addClass("highlighted"),t.detectItemVisibility(e),t.utils.triggerCallback("Highlight",t))},select:function(t){var s=this,l=s.$li.filter("[data-index]");if(s.utils.triggerCallback("BeforeSelect",s,t),void 0!==t&&-1!==t&&!s.lookupItems[t].disabled){if(s.state.multiple){s.state.selectedIdx=e.isArray(s.state.selectedIdx)?s.state.selectedIdx:[s.state.selectedIdx];var i=e.inArray(t,s.state.selectedIdx);-1!==i?s.state.selectedIdx.splice(i,1):s.state.selectedIdx.push(t),l.removeClass("selected").filter(function(t){return-1!==e.inArray(t,s.state.selectedIdx)}).addClass("selected")}else l.removeClass("selected").eq(s.state.selectedIdx=t).addClass("selected");s.state.multiple&&s.options.multiple.keepMenuOpen||s.close(),s.change(),s.utils.triggerCallback("Select",s,t)}},destroy:function(e){var t=this;t.state&&t.state.enabled&&(t.elements.items.add(t.elements.wrapper).add(t.elements.input).remove(),e||t.$element.removeData("selectric").removeData("value"),t.$element.prop("tabindex",t.originalTabindex).off(".sl").off(t.eventTriggers).unwrap().unwrap(),t.state.enabled=!1)}},e.fn.selectric=function(t){return this.each(function(){var s=e.data(this,"selectric");s&&!s.disableOnMobile?"string"==typeof t&&s[t]?s[t]():s.init(t):e.data(this,"selectric",new n(this,t))})},e.fn.selectric.defaults={onChange:function(t){e(t).change()},maxHeight:300,keySearchTimeout:500,arrowButtonMarkup:'<b class="button">&#x25be;</b>',disableOnMobile:!1,nativeOnMobile:!0,openOnFocus:!0,openOnHover:!1,hoverIntentTimeout:500,expandToItemText:!1,responsive:!1,preventWindowScroll:!0,inheritOriginalWidth:!1,allowWrap:!0,forceRenderAbove:!1,forceRenderBelow:!1,stopPropagation:!0,optionsItemBuilder:"{text}",labelBuilder:"{text}",listBuilder:!1,keys:{previous:[37,38],next:[39,40],select:[9,13,27],open:[13,32,37,38,39,40],close:[9,27]},customClass:{prefix:"selectric",camelCase:!1},multiple:{separator:", ",keepMenuOpen:!0,maxLabelEntries:!1}}});;
/*!
 * JavaScript Cookie v2.2.0
 * https://github.com/js-cookie/js-cookie
 *
 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
 * Released under the MIT license
 */
; (function (factory) {
	var registeredInModuleLoader = false;
	if (typeof define === 'function' && define.amd) {
		define(factory);
		registeredInModuleLoader = true;
	}
	if (typeof exports === 'object') {
		module.exports = factory();
		registeredInModuleLoader = true;
	}
	if (!registeredInModuleLoader) {
		var OldCookies = window.Cookies;
		var api = window.Cookies = factory();
		api.noConflict = function () {
			window.Cookies = OldCookies;
			return api;
		};
	}
}(function () {
	function extend() {
		var i = 0;
		var result = {};
		for (; i < arguments.length; i++) {
			var attributes = arguments[i];
			for (var key in attributes) {
				result[key] = attributes[key];
			}
		}
		return result;
	}

	function init(converter) {
		function api(key, value, attributes) {
			var result;
			if (typeof document === 'undefined') {
				return;
			}

			// Write

			if (arguments.length > 1) {
				attributes = extend({
					path: '/'
				}, api.defaults, attributes);

				if (typeof attributes.expires === 'number') {
					var expires = new Date();
					expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);
					attributes.expires = expires;
				}

				// We're using "expires" because "max-age" is not supported by IE
				attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';

				try {
					result = JSON.stringify(value);
					if (/^[\{\[]/.test(result)) {
						value = result;
					}
				} catch (e) { }

				if (!converter.write) {
					value = encodeURIComponent(String(value))
						.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
				} else {
					value = converter.write(value, key);
				}

				key = encodeURIComponent(String(key));
				key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);
				key = key.replace(/[\(\)]/g, escape);

				var stringifiedAttributes = '';

				for (var attributeName in attributes) {
					if (!attributes[attributeName]) {
						continue;
					}
					stringifiedAttributes += '; ' + attributeName;
					if (attributes[attributeName] === true) {
						continue;
					}
					stringifiedAttributes += '=' + attributes[attributeName];
				}
				return (document.cookie = key + '=' + value + stringifiedAttributes);
			}

			// Read

			if (!key) {
				result = {};
			}

			// 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 "get()"
			var cookies = document.cookie ? document.cookie.split('; ') : [];
			var rdecode = /(%[0-9A-Z]{2})+/g;
			var i = 0;

			for (; i < cookies.length; i++) {
				var parts = cookies[i].split('=');
				var cookie = parts.slice(1).join('=');

				if (!this.json && cookie.charAt(0) === '"') {
					cookie = cookie.slice(1, -1);
				}

				try {
					var name = parts[0].replace(rdecode, decodeURIComponent);
					cookie = converter.read ?
						converter.read(cookie, name) : converter(cookie, name) ||
						cookie.replace(rdecode, decodeURIComponent);

					if (this.json) {
						try {
							cookie = JSON.parse(cookie);
						} catch (e) { }
					}

					if (key === name) {
						result = cookie;
						break;
					}

					if (!key) {
						result[name] = cookie;
					}
				} catch (e) { }
			}

			return result;
		}

		api.set = api;
		api.get = function (key) {
			return api.call(api, key);
		};
		api.getJSON = function () {
			return api.apply({
				json: true
			}, [].slice.call(arguments));
		};
		api.defaults = {};

		api.remove = function (key, attributes) {
			api(key, '', extend(attributes, {
				expires: -1
			}));
		};

		api.withConverter = init;

		return api;
	}

	return init(function () { });
}));;
(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 lineHasNonSpace=false;var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;var indentation="";var tagIndex=0;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);indentation+=chr}else{nonSpace=true;lineHasNonSpace=true;indentation+=" "}tokens.push(["text",chr,start,start+1]);start+=1;if(chr==="\n"){stripSpace();indentation="";tagIndex=0;lineHasNonSpace=false}}}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);if(type==">"){token=[type,value,start,scanner.pos,indentation,tagIndex,lineHasNonSpace]}else{token=[type,value,start,scanner.pos]}tagIndex++;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)}}stripSpace();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.indentPartial=function indentPartial(partial,indentation,lineHasNonSpace){var filteredIndentation=indentation.replace(/[^ \t]/g,"");var partialByNl=partial.split("\n");for(var i=0;i<partialByNl.length;i++){if(partialByNl[i].length&&(i>0||!lineHasNonSpace)){partialByNl[i]=filteredIndentation+partialByNl[i]}}return partialByNl.join("\n")};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){var lineHasNonSpace=token[6];var tagIndex=token[5];var indentation=token[4];var indentedValue=value;if(tagIndex==0&&indentation){indentedValue=this.indentPartial(value,indentation,lineHasNonSpace)}return this.renderTokens(this.parse(indentedValue,tags),context,partials,indentedValue)}};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.1.0";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});
;
//download.js v4.21, by dandavis; 2008-2018. [MIT] see http://danml.com/download.html for tests/usage
;(function(root,factory){typeof define=="function"&&define.amd?define([],factory):typeof exports=="object"?module.exports=factory():root.download=factory()})(this,function(){return function download(data,strFileName,strMimeType){var self=window,defaultMime="application/octet-stream",mimeType=strMimeType||defaultMime,payload=data,url=!strFileName&&!strMimeType&&payload,anchor=document.createElement("a"),toString=function(a){return String(a)},myBlob=self.Blob||self.MozBlob||self.WebKitBlob||toString,fileName=strFileName||"download",blob,reader;myBlob=myBlob.call?myBlob.bind(self):Blob,String(this)==="true"&&(payload=[payload,mimeType],mimeType=payload[0],payload=payload[1]);if(url&&url.length<2048){fileName=url.split("/").pop().split("?")[0],anchor.href=url;if(anchor.href.indexOf(url)!==-1){var ajax=new XMLHttpRequest;return ajax.open("GET",url,!0),ajax.responseType="blob",ajax.onload=function(e){download(e.target.response,fileName,defaultMime)},setTimeout(function(){ajax.send()},0),ajax}}if(/^data:([\w+-]+\/[\w+.-]+)?[,;]/.test(payload)){if(!(payload.length>2096103.424&&myBlob!==toString))return navigator.msSaveBlob?navigator.msSaveBlob(dataUrlToBlob(payload),fileName):saver(payload);payload=dataUrlToBlob(payload),mimeType=payload.type||defaultMime}else if(/([\x80-\xff])/.test(payload)){var i=0,tempUiArr=new Uint8Array(payload.length),mx=tempUiArr.length;for(i;i<mx;++i)tempUiArr[i]=payload.charCodeAt(i);payload=new myBlob([tempUiArr],{type:mimeType})}blob=payload instanceof myBlob?payload:new myBlob([payload],{type:mimeType});function dataUrlToBlob(strUrl){var parts=strUrl.split(/[:;,]/),type=parts[1],indexDecoder=strUrl.indexOf("charset")>0?3:2,decoder=parts[indexDecoder]=="base64"?atob:decodeURIComponent,binData=decoder(parts.pop()),mx=binData.length,i=0,uiArr=new Uint8Array(mx);for(i;i<mx;++i)uiArr[i]=binData.charCodeAt(i);return new myBlob([uiArr],{type:type})}function saver(url,winMode){if("download"in anchor)return anchor.href=url,anchor.setAttribute("download",fileName),anchor.className="download-js-link",anchor.innerHTML="downloading...",anchor.style.display="none",anchor.addEventListener("click",function(e){e.stopPropagation(),this.removeEventListener("click",arguments.callee)}),document.body.appendChild(anchor),setTimeout(function(){anchor.click(),document.body.removeChild(anchor),winMode===!0&&setTimeout(function(){self.URL.revokeObjectURL(anchor.href)},250)},66),!0;if(/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent))return/^data:/.test(url)&&(url="data:"+url.replace(/^data:([\w\/\-\+]+)/,defaultMime)),window.open(url)||confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")&&(location.href=url),!0;var f=document.createElement("iframe");document.body.appendChild(f),!winMode&&/^data:/.test(url)&&(url="data:"+url.replace(/^data:([\w\/\-\+]+)/,defaultMime)),f.src=url,setTimeout(function(){document.body.removeChild(f)},333)}if(navigator.msSaveBlob)return navigator.msSaveBlob(blob,fileName);if(self.URL)saver(self.URL.createObjectURL(blob),!0);else{if(typeof blob=="string"||blob.constructor===toString)try{return saver("data:"+mimeType+";base64,"+self.btoa(blob))}catch(y){return saver("data:"+mimeType+","+encodeURIComponent(blob))}reader=new FileReader,reader.onload=function(e){saver(this.result)},reader.readAsDataURL(blob)}return!0}});;
/*! YU2FVL - jQuery Youtube Url To FullScreen Video Lightbox - v0.1.0 - 2016-02-07
* http://otakod.es/yu2fvl
* Copyright (c) 2016 darkylmnx; Licensed MIT */
!function(e,t,s){function n(e){var t=/(youtube\.com\/(watch\?v=|v\/|embed\/)|youtu\.be\/)([\w-]+)/.exec(e),s=/[?&#]t=(\d+)/.exec(e);return!(!t||!t[3])&&{id:t[3],t:s&&s[1]}}function i(e,t,s){var n=JSON.stringify({event:"command",func:t,args:s||[]});e.src.indexOf("youtube.com/embed")!==-1&&e.contentWindow.postMessage(n,"*")}function a(t,n,a,h){function p(){var e=o.width()-t.minPaddingX,s=o.height()-t.minPaddingY,n=e/s,i=t.ratio;n>i?(y.height(s),y.width(s*i)):(y.width(e),y.height(e/i)),y.css("left",(o.width()-y.width())/2),y.css("top",(o.height()-y.height())/2)}function v(){i(E[0],"playVideo"),m()}function m(){b.stop().fadeIn("fast"),y.stop().fadeIn("fast")}function C(){b.stop().fadeOut("fast"),y.stop().fadeOut("fast",function(){null===n&&t.open&&(b.remove(),y.remove())})}function g(e){e.on("click",function(e){e.preventDefault(),v()})}function w(e){e.on("click",function(e){e.preventDefault(),i(E[0],"pauseVideo"),C()})}var y=e(s.createElement("DIV")).addClass(t.cssClass).css(f),b=e(s.createElement("DIV")).addClass(t.cssClass+t.overlayCssClass).css(u),x=e(s.createElement("BUTTON")).addClass(t.cssClass+t.closeCssClass).html(t.closeText),E=e(s.createElement("IFRAME")).addClass(t.cssClass+t.iframeCssClass).attr({src:d+a+c+h+l}).css(r);y.append(E).append(x),e("body").append(b).append(y),t.open&&E.on("load",function(){v()}),null!==n&&g(n),w(x.add(b)),o.on("resize",p).trigger("resize")}var o=e(t),d="https://www.youtube.com/embed/",c="?rel=0&start=",l="&enablejsapi=1",f={display:"none",position:"fixed"},r={width:"100%",height:"100%"},u={display:"none",position:"fixed",top:0,left:0,width:"100%",height:"100%"},h={minPaddingX:50,minPaddingY:50,ratio:16/9,cssClass:"yu2fvl",overlayCssClass:"-overlay",iframeCssClass:"-iframe",closeCssClass:"-close",closeText:"X",open:!1,vid:!1,t:0};e.yu2fvl=function(t){var s=e.extend({},h,t);if(s.vid===!1)throw"YOU MUST SET THE 'vid' option";a(s,null,s.vid,s.t)},e.fn.yu2fvl=function(t){function s(){var t=e(this),s=n(t.attr("href"));a(i,t,s.id,s.t)}var i=e.extend({},h,t);return i.vid!==!1?(a(i,this,i.vid,i.t),this):this.each(s)}}(jQuery,window,document);;
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
        typeof define === 'function' && define.amd ? define(['exports'], factory) :
            (factory((global.SpriteSpin = {})));
}(this, (function (exports) {
    'use strict';

    /**
     * @internal
     */
    var Api = /** @class */ (function () {
        function Api(data) {
            this.data = data;
        }
        return Api;
    }());
    /**
     * Adds methods to the SpriteSpin api
     *
     * @public
     */
    function extendApi(methods) {
        var api = Api.prototype;
        for (var key in methods) {
            if (methods.hasOwnProperty(key)) {
                if (api[key]) {
                    throw new Error('API method is already defined: ' + key);
                }
                else {
                    api[key] = methods[key];
                }
            }
        }
        return api;
    }

    var $$1 = window.jQuery || window.$;

    function getCursorPosition(event) {
        var touches = event.touches;
        var source = event;
        // jQuery Event normalization does not preserve the 'event.touches'
        // try to grab touches from the original event
        if (event.touches === undefined && event.originalEvent !== undefined) {
            touches = event.originalEvent.touches;
        }
        // get current touch or mouse position
        if (touches !== undefined && touches.length > 0) {
            source = touches[0];
        }
        return {
            x: source.clientX || 0,
            y: source.clientY || 0
        };
    }

    var canvas;
    var context;
    function detectionContext() {
        if (context) {
            return context;
        }
        if (!canvas) {
            canvas = document.createElement('canvas');
        }
        if (!canvas || !canvas.getContext) {
            return null;
        }
        context = canvas.getContext('2d');
        return context;
    }
    /**
     * Idea taken from https://github.com/stomita/ios-imagefile-megapixel
     * Detects whether the image has been sub sampled by the browser and does not have its original dimensions.
     * This method unfortunately does not work for images that have transparent background.
     */
    function detectSubsampling(img, width, height) {
        if (!detectionContext()) {
            return false;
        }
        // sub sampling happens on images above 1 megapixel
        if (width * height <= 1024 * 1024) {
            return false;
        }
        // set canvas to 1x1 pixel size and fill it with magenta color
        canvas.width = canvas.height = 1;
        context.fillStyle = '#FF00FF';
        context.fillRect(0, 0, 1, 1);
        // render the image with a negative offset to the left so that it would
        // fill the canvas pixel with the top right pixel of the image.
        context.drawImage(img, -width + 1, 0);
        // check color value to confirm image is covering edge pixel or not.
        // if color still magenta, the image is assumed to be sub sampled.
        try {
            var dat = context.getImageData(0, 0, 1, 1).data;
            return (dat[0] === 255) && (dat[1] === 0) && (dat[2] === 255);
        }
        catch (err) {
            // avoids cross origin exception for chrome when code runs without a server
            return false;
        }
    }

    /**
     *
     */
    function getOuterSize(data) {
        var width = Math.floor(data.width || data.frameWidth || data.target.innerWidth());
        var height = Math.floor(data.height || data.frameHeight || data.target.innerHeight());
        return {
            aspect: width / height,
            height: height,
            width: width
        };
    }
    function getComputedSize(data) {
        var size = getOuterSize(data);
        if (typeof window.getComputedStyle !== 'function') {
            return size;
        }
        var style = window.getComputedStyle(data.target[0]);
        if (!style.width) {
            return size;
        }
        size.width = Math.floor(Number(style.width.replace('px', '')));
        size.height = Math.floor(size.width / size.aspect);
        return size;
    }
    /**
     *
     */
    function getInnerSize(data) {
        var width = Math.floor(data.frameWidth || data.width || data.target.innerWidth());
        var height = Math.floor(data.frameHeight || data.height || data.target.innerHeight());
        return {
            aspect: width / height,
            height: height,
            width: width
        };
    }
    /**
     *
     */
    function getInnerLayout(mode, inner, outer) {
        // get mode
        var isFit = mode === 'fit';
        var isFill = mode === 'fill';
        var isMatch = mode === 'stretch';
        // resulting layout
        var layout = {
            width: '100%',
            height: '100%',
            top: 0,
            left: 0,
            bottom: 0,
            right: 0,
            position: 'absolute',
            overflow: 'hidden'
        };
        // no calculation here
        if (!mode || isMatch) {
            return layout;
        }
        // get size and aspect
        var aspectIsGreater = inner.aspect >= outer.aspect;
        // mode == original
        var width = inner.width;
        var height = inner.height;
        // keep aspect ratio but fit/fill into container
        if (isFit && aspectIsGreater || isFill && !aspectIsGreater) {
            width = outer.width;
            height = outer.width / inner.aspect;
        }
        if (isFill && aspectIsGreater || isFit && !aspectIsGreater) {
            height = outer.height;
            width = outer.height * inner.aspect;
        }
        // floor the numbers
        width = Math.floor(width);
        height = Math.floor(height);
        // position in center
        layout.width = width;
        layout.height = height;
        layout.top = Math.floor((outer.height - height) / 2);
        layout.left = Math.floor((outer.width - width) / 2);
        layout.right = layout.left;
        layout.bottom = layout.top;
        return layout;
    }

    var img;
    /**
     * gets the original width and height of an image element
     */
    function naturalSize(image) {
        // for browsers that support naturalWidth and naturalHeight properties
        if (image.naturalWidth) {
            return {
                height: image.naturalHeight,
                width: image.naturalWidth
            };
        }
        // browsers that do not support naturalWidth and naturalHeight properties have to fall back to the width and
        // height properties. However, the image might have a css style applied so width and height would return the
        // css size. To avoid that create a new Image object that is free of css rules and grab width and height
        // properties
        //
        // assume that the src has already been downloaded, so no onload callback is needed.
        img = img || new Image();
        img.crossOrigin = image.crossOrigin;
        img.src = image.src;
        return {
            height: img.height,
            width: img.width
        };
    }

    /**
     * Measures the image frames that are used in the given data object
     */
    function measure(images, options) {
        if (images.length === 1) {
            return [measureSheet(images[0], options)];
        }
        else if (options.framesX && options.framesY) {
            return measureMutipleSheets(images, options);
        }
        else {
            return measureFrames(images, options);
        }
    }
    function measureSheet(image, options) {
        var result = { id: 0, sprites: [] };
        measureImage(image, options, result);
        var frames = options.frames;
        var framesX = Number(options.framesX) || frames;
        var framesY = Math.ceil(frames / framesX);
        var frameWidth = Math.floor(result.width / framesX);
        var frameHeight = Math.floor(result.height / framesY);
        var divisor = result.isSubsampled ? 2 : 1;
        for (var i = 0; i < frames; i++) {
            var x = (i % framesX) * frameWidth;
            var y = Math.floor(i / framesX) * frameHeight;
            result.sprites.push({
                id: i,
                x: x, y: y,
                width: frameWidth,
                height: frameHeight,
                sampledX: x / divisor,
                sampledY: y / divisor,
                sampledWidth: frameWidth / divisor,
                sampledHeight: frameHeight / divisor
            });
        }
        return result;
    }
    function measureFrames(images, options) {
        var result = [];
        for (var id = 0; id < images.length; id++) {
            // TODO: optimize
            // don't measure images with same size twice
            var sheet = measureSheet(images[id], { frames: 1, framesX: 1, detectSubsampling: options.detectSubsampling });
            sheet.id = id;
            result.push(sheet);
        }
        return result;
    }
    function measureMutipleSheets(images, options) {
        var result = [];
        for (var id = 0; id < images.length; id++) {
            // TODO: optimize
            // don't measure images with same size twice
            var sheet = measureSheet(images[id], {
                frames: undefined,
                framesX: options.framesX,
                framesY: options.framesY,
                detectSubsampling: options.detectSubsampling
            });
            sheet.id = id;
            result.push(sheet);
        }
        return result;
    }
    function measureImage(image, options, result) {
        var size = naturalSize(image);
        result.isSubsampled = options.detectSubsampling && detectSubsampling(image, size.width, size.height);
        result.width = size.width;
        result.height = size.height;
        result.sampledWidth = size.width / (result.isSubsampled ? 2 : 1);
        result.sampledHeight = size.height / (result.isSubsampled ? 2 : 1);
        return result;
    }
    function findSpecs(metrics, frames, frame, lane) {
        var spriteId = lane * frames + frame;
        var sheetId = 0;
        var sprite = null;
        var sheet = null;
        while (true) {
            sheet = metrics[sheetId];
            if (!sheet) {
                break;
            }
            if (spriteId >= sheet.sprites.length) {
                spriteId -= sheet.sprites.length;
                sheetId++;
                continue;
            }
            sprite = sheet.sprites[spriteId];
            break;
        }
        return { sprite: sprite, sheet: sheet };
    }

    function indexOf(element, arr) {
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] === element) {
                return i;
            }
        }
    }
    function noop() {
        //
    }
    function preload(opts) {
        var src;
        var input = opts.source;
        src = typeof input === 'string' ? [input] : input;
        // const src: string[] =  ? [opts.source] : opts.source
        var images = [];
        var targetCount = (opts.preloadCount || src.length);
        var onInitiated = opts.initiated || noop;
        var onProgress = opts.progress || noop;
        var onComplete = opts.complete || noop;
        var count = 0;
        var completed = false;
        var firstLoaded = false;
        var tick = function () {
            count += 1;
            onProgress({
                index: indexOf(this, images),
                loaded: count,
                total: src.length,
                percent: Math.round((count / src.length) * 100)
            });
            firstLoaded = firstLoaded || (this === images[0]);
            if (firstLoaded && !completed && (count >= targetCount)) {
                completed = true;
                onComplete(images);
            }
        };
        for (var _i = 0, src_1 = src; _i < src_1.length; _i++) {
            var url = src_1[_i];
            var img = new Image();
            // push result
            images.push(img);
            // https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image
            img.crossOrigin = opts.crossOrigin;
            // bind logic, don't care about abort/errors
            img.onload = img.onabort = img.onerror = tick;
            // begin load
            img.src = url;
        }
        onInitiated(images);
    }

    function padNumber(num, length, pad) {
        var result = String(num);
        while (result.length < length) {
            result = String(pad) + result;
        }
        return result;
    }
    /**
     * Generates an array of source strings
     *
     * @remarks
     * Takes a template string and generates an array of strings by interpolating {lane} and {frame} placeholders.
     *
     * ```
     * sourceArray('http://example.com/image_{frame}.jpg, { frame: [1, 3], digits: 2 })
     * // gives:
     * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]
     *
     * sourceArray('http://example.com/image_FRAME.jpg, { frame: [1, 3], digits: 2, framePlacer: 'FRAME' })
     * // gives:
     * // [ 'http://example.com/image_01.jpg', 'http://example.com/image_02.jpg', 'http://example.com/image_03.jpg' ]
     * ```
     *
     * @param template - The template string
     * @param opts - Interpolation options
     *
     * @public
     */
    function sourceArray(template, opts) {
        var digits = opts.digits || 2;
        var lPlacer = opts.lanePlacer || '{lane}';
        var fPlacer = opts.framePlacer || '{frame}';
        var fStart = 0;
        var fEnd = 0;
        if (opts.frame) {
            fStart = opts.frame[0];
            fEnd = opts.frame[1];
        }
        var lStart = 0;
        var lEnd = 0;
        if (opts.lane) {
            lStart = opts.lane[0];
            lEnd = opts.lane[1];
        }
        var result = [];
        for (var lane = lStart; lane <= lEnd; lane += 1) {
            for (var frame = fStart; frame <= fEnd; frame += 1) {
                result.push(template
                    .replace(lPlacer, padNumber(lane, digits, '0'))
                    .replace(fPlacer, padNumber(frame, digits, '0')));
            }
        }
        return result;
    }

    /**
     * The namespace that is used to bind functions to DOM events and store the data object
     */
    var namespace = 'spritespin';
    /**
     * Event names that are recognized by SpriteSpin. A module can implement any of these and they will be bound
     * to the target element on which the plugin is called.
     */
    var eventNames = [
        'mousedown',
        'mousemove',
        'mouseup',
        'mouseenter',
        'mouseover',
        'mouseleave',
        'mousewheel',
        'wheel',
        'click',
        'dblclick',
        'touchstart',
        'touchmove',
        'touchend',
        'touchcancel',
        'selectstart',
        'gesturestart',
        'gesturechange',
        'gestureend'
    ];
    /**
     *
     */
    var callbackNames = [
        'onInit',
        'onProgress',
        'onLoad',
        'onFrameChanged',
        'onFrame',
        'onDraw',
        'onComplete',
        'onDestroy'
    ];
    /**
     * Names of events for that the default behavior should be prevented.
     */
    var eventsToPrevent = [
        'dragstart'
    ];
    /**
     * Default set of SpriteSpin options. This also represents the majority of data attributes that are used during the
     * lifetime of a SpriteSpin instance. The data is stored inside the target DOM element on which the plugin is called.
     */
    var defaults = {
        source: undefined,
        width: undefined,
        height: undefined,
        frames: undefined,
        framesX: undefined,
        lanes: 1,
        sizeMode: undefined,
        renderer: 'canvas',
        lane: 0,
        frame: 0,
        frameTime: 40,
        animate: true,
        retainAnimate: false,
        reverse: false,
        loop: true,
        stopFrame: 0,
        wrap: true,
        wrapLane: false,
        sense: 1,
        senseLane: undefined,
        orientation: 'horizontal',
        detectSubsampling: true,
        preloadCount: undefined,
        touchScrollTimer: [200, 1500],
        responsive: undefined,
        plugins: undefined
    };

    function noop$1() {
        // noop
    }
    function wrapConsole(type) {
        return console && console[type] ? function () {
            var args = [];
            for (var _i = 0; _i < arguments.length; _i++) {
                args[_i] = arguments[_i];
            }
            return console.log.apply(console, args);
        } : noop$1;
    }
    var log = wrapConsole('log');
    var warn = wrapConsole('warn');
    var error = wrapConsole('error');
    function toArray(value) {
        return Array.isArray(value) ? value : [value];
    }
    /**
     * clamps the given value by the given min and max values
     */
    function clamp(value, min, max) {
        return (value > max ? max : (value < min ? min : value));
    }
    /**
     *
     */
    function wrap(value, min, max, size) {
        while (value > max) {
            value -= size;
        }
        while (value < min) {
            value += size;
        }
        return value;
    }
    /**
     * prevents default action on the given event
     */
    function prevent(e) {
        e.preventDefault();
        return false;
    }
    /**
     * Binds on the given target and event the given function.
     * The SpriteSpin namespace is attached to the event name
     */
    function bind(target, event, func) {
        if (func) {
            target.bind(event + '.' + namespace, function (e) {
                func.apply(target, [e, target.spritespin('data')]);
            });
        }
    }
    /**
     * Unbinds all SpriteSpin events from given target element
     */
    function unbind(target) {
        target.unbind('.' + namespace);
    }
    /**
     * Checks if given object is a function
     */
    function isFunction(fn) {
        return typeof fn === 'function';
    }
    function pixelRatio(context) {
        var devicePixelRatio = window.devicePixelRatio || 1;
        var backingStoreRatio = context.webkitBackingStorePixelRatio ||
            context.mozBackingStorePixelRatio ||
            context.msBackingStorePixelRatio ||
            context.oBackingStorePixelRatio ||
            context.backingStorePixelRatio || 1;
        return devicePixelRatio / backingStoreRatio;
    }

    /**
     * Applies css attributes to layout the SpriteSpin containers.
     *
     * @internal
     */
    function applyLayout(data) {
        // disable selection
        data.target
            .attr('unselectable', 'on')
            .css({
                width: '',
                height: '',
                '-ms-user-select': 'none',
                '-moz-user-select': 'none',
                '-khtml-user-select': 'none',
                '-webkit-user-select': 'none',
                'user-select': 'none'
            });
        var size = data.responsive ? getComputedSize(data) : getOuterSize(data);
        var layout = getInnerLayout(data.sizeMode, getInnerSize(data), size);
        // apply layout on target
        data.target.css({
            width: size.width,
            height: size.height,
            position: 'relative',
            overflow: 'hidden'
        });
        // apply layout on stage
        data.stage
            .css(layout)
            .hide();
        if (!data.canvas) {
            return;
        }
        // apply layout on canvas
        data.canvas.css(layout).hide();
        // apply pixel ratio on canvas
        data.canvasRatio = data.canvasRatio || pixelRatio(data.context);
        if (typeof layout.width === 'number' && typeof layout.height === 'number') {
            data.canvas[0].width = (layout.width * data.canvasRatio) || size.width;
            data.canvas[0].height = (layout.height * data.canvasRatio) || size.height;
        }
        else {
            data.canvas[0].width = (size.width * data.canvasRatio);
            data.canvas[0].height = (size.height * data.canvasRatio);
        }
        // width and height must be set before calling scale
        data.context.scale(data.canvasRatio, data.canvasRatio);
    }

    /**
     * Gets a state object by name.
     * @internal
     * @param data - The SpriteSpin instance data
     * @param name - The name of the state object
     */
    function getState(data, name) {
        data.state = data.state || {};
        data.state[name] = data.state[name] || {};
        return data.state[name];
    }
    /**
     * Gets a plugin state object by name.
     *
     * @remarks
     * Plugins should use this method to get or create a state object where they can
     * store any instance variables.
     *
     * @public
     * @param data - The SpriteSpin instance data
     * @param name - The name of the plugin
     */
    function getPluginState(data, name) {
        var state = getState(data, 'plugin');
        state[name] = state[name] || {};
        return state[name];
    }
    /**
     * Checks whether a flag is set. See {@link flag}.
     *
     * @public
     * @param data - The SpriteSpin instance data
     * @param key - The name of the flag
     */
    function is(data, key) {
        return !!getState(data, 'flags')[key];
    }
    /**
     * Sets a flag value. See {@link is}.
     *
     * @public
     * @param data - The SpriteSpin instance data
     * @param key - The name of the flag
     * @param value - The value to set
     */
    function flag(data, key, value) {
        getState(data, 'flags')[key] = !!value;
    }

    /**
     * Gets the playback state
     *
     * @public
     * @param data - The SpriteSpin instance data
     */
    function getPlaybackState(data) {
        return getState(data, 'playback');
    }
    function updateLane(data, lane) {
        data.lane = data.wrapLane
            ? wrap(lane, 0, data.lanes - 1, data.lanes)
            : clamp(lane, 0, data.lanes - 1);
    }
    function updateAnimationFrame(data) {
        data.frame += (data.reverse ? -1 : 1);
        // wrap the frame value to fit in range [0, data.frames)
        data.frame = wrap(data.frame, 0, data.frames - 1, data.frames);
        // stop animation if loop is disabled and the stopFrame is reached
        if (!data.loop && (data.frame === data.stopFrame)) {
            stopAnimation(data);
        }
    }
    function updateInputFrame(data, frame) {
        data.frame = Number(frame);
        data.frame = data.wrap
            ? wrap(data.frame, 0, data.frames - 1, data.frames)
            : clamp(data.frame, 0, data.frames - 1);
    }
    function updateAnimation(data) {
        var state = getPlaybackState(data);
        if (state.handler) {
            updateBefore(data);
            updateAnimationFrame(data);
            updateAfter(data);
        }
    }
    function updateBefore(data) {
        var state = getPlaybackState(data);
        state.lastFrame = data.frame;
        state.lastLane = data.lane;
    }
    function updateAfter(data) {
        var state = getPlaybackState(data);
        if (state.lastFrame !== data.frame || state.lastLane !== data.lane) {
            data.target.trigger('onFrameChanged.' + namespace, data);
        }
        data.target.trigger('onFrame.' + namespace, data);
        data.target.trigger('onDraw.' + namespace, data);
    }
    /**
     * Updates the frame or lane number of the SpriteSpin data.
     *
     * @public
     * @param data - The SpriteSpin instance data
     * @param frame - The frame number to set
     * @param lane - The lane number to set
     */
    function updateFrame(data, frame, lane) {
        updateBefore(data);
        if (frame != null) {
            updateInputFrame(data, frame);
        }
        if (lane != null) {
            updateLane(data, lane);
        }
        updateAfter(data);
    }
    /**
     * Stops the running animation.
     *
     * @public
     * @param data - The SpriteSpin instance data
     */
    function stopAnimation(data) {
        data.animate = false;
        var state = getPlaybackState(data);
        if (state.handler != null) {
            window.clearInterval(state.handler);
            state.handler = null;
        }
    }
    /**
     * Starts animation playback if needed.
     *
     * @remarks
     * Starts animation playback if `animate` property is `true` and the animation is not yet running.
     *
     * @public
     * @param data - The SpriteSpin instance data
     */
    function applyAnimation(data) {
        var state = getPlaybackState(data);
        if (state.handler && (!data.animate || state.frameTime !== data.frameTime)) {
            stopAnimation(data);
        }
        if (data.animate && !state.handler) {
            state.frameTime = data.frameTime;
            state.handler = window.setInterval(function () { return updateAnimation(data); }, state.frameTime);
        }
    }
    /**
     * Starts the animation playback
     *
     * @remarks
     * Starts the animation playback and also sets the `animate` property to `true`
     *
     * @public
     * @param data - The SpriteSpin instance data
     */
    function startAnimation(data) {
        data.animate = true;
        applyAnimation(data);
    }

    var plugins = {};
    /**
     * Registers a plugin.
     *
     * @remarks
     * Use this to add custom Rendering or Updating modules that can be addressed with the 'module' option.
     *
     * @public
     * @param name - The name of the plugin
     * @param plugin - The plugin implementation
     */
    function registerPlugin(name, plugin) {
        if (plugins[name]) {
            error("Plugin name \"" + name + "\" is already taken");
            return;
        }
        plugin = plugin || {};
        plugins[name] = plugin;
        return plugin;
    }
    /**
     * Registers a plugin.
     *
     * @public
     * @deprecated Use {@link registerPlugin} instead
     * @param name - The name of the plugin
     * @param plugin - The plugin implementation
     */
    function registerModule(name, plugin) {
        warn('"registerModule" is deprecated, use "registerPlugin" instead');
        registerPlugin(name, plugin);
    }
    /**
     * Gets an active plugin by name
     *
     * @internal
     * @param name - The name of the plugin
     */
    function getPlugin(name) {
        return plugins[name];
    }
    /**
     * Replaces module names on given SpriteSpin data and replaces them with actual implementations.
     * @internal
     */
    function applyPlugins(data) {
        fixPlugins(data);
        for (var i = 0; i < data.plugins.length; i += 1) {
            var name_1 = data.plugins[i];
            if (typeof name_1 !== 'string') {
                continue;
            }
            var plugin = getPlugin(name_1);
            if (!plugin) {
                error('No plugin found with name ' + name_1);
                continue;
            }
            data.plugins[i] = plugin;
        }
    }
    function fixPlugins(data) {
        // tslint:disable no-string-literal
        if (data['mods']) {
            warn('"mods" option is deprecated, use "plugins" instead');
            data.plugins = data['mods'];
            delete data['mods'];
        }
        if (data['behavior']) {
            warn('"behavior" option is deprecated, use "plugins" instead');
            data.plugins.push(data['behavior']);
            delete data['behavior'];
        }
        if (data['module']) {
            warn('"module" option is deprecated, use "plugins" instead');
            data.plugins.push(data['module']);
            delete data['module'];
        }
    }

    var $$2 = $$1;
    var counter = 0;
    /**
     * Collection of all SpriteSpin instances
     */
    var instances = {};
    function pushInstance(data) {
        counter += 1;
        data.id = String(counter);
        instances[data.id] = data;
    }
    function popInstance(data) {
        delete instances[data.id];
    }
    function eachInstance(cb) {
        for (var id in instances) {
            if (instances.hasOwnProperty(id)) {
                cb(instances[id]);
            }
        }
    }
    var lazyinit = function () {
        // replace function with a noop
        // this logic must run only once
        lazyinit = function () { };
        function onEvent(eventName, e) {
            eachInstance(function (data) {
                for (var _i = 0, _a = data.plugins; _i < _a.length; _i++) {
                    var module_1 = _a[_i];
                    if (typeof module_1[eventName] === 'function') {
                        module_1[eventName].apply(data.target, [e, data]);
                    }
                }
            });
        }
        function onResize() {
            eachInstance(function (data) {
                if (data.responsive) {
                    boot(data);
                }
            });
        }
        var _loop_1 = function (eventName) {
            $$2(window.document).bind(eventName + '.' + namespace, function (e) {
                onEvent('document' + eventName, e);
            });
        };
        for (var _i = 0, eventNames_1 = eventNames; _i < eventNames_1.length; _i++) {
            var eventName = eventNames_1[_i];
            _loop_1(eventName);
        }
        var resizeTimeout = null;
        $$2(window).on('resize', function () {
            window.clearTimeout(resizeTimeout);
            resizeTimeout = window.setTimeout(onResize, 100);
        });
    };
    /**
     * (re)binds all spritespin events on the target element
     *
     * @internal
     */
    function applyEvents(data) {
        var target = data.target;
        // Clear all SpriteSpin events on the target element
        unbind(target);
        // disable all default browser behavior on the following events
        // mainly prevents image drag operation
        for (var _i = 0, eventsToPrevent_1 = eventsToPrevent; _i < eventsToPrevent_1.length; _i++) {
            var eName = eventsToPrevent_1[_i];
            bind(target, eName, prevent);
        }
        // Bind module functions to SpriteSpin events
        for (var _a = 0, _b = data.plugins; _a < _b.length; _a++) {
            var plugin = _b[_a];
            for (var _c = 0, eventNames_2 = eventNames; _c < eventNames_2.length; _c++) {
                var eName = eventNames_2[_c];
                bind(target, eName, plugin[eName]);
            }
            for (var _d = 0, callbackNames_1 = callbackNames; _d < callbackNames_1.length; _d++) {
                var eName = callbackNames_1[_d];
                bind(target, eName, plugin[eName]);
            }
        }
        // bind auto start function to load event.
        bind(target, 'onLoad', function (e, d) {
            applyAnimation(d);
        });
        // bind all user events that have been passed on initialization
        for (var _e = 0, callbackNames_2 = callbackNames; _e < callbackNames_2.length; _e++) {
            var eName = callbackNames_2[_e];
            bind(target, eName, data[eName]);
        }
    }
    function applyMetrics(data) {
        if (!data.images) {
            data.metrics = [];
        }
        data.metrics = measure(data.images, data);
        var spec = findSpecs(data.metrics, data.frames, 0, 0);
        if (spec.sprite) {
            // TODO: try to remove frameWidth/frameHeight
            data.frameWidth = spec.sprite.width;
            data.frameHeight = spec.sprite.height;
        }
    }
    /**
     * Runs the boot process.
     *
     * @remarks
     * (re)initializes plugins, (re)initializes the layout, (re)binds events and loads source images.
     *
     * @internal
     */
    function boot(data) {
        applyPlugins(data);
        applyEvents(data);
        applyLayout(data);
        data.source = toArray(data.source);
        data.loading = true;
        data.target
            .addClass('loading')
            .trigger('onInit.' + namespace, data);
        preload({
            source: data.source,
            crossOrigin: data.crossOrigin,
            preloadCount: data.preloadCount,
            progress: function (progress) {
                data.progress = progress;
                data.target.trigger('onProgress.' + namespace, data);
            },
            complete: function (images) {
                data.images = images;
                data.loading = false;
                data.frames = data.frames || images.length;
                applyMetrics(data);
                applyLayout(data);
                data.stage.show();
                data.target
                    .removeClass('loading')
                    .trigger('onLoad.' + namespace, data)
                    .trigger('onFrame.' + namespace, data)
                    .trigger('onDraw.' + namespace, data)
                    .trigger('onComplete.' + namespace, data);
            }
        });
    }
    /**
     * Creates a new SpriteSpin instance
     *
     * @public
     */
    function create(options) {
        var _this = this;
        var target = options.target;
        // SpriteSpin is not initialized
        // Create default settings object and extend with given options
        var data = $$2.extend(true, {}, defaults, options);
        // ensure source is set
        data.source = data.source || [];
        // ensure plugins are set
        data.plugins = data.plugins || [
            '360',
            'drag'
        ];
        // if image tags are contained inside this DOM element
        // use these images as the source files
        target.find('img').each(function () {
            if (!Array.isArray(data.source)) {
                data.source = [];
            }
            data.source.push($$2(_this).attr('src'));
        });
        // build inner html
        // <div>
        //   <div class='spritespin-stage'></div>
        //   <canvas class='spritespin-canvas'></canvas>
        // </div>
        target
            .empty()
            .addClass('spritespin-instance')
            .append("<div class='spritespin-stage'></div>");
        // add the canvas element if canvas rendering is enabled and supported
        if (data.renderer === 'canvas') {
            var canvas = document.createElement('canvas');
            if (!!(canvas.getContext && canvas.getContext('2d'))) {
                data.canvas = $$2(canvas).addClass('spritespin-canvas');
                data.context = canvas.getContext('2d');
                target.append(data.canvas);
                target.addClass('with-canvas');
            }
            else {
                // fallback to image rendering mode
                data.renderer = 'image';
            }
        }
        // setup references to DOM elements
        data.target = target;
        data.stage = target.find('.spritespin-stage');
        // store the data
        target.data(namespace, data);
        pushInstance(data);
        return data;
    }
    /**
     * Creates a new SpriteSpin instance, or updates an existing one
     *
     * @public
     */
    function createOrUpdate(options) {
        lazyinit();
        var data = options.target.data(namespace);
        if (!data) {
            data = create(options);
        }
        else {
            $$2.extend(data, options);
        }
        boot(data);
        return data;
    }
    /**
     * Destroys the SpriteSpin instance
     *
     * @remarks
     * - stops running animation
     * - unbinds all events
     * - deletes the data on the target element
     *
     * @public
     */
    function destroy(data) {
        popInstance(data);
        stopAnimation(data);
        data.target
            .trigger('onDestroy', data)
            .html(null)
            .attr('style', null)
            .attr('unselectable', null)
            .removeClass(['spritespin-instance', 'with-canvas']);
        unbind(data.target);
        data.target.removeData(namespace);
    }

    /**
     * Gets the current input state
     *
     * @public
     * @param data - The SpriteSpin instance data
     */
    function getInputState(data) {
        return getState(data, 'input');
    }
    /**
     * Updates the input state using a mouse or touch event.
     *
     * @public
     * @param e - The input event
     * @param data - The SpriteSpin instance data
     */
    function updateInput(e, data) {
        var cursor = getCursorPosition(e);
        var state = getInputState(data);
        // cache positions from previous frame
        state.oldX = state.currentX;
        state.oldY = state.currentY;
        state.currentX = cursor.x;
        state.currentY = cursor.y;
        // Fix old position.
        if (state.oldX === undefined || state.oldY === undefined) {
            state.oldX = state.currentX;
            state.oldY = state.currentY;
        }
        // Cache the initial click/touch position and store the frame number at which the click happened.
        // Useful for different behavior implementations. This must be restored when the click/touch is released.
        if (state.startX === undefined || state.startY === undefined) {
            state.startX = state.currentX;
            state.startY = state.currentY;
            state.clickframe = data.frame;
            state.clicklane = data.lane;
        }
        // Calculate the vector from start position to current pointer position.
        state.dX = state.currentX - state.startX;
        state.dY = state.currentY - state.startY;
        // Calculate the vector from last frame position to current pointer position.
        state.ddX = state.currentX - state.oldX;
        state.ddY = state.currentY - state.oldY;
        // Normalize vectors to range [-1:+1]
        state.ndX = state.dX / data.target.innerWidth();
        state.ndY = state.dY / data.target.innerHeight();
        state.nddX = state.ddX / data.target.innerWidth();
        state.nddY = state.ddY / data.target.innerHeight();
    }
    /**
     * Resets the input state.
     *
     * @public
     */
    function resetInput(data) {
        var input = getInputState(data);
        input.startX = input.startY = undefined;
        input.currentX = input.currentY = undefined;
        input.oldX = input.oldY = undefined;
        input.dX = input.dY = 0;
        input.ddX = input.ddY = 0;
        input.ndX = input.ndY = 0;
        input.nddX = input.nddY = 0;
    }

    function extension(option, value) {
        var $target = $$1(this);
        if (option === 'data') {
            return $target.data(namespace);
        }
        if (option === 'api') {
            var data = $target.data(namespace);
            data.api = data.api || new Api(data);
            return data.api;
        }
        if (option === 'destroy') {
            return $target.each(function () {
                var data = $target.data(namespace);
                if (data) {
                    destroy(data);
                }
            });
        }
        if (arguments.length === 2 && typeof option === 'string') {
            option = (_a = {}, _a[option] = value, _a);
        }
        if (typeof option === 'object') {
            return createOrUpdate($$1.extend(true, { target: $target }, option)).target;
        }
        throw new Error('Invalid call to spritespin');
        var _a;
    }
    $$1.fn[namespace] = extension;

    // tslint:disable:object-literal-shorthand
    // tslint:disable:only-arrow-functions
    extendApi({
        // Gets a value indicating whether the animation is currently running.
        isPlaying: function () {
            return getPlaybackState(this.data).handler != null;
        },
        // Gets a value indicating whether the animation looping is enabled.
        isLooping: function () {
            return this.data.loop;
        },
        // Starts/Stops the animation playback
        toggleAnimation: function () {
            if (this.isPlaying()) {
                this.stopAnimation();
            }
            else {
                this.startAnimation();
            }
        },
        // Stops animation playback
        stopAnimation: function () {
            this.data.animate = false;
            stopAnimation(this.data);
        },
        // Starts animation playback
        startAnimation: function () {
            this.data.animate = true;
            applyAnimation(this.data);
        },
        // Sets a value indicating whether the animation should be looped or not.
        // This might start the animation (if the 'animate' data attribute is set to true)
        loop: function (value) {
            this.data.loop = value;
            applyAnimation(this.data);
            return this;
        },
        // Gets the current frame number
        currentFrame: function () {
            return this.data.frame;
        },
        // Updates SpriteSpin to the specified frame.
        updateFrame: function (frame) {
            updateFrame(this.data, frame);
            return this;
        },
        // Skips the given number of frames
        skipFrames: function (step) {
            var data = this.data;
            updateFrame(data, data.frame + (data.reverse ? -step : +step));
            return this;
        },
        // Updates SpriteSpin so that the next frame is shown
        nextFrame: function () {
            return this.skipFrames(1);
        },
        // Updates SpriteSpin so that the previous frame is shown
        prevFrame: function () {
            return this.skipFrames(-1);
        },
        // Starts the animations that will play until the given frame number is reached
        // options:
        //   force [boolean] starts the animation, even if current frame is the target frame
        //   nearest [boolean] animates to the direction with minimum distance to the target frame
        playTo: function (frame, options) {
            var data = this.data;
            options = options || {};
            if (!options.force && data.frame === frame) {
                return;
            }
            if (options.nearest) {
                // distance to the target frame
                var a = frame - data.frame;
                // distance to last frame and the to target frame
                var b = frame > data.frame ? a - data.frames : a + data.frames;
                // minimum distance
                var c = Math.abs(a) < Math.abs(b) ? a : b;
                data.reverse = c < 0;
            }
            data.animate = true;
            data.loop = false;
            data.stopFrame = frame;
            applyAnimation(data);
            return this;
        }
    });

    function pick(target, names) {
        for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {
            var name_1 = names_1[_i];
            if (target[name_1] || name_1 in target) {
                return name_1;
            }
        }
        return names[0];
    }
    var browser = {
        requestFullscreen: pick(document.documentElement, [
            'requestFullscreen',
            'webkitRequestFullScreen',
            'mozRequestFullScreen',
            'msRequestFullscreen'
        ]),
        exitFullscreen: pick(document, [
            'exitFullscreen',
            'webkitExitFullscreen',
            'webkitCancelFullScreen',
            'mozCancelFullScreen',
            'msExitFullscreen'
        ]),
        fullscreenElement: pick(document, [
            'fullscreenElement',
            'webkitFullscreenElement',
            'webkitCurrentFullScreenElement',
            'mozFullScreenElement',
            'msFullscreenElement'
        ]),
        fullscreenEnabled: pick(document, [
            'fullscreenEnabled',
            'webkitFullscreenEnabled',
            'mozFullScreenEnabled',
            'msFullscreenEnabled'
        ]),
        fullscreenchange: pick(document, [
            'onfullscreenchange',
            'onwebkitfullscreenchange',
            'onmozfullscreenchange',
            'onMSFullscreenChange'
        ]).replace(/^on/, ''),
        fullscreenerror: pick(document, [
            'onfullscreenerror',
            'onwebkitfullscreenerror',
            'onmozfullscreenerror',
            'onMSFullscreenError'
        ]).replace(/^on/, '')
    };
    var changeEvent = browser.fullscreenchange + '.' + namespace + '-fullscreen';
    function unbindChangeEvent() {
        $$1(document).unbind(changeEvent);
    }
    function bindChangeEvent(callback) {
        unbindChangeEvent();
        $$1(document).bind(changeEvent, callback);
    }
    var orientationEvent = 'orientationchange.' + namespace + '-fullscreen';
    function unbindOrientationEvent() {
        $$1(window).unbind(orientationEvent);
    }
    function bindOrientationEvent(callback) {
        unbindOrientationEvent();
        $$1(window).bind(orientationEvent, callback);
    }
    function requestFullscreenNative(e) {
        e = e || document.documentElement;
        e[browser.requestFullscreen]();
    }
    function exitFullscreen() {
        return document[browser.exitFullscreen]();
    }
    function fullscreenEnabled() {
        return document[browser.fullscreenEnabled];
    }
    function fullscreenElement() {
        return document[browser.fullscreenElement];
    }
    function isFullscreen() {
        return !!fullscreenElement();
    }
    function toggleFullscreen(data, opts) {
        if (isFullscreen()) {
            this.apiRequestFullscreen(opts);
        }
        else {
            this.exitFullscreen();
        }
    }
    function requestFullscreen(data, opts) {
        opts = opts || {};
        var oWidth = data.width;
        var oHeight = data.height;
        var oSource = data.source;
        var oSize = data.sizeMode;
        var oResponsive = data.responsive;
        var enter = function () {
            data.width = window.screen.width;
            data.height = window.screen.height;
            data.source = (opts.source || oSource);
            data.sizeMode = opts.sizeMode || 'fit';
            data.responsive = false;
            boot(data);
        };
        var exit = function () {
            data.width = oWidth;
            data.height = oHeight;
            data.source = oSource;
            data.sizeMode = oSize;
            data.responsive = oResponsive;
            boot(data);
        };
        bindChangeEvent(function () {
            if (isFullscreen()) {
                enter();
                bindOrientationEvent(enter);
            }
            else {
                unbindChangeEvent();
                unbindOrientationEvent();
                exit();
            }
        });
        requestFullscreenNative(data.target[0]);
    }
    extendApi({
        fullscreenEnabled: fullscreenEnabled,
        fullscreenElement: fullscreenElement,
        exitFullscreen: exitFullscreen,
        toggleFullscreen: function (opts) {
            toggleFullscreen(this.data, opts);
        },
        requestFullscreen: function (opts) {
            requestFullscreen(this.data, opts);
        }
    });

    (function () {
        var NAME = 'click';
        function click(e, data) {
            if (data.loading || !data.stage.is(':visible')) {
                return;
            }
            updateInput(e, data);
            var input = getInputState(data);
            var half, pos;
            var target = data.target, offset = target.offset();
            if (data.orientation === 'horizontal') {
                half = target.innerWidth() / 2;
                pos = input.currentX - offset.left;
            }
            else {
                half = target.innerHeight() / 2;
                pos = input.currentY - offset.top;
            }
            updateFrame(data, data.frame + (pos > half ? 1 : -1));
        }
        registerPlugin(NAME, {
            name: NAME,
            mouseup: click,
            touchend: click
        });
    })();

    (function () {
        var NAME = 'drag';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function getAxis(data) {
            if (typeof data.orientation === 'number') {
                return data.orientation * Math.PI / 180;
            }
            if (data.orientation === 'horizontal') {
                return 0;
            }
            return Math.PI / 2;
        }
        function onInit(e, data) {
            var state = getState$$1(data);
            var d = [200, 1500];
            var t = data.touchScrollTimer || d;
            state.minTime = t[0] || d[0];
            state.maxTime = t[1] || d[1];
        }
        function dragStart(e, data) {
            var state = getState$$1(data);
            if (data.loading || is(data, 'dragging') || data['zoomPinFrame'] && !data.stage.is(':visible')) {
                return;
            }
            // Touch scroll can only be disabled by cancelling the 'touchstart' event.
            // If we would try to cancel the 'touchmove' event during a scroll
            // chrome browser raises an error
            //
            // When a user interacts with sprite spin, we don't know whether the intention
            // is to scroll the page or to roll the spin.
            //
            // On first interaction with SpriteSpin the scroll is not disabled
            // On double tap within 200ms the scroll is not disabled
            // Scroll is only disabled if there was an interaction with SpriteSpin in the past 1500ms
            var now = new Date().getTime();
            if (state.endAt && (now - state.endAt > state.maxTime)) {
                // reset timer if the user has no interaction with spritespin within 1500ms
                state.startAt = null;
                state.endAt = null;
            }
            if (state.startAt && (now - state.startAt > state.minTime)) {
                // disable scroll only if there was already an interaction with spritespin
                // however, allow scrolling on double tab within 200ms
                e.preventDefault();
            }
            state.startAt = now;
            state.wasPlaying = !!getPlaybackState(data).handler;
            state.frame = data.frame || 0;
            state.lane = data.lane || 0;
            flag(data, 'dragging', true);
            updateInput(e, data);
        }
        function dragEnd(e, data) {
            if (is(data, 'dragging')) {
                getState$$1(data).endAt = new Date().getTime();
                flag(data, 'dragging', false);
                resetInput(data);
                if (data.retainAnimate && getState$$1(data).wasPlaying) {
                    startAnimation(data);
                }
            }
        }
        function drag(e, data) {
            var state = getState$$1(data);
            var input = getInputState(data);
            if (!is(data, 'dragging')) {
                return;
            }
            updateInput(e, data);
            var rad = getAxis(data);
            var sn = Math.sin(rad);
            var cs = Math.cos(rad);
            var x = ((input.nddX * cs - input.nddY * sn) * data.sense) || 0;
            var y = ((input.nddX * sn + input.nddY * cs) * (data.senseLane || data.sense)) || 0;
            // accumulate
            state.frame += data.frames * x;
            state.lane += data.lanes * y;
            // update spritespin
            var oldFrame = data.frame;
            var oldLane = data.lane;
            updateFrame(data, Math.floor(state.frame), Math.floor(state.lane));
            stopAnimation(data);
        }
        function mousemove(e, data) {
            dragStart(e, data);
            drag(e, data);
        }
        registerPlugin('drag', {
            name: 'drag',
            onInit: onInit,
            mousedown: dragStart,
            mousemove: drag,
            mouseup: dragEnd,
            documentmousemove: drag,
            documentmouseup: dragEnd,
            touchstart: dragStart,
            touchmove: drag,
            touchend: dragEnd,
            touchcancel: dragEnd
        });
        registerPlugin('move', {
            name: 'move',
            onInit: onInit,
            mousemove: mousemove,
            mouseleave: dragEnd,
            touchstart: dragStart,
            touchmove: drag,
            touchend: dragEnd,
            touchcancel: dragEnd
        });
    })();

    (function () {
        var NAME = 'hold';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function rememberOptions(data) {
            var state = getState$$1(data);
            state.frameTime = data.frameTime;
            state.animate = data.animate;
            state.reverse = data.reverse;
        }
        function restoreOptions(data) {
            var state = getState$$1(data);
            data.frameTime = state.frameTime;
            data.animate = state.animate;
            data.reverse = state.reverse;
        }
        function start(e, data) {
            if (is(data, 'loading') || is(data, 'dragging') || !data.stage.is(':visible')) {
                return;
            }
            rememberOptions(data);
            updateInput(e, data);
            flag(data, 'dragging', true);
            data.animate = true;
            applyAnimation(data);
        }
        function stop(e, data) {
            flag(data, 'dragging', false);
            resetInput(data);
            stopAnimation(data);
            restoreOptions(data);
            applyAnimation(data);
        }
        function update(e, data) {
            if (!is(data, 'dragging')) {
                return;
            }
            updateInput(e, data);
            var input = getInputState(data);
            var half, delta;
            var target = data.target, offset = target.offset();
            if (data.orientation === 'horizontal') {
                half = target.innerWidth() / 2;
                delta = (input.currentX - offset.left - half) / half;
            }
            else {
                half = (data.height / 2);
                delta = (input.currentY - offset.top - half) / half;
            }
            data.reverse = delta < 0;
            delta = delta < 0 ? -delta : delta;
            data.frameTime = 80 * (1 - delta) + 20;
            if (((data.orientation === 'horizontal') && (input.dX < input.dY)) ||
                ((data.orientation === 'vertical') && (input.dX < input.dY))) {
                e.preventDefault();
            }
        }
        function onFrame(e, data) {
            data.animate = true;
            applyAnimation(data);
        }
        registerPlugin(NAME, {
            name: NAME,
            mousedown: start,
            mousemove: update,
            mouseup: stop,
            mouseleave: stop,
            touchstart: start,
            touchmove: update,
            touchend: stop,
            touchcancel: stop,
            onFrame: onFrame
        });
    })();

    (function () {
        var NAME = 'swipe';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function getOption(data, name, fallback) {
            return data[name] || fallback;
        }
        function init(e, data) {
            var state = getState$$1(data);
            state.fling = getOption(data, 'swipeFling', 10);
            state.snap = getOption(data, 'swipeSnap', 0.50);
        }
        function start(e, data) {
            if (!data.loading && !is(data, 'dragging')) {
                updateInput(e, data);
                flag(data, 'dragging', true);
            }
        }
        function update(e, data) {
            if (!is(data, 'dragging')) {
                return;
            }
            updateInput(e, data);
            var frame = data.frame;
            var lane = data.lane;
            updateFrame(data, frame, lane);
        }
        function end(e, data) {
            if (!is(data, 'dragging')) {
                return;
            }
            flag(data, 'dragging', false);
            var state = getState$$1(data);
            var input = getInputState(data);
            var frame = data.frame;
            var lane = data.lane;
            var snap = state.snap;
            var fling = state.fling;
            var dS, dF;
            if (data.orientation === 'horizontal') {
                dS = input.ndX;
                dF = input.ddX;
            }
            else {
                dS = input.ndY;
                dF = input.ddY;
            }
            if (dS >= snap || dF >= fling) {
                frame = data.frame - 1;
            }
            else if (dS <= -snap || dF <= -fling) {
                frame = data.frame + 1;
            }
            resetInput(data);
            updateFrame(data, frame, lane);
            stopAnimation(data);
        }
        registerPlugin(NAME, {
            name: NAME,
            onLoad: init,
            mousedown: start,
            mousemove: update,
            mouseup: end,
            mouseleave: end,
            touchstart: start,
            touchmove: update,
            touchend: end,
            touchcancel: end
        });
    })();

    (function () {
        var NAME = 'wheel';
        function wheel(e, data) {
            if (!data.loading && data.stage.is(':visible')) {
                e.preventDefault();
                var we = e.originalEvent;
                var signX = we.deltaX === 0 ? 0 : we.deltaX > 0 ? 1 : -1;
                var signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1;
                updateFrame(data, data.frame + signY, data.lane + signX);
            }
        }
        registerPlugin(NAME, {
            name: NAME,
            wheel: wheel
        });
    })();

    (function () {
        var template = "\n<div class='spritespin-progress'>\n  <div class='spritespin-progress-label'></div>\n  <div class='spritespin-progress-bar'></div>\n</div>\n";
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        var NAME = 'progress';
        function onInit(e, data) {
            var state = getState$$1(data);
            if (!state.stage) {
                state.stage = $$1(template);
                state.stage.appendTo(data.target);
            }
            state.stage.find('.spritespin-progress-label')
                .text("0%")
                .css({ 'text-align': 'center' });
            state.stage.find('.spritespin-progress-bar').css({
                width: "0%"
            });
            state.stage.hide().fadeIn();
        }
        function onProgress(e, data) {
            var state = getState$$1(data);
            state.stage.find('.spritespin-progress-label')
                .text(data.progress.percent + "%")
                .css({ 'text-align': 'center' });
            state.stage.find('.spritespin-progress-bar').css({
                width: data.progress.percent + "%"
            });
        }
        function onLoad(e, data) {
            $$1(getState$$1(data).stage).fadeOut();
        }
        function onDestroy(e, data) {
            $$1(getState$$1(data).stage).remove();
        }
        registerPlugin(NAME, {
            name: NAME,
            onInit: onInit,
            onProgress: onProgress,
            onLoad: onLoad,
            onDestroy: onDestroy
        });
    })();

    (function () {
        var NAME = '360';
        function onLoad(e, data) {
            data.stage.find('.spritespin-frames').detach();
            if (data.renderer === 'image') {
                $(data.images).addClass('spritespin-frames').appendTo(data.stage);
            }
        }
        function onDraw(e, data) {
            var specs = findSpecs(data.metrics, data.frames, data.frame, data.lane);
            var sheet = specs.sheet;
            var sprite = specs.sprite;
            if (!sheet || !sprite) {
                return;
            }
            var src = data.source[sheet.id];
            var image = data.images[sheet.id];
            if (data.renderer === 'canvas') {
                data.canvas.show();
                var w = data.canvas[0].width / data.canvasRatio;
                var h = data.canvas[0].height / data.canvasRatio;
                data.context.clearRect(0, 0, w, h);
                data.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h);
                return;
            }
            var scaleX = data.stage.innerWidth() / sprite.sampledWidth;
            var scaleY = data.stage.innerHeight() / sprite.sampledHeight;
            var top = Math.floor(-sprite.sampledY * scaleY);
            var left = Math.floor(-sprite.sampledX * scaleX);
            var width = Math.floor(sheet.sampledWidth * scaleX);
            var height = Math.floor(sheet.sampledHeight * scaleY);
            if (data.renderer === 'background') {
                data.stage.css({
                    'background-image': "url('" + src + "')",
                    'background-position': left + "px " + top + "px",
                    'background-repeat': 'no-repeat',
                    // set custom background size to enable responsive rendering
                    '-webkit-background-size': width + "px " + height + "px",
                    '-moz-background-size': width + "px " + height + "px",
                    '-o-background-size': width + "px " + height + "px",
                    'background-size': width + "px " + height + "px" /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */
                });
                return;
            }
            $(data.images).hide();
            $(image).show().css({
                position: 'absolute',
                top: top,
                left: left,
                'max-width': 'initial',
                width: width,
                height: height
            });
        }
        registerPlugin(NAME, {
            name: NAME,
            onLoad: onLoad,
            onDraw: onDraw
        });
    })();

    (function () {
        var NAME = 'blur';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function getOption(data, name, fallback) {
            return data[name] || fallback;
        }
        function init(e, data) {
            var state = getState$$1(data);
            state.canvas = state.canvas || $$1("<canvas class='blur-layer'></canvas>");
            state.context = state.context || state.canvas[0].getContext('2d');
            state.steps = state.steps || [];
            state.fadeTime = Math.max(getOption(data, 'blurFadeTime', 200), 1);
            state.frameTime = Math.max(getOption(data, 'blurFrameTime', data.frameTime), 16);
            state.trackTime = null;
            state.cssBlur = !!getOption(data, 'blurCss', false);
            var inner = getInnerSize(data);
            var outer = data.responsive ? getComputedSize(data) : getOuterSize(data);
            var css = getInnerLayout(data.sizeMode, inner, outer);
            state.canvas[0].width = data.width * data.canvasRatio;
            state.canvas[0].height = data.height * data.canvasRatio;
            state.canvas.css(css).show();
            state.context.scale(data.canvasRatio, data.canvasRatio);
            data.target.append(state.canvas);
        }
        function onFrame(e, data) {
            var state = getState$$1(data);
            trackFrame(data);
            if (state.timeout == null) {
                loop(data);
            }
        }
        function trackFrame(data) {
            var state = getState$$1(data);
            var ani = getPlaybackState(data);
            // distance between frames
            var d = Math.abs(data.frame - ani.lastFrame);
            // shortest distance
            d = d >= data.frames / 2 ? data.frames - d : d;
            state.steps.unshift({
                frame: data.frame,
                lane: data.lane,
                live: 1,
                step: state.frameTime / state.fadeTime,
                d: d,
                alpha: 0
            });
        }
        var toRemove = [];
        function removeOldFrames(frames) {
            toRemove.length = 0;
            for (var i = 0; i < frames.length; i += 1) {
                if (frames[i].alpha <= 0) {
                    toRemove.push(i);
                }
            }
            for (var _i = 0, toRemove_1 = toRemove; _i < toRemove_1.length; _i++) {
                var item = toRemove_1[_i];
                frames.splice(item, 1);
            }
        }
        function loop(data) {
            var state = getState$$1(data);
            state.timeout = window.setTimeout(function () { tick(data); }, state.frameTime);
        }
        function killLoop(data) {
            var state = getState$$1(data);
            window.clearTimeout(state.timeout);
            state.timeout = null;
        }
        function applyCssBlur(canvas, d) {
            var amount = Math.min(Math.max((d / 2) - 4, 0), 2.5);
            var blur = "blur(" + amount + "px)";
            canvas.css({
                '-webkit-filter': blur,
                filter: blur
            });
        }
        function clearFrame(data, state) {
            state.canvas.show();
            var w = state.canvas[0].width / data.canvasRatio;
            var h = state.canvas[0].height / data.canvasRatio;
            // state.context.clearRect(0, 0, w, h)
        }
        function drawFrame(data, state, step) {
            if (step.alpha <= 0) {
                return;
            }
            var specs = findSpecs(data.metrics, data.frames, step.frame, step.lane);
            var sheet = specs.sheet;
            var sprite = specs.sprite;
            if (!sheet || !sprite) {
                return;
            }
            var src = data.source[sheet.id];
            var image = data.images[sheet.id];
            if (image.complete === false) {
                return;
            }
            state.canvas.show();
            var w = state.canvas[0].width / data.canvasRatio;
            var h = state.canvas[0].height / data.canvasRatio;
            state.context.globalAlpha = step.alpha;
            state.context.drawImage(image, sprite.sampledX, sprite.sampledY, sprite.sampledWidth, sprite.sampledHeight, 0, 0, w, h);
        }
        function tick(data) {
            var state = getState$$1(data);
            killLoop(data);
            if (!state.context) {
                return;
            }
            var d = 0;
            clearFrame(data, state);
            state.context.clearRect(0, 0, data.width, data.height);
            for (var _i = 0, _a = state.steps; _i < _a.length; _i++) {
                var step = _a[_i];
                step.live = Math.max(step.live - step.step, 0);
                step.alpha = Math.max(step.live - 0.25, 0);
                drawFrame(data, state, step);
                d += step.alpha + step.d;
            }
            if (state.cssBlur) {
                applyCssBlur(state.canvas, d);
            }
            removeOldFrames(state.steps);
            if (state.steps.length) {
                loop(data);
            }
        }
        registerPlugin(NAME, {
            name: NAME,
            onLoad: init,
            onFrameChanged: onFrame
        });
    })();

    (function () {
        var max = Math.max;
        var min = Math.min;
        var NAME = 'ease';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function getOption(data, name, fallback) {
            return data[name] || fallback;
        }
        function init(e, data) {
            var state = getState$$1(data);
            state.maxSamples = max(getOption(data, 'easeMaxSamples', 5), 0);
            state.damping = max(min(getOption(data, 'easeDamping', 0.9), 0.999), 0);
            state.abortTime = max(getOption(data, 'easeAbortTime', 250), 16);
            state.updateTime = max(getOption(data, 'easeUpdateTime', data.frameTime), 16);
            state.samples = [];
            state.steps = [];
        }
        function update(e, data) {
            if (is(data, 'dragging')) {
                killLoop(data);
                sampleInput(data);
            }
        }
        function end(e, data) {
            var state = getState$$1(data);
            var samples = state.samples;
            var last;
            var lanes = 0;
            var frames = 0;
            var time = 0;
            for (var _i = 0, samples_1 = samples; _i < samples_1.length; _i++) {
                var sample = samples_1[_i];
                if (!last) {
                    last = sample;
                    continue;
                }
                var dt = sample.time - last.time;
                if (dt > state.abortTime) {
                    lanes = frames = time = 0;
                    return killLoop(data);
                }
                frames += sample.frame - last.frame;
                lanes += sample.lane - last.lane;
                time += dt;
                last = sample;
            }
            samples.length = 0;
            if (!time) {
                return;
            }
            state.lane = data.lane;
            state.lanes = 0;
            state.laneStep = lanes / time * state.updateTime;
            state.frame = data.frame;
            state.frames = 0;
            state.frameStep = frames / time * state.updateTime;
            loop(data);
        }
        function sampleInput(data) {
            var state = getState$$1(data);
            // add a new sample
            state.samples.push({
                time: new Date().getTime(),
                frame: data.frame,
                lane: data.lane
            });
            // drop old samples
            while (state.samples.length > state.maxSamples) {
                state.samples.shift();
            }
        }
        function killLoop(data) {
            var state = getState$$1(data);
            if (state.handler != null) {
                window.clearTimeout(state.handler);
                state.handler = null;
            }
        }
        function loop(data) {
            var state = getState$$1(data);
            state.handler = window.setTimeout(function () { tick(data); }, state.updateTime);
        }
        function tick(data) {
            var state = getState$$1(data);
            state.lanes += state.laneStep;
            state.frames += state.frameStep;
            state.laneStep *= state.damping;
            state.frameStep *= state.damping;
            var frame = Math.floor(state.frame + state.frames);
            var lane = Math.floor(state.lane + state.lanes);
            updateFrame(data, frame, lane);
            if (is(data, 'dragging')) {
                killLoop(data);
            }
            else if (Math.abs(state.frameStep) > 0.005 || Math.abs(state.laneStep) > 0.005) {
                loop(data);
            }
            else {
                killLoop(data);
            }
        }
        registerPlugin(NAME, {
            name: NAME,
            onLoad: init,
            mousemove: update,
            mouseup: end,
            mouseleave: end,
            touchmove: update,
            touchend: end,
            touchcancel: end
        });
    })();

    (function () {
        var NAME = 'gallery';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function getOption(data, name, fallback) {
            return data[name] || fallback;
        }
        function load(e, data) {
            var state = getState$$1(data);
            state.images = [];
            state.offsets = [];
            state.frame = data.frame;
            state.speed = getOption(data, 'gallerySpeed', 500);
            state.opacity = getOption(data, 'galleryOpacity', 0.25);
            state.stage = getOption(data, 'galleryStage', $$1('<div></div>'));
            state.stage.empty().addClass('gallery-stage').prependTo(data.stage);
            var size = 0;
            for (var _i = 0, _a = data.images; _i < _a.length; _i++) {
                var image = _a[_i];
                var naturalSize$$1 = naturalSize(image);
                var scale = data.height / naturalSize$$1.height;
                var img = $$1(image);
                state.stage.append(img);
                state.images.push(img);
                state.offsets.push(-size + (data.width - image.width * scale) / 2);
                size += data.width;
                img.css({
                    'max-width': 'initial',
                    opacity: state.opacity,
                    width: data.width,
                    height: data.height
                });
            }
            var innerSize = getInnerSize(data);
            var outerSize = data.responsive ? getComputedSize(data) : getOuterSize(data);
            var layout = getInnerLayout(data.sizeMode, innerSize, outerSize);
            state.stage.css(layout).css({ width: size, left: state.offsets[state.frame] });
            state.images[state.frame].animate({ opacity: 1 }, { duration: state.speed });
        }
        function draw(e, data) {
            var state = getState$$1(data);
            var input = getInputState(data);
            var isDragging = is(data, 'dragging');
            if (state.frame !== data.frame && !isDragging) {
                state.stage.stop(true, false).animate({ left: state.offsets[data.frame] }, { duration: state.speed });
                state.images[state.frame].animate({ opacity: state.opacity }, { duration: state.speed });
                state.frame = data.frame;
                state.images[state.frame].animate({ opacity: 1 }, { duration: state.speed });
                state.stage.animate({ left: state.offsets[state.frame] });
            }
            else if (isDragging || state.dX !== input.dX) {
                state.dX = input.dX;
                state.ddX = input.ddX;
                state.stage.stop(true, true).css({ left: state.offsets[state.frame] + state.dX });
            }
        }
        registerPlugin(NAME, {
            name: NAME,
            onLoad: load,
            onDraw: draw
        });
    })();

    (function () {
        var NAME = 'panorama';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function onLoad(e, data) {
            var state = getState$$1(data);
            var sprite = data.metrics[0];
            if (!sprite) {
                return;
            }
            if (data.orientation === 'horizontal') {
                state.scale = data.target.innerHeight() / sprite.sampledHeight;
                data.frames = sprite.sampledWidth;
            }
            else {
                state.scale = data.target.innerWidth() / sprite.sampledWidth;
                data.frames = sprite.sampledHeight;
            }
            var width = Math.floor(sprite.sampledWidth * state.scale);
            var height = Math.floor(sprite.sampledHeight * state.scale);
            data.stage.css({
                'background-image': "url(" + data.source[sprite.id] + ")",
                'background-repeat': 'repeat-both',
                // set custom background size to enable responsive rendering
                '-webkit-background-size': width + "px " + height + "px",
                '-moz-background-size': width + "px " + height + "px",
                '-o-background-size': width + "px " + height + "px",
                'background-size': width + "px " + height + "px" /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */
            });
        }
        function onDraw(e, data) {
            var state = getState$$1(data);
            var px = data.orientation === 'horizontal' ? 1 : 0;
            var py = px ? 0 : 1;
            var offset = data.frame % data.frames;
            var left = Math.round(px * offset * state.scale);
            var top = Math.round(py * offset * state.scale);
            data.stage.css({ 'background-position': left + "px " + top + "px" });
        }
        registerPlugin(NAME, {
            name: NAME,
            onLoad: onLoad,
            onDraw: onDraw
        });
    })();

    (function () {
        var NAME = 'zoom';
        function getState$$1(data) {
            return getPluginState(data, NAME);
        }
        function getOption(data, name, fallback) {
            return name in data ? data[name] : fallback;
        }
        function onInit(e, data) {
            var state = getState$$1(data);
            state.source = getOption(data, 'zoomSource', data.source);
            state.useWheel = getOption(data, 'zoomUseWheel', false);
            state.useClick = getOption(data, 'zoomUseClick', true);
            state.pinFrame = getOption(data, 'zoomPinFrame', true);
            state.doubleClickTime = getOption(data, 'zoomDoubleClickTime', 500);
            state.stage = state.stage || $$1("<div class='zoom-stage'></div>");
            state.stage.css({
                width: '100%',
                height: '100%',
                top: 0,
                left: 0,
                bottom: 0,
                right: 0,
                position: 'absolute'
            })
                .appendTo(data.target)
                .hide();
        }
        function onDestroy(e, data) {
            var state = getState$$1(data);
            if (state.stage) {
                state.stage.remove();
                delete state.stage;
            }
        }
        function updateInput$$1(e, data) {
            var state = getState$$1(data);
            if (!state.stage.is(':visible')) {
                return;
            }
            e.preventDefault();
            if (state.pinFrame) {
                // hack into drag/move module and disable dragging
                // prevents frame change during zoom mode
                flag(data, 'dragging', false);
            }
            // grab touch/cursor position
            var cursor = getCursorPosition(e);
            // normalize cursor position into [0:1] range
            var x = cursor.x / data.width;
            var y = cursor.y / data.height;
            if (state.oldX == null) {
                state.oldX = x;
                state.oldY = y;
            }
            if (state.currentX == null) {
                state.currentX = x;
                state.currentY = y;
            }
            // calculate move delta since last frame and remember current position
            var dx = x - state.oldX;
            var dy = y - state.oldY;
            state.oldX = x;
            state.oldY = y;
            // invert drag direction for touch events to enable 'natural' scrolling
            if (e.type.match(/touch/)) {
                dx = -dx;
                dy = -dy;
            }
            // accumulate display coordinates
            state.currentX = clamp(state.currentX + dx, 0, 1);
            state.currentY = clamp(state.currentY + dy, 0, 1);
            updateFrame(data, data.frame, data.lane);
        }
        function onClick(e, data) {
            var state = getState$$1(data);
            if (!state.useClick) {
                return;
            }
            e.preventDefault();
            // simulate double click
            var clickTime = new Date().getTime();
            if (!state.clickTime) {
                // on first click
                state.clickTime = clickTime;
                return;
            }
            // on second click
            var timeDelta = clickTime - state.clickTime;
            if (timeDelta > state.doubleClickTime) {
                // took too long, back to first click
                state.clickTime = clickTime;
                return;
            }
            // on valid double click
            state.clickTime = undefined;
            if (toggleZoom(data)) {
                updateInput$$1(e, data);
            }
        }
        function onMove(e, data) {
            var state = getState$$1(data);
            if (state.stage.is(':visible')) {
                updateInput$$1(e, data);
            }
        }
        function onDraw(e, data) {
            var state = getState$$1(data);
            // calculate the frame index
            var index = data.lane * data.frames + data.frame;
            // get the zoom image. Use original frames as fallback. This won't work for sprite sheets
            var source = state.source[index];
            var spec = findSpecs(data.metrics, data.frames, data.frame, data.lane);
            // get display position
            var x = state.currentX;
            var y = state.currentY;
            // fallback to centered position
            if (x == null) {
                x = state.currentX = 0.5;
                y = state.currentY = 0.5;
            }
            if (source) {
                // scale up from [0:1] to [0:100] range
                x = Math.floor(x * 100);
                y = Math.floor(y * 100);
                // update background image and position
                state.stage.css({
                    'background-repeat': 'no-repeat',
                    'background-image': "url('" + source + "')",
                    'background-position': x + "% " + y + "%"
                });
            }
            else if (spec.sheet && spec.sprite) {
                var sprite = spec.sprite;
                var sheet = spec.sheet;
                var src = data.source[sheet.id];
                var left = -Math.floor(sprite.sampledX + x * (sprite.sampledWidth - data.width));
                var top_1 = -Math.floor(sprite.sampledY + y * (sprite.sampledHeight - data.height));
                var width = sheet.sampledWidth;
                var height = sheet.sampledHeight;
                state.stage.css({
                    'background-image': "url('" + src + "')",
                    'background-position': left + "px " + top_1 + "px",
                    'background-repeat': 'no-repeat',
                    // set custom background size to enable responsive rendering
                    '-webkit-background-size': width + "px " + height + "px",
                    '-moz-background-size': width + "px " + height + "px",
                    '-o-background-size': width + "px " + height + "px",
                    'background-size': width + "px " + height + "px" /* Chrome, Firefox 4+, IE 9+, Opera, Safari 5+ */
                });
            }
        }
        function toggleZoom(data) {
            var state = getState$$1(data);
            if (!state.stage) {
                throw new Error('zoom module is not initialized or is not available.');
            }
            if (state.stage.is(':visible')) {
                showZoom(data);
            }
            else {
                hideZoom(data);
                return true;
            }
            return false;
        }
        function showZoom(data) {
            var state = getState$$1(data);
            state.stage.fadeOut();
            data.stage.fadeIn();
        }
        function hideZoom(data) {
            var state = getState$$1(data);
            state.stage.fadeIn();
            data.stage.fadeOut();
        }
        function wheel(e, data) {
            var state = getState$$1(data);
            if (!data.loading && state.useWheel) {
                var we = e.originalEvent;
                var signY = we.deltaY === 0 ? 0 : we.deltaY > 0 ? 1 : -1;
                if (typeof state.useWheel === 'number') {
                    signY *= state.useWheel;
                }
                if (state.stage.is(':visible') && signY > 0) {
                    e.preventDefault();
                    showZoom(data);
                }
                if (!state.stage.is(':visible') && signY < 0) {
                    e.preventDefault();
                    hideZoom(data);
                }
            }
        }
        registerPlugin(NAME, {
            name: NAME,
            mousedown: onClick,
            touchstart: onClick,
            mousemove: onMove,
            touchmove: onMove,
            wheel: wheel,
            onInit: onInit,
            onDestroy: onDestroy,
            onDraw: onDraw
        });
        extendApi({
            toggleZoom: function () { toggleZoom(this.data); } // tslint:disable-line
        });
    })();

    var Utils = {
        $: $$1,
        bind: bind,
        clamp: clamp,
        detectSubsampling: detectSubsampling,
        error: error,
        findSpecs: findSpecs,
        getComputedSize: getComputedSize,
        getCursorPosition: getCursorPosition,
        getInnerLayout: getInnerLayout,
        getInnerSize: getInnerSize,
        getOuterSize: getOuterSize,
        isFunction: isFunction,
        log: log,
        measure: measure,
        naturalSize: naturalSize,
        noop: noop$1,
        pixelRatio: pixelRatio,
        preload: preload,
        prevent: prevent,
        sourceArray: sourceArray,
        toArray: toArray,
        unbind: unbind,
        warn: warn,
        wrap: wrap
    };

    exports.Utils = Utils;
    exports.sourceArray = sourceArray;
    exports.Api = Api;
    exports.extendApi = extendApi;
    exports.instances = instances;
    exports.applyEvents = applyEvents;
    exports.boot = boot;
    exports.create = create;
    exports.createOrUpdate = createOrUpdate;
    exports.destroy = destroy;
    exports.namespace = namespace;
    exports.eventNames = eventNames;
    exports.callbackNames = callbackNames;
    exports.eventsToPrevent = eventsToPrevent;
    exports.defaults = defaults;
    exports.getInputState = getInputState;
    exports.updateInput = updateInput;
    exports.resetInput = resetInput;
    exports.applyLayout = applyLayout;
    exports.getPlaybackState = getPlaybackState;
    exports.updateFrame = updateFrame;
    exports.stopAnimation = stopAnimation;
    exports.applyAnimation = applyAnimation;
    exports.startAnimation = startAnimation;
    exports.registerPlugin = registerPlugin;
    exports.registerModule = registerModule;
    exports.getPlugin = getPlugin;
    exports.applyPlugins = applyPlugins;
    exports.getState = getState;
    exports.getPluginState = getPluginState;
    exports.is = is;
    exports.flag = flag;

    Object.defineProperty(exports, '__esModule', { value: true });

})));
//# sourceMappingURL=spritespin.js.map;
$(document).ready(function () {
  GoogleAnalyticsRepo.init();
	Accordion.init();
	Cart.init();
	Checkout.init();
	CurrencyFormat.init();
	Login.init();
    Manuals.init();
    ProductPage.init();
    PartnerWeb.init();
    Dofc.init();
	Products.init();
	Search.init();
	Navigation.init();
	ServicePage.init();
	VideoBlock.init();
	CookieConsent.init();
	FAQ.init();
	Forms.init();
    Newsletter.init();
    OrderConfirmation.init();
    LinkCollection.init();
    StoreLocatorBlock.init();
    Compare.init();
    ModularFinance.init();
    Care.init();
    MarketingPopup.init();
    Carousel.init();
    UI.init();
    Sappa.init();
    FaqSearch.init();
    SoftwareUpdates.init();
    LegalInfo.init();
    Spritespin.init();
    Registration.init();
    LazyLoad.init();
    BlogCategory.init();
    Teaser.init();
});;
var Accordion = {
    init: function () {
        if ($('.accordion').length) {
            this.bind();
        }
    },
    bind: function () {

        var accordions = $('.accordion');
        $.each(accordions, function () {
            if ($(this).find('.accordion-list-item-header').length) {
                $(this).find('.accordion-header').addClass('accordion-enabled');
            }
        });

        $('.accordion-list-item-header').on('click', function () {
            Accordion.toggle(this);
        });

        $('.accordion-enabled').on('click', function () {
            Accordion.toggle($(this).parent().find('.accordion-list-item-header')[0]);
        });
    },
    toggle: function (el) {
        var parent = $(el).parent();
        var content = $(parent).find('.accordion-list-item-content');
        if ($(parent).hasClass('open')) {
            $(parent).removeClass('open');
            $(parent).addClass('closed');
            $(content).slideUp();
        } else {
            $(parent).addClass('open');
            $(parent).removeClass('closed');
            $(content).slideDown();
        }

        var imageContainerId = $(el).attr('data-image-id');
        if (imageContainerId != "") {
            var imageUrl = $(el).attr('data-image');
            $imageContainer = $('.accordion-image[data-id="' + imageContainerId + '"]');
            var defaultImageUrl = $imageContainer.attr('data-image');

            
            if (imageUrl != "") {
                $imageContainer.find('img').attr('src', imageUrl);
                console.log(imageUrl);
            } else {
                if (defaultImageUrl != "") {
                    $imageContainer.find('img').attr('src', defaultImageUrl);
                    console.log(defaultImageUrl);
                }
            }
        }
    }
};;
var Cart = {
  CartName: "",
  init: function () {
    $(document).on('click', '.js-add-to-cart', Cart.addCartItem);
    $(document).on('click', '.js-care-add-order', Cart.addCareCartItem);
    if ($('header').hasClass('care'))
        Cart.CartName = "care";

    Cart.bindCartUpdate();
  },
  bindCartUpdate: function () {
    $('.cart-subtraction-button').off().on('click', function () {
      Cart.changeCartItem(this, -1);
    });

      $('.cart-addition-button').off().on('click', function () {
      Cart.changeCartItem(this, 1);
    });

      $('.cart-remove-button').off().on('click', function () {
      Cart.removeCartItem(this);
      });

      //console.log("bind");

      //$('.js-add-voucher').off().on('click', Checkout.addVoucher);
      //$('.js-add-voucher').off().on('blur', Checkout.resetVoucher);
      $('.js-remove-voucher').on('click', function () {
          Checkout.removeVoucher(this);
      });

      $('.js-add-voucher').on('click', function () {

      });


      $('.mobile-cart-button').off().on('click', function () {
          showMobileCart();
      });

      $('.mobile-popup-close').off().on('click', function () {
          hideMobileCart();
      });
  },
  changeCartItem: function (e, quantity) {

    var product = $(e).closest(".product-block"),
      shipmentId = product.data("shipment-id"),
      productName = product.data("product-name"),
      productCode = product.data("product-code"),
      productQuantity = product.find('.cart-line-amount').val(),
      qty = productQuantity;


    productQuantity = parseInt(productQuantity) + quantity;
    product.find('.cart-line-amount').val(productQuantity);

    Checkout.resetPayment();

    if (productQuantity == 0) {
      $(product).remove();
    }

      $('.checkout-cart').addClass('locked');
      var market = $('.checkout').data('marketiso');

      var uri = "/Cart/ChangeCartItem";
      if (Cart.CartName == "care")
          uri = "/Cart/ChangeCareCartItem";

    $.ajax({
      type: "POST",
      url: uri,
      data: {
        shipmentId: shipmentId,
        code: productCode,
        quantity: productQuantity,
        size: null,
        newSize: null,
        displayName: productName,
        market: market
      },
      success: function (result) {
        $('.cart-block').html($(result).html());
        Cart.bindCartUpdate();
        Checkout.updateShippingCosts();
          $('.checkout-cart').removeClass('locked');

          cartChanged();

          $.ajax({
              type: "POST",
              url: "/Cart/MobileCartUpdateV2",
              data: {
                  market: market
              },
              success: function (result) {
                  $('.mobile-cart-inner .mobile-cart-details').html(result);
              }
          });


        Cart.updateHeaderCartsFromLargeCart();
          Checkout.resetCloverPayment();
          Checkout.resetWorldPayPayment();

        if (quantity === 1) {
          GoogleAnalyticsRepo.cartAdd(
            productCode,
            productName,
            product.data('price'),
            1,
            $('.checkout-cart').data('currency'),
            product.data('category'),
            product.data('variant'));
        }
        else if (quantity === -1) {
          GoogleAnalyticsRepo.cartRemove(
            productCode,
            productName,
            product.data('price'),
            1,
            $('.checkout-cart').data('currency'),
            product.data('category'),
            product.data('variant'));
        }
        else if (quantity === -1000) {
          GoogleAnalyticsRepo.cartRemove(
            productCode,
            productName,
            product.data('price'),
            parseInt(qty),
            $('.checkout-cart').data('currency'),
            product.data('category'),
            product.data('variant'));
        }

        if ($('.product-block').length < 1) {
          window.location.href = window.location.href;
        }
      }
    });
  },
  refreshCart: function () {
      Checkout.resetPayment();
      $('.checkout-cart').addClass('locked');
      var market = $('.checkout').data('marketiso');

      $.ajax({
          type: "POST",
          url: "/Cart/LargeCartV2",
          data: {
              market: market
          },
          success: function (result) {
              $('.cart-block').html($(result).html());
              Cart.bindCartUpdate();
              $('.checkout-cart').removeClass('locked');

              Cart.updateHeaderCartsFromLargeCart();
              Checkout.resetCloverPayment();
              Checkout.resetWorldPayPayment();
            }
      });

      $.ajax({
          type: "POST",
          url: "/Cart/MobileCartUpdateV2",
          data: {
              market: market
          },
          success: function (result) {
              $('.mobile-cart-inner div').html($(result).html());
          }
      });
  },
  removeCartItem: function (el) {
    Cart.changeCartItem(el, -1000);
    $(el).parent().find('.cart-line-amount').val(0);
    },
    addCareCartItem: function (e) {
        var sku = $(this).parent().data("code");
        var market = $('.checkout').data('marketiso');
        $('.checkout-cart-wrapper').addClass("locked");
      $.ajax({
          type: "POST",
          url: "/Cart/AddToCart",
          data: {
              code: sku,
              market: market,
              cart: "care"
          },
          success: function (result) {
              Cart.refreshCareCart();
          },
          error: function (xhr, status, error) {
              $('.checkout-cart-wrapper').removeClass("locked");
          }
      });
  },
  refreshCareCart: function () {
      var market = $('.checkout').data('marketiso')
      $.ajax({
          type: "GET",
          url: "/Cart/CareCart",
          data: {
              market: market
          },
          success: function (result) {
              $('.care-cart').html(result);
              Cart.bindCartUpdate();
              $('.checkout-cart-wrapper').removeClass("locked");
          }
      });
  },
  addCartItem: function (e) {
    $(this).prop('disabled', true);
    e.preventDefault();
    var form = $(this).closest("form"),
      formContainer = $("#" + form.data("container")),
      skuCode = $("#code", form).val(),
      $addToCartBtn = $(this);

    $("#CartWarningMessage").hide();
    $(".warning-message", $("#CartWarningMessage")).html("");
      var market = $('.product-page').data('marketiso');

      var showRecommend = $(this).hasClass("show-recommend");

    $.ajax({
      type: "POST",
      url: "/Cart/AddToCart",
        data: {
            code: skuCode,
            market: market,
            cart: "" //Cart.CartName
        },
      success: function (result) {
        formContainer.html($(result));

        var $navigationCounterLabels = $('.cartItemCountLabel');

        var count = $('#CartItemCount').val();
          if (count != undefined) {
              count = parseInt(count);
          } else {
              count = 0;
          }

        $navigationCounterLabels.each(function() {
          $(this).text(count);
        });

          if (showRecommend) {
              setTimeout(Cart.scrollToTop, 500);
              setTimeout(Cart.showCrossSell, 900);
          }

        Cart.showGoToCartBtn($addToCartBtn);
        Cart.trackCartAdd();
      },
      error: function (xhr, status, error) {
        $(".warning-message", $("#CartWarningMessage")).html(xhr.statusText);
        $("#CartWarningMessage").show();
        $addToCartBtn.prop('disabled', false);
      }
    });
    },
    scrollToTop: function () {
        window.scrollTo({ top: 0, behavior: 'smooth' });
    },
    showCrossSell: function () {
    $('.cross-sell').slideToggle('slow');
},
  addCartItemByCode: function (code) {
    $.ajax({
      type: "POST",
      url: "/Cart/AddToCart",
      data: { code: code },
      success: function (result) {
        console.log("Added to cart");
      },
      error: function (xhr, status, error) {
        console.log(xhr.statusText);
      }
    });
  },
  preventSubmit: function (e) {
    if (e.keyCode === 13)
      e.preventDefault();
  },
  showGoToCartBtn: function ($addToCartBtn) {
    var $goToCartBtn = $addToCartBtn.next('.go-to-cart'),
      addToCartBtn = $addToCartBtn.get(0),
      addToCartBtnTextElement = addToCartBtn.firstChild,
      addToCartBtnText = addToCartBtn.innerText || addToCartBtn.textContent;

    if ($goToCartBtn.length > 0) {
      $addToCartBtn.addClass('added-to-cart');
      $goToCartBtn.css('visibility', 'visible');
      $goToCartBtn.css('opacity', 1);
        console.log($addToCartBtn);
        if ($addToCartBtn.hasClass('js-display-block')) {
          $goToCartBtn.css('display', 'block');
      }
      addToCartBtnTextElement.nodeValue = $addToCartBtn.data('success-text');
      setTimeout(function () {
        $addToCartBtn.removeClass('added-to-cart');
        addToCartBtnTextElement.nodeValue = addToCartBtnText;
        $addToCartBtn.prop('disabled', false);
      }, 5000);
    }
    else {
      $addToCartBtn.addClass('added-to-cart');
      addToCartBtnTextElement.nodeValue = $addToCartBtn.data('success-text');
      setTimeout(function () {
        $addToCartBtn.removeClass('added-to-cart');
        addToCartBtnTextElement.nodeValue = addToCartBtnText;
        $addToCartBtn.prop('disabled', false);
      }, 1500);
      }

      var $responseBanner = $('.response-cart-button-banner');
      if ($responseBanner.length > 0) {
          $responseBanner.show();
      }
  },
  trackCartAdd: function () {
    var $page = $('.product-page'),
          $selectedVariant = $('.js-variation-switch.selected');

      var variant = $selectedVariant.data('key');
      if (variant != null) {
          variant = $selectedVariant.data('key').toLowerCase();
      }

    GoogleAnalyticsRepo.cartAdd(
      $page.data('sku'),
      $page.data('name'),
      $page.data('price'),
      1,
      $page.data('currency'),
      $page.data('category'),
      variant
    );
  },
  updateHeaderCartsFromLargeCart: function() {
    var $lineItemCounters = $('input.cart-line-amount'),
      $navigationCounterLabels = $('.cartItemCountLabel'),
      totalCount = 0;
    $lineItemCounters.each(function () {
      totalCount += parseInt($(this).val());
    });
    $navigationCounterLabels.each(function () {
      $(this).text(totalCount.toString());
    });
  }
};;
var Care = {
    init: function () {

        if ($('.care-issue-form').length)
            Care.bindIssueForm();

        if ($('.care-order-list').length)
            Care.bindOrderList();
    },
    bindOrderList: function () {
        /*
        $('.js-care-order-list-show').on('click', function () {
            $container = $(this).parent().find('.care-order-list-section-inner');
            $container.toggle();
            if ($container.css('display') !== 'none') {
                $(this).html($(this).data('hide-label'));
            } else {
                $(this).html($(this).data('show-label'));
            }

        });
        */

        $('.care-order-list-row.haschildren .care-order-list-item-name').on('click', function () {
            $row = $(this).parent().parent(); 
            if ($row.hasClass('closed')) {
                $row.addClass('open');
                $row.removeClass('closed')
            } else {
                $row.addClass('closed');
                $row.removeClass('open')
            }
        });
    },
    bindIssueForm: function () {
        $('.js-care-issue-form').on('click', function () {
            Care.submitIssueForm();
        });
    },
    submitIssueForm: function () {

        Care.validateIssueForm();
        $('.approval-checkbox').removeClass('error');

        if ($('.error').length > 0) {
            Checkout.scrollToError();
            return false;
        }

        var isApproved = $('#approval').is(':checked');
        if (!isApproved) {
            $('.approval-checkbox .full-size').addClass('error');
            return false;   
        }

        $('.care-issue-form').addClass('locked');

        $form = $('.care-issue-form');
        var firstName = $form.find('#FirstName').val();
        var lastName = $form.find('#LastName').val();
        var email = $form.find('#Email').val();
        var country = $form.find('#Country').val();
        var company = $form.find('#Company').val();
        var recepient = $form.data('recepient');
        var uri = "/careapi";

        $.ajax({
            url: uri,
            type: "POST",
            data: { firstName: firstName, lastName: lastName, email: email, country: country, company: company, recepient: recepient },
            success: function (result) {
                $('.care-issue-thankyou').show();
                $('.care-issue-form').hide();

                $([document.documentElement, document.body]).animate({
                    scrollTop: $('.care-issue-thankyou').offset().top - $('header').height() - 100
                }, 1000);
            }
        });
    },
    validateIssueForm: function () {
        Checkout.validateReset();
        Checkout.validateEmpty('.care-issue-form');
    },
    submitForm: function () {
        var validation = $('.care-order-form').data('validation');

        if (validation == "True") {
            $('.js-recaptcha-error').hide();

            var token = grecaptcha.getResponse();
            var uri = "/recaptchaapi";
            $.ajax({
                url: uri,
                type: "POST",
                async: false,
                data: { token: token },
                success: function (result) {
                    if (result == "True") {

                        Care.validateForm();
                        if ($('.error').length < 1) {
                            $('.checkout').addClass('locked');
                            $('#orderform').attr('onsubmit', '');
                            $('#orderform').off('submit').submit();
                            return true;
                        } else {
                            Checkout.scrollToError();
                        }
                        return false;
                    }
                    else
                    {
                        $('.js-recaptcha-error').show();
                        return false;
                    }
                }
            });
        }
        else
        {
            Care.validateForm();
            if ($('.error').length < 1) {
                $('.checkout').addClass('locked');
                return true;
            } else {
                Checkout.scrollToError();
            }
            return false;
        }

        return false;
    },
    validateForm: function () {
        Checkout.validateReset();
        Checkout.validateEmpty('.billing-address');
        Checkout.validateEmail('.billing-address');
        Checkout.validatePhone('.billing-address');
        Checkout.validateNonNumericField('.billing-address');
    },
};;
var Checkout = {
    countryCode: "SE", 
    countryName: 'Sweden',
    showPaymentTracked: false,
    showOptionsTracked: false,
    init: function () {
        if ($('.checkout').length) {
          this.bind();
          this.trackCheckoutEntered();
        }
    },
    bind: function () {
        var _paq = _paq || [];
        _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View payment page']);

        $('.js-checkout-payment').on('click', function () {

            _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Proceed to payment']);

            Checkout.validateForm();
            if ($('.error').length < 1) {
                Checkout.disablePayment();
                Checkout.showPayment();
            } else {
                Checkout.scrollToError();
            }
        });

        $('#BillingAddress_FirstName').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - First Name']);
                console.log("CHANGED");
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_LastName').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Last name']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_Line1').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Street']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_Line2').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Optional']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_PostalCode').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Postal code']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_City').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - City']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_Email').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Email']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#BillingAddress_DaytimePhoneNumber').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Phone']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('#voucher-code').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Discount code']);
            }
            $(this).attr('data-last', $(this).val());
        });


        $('#BillingAddress_DaytimePhoneNumber').off().on('blur', function () {
            var current = $(this).attr('data-last');
            if (current != $(this).val()) {
                _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - Phone']);
                Checkout.disablePayment();
            }
            $(this).attr('data-last', $(this).val());
        });

        $('.js-payment-methods-radio').on('click', function () {
            Checkout.initPayment(this);
            _paq.push(['trackEvent', 'Tunnel', 'Step 3', 'View Payment page - payment method']);
        });

        $('.js-checkout-payment-ipg').off().on('click', function () {
            Checkout.initCloverPayment();
        });

        $('.js-checkout-payment-worldpay').off().on('click', function () {

            Checkout.validateForm();
            if ($('.error').length < 1) {
                Checkout.disablePayment();
                Checkout.initWorldPayPayment();
            } else {
                Checkout.scrollToError();
            }
        });

        $('.js-checkout-payment-paytia').off().on('click', function () {
            Checkout.initPaytiaPayment();
        });

        $('#useShippingAddress').on('click', function () {
            $('.shipping-address').toggle();
        });

        $('.customer-info-block input[type="text"]').on('blur', function () {
            Checkout.validateField(this);
        });

        $('.customer-info-block input[type="text"]').on('change', function () {
            Checkout.resetPayment();
        });

        $('.js-add-voucher').off().on('click', Checkout.addVoucher);
        $('.js-add-voucher').off().on('blur', Checkout.resetVoucher);
        $('.js-remove-voucher').on('click', function () {
            Checkout.removeVoucher(this);
        });

        $('#useShippingAddress').on('change', Checkout.resetPayment);


        $('.js-checkout-paytia-waiting').on('click', Checkout.hidePaytiaWaiter);

        this.countryCode = $('.checkout').data('marketid');
        this.countryName = $('.checkout').data('market');

        $('.shipping-wrapper .shipping-method').off().on('click', function () {
            if ($(this).find('input').prop("checked") == false) {
                Checkout.updateShippingCosts($(this).find('input').val());
            }
            $(this).find('input').prop("checked", true);
        });


        $('.validate-zipcode').on('blur', function () {
            Checkout.validateZipCode('.billing-address');
        });
    },
    validatePayment: function () {
        Checkout.validateForm();
        $('.payment-terms-information').css('display', 'none');
        if ($('.error').length < 1) {
            Checkout.disablePayment();

            if ($('#terms').prop('checked')) {
                return true;
            }
            else {
                $('.payment-terms-information').css('display', 'block');
                return false;
            }
        } else {
            Checkout.scrollToError();
            return false;
        }
    },
    updateShippingCosts: function (method) {
        var uri = $('.checkout').data('url') + "ShippingOptions";
        $('.shipping-wrapper').addClass('locked');

        $.ajax({
            type: "POST",
            url: uri,
            data: {method: method },
            success: function (data) {
                $('.shipping-wrapper').html(data);
                $('.shipping-wrapper').removeClass('locked');

                Checkout.resetPayment();
                Cart.refreshCart();

                $('.shipping-wrapper .shipping-method').off().on('click', function () {
                    if ($(this).find('input').prop("checked") == false) {
                        Checkout.updateShippingCosts($(this).find('input').val());
                    }
                    $(this).find('input').prop("checked", true);
                });
            }
        });
    },
    removeVoucher: function (el) {
        var code = $(el).parent().attr('data-code');
        Checkout.updateVoucher(code, 'RemoveCouponCode');
    },
    resetVoucher: function () {
        var code = $('#voucher-code').val();
        if (code == "") {
            $('.voucher-error').hide();
        }
    },
    addVoucher: function () {
        var code = $('#voucher-code').val();
        
        if (code == "") {
            $('.voucher-error').show();
        } else {
            //UI.startLoader('.js-add-voucher');
            Checkout.updateVoucher(code, 'AddCouponCode');
        }
    },
    updateVoucher: function (code, method) {
        var data = JSON.stringify({
            'currentPage': new Object(),
            'couponCode': code
        });

        var uri = $('.checkout').data('url') + method;

        $('.voucher-error').hide();
        $('.voucher-block').addClass('locked');

        $.ajax({
            type: "POST",
            url: uri,
            data: data,
            success: function (data) {
                if ((data.trim() == '') && (method == 'AddCouponCode')) {
                    $('.voucher-error').show();
                } else {
                    $('.voucher-applied-codes').html(data);
                    $('#voucher-code').val('');
                    Cart.refreshCart();
                }
                UI.stopLoader('.js-add-voucher');
                $('.voucher-block').removeClass('locked');

                $('.js-remove-voucher').on('click', function () {
                    Checkout.removeVoucher(this);
                });
            },
            contentType: 'application/json'
        });
    },
    getLineItemsTrackingData: function() {
    var lineItems = [],
      $lineItems = $('.product-block');

        $lineItems.each(function () {
            try {
                var lineItem = {},
                    $lineItem = $(this);

                lineItem.id = $lineItem.data('product-code').toString();
                lineItem.name = $lineItem.data('product-name');
                lineItem.category = $lineItem.data('category');
                lineItems.push(lineItem);
            }
            catch (e) { }
        });
    return lineItems;
  },
  trackCheckoutEntered: function() {
    var lineItems = Checkout.getLineItemsTrackingData();
    GoogleAnalyticsRepo.checkoutEntered(lineItems);
  },
  trackPaymentOption: function(paymentBrand) {
    var lineItems = Checkout.getLineItemsTrackingData();
    GoogleAnalyticsRepo.checkoutPaymentOption(paymentBrand, lineItems);
    },
    trackShowPayment: function () {
        var lineItems = Checkout.getLineItemsTrackingData();
        GoogleAnalyticsRepo.checkoutShowPayment("", lineItems);
    },
    scrollToError: function () {
        var firstError = $('.error')[0];
        $([document.documentElement, document.body]).animate({
            scrollTop: $(firstError).offset().top - $('header').height() - 100
        }, 1000);
    },
    resetPayment: function () {
        $(".js-checkout-payment").show();
        $(".payment-methods").hide();
        $('.checkout-payment-window iframe').attr('src', '');
        $('.payment-methods-radio').prop('checked', false);
    },
    resetCloverPayment: function () {
        if ($('.checkout').attr('data-marketid') == "UK") {

            $('.checkout-payment').html('');
            $.ajax({
                type: "GET",
                url: "/payment/PaymentMethodSelection?market=en-gb",
                success: function (data) {
                    $('.checkout-payment').html(data);

                    $('.js-checkout-payment-ipg').off().on('click', function () {
                        Checkout.initCloverPayment();
                    });
                },
                contentType: 'application/json'
            });
        }
    },
    resetWorldPayPayment: function () {
        if ($('.checkout').attr('data-marketid') == "UK") {

            $('.checkout-payment').html('');
            $.ajax({
                type: "GET",
                url: "/payment/PaymentMethodSelection?market=en-gb",
                success: function (data) {
                    $('.checkout-payment').html(data);

                    $('.js-checkout-payment-worldpay').off().on('click', function () {
                        Checkout.initWorldPayPayment();
                    });
                },
                contentType: 'application/json'
            });
        }
    },
    initCloverPayment: function (el) {

        var uri = $('.checkout').data('url') + "InitPayment";
        var data = Checkout.getCheckoutData();
        $('.checkout-payment-error').hide();

        $.ajax({
            type: "POST",
            url: uri,
            data: data,
            success: function (data) {
                var response = JSON.parse(data);
                if (response.Success) {
                    $('#payment-form').submit();
                } else {
                    if (response.Message == "RMA") {
                        $('.checkout-payment-error').show();
                    }
                    console.log(response.Message);
                }
            },
            contentType: 'application/json'
        });
    },
    initWorldPayPayment: function (el) {

	console.log("init worldpay");
        var uri = $('.checkout').data('url') + "InitPayment";
        var data = Checkout.getCheckoutData();

        data = JSON.parse(data);
        data.cardBrand = "WorldPay";
        data.paymentMethodId = "95abc0e7-a5d6-481e-88fb-cb2fcf2a1dd5";
        data = JSON.stringify(data);

        $('.checkout-payment-error').hide();

        $.ajax({
            type: "POST",
            url: uri,
            data: data,
            success: function (data) {
                var response = JSON.parse(data);
                if (response.Success) {
                    //$('#payment-form').submit();
                    //window.open(response.Message, '_blank').focus();

                    var customOptions = {
                        url: response.Message,
                        type: 'iframe',
                        inject: 'immediate',
                        target: 'custom-html',
                        accessibility: true,
                        debug: false,
                        //flowCallback: Checkout.worldPayCallback
                    };

                    // Initialize the library and pass options
                    var libraryObject = new WPCL.Library();
                    libraryObject.setup(customOptions);

                    console.log("OK");
                } else {
                    if (response.Message == "RMA") {
                        $('.checkout-payment-error').show();
                    }
                    console.log(response.Message);
                }
            },
            contentType: 'application/json'
        });
    },
    paytiaValidate: function () {
        if (window._refId == null) {
            return;
        }

        var uri = "/paytiastatus/transactionstatus?refId=" + window._refId;
        $.ajax({
            type: "GET",
            url: uri,
            success: function (data) {
                console.log(data);

                if (data != "") {
                    var status = data.split(';')[0];
                    if (status == "OK") {
                        var url = data.split(';')[1];
                        window.location.href = url;
                    }
                }
            },
            contentType: 'application/json'
        });
    },
    initPaytiaPayment: function (el) {

        var uri = $('.checkout').data('url') + "InitPayment";
        var data = Checkout.getCheckoutData();
        $('.checkout-payment-error').hide();

        var paytiaData = JSON.parse(data);
        paytiaData.paymentMethodId = $('.js-checkout-payment-paytia').attr('data-paymentmethodid');
        paytiaData.cardBrand = "Paytia";

        data = JSON.stringify(paytiaData);
        //console.log(data);

        $.ajax({
            type: "POST",
            url: uri,
            data: data,
            success: function (data) {
                var response = JSON.parse(data);
                if (response.Success) {
                    if (response.Message.indexOf("ERR") == -1) {

                        var responseData = response.Message;
                        var url = responseData.split(";")[0];
                        window._refId = responseData.split(";")[1];
                        window._refTracker = setInterval(Checkout.paytiaValidate, 2000);

                        Checkout.showPaytiaWaiter();

                        window.open(url, "_blank");
                    }
                    else {
                        alert("Unable to initiate Paytia order. " + response.Message);
                    }
                } else {
                    if (response.Message == "RMA") {
                        $('.checkout-payment-error').show();
                    }
                    alert("Unable to initiate Paytia order. Please validate the customer information.");
                    console.log(response.Message);
                }
            },
            contentType: 'application/json'
        });
    },
    showPaytiaWaiter: function () {
        $('.checkout-payment').hide();
        $('.paytia-status').show();
    },
    hidePaytiaWaiter: function () {
        $('.checkout-payment').show();
        $('.paytia-status').hide();

        clearInterval(window._refTracker);
    },
    initPayment: function (el) {
        $(el).find('input[name="payment-method"]').prop("checked", true);

        var uri = $('.checkout').data('url') + "InitPayment";
        var data = Checkout.getCheckoutData();
        $('.checkout-payment-error').hide();

        $.ajax({
            type: "POST",
            url: uri,
            data: data,
            success: function (data) {
                var response = JSON.parse(data);
                if (response.Success) {

                    var payment = $('input[name="payment-method"]:checked');
                    var paymentBrand = $(payment).data('paymentid');

                    Checkout.showPayment(response.Message, paymentBrand);

                } else {
                    if (response.Message == "RMA") {
                        $('.checkout-payment-error').show();
                    }
                    console.log(response.Message);
                }
            },
            contentType: 'application/json'
        });
    },
    disablePayment: function () {
        $('.checkout-payment-window').hide();
        $('.checkout-payment-error').hide();

        $('#custom-html').html('');
    },
    showPayment: function (paymentId, paymentBrand) {
        $(".js-checkout-payment").hide();
        $(".payment-methods").show();

        if (paymentId !== undefined) {
            var lang = $('body').attr('data-lang');
            var uri = '/checkout/paymentwindow?id=' + paymentId + "&brand=" + paymentBrand + "&lang=" + lang;
            $('.checkout-payment-window iframe').attr('src', uri);
            $('.checkout-payment-window').show();
            iFrameResize({ log: true }, '#payment-window')
        }

        if (!Checkout.showPaymentTracked) {
            Checkout.trackShowPayment();
            Checkout.showPaymentTracked = true;
        }

        if (!Checkout.showOptionsTracked) {
            $('.payment-methods-item').on('click', function () {
                if (!Checkout.showOptionsTracked) {
                    Checkout.trackPaymentOption(paymentBrand);
                    Checkout.showOptionsTracked = true;
                }
            });
        }
    },
    getCheckoutData: function () {
        var payment = $('input[name="payment-method"]:checked');
        var paymentMethodId = $(payment).data('paymentmethodid');
        var paymentId = $(payment).data('paymentid');
        var paymentKey = $(payment).data('paymentkey');

        var shippingId = $('input[name="shipping-method"]:checked').val();
        var useBillingAddressForShipment = !$("#useShippingAddress").is(':checked');

        //shippingId = "1f5eb16a-6bd8-4021-8d7e-91c35703eb20";

        var consent = $("#consent").is(':checked');

        if (paymentMethodId == null) {
            paymentMethodId = $('#payment-form').attr('data-paymentid');
        }

        var data = JSON.stringify({
            'viewModel': new Object(),
            'paymentMethodId': paymentMethodId,
            'billingAddress': this.getAddress(),
            'shippingAddress': this.getShippingAddress(),
            'shippingMethodId': shippingId,
            'useBillingAddressForShipment': useBillingAddressForShipment,
            'cardBrand': paymentId,
            'consent': consent
        });

        return data;
    },
    getAddress: function () {
        var address = new Object();
        address.FirstName = $('#BillingAddress_FirstName').val();
        address.LastName = $('#BillingAddress_LastName').val();
        address.Email = $('#BillingAddress_Email').val();
        address.Line1 = $('#BillingAddress_Line1').val();
        address.Line2 = $('#BillingAddress_Line2').val();
        address.PostalCode = $('#BillingAddress_PostalCode').val();
        address.City = $('#BillingAddress_City').val();

        address.CountryRegion = new Object();
        address.CountryRegion.Region = Checkout.countryCode;

        address.CountryName = Checkout.countryName;
        address.countryCode = Checkout.countryCode;
        address.Organization = "";
        address.AddressId = -1;
        address.Name = "Default";
        address.BillingDefault = true;
        address.ShippingDefault = true;
        address.DaytimePhoneNumber = $('#BillingAddress_DaytimePhoneNumber').val();

        return address;
    },
    getShippingAddress: function () {
        var address = new Object();
        address.FirstName = $('#ShippingAddress_FirstName').val();
        address.LastName = $('#ShippingAddress_LastName').val();
        address.Email = ""
        address.Line1 = $('#ShippingAddress_Line1').val();
        address.Line2 = $('#ShippingAddress_Line2').val();
        address.PostalCode = $('#ShippingAddress_PostalCode').val();
        address.City = $('#ShippingAddress_City').val();

        address.CountryRegion = new Object();
        address.CountryRegion.Region = Checkout.countryCode;

        address.CountryName = Checkout.countryName;
        address.countryCode = Checkout.countryCode;
        address.Organization = "";
        address.AddressId = -1;
        address.Name = "Default";
        address.BillingDefault = true;
        address.ShippingDefault = true;
        address.DaytimePhoneNumber = "";

        return address;
    },
    validateField: function (el) {
        Checkout.validateResetField(el);
        Checkout.validateEmptyField(el);
        Checkout.validateEmailField(el);
        Checkout.validatePhoneField(el);
        Checkout.validateNonNumericField(el);
    },
    validateForm: function () {
        Checkout.validateReset();
        Checkout.validateEmpty('.billing-address');
        Checkout.validateEmail('.billing-address');
        Checkout.validatePhone('.billing-address');
        Checkout.validateNonNumericField('.billing-address');

        if ($("#useShippingAddress").is(':checked')) {
            Checkout.validateEmpty('.shipping-address');
            Checkout.validateEmail('.shipping-address');
            Checkout.validatePhone('.shipping-address');
            Checkout.validateNonNumericField('.shipping-address');
            Checkout.validateZipCode('.shipping-address');
        } else {
            Checkout.validateZipCode('.billing-address');
        }
    },
    validateZipCode: function (container) {
        var fields = $(container + ' .validate-zipcode');
        $.each(fields, function () {
            Checkout.validateZipCodeField(this);
        });
    },
    validateReset: function () {
        $('.error-label').html("");
        $('.error').removeClass("error");
    },
    validateResetField: function (el) {
        $(el).parent().find('.error-label').html("");
        $(el).parent().find('.error').removeClass("error");
        $(el).parent().removeClass("error");
    },
    validateEmpty: function (container) {
        var fields = $(container + ' .validate-empty');
        $.each(fields, function () {
            Checkout.validateEmptyField(this);
        });
    },
    validateEmail: function (container) {
        var fields = $(container + ' .validate-email');
        $.each(fields, function () {
            Checkout.validateEmailField(this);
        });
    },
    validatePhone: function (container) {
        var fields = $(container + ' .validate-phone');
        $.each(fields, function () {
            Checkout.validatePhoneField(this);
        });
    },
    validateNonNumeric: function (container) {
        var fields = $(container + ' .validate-nonnumeric');
        $.each(fields, function () {
            Checkout.validateNonNumericField(this);
        });
    },
    validateEmptyField: function (field) {
        if ($(field).hasClass('validate-empty')) {
            if ($(field).val().trim() == "") {
                if (!$(field).hasClass("error")) {
                    $(field).addClass("error");
                    $(field).parent().addClass("error");
                    Checkout.validateAddErrorMessage(field, "notempty");
                }
            }
        }
    },
    validateEmailField: function (field) {
        if ($(field).hasClass('validate-email')) {
            var value = $(field).val();
            if ((value.indexOf("@") < 0) || (value.indexOf(".") < 0)) {
                if (!$(field).hasClass("error")) {
                    $(field).addClass("error");
                    Checkout.validateAddErrorMessage(field, "notemail");
                }
            }
        }
    },
    validatePhoneField: function (field) {
        if ($(field).hasClass('validate-phone')) {
            var value = $(field).val();
            var Regex = /^[^a-zA-Z]*$/;
            if (!Regex.test(value)) {
                if (!$(field).hasClass("error")) {
                    $(field).addClass("error");
                    Checkout.validateAddErrorMessage(field, "notphone");
                }
            }
        }
    },
    validateZipCodeField: function (field) {
        if ($(field).hasClass('validate-zipcode')) {
            var value = $(field).val();

            if (value != "") {
                value = value.replace(/\s+/g, '');
                var blockedCodes = $('.js-zip-codes').html();

                var codes = blockedCodes.split(';');
                for (var x = 0; x < codes.length; x++) {
                    if (codes[x] != "") {

                        var checkCode = codes[x].toLowerCase().replace(/\s+/g, '');
                        if (value.toLowerCase().startsWith(checkCode)) {
                            $(field).addClass("error");
                            Checkout.validateAddErrorMessage(field, "blockedzipcode");
                            break;
                        }
                    }
                }

                /*
                if (blockedCodes.indexOf(value + ";") >= 0) {
                    $(field).addClass("error");
                    Checkout.validateAddErrorMessage(field, "blockedzipcode");
                }
                */
            }
        }
    },
    validateNonNumericField: function (field) {
        if ($(field).hasClass('validate-nonnumeric')) {
            var value = $(field).val();
            var Regex = /^[^0-9]*$/;
            if (!Regex.test(value)) {
                if (!$(field).hasClass("error")) {
                    $(field).addClass("error");
                    Checkout.validateAddErrorMessage(field, "nonnumeric");
                }
            }
        }
    },
    validateAddErrorMessage: function (field, key) {
        $(field).parent().find('.error-label').html(Checkout.validateGetErrorMessage(key));
    },
    validateGetErrorMessage: function(errorType) {
        return $('.checkout-messages').data(errorType);
    },
    worldPayCallback: function(responseData) {
        var redirectUrl;
        var status = responseData.order.status;
        console.log(responseData);
        alert(status);
        /*
        switch (status) {
            case "success":
                redirectUrl = "https://example.com/success";
                break;
            case "failure":
                redirectUrl = "http://example.com/failure";
                break;
            case "error":
                redirectUrl = "https://example.com/error";
                break;
            default:
                redirectUrl = "http://example.com/unknown";
        }
        window.location = redirectUrl;
        */
    }
};;
var CurrencyFormat = {
    conf: null,
    lang: "",
    init: function () {
        CurrencyFormat.lang = $('body').data('lang');
        if (CurrencyFormat.lang == "en-gb") {
            CurrencyFormat.conf = {
                digitGroupSeparator: ',',
                decimalCharacter: '.',
                decimalCharacterAlternative: '.',
                currencySymbol: '£',
                currencySymbolPlacement: 'p',
                roundingMethod: 'U',
            };
        } else {        
            CurrencyFormat.conf = {
                digitGroupSeparator: ' ',
                decimalCharacter: ',',
                decimalCharacterAlternative: '.',
                currencySymbol: '\u202fkr',
                currencySymbolPlacement: 's',
                roundingMethod: 'U',
            };
        }
    },
    formatItem: function ($selected, conf) {
        if (typeof conf === 'undefined') conf = CurrencyFormat.conf;
        $selected.autoNumeric('init', conf);

        if (CurrencyFormat.lang != "en-gb") {
            var result = $selected.html();
            if (result.indexOf(",00") > 0) {
                $selected.html(result.replace(",00", ""));
            }
        }
    },
    updateItem: function ($selected, conf) {
        if (typeof conf === 'undefined') conf = CurrencyFormat.conf;
        $selected.autoNumeric('update', conf);

        if (CurrencyFormat.lang != "en-gb") {
            var result = $selected.html();
            if (result.indexOf(",00") > 0) {
                $selected.html(result.replace(",00", ""));
            }
        }
    },
    formatText: function (text, conf) {
        if (typeof conf === 'undefined') conf = CurrencyFormat.conf;
        return $('<input>', { val: text }).autoNumeric('init', conf).val();
    },
    formatDecimal: function (value) {
        var result = value + "";
        if (result == "") { result = "0"; }
        result = result.replace(",", CurrencyFormat.conf.decimalCharacter);
        result = result.replace(".", CurrencyFormat.conf.decimalCharacter);
        return result;
    }
};
var Login = {
    init: function () {
        $(document)
            .on('submit', '.jsLoginBlock', Login.login);
    },
    login: function (e) {
        e.preventDefault();
        var form = $(this).closest(".jsLoginBlock");
        $.ajax({
            type: "POST",
            url: form[0].action,
            data: form.serialize(),
            success: function (response, status, xhr) {
                var ct = xhr.getResponseHeader("content-type") || "";
                if (ct.indexOf('html') > -1) {
                    $(form).closest('.jsLoginBlockWrapper').replaceWith($(response));
                }
                if (ct.indexOf('json') > -1) {
                    document.location = response.ReturnUrl;
                }
            }
        });
    }
};
var Manuals = {
    init: function () {
        if ($('.manuals-block').length) {
            this.bind();
        }
    },
    bind: function () {
        $('.manuals-block-search-button').on('click', function () {
            Manuals.search();
        });

        $('.manuals-block-search-input-wrapper input').keypress(function (e) {
            var key = e.which;
            if (key == 13)
            {
                Manuals.search();
                return false;
            }
        });   
    },
    search: function () {
        var uri = $('.manuals-block').attr('data-url');
        var params = new Object();
        params.query = $('.manuals-block-search-input-wrapper input').val();

        $('.manuals-block-search-result').html('');
        $('.manuals-block-spinner').show();


        $.ajax({
            type: "POST",
            url: uri,
            data: JSON.stringify(params),
            success: function (data) {
                $('.manuals-block-search-result').html(data);
                $('.manuals-block .manuals-block-search-result select').selectric();

                $('.manuals-block select').off().on('change', function () {
                    Search.downloadManual(this);
                });

                if ($('.manuals-block-search-result .manual').length < 1) {
                    var message = "<p>" + $('.manuals-block').attr('data-message') + "</p>";
                    $('.manuals-block-search-result').html(message);
                }

                $('.manuals-block-spinner').hide();
            },
            contentType: 'application/json'
        });
    }
};
var ProductPage = {
    locatorLoaded: false,
    reviewsLoaded: false,
    init: function () {
        if ($('.product-page').length) {
          this.bind();
          this.trackView();
        }
    },
    bind: function () {
      $('.js-variation-switch').on('click',
        function() {
          if ($(this).hasClass("selected")) {
            return;
          }
          var code = $(this).data('code');
          ProductPage.switchVariant(code);
        });

        $('.product-page-images .image-slider').slick({
            dots: $('.product-page-images img').length > 1 ? true : false,
            speed: 350,
            lazyLoad: 'ondemand'
        });

        if ($('.use-v2').length) {
            $('.slider-nav-thumbnails').slick({
                autoplay: true,
                slidesToShow: 4,
                slidesToScroll: 1,
                asNavFor: '.image-slider',
                dots: false,
                focusOnSelect: true,
                variableWidth: true,
            });

            $('.slider-nav-thumbnails .slick-slide').removeClass('slick-active');

            $('.slider-nav-thumbnails .slick-slide').eq(0).addClass('slick-active');

            $('.image-slider').on('beforeChange', function (event, slick, currentSlide, nextSlide) {
                var mySlideNumber = nextSlide;
                $('.slider-nav-thumbnails .slick-slide').removeClass('slick-active');
                $('.slider-nav-thumbnails .slick-slide').eq(mySlideNumber).addClass('slick-active');
            });

            $(document).on('scroll', ProductPage.handleStickyMenuBar);
        }

        $('.product-specifications-button .button').on('click', function () {
          $('.product-specifications').toggle();
          var $button = $(this),
            toggleText = $button.data('toggle-text'),
            button = $button.get(0),
            buttonTextElement = button.firstChild,
            buttonText = button.innerText || button.textContent,
            buttonWidth = $button.width();

          $button.width(buttonWidth); //hotfix, will break if someone resizes screen after click
          buttonTextElement.nodeValue = toggleText;
          $button.data('toggle-text', buttonText);
        });

        $('.product-specifications-header').on('click', function () {
            ProductPage.toggleSpecificationCategory(this);
        });

        $('.js-expand-specifications').on('click', ProductPage.expandSpecifications);

        $('.js-products-related-show-more').on('click', ProductPage.showAllRelatedProducts);
        if ($('.js-products-related-show-more').length) {
            ProductPage.hideRelatedProducts();
        }

        $('.store-locator-section').on('click', function () {
            $('.store-locator-wrapper').toggle();

            if (!ProductPage.locatorLoaded) {
                ProductPage.loadStoreLocator();
                ProductPage.locatorLoaded = true;
            }
        });

        $('.product-reviews-section').on('click', function () {
            $('.product-reviews-wrapper').toggle();
        });

        $('#service').on('change', ProductPage.toggleService);

        $('.store-locator-header').on('click', function () {
            $('.store-locator-wrapper').toggle();
        });

        $('.product-reviews-header').on('click', function () {
            $('.product-reviews-wrapper').toggle();
        });

        $('.product-manual-versions select').selectric();

        $('.product-manual-versions select').on('change', function () {
            Search.downloadManual(this);
        });

        $('.coming-soon-body .acceptance-button').on('click', function () {
            Newsletter.signup(this);
        });

        $('.product-trustpilot-head .read-reviews').on('click', function () {
            $('.product-reviews-wrapper').show();

            $([document.documentElement, document.body]).animate({
                scrollTop: $(".product-page-product-reviews").offset().top - 80
            }, 1000);
        });

        $('.js-close-popup').off().on('click', function () {
            $('.cross-sell').slideToggle('hide');
        });

        if ($('.product-video-link').length) {
            YouTubePlayer.init();

            $('body').on('keydown', function (e) {
                let keyCode = e.keyCode;
                if (keyCode === 27) {
                    var modal = document.getElementById("video-modal");
                    modal.style.display = "none";
                    YouTubePlayer.stopVideo();
                }
            });

            $(window).resize(YouTubePlayer.setAspectRatio);

            $('.product-video-link').on('click', function () {
                YouTubePlayer.setAspectRatio();
                YouTubePlayer.startVideo();

                var modal = document.getElementById("video-modal");
                modal.style.display = "flex";
                window.onclick = function (event) {
                    if (event.target == modal) {
                        modal.style.display = "none";
                        YouTubePlayer.stopVideo();
                    }
                }
            });
        }

        $('.product-quick-links--name').off().on('click', function () {
            $('.product-quick-links--collection').toggle();

            if ($('.product-quick-links--name').hasClass('active')) {
                $('.product-quick-links--name').removeClass('active');
            }
            else {
                $('.product-quick-links--name').addClass('active');
            }
        });

        //$('.product-video-link').yu2fvl();

        //this.loadOnlineStoreLocator();
    },
    handleStickyMenuBar: function () {
        let pos = window.pageYOffset;
    },
    bindBazaarVoice: function () {
        $('.product-reviews-wrapper').show();

        $([document.documentElement, document.body]).animate({
            scrollTop: $(".product-page-product-reviews").offset().top
        }, 1000);
    },
    toggleService: function () {
        var serviceActive = $('#service').is(':checked');

        if (serviceActive) {
            $('.product-cart').hide();
            $('.product-service-cart').show();
        } else {
            $('.product-cart').show();
            $('.product-service-cart').hide();
        }
    },
    hideRelatedProducts: function () {
        $relatedProducts = $('.js-related-products .products-tile');
        for (var i = 4; i < $relatedProducts.length; i++) {
            $($relatedProducts[i]).addClass('hidden');
        }
    },
    showAllRelatedProducts: function () {
        $('.js-related-products .products-tile.hidden').removeClass('hidden');
        $('.products-related-show-more').addClass('hidden');
    },
    expandSpecifications: function () {
        var state = $('.js-expand-specifications').attr('data-state');
        if (state == "open") {
            $('.js-expand-specifications').attr('data-state', 'closed');
            $('.product-specifications-header').removeClass('open');
            $('.product-specifications-header').addClass('closed');
            $('.js-expand-specifications').html($('.js-expand-specifications').data('label-open'));
        } else {
            $('.js-expand-specifications').attr('data-state', 'open');
            $('.product-specifications-header').removeClass('closed');
            $('.product-specifications-header').addClass('open');
            $('.js-expand-specifications').html($('.js-expand-specifications').data('label-close'));
        }
    },
    toggleSpecificationCategory: function (el) {
        if ($(el).hasClass('open')) {
            $(el).removeClass('open');
            $(el).addClass('closed');
        } else {
            $(el).removeClass('closed');
            $(el).addClass('open');
        }
    },
    showSlider: function () {
        $('.product-page-images .image-slider').css('opacity', 1);
    },
    switchVariant: function (code) {

        if ($('.product-bundle').length) {
            var uri = code;

            //$('.product-quick-bar').remove();

            $.ajax({
                type: "GET",
                url: uri,
                dataType: "html",
                success: function (result) {
                    $('.product-panel').html($(result));
                    ProductPage.bind();
                    //$('.product-quick-bar').addClass('sticky');
                    $('.product-quick-bar').css('top', '130px');
                    //$('.product-quick-bar').css('z-index', '100');
                    ProductPage.trackView();
                },
                error: function () {
                    $('.js-add-to-cart button').addClass('disabled');
                    alert('The variant is not available.');
                }
            });
        }
        else {
            var uri = $('.js-product-details').data('url');
            uri = uri + "?entryCode=" + code;

            $('.product-quick-bar').remove();

            $.ajax({
                type: "POST",
                url: uri,
                dataType: "html",
                success: function (result) {
                    $('.product-panel').html($(result));
                    ProductPage.bind();
                    ProductPage.trackView();

                    $('.product-quick-bar').addClass('sticky');
                },
                error: function () {
                    $('.js-add-to-cart button').addClass('disabled');
                    alert('The variant is not available.');
                }
            });
        }
    },
    loadStoreLocator: function () {
        var priiceId = $('.js-product-details').data('priice');
        var market = $('.product-page').data('marketiso');
        var url = "/storelocator/index";
        $.ajax({
            type: "POST",
            url: url,
            data: { priiceId: priiceId, market: market},
            success: function (result) {
                $('.product-page-store-locator .store-locator-container').html($(result));
            },
            error: function () {
            }
        });
    },
    loadOnlineStoreLocator: function () {
        var priiceId = $('.js-product-details').data('priice');
        var market = $('.product-page').data('marketiso');
        var lang = $('body').data('lang');
        var url = "/storelocator/index";
        $.ajax({
            type: "POST",
            url: url,
            data: { priiceId: priiceId, market: market, lang: lang },
            success: function (result) {
                $('.online-store-locator').html($(result));
            },
            error: function () {
            }
        });
    },
  trackView: function() {
    var $page = $('.product-page'),
          $selectedVariant = $('.js-variation-switch.selected');

      if ($selectedVariant.data('key') != undefined) {
        GoogleAnalyticsRepo.productView(
            $page.data('sku'),
            $page.data('name'),
            $page.data('category'),
            $selectedVariant.data('key').toLowerCase());
      }
  }
};;
var Products = {
  current: 1,
  total: 0,
  count: 20,
  pageSize: 12,
  facets: null,
  fetchingNewPage: false,
  sortKey: 'popularity',
  init: function () {
    if ($('.js-category').length) {
      Products.bind();
      Products.setProductPositionsAndObservers();
    }
  },
  bind: function () {
    Products.total = $('.products-list').data('total');
    Products.pageSize = $('.products-list').data('pagesize');

      if (Products.total <= Products.pageSize)
          $('.products-pagination').hide();

    $('.js-products-show-more').on('click', Products.paginate);
    $('.js-products-show-all').on('click', Products.showAll);
    $('.filter-sort').on('click', function () {
      Products.sort(this);
    });
    $('.product a').on('click', function () {
      Products.trackProductClick($(this));
      });
      $('.products-facet-button').on('click', function () {
        if ($(this).hasClass('reset-filter'))
              Products.resetFilterProducts();
        else
            Products.filterProducts($(this));
      });
      $('.compare-button').on('click', function (event) {
          Products.addToCompare(this);
          return false;
      });
    },
    resetFilterProducts: function ($filter) {
        $('.products-facet-button').removeClass('selected');
        Products.filterProducts(null);
   },
   filterProducts: function ($filter) {

       if ($filter != null) {
            if ($filter.hasClass('selected')) {
                $filter.removeClass('selected');
            } else {
                $filter.addClass('selected');
           }
       }

        var selected = $('.products-facets-filter .selected');
        var facets = [];
        $.each(selected, function () {
            facets.push($(this).attr('data-key'));
        });

        Products.current = 1;
        Products.facets = facets;
        Products.update();
        Products.setProductPositionsAndObservers();
  },
  trackProductClick: function ($product) {
    GoogleAnalyticsRepo.productClick(
      $product.data('sku'),
      $product.data('name'),
      $product.data('category'),
      $product.closest('.products-tile').data('position'),
      $('.js-category').data('category')
    );
  },
  trackProductImpression: function ($product) {
    var $link = $product.find('a');
    GoogleAnalyticsRepo.productImpression(
      $link.data('sku'),
      $link.data('name'),
      $link.data('category'),
      $product.data('position'),
      $('.js-category').data('category')
      );
  },
  setProductPositionsAndObservers: function () {
    if (Products.fetchingNewPage) {
      setTimeout(function() {
          Products.setProductPositionsAndObservers();
        },
        200);
    } else {
      var $products = $('.products-tile'),
        counter = 1;
      $products.each(function () {
        $(this).attr('data-position', counter);
        counter++;
      });

      ProductObserver.init();
    }
  },
  sort: function (el) {
    var key = $(el).data('key');

    $('.products-filter .filter-sort.selected').removeClass('selected');
    $(el).addClass('selected');

    if (key == 'price') {
      if (Products.key == key) {
        if ($(el).hasClass('filter-sort-asc')) {
          $(el).removeClass('filter-sort-asc');
          $(el).addClass('filter-sort-desc');
          Products.sortKey = 'PriceDesc';
        } else {
          $(el).addClass('filter-sort-asc');
          $(el).removeClass('filter-sort-desc');
          Products.sortKey = 'PriceAsc';
        }
      }
    }

    if (key == 'name') {
      if (Products.key == key) {
        if ($(el).hasClass('filter-sort-asc')) {
          $(el).removeClass('filter-sort-asc');
          $(el).addClass('filter-sort-desc');
          Products.sortKey = 'NameDesc';
        } else {
          $(el).addClass('filter-sort-asc');
          $(el).removeClass('filter-sort-desc');
          Products.sortKey = 'NameAsc';
        }
      }
    }

    if (key == 'popularity')
      Products.sortKey = 'Popularity';

    Products.key = key;
    Products.current = 1;
    Products.update();
  },
  showAll: function () {
    UI.startLoader('.js-products-show-all');
    Products.current = 1;
    Products.update(1000);
    Products.setProductPositionsAndObservers();
  },
  paginate: function () {
    UI.startLoader('.js-products-show-more');
    Products.current++;
    Products.update();
    Products.setProductPositionsAndObservers();
  },
  update: function (pageSize) {

    if (Products.fetchingNewPage)
      return;

    Products.fetchingNewPage = true;

    var filter = new Object();
    filter.currentContent = new Object();
    filter.viewModel = new Object();
    filter.page = Products.current;
    filter.sortOrder = Products.sortKey;
    filter.isAjax = 1;
    filter.facets = Products.facets;

    if (pageSize == undefined)
      filter.pageSize = Products.pageSize;
    else
      filter.pageSize = pageSize;

    var uri = Products.getUrl();

    $.ajax({
      url: uri,
      type: "POST",
      data: filter,
      success: function (result) {
        Products.fetchingNewPage = false;

        $('.products-pagination').show();

        if (Products.current == 1)
          $('.products-list').html(result);
        else
          $('.products-list').append(result);

        var count = $('.products-list').find('.products-tile').length;
        Products.count = count;

        UI.stopLoader('.js-products-show-more');
          UI.stopLoader('.js-products-show-all');

          $('.compare-button').off().on('click', function (event) {
              Products.addToCompare(this);
              return false;
          });

         if (Products.count >= Products.total)
              $('.products-pagination').hide();

        if ($('.products-active-facets').length) {
            var filteredCount = $('.products-active-facets').attr('data-count');
            if (filteredCount == Products.count) {
                $('.products-pagination').hide();
            } else {
                $('.products-pagination').show();
            }
          }

          if ($('.products-facets-filter .selected').length > 0) {
              $('.reset-filter').show();
          } else {
              $('.reset-filter').hide();
          }
      }
    });
  },
  getUrl: function () {
    var urlParams = Search.getUrlParams();
    var url = "?";
    for (var key in urlParams) {
      var value = urlParams[key];
      if (value) {
        url += key + '=' + value + '&';
      }
    }
    return url.slice(0, -1); //remove last char
  },
  addToCompare: function (element) {
    var sku = $(element).attr('data-compare');
    var image = $(element).attr('data-image');
    var name = $(element).attr('data-name');
    Compare.add(sku, image, name);
  }
};;
var Compare = {
    items: [],
    init: function () {
        var items = localStorage.getItem("compare");
        if (items != null) {
            this.items = JSON.parse(items);
            Compare.render();
        }

        $(document).on('scroll', Compare.handleStickyHeader);

        $('.js-compare').on('click', this.compare);
        $('.js-compare-remove-all').on('click', this.removeAll);
    },
    compare: function () {
        var skus = "";
        $.each(Compare.items, function () {
            skus += this.sku + "|";
        });

        var lang = $('body').data('lang');

        if (skus != "") {
            skus = skus.substr(0, skus.length - 1);
            var uri = "/" + lang + "/comparison?ids=" + skus;
            window.location.href = uri;
        }
    },
    bind: function () {
        $('.compare-banner-item-remove').off().on('click', function () {
            var sku = $(this).parent().attr('data-sku');
            Compare.remove(sku);
        });
    },
    add: function (sku, image, name) {

        if (this.items.length == 3)
            return;

        var item = {};
        item.sku = sku;
        item.image = image;
        item.name = name;
        this.items.push(item);

        Compare.save();
        Compare.render();
    },
    remove: function (sku) {
        var index = -1;
        for (var x = 0; x < this.items.length; x++) {
            if (this.items[x].sku == sku) {
                index = x;
                break;
            }
        }

        if (index > -1) {
            this.items.splice(index, 1);
            Compare.save();
        }

        Compare.render();
    },
    removeAll: function () {
        Compare.items = [];
        Compare.save();
        Compare.render();
    },
    render: function () {
        var html = "";
        $.each(this.items, function () {
            html += "<div class=\"compare-banner-item\" data-sku=\"" + this.sku + "\"><img src=\"" + this.image + "\"> <img class=\"compare-banner-item-remove\" src=\"/Static/images/icons/search-clear.svg\"></div>";
        });
        $('.compare-banner-items').html(html);

        if (this.items.length > 0) {
            $('.compare-banner').show();
        } else {
            $('.compare-banner').hide();    
        }

        Compare.bind();
    },
    save: function () {
        localStorage.setItem("compare", JSON.stringify(this.items));
    },
    setSticky: function ($banner) {
        let sticky = 'sticky';
        $banner.addClass(sticky);
    },
    removeSticky: function ($banner) {
        let sticky = 'sticky';
        $banner.removeClass(sticky);
    },
    handleStickyHeader: function () {
        let pos = window.pageYOffset;
        let banner = '.compare-banner';

        if (pos > 1 && !$(banner).hasClass('sticky'))
            Compare.setSticky($(banner));

        else if (pos < 1 && $(banner).hasClass('sticky'))
            Compare.removeSticky($(banner));
    }
};
var Search = {
    init: function () {

        Search.initSearchBar();

        if ($('.search').length) {
            $('.js-search-input').on('focusout', function () { $('.search-input').removeClass("is-active"); });
            $('.js-search-input').on('focusin', function () { $('.search-input').addClass("is-active"); });
            if ($('.jsSearch').length == 1) {
                Search.infinityScroll();
                $(document)
                    .on('change', '.jsSearchSort', Search.sort)
                    .on('change', '.jsSearchFacet', Search.sort)
                    .on('click', '.jsSearchFacetRemoveAll', Search.removeAll);
            }

            // Set input width
            $('.js-search-input').focus(function () {
                $(this).addClass('has-focus');
            });
            $('.js-search-input').blur(function () {
                $(this).removeClass('has-focus');
            });

            $('.search-results-tabs .tab-all').on('click', function () { Search.toggleResultTabs('all'); });
            $('.search-results-tabs .tab-services').on('click', function () { Search.toggleResultTabs('services'); });
            $('.search-results-tabs .tab-products').on('click', function () { Search.toggleResultTabs('products'); });
            $('.search-results-tabs .tab-manuals').on('click', function () { Search.toggleResultTabs('manuals'); });
            $('.search-results-tabs .tab-support').on('click', function () { Search.toggleResultTabs('support'); });
            $('.search-results-tabs .tab-pages-consumer').on('click', function () { Search.toggleResultTabs('pages-consumer'); });
            $('.search-results-tabs .tab-pages-care').on('click', function () { Search.toggleResultTabs('pages-care'); });
            $('.search-results-tabs .tab-pages-corporate').on('click', function () { Search.toggleResultTabs('pages-corporate'); });


            $('.js-search-clear').on('click', function () {
                $('.js-search-input').val('');
                $('.js-search-input').focus();
            });

            $('.js-search-run').on('click', function () {
                $('.search-form').submit();
            });

            $('.js-search-paginate-products').on('click', function () {
                Search.paginateProducts();
            });

            $('.manual-versions select').selectric();

            $('.manual-versions select').on('change', function () {
                Search.downloadManual(this);
            });
        }

        $(document)
            .on('keyup', '.jsQuickSearch', Search.quickSearch)
            .on('focus', '.jsQuickSearch, .jsQuickSearchResult', Search.showResults)
            .on('focusin.jsQuickSearchResult click.jsQuickSearchResult', function (e) {
                if ($(e.target).closest('.jsQuickSearchResult, .jsQuickSearch').length) return;
                $('.jsQuickSearchResult').fadeOut('medium');
            });

        $(window).bind('popstate ', function (event) {
            //this will handle browser back/forward navigation
            Search.updatePage(location.search);
        });
    },
    initSearchBar: function () {
        $('.btn-header-search').on('click', function () {
            Search.showSearchBar();
        });
        $('.mini-search').on('click', function () {
            Search.showSearchBar();
        });
        $('.header-search-input').on('keypress', function (e) {
            Search.handleKeyPress(e);
        });

        $('.header-search-input').on('keydown', function (e) {
            if (!Search.isFunctionKey(e))
                $('.header-search-placeholder').hide();
        });

        $('.header-search-input').on('blur', function (e) {
            var value = $('.header-search-input').val();
            if (value == "") {
                $('.header-search-placeholder').show();
            }
        });

        $('.header-search-input').on('keyup', function (e) {
            var value = $('.header-search-input').val();
            //Custom placeholder to handle IE Edge bug with centering cursor in empty input fields
            if (value == "") {
                $('.header-search-placeholder').show();
            } else {
                $('.header-search-placeholder').hide();
            }
        });
    },
    downloadManual: function (el) {
        var uri = $(el).val();
        if (uri != "") {
            window.open(uri, '_blank'); 
        }
    },
    paginateProducts: function () {
        if (Search.fetchingNewPage == true)
            return;

        Search.fetchingNewPage = true;

        UI.startLoader('.js-search-paginate-products');

        var filter = new Object();
        filter.Page = Search.getCurrentPageBySection('products') + 1;
        Search.setCurrentPageBySection('products', filter.Page);

        $.ajax({
            url: Search.getUrlWithoutFacets(),
            type: "POST",
            data: filter,
            success: function (result) {
                Search.fetchingNewPage = false;
                $('.search-productlist').append(result);

                var count = $('.search-productlist').find('.product');
                var max = $()
                if (count.length >= Search.getTotalResultBySection('products')) {
                    $('.js-search-paginate-products').hide();
                }

                UI.stopLoader('.js-search-paginate-products');
            }
        });
    },
    getCurrentPageBySection: function (section) {
        var page = $('.search-result-' + section).attr('data-page');
        return parseInt(page);
    },
    setCurrentPageBySection: function (section, page) {
        $('.search-result-' + section).attr('data-page', page);
    },
    getTotalResultBySection: function (section) {
        var total = $('.search-result-' + section).attr('data-total');
        return parseInt(total);
    },
    toggleResultTabs: function (tab) {
        if (tab != "all") {

            if ($('.tab-' + tab).hasClass("disabled")) { return; }

            $('.search-result-section').addClass("hidden");
            $('.search-result-' + tab).removeClass("hidden");
        } else {
            $('.search-result-section').removeClass("hidden");
        }

        $('.search-results-tabs li').removeClass('active');
        $('.search-results-tabs .tab-' + tab).addClass('active');
    },
    handleKeyPress: function (e) {
        var value = $('.header-search-input').val();
        if (e.which == 13) {
            var url = $('.header-search').data('url');
            window.location.href = url + "?q=" + value;
        }
    },
    showSearchBar: function () {
        if ($('.header-search').hasClass('closed')) {
            $('.header-search-wrapper').show();
            setTimeout(Search.searchBarSlideDown, 50);
        } else {
            $('.header-search').addClass('closed');
            $('.header-search').removeClass('opened');
            setTimeout(Search.searchBarSlideHide, 300);
        }
    },
    searchBarSlideDown: function () {
        $('.header-search').addClass('opened');
        $('.header-search').removeClass('closed');
        $('.header-search-input').focus();
    },
    searchBarSlideHide: function () {
        $('.header-search-wrapper').hide();
    },
    search: function() {
        alert(($this).val());
    },
    fetchingNewPage: false,
    lastPage: false,
    lastKeyWord: "",
    quickSearch: function () {
        if ($(this).val().length > 1 && Search.lastKeyWord != $(this).val()) {
            var url = $(this).data('url');
            var form = $(this).closest('form');
            var jqXhr = $(this).data('jqXhr');
            if (jqXhr)
                jqXhr.abort();
            Search.lastKeyWord = $(this).val();
            $(this).data('jqXhr', $.ajax({
                type: "POST",
                url: url,
                data: form.serialize(),
                context: this,
                success: function (result) {
                    $(this).removeData('jqXhr');
                    $('.jsQuickSearchResult').empty();
                    $('.jsQuickSearchResult').append(result);
                }
            })
            );
        }
    },
    showResults: function () {
        $('.jsQuickSearchResult').show();
    },
    infinityScroll: function () {
        $(window).scroll(function () {
            if (Search.fetchingNewPage == true || Search.lastPage) {
                return null;
            }
            if ($(window).scrollTop() >= ($(document).height() - $(window).height()) - 1000) {
                Search.fetchingNewPage = true;
                var form = $(document).find('.jsSearchForm');
                $.ajax({
                    url: Search.getUrlWithFacets(),
                    type: "POST",
                    data: form.serialize(),
                    success: function (result) {
                        Search.fetchingNewPage = false;
                        if ($(result).find('.product').length > 0) {
                            $('.jsSearchPage').replaceWith($(result).find('.jsSearchPage'));
                            $('.jsSearch').append($(result).find('.jsSearch').children());
                            $('.jsSearchFacets').replaceWith($(result).find('.jsSearchFacets'));
                        } else {
                            Search.lastPage = true;
                        }
                    }
                });
            }
        });
    },
    sort: function () {
        Search.lastPage = false;
        var form = $(document).find('.jsSearchForm');
        $('.jsSearchPage').val(1);
        $('.jsSelectedFacet').val($(this).data('facetgroup') + ':' + $(this).data('facetkey'));
        var url = Search.getUrlWithFacets();
        Search.updatePage(url, form.serialize(), function () {
            history.pushState({ url: url }, "", url); //put the new url to browser history
        })
    },
    getUrlWithFacets: function () {
        var facets = [];
        $('.jsSearchFacet:input:checked').each(function () {
            var selectedFacet = encodeURIComponent($(this).data('facetkey'));
            facets.push(selectedFacet);
        });
        return Search.getUrl(facets);
    },
    getUrlWithoutFacets: function () {
        var urlParams = Search.getUrlParams();
        var url = "?";
        for (var key in urlParams) {
            var value = urlParams[key];
            if (value) {
                url += key + '=' + value + '&';
            }
        }
        return url.slice(0, -1); //remove last char
    },
    getUrl: function (facets) {
        var urlParams = Search.getUrlParams();
        urlParams.facets = facets ? facets.join(',') : null;
        var sort = $('.jsSearchSort')[0].value;
        urlParams.sort = sort;
        var url = "?";
        for (var key in urlParams) {
            var value = urlParams[key];
            if (value) {
                url += key + '=' + value + '&';
            }
        }
        return url.slice(0, -1); //remove last char
    },
    getUrlParams: function () {
        var match,
            search = /([^&=]+)=?([^&]*)/g, //regex to find key value pairs in querystring
            query = window.location.search.substring(1);

        var urlParams = {};
        while (match = search.exec(query)) {
            urlParams[match[1]] = match[2];
        }
        return urlParams;
    },
    removeAll: function () {
        Search.lastPage = false;
        $('.jsSearchFacet:input:checked').each(function () { $(this).attr('checked', false); });
        var form = $(document).find('.jsSearchForm');
        $('.jsSearchPage').val(1);
        var url = Search.getUrl();
        Search.updatePage(url, form.serialize(), function () {
            history.pushState({ url: url }, "", url); //put the new url to browser history
        })
    },
    updatePage: function (url, data, onSuccess) {
        $.ajax({
            type: "POST",
            url: url || "",
            data: data,
            success: function (result) {
                $('.jsSearchPage').replaceWith($(result).find('.jsSearchPage'));
                $('.jsSearch').replaceWith($(result).find('.jsSearch'));
                $('.jsSearchFacets').replaceWith($(result).find('.jsSearchFacets'));
                if (onSuccess) {
                    onSuccess(result);
                }
            }
        });
    },
    isFunctionKey: function (e) {
        var returnVal = false;
        switch (e.keyCode) {
            case 8:
            case 9:
            case 13:
            case 16:
            case 17:
            case 18:
            case 19:
            case 20:
            case 27:
            case 33:
            case 34:
            case 35:
            case 36:
            case 37:
            case 38:
            case 39:
            case 40:
            case 45:
            case 46:
                returnVal = true;
                break;
        }
        return returnVal;
    }
};
var UI = {
    loaders: [],
    init: function () {
        if ($('.scroll-sticky').length > 0)
            UI.bindStickyElements();
    },
    bindStickyElements: function () {
        //console.log("STICK");
        $.each($('.scroll-sticky'), function () {
            var offsetTop = $(this).offset().top;
            $(this).attr('data-top', offsetTop);
        });

        $(window).scroll(function (event) {
            UI.handleStickyElement();
        });
    },
    handleStickyElement: function () {

        var targetColumn = null;
        $('.col--full.two-column-holder').each(function () {
            if ($(this).find('.scroll-sticky').length) {
                result = $(this);
                return;
            }
        });
        targetColumn = $(result).find('.left');

        console.log(targetColumn);

        var scroll = $(window).scrollTop();
        var offsetTop = 120;
        if (scroll >= offsetTop) {
            $.each($('.scroll-sticky'), function () {
                var parentColumn = $(this).parent();
                parentColumn.css('height', targetColumn.height());
                parentColumn.css('align-items', 'flex-start');
                var elementTop = parseInt($(this).attr('data-top'));
                var elementHeight = $(this).height();
                var parentHeight = parentColumn.height();

                var parentTop = $(parentColumn).offset().top;

                console.log("EL: " + elementHeight);
                console.log("PAR: " + parentHeight);
                console.log("SCR: " + scroll);

                //if (scroll >= (elementTop - offsetTop)) {
                if (scroll >= (elementTop - offsetTop)) {
                    if (scroll > (parentTop + parentHeight - elementHeight)) {
                        $(this).addClass('fixed-bottom');
                        $(this).removeClass('fixed-top');
                    }
                    else {
                        $(this).addClass('fixed-top');
                        $(this).removeClass('fixed-bottom');
                    }
                } else {
                    $(this).removeClass('fixed-top');
                    $(this).removeClass('fixed-bottom');
                }
            });
        } else {
            $('.scroll-sticky').removeClass('fixed-top');
            $('.scroll-sticky').removeClass('fixed-bottom');
        }
    },
    startLoader: function (element) {
        var found = false;
        for (var x = 0; x < this.loaders.length; x++) {
            if (this.loaders[x].element == element) {
                this.loaders[x].ladda.start();
                break;
            }
        }

        if (!found) {
            $(element).attr('data-style', 'zoom-in');
            var ladda = Ladda.create(document.querySelector(element));
            ladda.start();

            var loader = new Object();
            loader.ladda = ladda;
            loader.element = element;
            this.loaders.push(loader);
        }
    },
    stopLoader: function (element) {

        for (var x = 0; x < this.loaders.length; x++) {
            if (this.loaders[x].element == element) {
                this.loaders[x].ladda.stop();
                break;
            }
        }
    }
};
var Navigation = {
  headerPos: 100,
  init: function () {
    $(document)
        .on('click', '.topbar .mini-menu .active', Navigation.toggleMiniMenu)
        .on('click', '.hamburger-menu', Navigation.toggleHamburgerMenu)
        .on('click', 'body.faded', Navigation.removeBodyFade)
        .on('click', '.has-children', Navigation.toggleListElement)
        .on('click', '.plus', Navigation.toggleListElement)
        .on('click', '.minus', Navigation.toggleListElement)
        .on('click', '.main-menu a', Navigation.menuLinkClick)
        .on('click', '.icons__back', Navigation.goback)
        .on('click', '.megamenu .submenu__group a', Navigation.clickedLink)
        .on('ready', function () {
        try {
            headerPos = $('header').offset().top + $('header').outerHeight();
        }
        catch (e) {
        }
      })
      .on('scroll', Navigation.handleStickyHeader);

      $('.js-header-search-btn').on('click', function () {
          Navigation.runSearch();
      });

      $('.main-menu-megamenu a').on('click', function () {
          Navigation.megaMenuLinkClick(this);
      });

      $('.js-header-search-close-btn').on('click', function () {
          Search.showSearchBar();
      });

      $('#js-quickbar-specifications').on('click', function () {
          $([document.documentElement, document.body]).animate({
              scrollTop: $(".product-top-features").offset().top - 90
          }, 1000);

          $('.product-quick-links--name').removeClass('active');
          $('.product-quick-links--collection').toggle();
          return false;
      });

      $('.js-open-mini-cart').off().on('click', function () {
          Navigation.openMiniCart();
      });

      $('.site-overlay').off().on('click', function () {
          Navigation.closeMiniCart();
      });

    },
    openMiniCart: function (e) {
        $(".site-overlay").fadeIn("fast", function () { });
        $('.quick-cart').css('display', 'block');
    },
    closeMiniCart: function (e) {
        $(".site-overlay").fadeOut("fast", function () { });
        $('.quick-cart').css('display', 'none');
    },
    goback: function (e) {
        e.stopPropagation();
        e.preventDefault();
        if ($(".is-open").length >= 1) {
            $('.icons__back').css("display", "none");
        }
        $(".main-menu.expanded").find(".is-open").toggleClass("is-open");
    },
    toggleListElement: function (e) {
        e.stopPropagation();
        e.preventDefault();
        $(this).closest('li').toggleClass('is-open');
        $('.icons__back').css("display", "block");
    },
    closeSubmenus: function (clickedLink) {
        var $removeAll = $(".sub-menu").find(".show-submenu");
        if ($removeAll.length > 0) {
            $removeAll.each(function (index) {
                if (!(this.getAttribute("data-classkey") == clickedLink)) {
                    this.classList.remove("show-submenu");
                }
            })
        }
        $(document).off("click", "body", Navigation.clickOutsideHandler)
        $(document).off("scroll", Navigation.scrollHandler)

    },
  toggleMiniMenu: function (e) {
    e.preventDefault();
    $('.mini-menu').toggleClass('expanded');
    $('.shouter-text').toggleClass('mini-menu-expanded');
  },
    toggleHamburgerMenu: function () {
    $('.main-menu').toggleClass('expanded');
    $('.sub-menu').removeClass('expanded');
    $('body').toggleClass('faded');
  },
  removeBodyFade: function (e) {
    e.preventDefault();
    $('.main-menu').removeClass('expanded');
    $('body').removeClass('faded');
   },
    megaMenuLinkClick: function (e) {
        var clickedLink = $(e).parent().data("classkey");

        $(".sub-menu").find("[data-classkey='" + clickedLink + "']").toggleClass("show-submenu");

        $('.megamenu.sub-menu').css('display', 'block');

        Navigation.closeSubmenus(clickedLink);
        $(document).on("click", "body", Navigation.clickOutsideHandler);
        $(document).on('scroll', Navigation.scrollHandler);
        Navigation.menuPos = window.pageYOffset;
        //e.stopPropagation();
    },
    clickOutsideHandler: (event) => {
        event.stopPropagation()
        if (event.target.closest('.sub-menu-outer-wrapper, .sub-menu')) return;
        Navigation.closeSubmenus();
    },
    clickedLink: (event) => {
        Navigation.closeSubmenus();
    },
    /*
    closeSubmenus: function (clickedLink) {
        var $removeAll = $(".sub-menu").find(".show-submenu");
        if ($removeAll.length > 0) {
            $removeAll.each(function (index) {
                if (!(this.getAttribute("data-classkey") == clickedLink)) {
                    this.classList.remove("show-submenu");
                }
            })
            //$('.megamenu.sub-menu').css('display', 'none');
        }
        
        $(document).off("click", "body", Navigation.clickOutsideHandler)
        $(document).off("scroll", Navigation.scrollHandler)

    },
    */
  //toggleListElement: function (e) {
  //  e.stopPropagation();
  //  e.preventDefault();
  //  $(this).closest('li').toggleClass('is-open');
  //},
  menuLinkClick: function (e) { //This interferes with mega menu
    e.stopPropagation();
  },
  setStickyHeader: function ($topBar, $header, $container) {
    let sticky = 'sticky';

    $topBar.addClass(sticky);
      $header.addClass(sticky);
      $('.product-quick-bar').addClass(sticky);
  },
  removeStickyHeader: function ($topBar, $header, $container) {
    let sticky = 'sticky';

    $topBar.removeClass(sticky);
    $header.removeClass(sticky);
    $('.product-quick-bar').removeClass(sticky);
    $container.css('margin-top', 0);
  },
  handleStickyHeader: function () {
    let pos = window.pageYOffset;

    if (pos > 1 && !$('header').hasClass('sticky'))
      Navigation.setStickyHeader($('.topbar'), $('header'), $('.container'));

    else if (pos < 1 && $('header').hasClass('sticky'))
      Navigation.removeStickyHeader($('.topbar'), $('header'), $('.container'));
    },
    runSearch: function () {
        var query = $('.header-search-input').val();
        var url = $('.header-search').data('url');
        window.location.href = url + "?q=" + query;
    }
};;
var ServicePage = {
  initialized: false,
  bundleInitialized: false,
  packageCode: "",
  bundleData: null,
  init: function () {
    $(document)
      .on('click', '.service-option', ServicePage.toggleServiceOption)
      .on('click', '.bundle-product', ServicePage.toggleBundleProduct)
      .on('click', '.bundle-product .button', ServicePage.goToProduct)
      .on('ready', ServicePage.setBundleContent)
      .on('click', '.service-bundle-type-option-wrap', ServicePage.toggleServiceBundleType)
      .on('click', '.js-scroll', ServicePage.scrollToServicePicker)
      .on('click', '.service-bundle-type-wrapper .service-bundle-services .service-bundle-service', ServicePage.toggleServiceBundleBinding)
      .on('click', '.service-bundle-type-wrapper .service-bundle-products .bundle-product', ServicePage.updateBundlePrice);

      if ($('.service-bundle-type-wrapper').length > 0)
          ServicePage.updateBundlePrice();
  },
  scrollToServicePicker: function() {
    $([document.documentElement, document.body]).animate({
      scrollTop: $('#servicePicker').offset().top - $('header').height() - 100
    }, 1000);
    },
  toggleServiceBundleType: function () {
    var $option = $(this),
      $options = $('.service-bundle-type-option-wrap'),
      selected = 'selected';

    if (!$option.hasClass(selected)) {
      $options.removeClass(selected);
      $option.addClass(selected);
    }

    var bundleType = $(this);
    $('.service-bundle-type-wrapper.selected').removeClass('selected');
    if ($(bundleType).hasClass('without-phone')) {
          $('.service-bundle-type-single').addClass('selected');
    } else {
          $('.service-bundle-type-bundle').addClass('selected');
    }
  },
  toggleServiceOption: function () {
    var $option = $(this),
      $options = $('.service-option'),
      selected = 'selected';

    if (!$option.hasClass(selected)) {
      $options.removeClass(selected);
      $option.addClass(selected);
      ServicePage.setBundleContent();
    }
  },
  toggleServiceBundleBinding: function () {
      var $option = $(this),
          $options = $('.service-bundle-service'),
          selected = 'selected';

      if (!$option.hasClass(selected)) {
          $options.removeClass(selected);
          $option.addClass(selected);
          ServicePage.setBundleContent();
      }
      ServicePage.updateBundlePrice();
  },
  toggleBundleProduct: function() {
    var $product = $(this),
      $products = $('.bundle-product'),
      selected = 'selected';

    if (!$product.hasClass(selected)) {
      $products.removeClass(selected);
      $product.addClass(selected);
      ServicePage.setBundleContent();
    }
  },
  goToProduct: function(e) {
    e.stopPropagation();
  },
  setBundleContent: function() {
    var $selectedService = $('.service-option.selected'),
      $selectedProduct = $('.bundle-product.selected'),
      $serviceWrap = $('.service-wrap'),
      $productWrap = $('.product-wrap'),
      $priceTotal = $('.price-total .price');

      var servicePrice = $selectedService.data('price');
      if (servicePrice != null)
          servicePrice = servicePrice.replace(",", ".");

      var productPrice = $selectedProduct.data('price');
      if (productPrice != null)
          productPrice = productPrice.replace(",", ".");

    $serviceWrap.find('.title .period').text($selectedService.data('binding-period'));
    $serviceWrap.find('.price').text(parseFloat(servicePrice));
    $productWrap.find('.title').text($selectedProduct.find('.title').text());
    $productWrap.find('.price').text(parseFloat(productPrice));
    $priceTotal.text(parseFloat(servicePrice) + parseFloat($selectedProduct.data('price')));

    ServicePage.packageCode = $selectedProduct.data('code');
    $('.form-service-cart #code').val(ServicePage.packageCode);

      $.each($('.autonumeric'), function () {
          if (ServicePage.initialized)
              CurrencyFormat.updateItem($(this));
          else
              CurrencyFormat.formatItem($(this));
      });

      ServicePage.initialized = true;
  },
  initBundleData: function () {
      ServicePage.bundleData = JSON.parse($('#service-bundle-data').html());
  },
  updateBundlePrice: function () {
    if (ServicePage.bundleData == null)
          ServicePage.initBundleData();

      var service = $('.service-bundle-type-wrapper .service-bundle-services .service-bundle-service.selected').attr('data-code');
      var product = $('.service-bundle-type-wrapper .service-bundle-products .bundle-product.selected').attr('data-code');

      //Get current campaign
      var campaign = null;
      $.each(ServicePage.bundleData, function () {
          if ((this.Product.Code == product) && (this.Service.Code == service)) {
              campaign = this;
              return;
          }
      });
      $('.form-serviceandproduct-cart').find('#code').val(campaign.BundleCode);

      //Resolve campaign price for each article
      $products = $('.service-bundle-type-wrapper .service-bundle-products .bundle-product');
      $.each($products, function () {
          var price = ServicePage.getBundleArticlePrice(campaign.Service.Code, $(this).attr('data-code'));
          $priceLabel = $(this).find('.price-purple');
          $priceOriginalLabel = $(this).find('.price-original');

          var bundledPrice = price.BundledPrice + "";
          if ($('body').data('lang') == "en-gb") {
              if (bundledPrice != "")
                  bundledPrice = bundledPrice.replace(",", ".");
          }
          else
          {
              if (bundledPrice != "")
                  bundledPrice = bundledPrice.replace(".", ",");
          }


          $priceLabel.html(bundledPrice);

          $priceOriginalLabel.hide();
          if (price.BundledPrice < price.OriginalPrice) {
              $priceOriginalLabel.html(price.OriginalPrice);
              $priceOriginalLabel.show();
          }

          if (ServicePage.bundleInitialized)
          {
              CurrencyFormat.updateItem($priceLabel);
              CurrencyFormat.updateItem($priceOriginalLabel);
          }
          else
          {
              CurrencyFormat.formatItem($priceLabel);
              CurrencyFormat.formatItem($priceOriginalLabel);
          }
      });


      ServicePage.bundleInitialized = true;
      console.log("WILL BUY: " + campaign.BundleCode);

  },
    getBundleArticlePrice: function (service, code) {
        var price = {};
        $.each(ServicePage.bundleData, function () {
            if ((this.Product.Code == code) && (this.Service.Code == service)) {
                price.BundledPrice = this.ProductPrice;
                price.OriginalPrice = this.Product.Price;
              return;
          }
      });
      return price;
  }
};;
var VideoBlock = {
	init: function () {
		$(document)
			.on('click', '.clickable-thumbnail', VideoBlock.startVideo);
	},
	startVideo: function (e) {
		var thumbnailOverlay = $(this),
			videoIframe = thumbnailOverlay.closest('.video').find('iframe');

		thumbnailOverlay.addClass('hide');
		videoIframe.removeClass('hide');
		videoIframe[0].src += "&autoplay=1";

		setTimeout(function () {
			thumbnailOverlay.remove();
		}, 1600);
	}
};
var ModularFinance = {
    mfnListTemplate: null,
    mfnTeaserListTemplate: null,
    init: function () {
        if ($('.js-modular-finance').length) {
            var widgets = $('.js-modular-finance');
            $.each(widgets, function () {
                ModularFinance.load(this);
            });
        }

        if ($('.js-mfn-news-teaser').length) {
            var widgets = $('.js-mfn-news-teaser');
            $.each(widgets, function () {
                ModularFinance.loadMFNTeaser(this);
            });
        }

        if ($('.js-mfn-stock-teaser').length) {
            var widgets = $('.js-mfn-stock-teaser');
            $.each(widgets, function () {
                ModularFinance.loadStockTeaser(this);
            });
        }

        if ($('.modular-finance-mfn-widget-filters').length) {
            this.bindMFNFilters();
            ModularFinance.updateNewsList();
        }

        if ($('.js-modular-finance-reports').length) {
            ModularFinance.updateReportsList();
        }
    },
    bindMFNFilters: function () {
        $('#mfn-filter-year').on('change', ModularFinance.updateNewsList);
        $('#mfn-filter-language').on('change', ModularFinance.updateNewsList);
        $('#mfn-filter-regulatory').on('change', ModularFinance.updateNewsList);
    },
    updateNewsList: function () {
        var uri = "/modularfinanceapi/mfn";
        var lang = $('#mfn-filter-language').val();
        var year = $('#mfn-filter-year').val();
        var regulatory = $('#mfn-filter-regulatory').is(":checked");
        var filter = 'all';
        var widget = $('.js-modular-finance-mfn');

        ModularFinance.loadMFNData(widget, filter, lang, year, regulatory, "", "", ModularFinance.renderMFN);
    },
    updateReportsList: function () {
        var uri = "/modularfinanceapi/mfn";
        var lang = $('body').data('lang');
        var year = '';
        var regulatory = '';
        var filter = 'all';
        var widget = $('.js-modular-finance-reports');
        var tags = "sub:report";

        ModularFinance.loadMFNData(widget, filter, lang, year, regulatory, "", "", ModularFinance.renderReports, tags);
    },
    load: function (widget) {
        var name = $(widget).data('widget');
        var locale = $(widget).data('locale');
        var token = $(widget).data('token');

        var uri = "/modularfinanceapi";

        $.ajax({
            url: uri,
            type: "POST",
            data: {widget: name, token: token},
            success: function (result) {
                $(widget).html(result);
            }
        });
    },
    loadMFN: function (widget) {        
        var uri = "/modularfinanceapi/mfn";
        var lang = $('body').data('lang');
        var filter = $(widget).data('filter');

        ModularFinance.loadMFNData(widget, filter, lang, "", "", ModularFinance.renderMFN);
    },
    renderMFN: function (widget, data) {
        if (this.mfnListTemplate == null) {
            this.mfnListTemplate = $('#mfn-list-template').html();
            Mustache.parse(this.mfnListTemplate);
        }
        var list = {};
        list.items = JSON.parse(data);

        var result = Mustache.render(this.mfnListTemplate, list);
        $(widget).html(result);
    },
    renderReports: function (widget, data) {
        if (this.mfnListTemplate == null) {
            this.mfnListTemplate = $('#mfn-list-template').html();
            Mustache.parse(this.mfnListTemplate);
        }
        var list = {};
        list.items = JSON.parse(data);

        var result = Mustache.render(this.mfnListTemplate, list);

        console.log(list.items);
        $(widget).html(result);
    },
    loadMFNTeaser: function (widget) {
        var limit = $(widget).data('limit');
        var lang = $('body').data('lang');
        ModularFinance.loadMFNData(widget, "", lang, "", false, limit, "", ModularFinance.renderMFNTeaser);
    },
    loadStockTeaser: function (widget) {
        var d = new Date();
        var n = d.getTime();
        var uri = "/modularfinanceapi/stock?timestamp=" + n;
        $.ajax({
            url: uri,
            type: "POST",
            data: {},
            success: function (result) {
                ModularFinance.renderStockTeaser(widget, result);
            }
        });
    },
    renderStockTeaser: function (widget, data) {
        data = JSON.parse(data);
        $(widget).find('.mf-teaser-stock-price').html(data.Price);
        $(widget).find('.mf-teaser-stock-delta-percentage').html(data.DeltaPercentage + "%");
        $(widget).find('.mf-teaser-stock-delta-price').html(data.DeltaAmount + " SEK");
        $(widget).find('.mf-teaser-stock-date').html(data.LatestDate);
        $(widget).find('.mf-teaser-stock-name').html(data.StockSymbol);

        $('.mf-teaser-stock-data').show();
    },
    renderMFNTeaser: function (widget, data) {
        if (this.mfnTeaserListTemplate == null) {
            this.mfnTeaserListTemplate = $('#mfn-teaser-list-template').html();
            Mustache.parse(this.mfnTeaserListTemplate);
        }
        var list = {};
        list.items = JSON.parse(data);
        var result = Mustache.render(this.mfnTeaserListTemplate, list);
        $(widget).find('.mfn-teaser-news-list').html(result);
    },
    loadMFNData: function (widget, filter, lang, year, regulatory, limit, page, callback, tags) {
        var d = new Date();
        var n = d.getTime();
        var uri = "/modularfinanceapi/mfn?timestamp=" + n;

        $.ajax({
            url: uri,
            type: "POST",
            data: { filter: filter, lang: lang, limit: limit, page: page, year: year, regulatory: regulatory, tag: tags },
            success: function (result) {
                callback(widget, result);
            }
        });
    },
};
var CookieConsent = {
  init: function () {
    var consentCookie = Cookies.get('DORO-CONSENT');

    if (!consentCookie) {
      this.bind();
      this.showCookieMessage();
    }
    else {
      $('#cookie-consent-wrapper').remove();
    }

  },
  bind: function () {
    $('.cookie-consent-button').on('click', function () {
      $('#cookie-consent-wrapper').addClass('hide-cookie');
      Cookies.set('DORO-CONSENT', 'true', {expires: 365});

      setTimeout(function () {
        $('#cookie-consent-wrapper').remove();
      }, 3000);
    });
  },
  showCookieMessage: function () {
    $('#cookie-consent-wrapper').removeClass('hide');
  }
};;
var Newsletter = {
	init: function () {
		this.bind()
	},
    bind: function () {

        if ($('.newsletter').length) {
            $('.acceptance-button').on('click', function () {
                Newsletter.signup(this);
            });

            $('.acceptance-checkbox').on('change', function () {
                $(this).parent().removeClass('newsletter-warning');
            });
        }
    },
    signup: function (el) {
        $form = $(el).parent().parent().parent();

        $form.find('.newsletter-email').removeClass('no-email');

        var isApproved = $form.find('.acceptance-checkbox').prop('checked');
        var email = $form.find('.newsletter-email').val();
        if (email == "") {
            $form.find('.newsletter-email').addClass('no-email');
            return;
        }

        if (isApproved) {
            var uri = $form.parent().parent().data('url');

            var data = JSON.stringify({
                'email': email,
                'listId': $form.parent().parent().data('list'),
                'mergeField': $form.parent().parent().data('field'),
                'mergeValue': $form.parent().parent().data('value'),
                'groupId': $form.parent().parent().data('groupid'),
            });

            $.ajax({
                type: "POST",
                url: uri,
                data: data,
                success: function (data) {
                    var response = JSON.parse(data);
                    if (response.Success) {
                        $form.find('.newsletter-signup').hide();
                        $form.find('.newsletter-success').show();

                        GoogleAnalyticsRepo.newsletterSubscription();
                    } else {
                        console.log(response.Message);
                    }
                },
                contentType: 'application/json'
            });

        } else {
            $form.find('.terms-and-conditions').addClass('newsletter-warning');
        }
    }
};;
var PartnerWeb = {
    init: function () {
        
        if ($('.partnerweb-wrapper').length) {
            $('.js-partnerweb-input').on('focusout', function () { $('.search-input').removeClass("is-active"); });
            $('.js-partnerweb-input').on('focusin', function () { $('.search-input').addClass("is-active"); });
            if ($('.jsSearch').length == 1) {
                PartnerWeb.infinityScroll();
                $(document)
                    .on('change', '.jsSearchSort', Search.sort)
                    .on('change', '.jsSearchFacet', Search.sort)
                    .on('click', '.jsSearchFacetRemoveAll', Search.removeAll);
            }

            $('.js-partnerweb-input').focus(function () {
                $(this).addClass('has-focus');
            });

            $('.js-partnerweb-input').blur(function () {
                $(this).removeClass('has-focus');
            });
            
            $('.js-partnerweb-clear').on('click', function () {
                $('.js-partnerweb-input').val('');
                $('.js-partnerweb-input').focus();
            });

            $('.partnerweb-search-results-tabs .tab-all').on('click', function () { PartnerWeb.toggleResultTabs('all'); });
            $('.partnerweb-search-results-tabs .tab-images').on('click', function () { PartnerWeb.toggleResultTabs('images'); });
            $('.partnerweb-search-results-tabs .tab-manuals').on('click', function () { PartnerWeb.toggleResultTabs('manuals'); });
            $('.partnerweb-search-results-tabs .tab-factsheets').on('click', function () { PartnerWeb.toggleResultTabs('factsheets'); });
            $('.partnerweb-search-results-tabs .tab-dofc').on('click', function () { PartnerWeb.toggleResultTabs('dofc'); });

            $('.js-partnerweb-run').on('click', function () {
                $('.search-form').submit();
            });

            $('.js-partnerweb-input').keypress(function (e) {
                var key = e.which;
                if (key == 13) {
                    PartnerWeb.search();
                    return false;
                }
            });  

            $('.js-search-paginate-images').on('click', PartnerWeb.paginateImages);
            $('.js-search-paginate-factsheet').on('click', PartnerWeb.paginateFactSheets);
        }

        $(window).bind('popstate ', function (event) {
            //this will handle browser back/forward navigation
            PartnerWeb.updatePage(location.search);
        });
    },
    search: function () {
        $('.search-form').submit();
    },
    paginateImages: function () {
        if (PartnerWeb.fetchingNewPage == true)
            return;

        PartnerWeb.fetchingNewPage = true;

        UI.startLoader('.js-search-paginate-images');

        var filter = new Object();
        var page = PartnerWeb.getCurrentPageBySection('images') + 1;
        PartnerWeb.setCurrentPageBySection('images', page);
        
        $.ajax({
            url: Search.getUrlWithoutFacets(),
            type: "POST",
            data: { filter: filter, paginate: "images", page: page },
            success: function (result) {
                PartnerWeb.fetchingNewPage = false;
                $('.search-result-images-wrapper').append(result);

                var count = $('.search-result-images-wrapper').find('.partnerweb-image');
                var max = $()
                if (count.length >= PartnerWeb.getTotalResultBySection('images')) {
                    $('.js-search-paginate-images').hide();
                }

                UI.stopLoader('.js-search-paginate-images');
            }
        });
    },
    paginateFactSheets: function () {

        if (PartnerWeb.fetchingNewPage == true)
            return;

        PartnerWeb.fetchingNewPage = true;

        UI.startLoader('.js-search-paginate-factsheet');

        var filter = new Object();
        var page = PartnerWeb.getCurrentPageBySection('factsheets') + 1;
        PartnerWeb.setCurrentPageBySection('factsheets', page);

        $.ajax({
            url: Search.getUrlWithoutFacets(),
            type: "POST",
            data: { filter: filter, paginate: "factsheet", page: page },
            success: function (result) {
                PartnerWeb.fetchingNewPage = false;
                $('.search-result-factsheet-wrapper').append(result);

                var count = $('.search-result-factsheet-wrapper').find('.partnerweb-factsheet');
                var max = $()
                if (count.length >= PartnerWeb.getTotalResultBySection('factsheets')) {
                    $('.js-search-paginate-factsheet').hide();
                }

                UI.stopLoader('.js-search-paginate-factsheet');
            }
        });
    },
    getCurrentPageBySection: function (section) {
        var page = $('.search-result-' + section).attr('data-page');
        return parseInt(page);
    },
    setCurrentPageBySection: function (section, page) {
        $('.search-result-' + section).attr('data-page', page);
    },
    getTotalResultBySection: function (section) {
        var total = $('.search-result-' + section).attr('data-total');
        return parseInt(total);
    },
    toggleResultTabs: function (tab) {
        if (tab != "all") {
            if ($('.tab-' + tab).hasClass("disabled")) { return; }

            $('.search-result-section').addClass("hidden");
            $('.search-result-' + tab).removeClass("hidden");
        } else {
            $('.search-result-section').removeClass("hidden");
        }
        console.log(tab);
        $('.partnerweb-search-results-tabs li').removeClass('active');
        $('.partnerweb-search-results-tabs .tab-' + tab).addClass('active');
    },
    getFilterOptions: function () {
        var filters = {};
        filters.ProductImages = $('#filterProductImage').is(':checked');
        filters.Manuals = $('#filterManuals').is(':checked');
        filters.ProductSheets = $('#filterProductSheet').is(':checked');
        filters.Drivers = $('#filterDriver').is(':checked');
        filters.Dofc = $('#filterDOFC').is(':checked');
        return filters;
    }
};
var Dofc = {
    init: function () {

        if ($('.dofc-wrapper').length) {
            $('.js-dofc-input').on('focusout', function () { $('.search-input').removeClass("is-active"); });
            $('.js-dofc-input').on('focusin', function () { $('.search-input').addClass("is-active"); });
            if ($('.jsSearch').length == 1) {
                $(document)
                    .on('change', '.jsSearchSort', Search.sort)
                    .on('change', '.jsSearchFacet', Search.sort)
                    .on('click', '.jsSearchFacetRemoveAll', Search.removeAll);
            }

            $('.js-dofc-input').focus(function () {
                $(this).addClass('has-focus');
            });

            $('.js-dofc-input').blur(function () {
                $(this).removeClass('has-focus');
            });

            $('.js-dofc-clear').on('click', function () {
                $('.js-dofc-input').val('');
                $('.js-dofc-input').focus();
            });
            
            $('.js-dofc-run').on('click', function () {
                $('.search-form').submit();
            });

            $('.js-dofc-input').keypress(function (e) {
                var key = e.which;
                if (key == 13) {
                    PartnerWeb.search();
                    return false;
                }
            });
        }

        $(window).bind('popstate ', function (event) {
            //this will handle browser back/forward navigation
            Dofc.updatePage(location.search);
        });
    },
    search: function () {
        $('.search-form').submit();
    }
};
var FAQ = {
    init: function () {
        if ($('.faq').length) {
            this.bind();
        }
    },
    bind: function () {

        var faqs = $('.faq');
        $.each(faqs, function () {
            if ($(this).find('.faq-list-item-header').length) {
                $(this).find('.faq-header').addClass('faq-enabled');
            }
        });

        $('.faq-list-item-header').on('click', function () {
            FAQ.toggle(this);
        });

        $('.faq-enabled').on('click', function () {
            FAQ.toggle($(this).parent().find('.faq-list-item-header')[0]);
        });
    },
    toggle: function (el) {
        var parent = $(el).parent();
        var content = $(parent).find('.faq-list-item-content');
        if ($(parent).hasClass('open')) {
            $(parent).removeClass('open');
            $(parent).addClass('closed');
            $(content).slideUp();
        } else {
            $(parent).addClass('open');
            $(parent).removeClass('closed');
            $(content).slideDown();
        }
    }
};;
var Forms = {
  init: function () {
    $('form.EPiServerForms select').selectric();
  }
};;
var GoogleAnalyticsRepo = {
  siteHasAnalytics: false,
    init: function () {
        try {
            if (typeof dataLayer !== 'undefined' && $.isFunction(dataLayer.push)) {
                GoogleAnalyticsRepo.siteHasAnalytics = true;

                if ($('.gtm-code').length) {
                    GoogleAnalyticsRepo.pageTypeView($('.gtm-code'));
                }
            }
        }
        catch (e) {}
    },
    pageTypeView: function (el) {
        return;
        if (GoogleAnalyticsRepo.siteHasAnalytics) {
            var pageType = $(el).attr('data-id');
            if (pageType == 'product_detail')
            {
                dataLayer = [{
                    page_type: pageType,
                    page_category: window.location.pathname.split('/')[3]
                }];
            }
            else if (pageType == 'product_list') {
                var productCategory = $(el).attr('data-category');
                dataLayer = [{
                    page_type: pageType,
                    page_category: productCategory
                }];
            }
            else
            {
                dataLayer = [{
                    page_type: pageType,
                }];
            }
        }
    },
  productView: function (sku, name, category, variant) {
      if (GoogleAnalyticsRepo.siteHasAnalytics) {
          if (sku != undefined) {
              dataLayer.push({
                  event: 'eec.detail',
                  ecommerce: {
                      detail: {
                          products: [{
                              id: sku.toString(),
                              name: name,
                              category: category,
                              variant: variant,
                          }]
                      }
                  }
              });
          }
    }
  },
  cartAdd: function (sku, name, price, quantity, currency, category, variant) {
    if (GoogleAnalyticsRepo.siteHasAnalytics) {

      dataLayer.push({
        event: 'eec.add',
          ecommerce: {
              add: {
                  products: [{
                      id: sku.toString(),
                      name: name,
                      quantity: quantity,
                      category: category,
                      variant: variant,
                      currency: currency
                  }]
            }
        }
      });
    }
  },
  cartRemove: function (sku, name, price, quantity, currency, category, variant) {
    if (GoogleAnalyticsRepo.siteHasAnalytics) {

      dataLayer.push({
        event: 'eec.remove',
        ecommerce: {
          products: [{
            id: sku.toString(),
            name: name,
            quantity: quantity,
            category: category,
              variant: variant,
              currency: currency
          }]
        }
      });
    }
  },
  cartSubmit: function (id, revenue, tax, shipping, currency, products) {
    if (GoogleAnalyticsRepo.siteHasAnalytics) {

      dataLayer.push({
        event: 'eec.purchase',
        ecommerce: {
          currencyCode: currency,
          purchase: {
            actionField: {
              id: id,
              revenue: parseFloat(revenue.replace(",", ".")),
              tax: parseFloat(tax.replace(",", ".")),
              shipping: parseFloat(shipping.replace(",", ".")),
              currency: currency
              //coupon: ''
            },
            products: products
          }
        }
      });
    }
  },
  productClick: function (sku, name, category, position, list) {
    if (GoogleAnalyticsRepo.siteHasAnalytics) {

      dataLayer.push({
        event: 'eec.impressionClick',
        ecommerce: {
          click: {
            actionField: {
              list: list
            },
            products: [{
              id: sku.toString(),
              name: name,
              category: category,
              position: position,
            }]
          }
        }
      });
    }
  },
  checkoutEntered: function (products) {
    if (GoogleAnalyticsRepo.siteHasAnalytics && products.length > 0) {

      dataLayer.push({
        event: 'eec.checkout',
          ecommerce: {
              checkout: {
                  actionField: {
                      step: 1
                  },
                  products: products
              }
        }
      });
    }
  },
    newsletterSubscription: function () {
        if (GoogleAnalyticsRepo.siteHasAnalytics) {
            dataLayer.push({
                event: 'NewsletterSubscription'
            });
        }
    },
    checkoutPaymentOption: function (option, products) {
    if (GoogleAnalyticsRepo.siteHasAnalytics) {
      dataLayer.push({
        event: 'eec.checkout',
        page_name: window.location.pathname + "step-3",
          ecommerce: {
              checkout: {
                  actionField: {
                      step: 3,
                      option: option
                  },
                  products: products
              }
        }
      });
    }
   },
    checkoutShowPayment: function (option, products) {
        if (GoogleAnalyticsRepo.siteHasAnalytics) {

            dataLayer.push({
                event: 'eec.checkout',
                page_name: window.location.pathname + "step-2",
                ecommerce: {
                    checkout: {
                        actionField: {
                            step: 2
                        },
                        products: products
                    }
                }
            });
        }
    },
  productImpression: function(sku, name, category, position, list) {
    if (GoogleAnalyticsRepo.siteHasAnalytics) {

      dataLayer.push({
        event: 'eec.impressionView',
        ecommerce: {
          impressions: [{
            id: sku.toString(),
            name: name,
            category: category,
            list: list,
            position: position,
          }]
        }
      });

    }
  }
};
var OrderConfirmation = {
  init: function () {
      if ($('.order-confirmation-details').length > 0) {
          setTimeout(this.trackPurchase, 2000);
    }
  },
    trackPurchase: function () {
        console.log("Purchase tracking");
    var $order = $('.order-confirmation'),
      $lineItems = $('.js-line-item'),
      lineItems = [];

      if ($order.data('track') == true) {
    
        console.log('Tracking sent');

        $lineItems.each(function () {
          var $lineItem = $(this);
          var lineItem = {};
          lineItem.id = $lineItem.data('sku').toString();
          lineItem.name = $lineItem.data('name');
          lineItem.price = parseFloat($lineItem.data('price').replace(",", "."));
          lineItem.quantity = parseInt($lineItem.data('quantity'));
          lineItem.variant = $lineItem.data('variant');
          lineItem.category = $lineItem.data('category');
          lineItems.push(lineItem);
        });

        GoogleAnalyticsRepo.cartSubmit(
          $order.data('id'),
          $order.data('total'),
          $order.data('tax'),
          $order.data('shipping'),
          $order.data('currency'),
          lineItems
        );
    }
  }
};;
var StoreLocatorBlock = {
    locatorLoaded: false,
    init: function () {
        if ($('.store-locator-block').length) {
            this.bind();
        }
    },
    bind: function () {
        $('.store-locator-section').on('click', function () {
            $('.store-locator-wrapper').toggle();

            if (!StoreLocatorBlock.locatorLoaded) {
                StoreLocatorBlock.loadStoreLocator();
                StoreLocatorBlock.locatorLoaded = true;
            }
        });

        $('.store-locator-header').on('click', function () {
            $('.store-locator-wrapper').toggle();
        });
    },
    loadStoreLocator: function () {
        var priiceId = $('.store-locator-block').data('priice');
        var market = $('.store-locator-block').data('marketiso');
        var url = "/storelocator/index";
        $.ajax({
            type: "POST",
            url: url,
            data: { priiceId: priiceId, market: market },
            success: function (result) {
                $('.product-page-store-locator .store-locator-container').html($(result));
            },
            error: function () {
            }
        });
    },
};;
var MarketingPopup = {
    init: function () {
        if ($('.marketing-popup').length)
            this.loadPopup();
    },
    loadPopup: function () {
        var popupCookie = Cookies.get('DORO-POPUP');

        //Newsletter block handling
        $('.marketing-popup #newsletter-desktop').parent().find('.checkbox-label').prop('for', 'newsletter-desktop-popup');
        $('.marketing-popup #newsletter-mobile').parent().find('.checkbox-label').prop('for', 'newsletter-mobile-popup');
        $('.marketing-popup #newsletter-desktop').prop('id', 'newsletter-desktop-popup');
        $('.marketing-popup #newsletter-mobile').prop('id', 'newsletter-mobile-popup');
        $('.marketing-popup .desktop-background').css('background', 'none');
        $('.marketing-popup .mobile-background').css('background', 'none');

        if (!popupCookie) {
            this.showPopup();
        }

        $('.js-marketing-popup-close').on('click', MarketingPopup.closePopup);
    },
    showPopup: function () {
        var modal = document.getElementById("marketing-popup");
        modal.style.display = "block";
        window.onclick = function (event) {
            if (event.target == modal) {
                modal.style.display = "none";
            }
        }
    },
    closePopup: function () {
        var modal = document.getElementById("marketing-popup");
        modal.style.display = "none";

        var expires = parseInt($('#marketing-popup').attr('data-expires'));
        Cookies.set('DORO-POPUP', 'true', { expires: expires });
    }
};
var LinkCollection = {
  init: function () {
    var $blocks = $('.link-collection-block');
    if ($blocks.length > 0 && typeof CSS !== 'undefined' && CSS.supports('grid-template-rows: repeat(3, 33%)')) {
      $blocks.each(function() {
        LinkCollection.styleGrid($(this));
      });

      this.bindWindowResize();
    }

    $blocks.each(function () {
      $(this).removeClass('hide');
    });
  },
  styleGrid: function ($block) {
    var bigScreen = $(window).width() > 700,
        listItemCount = $block.find('li').length,
        rowCount;

    if (bigScreen) {
      rowCount = Math.ceil(listItemCount / 3);
      $block.find('ul').css('grid-template-rows', 'repeat(' + rowCount + ', 1fr)');
    }
    else {
      rowCount = Math.ceil(listItemCount / 2);
      $block.find('ul').css('grid-template-rows', 'repeat(' + rowCount + ', 1fr)');
    }

    $block.removeClass('hide');
  },
  bindWindowResize: function () {
    $(window).resize(function () {
      setTimeout(function() {
        LinkCollection.init();
      }, 200);
    });
  }
};;
var YouTubePlayer = {
    player: null,
    playerId: "video-player",
    init: function () {
        var tag = document.createElement('script');
        tag.id = 'yt-iframe';
        tag.src = 'https://www.youtube.com/iframe_api';
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    },
    startVideo: function () {
        YouTubePlayer.player.playVideo();
    },
    stopVideo: function () {
        YouTubePlayer.player.stopVideo();
    },
    onPlayerReady: function () {
        console.log("Ready");
    },
    onPlayerStateChange: function (event) {
        if (event.data === 0) {
            var modal = document.getElementById("video-modal");
            modal.style.display = "none";            
        }
    },
    onPlayerError: function () {
        console.log("Error");
    },
    setAspectRatio: function() {
        $('.modal.video iframe').each(function () {
            $(this).css('height', $(this).width() * 9 / 16);
        });
    }
}

window.onYouTubeIframeAPIReady = function () {
    var video = document.getElementById("video-player").getAttribute("data-id");
    YouTubePlayer.player = new YT.Player("video-player", {
        videoId: video,
        playerVars: {
            'autoplay': 0, 'controls': 0, 'rel': 0, 'showinfo': 0, 'modestbranding': 1
        },
        events: {
            'onReady': YouTubePlayer.onPlayerReady,
            'onStateChange': YouTubePlayer.onPlayerStateChange,
            'onError': YouTubePlayer.onPlayerError
        }
    });
};
var Carousel = {
    init: function () {
        if ($('.products-carousel').length)
            Carousel.bind();
    },
    bind: function () {
        var carousel = $('.products-carousel');
        var centerPadding = 160;
        if (carousel.data('fullpage') == 'True') {
            centerPadding = 300;
        }

        $('.products-carousel').slick({
            centerMode: true,
            centerPadding: centerPadding + 'px',
            slidesToShow: 1,
            responsive: [
                {
                    breakpoint: 964,
                    settings: {
                        arrows: true,
                        centerMode: false,
                        centerPadding: '40px',
                        slidesToShow: 1
                    }
                }
            ]
        });
    },
};;
var Sappa = {
    init: function () {
        if ($('.sappa-search').length)
            Sappa.bind();
    },
    bind: function () {
        $('.js-sappa-search-input').on('keypress', function (e) {
            if (e.which == 13) {
                Sappa.searchSappa();
            }
        });
    },
    searchSappa: function () {
        var query = $('.js-sappa-search-input').val();
        var uri = "/sappaapi/index";

        $.ajax({
            url: uri,
            type: "POST",
            data: { query: query },
            success: function (data) {
                Sappa.renderResult(data);
            }
        });
    },
    renderResult: function(data) {
        template = $('#sappa-list-template').html();
        Mustache.parse(template);

        var contact = JSON.parse(data);

        var result = Mustache.render(template, contact);
        $("#sappa-result").html(result);
    }
};;
var FaqSearch = {
    init: function () {
        if ($('.faq-search').length) {
            FaqSearch.bind();
        }
    },
    bind: function () {
        $('.js-faq-search-input').on('keypress', function (e) {
            if (e.which == 13) {
                FaqSearch.searchFaq();
            }
        });

        $('.faq-list-item-header').on('click', function () {
            FAQ.toggle(this);
        });

        $('.faq-search .js-search-clear').off().on('click', function () {
            $('.js-faq-search-input').val('');
            FaqSearch.searchFaq();
        });

        $('.js-faq-rating').on('click', function () {
            FaqSearch.rateFAQ(this);
        });

        $('.search-results-tabs .tab-all').on('click', function () { FaqSearch.toggleResultTabs('all'); });
        $('.search-results-tabs .tab').on('click', function () {
            FaqSearch.toggleResultTabs($(this).data('key'));
        });

        if ($('#faq-section-search').length) {
            FaqSearch.fetchCategory();
        }

        FaqSearch.bindFaqDelete();
    },
    fetchCategory: function() {
        var uri = "/faqapi/category";
        var lang = $('body').data('lang');
        var category = $('#faq-section-search').data('section');

        $.ajax({
            url: uri,
            type: "POST",
            data: { category: category, language: lang },
            success: function (data) {
                FaqSearch.renderCategory(data);
            }
        });
    },
    toggleResultTabs: function (tab) {

        $('.search-results-tabs li').removeClass('active');

        if (tab != "all") {
            if ($('.tab-' + tab).hasClass("disabled")) { return; }

            $('.search-results-tabs .tab-' + tab).addClass('active');
            $('.faq-section').addClass("hidden");
            $('#tab-' + tab).removeClass("hidden");
        } else {
            $('.search-results-tabs .tab-all').addClass('active');
            $('.faq-section').removeClass("hidden");
        }

        $('.faq-results-tabs li').removeClass('active');
        $('.faq-results-tabs .tab-' + tab).addClass('active');
    },
    searchFaq: function () {
        var query = $('.js-faq-search-input').val();
        //var uri = "/faqapi/index";

        var uri = $('.faq-search').data('url');
        var lang = "en"; //$('body').data('lang');
        $.ajax({
            url: uri,
            type: "POST",
            data: { query: query, language: lang },
            success: function (data) {
                FaqSearch.renderResult(data);
            }
        });
    },
    bindFaqDelete: function () {
        $('.faq-delete').on('click', function () {
            var id = $(this).attr('data-id');
            var button = this;

            $(button).parent().parent().parent().parent().css('opacity', '0.2');

            var uri = "/faqapi/delete";
            $.ajax({
                url: uri,
                type: "POST",
                data: FaqSearch.addAntiForgeryToken({ id: id }),
                success: function (data) {
                    $(button).parent().parent().parent().parent().remove();
                }
            });
        });
    },
    renderCategory: function (data) {
        template = $('#faq-list-template').html();
        Mustache.parse(template);

        var total = 0;
        var result = {};
        result.sections = [];

        $.each(JSON.parse(data).Results, function () {

            var section = {};
            section.key = "";
            section.name = "";
            section.faq = [];

            $.each(this, function () {

                try {
                    this.Answer = FaqSearch.decodeEntities(this.Answer);
                    this.Question = FaqSearch.decodeEntities(this.Question);

                    if (this.Question.substr(0, 4) != "</p>") {
                        this.Question = "<p>" + this.Question + "</p>";
                    }

                    if ($('#faq-section-search').attr('data-section') != "") {
                        this.Category = $('#faq-section-search').attr('data-section').toLowerCase();
                    }
                    
                    //if (this.Category.indexOf(";") > 0) {
                    //    this.Category = this.Category.substr(0, this.Category.indexOf(';'));
                    //}
                    //console.log(this.Category);

                    section.key = this.Category;
                    section.name = $('.faq-search').data('section-' + section.key);
                    section.faq.push(this);
                }
                catch (error) {
                    console.log("Error in: " + this.Question);
                }
            });

            //console.log(section);

            try {
                $('.search-results-tabs .tab-' + section.key + " span").html(section.faq.length);
            }
            catch (error) {
                console.log("Error in " + section.key);
            }

            if (section.faq.length > 0) {
                try {
                    $('.search-results-tabs .tab-' + section.key).removeClass('disabled');
                }
                catch (error) {
                    console.log("Error in removal of section");
                }
            }

            total += section.faq.length;

            result.sections.push(section);
        });

        var result = Mustache.render(template, result.sections[0]);
        $("#faq-result").html(result);

        $('.faq-list-item-header').on('click', function () {
            FAQ.toggle(this);
        });

        $('.js-faq-rating').on('click', function () {
            FaqSearch.rateFAQ(this);
        });

        FaqSearch.bindFaqDelete();
    },
    renderResult: function(data) {
        template = $('#faq-list-template').html();
        Mustache.parse(template);

        var total = 0;
        var result = {};
        result.sections = [];

        $('.search-results-tabs .tab').addClass('disabled');
        $('.search-results-tabs .tab' + " span").html("0");
        $.each(JSON.parse(data).Results, function () {

            var section = {};
            section.key = "";
            section.name = "";
            section.faq = [];

            $.each(this, function () {
                this.Answer = FaqSearch.decodeEntities(this.Answer);
                this.Question = FaqSearch.decodeEntities(this.Question);

                if (this.Question.substr(0, 4) != "</p>") {
                    this.Question = "<p>" + this.Question + "</p>";
                }

                section.key = this.Category;
                section.name = $('.faq-search').data('section-' + section.key);
                section.faq.push(this);
            });

            try {
                $('.search-results-tabs .tab-' + section.key + " span").html(section.faq.length);
                if (section.faq.length > 0)
                    $('.search-results-tabs .tab-' + section.key).removeClass('disabled');
            }
            catch (e) {}


            total += section.faq.length;

            result.sections.push(section);
        });
        
        var result = Mustache.render(template, result);
        $("#faq-result").html(result);


        if ($('.js-faq-search-input').val() != '') {
            $('#results-total').html(total);
            $('#results-query').html($('.js-faq-search-input').val());
            $('.search-results-header').show();
        }
        else {
            $('.search-results-header').hide();
        }

        $('.faq-list-item-header').on('click', function () {
            FAQ.toggle(this);
        });

        $('.js-faq-rating').on('click', function () {
            FaqSearch.rateFAQ(this);
        });
    },
    rateFAQ: function (btn) {
        var id = $(btn).attr('data-id');
        var score = $(btn).attr('data-rating');
        var thankyou = $('.faq-search').attr('data-rate-label');

        var uri = "/faqapi/rating";
        $.ajax({
            url: uri,
            type: "POST",
            data: FaqSearch.addAntiForgeryToken({ id: id, score: score }),
            success: function (data) {
                $(btn).parent().html(thankyou);
            }
        });
    },
    decodeEntities: function(encodedString) {
        var textArea = document.createElement('textarea');
        textArea.innerHTML = encodedString;
        return textArea.value;
    },
    addAntiForgeryToken: function (data) {
        data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
        return data;
    }
};;
var SoftwareUpdates = {
    init: function () {
        if ($('.softwareupdates').length) {
            this.bind();
        }
    },
    bind: function () {
        $('#swupdates').off().on('change', SoftwareUpdates.search);
        $('#swoperator').off().on('change', SoftwareUpdates.search);
        $('#sw-result tr').off().on('click', function () {
            SoftwareUpdates.modal(this);
        });

        $('.modal .close').off().on('click', function () {
            $('#swmodal').hide();
        });

        var modal = document.getElementById("swmodal");
        window.onclick = function (event) {
            if (event.target == modal) {
                modal.style.display = "none";
            }
        }
    },
    modal: function (row) {
        $('#swmodal').show();

        $('#swmodal #sw-product').html($(row).find('#sw-product').html());
        $('#swmodal #sw-operator').html($(row).find('#sw-operator').html());
        $('#swmodal #sw-id').html($(row).find('#sw-id').html());
        $('#swmodal #sw-version').html($(row).find('#sw-version').html());
        $('#swmodal #sw-availability').html($(row).find('#sw-availability').html());
        $('#swmodal #sw-launchdate').html($(row).find('#sw-launchdate').html());
        $('#swmodal #sw-guarantee').html($(row).find('#sw-guarantee').html());
        $('#swmodal #sw-updatesize').html($(row).find('#sw-updatesize').html());
        $('#swmodal #sw-comments').html($(row).find('#sw-comments').html());

    },
    search: function () {
        var phone = $('#swupdates').val();
        var operatorVariant = $('#swoperator').val();

        var lang = $('body').data('lang');
        var uri = $('.softwareupdates').attr('data-url');
        $.ajax({
            url: uri,
            type: "POST",
            data: { query: phone, operatorVariant: operatorVariant, language: lang },
            success: function (data) {
                SoftwareUpdates.render(data);
            }
        });
    },
    render: function (data) {
        template = $('#sw-list-template').html();
        Mustache.parse(template);

        var result = {};
        result.Rows = JSON.parse(data);
        
        var list = Mustache.render(template, result);

        $("#sw-result").html(list);

        $('#sw-result tr').off().on('click', function () {
            SoftwareUpdates.modal(this);
        });
    }
};;
var LegalInfo = {
    init: function () {
        if ($('.legal-info').length) {
            this.bind();
        }
    },
    bind: function () {
        $('#sw-result tr').off().on('click', function () {
            LegalInfo.modal(this);
        });

        $('.modal .close').off().on('click', function () {
            $('#swmodal').hide();
        });

        var modal = document.getElementById("swmodal");
        window.onclick = function (event) {
            if (event.target == modal) {
                modal.style.display = "none";
            }
        }
    },
    modal: function (row) {
        $('#swmodal').show();

        $('#swmodal #sw-product').html($(row).find('#sw-product').html());
        $('#swmodal #RepairabilityApplicableIndex').html($(row).find('#RepairabilityApplicableIndex').html());
        $('#swmodal #LegalRareEarths').html($(row).find('#LegalRareEarths').html());
        $('#swmodal #IncorporationOfRecycledMaterials').html($(row).find('#IncorporationOfRecycledMaterials').html());
        $('#swmodal #LegalRecyclability').html($(row).find('#LegalRecyclability').html());
        $('#swmodal #LegalPreciousMetalsMG').html($(row).find('#LegalPreciousMetalsMG').html());
        $('#swmodal #LegalHazardousSubstancesLevel').html($(row).find('#LegalHazardousSubstancesLevel').html());
        $('#swmodal #Compostability').html($(row).find('#Compostability').html());
        $('#swmodal #PossibilityofReusePackaging').html($(row).find('#PossibilityofReusePackaging').html());
    }
};;
var Spritespin = {
    init: function () {
        if ($('.spritespin').length)
            Spritespin.bind();
    },
    bind: function () {
        $('.js-image-360').off().on('click', function () {
            $("#mySpriteSpin").show();
            $('.image-slider').hide();

            $('.js-image-360').addClass('active');
            $('.js-image-slideshow').removeClass('active');

            $(".rotating-image-toolbar").removeClass('image');
        });

        $('.js-image-slideshow').off().on('click', function () {
            $('.image-slider').show();
            $("#mySpriteSpin").hide();

            $('.product-page-images .image-slider').slick('refresh');

            $('.js-image-slideshow').addClass('active');
            $('.js-image-360').removeClass('active');

            $(".rotating-image-toolbar").addClass('image');
        });

        $("#mySpriteSpin").spritespin({
            // path to the source images.
            source: [
                "/static/frame/01.jpg",
                "/static/frame/36.jpg",
                "/static/frame/35.jpg",
                "/static/frame/34.jpg",
                "/static/frame/33.jpg",
                "/static/frame/32.jpg",
                "/static/frame/31.jpg",
                "/static/frame/30.jpg",
                "/static/frame/29.jpg",
                "/static/frame/28.jpg",
                "/static/frame/27.jpg",
                "/static/frame/26.jpg",
                "/static/frame/25.jpg",
                "/static/frame/24.jpg",
                "/static/frame/23.jpg",
                "/static/frame/22.jpg",
                "/static/frame/21.jpg",
                "/static/frame/20.jpg",
                "/static/frame/19.jpg",
                "/static/frame/18.jpg",
                "/static/frame/17.jpg",
                "/static/frame/16.jpg",
                "/static/frame/15.jpg",
                "/static/frame/14.jpg",
                "/static/frame/13.jpg",
                "/static/frame/12.jpg",
                "/static/frame/11.jpg",
                "/static/frame/10.jpg",
                "/static/frame/09.jpg",
                "/static/frame/08.jpg",
                "/static/frame/07.jpg",
                "/static/frame/06.jpg",
                "/static/frame/05.jpg",
                "/static/frame/04.jpg",
                "/static/frame/03.jpg",
                "/static/frame/02.jpg",
            ],
            width: 400,
            height: 600,
            frames: 36,
            frameTime: 40,
            loop: false,
            reverse: true,
            responsive: true
        });
    },
};;
var Registration = {
    init: function () {
        $(document)
            .on('submit', '.jsOrderConfirmationRegistration', Registration.orderConfirmationRegistration)
            .on('submit', '.jsOrderConfirmationRegistrationAssign', Registration.orderConfirmationRegistrationAssign)
            .on('submit', '.jsRegistration', Registration.register);
    },
    register: function (e) {
        e.preventDefault();
        var form = $(this).closest(".jsRegistration");
        $.ajax({
            type: "POST",
            url: form[0].action,
            data: form.serialize().replace("&Address.Region=", "&Address.CountryRegion.Region="),
            success: function (result, status, xhr) {
                var ct = xhr.getResponseHeader("content-type") || "";
                if (ct.indexOf('json') > -1) {
                    document.location = result.ReturnUrl;
                }
                else {
                    $(form).parent().replaceWith($(result));
                }
            }
        });
    },
    orderConfirmationRegistration: function (e) {
        e.preventDefault();
        var form = $(this).closest(".jsOrderConfirmationRegistration");
        $.ajax({
            type: "POST",
            url: form[0].action,
            data: form.serialize(),
            success: function (result) {
                $(form).parent().replaceWith($(result));
            }
        });
    },
    orderConfirmationRegistrationAssign: function (e) {
        e.preventDefault();
        var form = $(this).closest(".jsOrderConfirmationRegistrationAssign");
        $.ajax({
            type: "POST",
            url: form[0].action,
            data: form.serialize(),
            success: function (result) {
                $(form).parent().replaceWith($(result));
            }
        });
    }
};;
var LazyLoad = {
    init: function () {
        if ($('.lazyload').length) {
            this.bind();
        }
    },
    bind: function () {
        var image = $('.lazyload');
        $.each(image, function () {
            var src = $(this).attr('data-src');
            $(this).attr('src', src);
        });
    },
};;
var BlogCategory = {
    init: function () {
        $(document).on('click', '.category-list a', BlogCategory.SelectedCategory);
        $(document).on('click', '.load-more-foc', BlogCategory.LoadMore)
    },

    SelectedCategory: function (e) {
        e.preventDefault();
        if ((window.location.href.split('?')).length > 0) {
            history.pushState({}, "", window.location.href.split('?')[0])
        }
        var $clickedCat = $(this)
        var $wrapper = $clickedCat.closest(".blog-category");
        if ($clickedCat.hasClass("active")) {
            return;
        }
        $(".loading-overlay").show();


        $(".load-more-foc").show();
        $wrapper.data("page", 1);

        var catId = "";
        $(".category-list").find(".active").removeClass("active");
        $clickedCat.addClass("active");

        if ($clickedCat.data("catvalue") != "All") {
            var catId = $clickedCat.data("catid")
        }
        var pageref = $wrapper.data("pageref")

        var payload = {};
        payload.Filters = parseInt(catId);
        payload.Language = $(location).attr('pathname').split("/")[1]
        payload.getNext = false;
        payload.controllerId = pageref
        payload.readmore = $wrapper.data("readmore");

        $.ajax({
            method: 'get',
            url: "/BlogCategoryApi",
            data: payload
        }).then(function (response) {
            const { data } = response;
            $(".post-wraps").empty();
            $(".post-wraps").append(response);
            $(".loading-overlay").hide();

            var image = $('.lazyload');
            $.each(image, function () {
                var src = $(this).attr('data-src');
                $(this).attr('src', src);
            });

        })
        //e.stopPropagation();
    },

    LoadMore: function (e) {
        var $selectedCat = $(".category-list").find(".active");
        var $wrapper = $(this).closest(".blog-category");
        var pageref = $wrapper.data("pageref")
        var page = $wrapper.data("page")
        var amountToLoad = $wrapper.data("loadamount")

        var catId = 0;
        if ($selectedCat.data("catvalue") != "All") {
            catId = $selectedCat.data("catid")
        }

        var payload = {};
        payload.Filters = parseInt(catId);
        payload.page = page;
        payload.Language = $(location).attr('pathname').split("/")[1]
        payload.getNext = true;
        payload.controllerId = pageref;
        payload.AmountToShow = amountToLoad;
        payload.readmore = $wrapper.data("readmore");

        $.ajax({
            method: 'get',
            url: "/BlogCategoryApi",
            data: payload
        }).then(function (response) {
            const { data } = response;
            $wrapper.data("page", page + 1);
            if (response.length < 10) {
                $(".load-more-foc").hide();
            }
            $(".post-wraps").append(response);

            var image = $('.lazyload');
            $.each(image, function () {
                var src = $(this).attr('data-src');
                $(this).attr('src', src);
            });
        })
    }
};
var Teaser = {
    Audio: [],
    init: function () {
        if ($('.teaser').length) {
            this.bind();
        }

    },
    bind: function () {
        console.log("TEASER");
        $.each($('.js-audio'), function () {

            var audio = $(this).parent().find("audio");
            Teaser.Audio.push(audio);

            $(this).off().on('click', function () {
                $.each(Teaser.Audio, function () {
                    this[0].pause();
                    //console.log(this);
                });

                var setState = "play";
                if ($(this).hasClass("play")) {
                    setState = "pause";
                }

                $('.js-audio').removeClass('play');
                $('.js-audio').addClass('pause');

                var audio = $(this).parent().find('audio');
                console.log(audio);
                if (setState == "play") {
                    $(this).addClass('play');
                    audio[0].play();
                }
                else {
                }
            });

        });

        $.each($('.youtube-link'), function () {
            console.log("VIDEO");
            // Get video ID
            var getvideoid = $(this).attr("youtubeid");

            // Default options
            var settings = $.extend({
                videoID: getvideoid,
                autoPlay: true,
                theme: "dark"
            }, null);

            // Convert some values
            if (settings.autoPlay === true) { settings.autoPlay = 1 } else if (settings.autoPlay === false) { settings.autoPlay = 0 }
            if (settings.theme === "dark") { settings.theme = "grtyoutube-dark-theme" } else if (settings.theme === "light") { settings.theme = "grtyoutube-light-theme" }

            // Initialize on click
            if (getvideoid) {
                $(this).on("click", function () {
                    $("body").append('<div class="grtyoutube-popup ' + settings.theme + '">' +
                        '<div class="grtyoutube-popup-content">' +
                        '<span class="grtyoutube-popup-close"></span>' +
                        '<iframe class="grtyoutube-iframe" src="https://www.youtube.com/embed/' + settings.videoID + '?rel=0&wmode=transparent&autoplay=' + settings.autoPlay + '&iv_load_policy=3" allowfullscreen frameborder="0" allow="autoplay; fullscreen"></iframe>' +
                        '</div>' +
                        '</div>');
                });
            }

            // Close the box on click or escape
            $(this).on('click', function (event) {
                event.preventDefault();
                $(".grtyoutube-popup-close, .grtyoutube-popup").click(function () {
                    $(".grtyoutube-popup").remove();
                });
            });

            $(document).keyup(function (event) {
                if (event.keyCode == 27) {
                    $(".grtyoutube-popup").remove();
                }
            });
        });

        console.log(Teaser.Audio);
    },
};;
var ProductObserver = {
  init: function () {
    var products = [].slice.call(document.querySelectorAll(".products-tile:not(.observed)"));
    if ("IntersectionObserver" in window) {
      var productObserver = new IntersectionObserver(function (entries, observer) {
        entries.forEach(function (entry) {

          if (entry.isIntersecting) {
            var product = entry.target,
                $product = $(product);
            Products.trackProductImpression($product);
            productObserver.unobserve(product);
            $product.addClass('observed');
          }
        });
      });

      products.forEach(function (product) {
        productObserver.observe(product);
      });

    } else { //old browser

      products.forEach(function (product) {
      if (ProductObserver.isElementPartiallyInViewport(product)) {
        var $product = $(product);
        if (!$product.hasClass('observed')) {
          Products.trackProductImpression($product);
          $product.addClass('observed');
        }
      }
    });

      $(window).scroll(function() {
        setTimeout(function() {
          products.forEach(function(product) {
            if (ProductObserver.isElementPartiallyInViewport(product)) {
              var $product = $(product);
              if (!$product.hasClass('observed')) {
                Products.trackProductImpression($product);
                $product.addClass('observed');
              }
            }
          });
        }, 250);
      });
    }
  },
  isElementPartiallyInViewport: function(el)
  {
    var rect = el.getBoundingClientRect();
    var windowHeight = (window.innerHeight || document.documentElement.clientHeight);
    var windowWidth = (window.innerWidth || document.documentElement.clientWidth);

    var vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) > 200);
    var horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);

    return (vertInView && horInView);
  }
};;
