PageSourceSearch

https://www.jojomamanbebe.co.uk/scripts/bundles/libraries.js?v=hWO…72nHLbSJz0Ki0qDoMTANbU36AjQ1?v=2026.916.2.1

js jojomamanbebe.co.uk collected 2026-09-25 23:38:40 UTC 66,885 bytes, 1,138 lines download raw bytes

1/* MinifyError
2(1113,255-262): run-time error JS1019: Can't have 'break' outside of loop: break a
3 */
4/*!
5 * hoverIntent r7 // 2013.03.11 // jQuery 1.9.1+
6 * http://cherne.net/brian/resources/jquery.hoverIntent.html
7 *
8 * You may use hoverIntent under the terms of the MIT license.
9 * Copyright 2007, 2013 Brian Cherne
10 */
11(function (e) { e.fn.hoverIntent = function (t, n, r) { var i = { interval: 100, sensitivity: 7, timeout: 0 }; if (typeof t === "object") { i = e.extend(i, t) } else if (e.isFunction(n)) { i = e.extend(i, { over: t, out: n, selector: r }) } else { i = e.extend(i, { over: t, out: t, selector: n }) } var s, o, u, a; var f = function (e) { s = e.pageX; o = e.pageY }; var l = function (t, n) { n.hoverIntent_t = clearTimeout(n.hoverIntent_t); if (Math.abs(u - s) + Math.abs(a - o) < i.sensitivity) { e(n).off("mousemove.hoverIntent", f); n.hoverIntent_s = 1; return i.over.apply(n, [t]) } else { u = s; a = o; n.hoverIntent_t = setTimeout(function () { l(t, n) }, i.interval) } }; var c = function (e, t) { t.hoverIntent_t = clearTimeout(t.hoverIntent_t); t.hoverIntent_s = 0; return i.out.apply(t, [e]) }; var h = function (t) { var n = jQuery.extend({}, t); var r = this; if (r.hoverIntent_t) { r.hoverIntent_t = clearTimeout(r.hoverIntent_t) } if (t.type == "mouseenter") { u = n.pageX; a = n.pageY; e(r).on("mousemove.hoverIntent", f); if (r.hoverIntent_s != 1) { r.hoverIntent_t = setTimeout(function () { l(n, r) }, i.interval) } } else { e(r).off("mousemove.hoverIntent", f); if (r.hoverIntent_s == 1) { r.hoverIntent_t = setTimeout(function () { c(n, r) }, i.timeout) } } }; return this.on({ "mouseenter.hoverIntent": h, "mouseleave.hoverIntent": h }, i.selector) } })(jQuery);
12/*!
13 * jQuery JSON Plugin
14 * version: 2.3 (2011-09-17)
15 *
16 * This document is licensed as free software under the terms of the
17 * MIT License: http://www.opensource.org/licenses/mit-license.php
18 *
19 * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org
20 * website's http://www.json.org/json2.js, which proclaims:
21 * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
22 * I uphold.
23 *
24 * It is also influenced heavily by MochiKit's serializeJSON, which is
25 * copyrighted 2005 by Bob Ippolito.
26 */
27
28(function( $ ) {
29
30	var	escapeable = /["\\\x00-\x1f\x7f-\x9f]/g,
31		meta = {
32			'\b': '\\b',
33			'\t': '\\t',
34			'\n': '\\n',
35			'\f': '\\f',
36			'\r': '\\r',
37			'"' : '\\"',
38			'\\': '\\\\'
39		};
40
41	/**
42	 * jQuery.toJSON
43	 * Converts the given argument into a JSON respresentation.
44	 *
45	 * @param o {Mixed} The json-serializble *thing* to be converted
46	 *
47	 * If an object has a toJSON prototype, that will be used to get the representation.
48	 * Non-integer/string keys are skipped in the object, as are keys that point to a
49	 * function.
50	 *
51	 */
52	$.toJSON = typeof JSON === 'object' && JSON.stringify
53		? JSON.stringify
54		: function( o ) {
55
56		if ( o === null ) {
57			return 'null';
58		}
59
60		var type = typeof o;
61
62		if ( type === 'undefined' ) {
63			return undefined;
64		}
65		if ( type === 'number' || type === 'boolean' ) {
66			return '' + o;
67		}
68		if ( type === 'string') {
69			return $.quoteString( o );
70		}
71		if ( type === 'object' ) {
72			if ( typeof o.toJSON === 'function' ) {
73				return $.toJSON( o.toJSON() );
74			}
75			if ( o.constructor === Date ) {
76				var	month = o.getUTCMonth() + 1,
77					day = o.getUTCDate(),
78					year = o.getUTCFullYear(),
79					hours = o.getUTCHours(),
80					minutes = o.getUTCMinutes(),
81					seconds = o.getUTCSeconds(),
82					milli = o.getUTCMilliseconds();
83
84				if ( month < 10 ) {
85					month = '0' + month;
86				}
87				if ( day < 10 ) {
88					day = '0' + day;
89				}
90				if ( hours < 10 ) {
91					hours = '0' + hours;
92				}
93				if ( minutes < 10 ) {
94					minutes = '0' + minutes;
95				}
96				if ( seconds < 10 ) {
97					seconds = '0' + seconds;
98				}
99				if ( milli < 100 ) {
100					milli = '0' + milli;
101				}
102				if ( milli < 10 ) {
103					milli = '0' + milli;
104				}
105				return '"' + year + '-' + month + '-' + day + 'T' +
106					hours + ':' + minutes + ':' + seconds +
107					'.' + milli + 'Z"';
108			}
109			if ( o.constructor === Array ) {
110				var ret = [];
111				for ( var i = 0; i < o.length; i++ ) {
112					ret.push( $.toJSON( o[i] ) || 'null' );
113				}
114				return '[' + ret.join(',') + ']';
115			}
116			var	name,
117				val,
118				pairs = [];
119			for ( var k in o ) {
120				type = typeof k;
121				if ( type === 'number' ) {
122					name = '"' + k + '"';
123				} else if (type === 'string') {
124					name = $.quoteString(k);
125				} else {
126					// Keys must be numerical or string. Skip others
127					continue;
128				}
129				type = typeof o[k];
130
131				if ( type === 'function' || type === 'undefined' ) {
132					// Invalid values like these return undefined
133					// from toJSON, however those object members
134					// shouldn't be included in the JSON string at all.
135					continue;
136				}
137				val = $.toJSON( o[k] );
138				pairs.push( name + ':' + val );
139			}
140			return '{' + pairs.join( ',' ) + '}';
141		}
142	};
143
144	/**
145	 * jQuery.evalJSON
146	 * Evaluates a given piece of json source.
147	 *
148	 * @param src {String}
149	 */
150	$.evalJSON = typeof JSON === 'object' && JSON.parse
151		? JSON.parse
152		: function( src ) {
153		return eval('(' + src + ')');
154	};
155
156	/**
157	 * jQuery.secureEvalJSON
158	 * Evals JSON in a way that is *more* secure.
159	 *
160	 * @param src {String}
161	 */
162	$.secureEvalJSON = typeof JSON === 'object' && JSON.parse
163		? JSON.parse
164		: function( src ) {
165
166		var filtered = 
167			src
168			.replace( /\\["\\\/bfnrtu]/g, '@' )
169			.replace( /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
170			.replace( /(?:^|:|,)(?:\s*\[)+/g, '');
171
172		if ( /^[\],:{}\s]*$/.test( filtered ) ) {
173			return eval( '(' + src + ')' );
174		} else {
175			throw new SyntaxError( 'Error parsing JSON, source is not valid.' );
176		}
177	};
178
179	/**
180	 * jQuery.quoteString
181	 * Returns a string-repr of a string, escaping quotes intelligently.
182	 * Mostly a support function for toJSON.
183	 * Examples:
184	 * >>> jQuery.quoteString('apple')
185	 * "apple"
186	 *
187	 * >>> jQuery.quoteString('"Where are we going?", she asked.')
188	 * "\"Where are we going?\", she asked."
189	 */
190	$.quoteString = function( string ) {
191		if ( string.match( escapeable ) ) {
192			return '"' + string.replace( escapeable, function( a ) {
193				var c = meta[a];
194				if ( typeof c === 'string' ) {
195					return c;
196				}
197				c = a.charCodeAt();
198				return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
199			}) + '"';
200		}
201		return '"' + string + '"';
202	};
203
204})( jQuery );
205;
206/*! Modernizr 2.6.2 (Custom Build) | MIT & BSD
207 * Build: http://modernizr.com/download/#-csstransforms-csstransforms3d-csstransitions-touch-shiv-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load
208 */
209;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;
vendor: 7,744 bytes, lines 209-217
209var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:w(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},q.csstransforms=function(){return!!F("transform")},q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.csstransitions=function(){return F("transition")};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+t.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};;
210/*!
211* DropKick 1.4
212*
213* Highly customizable <select> lists
214* https://github.com/robdel12/DropKick
215*
216* Created by: Jamie Lottering <http://github.com/JamieLottering> <http://twitter.com/JamieLottering>
217*
218*/
219
220(function ($, window, document) {
221    'use strict';
222
223    var 
224    msVersion = navigator.userAgent.match(/MSIE ([0-9]{1,}[\.0-9]{0,})/),
225    msie = !!msVersion,
226    ie6 = msie && parseFloat(msVersion[1]) < 8,
227    isMobile = navigator.userAgent.match(/iPad|iPhone|Android|IEMobile|BlackBerry/i),
228
229    // Public methods exposed to $.fn.dropkick()
230    methods = {},
231
232    // Cache every <select> element that gets dropkicked
233    lists = [],
234
235    // Convenience keys for keyboard navigation
236    keyMap = {
237        'escape': 27,
238        'left': 37,
239        'up': 38,
240        'right': 39,
241        'down': 40,
242        'enter': 13,
243        'tab': 9,
244        'zero': 48,
245        'z': 90,
246        'last': 221  //support extend charsets such as Danish, Ukrainian etc.
247        },
248
249    isResponsiveShoppingBag = Next.Settings.Channel.ResponsiveShoppingBagIsEnabled &&
250        window.location.pathname.toLowerCase().indexOf("/shoppingbag") > -1,
251
252    spanElement = isResponsiveShoppingBag ? '' : '<span class="{{ class }}" {{ image }}></span>',
253    // HTML template for the dropdowns
254    dropdownTemplate = [
255      '<div role="combobox" class="dk_container {{ isDisabled }}" id="dk_container_{{ id }}" tabindex="{{ tabindex }}" aria-hidden="true">',
256      '<a href="#" class="dk_toggle dk_label">' + spanElement + '{{ label }}</a>',
257      '<div role="listbox" class="dk_options">',
258      '<ul class="dk_options_inner" role="main" aria-hidden="true">',
259      '</ul>',
260      '</div>',
261      '</div>'
262    ].join(''),
263
264    cssClasses = {
265        validation: {
266            success:"valid-success",
267            error:"valid-error"
268        }
269    },
270
271    // HTML template for dropdown options
272    optionTemplate = '<li class="{{ class }}"><a class="dk_dropdown_option" data-dk-dropdown-value="{{ value }}">' + spanElement + '{{ text }}</a></li>',
273
274    // Some nice default values
275    defaults = {
276        theme: false,
277        changes: false,
278        syncReverse: true,
279        nativeMobile: true,
280        autoWidth: true
281    },
282
283    // Make sure that only one dropdown is open the document
284    $opened = null,
285
286    // Make sure that only one dropdown has focus in the document
287    $focused = null,
288
289    openScrollEventName = 'onwheel' in window ? 'wheel.dropkickopenscroll' : // Modern browsers support "wheel"
290                        'onmousewheel' in document ? 'mousewheel.dropkickopenscroll' : // Webkit and IE support at least "mousewheel"
291                        "MouseScrollEvent" in window ? 'DOMMouseScroll.dropkickopenscroll MozMousePixelScroll.dropkickopenscroll' : // legacy non-standard event for older Firefox
292                        false // lacks support
293    ,
294
295    openResizeEventName = "resize.dropkickopenresize",
296
297    // private
298    // Update the <select> value, and the dropdown label
299    updateFields = function (option, $dk, reset) {
300        var value, label, data, $select;
301
302        value = option.attr('data-dk-dropdown-value');
303        label = option.text();
304        data = $dk.data('dropkick');
305
306        if (data !== undefined) {
307            $select = data.$select;
308            $select.val(value);
309            $select.trigger('change'); // Added to let it act like a normal select [Acemir >> In fact, I suggest that this must always be true]
310
311            // $dk.find('.dk_label').text(label);
312
313            reset = reset || false;
314
315            if (data.settings.change && !reset && !data.settings.syncReverse) {
316                data.settings.change.call($select, value, label);
317            }
318        }
319
320    },
321
322    // Close a dropdown
323    closeDropdown = function ($dk) {
324        $dk.removeClass('dk_open dk_open_top');
325        $dk.attr("aria-expanded", "false");
326        $opened = null;
327        //Remove open dropdown scroll event
328        if (openScrollEventName) {
329            $(document).off(openScrollEventName);
330        }
331        $(window).off(openResizeEventName);
332    },
333
334    // Report whether there is enough space in the window to drop down.
335    enoughSpace = function ($dk) {
336
337        var $window = $(window);
338        var windowScrollTop = $window.scrollTop();
339        var windowHeight = $window.height();
340
341        var visibleHeaderHeight = 0;
342        var $pageHeader = $("header.PageHeader");
343        if ($pageHeader.length>0) {
344            visibleHeaderHeight = Math.max(0, (($pageHeader.offset().top - windowScrollTop) + $pageHeader.height()));
345        }
346
347        var visibleFooterHeight = 0;
348        var $pageFooter = $("footer.PageFooter");
349        if (!$pageFooter.length) {
350            //Standard footer not found
351            //Find Shopping Bag footer
352            $pageFooter = $(".shoppingFooterWrapper");
353        }
354
355
356
357        if ($pageFooter.length) {
358
359            var pageFooterOffsetTop = $pageFooter.offset().top;
360
361            if (pageFooterOffsetTop == 0)
362                pageFooterOffsetTop = 600;
363
364            visibleFooterHeight = Math.max(0, (windowScrollTop + windowHeight) - pageFooterOffsetTop);
365        }
366
367        var
368        $dk_toggle = $dk.find('.dk_toggle'),
369        optionsHeight = $dk.find('.dk_options').outerHeight(false),
370        spaceBelow = windowHeight - $dk_toggle.outerHeight(false) - $dk_toggle.offset().top + windowScrollTop - visibleFooterHeight,
371        spaceAbove = $dk_toggle.offset().top - windowScrollTop - visibleHeaderHeight;
372
373        // Take into account the bottom position of the Overflowfixer container if it exists on this page, as this may also limit the space below
374        var $overflowFixer = $(document).find('.OverflowFixer');
375        if ($overflowFixer.length > 0) {
376            var overflowSpaceBelow = $overflowFixer.height() - $dk_toggle.outerHeight(false) - $dk_toggle.offset().top + $overflowFixer.offset().top;
377            spaceBelow = (spaceBelow > overflowSpaceBelow) ? overflowSpaceBelow : spaceBelow;
378            }
379
380        var displayBelow = (spaceBelow > optionsHeight) ? true
381                        : (spaceBelow > spaceAbove)
382
383        return {
384            maxHeight: displayBelow ? spaceBelow : spaceAbove,
385            displayBelow: displayBelow
386        };
387    },
388
389    setScrollPos = function ($dk, anchor, e) {
390        var
391        wrapper = $dk.find('.dk_options'),
392        height = anchor.prevAll('li').outerHeight(false) * anchor.prevAll('li').length,
393        minHeight = wrapper.scrollTop(),
394        maxHeight = wrapper.height() + wrapper.scrollTop() - anchor.outerHeight(false)
395      ;
396
397        if ((e && e.type === 'keydown') || (height < minHeight || height > maxHeight)) {
398            wrapper.scrollTop(height); // A more direct approach
399        }
400    },
401
402    highlight = function ($a) {
403        $a.parent().parent().find('.highlight').removeClass('highlight');
404        $a.addClass('highlight');
405    },
406
407    unhighlight = function ($a) {
408        $a.removeClass('highlight');
409    },
410
411    // Set the currently selected option
412    setCurrent = function ($current, $dk, e) {
413        $dk.find('.dk_option_current').removeClass('dk_option_current');
414        $current.addClass('dk_option_current');
415        setScrollPos($dk, $current, e);
416        
417
418        var $a = $current.find('.dk_dropdown_option');
419        highlight($a);
420    },
421
422    getPositionCorrection = function () {
423        var top = -1;
424        var bottom = 0;
425
426        if (isResponsiveShoppingBag) {
427            top = 0;
428            bottom = -6;
429        }
430
431        return {
432            top,
433            bottom
434        }
435    },
436
437    // Open a dropdown
438    openDropdown = function ($dk, e) {
439
440        //var hasSpace = enoughSpace($dk); // Avoids duplication of call to _enoughSpace
441        $opened = $dk.toggleClass('dk_open');
442        $dk.attr("aria-expanded", "true");
443
444        var $current = $('a[data-dk-dropdown-value="' + $dk.data().dropkick.$select.val() + '"]', $dk);
445        setCurrent($current.parent(), $dk);
446
447        var 
448          hasSpace = enoughSpace($dk), // Avoids duplication of call to _enoughSpace
449          openClasses = hasSpace.displayBelow ? 'dk_open' : 'dk_open_top dk_open'
450            ;
451        var maxHeight = Math.min((hasSpace.maxHeight - 10), 250); //Set max-height to fixed value, unless the available space is lower
452
453        if (isResponsiveShoppingBag) {
454            maxHeight = Math.min((hasSpace.maxHeight - 10), 500); //500px should result in last option being cropped, so it would be easier for user to spot scrollable component.
455        }
456        var $dkOptions = $dk.find('.dk_options');
457
458        var positionCorrection = getPositionCorrection();
459
460        $dkOptions.css({
461            top: hasSpace.displayBelow ? $dk.find('.dk_toggle').outerHeight(true) + positionCorrection.top : '',
462            bottom: !hasSpace.displayBelow ? $dk.find('.dk_toggle').outerHeight(true) + positionCorrection.bottom : '',
463            "max-height": maxHeight + "px"
464        });
465
466        setOptionsWidth($dk);
467
468        $opened = $dk.addClass(openClasses);
469        setScrollPos($dk, $dk.find('.dk_option_current'), e); // IE8+ needs to set scrollTop only after the dropdow is opened
470
471        openScrollEventName && $(document).on(openScrollEventName, function (e) {
472
473            var $target = $(e.target);
474            var $scrollableElement = $(".dk_options");
475            var $targetScrollable = $target.closest($scrollableElement);
476
477            //Check if we're scrolling within the custom dropdown
478            if ($targetScrollable.length) {
479                var targetScrollable = $targetScrollable[0];
480
481                var delta = e.originalEvent.wheelDelta || -e.originalEvent.deltaY || -e.originalEvent.detail; // Gets scroll ammount
482                if (msie) { targetScrollable.scrollTop -= Math.round(delta / 10); return false; } // Normalize IE behaviour
483                var allowScroll = $targetScrollable.length && ((delta > 0 && targetScrollable.scrollTop <= 0) || (delta < 0 && targetScrollable.scrollTop >= targetScrollable.scrollHeight - targetScrollable.offsetHeight) ? false : true);
484
485                return allowScroll; // Finally cancels page scroll when nedded
486            }
487            else {
488                closeDropdown($dk);
489                return true;
490            }
491        });
492
493        $(window).on(openResizeEventName, function (e) {
494            closeDropdown($dk);
495        });
496    },
497
498    openAndPopulate = function ($dk, e) {
499        if (!$dk.hasClass('dk-disable')) {
500            var dkData = $dk.data("dropkick");
501
502            if (dkData.settings.preloadDataOnOpen
503                && !dkData.preloadDataOnOpenComplete) {
504                dkData.settings.preloadDataOnOpen($dk, function () {
505                    dkData.preloadDataOnOpenComplete = true;
506                    $dk.dropkick("refresh");
507                    openDropdown($dk, e);
508                });
509            } else {
510                openDropdown($dk, e);
511            }
512        }
513    },
514
515    setOptionsWidth = function ($dk) {
516        var $dkOptionsInner = $dk.find('.dk_options_inner');
517        var $dkOptions = $dk.find(".dk_options");
518
519        //Reset width
520        $dkOptions.css("width", "");
521
522        //Set width if scrollbar is present
523        var scrollWidth = $dkOptionsInner[0].scrollWidth;
524        if (scrollWidth > $dkOptions[0].scrollWidth) {
525
526            var optionsWidth = scrollWidth + 12;
527
528            if ($dkOptions[0].scrollHeight > parseInt($dkOptions.css("max-height"), 10)) {
529                //scroll height is greater than the max-height, therefore scrollbar will be present
530                //Add additional width to allow for scrollbar width
531                optionsWidth += 20;
532            }
533
534            $dkOptions.width(optionsWidth);
535        }
536    },
537
538    setImage = function ($current, $option) {
539        var finalText;
540        if ($option) {
541            finalText = $current
542                .replace('{{ class }}', notBlank($option.attr("data-imageurl")) ? 'chip' : '{{ class }}')
543                .replace('{{ image }}', notBlank($option.attr("data-imageurl")) ? 'style="background-image: URL(' + $option.attr("data-imageurl") + ')"' : '')
544                .replace('{{ class }}', notBlank($option.attr("data-flag")) ? $option.attr("data-flag") : '');
545        }
546        return finalText;
547    },
548
549    handleKeyBoardNav = function (e, $dk) {
550        var 
551        code = e.keyCode,
552        data = $dk.data('dropkick'),
553        letter = String.fromCharCode(code),
554        options = $dk.find('.dk_options'),
555        open = $dk.hasClass('dk_open'),
556        lis = options.find('li'),
557        current = $dk.find('.dk_option_current'),
558        first = lis.first(),
559        last = lis.last(),
560        next,
561        prev,
562        now,
563        list,
564        i,
565        l,
566        $a
567        ;
568
569        switch (code) {
570            case keyMap.escape:
571                closeDropdown($dk);
572                break;
573
574            case keyMap.enter:
575                if (open) {
576                    if (!current.hasClass('disabled')) {
577                        updateFields(current.find('a'), $dk);
578                        closeDropdown($dk);
579                    }
580                } else {
581                    openAndPopulate($dk, e);
582                }
583                e.preventDefault();
584                break;
585            case keyMap.tab:
586                if (open) {
587                    current.length && updateFields(current.find('a'), $dk);
588                    closeDropdown($dk);
589                }
590
591                break;
592
593            case keyMap.up:
594                prev = current.prev('li');
595                if (open) {
596                    if (prev.length) {
597                        setCurrent(prev, $dk, e);
598                    } else {
599                        setCurrent(last, $dk, e);
600                    }
601                } else {
602                    openAndPopulate($dk, e);
603                }
604                e.preventDefault();
605                break;
606
607            case keyMap.down:
608                if (open) {
609                    next = current.next('li').first();
610                    if (next.length) {
611                        setCurrent(next, $dk, e);
612                    } else {
613                        setCurrent(first, $dk, e);
614                    }
615                } else {
616                    openAndPopulate($dk, e);
617                }
618                e.preventDefault();
619                break;
620
621            default:
622                break;
623        }
624        //if typing a letter
625        if (code >= keyMap.zero && code <= keyMap.z) {
626            //update data
627            now = new Date().getTime();
628            if (data.finder === null || data.finder === undefined) {
629                data.finder = letter.toUpperCase();
630                data.timer = now;
631
632            } else {
633                if (now > parseInt(data.timer, 10) + 1000) {
634                    data.finder = letter.toUpperCase();
635                    data.timer = now;
636                } else {
637                    data.finder = data.finder + letter.toUpperCase();
638                    data.timer = now;
639                }
640            }
641            //find and switch to the appropriate option
642            list = lis.find('a');
643            for (i = 0, l = list.length; i < l; i++) {
644                $a = $(list[i]);
645                if ($a.text().toUpperCase().indexOf(data.finder) === 0) {
646                    updateFields($a, $dk);
647                    setCurrent($a.parent(), $dk, e);
648                    break;
649                }
650            }
651            $dk.data('dropkick', data);
652        }
653    },
654
655    notBlank = function (text) {
656        return ($.trim(text).length > 0) ? text : false;
657    },
658
659    // Turn the dropdownTemplate into a jQuery object and fill in the variables.
660    build = function (tpl, view) {
661        var 
662        // Template for the dropdown
663        template,
664        // Holder of the dropdowns options
665        options = [],
666        $dk,
667        i,
668        l,
669        $option,
670        oTemplate,
671        $selectedOption
672      ;
673
674        if (view.options && view.options.length) {
675            for (i = 0, l = view.options.length; i < l; i++) {
676                $option = $(view.options[i]);
677
678                if ($selectedOption === undefined) {
679                    $selectedOption = $option;
680                }
681
682                (i === 0 && $option.attr('selected') !== undefined && $option.attr('disabled') !== undefined) ?
683          oTemplate = null
684          :
685          oTemplate = setImage(optionTemplate.replace('{{ value }}', $option.val())
686                                    .replace('{{ current }}', (notBlank($option.val()) === view.value) ? 'dk_option_current' : '')
687                                    .replace('{{ disabled }}', ($option.attr('disabled') !== undefined) ? 'disabled' : '')
688                                    .replace('{{ text }}', $.trim($option.html()))
689                                    .replace('{{ class }}', $.trim($option.attr("class")))
690                                    .replace('{{ linkclass }}', notBlank($option.attr("data-imageurl")) ? 'chip' : '{{ linkclass }}')
691                                    .replace('{{ linkclass }}', notBlank($option.attr("data-flag")) ? $option.attr("data-flag") : ''), $option)
692          ;
693
694                options[options.length] = oTemplate;
695
696                if ($option.attr('selected') !== undefined) {
697                    $selectedOption = $option;
698                }
699            }
700        }
701        
702        template = setImage(tpl.replace('{{ id }}', view.id).replace('{{ label }}', view.label).replace('{{ tabindex }}', view.tabindex).replace('{{ isDisabled }}', view.isDisabled), $selectedOption)
703            ;
704        $dk = $(template);
705
706        if (view
707            && view.$original.length) {
708            $dk.find(".dk_label").addClass(view.$original.attr("class"));
709        }
710        
711        $dk.find('.dk_options_inner').html(options.join(''));
712
713        $dk.find('.dk_dropdown_option').hover(
714                function () {
715                    highlight($(this));
716                },
717                function () {
718                    unhighlight($(this));
719                }
720            );
721
722        return $dk;
723    }
724  ;
725
726    // Help prevent flashes of unstyled content
727    if (!ie6) {
728        document.documentElement.className = document.documentElement.className + ' dk_fouc';
729    }
730
731    // Called by using $('foo').dropkick();
732    methods.init = function (settings) {
733        settings = $.extend({}, defaults, settings);
734        dropdownTemplate = settings.dropdownTemplate ? settings.dropdownTemplate : dropdownTemplate;
735        optionTemplate = settings.optionTemplate ? settings.optionTemplate : optionTemplate;
736        
737        return this.each(function () {
738            var
739            // The current <select> element
740        $select = $(this),
741
742            // Store a reference to the originally selected <option> element
743        $original = $select.find(':selected').first(),
744
745            // Save all of the <option> elements
746        $options = $select.find('option'),
747
748            // We store lots of great stuff using jQuery data
749        data = $select.data('dropkick') || {},
750
751            // This gets applied to the 'dk_container' element
752        id = $select.attr('id') || $select.attr('name'),
753
754            // This gets updated to be equal to the longest <option> element
755        width = settings.width || $select.outerWidth(false),
756
757            // Check if we have a tabindex set or not set to 0
758        tabindex = $select.attr('tabindex') || '0',
759
760            // The completed dk_container element
761        $dk = false,
762        
763        // Supreme - Disable feature
764        isDisabled = ($(this).attr('disabled') !== undefined) ? 'dk-disable' : '',
765
766        theme,
767
768            // The form relative to the select
769        $form
770      ;
771
772            // Dont do anything if we've already setup dropkick on this element
773            if (data.id) {
774                return $select;
775            }
776
777            data.settings = settings;
778            data.tabindex = tabindex;
779            data.id = id;
780            data.$original = $original;
781            data.$select = $select;
782            data.value = notBlank($select.val()) || notBlank($original.attr('value'));
783            //data.label = $original.text();
784            //MyChange-Delayed Stock
785            data.label = $original.html();
786            data.options = $options;
787
788            // Supreme - Disable feature
789            data.isDisabled = isDisabled;
790
791            // Build the dropdown HTML
792            $dk = build(dropdownTemplate, data);
793            
794            // Make the dropdown fixed width if desired
795            if (data.settings.autoWidth) {
796                var widthNoBoxing = width - 30 - 5 - 2; //padding-right, padding-left, border*2
797                $dk.find('.dk_toggle').width(widthNoBoxing);
798            }
799
800            // Hide the <select> list and place our new one in front of it
801            $select.before($dk).appendTo($dk);
802
803            // Update the reference to $dk
804            $dk = $('div[id="dk_container_' + id + '"]').show();
805
806            if (data.settings.autoWidth) {
807            //Set background-position for up/down arrow
808            setBackgroundPosition($dk, width);
809            }
810
811            // Save the current theme
812            theme = settings.theme || 'default';
813            $dk.addClass('dk_theme_' + theme);
814            data.theme = theme;
815
816            // Save the updated $dk reference into our data object
817            data.$dk = $dk;
818
819            // Save the dropkick data onto the <select> element
820            $select.data('dropkick', data);
821
822            //Adds original select class to dk_container
823            $dk.addClass($select.attr('class'));
824
825            // Do the same for the dropdown, but add a few helpers
826            $dk.data('dropkick', data);
827
828            lists[lists.length] = $select;
829
830            // Focus events
831            $dk.on('focus.dropkick', function () {
832                $focused = $dk.addClass('dk_focus');
833            }).on('blur.dropkick', function () {
834                $dk.removeClass('dk_focus');
835                $focused = null;
836            });
837
838            //If isMobile, triggers native selects while still mantains the styled dropkick
839            if (isMobile && data.settings.nativeMobile) {
840                $dk.addClass('dk_mobile');
841            }
842
843            // Sync to change events on the original <select> if requested
844            if (data.settings.syncReverse) {
845                $select.on('change', function (e) {
846                    var option = $('option:selected', this),
847                    value = option.val(),
848                    //option = $('a[data-dk-dropdown-value="' + value + '"]', $dk),
849                    //label = "<span class='{{ class }}' {{ image }}></span>" + option.text();
850                    //MyChange Delayed Stock
851                    label = isResponsiveShoppingBag ? option.html() : 
852                        "<span class='{{ class }}' {{ image }}></span>" + option.html();
853
854                    $dk.find('.dk_label').removeClass("SoldOut");
855                    $dk.find('.dk_label').removeClass("SaleSoldOut");
856                    $dk.find('.dk_label').html(setImage(label, option)).addClass(option.attr("class"));
857                    data.settings.change && data.settings.change.call($select, value, label);
858                    setCurrent(option.parent(), $dk, e);
859                });
860            }
861
862            // Listen to a reset event to the form on the <select>
863            $form = $select.attr('form') ? $('#' + $select.attr('form').replace(' ', ', #')) : $select.closest('form');
864            $form.length && $form.on('reset', function () { $select.dropkick('reset') });
865
866            // [Issue #126] Validation do not fires in <select> is not (':visible')
867            // setTimeout(function () {
868            //   $select.hide();
869            // }, 0);
870        });
871    };
872
873    // Allows dynamic theme changes
874    methods.theme = function (newTheme) {
875        var 
876      data = $(this).data('dropkick'),
877      $dk = data.$dk,
878      oldtheme = 'dk_theme_' + data.theme
879    ;
880
881        $dk.removeClass(oldtheme).addClass('dk_theme_' + newTheme);
882        data.theme = newTheme;
883    };
884
885    // Reset respective <select> and dropdown
886    methods.reset = function () {
887        return this.each(function () {
888            var 
889        data = $(this).data('dropkick'),
890        $dk = data.$dk,
891        $original = $('a[data-dk-dropdown-value="' + data.$original.attr('value') + '"]', $dk)
892      ;
893
894            data.$original.prop('selected', true);
895            $dk.find('.dk_label').text(data.label);
896            setCurrent($original.parent(), $dk);
897        });
898    };
899
900    methods.setValue = function (value) {
901        return this.each(function () {
902            var 
903        $dk = $(this).data('dropkick').$dk,
904        $option = $('.dk_options a[data-dk-dropdown-value="' + value + '"]', $dk)
905      ;
906
907            $option.length
908      ? updateFields($option, $dk) | setCurrent($option.parent(), $dk)
909      : console.warn('There is no option with this value in ' + $dk.selector);
910        });
911    };
912    
913    methods.setValidationUI = function (options) {
914        return this.each(function () {
915
916            var $dk = $(this).data('dropkick').$dk;
917            var $dkToggle = $dk.find(".dk_toggle");
918
919            if (options.success) {
920                $dkToggle.addClass(cssClasses.validation.success).removeClass(cssClasses.validation.error);
921            }
922            else if (options.error) {
923                $dkToggle.addClass(cssClasses.validation.error).removeClass(cssClasses.validation.success);
924            }
925
926            setBackgroundPosition($dk, $dkToggle.outerWidth(true));
927        });
928    };
929
930    // Reload / rebuild, in case of dynamic updates etc.
931    // Credits to Jeremy (http://stackoverflow.com/users/1380047/jeremy-p)
932    // Regenerating dk wrapper to update it's content
933    // http://stackoverflow.com/a/13280151
934    methods.refresh = function () {
935        return this.each(function () {
936            var 
937        data = $(this).data('dropkick'),
938        $select = data.$select,
939        $dk = data.$dk,
940        $current,
941        $dkopts
942      ;
943            // Update data options      
944            data.options = $select.find('option');
945            data.isDisabled = $select.prop('disabled') != false? 'dk-disable' : ''; //check again
946            // Rebuild options list. filter options inner and replace
947            $dkopts = build(dropdownTemplate, data).find('.dk_options_inner');
948            $dk.find('.dk_options_inner').replaceWith($dkopts);
949            // Re setCurrent option after refresh options list
950            $current = $('a[data-dk-dropdown-value="' + $select.val() + '"]', $dk);
951            setCurrent($current.parent(), $dk);
952            updateFields($current, $dk);
953        });
954    };
955    
956    function setBackgroundPosition($dk, width) {
957        
958        var arrowImageWidth = 17;
959        var bgPositionRightPadding = 10;
960        var bgPositionLeftPadding = 8;
961        var bgPositionLeftForArrow;
962        var isRtl = ((window.Next
963                            && Next.Settings)
964                            ? Next.Settings.Channel.DirectionRTL
965                            : false);
966
967        bgPositionLeftForArrow = (!isRtl ? (width -arrowImageWidth -bgPositionRightPadding) : bgPositionLeftPadding)
968
969         var bgPosition = bgPositionLeftForArrow + "px center";
970
971        var $dkToggle = $dk.children("a");
972
973        if ($dkToggle.hasClass(cssClasses.validation.success) || $dkToggle.hasClass(cssClasses.validation.error)) {
974
975            var validationBgPosition = (bgPositionLeftForArrow +(!isRtl ? (- 25) : 25)) + "px center";
976
977            bgPosition = validationBgPosition + ", " + bgPosition;
978
979        }     
980
981        $dkToggle.css("background-position", bgPosition);
982    }
983    
984    function isAvailable() {
985        return (!ie6
986                && (
987                    (window.Next
988                            && Next.Settings
989                            && Next.Settings.UI
990                            && Next.Settings.UI.CustomDropdownEnabled)
991                        ||
992                        (typeof CustomDropdownEnabled != 'undefined'
993                            && CustomDropdownEnabled)
994                )
995        );
996    };
997
998    // Expose the plugin
999    $.fn.dropkick = function (method) {
1000        if (isAvailable()) {
1001            if (methods[method]) {
1002                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
1003            }
1004            if (typeof method === 'object' || !method) {
1005                return methods.init.apply(this, arguments);
1006            }
1007        }
1008    };
1009
1010    $(function () {
1011
1012        // Handle click events on individual dropdown options
1013        $(document).on((msie ? 'mousedown' : 'click'), '.dk_options a', function () {
1014            var $option = $(this), $dk = $option.parents('.dk_container').first();
1015
1016            // Supreme - Disable feature
1017            if (!$dk.hasClass('dk-disable')) {
1018                openDropdown($dk);
1019            }
1020
1021            if (!$option.parent().hasClass('disabled')) {
1022                updateFields($option, $dk);
1023                setCurrent($option.parent(), $dk); // IE8+, iOS4 and some Android [4.0] Browsers back to scrollTop 0 when an option is clicked and the dropdown is opened again
1024                closeDropdown($dk);
1025            }
1026
1027            return false;
1028        });
1029
1030        // Setup keyboard nav
1031        $(document).on('keydown.dk_nav', function (e) {
1032            var $dk;
1033
1034            // If we have an open dropdown, key events should get sent to that one
1035            if ($opened) {
1036                $dk = $opened;
1037            } else if ($focused) {
1038                // But if we have no open dropdowns, use the focused dropdown instead
1039                $dk = $focused;
1040            }
1041
1042            if ($dk) {
1043                handleKeyBoardNav(e, $dk);
1044            }
1045        });
1046
1047        // Globally handle a click outside of the dropdown list by closing it.
1048        $(document).on('click', null, function (e) {
1049            var 
1050        $eTarget = $(e.target),
1051        $dk
1052      ;
1053            if ($opened && $eTarget.closest(".dk_container").length === 0) {
1054                closeDropdown($opened); // Improves performance by minimizing DOM Traversal Operations
1055            } else if ($eTarget.is(".dk_toggle, .dk_label")) {
1056                $dk = $eTarget.parents('.dk_container').first();
1057
1058                var dkData = $dk.data("dropkick");
1059
1060                if ($dk.hasClass('dk_open')) {
1061                    closeDropdown($dk);
1062                } else {
1063                    $opened && closeDropdown($opened);
1064
1065                    openAndPopulate($dk, e);
1066
1067                } // Avoids duplication of call to _openDropdown
1068
1069                return false;
1070            } else if ($eTarget.attr('for') && !!$('#dk_container_' + $eTarget.attr('for'))[0]) {
1071                $('#dk_container_' + $eTarget.attr('for')).trigger('focus.dropkick');
1072            }
1073        });
1074
1075        //        // Prevents window scroll when scrolling  through dk_options, simulating native behaviour
1076        //        var wheelSupport = 'onwheel' in window ? 'wheel' : // Modern browsers support "wheel"
1077        //                        'onmousewheel' in document ? 'mousewheel' : // Webkit and IE support at least "mousewheel"
1078        //                        "MouseScrollEvent" in window ? 'DOMMouseScroll MozMousePixelScroll' : // legacy non-standard event for older Firefox
1079        //                        false // lacks support
1080        //    ;
1081
1082        //        wheelSupport && $(document).on(wheelSupport, '.dk_options', function (event) {
1083        //            var delta = event.originalEvent.wheelDelta || -event.originalEvent.deltaY || -event.originalEvent.detail; // Gets scroll ammount
1084        //            if (msie) { this.scrollTop -= Math.round(delta / 10); return false; } // Normalize IE behaviour
1085        //            return (delta > 0 && this.scrollTop <= 0) || (delta < 0 && this.scrollTop >= this.scrollHeight - this.offsetHeight) ? false : true; // Finally cancels page scroll when nedded
1086        //        });
1087
1088
1089    });
1090
1091} (jQuery, window, document));
1092;
1093/*!
1094 * Copyright 2013 Small Batch, Inc.
1095 *
1096 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
1097 * use this file except in compliance with the License. You may obtain a copy of
1098 * the License at
1099 *
1100 * http://www.apache.org/licenses/LICENSE-2.0
1101 *
1102 * Unless required by applicable law or agreed to in writing, software
1103 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
1104 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1105 * License for the specific language governing permissions and limitations under
1106 * the License.
1107 */
1108;(function(window,document,undefined){
1109var j=void 0,k=!0,l=null,p=!1;function q(a){return function(){return this[a]}}var aa=this;function ba(a,b){var c=a.split("."),d=aa;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)!c.length&&b!==j?d[e]=b:d=d[e]?d[e]:d[e]={}}aa.Ba=k;function ca(a,b,c){return a.call.apply(a.bind,arguments)}
1110function da(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function s(a,b,c){s=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ca:da;return s.apply(l,arguments)}var ea=Date.now||function(){return+new Date};function fa(a,b){this.G=a;this.u=b||a;this.z=this.u.document;this.R=j}fa.prototype.createElement=function(a,b,c){a=this.z.createElement(a);if(b)for(var d in b)if(b.hasOwnProperty(d))if("style"==d){var e=a,f=b[d];ga(this)?e.setAttribute("style",f):e.style.cssText=f}else a.setAttribute(d,b[d]);c&&a.appendChild(this.z.createTextNode(c));return a};function t(a,b,c){a=a.z.getElementsByTagName(b)[0];a||(a=document.documentElement);a&&a.lastChild&&a.insertBefore(c,a.lastChild)}
1111function u(a,b){return a.createElement("link",{rel:"stylesheet",href:b})}function ha(a,b){return a.createElement("script",{src:b})}function v(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return;c.push(b);a.className=c.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function w(a,b){for(var c=a.className.split(/\s+/),d=[],e=0,f=c.length;e<f;e++)c[e]!=b&&d.push(c[e]);a.className=d.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}
1112function ia(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return k;return p}function ga(a){if(a.R===j){var b=a.z.createElement("p");b.innerHTML='<a style="top:1px;">w</a>';a.R=/top/.test(b.getElementsByTagName("a")[0].getAttribute("style"))}return a.R}function x(a){var b=a.u.location.protocol;"about:"==b&&(b=a.G.location.protocol);return"https:"==b?"https:":"http:"};function y(a,b,c){this.w=a;this.T=b;this.Aa=c}ba("webfont.BrowserInfo",y);y.prototype.qa=q("w");y.prototype.hasWebFontSupport=y.prototype.qa;y.prototype.ra=q("T");y.prototype.hasWebKitFallbackBug=y.prototype.ra;y.prototype.sa=q("Aa");y.prototype.hasWebKitMetricsBug=y.prototype.sa;function z(a,b,c,d){this.e=a!=l?a:l;this.o=b!=l?b:l;this.ba=c!=l?c:l;this.f=d!=l?d:l}var ja=/^([0-9]+)(?:[\._-]([0-9]+))?(?:[\._-]([0-9]+))?(?:[\._+-]?(.*))?$/;z.prototype.toString=function(){return[this.e,this.o||"",this.ba||"",this.f||""].join("")};
1113function A(a){a=ja.exec(a);var b=l,c=l,d=l,e=l;a&&(a[1]!==l&&a[1]&&(b=parseInt(a[1],10)),a[2]!==l&&a[2]&&(c=parseInt(a[2],10)),a[3]!==l&&a[3]&&(d=parseInt(a[3],10)),a[4]!==l&&a[4]&&(e=/^[0-9]+$/.test(a[4])?parseInt(a[4],10):a[4]));return new z(b,c,d,e)};function B(a,b,c,d,e,f,g,h,n,m,r){this.J=a;this.Ha=b;this.za=c;this.ga=d;this.Fa=e;this.fa=f;this.xa=g;this.Ga=h;this.wa=n;this.ea=m;this.k=r}ba("webfont.UserAgent",B);B.prototype.getName=q("J");B.prototype.getName=B.prototype.getName;B.prototype.pa=q("za");B.prototype.getVersion=B.prototype.pa;B.prototype.la=q("ga");B.prototype.getEngine=B.prototype.la;B.prototype.ma=q("fa");B.prototype.getEngineVersion=B.prototype.ma;B.prototype.na=q("xa");B.prototype.getPlatform=B.prototype.na;B.prototype.oa=q("wa");
1114B.prototype.getPlatformVersion=B.prototype.oa;B.prototype.ka=q("ea");B.prototype.getDocumentMode=B.prototype.ka;B.prototype.ja=q("k");B.prototype.getBrowserInfo=B.prototype.ja;function C(a,b){this.a=a;this.H=b}var ka=new B("Unknown",new z,"Unknown","Unknown",new z,"Unknown","Unknown",new z,"Unknown",j,new y(p,p,p));
1115C.prototype.parse=function(){var a;if(-1!=this.a.indexOf("MSIE")){a=D(this);var b=E(this),c=A(b),d=F(this.a,/MSIE ([\d\w\.]+)/,1),e=A(d);a=new B("MSIE",e,d,"MSIE",e,d,a,c,b,G(this.H),new y("Windows"==a&&6<=e.e||"W
1115indows Phone"==a&&8<=c.e,p,p))}else if(-1!=this.a.indexOf("Opera"))a:{a="Unknown";var b=F(this.a,/Presto\/([\d\w\.]+)/,1),c=A(b),d=E(this),e=A(d),f=G(this.H);c.e!==l?a="Presto":(-1!=this.a.indexOf("Gecko")&&(a="Gecko"),b=F(this.a,/rv:([^\)]+)/,1),c=A(b));if(-1!=this.a.indexOf("Opera Mini/")){var g=
1116F(this.a,/Opera Mini\/([\d\.]+)/,1),h=A(g);a=new B("OperaMini",h,g,a,c,b,D(this),e,d,f,new y(p,p,p))}else{if(-1!=this.a.indexOf("Version/")&&(g=F(this.a,/Version\/([\d\.]+)/,1),h=A(g),h.e!==l)){a=new B("Opera",h,g,a,c,b,D(this),e,d,f,new y(10<=h.e,p,p));break a}g=F(this.a,/Opera[\/ ]([\d\.]+)/,1);h=A(g);a=h.e!==l?new B("Opera",h,g,a,c,b,D(this),e,d,f,new y(10<=h.e,p,p)):new B("Opera",new z,"Unknown",a,c,b,D(this),e,d,f,new y(p,p,p))}}else if(/AppleWeb(K|k)it/.test(this.a)){a=D(this);var b=E(this),
1117c=A(b),d=F(this.a,/AppleWeb(?:K|k)it\/([\d\.\+]+)/,1),e=A(d),f="Unknown",g=new z,h="Unknown",n=p;-1!=this.a.indexOf("Chrome")||-1!=this.a.indexOf("CrMo")||-1!=this.a.indexOf("CriOS")?f="Chrome":/Silk\/\d/.test(this.a)?f="Silk":"BlackBerry"==a||"Android"==a?f="BuiltinBrowser":-1!=this.a.indexOf("Safari")?f="Safari":-1!=this.a.indexOf("AdobeAIR")&&(f="AdobeAIR");"BuiltinBrowser"==f?h="Unknown":"Silk"==f?h=F(this.a,/Silk\/([\d\._]+)/,1):"Chrome"==f?h=F(this.a,/(Chrome|CrMo|CriOS)\/([\d\.]+)/,2):-1!=
1118this.a.indexOf("Version/")?h=F(this.a,/Version\/([\d\.\w]+)/,1):"AdobeAIR"==f&&(h=F(this.a,/AdobeAIR\/([\d\.]+)/,1));g=A(h);n="AdobeAIR"==f?2<g.e||2==g.e&&5<=g.o:"BlackBerry"==a?10<=c.e:"Android"==a?2<c.e||2==c.e&&1<c.o:526<=e.e||525<=e.e&&13<=e.o;a=new B(f,g,h,"AppleWebKit",e,d,a,c,b,G(this.H),new y(n,536>e.e||536==e.e&&11>e.o,"iPhone"==a||"iPad"==a||"iPod"==a||"Macintosh"==a))}else-1!=this.a.indexOf("Gecko")?(a="Unknown",b=new z,c="Unknown",d=E(this),e=A(d),f=p,-1!=this.a.indexOf("Firefox")?(a=
1119"Firefox",c=F(this.a,/Firefox\/([\d\w\.]+)/,1),b=A(c),f=3<=b.e&&5<=b.o):-1!=this.a.indexOf("Mozilla")&&(a="Mozilla"),g=F(this.a,/rv:([^\)]+)/,1),h=A(g),f||(f=1<h.e||1==h.e&&9<h.o||1==h.e&&9==h.o&&2<=h.ba||g.match(/1\.9\.1b[123]/)!=l||g.match(/1\.9\.1\.[\d\.]+/)!=l),a=new B(a,b,c,"Gecko",h,g,D(this),e,d,G(this.H),new y(f,p,p))):a=ka;return a};
1120function D(a){var b=F(a.a,/(iPod|iPad|iPhone|Android|Windows Phone|BB\d{2}|BlackBerry)/,1);if(""!=b)return/BB\d{2}/.test(b)&&(b="BlackBerry"),b;a=F(a.a,/(Linux|Mac_PowerPC|Macintosh|Windows|CrOS)/,1);return""!=a?("Mac_PowerPC"==a&&(a="Macintosh"),a):"Unknown"}
1121function E(a){var b=F(a.a,/(OS X|Windows NT|Android) ([^;)]+)/,2);if(b||(b=F(a.a,/Windows Phone( OS)? ([^;)]+)/,2))||(b=F(a.a,/(iPhone )?OS ([\d_]+)/,2)))return b;if(b=F(a.a,/(?:Linux|CrOS) ([^;)]+)/,1))for(var b=b.split(/\s/),c=0;c<b.length;c+=1)if(/^[\d\._]+$/.test(b[c]))return b[c];return(a=F(a.a,/(BB\d{2}|BlackBerry).*?Version\/([^\s]*)/,2))?a:"Unknown"}function F(a,b,c){return(a=a.match(b))&&a[c]?a[c]:""}function G(a){if(a.documentMode)return a.documentMode};function la(a){this.va=a||"-"}la.prototype.f=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.va)};function H(a,b){this.J=a;this.U=4;this.K="n";var c=(b||"n4").match(/^([nio])([1-9])$/i);c&&(this.K=c[1],this.U=parseInt(c[2],10))}H.prototype.getName=q("J");function I(a){return a.K+a.U}function ma(a){var b=4,c="n",d=l;a&&((d=a.match(/(normal|oblique|italic)/i))&&d[1]&&(c=d[1].substr(0,1).toLowerCase()),(d=a.match(/([1-9]00|normal|bold)/i))&&d[1]&&(/bold/i.test(d[1])?b=7:/[1-9]00/.test(d[1])&&(b=parseInt(d[1].substr(0,1),10))));return c+b};function na(a,b,c){this.c=a;this.h=b;this.M=c;this.j="wf";this.g=new la("-")}function pa(a){v(a.h,a.g.f(a.j,"loading"));J(a,"loading")}function K(a){w(a.h,a.g.f(a.j,"loading"));ia(a.h,a.g.f(a.j,"active"))||v(a.h,a.g.f(a.j,"inactive"));J(a,"inactive")}function J(a,b,c){if(a.M[b])if(c)a.M[b](c.getName(),I(c));else a.M[b]()};function L(a,b){this.c=a;this.C=b;this.s=this.c.createElement("span",{"aria-hidden":"true"},this.C)}
1122function M(a,b){var c=a.s,d;d=[];for(var e=b.J.split(/,\s*/),f=0;f<e.length;f++){var g=e[f].replace(/['"]/g,"");-1==g.indexOf(" ")?d.push(g):d.push("'"+g+"'")}d=d.join(",");e="normal";f=b.U+"00";"o"===b.K?e="oblique":"i"===b.K&&(e="italic");d="position:absolute;top:-999px;left:-999px;font-size:300px;width:auto;height:auto;line-height:normal;margin:0;padding:0;font-variant:normal;white-space:nowrap;
1122font-family:"+d+";"+("font-style:"+e+";font-weight:"+f+";");ga(a.c)?c.setAttribute("style",d):c.style.cssText=
1123d}function N(a){t(a.c,"body",a.s)}L.prototype.remove=function(){var a=this.s;a.parentNode&&a.parentNode.removeChild(a)};function qa(a,b,c,d,e,f,g,h){this.V=a;this.ta=b;this.c=c;this.q=d;this.C=h||"BESbswy";this.k=e;this.F={};this.S=f||5E3;this.Z=g||l;this.B=this.A=l;a=new L(this.c,this.C);N(a);for(var n in O)O.hasOwnProperty(n)&&(M(a,new H(O[n],I(this.q))),this.F[O[n]]=a.s.offsetWidth);a.remove()}var O={Ea:"serif",Da:"sans-serif",Ca:"monospace"};
1124qa.prototype.start=function(){this.A=new L(this.c,this.C);N(this.A);this.B=new L(this.c,this.C);N(this.B);this.ya=ea();M(this.A,new H(this.q.getName()+",serif",I(this.q)));M(this.B,new H(this.q.getName()+",sans-serif",I(this.q)));ra(this)};function sa(a,b,c){for(var d in O)if(O.hasOwnProperty(d)&&b===a.F[O[d]]&&c===a.F[O[d]])return k;return p}
1125function ra(a){var b=a.A.s.offsetWidth,c=a.B.s.offsetWidth;b===a.F.serif&&c===a.F["sans-serif"]||a.k.T&&sa(a,b,c)?ea()-a.ya>=a.S?a.k.T&&sa(a,b,c)&&(a.Z===l||a.Z.hasOwnProperty(a.q.getName()))?P(a,a.V):P(a,a.ta):setTimeout(s(function(){ra(this)},a),25):P(a,a.V)}function P(a,b){a.A.remove();a.B.remove();b(a.q)};function R(a,b,c,d){this.c=b;this.t=c;this.N=0;this.ca=this.Y=p;this.S=d;this.k=a.k}function ta(a,b,c,d,e){if(0===b.length&&e)K(a.t);else{a.N+=b.length;e&&(a.Y=e);for(e=0;e<b.length;e++){var f=b[e],g=c[f.getName()],h=a.t,n=f;v(h.h,h.g.f(h.j,n.getName(),I(n).toString(),"loading"));J(h,"fontloading",n);(new qa(s(a.ha,a),s(a.ia,a),a.c,f,a.k,a.S,d,g)).start()}}}
1126R.prototype.ha=function(a){var b=this.t;w(b.h,b.g.f(b.j,a.getName(),I(a).toString(),"loading"));w(b.h,b.g.f(b.j,a.getName(),I(a).toString(),"inactive"));v(b.h,b.g.f(b.j,a.getName(),I(a).toString(),"active"));J(b,"fontactive",a);this.ca=k;ua(this)};R.prototype.ia=function(a){var b=this.t;w(b.h,b.g.f(b.j,a.getName(),I(a).toString(),"loading"));ia(b.h,b.g.f(b.j,a.getName(),I(a).toString(),"active"))||v(b.h,b.g.f(b.j,a.getName(),I(a).toString(),"inactive"));J(b,"fontinactive",a);ua(this)};
1127function ua(a){0==--a.N&&a.Y&&(a.ca?(a=a.t,w(a.h,a.g.f(a.j,"loading")),w(a.h,a.g.f(a.j,"inactive")),v(a.h,a.g.f(a.j,"active")),J(a,"active")):K(a.t))};function S(a,b,c){this.G=a;this.W=b;this.a=c;this.O=this.P=0}function T(a,b){U.W.$[a]=b}S.prototype.load=function(a){var b=a.context||this.G;this.c=new fa(this.G,b);b=new na(this.c,b.document.documentElement,a);if(this.a.k.w){var c=this.W,d=this.c,e=[],f;for(f in a)if(a.hasOwnProperty(f)){var g=c.$[f];g&&e.push(g(a[f],d))}a=a.timeout;this.O=this.P=e.length;a=new R(this.a,this.c,b,a);f=0;for(c=e.length;f<c;f++)d=e[f],d.v(this.a,s(this.ua,this,d,b,a))}else K(b)};
1128S.prototype.ua=function(a,b,c,d){var e=this;d?a.load(function(a,d,h){var n=0==--e.P;n&&pa(b);setTimeout(function(){ta(c,a,d||{},h||l,n)},0)}):(a=0==--this.P,this.O--,a&&(0==this.O?K(b):pa(b)),ta(c,[],{},l,a))};var va=window,wa=(new C(navigator.userAgent,document)).parse(),U=va.WebFont=new S(window,new function(){this.$={}},wa);U.load=U.load;function V(a,b){this.c=a;this.d=b}V.prototype.load=function(a){var b,c,d=this.d.urls||[],e=this.d.families||[];b=0;for(c=d.length;b<c;b++)t(this.c,"head",u(this.c,d[b]));d=[];b=0;for(c=e.length;b<c;b++){var f=e[b].split(":");if(f[1])for(var g=f[1].split(","),h=0;h<g.length;h+=1)d.push(new H(f[0],g[h]));else d.push(new H(f[0]))}a(d)};V.prototype.v=function(a,b){return b(a.k.w)};T("custom",function(a,b){return new V(b,a)});function W(a,b){this.c=a;this.d=b}var xa={regular:"n4",bold:"n7",italic:"i4",bolditalic:"i7",r:"n4",b:"n7",i:"i4",bi:"i7"};W.prototype.v=function(a,b){return b(a.k.w)};W.prototype.load=function(a){t(this.c,"head",u(this.c,x(this.c)+"//webfonts.fontslive.com/css/"+this.d.key+".css"));for(var b=this.d.families,c=[],d=0,e=b.length;d<e;d++)c.push.apply(c,ya(b[d]));a(c)};
1129function ya(a){var b=a.split(":");a=b[0];if(b[1]){for(var c=b[1].split(","),b=[],d=0,e=c.length;d<e;d++){var f=c[d];if(f){var g=xa[f];b.push(g?g:f)}}c=[];for(d=0;d<b.length;d+=1)c.push(new H(a,b[d]));return c}return[new H(a)]}T("ascender",function(a,b){return new W(b,a)});function X(a,b,c){this.a=a;this.c=b;this.d=c;this.m=[]}
1130X.prototype.v=function(a,b){var c=this,d=c.d.projectId,e=c.d.version;if(d){var f=c.c.u,g=c.c.createElement("script");g.id="__MonotypeAPIScript__"+d;var h=p;g.onload=g.onreadystatechange=function(){if(!h&&(!this.readyState||"loaded"===this.readyState||"complete"===this.readyState)){h=k;if(f["__mti_fntLst"+d]){var e=f["__mti_fntLst"+d]();if(e)for(var m=0;m<e.length;m++)c.m.push(new H(e[m].fontfamily))}b(a.k.w);g.onload=g.onreadystatechange=l}};g.src=c.D(d,e);t(this.c,"head",g)}else b(k)};
1131X.prototype.D=function(a,b){var c=x(this.c),d=(this.d.api||"fast.fonts.com/jsapi").replace(/^.*http(s?):(\/\/)?/,"");return c+"//"+d+"/"+a+".js"+(b?"?v="+b:"")};X.prototype.load=function(a){a(this.m)};T("monotype",function(a,b){var c=(new C(navigator.userAgent,document)).parse();return new X(c,b,a)});function Y(a,b){this.c=a;this.d=b;this.m=[]}Y.prototype.D=function(a){var b=x(this.c);return(this.d.api||b+"//use.typekit.net")+"/"+a+".js"};
1132Y.prototype.v=function(a,b){var c=this.d.id,d=this.d,e=this.c.u,f=this;c?(e.__webfonttypekitmodule__||(e.__webfonttypekitmodule__={}),e.__webfonttypekitmodule__[c]=function(c){c(a,d,function(a,c,d){for(var e=0;e<c.length;e+=1){var g=d[c[e]];if(g)for(var Q=0;Q<g.length;Q+=1)f.m.push(new H(c[e],g[Q]));else f.m.push(new H(c[e]))}b(a)})},c=ha(this.c,this.D(c)),t(this.c,"head",c)):b(k)};Y.prototype.load=function(a){a(this.m)};T("typekit",function(a,b){return new Y(b,a)});function za(a,b,c){this.L=a?a:b+Aa;this.p=[];this.Q=[];this.da=c||""}var Aa="//fonts.googleapis.com/css";za.prototype.f=function(){if(0==this.p.length)throw Error("No fonts to load !");if(-1!=this.L.indexOf("kit="))return this.L;for(var a=this.p.length,b=[],c=0;c<a;c++)b.push(this.p[c].replace(/ /g,"+"));a=this.L+"?family="+b.join("%7C");0<this.Q.length&&(a+="&subset="+this.Q.join(","));0<this.da.length&&(a+="&text="+encodeURIComponent(this.da));return a};function Ba(a){this.p=a;this.aa=[];this.I={}}
1133var Ca={latin:"BESbswy",cyrillic:"&#1081;&#1103;&#1046;",greek:"&#945;&#946;&#931;",khmer:"&#x1780;&#x1781;&#x1782;",Hanuman:"&#x1780;&#x1781;&#x1782;"},Da={thin:"1",extralight:"2","extra-light":"2",ultralight:"2","ultra-light":"2",light:"3",regular:"4",book:"4",medium:"5","semi-bold":"6",semibold:"6","demi-bold":"6",demibold:"6",bold:"7","extra-bold":"8",extrabold:"8","ultra-bold":"8",ultrabold:"8",black:"9",heavy:"9",l:"3",r:"4",b:"7"},Ea={i:"i",italic:"i",n:"n",normal:"n"},Fa=RegExp("^(thin|(?:(?:extra|ultra)-?)?light|regular|book|medium|(?:(?:semi|demi|extra|ultra)-?)?bold|black|heavy|l|r|b|[1-9]00)?(n|i|normal|italic)?$");
1134Ba.prototype.parse=function(){for(var a=this.p.length,b=0;b<a;b++){var c=this.p[b].split(":"),d=c[0].replace(/\+/g," "),e=["n4"];if(2<=c.length){var f;var g=c[1];f=[];if(g)for(var g=g.split(","),h=g.length,n=0;n<h;n++){var m;m=g[n];if(m.match(/^[\w]+$/)){m=Fa.exec(m.toLowerCase());var r=j;if(m==l)r="";else{r=j;r=m[1];if(r==l||""==r)r="4";else var oa=Da[r],r=oa?oa:isNaN(r)?"4":r.substr(0,1);r=[m[2]==l||""==m[2]?"n":Ea[m[2]],r].join("")}m=r}else m="";
1134m&&f.push(m)}0<f.length&&(e=f);3==c.length&&(c=c[2],
1135f=[],c=!c?f:c.split(","),0<c.length&&(c=Ca[c[0]])&&(this.I[d]=c))}this.I[d]||(c=Ca[d])&&(this.I[d]=c);for(c=0;c<e.length;c+=1)this.aa.push(new H(d,e[c]))}};function Z(a,b,c){this.a=a;this.c=b;this.d=c}var Ga={Arimo:k,Cousine:k,Tinos:k};Z.prototype.v=function(a,b){b(a.k.w)};Z.prototype.load=function(a){var b=this.c;if("MSIE"==this.a.getName()&&this.d.blocking!=k){var c=s(this.X,this,a),d=function(){b.z.body?c():setTimeout(d,0)};d()}else this.X(a)};
1136Z.prototype.X=function(a){for(var b=this.c,c=new za(this.d.api,x(b),this.d.text),d=this.d.families,e=d.length,f=0;f<e;f++){var g=d[f].split(":");3==g.length&&c.Q.push(g.pop());var h="";2==g.length&&""!=g[1]&&(h=":");c.p.push(g.join(h))}d=new Ba(d);d.parse();t(b,"head",u(b,c.f()));a(d.aa,d.I,Ga)};T("google",function(a,b){var c=(new C(navigator.userAgent,document)).parse();return new Z(c,b,a)});function $(a,b){this.c=a;this.d=b;this.m=[]}$.prototype.D=function(a){return x(this.c)+(this.d.api||"//f.fontdeck.com/s/css/js/")+(this.c.u.location.hostname||this.c.G.location.hostname)+"/"+a+".js"};
1137$.prototype.v=function(a,b){var c=this.d.id,d=this.c.u,e=this;c?(d.__webfontfontdeckmodule__||(d.__webfontfontdeckmodule__={}),d.__webfontfontdeckmodule__[c]=function(a,c){for(var d=0,n=c.fonts.length;d<n;++d){var m=c.fonts[d];e.m.push(new H(m.name,ma("font-weight:"+m.weight+";font-style:"+m.style)))}b(a)},c=ha(this.c,this.D(c)),t(this.c,"head",c)):b(k)};$.prototype.load=function(a){a(this.m)};T("fontdeck",function(a,b){return new $(b,a)});window.WebFontConfig&&U.load(window.WebFontConfig);
1138})(this,document);;

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