PageSourceSearch

https://benesse.jp/_shared/js/plugins.js

js benesse.jp collected 2026-09-24 08:52:36 UTC 74,292 bytes, 1,892 lines download raw bytes

1/*!
2 * jQuery Cookie Plugin v1.3
3 * https://github.com/carhartl/jquery-cookie
4 *
5 * Copyright 2011, Klaus Hartl
6 * Dual licensed under the MIT or GPL Version 2 licenses.
7 * http://www.opensource.org/licenses/mit-license.php
8 * http://www.opensource.org/licenses/GPL-2.0
9 */
10(function ($, document, undefined) {
11
12	var pluses = /\+/g;
13
14	function raw(s) {
15		return s;
16	}
17
18	function decoded(s) {
19		return decodeURIComponent(s.replace(pluses, ' '));
20	}
21
22	var config = $.cookie = function (key, value, options) {
23
24		// write
25		if (value !== undefined) {
26			options = $.extend({}, config.defaults, options);
27
28			if (value === null) {
29				options.expires = -1;
30			}
31
32			if (typeof options.expires === 'number') {
33				var days = options.expires, t = options.expires = new Date();
34				t.setDate(t.getDate() + days);
35			}
36
37			value = config.json ? JSON.stringify(value) : String(value);
38
39			return (document.cookie = [
40				encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value),
41				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
42				options.path    ? '; path=' + options.path : '',
43				options.domain  ? '; domain=' + options.domain : '',
44				options.secure  ? '; secure' : ''
45			].join(''));
46		}
47
48		// read
49		var decode = config.raw ? raw : decoded;
50		var cookies = document.cookie.split('; ');
51		for (var i = 0, l = cookies.length; i < l; i++) {
52			var parts = cookies[i].split('=');
53			if (decode(parts.shift()) === key) {
54				var cookie = decode(parts.join('='));
55				return config.json ? JSON.parse(cookie) : cookie;
56			}
57		}
58
59		return null;
60	};
61
62	config.defaults = {};
63
64	$.removeCookie = function (key, options) {
65		if ($.cookie(key) !== null) {
66			$.cookie(key, null, options);
67			return true;
68		}
69		return false;
70	};
71
72})(jQuery, document);
73
74/**
75 * jQuery.query - Query String Modification and Creation for jQuery
76 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
77 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
78 * Date: 2009/8/13
79 *
80 * @author Blair Mitchelmore
81 * @version 2.1.7
82 *
83 **/
84new function(settings) { 
85  // Various Settings
86  var $separator = settings.separator || '&';
87  var $spaces = settings.spaces === false ? false : true;
88  var $suffix = settings.suffix === false ? '' : '[]';
89  var $prefix = settings.prefix === false ? false : true;
90  var $hash = $prefix ? settings.hash === true ? "#" : "?" : "";
91  var $numbers = settings.numbers === false ? false : true;
92  
93  jQuery.query = new function() {
94    var is = function(o, t) {
95      return o != undefined && o !== null && (!!t ? o.constructor == t : true);
96    };
97    var parse = function(path) {
98      var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])?$/.exec(path), base = match[1], tokens = [];
99      while (m = rx.exec(match[2])) tokens.push(m[1]);
100      return [base, tokens];
101    };
102    var set = function(target, tokens, value) {
103      var o, token = tokens.shift();
104      if (typeof target != 'object') target = null;
105      if (token === "") {
106        if (!target) target = [];
107        if (is(target, Array)) {
108          target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
109        } else if (is(target, Object)) {
110          var i = 0;
111          while (target[i++] != null);
112          target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value);
113        } else {
114          target = [];
115          target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value));
116        }
117      } else if (token && token.match(/^\s*[0-9]+\s*$/)) {
118        var index = parseInt(token, 10);
119        if (!target) target = [];
120        target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
121      } else if (token) {
122        var index = token.replace(/^\s*|\s*$/g, "");
123        if (!target) target = {};
124        if (is(target, Array)) {
125          var temp = {};
126          for (var i = 0; i < target.length; ++i) {
127            temp[i] = target[i];
128          }
129          target = temp;
130        }
131        target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value);
132      } else {
133        return value;
134      }
135      return target;
136    };
137    
138    var queryObject = function(a) {
139      var self = this;
140      self.keys = {};
141      
142      if (a.queryObject) {
143        jQuery.each(a.get(), function(key, val) {
144          self.SET(key, val);
145        });
146      } else {
147        jQuery.each(arguments, function() {
148          var q = "" + this;
149          q = q.replace(/^[?#]/,''); // remove any leading ? || #
150          q = q.replace(/[;&]$/,''); // remove any trailing & || ;
151          if ($spaces) q = q.replace(/[+]/g,' '); // replace +'s with spaces
152          
153          jQuery.each(q.split(/[&;]/), function(){
154            var key = decodeURIComponent(this.split('=')[0] || "");
155            var val = decodeURIComponent(this.split('=')[1] || "");
156            
157            if (!key) return;
158            
159            if ($numbers) {
160              if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex
161                val = parseFloat(val);
162              else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex
163                val = parseInt(val, 10);
164            }
165            
166            val = (!val && val !== 0) ? true : val;
167            
168            if (val !== false && val !== true && typeof val != 'number')
169              val = val;
170            
171            self.SET(key, val);
172          });
173        });
174      }
175      return self;
176    };
177    
178    queryObject.prototype = {
179      queryObject: true,
180      has: function(key, type) {
181        var value = this.get(key);
182        return is(value, type);
183      },
184      GET: function(key) {
185        if (!is(key)) return this.keys;
186        var parsed = parse(key), base = parsed[0], tokens = parsed[1];
187        var target = this.keys[base];
188        while (target != null && tokens.length != 0) {
189          target = target[tokens.shift()];
190        }
191        return typeof target == 'number' ? target : target || "";
192      },
193      get: function(key) {
194        var target = this.GET(key);
195        if (is(target, Object))
196          return jQuery.extend(true, {}, target);
197        else if (is(target, Array))
198          return target.slice(0);
199        return target;
200      },
201      SET: function(key, val) {
202        var value = !is(val) ? null : val;
203        var parsed = parse(key), base = parsed[0], tokens = parsed[1];
204        var target = this.keys[base];
205        this.keys[base] = set(target, tokens.slice(0), value);
206        return this;
207      },
208      set: function(key, val) {
209        return this.copy().SET(key, val);
210      },
211      REMOVE: function(key) {
212        return this.SET(key, null).COMPACT();
213      },
214      remove: function(key) {
215        return this.copy().REMOVE(key);
216      },
217      EMPTY: function() {
218        var self = this;
219        jQuery.each(self.keys, function(key, value) {
220          delete self.keys[key];
221        });
222        return self;
223      },
224      load: function(url) {
225        var hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1");
226        var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1");
227        return new queryObject(url.length == search.length ? '' : search, url.length == hash.length ? '' : hash);
228      },
229      empty: function() {
230        return this.copy().EMPTY();
231      },
232      copy: function() {
233        return new queryObject(this);
234      },
235      COMPACT: function() {
236        function build(orig) {
237          var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig;
238          if (typeof orig == 'object') {
239            function add(o, key, value) {
240              if (is(o, Array))
241                o.push(value);
242              else
243                o[key] = value;
244            }
245            jQuery.each(orig, function(key, value) {
246              if (!is(value)) return true;
247              add(obj, key, build(value));
248            });
249          }
250          return obj;
251        }
252        this.keys = build(this.keys);
253        return this;
254      },
255      compact: function() {
256        return this.copy().COMPACT();
257      },
258      toString: function() {
259        var i = 0, queryString = [], chunks = [], self = this;
260        var encode = function(str) {
261          str = str + "";
262          if ($spaces) str = str.replace(/ /g, "+");
263          return encodeURIComponent(str);
264        };
265        var addFields = function(arr, key, value) {
266          if (!is(value) || value === false) return;
267          var o = [encode(key)];
268          if (value !== true) {
269            o.push("=");
270            o.push(encode(value));
271          }
272          arr.push(o.join(""));
273        };
274        var build = function(obj, base) {
275          var newKey = function(key) {
276            return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("");
277          };
278          jQuery.each(obj, function(key, value) {
279            if (typeof value == 'object') 
280              build(value, newKey(key));
281            else
282              addFields(chunks, newKey(key), value);
283          });
284        };
285        
286        build(this.keys);
287        
288        if (chunks.length > 0) queryString.push($hash);
289        queryString.push(chunks.join($separator));
290        
291        return queryString.join("");
292      }
293    };
294    
295    return new queryObject(
296        location.search.replace(/__proto__/g, "__PROTO__").replace(/constructor/g, "CONSTRUCTOR").replace(/prototype/g, "PROTOTYPE"),
297        location.hash.replace(/__proto__/g, "__PROTO__").replace(/constructor/g, "CONSTRUCTOR").replace(/prototype/g, "PROTOTYPE")
298    );
299  };
300}(jQuery.query || {}); // Pass in jQuery.query as settings object
301
302/*
303 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
304 *
305 * Uses the built in easing capabilities added In jQuery 1.1
306 * to offer multiple easing options
307 *
308 * TERMS OF USE - jQuery Easing
309 * 
310 * Open source under the BSD License. 
311 * 
312 * Copyright c 2008 George McGinley Smith
313 * All rights reserved.
314 * 
315 * Redistribution and use in source and binary forms, with or without modification, 
316 * are permitted provided that the following conditions are met:
317 * 
318 * Redistributions of source code must retain the above copyright notice, this list of 
319 * conditions and the following disclaimer.
320 * Redistributions in binary form must reproduce the above copyright notice, this list 
321 * of conditions and the following disclaimer in the documentation and/or other materials 
322 * provided with the distribution.
323 * 
324 * Neither the name of the author nor the names of contributors may be used to endorse 
325 * or promote products derived from this software without specific prior written permission.
326 * 
327 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
328 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
329 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
330 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
331 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
332 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
333 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
334 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
335 * OF THE POSSIBILITY OF SUCH DAMAGE. 
336 *
337*/
338
339// t: current time, b: begInnIng value, c: change In value, d: duration
340jQuery.easing['jswing'] = jQuery.easing['swing'];
341
342jQuery.extend( jQuery.easing,
343{
344	def: 'easeOutQuad',
345	swing: function (x, t, b, c, d) {
346		//alert(jQuery.easing.default);
347		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
348	},
349	easeInQuad: function (x, t, b, c, d) {
350		return c*(t/=d)*t + b;
351	},
352	easeOutQuad: function (x, t, b, c, d) {
353		return -c *(t/=d)*(t-2) + b;
354	},
355	easeInOutQuad: function (x, t, b, c, d) {
356		if ((t/=d/2) < 1) return c/2*t*t + b;
357		return -c/2 * ((--t)*(t-2) - 1) + b;
358	},
359	easeInCubic: function (x, t, b, c, d) {
vendor: 4,309 bytes, lines 360-480
360		return c*(t/=d)*t*t + b;
361	},
362	easeOutCubic: function (x, t, b, c, d) {
363		return c*((t=t/d-1)*t*t + 1) + b;
364	},
365	easeInOutCubic: function (x, t, b, c, d) {
366		if ((t/=d/2) < 1) return c/2*t*t*t + b;
367		return c/2*((t-=2)*t*t + 2) + b;
368	},
369	easeInQuart: function (x, t, b, c, d) {
370		return c*(t/=d)*t*t*t + b;
371	},
372	easeOutQuart: function (x, t, b, c, d) {
373		return -c * ((t=t/d-1)*t*t*t - 1) + b;
374	},
375	easeInOutQuart: function (x, t, b, c, d) {
376		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
377		return -c/2 * ((t-=2)*t*t*t - 2) + b;
378	},
379	easeInQuint: function (x, t, b, c, d) {
380		return c*(t/=d)*t*t*t*t + b;
381	},
382	easeOutQuint: function (x, t, b, c, d) {
383		return c*((t=t/d-1)*t*t*t*t + 1) + b;
384	},
385	easeInOutQuint: function (x, t, b, c, d) {
386		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
387		return c/2*((t-=2)*t*t*t*t + 2) + b;
388	},
389	easeInSine: function (x, t, b, c, d) {
390		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
391	},
392	easeOutSine: function (x, t, b, c, d) {
393		return c * Math.sin(t/d * (Math.PI/2)) + b;
394	},
395	easeInOutSine: function (x, t, b, c, d) {
396		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
397	},
398	easeInExpo: function (x, t, b, c, d) {
399		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
400	},
401	easeOutExpo: function (x, t, b, c, d) {
402		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
403	},
404	easeInOutExpo: function (x, t, b, c, d) {
405		if (t==0) return b;
406		if (t==d) return b+c;
407		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
408		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
409	},
410	easeInCirc: function (x, t, b, c, d) {
411		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
412	},
413	easeOutCirc: function (x, t, b, c, d) {
414		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
415	},
416	easeInOutCirc: function (x, t, b, c, d) {
417		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
418		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
419	},
420	easeInElastic: function (x, t, b, c, d) {
421		var s=1.70158;var p=0;var a=c;
422		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
423		if (a < Math.abs(c)) { a=c; var s=p/4; }
424		else var s = p/(2*Math.PI) * Math.asin (c/a);
425		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
426	},
427	easeOutElastic: function (x, t, b, c, d) {
428		var s=1.70158;var p=0;var a=c;
429		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
430		if (a < Math.abs(c)) { a=c; var s=p/4; }
431		else var s = p/(2*Math.PI) * Math.asin (c/a);
432		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
433	},
434	easeInOutElastic: function (x, t, b, c, d) {
435		var s=1.70158;var p=0;var a=c;
436		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
437		if (a < Math.abs(c)) { a=c; var s=p/4; }
438		else var s = p/(2*Math.PI) * Math.asin (c/a);
439		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
440		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
441	},
442	easeInBack: function (x, t, b, c, d, s) {
443		if (s == undefined) s = 1.70158;
444		return c*(t/=d)*t*((s+1)*t - s) + b;
445	},
446	easeOutBack: function (x, t, b, c, d, s) {
447		if (s == undefined) s = 1.70158;
448		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
449	},
450	easeInOutBack: function (x, t, b, c, d, s) {
451		if (s == undefined) s = 1.70158; 
452		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
453		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
454	},
455	easeInBounce: function (x, t, b, c, d) {
456		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
457	},
458	easeOutBounce: function (x, t, b, c, d) {
459		if ((t/=d) < (1/2.75)) {
460			return c*(7.5625*t*t) + b;
461		} else if (t < (2/2.75)) {
462			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
463		} else if (t < (2.5/2.75)) {
464			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
465		} else {
466			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
467		}
468	},
469	easeInOutBounce: function (x, t, b, c, d) {
470		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
471		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
472	}
473});
474
475/*! jCarousel - v0.3.1 - 2014-04-26
476* http://sorgalla.com/jcarousel
477* Copyright (c) 2014 Jan Sorgalla; Licensed MIT */
478(function($) {
479    'use strict';
480
481    var jCarousel = $.jCarousel = {};
482
483    jCarousel.version = '0.3.1';
484
485    var rRelativeTarget = /^([+\-]=)?(.+)$/;
486
487    jCarousel.parseTarget = function(target) {
488        var relative = false,
489            parts    = typeof target !== 'object' ?
490                           rRelativeTarget.exec(target) :
491                           null;
492
493        if (parts) {
494            target = parseInt(parts[2], 10) || 0;
495
496            if (parts[1]) {
497                relative = true;
498                if (parts[1] === '-=') {
499                    target *= -1;
500                }
501            }
502        } else if (typeof target !== 'object') {
503            target = parseInt(target, 10) || 0;
504        }
505
506        return {
507            target: target,
508            relative: relative
509        };
510    };
511
512    jCarousel.detectCarousel = function(element) {
513        var carousel;
514
515        while (element.length > 0) {
516            carousel = element.filter('[data-jcarousel]');
517
518            if (carousel.length > 0) {
519                return carousel;
520            }
521
522            carousel = element.find('[data-jcarousel]');
523
524            if (carousel.length > 0) {
525                return carousel;
526            }
527
528            element = element.parent();
529        }
530
531        return null;
532    };
533
534    jCarousel.base = function(pluginName) {
535        return {
536            version:  jCarousel.version,
537            _options:  {},
538            _element:  null,
539            _carousel: null,
540            _init:     $.noop,
541            _create:   $.noop,
542            _destroy:  $.noop,
543            _reload:   $.noop,
544            create: function() {
545                this._element
546                    .attr('data-' + pluginName.toLowerCase(), true)
547                    .data(pluginName, this);
548
549                if (false === this._trigger('create')) {
550                    return this;
551                }
552
553                this._create();
554
555                this._trigger('createend');
556
557                return this;
558            },
559            destroy: function() {
560                if (false === this._trigger('destroy')) {
561                    return this;
562                }
563
564                this._destroy();
565
566                this._trigger('destroyend');
567
568                this._element
569                    .removeData(pluginName)
570                    .removeAttr('data-' + pluginName.toLowerCase());
571
572                return this;
573            },
574            reload: function(options) {
575                if (false === this._trigger('reload')) {
576                    return this;
577                }
578
579                if (options) {
580                    this.options(options);
581                }
582
583                this._reload();
584
585                this._trigger('reloadend');
586
587                return this;
588            },
589            element: function() {
590                return this._element;
591            },
592            options: function(key, value) {
593                if (arguments.length === 0) {
594                    return $.extend({}, this._options);
595                }
596
597                if (typeof key === 'string') {
598                    if (typeof value === 'undefined') {
599                        return typeof this._options[key] === 'undefined' ?
600                                null :
601                                this._options[key];
602                    }
603
604                    this._options[key] = value;
605                } else {
606                    this._options = $.extend({}, this._options, key);
607                }
608
609                return this;
610            },
611            carousel: function() {
612                if (!this._carousel) {
613                    this._carousel = jCarousel.detectCarousel(this.options('carousel') || this._element);
614
615                    if (!this._carousel) {
616                        $.error('Could not detect carousel for plugin "' + pluginName + '"');
617                    }
618                }
619
620                return this._carousel;
621            },
622            _trigger: function(type, element, data) {
623                var event,
624                    defaultPrevented = false;
625
626                data = [this].concat(data || []);
627
628                (element || this._element).each(function() {
629                    event = $.Event((pluginName + ':' + type).toLowerCase());
630
631                    $(this).trigger(event, data);
632
633                    if (event.isDefaultPrevented()) {
634                        defaultPrevented = true;
635                    }
636                });
637
638                return !defaultPrevented;
639            }
640        };
641    };
642
643    jCarousel.plugin = function(pluginName, pluginPrototype) {
644        var Plugin = $[pluginName] = function(element, options) {
645            this._element = $(element);
646            this.options(options);
647
648            this._init();
649            this.create();
650        };
651
652        Plugin.fn = Plugin.prototype = $.extend(
653            {},
654            jCarousel.base(pluginName),
655            pluginPrototype
656        );
657
658        $.fn[pluginName] = function(options) {
659            var args        = Array.prototype.slice.call(arguments, 1),
660                returnValue = this;
661
662            if (typeof options === 'string') {
663                this.each(function() {
664                    var instance = $(this).data(pluginName);
665
666                    if (!instance) {
667                        return $.error(
668                            'Cannot call methods on ' + pluginName + ' prior to initialization; ' +
669                            'attempted to call method "' + options + '"'
670                        );
671                    }
672
673                    if (!$.isFunction(instance[options]) || options.charAt(0) === '_') {
674                        return $.error(
675                            'No such method "' + options + '" for ' + pluginName + ' instance'
676                        );
677                    }
678
679                    var methodValue = instance[options].apply(instance, args);
680
681                    if (methodValue !== instance && typeof methodValue !== 'undefined') {
682                        returnValue = methodValue;
683                        return false;
684                    }
685                });
686            } else {
687                this.each(function() {
688                    var instance = $(this).data(pluginName);
689
690                    if (instance instanceof Plugin) {
691                        instance.reload(options);
692                    } else {
693                        new Plugin(this, options);
694                    }
695                });
696            }
697
698            return returnValue;
699        };
700
701        return Plugin;
702    };
703}(jQuery));
704
705(function($, window) {
706    'use strict';
707
708    var toFloat = function(val) {
709        return parseFloat(val) || 0;
710    };
711
712    $.jCarousel.plugin('jcarousel', {
713        animating:   false,
714        tail:        0,
715        inTail:      false,
716        resizeTimer: null,
717        lt:          null,
718        vertical:    false,
719        rtl:         false,
720        circular:    false,
721        underflow:   false,
722        relative:    false,
723
724        _options: {
725            list: function() {
726                return this.element().children().eq(0);
727            },
728            items: function() {
729                return this.list().children();
730            },
731            animation:   400,
732            transitions: false,
733            wrap:        null,
734            vertical:    null,
735            rtl:         null,
736            center:      false
737        },
738
739        // Protected, don't access directly
740        _list:         null,
741        _items:        null,
742        _target:       null,
743        _first:        null,
744        _last:         null,
745        _visible:      null,
746        _fullyvisible: null,
747        _init: function() {
748            var self = this;
749
750            this.onWindowResize = function() {
751                if (self.resizeTimer) {
752                    clearTimeout(self.resizeTimer);
753                }
754
755                self.resizeTimer = setTimeout(function() {
756                    self.reload();
757                }, 100);
758            };
759
760            return this;
761        },
762        _create: function() {
763            this._reload();
764
765            $(window).on('resize.jcarousel', this.onWindowResize);
766        },
767        _destroy: function() {
768            $(window).off('resize.jcarousel', this.onWindowResize);
769        },
770        _reload: function() {
771            this.vertical = this.options('vertical');
772
773            if (this.vertical == null) {
774                this.vertical = this.list().height() > this.list().width();
775            }
776
777            this.rtl = this.options('rtl');
778
779            if (this.rtl == null) {
780                this.rtl = (function(element) {
781                    if (('' + element.attr('dir')).toLowerCase() === 'rtl') {
782                        return true;
783                    }
784
785                    var found = false;
786
787                    element.parents('[dir]').each(function() {
788                        if ((/rtl/i).test($(this).attr('dir'))) {
789                            found = true;
790                            return false;
791                        }
792                    });
793
794                    return found;
795                }(this._element));
796            }
797
798            this.lt = this.vertical ? 'top' : 'left';
799
800            // Ensure before closest() call
801            this.relative = this.list().css('position') === 'relative';
802
803            // Force list and items reload
804            this._list  = null;
805            this._items = null;
806
807            var item = this._target && this.index(this._target) >= 0 ?
808                           this._target :
809                           this.closest();
810
811            // _prepare() needs this here
812            this.circular  = this.options('wrap') === 'circular';
813            this.underflow = false;
814
815            var props = {'left': 0, 'top': 0};
816
817            if (item.length > 0) {
818                this._prepare(item);
819                this.list().find('[data-jcarousel-clone]').remove();
820
821                // Force items reload
822                this._items = null;
823
824                this.underflow = this._fullyvisible.length >= this.items().length;
825                this.circular  = this.circular && !this.underflow;
826
827                props[this.lt] = this._position(item) + 'px';
828            }
829
830            this.move(props);
831
832            return this;
833        },
834        list: function() {
835            if (this._list === null) {
836                var option = this.options('list');
837                this._list = $.isFunction(option) ? option.call(this) : this._element.find(option);
838            }
839
840            return this._list;
841        },
842        items: function() {
843            if (this._items === null) {
844                var option = this.options('items');
845                this._items = ($.isFunction(option) ? option.call(this) : this.list().find(option)).not('[data-jcarousel-clone]');
846            }
847
848            return this._items;
849        },
850        index: function(item) {
851            return this.items().index(item);
852        },
853        closest: function() {
854            var self    = this,
855                pos     = this.list().position()[this.lt],
856                closest = $(), // Ensure we're returning a jQuery instance
857                stop    = false,
858                lrb     = this.vertical ? 'bottom' : (this.rtl && !this.relative ? 'left' : 'right'),
859                width;
860
861            if (this.rtl && this.relative && !this.vertical) {
862                pos += this.list().width() - this.clipping();
863            }
864
865            this.items().each(function() {
866                closest = $(this);
867
868                if (stop) {
869                    return false;
870                }
871
872                var dim = self.dimension(closest);
873
874                pos += dim;
875
876                if (pos >= 0) {
877                    width = dim - toFloat(closest.css('margin-' + lrb));
878
879                    if ((Math.abs(pos) - dim + (width / 2)) <= 0) {
880                        stop = true;
881                    } else {
882                        return false;
883                    }
884                }
885            });
886
887
888            return closest;
889        },
890        target: function() {
891            return this._target;
892        },
893        first: function() {
894            return this._first;
895        },
896        last: function() {
897            return this._last;
898        },
899        visible: function() {
900            return this._visible;
901        },
902        fullyvisible: function() {
903            return this._fullyvisible;
904        },
905        hasNext: function() {
906            if (false === this._trigger('hasnext')) {
907                return true;
908            }
909
910            var wrap = this.options('wrap'),
911                end = this.items().length - 1;
912
913            return end >= 0 && !this.underflow &&
914                ((wrap && wrap !== 'first') ||
915                    (this.index(this._last) < end) ||
916                    (this.tail && !this.inTail)) ? true : false;
917        },
918        hasPrev: function() {
919            if (false === this._trigger('hasprev')) {
920                return true;
921            }
922
923            var wrap = this.options('wrap');
924
925            return this.items().length > 0 && !this.underflow &&
926                ((wrap && wrap !== 'last') ||
927                    (this.index(this._first) > 0) ||
928                    (this.tail && this.inTail)) ? true : false;
929        },
930        clipping: function() {
931            return this._element['inner' + (this.vertical ? 'Height' : 'Width')]();
932        },
933        dimension: function(element) {
934            return element['outer' + (this.vertical ? 'Height' : 'Width')](true);
935        },
936        scroll: function(target, animate, callback) {
937            if (this.animating) {
938                return this;
939            }
940
941            if (false === this._trigger('scroll', null, [target, animate])) {
942                return this;
943            }
944
945            if ($.isFunction(animate)) {
946                callback = animate;
947                animate  = true;
948            }
949
950            var parsed = $.jCarousel.parseTarget(target);
951
952            if (parsed.relative) {
953                var end    = this.items().length - 1,
954                    scroll = Math.abs(parsed.target),
955                    wrap   = this.options('wrap'),
956                    current,
957                    first,
958                    index,
959                    start,
960                    curr,
961                    isVisible,
962                    props,
963                    i;
964
965                if (parsed.target > 0) {
966                    var last = this.index(this._last);
967
968                    if (last >= end && this.tail) {
969                        if (!this.inTail) {
970                            this._scrollTail(animate, callback);
971                        } else {
972                            if (wrap === 'both' || wrap === 'last') {
973                                this._scroll(0, animate, callback);
974                            } else {
975                                if ($.isFunction(callback)) {
976                                    callback.call(this, false);
977                                }
978                            }
979                        }
980                    } else {
981                        current = this.index(this._target);
982
983                        if ((this.underflow && current === end && (wrap === 'circular' || wrap === 'both' || wrap === 'last')) ||
984                            (!this.underflow && last === end && (wrap === 'both' || wrap === 'last'))) {
985                            this._scroll(0, animate, callback);
986                        } else {
987                            index = current + scroll;
988
989                            if (this.circular && index > end) {
990                                i = end;
991                                curr = this.items().get(-1);
992
993                                while (i++ < index) {
994                                    curr = this.items().eq(0);
995                                    isVisible = this._visible.index(curr) >= 0;
996
997                                    if (isVisible) {
998                                        curr.after(curr.clone(true).attr('data-jcarousel-clone', true));
999                                    }
1000
1001                                    this.list().append(curr);
1002
1003                                    if (!isVisible) {
1004                                        props = {};
1005                                        props[this.lt] = this.dimension(curr);
1006                                        this.moveBy(props);
1007                                    }
1008
1009                                    // Force items reload
1010                                    this._items = null;
1011                                }
1012
1013                                this._scroll(curr, animate, callback);
1014                            } else {
1015                                this._scroll(Math.min(index, end), animate, callback);
1016                            }
1017                        }
1018                    }
1019                } else {
1020                    if (this.inTail) {
1021                        this._scroll(Math.max((this.index(this._first) - scroll) + 1, 0), animate, callback);
1022                    } else {
1023                        first  = this.index(this._first);
1024                        current = this.index(this._target);
1025                        start  = this.underflow ? current : first;
1026                        index  = start - scroll;
1027
1028                        if (start <= 0 && ((this.underflow && wrap === 'circular') || wrap === 'both' || wrap === 'first')) {
1029                            this._scroll(end, animate, callback);
1030                        } else {
1031                            if (this.circular && index < 0) {
1032                                i    = index;
1033                                curr = this.items().get(0);
1034
1035                                while (i++ < 0) {
1036                                    curr = this.items().eq(-1);
1037                                    isVisible = this._visible.index(curr) >= 0;
1038
1039                                    if (isVisible) {
1040                                        curr.after(curr.clone(true).attr('data-jcarousel-clone', true));
1041                                    }
1042
1043                                    this.list().prepend(curr);
1044
1045                                    // Force items reload
1046                                    this._items = null;
1047
1048                                    var dim = this.dimension(curr);
1049
1050                                    props = {};
1051                                    props[this.lt] = -dim;
1052                                    this.moveBy(props);
1053
1054                                }
1055
1056                                this._scroll(curr, animate, callback);
1057                            } else {
1058                                this._scroll(Math.max(index, 0), animate, callback);
1059                            }
1060                        }
1061                    }
1062                }
1063            } else {
1064                this._scroll(parsed.target, animate, callback);
1065            }
1066
1067            this._trigger('scrollend');
1068
1069            return this;
1070        },
1071        moveBy: function(properties, opts) {
1072            var position = this.list().position(),
1073                multiplier = 1,
1074                correction = 0;
1075
1076            if (this.rtl && !this.vertical) {
1077                multiplier = -1;
1078
1079                if (this.relative) {
1080                    correction = this.list().width() - this.clipping();
1081                }
1082            }
1083
1084            if (properties.left) {
1085                properties.left = (position.left + correction + toFloat(properties.left) * multiplier) + 'px';
1086            }
1087
1088            if (properties.top) {
1089                properties.top = (position.top + correction + toFloat(properties.top) * multiplier) + 'px';
1090            }
1091
1092            return this.move(properties, opts);
1093        },
1094        move: function(properties, opts) {
1095            opts = opts || {};
1096
1097            var option       = this.options('transitions'),
1098                transitions  = !!option,
1099                transforms   = !!option.transforms,
1100                transforms3d = !!option.transforms3d,
1101                duration     = opts.duration || 0,
1102                list         = this.list();
1103
1104            if (!transitions && duration > 0) {
1105                list.animate(properties, opts);
1106                return;
1107            }
1108
1109            var complete = opts.complete || $.noop,
1110                css = {};
1111
1112            if (transitions) {
1113                var backup = list.css(['transitionDuration', 'transitionTimingFunction', 'transitionProperty']),
1114                    oldComplete = complete;
1115
1116                complete = function() {
1117                    $(this).css(backup);
1118                    oldComplete.call(this);
1119                };
1120                css = {
1121                    transitionDuration: (duration > 0 ? duration / 1000 : 0) + 's',
1122                    transitionTimingFunction: option.easing || opts.easing,
1123                    transitionProperty: duration > 0 ? (function() {
1124                        if (transforms || transforms3d) {
1125                            // We have to use 'all' because jQuery doesn't prefix
1126                            // css values, like transition-property: transform;
1127                            return 'all';
1128                        }
1129
1130                        return properties.left ? 'left' : 'top';
1131                    })() : 'none',
1132                    transform: 'none'
1133                };
1134            }
1135
1136            if (transforms3d) {
1137                css.transform = 'translate3d(' + (properties.left || 0) + ',' + (properties.top || 0) + ',0)';
1138            } else if (transforms) {
1139                css.transform = 'translate(' + (properties.left || 0) + ',' + (properties.top || 0) + ')';
1140            } else {
1141                $.extend(css, properties);
1142            }
1143
1144            if (transitions && duration > 0) {
1145                list.one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', complete);
1146            }
1147
1148            list.css(css);
1149
1150            if (duration <= 0) {
1151                list.each(function() {
1152                    complete.call(this);
1153                });
1154            }
1155        },
1156        _scroll: function(item, animate, callback) {
1157            if (this.animating) {
1158                if ($.isFunction(callback)) {
1159                    callback.call(this, false);
1160                }
1161
1162                return this;
1163            }
1164
1165            if (typeof item !== 'object') {
1166                item = this.items().eq(item);
1167            } else if (typeof item.jquery === 'undefined') {
1168                item = $(item);
1169            }
1170
1171            if (item.length === 0) {
1172                if ($.isFunction(callback)) {
1173                    callback.call(this, false);
1174                }
1175
1176                return this;
1177            }
1178
1179            this.inTail = false;
1180
1181            this._prepare(item);
1182
1183            var pos     = this._position(item),
1184                currPos = this.list().position()[this.lt];
1185
1186            if (pos === currPos) {
1187                if ($.isFunction(callback)) {
1188                    callback.call(this, false);
1189                }
1190
1191                return this;
1192            }
1193
1194            var properties = {};
1195            properties[this.lt] = pos + 'px';
1196
1197            this._animate(properties, animate, callback);
1198
1199            return this;
1200        },
1201        _scrollTail: function(animate, callback) {
1202            if (this.animating || !this.tail) {
1203                if ($.isFunction(callback)) {
1204                    callback.call(this, false);
1205                }
1206
1207                return this;
1208            }
1209
1210            var pos = this.list().position()[this.lt];
1211
1212            if (this.rtl && this.relative && !this.vertical) {
1213                pos += this.list().width() - this.clipping();
1214            }
1215
1216            if (this.rtl && !this.vertical) {
1217                pos += this.tail;
1218            } else {
1219                pos -= this.tail;
1220            }
1221
1222            this.inTail = true;
1223
1224            var properties = {};
1225            properties[this.lt] = pos + 'px';
1226
1227            this._update({
1228                target:       this._target.next(),
1229                fullyvisible: this._fullyvisible.slice(1).add(this._visible.last())
1230            });
1231
1232            this._animate(properties, animate, callback);
1233
1234            return this;
1235        },
1236        _animate: function(properties, animate, callback) {
1237            callback = callback || $.noop;
1238
1239            if (false === this._trigger('animate')) {
1240                callback.call(this, false);
1241                return this;
1242            }
1243
1244            this.animating = true;
1245
1246            var animation = this.options('animation'),
1247                complete  = $.proxy(function() {
1248                    this.animating = false;
1249
1250                    var c = this.list().find('[data-jcarousel-clone]');
1251
1252                    if (c.length > 0) {
1253                        c.remove();
1254                        this._reload();
1255                    }
1256
1257                    this._trigger('animateend');
1258
1259                    callback.call(this, true);
1260                }, this);
1261
1262            var opts = typeof animation === 'object' ?
1263                           $.extend({}, animation) :
1264                           {duration: animation},
1265                oldComplete = opts.complete || $.noop;
1266
1267            if (animate === false) {
1268                opts.duration = 0;
1269            } else if (typeof $.fx.speeds[opts.duration] !== 'undefined') {
1270                opts.duration = $.fx.speeds[opts.duration];
1271            }
1272
1273            opts.complete = function() {
1274                complete();
1275                oldComplete.call(this);
1276            };
1277
1278            this.move(properties, opts);
1279
1280            return this;
1281        },
1282        _prepare: function(item) {
1283            var index  = this.index(item),
1284                idx    = index,
1285                wh     = this.dimension(item),
1286                clip   = this.clipping(),
1287                lrb    = this.vertical ? 'bottom' : (this.rtl ? 'left'  : 'right'),
1288                center = this.options('center'),
1289                update = {
1290                    target:       item,
1291                    first:        item,
1292                    last:         item,
1293                    visible:      item,
1294                    fullyvisible: wh <= clip ? item : $()
1295                },
1296                curr,
1297                isVisible,
1298                margin,
1299                dim;
1300
1301            if (center) {
1302                wh /= 2;
1303                clip /= 2;
1304            }
1305
1306            if (wh < clip) {
1307                while (true) {
1308                    curr = this.items().eq(++idx);
1309
1310                    if (curr.length === 0) {
1311                        if (!this.circular) {
1312                            break;
1313                        }
1314
1315                        curr = this.items().eq(0);
1316
1317                        if (item.get(0) === curr.get(0)) {
1318                            break;
1319                        }
1320
1321                        isVisible = this._visible.index(curr) >= 0;
1322
1323                        if (isVisible) {
1324                            curr.after(curr.clone(true).attr('data-jcarousel-clone', true));
1325                        }
1326
1327                        this.list().append(curr);
1328
1329                        if (!isVisible) {
1330                            var props = {};
1331                            props[this.lt] = this.dimension(curr);
1332                            this.moveBy(props);
1333                        }
1334
1335                        // Force items reload
1336                        this._items = null;
1337                    }
1338
1339                    dim = this.dimension(curr);
1340
1341                    if (dim === 0) {
1342                        break;
1343                    }
1344
1345                    wh += dim;
1346
1347                    update.last    = curr;
1348                    update.visible = update.visible.add(curr);
1349
1350                    // Remove right/bottom margin from total width
1351                    margin = toFloat(curr.css('margin-' + lrb));
1352
1353                    if ((wh - margin) <= clip) {
1354                        update.fullyvisible = update.fullyvisible.add(curr);
1355                    }
1356
1357                    if (wh >= clip) {
1358                        break;
1359                    }
1360                }
1361            }
1362
1363            if (!this.circular && !center && wh < clip) {
1364                idx = index;
1365
1366                while (true) {
1367                    if (--idx < 0) {
1368                        break;
1369                    }
1370
1371                    curr = this.items().eq(idx);
1372
1373                    if (curr.length === 0) {
1374                        break;
1375                    }
1376
1377                    dim = this.dimension(curr);
1378
1379                    if (dim === 0) {
1380                        break;
1381                    }
1382
1383                    wh += dim;
1384
1385                    update.first   = curr;
1386                    update.visible = update.visible.add(curr);
1387
1388                    // Remove right/bottom margin from total width
1389                    margin = toFloat(curr.css('margin-' + lrb));
1390
1391                    if ((wh - margin) <= clip) {
1392                        update.fullyvisible = update.fullyvisible.add(curr);
1393                    }
1394
1395                    if (wh >= clip) {
1396                        break;
1397                    }
1398                }
1399            }
1400
1401            this._update(update);
1402
1403            this.tail = 0;
1404
1405            if (!center &&
1406                this.options('wrap') !== 'circular' &&
1407                this.options('wrap') !== 'custom' &&
1408                this.index(update.last) === (this.items().length - 1)) {
1409
1410                // Remove right/bottom margin from total width
1411                wh -= toFloat(update.last.css('margin-' + lrb));
1412
1413                if (wh > clip) {
1414                    this.tail = wh - clip;
1415                }
1416            }
1417
1418            return this;
1419        },
1420        _position: function(item) {
1421            var first  = this._first,
1422                pos    = first.position()[this.lt],
1423                center = this.options('center'),
1424                centerOffset = center ? (this.clipping() / 2) - (this.dimension(first) / 2) : 0;
1425
1426            if (this.rtl && !this.vertical) {
1427                if (this.relative) {
1428                    pos -= this.list().width() - this.dimension(first);
1429                } else {
1430                    pos -= this.clipping() - this.dimension(first);
1431                }
1432
1433                pos += centerOffset;
1434            } else {
1435                pos -= centerOffset;
1436            }
1437
1438            if (!center &&
1439                (this.index(item) > this.index(first) || this.inTail) &&
1440                this.tail) {
1441                pos = this.rtl && !this.vertical ? pos - this.tail : pos + this.tail;
1442                this.inTail = true;
1443            } else {
1444                this.inTail = false;
1445            }
1446
1447            return -pos;
1448        },
1449        _update: function(update) {
1450            var self = this,
1451                current = {
1452                    target:       this._target || $(),
1453                    first:        this._first || $(),
1454                    last:         this._last || $(),
1455                    visible:      this._visible || $(),
1456                    fullyvisible: this._fullyvisible || $()
1457                },
1458                back = this.index(update.first || current.first) < this.index(current.first),
1459                key,
1460                doUpdate = function(key) {
1461                    var elIn  = [],
1462                        elOut = [];
1463
1464                    update[key].each(function() {
1465                        if (current[key].index(this) < 0) {
1466                            elIn.push(this);
1467                        }
1468                    });
1469
1470                    current[key].each(function() {
1471                        if (update[key].index(this) < 0) {
1472                            elOut.push(this);
1473                        }
1474                    });
1475
1476                    if (back) {
1477                        elIn = elIn.reverse();
1478                    } else {
1479                        elOut = elOut.reverse();
1480                    }
1481
1482                    self._trigger(key + 'in', $(elIn));
1483                    self._trigger(key + 'out', $(elOut));
1484
1485                    self['_' + key] = update[key];
1486                };
1487
1488            for (key in update) {
1489                doUpdate(key);
1490            }
1491
1492            return this;
1493        }
1494    });
1495}(jQuery, window));
1496
1497(function($) {
1498    'use strict';
1499
1500    $.jcarousel.fn.scrollIntoView = function(target, animate, callback) {
1501        var parsed = $.jCarousel.parseTarget(target),
1502            first  = this.index(this._fullyvisible.first()),
1503            last   = this.index(this._fullyvisible.last()),
1504            index;
1505
1506        if (parsed.relative) {
1507            index = parsed.target < 0 ? Math.max(0, first + parsed.target) : last + parsed.target;
1508        } else {
1509            index = typeof parsed.target !== 'object' ? parsed.target : this.index(parsed.target);
1510        }
1511
1512        if (index < first) {
1513            return this.scroll(index, animate, callback);
1514        }
1515
1516        if (index >= first && index <= last) {
1517            if ($.isFunction(callback)) {
1518                callback.call(this, false);
1519            }
1520
1521            return this;
1522        }
1523
1524        var items = this.items(),
1525            clip = this.clipping(),
1526            lrb  = this.vertical ? 'bottom' : (this.rtl ? 'left'  : 'right'),
1527            wh   = 0,
1528            curr;
1529
1530        while (true) {
1531            curr = items.eq(index);
1532
1533            if (curr.length === 0) {
1534                break;
1535            }
1536
1537            wh += this.dimension(curr);
1538
1539            if (wh >= clip) {
1540                var margin = parseFloat(curr.css('margin-' + lrb)) || 0;
1541                if ((wh - margin) !== clip) {
1542                    index++;
1543                }
1544                break;
1545            }
1546
1547            if (index <= 0) {
1548                break;
1549            }
1550
1551            index--;
1552        }
1553
1554        return this.scroll(index, animate, callback);
1555    };
1556}(jQuery));
1557
1558(function($) {
1559    'use strict';
1560
1561    $.jCarousel.plugin('jcarouselControl', {
1562        _options: {
1563            target: '+=1',
1564            event:  'click',
1565            method: 'scroll'
1566        },
1567        _active: null,
1568        _init: function() {
1569            this.onDestroy = $.proxy(function() {
1570                this._destroy();
1571                this.carousel()
1572                    .one('jcarousel:createend', $.proxy(this._create, this));
1573            }, this);
1574            this.onReload = $.proxy(this._reload, this);
1575            this.onEvent = $.proxy(function(e) {
1576                e.preventDefault();
1577
1578                var method = this.options('method');
1579
1580                if ($.isFunction(method)) {
1581                    method.call(this);
1582                } else {
1583                    this.carousel()
1584                        .jcarousel(this.options('method'), this.options('target'));
1585                }
1586            }, this);
1587        },
1588        _create: function() {
1589            this.carousel()
1590                .one('jcarousel:destroy', this.onDestroy)
1591                .on('jcarousel:reloadend jcarousel:scrollend', this.onReload);
1592
1593            this._element
1594                .on(this.options('event') + '.jcarouselcontrol', this.onEvent);
1595
1596            this._reload();
1597        },
1598        _destroy: function() {
1599            this._element
1600                .off('.jcarouselcontrol', this.onEvent);
1601
1602            this.carousel()
1603                .off('jcarousel:destroy', this.onDestroy)
1604                .off('jcarousel:reloadend jcarousel:scrollend', this.onReload);
1605        },
1606        _reload: function() {
1607            var parsed   = $.jCarousel.parseTarget(this.options('target')),
1608                carousel = this.carousel(),
1609                active;
1610
1611            if (parsed.relative) {
1612                active = carousel
1613                    .jcarousel(parsed.target > 0 ? 'hasNext' : 'hasPrev');
1614            } else {
1615                var target = typeof parsed.target !== 'object' ?
1616                                carousel.jcarousel('items').eq(parsed.target) :
1617                                parsed.target;
1618
1619                active = carousel.jcarousel('target').index(target) >= 0;
1620            }
1621
1622            if (this._active !== active) {
1623                this._trigger(active ? 'active' : 'inactive');
1624                this._active = active;
1625            }
1626
1627            return this;
1628        }
1629    });
1630}(jQuery));
1631
1632(function($) {
1633    'use strict';
1634
1635    $.jCarousel.plugin('jcarouselPagination', {
1636        _options: {
1637            perPage: null,
1638            item: function(page) {
1639                return '<a href="#' + page + '">' + page + '</a>';
1640            },
1641            event:  'click',
1642            method: 'scroll'
1643        },
1644        _carouselItems: null,
1645        _pages: {},
1646        _items: {},
1647        _currentPage: null,
1648        _init: function() {
1649            this.onDestroy = $.proxy(function() {
1650                this._destroy();
1651                this.carousel()
1652                    .one('jcarousel:createend', $.proxy(this._create, this));
1653            }, this);
1654            this.onReload = $.proxy(this._reload, this);
1655            this.onScroll = $.proxy(this._update, this);
1656        },
1657        _create: function() {
1658            this.carousel()
1659                .one('jcarousel:destroy', this.onDestroy)
1660                .on('jcarousel:reloadend', this.onReload)
1661                .on('jcarousel:scrollend', this.onScroll);
1662
1663            this._reload();
1664        },
1665        _destroy: function() {
1666            this._clear();
1667
1668            this.carousel()
1669                .off('jcarousel:destroy', this.onDestroy)
1670                .off('jcarousel:reloadend', this.onReload)
1671                .off('jcarousel:scrollend', this.onScroll);
1672
1673            this._carouselItems = null;
1674        },
1675        _reload: function() {
1676            var perPage = this.options('perPage');
1677
1678            this._pages = {};
1679            this._items = {};
1680
1681            // Calculate pages
1682            if ($.isFunction(perPage)) {
1683                perPage = perPage.call(this);
1684            }
1685
1686            if (perPage == null) {
1687                this._pages = this._calculatePages();
1688            } else {
1689                var pp    = parseInt(perPage, 10) || 0,
1690                    items = this._getCarouselItems(),
1691                    page  = 1,
1692                    i     = 0,
1693                    curr;
1694
1695                while (true) {
1696                    curr = items.eq(i++);
1697
1698                    if (curr.length === 0) {
1699                        break;
1700                    }
1701
1702                    if (!this._pages[page]) {
1703                        this._pages[page] = curr;
1704                    } else {
1705                        this._pages[page] = this._pages[page].add(curr);
1706                    }
1707
1708                    if (i % pp === 0) {
1709                        page++;
1710                    }
1711                }
1712            }
1713
1714            this._clear();
1715
1716            var self     = this,
1717                carousel = this.carousel().data('jcarousel'),
1718                element  = this._element,
1719                item     = this.options('item'),
1720                numCarouselItems = this._getCarouselItems().length;
1721
1722            $.each(this._pages, function(page, carouselItems) {
1723                var currItem = self._items[page] = $(item.call(self, page, carouselItems));
1724
1725                currItem.on(self.options('event') + '.jcarouselpagination', $.proxy(function() {
1726                    var target = carouselItems.eq(0);
1727
1728                    // If circular wrapping enabled, ensure correct scrolling direction
1729                    if (carousel.circular) {
1730                        var currentIndex = carousel.index(carousel.target()),
1731                            newIndex     = carousel.index(target);
1732
1733                        if (parseFloat(page) > parseFloat(self._currentPage)) {
1734                            if (newIndex < currentIndex) {
1735                                target = '+=' + (numCarouselItems - currentIndex + newIndex);
1736                            }
1737                        } else {
1738                            if (newIndex > currentIndex) {
1739                                target = '-=' + (currentIndex + (numCarouselItems - newIndex));
1740                            }
1741                        }
1742                    }
1743
1744                    carousel[this.options('method')](target);
1745                }, self));
1746
1747                element.append(currItem);
1748            });
1749
1750            this._update();
1751        },
1752        _update: function() {
1753            var target = this.carousel().jcarousel('target'),
1754                currentPage;
1755
1756            $.each(this._pages, function(page, carouselItems) {
1757                carouselItems.each(function() {
1758                    if (target.is(this)) {
1759                        currentPage = page;
1760                        return false;
1761                    }
1762                });
1763
1764                if (currentPage) {
1765                    return false;
1766                }
1767            });
1768
1769            if (this._currentPage !== currentPage) {
1770                this._trigger('inactive', this._items[this._currentPage]);
1771                this._trigger('active', this._items[currentPage]);
1772            }
1773
1774            this._currentPage = currentPage;
1775        },
1776        items: function() {
1777            return this._items;
1778        },
1779        reloadCarouselItems: function() {
1780            this._carouselItems = null;
1781            return this;
1782        },
1783        _clear: function() {
1784            this._element.empty();
1785            this._currentPage = null;
1786        },
1787        _calculatePages: function() {
1788            var carousel = this.carousel().data('jcarousel'),
1789                items    = this._getCarouselItems(),
1790                clip     = carousel.clipping(),
1791                wh       = 0,
1792                idx      = 0,
1793                page     = 1,
1794                pages    = {},
1795                curr;
1796
1797            while (true) {
1798                curr = items.eq(idx++);
1799
1800                if (curr.length === 0) {
1801                    break;
1802                }
1803
1804                if (!pages[page]) {
1805                    pages[page] = curr;
1806                } else {
1807                    pages[page] = pages[page].add(curr);
1808                }
1809
1810                wh += carousel.dimension(curr);
1811
1812                if (wh >= clip) {
1813                    page++;
1814                    wh = 0;
1815                }
1816            }
1817
1818            return pages;
1819        },
1820        _getCarouselItems: function() {
1821            if (!this._carouselItems) {
1822                this._carouselItems = this.carousel().jcarousel('items');
1823            }
1824
1825            return this._carouselItems;
1826        }
1827    });
1828}(jQuery));
1829
1830(function($) {
1831    'use strict';
1832
1833    $.jCarousel.plugin('jcarouselAutoscroll', {
1834        _options: {
1835            target:    '+=1',
1836            interval:  3000,
1837            autostart: true
1838        },
1839        _timer: null,
1840        _init: function () {
1841            this.onDestroy = $.proxy(function() {
1842                this._destroy();
1843                this.carousel()
1844                    .one('jcarousel:createend', $.proxy(this._create, this));
1845            }, this);
1846
1847            this.onAnimateEnd = $.proxy(this.start, this);
1848        },
1849        _create: function() {
1850            this.carousel()
1851                .one('jcarousel:destroy', this.onDestroy);
1852
1853            if (this.options('autostart')) {
1854                this.start();
1855            }
1856        },
1857        _destroy: function() {
1858            this.stop();
1859            this.carousel()
1860                .off('jcarousel:destroy', this.onDestroy);
1861        },
1862        start: function() {
1863            this.stop();
1864
1865            this.carousel()
1866                .one('jcarousel:animateend', this.onAnimateEnd);
1867
1868            this._timer = setTimeout($.proxy(function() {
1869                this.carousel().jcarousel('scroll', this.options('target'));
1870            }, this), this.options('interval'));
1871
1872            return this;
1873        },
1874        stop: function() {
1875            if (this._timer) {
1876                this._timer = clearTimeout(this._timer);
1877            }
1878
1879            this.carousel()
1880                .off('jcarousel:animateend', this.onAnimateEnd);
1881
1882            return this;
1883        }
1884    });
1885}(jQuery));
1886
1887
1888/*! picturefill - v3.0.2 - 2016-02-12
1889 * https://scottjehl.github.io/picturefill/
1890 * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT
1891 */�
vendor: 11,621 bytes, lines 1891-1892
1891
1892!function(a){var b=navigator.userAgent;a.HTMLPictureElement&&/ecko/.test(b)&&b.match(/rv\:(\d+)/)&&RegExp.$1<45&&addEventListener("resize",function(){var b,c=document.createElement("source"),d=function(a){var b,d,e=a.parentNode;"PICTURE"===e.nodeName.toUpperCase()?(b=c.cloneNode(),e.insertBefore(b,e.firstElementChild),setTimeout(function(){e.removeChild(b)})):(!a._pfLastSize||a.offsetWidth>a._pfLastSize)&&(a._pfLastSize=a.offsetWidth,d=a.sizes,a.sizes+=",100vw",setTimeout(function(){a.sizes=d}))},e=function(){var a,b=document.querySelectorAll("picture > img, img[srcset][sizes]");for(a=0;a<b.length;a++)d(b[a])},f=function(){clearTimeout(b),b=setTimeout(e,99)},g=a.matchMedia&&matchMedia("(orientation: landscape)"),h=function(){f(),g&&g.addListener&&g.addListener(f)};return c.srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",/^[c|i]|d$/.test(document.readyState||"")?h():document.addEventListener("DOMContentLoaded",h),f}())}(window),function(a,b,c){"use strict";function d(a){return" "===a||"	"===a||"\n"===a||"\f"===a||"\r"===a}function e(b,c){var d=new a.Image;return d.onerror=function(){A[b]=!1,ba()},d.onload=function(){A[b]=1===d.width,ba()},d.src=c,"pending"}function f(){M=!1,P=a.devicePixelRatio,N={},O={},s.DPR=P||1,Q.width=Math.max(a.innerWidth||0,z.clientWidth),Q.height=Math.max(a.innerHeight||0,z.clientHeight),Q.vw=Q.width/100,Q.vh=Q.height/100,r=[Q.height,Q.width,P].join("-"),Q.em=s.getEmValue(),Q.rem=Q.em}function g(a,b,c,d){var e,f,g,h;return"saveData"===B.algorithm?a>2.7?h=c+1:(f=b-c,e=Math.pow(a-.6,1.5),g=f*e,d&&(g+=.1*e),h=a+g):h=c>1?Math.sqrt(a*b):a,h>c}function h(a){var b,c=s.getSet(a),d=!1;"pending"!==c&&(d=r,c&&(b=s.setRes(c),s.applySetCandidate(b,a))),a[s.ns].evaled=d}function i(a,b){return a.res-b.res}function j(a,b,c){var d;return!c&&b&&(c=a[s.ns].sets,c=c&&c[c.length-1]),d=k(b,c),d&&(b=s.makeUrl(b),a[s.ns].curSrc=b,a[s.ns].curCan=d,d.res||aa(d,d.set.sizes)),d}function k(a,b){var c,d,e;if(a&&b)for(e=s.parseSet(b),a=s.makeUrl(a),c=0;c<e.length;c++)if(a===s.makeUrl(e[c].url)){d=e[c];break}return d}function l(a,b){var c,d,e,f,g=a.getElementsByTagName("source");for(c=0,d=g.length;d>c;c++)e=g[c],e[s.ns]=!0,f=e.getAttribute("srcset"),f&&b.push({srcset:f,media:e.getAttribute("media"),type:e.getAttribute("type"),sizes:e.getAttribute("sizes")})}function m(a,b){function c(b){var c,d=b.exec(a.substring(m));return d?(c=d[0],m+=c.length,c):void 0}function e(){var a,c,d,e,f,i,j,k,l,m=!1,o={};for(e=0;e<h.length;e++)f=h[e],i=f[f.length-1],j=f.substring(0,f.length-1),k=parseInt(j,10),l=parseFloat(j),X.test(j)&&"w"===i?((a||c)&&(m=!0),0===k?m=!0:a=k):Y.test(j)&&"x"===i?((a||c||d)&&(m=!0),0>l?m=!0:c=l):X.test(j)&&"h"===i?((d||c)&&(m=!0),0===k?m=!0:d=k):m=!0;m||(o.url=g,a&&(o.w=a),c&&(o.d=c),d&&(o.h=d),d||c||a||(o.d=1),1===o.d&&(b.has1x=!0),o.set=b,n.push(o))}function f(){for(c(T),i="",j="in descriptor";;){if(k=a.charAt(m),"in descriptor"===j)if(d(k))i&&(h.push(i),i="",j="after descriptor");else{if(","===k)return m+=1,i&&h.push(i),void e();if("("===k)i+=k,j="in parens";else{if(""===k)return i&&h.push(i),void e();i+=k}}else if("in parens"===j)if(")"===k)i+=k,j="in descriptor";else{if(""===k)return h.push(i),void e();i+=k}else if("after descriptor"===j)if(d(k));else{if(""===k)return void e();j="in descriptor",m-=1}m+=1}}for(var g,h,i,j,k,l=a.length,m=0,n=[];;){if(c(U),m>=l)return n;g=c(V),h=[],","===g.slice(-1)?(g=g.replace(W,""),e()):f()}}function n(a){function b(a){function b(){f&&(g.push(f),f="")}function c(){g[0]&&(h.push(g),g=[])}for(var e,f="",g=[],h=[],i=0,j=0,k=!1;;){if(e=a.charAt(j),""===e)return b(),c(),h;if(k){if("*"===e&&"/"===a[j+1]){k=!1,j+=2,b();continue}j+=1}else{if(d(e)){if(a.charAt(j-1)&&d(a.charAt(j-1))||!f){j+=1;continue}if(0===i){b(),j+=1;continue}e=" "}else if("("===e)i+=1;else if(")"===e)i-=1;else{if(","===e){b(),c(),j+=1;continue}if("/"===e&&"*"===a.charAt(j+1)){k=!0,j+=2;continue}}f+=e,j+=1}}}function c(a){return k.test(a)&&parseFloat(a)>=0?!0:l.test(a)?!0:"0"===a||"-0"===a||"+0"===a?!0:!1}var e,f,g,h,i,j,k=/^(?:[+-]?[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i,l=/^calc\((?:[0-9a-z \.\+\-\*\/\(\)]+)\)$/i;for(f=b(a),g=f.length,e=0;g>e;e++)if(h=f[e],i=h[h.length-1],c(i)){if(j=i,h.pop(),0===h.length)return j;if(h=h.join(" "),s.matchesMedia(h))return j}return"100vw"}b.createElement("picture");var o,p,q,r,s={},t=!1,u=function(){},v=b.createElement("img"),w=v.getAttribute,x=v.setAttribute,y=v.removeAttribute,z=b.documentElement,A={},B={algorithm:""},C="data-pfsrc",D=C+"set",E=navigator.userAgent,F=/rident/.test(E)||/ecko/.test(E)&&E.match(/rv\:(\d+)/)&&RegExp.$1>35,G="currentSrc",H=/\s+\+?\d+(e\d+)?w/,I=/(\([^)]+\))?\s*(.+)/,J=a.picturefillCFG,K="position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)",L="font-size:100%!important;",M=!0,N={},O={},P=a.devicePixelRatio,Q={px:1,"in":96},R=b.createElement("a"),S=!1,T=/^[ \t\n\r\u000c]+/,U=/^[, \t\n\r\u000c]+/,V=/^[^ \t\n\r\u000c]+/,W=/[,]+$/,X=/^\d+$/,Y=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,Z=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)},$=function(a){var b={};return function(c){return c in b||(b[c]=a(c)),b[c]}},_=function(){var a=/^([\d\.]+)(em|vw|px)$/,b=function(){for(var a=arguments,b=0,c=a[0];++b in a;)c=c.replace(a[b],a[++b]);return c},c=$(function(a){return"return "+b((a||"").toLowerCase(),/\band\b/g,"&&",/,/g,"||",/min-([a-z-\s]+):/g,"e.$1>=",/max-([a-z-\s]+):/g,"e.$1<=",/calc([^)]+)/g,"($1)",/(\d+[\.]*[\d]*)([a-z]+)/g,"($1 * e.$2)",/^(?!(e.[a-z]|[0-9\.&=|><\+\-\*\(\)\/])).*/gi,"")+";"});return function(b,d){var e;if(!(b in N))if(N[b]=!1,d&&(e=b.match(a)))N[b]=e[1]*Q[e[2]];else try{N[b]=new Function("e",c(b))(Q)}catch(f){}return N[b]}}(),aa=function(a,b){return a.w?(a.cWidth=s.calcListLength(b||"100vw"),a.res=a.w/a.cWidth):a.res=a.d,a},ba=function(a){if(t){var c,d,e,f=a||{};if(f.elements&&1===f.elements.nodeType&&("IMG"===f.elements.nodeName.toUpperCase()?f.elements=[f.elements]:(f.context=f.elements,f.elements=null)),c=f.elements||s.qsa(f.context||b,f.reevaluate||f.reselect?s.sel:s.selShort),e=c.length){for(s.setupRun(f),S=!0,d=0;e>d;d++)s.fillImg(c[d],f);s.teardownRun(f)}}};o=a.console&&console.warn?function(a){console.warn(a)}:u,G in v||(G="src"),A["image/jpeg"]=!0,A["image/gif"]=!0,A["image/png"]=!0,A["image/svg+xml"]=b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),s.ns=("pf"+(new Date).getTime()).substr(0,9),s.supSrcset="srcset"in v,s.supSizes="sizes"in v,s.supPicture=!!a.HTMLPictureElement,s.supSrcset&&s.supPicture&&!s.supSizes&&!function(a){v.srcset="data:,a",a.src="data:,a",s.supSrcset=v.complete===a.complete,s.supPicture=s.supSrcset&&s.supPicture}(b.createElement("img")),s.supSrcset&&!s.supSizes?!function(){var a="data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==",c="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",d=b.createElement("img"),e=function(){var a=d.width;2===a&&(s.supSizes=!0),q=s.supSrcset&&!s.supSizes,t=!0,setTimeout(ba)};d.onload=e,d.onerror=e,d.setAttribute("sizes","9px"),d.srcset=c+" 1w,"+a+" 9w",d.src=c}():t=!0,s.selShort="picture>img,img[srcset]",s.sel=s.selShort,s.cfg=B,s.DPR=P||1,s.u=Q,s.types=A,s.setSize=u,s.makeUrl=$(function(a){return R.href=a,R.href}),s.qsa=function(a,b){return"querySelector"in a?a.querySelectorAll(b):[]},s.matchesMedia=function(){return a.matchMedia&&(matchMedia("(min-width: 0.1em)")||{}).matches?s.matchesMedia=function(a){return!a||matchMedia(a).matches}:s.matchesMedia=s.mMQ,s.matchesMedia.apply(this,arguments)},s.mMQ=function(a){return a?_(a):!0},s.calcLength=function(a){var b=_(a,!0)||!1;return 0>b&&(b=!1),b},s.supportsType=function(a){return a?A[a]:!0},s.parseSize=$(function(a){var b=(a||"").match(I);return{media:b&&b[1],length:b&&b[2]}}),s.parseSet=function(a){return a.cands||(a.cands=m(a.srcset,a)),a.cands},s.getEmValue=function(){var a;if(!p&&(a=b.body)){var c=b.createElement("div"),d=z.style.cssText,e=a.style.cssText;c.style.cssText=K,z.style.cssText=L,a.style.cssText=L,a.appendChild(c),p=c.offsetWidth,a.removeChild(c),p=parseFloat(p,10),z.style.cssText=d,a.style.cssText=e}return p||16},s.calcListLength=function(a){if(!(a in O)||B.uT){var b=s.calcLength(n(a));O[a]=b?b:Q.width}return O[a]},s.setRes=function(a){var b;if(a){b=s.parseSet(a);for(var c=0,d=b.length;d>c;c++)aa(b[c],a.sizes)}return b},s.setRes.res=aa,s.applySetCandidate=function(a,b){if(a.length){var c,d,e,f,h,k,l,m,n,o=b[s.ns],p=s.DPR;if(k=o.curSrc||b[G],l=o.curCan||j(b,k,a[0].set),l&&l.set===a[0].set&&(n=F&&!b.complete&&l.res-.1>p,n||(l.cached=!0,l.res>=p&&(h=l))),!h)for(a.sort(i),f=a.length,h=a[f-1],d=0;f>d;d++)if(c=a[d],c.res>=p){e=d-1,h=a[e]&&(n||k!==s.makeUrl(c.url))&&g(a[e].res,c.res,p,a[e].cached)?a[e]:c;break}h&&(m=s.makeUrl(h.url),o.curSrc=m,o.curCan=h,m!==k&&s.setSrc(b,h),s.setSize(b))}},s.setSrc=function(a,b){var c;a.src=b.url,"image/svg+xml"===b.set.type&&(c=a.style.width,a.style.width=a.offsetWidth+1+"px",a.offsetWidth+1&&(a.style.width=c))},s.getSet=function(a){var b,c,d,e=!1,f=a[s.ns].sets;for(b=0;b<f.length&&!e;b++)if(c=f[b],c.srcset&&s.matchesMedia(c.media)&&(d=s.supportsType(c.type))){"pending"===d&&(c=d),e=c;break}return e},s.parseSets=function(a,b,d){var e,f,g,h,i=b&&"PICTURE"===b.nodeName.toUpperCase(),j=a[s.ns];(j.src===c||d.src)&&(j.src=w.call(a,"src"),j.src?x.call(a,C,j.src):y.call(a,C)),(j.srcset===c||d.srcset||!s.supSrcset||a.srcset)&&(e=w.call(a,"srcset"),j.srcset=e,h=!0),j.sets=[],i&&(j.pic=!0,l(b,j.sets)),j.srcset?(f={srcset:j.srcset,sizes:w.call(a,"sizes")},j.sets.push(f),g=(q||j.src)&&H.test(j.srcset||""),g||!j.src||k(j.src,f)||f.has1x||(f.srcset+=", "+j.src,f.cands.push({url:j.src,d:1,set:f}))):j.src&&j.sets.push({srcset:j.src,sizes:null}),j.curCan=null,j.curSrc=c,j.supported=!(i||f&&!s.supSrcset||g&&!s.supSizes),h&&s.supSrcset&&!j.supported&&(e?(x.call(a,D,e),a.srcset=""):y.call(a,D)),j.supported&&!j.srcset&&(!j.src&&a.src||a.src!==s.makeUrl(j.src))&&(null===j.src?a.removeAttribute("src"):a.src=j.src),j.parsed=!0},s.fillImg=function(a,b){var c,d=b.reselect||b.reevaluate;a[s.ns]||(a[s.ns]={}),c=a[s.ns],(d||c.evaled!==r)&&((!c.parsed||b.reevaluate)&&s.parseSets(a,a.parentNode,b),c.supported?c.evaled=r:h(a))},s.setupRun=function(){(!S||M||P!==a.devicePixelRatio)&&f()},s.supPicture?(ba=u,s.fillImg=u):!function(){var c,d=a.attachEvent?/d$|^c/:/d$|^c|^i/,e=function(){var a=b.readyState||"";f=setTimeout(e,"loading"===a?200:999),b.body&&(s.fillImgs(),c=c||d.test(a),c&&clearTimeout(f))},f=setTimeout(e,b.body?9:99),g=function(a,b){var c,d,e=function(){var f=new Date-d;b>f?c=setTimeout(e,b-f):(c=null,a())};return function(){d=new Date,c||(c=setTimeout(e,b))}},h=z.clientHeight,i=function(){M=Math.max(a.innerWidth||0,z.clientWidth)!==Q.width||z.clientHeight!==h,h=z.clientHeight,M&&s.fillImgs()};Z(a,"resize",g(i,99)),Z(b,"readystatechange",e)}(),s.picturefill=ba,s.fillImgs=ba,s.teardownRun=u,ba._=s,a.picturefillCFG={pf:s,push:function(a){var b=a.shift();"function"==typeof s[b]?s[b].apply(s,a):(B[b]=a[0],S&&s.fillImgs({reselect:!0}))}};for(;J&&J.length;)a.picturefillCFG.push(J.shift());a.picturefill=ba,"object"==typeof module&&"object"==typeof module.exports?module.exports=ba:"function"==typeof define&&define.amd&&define("picturefill",function(){return ba}),s.supPicture||(A["image/webp"]=e("image/webp","data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA=="))}(window,document);
1892

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.