PageSourceSearch

https://atthelakemagazine.com/wp-content/themes/simplemag/js/ti-main.js?ver=5.5

js atthelakemagazine.com collected 2026-09-26 06:19:03 UTC 158,659 bytes, 5,747 lines download raw bytes

1;(function(factory) {
2    'use strict';
3    if (typeof define === 'function' && define.amd) {
4        define(['jquery'], factory);
5    } else if (typeof exports !== 'undefined') {
6        module.exports = factory(require('jquery'));
7    } else {
8        factory(jQuery);
9    }
10
11}(function($) {
12    'use strict';
13    var Slick = window.Slick || {};
14
15    Slick = (function() {
16
17        var instanceUid = 0;
18
19        function Slick(element, settings) {
20
21            var _ = this, dataSettings;
22
23            _.defaults = {
24                accessibility: true,
25                adaptiveHeight: false,
26                appendArrows: $(element),
27                appendDots: $(element),
28                arrows: true,
29                asNavFor: null,
30                prevArrow: '<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',
31                nextArrow: '<button class="slick-next" aria-label="Next" type="button">Next</button>',
32                autoplay: false,
33                autoplaySpeed: 3000,
34                centerMode: false,
35                centerPadding: '50px',
36                cssEase: 'ease',
37                customPaging: function(slider, i) {
38                    return $('<button type="button" />').text(i + 1);
39                },
40                dots: false,
41                dotsClass: 'slick-dots',
42                draggable: true,
43                easing: 'linear',
44                edgeFriction: 0.35,
45                fade: false,
46                focusOnSelect: false,
47                focusOnChange: false,
48                infinite: true,
49                initialSlide: 0,
50                lazyLoad: 'ondemand',
51                mobileFirst: false,
52                pauseOnHover: true,
53                pauseOnFocus: true,
54                pauseOnDotsHover: false,
55                respondTo: 'window',
56                responsive: null,
57                rows: 1,
58                rtl: false,
59                slide: '',
60                slidesPerRow: 1,
61                slidesToShow: 1,
62                slidesToScroll: 1,
63                speed: 500,
64                swipe: true,
65                swipeToSlide: false,
66                touchMove: true,
67                touchThreshold: 5,
68                useCSS: true,
69                useTransform: true,
70                variableWidth: false,
71                vertical: false,
72                verticalSwiping: false,
73                waitForAnimate: true,
74                zIndex: 1000
75            };
76
77            _.initials = {
78                animating: false,
79                dragging: false,
80                autoPlayTimer: null,
81                currentDirection: 0,
82                currentLeft: null,
83                currentSlide: 0,
84                direction: 1,
85                $dots: null,
86                listWidth: null,
87                listHeight: null,
88                loadIndex: 0,
89                $nextArrow: null,
90                $prevArrow: null,
91                scrolling: false,
92                slideCount: null,
93                slideWidth: null,
94                $slideTrack: null,
95                $slides: null,
96                sliding: false,
97                slideOffset: 0,
98                swipeLeft: null,
99                swiping: false,
100                $list: null,
101                touchObject: {},
102                transformsEnabled: false,
103                unslicked: false
104            };
105
106            $.extend(_, _.initials);
107
108            _.activeBreakpoint = null;
109            _.animType = null;
110            _.animProp = null;
111            _.breakpoints = [];
112            _.breakpointSettings = [];
113            _.cssTransitions = false;
114            _.focussed = false;
115            _.interrupted = false;
116            _.hidden = 'hidden';
117            _.paused = true;
118            _.positionProp = null;
119            _.respondTo = null;
120            _.rowCount = 1;
121            _.shouldClick = true;
122            _.$slider = $(element);
123            _.$slidesCache = null;
124            _.transformType = null;
125            _.transitionType = null;
126            _.visibilityChange = 'visibilitychange';
127            _.windowWidth = 0;
128            _.windowTimer = null;
129
130            dataSettings = $(element).data('slick') || {};
131
132            _.options = $.extend({}, _.defaults, settings, dataSettings);
133
134            _.currentSlide = _.options.initialSlide;
135
136            _.originalSettings = _.options;
137
138            if (typeof document.mozHidden !== 'undefined') {
139                _.hidden = 'mozHidden';
140                _.visibilityChange = 'mozvisibilitychange';
141            } else if (typeof document.webkitHidden !== 'undefined') {
142                _.hidden = 'webkitHidden';
143                _.visibilityChange = 'webkitvisibilitychange';
144            }
145
146            _.autoPlay = $.proxy(_.autoPlay, _);
147            _.autoPlayClear = $.proxy(_.autoPlayClear, _);
148            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);
149            _.changeSlide = $.proxy(_.changeSlide, _);
150            _.clickHandler = $.proxy(_.clickHandler, _);
151            _.selectHandler = $.proxy(_.selectHandler, _);
152            _.setPosition = $.proxy(_.setPosition, _);
153            _.swipeHandler = $.proxy(_.swipeHandler, _);
154            _.dragHandler = $.proxy(_.dragHandler, _);
155            _.keyHandler = $.proxy(_.keyHandler, _);
156
157            _.instanceUid = instanceUid++;
vendor: 15,120 bytes, lines 158-655
158
159            _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/;
160
161
162            _.registerBreakpoints();
163            _.init(true);
164
165        }
166
167        return Slick;
168
169    }());
170
171    Slick.prototype.activateADA = function() {
172        var _ = this;
173
174        _.$slideTrack.find('.slick-active').attr({
175            'aria-hidden': 'false'
176        }).find('a, input, button, select').attr({
177            'tabindex': '0'
178        });
179
180    };
181
182    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {
183
184        var _ = this;
185
186        if (typeof(index) === 'boolean') {
187            addBefore = index;
188            index = null;
189        } else if (index < 0 || (index >= _.slideCount)) {
190            return false;
191        }
192
193        _.unload();
194
195        if (typeof(index) === 'number') {
196            if (index === 0 && _.$slides.length === 0) {
197                $(markup).appendTo(_.$slideTrack);
198            } else if (addBefore) {
199                $(markup).insertBefore(_.$slides.eq(index));
200            } else {
201                $(markup).insertAfter(_.$slides.eq(index));
202            }
203        } else {
204            if (addBefore === true) {
205                $(markup).prependTo(_.$slideTrack);
206            } else {
207                $(markup).appendTo(_.$slideTrack);
208            }
209        }
210
211        _.$slides = _.$slideTrack.children(this.options.slide);
212
213        _.$slideTrack.children(this.options.slide).detach();
214
215        _.$slideTrack.append(_.$slides);
216
217        _.$slides.each(function(index, element) {
218            $(element).attr('data-slick-index', index);
219        });
220
221        _.$slidesCache = _.$slides;
222
223        _.reinit();
224
225    };
226
227    Slick.prototype.animateHeight = function() {
228        var _ = this;
229        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
230            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
231            _.$list.animate({
232                height: targetHeight
233            }, _.options.speed);
234        }
235    };
236
237    Slick.prototype.animateSlide = function(targetLeft, callback) {
238
239        var animProps = {},
240            _ = this;
241
242        _.animateHeight();
243
244        if (_.options.rtl === true && _.options.vertical === false) {
245            targetLeft = -targetLeft;
246        }
247        if (_.transformsEnabled === false) {
248            if (_.options.vertical === false) {
249                _.$slideTrack.animate({
250                    left: targetLeft
251                }, _.options.speed, _.options.easing, callback);
252            } else {
253                _.$slideTrack.animate({
254                    top: targetLeft
255                }, _.options.speed, _.options.easing, callback);
256            }
257
258        } else {
259
260            if (_.cssTransitions === false) {
261                if (_.options.rtl === true) {
262                    _.currentLeft = -(_.currentLeft);
263                }
264                $({
265                    animStart: _.currentLeft
266                }).animate({
267                    animStart: targetLeft
268                }, {
269                    duration: _.options.speed,
270                    easing: _.options.easing,
271                    step: function(now) {
272                        now = Math.ceil(now);
273                        if (_.options.vertical === false) {
274                            animProps[_.animType] = 'translate(' +
275                                now + 'px, 0px)';
276                            _.$slideTrack.css(animProps);
277                        } else {
278                            animProps[_.animType] = 'translate(0px,' +
279                                now + 'px)';
280                            _.$slideTrack.css(animProps);
281                        }
282                    },
283                    complete: function() {
284                        if (callback) {
285                            callback.call();
286                        }
287                    }
288                });
289
290            } else {
291
292                _.applyTransition();
293                targetLeft = Math.ceil(targetLeft);
294
295                if (_.options.vertical === false) {
296                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';
297                } else {
298                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';
299                }
300                _.$slideTrack.css(animProps);
301
302                if (callback) {
303                    setTimeout(function() {
304
305                        _.disableTransition();
306
307                        callback.call();
308                    }, _.options.speed);
309                }
310
311            }
312
313        }
314
315    };
316
317    Slick.prototype.getNavTarget = function() {
318
319        var _ = this,
320            asNavFor = _.options.asNavFor;
321
322        if ( asNavFor && asNavFor !== null ) {
323            asNavFor = $(asNavFor).not(_.$slider);
324        }
325
326        return asNavFor;
327
328    };
329
330    Slick.prototype.asNavFor = function(index) {
331
332        var _ = this,
333            asNavFor = _.getNavTarget();
334
335        if ( asNavFor !== null && typeof asNavFor === 'object' ) {
336            asNavFor.each(function() {
337                var target = $(this).slick('getSlick');
338                if(!target.unslicked) {
339                    target.slideHandler(index, true);
340                }
341            });
342        }
343
344    };
345
346    Slick.prototype.applyTransition = function(slide) {
347
348        var _ = this,
349            transition = {};
350
351        if (_.options.fade === false) {
352            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;
353        } else {
354            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;
355        }
356
357        if (_.options.fade === false) {
358            _.$slideTrack.css(transition);
359        } else {
360            _.$slides.eq(slide).css(transition);
361        }
362
363    };
364
365    Slick.prototype.autoPlay = function() {
366
367        var _ = this;
368
369        _.autoPlayClear();
370
371        if ( _.slideCount > _.options.slidesToShow ) {
372            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );
373        }
374
375    };
376
377    Slick.prototype.autoPlayClear = function() {
378
379        var _ = this;
380
381        if (_.autoPlayTimer) {
382            clearInterval(_.autoPlayTimer);
383        }
384
385    };
386
387    Slick.prototype.autoPlayIterator = function() {
388
389        var _ = this,
390            slideTo = _.currentSlide + _.options.slidesToScroll;
391
392        if ( !_.paused && !_.interrupted && !_.focussed ) {
393
394            if ( _.options.infinite === false ) {
395
396                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {
397                    _.direction = 0;
398                }
399
400                else if ( _.direction === 0 ) {
401
402                    slideTo = _.currentSlide - _.options.slidesToScroll;
403
404                    if ( _.currentSlide - 1 === 0 ) {
405                        _.direction = 1;
406                    }
407
408                }
409
410            }
411
412            _.slideHandler( slideTo );
413
414        }
415
416    };
417
418    Slick.prototype.buildArrows = function() {
419
420        var _ = this;
421
422        if (_.options.arrows === true ) {
423
424            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');
425            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');
426
427            if( _.slideCount > _.options.slidesToShow ) {
428
429                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
430                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');
431
432                if (_.htmlExpr.test(_.options.prevArrow)) {
433                    _.$prevArrow.prependTo(_.options.appendArrows);
434                }
435
436                if (_.htmlExpr.test(_.options.nextArrow)) {
437                    _.$nextArrow.appendTo(_.options.appendArrows);
438                }
439
440                if (_.options.infinite !== true) {
441                    _.$prevArrow
442                        .addClass('slick-disabled')
443                        .attr('aria-disabled', 'true');
444                }
445
446            } else {
447
448                _.$prevArrow.add( _.$nextArrow )
449
450                    .addClass('slick-hidden')
451                    .attr({
452                        'aria-disabled': 'true',
453                        'tabindex': '-1'
454                    });
455
456            }
457
458        }
459
460    };
461
462    Slick.prototype.buildDots = function() {
463
464        var _ = this,
465            i, dot;
466
467        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
468
469            _.$slider.addClass('slick-dotted');
470
471            dot = $('<ul />').addClass(_.options.dotsClass);
472
473            for (i = 0; i <= _.getDotCount(); i += 1) {
474                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));
475            }
476
477            _.$dots = dot.appendTo(_.options.appendDots);
478
479            _.$dots.find('li').first().addClass('slick-active');
480
481        }
482
483    };
484
485    Slick.prototype.buildOut = function() {
486
487        var _ = this;
488
489        _.$slides =
490            _.$slider
491                .children( _.options.slide + ':not(.slick-cloned)')
492                .addClass('slick-slide');
493
494        _.slideCount = _.$slides.length;
495
496        _.$slides.each(function(index, element) {
497            $(element)
498                .attr('data-slick-index', index)
499                .data('originalStyling', $(element).attr('style') || '');
500        });
501
502        _.$slider.addClass('slick-slider');
503
504        _.$slideTrack = (_.slideCount === 0) ?
505            $('<div class="slick-track"/>').appendTo(_.$slider) :
506            _.$slides.wrapAll('<div class="slick-track"/>').parent();
507
508        _.$list = _.$slideTrack.wrap(
509            '<div class="slick-list"/>').parent();
510        _.$slideTrack.css('opacity', 0);
511
512        if (_.options.centerMode === true || _.options.swipeToSlide === true) {
513            _.options.slidesToScroll = 1;
514        }
515
516        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');
517
518        _.setupInfinite();
519
520        _.buildArrows();
521
522        _.buildDots();
523
524        _.updateDots();
525
526
527        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
528
529        if (_.options.draggable === true) {
530            _.$list.addClass('draggable');
531        }
532
533    };
534
535    Slick.prototype.buildRows = function() {
536
537        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;
538
539        newSlides = document.createDocumentFragment();
540        originalSlides = _.$slider.children();
541
542        if(_.options.rows > 0) {
543
544            slidesPerSection = _.options.slidesPerRow * _.options.rows;
545            numOfSlides = Math.ceil(
546                originalSlides.length / slidesPerSection
547            );
548
549            for(a = 0; a < numOfSlides; a++){
550                var slide = document.createElement('div');
551                for(b = 0; b < _.options.rows; b++) {
552                    var row = document.createElement('div');
553                    for(c = 0; c < _.options.slidesPerRow; c++) {
554                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));
555                        if (originalSlides.get(target)) {
556                            row.appendChild(originalSlides.get(target));
557                        }
558                    }
559                    slide.appendChild(row);
560                }
561                newSlides.appendChild(slide);
562            }
563
564            _.$slider.empty().append(newSlides);
565            _.$slider.children().children().children()
566                .css({
567                    'width':(100 / _.options.slidesPerRow) + '%',
568                    'display': 'inline-block'
569                });
570
571        }
572
573    };
574
575    Slick.prototype.checkResponsive = function(initial, forceUpdate) {
576
577        var _ = this,
578            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;
579        var sliderWidth = _.$slider.width();
580        var windowWidth = window.innerWidth || $(window).width();
581
582        if (_.respondTo === 'window') {
583            respondToWidth = windowWidth;
584        } else if (_.respondTo === 'slider') {
585            respondToWidth = sliderWidth;
586        } else if (_.respondTo === 'min') {
587            respondToWidth = Math.min(windowWidth, sliderWidth);
588        }
589
590        if ( _.options.responsive &&
591            _.options.responsive.length &&
592            _.options.responsive !== null) {
593
594            targetBreakpoint = null;
595
596            for (breakpoint in _.breakpoints) {
597                if (_.breakpoints.hasOwnProperty(breakpoint)) {
598                    if (_.originalSettings.mobileFirst === false) {
599                        if (respondToWidth < _.breakpoints[breakpoint]) {
600                            targetBreakpoint = _.breakpoints[breakpoint];
601                        }
602                    } else {
603                        if (respondToWidth > _.breakpoints[breakpoint]) {
604                            targetBreakpoint = _.breakpoints[breakpoint];
605                        }
606                    }
607                }
608            }
609
610            if (targetBreakpoint !== null) {
611                if (_.activeBreakpoint !== null) {
612                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {
613                        _.activeBreakpoint =
614                            targetBreakpoint;
615                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
616                            _.unslick(targetBreakpoint);
617                        } else {
618                            _.options = $.extend({}, _.originalSettings,
619                                _.breakpointSettings[
620                                    targetBreakpoint]);
621                            if (initial === true) {
622                                _.currentSlide = _.options.initialSlide;
623                            }
624                            _.refresh(initial);
625                        }
626                        triggerBreakpoint = targetBreakpoint;
627                    }
628                } else {
629                    _.activeBreakpoint = targetBreakpoint;
630                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {
631                        _.unslick(targetBreakpoint);
632                    } else {
633                        _.options = $.extend({}, _.originalSettings,
634                            _.breakpointSettings[
635                                targetBreakpoint]);
636                        if (initial === true) {
637                            _.currentSlide = _.options.initialSlide;
638                        }
639                        _.refresh(initial);
640                    }
641                    triggerBreakpoint = targetBreakpoint;
642                }
643            } else {
644                if (_.activeBreakpoint !== null) {
645                    _.activeBreakpoint = null;
646                    _.options = _.originalSettings;
647                    if (initial === true) {
648                        _.currentSlide = _.options.initialSlide;
649                    }
650                    _.refresh(initial);
651                    triggerBreakpoint = targetBreakpoint;
652                }
653            }
654
655            
655if( !initial && triggerBreakpoint !== false ) {
656                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);
657            }
658        }
659
660    };
661
662    Slick.prototype.changeSlide = function(event, dontAnimate) {
663
664        var _ = this,
665            $target = $(event.currentTarget),
666            indexOffset, slideOffset, unevenOffset;
667
668        if($target.is('a')) {
669            event.preventDefault();
670        }
vendor: 10,980 bytes, lines 671-1069
671
672        if(!$target.is('li')) {
673            $target = $target.closest('li');
674        }
675
676        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);
677        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;
678
679        switch (event.data.message) {
680
681            case 'previous':
682                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;
683                if (_.slideCount > _.options.slidesToShow) {
684                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);
685                }
686                break;
687
688            case 'next':
689                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;
690                if (_.slideCount > _.options.slidesToShow) {
691                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);
692                }
693                break;
694
695            case 'index':
696                var index = event.data.index === 0 ? 0 :
697                    event.data.index || $target.index() * _.options.slidesToScroll;
698
699                _.slideHandler(_.checkNavigable(index), false, dontAnimate);
700                $target.children().trigger('focus');
701                break;
702
703            default:
704                return;
705        }
706
707    };
708
709    Slick.prototype.checkNavigable = function(index) {
710
711        var _ = this,
712            navigables, prevNavigable;
713
714        navigables = _.getNavigableIndexes();
715        prevNavigable = 0;
716        if (index > navigables[navigables.length - 1]) {
717            index = navigables[navigables.length - 1];
718        } else {
719            for (var n in navigables) {
720                if (index < navigables[n]) {
721                    index = prevNavigable;
722                    break;
723                }
724                prevNavigable = navigables[n];
725            }
726        }
727
728        return index;
729    };
730
731    Slick.prototype.cleanUpEvents = function() {
732
733        var _ = this;
734
735        if (_.options.dots && _.$dots !== null) {
736
737            $('li', _.$dots)
738                .off('click.slick', _.changeSlide)
739                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))
740                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));
741
742            if (_.options.accessibility === true) {
743                _.$dots.off('keydown.slick', _.keyHandler);
744            }
745        }
746
747        _.$slider.off('focus.slick blur.slick');
748
749        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
750            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);
751            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);
752
753            if (_.options.accessibility === true) {
754                _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);
755                _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);
756            }
757        }
758
759        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);
760        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);
761        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);
762        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);
763
764        _.$list.off('click.slick', _.clickHandler);
765
766        $(document).off(_.visibilityChange, _.visibility);
767
768        _.cleanUpSlideEvents();
769
770        if (_.options.accessibility === true) {
771            _.$list.off('keydown.slick', _.keyHandler);
772        }
773
774        if (_.options.focusOnSelect === true) {
775            $(_.$slideTrack).children().off('click.slick', _.selectHandler);
776        }
777
778        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);
779
780        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);
781
782        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);
783
784        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);
785
786    };
787
788    Slick.prototype.cleanUpSlideEvents = function() {
789
790        var _ = this;
791
792        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));
793        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));
794
795    };
796
797    Slick.prototype.cleanUpRows = function() {
798
799        var _ = this, originalSlides;
800
801        if(_.options.rows > 0) {
802            originalSlides = _.$slides.children().children();
803            originalSlides.removeAttr('style');
804            _.$slider.empty().append(originalSlides);
805        }
806
807    };
808
809    Slick.prototype.clickHandler = function(event) {
810
811        var _ = this;
812
813        if (_.shouldClick === false) {
814            event.stopImmediatePropagation();
815            event.stopPropagation();
816            event.preventDefault();
817        }
818
819    };
820
821    Slick.prototype.destroy = function(refresh) {
822
823        var _ = this;
824
825        _.autoPlayClear();
826
827        _.touchObject = {};
828
829        _.cleanUpEvents();
830
831        $('.slick-cloned', _.$slider).detach();
832
833        if (_.$dots) {
834            _.$dots.remove();
835        }
836
837        if ( _.$prevArrow && _.$prevArrow.length ) {
838
839            _.$prevArrow
840                .removeClass('slick-disabled slick-arrow slick-hidden')
841                .removeAttr('aria-hidden aria-disabled tabindex')
842                .css('display','');
843
844            if ( _.htmlExpr.test( _.options.prevArrow )) {
845                _.$prevArrow.remove();
846            }
847        }
848
849        if ( _.$nextArrow && _.$nextArrow.length ) {
850
851            _.$nextArrow
852                .removeClass('slick-disabled slick-arrow slick-hidden')
853                .removeAttr('aria-hidden aria-disabled tabindex')
854                .css('display','');
855
856            if ( _.htmlExpr.test( _.options.nextArrow )) {
857                _.$nextArrow.remove();
858            }
859        }
860
861
862        if (_.$slides) {
863
864            _.$slides
865                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')
866                .removeAttr('aria-hidden')
867                .removeAttr('data-slick-index')
868                .each(function(){
869                    $(this).attr('style', $(this).data('originalStyling'));
870                });
871
872            _.$slideTrack.children(this.options.slide).detach();
873
874            _.$slideTrack.detach();
875
876            _.$list.detach();
877
878            _.$slider.append(_.$slides);
879        }
880
881        _.cleanUpRows();
882
883        _.$slider.removeClass('slick-slider');
884        _.$slider.removeClass('slick-initialized');
885        _.$slider.removeClass('slick-dotted');
886
887        _.unslicked = true;
888
889        if(!refresh) {
890            _.$slider.trigger('destroy', [_]);
891        }
892
893    };
894
895    Slick.prototype.disableTransition = function(slide) {
896
897        var _ = this,
898            transition = {};
899
900        transition[_.transitionType] = '';
901
902        if (_.options.fade === false) {
903            _.$slideTrack.css(transition);
904        } else {
905            _.$slides.eq(slide).css(transition);
906        }
907
908    };
909
910    Slick.prototype.fadeSlide = function(slideIndex, callback) {
911
912        var _ = this;
913
914        if (_.cssTransitions === false) {
915
916            _.$slides.eq(slideIndex).css({
917                zIndex: _.options.zIndex
918            });
919
920            _.$slides.eq(slideIndex).animate({
921                opacity: 1
922            }, _.options.speed, _.options.easing, callback);
923
924        } else {
925
926            _.applyTransition(slideIndex);
927
928            _.$slides.eq(slideIndex).css({
929                opacity: 1,
930                zIndex: _.options.zIndex
931            });
932
933            if (callback) {
934                setTimeout(function() {
935
936                    _.disableTransition(slideIndex);
937
938                    callback.call();
939                }, _.options.speed);
940            }
941
942        }
943
944    };
945
946    Slick.prototype.fadeSlideOut = function(slideIndex) {
947
948        var _ = this;
949
950        if (_.cssTransitions === false) {
951
952            _.$slides.eq(slideIndex).animate({
953                opacity: 0,
954                zIndex: _.options.zIndex - 2
955            }, _.options.speed, _.options.easing);
956
957        } else {
958
959            _.applyTransition(slideIndex);
960
961            _.$slides.eq(slideIndex).css({
962                opacity: 0,
963                zIndex: _.options.zIndex - 2
964            });
965
966        }
967
968    };
969
970    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {
971
972        var _ = this;
973
974        if (filter !== null) {
975
976            _.$slidesCache = _.$slides;
977
978            _.unload();
979
980            _.$slideTrack.children(this.options.slide).detach();
981
982            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);
983
984            _.reinit();
985
986        }
987
988    };
989
990    Slick.prototype.focusHandler = function() {
991
992        var _ = this;
993
994        _.$slider
995            .off('focus.slick blur.slick')
996            .on('focus.slick blur.slick', '*', function(event) {
997
998            event.stopImmediatePropagation();
999            var $sf = $(this);
1000
1001            setTimeout(function() {
1002
1003                if( _.options.pauseOnFocus ) {
1004                    _.focussed = $sf.is(':focus');
1005                    _.autoPlay();
1006                }
1007
1008            }, 0);
1009
1010        });
1011    };
1012
1013    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {
1014
1015        var _ = this;
1016        return _.currentSlide;
1017
1018    };
1019
1020    Slick.prototype.getDotCount = function() {
1021
1022        var _ = this;
1023
1024        var breakPoint = 0;
1025        var counter = 0;
1026        var pagerQty = 0;
1027
1028        if (_.options.infinite === true) {
1029            if (_.slideCount <= _.options.slidesToShow) {
1030                 ++pagerQty;
1031            } else {
1032                while (breakPoint < _.slideCount) {
1033                    ++pagerQty;
1034                    breakPoint = counter + _.options.slidesToScroll;
1035                    counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1036                }
1037            }
1038        } else if (_.options.centerMode === true) {
1039            pagerQty = _.slideCount;
1040        } else if(!_.options.asNavFor) {
1041            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);
1042        }else {
1043            while (breakPoint < _.slideCount) {
1044                ++pagerQty;
1045                breakPoint = counter + _.options.slidesToScroll;
1046                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1047            }
1048        }
1049
1050        return pagerQty - 1;
1051
1052    };
1053
1054    Slick.prototype.getLeft = function(slideIndex) {
1055
1056        var _ = this,
1057            targetLeft,
1058            verticalHeight,
1059            verticalOffset = 0,
1060            targetSlide,
1061            coef;
1062
1063        _.slideOffset = 0;
1064        verticalHeight = _.$slides.first().outerHeight(true);
1065
1066        if (_.options.infinite === true) {
1067            if (_.slideCount > _.options.slidesToShow) {
1068                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;
1069                coef = -1
1069
1070
1071                if (_.options.vertical === true && _.options.centerMode === true) {
1072                    if (_.options.slidesToShow === 2) {
1073                        coef = -1.5;
1074                    } else if (_.options.slidesToShow === 1) {
1075                        coef = -2
vendor: 7,744 bytes, lines 1075-1302
1075
1076                    }
1077                }
1078                verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;
1079            }
1080            if (_.slideCount % _.options.slidesToScroll !== 0) {
1081                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {
1082                    if (slideIndex > _.slideCount) {
1083                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;
1084                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;
1085                    } else {
1086                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;
1087                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;
1088                    }
1089                }
1090            }
1091        } else {
1092            if (slideIndex + _.options.slidesToShow > _.slideCount) {
1093                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;
1094                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;
1095            }
1096        }
1097
1098        if (_.slideCount <= _.options.slidesToShow) {
1099            _.slideOffset = 0;
1100            verticalOffset = 0;
1101        }
1102
1103        if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {
1104            _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);
1105        } else if (_.options.centerMode === true && _.options.infinite === true) {
1106            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;
1107        } else if (_.options.centerMode === true) {
1108            _.slideOffset = 0;
1109            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);
1110        }
1111
1112        if (_.options.vertical === false) {
1113            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;
1114        } else {
1115            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;
1116        }
1117
1118        if (_.options.variableWidth === true) {
1119
1120            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1121                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1122            } else {
1123                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);
1124            }
1125
1126            if (_.options.rtl === true) {
1127                if (targetSlide[0]) {
1128                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1129                } else {
1130                    targetLeft =  0;
1131                }
1132            } else {
1133                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1134            }
1135
1136            if (_.options.centerMode === true) {
1137                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {
1138                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);
1139                } else {
1140                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);
1141                }
1142
1143                if (_.options.rtl === true) {
1144                    if (targetSlide[0]) {
1145                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;
1146                    } else {
1147                        targetLeft =  0;
1148                    }
1149                } else {
1150                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;
1151                }
1152
1153                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;
1154            }
1155        }
1156
1157        return targetLeft;
1158
1159    };
1160
1161    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {
1162
1163        var _ = this;
1164
1165        return _.options[option];
1166
1167    };
1168
1169    Slick.prototype.getNavigableIndexes = function() {
1170
1171        var _ = this,
1172            breakPoint = 0,
1173            counter = 0,
1174            indexes = [],
1175            max;
1176
1177        if (_.options.infinite === false) {
1178            max = _.slideCount;
1179        } else {
1180            breakPoint = _.options.slidesToScroll * -1;
1181            counter = _.options.slidesToScroll * -1;
1182            max = _.slideCount * 2;
1183        }
1184
1185        while (breakPoint < max) {
1186            indexes.push(breakPoint);
1187            breakPoint = counter + _.options.slidesToScroll;
1188            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;
1189        }
1190
1191        return indexes;
1192
1193    };
1194
1195    Slick.prototype.getSlick = function() {
1196
1197        return this;
1198
1199    };
1200
1201    Slick.prototype.getSlideCount = function() {
1202
1203        var _ = this,
1204            slidesTraversed, swipedSlide, centerOffset;
1205
1206        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;
1207
1208        if (_.options.swipeToSlide === true) {
1209            _.$slideTrack.find('.slick-slide').each(function(index, slide) {
1210                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {
1211                    swipedSlide = slide;
1212                    return false;
1213                }
1214            });
1215
1216            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;
1217
1218            return slidesTraversed;
1219
1220        } else {
1221            return _.options.slidesToScroll;
1222        }
1223
1224    };
1225
1226    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {
1227
1228        var _ = this;
1229
1230        _.changeSlide({
1231            data: {
1232                message: 'index',
1233                index: parseInt(slide)
1234            }
1235        }, dontAnimate);
1236
1237    };
1238
1239    Slick.prototype.init = function(creation) {
1240
1241        var _ = this;
1242
1243        if (!$(_.$slider).hasClass('slick-initialized')) {
1244
1245            $(_.$slider).addClass('slick-initialized');
1246
1247            _.buildRows();
1248            _.buildOut();
1249            _.setProps();
1250            _.startLoad();
1251            _.loadSlider();
1252            _.initializeEvents();
1253            _.updateArrows();
1254            _.updateDots();
1255            _.checkResponsive(true);
1256            _.focusHandler();
1257
1258        }
1259
1260        if (creation) {
1261            _.$slider.trigger('init', [_]);
1262        }
1263
1264        if (_.options.accessibility === true) {
1265            _.initADA();
1266        }
1267
1268        if ( _.options.autoplay ) {
1269
1270            _.paused = false;
1271            _.autoPlay();
1272
1273        }
1274
1275    };
1276
1277    Slick.prototype.initADA = function() {
1278        var _ = this,
1279                numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),
1280                tabControlIndexes = _.getNavigableIndexes().filter(function(val) {
1281                    return (val >= 0) && (val < _.slideCount);
1282                });
1283
1284        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({
1285            'aria-hidden': 'true',
1286            'tabindex': '-1'
1287        }).find('a, input, button, select').attr({
1288            'tabindex': '-1'
1289        });
1290
1291        if (_.$dots !== null) {
1292            _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {
1293                var slideControlIndex = tabControlIndexes.indexOf(i);
1294
1295                $(this).attr({
1296                    'role': 'tabpanel',
1297                    'id': 'slick-slide' + _.instanceUid + i,
1298                    'tabindex': -1
1299                });
1300
1301                if (slideControlIndex !== -1) {
1302                   var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex
vendor: 23,162 bytes, lines 1302-2129
1302
1303                   if ($('#' + ariaButtonControl).length) {
1304                     $(this).attr({
1305                         'aria-describedby': ariaButtonControl
1306                     });
1307                   }
1308                }
1309            });
1310
1311            _.$dots.attr('role', 'tablist').find('li').each(function(i) {
1312                var mappedSlideIndex = tabControlIndexes[i];
1313
1314                $(this).attr({
1315                    'role': 'presentation'
1316                });
1317
1318                $(this).find('button').first().attr({
1319                    'role': 'tab',
1320                    'id': 'slick-slide-control' + _.instanceUid + i,
1321                    'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,
1322                    'aria-label': (i + 1) + ' of ' + numDotGroups,
1323                    'aria-selected': null,
1324                    'tabindex': '-1'
1325                });
1326
1327            }).eq(_.currentSlide).find('button').attr({
1328                'aria-selected': 'true',
1329                'tabindex': '0'
1330            }).end();
1331        }
1332
1333        for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {
1334          if (_.options.focusOnChange) {
1335            _.$slides.eq(i).attr({'tabindex': '0'});
1336          } else {
1337            _.$slides.eq(i).removeAttr('tabindex');
1338          }
1339        }
1340
1341        _.activateADA();
1342
1343    };
1344
1345    Slick.prototype.initArrowEvents = function() {
1346
1347        var _ = this;
1348
1349        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1350            _.$prevArrow
1351               .off('click.slick')
1352               .on('click.slick', {
1353                    message: 'previous'
1354               }, _.changeSlide);
1355            _.$nextArrow
1356               .off('click.slick')
1357               .on('click.slick', {
1358                    message: 'next'
1359               }, _.changeSlide);
1360
1361            if (_.options.accessibility === true) {
1362                _.$prevArrow.on('keydown.slick', _.keyHandler);
1363                _.$nextArrow.on('keydown.slick', _.keyHandler);
1364            }
1365        }
1366
1367    };
1368
1369    Slick.prototype.initDotEvents = function() {
1370
1371        var _ = this;
1372
1373        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1374            $('li', _.$dots).on('click.slick', {
1375                message: 'index'
1376            }, _.changeSlide);
1377
1378            if (_.options.accessibility === true) {
1379                _.$dots.on('keydown.slick', _.keyHandler);
1380            }
1381        }
1382
1383        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {
1384
1385            $('li', _.$dots)
1386                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))
1387                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1388
1389        }
1390
1391    };
1392
1393    Slick.prototype.initSlideEvents = function() {
1394
1395        var _ = this;
1396
1397        if ( _.options.pauseOnHover ) {
1398
1399            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));
1400            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));
1401
1402        }
1403
1404    };
1405
1406    Slick.prototype.initializeEvents = function() {
1407
1408        var _ = this;
1409
1410        _.initArrowEvents();
1411
1412        _.initDotEvents();
1413        _.initSlideEvents();
1414
1415        _.$list.on('touchstart.slick mousedown.slick', {
1416            action: 'start'
1417        }, _.swipeHandler);
1418        _.$list.on('touchmove.slick mousemove.slick', {
1419            action: 'move'
1420        }, _.swipeHandler);
1421        _.$list.on('touchend.slick mouseup.slick', {
1422            action: 'end'
1423        }, _.swipeHandler);
1424        _.$list.on('touchcancel.slick mouseleave.slick', {
1425            action: 'end'
1426        }, _.swipeHandler);
1427
1428        _.$list.on('click.slick', _.clickHandler);
1429
1430        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));
1431
1432        if (_.options.accessibility === true) {
1433            _.$list.on('keydown.slick', _.keyHandler);
1434        }
1435
1436        if (_.options.focusOnSelect === true) {
1437            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1438        }
1439
1440        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));
1441
1442        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));
1443
1444        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);
1445
1446        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);
1447        $(_.setPosition);
1448
1449    };
1450
1451    Slick.prototype.initUI = function() {
1452
1453        var _ = this;
1454
1455        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
1456
1457            _.$prevArrow.show();
1458            _.$nextArrow.show();
1459
1460        }
1461
1462        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
1463
1464            _.$dots.show();
1465
1466        }
1467
1468    };
1469
1470    Slick.prototype.keyHandler = function(event) {
1471
1472        var _ = this;
1473        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {
1474            if (event.keyCode === 37 && _.options.accessibility === true) {
1475                _.changeSlide({
1476                    data: {
1477                        message: _.options.rtl === true ? 'next' :  'previous'
1478                    }
1479                });
1480            } else if (event.keyCode === 39 && _.options.accessibility === true) {
1481                _.changeSlide({
1482                    data: {
1483                        message: _.options.rtl === true ? 'previous' : 'next'
1484                    }
1485                });
1486            }
1487        }
1488
1489    };
1490
1491    Slick.prototype.lazyLoad = function() {
1492
1493        var _ = this,
1494            loadRange, cloneRange, rangeStart, rangeEnd;
1495
1496        function loadImages(imagesScope) {
1497
1498            $('img[data-lazy]', imagesScope).each(function() {
1499
1500                var image = $(this),
1501                    imageSource = $(this).attr('data-lazy'),
1502                    imageSrcSet = $(this).attr('data-srcset'),
1503                    imageSizes  = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),
1504                    imageToLoad = document.createElement('img');
1505
1506                imageToLoad.onload = function() {
1507
1508                    image
1509                        .animate({ opacity: 0 }, 100, function() {
1510
1511                            if (imageSrcSet) {
1512                                image
1513                                    .attr('srcset', imageSrcSet );
1514
1515                                if (imageSizes) {
1516                                    image
1517                                        .attr('sizes', imageSizes );
1518                                }
1519                            }
1520
1521                            image
1522                                .attr('src', imageSource)
1523                                .animate({ opacity: 1 }, 200, function() {
1524                                    image
1525                                        .removeAttr('data-lazy data-srcset data-sizes')
1526                                        .removeClass('slick-loading');
1527                                });
1528                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);
1529                        });
1530
1531                };
1532
1533                imageToLoad.onerror = function() {
1534
1535                    image
1536                        .removeAttr( 'data-lazy' )
1537                        .removeClass( 'slick-loading' )
1538                        .addClass( 'slick-lazyload-error' );
1539
1540                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1541
1542                };
1543
1544                imageToLoad.src = imageSource;
1545
1546            });
1547
1548        }
1549
1550        if (_.options.centerMode === true) {
1551            if (_.options.infinite === true) {
1552                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);
1553                rangeEnd = rangeStart + _.options.slidesToShow + 2;
1554            } else {
1555                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));
1556                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;
1557            }
1558        } else {
1559            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;
1560            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);
1561            if (_.options.fade === true) {
1562                if (rangeStart > 0) rangeStart--;
1563                if (rangeEnd <= _.slideCount) rangeEnd++;
1564            }
1565        }
1566
1567        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);
1568
1569        if (_.options.lazyLoad === 'anticipated') {
1570            var prevSlide = rangeStart - 1,
1571                nextSlide = rangeEnd,
1572                $slides = _.$slider.find('.slick-slide');
1573
1574            for (var i = 0; i < _.options.slidesToScroll; i++) {
1575                if (prevSlide < 0) prevSlide = _.slideCount - 1;
1576                loadRange = loadRange.add($slides.eq(prevSlide));
1577                loadRange = loadRange.add($slides.eq(nextSlide));
1578                prevSlide--;
1579                nextSlide++;
1580            }
1581        }
1582
1583        loadImages(loadRange);
1584
1585        if (_.slideCount <= _.options.slidesToShow) {
1586            cloneRange = _.$slider.find('.slick-slide');
1587            loadImages(cloneRange);
1588        } else
1589        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {
1590            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);
1591            loadImages(cloneRange);
1592        } else if (_.currentSlide === 0) {
1593            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);
1594            loadImages(cloneRange);
1595        }
1596
1597    };
1598
1599    Slick.prototype.loadSlider = function() {
1600
1601        var _ = this;
1602
1603        _.setPosition();
1604
1605        _.$slideTrack.css({
1606            opacity: 1
1607        });
1608
1609        _.$slider.removeClass('slick-loading');
1610
1611        _.initUI();
1612
1613        if (_.options.lazyLoad === 'progressive') {
1614            _.progressiveLazyLoad();
1615        }
1616
1617    };
1618
1619    Slick.prototype.next = Slick.prototype.slickNext = function() {
1620
1621        var _ = this;
1622
1623        _.changeSlide({
1624            data: {
1625                message: 'next'
1626            }
1627        });
1628
1629    };
1630
1631    Slick.prototype.orientationChange = function() {
1632
1633        var _ = this;
1634
1635        _.checkResponsive();
1636        _.setPosition();
1637
1638    };
1639
1640    Slick.prototype.pause = Slick.prototype.slickPause = function() {
1641
1642        var _ = this;
1643
1644        _.autoPlayClear();
1645        _.paused = true;
1646
1647    };
1648
1649    Slick.prototype.play = Slick.prototype.slickPlay = function() {
1650
1651        var _ = this;
1652
1653        _.autoPlay();
1654        _.options.autoplay = true;
1655        _.paused = false;
1656        _.focussed = false;
1657        _.interrupted = false;
1658
1659    };
1660
1661    Slick.prototype.postSlide = function(index) {
1662
1663        var _ = this;
1664
1665        if( !_.unslicked ) {
1666
1667            _.$slider.trigger('afterChange', [_, index]);
1668
1669            _.animating = false;
1670
1671            if (_.slideCount > _.options.slidesToShow) {
1672                _.setPosition();
1673            }
1674
1675            _.swipeLeft = null;
1676
1677            if ( _.options.autoplay ) {
1678                _.autoPlay();
1679            }
1680
1681            if (_.options.accessibility === true) {
1682                _.initADA();
1683
1684                if (_.options.focusOnChange) {
1685                    var $currentSlide = $(_.$slides.get(_.currentSlide));
1686                    $currentSlide.attr('tabindex', 0).focus();
1687                }
1688            }
1689
1690        }
1691
1692    };
1693
1694    Slick.prototype.prev = Slick.prototype.slickPrev = function() {
1695
1696        var _ = this;
1697
1698        _.changeSlide({
1699            data: {
1700                message: 'previous'
1701            }
1702        });
1703
1704    };
1705
1706    Slick.prototype.preventDefault = function(event) {
1707
1708        event.preventDefault();
1709
1710    };
1711
1712    Slick.prototype.progressiveLazyLoad = function( tryCount ) {
1713
1714        tryCount = tryCount || 1;
1715
1716        var _ = this,
1717            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),
1718            image,
1719            imageSource,
1720            imageSrcSet,
1721            imageSizes,
1722            imageToLoad;
1723
1724        if ( $imgsToLoad.length ) {
1725
1726            image = $imgsToLoad.first();
1727            imageSource = image.attr('data-lazy');
1728            imageSrcSet = image.attr('data-srcset');
1729            imageSizes  = image.attr('data-sizes') || _.$slider.attr('data-sizes');
1730            imageToLoad = document.createElement('img');
1731
1732            imageToLoad.onload = function() {
1733
1734                if (imageSrcSet) {
1735                    image
1736                        .attr('srcset', imageSrcSet );
1737
1738                    if (imageSizes) {
1739                        image
1740                            .attr('sizes', imageSizes );
1741                    }
1742                }
1743
1744                image
1745                    .attr( 'src', imageSource )
1746                    .removeAttr('data-lazy data-srcset data-sizes')
1747                    .removeClass('slick-loading');
1748
1749                if ( _.options.adaptiveHeight === true ) {
1750                    _.setPosition();
1751                }
1752
1753                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);
1754                _.progressiveLazyLoad();
1755
1756            };
1757
1758            imageToLoad.onerror = function() {
1759
1760                if ( tryCount < 3 ) {
1761
1762                    setTimeout( function() {
1763                        _.progressiveLazyLoad( tryCount + 1 );
1764                    }, 500 );
1765
1766                } else {
1767
1768                    image
1769                        .removeAttr( 'data-lazy' )
1770                        .removeClass( 'slick-loading' )
1771                        .addClass( 'slick-lazyload-error' );
1772
1773                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);
1774
1775                    _.progressiveLazyLoad();
1776
1777                }
1778
1779            };
1780
1781            imageToLoad.src = imageSource;
1782
1783        } else {
1784
1785            _.$slider.trigger('allImagesLoaded', [ _ ]);
1786
1787        }
1788
1789    };
1790
1791    Slick.prototype.refresh = function( initializing ) {
1792
1793        var _ = this, currentSlide, lastVisibleIndex;
1794
1795        lastVisibleIndex = _.slideCount - _.options.slidesToShow;
1796
1797        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {
1798            _.currentSlide = lastVisibleIndex;
1799        }
1800
1801        if ( _.slideCount <= _.options.slidesToShow ) {
1802            _.currentSlide = 0;
1803
1804        }
1805
1806        currentSlide = _.currentSlide;
1807
1808        _.destroy(true);
1809
1810        $.extend(_, _.initials, { currentSlide: currentSlide });
1811
1812        _.init();
1813
1814        if( !initializing ) {
1815
1816            _.changeSlide({
1817                data: {
1818                    message: 'index',
1819                    index: currentSlide
1820                }
1821            }, false);
1822
1823        }
1824
1825    };
1826
1827    Slick.prototype.registerBreakpoints = function() {
1828
1829        var _ = this, breakpoint, currentBreakpoint, l,
1830            responsiveSettings = _.options.responsive || null;
1831
1832        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {
1833
1834            _.respondTo = _.options.respondTo || 'window';
1835
1836            for ( breakpoint in responsiveSettings ) {
1837
1838                l = _.breakpoints.length-1;
1839
1840                if (responsiveSettings.hasOwnProperty(breakpoint)) {
1841                    currentBreakpoint = responsiveSettings[breakpoint].breakpoint;
1842
1843                    while( l >= 0 ) {
1844                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {
1845                            _.breakpoints.splice(l,1);
1846                        }
1847                        l--;
1848                    }
1849
1850                    _.breakpoints.push(currentBreakpoint);
1851                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;
1852
1853                }
1854
1855            }
1856
1857            _.breakpoints.sort(function(a, b) {
1858                return ( _.options.mobileFirst ) ? a-b : b-a;
1859            });
1860
1861        }
1862
1863    };
1864
1865    Slick.prototype.reinit = function() {
1866
1867        var _ = this;
1868
1869        _.$slides =
1870            _.$slideTrack
1871                .children(_.options.slide)
1872                .addClass('slick-slide');
1873
1874        _.slideCount = _.$slides.length;
1875
1876        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {
1877            _.currentSlide = _.currentSlide - _.options.slidesToScroll;
1878        }
1879
1880        if (_.slideCount <= _.options.slidesToShow) {
1881            _.currentSlide = 0;
1882        }
1883
1884        _.registerBreakpoints();
1885
1886        _.setProps();
1887        _.setupInfinite();
1888        _.buildArrows();
1889        _.updateArrows();
1890        _.initArrowEvents();
1891        _.buildDots();
1892        _.updateDots();
1893        _.initDotEvents();
1894        _.cleanUpSlideEvents();
1895        _.initSlideEvents();
1896
1897        _.checkResponsive(false, true);
1898
1899        if (_.options.focusOnSelect === true) {
1900            $(_.$slideTrack).children().on('click.slick', _.selectHandler);
1901        }
1902
1903        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);
1904
1905        _.setPosition();
1906        _.focusHandler();
1907
1908        _.paused = !_.options.autoplay;
1909        _.autoPlay();
1910
1911        _.$slider.trigger('reInit', [_]);
1912
1913    };
1914
1915    Slick.prototype.resize = function() {
1916
1917        var _ = this;
1918
1919        if ($(window).width() !== _.windowWidth) {
1920            clearTimeout(_.windowDelay);
1921            _.windowDelay = window.setTimeout(function() {
1922                _.windowWidth = $(window).width();
1923                _.checkResponsive();
1924                if( !_.unslicked ) { _.setPosition(); }
1925            }, 50);
1926        }
1927    };
1928
1929    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {
1930
1931        var _ = this;
1932
1933        if (typeof(index) === 'boolean') {
1934            removeBefore = index;
1935            index = removeBefore === true ? 0 : _.slideCount - 1;
1936        } else {
1937            index = removeBefore === true ? --index : index;
1938        }
1939
1940        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {
1941            return false;
1942        }
1943
1944        _.unload();
1945
1946        if (removeAll === true) {
1947            _.$slideTrack.children().remove();
1948        } else {
1949            _.$slideTrack.children(this.options.slide).eq(index).remove();
1950        }
1951
1952        _.$slides = _.$slideTrack.children(this.options.slide);
1953
1954        _.$slideTrack.children(this.options.slide).detach();
1955
1956        _.$slideTrack.append(_.$slides);
1957
1958        _.$slidesCache = _.$slides;
1959
1960        _.reinit();
1961
1962    };
1963
1964    Slick.prototype.setCSS = function(position) {
1965
1966        var _ = this,
1967            positionProps = {},
1968            x, y;
1969
1970        if (_.options.rtl === true) {
1971            position = -position;
1972        }
1973        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';
1974        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';
1975
1976        positionProps[_.positionProp] = position;
1977
1978        if (_.transformsEnabled === false) {
1979            _.$slideTrack.css(positionProps);
1980        } else {
1981            positionProps = {};
1982            if (_.cssTransitions === false) {
1983                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';
1984                _.$slideTrack.css(positionProps);
1985            } else {
1986                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';
1987                _.$slideTrack.css(positionProps);
1988            }
1989        }
1990
1991    };
1992
1993    Slick.prototype.setDimensions = function() {
1994
1995        var _ = this;
1996
1997        if (_.options.vertical === false) {
1998            if (_.options.centerMode === true) {
1999                _.$list.css({
2000                    padding: ('0px ' + _.options.centerPadding)
2001                });
2002            }
2003        } else {
2004            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);
2005            if (_.options.centerMode === true) {
2006                _.$list.css({
2007                    padding: (_.options.centerPadding + ' 0px')
2008                });
2009            }
2010        }
2011
2012        _.listWidth = _.$list.width();
2013        _.listHeight = _.$list.height();
2014
2015
2016        if (_.options.vertical === false && _.options.variableWidth === false) {
2017            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);
2018            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));
2019
2020        } else if (_.options.variableWidth === true) {
2021            _.$slideTrack.width(5000 * _.slideCount);
2022        } else {
2023            _.slideWidth = Math.ceil(_.listWidth);
2024            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));
2025        }
2026
2027        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();
2028        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);
2029
2030    };
2031
2032    Slick.prototype.setFade = function() {
2033
2034        var _ = this,
2035            targetLeft;
2036
2037        _.$slides.each(function(index, element) {
2038            targetLeft = (_.slideWidth * index) * -1;
2039            if (_.options.rtl === true) {
2040                $(element).css({
2041                    position: 'relative',
2042                    right: targetLeft,
2043                    top: 0,
2044                    zIndex: _.options.zIndex - 2,
2045                    opacity: 0
2046                });
2047            } else {
2048                $(element).css({
2049                    position: 'relative',
2050                    left: targetLeft,
2051                    top: 0,
2052                    zIndex: _.options.zIndex - 2,
2053                    opacity: 0
2054                });
2055            }
2056        });
2057
2058        _.$slides.eq(_.currentSlide).css({
2059            zIndex: _.options.zIndex - 1,
2060            opacity: 1
2061        });
2062
2063    };
2064
2065    Slick.prototype.setHeight = function() {
2066
2067        var _ = this;
2068
2069        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {
2070            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);
2071            _.$list.css('height', targetHeight);
2072        }
2073
2074    };
2075
2076    Slick.prototype.setOption =
2077    Slick.prototype.slickSetOption = function() {
2078
2079        var _ = this, l, item, option, value, refresh = false, type;
2080
2081        if( $.type( arguments[0] ) === 'object' ) {
2082
2083            option =  arguments[0];
2084            refresh = arguments[1];
2085            type = 'multiple';
2086
2087        } else if ( $.type( arguments[0] ) === 'string' ) {
2088
2089            option =  arguments[0];
2090            value = arguments[1];
2091            refresh = arguments[2];
2092
2093            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {
2094
2095                type = 'responsive';
2096
2097            } else if ( typeof arguments[1] !== 'undefined' ) {
2098
2099                type = 'single';
2100
2101            }
2102
2103        }
2104
2105        if ( type === 'single' ) {
2106
2107            _.options[option] = value;
2108
2109
2110        } else if ( type === 'multiple' ) {
2111
2112            $.each( option , function( opt, val ) {
2113
2114                _.options[opt] = val;
2115
2116            });
2117
2118
2119        } else if ( type === 'responsive' ) {
2120
2121            for ( item in value ) {
2122
2123                if( $.type( _.options.responsive ) !== 'array' ) {
2124
2125                    _.options.responsive = [ value[item] ];
2126
2127                } else {
2128
2129                    l = _.options.responsive.length-1;
vendor: 15,436 bytes, lines 2130-2653
2130
2131                    while( l >= 0 ) {
2132
2133                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {
2134
2135                            _.options.responsive.splice(l,1);
2136
2137                        }
2138
2139                        l--;
2140
2141                    }
2142
2143                    _.options.responsive.push( value[item] );
2144
2145                }
2146
2147            }
2148
2149        }
2150
2151        if ( refresh ) {
2152
2153            _.unload();
2154            _.reinit();
2155
2156        }
2157
2158    };
2159
2160    Slick.prototype.setPosition = function() {
2161
2162        var _ = this;
2163
2164        _.setDimensions();
2165
2166        _.setHeight();
2167
2168        if (_.options.fade === false) {
2169            _.setCSS(_.getLeft(_.currentSlide));
2170        } else {
2171            _.setFade();
2172        }
2173
2174        _.$slider.trigger('setPosition', [_]);
2175
2176    };
2177
2178    Slick.prototype.setProps = function() {
2179
2180        var _ = this,
2181            bodyStyle = document.body.style;
2182
2183        _.positionProp = _.options.vertical === true ? 'top' : 'left';
2184
2185        if (_.positionProp === 'top') {
2186            _.$slider.addClass('slick-vertical');
2187        } else {
2188            _.$slider.removeClass('slick-vertical');
2189        }
2190
2191        if (bodyStyle.WebkitTransition !== undefined ||
2192            bodyStyle.MozTransition !== undefined ||
2193            bodyStyle.msTransition !== undefined) {
2194            if (_.options.useCSS === true) {
2195                _.cssTransitions = true;
2196            }
2197        }
2198
2199        if ( _.options.fade ) {
2200            if ( typeof _.options.zIndex === 'number' ) {
2201                if( _.options.zIndex < 3 ) {
2202                    _.options.zIndex = 3;
2203                }
2204            } else {
2205                _.options.zIndex = _.defaults.zIndex;
2206            }
2207        }
2208
2209        if (bodyStyle.OTransform !== undefined) {
2210            _.animType = 'OTransform';
2211            _.transformType = '-o-transform';
2212            _.transitionType = 'OTransition';
2213            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2214        }
2215        if (bodyStyle.MozTransform !== undefined) {
2216            _.animType = 'MozTransform';
2217            _.transformType = '-moz-transform';
2218            _.transitionType = 'MozTransition';
2219            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;
2220        }
2221        if (bodyStyle.webkitTransform !== undefined) {
2222            _.animType = 'webkitTransform';
2223            _.transformType = '-webkit-transform';
2224            _.transitionType = 'webkitTransition';
2225            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
2226        }
2227        if (bodyStyle.msTransform !== undefined) {
2228            _.animType = 'msTransform';
2229            _.transformType = '-ms-transform';
2230            _.transitionType = 'msTransition';
2231            if (bodyStyle.msTransform === undefined) _.animType = false;
2232        }
2233        if (bodyStyle.transform !== undefined && _.animType !== false) {
2234            _.animType = 'transform';
2235            _.transformType = 'transform';
2236            _.transitionType = 'transition';
2237        }
2238        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);
2239    };
2240
2241
2242    Slick.prototype.setSlideClasses = function(index) {
2243
2244        var _ = this,
2245            centerOffset, allSlides, indexOffset, remainder;
2246
2247        allSlides = _.$slider
2248            .find('.slick-slide')
2249            .removeClass('slick-active slick-center slick-current')
2250            .attr('aria-hidden', 'true');
2251
2252        _.$slides
2253            .eq(index)
2254            .addClass('slick-current');
2255
2256        if (_.options.centerMode === true) {
2257
2258            var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;
2259
2260            centerOffset = Math.floor(_.options.slidesToShow / 2);
2261
2262            if (_.options.infinite === true) {
2263
2264                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {
2265                    _.$slides
2266                        .slice(index - centerOffset + evenCoef, index + centerOffset + 1)
2267                        .addClass('slick-active')
2268                        .attr('aria-hidden', 'false');
2269
2270                } else {
2271
2272                    indexOffset = _.options.slidesToShow + index;
2273                    allSlides
2274                        .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)
2275                        .addClass('slick-active')
2276                        .attr('aria-hidden', 'false');
2277
2278                }
2279
2280                if (index === 0) {
2281
2282                    allSlides
2283                        .eq(allSlides.length - 1 - _.options.slidesToShow)
2284                        .addClass('slick-center');
2285
2286                } else if (index === _.slideCount - 1) {
2287
2288                    allSlides
2289                        .eq(_.options.slidesToShow)
2290                        .addClass('slick-center');
2291
2292                }
2293
2294            }
2295
2296            _.$slides
2297                .eq(index)
2298                .addClass('slick-center');
2299
2300        } else {
2301
2302            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {
2303
2304                _.$slides
2305                    .slice(index, index + _.options.slidesToShow)
2306                    .addClass('slick-active')
2307                    .attr('aria-hidden', 'false');
2308
2309            } else if (allSlides.length <= _.options.slidesToShow) {
2310
2311                allSlides
2312                    .addClass('slick-active')
2313                    .attr('aria-hidden', 'false');
2314
2315            } else {
2316
2317                remainder = _.slideCount % _.options.slidesToShow;
2318                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;
2319
2320                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {
2321
2322                    allSlides
2323                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)
2324                        .addClass('slick-active')
2325                        .attr('aria-hidden', 'false');
2326
2327                } else {
2328
2329                    allSlides
2330                        .slice(indexOffset, indexOffset + _.options.slidesToShow)
2331                        .addClass('slick-active')
2332                        .attr('aria-hidden', 'false');
2333
2334                }
2335
2336            }
2337
2338        }
2339
2340        if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {
2341            _.lazyLoad();
2342        }
2343    };
2344
2345    Slick.prototype.setupInfinite = function() {
2346
2347        var _ = this,
2348            i, slideIndex, infiniteCount;
2349
2350        if (_.options.fade === true) {
2351            _.options.centerMode = false;
2352        }
2353
2354        if (_.options.infinite === true && _.options.fade === false) {
2355
2356            slideIndex = null;
2357
2358            if (_.slideCount > _.options.slidesToShow) {
2359
2360                if (_.options.centerMode === true) {
2361                    infiniteCount = _.options.slidesToShow + 1;
2362                } else {
2363                    infiniteCount = _.options.slidesToShow;
2364                }
2365
2366                for (i = _.slideCount; i > (_.slideCount -
2367                        infiniteCount); i -= 1) {
2368                    slideIndex = i - 1;
2369                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
2370                        .attr('data-slick-index', slideIndex - _.slideCount)
2371                        .prependTo(_.$slideTrack).addClass('slick-cloned');
2372                }
2373                for (i = 0; i < infiniteCount  + _.slideCount; i += 1) {
2374                    slideIndex = i;
2375                    $(_.$slides[slideIndex]).clone(true).attr('id', '')
2376                        .attr('data-slick-index', slideIndex + _.slideCount)
2377                        .appendTo(_.$slideTrack).addClass('slick-cloned');
2378                }
2379                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {
2380                    $(this).attr('id', '');
2381                });
2382
2383            }
2384
2385        }
2386
2387    };
2388
2389    Slick.prototype.interrupt = function( toggle ) {
2390
2391        var _ = this;
2392
2393        if( !toggle ) {
2394            _.autoPlay();
2395        }
2396        _.interrupted = toggle;
2397
2398    };
2399
2400    Slick.prototype.selectHandler = function(event) {
2401
2402        var _ = this;
2403
2404        var targetElement =
2405            $(event.target).is('.slick-slide') ?
2406                $(event.target) :
2407                $(event.target).parents('.slick-slide');
2408
2409        var index = parseInt(targetElement.attr('data-slick-index'));
2410
2411        if (!index) index = 0;
2412
2413        if (_.slideCount <= _.options.slidesToShow) {
2414
2415            _.slideHandler(index, false, true);
2416            return;
2417
2418        }
2419
2420        _.slideHandler(index);
2421
2422    };
2423
2424    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {
2425
2426        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,
2427            _ = this, navTarget;
2428
2429        sync = sync || false;
2430
2431        if (_.animating === true && _.options.waitForAnimate === true) {
2432            return;
2433        }
2434
2435        if (_.options.fade === true && _.currentSlide === index) {
2436            return;
2437        }
2438
2439        if (sync === false) {
2440            _.asNavFor(index);
2441        }
2442
2443        targetSlide = index;
2444        targetLeft = _.getLeft(targetSlide);
2445        slideLeft = _.getLeft(_.currentSlide);
2446
2447        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;
2448
2449        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {
2450            if (_.options.fade === false) {
2451                targetSlide = _.currentSlide;
2452                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2453                    _.animateSlide(slideLeft, function() {
2454                        _.postSlide(targetSlide);
2455                    });
2456                } else {
2457                    _.postSlide(targetSlide);
2458                }
2459            }
2460            return;
2461        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {
2462            if (_.options.fade === false) {
2463                targetSlide = _.currentSlide;
2464                if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2465                    _.animateSlide(slideLeft, function() {
2466                        _.postSlide(targetSlide);
2467                    });
2468                } else {
2469                    _.postSlide(targetSlide);
2470                }
2471            }
2472            return;
2473        }
2474
2475        if ( _.options.autoplay ) {
2476            clearInterval(_.autoPlayTimer);
2477        }
2478
2479        if (targetSlide < 0) {
2480            if (_.slideCount % _.options.slidesToScroll !== 0) {
2481                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);
2482            } else {
2483                animSlide = _.slideCount + targetSlide;
2484            }
2485        } else if (targetSlide >= _.slideCount) {
2486            if (_.slideCount % _.options.slidesToScroll !== 0) {
2487                animSlide = 0;
2488            } else {
2489                animSlide = targetSlide - _.slideCount;
2490            }
2491        } else {
2492            animSlide = targetSlide;
2493        }
2494
2495        _.animating = true;
2496
2497        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);
2498
2499        oldSlide = _.currentSlide;
2500        _.currentSlide = animSlide;
2501
2502        _.setSlideClasses(_.currentSlide);
2503
2504        if ( _.options.asNavFor ) {
2505
2506            navTarget = _.getNavTarget();
2507            navTarget = navTarget.slick('getSlick');
2508
2509            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {
2510                navTarget.setSlideClasses(_.currentSlide);
2511            }
2512
2513        }
2514
2515        _.updateDots();
2516        _.updateArrows();
2517
2518        if (_.options.fade === true) {
2519            if (dontAnimate !== true) {
2520
2521                _.fadeSlideOut(oldSlide);
2522
2523                _.fadeSlide(animSlide, function() {
2524                    _.postSlide(animSlide);
2525                });
2526
2527            } else {
2528                _.postSlide(animSlide);
2529            }
2530            _.animateHeight();
2531            return;
2532        }
2533
2534        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {
2535            _.animateSlide(targetLeft, function() {
2536                _.postSlide(animSlide);
2537            });
2538        } else {
2539            _.postSlide(animSlide);
2540        }
2541
2542    };
2543
2544    Slick.prototype.startLoad = function() {
2545
2546        var _ = this;
2547
2548        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {
2549
2550            _.$prevArrow.hide();
2551            _.$nextArrow.hide();
2552
2553        }
2554
2555        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {
2556
2557            _.$dots.hide();
2558
2559        }
2560
2561        _.$slider.addClass('slick-loading');
2562
2563    };
2564
2565    Slick.prototype.swipeDirection = function() {
2566
2567        var xDist, yDist, r, swipeAngle, _ = this;
2568
2569        xDist = _.touchObject.startX - _.touchObject.curX;
2570        yDist = _.touchObject.startY - _.touchObject.curY;
2571        r = Math.atan2(yDist, xDist);
2572
2573        swipeAngle = Math.round(r * 180 / Math.PI);
2574        if (swipeAngle < 0) {
2575            swipeAngle = 360 - Math.abs(swipeAngle);
2576        }
2577
2578        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {
2579            return (_.options.rtl === false ? 'left' : 'right');
2580        }
2581        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {
2582            return (_.options.rtl === false ? 'left' : 'right');
2583        }
2584        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {
2585            return (_.options.rtl === false ? 'right' : 'left');
2586        }
2587        if (_.options.verticalSwiping === true) {
2588            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {
2589                return 'down';
2590            } else {
2591                return 'up';
2592            }
2593        }
2594
2595        return 'vertical';
2596
2597    };
2598
2599    Slick.prototype.swipeEnd = function(event) {
2600
2601        var _ = this,
2602            slideCount,
2603            direction;
2604
2605        _.dragging = false;
2606        _.swiping = false;
2607
2608        if (_.scrolling) {
2609            _.scrolling = false;
2610            return false;
2611        }
2612
2613        _.interrupted = false;
2614        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;
2615
2616        if ( _.touchObject.curX === undefined ) {
2617            return false;
2618        }
2619
2620        if ( _.touchObject.edgeHit === true ) {
2621            _.$slider.trigger('edge', [_, _.swipeDirection() ]);
2622        }
2623
2624        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {
2625
2626            direction = _.swipeDirection();
2627
2628            switch ( direction ) {
2629
2630                case 'left':
2631                case 'down':
2632
2633                    slideCount =
2634                        _.options.swipeToSlide ?
2635                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :
2636                            _.currentSlide + _.getSlideCount();
2637
2638                    _.currentDirection = 0;
2639
2640                    break;
2641
2642                case 'right':
2643                case 'up':
2644
2645                    slideCount =
2646                        _.options.swipeToSlide ?
2647                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :
2648                            _.currentSlide - _.getSlideCount();
2649
2650                    _.currentDirection = 1;
2651
2652                    break;
2653
vendor: 3,992 bytes, lines 2654-2785
2654                default:
2655
2656
2657            }
2658
2659            if( direction != 'vertical' ) {
2660
2661                _.slideHandler( slideCount );
2662                _.touchObject = {};
2663                _.$slider.trigger('swipe', [_, direction ]);
2664
2665            }
2666
2667        } else {
2668
2669            if ( _.touchObject.startX !== _.touchObject.curX ) {
2670
2671                _.slideHandler( _.currentSlide );
2672                _.touchObject = {};
2673
2674            }
2675
2676        }
2677
2678    };
2679
2680    Slick.prototype.swipeHandler = function(event) {
2681
2682        var _ = this;
2683
2684        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {
2685            return;
2686        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {
2687            return;
2688        }
2689
2690        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?
2691            event.originalEvent.touches.length : 1;
2692
2693        _.touchObject.minSwipe = _.listWidth / _.options
2694            .touchThreshold;
2695
2696        if (_.options.verticalSwiping === true) {
2697            _.touchObject.minSwipe = _.listHeight / _.options
2698                .touchThreshold;
2699        }
2700
2701        switch (event.data.action) {
2702
2703            case 'start':
2704                _.swipeStart(event);
2705                break;
2706
2707            case 'move':
2708                _.swipeMove(event);
2709                break;
2710
2711            case 'end':
2712                _.swipeEnd(event);
2713                break;
2714
2715        }
2716
2717    };
2718
2719    Slick.prototype.swipeMove = function(event) {
2720
2721        var _ = this,
2722            edgeWasHit = false,
2723            curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;
2724
2725        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;
2726
2727        if (!_.dragging || _.scrolling || touches && touches.length !== 1) {
2728            return false;
2729        }
2730
2731        curLeft = _.getLeft(_.currentSlide);
2732
2733        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;
2734        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;
2735
2736        _.touchObject.swipeLength = Math.round(Math.sqrt(
2737            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));
2738
2739        verticalSwipeLength = Math.round(Math.sqrt(
2740            Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));
2741
2742        if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {
2743            _.scrolling = true;
2744            return false;
2745        }
2746
2747        if (_.options.verticalSwiping === true) {
2748            _.touchObject.swipeLength = verticalSwipeLength;
2749        }
2750
2751        swipeDirection = _.swipeDirection();
2752
2753        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {
2754            _.swiping = true;
2755            event.preventDefault();
2756        }
2757
2758        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);
2759        if (_.options.verticalSwiping === true) {
2760            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;
2761        }
2762
2763
2764        swipeLength = _.touchObject.swipeLength;
2765
2766        _.touchObject.edgeHit = false;
2767
2768        if (_.options.infinite === false) {
2769            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {
2770                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;
2771                _.touchObject.edgeHit = true;
2772            }
2773        }
2774
2775        if (_.options.vertical === false) {
2776            _.swipeLeft = curLeft + swipeLength * positionOffset;
2777        } else {
2778            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;
2779        }
2780        if (_.options.verticalSwiping === true) {
2781            _.swipeLeft = curLeft + swipeLength * positionOffset;
2782        }
2783
2784        if (_.options.fade === true || _.options.touchMove === false) {
2785            return false;
2786        }
2787
2788        if (_.animating === true) {
2789            _.swipeLeft = null;
2790            return false;
2791        }
2792
2793        _.setCSS(_.swipeLeft);
2794
2795    };
2796
2797    Slick.prototype.swipeStart = function(event) {
2798
2799        var _ = this,
2800            touches;
2801
2802        _.interrupted = true;
2803
2804        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {
2805            _.touchObject = {};
2806            return false;
2807        }
2808
2809        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {
2810            touches = event.originalEvent.touches[0];
2811        }
2812
2813        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;
2814        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;
2815
2816        _.dragging = true;
2817
2818    };
2819
2820    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {
2821
2822        var _ = this;
2823
2824        if (_.$slidesCache !== null) {
2825
2826            _.unload();
2827
2828            _.$slideTrack.children(this.options.slide).detach();
2829
2830            _.$slidesCache.appendTo(_.$slideTrack);
2831
2832            _.reinit();
2833
2834        }
2835
2836    };
2837
2838    Slick.prototype.unload = function() {
2839
2840        var _ = this;
2841
2842        $('.slick-cloned', _.$slider).remove();
2843
2844        if (_.$dots) {
2845            _.$dots.remove();
2846        }
2847
2848        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {
2849            _.$prevArrow.remove();
2850        }
2851
2852        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {
2853            _.$nextArrow.remove();
2854        }
2855
2856        _.$slides
2857            .removeClass('slick-slide slick-active slick-visible slick-current')
2858            .attr('aria-hidden', 'true')
2859            .css('width', '');
2860
2861    };
2862
2863    Slick.prototype.unslick = function(fromBreakpoint) {
2864
2865        var _ = this;
2866        _.$slider.trigger('unslick', [_, fromBreakpoint]);
2867        _.destroy();
2868
2869    };
2870
2871    Slick.prototype.updateArrows = function() {
2872
2873        var _ = this,
2874            centerOffset;
2875
2876        centerOffset = Math.floor(_.options.slidesToShow / 2);
2877
2878        if ( _.options.arrows === true &&
2879            _.slideCount > _.options.slidesToShow &&
2880            !_.options.infinite ) {
2881
2882            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2883            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2884
2885            if (_.currentSlide === 0) {
2886
2887                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2888                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2889
2890            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
2891
2892                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2893                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2894
2895            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
2896
2897                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');
2898                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');
2899
2900            }
2901
2902        }
2903
2904    };
2905
2906    Slick.prototype.updateDots = function() {
2907
2908        var _ = this;
2909
2910        if (_.$dots !== null) {
2911
2912            _.$dots
2913                .find('li')
2914                    .removeClass('slick-active')
2915                    .end();
2916
2917            _.$dots
2918                .find('li')
2919                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))
2920                .addClass('slick-active');
2921
2922        }
2923
2924    };
2925
2926    Slick.prototype.visibility = function() {
2927
2928        var _ = this;
2929
2930        if ( _.options.autoplay ) {
2931
2932            if ( document[_.hidden] ) {
2933
2934                _.interrupted = true;
2935
2936            } else {
2937
2938                _.interrupted = false;
2939
2940            }
2941
2942        }
2943
2944    };
2945
2946    $.fn.slick = function() {
2947        var _ = this,
2948            opt = arguments[0],
2949            args = Array.prototype.slice.call(arguments, 1),
2950            l = _.length,
2951            i,
2952            ret;
2953        for (i = 0; i < l; i++) {
2954            if (typeof opt == 'object' || typeof opt == 'undefined')
2955                _[i].slick = new Slick(_[i], opt);
2956            else
2957                ret = _[i].slick[opt].apply(_[i].slick, args);
2958            if (typeof ret != 'undefined') return ret;
2959        }
2960        return _;
2961    };
2962
2963}));
2964
2965/*!
2966 * Masonry PACKAGED v4.2.2
2967 * Cascading grid layout library
2968 * https://masonry.desandro.com
2969 * MIT License
2970 * by David DeSandro
2971 */
2972
2973( function( window, factory ) {
2974  if ( typeof define == 'function' && define.amd ) {
2975    define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) {
2976      return factory( window, jQuery );
2977    });
2978  } else if ( typeof module == 'object' && module.exports ) {
2979    module.exports = factory(
2980      window,
2981      require('jquery')
2982    );
2983  } else {
2984    window.jQueryBridget = factory(
2985      window,
2986      window.jQuery
2987    );
2988  }
2989
2990}( window, function factory( window, jQuery ) {
2991'use strict';
2992
2993var arraySlice = Array.prototype.slice;
2994
2995var console = window.console;
2996var logError = typeof console == 'undefined' ? function() {} :
2997  function( message ) {
2998    console.error( message );
2999  };
3000
3001function jQueryBridget( namespace, PluginClass, $ ) {
3002  $ = $ || jQuery || window.jQuery;
3003  if ( !$ ) {
3004    return;
3005  }
3006
3007  if ( !PluginClass.prototype.option ) {
3008    PluginClass.prototype.option = function( opts ) {
3009      if ( !$.isPlainObject( opts ) ){
3010        return;
3011      }
3012      this.options = $.extend( true, this.options, opts );
3013    };
3014  }
3015
3016  $.fn[ namespace ] = function( arg0  ) {
3017    if ( typeof arg0 == 'string' ) {
3018      var args = arraySlice.call( arguments, 1 );
3019      return methodCall( this, arg0, args );
3020    }
3021    plainCall( this, arg0 );
3022    return this;
3023  };
3024
3025  function methodCall( $elems, methodName, args ) {
3026    var returnValue;
3027    var pluginMethodStr = '$().' + namespace + '("' + methodName + '")';
3028
3029    $elems.each( function( i, elem ) {
3030      var instance = $.data( elem, namespace );
3031      if ( !instance ) {
3032        logError( namespace + ' not initialized. Cannot call methods, i.e. ' +
3033          pluginMethodStr );
3034        return;
3035      }
3036
3037      var method = instance[ methodName ];
3038      if ( !method || methodName.charAt(0) == '_' ) {
3039        logError( pluginMethodStr + ' is not a valid method' );
3040        return;
3041      }
3042
3043      var value = method.apply( instance, args );
3044      returnValue = returnValue === undefined ? value : returnValue;
3045    });
3046
3047    return returnValue !== undefined ? returnValue : $elems;
3048  }
3049
3050  function plainCall( $elems, options ) {
3051    $elems.each( function( i, elem ) {
3052      var instance = $.data( elem, namespace );
3053      if ( instance ) {
3054        instance.option( options );
3055        instance._init();
3056      } else {
3057        instance = new PluginClass( elem, options );
3058        $.data( elem, namespace, instance );
3059      }
3060    });
3061  }
3062
3063  updateJQuery( $ );
3064
3065}
3066
3067function updateJQuery( $ ) {
3068  if ( !$ || ( $ && $.bridget ) ) {
3069    return;
3070  }
3071  $.bridget = jQueryBridget;
3072}
3073
3074updateJQuery( jQuery || window.jQuery );
3075
3076return jQueryBridget;
3077
3078}));
3079
3080( function( global, factory ) {
3081  if ( typeof define == 'function' && define.amd ) {
3082    define( 'ev-emitter/ev-emitter',factory );
3083  } else if ( typeof module == 'object' && module.exports ) {
3084    module.exports = factory();
3085  } else {
3086    global.EvEmitter = factory();
3087  }
3088
3089}( typeof window != 'undefined' ? window : this, function() {
3090
3091
3092
3093function EvEmitter() {}
3094
3095var proto = EvEmitter.prototype;
3096
3097proto.on = function( eventName, listener ) {
3098  if ( !eventName || !listener ) {
3099    return;
3100  }
3101  var events = this._events = this._events || {};
3102  var listeners = events[ eventName ] = events[ eventName ] || [];
3103  if ( listeners.indexOf( listener ) == -1 ) {
3104    listeners.push( listener );
3105  }
3106
3107  return this;
3108};
3109
3110proto.once = function( eventName, listener ) {
3111  if ( !eventName || !listener ) {
3112    return;
3113  }
3114  this.on( eventName, listener );
3115  var onceEvents = this._onceEvents = this._onceEvents || {};
3116  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};
3117  onceListeners[ listener ] = true;
3118
3119  return this;
3120};
3121
3122proto.off = function( eventName, listener ) {
3123  var listeners = this._events && this._events[ eventName ];
3124  if ( !listeners || !listeners.length ) {
3125    return;
3126  }
3127  var index = listeners.indexOf( listener );
3128  if ( index != -1 ) {
3129    listeners.splice( index, 1 );
3130  }
3131
3132  return this;
3133};
3134
3135proto.emitEvent = function( eventName, args ) {
3136  var listeners = this._events && this._events[ eventName ];
3137  if ( !listeners || !listeners.length ) {
3138    return;
3139  }
3140  listeners = listeners.slice(0);
3141  args = args || [];
3142  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];
3143
3144  for ( var i=0; i < listeners.length; i++ ) {
3145    var listener = listeners[i]
3146    var isOnce = onceListeners && onceListeners[ listener ];
3147    if ( isOnce ) {
3148      this.off( eventName, listener );
3149      delete onceListeners[ listener ];
3150    }
3151    listener.apply( this, args );
3152  }
3153
3154  return this;
3155};
3156
3157proto.allOff = function() {
3158  delete this._events;
3159  delete this._onceEvents;
3160};
3161
3162return EvEmitter;
3163
3164}));
3165
3166/*!
3167 * getSize v2.0.3
3168 * measure size of elements
3169 * MIT license
3170 */
3171
3172( function( window, factory ) {
3173  if ( typeof define == 'function' && define.amd ) {
3174    define( 'get-size/get-size',factory );
3175  } else if ( typeof module == 'object' && module.exports ) {
3176    module.exports = factory();
3177  } else {
3178    window.getSize = factory();
3179  }
3180
3181})( window, function factory() {
3182'use strict';
3183
3184function getStyleSize( value ) {
3185  var num = parseFloat( value );
3186  var isValid = value.indexOf('%') == -1 && !isNaN( num );
3187  return isValid && num;
3188}
3189
3190function noop() {}
3191
3192var logError = typeof console == 'undefined' ? noop :
3193  function( message ) {
3194    console.error( message );
3195  };
3196
3197var measurements = [
3198  'paddingLeft',
3199  'paddingRight',
3200  'paddingTop',
3201  'paddingBottom',
3202  'marginLeft',
3203  'marginRight',
3204  'marginTop',
3205  'marginBottom',
3206  'borderLeftWidth',
3207  'borderRightWidth',
3208  'borderTopWidth',
3209  'borderBottomWidth'
3210];
3211
3212var measurementsLength = measurements.length;
3213
3214function getZeroSize() {
3215  var size = {
3216    width: 0,
3217    height: 0,
3218    innerWidth: 0,
3219    innerHeight: 0,
3220    outerWidth: 0,
3221    outerHeight: 0
3222  };
3223  for ( var i=0; i < measurementsLength; i++ ) {
3224    var measurement = measurements[i];
3225    size[ measurement ] = 0;
3226  }
3227  return size;
3228}
3229
3230function getStyle( elem ) {
3231  var style = getComputedStyle( elem );
3232  if ( !style ) {
3233    logError( 'Style returned ' + style +
3234      '. Are you running this code in a hidden iframe on Firefox? ' +
3235      'See https://bit.ly/getsizebug1' );
3236  }
3237  return style;
3238}
3239
3240var isSetup = false;
vendor: 22,268 bytes, lines 3241-4158
3241
3242var isBoxSizeOuter;
3243
3244function setup() {
3245  if ( isSetup ) {
3246    return;
3247  }
3248  isSetup = true;
3249
3250  var div = document.createElement('div');
3251  div.style.width = '200px';
3252  div.style.padding = '1px 2px 3px 4px';
3253  div.style.borderStyle = 'solid';
3254  div.style.borderWidth = '1px 2px 3px 4px';
3255  div.style.boxSizing = 'border-box';
3256
3257  var body = document.body || document.documentElement;
3258  body.appendChild( div );
3259  var style = getStyle( div );
3260  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;
3261  getSize.isBoxSizeOuter = isBoxSizeOuter;
3262
3263  body.removeChild( div );
3264}
3265
3266function getSize( elem ) {
3267  setup();
3268
3269  if ( typeof elem == 'string' ) {
3270    elem = document.querySelector( elem );
3271  }
3272
3273  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {
3274    return;
3275  }
3276
3277  var style = getStyle( elem );
3278
3279  if ( style.display == 'none' ) {
3280    return getZeroSize();
3281  }
3282
3283  var size = {};
3284  size.width = elem.offsetWidth;
3285  size.height = elem.offsetHeight;
3286
3287  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';
3288
3289  for ( var i=0; i < measurementsLength; i++ ) {
3290    var measurement = measurements[i];
3291    var value = style[ measurement ];
3292    var num = parseFloat( value );
3293    size[ measurement ] = !isNaN( num ) ? num : 0;
3294  }
3295
3296  var paddingWidth = size.paddingLeft + size.paddingRight;
3297  var paddingHeight = size.paddingTop + size.paddingBottom;
3298  var marginWidth = size.marginLeft + size.marginRight;
3299  var marginHeight = size.marginTop + size.marginBottom;
3300  var borderWidth = size.borderLeftWidth + size.borderRightWidth;
3301  var borderHeight = size.borderTopWidth + size.borderBottomWidth;
3302
3303  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;
3304
3305  var styleWidth = getStyleSize( style.width );
3306  if ( styleWidth !== false ) {
3307    size.width = styleWidth +
3308      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );
3309  }
3310
3311  var styleHeight = getStyleSize( style.height );
3312  if ( styleHeight !== false ) {
3313    size.height = styleHeight +
3314      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );
3315  }
3316
3317  size.innerWidth = size.width - ( paddingWidth + borderWidth );
3318  size.innerHeight = size.height - ( paddingHeight + borderHeight );
3319
3320  size.outerWidth = size.width + marginWidth;
3321  size.outerHeight = size.height + marginHeight;
3322
3323  return size;
3324}
3325
3326return getSize;
3327
3328});
3329
3330( function( window, factory ) {
3331  'use strict';
3332  if ( typeof define == 'function' && define.amd ) {
3333    define( 'desandro-matches-selector/matches-selector',factory );
3334  } else if ( typeof module == 'object' && module.exports ) {
3335    module.exports = factory();
3336  } else {
3337    window.matchesSelector = factory();
3338  }
3339
3340}( window, function factory() {
3341  'use strict';
3342
3343  var matchesMethod = ( function() {
3344    var ElemProto = window.Element.prototype;
3345    if ( ElemProto.matches ) {
3346      return 'matches';
3347    }
3348    if ( ElemProto.matchesSelector ) {
3349      return 'matchesSelector';
3350    }
3351    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];
3352
3353    for ( var i=0; i < prefixes.length; i++ ) {
3354      var prefix = prefixes[i];
3355      var method = prefix + 'MatchesSelector';
3356      if ( ElemProto[ method ] ) {
3357        return method;
3358      }
3359    }
3360  })();
3361
3362  return function matchesSelector( elem, selector ) {
3363    return elem[ matchesMethod ]( selector );
3364  };
3365
3366}));
3367
3368( function( window, factory ) {
3369  if ( typeof define == 'function' && define.amd ) {
3370    define( 'fizzy-ui-utils/utils',[
3371      'desandro-matches-selector/matches-selector'
3372    ], function( matchesSelector ) {
3373      return factory( window, matchesSelector );
3374    });
3375  } else if ( typeof module == 'object' && module.exports ) {
3376    module.exports = factory(
3377      window,
3378      require('desandro-matches-selector')
3379    );
3380  } else {
3381    window.fizzyUIUtils = factory(
3382      window,
3383      window.matchesSelector
3384    );
3385  }
3386
3387}( window, function factory( window, matchesSelector ) {
3388
3389
3390
3391var utils = {};
3392
3393utils.extend = function( a, b ) {
3394  for ( var prop in b ) {
3395    a[ prop ] = b[ prop ];
3396  }
3397  return a;
3398};
3399
3400utils.modulo = function( num, div ) {
3401  return ( ( num % div ) + div ) % div;
3402};
3403
3404var arraySlice = Array.prototype.slice;
3405
3406utils.makeArray = function( obj ) {
3407  if ( Array.isArray( obj ) ) {
3408    return obj;
3409  }
3410  if ( obj === null || obj === undefined ) {
3411    return [];
3412  }
3413
3414  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';
3415  if ( isArrayLike ) {
3416    return arraySlice.call( obj );
3417  }
3418
3419  return [ obj ];
3420};
3421
3422utils.removeFrom = function( ary, obj ) {
3423  var index = ary.indexOf( obj );
3424  if ( index != -1 ) {
3425    ary.splice( index, 1 );
3426  }
3427};
3428
3429utils.getParent = function( elem, selector ) {
3430  while ( elem.parentNode && elem != document.body ) {
3431    elem = elem.parentNode;
3432    if ( matchesSelector( elem, selector ) ) {
3433      return elem;
3434    }
3435  }
3436};
3437
3438utils.getQueryElement = function( elem ) {
3439  if ( typeof elem == 'string' ) {
3440    return document.querySelector( elem );
3441  }
3442  return elem;
3443};
3444
3445utils.handleEvent = function( event ) {
3446  var method = 'on' + event.type;
3447  if ( this[ method ] ) {
3448    this[ method ]( event );
3449  }
3450};
3451
3452utils.filterFindElements = function( elems, selector ) {
3453  elems = utils.makeArray( elems );
3454  var ffElems = [];
3455
3456  elems.forEach( function( elem ) {
3457    if ( !( elem instanceof HTMLElement ) ) {
3458      return;
3459    }
3460    if ( !selector ) {
3461      ffElems.push( elem );
3462      return;
3463    }
3464    if ( matchesSelector( elem, selector ) ) {
3465      ffElems.push( elem );
3466    }
3467    var childElems = elem.querySelectorAll( selector );
3468    for ( var i=0; i < childElems.length; i++ ) {
3469      ffElems.push( childElems[i] );
3470    }
3471  });
3472
3473  return ffElems;
3474};
3475
3476utils.debounceMethod = function( _class, methodName, threshold ) {
3477  threshold = threshold || 100;
3478  var method = _class.prototype[ methodName ];
3479  var timeoutName = methodName + 'Timeout';
3480
3481  _class.prototype[ methodName ] = function() {
3482    var timeout = this[ timeoutName ];
3483    clearTimeout( timeout );
3484
3485    var args = arguments;
3486    var _this = this;
3487    this[ timeoutName ] = setTimeout( function() {
3488      method.apply( _this, args );
3489      delete _this[ timeoutName ];
3490    }, threshold );
3491  };
3492};
3493
3494utils.docReady = function( callback ) {
3495  var readyState = document.readyState;
3496  if ( readyState == 'complete' || readyState == 'interactive' ) {
3497    setTimeout( callback );
3498  } else {
3499    document.addEventListener( 'DOMContentLoaded', callback );
3500  }
3501};
3502
3503utils.toDashed = function( str ) {
3504  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {
3505    return $1 + '-' + $2;
3506  }).toLowerCase();
3507};
3508
3509var console = window.console;
3510utils.htmlInit = function( WidgetClass, namespace ) {
3511  utils.docReady( function() {
3512    var dashedNamespace = utils.toDashed( namespace );
3513    var dataAttr = 'data-' + dashedNamespace;
3514    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );
3515    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );
3516    var elems = utils.makeArray( dataAttrElems )
3517      .concat( utils.makeArray( jsDashElems ) );
3518    var dataOptionsAttr = dataAttr + '-options';
3519    var jQuery = window.jQuery;
3520
3521    elems.forEach( function( elem ) {
3522      var attr = elem.getAttribute( dataAttr ) ||
3523        elem.getAttribute( dataOptionsAttr );
3524      var options;
3525      try {
3526        options = attr && JSON.parse( attr );
3527      } catch ( error ) {
3528        if ( console ) {
3529          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +
3530          ': ' + error );
3531        }
3532        return;
3533      }
3534      var instance = new WidgetClass( elem, options );
3535      if ( jQuery ) {
3536        jQuery.data( elem, namespace, instance );
3537      }
3538    });
3539
3540  });
3541};
3542
3543return utils;
3544
3545}));
3546
3547( function( window, factory ) {
3548  if ( typeof define == 'function' && define.amd ) {
3549    define( 'outlayer/item',[
3550        'ev-emitter/ev-emitter',
3551        'get-size/get-size'
3552      ],
3553      factory
3554    );
3555  } else if ( typeof module == 'object' && module.exports ) {
3556    module.exports = factory(
3557      require('ev-emitter'),
3558      require('get-size')
3559    );
3560  } else {
3561    window.Outlayer = {};
3562    window.Outlayer.Item = factory(
3563      window.EvEmitter,
3564      window.getSize
3565    );
3566  }
3567
3568}( window, function factory( EvEmitter, getSize ) {
3569'use strict';
3570
3571function isEmptyObj( obj ) {
3572  for ( var prop in obj ) {
3573    return false;
3574  }
3575  prop = null;
3576  return true;
3577}
3578
3579var docElemStyle = document.documentElement.style;
3580
3581var transitionProperty = typeof docElemStyle.transition == 'string' ?
3582  'transition' : 'WebkitTransition';
3583var transformProperty = typeof docElemStyle.transform == 'string' ?
3584  'transform' : 'WebkitTransform';
3585
3586var transitionEndEvent = {
3587  WebkitTransition: 'webkitTransitionEnd',
3588  transition: 'transitionend'
3589}[ transitionProperty ];
3590
3591var vendorProperties = {
3592  transform: transformProperty,
3593  transition: transitionProperty,
3594  transitionDuration: transitionProperty + 'Duration',
3595  transitionProperty: transitionProperty + 'Property',
3596  transitionDelay: transitionProperty + 'Delay'
3597};
3598
3599function Item( element, layout ) {
3600  if ( !element ) {
3601    return;
3602  }
3603
3604  this.element = element;
3605  this.layout = layout;
3606  this.position = {
3607    x: 0,
3608    y: 0
3609  };
3610
3611  this._create();
3612}
3613
3614var proto = Item.prototype = Object.create( EvEmitter.prototype );
3615proto.constructor = Item;
3616
3617proto._create = function() {
3618  this._transn = {
3619    ingProperties: {},
3620    clean: {},
3621    onEnd: {}
3622  };
3623
3624  this.css({
3625    position: 'absolute'
3626  });
3627};
3628
3629proto.handleEvent = function( event ) {
3630  var method = 'on' + event.type;
3631  if ( this[ method ] ) {
3632    this[ method ]( event );
3633  }
3634};
3635
3636proto.getSize = function() {
3637  this.size = getSize( this.element );
3638};
3639
3640proto.css = function( style ) {
3641  var elemStyle = this.element.style;
3642
3643  for ( var prop in style ) {
3644    var supportedProp = vendorProperties[ prop ] || prop;
3645    elemStyle[ supportedProp ] = style[ prop ];
3646  }
3647};
3648
3649proto.getPosition = function() {
3650  var style = getComputedStyle( this.element );
3651  var isOriginLeft = this.layout._getOption('originLeft');
3652  var isOriginTop = this.layout._getOption('originTop');
3653  var xValue = style[ isOriginLeft ? 'left' : 'right' ];
3654  var yValue = style[ isOriginTop ? 'top' : 'bottom' ];
3655  var x = parseFloat( xValue );
3656  var y = parseFloat( yValue );
3657  var layoutSize = this.layout.size;
3658  if ( xValue.indexOf('%') != -1 ) {
3659    x = ( x / 100 ) * layoutSize.width;
3660  }
3661  if ( yValue.indexOf('%') != -1 ) {
3662    y = ( y / 100 ) * layoutSize.height;
3663  }
3664  x = isNaN( x ) ? 0 : x;
3665  y = isNaN( y ) ? 0 : y;
3666  x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;
3667  y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;
3668
3669  this.position.x = x;
3670  this.position.y = y;
3671};
3672
3673proto.layoutPosition = function() {
3674  var layoutSize = this.layout.size;
3675  var style = {};
3676  var isOriginLeft = this.layout._getOption('originLeft');
3677  var isOriginTop = this.layout._getOption('originTop');
3678
3679  var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';
3680  var xProperty = isOriginLeft ? 'left' : 'right';
3681  var xResetProperty = isOriginLeft ? 'right' : 'left';
3682
3683  var x = this.position.x + layoutSize[ xPadding ];
3684  style[ xProperty ] = this.getXValue( x );
3685  style[ xResetProperty ] = '';
3686
3687  var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';
3688  var yProperty = isOriginTop ? 'top' : 'bottom';
3689  var yResetProperty = isOriginTop ? 'bottom' : 'top';
3690
3691  var y = this.position.y + layoutSize[ yPadding ];
3692  style[ yProperty ] = this.getYValue( y );
3693  style[ yResetProperty ] = '';
3694
3695  this.css( style );
3696  this.emitEvent( 'layout', [ this ] );
3697};
3698
3699proto.getXValue = function( x ) {
3700  var isHorizontal = this.layout._getOption('horizontal');
3701  return this.layout.options.percentPosition && !isHorizontal ?
3702    ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';
3703};
3704
3705proto.getYValue = function( y ) {
3706  var isHorizontal = this.layout._getOption('horizontal');
3707  return this.layout.options.percentPosition && isHorizontal ?
3708    ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';
3709};
3710
3711proto._transitionTo = function( x, y ) {
3712  this.getPosition();
3713  var curX = this.position.x;
3714  var curY = this.position.y;
3715
3716  var didNotMove = x == this.position.x && y == this.position.y;
3717
3718  this.setPosition( x, y );
3719
3720  if ( didNotMove && !this.isTransitioning ) {
3721    this.layoutPosition();
3722    return;
3723  }
3724
3725  var transX = x - curX;
3726  var transY = y - curY;
3727  var transitionStyle = {};
3728  transitionStyle.transform = this.getTranslate( transX, transY );
3729
3730  this.transition({
3731    to: transitionStyle,
3732    onTransitionEnd: {
3733      transform: this.layoutPosition
3734    },
3735    isCleaning: true
3736  });
3737};
3738
3739proto.getTranslate = function( x, y ) {
3740  var isOriginLeft = this.layout._getOption('originLeft');
3741  var isOriginTop = this.layout._getOption('originTop');
3742  x = isOriginLeft ? x : -x;
3743  y = isOriginTop ? y : -y;
3744  return 'translate3d(' + x + 'px, ' + y + 'px, 0)';
3745};
3746
3747proto.goTo = function( x, y ) {
3748  this.setPosition( x, y );
3749  this.layoutPosition();
3750};
3751
3752proto.moveTo = proto._transitionTo;
3753
3754proto.setPosition = function( x, y ) {
3755  this.position.x = parseFloat( x );
3756  this.position.y = parseFloat( y );
3757};
3758
3759proto._nonTransition = function( args ) {
3760  this.css( args.to );
3761  if ( args.isCleaning ) {
3762    this._removeStyles( args.to );
3763  }
3764  for ( var prop in args.onTransitionEnd ) {
3765    args.onTransitionEnd[ prop ].call( this );
3766  }
3767};
3768
3769proto.transition = function( args ) {
3770  if ( !parseFloat( this.layout.options.transitionDuration ) ) {
3771    this._nonTransition( args );
3772    return;
3773  }
3774
3775  var _transition = this._transn;
3776  for ( var prop in args.onTransitionEnd ) {
3777    _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];
3778  }
3779  for ( prop in args.to ) {
3780    _transition.ingProperties[ prop ] = true;
3781    if ( args.isCleaning ) {
3782      _transition.clean[ prop ] = true;
3783    }
3784  }
3785
3786  if ( args.from ) {
3787    this.css( args.from );
3788    var h = this.element.offsetHeight;
3789    h = null;
3790  }
3791  this.enableTransition( args.to );
3792  this.css( args.to );
3793
3794  this.isTransitioning = true;
3795
3796};
3797
3798function toDashedAll( str ) {
3799  return str.replace( /([A-Z])/g, function( $1 ) {
3800    return '-' + $1.toLowerCase();
3801  });
3802}
3803
3804var transitionProps = 'opacity,' + toDashedAll( transformProperty );
3805
3806proto.enableTransition = function() {
3807  if ( this.isTransitioning ) {
3808    return;
3809  }
3810
3811  var duration = this.layout.options.transitionDuration;
3812  duration = typeof duration == 'number' ? duration + 'ms' : duration;
3813  this.css({
3814    transitionProperty: transitionProps,
3815    transitionDuration: duration,
3816    transitionDelay: this.staggerDelay || 0
3817  });
3818  this.element.addEventListener( transitionEndEvent, this, false );
3819};
3820
3821proto.onwebkitTransitionEnd = function( event ) {
3822  this.ontransitionend( event );
3823};
3824
3825proto.onotransitionend = function( event ) {
3826  this.ontransitionend( event );
3827};
3828
3829var dashedVendorProperties = {
3830  '-webkit-transform': 'transform'
3831};
3832
3833proto.ontransitionend = function( event ) {
3834  if ( event.target !== this.element ) {
3835    return;
3836  }
3837  var _transition = this._transn;
3838  var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;
3839
3840  delete _transition.ingProperties[ propertyName ];
3841  if ( isEmptyObj( _transition.ingProperties ) ) {
3842    this.disableTransition();
3843  }
3844  if ( propertyName in _transition.clean ) {
3845    this.element.style[ event.propertyName ] = '';
3846    delete _transition.clean[ propertyName ];
3847  }
3848  if ( propertyName in _transition.onEnd ) {
3849    var onTransitionEnd = _transition.onEnd[ propertyName ];
3850    onTransitionEnd.call( this );
3851    delete _transition.onEnd[ propertyName ];
3852  }
3853
3854  this.emitEvent( 'transitionEnd', [ this ] );
3855};
3856
3857proto.disableTransition = function() {
3858  this.removeTransitionStyles();
3859  this.element.removeEventListener( transitionEndEvent, this, false );
3860  this.isTransitioning = false;
3861};
3862
3863proto._removeStyles = function( style ) {
3864  var cleanStyle = {};
3865  for ( var prop in style ) {
3866    cleanStyle[ prop ] = '';
3867  }
3868  this.css( cleanStyle );
3869};
3870
3871var cleanTransitionStyle = {
3872  transitionProperty: '',
3873  transitionDuration: '',
3874  transitionDelay: ''
3875};
3876
3877proto.removeTransitionStyles = function() {
3878  this.css( cleanTransitionStyle );
3879};
3880
3881proto.stagger = function( delay ) {
3882  delay = isNaN( delay ) ? 0 : delay;
3883  this.staggerDelay = delay + 'ms';
3884};
3885
3886proto.removeElem = function() {
3887  this.element.parentNode.removeChild( this.element );
3888  this.css({ display: '' });
3889  this.emitEvent( 'remove', [ this ] );
3890};
3891
3892proto.remove = function() {
3893  if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {
3894    this.removeElem();
3895    return;
3896  }
3897
3898  this.once( 'transitionEnd', function() {
3899    this.removeElem();
3900  });
3901  this.hide();
3902};
3903
3904proto.reveal = function() {
3905  delete this.isHidden;
3906  this.css({ display: '' });
3907
3908  var options = this.layout.options;
3909
3910  var onTransitionEnd = {};
3911  var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');
3912  onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;
3913
3914  this.transition({
3915    from: options.hiddenStyle,
3916    to: options.visibleStyle,
3917    isCleaning: true,
3918    onTransitionEnd: onTransitionEnd
3919  });
3920};
3921
3922proto.onRevealTransitionEnd = function() {
3923  if ( !this.isHidden ) {
3924    this.emitEvent('reveal');
3925  }
3926};
3927
3928proto.getHideRevealTransitionEndProperty = function( styleProperty ) {
3929  var optionStyle = this.layout.options[ styleProperty ];
3930  if ( optionStyle.opacity ) {
3931    return 'opacity';
3932  }
3933  for ( var prop in optionStyle ) {
3934    return prop;
3935  }
3936};
3937
3938proto.hide = function() {
3939  this.isHidden = true;
3940  this.css({ display: '' });
3941
3942  var options = this.layout.options;
3943
3944  var onTransitionEnd = {};
3945  var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');
3946  onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;
3947
3948  this.transition({
3949    from: options.visibleStyle,
3950    to: options.hiddenStyle,
3951    isCleaning: true,
3952    onTransitionEnd: onTransitionEnd
3953  });
3954};
3955
3956proto.onHideTransitionEnd = function() {
3957  if ( this.isHidden ) {
3958    this.css({ display: 'none' });
3959    this.emitEvent('hide');
3960  }
3961};
3962
3963proto.destroy = function() {
3964  this.css({
3965    position: '',
3966    left: '',
3967    right: '',
3968    top: '',
3969    bottom: '',
3970    transition: '',
3971    transform: ''
3972  });
3973};
3974
3975return Item;
3976
3977}));
3978
3979/*!
3980 * Outlayer v2.1.1
3981 * the brains and guts of a layout library
3982 * MIT license
3983 */
3984
3985( function( window, factory ) {
3986  'use strict';
3987  if ( typeof define == 'function' && define.amd ) {
3988    define( 'outlayer/outlayer',[
3989        'ev-emitter/ev-emitter',
3990        'get-size/get-size',
3991        'fizzy-ui-utils/utils',
3992        './item'
3993      ],
3994      function( EvEmitter, getSize, utils, Item ) {
3995        return factory( window, EvEmitter, getSize, utils, Item);
3996      }
3997    );
3998  } else if ( typeof module == 'object' && module.exports ) {
3999    module.exports = factory(
4000      window,
4001      require('ev-emitter'),
4002      require('get-size'),
4003      require('fizzy-ui-utils'),
4004      require('./item')
4005    );
4006  } else {
4007    window.Outlayer = factory(
4008      window,
4009      window.EvEmitter,
4010      window.getSize,
4011      window.fizzyUIUtils,
4012      window.Outlayer.Item
4013    );
4014  }
4015
4016}( window, function factory( window, EvEmitter, getSize, utils, Item ) {
4017'use strict';
4018
4019var console = window.console;
4020var jQuery = window.jQuery;
4021var noop = function() {};
4022
4023var GUID = 0;
4024var instances = {};
4025
4026
4027function Outlayer( element, options ) {
4028  var queryElement = utils.getQueryElement( element );
4029  if ( !queryElement ) {
4030    if ( console ) {
4031      console.error( 'Bad element for ' + this.constructor.namespace +
4032        ': ' + ( queryElement || element ) );
4033    }
4034    return;
4035  }
4036  this.element = queryElement;
4037  if ( jQuery ) {
4038    this.$element = jQuery( this.element );
4039  }
4040
4041  this.options = utils.extend( {}, this.constructor.defaults );
4042  this.option( options );
4043
4044  var id = ++GUID;
4045  this.element.outlayerGUID = id; 
4046  instances[ id ] = this; 
4047
4048  this._create();
4049
4050  var isInitLayout = this._getOption('initLayout');
4051  if ( isInitLayout ) {
4052    this.layout();
4053  }
4054}
4055
4056Outlayer.namespace = 'outlayer';
4057Outlayer.Item = Item;
4058
4059Outlayer.defaults = {
4060  containerStyle: {
4061    position: 'relative'
4062  },
4063  initLayout: true,
4064  originLeft: true,
4065  originTop: true,
4066  resize: true,
4067  resizeContainer: true,
4068  transitionDuration: '0.4s',
4069  hiddenStyle: {
4070    opacity: 0,
4071    transform: 'scale(0.001)'
4072  },
4073  visibleStyle: {
4074    opacity: 1,
4075    transform: 'scale(1)'
4076  }
4077};
4078
4079var proto = Outlayer.prototype;
4080utils.extend( proto, EvEmitter.prototype );
4081
4082proto.option = function( opts ) {
4083  utils.extend( this.options, opts );
4084};
4085
4086proto._getOption = function( option ) {
4087  var oldOption = this.constructor.compatOptions[ option ];
4088  return oldOption && this.options[ oldOption ] !== undefined ?
4089    this.options[ oldOption ] : this.options[ option ];
4090};
4091
4092Outlayer.compatOptions = {
4093  initLayout: 'isInitLayout',
4094  horizontal: 'isHorizontal',
4095  layoutInstant: 'isLayoutInstant',
4096  originLeft: 'isOriginLeft',
4097  originTop: 'isOriginTop',
4098  resize: 'isResizeBound',
4099  resizeContainer: 'isResizingContainer'
4100};
4101
4102proto._create = function() {
4103  this.reloadItems();
4104  this.stamps = [];
4105  this.stamp( this.options.stamp );
4106  utils.extend( this.element.style, this.options.containerStyle );
4107
4108  var canBindResize = this._getOption('resize');
4109  if ( canBindResize ) {
4110    this.bindResize();
4111  }
4112};
4113
4114proto.reloadItems = function() {
4115  this.items = this._itemize( this.element.children );
4116};
4117
4118
4119proto._itemize = function( elems ) {
4120
4121  var itemElems = this._filterFindItemElements( elems );
4122  var Item = this.constructor.Item;
4123
4124  var items = [];
4125  for ( var i=0; i < itemElems.length; i++ ) {
4126    var elem = itemElems[i];
4127    var item = new Item( elem, this );
4128    items.push( item );
4129  }
4130
4131  return items;
4132};
4133
4134proto._filterFindItemElements = function( elems ) {
4135  return utils.filterFindElements( elems, this.options.itemSelector );
4136};
4137
4138proto.getItemElements = function() {
4139  return this.items.map( function( item ) {
4140    return item.element;
4141  });
4142};
4143
4144proto.layout = function() {
4145  this._resetLayout();
4146  this._manageStamps();
4147
4148  var layoutInstant = this._getOption('layoutInstant');
4149  var isInstant = layoutInstant !== undefined ?
4150    layoutInstant : !this._isLayoutInited;
4151  this.layoutItems( this.items, isInstant );
4152
4153  this._isLayoutInited = true;
4154};
4155
4156proto._init = proto.layout;
4157
4158proto._resetLayout = function() {
vendor: 8,541 bytes, lines 4159-4534
4159  this.getSize();
4160};
4161
4162
4163proto.getSize = function() {
4164  this.size = getSize( this.element );
4165};
4166
4167proto._getMeasurement = function( measurement, size ) {
4168  var option = this.options[ measurement ];
4169  var elem;
4170  if ( !option ) {
4171    this[ measurement ] = 0;
4172  } else {
4173    if ( typeof option == 'string' ) {
4174      elem = this.element.querySelector( option );
4175    } else if ( option instanceof HTMLElement ) {
4176      elem = option;
4177    }
4178    this[ measurement ] = elem ? getSize( elem )[ size ] : option;
4179  }
4180};
4181
4182proto.layoutItems = function( items, isInstant ) {
4183  items = this._getItemsForLayout( items );
4184
4185  this._layoutItems( items, isInstant );
4186
4187  this._postLayout();
4188};
4189
4190proto._getItemsForLayout = function( items ) {
4191  return items.filter( function( item ) {
4192    return !item.isIgnored;
4193  });
4194};
4195
4196proto._layoutItems = function( items, isInstant ) {
4197  this._emitCompleteOnItems( 'layout', items );
4198
4199  if ( !items || !items.length ) {
4200    return;
4201  }
4202
4203  var queue = [];
4204
4205  items.forEach( function( item ) {
4206    var position = this._getItemLayoutPosition( item );
4207    position.item = item;
4208    position.isInstant = isInstant || item.isLayoutInstant;
4209    queue.push( position );
4210  }, this );
4211
4212  this._processLayoutQueue( queue );
4213};
4214
4215proto._getItemLayoutPosition = function(  ) {
4216  return {
4217    x: 0,
4218    y: 0
4219  };
4220};
4221
4222proto._processLayoutQueue = function( queue ) {
4223  this.updateStagger();
4224  queue.forEach( function( obj, i ) {
4225    this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );
4226  }, this );
4227};
4228
4229proto.updateStagger = function() {
4230  var stagger = this.options.stagger;
4231  if ( stagger === null || stagger === undefined ) {
4232    this.stagger = 0;
4233    return;
4234  }
4235  this.stagger = getMilliseconds( stagger );
4236  return this.stagger;
4237};
4238
4239proto._positionItem = function( item, x, y, isInstant, i ) {
4240  if ( isInstant ) {
4241    item.goTo( x, y );
4242  } else {
4243    item.stagger( i * this.stagger );
4244    item.moveTo( x, y );
4245  }
4246};
4247
4248proto._postLayout = function() {
4249  this.resizeContainer();
4250};
4251
4252proto.resizeContainer = function() {
4253  var isResizingContainer = this._getOption('resizeContainer');
4254  if ( !isResizingContainer ) {
4255    return;
4256  }
4257  var size = this._getContainerSize();
4258  if ( size ) {
4259    this._setContainerMeasure( size.width, true );
4260    this._setContainerMeasure( size.height, false );
4261  }
4262};
4263
4264proto._getContainerSize = noop;
4265
4266proto._setContainerMeasure = function( measure, isWidth ) {
4267  if ( measure === undefined ) {
4268    return;
4269  }
4270
4271  var elemSize = this.size;
4272  if ( elemSize.isBorderBox ) {
4273    measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +
4274      elemSize.borderLeftWidth + elemSize.borderRightWidth :
4275      elemSize.paddingBottom + elemSize.paddingTop +
4276      elemSize.borderTopWidth + elemSize.borderBottomWidth;
4277  }
4278
4279  measure = Math.max( measure, 0 );
4280  this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';
4281};
4282
4283proto._emitCompleteOnItems = function( eventName, items ) {
4284  var _this = this;
4285  function onComplete() {
4286    _this.dispatchEvent( eventName + 'Complete', null, [ items ] );
4287  }
4288
4289  var count = items.length;
4290  if ( !items || !count ) {
4291    onComplete();
4292    return;
4293  }
4294
4295  var doneCount = 0;
4296  function tick() {
4297    doneCount++;
4298    if ( doneCount == count ) {
4299      onComplete();
4300    }
4301  }
4302
4303  items.forEach( function( item ) {
4304    item.once( eventName, tick );
4305  });
4306};
4307
4308proto.dispatchEvent = function( type, event, args ) {
4309  var emitArgs = event ? [ event ].concat( args ) : args;
4310  this.emitEvent( type, emitArgs );
4311
4312  if ( jQuery ) {
4313    this.$element = this.$element || jQuery( this.element );
4314    if ( event ) {
4315      var $event = jQuery.Event( event );
4316      $event.type = type;
4317      this.$element.trigger( $event, args );
4318    } else {
4319      this.$element.trigger( type, args );
4320    }
4321  }
4322};
4323
4324proto.ignore = function( elem ) {
4325  var item = this.getItem( elem );
4326  if ( item ) {
4327    item.isIgnored = true;
4328  }
4329};
4330
4331proto.unignore = function( elem ) {
4332  var item = this.getItem( elem );
4333  if ( item ) {
4334    delete item.isIgnored;
4335  }
4336};
4337
4338proto.stamp = function( elems ) {
4339  elems = this._find( elems );
4340  if ( !elems ) {
4341    return;
4342  }
4343
4344  this.stamps = this.stamps.concat( elems );
4345  elems.forEach( this.ignore, this );
4346};
4347
4348proto.unstamp = function( elems ) {
4349  elems = this._find( elems );
4350  if ( !elems ){
4351    return;
4352  }
4353
4354  elems.forEach( function( elem ) {
4355    utils.removeFrom( this.stamps, elem );
4356    this.unignore( elem );
4357  }, this );
4358};
4359
4360proto._find = function( elems ) {
4361  if ( !elems ) {
4362    return;
4363  }
4364  if ( typeof elems == 'string' ) {
4365    elems = this.element.querySelectorAll( elems );
4366  }
4367  elems = utils.makeArray( elems );
4368  return elems;
4369};
4370
4371proto._manageStamps = function() {
4372  if ( !this.stamps || !this.stamps.length ) {
4373    return;
4374  }
4375
4376  this._getBoundingRect();
4377
4378  this.stamps.forEach( this._manageStamp, this );
4379};
4380
4381proto._getBoundingRect = function() {
4382  var boundingRect = this.element.getBoundingClientRect();
4383  var size = this.size;
4384  this._boundingRect = {
4385    left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,
4386    top: boundingRect.top + size.paddingTop + size.borderTopWidth,
4387    right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),
4388    bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )
4389  };
4390};
4391
4392proto._manageStamp = noop;
4393
4394proto._getElementOffset = function( elem ) {
4395  var boundingRect = elem.getBoundingClientRect();
4396  var thisRect = this._boundingRect;
4397  var size = getSize( elem );
4398  var offset = {
4399    left: boundingRect.left - thisRect.left - size.marginLeft,
4400    top: boundingRect.top - thisRect.top - size.marginTop,
4401    right: thisRect.right - boundingRect.right - size.marginRight,
4402    bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom
4403  };
4404  return offset;
4405};
4406
4407proto.handleEvent = utils.handleEvent;
4408
4409proto.bindResize = function() {
4410  window.addEventListener( 'resize', this );
4411  this.isResizeBound = true;
4412};
4413
4414proto.unbindResize = function() {
4415  window.removeEventListener( 'resize', this );
4416  this.isResizeBound = false;
4417};
4418
4419proto.onresize = function() {
4420  this.resize();
4421};
4422
4423utils.debounceMethod( Outlayer, 'onresize', 100 );
4424
4425proto.resize = function() {
4426  if ( !this.isResizeBound || !this.needsResizeLayout() ) {
4427    return;
4428  }
4429
4430  this.layout();
4431};
4432
4433proto.needsResizeLayout = function() {
4434  var size = getSize( this.element );
4435  var hasSizes = this.size && size;
4436  return hasSizes && size.innerWidth !== this.size.innerWidth;
4437};
4438
4439proto.addItems = function( elems ) {
4440  var items = this._itemize( elems );
4441  if ( items.length ) {
4442    this.items = this.items.concat( items );
4443  }
4444  return items;
4445};
4446
4447proto.appended = function( elems ) {
4448  var items = this.addItems( elems );
4449  if ( !items.length ) {
4450    return;
4451  }
4452  this.layoutItems( items, true );
4453  this.reveal( items );
4454};
4455
4456proto.prepended = function( elems ) {
4457  var items = this._itemize( elems );
4458  if ( !items.length ) {
4459    return;
4460  }
4461  var previousItems = this.items.slice(0);
4462  this.items = items.concat( previousItems );
4463  this._resetLayout();
4464  this._manageStamps();
4465  this.layoutItems( items, true );
4466  this.reveal( items );
4467  this.layoutItems( previousItems );
4468};
4469
4470proto.reveal = function( items ) {
4471  this._emitCompleteOnItems( 'reveal', items );
4472  if ( !items || !items.length ) {
4473    return;
4474  }
4475  var stagger = this.updateStagger();
4476  items.forEach( function( item, i ) {
4477    item.stagger( i * stagger );
4478    item.reveal();
4479  });
4480};
4481
4482proto.hide = function( items ) {
4483  this._emitCompleteOnItems( 'hide', items );
4484  if ( !items || !items.length ) {
4485    return;
4486  }
4487  var stagger = this.updateStagger();
4488  items.forEach( function( item, i ) {
4489    item.stagger( i * stagger );
4490    item.hide();
4491  });
4492};
4493
4494proto.revealItemElements = function( elems ) {
4495  var items = this.getItems( elems );
4496  this.reveal( items );
4497};
4498
4499proto.hideItemElements = function( elems ) {
4500  var items = this.getItems( elems );
4501  this.hide( items );
4502};
4503
4504proto.getItem = function( elem ) {
4505  for ( var i=0; i < this.items.length; i++ ) {
4506    var item = this.items[i];
4507    if ( item.element == elem ) {
4508      return item;
4509    }
4510  }
4511};
4512
4513proto.getItems = function( elems ) {
4514  elems = utils.makeArray( elems );
4515  var items = [];
4516  elems.forEach( function( elem ) {
4517    var item = this.getItem( elem );
4518    if ( item ) {
4519      items.push( item );
4520    }
4521  }, this );
4522
4523  return items;
4524};
4525
4526proto.remove = function( elems ) {
4527  var removeItems = this.getItems( elems );
4528
4529  this._emitCompleteOnItems( 'remove', removeItems );
4530
4531  if ( !removeItems || !removeItems.length ) {
4532    return;
4533  }
4534
vendor: 2,494 bytes, lines 4535-4657
4535  removeItems.forEach( function( item ) {
4536    item.remove();
4537    utils.removeFrom( this.items, item );
4538  }, this );
4539};
4540
4541proto.destroy = function() {
4542  var style = this.element.style;
4543  style.height = '';
4544  style.position = '';
4545  style.width = '';
4546  this.items.forEach( function( item ) {
4547    item.destroy();
4548  });
4549
4550  this.unbindResize();
4551
4552  var id = this.element.outlayerGUID;
4553  delete instances[ id ]; 
4554  delete this.element.outlayerGUID;
4555  if ( jQuery ) {
4556    jQuery.removeData( this.element, this.constructor.namespace );
4557  }
4558
4559};
4560
4561Outlayer.data = function( elem ) {
4562  elem = utils.getQueryElement( elem );
4563  var id = elem && elem.outlayerGUID;
4564  return id && instances[ id ];
4565};
4566
4567
4568Outlayer.create = function( namespace, options ) {
4569  var Layout = subclass( Outlayer );
4570  Layout.defaults = utils.extend( {}, Outlayer.defaults );
4571  utils.extend( Layout.defaults, options );
4572  Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions  );
4573
4574  Layout.namespace = namespace;
4575
4576  Layout.data = Outlayer.data;
4577
4578  Layout.Item = subclass( Item );
4579
4580  utils.htmlInit( Layout, namespace );
4581
4582  if ( jQuery && jQuery.bridget ) {
4583    jQuery.bridget( namespace, Layout );
4584  }
4585
4586  return Layout;
4587};
4588
4589function subclass( Parent ) {
4590  function SubClass() {
4591    Parent.apply( this, arguments );
4592  }
4593
4594  SubClass.prototype = Object.create( Parent.prototype );
4595  SubClass.prototype.constructor = SubClass;
4596
4597  return SubClass;
4598}
4599
4600var msUnits = {
4601  ms: 1,
4602  s: 1000
4603};
4604
4605function getMilliseconds( time ) {
4606  if ( typeof time == 'number' ) {
4607    return time;
4608  }
4609  var matches = time.match( /(^\d*\.?\d*)(\w*)/ );
4610  var num = matches && matches[1];
4611  var unit = matches && matches[2];
4612  if ( !num.length ) {
4613    return 0;
4614  }
4615  num = parseFloat( num );
4616  var mult = msUnits[ unit ] || 1;
4617  return num * mult;
4618}
4619
4620Outlayer.Item = Item;
4621
4622return Outlayer;
4623
4624}));
4625
4626/*!
4627 * Masonry v4.2.2
4628 * Cascading grid layout library
4629 * https://masonry.desandro.com
4630 * MIT License
4631 * by David DeSandro
4632 */
4633
4634( function( window, factory ) {
4635  if ( typeof define == 'function' && define.amd ) {
4636    define( [
4637        'outlayer/outlayer',
4638        'get-size/get-size'
4639      ],
4640      factory );
4641  } else if ( typeof module == 'object' && module.exports ) {
4642    module.exports = factory(
4643      require('outlayer'),
4644      require('get-size')
4645    );
4646  } else {
4647    window.Masonry = factory(
4648      window.Outlayer,
4649      window.getSize
4650    );
4651  }
4652
4653}( window, function factory( Outlayer, getSize ) {
4654
4655
4656
4657  var Masonry = Outlayer.create('masonry');
vendor: 9,161 bytes, lines 4658-5012
4658  Masonry.compatOptions.fitWidth = 'isFitWidth';
4659
4660  var proto = Masonry.prototype;
4661
4662  proto._resetLayout = function() {
4663    this.getSize();
4664    this._getMeasurement( 'columnWidth', 'outerWidth' );
4665    this._getMeasurement( 'gutter', 'outerWidth' );
4666    this.measureColumns();
4667
4668    this.colYs = [];
4669    for ( var i=0; i < this.cols; i++ ) {
4670      this.colYs.push( 0 );
4671    }
4672
4673    this.maxY = 0;
4674    this.horizontalColIndex = 0;
4675  };
4676
4677  proto.measureColumns = function() {
4678    this.getContainerWidth();
4679    if ( !this.columnWidth ) {
4680      var firstItem = this.items[0];
4681      var firstItemElem = firstItem && firstItem.element;
4682      this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||
4683        this.containerWidth;
4684    }
4685
4686    var columnWidth = this.columnWidth += this.gutter;
4687
4688    var containerWidth = this.containerWidth + this.gutter;
4689    var cols = containerWidth / columnWidth;
4690    var excess = columnWidth - containerWidth % columnWidth;
4691    var mathMethod = excess && excess < 1 ? 'round' : 'floor';
4692    cols = Math[ mathMethod ]( cols );
4693    this.cols = Math.max( cols, 1 );
4694  };
4695
4696  proto.getContainerWidth = function() {
4697    var isFitWidth = this._getOption('fitWidth');
4698    var container = isFitWidth ? this.element.parentNode : this.element;
4699    var size = getSize( container );
4700    this.containerWidth = size && size.innerWidth;
4701  };
4702
4703  proto._getItemLayoutPosition = function( item ) {
4704    item.getSize();
4705    var remainder = item.size.outerWidth % this.columnWidth;
4706    var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';
4707    var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );
4708    colSpan = Math.min( colSpan, this.cols );
4709    var colPosMethod = this.options.horizontalOrder ?
4710      '_getHorizontalColPosition' : '_getTopColPosition';
4711    var colPosition = this[ colPosMethod ]( colSpan, item );
4712    var position = {
4713      x: this.columnWidth * colPosition.col,
4714      y: colPosition.y
4715    };
4716    var setHeight = colPosition.y + item.size.outerHeight;
4717    var setMax = colSpan + colPosition.col;
4718    for ( var i = colPosition.col; i < setMax; i++ ) {
4719      this.colYs[i] = setHeight;
4720    }
4721
4722    return position;
4723  };
4724
4725  proto._getTopColPosition = function( colSpan ) {
4726    var colGroup = this._getTopColGroup( colSpan );
4727    var minimumY = Math.min.apply( Math, colGroup );
4728
4729    return {
4730      col: colGroup.indexOf( minimumY ),
4731      y: minimumY,
4732    };
4733  };
4734
4735  proto._getTopColGroup = function( colSpan ) {
4736    if ( colSpan < 2 ) {
4737      return this.colYs;
4738    }
4739
4740    var colGroup = [];
4741    var groupCount = this.cols + 1 - colSpan;
4742    for ( var i = 0; i < groupCount; i++ ) {
4743      colGroup[i] = this._getColGroupY( i, colSpan );
4744    }
4745    return colGroup;
4746  };
4747
4748  proto._getColGroupY = function( col, colSpan ) {
4749    if ( colSpan < 2 ) {
4750      return this.colYs[ col ];
4751    }
4752    var groupColYs = this.colYs.slice( col, col + colSpan );
4753    return Math.max.apply( Math, groupColYs );
4754  };
4755
4756  proto._getHorizontalColPosition = function( colSpan, item ) {
4757    var col = this.horizontalColIndex % this.cols;
4758    var isOver = colSpan > 1 && col + colSpan > this.cols;
4759    col = isOver ? 0 : col;
4760    var hasSize = item.size.outerWidth && item.size.outerHeight;
4761    this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;
4762
4763    return {
4764      col: col,
4765      y: this._getColGroupY( col, colSpan ),
4766    };
4767  };
4768
4769  proto._manageStamp = function( stamp ) {
4770    var stampSize = getSize( stamp );
4771    var offset = this._getElementOffset( stamp );
4772    var isOriginLeft = this._getOption('originLeft');
4773    var firstX = isOriginLeft ? offset.left : offset.right;
4774    var lastX = firstX + stampSize.outerWidth;
4775    var firstCol = Math.floor( firstX / this.columnWidth );
4776    firstCol = Math.max( 0, firstCol );
4777    var lastCol = Math.floor( lastX / this.columnWidth );
4778    lastCol -= lastX % this.columnWidth ? 0 : 1;
4779    lastCol = Math.min( this.cols - 1, lastCol );
4780    var isOriginTop = this._getOption('originTop');
4781    var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +
4782      stampSize.outerHeight;
4783    for ( var i = firstCol; i <= lastCol; i++ ) {
4784      this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );
4785    }
4786  };
4787
4788  proto._getContainerSize = function() {
4789    this.maxY = Math.max.apply( Math, this.colYs );
4790    var size = {
4791      height: this.maxY
4792    };
4793
4794    if ( this._getOption('fitWidth') ) {
4795      size.width = this._getContainerFitWidth();
4796    }
4797
4798    return size;
4799  };
4800
4801  proto._getContainerFitWidth = function() {
4802    var unusedCols = 0;
4803    var i = this.cols;
4804    while ( --i ) {
4805      if ( this.colYs[i] !== 0 ) {
4806        break;
4807      }
4808      unusedCols++;
4809    }
4810    return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;
4811  };
4812
4813  proto.needsResizeLayout = function() {
4814    var previousWidth = this.containerWidth;
4815    this.getContainerWidth();
4816    return previousWidth != this.containerWidth;
4817  };
4818
4819  return Masonry;
4820
4821}));
4822
4823
4824/*!
4825 * imagesLoaded PACKAGED v4.1.4
4826 * JavaScript is all like "You images are done yet or what?"
4827 * MIT License
4828 */
4829
4830( function( global, factory ) {
4831  if ( typeof define == 'function' && define.amd ) {
4832    define( 'ev-emitter/ev-emitter',factory );
4833  } else if ( typeof module == 'object' && module.exports ) {
4834    module.exports = factory();
4835  } else {
4836    global.EvEmitter = factory();
4837  }
4838
4839}( typeof window != 'undefined' ? window : this, function() {
4840
4841
4842
4843function EvEmitter() {}
4844
4845var proto = EvEmitter.prototype;
4846
4847proto.on = function( eventName, listener ) {
4848  if ( !eventName || !listener ) {
4849    return;
4850  }
4851  var events = this._events = this._events || {};
4852  var listeners = events[ eventName ] = events[ eventName ] || [];
4853  if ( listeners.indexOf( listener ) == -1 ) {
4854    listeners.push( listener );
4855  }
4856
4857  return this;
4858};
4859
4860proto.once = function( eventName, listener ) {
4861  if ( !eventName || !listener ) {
4862    return;
4863  }
4864  this.on( eventName, listener );
4865  var onceEvents = this._onceEvents = this._onceEvents || {};
4866  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};
4867  onceListeners[ listener ] = true;
4868
4869  return this;
4870};
4871
4872proto.off = function( eventName, listener ) {
4873  var listeners = this._events && this._events[ eventName ];
4874  if ( !listeners || !listeners.length ) {
4875    return;
4876  }
4877  var index = listeners.indexOf( listener );
4878  if ( index != -1 ) {
4879    listeners.splice( index, 1 );
4880  }
4881
4882  return this;
4883};
4884
4885proto.emitEvent = function( eventName, args ) {
4886  var listeners = this._events && this._events[ eventName ];
4887  if ( !listeners || !listeners.length ) {
4888    return;
4889  }
4890  listeners = listeners.slice(0);
4891  args = args || [];
4892  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];
4893
4894  for ( var i=0; i < listeners.length; i++ ) {
4895    var listener = listeners[i]
4896    var isOnce = onceListeners && onceListeners[ listener ];
4897    if ( isOnce ) {
4898      this.off( eventName, listener );
4899      delete onceListeners[ listener ];
4900    }
4901    listener.apply( this, args );
4902  }
4903
4904  return this;
4905};
4906
4907proto.allOff = function() {
4908  delete this._events;
4909  delete this._onceEvents;
4910};
4911
4912return EvEmitter;
4913
4914}));
4915
4916/*!
4917 * imagesLoaded v4.1.4
4918 * JavaScript is all like "You images are done yet or what?"
4919 * MIT License
4920 */
4921
4922( function( window, factory ) { 'use strict';
4923  if ( typeof define == 'function' && define.amd ) {
4924    define( [
4925      'ev-emitter/ev-emitter'
4926    ], function( EvEmitter ) {
4927      return factory( window, EvEmitter );
4928    });
4929  } else if ( typeof module == 'object' && module.exports ) {
4930    module.exports = factory(
4931      window,
4932      require('ev-emitter')
4933    );
4934  } else {
4935    window.imagesLoaded = factory(
4936      window,
4937      window.EvEmitter
4938    );
4939  }
4940
4941})( typeof window !== 'undefined' ? window : this,
4942
4943function factory( window, EvEmitter ) {
4944
4945
4946
4947var $ = window.jQuery;
4948var console = window.console;
4949
4950function extend( a, b ) {
4951  for ( var prop in b ) {
4952    a[ prop ] = b[ prop ];
4953  }
4954  return a;
4955}
4956
4957var arraySlice = Array.prototype.slice;
4958
4959function makeArray( obj ) {
4960  if ( Array.isArray( obj ) ) {
4961    return obj;
4962  }
4963
4964  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';
4965  if ( isArrayLike ) {
4966    return arraySlice.call( obj );
4967  }
4968
4969  return [ obj ];
4970}
4971
4972function ImagesLoaded( elem, options, onAlways ) {
4973  if ( !( this instanceof ImagesLoaded ) ) {
4974    return new ImagesLoaded( elem, options, onAlways );
4975  }
4976  var queryElem = elem;
4977  if ( typeof elem == 'string' ) {
4978    queryElem = document.querySelectorAll( elem );
4979  }
4980  if ( !queryElem ) {
4981    console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );
4982    return;
4983  }
4984
4985  this.elements = makeArray( queryElem );
4986  this.options = extend( {}, this.options );
4987  if ( typeof options == 'function' ) {
4988    onAlways = options;
4989  } else {
4990    extend( this.options, options );
4991  }
4992
4993  if ( onAlways ) {
4994    this.on( 'always', onAlways );
4995  }
4996
4997  this.getImages();
4998
4999  if ( $ ) {
5000    this.jqDeferred = new $.Deferred();
5001  }
5002
5003  setTimeout( this.check.bind( this ) );
5004}
5005
5006ImagesLoaded.prototype = Object.create( EvEmitter.prototype );
5007
5008ImagesLoaded.prototype.options = {};
5009
5010ImagesLoaded.prototype.getImages = function() {
5011  this.images = [];
5012
vendor: 4,360 bytes, lines 5013-5176
5013  this.elements.forEach( this.addElementImages, this );
5014};
5015
5016ImagesLoaded.prototype.addElementImages = function( elem ) {
5017  if ( elem.nodeName == 'IMG' ) {
5018    this.addImage( elem );
5019  }
5020  if ( this.options.background === true ) {
5021    this.addElementBackgroundImages( elem );
5022  }
5023
5024  var nodeType = elem.nodeType;
5025  if ( !nodeType || !elementNodeTypes[ nodeType ] ) {
5026    return;
5027  }
5028  var childImgs = elem.querySelectorAll('img');
5029  for ( var i=0; i < childImgs.length; i++ ) {
5030    var img = childImgs[i];
5031    this.addImage( img );
5032  }
5033
5034  if ( typeof this.options.background == 'string' ) {
5035    var children = elem.querySelectorAll( this.options.background );
5036    for ( i=0; i < children.length; i++ ) {
5037      var child = children[i];
5038      this.addElementBackgroundImages( child );
5039    }
5040  }
5041};
5042
5043var elementNodeTypes = {
5044  1: true,
5045  9: true,
5046  11: true
5047};
5048
5049ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {
5050  var style = getComputedStyle( elem );
5051  if ( !style ) {
5052    return;
5053  }
5054  var reURL = /url\((['"])?(.*?)\1\)/gi;
5055  var matches = reURL.exec( style.backgroundImage );
5056  while ( matches !== null ) {
5057    var url = matches && matches[2];
5058    if ( url ) {
5059      this.addBackground( url, elem );
5060    }
5061    matches = reURL.exec( style.backgroundImage );
5062  }
5063};
5064
5065ImagesLoaded.prototype.addImage = function( img ) {
5066  var loadingImage = new LoadingImage( img );
5067  this.images.push( loadingImage );
5068};
5069
5070ImagesLoaded.prototype.addBackground = function( url, elem ) {
5071  var background = new Background( url, elem );
5072  this.images.push( background );
5073};
5074
5075ImagesLoaded.prototype.check = function() {
5076  var _this = this;
5077  this.progressedCount = 0;
5078  this.hasAnyBroken = false;
5079  if ( !this.images.length ) {
5080    this.complete();
5081    return;
5082  }
5083
5084  function onProgress( image, elem, message ) {
5085    setTimeout( function() {
5086      _this.progress( image, elem, message );
5087    });
5088  }
5089
5090  this.images.forEach( function( loadingImage ) {
5091    loadingImage.once( 'progress', onProgress );
5092    loadingImage.check();
5093  });
5094};
5095
5096ImagesLoaded.prototype.progress = function( image, elem, message ) {
5097  this.progressedCount++;
5098  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;
5099  this.emitEvent( 'progress', [ this, image, elem ] );
5100  if ( this.jqDeferred && this.jqDeferred.notify ) {
5101    this.jqDeferred.notify( this, image );
5102  }
5103  if ( this.progressedCount == this.images.length ) {
5104    this.complete();
5105  }
5106
5107  if ( this.options.debug && console ) {
5108    console.log( 'progress: ' + message, image, elem );
5109  }
5110};
5111
5112ImagesLoaded.prototype.complete = function() {
5113  var eventName = this.hasAnyBroken ? 'fail' : 'done';
5114  this.isComplete = true;
5115  this.emitEvent( eventName, [ this ] );
5116  this.emitEvent( 'always', [ this ] );
5117  if ( this.jqDeferred ) {
5118    var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';
5119    this.jqDeferred[ jqMethod ]( this );
5120  }
5121};
5122
5123function LoadingImage( img ) {
5124  this.img = img;
5125}
5126
5127LoadingImage.prototype = Object.create( EvEmitter.prototype );
5128
5129LoadingImage.prototype.check = function() {
5130  var isComplete = this.getIsImageComplete();
5131  if ( isComplete ) {
5132    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
5133    return;
5134  }
5135
5136  this.proxyImage = new Image();
5137  this.proxyImage.addEventListener( 'load', this );
5138  this.proxyImage.addEventListener( 'error', this );
5139  this.img.addEventListener( 'load', this );
5140  this.img.addEventListener( 'error', this );
5141  this.proxyImage.src = this.img.src;
5142};
5143
5144LoadingImage.prototype.getIsImageComplete = function() {
5145  return this.img.complete && this.img.naturalWidth;
5146};
5147
5148LoadingImage.prototype.confirm = function( isLoaded, message ) {
5149  this.isLoaded = isLoaded;
5150  this.emitEvent( 'progress', [ this, this.img, message ] );
5151};
5152
5153LoadingImage.prototype.handleEvent = function( event ) {
5154  var method = 'on' + event.type;
5155  if ( this[ method ] ) {
5156    this[ method ]( event );
5157  }
5158};
5159
5160LoadingImage.prototype.onload = function() {
5161  this.confirm( true, 'onload' );
5162  this.unbindEvents();
5163};
5164
5165LoadingImage.prototype.onerror = function() {
5166  this.confirm( false, 'onerror' );
5167  this.unbindEvents();
5168};
5169
5170LoadingImage.prototype.unbindEvents = function() {
5171  this.proxyImage.removeEventListener( 'load', this );
5172  this.proxyImage.removeEventListener( 'error', this );
5173  this.img.removeEventListener( 'load', this );
5174  this.img.removeEventListener( 'error', this );
5175};
5176
5177function Background( url, element ) {
5178  this.url = url;
5179  this.element = element;
5180  this.img = new Image();
5181}
5182
5183Background.prototype = Object.create( LoadingImage.prototype );
5184
5185Background.prototype.check = function() {
5186  this.img.addEventListener( 'load', this );
5187  this.img.addEventListener( 'error', this );
5188  this.img.src = this.url;
5189  var isComplete = this.getIsImageComplete();
5190  if ( isComplete ) {
5191    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
5192    this.unbindEvents();
5193  }
5194};
5195
5196Background.prototype.unbindEvents = function() {
5197  this.img.removeEventListener( 'load', this );
5198  this.img.removeEventListener( 'error', this );
5199};
5200
5201Background.prototype.confirm = function( isLoaded, message ) {
5202  this.isLoaded = isLoaded;
5203  this.emitEvent( 'progress', [ this, this.element, message ] );
5204};
5205
5206ImagesLoaded.makeJQueryPlugin = function( jQuery ) {
5207  jQuery = jQuery || window.jQuery;
5208  if ( !jQuery ) {
5209    return;
5210  }
5211  $ = jQuery;
5212  $.fn.imagesLoaded = function( options, callback ) {
5213    var instance = new ImagesLoaded( this, options, callback );
5214    return instance.jqDeferred.promise( $(this) );
5215  };
5216};
5217ImagesLoaded.makeJQueryPlugin();
5218
5219return ImagesLoaded;
5220
5221});
5222
5223
5224/*!
5225 * @author yomotsu
5226 * MatchHeight
5227 * https://github.com/yomotsu/MatchHeight
5228 * Released under the MIT License.
5229 */
5230!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.MatchHeight=e()}(this,function(){"use strict";function t(){i.forEach(function(t){var e=t.el.getBoundingClientRect();t.top=e.top,t.height=e.height}),i.sort(function(t,e){return t.top-e.top});var o=i[0].top,n=i.filter(function(t){return Math.abs(t.top-o)<=e}),r=Math.max.apply(Math,n.map(function(t){return t.height}));n.forEach(function(t){var n=o-t.top+e,i=parseFloat(window.getComputedStyle(t.el).getPropertyValue("padding-top"),10)+parseFloat(window.getComputedStyle(t.el).getPropertyValue("padding-bottom"),10)+parseFloat(window.getComputedStyle(t.el).getPropertyValue("border-top-width"),10)+parseFloat(window.getComputedStyle(t.el).getPropertyValue("border-bottom-width"),10);t.el.style.minHeight=r-i+n+"px"}),i.splice(0,n.length),0<i.length&&t()}var e=1,o=!1,n=void 0,i=void 0,r={init:function(){o=!0,n=document.querySelectorAll("[data-mh]"),r.update(
5230)},update:function(){if(!o)return void r.init();0!==n.length&&(i=Array.prototype.map.call(n,function(t){return{el:t}}),i.forEach(function(t){t.el.style.minHeight=""}),t())}},d=function(t,e){var o=void 0,n=void 0;return function(){var i=Date.now();o&&i<o+e?(clearTimeout(n),n=setTimeout(function(){o=i,t()},e)):(o=i,t())}}(r.update,200);return window.addEventListener("DOMContentLoaded",function t(){r.init(),window.removeEventListener("DOMContentLoaded",t)}),window.addEventListener("load",function t(){r.update(),window.removeEventListener("load",t)}),window.addEventListener("resize",d),r});
5231
5232( function( $, window, document, undefined ) {
5233
5234	'use strict';
5235
5236	var offCanvas = function() {
5237
5238		var $canvas 		= $('#offcanvas'),
5239			buttons 		= ['.mobile-menu-reveal', '.search-reveal', '.shopping-cart-reveal', '.offcanvas-close'];
5240
5241		var detectClick = function(idClicked) {
5242
5243			if ( idClicked.hasClass('mobile-menu-reveal') ) {
5244				$canvas.addClass('show-offcanvas-menu');
5245			} else if ( idClicked.hasClass('shopping-cart-reveal') ) {
5246				$canvas.addClass('show-offcanvas-cart');
5247			} else if ( idClicked.hasClass('search-reveal') ) {
5248				$canvas.addClass('show-offcanvas-search offcanvas--modal');
5249			}
5250
5251		};
5252
5253		var toggleOffCanvas = function() {
5254
5255			$canvas.addClass('offcanvas--animatable');
5256
5257			if ( !$canvas.hasClass('offcanvas--visible') ) {
5258				$canvas.addClass('offcanvas--visible');
5259			} else {
5260				removeCanvas();
5261			}
5262
5263		};
5264
5265		var removeCanvas = function () {
5266			$canvas.removeClass('offcanvas--visible show-offcanvas-menu show-offcanvas-cart show-offcanvas-search offcanvas--modal');
5267		};
5268
5269		var onTransitionEnd = function() {
5270			$canvas.removeClass('offcanvas--animatable');
5271		};
5272
5273		$canvas.on('transitionend webkitTransitionEnd oTransitionEnd', function() {
5274			onTransitionEnd();
5275		});
5276
5277		$(buttons.join()).on('click', function() {
5278			var idClicked = $(this);
5279			detectClick(idClicked);
5280			toggleOffCanvas();
5281		});
5282
5283		$canvas.on('click', function(e) {
5284			if ( e.target == this ) {
5285				toggleOffCanvas();
5286			}
5287		});
5288
5289		$(document).keyup(function(e) {
5290			if ( e.keyCode === 27 ) {
5291				removeCanvas();
5292			}
5293		});
5294
5295	}; offCanvas();
5296
5297
5298})( jQuery, window, document );
5299jQuery(document).ready(function ($) {
5300
5301    'use strict';
5302
5303    $(function () {
5304
5305        $('.menu .sub-links').not($('.sub-menu .sub-links')).wrap('<div class="sub-menu" />'); 
5306
5307        var $main_menu = $('.main-menu');
5308
5309        $main_menu.find('> ul > li > .sub-menu').each(function (index, element) {
5310            if ($(element).children().hasClass('sub-posts') && $(element).children().hasClass('sub-links')) {
5311                $(element).parent().addClass('sub-menu-two-columns menu-item-has-mega-menu');
5312            } else if ($(element).children().hasClass('sub-posts') && (!$(element).children().hasClass('sub-links'))) {
5313                $(element).parent().addClass('sub-menu-full-width menu-item-has-mega-menu');
5314            } else if ($(element).parent().hasClass('columns-menu')) {
5315                $(element).parent().addClass('sub-menu-columns');
5316            } else {
5317                $(element).parent().addClass('sub-links-only');
5318            }
5319
5320            if ($(element).children().length) {
5321                $(element).parent().addClass('link-arrow');
5322            }
5323        });
5324
5325        $('.sub-menu-columns > .sub-menu > .sub-links').each(function (index, element) {
5326            var count = $(element).children().length;
5327            $(element).parents('.sub-menu-columns').addClass('sub-menu-columns-' + count);
5328        });
5329
5330        $('.sub-menu').each(function (index, element) {
5331            if ($(element).children().length === 0) {
5332                $(element).remove();
5333            }
5334        });
5335
5336    });
5337
5338    var mobileMenu = function() {
5339
5340        var $mobile_menu = $('#offcanvas-menu');
5341
5342        $.each($mobile_menu.find('.menu li'), function () {
5343            $(this).find('> .sub-menu').before('<span class="sub-menu-arrow"><i class="sm-chevron-right"></i></span>');
5344        });
5345
5346        $mobile_menu.find('.menu li .sub-menu').prepend('<span class="sub-menu-back"><svg class="sm-svg-icon icon-arrow-left" width="24" height="24" aria-hidden="true" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
5346<path d="M31.106 15H3.278l8.325-8.293a.999.999 0 1 0-1.414-1.414l-9.9 9.899a1.01 1.01 0 0 0 0 1.414l9.9 9.9a.999.999 0 1 0 1.414-1.414L3.278 17h27.828a1 1 0 0 0 0-2z"></path></svg></span>');
5347
5348        var $sub_parent = $mobile_menu.find('.sub-menu-arrow');
5349
5350        $sub_parent.on('click', function () {
5351            var $this = $(this);
5352            var $parent_menu = $this.parents('.menu');
5353            var $current_item = $this.next('.sub-menu');
5354            $parent_menu.addClass('sub-level-open');
5355            $current_item.addClass('sub-menu-open');
5356        });
5357
5358        var $sub_back = $('.sub-menu-back');
5359
5360        $sub_back.on('click', function () {
5361            var $this = $(this);
5362            var $currentItem = $this.parent('.sub-menu');
5363            var $parent_menu = $this.parents('.menu');
5364            $currentItem.removeClass('sub-menu-open');
5365            $parent_menu.removeClass('sub-level-open');
5366        });
5367
5368    }; mobileMenu();
5369
5370	var modalWindowSearch = function() {
5371
5372        var $searchbox	= $('.modal--search-form');
5373
5374		$('#search-reveal').on( 'click', function() {
5375			$searchbox.find('.search-field').focus();
5376		});
5377
5378		var $input 	= $searchbox.find('.search-field'),
5379			$span 	= $('<span></span>', {'class': 'input-highlight'});
5380
5381		$input.after($span);
5382
5383		$input.on('input', function(e) {
5384			$span.text(e.target.value);
5385		});
5386
5387	}; modalWindowSearch();
5388
5389	var accordionMenu = function() {
5390
5391		var $menu 			= $('.sidebar .widget_nav_menu, .footer-sidebar .widget_nav_menu'),
5392			$animationSpeed = 350,
5393			$arrowIcon 		= '',
5394			$arrowClass 	= 'sub-menu-arrow',
5395			$activeClass 	= 'sub-menu--opened',
5396			$arrow 			= $( '<span></span>', { 'class': $arrowClass, 'text': $arrowIcon });
5397
5398		$arrow.insertAfter($menu.find('.sub-menu').siblings());
5399
5400		$menu.on('click touch', '.' + $arrowClass, function() {
5401
5402			var $this 		= $(this),
5403				subMenu		= $this.next(),
5404				parentEl 	= $this.parent(),
5405				parentNext 	= parentEl.parent().find('.sub-menu');
5406
5407			if ( parentEl.hasClass($activeClass) ) {
5408
5409				parentEl.removeClass($activeClass);
5410				subMenu.slideUp($animationSpeed);
5411
5412			} else {
5413
5414				parentNext.parent().removeClass($activeClass);
5415				parentNext.slideUp($animationSpeed);
5416
5417				parentEl.toggleClass($activeClass);
5418				subMenu.slideToggle($animationSpeed);
5419
5420			}
5421
5422		});
5423
5424	}; accordionMenu();
5425
5426
5427    $(function () {
5428
5429        var $slider_arrows = {
5430            prevArrow: '<a heref="#" class="slider-nav-arrow prev-arrow"></a>',
5431            nextArrow: '<a heref="#" class="slider-nav-arrow next-arrow"></a>'
5432        };
5433
5434        $(function () {
5435            $('.posts-slider').slick(
5436                $.extend({
5437                    rows: 0,
5438                    dots: true,
5439                    autoplay: true,
5440                    autoplaySpeed: 5000,
5441                    adaptiveHeight: true
5442                }, $slider_arrows)
5443            );
5444
5445            $('.posts-slider .slick-dots').each(function () {
5446                var slider_image_count = $(this).children().length;
5447                $(this).append('<li class="slider-image-count">' + slider_image_count + '</li>');
5448            });
5449
5450        });
5451
5452        $('.widget-slider').slick(
5453            $.extend({
5454                rows: 0,
5455                autoplay: true,
5456                autoplaySpeed: 5000
5457            }, $slider_arrows)
5458        );
5459
5460        $('.featured-carousel').slick(
5461            $.extend({
5462                rows: 2,
5463                vertical: true,
5464                slidesToShow: 2,
5465                slidesToScroll: 2,
5466                infinite: false,
5467                verticalSwiping: true,
5468                appendArrows: $('.featured-posts .carousel-navigation'),
5469                responsive: [{
5470                    breakpoint: 750,
5471                    settings: {
5472                        vertical: false,
5473                        slidesToShow: 1,
5474                        slidesToScroll: 1,
5475                        infinite: true,
5476                        adaptiveHeight: true,
5477                        verticalSwiping: false
5478                    }
5479                }]
5480            }, $slider_arrows)
5481        );
5482
5483
5484        $(function () {
5485
5486            var $FullWidthCarousel = $('.full-width-media .gallery-carousel'),
5487                $AboveContentCarousel = $('.above-content-media .gallery-carousel');
5488
5489            var $GalleryCaption = $('.gallery-caption');
5490
5491            $FullWidthCarousel.slick(
5492                $.extend({
5493                    rows: 0,
5494                    dots: true,
5495                    variableWidth: true,
5496                    responsive: [{
5497                        breakpoint: 480,
5498                        settings: {
5499                            slidesToShow: 1,
5500                            variableWidth: false,
5501                            adaptiveHeight: true
5502                        }
5503                    }]
5504                }, $slider_arrows)
5505            );
5506
5507            $AboveContentCarousel.slick({
5508                rows: 0,
5509                arrows: false,
5510                adaptiveHeight: true,
5511                asNavFor: $GalleryCaption
5512            });
5513
5514            $GalleryCaption.slick(
5515                $.extend({
5516                    rows: 0,
5517                    dots: true,
5518                    fade: true,
5519                    adaptiveHeight: true,
5520                    asNavFor: $AboveContentCarousel
5521                }, $slider_arrows)
5522            );
5523
5524            $([$FullWidthCarousel, $GalleryCaption]).each(function () {
5525                var $slider_image_count = $(this).find('.slick-dots li').length;
5526                $(this).find('.slick-dots').append('<li class="slider-image-count">' + $slider_image_count + '</li>');
5527            });
5528
5529        });
5530
5531        $(function () {
5532            var $carousel = $('.related-posts').find('.carousel');
5533            $carousel.slick(
5534                $.extend({
5535                    rows: 0,
5536                    slidesToShow: 3,
5537                    adaptiveHeight: true,
5538                    responsive: [{
5539                        breakpoint: 750,
5540                        settings: {
5541                            slidesToShow: 1
5542                        }
5543                    }]
5544                }, $slider_arrows)
5545            );
5546        });
5547
5548        $(function () {
5549
5550            var $carousel = $('.widget_ti_site_authors .carousel');
5551            var n = $carousel.find('.item').length;
5552            if (n > 10) {
5553
5554                $carousel.slick(
5555                    $.extend({
5556                        rows: 2,
5557                        slidesToShow: 5,
5558                        variableWidth: true
5559                    }, $slider_arrows)
5560                );
5561
5562                $carousel.addClass('with-arrows');
5563
5564            }
5565
5566        });
5567
5568        $(function () {
5569
5570            var $carousel = $('.latest-reviews-carousel');
5571
5572            var $flag = $('#content').find('> .wrapper'),
5573                number_slides = 4;
5574            if ($flag.hasClass('with-sidebar')) {
5575                number_slides = 3;
5576            }
5577
5578            $carousel.on('init', function () {
5579                $(this).addClass('carousel-initialized');
5580            });
5581
5582            $carousel.slick({
5583                rows: 0,
5584                dots: true,
5585                arrows: false,
5586                infinite: false,
5587                slidesToShow: number_slides,
5588                slidesToScroll: number_slides,
5589                adaptiveHeight: true,
5590                responsive: [{
5591                    breakpoint: 960,
5592                    settings: {
5593                        slidesToShow: 2,
5594                        slidesToScroll: 2
5595                    }
5596                }, {
5597                    breakpoint: 750,
5598                    settings: {
5599                        slidesToShow: 1,
5600                        slidesToScroll: 1
5601                    }
5602                }]
5603            });
5604
5605        });
5606
5607        $(function LatestFormatSlider() {
5608
5609            var Container = $('.media-posts');
5610
5611            $(Container).each(function () {
5612
5613                var Slides = $(this).find('.media-post-slides'),
5614                    Thumbs = $(this).find('.media-post-thumbs'),
5615                    Details = $(this).find('.media-post-details'),
5616                    BgImage = $(this).find('.media-post-bg');
5617
5618                Slides.on('init', function () {
5619                    $(this).parents().eq(1).addClass('section-init');
5620                });
5621
5622                Slides.on('beforeChange', function () {
5623                    $(this).find('.media-content').empty();
5624                    $(this).find('.entry-image').removeClass('content-loading content-added');
5625                });
5626
5627                Slides.slick(
5628                    $.extend({
5629                        rows: 0,
5630                        slidesToShow: 1,
5631                        fade: true,
5632                        asNavFor: Thumbs.add(Details).add(BgImage),
5633                        responsive: [{
5634                            breakpoint: 750,
5635                            settings: {
5636                                fade: false,
5637                                adaptiveHeight: true
5638                            }
5639                        }]
5640                    }, $slider_arrows)
5641                );
5642
5643                Details.slick({
5644                    rows: 0,
5645                    slidesToShow: 1,
5646                    fade: true,
5647                    arrows: false,
5648                    asNavFor: Slides.add(Thumbs)
5649                });
5650
5651                Thumbs.slick({
5652                    rows: 0,
5653                    slidesToShow: 3,
5654                    slidesToScroll: 1,
5655                    centerMode: true,
5656                    centerPadding: 0,
5657                    focusOnSelect: true,
5658                    dots: true,
5659                    arrows: false,
5660                    asNavFor: Slides.add(Details).add(BgImage)
5661                });
5662
5663                BgImage.slick({
5664                    rows: 0,
5665                    slidesToShow: 1,
5666                    fade: true,
5667                    arrows: false,
5668                    asNavFor: Slides.add(Thumbs)
5669                });
5670
5671            });
5672
5673        });
5674
5675        $('.rating-labels').slick(
5676            $.extend({
5677                rows: 0,
5678                slidesToShow: 7,
5679                responsive: [{
5680                    breakpoint: 960,
5681                    settings: {
5682                        slidesToShow: 3
5683                    }
5684                }]
5685            }, $slider_arrows)
5686        );
5687
5688    }); 
5689
5690
5691    $(function () {
5692        var $m_container = $('.ltr .masonry-layout');
5693        $m_container.imagesLoaded(function () {
5694            $m_container.masonry({
5695                itemSelector: '.post-item'
5696            });
5697        });
5698    });
5699
5700    $(function () {
5701        var $m_container = $('.rtl .masonry-layout');
5702        $m_container.imagesLoaded(function () {
5703            $m_container.masonry({
5704                itemSelector: '.post-item',
5705                isOriginLeft: false
5706            });
5707        });
5708    });
5709
5710
5711    var tabContainers = $('.tab-box .tab-box-content > div');
5712    tabContainers.addClass('tab-hidden').filter(':first').addClass('tab-visible');
5713
5714    $('.tab-box .tab-box-button a').click(function (e) {
5715        e.preventDefault();
5716        tabContainers.addClass('tab-hidden').removeClass('tab-visible');
5717        tabContainers.filter(this.hash).addClass('tab-visible').removeClass('tab-hidden');
5718        $('.tab-box .tab-box-button a').removeClass('active');
5719        $(this).addClass('active');
5720    }).filter(':first').click();
5721
5722    $('.sitemap .row .trigger').click(function (e) {
5723        e.preventDefault();
5724        $(this).toggleClass('active').next().slideToggle('fast');
5725    });
5726
5727
5728    $('.share-more').click(function () {
5729        $(this).toggleClass('share-more-opened');
5730    });
5731
5732
5733    $('[href^="#comments"]').click(function (e) {
5734        e.preventDefault();
5735        $('html, body').animate({
5736            scrollTop: $('#comments').offset().top
5737        }, 700);
5738    });
5739
5740    $('.back-top').click(function (e) {
5741        e.preventDefault();
5742        $('html, body').animate({
5743            scrollTop: 0
5744        }, 'fast');
5745    });
5746
5747}); 

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.