PageSourceSearch

https://gomez.nl/nl/min/serve/g/ff44f507d54f2f4baf7a3d45e1e10ee9/lm/1775640708

js gomez.nl collected 2026-10-05 11:42:39 UTC 882,695 bytes, 16,920 lines download raw bytes

1Vue.config.devtools = true;
2var filters = new Vue({
3    el: '#search',
4    data: {
5        search: {
6            eco: '',
7            brand: '',
8            cat: '',
9            location: '',
10            color: '',
11            design:'',
12            fit: '',
13            price: '',
14            size: ''
15        },
16        changeButton: {
17            eco: 0,
18            brand: 0,
19            cat: 0,
20            location: 0,
21            color: 0,
22            design:0,
23            fit: 0,
24            price: 1,
25            size: 0,
26            sale: 0
27        },
28        showFilterButton: 0,
29        menus: {},
30        multibox: {
31            rows: []
32        },
33        searchMultibox: {
34            rows: []
35        },
36        products: {
37            totalItemCount: 0,
38            sort: {
39                0: 'Nowości'
40            },
41            showPagination: 0,
42            showSort: 0,
43            showProduct: 0
44        },
45        filterPrice: {
46           from: 0,
47           to: 0
48        },
49        checkedFilters: {},
50        banners: [],
51        swipers: [],
52        isHover: false,
53        isMobile: (typeof isMobile !== typeof undefined) ? isMobile : 0,
54        enableGallery: (typeof enableGallery !== typeof undefined) ? enableGallery : 0,
55        gallery: false,
56        lastDisplayedBannerIndex: -1,
57        testCount: 0,
58        salePriceCheckbox: 1,
59        sortSelected: '',
60        checkedButton: 0,
61        runningAjaxes: [],
62        multiboxCols: 0,
63        //activeFilters: new Vue.FilterList(),
64        activeFilters: {},
65        lastFilters: [],
66        openedFilter:'',
67        searchUrl: '',
68        rawUrl: '',
69        more: 0
70    },
71    computed: {
72        productsSort: function () {
73            return this.products.sort;
74        },
75        menusRows: function () {
76            return this.menus.rows;
77        }
78    },
79    watch:{
80        productsSort: function () {
81            this.$nextTick(function () {
82                try {$('#filters').parents('#search').find('.selectpicker2').selectpicker();}
83                catch (ex) {console.log(['no selectpicker plugin']);}
84            });
85        },
86        menusRows: function () {
87            this.$nextTick(function () {
88                try {
89                    // $('ul.filter .collapse')
90                    //     .on('show.bs.collapse',function () {
91                    //         console.log($(this).parents('ul.filter').eq(0).addClass('collapse-open'));
92                    //     })
93                    //     .on('hide.bs.collapse',function () {
94                    //         $(this).parents('ul.filter').eq(0).removeClass('collapse-open');
95                    //     });
96                }
97                catch (ex) {console.log(['no selectpicker plugin']);}
98            });
99        }
100    },
101    mounted: function() {
102        var _self = this;
103        _self.getMenus();
104        _self.checkSale();
105
106        $('.background-filter').show();
107        $('.loader-filter').show();
108
109        window.onpopstate = function(event) {
110            // this.priceRange(this.menus.price);
111            this.$nextTick(function(){
112                this.setUrl( window.location.search.substr(1) , false, true );
113            });
114            return;
115        }.bind(this);
116
117        /*$(window).scroll(function() {
118            if ( ( $(window).scrollTop() > $(window).height() * 1.8 ) && ( $(window).scrollTop() < $(window).height() * 1.85 ) ) {
119                _self.getMoreProducts();
120            }
121        });*/
122
123        $('#filters form').on( 'submit', function (event) {
124            event.preventDefault();
125            _self.sendForm();
126        });
127
128        $(document).click( function (event) {
129
130            var clickover = $(event.target);
131            var _openedShow = $(".collapse").hasClass("show");
132            var _openedMultiShow = $(".multibox").hasClass("show");
133            if($(event.target).parents('.collapse.open,.multibox.show').length) return;
134
135            if($('#filters .singlebox div[id].collapse.open, #filters .multibox.show').length && this.filtersChaged() && this.openedFilter.length)
136            {
137                this.closeCollapse(this.openedFilter);
138            }
139
140            $('.collapse.open').collapse('hide');
141            $(".multibox.show").each(function(){
142                $(this).removeClass('show').addClass('d-none').siblings().css('display','block');
143            });
144        }
145        .bind(this)
146        );
147
148        var filtersForm = $('#filters');
149        filtersForm.on('shown.bs.collapse', '.collapse', function () {
150            $(this).find('.scroll-600').css({
151                'overflow': 'visible',
152                'padding-right': '14px'
153            }).find('.nano').css({
154                'margin-right': '-10px',
155                'padding-right': '10px'
156            }).nanoScroller({alwaysVisible:true}).find('.nano-content').css('padding-right','10px');
157        }).on('show.bs.collapse reinit.nano','.collapse', function () {
158            var sixH = $(this).find('.scroll-600');
159            // wyłączone - zgłoszone przyz klienta jako błąd
160            // sixH.css({
161            //     'height': (window.innerHeight -  60) + 'px'
162            // });
163            setTimeout(function () { sixH.height(sixH.find('.nano-content > *').height() + 30); },0);
164        }).on('shown.bs.collapse hidden.bs.collapse', '.filter', '.collapse', function () {
165            $(this).parents('.scroll-600').parents('.collapse').eq(0).trigger('reinit.nano');
166        }).on('show.bs.collapse ajax.end', 'form, .collapse', function () {
167            var slider = this.filters.find('.price-slider').filter(function() {return $(this).data('ionRangeSlider');}).data('ionRangeSlider');
168            // console.log(['range baaam!',slider,{
169            //     'min':    this.vue.menus.price.max.from,
170            //     'max':    this.vue.menus.price.max.to,
171            //     'from':   this.vue.menus.price.start.from,
172            //     'to':     this.vue.menus.price.start.to
173            // }]);
174            if(slider) slider.update({
175                'min':    this.vue.menus.price.max.from,
176                'max':    this.vue.menus.price.max.to,
177                'from':   this.vue.menus.price.start.from,
178                'to':     this.vue.menus.price.start.to
179            });
180        }.bind({'vue':this,'filters':filtersForm}));
181
182        var imagesToLoad = [];
183        var infoResponse = [];
184        var mouseEnterXhrs;
185
186        var selectWidth;
187
188        // $( 'body' ).on('click', '.category-product-absolute [data-target=color]', function( e ) {
189
190        $( 'body' ).on('mouseenter', '.category-product-absolute [data-target=color]', function( e ) {
191            e.preventDefault();
192
193            var id = $(this).data().id;
194            var product_box = $(this).closest(".relative-category-product");
195            var product = this;
196            // product_box.find('[data-target=add-1]').attr('data-id','');
197            var activeColorBox = product_box.find('.category-product-absolute .color-box.active');
198            //console.log(activeColorBox)
199            if (!product_box.data('original')) {
200                product_box.data('original', {
201                    src: product_box.find('.category-product-absolute .product-image .image img').attr('src'),
202                    href: product_box.find('.category-product-absolute .product-image .url').attr('href'),
203                    label: product_box.find('.category-product-absolute .product-label').html(),
204                    price: product_box.find('.category-product-absolute .product-price').html(),
205                    sizes: product_box.find('.sizes').html(),
206                    activeColor: activeColorBox, // tylko kolor
207                    product: product_box.find('.category-product-absolute .color-box.active').closest('[data-target=color]').get(0)
208                });
209            }
210
211            if(imagesToLoad[id]) { imagesToLoad[id].onload = function () {}; }
212
213            var image = $($(this).data('image'));
214
215            var img = new Image();
216            var imgSource = image.attr('src') || image.find('img[src]').eq(0).attr('src');
217            img.onload = function () {
218                $(this.product_box).find('.category-product-absolute .product-image .image').find('img').attr('src', imgSource ); //DISABLED
219                //$(this.product_box).find(".category-product-absolute .product-image .image").html(this.image); //DISABLED
220                console.log( 'onload', imgSource, $(this.product_box).find('.category-product-absolute .product-image .image').find('img') );
221            }
222            .bind({'product_box':product_box,'image':image});
223
224            img.src = imgSource;
225
226            imagesToLoad[id] = img;
227
228            if(img.complete) {
229                img.onload();
230            }
231
232            //$(product_box).find(".category-product-absolute .product-image .image").html($(this).data("image"));
233            $(product_box).find('.category-product-absolute .product-image .url').attr('href', $(this).attr('href'));
234            $(product_box).find('.category-product-absolute .product-label').html($(this).data('label'));
235            $(product_box).find('.category-product-absolute .product-price').html($(this).data('price'));
236
237            $(product_box).find(".color-box").removeClass("active");
238            $(this).find(".color-box").addClass("active");
239
240            _self.showButtons( product );
241            var url = _self.getUrl();
242            url+= !_self.isLogged() ? '/info/id/' : '/rawInfo/id/';
243
244            try {mouseEnterXhrs.clear();} catch (ex) {}
245
246            mouseEnterXhrs = $.ajax({
247                url : url + $(this).data("id") + '/mod/sizes',
248                type : "GET",
249                // data : { mod: "sizes" },
250                dataType : "html",
251                success : function( data ) {
252                    var d = $(data).find('select.sizes');
253                    data = d.length ? d : data;
254                    $(product_box).find(".sizes").html( data );
255                    // var wrapper = $(product_box).find(".sizes + .btn").parent();
256                    // wrapper.find(".sizes").selectpicker('destroy');
257                    // wrapper.find(".sizes").remove();
258                    // wrapper.prepend(data);
259                    _self.showButtons( product );
260                    // $(product_box).find('.selectpicker').addClass('sizes').selectpicker();
261                }.bind(this)
262            });
263        })
264        .on('mouseleave', '.relative-category-product', function( e ) {
265            var product_box = $(this);
266
267            var original = product_box.data('original');
268            if (original) {
269                product_box.find('.category-product-absolute .product-image .image img').attr('src', original.src);
270                product_box.find('.category-product-absolute .product-image .url').attr('href', original.href);
271                product_box.find('.category-product-absolute .product-label').html(original.label);
272                product_box.find('.category-product-absolute .product-price').html(original.price);
273                product_box.find('.sizes').html(original.sizes);
274                console.log(JSON.stringify(original, null, 2));
275
276                product_box.find(".color-box").removeClass("active");
277                if (original.activeColor) {
278                    original.activeColor.addClass("active");
279
280                }
281                if (original.product) {
282                    _self.showButtons(original.product);
283                }
284
285            }
286
287            product_box.removeData('original');
288        })
289        .on("click", ".category-product-absolute [data-target=size]", function( e ) {
290
291            if( $(this).closest("a").hasClass( "no-javascript" ) ) return false;
292            e.preventDefault();
293
294            var $pk = $( this ).data( "id" );
295
296            var product_box = $(this).closest(".relative-category-product");
297            var product = this;
298
299            $(product_box).find(".size-box").removeClass("active");
300            $(this).addClass("active");
301
302            if( $(this).data("price").length )
303                $(product_box).find(".category-product-absolute .product-price").html($(this).data("price"));
304
305            $(product_box).find("[data-target=add-1]").data( "id", $pk );
306            $(product_box).find("[data-target=add-2]").data( "id", $pk );
307
308            _self.showButtons( product );
309        })
310        .on('loaded.bs.select', '#search #products .sizes.bootstrap-select',function (ev) {
311            var wrapper = $(this);
312            var button = wrapper.find('.dropdown-toggle');
313            selectWidth = button.css('width');
314            button.css({
315                'flex-basis': selectWidth,
316                'justify-content': 'space-between',
317                'min-wdth': selectWidth
318            });
319        })
320        .on('changed.bs.select','#search #products .sizes.bootstrap-select',function (ev) {
321            var wrapper = $(this);
322            var button = wrapper.find('.dropdown-toggle');
323            button.css({
324                'flex-basis': selectWidth,
325                'justify-content': 'space-between',
326                'min-wdth': selectWidth
327            });
328        } )
329        .on('change','#filters input[type="checkbox"]', function () {
330            if(this.checked) $(this).parents('label').eq(0).siblings('.collapse').collapse('show');
331        });
332
333        $( 'body' ).on( "click", "[data-target=add-1]" , function( e ) {
334            if(!website.config.baseUrl) return false;
335            e.preventDefault();
336
337            website.basketAdd( this, e );
338            return false;
339
340        } ).one('menus.run.once', function (e,data) {
341            if(!data) return;
342            var paths = [];
343            for (var i = 0, keys = Object.keys(data), key; key = keys[i]; i++ )
344            {
345                if(data[key].rows)
346                    paths.push(this.getPaths(data[key].rows, 1, 'checked', 'submenu','filterPath'));
347            }
348            for(var f = 0, item; item = paths[f]; f++)
349            {
350                if(item.length)
351                {
352                    for(var k = 0, key, keys = Object.keys(item); key = keys[k]; k++)
353                    {
354                        item[key].expanded = 1;
355                    }
356                }
357            }
358        }.bind(this));
359
360        $( "[data-target=add-2]" ).live( "click", function( e ) {
361            if(!website.config.baseUrl) return false;
362            e.preventDefault();
363
364            website.wishlistAdd( this, e );
365            return false;
366
367        } );
368
369        $( "body" ).on("mouseleave",'.category-product-wrapper', function () {
370            filters.onProductMouseLeave.call(this);
371        } );
372
373        function alertMsg( $data ) { setTimeout( function() { this.fadeOut( "slow" ); }.bind( $( "#eCms-alert" ).css( { display : "none" } ).html( $data ).fadeIn( "slow" ) ), 5000 ); }
374
375        function reloadBasket() {
376            if(!website.config.baseUrl) return false;
377            $.ajax( {
378                url         : website.config.baseUrl + '/' + website.config.pathLang + "/basket/ajaxRequest",
379                data        : { ajax : { action : "reload" } },
380                type        : "POST",
381                dataType    : "html",
382                success     : function( data ) { $( "div[data-target=reload]" ).html( data ); },
383                complete    : function( data ) {  }
384            } );
385        }
386    },
387    methods: {
388        handlePatchClick: function(event) {
389            const el = event.currentTarget;
390
391            const translated = el.dataset.alert || 'Kod został skopiowany!';
392
393            const strong = el.querySelector('strong');
394            if (strong) {
395                const code = strong.innerText;
396                website.copyToClipboard?.(code);
397
398                const $el = $("#eCms-alert").css({ display: "none" }).html(`<div class="alert alert-success"><a class="close" data-dismiss="alert">×</a>${translated}</div>`).fadeIn("slow");
399                setTimeout(() => {
400                    $el.fadeOut("slow");
401                }, 5000);
402            }
403        },
404        showMore: function(){
405            var menu = this.menus;
406            var _self = this;
407
408            $.each(menu, function(key, val) {
409                if( menu[key].hide ) {
410                    _self.more = 2;
411                    if( menu[key].hide!=2 ) menu[key].hide = 0;
412                }
413            });
414        },
415        hideMore: function(){
416            var menu = this.menus;
417            var _self = this;
418            var counter = 0;
419
420            if( $("#filters-mobile").length ) return;
421
422            $.each(menu, function(key, val) {
423                counter++;
424                if( Object.keys(menu).length > 10 && counter >= 10 ) {
425                    _self.more = 1;
426                    if( menu[key].hide!=2 ) menu[key].hide = 1;
427                }
428            });
429        },
430        onProductClick: function(ev, productIndex){
431            history.replaceState({productIndex: productIndex}, null);
432        },
433        onProductMouseLeave: function()
434        {
435            $(this).parents('.mouse-over').removeClass('mouse-over');
436            // var parent = $(this).find(".color-box.default-active").parent();
437            $(this).find(".category-product-absolute .product-image .image img").attr( 'src', $(this).find('.product-image[data-hover-img]').attr('data-hover-img'));
438        },
439        emitSelectEvent: function (el) {
440
441            if(this.$refs.selectNew)
442            {
443                var event = document.createEvent('MouseEvents');
444                event.initMouseEvent('mousedown', true, true, window);
445                this.$refs.selectNew.dispatchEvent(event);
446            }
447        },
448        rows: function (list,split,index,flat,disregardFilter) {
449
450            if(!list || !list.length) return [];
451            this.multiboxCols = this.multiboxCols || this.multiColumnCount();
452            var ret = [];
453            for(var i = 0, item; item = list[i];i++ )
454            {
455                if(item.display && ( item.filter || disregardFilter ))
456                {
457                    ret.push(item);
458                    if(flat && item.submenu)
459                    {
460                        for(var j = 0, child; child = item.submenu[j]; j++ )
461                        {
462                            if(child.display && ( child.filter || disregardFilter ) )
463                            {
464                                ret.push(child);
465                            }
466                        }
467                    }
468                }
469            }
470            if(split !== undefined)
471            {
472                var ret2 = [], len = Math.ceil( ret.length / this.multiboxCols );
473                for(var l = 0; l < this.multiboxCols; l++ )
474                {
475                    ret2.push(ret.slice(l*len,(l*len) + len));
476                }
477                ret = ret2[index];
478            }
479            return ret;
480        },
481        getClassShowFilter: function() {
482            return 'd-none';
483        },
484        multiColumnCount: function(){ return window.innerWidth < 1024 ? 2 : 4; },
485        checkEmpty: function( el ){
486
487            if( !el['submenu'] ) return 0;
488
489            var displayed = this.filterArray( el.submenu, 1, 'display', 'submenu' );
490            var checked = this.filterArray( el.submenu, 1, 'checked', 'submenu' );
491
492            return displayed.length + checked.length;
493        },
494        checkSale: function() {
495            var sale = document.getElementById('sale');
496
497            if(sale) {
498                if(sale.value)
499                {
500                    this.salePriceCheckbox = 0;
501                }
502            }
503        },
504        getUrl: function() {
505            var url = $('#filters form').attr('data-action');
506            return url;
507        },
508        getPageUrl: function( page ) {
509            var url = this.searchUrl.length ? this.searchUrl : window.location.href;
510            url = url.replace(/[\?\&]p=[0-9]+/, '');
511
512            if( page>1 )
513                url =  url + ( url.indexOf('?')>0 ? '&' : '?' ) + 'p='+page;
514
515            return url;
516        },
517        getUrlSuffix: function() {
518            url = '';
519            var logged = $('#filters form').attr('data-logged');
520            if( logged=='1' ) url+= '?user';
521
522            return url;
523        },
524        isLogged: function() {
525
526            var logged = $('#filters form').attr('data-logged');
527
528            if( logged=='1' ) return true;
529            else return false;
530        },
531        countSelected: function ( index ) {
532            return this.changeButton[index]
533        },
534        getUrlImage: function ( base, path, width, height, action ) {
535            var pathImage = path.split(".");
536            return base + "/assets/photo" + pathImage[0] + "-" + action + "-" + width + "-" + height + "." + pathImage[1];
537        },
538        round: function(n, k)
539        {
540            var factor = Math.pow(10, k);
541            return Math.round(n*factor)/factor;
542        },
543        clearString: function(text)
544        {
545            return text.replace(/[\W_]+/g," ").trim(" ").replaceAll(" ", "-");
546        },
547        checkSelected: function (index) {
548            var selected = this.changeButton[index];
549
550            if(selected == 0 || index == "price")
551                return false;
552            else
553                return true;
554        },
555        showButtons: function ( el ) {
556            var product_box = $(el).closest(".relative-category-product");
557            if( $(product_box).find(".colors .active").length < 1 || $(product_box).find(".sizes .active").length < 1 )
558            {
559                //alertMsg( "<div class=\"alert alert-danger\">'.Yii::t( 'web/shop', 'Choose a size' ).'</div>" );
560                //return false;
561                $( product_box ).find( ".buttons" ).removeClass( "active" );
562            }
563            else
564            {
565                $( product_box ).find( "[data-target=add-1]" ).attr( "href", $(el).attr("href") );
566                $( product_box ).find( "[data-target=add-2]" ).attr( "href", $(el).attr("href").replace("basket","wishlist") );
567                $( product_box ).find( "[data-target=add-1]" ).data( "id", $(el).data("id") );
568                $( product_box ).find( "[data-target=add-2]" ).data( "id", $(el).data("id") );
569
570                $( product_box ).find( ".buttons" ).addClass( "active" );
571            }
572        },
573        filterArray: function(arr, val, key, childrenKey  ) {
574            var matches = [], keys = Object.keys(arr);
575            if (!keys.length) return matches;
576
577            for (var i = 0, item; item = arr[keys[i]]; i++ )
578            {
579                if(item[key] !== undefined && ( item[key] === val || ( ( typeof item[key] === 'string' || item[key] instanceof String ) && ( typeof val === 'string' || val instanceof String ) && val.indexOf('%') == 0 && item[key].match( new RegExp( val.substr(1,val.length-1), 'i' ) ) ) ) )
580                {
581                    matches.push(item);
582                }
583                if(item[childrenKey])
584                {
585                    var recItems = this.filterArray(item[childrenKey],val,key,childrenKey);
586                    for(var j = 0, rec; rec = recItems[j]; j++)
587                    {
588                        matches.push(rec)
589                    }
590                }
591            }
592            return matches;
593        },
594        getPaths: function(arr, val, key, childrenKey, pathKey){
595            var ret = [];
596            function _getPaths(a,v,k,c,r,p) /// arr:[],val,key,childrenKey,return:[],parent:arr
597            {
598                if(!r) r = [];
599                var keys = Object.keys(a);
600                if (keys.length)
601                {
602
603                    if(p) r.push(p);
604                    for (var i = 0, item; item = a[keys[i]]; i++ )
605                    {
606                        if(item[k] !== undefined && ( item[k] === v || ( ( typeof item[k] === 'string' || item[k] instanceof String ) && ( typeof v === 'string' || v instanceof String ) && v.indexOf('%') == 0 && item[k].match( new RegExp( v.substr(1,v.length-1), 'i' ) ) ) ) )
607                        {
608                            item[(pathKey || 'path')] = [];
609                            for(var f = 0, el; el = r[f]; f++) item[(pathKey || 'path')].push(el);
610                            ret.push(item);
611                        }
612
613                        if(item[c])
614                        {
615                            _getPaths(item[c],v,k,c,r,item);
616                        }
617
618                    }
619                    if(p) r.pop();
620                }
621
622            }
623            _getPaths(arr, val, key, childrenKey);
624            return ret;
625        },
626
627        /**
628         * Sets value inside the object tree
629         * @param {Object} rootObject Root element - must be a checkbox/rows element
630         * @param {any} val Any value will be set at given property name in the 'key' parameter
631         * @param {string} key Name
632         * @param {string} childrenKey Property name of children array; Used for recursive lookup
633         */
634        setValue: function(rootObject,val,key,childrenKey){
635            var keys = Object.keys(rootObject);
636
637            if(keys && keys.length)
638            {
639                for(var i = 0, item; item = keys[i]; i++ )
640                {
641                    if(item === key)
642                    {
643                        rootObject[item] = val;
644                    }
645
646                    if(item === childrenKey)
647                    {
648                        var childKeys = Object.keys(rootObject[childrenKey]);
649                        for(var j = 0, child; child = rootObject[childrenKey][childKeys[j]]; j++)
650                        {
651                            this.setValue(child,val,key,childrenKey);
652                        }
653                    }
654                }
655            }
656
657        },
658        filter: function(menuName, noReset) {
659            var search = this.search[menuName];
660
661            var arr = this.menus[menuName].rows;
662
663            if((typeof search === 'string' || search instanceof String) && search.length)
664            {
665                for(var i = 0, elem, keys = Object.keys(arr); elem = arr[keys[i]]; i++)
666                {
667                    this.setValue( elem, 0, 'filter', 'submenu' );
668                    this.setValue( elem, 0, 'expanded', 'submenu' );
669                }
670                var items = this.getPaths( arr, "%.*" + search, 'name', 'submenu', 'filterPath' );
671
672                for(var i = 0,item; item = items[i]; i++)
673                {
674                    item.expanded = 1;
675                    item.filter = 1;
676                    for(var um = 0, path; path = item.filterPath[um]; um++)
677                    {
678                        path.expanded = 1;
679                        path.filter = 1;
680                    }
681                }
682            }
683            else if( noReset!=true )
684            {
685                for(var am = 0, elem, keys = Object.keys(arr); elem = arr[keys[am]]; am++)
686                {
687                    this.setValue( elem, 0, 'expanded', 'submenu' );
688                    this.setValue( elem, 1, 'filter', 'submenu' );
689                }
690            }
691
692            this.$nextTick(function() {
693                $('#' + menuName + '.collapse').trigger('reinit.nano').find('.collapse').eq(0).trigger('shown.bs.collapse');
694            });
695        },
696        changeHandler: function (event) {
697            this[event.target.dataset.inputMethod](event.target.dataset.inputName);
698        },
699        filterMultibox: function(menuName) {
700
701            var search = this.search[menuName];
702
703            var pattern = new RegExp( ".*" + search,"i" );
704            var arr = this.menus[menuName].rows;
705
706            $.each(arr, function (key, val) {
707                val.showMultibox = 0;
708                if(val.submenu) {
709                    $.each(val.submenu, function (key1, val1) {
710                        val1.showMultibox = 0;
711                    });
712                }
713            });
714
715            if(search.length > 0) {
716                $.each(arr, function (key, val) {
717                    if(pattern.exec(val.name) == null) {
718
719                    } else {
720                        val.showMultibox = 1;
721                    }
722
723                    if(val.submenu) {
724                        $.each(val.submenu, function (key1, val1) {
725
726                            if(pattern.exec(val1.name) == null) {
727                            } else {
728                                val.showMultibox = 1;
729                                val.expanded = 1;
730                                val1.showMultibox = 1;
731                            }
732                        });
733                    }
734                });
735            } else {
736                $.each(arr, function (key, val) {
737                    val.showMultibox = 0;
738                    //val.expanded = 0;
739                    if(val.submenu) {
740                        $.each(val.submenu, function (key2, val2) {
741                            val2.showMultibox = 0;
742                        });
743                    }
744                });
745            }
746
747        },
748        checked: function (menuName, id, attr) {
749
750            // console.log( ['menuName',menuName] );
751            var _self = this;
752            var menu = this.menus[menuName].rows;
753
754            //var elements = this.filterArray( menu, id, 'id', 'submenu' );
755            var elements = this.getPaths( menu, id, 'id', 'submenu' );
756
757            for(var i = 0, item; item = elements[i]; i++ )
758            {
759                item.checked = item.checked ? 0 : 1;
760                item.selectedChild = item.checked;
761
762                if( menuName!='cat' ) { //DONT check childs for CATEGORIES
763                    this.setValue(item, item.checked, 'checked', 'submenu');
764
765                    if( ( item.checked || menuName=='brand' ) && item.related && item.related.length ){
766                        var related = item.related.split(',');
767                        $.each(related, function (keyRel,keVal) {
768                            var rel = _self.filterArray(menu, parseInt(keVal), 'id');
769
770                            if( rel.length && rel[0].display ) rel[0].checked = item.checked;
771                        });
772                    }
773                }
774
775                var path = item.path;
776
777                $.each(path, function (key2,val2) {
778                    var checked = _self.filterArray( val2.submenu, 1, 'checked', 'submenu' );
779                    val2.checked = 0;
780                    val2.selectedChild = checked.length;
781                });
782            }
783
784            var checked = this.filterArray( menu, 1, 'checked', 'submenu' );
785
786            this.changeButton[menuName] = checked.length;
787            this.countSelectedButton();
788
789            this.getActiveFilters();
790
791            return;
792        },
793        subChecked: function (menuName, mainId, id) {
794
795            this.checked( menuName, id );
796
797            return;
798        },
799
800        countSelectedButton: function (){
801            var changeButton = this.changeButton;
802            var countSelected = 0;
803
804            this.checkedButton = countSelected
805
806            for (var prop in changeButton) {
807                if ( changeButton.hasOwnProperty(prop) ) {
808                    countSelected += changeButton[prop];
809                }
810            }
811
812            this.checkedButton = countSelected;
813        },
814        closeCollapse: function(index) {
815            var _self = this;
816            $('#' + index).collapse('hide');
817
818            this.saveCollapse(index);
819            this.showHeader(index);
820        },
821
822        saveCollapse: function(index) {
823            console.log( ["saveCollapse", index] );
824            if(index !== "price")
825            {
826                var prices = $('[data-target="price-range"]');
827                // prices.prop('value',0);
828                // prices.eq(1).prop('value',this.menus.price.max.to);
829            }
830            if(index === "limit") {
831                this.savePagination(index);
832            }
833            this.$nextTick(function () {
834                var formSerialize = this.serializeForm();
835                this.setUrl(formSerialize, false, undefined, index == 'page');
836                this.closeAllCollapse();
837
838                console.log( ["index", index] );
839                // if( index == 'page')
840                // {
841                $([document.documentElement, document.body]).animate({
842                    scrollTop: $("#filters").offset().top - 150
843                    //scrollTop: $(".pagination-top").last().offset().top-10
844                }, 1000);
845                // }
846            });
847        },
848
849        savePagination: function(index, el) {
850            var value = this.$data.products && this.$data.products.pageSize || 29;
851            var val;
852            val = parseInt($( ".pagination-top [data-target="+index+"]" ).val() || 0);
853            if (val && val !== value) {
854                $( ".pagination-top [data-target="+index+"]" ).selectpicker( 'val', value );
855            }
856
857            val = parseInt($( ".pagination-bottom [data-target="+index+"]" ).val() || 0);
858            if (val && val !== value) {
859                $( ".pagination-bottom [data-target="+index+"]" ).selectpicker( 'val', value );
860            }
861
862            val = parseInt($( ".pagination-mobile [data-target="+index+"]" ).val() || 0);
863            if (val && val !== value) {
864                $( ".pagination-mobile [data-target="+index+"]" ).selectpicker( 'val', value );
865            }
866
867            return;
868            if( $( ".pagination-mobile" ).length )
869                var val = $( ".pagination-mobile [data-target="+index+"]" ).val();
870            else
871                var val = $( ".pagination-bottom [data-target="+index+"]" ).val();
872
873            $( ".pagination-top [data-target="+index+"]" ).selectpicker( 'val', val );
874            // $( ".pagination-top [data-target="+index+"]" ).val( $( ".pagination-bottom [data-target="+index+"]" ).val() );
875            // this.saveCollapse( index );
876        },
877
878
879        sendForm: function() {
880            var formSerialize = this.serializeForm();
881            this.getProducts(formSerialize);
882            this.getActiveMenus(formSerialize);
883        },
884
885        serializeForm: function() {
886            var form = $( '#filters form' );
887
888            var ret = form.serialize();
889            console.log( 'serialize', ret );
890
891            var price = form.find('[data-target="price-range"]');
892            if( this.menus && this.menus.price && !(this.menus.price.max.from != this.menus.price.start.from || this.menus.price.max.to != this.menus.price.start.to ) )
893            {
894                ret = ret.replace( /((&?price.+?=)(\d{0,20}))((&?price.+?=)(\d{0,20}))/gm, '' );
895            }
896
897            return ret;
898        },
899        expande: function(menuName, id, multi, toSet) {
900            var menu = this.menus[menuName].rows;
901            var ex = 0;
902            for(var i=0; i<menu.length; i++) {
903                if(menu[i].id == id) {
904                    if(menu[i].expanded == 1) {
905                        menu[i].expanded = 0;
906                    } else {
907                        menu[i].expanded = 1;
908                        ex = 1;
909                    }
910
911                    if(toSet !== undefined) ex = menu[i].expanded = toSet;
912                }
913            }
914
915            return ex;
916        },
917        showHeader: function (index) {
918            // index == menus >
919            $('.header-' + index).css('display', 'block');
920        },
921        hideHeader: function (index) {
922            // index == menus >
923            this.openedFilter = index;
924
925            this.closeAllCollapse();
926
927            if(this.menus[index].multiBox) {
928                this.multibox.rows = this.menus[index];
929                this.multibox.rows.index = index;
930
931                // $('.singlebox').hide();
932                $('.multibox').removeClass('d-none');
933
934                setTimeout(function() {
935                    $('.multibox').addClass('show open').trigger('multibox.show');
936                }, 1 );
937            }
938
939            this.filter(index, true);
940
941            // if(window.innerWidth > 1024)
942            // {
943            //     this.$nextTick(function() {
944            //
945            //         $('.input-' + index).show().focus().trigger('input.focus');
946            //
947            //     }, 10 );
948            // }
949
950            setTimeout(function() {
951                $('.header-' + index).css('display', 'none');
952            }, 150 );
953
954        },
955        showAll: function (index) {
956
957            this.closeCollapse(index);
958            // $('.singlebox').show();
959            $('.multibox').addClass('d-none').trigger('multibox.hide');
960        },
961        setActive: function() {
962
963        },
964        setChecked: function() {
965
966        },
967        getFitersInUrl: function() {
968            var queryString = window.location.search.slice(1);
969
970            if( this.rawUrl && this.rawUrl.length>0 ){ //SEO FRIENDLY
971                queryString = this.rawUrl.substr( this.rawUrl.indexOf('?')+1 );
972                console.log( ['queryString',queryString] );
973            }
974
975            var obj = {};
976
977            if (queryString) {
978                queryString = queryString.split('#')[0];
979                var arr = queryString.split('&');
980
981                for (var i=0; i<arr.length; i++) {
982                    var a;
983
984                    if(arr[i].search("sort=") == 0 ) { continue; }
985                    if(arr[i].search("limit=") == 0) { continue; }
986                    if(arr[i].search("p=") == 0) { continue; }
987
988
989                    if(arr[i].search("%5B%5D=") > 0 ) {
990                        a = arr[i].split('%5B%5D=');
991                    } else {
992                        a = arr[i].split('[]=');
993                    }
994
995                    var paramNum = undefined;
996                    var paramName = a[0].replace(/\[\d*\]/, function(v) {
997                        paramNum = v.slice(1,-1);
998                        return '';
999                    });
1000
1001                    var paramValue = typeof(a[1])==='undefined' ? true : a[1];
1002
1003                    if (paramName != 'name=' && typeof paramValue === "string")
1004                    {
1005                        paramName = paramName.replace('%5B','[').replace('%5D',']').toLowerCase();
1006                        paramValue = paramValue.toLowerCase();
1007                        if (obj[paramName]) {
1008                            if (typeof obj[paramName] === 'string') {
1009                                obj[paramName] = [obj[paramName]];
1010                            }
1011                            if (typeof paramNum === 'undefined') {
1012                                obj[paramName].push(paramValue);
1013                            }
1014                            else {
1015                                obj[paramName][paramNum] = paramValue;
1016                            }
1017                        }
1018                        else {
1019                            obj[paramName] = [paramValue];
1020                        }
1021                    }
1022
1023                    if(arr[i].search("price_sale=1") == 0)
1024                    {
1025                        obj['price_sale'] = "1";
1026                    }
1027                }
1028            }
1029
1030            return obj;
1031        },
1032        isEmptyObj: function (obj) {
1033            if (obj == null) return true;
1034            if (obj.length > 0)    return false;
1035            if (obj.length === 0)  return true;
1036            if (typeof obj !== "object") return true;
1037            for (var key in obj) {
1038                if (hasOwnProperty.call(obj, key)) return false;
1039            }
1040
1041            return true;
1042        },
1043        setInGet: function() {
1044
1045            var obj = this.getFitersInUrl();
1046            var _self = this;
1047
1048            var href = window.location.href;
1049            if( this.rawUrl && this.rawUrl.length > 0 ) {
1050                href = this.rawUrl;
1051                console.log( ['rawUrl', this.rawUrl ]);
1052            }
1053
1054            if( $('#cid').length && $('#cid').val() && obj.cat == undefined && href.search('search') < 0 && href.search('group') < 0) {
1055                obj.cat = $('#cid').val()
1056            }
1057
1058            if( this.isEmptyObj(obj) ) {
1059                _self.showFilterButton = 0;
1060            }
1061
1062            _self.showFilterButton = 0;
1063            if( _self.menus && _self.menus.price )
1064            {
1065                _self.menus.price.price_sale.show = 0;
1066                _self.menus.price.price_sale.checked = 0;
1067            }
1068
1069            for (var v in this.changeButton) { this.changeButton[v] = 0; }
1070            this.changeButton.price = 1;
1071
1072			if( _self.menus ) {
1073                $.each( _self.menus, function(key, val) {
1074
1075                    var menu = _self.menus[key].rows;
1076                    if( menu == undefined ) return;
1077
1078                    if( !Array.isArray( menu ) ) menu = [menu];
1079
1080                    /* RESET FILTERS */
1081                    var checked = _self.filterArray( menu, 1, 'checked', 'submenu' );
1082                    var show = _self.filterArray( menu, 1, 'show', 'submenu' );
1083                    var selectedChild = _self.filterArray( menu, 1, 'selectedChild', 'submenu' );
1084
1085                    $.each( checked , function (k,el) { el.checked = 0; });
1086                    $.each( show , function (k,el) { el.show = 0; });
1087                    $.each( selectedChild , function (k,el) { el.selectedChild = 0; });
1088
1089                    /* SET FILTERS */
1090                    if (obj[key] != undefined) {
1091
1092                        if( _self.menus[key].multiBox ) { //MULTIBOX FIX
1093                            _self.multibox.rows = _self.menus[key];
1094                            _self.multibox.rows.index = key;
1095                        }
1096
1097                        var selected = $.isArray(obj[key]) ? obj[key] : [obj[key]];
1098
1099                        $.each( selected, function (k, id) {
1100
1101                            var itemList = _self.getPaths( menu, id.indexOf('all')>-1 ? id : parseInt(id), 'id', 'submenu' );
1102                            var item = $.isArray(itemList) ? itemList[0] : undefined;
1103
1104                            if( item == undefined ) return;
1105
1106                            item.checked = 1;
1107                            item.show = 1;
1108                            item.selectedChild = item.checked;
1109
1110                            var path = item.path;
1111                            $.each(path, function (key2,val2) {
1112                                var checked = _self.filterArray( val2.submenu, 1, 'checked', 'submenu' );
1113                                //val2.checked = 0;
1114                                val2.expanded = 1;
1115                                val2.selectedChild = checked.length;
1116                            });
1117
1118                        });
1119                    }
1120
1121                    var checked = _self.filterArray( menu, 1, 'checked', 'submenu' );
1122                    _self.changeButton[key] = checked.length;
1123                });
1124            }
1125
1126
1127            if (obj['price'] != undefined) {
1128                if(obj['price'][0] != undefined){
1129                    _self.menus.price.start.from = parseInt(obj['price'][0]) || 0;
1130                    _self.filterPrice.from = _self.menus.price.start.from < _self.menus.price.max.from ? _self.menus.price.max.from : _self.menus.price.start.from;
1131                }
1132                if(obj['price'][1] != undefined) {
1133                    _self.menus.price.start.to = parseInt(obj['price'][1]) || 0;
1134                    _self.filterPrice.to = _self.menus.price.start.to > _self.menus.price.max.to ? _self.menus.price.max.to : _self.menus.price.start.to;
1135                }
1136            }
1137
1138            if (obj['price_sale'] != undefined) {
1139                _self.menus.price.price_sale.show = 1;
1140                _self.menus.price.price_sale.checked = 1;
1141            }
1142
1143            _self.showFilterButton = 1;
1144            this.countSelectedButton();
1145            this.getActiveFilters();
1146        },
1147        getActiveFilters: function() {
1148
1149            var _self = this, items = [], names = {}, index = 0;
1150
1151            // console.log( "menus" );
1152            // console.log( _self.menus );
1153
1154            $.each(_self.menus, function(key, val) {
1155
1156                var menu = _self.menus[key].rows;
1157                if( menu == undefined ) return;
1158
1159                /* RESET FILTERS */
1160                var checked = _self.filterArray( menu, 1, 'checked', 'submenu' );
1161                // console.log( "checked", key,  );
1162                // console.log( checked );
1163
1164                for (var i = 0; i < checked.length; i++)
1165                {
1166                    delete checked[i].filters;
1167                    if(!checked[i].display) continue;
1168
1169                    var name = checked[i].name;
1170
1171                    if(names[name] === undefined)
1172                    {
1173                        names[name] = index;
1174                        items[names[name]] = checked[i];
1175                        items[names[name]].filters = [];
1176                    }
1177
1178                    items[names[name]].filters.push(checked[i]);
1179                    index++;
1180                }
1181            });
1182
1183            //RESET KEYS TO ARRAY
1184            var list=[];
1185            for (key in items) { list[list.length] = items[key]; }
1186
1187            this.activeFilters = list;
1188            return this.activeFilters;
1189        },
1190        removeDups: function(names) {
1191            var unique = {};
1192            names.forEach(function(i) {
1193                if(!unique[i]) {
1194                    unique[i] = true;
1195                }
1196            });
1197            return Object.keys(unique);
1198        },
1199        findInArray: function(arr, id) {
1200            var ret = "";
1201            if(Array.isArray(arr)) {
1202                for(el in arr) {
1203                    if(arr[el].submenu) {
1204                        for (var i=0; i<arr[el].submenu.length; i++) {
1205                            if (arr[el].submenu[i].id == id) {
1206                                ret = { "submenu": arr[el].submenu[i], "main": arr[el], "test": 3};
1207                            } else {
1208                                if (arr[el].id == id) {
1209                                    ret = { "main": arr[el], "test": 0};
1210                                }
1211                            }
1212                        }
1213                    } else {
1214                        if (arr[el].id == id) {
1215                            ret = { "main": arr[el] , "test": 6};
1216                        }
1217                    }
1218                }
1219            } else {
1220                $.each(arr, function (key, val) {
1221                    if(val.submenu) {
1222                        $.each(val['submenu'], function (key2, val2) {
1223                            if(val2['submenu']) {
1224                                $.each(val2['submenu'], function (key3, val3) {
1225                                    if (val3['submenu']) {
1226                                        $.each(val3['submenu'], function (key4, val4) {
1227                                            if (val4['submenu']) {
1228                                                $.each(val4['submenu'], function (key5, val5)
1229                                                {
1230                                                    if (val5.id == id)
1231                                                    {
1232                                                        ret = { "submenu4": val5, "submenu3": val4, "submenu2": val3, "submenu": val2, "main": val };
1233                                                    }
1234                                                });
1235                                            }
1236
1237                                            if (val4.id == id)
1238                                            {
1239                                                ret = { "submenu3": val4, "submenu2": val3, "submenu": val2, "main": val };
1240                                            }
1241
1242                                        });
1243                                    }
1244
1245                                    if (val3.id == id)
1246                                    {
1247                                        ret = { "submenu2": val3, "submenu": val2, "main": val };
1248                                    }
1249
1250                                });
1251
1252                            }
1253
1254                            if (val2.id == id)
1255                            {
1256                                ret = { "submenu": val2, "main": val };
1257                            }
1258
1259                        });
1260                    }
1261
1262                    if (val.id == id) {
1263                        ret = {"main": val, "test": 4};
1264                    }
1265                });
1266            }
1267
1268            return ret;
1269        },
1270        priceRange:function(obj) {
1271            // console.log([obj ,obj.min ,obj.max ,this.menus.price]);
1272            if (!obj || obj.min === undefined || !obj.max || this.menus.price === undefined) return;
1273            // return;
1274
1275            if(parseInt(this.menus.price.max.from) === parseInt(this.menus.price.start.from))
1276            {
1277                this.filterPrice.from = this.menus.price.start.from = obj.min;
1278            }
1279            if(parseInt(this.menus.price.max.to) === parseInt(this.menus.price.start.to))
1280            {
1281                this.filterPrice.to = this.menus.price.start.to = obj.max;
1282            }
1283
1284            // console.log([obj]);
1285            this.menus.price.max.from = obj.min;
1286            this.menus.price.max.to = obj.max;
1287
1288            if(parseInt(this.menus.price.start.from) < obj.min)
1289            {
1290                this.filterPrice.from = this.menus.price.start.from = obj.min;
1291            }
1292            if(parseInt(this.menus.price.start.to) > obj.max)
1293            {
1294                this.filterPrice.to = this.menus.price.start.to = obj.max;
1295            }
1296
1297            // $( '#filters form input[name="price[]"]' ).eq(-2).val(this.menus.price.max.from);
1298            // $( '#filters form input[name="price[]"]' ).eq(-1).val(this.menus.price.max.to);
1299        }
1300        ,
1301        changePrice: function() {
1302
1303            try{
1304                var min = this.menus.price.max.from;
1305                var max = this.menus.price.max.to;
1306
1307                var from = this.menus.price.start.from;
1308                var to   = this.menus.price.start.to;
1309
1310                $("#price-slider").slider().on("slide", function(ev){
1311                    $("#price-range input").eq(0).val( ev.value[0] );
1312                    $("#price-range input").eq(1).val( ev.value[1] );
1313                });
1314            }catch (omg) { }
1315
1316            try {
1317                if($.fn.ionRangeSlider)
1318                {
1319
1320                    var vueCtx = this;
1321                    var slider = $(".price-slider").data('ionRangeSlider');
1322                    if(!slider)
1323                    {
1324                        $("input.price-slider").each(function () {
1325
1326                            var item = $(this).ionRangeSlider({ min:min, max:max, to:to, from:from, type:'double', labels:false, hide_min_max:true, hide_from_to:true });
1327                            item.val(min+';'+max);
1328                            var inputs = item.parents('[id*="price"]').find('[data-target="price-range"]');
1329
1330                            item.on('change',function (el,vc) {
1331                                var vals = this.prop('value').split(';');
1332                                vc.menus.price.start.from = vals[0];
1333                                vc.menus.price.start.to = vals[1];
1334                                el.eq(0).val(vals[0]);
1335                                el.eq(1).val(vals[1]);
1336                            }.bind(item,inputs,vueCtx));
1337
1338                            inputs.on('input',function (el,a,z) {
1339                                this.data('ionRangeSlider').update({ from:el.eq(0).val(), to:el.eq(1).val() }); //min:a, max:z,
1340                                // console.log([this, arguments,this.val(el.eq(0).val()+';'+el.eq(1).val()).data('ionRangeSlider')]);
1341                                // this.val(el.eq(0).val()+';'+el.eq(1).val()).data('ionRangeSlider').reset();
1342                            }.bind(item,inputs,min,max));
1343                        });
1344                    }
1345
1346
1347                }
1348            }catch (ex)
1349            {
1350
1351            }
1352
1353            $('.slider-handle.round').addClass('open');
1354
1355            $("#price-range input").each(function( id, el ) {
1356                $(this).change(function( ev ) {
1357
1358                    var val = Number( $(el).val().replace(/[^0-9\\.]+/g, "") ) || 0;
1359
1360                    if( val < $("#price-slider").data("slider-min") ) val = $("#price-slider").data("slider-min");
1361                    if( val > $("#price-slider").data("slider-max") ) val = $("#price-slider").data("slider-max");
1362                    val = Number( val );
1363                    $(el).val( val );
1364
1365                    try{
1366                        var sliderValue = $("#price-slider").data("slider").getValue();
1367                        sliderValue[id] = val;
1368
1369                        $("#price-slider").data("slider").setValue( sliderValue );
1370                    }catch (o){}
1371                });
1372            });
1373            $("#price-range input").trigger("change");
1374        },
1375        showButtonAllFilterDelete: function() {
1376            var menus = this.menus;
1377            var count = 0;
1378
1379            $.each(menus, function (key, val) {
1380                if(val.rows)
1381                    $.each(val.rows, function (keyRows, valRows) {
1382                        if(valRows.show)
1383                            count++
1384                        if(valRows.submenu)
1385                            $.each(valRows.submenu, function (keySub, valSub){
1386                                if(valSub.show)
1387                                    count++
1388                            })
1389                    });
1390            });
1391
1392            if( this.filterPrice.from > 0 ) {
1393                count++;
1394            }
1395
1396            if(this.menus.price) {
1397                if( this.filterPrice.to < this.menus.price.max.to ) {
1398                    count++;
1399                }
1400            }
1401
1402            this.testCount = count;
1403
1404            if(count > 2 ) {
1405                return true;
1406            }
1407
1408            return false;
1409        },
1410        getMenus: function() {
1411
1412            var url = this.getUrl();
1413            var params = this.serializeForm();
1414
1415            axios.get(url + '/rawFilterData?' + params + '&url=' + encodeURIComponent( window.location.href ) ).then(function(res) {
1416                if( !res.data ) { return; }
1417
1418                if( 'searchQuery' in res.data ) {
1419                    this.rawUrl = res.data.searchQuery;
1420                    delete res.data.searchQuery;
1421                }
1422                this.menus = res.data;
1423
1424                this.setInGet();
1425
1426                var href = window.location.href;
1427                var t = href.split("?");
1428                var newUrl = t[1];
1429
1430                if( this.rawUrl && this.rawUrl.length > 0 ) {
1431                    newUrl = this.rawUrl;
1432                    console.log( ['rawUrl', this.rawUrl ]);
1433                }
1434
1435                this.getProducts(newUrl);
1436                this.getActiveMenus(newUrl);
1437                this.hideMore();
1438                $('body').trigger('menus.run.once',[this.menus]);
1439
1440                this.$nextTick(function() {
1441                    this.changePrice();
1442                    this.copyFilters();
1443                });
1444                this.getMenusFlag = 1;
1445            }.bind(this)).catch();
1446
1447
1448        },
1449        getProducts: function (newUrl) {
1450
1451            var scrollToProductAfterBack = {
1452                enabled: false,
1453                timeoutId: null,
1454                executed: false,
1455                request: function(){
1456                    if (scrollToProductAfterBack.enabled) {
1457                        if (scrollToProductAfterBack.timeoutId !== null) {
1458                            clearTimeout(scrollToProductAfterBack.timeoutId);
1459                        }
1460                        scrollToProductAfterBack.timeoutId = setTimeout(scrollToProductAfterBack.scroll, 300);
1461                    }
1462                },
1463                scroll: function(){
1464                    if (!this.executed) {
1465                        this.executed = true;
1466                        scrollToProductAfterBack.timeoutId = null;
1467
1468                        var $productElement = $('.product-item[data-index="' + history.state.productIndex + '"]');
1469                        if ($productElement.length) {
1470                            // $(document.body.parentElement).stop().animate({
1471                            //     scrollTop: $productElement.offset().top
1472                            // }, 0);
1473                            $(window).scrollTop($productElement.offset().top - 28);
1474                        }
1475                    }
1476                },
1477            };
1478
1479            if (history.state && history.state.productIndex !== undefined) {
1480                scrollToProductAfterBack.enabled = true;
1481            }
1482
1483            if( typeof newUrl == "undefined") newUrl =  '';
1484            //newUrl = this.getUrl() + '/json?' + $('#filters-hidden input, #filters-hidden select').serialize() + '&' + newUrl;
1485            newUrl = this.getUrl() + '/rawJson?' + $('#filters-hidden input, #filters-hidden select').serialize() + '&' + newUrl;
1486
1487            if(!this.runningAjaxes[newUrl]) {
1488                this.runningAjaxes[newUrl] = true;
1489                axios.get(newUrl).then(function (res) {
1490                    var _self = this;
1491                    this.vue.runningAjaxes[this.url] = false;
1492                    this.vue.products = res.data;
1493                    this.vue.banners = res.data.banners;
1494
1495
1496
1497                    if (res.data) {
1498                        $('.background-filter').hide();
1499
1500                        this.vue.$nextTick(function () {
1501                            $('.loader-filter').hide();
1502                            $('.mouse-over').removeClass('mouse-over');
1503                            var products = $('#products');
1504
1505                            $(this.products.data).each(function ( index, el) {
1506                                var img = products.find('#' + el.id + ' .image img').attr('alt', el.translationTitle + ' ' + el.label);
1507
1508                                //img.get(0).src = '';
1509                                // if( img.get(0) )
1510                                //     img.get(0).src = el.imageHover;
1511
1512                                img.on('load', function(){
1513                                    requestAnimationFrame(scrollToProductAfterBack.request)
1514                                })
1515                            }.bind(this));
1516
1517                            $('.category-product-wrapper').each(function () {
1518                                filters.onProductMouseLeave.call(this);
1519                            });
1520                            $('#filters form').trigger('ajax.end');
1521
1522                            scrollToProductAfterBack.request();
1523
1524                            // ecommerce
1525                            $('#products').find('[data-ecommerce]').attr('data-ecommerce-inited',null);
1526                            website.tryInitECommerce('#products'); // try init until ajax has been finished
1527                            if( typeof this.bannerSlider === 'function' ) this.bannerSlider();
1528                            if( typeof this.productSlider === 'function' ) this.productSlider();
1529                            const productIndexes = this.products.data.map((item, index) => index);
1530                            const productIds = this.products.data.map(item => item.id);
1531
1532                            this.productsMobileSlider(productIndexes, productIds);
1533                            //website.initLazyLoad( website.config.lazyload );
1534
1535                            _self.vue.$nextTick(function () {
1536                                website.initLazyLoad( website.config.lazyload );
1537                            })
1538                            if( this.banners ) {
1539                                const banners = Object.values(this.banners);
1540                                const bannerKeys = banners.map(banner => banner.id).join(",");
1541                                this.bannerStats(bannerKeys);
1542                            }
1543
1544                        });
1545                    }
1546                }.bind({'vue': this, 'url': newUrl})).catch(function(ex){(console.warn || console.log)(['axios failed retrieving content',ex])});
1547            }
1548        },
1549        mouseOverBanner(id, event) {
1550            this.isHover = true;
1551        },
1552        mouseLeaveBanner(id, event) {
1553            this.isHover = false;
1554        },
1555
1556        getBannersIndex: function(k, key) {
1557                if (key.startsWith("i")) {
1558                    const index = this.banners[key].index;
1559                    if (k == index) {
1560                        return true;
1561                    }
1562                }
1563            return false;
1564        },
1565
1566        bannerStats: function(key){
1567            const bannerId = key;
1568            $(document).ready(function() {
1569                const name = `banner_` + bannerId;
1570                if( !$.cookie( name ) ){
1571                    $.cookie( name , 1, { expires: 7, path: "/" });
1572                    $.post( website.getBaseUrl() + "/socialProof/show", { pk : bannerId } );
1573                    const array = bannerId.split(",");
1574                    array.forEach(function(item) {
1575                        const bannerName = `banners_` + item;
1576                        $("#" + bannerName).on("click", function(){
1577                            $.post( website.getBaseUrl() + "/socialProof/click", { pk : item } );
1578                        });
1579                    });
1580                }
1581            });
1582        },
1583
1584        productsMobileSlider: function(productIndexes, productIds) {
1585            if(this.enableGallery /*&& this.isMobile*/ ){
1586
1587                productIds.forEach(function(productId) {
1588                    $('#productSlider-pagination-' + productId).each(function() {
1589                        $(this).html('');
1590                    });
1591                });
1592
1593                this.swipers.forEach(swiper => {
1594                     swiper.destroy(false);
1595                });
1596
1597                productIndexes.forEach(index => {
1598                    const swiper = new Swiper('#slider-mobile-product-'+index, {
1599                        slidesPerView: 1,
1600                        observer: true,
1601                        pagination: {
1602                            el: '#productSlider-pagination-'+productIds[index],
1603                            clickable: true,
1604                        },
1605                        lazy: {
1606                            checkInView: true,
1607                            loadOnTransitionStart: true,
1608                            loadPrevNext: false,
1609                        },
1610                        speed: 1000,
1611                        effect: 'slider',
1612                        loop: false,
1613                    });
1614                    const button = document.getElementById('add-to-cart-'+index);
1615                    if( button ) {
1616                        button.classList.remove('hide');
1617                        button.classList.add('hide');
1618
1619                        swiper.on('slideChange', () => {
1620                            if (swiper.activeIndex === 0) {
1621                                button.classList.remove('show');
1622                                button.classList.add('hide');
1623                            } else {
1624                                button.classList.remove('hide');
1625                                button.classList.add('show');
1626                            }
1627                        });
1628                    }
1629                    // swiper.on('lazyImageLoad', (slideEl, imageEl) => {
1630                    //     $(imageEl).removeClass('lazy-loading').addClass('lazy-loaded');
1631                    // });
1632
1633                    this.swipers.push(swiper);
1634                });
1635            }
1636        },
1637        bannerSlider: function() {
1638            var productSlider = new Swiper( '#slider-product',
1639            {
1640                slidesPerView: 3,
1641                speed: 1000,
1642                effect: 'slider',
1643                loop: true,
1644                breakpoints: {
1645                    1366:{
1646                        slidesPerView: 3,
1647                    },
1648                    1024:{
1649                        slidesPerView: 3,
1650                    },
1651                    768: {
1652                        slidesPerView: 2,
1653                    },
1654                    568: {
1655                        slidesPerView: 2,
1656                    }
1657                },
1658                autoplay: {
1659                    delay: 5000,
1660                    pauseOnMouseEnter: true,
1661                },
1662            });
1663            $('#slider-product').on('mouseenter', function(e){
1664                productSlider.autoplay.stop();
1665            })
1666            .on('mouseleave', function(e){
1667                productSlider.autoplay.start();
1668            })
1669        },
1670
1671        getActiveMenus: function(newUrl) {
1672
1673            if( typeof newUrl == "undefined") newUrl =  '';
1674            newUrl = this.getUrl() + '/rawFilter?' + $('#filters-hidden input, #filters-hidden select').serialize() + '&' + newUrl;
1675
1676            if(!this.runningAjaxes[newUrl]) {
1677                this.runningAjaxes[newUrl] = true;
1678                axios.get(newUrl).then(function (res) {
1679                    this.vue.runningAjaxes[this.url] = false;
1680                    this.vue.priceRange(res.data.price);
1681                    // this.vue.setInActiveFiltersMenu(); // _self.setInActiveFiltersMenu();
1682                    this.vue.setActiveMenu(res.data);
1683                    this.vue.priceRange(res.data.price);
1684                    this.vue.getActiveFilters();
1685                    this.vue.priceRange(res.data.price);
1686                    this.vue.$nextTick(function () {
1687                        $('#filters form').trigger('ajax.end');
1688                    });
1689                    // this.vue.changePrice(res.data.price);
1690                }.bind({'vue':this,'url':newUrl})).catch();
1691            }
1692        },
1693        setInActiveFiltersMenu: function() {
1694            var menu = this.menus;
1695            $.each(menu, function(key, val) {
1696                if(val.rows) {
1697                    $.each(val.rows, function(key2, val2) {
1698                        if(val2.submenu) {
1699                            $.each(val2.submenu, function(key5, val5) {
1700                                // val5.filter = 0;
1701                                // val5.expanded = 0;
1702                            });
1703                        }
1704                        // val.expanded = 0;
1705                        // val2.expanded = 0;
1706                        // val2.filter = 0;
1707                    });
1708                }
1709            });
1710        },
1711
1712
1713
1714        setActiveMenu: function(resData) {
1715            var menu = this.menus;
1716
1717            $.each(menu, function(key, val) {
1718                if(val.rows) {
1719                    $.each(val.rows, function (key3, val3) {
1720
1721                        if( resData[key] != undefined ) {
1722                            val3.display = 0;
1723                            $.each(resData[key], function (keyRes, valRes) {
1724                                if(valRes && val3.id.toString() == valRes.toString()) {
1725                                    val3.filter = 1;
1726                                    val3.display = 1;
1727                                }
1728                            })
1729
1730                            if( key.indexOf('param')>=0 && resData[key].length == 0 ) val.hide = 2;
1731                            if( key.indexOf('param')>=0 && resData[key].length > 0 && val.hide == 2 ) val.hide = 0;
1732
1733                            //console.log( 'hide', key, resData[key].length, val.hide );
1734
1735                            if (val3.submenu) {
1736                                $.each(val3.submenu, function (key4, val4) {
1737                                    val4.display = 0;
1738                                    if(resData[key]) {
1739                                        $.each(resData[key], function (keyRes, valRes) {
1740                                            if(valRes && val4.id.toString() == valRes.toString()) {
1741                                                val4.filter = 1;
1742                                                val3.filter = 1;
1743                                                val4.display = 1;
1744                                            }
1745                                        });
1746
1747                                        if (val4.submenu) {
1748                                            $.each(val4.submenu, function (key5, val5) {
1749                                                val5.display = 0;
1750                                                if(resData[key]) {
1751                                                    $.each(resData[key], function (keyRes, valRes) {
1752                                                        if(valRe
1752s && val5.id.toString() == valRes.toString()) {
1753                                                            val5.filter = 1;
1754                                                            val4.filter = 1;
1755                                                            val5.display = 1;
1756                                                        }
1757                                                    });
1758
1759                                                    if (val5.submenu) {
1760                                                        $.each(val5.submenu, function (key6, val6) {
1761                                                            val6.display = 0;
1762                                                            if(resData[key]) {
1763                                                                $.each(resData[key], function (keyRes, valRes) {
1764                                                                    if(valRes && val6.id.toString() == valRes.toString()) {
1765                                                                        val6.filter = 1;
1766                                                                        val5.filter = 1;
1767                                                                        val6.display = 1;
1768                                                                    }
1769                                                                });
1770                                                            }
1771                                                        });
1772                                                    }
1773                                                }
1774                                            });
1775                                        }
1776                                    }
1777                                });
1778                            }
1779                        }
1780                    })
1781                }
1782            });
1783        },
1784        deleteFilter: function(name) {
1785            for(var i = 0, menuKeys = Object.keys(this.menus), menu; i < menuKeys.length; i++ )
1786            {
1787                menu = this.menus[menuKeys[i]];
1788                if(menu && menu.rows)
1789                {
1790                    for(var f = 0, item, items = this.filterArray( menu.rows,name,'name','submenu'); item = items[f] ;f++)
1791                    {
1792                        item.checked = 0;
1793                    }
1794                }
1795                delete this.activeFilters[name];
1796            }
1797
1798            var _self = this;
1799            _self.$nextTick(function () {
1800                console.log( ["deleteFilter"] );
1801                _self.saveCollapse(true);
1802            });
1803
1804            return;
1805        },
1806        deleteFilterByObj:function(obj){
1807            for(var i = 0, item; item = obj.filters[i]; i++)
1808            {
1809                item.checked = 0;
1810            }
1811            delete obj.filters;
1812
1813            var _self = this;
1814            _self.$nextTick(function () {
1815                console.log( ["deleteFilterByObj"] );
1816                _self.saveCollapse(true);
1817            });
1818        },
1819        deleteFilterPrice: function(position) {
1820            if( this.menus.price ) {
1821                if (position == 'sale') {
1822                    this.menus.price.price_sale.show = 0;
1823                    this.menus.price.price_sale.checked = 0;
1824                } else {
1825                    this.menus.price.start[position] = this.menus.price.max[position];
1826                }
1827            }
1828
1829            var _self = this;
1830            _self.$nextTick(function () {
1831                console.log( ["deleteFilterPrice"] );
1832                _self.saveCollapse(true);
1833            })
1834        },
1835        deleteAllFilter: function() {
1836
1837            var menu = this.menus;
1838            this.showFilterButton = 0;
1839            $.each(menu, function (key, val) {
1840                if(val.rows) {
1841                    $.each(val.rows, function (key1, val1) {
1842
1843                        if(val1.submenu) {
1844                            $.each(val1.submenu, function (key2, val2) {
1845
1846                                if(val2.submenu) {
1847                                    $.each(val2.submenu, function (key3, val3) {
1848
1849                                        if(val3.submenu) {
1850                                            $.each(val3.submenu, function (key4, val4) {
1851                                                val4.show = 0;
1852                                                val4.checked = 0;
1853                                            });
1854                                        }
1855
1856                                        val3.show = 0;
1857                                        val3.checked = 0;
1858                                    });
1859                                }
1860
1861                                val2.show = 0;
1862                                val2.checked = 0;
1863                            });
1864                        }
1865
1866                        val1.show = 0;
1867                        val1.checked = 0;
1868                    });
1869                }
1870                val.show = 0;
1871                val.checked = 0;
1872            });
1873
1874            this.deleteFilterPrice('from');
1875            this.deleteFilterPrice('to');
1876            this.deleteFilterPrice('sale');
1877
1878            _self.$nextTick(function () {
1879                console.log( ["deleteAllFilter"] );
1880                _self.saveCollapse();
1881            })
1882        },
1883
1884        setUrl: function (newUrl, filterDelete, noHistory, noFilterAjax ) {
1885            $('.background-filter, .loader-filter').show();
1886
1887            var url = window.location.protocol + "//" + window.location.host + window.location.pathname;
1888
1889            if(filterDelete) {
1890                url = url;
1891            } else {
1892                url = url + "?" + newUrl;
1893            }
1894
1895            function changeUrl( vue, newUrl, filterDelete, noHistory, noFilterAjax ){
1896                $('#filter-product').val(newUrl);
1897
1898                vue.getProducts(newUrl);
1899                if(noFilterAjax !== true)
1900                    vue.getActiveMenus(newUrl);
1901
1902                _self = vue;
1903
1904                _self.$nextTick(function () {
1905                    _self.setInGet( noHistory );
1906                    _self.copyFilters(); //TODO
1907                    // _self.filtersChaged();
1908                });
1909            }
1910            if( noHistory!==true ) {
1911
1912                this.rawUrl = url;
1913                axios.get(this.getUrl() + '/filterUrl?' + this.serializeForm()).then(function(res) {
1914                    if (res.data) {
1915                        if( res.data.searchUrl && res.data.searchUrl.length > 0)
1916                            this.vue.searchUrl = res.data.searchUrl;
1917                        else
1918                            this.vue.searchUrl = this.newUrl;
1919
1920                        window.history.pushState({path:this.vue.searchUrl},'',this.vue.searchUrl);
1921
1922                        console.log( ["_filterUrl", res.data.searchUrl, res.data.web.web_heading ] );
1923
1924                        $( "[data-target=heading]" ).html( res.data.web.web_heading );
1925                        $( "[data-target=sub_title]" ).html( res.data.web.web_sub_title );
1926                        $( "title" ).html( res.data.web.web_title );
1927                        $( "meta[property=\"og:title\"]" ).attr( "content", res.data.web.web_title );
1928                        $( "meta[name=description], meta[property=\"og:description\"]" ).attr( "content", res.data.web.web_description );
1929                        $( "meta[name=keywords], meta[property=\"og:keywords\"]" ).attr( "content", res.data.web.web_keywords );
1930
1931                        console.log( 'alternate', res.data.web.web_alternate );
1932                        if( res.data.web.web_alternate ){
1933                            $.each( res.data.web.web_alternate, function( key, value ){
1934                                console.log( key, value );
1935                                $( "link[hreflang="+key+"]" ).attr( "href", value );
1936                            });
1937                        }
1938
1939                        changeUrl( this.vue, this.newUrl, this.filterDelete, this.noHistory, this.noFilterAjax )
1940                    }
1941                }.bind({'vue':this,'newUrl':newUrl,'filterDelete':filterDelete,'noHistory':noHistory,'noFilterAjax':noFilterAjax})).catch();
1942
1943            }
1944            else{
1945                axios.get(this.getUrl() + '/parseUrl?url=' + encodeURIComponent( url ) ).then(function(res) {
1946                    if (res.data) {
1947                        if( res.data.searchQuery && res.data.searchQuery.length > 0) {
1948                            this.vue.rawUrl = res.data.searchQuery;
1949                            this.newUrl = res.data.searchQuery;
1950                        }
1951
1952                        console.log( ["_parseUrl", res.data.searchQuery] );
1953
1954                        changeUrl( this.vue, this.newUrl, this.filterDelete, this.noHistory, this.noFilterAjax )
1955                    }
1956                }.bind({'vue':this,'newUrl':newUrl,'filterDelete':filterDelete,'noHistory':noHistory,'noFilterAjax':noFilterAjax})).catch();
1957
1958                //changeUrl( this, newUrl, filterDelete, noHistory, noFilterAjax )
1959            }
1960
1961            /*
1962            $('#filter-product').val(newUrl);
1963
1964            this.getProducts(newUrl);
1965            if(noFilterAjax !== true)
1966                this.getActiveMenus(newUrl);
1967
1968            _self = this;
1969
1970            _self.$nextTick(function () {
1971                _self.setInGet( noHistory );
1972                // _self.filtersChaged();
1973            });
1974            */
1975        },
1976
1977        getUrlVars: function(url) {
1978            var hash;
1979            var myJson = {};
1980            var hashes = url.slice(url.indexOf('?') + 1).split('&');
1981            for (var i = 0; i < hashes.length; i++) {
1982                hash = hashes[i].split('=');
1983                myJson[hash[0]] = hash[1];
1984            }
1985            return myJson;
1986        },
1987        closeAllCollapse: function () {
1988//            $('.open.in, .open.show').removeClass('in open show');
1989            $('.open.in, .open.show').collapse('hide');
1990            $('.allheader').show();
1991
1992            for (var v in this.changeButton) {
1993                if (v != 6) {
1994                    this.changeButton[v] = 0;
1995                }
1996            }
1997            this.changeButton.price = 1;
1998            this.setInGet();
1999
2000            $('.singlebox').show();
2001            $('.multibox').addClass('d-none').trigger('multibox.hide');
2002
2003            this.$nextTick(function () {
2004                jQuery('body').trigger('onend.filter');
2005            });
2006        },
2007        mouseOver: function(id,ev) {
2008            if(window.innerWidth < 1025) return false;
2009            var target = ev.target;
2010            if(target.classList.contains('mouse-over')/* || $('#product-' + id + ' > [data-parent-id="' + id + '"]').length*/) return false;
2011            var url = this.getUrl();
2012            url+= !this.isLogged() ? '/info/id/' : '/rawInfo/id/';
2013
2014            axios.get(url + id + '?layout=api' ).then(function(res) {
2015                target.classList.add('mouse-over');
2016                $('#product-' + id).html(res.data);
2017                //DO NOT CHAIN
2018                $('#product-' + id).find('.selectpicker').selectpicker();
2019                //website.initSwiper( $('#product-hover-' + id).find('.swiper') );
2020                var price = $(target).find('.default-active').closest('a').data('price');
2021                $(target).find(".category-product-absolute .product-price").html(price);
2022                console.log( $('#product-' + id).find('.default-active').closest('a') );
2023            }).catch();
2024        },
2025        checkWindow: function(top, heigth) {
2026            $(window).scroll(function(top, heigth) {
2027                if ( ( top > heigth * 1.8 ) && ( top < heigth * 1.85 ) ) {
2028                    _self.getMoreProducts();
2029                }
2030            });
2031        },
2032        getMoreProducts: function () {
2033            var url = window.location.search;
2034
2035            if( this.rawUrl && this.rawUrl.length>0 ){
2036                url = this.rawUrl.substr( this.rawUrl.indexOf('?')+1 );
2037                console.log( ['queryString',url] );
2038            }
2039
2040            var limit = this.products.itemCount + 20;
2041            var newUrl = url.replace(/limit=[0-9]*/, '');
2042            var newUrl = newUrl.substr(1);
2043            newUrl = newUrl + 'limit='+limit;
2044
2045            this.setUrl(newUrl, false);
2046
2047            setTimeout(function() {
2048                $(window).scroll(function() {
2049                    if ( ( $(window).scrollTop() > $(window).height() * 1.8 ) && ( $(window).scrollTop() < $(window).height() * 1.85 ) ) {
2050                        _self.getMoreProducts();
2051                    }
2052                });
2053            }, 2000)
2054        },
2055        hideAllMobile: function () {
2056            $('body').trigger('close.all.mobile');
2057        },
2058        resetFilter: function (filterName) {
2059            function setValRec(arr, key, val, sub)
2060            {
2061                if(!arr || !arr.length) return;
2062                for(var i = 0, item; item = arr[i]; i++)
2063                {
2064                    item[key] = val;
2065                    if(item[sub] && item[sub].length)
2066                    {
2067                        setValRec(item[sub],key,val,sub);
2068                    }
2069                }
2070            }
2071
2072            setValRec(this.menus[filterName].rows,'checked',0,'submenu');
2073            this.$nextTick(function () {
2074                var formSerialize = this.serializeForm();
2075                this.setUrl(formSerialize, false);
2076            }.bind(this));
2077
2078        }
2079        ,filtersChaged: function()
2080        {
2081            var change = false;
2082            console.log( ["activeFilters", this.lastFilters.length, this.activeFilters.length ] );
2083            $(window).trigger("scroll")
2084            if(this.lastFilters.length !== this.activeFilters.length)
2085            {
2086                change = true;
2087                // console.log( this.lastFilters );
2088                // console.log( this.activeFilters );
2089            }
2090            else if(Array.isArray(this.activeFilters))
2091            {
2092                this.activeFilters.forEach(function (value, index) {
2093                    if(
2094                        this.lastFilters[index].name !== value.name
2095                        ||
2096                        ( value.filters && !this.lastFilters[index].filters )
2097                        ||
2098                        ( value.filters && this.lastFilters[index].filters.length !== value.filters.length )
2099                    )
2100                    {
2101                        change = true;
2102                        return null;
2103                    }
2104                    else if(value.filters && value.filters.length && this.lastFilters[index].filters && this.lastFilters[index].filters.length)
2105                    {
2106                        var lastSub = this.lastFilters[index].filters;
2107                        value.filters.forEach(function (val2, index2) {
2108                            if(
2109                                lastSub[index2].name !== val2.name
2110                                ||
2111                                ( val2.filters && !lastSub[index2].filters )
2112                                ||
2113                                ( val2.filters && lastSub[index2].filters.length !== val2.filters.length )
2114                            )
2115                            {
2116                                change = true;
2117                                return null;
2118                            }
2119                        }.bind(this));
2120                    }
2121                }.bind(this));
2122            }
2123            this.copyFilters();
2124            if(change)
2125            {
2126                this.pageNumber = 1;
2127                $('[name="p"]').removeAttr('checked').filter('[value="1"]').attr('checked','checked');
2128            }
2129            return change;
2130        }
2131        ,copyFilters: function () {
2132            if(Array.isArray(this.activeFilters))
2133            {
2134                this.lastFilters = [];
2135                this.activeFilters.forEach(function (value, index) {
2136                    this.lastFilters[index] = Object.assign( {}, value );
2137                    if(value.filters && Array.isArray(value.filters))
2138                    {
2139                        this.lastFilters[index].filters = [];
2140                        value.filters.forEach(function (val2, ind2) {
2141                            this.lastFilters[index].filters[ind2] = Object.assign( {}, val2 );
2142                        }.bind(this));
2143                    }
2144                }.bind(this));
2145            }
2146
2147        }
2148    }
2149});/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
2150 * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
2151 */
2152;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;
vendor: 14,233 bytes, lines 2152-2159
2152var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
2153
2154/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
2155/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
2156window.matchMedia=window.matchMedia||(function(e,f){var c,a=e.documentElement,b=a.firstElementChild||a.firstChild,d=e.createElement("body"),g=e.createElement("div");g.id="mq-test-1";g.style.cssText="position:absolute;top:-100em";d.style.background="none";d.appendChild(g);return function(h){g.innerHTML='&shy;<style media="'+h+'"> #mq-test-1 { width: 42px; }</style>';a.insertBefore(d,b);c=g.offsetWidth==42;a.removeChild(d);return{matches:c,media:h}}})(document);
2157
2158/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs  */
2159(function(e){e.respond={};respond.update=function(){};respond.mediaQueriesSupported=e.matchMedia&&e.matchMedia("only all").matches;if(respond.mediaQueriesSupported){return}var w=e.document,s=w.documentElement,i=[],k=[],q=[],o={},h=30,f=w.getElementsByTagName("head")[0]||s,g=w.getElementsByTagName("base")[0],b=f.getElementsByTagName("link"),d=[],a=function(){var D=b,y=D.length,B=0,A,z,C,x;for(;B<y;B++){A=D[B],z=A.href,C=A.media,x=A.rel&&A.rel.toLowerCase()==="stylesheet";if(!!z&&x&&!o[z]){if(A.styleSheet&&A.styleSheet.rawCssText){m(A.styleSheet.rawCssText,z,C);o[z]=true}else{if((!/^([a-zA-Z:]*\/\/)/.test(z)&&!g)||z.replace(RegExp.$1,"").split("/")[0]===e.location.host){d.push({href:z,media:C})}}}}u()},u=function(){if(d.length){var x=d.shift();n(x.href,function(y){m(y,x.href,x.media);o[x.href]=true;u()})}},m=function(I,x,z){var G=I.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),J=G&&G.length||0,x=x.substring(0,x.lastIndexOf("/")),y=function(K){return K.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+x+"$2$3")},A=!J&&z,D=0,C,E,F,B,H;if(x.length){x+="/"}if(A){J=1}for(;D<J;D++){C=0;if(A){E=z;k.push(y(I))}else{E=G[D].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1;k.push(RegExp.$2&&y(RegExp.$2))}B=E.split(",");H=B.length;for(;C<H;C++){F=B[C];i.push({media:F.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:k.length-1,hasquery:F.indexOf("(")>-1,minw:F.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:F.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}}j()},l,r,v=function(){var z,A=w.createElement("div"),x=w.body,y=false;A.style.cssText="position:absolute;font-size:1em;width:1em";if(!x){x=y=w.createElement("body");x.style.background="none"}x.appendChild(A);
vendor: 1,401 bytes, line 2159
2159s.insertBefore(x,s.firstChild);z=A.offsetWidth;if(y){s.removeChild(x)}else{x.removeChild(A)}z=p=parseFloat(z);return z},p,j=function(I){var x="clientWidth",B=s[x],H=w.compatMode==="CSS1Compat"&&B||w.body[x]||B,D={},G=b[b.length-1],z=(new Date()).getTime();if(I&&l&&z-l<h){clearTimeout(r);r=setTimeout(j,h);return}else{l=z}for(var E in i){var K=i[E],C=K.minw,J=K.maxw,A=C===null,L=J===null,y="em";if(!!C){C=parseFloat(C)*(C.indexOf(y)>-1?(p||v()):1)}if(!!J){J=parseFloat(J)*(J.indexOf(y)>-1?(p||v()):1)}if(!K.hasquery||(!A||!L)&&(A||H>=C)&&(L||H<=J)){if(!D[K.media]){D[K.media]=[]}D[K.media].push(k[K.rules])}}for(var E in q){if(q[E]&&q[E].parentNode===f){f.removeChild(q[E])}}for(var E in D){var M=w.createElement("style"),F=D[E].join("\n");M.type="text/css";M.media=E;f.insertBefore(M,G.nextSibling);if(M.styleSheet){M.styleSheet.cssText=F}else{M.appendChild(w.createTextNode(F))}q.push(M)}},n=function(x,z){var y=c();if(!y){return}y.open("GET",x,true);y.onreadystatechange=function(){if(y.readyState!=4||y.status!=200&&y.status!=304){return}z(y.responseText)};if(y.readyState==4){return}y.send(null)},c=(function(){var x=false;try{x=new XMLHttpRequest()}catch(y){x=new ActiveXObject("Microsoft.XMLHTTP")}return function(){return x}})();a();respond.update=a;function t(){j(true)}if(e.addEventListener){e.addEventListener("resize",t,false)}else{if(e.attachEvent){e.attachEvent("onresize",t)}}})(this);
vendor: 19,187 bytes, lines 2159-2163
2159/*
2160 Copyright (C) Federico Zivolo 2017
2161 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
2162 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+i+'Width'],10)}function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=document.body,t=document.documentElement,o=ie()&&getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=parseFloat(a.borderTopWidth,10),m=parseFloat(a.borderLeftWidth,10),h=c({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=parseFloat(a.marginTop,10),b=parseFloat(a.marginLeft,10);h.top-=f-u,h.bottom-=f-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=l(h,o)),h}function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clientWidth,window.innerWidth||0),n=J(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||w(o(e))}function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(t)),'BODY'===a.nodeName&&(a=e.ownerDocument.documentElement)):'window'===r?a=e.ownerDocument.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!w(s)){var f=h(),m=f.height,c=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=c+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=y(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function O(e,t,o){var i=d(t,o);return u(o,i)}function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[x(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t['function']||t.fn;t.enabled&&e(i)&&(o.offsets.popper=c(o.offsets.popper),o.offsets.reference=c(o.offsets.reference),o=i(o,t))}),o}function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=O(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=C(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[W('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||H(n(p.parentNode),t,o,i),i.push(p)}function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return H(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=A(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return B(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&U(t[o])&&(i='px'),e.style[o]=t[o]+i})}function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function K(e){return'end'===e?'start':'start'===e?'end':e}function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=ae.indexOf(e),i=ae.slice(o+1).concat(ae.slice(0,o));return t?i.reverse():i}function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=c(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?J(document.documentElement.clientHeight,window.innerHeight||0):J(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){U(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=U(+i)?[+i,0]:z(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var _=Math.min,X=Math.floor,J=Math.max,Q='undefined'!=typeof window&&'undefined'!=typeof document,Z=['Edge','Trident','Firefox'],$=0,ee=0;ee<Z.length;ee+=1)if(Q&&0<=navigator.userAgent.indexOf(Z[ee])){$=1;break}var i,te=Q&&window.Promise,oe=te?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},$))}},ie=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},ne=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},re=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),pe=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},se=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},de=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],ae=de.slice(3),le={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},fe=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};ne(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=oe(this.update.bind(this)),this.options=se({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(se({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=se({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return se({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return re(t,[{key:'update',value:function(){return N.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return R.call(this)}}]),t}();return fe.Utils=('undefined'==typeof window?global:window).PopperUtils,fe.placements=de,fe.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:pe({},d,r[d]),end:pe({},d,r[d]+r[a]-p[a])};e.offsets.popper=se({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:G,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=y(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=J(p[e],i[e])),pe({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[g]-u)),d[m]+u>s[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},h={left:X(n.left),top:X(n.top),bottom:X(n.bottom),right:X(n.right)},c='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=W('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==u?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[u]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==u?-1:1;m[c]=d*w,m[u]=s*y,m.willChange=c+', '+u}var E={"x-placement":e.placement};return e.attributes=se({},E,e.attributes),e.styles=se({},m,e.styles),e.arrowStyles=se({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return Y(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Y(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=O(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Y(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},fe});
2163//# sourceMappingURL=popper.min.js.map
2163
vendor: 137,714 bytes, lines 2164-6519
2164/*!
2165  * Bootstrap v4.6.2 (https://getbootstrap.com/)
2166  * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2167  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2168  */
2169(function (global, factory) {
2170  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
2171  typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
2172  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
2173})(this, (function (exports, $, Popper) { 'use strict';
2174
2175  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
2176
2177  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
2178  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
2179
2180  function _defineProperties(target, props) {
2181    for (var i = 0; i < props.length; i++) {
2182      var descriptor = props[i];
2183      descriptor.enumerable = descriptor.enumerable || false;
2184      descriptor.configurable = true;
2185      if ("value" in descriptor) descriptor.writable = true;
2186      Object.defineProperty(target, descriptor.key, descriptor);
2187    }
2188  }
2189
2190  function _createClass(Constructor, protoProps, staticProps) {
2191    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
2192    if (staticProps) _defineProperties(Constructor, staticProps);
2193    Object.defineProperty(Constructor, "prototype", {
2194      writable: false
2195    });
2196    return Constructor;
2197  }
2198
2199  function _extends() {
2200    _extends = Object.assign ? Object.assign.bind() : function (target) {
2201      for (var i = 1; i < arguments.length; i++) {
2202        var source = arguments[i];
2203
2204        for (var key in source) {
2205          if (Object.prototype.hasOwnProperty.call(source, key)) {
2206            target[key] = source[key];
2207          }
2208        }
2209      }
2210
2211      return target;
2212    };
2213    return _extends.apply(this, arguments);
2214  }
2215
2216  function _inheritsLoose(subClass, superClass) {
2217    subClass.prototype = Object.create(superClass.prototype);
2218    subClass.prototype.constructor = subClass;
2219
2220    _setPrototypeOf(subClass, superClass);
2221  }
2222
2223  function _setPrototypeOf(o, p) {
2224    _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
2225      o.__proto__ = p;
2226      return o;
2227    };
2228    return _setPrototypeOf(o, p);
2229  }
2230
2231  /**
2232   * --------------------------------------------------------------------------
2233   * Bootstrap (v4.6.2): util.js
2234   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
2235   * --------------------------------------------------------------------------
2236   */
2237  /**
2238   * Private TransitionEnd Helpers
2239   */
2240
2241  var TRANSITION_END = 'transitionend';
2242  var MAX_UID = 1000000;
2243  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
2244
2245  function toType(obj) {
2246    if (obj === null || typeof obj === 'undefined') {
2247      return "" + obj;
2248    }
2249
2250    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
2251  }
2252
2253  function getSpecialTransitionEndEvent() {
2254    return {
2255      bindType: TRANSITION_END,
2256      delegateType: TRANSITION_END,
2257      handle: function handle(event) {
2258        if ($__default["default"](event.target).is(this)) {
2259          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
2260        }
2261
2262        return undefined;
2263      }
2264    };
2265  }
2266
2267  function transitionEndEmulator(duration) {
2268    var _this = this;
2269
2270    var called = false;
2271    $__default["default"](this).one(Util.TRANSITION_END, function () {
2272      called = true;
2273    });
2274    setTimeout(function () {
2275      if (!called) {
2276        Util.triggerTransitionEnd(_this);
2277      }
2278    }, duration);
2279    return this;
2280  }
2281
2282  function setTransitionEndSupport() {
2283    $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
2284    $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
2285  }
2286  /**
2287   * Public Util API
2288   */
2289
2290
2291  var Util = {
2292    TRANSITION_END: 'bsTransitionEnd',
2293    getUID: function getUID(prefix) {
2294      do {
2295        // eslint-disable-next-line no-bitwise
2296        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
2297      } while (document.getElementById(prefix));
2298
2299      return prefix;
2300    },
2301    getSelectorFromElement: function getSelectorFromElement(element) {
2302      var selector = element.getAttribute('data-target');
2303
2304      if (!selector || selector === '#') {
2305        var hrefAttr = element.getAttribute('href');
2306        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
2307      }
2308
2309      try {
2310        return document.querySelector(selector) ? selector : null;
2311      } catch (_) {
2312        return null;
2313      }
2314    },
2315    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
2316      if (!element) {
2317        return 0;
2318      } // Get transition-duration of the element
2319
2320
2321      var transitionDuration = $__default["default"](element).css('transition-duration');
2322      var transitionDelay = $__default["default"](element).css('transition-delay');
2323      var floatTransitionDuration = parseFloat(transitionDuration);
2324      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
2325
2326      if (!floatTransitionDuration && !floatTransitionDelay) {
2327        return 0;
2328      } // If multiple durations are defined, take the first
2329
2330
2331      transitionDuration = transitionDuration.split(',')[0];
2332      transitionDelay = transitionDelay.split(',')[0];
2333      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
2334    },
2335    reflow: function reflow(element) {
2336      return element.offsetHeight;
2337    },
2338    triggerTransitionEnd: function triggerTransitionEnd(element) {
2339      $__default["default"](element).trigger(TRANSITION_END);
2340    },
2341    supportsTransitionEnd: function supportsTransitionEnd() {
2342      return Boolean(TRANSITION_END);
2343    },
2344    isElement: function isElement(obj) {
2345      return (obj[0] || obj).nodeType;
2346    },
2347    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
2348      for (var property in configTypes) {
2349        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
2350          var expectedTypes = configTypes[property];
2351          var value = config[property];
2352          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
2353
2354          if (!new RegExp(expectedTypes).test(valueType)) {
2355            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
2356          }
2357        }
2358      }
2359    },
2360    findShadowRoot: function findShadowRoot(element) {
2361      if (!document.documentElement.attachShadow) {
2362        return null;
2363      } // Can find the shadow root otherwise it'll return the document
2364
2365
2366      if (typeof element.getRootNode === 'function') {
2367        var root = element.getRootNode();
2368        return root instanceof ShadowRoot ? root : null;
2369      }
2370
2371      if (element instanceof ShadowRoot) {
2372        return element;
2373      } // when we don't find a shadow root
2374
2375
2376      if (!element.parentNode) {
2377        return null;
2378      }
2379
2380      return Util.findShadowRoot(element.parentNode);
2381    },
2382    jQueryDetection: function jQueryDetection() {
2383      if (typeof $__default["default"] === 'undefined') {
2384        throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
2385      }
2386
2387      var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
2388      var minMajor = 1;
2389      var ltMajor = 2;
2390      var minMinor = 9;
2391      var minPatch = 1;
2392      var maxMajor = 4;
2393
2394      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
2395        throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
2396      }
2397    }
2398  };
2399  Util.jQueryDetection();
2400  setTransitionEndSupport();
2401
2402  /**
2403   * Constants
2404   */
2405
2406  var NAME$a = 'alert';
2407  var VERSION$a = '4.6.2';
2408  var DATA_KEY$a = 'bs.alert';
2409  var EVENT_KEY$a = "." + DATA_KEY$a;
2410  var DATA_API_KEY$7 = '.data-api';
2411  var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a];
2412  var CLASS_NAME_ALERT = 'alert';
2413  var CLASS_NAME_FADE$5 = 'fade';
2414  var CLASS_NAME_SHOW$7 = 'show';
2415  var EVENT_CLOSE = "close" + EVENT_KEY$a;
2416  var EVENT_CLOSED = "closed" + EVENT_KEY$a;
2417  var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7;
2418  var SELECTOR_DISMISS = '[data-dismiss="alert"]';
2419  /**
2420   * Class definition
2421   */
2422
2423  var Alert = /*#__PURE__*/function () {
2424    function Alert(element) {
2425      this._element = element;
2426    } // Getters
2427
2428
2429    var _proto = Alert.prototype;
2430
2431    // Public
2432    _proto.close = function close(element) {
2433      var rootElement = this._element;
2434
2435      if (element) {
2436        rootElement = this._getRootElement(element);
2437      }
2438
2439      var customEvent = this._triggerCloseEvent(rootElement);
2440
2441      if (customEvent.isDefaultPrevented()) {
2442        return;
2443      }
2444
2445      this._removeElement(rootElement);
2446    };
2447
2448    _proto.dispose = function dispose() {
2449      $__default["default"].removeData(this._element, DATA_KEY$a);
2450      this._element = null;
2451    } // Private
2452    ;
2453
2454    _proto._getRootElement = function _getRootElement(element) {
2455      var selector = Util.getSelectorFromElement(element);
2456      var parent = false;
2457
2458      if (selector) {
2459        parent = document.querySelector(selector);
2460      }
2461
2462      if (!parent) {
2463        parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
2464      }
2465
2466      return parent;
2467    };
2468
2469    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
2470      var closeEvent = $__default["default"].Event(EVENT_CLOSE);
2471      $__default["default"](element).trigger(closeEvent);
2472      return closeEvent;
2473    };
2474
2475    _proto._removeElement = function _removeElement(element) {
2476      var _this = this;
2477
2478      $__default["default"](element).removeClass(CLASS_NAME_SHOW$7);
2479
2480      if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) {
2481        this._destroyElement(element);
2482
2483        return;
2484      }
2485
2486      var transitionDuration = Util.getTransitionDurationFromElement(element);
2487      $__default["default"](element).one(Util.TRANSITION_END, function (event) {
2488        return _this._destroyElement(element, event);
2489      }).emulateTransitionEnd(transitionDuration);
2490    };
2491
2492    _proto._destroyElement = function _destroyElement(element) {
2493      $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
2494    } // Static
2495    ;
2496
2497    Alert._jQueryInterface = function _jQueryInterface(config) {
2498      return this.each(function () {
2499        var $element = $__default["default"](this);
2500        var data = $element.data(DATA_KEY$a);
2501
2502        if (!data) {
2503          data = new Alert(this);
2504          $element.data(DATA_KEY$a, data);
2505        }
2506
2507        if (config === 'close') {
2508          data[config](this);
2509        }
2510      });
2511    };
2512
2513    Alert._handleDismiss = function _handleDismiss(alertInstance) {
2514      return function (event) {
2515        if (event) {
2516          event.preventDefault();
2517        }
2518
2519        alertInstance.close(this);
2520      };
2521    };
2522
2523    _createClass(Alert, null, [{
2524      key: "VERSION",
2525      get: function get() {
2526        return VERSION$a;
2527      }
2528    }]);
2529
2530    return Alert;
2531  }();
2532  /**
2533   * Data API implementation
2534   */
2535
2536
2537  $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
2538  /**
2539   * jQuery
2540   */
2541
2542  $__default["default"].fn[NAME$a] = Alert._jQueryInterface;
2543  $__default["default"].fn[NAME$a].Constructor = Alert;
2544
2545  $__default["default"].fn[NAME$a].noConflict = function () {
2546    $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;
2547    return Alert._jQueryInterface;
2548  };
2549
2550  /**
2551   * Constants
2552   */
2553
2554  var NAME$9 = 'button';
2555  var VERSION$9 = '4.6.2';
2556  var DATA_KEY$9 = 'bs.button';
2557  var EVENT_KEY$9 = "." + DATA_KEY$9;
2558  var DATA_API_KEY$6 = '.data-api';
2559  var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9];
2560  var CLASS_NAME_ACTIVE$3 = 'active';
2561  var CLASS_NAME_BUTTON = 'btn';
2562  var CLASS_NAME_FOCUS = 'focus';
2563  var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6;
2564  var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6);
2565  var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6;
2566  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
2567  var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
2568  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]';
2569  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
2570  var SELECTOR_INPUT = 'input:not([type="hidden"])';
2571  var SELECTOR_ACTIVE$2 = '.active';
2572  var SELECTOR_BUTTON = '.btn';
2573  /**
2574   * Class definition
2575   */
2576
2577  var Button = /*#__PURE__*/function () {
2578    function Button(element) {
2579      this._element = element;
2580      this.shouldAvoidTriggerChange = false;
2581    } // Getters
2582
2583
2584    var _proto = Button.prototype;
2585
2586    // Public
2587    _proto.toggle = function toggle() {
2588      var triggerChangeEvent = true;
2589      var addAriaPressed = true;
2590      var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
2591
2592      if (rootElement) {
2593        var input = this._element.querySelector(SELECTOR_INPUT);
2594
2595        if (input) {
2596          if (input.type === 'radio') {
2597            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {
2598              triggerChangeEvent = false;
2599            } else {
2600              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);
2601
2602              if (activeElement) {
2603                $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);
2604              }
2605            }
2606          }
2607
2608          if (triggerChangeEvent) {
2609            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
2610            if (input.type === 'checkbox' || input.type === 'radio') {
2611              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);
2612            }
2613
2614            if (!this.shouldAvoidTriggerChange) {
2615              $__default["default"](input).trigger('change');
2616            }
2617          }
2618
2619          input.focus();
2620          addAriaPressed = false;
2621        }
2622      }
2623
2624      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
2625        if (addAriaPressed) {
2626          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));
2627        }
2628
2629        if (triggerChangeEvent) {
2630          $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);
2631        }
2632      }
2633    };
2634
2635    _proto.dispose = function dispose() {
2636      $__default["default"].removeData(this._element, DATA_KEY$9);
2637      this._element = null;
2638    } // Static
2639    ;
2640
2641    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
2642      return this.each(function () {
2643        var $element = $__default["default"](this);
2644        var data = $element.data(DATA_KEY$9);
2645
2646        if (!data) {
2647          data = new Button(this);
2648          $element.data(DATA_KEY$9, data);
2649        }
2650
2651        data.shouldAvoidTriggerChange = avoidTriggerChange;
2652
2653        if (config === 'toggle') {
2654          data[config]();
2655        }
2656      });
2657    };
2658
2659    _createClass(Button, null, [{
2660      key: "VERSION",
2661      get: function get() {
2662        return VERSION$9;
2663      }
2664    }]);
2665
2666    return Button;
2667  }();
2668  /**
2669   * Data API implementation
2670   */
2671
2672
2673  $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
2674    var button = event.target;
2675    var initialButton = button;
2676
2677    if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
2678      button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
2679    }
2680
2681    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
2682      event.preventDefault(); // work around Firefox bug #1540995
2683    } else {
2684      var inputBtn = button.querySelector(SELECTOR_INPUT);
2685
2686      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
2687        event.preventDefault(); // work around Firefox bug #1540995
2688
2689        return;
2690      }
2691
2692      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
2693        Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
2694      }
2695    }
2696  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
2697    var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
2698    $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
2699  });
2700  $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () {
2701    // ensure correct active class is set to match the controls' actual values/states
2702    // find all checkboxes/readio buttons inside data-toggle groups
2703    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
2704
2705    for (var i = 0, len = buttons.length; i < len; i++) {
2706      var button = buttons[i];
2707      var input = button.querySelector(SELECTOR_INPUT);
2708
2709      if (input.checked || input.hasAttribute('checked')) {
2710        button.classList.add(CLASS_NAME_ACTIVE$3);
2711      } else {
2712        button.classList.remove(CLASS_NAME_ACTIVE$3);
2713      }
2714    } // find all button toggles
2715
2716
2717    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));
2718
2719    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
2720      var _button = buttons[_i];
2721
2722      if (_button.getAttribute('aria-pressed') === 'true') {
2723        _button.classList.add(CLASS_NAME_ACTIVE$3);
2724      } else {
2725        _button.classList.remove(CLASS_NAME_ACTIVE$3);
2726      }
2727    }
2728  });
2729  /**
2730   * jQuery
2731   */
2732
2733  $__default["default"].fn[NAME$9] = Button._jQueryInterface;
2734  $__default["default"].fn[NAME$9].Constructor = Button;
2735
2736  $__default["default"].fn[NAME$9].noConflict = function () {
2737    $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;
2738    return Button._jQueryInterface;
2739  };
2740
2741  /**
2742   * Constants
2743   */
2744
2745  var NAME$8 = 'carousel';
2746  var VERSION$8 = '4.6.2';
2747  var DATA_KEY$8 = 'bs.carousel';
2748  var EVENT_KEY$8 = "." + DATA_KEY$8;
2749  var DATA_API_KEY$5 = '.data-api';
2750  var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
2751  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
2752
2753  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
2754
2755  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
2756
2757  var SWIPE_THRESHOLD = 40;
2758  var CLASS_NAME_CAROUSEL = 'carousel';
2759  var CLASS_NAME_ACTIVE$2 = 'active';
2760  var CLASS_NAME_SLIDE = 'slide';
2761  var CLASS_NAME_RIGHT = 'carousel-item-right';
2762  var CLASS_NAME_LEFT = 'carousel-item-left';
2763  var CLASS_NAME_NEXT = 'carousel-item-next';
2764  var CLASS_NAME_PREV = 'carousel-item-prev';
2765  var CLASS_NAME_POINTER_EVENT = 'pointer-event';
2766  var DIRECTION_NEXT = 'next';
2767  var DIRECTION_PREV = 'prev';
2768  var DIRECTION_LEFT = 'left';
2769  var DIRECTION_RIGHT = 'right';
2770  var EVENT_SLIDE = "slide" + EVENT_KEY$8;
2771  var EVENT_SLID = "slid" + EVENT_KEY$8;
2772  var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8;
2773  var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8;
2774  var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8;
2775  var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8;
2776  var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8;
2777  var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8;
2778  var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8;
2779  var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8;
2780  var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8;
2781  var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5;
2782  var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5;
2783  var SELECTOR_ACTIVE$1 = '.active';
2784  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
2785  var SELECTOR_ITEM = '.carousel-item';
2786  var SELECTOR_ITEM_IMG = '.carousel-item img';
2787  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
2788  var SELECTOR_INDICATORS = '.carousel-indicators';
2789  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
2790  var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
2791  var Default$7 = {
2792    interval: 5000,
2793    keyboard: true,
2794    slide: false,
2795    pause: 'hover',
2796    wrap: true,
2797    touch: true
2798  };
2799  var DefaultType$7 = {
2800    interval: '(number|boolean)',
2801    keyboard: 'boolean',
2802    slide: '(boolean|string)',
2803    pause: '(string|boolean)',
2804    wrap: 'boolean',
2805    touch: 'boolean'
2806  };
2807  var PointerType = {
2808    TOUCH: 'touch',
2809    PEN: 'pen'
2810  };
2811  /**
2812   * Class definition
2813   */
2814
2815  var Carousel = /*#__PURE__*/function () {
2816    function Carousel(element, config) {
2817      this._items = null;
2818      this._interval = null;
2819      this._activeElement = null;
2820      this._isPaused = false;
2821      this._isSliding = false;
2822      this.touchTimeout = null;
2823      this.touchStartX = 0;
2824      this.touchDeltaX = 0;
2825      this._config = this._getConfig(config);
2826      this._element = element;
2827      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
2828      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
2829      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
2830
2831      this._addEventListeners();
2832    } // Getters
2833
2834
2835    var _proto = Carousel.prototype;
2836
2837    // Public
2838    _proto.next = function next() {
2839      if (!this._isSliding) {
2840        this._slide(DIRECTION_NEXT);
2841      }
2842    };
2843
2844    _proto.nextWhenVisible = function nextWhenVisible() {
2845      var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
2846      // or the carousel or its parent isn't visible
2847
2848      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {
2849        this.next();
2850      }
2851    };
2852
2853    _proto.prev = function prev() {
2854      if (!this._isSliding) {
2855        this._slide(DIRECTION_PREV);
2856      }
2857    };
2858
2859    _proto.pause = function pause(event) {
2860      if (!event) {
2861        this._isPaused = true;
2862      }
2863
2864      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
2865        Util.triggerTransitionEnd(this._element);
2866        this.cycle(true);
2867      }
2868
2869      clearInterval(this._interval);
2870      this._interval = null;
2871    };
2872
2873    _proto.cycle = function cycle(event) {
2874      if (!event) {
2875        this._isPaused = false;
2876      }
2877
2878      if (this._interval) {
2879        clearInterval(this._interval);
2880        this._interval = null;
2881      }
2882
2883      if (this._config.interval && !this._isPaused) {
2884        this._updateInterval();
2885
2886        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
2887      }
2888    };
2889
2890    _proto.to = function to(index) {
2891      var _this = this;
2892
2893      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
2894
2895      var activeIndex = this._getItemIndex(this._activeElement);
2896
2897      if (index > this._items.length - 1 || index < 0) {
2898        return;
2899      }
2900
2901      if (this._isSliding) {
2902        $__default["default"](this._element).one(EVENT_SLID, function () {
2903          return _this.to(index);
2904        });
2905        return;
2906      }
2907
2908      if (activeIndex === index) {
2909        this.pause();
2910        this.cycle();
2911        return;
2912      }
2913
2914      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
2915
2916      this._slide(direction, this._items[index]);
2917    };
2918
2919    _proto.dispose = function dispose() {
2920      $__default["default"](this._element).off(EVENT_KEY$8);
2921      $__default["default"].removeData(this._element, DATA_KEY$8);
2922      this._items = null;
2923      this._config = null;
2924      this._element = null;
2925      this._interval = null;
2926      this._isPaused = null;
2927      this._isSliding = null;
2928      this._activeElement = null;
2929      this._indicatorsElement = null;
2930    } // Private
2931    ;
2932
2933    _proto._getConfig = function _getConfig(config) {
2934      config = _extends({}, Default$7, config);
2935      Util.typeCheckConfig(NAME$8, config, DefaultType$7);
2936      return config;
2937    };
2938
2939    _proto._handleSwipe = function _handleSwipe() {
2940      var absDeltax = Math.abs(this.touchDeltaX);
2941
2942      if (absDeltax <= SWIPE_THRESHOLD) {
2943        return;
2944      }
2945
2946      var direction = absDeltax / this.touchDeltaX;
2947      this.touchDeltaX = 0; // swipe left
2948
2949      if (direction > 0) {
2950        this.prev();
2951      } // swipe right
2952
2953
2954      if (direction < 0) {
2955        this.next();
2956      }
2957    };
2958
2959    _proto._addEventListeners = function _addEventListeners() {
2960      var _this2 = this;
2961
2962      if (this._config.keyboard) {
2963        $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) {
2964          return _this2._keydown(event);
2965        });
2966      }
2967
2968      if (this._config.pause === 'hover') {
2969        $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) {
2970          return _this2.pause(event);
2971        }).on(EVENT_MOUSELEAVE, function (event) {
2972          return _this2.cycle(event);
2973        });
2974      }
2975
2976      if (this._config.touch) {
2977        this._addTouchEventListeners();
2978      }
2979    };
2980
2981    _proto._addTouchEventListeners = function _addTouchEventListeners() {
2982      var _this3 = this;
2983
2984      if (!this._touchSupported) {
2985        return;
2986      }
2987
2988      var start = function start(event) {
2989        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
2990          _this3.touchStartX = event.originalEvent.clientX;
2991        } else if (!_this3._pointerEvent) {
2992          _this3.touchStartX = event.originalEvent.touches[0].clientX;
2993        }
2994      };
2995
2996      var move = function move(event) {
2997        // ensure swiping with one touch and not pinching
2998        _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;
2999      };
3000
3001      var end = function end(event) {
3002        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
3003          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
3004        }
3005
3006        _this3._handleSwipe();
3007
3008        if (_this3._config.pause === 'hover') {
3009          // If it's a touch-enabled device, mouseenter/leave are fired as
3010          // part of the mouse compatibility events on first tap - the carousel
3011          // would stop cycling until user tapped out of it;
3012          // here, we listen for touchend, explicitly pause the carousel
3013          // (as if it's the second time we tap on it, mouseenter compat event
3014          // is NOT fired) and after a timeout (to allow for mouse compatibility
3015          // events to fire) we explicitly restart cycling
3016          _this3.pause();
3017
3018          if (_this3.touchTimeout) {
3019            clearTimeout(_this3.touchTimeout);
3020          }
3021
3022          _this3.touchTimeout = setTimeout(function (event) {
3023            return _this3.cycle(event);
3024          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
3025        }
3026      };
3027
3028      $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
3029        return e.preventDefault();
3030      });
3031
3032      if (this._pointerEvent) {
3033        $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) {
3034          return start(event);
3035        });
3036        $__default["default"](this._element).on(EVENT_POINTERUP, function (event) {
3037          return end(event);
3038        });
3039
3040        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
3041      } else {
3042        $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) {
3043          return start(event);
3044        });
3045        $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) {
3046          return move(event);
3047        });
3048        $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) {
3049          return end(event);
3050        });
3051      }
3052    };
3053
3054    _proto._keydown = function _keydown(event) {
3055      if (/input|textarea/i.test(event.target.tagName)) {
3056        return;
3057      }
3058
3059      switch (event.which) {
3060        case ARROW_LEFT_KEYCODE:
3061          event.preventDefault();
3062          this.prev();
3063          break;
3064
3065        case ARROW_RIGHT_KEYCODE:
3066          event.preventDefault();
3067          this.next();
3068          break;
3069      }
3070    };
3071
3072    _proto._getItemIndex = function _getItemIndex(element) {
3073      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
3074      return this._items.indexOf(element);
3075    };
3076
3077    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
3078      var isNextDirection = direction === DIRECTION_NEXT;
3079      var isPrevDirection = direction === DIRECTION_PREV;
3080
3081      var activeIndex = this._getItemIndex(activeElement);
3082
3083      var lastItemIndex = this._items.length - 1;
3084      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
3085
3086      if (isGoingToWrap && !this._config.wrap) {
3087        return activeElement;
3088      }
3089
3090      var delta = direction === DIRECTION_PREV ? -1 : 1;
3091      var itemIndex = (activeIndex + delta) % this._items.length;
3092      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
3093    };
3094
3095    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
3096      var targetIndex = this._getItemIndex(relatedTarget);
3097
3098      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
3099
3100      var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
3101        relatedTarget: relatedTarget,
3102        direction: eventDirectionName,
3103        from: fromIndex,
3104        to: targetIndex
3105      });
3106      $__default["default"](this._element).trigger(slideEvent);
3107      return slideEvent;
3108    };
3109
3110    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
3111      if (this._indicatorsElement) {
3112        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
3113        $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2);
3114
3115        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
3116
3117        if (nextIndicator) {
3118          $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);
3119        }
3120      }
3121    };
3122
3123    _proto._updateInterval = function _updateInterval() {
3124      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
3125
3126      if (!element) {
3127        return;
3128      }
3129
3130      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);
3131
3132      if (elementInterval) {
3133        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
3134        this._config.interval = elementInterval;
3135      } else {
3136        this._config.interval = this._config.defaultInterval || this._config.interval;
3137      }
3138    };
3139
3140    _proto._slide = function _slide(direction, element) {
3141      var _this4 = this;
3142
3143      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
3144
3145      var activeElementIndex = this._getItemIndex(activeElement);
3146
3147      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
3148
3149      var nextElementIndex = this._getItemIndex(nextElement);
3150
3151      var isCycling = Boolean(this._interval);
3152      var directionalClassName;
3153      var orderClassName;
3154      var eventDirectionName;
3155
3156      if (direction === DIRECTION_NEXT) {
3157        directionalClassName = CLASS_NAME_LEFT;
3158        orderClassName = CLASS_NAME_NEXT;
3159        eventDirectionName = DIRECTION_LEFT;
3160      } else {
3161        directionalClassName = CLASS_NAME_RIGHT;
3162        orderClassName = CLASS_NAME_PREV;
3163        eventDirectionName = DIRECTION_RIGHT;
3164      }
3165
3166      if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {
3167        this._isSliding = false;
3168        return;
3169      }
3170
3171      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
3172
3173      if (slideEvent.isDefaultPrevented()) {
3174        return;
3175      }
3176
3177      if (!activeElement || !nextElement) {
3178        // Some weirdness is happening, so we bail
3179        return;
3180      }
3181
3182      this._isSliding = true;
3183
3184      if (isCycling) {
3185        this.pause();
3186      }
3187
3188      this._setActiveIndicatorElement(nextElement);
3189
3190      this._activeElement = nextElement;
3191      var slidEvent = $__default["default"].Event(EVENT_SLID, {
3192        relatedTarget: nextElement,
3193        direction: eventDirectionName,
3194        from: activeElementIndex,
3195        to: nextElementIndex
3196      });
3197
3198      if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
3199        $__default["default"](nextElement).addClass(orderClassName);
3200        Util.reflow(nextElement);
3201        $__default["default"](activeElement).addClass(directionalClassName);
3202        $__default["default"](nextElement).addClass(directionalClassName);
3203        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
3204        $__default["default"](activeElement).one(Util.TRANSITION_END, function () {
3205          $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2);
3206          $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName);
3207          _this4._isSliding = false;
3208          setTimeout(function () {
3209            return $__default["default"](_this4._element).trigger(slidEvent);
3210          }, 0);
3211        }).emulateTransitionEnd(transitionDuration);
3212      } else {
3213        $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);
3214        $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2);
3215        this._isSliding = false;
3216        $__default["default"](this._element).trigger(slidEvent);
3217      }
3218
3219      if (isCycling) {
3220        this.cycle();
3221      }
3222    } // Static
3223    ;
3224
3225    Carousel._jQueryInterface = function _jQueryInterface(config) {
3226      return this.each(function () {
3227        var data = $__default["default"](this).data(DATA_KEY$8);
3228
3229        var _config = _extends({}, Default$7, $__default["default"](this).data());
3230
3231        if (typeof config === 'object') {
3232          _config = _extends({}, _config, config);
3233        }
3234
3235        var action = typeof config === 'string' ? config : _config.slide;
3236
3237        if (!data) {
3238          data = new Carousel(this, _config);
3239          $__default["default"](this).data(DATA_KEY$8, data);
3240        }
3241
3242        if (typeof config === 'number') {
3243          data.to(config);
3244        } else if (typeof action === 'string') {
3245          if (typeof data[action] === 'undefined') {
3246            throw new TypeError("No method named \"" + action + "\"");
3247          }
3248
3249          data[action]();
3250        } else if (_config.interval && _config.ride) {
3251          data.pause();
3252          data.cycle();
3253        }
3254      });
3255    };
3256
3257    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
3258      var selector = Util.getSelectorFromElement(this);
3259
3260      if (!selector) {
3261        return;
3262      }
3263
3264      var target = $__default["default"](selector)[0];
3265
3266      if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
3267        return;
3268      }
3269
3270      var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
3271
3272      var slideIndex = this.getAttribute('data-slide-to');
3273
3274      if (slideIndex) {
3275        config.interval = false;
3276      }
3277
3278      Carousel._jQueryInterface.call($__default["default"](target), config);
3279
3280      if (slideIndex) {
3281        $__default["default"](target).data(DATA_KEY$8).to(slideIndex);
3282      }
3283
3284      event.preventDefault();
3285    };
3286
3287    _createClass(Carousel, null, [{
3288      key: "VERSION",
3289      get: function get() {
3290        return VERSION$8;
3291      }
3292    }, {
3293      key: "Default",
3294      get: function get() {
3295        return Default$7;
3296      }
3297    }]);
3298
3299    return Carousel;
3300  }();
3301  /**
3302   * Data API implementation
3303   */
3304
3305
3306  $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
3307  $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () {
3308    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
3309
3310    for (var i = 0, len = carousels.length; i < len; i++) {
3311      var $carousel = $__default["default"](carousels[i]);
3312
3313      Carousel._jQueryInterface.call($carousel, $carousel.data());
3314    }
3315  });
3316  /**
3317   * jQuery
3318   */
3319
3320  $__default["default"].fn[NAME$8] = Carousel._jQueryInterface;
3321  $__default["default"].fn[NAME$8].Constructor = Carousel;
3322
3323  $__default["default"].fn[NAME$8].noConflict = function () {
3324    $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;
3325    return Carousel._jQueryInterface;
3326  };
3327
3328  /**
3329   * Constants
3330   */
3331
3332  var NAME$7 = 'collapse';
3333  var VERSION$7 = '4.6.2';
3334  var DATA_KEY$7 = 'bs.collapse';
3335  var EVENT_KEY$7 = "." + DATA_KEY$7;
3336  var DATA_API_KEY$4 = '.data-api';
3337  var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
3338  var CLASS_NAME_SHOW$6 = 'show';
3339  var CLASS_NAME_COLLAPSE = 'collapse';
3340  var CLASS_NAME_COLLAPSING = 'collapsing';
3341  var CLASS_NAME_COLLAPSED = 'collapsed';
3342  var DIMENSION_WIDTH = 'width';
3343  var DIMENSION_HEIGHT = 'height';
3344  var EVENT_SHOW$4 = "show" + EVENT_KEY$7;
3345  var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7;
3346  var EVENT_HIDE$4 = "hide" + EVENT_KEY$7;
3347  var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7;
3348  var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4;
3349  var SELECTOR_ACTIVES = '.show, .collapsing';
3350  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]';
3351  var Default$6 = {
3352    toggle: true,
3353    parent: ''
3354  };
3355  var DefaultType$6 = {
3356    toggle: 'boolean',
3357    parent: '(string|element)'
3358  };
3359  /**
3360   * Class definition
3361   */
3362
3363  var Collapse = /*#__PURE__*/function () {
3364    function Collapse(element, config) {
3365      this._isTransitioning = false;
3366      this._element = element;
3367      this._config = this._getConfig(config);
3368      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
3369      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));
3370
3371      for (var i = 0, len = toggleList.length; i < len; i++) {
3372        var elem = toggleList[i];
3373        var selector = Util.getSelectorFromElement(elem);
3374        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
3375          return foundElem === element;
3376        });
3377
3378        if (selector !== null && filterElement.length > 0) {
3379          this._selector = selector;
3380
3381          this._triggerArray.push(elem);
3382        }
3383      }
3384
3385      this._parent = this._config.parent ? this._getParent() : null;
3386
3387      if (!this._config.parent) {
3388        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
3389      }
3390
3391      if (this._config.toggle) {
3392        this.toggle();
3393      }
3394    } // Getters
3395
3396
3397    var _proto = Collapse.prototype;
3398
3399    // Public
3400    _proto.toggle = function toggle() {
3401      if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
3402        this.hide();
3403      } else {
3404        this.show();
3405      }
3406    };
3407
3408    _proto.show = function show() {
3409      var _this = this;
3410
3411      if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
3412        return;
3413      }
3414
3415      var actives;
3416      var activesData;
3417
3418      if (this._parent) {
3419        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
3420          if (typeof _this._config.parent === 'string') {
3421            return elem.getAttribute('data-parent') === _this._config.parent;
3422          }
3423
3424          return elem.classList.contains(CLASS_NAME_COLLAPSE);
3425        });
3426
3427        if (actives.length === 0) {
3428          actives = null;
3429        }
3430      }
3431
3432      if (actives) {
3433        activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7);
3434
3435        if (activesData && activesData._isTransitioning) {
3436          return;
3437        }
3438      }
3439
3440      var startEvent = $__default["default"].Event(EVENT_SHOW$4);
3441      $__default["default"](this._element).trigger(startEvent);
3442
3443      if (startEvent.isDefaultPrevented()) {
3444        return;
3445      }
3446
3447      if (actives) {
3448        Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
3449
3450        if (!activesData) {
3451          $__default["default"](actives).data(DATA_KEY$7, null);
3452        }
3453      }
3454
3455      var dimension = this._getDimension();
3456
3457      $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
3458      this._element.style[dimension] = 0;
3459
3460      if (this._triggerArray.length) {
3461        $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
3462      }
3463
3464      this.setTransitioning(true);
3465
3466      var complete = function complete() {
3467        $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
3468        _this._element.style[dimension] = '';
3469
3470        _this.setTransitioning(false);
3471
3472        $__default["default"](_this._element).trigger(EVENT_SHOWN$4);
3473      };
3474
3475      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
3476      var scrollSize = "scroll" + capitalizedDimension;
3477      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
3478      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3479      this._element.style[dimension] = this._element[scrollSize] + "px";
3480    };
3481
3482    _proto.hide = function hide() {
3483      var _this2 = this;
3484
3485      if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
3486        return;
3487      }
3488
3489      var startEvent = $__default["default"].Event(EVENT_HIDE$4);
3490      $__default["default"](this._element).trigger(startEvent);
3491
3492      if (startEvent.isDefaultPrevented()) {
3493        return;
3494      }
3495
3496      var dimension = this._getDimension();
3497
3498      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
3499      Util.reflow(this._element);
3500      $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
3501      var triggerArrayLength = this._triggerArray.length;
3502
3503      if (triggerArrayLength > 0) {
3504        for (var i = 0; i < triggerArrayLength; i++) {
3505          var trigger = this._triggerArray[i];
3506          var selector = Util.getSelectorFromElement(trigger);
3507
3508          if (selector !== null) {
3509            var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
3510
3511            if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {
3512              $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
3513            }
3514          }
3515        }
3516      }
3517
3518      this.setTransitioning(true);
3519
3520      var complete = function complete() {
3521        _this2.setTransitioning(false);
3522
3523        $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);
3524      };
3525
3526      this._element.style[dimension] = '';
3527      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
3528      $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
3529    };
3530
3531    _proto.setTransitioning = function setTransitioning(isTransitioning) {
3532      this._isTransitioning = isTransitioning;
3533    };
3534
3535    _proto.dispose = function dispose() {
3536      $__default["default"].removeData(this._element, DATA_KEY$7);
3537      this._config = null;
3538      this._parent = null;
3539      this._element = null;
3540      this._triggerArray = null;
3541      this._isTransitioning = null;
3542    } // Private
3543    ;
3544
3545    _proto._getConfig = function _getConfig(config) {
3546      config = _extends({}, Default$6, config);
3547      config.toggle = Boolean(config.toggle); // Coerce string values
3548
3549      Util.typeCheckConfig(NAME$7, config, DefaultType$6);
3550      return config;
3551    };
3552
3553    _proto._getDimension = function _getDimension() {
3554      var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
3555      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
3556    };
3557
3558    _proto._getParent = function _getParent() {
3559      var _this3 = this;
3560
3561      var parent;
3562
3563      if (Util.isElement(this._config.parent)) {
3564        parent = this._config.parent; // It's a jQuery object
3565
3566        if (typeof this._config.parent.jquery !== 'undefined') {
3567          parent = this._config.parent[0];
3568        }
3569      } else {
3570        parent = document.querySelector(this._config.parent);
3571      }
3572
3573      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
3574      var children = [].slice.call(parent.querySelectorAll(selector));
3575      $__default["default"](children).each(function (i, element) {
3576        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
3577      });
3578      return parent;
3579    };
3580
3581    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
3582      var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6);
3583
3584      if (triggerArray.length) {
3585        $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
3586      }
3587    } // Static
3588    ;
3589
3590    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
3591      var selector = Util.getSelectorFromElement(element);
3592      return selector ? document.querySelector(selector) : null;
3593    };
3594
3595    Collapse._jQueryInterface = function _jQueryInterface(config) {
3596      return this.each(function () {
3597        var $element = $__default["default"](this);
3598        var data = $element.data(DATA_KEY$7);
3599
3600        var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});
3601
3602        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
3603          _config.toggle = false;
3604        }
3605
3606        if (!data) {
3607          data = new Collapse(this, _config);
3608          $element.data(DATA_KEY$7, data);
3609        }
3610
3611        if (typeof config === 'string') {
3612          if (typeof data[config] === 'undefined') {
3613            throw new TypeError("No method named \"" + config + "\"");
3614          }
3615
3616          data[config]();
3617        }
3618      });
3619    };
3620
3621    _createClass(Collapse, null, [{
3622      key: "VERSION",
3623      get: function get() {
3624        return VERSION$7;
3625      }
3626    }, {
3627      key: "Default",
3628      get: function get() {
3629        return Default$6;
3630      }
3631    }]);
3632
3633    return Collapse;
3634  }();
3635  /**
3636   * Data API implementation
3637   */
3638
3639
3640  $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
3641    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
3642    if (event.currentTarget.tagName === 'A') {
3643      event.preventDefault();
3644    }
3645
3646    var $trigger = $__default["default"](this);
3647    var selector = Util.getSelectorFromElement(this);
3648    var selectors = [].slice.call(document.querySelectorAll(selector));
3649    $__default["default"](selectors).each(function () {
3650      var $target = $__default["default"](this);
3651      var data = $target.data(DATA_KEY$7);
3652      var config = data ? 'toggle' : $trigger.data();
3653
3654      Collapse._jQueryInterface.call($target, config);
3655    });
3656  });
3657  /**
3658   * jQuery
3659   */
3660
3661  $__default["default"].fn[NAME$7] = Collapse._jQueryInterface;
3662  $__default["default"].fn[NAME$7].Constructor = Collapse;
3663
3664  $__default["default"].fn[NAME$7].noConflict = function () {
3665    $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
3666    return Collapse._jQueryInterface;
3667  };
3668
3669  /**
3670   * Constants
3671   */
3672
3673  var NAME$6 = 'dropdown';
3674  var VERSION$6 = '4.6.2';
3675  var DATA_KEY$6 = 'bs.dropdown';
3676  var EVENT_KEY$6 = "." + DATA_KEY$6;
3677  var DATA_API_KEY$3 = '.data-api';
3678  var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
3679  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
3680
3681  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
3682
3683  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
3684
3685  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
3686
3687  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
3688
3689  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
3690
3691  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1);
3692  var CLASS_NAME_DISABLED$1 = 'disabled';
3693  var CLASS_NAME_SHOW$5 = 'show';
3694  var CLASS_NAME_DROPUP = 'dropup';
3695  var CLASS_NAME_DROPRIGHT = 'dropright';
3696  var CLASS_NAME_DROPLEFT = 'dropleft';
3697  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
3698  var CLASS_NAME_POSITION_STATIC = 'position-static';
3699  var EVENT_HIDE$3 = "hide" + EVENT_KEY$6;
3700  var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6;
3701  var EVENT_SHOW$3 = "show" + EVENT_KEY$6;
3702  var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6;
3703  var EVENT_CLICK = "click" + EVENT_KEY$6;
3704  var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3;
3705  var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3;
3706  var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3;
3707  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
3708  var SELECTOR_FORM_CHILD = '.dropdown form';
3709  var SELECTOR_MENU = '.dropdown-menu';
3710  var SELECTOR_NAVBAR_NAV = '.navbar-nav';
3711  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
3712  var PLACEMENT_TOP = 'top-start';
3713  var PLACEMENT_TOPEND = 'top-end';
3714  var PLACEMENT_BOTTOM = 'bottom-start';
3715  var PLACEMENT_BOTTOMEND = 'bottom-end';
3716  var PLACEMENT_RIGHT = 'right-start';
3717  var PLACEMENT_LEFT = 'left-start';
3718  var Default$5 = {
3719    offset: 0,
3720    flip: true,
3721    boundary: 'scrollParent',
3722    reference: 'toggle',
3723    display: 'dynamic',
3724    popperConfig: null
3725  };
3726  var DefaultType$5 = {
3727    offset: '(number|string|function)',
3728    flip: 'boolean',
3729    boundary: '(string|element)',
3730    reference: '(string|element)',
3731    display: 'string',
3732    popperConfig: '(null|object)'
3733  };
3734  /**
3735   * Class definition
3736   */
3737
3738  var Dropdown = /*#__PURE__*/function () {
3739    function Dropdown(element, config) {
3740      this._element = element;
3741      this._popper = null;
3742      this._config = this._getConfig(config);
3743      this._menu = this._getMenuElement();
3744      this._inNavbar = this._detectNavbar();
3745
3746      this._addEventListeners();
3747    } // Getters
3748
3749
3750    var _proto = Dropdown.prototype;
3751
3752    // Public
3753    _proto.toggle = function toggle() {
3754      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {
3755        return;
3756      }
3757
3758      var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5);
3759
3760      Dropdown._clearMenus();
3761
3762      if (isActive) {
3763        return;
3764      }
3765
3766      this.show(true);
3767    };
3768
3769    _proto.show = function show(usePopper) {
3770      if (usePopper === void 0) {
3771        usePopper = false;
3772      }
3773
3774      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
3775        return;
3776      }
3777
3778      var relatedTarget = {
3779        relatedTarget: this._element
3780      };
3781      var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget);
3782
3783      var parent = Dropdown._getParentFromElement(this._element);
3784
3785      $__default["default"](parent).trigger(showEvent);
3786
3787      if (showEvent.isDefaultPrevented()) {
3788        return;
3789      } // Totally disable Popper for Dropdowns in Navbar
3790
3791
3792      if (!this._inNavbar && usePopper) {
3793        // Check for Popper dependency
3794        if (typeof Popper__default["default"] === 'undefined') {
3795          throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
3796        }
3797
3798        var referenceElement = this._element;
3799
3800        if (this._config.reference === 'parent') {
3801          referenceElement = parent;
3802        } else if (Util.isElement(this._config.reference)) {
3803          referenceElement = this._config.reference; // Check if it's jQuery element
3804
3805          if (typeof this._config.reference.jquery !== 'undefined') {
3806            referenceElement = this._config.reference[0];
3807          }
3808        } // If boundary is not `scrollParent`, then set position to `static`
3809        // to allow the menu to "escape" the scroll parent's boundaries
3810        // https://github.com/twbs/bootstrap/issues/24251
3811
3812
3813        if (this._config.boundary !== 'scrollParent') {
3814          $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
3815        }
3816
3817        this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
3818      } // If this is a touch-enabled device we add extra
3819      // empty mouseover listeners to the body's immediate children;
3820      // only needed because of broken event delegation on iOS
3821      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
3822
3823
3824      if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
3825        $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
3826      }
3827
3828      this._element.focus();
3829
3830      this._element.setAttribute('aria-expanded', true);
3831
3832      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
3833      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget));
3834    };
3835
3836    _proto.hide = function hide() {
3837      if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
3838        return;
3839      }
3840
3841      var relatedTarget = {
3842        relatedTarget: this._element
3843      };
3844      var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
3845
3846      var parent = Dropdown._getParentFromElement(this._element);
3847
3848      $__default["default"](parent).trigger(hideEvent);
3849
3850      if (hideEvent.isDefaultPrevented()) {
3851        return;
3852      }
3853
3854      if (this._popper) {
3855        this._popper.destroy();
3856      }
3857
3858      $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
3859      $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
3860    };
3861
3862    _proto.dispose = function dispose() {
3863      $__default["default"].removeData(this._element, DATA_KEY$6);
3864      $__default["default"](this._element).off(EVENT_KEY$6);
3865      this._element = null;
3866      this._menu = null;
3867
3868      if (this._popper !== null) {
3869        this._popper.destroy();
3870
3871        this._popper = null;
3872      }
3873    };
3874
3875    _proto.update = function update() {
3876      this._inNavbar = this._detectNavbar();
3877
3878      if (this._popper !== null) {
3879        this._popper.scheduleUpdate();
3880      }
3881    } // Private
3882    ;
3883
3884    _proto._addEventListeners = function _addEventListeners() {
3885      var _this = this;
3886
3887      $__default["default"](this._element).on(EVENT_CLICK, function (event) {
3888        event.preventDefault();
3889        event.stopPropagation();
3890
3891        _this.toggle();
3892      });
3893    };
3894
3895    _proto._getConfig = function _getConfig(config) {
3896      config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
3897      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
3898      return config;
3899    };
3900
3901    _proto._getMenuElement = function _getMenuElement() {
3902      if (!this._menu) {
3903        var parent = Dropdown._getParentFromElement(this._element);
3904
3905        if (parent) {
3906          this._menu = parent.querySelector(SELECTOR_MENU);
3907        }
3908      }
3909
3910      return this._menu;
3911    };
3912
3913    _proto._getPlacement = function _getPlacement() {
3914      var $parentDropdown = $__default["default"](this._element.parentNode);
3915      var placement = PLACEMENT_BOTTOM; // Handle dropup
3916
3917      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
3918        placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
3919      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
3920        placement = PLACEMENT_RIGHT;
3921      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
3922        placement = PLACEMENT_LEFT;
3923      } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
3924        placement = PLACEMENT_BOTTOMEND;
3925      }
3926
3927      return placement;
3928    };
3929
3930    _proto._detectNavbar = function _detectNavbar() {
3931      return $__default["default"](this._element).closest('.navbar').length > 0;
3932    };
3933
3934    _proto._getOffset = function _getOffset() {
3935      var _this2 = this;
3936
3937      var offset = {};
3938
3939      if (typeof this._config.offset === 'function') {
3940        offset.fn = function (data) {
3941          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));
3942          return data;
3943        };
3944      } else {
3945        offset.offset = this._config.offset;
3946      }
3947
3948      return offset;
3949    };
3950
3951    _proto._getPopperConfig = function _getPopperConfig() {
3952      var popperConfig = {
3953        placement: this._getPlacement(),
3954        modifiers: {
3955          offset: this._getOffset(),
3956          flip: {
3957            enabled: this._config.flip
3958          },
3959          preventOverflow: {
3960            boundariesElement: this._config.boundary
3961          }
3962        }
3963      }; // Disable Popper if we have a static display
3964
3965      if (this._config.display === 'static') {
3966        popperConfig.modifiers.applyStyle = {
3967          enabled: false
3968        };
3969      }
3970
3971      return _extends({}, popperConfig, this._config.popperConfig);
3972    } // Static
3973    ;
3974
3975    Dropdown._jQueryInterface = function _jQueryInterface(config) {
3976      return this.each(function () {
3977        var data = $__default["default"](this).data(DATA_KEY$6);
3978
3979        var _config = typeof config === 'object' ? config : null;
3980
3981        if (!data) {
3982          data = new Dropdown(this, _config);
3983          $__default["default"](this).data(DATA_KEY$6, data);
3984        }
3985
3986        if (typeof config === 'string') {
3987          if (typeof data[config] === 'undefined') {
3988            throw new TypeError("No method named \"" + config + "\"");
3989          }
3990
3991          data[config]();
3992        }
3993      });
3994    };
3995
3996    Dropdown._clearMenus = function _clearMenus(event) {
3997      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
3998        return;
3999      }
4000
4001      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
4002
4003      for (var i = 0, len = toggles.length; i < len; i++) {
4004        var parent = Dropdown._getParentFromElement(toggles[i]);
4005
4006        var context = $__default["default"](toggles[i]).data(DATA_KEY$6);
4007        var relatedTarget = {
4008          relatedTarget: toggles[i]
4009        };
4010
4011        if (event && event.type === 'click') {
4012          relatedTarget.clickEvent = event;
4013        }
4014
4015        if (!context) {
4016          continue;
4017        }
4018
4019        var dropdownMenu = context._menu;
4020
4021        if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) {
4022          continue;
4023        }
4024
4025        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
4026          continue;
4027        }
4028
4029        var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
4030        $__default["default"](parent).trigger(hideEvent);
4031
4032        if (hideEvent.isDefaultPrevented()) {
4033          continue;
4034        } // If this is a touch-enabled device we remove the extra
4035        // empty mouseover listeners we added for iOS support
4036
4037
4038        if ('ontouchstart' in document.documentElement) {
4039          $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
4040        }
4041
4042        toggles[i].setAttribute('aria-expanded', 'false');
4043
4044        if (context._popper) {
4045          context._popper.destroy();
4046        }
4047
4048        $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);
4049        $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
4050      }
4051    };
4052
4053    Dropdown._getParentFromElement = function _getParentFromElement(element) {
4054      var parent;
4055      var selector = Util.getSelectorFromElement(element);
4056
4057      if (selector) {
4058        parent = document.querySelector(selector);
4059      }
4060
4061      return parent || element.parentNode;
4062    } // eslint-disable-next-line complexity
4063    ;
4064
4065    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
4066      // If not input/textarea:
4067      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
4068      // If input/textarea:
4069      //  - If space key => not a dropdown command
4070      //  - If key is other than escape
4071      //    - If key is not up or down => not a dropdown command
4072      //    - If trigger inside the menu => not a dropdown command
4073      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
4074        return;
4075      }
4076
4077      if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) {
4078        return;
4079      }
4080
4081      var parent = Dropdown._getParentFromElement(this);
4082
4083      var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5);
4084
4085      if (!isActive && event.which === ESCAPE_KEYCODE$1) {
4086        return;
4087      }
4088
4089      event.preventDefault();
4090      event.stopPropagation();
4091
4092      if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {
4093        if (event.which === ESCAPE_KEYCODE$1) {
4094          $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
4095        }
4096
4097        $__default["default"](this).trigger('click');
4098        return;
4099      }
4100
4101      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
4102        return $__default["default"](item).is(':visible');
4103      });
4104
4105      if (items.length === 0) {
4106        return;
4107      }
4108
4109      var index = items.indexOf(event.target);
4110
4111      if (event.which === ARROW_UP_KEYCODE && index > 0) {
4112        // Up
4113        index--;
4114      }
4115
4116      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
4117        // Down
4118        index++;
4119      }
4120
4121      if (index < 0) {
4122        index = 0;
4123      }
4124
4125      items[index].focus();
4126    };
4127
4128    _createClass(Dropdown, null, [{
4129      key: "VERSION",
4130      get: function get() {
4131        return VERSION$6;
4132      }
4133    }, {
4134      key: "Default",
4135      get: function get() {
4136        return Default$5;
4137      }
4138    }, {
4139      key: "DefaultType",
4140      get: function get() {
4141        return DefaultType$5;
4142      }
4143    }]);
4144
4145    return Dropdown;
4146  }();
4147  /**
4148   * Data API implementation
4149   */
4150
4151
4152  $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
4153    event.preventDefault();
4154    event.stopPropagation();
4155
4156    Dropdown._jQueryInterface.call($__default["default"](this), 'toggle');
4157  }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {
4158    e.stopPropagation();
4159  });
4160  /**
4161   * jQuery
4162   */
4163
4164  $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface;
4165  $__default["default"].fn[NAME$6].Constructor = Dropdown;
4166
4167  $__default["default"].fn[NAME$6].noConflict = function () {
4168    $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
4169    return Dropdown._jQueryInterface;
4170  };
4171
4172  /**
4173   * Constants
4174   */
4175
4176  var NAME$5 = 'modal';
4177  var VERSION$5 = '4.6.2';
4178  var DATA_KEY$5 = 'bs.modal';
4179  var EVENT_KEY$5 = "." + DATA_KEY$5;
4180  var DATA_API_KEY$2 = '.data-api';
4181  var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
4182  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
4183
4184  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
4185  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
4186  var CLASS_NAME_BACKDROP = 'modal-backdrop';
4187  var CLASS_NAME_OPEN = 'modal-open';
4188  var CLASS_NAME_FADE$4 = 'fade';
4189  var CLASS_NAME_SHOW$4 = 'show';
4190  var CLASS_NAME_STATIC = 'modal-static';
4191  var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
4192  var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
4193  var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
4194  var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
4195  var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
4196  var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
4197  var EVENT_RESIZE = "resize" + EVENT_KEY$5;
4198  var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5;
4199  var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
4200  var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
4201  var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
4202  var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2;
4203  var SELECTOR_DIALOG = '.modal-dialog';
4204  var SELECTOR_MODAL_BODY = '.modal-body';
4205  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]';
4206  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]';
4207  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
4208  var SELECTOR_STICKY_CONTENT = '.sticky-top';
4209  var Default$4 = {
4210    backdrop: true,
4211    keyboard: true,
4212    focus: true,
4213    show: true
4214  };
4215  var DefaultType$4 = {
4216    backdrop: '(boolean|string)',
4217    keyboard: 'boolean',
4218    focus: 'boolean',
4219    show: 'boolean'
4220  };
4221  /**
4222   * Class definition
4223   */
4224
4225  var Modal = /*#__PURE__*/function () {
4226    function Modal(element, config) {
4227      this._config = this._getConfig(config);
4228      this._element = element;
4229      this._dialog = element.querySelector(SELECTOR_DIALOG);
4230      this._backdrop = null;
4231      this._isShown = false;
4232      this._isBodyOverflowing = false;
4233      this._ignoreBackdropClick = false;
4234      this._isTransitioning = false;
4235      this._scrollbarWidth = 0;
4236    } // Getters
4237
4238
4239    var _proto = Modal.prototype;
4240
4241    // Public
4242    _proto.toggle = function toggle(relatedTarget) {
4243      return this._isShown ? this.hide() : this.show(relatedTarget);
4244    };
4245
4246    _proto.show = function show(relatedTarget) {
4247      var _this = this;
4248
4249      if (this._isShown || this._isTransitioning) {
4250        return;
4251      }
4252
4253      var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
4254        relatedTarget: relatedTarget
4255      });
4256      $__default["default"](this._element).trigger(showEvent);
4257
4258      if (showEvent.isDefaultPrevented()) {
4259        return;
4260      }
4261
4262      this._isShown = true;
4263
4264      if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
4265        this._isTransitioning = true;
4266      }
4267
4268      this._checkScrollbar();
4269
4270      this._setScrollbar();
4271
4272      this._adjustDialog();
4273
4274      this._setEscapeEvent();
4275
4276      this._setResizeEvent();
4277
4278      $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {
4279        return _this.hide(event);
4280      });
4281      $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
4282        $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
4283          if ($__default["default"](event.target).is(_this._element)) {
4284            _this._ignoreBackdropClick = true;
4285          }
4286        });
4287      });
4288
4289      this._showBackdrop(function () {
4290        return _this._showElement(relatedTarget);
4291      });
4292    };
4293
4294    _proto.hide = function hide(event) {
4295      var _this2 = this;
4296
4297      if (event) {
4298        event.preventDefault();
4299      }
4300
4301      if (!this._isShown || this._isTransitioning) {
4302        return;
4303      }
4304
4305      var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
4306      $__default["default"](this._element).trigger(hideEvent);
4307
4308      if (!this._isShown || hideEvent.isDefaultPrevented()) {
4309        return;
4310      }
4311
4312      this._isShown = false;
4313      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
4314
4315      if (transition) {
4316        this._isTransitioning = true;
4317      }
4318
4319      this._setEscapeEvent();
4320
4321      this._setResizeEvent();
4322
4323      $__default["default"](document).off(EVENT_FOCUSIN);
4324      $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4);
4325      $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1);
4326      $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
4327
4328      if (transition) {
4329        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
4330        $__default["default"](this._element).one(Util.TRANSITION_END, function (event) {
4331          return _this2._hideModal(event);
4332        }).emulateTransitionEnd(transitionDuration);
4333      } else {
4334        this._hideModal();
4335      }
4336    };
4337
4338    _proto.dispose = function dispose() {
4339      [window, this._element, this._dialog].forEach(function (htmlElement) {
4340        return $__default["default"](htmlElement).off(EVENT_KEY$5);
4341      });
4342      /**
4343       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
4344       * Do not move `document` in `htmlElements` array
4345       * It will remove `EVENT_CLICK_DATA_API` event that should remain
4346       */
4347
4348      $__default["default"](document).off(EVENT_FOCUSIN);
4349      $__default["default"].removeData(this._element, DATA_KEY$5);
4350      this._config = null;
4351      this._element = null;
4352      this._dialog = null;
4353      this._backdrop = null;
4354      this._isShown = null;
4355      this._isBodyOverflowing = null;
4356      this._ignoreBackdropClick = null;
4357      this._isTransitioning = null;
4358      this._scrollbarWidth = null;
4359    };
4360
4361    _proto.handleUpdate = function handleUpdate() {
4362      this._adjustDialog();
4363    } // Private
4364    ;
4365
4366    _proto._getConfig = function _getConfig(config) {
4367      config = _extends({}, Default$4, config);
4368      Util.typeCheckConfig(NAME$5, config, DefaultType$4);
4369      return config;
4370    };
4371
4372    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
4373      var _this3 = this;
4374
4375      var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
4376      $__default["default"](this._element).trigger(hideEventPrevented);
4377
4378      if (hideEventPrevented.isDefaultPrevented()) {
4379        return;
4380      }
4381
4382      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4383
4384      if (!isModalOverflowing) {
4385        this._element.style.overflowY = 'hidden';
4386      }
4387
4388      this._element.classList.add(CLASS_NAME_STATIC);
4389
4390      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);
4391      $__default["default"](this._element).off(Util.TRANSITION_END);
4392      $__default["default"](this._element).one(Util.TRANSITION_END, function () {
4393        _this3._element.classList.remove(CLASS_NAME_STATIC);
4394
4395        if (!isModalOverflowing) {
4396          $__default["default"](_this3._element).one(Util.TRANSITION_END, function () {
4397            _this3._element.style.overflowY = '';
4398          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
4399        }
4400      }).emulateTransitionEnd(modalTransitionDuration);
4401
4402      this._element.focus();
4403    };
4404
4405    _proto._showElement = function _showElement(relatedTarget) {
4406      var _this4 = this;
4407
4408      var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
4409      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
4410
4411      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4412        // Don't move modal's DOM position
4413        document.body.appendChild(this._element);
4414      }
4415
4416      this._element.style.display = 'block';
4417
4418      this._element.removeAttribute('aria-hidden');
4419
4420      this._element.setAttribute('aria-modal', true);
4421
4422      this._element.setAttribute('role', 'dialog');
4423
4424      if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
4425        modalBody.scrollTop = 0;
4426      } else {
4427        this._element.scrollTop = 0;
4428      }
4429
4430      if (transition) {
4431        Util.reflow(this._element);
4432      }
4433
4434      $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4);
4435
4436      if (this._config.focus) {
4437        this._enforceFocus();
4438      }
4439
4440      var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
4441        relatedTarget: relatedTarget
4442      });
4443
4444      var transitionComplete = function transitionComplete() {
4445        if (_this4._config.focus) {
4446          _this4._element.focus();
4447        }
4448
4449        _this4._isTransitioning = false;
4450        $__default["default"](_this4._element).trigger(shownEvent);
4451      };
4452
4453      if (transition) {
4454        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
4455        $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
4456      } else {
4457        transitionComplete();
4458      }
4459    };
4460
4461    _proto._enforceFocus = function _enforceFocus() {
4462      var _this5 = this;
4463
4464      $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
4465      .on(EVENT_FOCUSIN, function (event) {
4466        if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
4467          _this5._element.focus();
4468        }
4469      });
4470    };
4471
4472    _proto._setEscapeEvent = function _setEscapeEvent() {
4473      var _this6 = this;
4474
4475      if (this._isShown) {
4476        $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
4477          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
4478            event.preventDefault();
4479
4480            _this6.hide();
4481          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
4482            _this6._triggerBackdropTransition();
4483          }
4484        });
4485      } else if (!this._isShown) {
4486        $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
4487      }
4488    };
4489
4490    _proto._setResizeEvent = function _setResizeEvent() {
4491      var _this7 = this;
4492
4493      if (this._isShown) {
4494        $__default["default"](window).on(EVENT_RESIZE, function (event) {
4495          return _this7.handleUpdate(event);
4496        });
4497      } else {
4498        $__default["default"](window).off(EVENT_RESIZE);
4499      }
4500    };
4501
4502    _proto._hideModal = function _hideModal() {
4503      var _this8 = this;
4504
4505      this._element.style.display = 'none';
4506
4507      this._element.setAttribute('aria-hidden', true);
4508
4509      this._element.removeAttribute('aria-modal');
4510
4511      this._element.removeAttribute('role');
4512
4513      this._isTransitioning = false;
4514
4515      this._showBackdrop(function () {
4516        $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
4517
4518        _this8._resetAdjustments();
4519
4520        _this8._resetScrollbar();
4521
4522        $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
4523      });
4524    };
4525
4526    _proto._removeBackdrop = function _removeBackdrop() {
4527      if (this._backdrop) {
4528        $__default["default"](this._backdrop).remove();
4529        this._backdrop = null;
4530      }
4531    };
4532
4533    _proto._showBackdrop = function _showBackdrop(callback) {
4534      var _this9 = this;
4535
4536      var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';
4537
4538      if (this._isShown && this._config.backdrop) {
4539        this._backdrop = document.createElement('div');
4540        this._backdrop.className = CLASS_NAME_BACKDROP;
4541
4542        if (animate) {
4543          this._backdrop.classList.add(animate);
4544        }
4545
4546        $__default["default"](this._backdrop).appendTo(document.body);
4547        $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {
4548          if (_this9._ignoreBackdropClick) {
4549            _this9._ignoreBackdropClick = false;
4550            return;
4551          }
4552
4553          if (event.target !== event.currentTarget) {
4554            return;
4555          }
4556
4557          if (_this9._config.backdrop === 'static') {
4558            _this9._triggerBackdropTransition();
4559          } else {
4560            _this9.hide();
4561          }
4562        });
4563
4564        if (animate) {
4565          Util.reflow(this._backdrop);
4566        }
4567
4568        $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4);
4569
4570        if (!callback) {
4571          return;
4572        }
4573
4574        if (!animate) {
4575          callback();
4576          return;
4577        }
4578
4579        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
4580        $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
4581      } else if (!this._isShown && this._backdrop) {
4582        $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);
4583
4584        var callbackRemove = function callbackRemove() {
4585          _this9._removeBackdrop();
4586
4587          if (callback) {
4588            callback();
4589          }
4590        };
4591
4592        if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
4593          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
4594
4595          $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
4596        } else {
4597          callbackRemove();
4598        }
4599      } else if (callback) {
4600        callback();
4601      }
4602    } // ----------------------------------------------------------------------
4603    // the following methods are used to handle overflowing modals
4604    // todo (fat): these should probably be refactored out of modal.js
4605    // ----------------------------------------------------------------------
4606    ;
4607
4608    _proto._adjustDialog = function _adjustDialog() {
4609      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4610
4611      if (!this._isBodyOverflowing && isModalOverflowing) {
4612        this._element.style.paddingLeft = this._scrollbarWidth + "px";
4613      }
4614
4615      if (this._isBodyOverflowing && !isModalOverflowing) {
4616        this._element.style.paddingRight = this._scrollbarWidth + "px";
4617      }
4618    };
4619
4620    _proto._resetAdjustments = function _resetAdjustments() {
4621      this._element.style.paddingLeft = '';
4622      this._element.style.paddingRight = '';
4623    };
4624
4625    _proto._checkScrollbar = function _checkScrollbar() {
4626      var rect = document.body.getBoundingClientRect();
4627      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
4628      this._scrollbarWidth = this._getScrollbarWidth();
4629    };
4630
4631    _proto._setScrollbar = function _setScrollbar() {
4632      var _this10 = this;
4633
4634      if (this._isBodyOverflowing) {
4635        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
4636        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
4637        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
4638        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
4639
4640        $__default["default"](fixedContent).each(function (index, element) {
4641          var actualPadding = element.style.paddingRight;
4642          var calculatedPadding = $__default["default"](element).css('padding-right');
4643          $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
4644        }); // Adjust sticky content margin
4645
4646        $__default["default"](stickyContent).each(function (index, element) {
4647          var actualMargin = element.style.marginRight;
4648          var calculatedMargin = $__default["default"](element).css('margin-right');
4649          $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
4650        }); // Adjust body padding
4651
4652        var actualPadding = document.body.style.paddingRight;
4653        var calculatedPadding = $__default["default"](document.body).css('padding-right');
4654        $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
4655      }
4656
4657      $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
4658    };
4659
4660    _proto._resetScrollbar = function _resetScrollbar() {
4661      // Restore fixed content padding
4662      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
4663      $__default["default"](fixedContent).each(function (index, element) {
4664        var padding = $__default["default"](element).data('padding-right');
4665        $__default["default"](element).removeData('padding-right');
4666        element.style.paddingRight = padding ? padding : '';
4667      }); // Restore sticky content
4668
4669      var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
4670      $__default["default"](elements).each(function (index, element) {
4671        var margin = $__default["default"](element).data('margin-right');
4672
4673        if (typeof margin !== 'undefined') {
4674          $__default["default"](element).css('margin-right', margin).removeData('margin-right');
4675        }
4676      }); // Restore body padding
4677
4678      var padding = $__default["default"](document.body).data('padding-right');
4679      $__default["default"](document.body).removeData('padding-right');
4680      document.body.style.paddingRight = padding ? padding : '';
4681    };
4682
4683    _proto._getScrollbarWidth = function _getScrollbarWidth() {
4684      // thx d.walsh
4685      var scrollDiv = document.createElement('div');
4686      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
4687      document.body.appendChild(scrollDiv);
4688      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
4689      document.body.removeChild(scrollDiv);
4690      return scrollbarWidth;
4691    } // Static
4692    ;
4693
4694    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
4695      return this.each(function () {
4696        var data = $__default["default"](this).data(DATA_KEY$5);
4697
4698        var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
4699
4700        if (!data) {
4701          data = new Modal(this, _config);
4702          $__default["default"](this).data(DATA_KEY$5, data);
4703        }
4704
4705        if (typeof config === 'string') {
4706          if (typeof data[config] === 'undefined') {
4707            throw new TypeError("No method named \"" + config + "\"");
4708          }
4709
4710          data[config](relatedTarget);
4711        } else if (_config.show) {
4712          data.show(relatedTarget);
4713        }
4714      });
4715    };
4716
4717    _createClass(Modal, null, [{
4718      key: "VERSION",
4719      get: function get() {
4720        return VERSION$5;
4721      }
4722    }, {
4723      key: "Default",
4724      get: function get() {
4725        return Default$4;
4726      }
4727    }]);
4728
4729    return Modal;
4730  }();
4731  /**
4732   * Data API implementation
4733   */
4734
4735
4736  $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
4737    var _this11 = this;
4738
4739    var target;
4740    var selector = Util.getSelectorFromElement(this);
4741
4742    if (selector) {
4743      target = document.querySelector(selector);
4744    }
4745
4746    var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
4747
4748    if (this.tagName === 'A' || this.tagName === 'AREA') {
4749      event.preventDefault();
4750    }
4751
4752    var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) {
4753      if (showEvent.isDefaultPrevented()) {
4754        // Only register focus restorer if modal will actually get shown
4755        return;
4756      }
4757
4758      $target.one(EVENT_HIDDEN$2, function () {
4759        if ($__default["default"](_this11).is(':visible')) {
4760          _this11.focus();
4761        }
4762      });
4763    });
4764
4765    Modal._jQueryInterface.call($__default["default"](target), config, this);
4766  });
4767  /**
4768   * jQuery
4769   */
4770
4771  $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
4772  $__default["default"].fn[NAME$5].Constructor = Modal;
4773
4774  $__default["default"].fn[NAME$5].noConflict = function () {
4775    $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
4776    return Modal._jQueryInterface;
4777  };
4778
4779  /**
4780   * --------------------------------------------------------------------------
4781   * Bootstrap (v4.6.2): tools/sanitizer.js
4782   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4783   * --------------------------------------------------------------------------
4784   */
4785  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
4786  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
4787  var DefaultWhitelist = {
4788    // Global attributes allowed on any supplied element below.
4789    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
4790    a: ['target', 'href', 'title', 'rel'],
4791    area: [],
4792    b: [],
4793    br: [],
4794    col: [],
4795    code: [],
4796    div: [],
4797    em: [],
4798    hr: [],
4799    h1: [],
4800    h2: [],
4801    h3: [],
4802    h4: [],
4803    h5: [],
4804    h6: [],
4805    i: [],
4806    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
4807    li: [],
4808    ol: [],
4809    p: [],
4810    pre: [],
4811    s: [],
4812    small: [],
4813    span: [],
4814    sub: [],
4815    sup: [],
4816    strong: [],
4817    u: [],
4818    ul: []
4819  };
4820  /**
4821   * A pattern that recognizes a commonly useful subset of URLs that are safe.
4822   *
4823   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
4824   */
4825
4826  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
4827  /**
4828   * A pattern that matches safe data URLs. Only matches image, video and audio types.
4829   *
4830   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
4831   */
4832
4833  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
4834
4835  function allowedAttribute(attr, allowedAttributeList) {
4836    var attrName = attr.nodeName.toLowerCase();
4837
4838    if (allowedAttributeList.indexOf(attrName) !== -1) {
4839      if (uriAttrs.indexOf(attrName) !== -1) {
4840        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
4841      }
4842
4843      return true;
4844    }
4845
4846    var regExp = allowedAttributeList.filter(function (attrRegex) {
4847      return attrRegex instanceof RegExp;
4848    }); // Check if a regular expression validates the attribute.
4849
4850    for (var i = 0, len = regExp.length; i < len; i++) {
4851      if (regExp[i].test(attrName)) {
4852        return true;
4853      }
4854    }
4855
4856    return false;
4857  }
4858
4859  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
4860    if (unsafeHtml.length === 0) {
4861      return unsafeHtml;
4862    }
4863
4864    if (sanitizeFn && typeof sanitizeFn === 'function') {
4865      return sanitizeFn(unsafeHtml);
4866    }
4867
4868    var domParser = new window.DOMParser();
4869    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
4870    var whitelistKeys = Object.keys(whiteList);
4871    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
4872
4873    var _loop = function _loop(i, len) {
4874      var el = elements[i];
4875      var elName = el.nodeName.toLowerCase();
4876
4877      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
4878        el.parentNode.removeChild(el);
4879        return "continue";
4880      }
4881
4882      var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread
4883
4884      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
4885      attributeList.forEach(function (attr) {
4886        if (!allowedAttribute(attr, whitelistedAttributes)) {
4887          el.removeAttribute(attr.nodeName);
4888        }
4889      });
4890    };
4891
4892    for (var i = 0, len = elements.length; i < len; i++) {
4893      var _ret = _loop(i);
4894
4895      if (_ret === "continue") continue;
4896    }
4897
4898    return createdDocument.body.innerHTML;
4899  }
4900
4901  /**
4902   * Constants
4903   */
4904
4905  var NAME$4 = 'tooltip';
4906  var VERSION$4 = '4.6.2';
4907  var DATA_KEY$4 = 'bs.tooltip';
4908  var EVENT_KEY$4 = "." + DATA_KEY$4;
4909  var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
4910  var CLASS_PREFIX$1 = 'bs-tooltip';
4911  var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
4912  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
4913  var CLASS_NAME_FADE$3 = 'fade';
4914  var CLASS_NAME_SHOW$3 = 'show';
4915  var HOVER_STATE_SHOW = 'show';
4916  var HOVER_STATE_OUT = 'out';
4917  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
4918  var SELECTOR_ARROW = '.arrow';
4919  var TRIGGER_HOVER = 'hover';
4920  var TRIGGER_FOCUS = 'focus';
4921  var TRIGGER_CLICK = 'click';
4922  var TRIGGER_MANUAL = 'manual';
4923  var AttachmentMap = {
4924    AUTO: 'auto',
4925    TOP: 'top',
4926    RIGHT: 'right',
4927    BOTTOM: 'bottom',
4928    LEFT: 'left'
4929  };
4930  var Default$3 = {
4931    animation: true,
4932    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
4933    trigger: 'hover focus',
4934    title: '',
4935    delay: 0,
4936    html: false,
4937    selector: false,
4938    placement: 'top',
4939    offset: 0,
4940    container: false,
4941    fallbackPlacement: 'flip',
4942    boundary: 'scrollParent',
4943    customClass: '',
4944    sanitize: true,
4945    sanitizeFn: null,
4946    whiteList: DefaultWhitelist,
4947    popperConfig: null
4948  };
4949  var DefaultType$3 = {
4950    animation: 'boolean',
4951    template: 'string',
4952    title: '(string|element|function)',
4953    trigger: 'string',
4954    delay: '(number|object)',
4955    html: 'boolean',
4956    selector: '(string|boolean)',
4957    placement: '(string|function)',
4958    offset: '(number|string|function)',
4959    container: '(string|element|boolean)',
4960    fallbackPlacement: '(string|array)',
4961    boundary: '(string|element)',
4962    customClass: '(string|function)',
4963    sanitize: 'boolean',
4964    sanitizeFn: '(null|function)',
4965    whiteList: 'object',
4966    popperConfig: '(null|object)'
4967  };
4968  var Event$1 = {
4969    HIDE: "hide" + EVENT_KEY$4,
4970    HIDDEN: "hidden" + EVENT_KEY$4,
4971    SHOW: "show" + EVENT_KEY$4,
4972    SHOWN: "shown" + EVENT_KEY$4,
4973    INSERTED: "inserted" + EVENT_KEY$4,
4974    CLICK: "click" + EVENT_KEY$4,
4975    FOCUSIN: "focusin" + EVENT_KEY$4,
4976    FOCUSOUT: "focusout" + EVENT_KEY$4,
4977    MOUSEENTER: "mouseenter" + EVENT_KEY$4,
4978    MOUSELEAVE: "mouseleave" + EVENT_KEY$4
4979  };
4980  /**
4981   * Class definition
4982   */
4983
4984  var Tooltip = /*#__PURE__*/function () {
4985    function Tooltip(element, config) {
4986      if (typeof Popper__default["default"] === 'undefined') {
4987        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
4988      } // Private
4989
4990
4991      this._isEnabled = true;
4992      this._timeout = 0;
4993      this._hoverState = '';
4994      this._activeTrigger = {};
4995      this._popper = null; // Protected
4996
4997      this.element = element;
4998      this.config = this._getConfig(config);
4999      this.tip = null;
5000
5001      this._setListeners();
5002    } // Getters
5003
5004
5005    var _proto = Tooltip.prototype;
5006
5007    // Public
5008    _proto.enable = function enable() {
5009      this._isEnabled = true;
5010    };
5011
5012    _proto.disable = function disable() {
5013      this._isEnabled = false;
5014    };
5015
5016    _proto.toggleEnabled = function toggleEnabled() {
5017      this._isEnabled = !this._isEnabled;
5018    };
5019
5020    _proto.toggle = function toggle(event) {
5021      if (!this._isEnabled) {
5022        return;
5023      }
5024
5025      if (event) {
5026        var dataKey = this.constructor.DATA_KEY;
5027        var context = $__default["default"](event.currentTarget).data(dataKey);
5028
5029        if (!context) {
5030          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5031          $__default["default"](event.currentTarget).data(dataKey, context);
5032        }
5033
5034        context._activeTrigger.click = !context._activeTrigger.click;
5035
5036        if (context._isWithActiveTrigger()) {
5037          context._enter(null, context);
5038        } else {
5039          context._leave(null, context);
5040        }
5041      } else {
5042        if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {
5043          this._leave(null, this);
5044
5045          return;
5046        }
5047
5048        this._enter(null, this);
5049      }
5050    };
5051
5052    _proto.dispose = function dispose() {
5053      clearTimeout(this._timeout);
5054      $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
5055      $__default["default"](this.element).off(this.constructor.EVENT_KEY);
5056      $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
5057
5058      if (this.tip) {
5059        $__default["default"](this.tip).remove();
5060      }
5061
5062      this._isEnabled = null;
5063      this._timeout = null;
5064      this._hoverState = null;
5065      this._activeTrigger = null;
5066
5067      if (this._popper) {
5068        this._popper.destroy();
5069      }
5070
5071      this._popper = null;
5072      this.element = null;
5073      this.config = null;
5074      this.tip = null;
5075    };
5076
5077    _proto.show = function show() {
5078      var _this = this;
5079
5080      if ($__default["default"](this.element).css('display') === 'none') {
5081        throw new Error('Please use show on visible elements');
5082      }
5083
5084      var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
5085
5086      if (this.isWithContent() && this._isEnabled) {
5087        $__default["default"](this.element).trigger(showEvent);
5088        var shadowRoot = Util.findShadowRoot(this.element);
5089        var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
5090
5091        if (showEvent.isDefaultPrevented() || !isInTheDom) {
5092          return;
5093        }
5094
5095        var tip = this.getTipElement();
5096        var tipId = Util.getUID(this.constructor.NAME);
5097        tip.setAttribute('id', tipId);
5098        this.element.setAttribute('aria-describedby', tipId);
5099        this.setContent();
5100
5101        if (this.config.animation) {
5102          $__default["default"](tip).addClass(CLASS_NAME_FADE$3);
5103        }
5104
5105        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
5106
5107        var attachment = this._getAttachment(placement);
5108
5109        this.addAttachmentClass(attachment);
5110
5111        var container = this._getContainer();
5112
5113        $__default["default"](tip).data(this.constructor.DATA_KEY, this);
5114
5115        if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
5116          $__default["default"](tip).appendTo(container);
5117        }
5118
5119        $__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
5120        this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
5121        $__default["default"](tip).addClass(CLASS_NAME_SHOW$3);
5122        $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
5123        // empty mouseover listeners to the body's immediate children;
5124        // only needed because of broken event delegation on iOS
5125        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5126
5127        if ('ontouchstart' in document.documentElement) {
5128          $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
5129        }
5130
5131        var complete = function complete() {
5132          if (_this.config.animation) {
5133            _this._fixTransition();
5134          }
5135
5136          var prevHoverState = _this._hoverState;
5137          _this._hoverState = null;
5138          $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
5139
5140          if (prevHoverState === HOVER_STATE_OUT) {
5141            _this._leave(null, _this);
5142          }
5143        };
5144
5145        if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
5146          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
5147          $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5148        } else {
5149          complete();
5150        }
5151      }
5152    };
5153
5154    _proto.hide = function hide(callback) {
5155      var _this2 = this;
5156
5157      var tip = this.getTipElement();
5158      var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
5159
5160      var complete = function complete() {
5161        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
5162          tip.parentNode.removeChild(tip);
5163        }
5164
5165        _this2._cleanTipClass();
5166
5167        _this2.element.removeAttribute('aria-describedby');
5168
5169        $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
5170
5171        if (_this2._popper !== null) {
5172          _this2._popper.destroy();
5173        }
5174
5175        if (callback) {
5176          callback();
5177        }
5178      };
5179
5180      $__default["default"](this.element).trigger(hideEvent);
5181
5182      if (hideEvent.isDefaultPrevented()) {
5183        return;
5184      }
5185
5186      $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
5187      // empty mouseover listeners we added for iOS support
5188
5189      if ('ontouchstart' in document.documentElement) {
5190        $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
5191      }
5192
5193      this._activeTrigger[TRIGGER_CLICK] = false;
5194      this._activeTrigger[TRIGGER_FOCUS] = false;
5195      this._activeTrigger[TRIGGER_HOVER] = false;
5196
5197      if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
5198        var transitionDuration = Util.getTransitionDurationFromElement(tip);
5199        $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
5200      } else {
5201        complete();
5202      }
5203
5204      this._hoverState = '';
5205    };
5206
5207    _proto.update = function update() {
5208      if (this._popper !== null) {
5209        this._popper.scheduleUpdate();
5210      }
5211    } // Protected
5212    ;
5213
5214    _proto.isWithContent = function isWithContent() {
5215      return Boolean(this.getTitle());
5216    };
5217
5218    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
5219      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
5220    };
5221
5222    _proto.getTipElement = function getTipElement() {
5223      this.tip = this.tip || $__default["default"](this.config.template)[0];
5224      return this.tip;
5225    };
5226
5227    _proto.setContent = function setContent() {
5228      var tip = this.getTipElement();
5229      this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
5230      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3);
5231    };
5232
5233    _proto.setElementContent = function setElementContent($element, content) {
5234      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
5235        // Content is a DOM node or a jQuery
5236        if (this.config.html) {
5237          if (!$__default["default"](content).parent().is($element)) {
5238            $element.empty().append(content);
5239          }
5240        } else {
5241          $element.text($__default["default"](content).text());
5242        }
5243
5244        return;
5245      }
5246
5247      if (this.config.html) {
5248        if (this.config.sanitize) {
5249          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
5250        }
5251
5252        $element.html(content);
5253      } else {
5254        $element.text(content);
5255      }
5256    };
5257
5258    _proto.getTitle = function getTitle() {
5259      var title = this.element.getAttribute('data-original-title');
5260
5261      if (!title) {
5262        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
5263      }
5264
5265      return title;
5266    } // Private
5267    ;
5268
5269    _proto._getPopperConfig = function _getPopperConfig(attachment) {
5270      var _this3 = this;
5271
5272      var defaultBsConfig = {
5273        placement: attachment,
5274        modifiers: {
5275          offset: this._getOffset(),
5276          flip: {
5277            behavior: this.config.fallbackPlacement
5278          },
5279          arrow: {
5280            element: SELECTOR_ARROW
5281          },
5282          preventOverflow: {
5283            boundariesElement: this.config.boundary
5284          }
5285        },
5286        onCreate: function onCreate(data) {
5287          if (data.originalPlacement !== data.placement) {
5288            _this3._handlePopperPlacementChange(data);
5289          }
5290        },
5291        onUpdate: function onUpdate(data) {
5292          return _this3._handlePopperPlacementChange(data);
5293        }
5294      };
5295      return _extends({}, defaultBsConfig, this.config.popperConfig);
5296    };
5297
5298    _proto._getOffset = function _getOffset() {
5299      var _this4 = this;
5300
5301      var offset = {};
5302
5303      if (typeof this.config.offset === 'function') {
5304        offset.fn = function (data) {
5305          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));
5306          return data;
5307        };
5308      } else {
5309        offset.offset = this.config.offset;
5310      }
5311
5312      return offset;
5313    };
5314
5315    _proto._getContainer = function _getContainer() {
5316      if (this.config.container === false) {
5317        return document.body;
5318      }
5319
5320      if (Util.isElement(this.config.container)) {
5321        return $__default["default"](this.config.container);
5322      }
5323
5324      return $__default["default"](document).find(this.config.container);
5325    };
5326
5327    _proto._getAttachment = function _getAttachment(placement) {
5328      return AttachmentMap[placement.toUpperCase()];
5329    };
5330
5331    _proto._setListeners = function _setListeners() {
5332      var _this5 = this;
5333
5334      var triggers = this.config.trigger.split(' ');
5335      triggers.forEach(function (trigger) {
5336        if (trigger === 'click') {
5337          $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
5338            return _this5.toggle(event);
5339          });
5340        } else if (trigger !== TRIGGER_MANUAL) {
5341          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
5342          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
5343          $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) {
5344            return _this5._enter(event);
5345          }).on(eventOut, _this5.config.selector, function (event) {
5346            return _this5._leave(event);
5347          });
5348        }
5349      });
5350
5351      this._hideModalHandler = function () {
5352        if (_this5.element) {
5353          _this5.hide();
5354        }
5355      };
5356
5357      $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
5358
5359      if (this.config.selector) {
5360        this.config = _extends({}, this.config, {
5361          trigger: 'manual',
5362          selector: ''
5363        });
5364      } else {
5365        this._fixTitle();
5366      }
5367    };
5368
5369    _proto._fixTitle = function _fixTitle() {
5370      var titleType = typeof this.element.getAttribute('data-original-title');
5371
5372      if (this.element.getAttribute('title') || titleType !== 'string') {
5373        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
5374        this.element.setAttribute('title', '');
5375      }
5376    };
5377
5378    _proto._enter = function _enter(event, context) {
5379      var dataKey = this.constructor.DATA_KEY;
5380      context = context || $__default["default"](event.currentTarget).data(dataKey);
5381
5382      if (!context) {
5383        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5384        $__default["default"](event.currentTarget).data(dataKey, context);
5385      }
5386
5387      if (event) {
5388        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
5389      }
5390
5391      if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
5392        context._hoverState = HOVER_STATE_SHOW;
5393        return;
5394      }
5395
5396      clearTimeout(context._timeout);
5397      context._hoverState = HOVER_STATE_SHOW;
5398
5399      if (!context.config.delay || !context.config.delay.show) {
5400        context.show();
5401        return;
5402      }
5403
5404      context._timeout = setTimeout(function () {
5405        if (context._hoverState === HOVER_STATE_SHOW) {
5406          context.show();
5407        }
5408      }, context.config.delay.show);
5409    };
5410
5411    _proto._leave = function _leave(event, context) {
5412      var dataKey = this.constructor.DATA_KEY;
5413      context = context || $__default["default"](event.currentTarget).data(dataKey);
5414
5415      if (!context) {
5416        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
5417        $__default["default"](event.currentTarget).data(dataKey, context);
5418      }
5419
5420      if (event) {
5421        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
5422      }
5423
5424      if (context._isWithActiveTrigger()) {
5425        return;
5426      }
5427
5428      clearTimeout(context._timeout);
5429      context._hoverState = HOVER_STATE_OUT;
5430
5431      if (!context.config.delay || !context.config.delay.hide) {
5432        context.hide();
5433        return;
5434      }
5435
5436      context._timeout = setTimeout(function () {
5437        if (context._hoverState === HOVER_STATE_OUT) {
5438          context.hide();
5439        }
5440      }, context.config.delay.hide);
5441    };
5442
5443    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
5444      for (var trigger in this._activeTrigger) {
5445        if (this._activeTrigger[trigger]) {
5446          return true;
5447        }
5448      }
5449
5450      return false;
5451    };
5452
5453    _proto._getConfig = function _getConfig(config) {
5454      var dataAttributes = $__default["default"](this.element).data();
5455      Object.keys(dataAttributes).forEach(function (dataAttr) {
5456        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
5457          delete dataAttributes[dataAttr];
5458        }
5459      });
5460      config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
5461
5462      if (typeof config.delay === 'number') {
5463        config.delay = {
5464          show: config.delay,
5465          hide: config.delay
5466        };
5467      }
5468
5469      if (typeof config.title === 'number') {
5470        config.title = config.title.toString();
5471      }
5472
5473      if (typeof config.content === 'number') {
5474        config.content = config.content.toString();
5475      }
5476
5477      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
5478
5479      if (config.sanitize) {
5480        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
5481      }
5482
5483      return config;
5484    };
5485
5486    _proto._getDelegateConfig = function _getDelegateConfig() {
5487      var config = {};
5488
5489      if (this.config) {
5490        for (var key in this.config) {
5491          if (this.constructor.Default[key] !== this.config[key]) {
5492            config[key] = this.config[key];
5493          }
5494        }
5495      }
5496
5497      return config;
5498    };
5499
5500    _proto._cleanTipClass = function _cleanTipClass() {
5501      var $tip = $__default["default"](this.getTipElement());
5502      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
5503
5504      if (tabClass !== null && tabClass.length) {
5505        $tip.removeClass(tabClass.join(''));
5506      }
5507    };
5508
5509    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
5510      this.tip = popperData.instance.popper;
5511
5512      this._cleanTipClass();
5513
5514      this.addAttachmentClass(this._getAttachment(popperData.placement));
5515    };
5516
5517    _proto._fixTransition = function _fixTransition() {
5518      var tip = this.getTipElement();
5519      var initConfigAnimation = this.config.animation;
5520
5521      if (tip.getAttribute('x-placement') !== null) {
5522        return;
5523      }
5524
5525      $__default["default"](tip).removeClass(CLASS_NAME_FADE$3);
5526      this.config.animation = false;
5527      this.hide();
5528      this.show();
5529      this.config.animation = initConfigAnimation;
5530    } // Static
5531    ;
5532
5533    Tooltip._jQueryInterface = function _jQueryInterface(config) {
5534      return this.each(function () {
5535        var $element = $__default["default"](this);
5536        var data = $element.data(DATA_KEY$4);
5537
5538        var _config = typeof config === 'object' && config;
5539
5540        if (!data && /dispose|hide/.test(config)) {
5541          return;
5542        }
5543
5544        if (!data) {
5545          data = new Tooltip(this, _config);
5546          $element.data(DATA_KEY$4, data);
5547        }
5548
5549        if (typeof config === 'string') {
5550          if (typeof data[config] === 'undefined') {
5551            throw new TypeError("No method named \"" + config + "\"");
5552          }
5553
5554          data[config]();
5555        }
5556      });
5557    };
5558
5559    _createClass(Tooltip, null, [{
5560      key: "VERSION",
5561      get: function get() {
5562        return VERSION$4;
5563      }
5564    }, {
5565      key: "Default",
5566      get: function get() {
5567        return Default$3;
5568      }
5569    }, {
5570      key: "NAME",
5571      get: function get() {
5572        return NAME$4;
5573      }
5574    }, {
5575      key: "DATA_KEY",
5576      get: function get() {
5577        return DATA_KEY$4;
5578      }
5579    }, {
5580      key: "Event",
5581      get: function get() {
5582        return Event$1;
5583      }
5584    }, {
5585      key: "EVENT_KEY",
5586      get: function get() {
5587        return EVENT_KEY$4;
5588      }
5589    }, {
5590      key: "DefaultType",
5591      get: function get() {
5592        return DefaultType$3;
5593      }
5594    }]);
5595
5596    return Tooltip;
5597  }();
5598  /**
5599   * jQuery
5600   */
5601
5602
5603  $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface;
5604  $__default["default"].fn[NAME$4].Constructor = Tooltip;
5605
5606  $__default["default"].fn[NAME$4].noConflict = function () {
5607    $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
5608    return Tooltip._jQueryInterface;
5609  };
5610
5611  /**
5612   * Constants
5613   */
5614
5615  var NAME$3 = 'popover';
5616  var VERSION$3 = '4.6.2';
5617  var DATA_KEY$3 = 'bs.popover';
5618  var EVENT_KEY$3 = "." + DATA_KEY$3;
5619  var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
5620  var CLASS_PREFIX = 'bs-popover';
5621  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
5622  var CLASS_NAME_FADE$2 = 'fade';
5623  var CLASS_NAME_SHOW$2 = 'show';
5624  var SELECTOR_TITLE = '.popover-header';
5625  var SELECTOR_CONTENT = '.popover-body';
5626
5627  var Default$2 = _extends({}, Tooltip.Default, {
5628    placement: 'right',
5629    trigger: 'click',
5630    content: '',
5631    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
5632  });
5633
5634  var DefaultType$2 = _extends({}, Tooltip.DefaultType, {
5635    content: '(string|element|function)'
5636  });
5637
5638  var Event = {
5639    HIDE: "hide" + EVENT_KEY$3,
5640    HIDDEN: "hidden" + EVENT_KEY$3,
5641    SHOW: "show" + EVENT_KEY$3,
5642    SHOWN: "shown" + EVENT_KEY$3,
5643    INSERTED: "inserted" + EVENT_KEY$3,
5644    CLICK: "click" + EVENT_KEY$3,
5645    FOCUSIN: "focusin" + EVENT_KEY$3,
5646    FOCUSOUT: "focusout" + EVENT_KEY$3,
5647    MOUSEENTER: "mouseenter" + EVENT_KEY$3,
5648    MOUSELEAVE: "mouseleave" + EVENT_KEY$3
5649  };
5650  /**
5651   * Class definition
5652   */
5653
5654  var Popover = /*#__PURE__*/function (_Tooltip) {
5655    _inheritsLoose(Popover, _Tooltip);
5656
5657    function Popover() {
5658      return _Tooltip.apply(this, arguments) || this;
5659    }
5660
5661    var _proto = Popover.prototype;
5662
5663    // Overrides
5664    _proto.isWithContent = function isWithContent() {
5665      return this.getTitle() || this._getContent();
5666    };
5667
5668    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
5669      $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
5670    };
5671
5672    _proto.getTipElement = function getTipElement() {
5673      this.tip = this.tip || $__default["default"](this.config.template)[0];
5674      return this.tip;
5675    };
5676
5677    _proto.setContent = function setContent() {
5678      var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
5679
5680      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
5681
5682      var content = this._getContent();
5683
5684      if (typeof content === 'function') {
5685        content = content.call(this.element);
5686      }
5687
5688      this.setElementContent($tip.find(SELECTOR_CONTENT), content);
5689      $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2);
5690    } // Private
5691    ;
5692
5693    _proto._getContent = function _getContent() {
5694      return this.element.getAttribute('data-content') || this.config.content;
5695    };
5696
5697    _proto._cleanTipClass = function _cleanTipClass() {
5698      var $tip = $__default["default"](this.getTipElement());
5699      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
5700
5701      if (tabClass !== null && tabClass.length > 0) {
5702        $tip.removeClass(tabClass.join(''));
5703      }
5704    } // Static
5705    ;
5706
5707    Popover._jQueryInterface = function _jQueryInterface(config) {
5708      return this.each(function () {
5709        var data = $__default["default"](this).data(DATA_KEY$3);
5710
5711        var _config = typeof config === 'object' ? config : null;
5712
5713        if (!data && /dispose|hide/.test(config)) {
5714          return;
5715        }
5716
5717        if (!data) {
5718          data = new Popover(this, _config);
5719          $__default["default"](this).data(DATA_KEY$3, data);
5720        }
5721
5722        if (typeof config === 'string') {
5723          if (typeof data[config] === 'undefined') {
5724            throw new TypeError("No method named \"" + config + "\"");
5725          }
5726
5727          data[config]();
5728        }
5729      });
5730    };
5731
5732    _createClass(Popover, null, [{
5733      key: "VERSION",
5734      get: // Getters
5735      function get() {
5736        return VERSION$3;
5737      }
5738    }, {
5739      key: "Default",
5740      get: function get() {
5741        return Default$2;
5742      }
5743    }, {
5744      key: "NAME",
5745      get: function get() {
5746        return NAME$3;
5747      }
5748    }, {
5749      key: "DATA_KEY",
5750      get: function get() {
5751        return DATA_KEY$3;
5752      }
5753    }, {
5754      key: "Event",
5755      get: function get() {
5756        return Event;
5757      }
5758    }, {
5759      key: "EVENT_KEY",
5760      get: function get() {
5761        return EVENT_KEY$3;
5762      }
5763    }, {
5764      key: "DefaultType",
5765      get: function get() {
5766        return DefaultType$2;
5767      }
5768    }]);
5769
5770    return Popover;
5771  }(Tooltip);
5772  /**
5773   * jQuery
5774   */
5775
5776
5777  $__default["default"].fn[NAME$3] = Popover._jQueryInterface;
5778  $__default["default"].fn[NAME$3].Constructor = Popover;
5779
5780  $__default["default"].fn[NAME$3].noConflict = function () {
5781    $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
5782    return Popover._jQueryInterface;
5783  };
5784
5785  /**
5786   * Constants
5787   */
5788
5789  var NAME$2 = 'scrollspy';
5790  var VERSION$2 = '4.6.2';
5791  var DATA_KEY$2 = 'bs.scrollspy';
5792  var EVENT_KEY$2 = "." + DATA_KEY$2;
5793  var DATA_API_KEY$1 = '.data-api';
5794  var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
5795  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
5796  var CLASS_NAME_ACTIVE$1 = 'active';
5797  var EVENT_ACTIVATE = "activate" + EVENT_KEY$2;
5798  var EVENT_SCROLL = "scroll" + EVENT_KEY$2;
5799  var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1;
5800  var METHOD_OFFSET = 'offset';
5801  var METHOD_POSITION = 'position';
5802  var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
5803  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
5804  var SELECTOR_NAV_LINKS = '.nav-link';
5805  var SELECTOR_NAV_ITEMS = '.nav-item';
5806  var SELECTOR_LIST_ITEMS = '.list-group-item';
5807  var SELECTOR_DROPDOWN$1 = '.dropdown';
5808  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
5809  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
5810  var Default$1 = {
5811    offset: 10,
5812    method: 'auto',
5813    target: ''
5814  };
5815  var DefaultType$1 = {
5816    offset: 'number',
5817    method: 'string',
5818    target: '(string|element)'
5819  };
5820  /**
5821   * Class definition
5822   */
5823
5824  var ScrollSpy = /*#__PURE__*/function () {
5825    function ScrollSpy(element, config) {
5826      var _this = this;
5827
5828      this._element = element;
5829      this._scrollElement = element.tagName === 'BODY' ? window : element;
5830      this._config = this._getConfig(config);
5831      this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
5832      this._offsets = [];
5833      this._targets = [];
5834      this._activeTarget = null;
5835      this._scrollHeight = 0;
5836      $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) {
5837        return _this._process(event);
5838      });
5839      this.refresh();
5840
5841      this._process();
5842    } // Getters
5843
5844
5845    var _proto = ScrollSpy.prototype;
5846
5847    // Public
5848    _proto.refresh = function refresh() {
5849      var _this2 = this;
5850
5851      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
5852      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
5853      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
5854      this._offsets = [];
5855      this._targets = [];
5856      this._scrollHeight = this._getScrollHeight();
5857      var targets = [].slice.call(document.querySelectorAll(this._selector));
5858      targets.map(function (element) {
5859        var target;
5860        var targetSelector = Util.getSelectorFromElement(element);
5861
5862        if (targetSelector) {
5863          target = document.querySelector(targetSelector);
5864        }
5865
5866        if (target) {
5867          var targetBCR = target.getBoundingClientRect();
5868
5869          if (targetBCR.width || targetBCR.height) {
5870            // TODO (fat): remove sketch reliance on jQuery position/offset
5871            return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector];
5872          }
5873        }
5874
5875        return null;
5876      }).filter(Boolean).sort(function (a, b) {
5877        return a[0] - b[0];
5878      }).forEach(function (item) {
5879        _this2._offsets.push(item[0]);
5880
5881        _this2._targets.push(item[1]);
5882      });
5883    };
5884
5885    _proto.dispose = function dispose() {
5886      $__default["default"].removeData(this._element, DATA_KEY$2);
5887      $__default["default"](this._scrollElement).off(EVENT_KEY$2);
5888      this._element = null;
5889      this._scrollElement = null;
5890      this._config = null;
5891      this._selector = null;
5892      this._offsets = null;
5893      this._targets = null;
5894      this._activeTarget = null;
5895      this._scrollHeight = null;
5896    } // Private
5897    ;
5898
5899    _proto._getConfig = function _getConfig(config) {
5900      config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});
5901
5902      if (typeof config.target !== 'string' && Util.isElement(config.target)) {
5903        var id = $__default["default"](config.target).attr('id');
5904
5905        if (!id) {
5906          id = Util.getUID(NAME$2);
5907          $__default["default"](config.target).attr('id', id);
5908        }
5909
5910        config.target = "#" + id;
5911      }
5912
5913      Util.typeCheckConfig(NAME$2, config, DefaultType$1);
5914      return config;
5915    };
5916
5917    _proto._getScrollTop = function _getScrollTop() {
5918      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
5919    };
5920
5921    _proto._getScrollHeight = function _getScrollHeight() {
5922      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
5923    };
5924
5925    _proto._getOffsetHeight = function _getOffsetHeight() {
5926      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
5927    };
5928
5929    _proto._process = function _process() {
5930      var scrollTop = this._getScrollTop() + this._config.offset;
5931
5932      var scrollHeight = this._getScrollHeight();
5933
5934      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
5935
5936      if (this._scrollHeight !== scrollHeight) {
5937        this.refresh();
5938      }
5939
5940      if (scrollTop >= maxScroll) {
5941        var target = this._targets[this._targets.length - 1];
5942
5943        if (this._activeTarget !== target) {
5944          this._activate(target);
5945        }
5946
5947        return;
5948      }
5949
5950      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
5951        this._activeTarget = null;
5952
5953        this._clear();
5954
5955        return;
5956      }
5957
5958      for (var i = this._offsets.length; i--;) {
5959        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
5960
5961        if (isActiveTarget) {
5962          this._activate(this._targets[i]);
5963        }
5964      }
5965    };
5966
5967    _proto._activate = function _activate(target) {
5968      this._activeTarget = target;
5969
5970      this._clear();
5971
5972      var queries = this._selector.split(',').map(function (selector) {
5973        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
5974      });
5975
5976      var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(','))));
5977
5978      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
5979        $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);
5980        $link.addClass(CLASS_NAME_ACTIVE$1);
5981      } else {
5982        // Set triggered link as active
5983        $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active
5984        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
5985
5986        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item
5987
5988        $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);
5989      }
5990
5991      $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
5992        relatedTarget: target
5993      });
5994    };
5995
5996    _proto._clear = function _clear() {
5997      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
5998        return node.classList.contains(CLASS_NAME_ACTIVE$1);
5999      }).forEach(function (node) {
6000        return node.classList.remove(CLASS_NAME_ACTIVE$1);
6001      });
6002    } // Static
6003    ;
6004
6005    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
6006      return this.each(function () {
6007        var data = $__default["default"](this).data(DATA_KEY$2);
6008
6009        var _config = typeof config === 'object' && config;
6010
6011        if (!data) {
6012          data = new ScrollSpy(this, _config);
6013          $__default["default"](this).data(DATA_KEY$2, data);
6014        }
6015
6016        if (typeof config === 'string') {
6017          if (typeof data[config] === 'undefined') {
6018            throw new TypeError("No method named \"" + config + "\"");
6019          }
6020
6021          data[config]();
6022        }
6023      });
6024    };
6025
6026    _createClass(ScrollSpy, null, [{
6027      key: "VERSION",
6028      get: function get() {
6029        return VERSION$2;
6030      }
6031    }, {
6032      key: "Default",
6033      get: function get() {
6034        return Default$1;
6035      }
6036    }]);
6037
6038    return ScrollSpy;
6039  }();
6040  /**
6041   * Data API implementation
6042   */
6043
6044
6045  $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
6046    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
6047    var scrollSpysLength = scrollSpys.length;
6048
6049    for (var i = scrollSpysLength; i--;) {
6050      var $spy = $__default["default"](scrollSpys[i]);
6051
6052      ScrollSpy._jQueryInterface.call($spy, $spy.data());
6053    }
6054  });
6055  /**
6056   * jQuery
6057   */
6058
6059  $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface;
6060  $__default["default"].fn[NAME$2].Constructor = ScrollSpy;
6061
6062  $__default["default"].fn[NAME$2].noConflict = function () {
6063    $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
6064    return ScrollSpy._jQueryInterface;
6065  };
6066
6067  /**
6068   * Constants
6069   */
6070
6071  var NAME$1 = 'tab';
6072  var VERSION$1 = '4.6.2';
6073  var DATA_KEY$1 = 'bs.tab';
6074  var EVENT_KEY$1 = "." + DATA_KEY$1;
6075  var DATA_API_KEY = '.data-api';
6076  var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
6077  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
6078  var CLASS_NAME_ACTIVE = 'active';
6079  var CLASS_NAME_DISABLED = 'disabled';
6080  var CLASS_NAME_FADE$1 = 'fade';
6081  var CLASS_NAME_SHOW$1 = 'show';
6082  var EVENT_HIDE$1 = "hide" + EVENT_KEY$1;
6083  var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1;
6084  var EVENT_SHOW$1 = "show" + EVENT_KEY$1;
6085  var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1;
6086  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY;
6087  var SELECTOR_DROPDOWN = '.dropdown';
6088  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
6089  var SELECTOR_ACTIVE = '.active';
6090  var SELECTOR_ACTIVE_UL = '> li > .active';
6091  var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
6092  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
6093  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
6094  /**
6095   * Class definition
6096   */
6097
6098  var Tab = /*#__PURE__*/function () {
6099    function Tab(element) {
6100      this._element = element;
6101    } // Getters
6102
6103
6104    var _proto = Tab.prototype;
6105
6106    // Public
6107    _proto.show = function show() {
6108      var _this = this;
6109
6110      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) {
6111        return;
6112      }
6113
6114      var target;
6115      var previous;
6116      var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
6117      var selector = Util.getSelectorFromElement(this._element);
6118
6119      if (listElement) {
6120        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
6121        previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
6122        previous = previous[previous.length - 1];
6123      }
6124
6125      var hideEvent = $__default["default"].Event(EVENT_HIDE$1, {
6126        relatedTarget: this._element
6127      });
6128      var showEvent = $__default["default"].Event(EVENT_SHOW$1, {
6129        relatedTarget: previous
6130      });
6131
6132      if (previous) {
6133        $__default["default"](previous).trigger(hideEvent);
6134      }
6135
6136      $__default["default"](this._element).trigger(showEvent);
6137
6138      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
6139        return;
6140      }
6141
6142      if (selector) {
6143        target = document.querySelector(selector);
6144      }
6145
6146      this._activate(this._element, listElement);
6147
6148      var complete = function complete() {
6149        var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, {
6150          relatedTarget: _this._element
6151        });
6152        var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, {
6153          relatedTarget: previous
6154        });
6155        $__default["default"](previous).trigger(hiddenEvent);
6156        $__default["default"](_this._element).trigger(shownEvent);
6157      };
6158
6159      if (target) {
6160        this._activate(target, target.parentNode, complete);
6161      } else {
6162        complete();
6163      }
6164    };
6165
6166    _proto.dispose = function dispose() {
6167      $__default["default"].removeData(this._element, DATA_KEY$1);
6168      this._element = null;
6169    } // Private
6170    ;
6171
6172    _proto._activate = function _activate(element, container, callback) {
6173      var _this2 = this;
6174
6175      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE);
6176      var active = activeElements[0];
6177      var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1);
6178
6179      var complete = function complete() {
6180        return _this2._transitionComplete(element, active, callback);
6181      };
6182
6183      if (active && isTransitioning) {
6184        var transitionDuration = Util.getTransitionDurationFromElement(active);
6185        $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6186      } else {
6187        complete();
6188      }
6189    };
6190
6191    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
6192      if (active) {
6193        $__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
6194        var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
6195
6196        if (dropdownChild) {
6197          $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
6198        }
6199
6200        if (active.getAttribute('role') === 'tab') {
6201          active.setAttribute('aria-selected', false);
6202        }
6203      }
6204
6205      $__default["default"](element).addClass(CLASS_NAME_ACTIVE);
6206
6207      if (element.getAttribute('role') === 'tab') {
6208        element.setAttribute('aria-selected', true);
6209      }
6210
6211      Util.reflow(element);
6212
6213      if (element.classList.contains(CLASS_NAME_FADE$1)) {
6214        element.classList.add(CLASS_NAME_SHOW$1);
6215      }
6216
6217      var parent = element.parentNode;
6218
6219      if (parent && parent.nodeName === 'LI') {
6220        parent = parent.parentNode;
6221      }
6222
6223      if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
6224        var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0];
6225
6226        if (dropdownElement) {
6227          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
6228          $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
6229        }
6230
6231        element.setAttribute('aria-expanded', true);
6232      }
6233
6234      if (callback) {
6235        callback();
6236      }
6237    } // Static
6238    ;
6239
6240    Tab._jQueryInterface = function _jQueryInterface(config) {
6241      return this.each(function () {
6242        var $this = $__default["default"](this);
6243        var data = $this.data(DATA_KEY$1);
6244
6245        if (!data) {
6246          data = new Tab(this);
6247          $this.data(DATA_KEY$1, data);
6248        }
6249
6250        if (typeof config === 'string') {
6251          if (typeof data[config] === 'undefined') {
6252            throw new TypeError("No method named \"" + config + "\"");
6253          }
6254
6255          data[config]();
6256        }
6257      });
6258    };
6259
6260    _createClass(Tab, null, [{
6261      key: "VERSION",
6262      get: function get() {
6263        return VERSION$1;
6264      }
6265    }]);
6266
6267    return Tab;
6268  }();
6269  /**
6270   * Data API implementation
6271   */
6272
6273
6274  $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
6275    event.preventDefault();
6276
6277    Tab._jQueryInterface.call($__default["default"](this), 'show');
6278  });
6279  /**
6280   * jQuery
6281   */
6282
6283  $__default["default"].fn[NAME$1] = Tab._jQueryInterface;
6284  $__default["default"].fn[NAME$1].Constructor = Tab;
6285
6286  $__default["default"].fn[NAME$1].noConflict = function () {
6287    $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
6288    return Tab._jQueryInterface;
6289  };
6290
6291  /**
6292   * Constants
6293   */
6294
6295  var NAME = 'toast';
6296  var VERSION = '4.6.2';
6297  var DATA_KEY = 'bs.toast';
6298  var EVENT_KEY = "." + DATA_KEY;
6299  var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
6300  var CLASS_NAME_FADE = 'fade';
6301  var CLASS_NAME_HIDE = 'hide';
6302  var CLASS_NAME_SHOW = 'show';
6303  var CLASS_NAME_SHOWING = 'showing';
6304  var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
6305  var EVENT_HIDE = "hide" + EVENT_KEY;
6306  var EVENT_HIDDEN = "hidden" + EVENT_KEY;
6307  var EVENT_SHOW = "show" + EVENT_KEY;
6308  var EVENT_SHOWN = "shown" + EVENT_KEY;
6309  var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
6310  var Default = {
6311    animation: true,
6312    autohide: true,
6313    delay: 500
6314  };
6315  var DefaultType = {
6316    animation: 'boolean',
6317    autohide: 'boolean',
6318    delay: 'number'
6319  };
6320  /**
6321   * Class definition
6322   */
6323
6324  var Toast = /*#__PURE__*/function () {
6325    function Toast(element, config) {
6326      this._element = element;
6327      this._config = this._getConfig(config);
6328      this._timeout = null;
6329
6330      this._setListeners();
6331    } // Getters
6332
6333
6334    var _proto = Toast.prototype;
6335
6336    // Public
6337    _proto.show = function show() {
6338      var _this = this;
6339
6340      var showEvent = $__default["default"].Event(EVENT_SHOW);
6341      $__default["default"](this._element).trigger(showEvent);
6342
6343      if (showEvent.isDefaultPrevented()) {
6344        return;
6345      }
6346
6347      this._clearTimeout();
6348
6349      if (this._config.animation) {
6350        this._element.classList.add(CLASS_NAME_FADE);
6351      }
6352
6353      var complete = function complete() {
6354        _this._element.classList.remove(CLASS_NAME_SHOWING);
6355
6356        _this._element.classList.add(CLASS_NAME_SHOW);
6357
6358        $__default["default"](_this._element).trigger(EVENT_SHOWN);
6359
6360        if (_this._config.autohide) {
6361          _this._timeout = setTimeout(function () {
6362            _this.hide();
6363          }, _this._config.delay);
6364        }
6365      };
6366
6367      this._element.classList.remove(CLASS_NAME_HIDE);
6368
6369      Util.reflow(this._element);
6370
6371      this._element.classList.add(CLASS_NAME_SHOWING);
6372
6373      if (this._config.animation) {
6374        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6375        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6376      } else {
6377        complete();
6378      }
6379    };
6380
6381    _proto.hide = function hide() {
6382      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
6383        return;
6384      }
6385
6386      var hideEvent = $__default["default"].Event(EVENT_HIDE);
6387      $__default["default"](this._element).trigger(hideEvent);
6388
6389      if (hideEvent.isDefaultPrevented()) {
6390        return;
6391      }
6392
6393      this._close();
6394    };
6395
6396    _proto.dispose = function dispose() {
6397      this._clearTimeout();
6398
6399      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
6400        this._element.classList.remove(CLASS_NAME_SHOW);
6401      }
6402
6403      $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
6404      $__default["default"].removeData(this._element, DATA_KEY);
6405      this._element = null;
6406      this._config = null;
6407    } // Private
6408    ;
6409
6410    _proto._getConfig = function _getConfig(config) {
6411      config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {});
6412      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
6413      return config;
6414    };
6415
6416    _proto._setListeners = function _setListeners() {
6417      var _this2 = this;
6418
6419      $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
6420        return _this2.hide();
6421      });
6422    };
6423
6424    _proto._close = function _close() {
6425      var _this3 = this;
6426
6427      var complete = function complete() {
6428        _this3._element.classList.add(CLASS_NAME_HIDE);
6429
6430        $__default["default"](_this3._element).trigger(EVENT_HIDDEN);
6431      };
6432
6433      this._element.classList.remove(CLASS_NAME_SHOW);
6434
6435      if (this._config.animation) {
6436        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
6437        $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
6438      } else {
6439        complete();
6440      }
6441    };
6442
6443    _proto._clearTimeout = function _clearTimeout() {
6444      clearTimeout(this._timeout);
6445      this._timeout = null;
6446    } // Static
6447    ;
6448
6449    Toast._jQueryInterface = function _jQueryInterface(config) {
6450      return this.each(function () {
6451        var $element = $__default["default"](this);
6452        var data = $element.data(DATA_KEY);
6453
6454        var _config = typeof config === 'object' && config;
6455
6456        if (!data) {
6457          data = new Toast(this, _config);
6458          $element.data(DATA_KEY, data);
6459        }
6460
6461        if (typeof config === 'string') {
6462          if (typeof data[config] === 'undefined') {
6463            throw new TypeError("No method named \"" + config + "\"");
6464          }
6465
6466          data[config](this);
6467        }
6468      });
6469    };
6470
6471    _createClass(Toast, null, [{
6472      key: "VERSION",
6473      get: function get() {
6474        return VERSION;
6475      }
6476    }, {
6477      key: "DefaultType",
6478      get: function get() {
6479        return DefaultType;
6480      }
6481    }, {
6482      key: "Default",
6483      get: function get() {
6484        return Default;
6485      }
6486    }]);
6487
6488    return Toast;
6489  }();
6490  /**
6491   * jQuery
6492   */
6493
6494
6495  $__default["default"].fn[NAME] = Toast._jQueryInterface;
6496  $__default["default"].fn[NAME].Constructor = Toast;
6497
6498  $__default["default"].fn[NAME].noConflict = function () {
6499    $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
6500    return Toast._jQueryInterface;
6501  };
6502
6503  exports.Alert = Alert;
6504  exports.Button = Button;
6505  exports.Carousel = Carousel;
6506  exports.Collapse = Collapse;
6507  exports.Dropdown = Dropdown;
6508  exports.Modal = Modal;
6509  exports.Popover = Popover;
6510  exports.Scrollspy = ScrollSpy;
6511  exports.Tab = Tab;
6512  exports.Toast = Toast;
6513  exports.Tooltip = Tooltip;
6514  exports.Util = Util;
6515
6516  Object.defineProperty(exports, '__esModule', { value: true });
6517
6518}));
6519//# sourceMappingURL=bootstrap.js.map
6520/*!
6521 * jQuery Cookie Plugin v1.3.1
6522 * https://github.com/carhartl/jquery-cookie
6523 *
6524 * Copyright 2013 Klaus Hartl
6525 * Released under the MIT license
6526 */
6527(function (factory) {
6528	if (typeof define === 'function' && define.amd) {
6529		// AMD. Register as anonymous module.
6530		define(['jquery'], factory);
6531	} else {
6532		// Browser globals.
6533		factory(jQuery);
6534	}
6535}(function ($) {
6536
6537	var pluses = /\+/g;
6538
6539	function raw(s) {
6540		return s;
6541	}
6542
6543	function decoded(s) {
6544		return decodeURIComponent(s.replace(pluses, ' '));
6545	}
6546
6547	function converted(s) {
6548		if (s.indexOf('"') === 0) {
6549			// This is a quoted cookie as according to RFC2068, unescape
6550			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
6551		}
6552		try {
6553			return config.json ? JSON.parse(s) : s;
6554		} catch(er) {}
6555	}
6556
6557	var config = $.cookie = function (key, value, options) {
6558
6559		// write
6560		if (value !== undefined) {
6561			options = $.extend({}, config.defaults, options);
6562
6563			if (typeof options.expires === 'number') {
6564				var days = options.expires, t = options.expires = new Date();
6565				t.setDate(t.getDate() + days);
6566			}
6567
6568			value = config.json ? JSON.stringify(value) : String(value);
6569
6570			return (document.cookie = [
6571				config.raw ? key : encodeURIComponent(key),
6572				'=',
6573				config.raw ? value : encodeURIComponent(value),
6574				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
6575				options.path    ? '; path=' + options.path : '',
6576				options.domain  ? '; domain=' + options.domain : '',
6577				options.secure  ? '; secure' : ''
6578			].join(''));
6579		}
6580
6581		// read
6582		var decode = config.raw ? raw : decoded;
6583		var cookies = document.cookie.split('; ');
6584		var result = key ? undefined : {};
6585		for (var i = 0, l = cookies.length; i < l; i++) {
6586			var parts = cookies[i].split('=');
6587			var name = decode(parts.shift());
6588			var cookie = decode(parts.join('='));
6589
6590			if (key && key === name) {
6591				result = converted(cookie);
6592				break;
6593			}
6594
6595			if (!key) {
6596				result[name] = converted(cookie);
6597			}
6598		}
6599
6600		return result;
6601	};
6602
6603	config.defaults = {};
6604
6605	$.removeCookie = function (key, options) {
6606		if ($.cookie(key) !== undefined) {
6607			$.cookie(key, '', $.extend(options, { expires: -1 }));
6608			return true;
6609		}
6610		return false;
6611	};
6612
6613}));
6614/*!
6615 * iCheck v1.0.2, http://git.io/arlzeA
6616 * ===================================
6617 * Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization
6618 *
6619 * (c) 2013 Damir Sultanov, http://fronteed.com
6620 * MIT Licensed
6621 */
6622
6623(function($) {
6624
6625  // Cached vars
6626  var _iCheck = 'iCheck',
6627    _iCheckHelper = _iCheck + '-helper',
6628    _checkbox = 'checkbox',
6629    _radio = 'radio',
6630    _checked = 'checked',
6631    _unchecked = 'un' + _checked,
6632    _disabled = 'disabled',
6633    _determinate = 'determinate',
6634    _indeterminate = 'in' + _determinate,
6635    _update = 'update',
6636    _type = 'type',
6637    _click = 'click',
6638    _touch = 'touchbegin.i touchend.i',
6639    _add = 'addClass',
6640    _remove = 'removeClass',
6641    _callback = 'trigger',
6642    _label = 'label',
6643    _cursor = 'cursor',
6644    _mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);
6645
6646  // Plugin init
6647  $.fn[_iCheck] = function(options, fire) {
6648
6649    // Walker
6650    var handle = 'input[type="' + _checkbox + '"], input[type="' + _radio + '"]',
6651      stack = $(),
6652      walker = function(object) {
6653        object.each(function() {
6654          var self = $(this);
6655
6656          if (self.is(handle)) {
6657            stack = stack.add(self);
6658          } else {
6659            stack = stack.add(self.find(handle));
6660          }
6661        });
6662      };
6663
6664    // Check if we should operate with some method
6665    if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(options)) {
6666
6667      // Normalize method's name
6668      options = options.toLowerCase();
6669
6670      // Find checkboxes and radio buttons
6671      walker(this);
6672
6673      return stack.each(function() {
6674        var self = $(this);
6675
6676        if (options == 'destroy') {
6677          tidy(self, 'ifDestroyed');
6678        } else {
6679          operate(self, true, options);
6680        }
6681
6682        // Fire method's callback
6683        if ($.isFunction(fire)) {
6684          fire();
6685        }
6686      });
6687
6688    // Customization
6689    } else if (typeof options == 'object' || !options) {
6690
6691      // Check if any options were passed
6692      var settings = $.extend({
6693          checkedClass: _checked,
6694          disabledClass: _disabled,
6695          indeterminateClass: _indeterminate,
6696          labelHover: true
6697        }, options),
6698
6699        selector = settings.handle,
6700        hoverClass = settings.hoverClass || 'hover',
vendor: 10,149 bytes, lines 6701-7058
6701        focusClass = settings.focusClass || 'focus',
6702        activeClass = settings.activeClass || 'active',
6703        labelHover = !!settings.labelHover,
6704        labelHoverClass = settings.labelHoverClass || 'hover',
6705
6706        // Setup clickable area
6707        area = ('' + settings.increaseArea).replace('%', '') | 0;
6708
6709      // Selector limit
6710      if (selector == _checkbox || selector == _radio) {
6711        handle = 'input[type="' + selector + '"]';
6712      }
6713
6714      // Clickable area limit
6715      if (area < -50) {
6716        area = -50;
6717      }
6718
6719      // Walk around the selector
6720      walker(this);
6721
6722      return stack.each(function() {
6723        var self = $(this);
6724
6725        // If already customized
6726        tidy(self);
6727
6728        var node = this,
6729          id = node.id,
6730
6731          // Layer styles
6732          offset = -area + '%',
6733          size = 100 + (area * 2) + '%',
6734          layer = {
6735            position: 'absolute',
6736            top: offset,
6737            left: offset,
6738            display: 'block',
6739            width: size,
6740            height: size,
6741            margin: 0,
6742            padding: 0,
6743            background: '#fff',
6744            border: 0,
6745            opacity: 0
6746          },
6747
6748          // Choose how to hide input
6749          hide = _mobile ? {
6750            position: 'absolute',
6751            visibility: 'hidden'
6752          } : area ? layer : {
6753            position: 'absolute',
6754            opacity: 0
6755          },
6756
6757          // Get proper class
6758          className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio,
6759
6760          // Find assigned labels
6761          label = $(_label + '[for="' + id + '"]').add(self.closest(_label)),
6762
6763          // Check ARIA option
6764          aria = !!settings.aria,
6765
6766          // Set ARIA placeholder
6767          ariaID = _iCheck + '-' + Math.random().toString(36).substr(2,6),
6768
6769          // Parent & helper
6770          parent = '<div class="' + className + '" ' + (aria ? 'role="' + node[_type] + '" ' : ''),
6771          helper;
6772
6773        // Set ARIA "labelledby"
6774        if (aria) {
6775          label.each(function() {
6776            parent += 'aria-labelledby="';
6777
6778            if (this.id) {
6779              parent += this.id;
6780            } else {
6781              this.id = ariaID;
6782              parent += ariaID;
6783            }
6784
6785            parent += '"';
6786          });
6787        }
6788
6789        // Wrap input
6790        parent = self.wrap(parent + '/>')[_callback]('ifCreated').parent().append(settings.insert);
6791
6792        // Layer addition
6793        helper = $('<ins class="' + _iCheckHelper + '"/>').css(layer).appendTo(parent);
6794
6795        // Finalize customization
6796        self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide);
6797        !!settings.inheritClass && parent[_add](node.className || '');
6798        !!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id);
6799        parent.css('position') == 'static' && parent.css('position', 'relative');
6800        operate(self, true, _update);
6801
6802        // Label events
6803        if (label.length) {
6804          label.on(_click + '.i mouseover.i mouseout.i ' + _touch, function(event) {
6805            var type = event[_type],
6806              item = $(this);
6807
6808            // Do nothing if input is disabled
6809            if (!node[_disabled]) {
6810
6811              // Click
6812              if (type == _click) {
6813                if ($(event.target).is('a')) {
6814                  return;
6815                }
6816                operate(self, false, true);
6817
6818              // Hover state
6819              } else if (labelHover) {
6820
6821                // mouseout|touchend
6822                if (/ut|nd/.test(type)) {
6823                  parent[_remove](hoverClass);
6824                  item[_remove](labelHoverClass);
6825                } else {
6826                  parent[_add](hoverClass);
6827                  item[_add](labelHoverClass);
6828                }
6829              }
6830
6831              if (_mobile) {
6832                event.stopPropagation();
6833              } else {
6834                return false;
6835              }
6836            }
6837          });
6838        }
6839
6840        // Input events
6841        self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function(event) {
6842          var type = event[_type],
6843            key = event.keyCode;
6844
6845          // Click
6846          if (type == _click) {
6847            return false;
6848
6849          // Keydown
6850          } else if (type == 'keydown' && key == 32) {
6851            if (!(node[_type] == _radio && node[_checked])) {
6852              if (node[_checked]) {
6853                off(self, _checked);
6854              } else {
6855                on(self, _checked);
6856              }
6857            }
6858
6859            return false;
6860
6861          // Keyup
6862          } else if (type == 'keyup' && node[_type] == _radio) {
6863            !node[_checked] && on(self, _checked);
6864
6865          // Focus/blur
6866          } else if (/us|ur/.test(type)) {
6867            parent[type == 'blur' ? _remove : _add](focusClass);
6868          }
6869        });
6870
6871        // Helper events
6872        helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function(event) {
6873          var type = event[_type],
6874
6875            // mousedown|mouseup
6876            toggle = /wn|up/.test(type) ? activeClass : hoverClass;
6877
6878          // Do nothing if input is disabled
6879          if (!node[_disabled]) {
6880
6881            // Click
6882            if (type == _click) {
6883              operate(self, false, true);
6884
6885            // Active and hover states
6886            } else {
6887
6888              // State is on
6889              if (/wn|er|in/.test(type)) {
6890
6891                // mousedown|mouseover|touchbegin
6892                parent[_add](toggle);
6893
6894              // State is off
6895              } else {
6896                parent[_remove](toggle + ' ' + activeClass);
6897              }
6898
6899              // Label hover
6900              if (label.length && labelHover && toggle == hoverClass) {
6901
6902                // mouseout|touchend
6903                label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass);
6904              }
6905            }
6906
6907            if (_mobile) {
6908              event.stopPropagation();
6909            } else {
6910              return false;
6911            }
6912          }
6913        });
6914      });
6915    } else {
6916      return this;
6917    }
6918  };
6919
6920  // Do something with inputs
6921  function operate(input, direct, method) {
6922    var node = input[0],
6923      state = /er/.test(method) ? _indeterminate : /bl/.test(method) ? _disabled : _checked,
6924      active = method == _update ? {
6925        checked: node[_checked],
6926        disabled: node[_disabled],
6927        indeterminate: input.attr(_indeterminate) == 'true' || input.attr(_determinate) == 'false'
6928      } : node[state];
6929
6930    // Check, disable or indeterminate
6931    if (/^(ch|di|in)/.test(method) && !active) {
6932      on(input, state);
6933
6934    // Uncheck, enable or determinate
6935    } else if (/^(un|en|de)/.test(method) && active) {
6936      off(input, state);
6937
6938    // Update
6939    } else if (method == _update) {
6940
6941      // Handle states
6942      for (var each in active) {
6943        if (active[each]) {
6944          on(input, each, true);
6945        } else {
6946          off(input, each, true);
6947        }
6948      }
6949
6950    } else if (!direct || method == 'toggle') {
6951
6952      // Helper or label was clicked
6953      if (!direct) {
6954        input[_callback]('ifClicked');
6955      }
6956
6957      // Toggle checked state
6958      if (active) {
6959        if (node[_type] !== _radio) {
6960          off(input, state);
6961        }
6962      } else {
6963        on(input, state);
6964      }
6965    }
6966  }
6967
6968  // Add checked, disabled or indeterminate state
6969  function on(input, state, keep) {
6970    var node = input[0],
6971      parent = input.parent(),
6972      checked = state == _checked,
6973      indeterminate = state == _indeterminate,
6974      disabled = state == _disabled,
6975      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',
6976      regular = option(input, callback + capitalize(node[_type])),
6977      specific = option(input, state + capitalize(node[_type]));
6978
6979    // Prevent unnecessary actions
6980    if (node[state] !== true) {
6981
6982      // Toggle assigned radio buttons
6983      if (!keep && state == _checked && node[_type] == _radio && node.name) {
6984        var form = input.closest('form'),
6985          inputs = 'input[name="' + node.name + '"]';
6986
6987        inputs = form.length ? form.find(inputs) : $(inputs);
6988
6989        inputs.each(function() {
6990          if (this !== node && $(this).data(_iCheck)) {
6991            off($(this), state);
6992          }
6993        });
6994      }
6995
6996      // Indeterminate state
6997      if (indeterminate) {
6998
6999        // Add indeterminate state
7000        node[state] = true;
7001
7002        // Remove checked state
7003        if (node[_checked]) {
7004          off(input, _checked, 'force');
7005        }
7006
7007      // Checked or disabled state
7008      } else {
7009
7010        // Add checked or disabled state
7011        if (!keep) {
7012          node[state] = true;
7013        }
7014
7015        // Remove indeterminate state
7016        if (checked && node[_indeterminate]) {
7017          off(input, _indeterminate, false);
7018        }
7019      }
7020
7021      // Trigger callbacks
7022      callbacks(input, checked, state, keep);
7023    }
7024
7025    // Add proper cursor
7026    if (node[_disabled] && !!option(input, _cursor, true)) {
7027      parent.find('.' + _iCheckHelper).css(_cursor, 'default');
7028    }
7029
7030    // Add state class
7031    parent[_add](specific || option(input, state) || '');
7032
7033    // Set ARIA attribute
7034    if (!!parent.attr('role') && !indeterminate) {
7035      parent.attr('aria-' + (disabled ? _disabled : _checked), 'true');
7036    }
7037
7038    // Remove regular state class
7039    parent[_remove](regular || option(input, callback) || '');
7040  }
7041
7042  // Remove checked, disabled or indeterminate state
7043  function off(input, state, keep) {
7044    var node = input[0],
7045      parent = input.parent(),
7046      checked = state == _checked,
7047      indeterminate = state == _indeterminate,
7048      disabled = state == _disabled,
7049      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',
7050      regular = option(input, callback + capitalize(node[_type])),
7051      specific = option(input, state + capitalize(node[_type]));
7052
7053    // Prevent unnecessary actions
7054    if (node[state] !== false) {
7055
7056      // Toggle state
7057      if (indeterminate || !keep || keep == 'force') {
7058        node[state] = false;
7059      }
7060
7061      // Trigger callbacks
7062      callbacks(input, checked, callback, keep);
7063    }
7064
7065    // Add proper cursor
7066    if (!node[_disabled] && !!option(input, _cursor, true)) {
7067      parent.find('.' + _iCheckHelper).css(_cursor, 'pointer');
7068    }
7069
7070    // Remove state class
7071    parent[_remove](specific || option(input, state) || '');
7072
7073    // Set ARIA attribute
7074    if (!!parent.attr('role') && !indeterminate) {
7075      parent.attr('aria-' + (disabled ? _disabled : _checked), 'false');
7076    }
7077
7078    // Add regular state class
7079    parent[_add](regular || option(input, callback) || '');
7080  }
7081
7082  // Remove all traces
7083  function tidy(input, callback) {
7084    if (input.data(_iCheck)) {
7085
7086      // Remove everything except input
7087      input.parent().html(input.attr('style', input.data(_iCheck).s || ''));
7088
7089      // Callback
7090      if (callback) {
7091        input[_callback](callback);
7092      }
7093
7094      // Unbind events
7095      input.off('.i').unwrap();
7096      $(_label + '[for="' + input[0].id + '"]').add(input.closest(_label)).off('.i');
7097    }
7098  }
7099
7100  // Get some option
7101  function option(input, state, regular) {
7102    if (input.data(_iCheck)) {
7103      return input.data(_iCheck).o[state + (regular ? '' : 'Class')];
7104    }
7105  }
7106
7107  // Capitalize some string
7108  function capitalize(string) {
7109    return string.charAt(0).toUpperCase() + string.slice(1);
7110  }
7111
7112  // Executable handlers
7113  function callbacks(input, checked, callback, keep) {
7114    if (!keep) {
7115      if (checked) {
7116        input[_callback]('ifToggled');
7117      }
7118
7119      input[_callback]('ifChanged')[_callback]('if' + capitalize(callback));
7120    }
7121  }
7122})(window.jQuery || window.Zepto);
7123/**
7124 * Swiper 4.1.6
7125 * Most modern mobile touch slider and framework with hardware accelerated transitions
7126 * http://www.idangero.us/swiper/
7127 */
7128!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Swiper=t()}(this,function(){"use strict";var e="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,t="undefined"==typeof window?{document:e,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,i=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function s(s,a){var r=[],n=0;if(s&&!a&&s instanceof i)return s;if(s)if("string"==typeof s){var o,l,d=s.trim();if(d.indexOf("<")>=0&&d.indexOf(">")>=0){var h="div";for(0===d.indexOf("<li")&&(h="ul"),0===d.indexOf("<tr")&&(h="tbody"),0!==d.indexOf("<td")&&0!==d.indexOf("<th")||(h="tr"),0===d.indexOf("<tbody")&&(h="table"),0===d.indexOf("<option")&&(h="select"),(l=e.createElement(h)).innerHTML=d,n=0;n<l.childNodes.length;n+=1)r.push(l.childNodes[n])}else for(o=a||"#"!==s[0]||s.match(/[ .<>:~]/)?(a||e).querySelectorAll(s.trim()):[e.getElementById(s.trim().split("#")[1])],n=0;n<o.length;n+=1)o[n]&&r.push(o[n])}else if(s.nodeType||s===t||s===e)r.push(s);else if(s.length>0&&s[0].nodeType)for(n=0;n<s.length;n+=1)r.push(s[n]);return new i(r)}function a(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}s.fn=i.prototype,s.Class=i,s.Dom7=i;"resize scroll".split(" ");var r={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute("data-"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a=e[0],r=e[1],n=e[2],o=e[3];function l(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.unshift(e),s(t).is(r))n.apply(t,i);else for(var a=s(t).parents(),o=0;o<a.length;o+=1)s(a[o]).is(r)&&n.apply(a[o],i)}}function d(e){var t=e&&e.target?e.target.dom7EventData||[]:[];t.unshift(e),n.apply(this,t)}"function"==typeof e[1]&&(a=(i=e)[0],n=i[1],o=i[2],r=void 0),o||(o=!1);for(var h,p=a.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(r)for(h=0;h<p.length;h+=1)u.dom7LiveListeners||(u.dom7LiveListeners=[]),u.dom7LiveListeners.push({type:a,listener:n,proxyListener:l}),u.addEventListener(p[h],l,o);else for(h=0;h<p.length;h+=1)u.dom7Listeners||(u.dom7Listeners=[]),u.dom7Listeners.push({type:a,listener:n,proxyListener:d}),u.addEventListener(p[h],d,o)}return this},off:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s=e[0],a=e[1],r=e[2],n=e[3];"function"==typeof e[1]&&(s=(i=e)[0],r=i[1],n=i[2],a=void 0),n||(n=!1);for(var o=s.split(" "),l=0;l<o.length;l+=1)for(var d=0;d<this.length;d+=1){var h=this[d];if(a){if(h.dom7LiveListeners)for(var p=0;p<h.dom7LiveListeners.length;p+=1)r?h.dom7LiveListeners[p].listener===r&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n):h.dom7LiveListeners[p].type===o[l]&&h.removeEventListener(o[l],h.dom7LiveListeners[p].proxyListener,n)}else if(h.dom7Listeners)for(var c=0;c<h.dom7Listeners.length;c+=1)r?h.dom7Listeners[c].listener===r&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n):h.dom7Listeners[c].type===o[l]&&h.removeEventListener(o[l],h.dom7Listeners[c].proxyListener,n)}return this},trigger:function(){for(var i=[],s=arguments.length;s--;)i[s]=arguments[s];for(var a=i[0].split(" "),r=i[1],n=0;n<a.length;n+=1)for(var o=0;o<this.length;o+=1){var l=void 0;try{l=new t.CustomEvent(a[n],{detail:r,bubbles:!0,cancelable:!0})}catch(t){(l=e.createEvent("Event")).initEvent(a[n],!0,!0),l.detail=r}this[o].dom7EventData=i.filter(function(e,t){return t>0}),this[o].dispatchEvent(l),this[o].dom7EventData=[],delete this[o].dom7EventData}return this},transitionEnd:function(e){var t,i=["webkitTransitionEnd","transitionend"],s=this;function a(r){if(r.target===this)for(e.call(this,r),t=0;t<i.length;t+=1)s.off(i[t],a)}if(e)for(t=0;t<i.length;t+=1)s.on(i[t],a);return this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+
vendor: 7,689 bytes, line 7128
7128parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},offset:function(){if(this.length>0){var i=this[0],s=i.getBoundingClientRect(),a=e.body,r=i.clientTop||a.clientTop||0,n=i.clientLeft||a.clientLeft||0,o=i===t?t.scrollY:i.scrollTop,l=i===t?t.scrollX:i.scrollLeft;return{top:s.top+o-r,left:s.left+l-n}}return null},css:function(e,i){var s;if(1===arguments.length){if("string"!=typeof e){for(s=0;s<this.length;s+=1)for(var a in e)this[s].style[a]=e[a];return this}if(this[0])return t.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(s=0;s<this.length;s+=1)this[s].style[e]=i;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(a){var r,n,o=this[0];if(!o||void 0===a)return!1;if("string"==typeof a){if(o.matches)return o.matches(a);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(a);if(o.msMatchesSelector)return o.msMatchesSelector(a);for(r=s(a),n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}if(a===e)return o===e;if(a===t)return o===t;if(a.nodeType||a instanceof i){for(r=a.nodeType?[a]:a,n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,s=this.length;return new i(e>s-1?[]:e<0?(t=s+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var t,s=[],a=arguments.length;a--;)s[a]=arguments[a];for(var r=0;r<s.length;r+=1){t=s[r];for(var n=0;n<this.length;n+=1)if("string"==typeof t){var o=e.createElement("div");for(o.innerHTML=t;o.firstChild;)this[n].appendChild(o.firstChild)}else if(t instanceof i)for(var l=0;l<t.length;l+=1)this[n].appendChild(t[l]);else this[n].appendChild(t)}return this},prepend:function(t){var s,a;for(s=0;s<this.length;s+=1)if("string"==typeof t){var r=e.createElement("div");for(r.innerHTML=t,a=r.childNodes.length-1;a>=0;a-=1)this[s].insertBefore(r.childNodes[a],this[s].childNodes[0])}else if(t instanceof i)for(a=0;a<t.length;a+=1)this[s].insertBefore(t[a],this[s].childNodes[0]);else this[s].insertBefore(t,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&s(this[0].nextElementSibling).is(e)?new i([this[0].nextElementSibling]):new i([]):this[0].nextElementSibling?new i([this[0].nextElementSibling]):new i([]):new i([])},nextAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.nextElementSibling;){var r=a.nextElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&s(t.previousElementSibling).is(e)?new i([t.previousElementSibling]):new i([]):t.previousElementSibling?new i([t.previousElementSibling]):new i([])}return new i([])},prevAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.previousElementSibling;){var r=a.previousElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},parent:function(e){for(var t=[],i=0;i<this.length;i+=1)null!==this[i].parentNode&&(e?s(this[i].parentNode).is(e)&&t.push(this[i].parentNode):t.push(this[i].parentNode));return s(a(t))},parents:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var r=this[i].parentNode;r;)e?s(r).is(e)&&t.push(r):t.push(r),r=r.parentNode;return s(a(t))},closest:function(e){var t=this;return void 0===e?new i([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],s=0;s<this.length;s+=1)for(var a=this[s].querySelectorAll(e),r=0;r<a.length;r+=1)t.push(a[r]);return new i(t)},children:function(e){for(var t=[],r=0;r<this.length;r+=1)for(var n=this[r].childNodes,o=0;o<n.length;o+=1)e?1===n[o].nodeType&&s(n[o]).is(e)&&t.push(n[o]):1===n[o].nodeType&&t.push(n[o]);return new i(a(t))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a;for(i=0;i<e.length;i+=1){var r=s(e[i]);for(a=0;a<r.length;a+=1)this[this.length]=r[a],this.length+=1}return this},styles:function(){return this[0]?t.getComputedStyle(this[0],null):{}}};Object.keys(r).forEach(function(e){s.fn[e]=r[e]});var n,o,l,d={deleteProps:function(e){var t=e;Object.keys(t).forEach(function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}})},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,i){var s,a,r;void 0===i&&(i="x");var n=t.getComputedStyle(e,null);return t.WebKitCSSMatrix?((a=n.transform||n.webkitTransform).split(",").length>6&&(a=a.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),r=new t.WebKitCSSMatrix("none"===a?"":a)):s=(r=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===i&&(a=t.WebKitCSSMatrix?r.m41:16===s.length?parseFloat(s[12]):parseFloat(s[4])),"y"===i&&(a=t.WebKitCSSMatrix?r.m42:16===s.length?parseFloat(s[13]):parseFloat(s[5])),a||0},parseUrlQuery:function(e){var i,s,a,r,n={},o=e||t.location.href;if("string"==typeof o&&o.length)for(r=(s=(o=o.indexOf("?")>-1?o.replace(/\S*\?/,""):"").split("&").filter(function(e){return""!==e})).length,i=0;i<r;i+=1)a=s[i].replace(/#\S+/g,"").split("="),n[decodeURIComponent(a[0])]=void 0===a[1]?void 0:decodeURIComponent(a[1])||"";return n},isObject:function(e){return"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=Object(e[0]),s=1;s<e.length;s+=1){var a=e[s];if(void 0!==a&&null!==a)for(var r=Object.keys(Object(a)),n=0,o=r.length;n<o;n+=1){var l=r[n],h=Object.getOwnPropertyDescriptor(a,l);void 0!==h&&h.enumerable&&(d.isObject(i[l])&&d.isObject(a[l])?d.extend(i[l],a[l]):!d.isObject(i[l])&&d.isObject(a[l])?(i[l]={},d.extend(i[l],a[l])):i[l]=a[l])}}return i}},h=(l=e.createElement("div"),{touch:t.Modernizr&&!0===t.Modernizr.touch||!!("ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch),pointerEvents:!(!t.navigator.pointerEnabled&&!t.PointerEvent),prefixedPointerEvents:!!t.navigator.msPointerEnabled,transition:(o=l.style,"transition"in o||"webkitTransition"in o||"MozTransition"in o),transforms3d:t.Modernizr&&!0===t.Modernizr.csstransforms3d||(n=l.style,"webkitPerspective"in n||"MozPerspective"in n||"OPerspective"in n||"MsPerspective"in n||"perspective"in n),flexbox:function(){for(var e=l.style,t="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),i=0;i<t.length;i+=1)if(t[i]in e)return!0;return!1}(),observer:"MutationObserver"in t||"WebkitMutationObserver"in t,passiveListener:function(){var e=!1;try{var i=Object.defineProperty({},"passive",{get:function(){e=!0}});t.addEventListener("testPassiveListener",null,i)}catch(e){}return e}(),gestures:"ongesturestart"in t}),p=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={}
7128,t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},c={components:{configurable:!0}};p.prototype.on=function(e,t){var i=this;return"function"!=typeof t?i:(e.split(" ").forEach(function(e){i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e].push(t)}),i)},p.prototype.once=function(e,t){var i=this;if("function"!=typeof t)return i;return i.on(e,function s(){for(var a=[],r=arguments.length;r--;)a[r]=arguments[r];t.apply(i,a),i.off(e,s)})},p.prototype.off=function(e,t){var i=this;return e.split(" ").forEach(function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e].forEach(function(s,a){s===t&&i.eventsListeners[e].splice(a,1)})}),i},p.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a,r=this;return r.eventsListeners?("string"==typeof e[0]||Array.isArray(e[0])?(i=e[0],s=e.slice(1,e.length),a=r):(i=e[0].events,s=e[0].data,a=e[0].context||r),(Array.isArray(i)?i:i.split(" ")).forEach(function(e){if(r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(a,s)})}}),r):r},p.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i];s.params&&d.extend(e,s.params)})},p.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i],a=e[i]||{};s.instance&&Object.keys(s.instance).forEach(function(e){var i=s.instance[e];t[e]="function"==typeof i?i.bind(t):i}),s.on&&t.on&&Object.keys(s.on).forEach(function(e){t.on(e,s.on[e])}),s.create&&s.create.bind(t)(a)})},c.components.set=function(e){this.use&&this.use(e)},p.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;s.prototype.modules||(s.prototype.modules={});var a=e.name||Object.keys(s.prototype.modules).length+"_"+d.now();return s.prototype.modules[a]=e,e.proto&&Object.keys(e.proto).forEach(function(t){s.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(function(t){s[t]=e.static[t]}),e.install&&e.install.apply(s,t),s},p.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;return Array.isArray(e)?(e.forEach(function(e){return s.installModule(e)}),s):s.installModule.apply(s,[e].concat(t))},Object.defineProperties(p,c);var u={updateSize:function(){var e,t,i=this.$el;e=void 0!==this.params.width?this.params.width:i[0].clientWidth,t=void 0!==this.params.height?this.params.height:i[0].clientHeight,0===e&&this.isHorizontal()||0===t&&this.isVertical()||(e=e-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),t=t-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),d.extend(this,{width:e,height:t,size:this.isHorizontal()?e:t}))},updateSlides:function(){var e=this.params,t=this.$wrapperEl,i=this.size,s=this.rtl,a=this.wrongRTL,r=t.children("."+this.params.slideClass),n=this.virtual&&e.virtual.enabled?this.virtual.slides.length:r.length,o=[],l=[],p=[],c=e.slidesOffsetBefore;"function"==typeof c&&(c=e.slidesOffsetBefore.call(this));var u=e.slidesOffsetAfter;"function"==typeof u&&(u=e.slidesOffsetAfter.call(this));var v=n,f=this.snapGrid.length,m=this.snapGrid.length,g=e.spaceBetween,b=-c,w=0,y=0;if(void 0!==i){var x,E;"string"==typeof g&&g.indexOf("%")>=0&&(g=parseFloat(g.replace("%",""))/100*i),this.virtualSize=-g,s?r.css({marginLeft:"",marginTop:""}):r.css({marginRight:"",marginBottom:""}),e.slidesPerColumn>1&&(x=Math.floor(n/e.slidesPerColumn)===n/this.params.slidesPerColumn?n:Math.ceil(n/e.slidesPerColumn)*e.slidesPerColumn,"auto"!==e.slidesPerView&&"row"===e.slidesPerColumnFill&&(x=Math.max(x,e.slidesPerView*e.slidesPerColumn)));for(var T,S=e.slidesPerColumn,C=x/S,M=C-(e.slidesPerColumn*C-n),z=0;z<n;z+=1){E=0;var P=r.eq(z);if(e.slidesPerColumn>1){var k=void 0,$=void 0,L=void 0;"column"===e.slidesPerColumnFill?(L=z-($=Math.floor(z/S))*S,($>M||$===M&&L===S-1)&&(L+=1)>=S&&(L=0,$+=1),k=$+L*x/S,P.css({"-webkit-box-ordinal-group":k,"-moz-box-ordinal-group":k,"-ms-flex-order":k,"-webkit-order":k,order:k})):$=z-(L=Math.floor(z/C))*C,P.css("margin-"+(this.isHorizontal()?"top":"left"),0!==L&&e.spaceBetween&&e.spaceBetween+"px").attr("data-swiper-column",$).attr("data-swiper-row",L)}"none"!==P.css("display")&&("auto"===e.slidesPerView?(E=this.isHorizontal()?P.outerWidth(!0):P.outerHeight(!0),e.roundLengths&&(E=Math.floor(E))):(E=(i-(e.slidesPerView-1)*g)/e.slidesPerView,e.roundLengths&&(E=Math.floor(E)),r[z]&&(this.isHorizontal()?r[z].style.width=E+"px":r[z].style.height=E+"px")),r[z]&&(r[z].swiperSlideSize=E),p.push(E),e.centeredSlides?(b=b+E/2+w/2+g,0===w&&0!==z&&(b=b-i/2-g),0===z&&(b=b-i/2-g),Math.abs(b)<.001&&(b=0),y%e.slidesPerGroup==0&&o.push(b),l.push(b)):(y%e.slidesPerGroup==0&&o.push(b),l.push(b),b=b+E+g),this.virtualSize+=E+g,w=E,y+=1)}if(this.virtualSize=Math.max(this.virtualSize,i)+u,s&&a&&("slide"===e.effect||"coverflow"===e.effect)&&t.css({width:this.virtualSize+e.spaceBetween+"px"}),h.flexbox&&!e.setWrapperSize||(this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+"px"}):t.css({height:this.virtualSize+e.spaceBetween+"px"})),e.slidesPerColumn>1&&(this.virtualSize=(E+e.spaceBetween)*x,this.virtualSize=Math.ceil(this.virtualSize/e.slidesPerColumn)-e.spaceBetween,this.isHorizontal()?t.css({width:this.virtualSize+e.spaceBetween+"px"}):t.css({height:this.virtualSize+e.spaceBetween+"px"}),e.centeredSlides)){T=[];for(var I=0;I<o.length;I+=1)o[I]<this.virtualSize+o[0]&&T.push(o[I]);o=T}if(!e.centeredSlides){T=[];for(var D=0;D<o.length;D+=1)o[D]<=this.virtualSize-i&&T.push(o[D]);o=T,Math.floor(this.virtualSize-i)-Math.floor(o[o.length-1])>1&&o.push(this.virtualSize-i)}0===o.length&&(o=[0]),0!==e.spaceBetween&&(this.isHorizontal()?s?r.css({marginLeft:g+"px"}):r.css({marginRight:g+"px"}):r.css({marginBottom:g+"px"})),d.extend(this,{slides:r,snapGrid:o,slidesGrid:l,slidesSizesGrid:p}
7128),n!==v&&this.emit("slidesLengthChange"),o.length!==f&&(this.params.watchOverflow&&this.checkOverflow(),this.emit("snapGridLengthChange")),l.length!==m&&this.emit("slidesGridLengthChange"),(e.watchSlidesProgress||e.watchSlidesVisibility)&&this.updateSlidesOffset()}},updateAutoHeight:function(){var e,t=[],i=0;if("auto"!==this.params.slidesPerView&&this.params.slidesPerView>1)for(e=0;e<Math.ceil(this.params.slidesPerView);e+=1){var s=this.activeIndex+e;if(s>this.slides.length)break;t.push(this.slides.eq(s)[0])}else t.push(this.slides.eq(this.activeIndex)[0]);for(e=0;e<t.length;e+=1)if(void 0!==t[e]){var a=t[e].offsetHeight;i=a>i?a:i}i&&this.$wrapperEl.css("height",i+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this.translate||0);var t=this.params,i=this.slides,s=this.rtl;if(0!==i.length){void 0===i[0].swiperSlideOffset&&this.updateSlidesOffset();var a=-e;s&&(a=e),i.removeClass(t.slideVisibleClass);for(var r=0;r<i.length;r+=1){var n=i[r],o=(a+(t.centeredSlides?this.minTranslate():0)-n.swiperSlideOffset)/(n.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility){var l=-(a-n.swiperSlideOffset),d=l+this.slidesSizesGrid[r];(l>=0&&l<this.size||d>0&&d<=this.size||l<=0&&d>=this.size)&&i.eq(r).addClass(t.slideVisibleClass)}n.progress=s?-o:o}}},updateProgress:function(e){void 0===e&&(e=this.translate||0);var t=this.params,i=this.maxTranslate()-this.minTranslate(),s=this.progress,a=this.isBeginning,r=this.isEnd,n=a,o=r;0===i?(s=0,a=!0,r=!0):(a=(s=(e-this.minTranslate())/i)<=0,r=s>=1),d.extend(this,{progress:s,isBeginning:a,isEnd:r}),(t.watchSlidesProgress||t.watchSlidesVisibility)&&this.updateSlidesProgress(e),a&&!n&&this.emit("reachBeginning toEdge"),r&&!o&&this.emit("reachEnd toEdge"),(n&&!a||o&&!r)&&this.emit("fromEdge"),this.emit("progress",s)},updateSlidesClasses:function(){var e,t=this.slides,i=this.params,s=this.$wrapperEl,a=this.activeIndex,r=this.realIndex,n=this.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=n?this.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+a+'"]'):t.eq(a)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=t.eq(0)).addClass(i.slideNextClass);var l=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);
7128i.loop&&0===l.length&&(l=t.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,i=this.rtl?this.translate:-this.translate,s=this.slidesGrid,a=this.snapGrid,r=this.params,n=this.activeIndex,o=this.realIndex,l=this.snapIndex,h=e;if(void 0===h){for(var p=0;p<s.length;p+=1)void 0!==s[p+1]?i>=s[p]&&i<s[p+1]-(s[p+1]-s[p])/2?h=p:i>=s[p]&&i<s[p+1]&&(h=p+1):i>=s[p]&&(h=p);r.normalizeSlideIndex&&(h<0||void 0===h)&&(h=0)}if((t=a.indexOf(i)>=0?a.indexOf(i):Math.floor(h/r.slidesPerGroup))>=a.length&&(t=a.length-1),h!==n){var c=parseInt(this.slides.eq(h).attr("data-swiper-slide-index")||h,10);d.extend(this,{snapIndex:t,realIndex:c,previousIndex:n,activeIndex:h}),this.emit("activeIndexChange"),this.emit("snapIndexChange"),o!==c&&this.emit("realIndexChange"),this.emit("slideChange")}else t!==l&&(this.snapIndex=t,this.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this.params,i=s(e.target).closest("."+t.slideClass)[0],a=!1;if(i)for(var r=0;r<this.slides.length;r+=1)this.slides[r]===i&&(a=!0);if(!i||!a)return this.clickedSlide=void 0,void(this.clickedIndex=void 0);this.clickedSlide=i,this.virtual&&this.params.virtual.enabled?this.clickedIndex=parseInt(s(i).attr("data-swiper-slide-index"),10):this.clickedIndex=s(i).index(),t.slideToClickedSlide&&void 0!==this.clickedIndex&&this.clickedIndex!==this.activeIndex&&this.slideToClickedSlide()}},v={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this.params,i=this.rtl,s=this.translate,a=this.$wrapperEl;if(t.virtualTranslate)return i?-s:s;var r=d.getTranslate(a[0],e);return i&&(r=-r),r||0},setTranslate:function(e,t){var i=this.rtl,s=this.params,a=this.$wrapperEl,r=this.progress,n=0,o=0;this.isHorizontal()?n=i?-e:e:o=e,s.roundLengths&&(n=Math.floor(n),o=Math.floor(o)),s.virtualTranslate||(h.transforms3d?a.transform("translate3d("+n+"px, "+o+"px, 0px)"):a.transform("translate("+n+"px, "+o+"px)")),this.translate=this.isHorizontal()?n:o;var l=this.maxTranslate()-this.minTranslate();(0===l?0:(e-this.minTranslate())/l)!==r&&this.updateProgress(e),this.emit("setTranslate",this.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]}},f={setTransition:function(e,t){this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.params,a=this.previousIndex;s.autoHeight&&this.updateAutoHeight();var r=t;if(r||(r=i>a?"next":i<a?"prev":"reset"),this.emit("transitionStart"),e&&i!==a){if("reset"===r)return void this.emit("slideResetTransitionStart");this.emit("slideChangeTransitionStart"),"next"===r?this.emit("slideNextTransitionStart"):this.emit("slidePrevTransitionStart")}},transitionEnd:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.previousIndex;this.animating=!1,this.setTransition(0);var a=t;if(a||(a=i>s?"next":i<s?"prev":"reset"),this.emit("transitionEnd"),e&&i!==s){if("reset"===a)return void this.emit("slideResetTransitionEnd");this.emit("slideChangeTransitionEnd"),"next"===a?this.emit("slideNextTransitionEnd"):this.emit("slidePrevTransitionEnd")}}},m={slideTo:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=this,r=e;r<0&&(r=0);var n=a.params,o=a.snapGrid,l=a.slidesGrid,d=a.previousIndex,p=a.activeIndex,c=a.rtl,u=a.$wrapperEl;if(a.animating&&n.preventIntercationOnTransition)return!1;var v=Math.floor(r/n.slidesPerGroup);v>=o.length&&(v=o.length-1),(p||n.initialSlide||0)===(d||0)&&i&&a.emit("beforeSlideChangeStart");var f,m=-o[v];if(a.updateProgress(m),n.normalizeSlideIndex)for(var g=0;g<l.length;g+=1)-Math.floor(100*m)>=Math.floor(100*l[g])&&(r=g);if(a.initialized&&r!==p){if(!a.allowSlideNext&&m<a.translate&&m<a.minTranslate())return!1;if(!a.allowSlidePrev&&m>a.translate&&m>a.maxTranslate()&&(p||0)!==r)return!1}return f=r>p?"next":r<p?"prev":"reset",c&&-m===a.translate||!c&&m===a.translate?(a.updateActiveIndex(r),n.autoHeight&&a.updateAutoHeight(),a.updateSlidesClasses(),"slide"!==n.effect&&a.setTranslate(m),"reset"!==f&&(a.transitionStart(i,f),a.transitionEnd(i,f)),!1):(0!==t&&h.transition?(a.setTransition(t),a.setTranslate(m),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,f),a.animating||(a.animating=!0,u.transitionEnd(function(){a&&!a.destroyed&&a.transitionEnd(i,f)}))):(a.setTransition(0),a.setTranslate(m),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,f),a.transitionEnd(i,f)),!0)},slideToLoop:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=e;return this.params.loop&&(a+=this.loopedSlides),this.slideTo(a,t,i,s)},slideNext:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)):this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)},slidePrev:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex-1,e,t,i)):this.slideTo(this.activeIndex-1,e,t,i)},slideReset:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);return this.slideTo(this.activeIndex,e,t,i)},slideToClickedSlide:function(){var e,t=this,i=t.params,a=t.$wrapperEl,r="auto"===i.slidesPerView?t.slidesPerViewDynamic():i.slidesPerView,n=t.clickedIndex;if(i.loop){if(t.animating)return;e=parseInt(s(t.clickedSlide).attr("data-swiper-slide-index"),10),i.centeredSlides?n<t.loopedSlides-r/2||n>t.slides.length-t.loopedSlides+r/2?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n):n>t.slides.length-r?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n)}else t.slideTo(n)}},g={loopCreate:function(){var t=this,i=t.params,a=t.$wrapperEl;a.children("."+i.slideClass+"."+i.slideDuplicateClass).remove();var r=a.children("."+i.slideClass);if(i.loopFillGroupWithBlank){var n=i.slidesPerGroup-r.length%i.slidesPerGroup;if(n!==i.slidesPerGroup){for(var o=0;o<n;o+=1){var l=s(e.createElement("div")).addClass(i.slideClass+" "+i.slideBlankClass);a.append(l)}r=a.children("."+i.slideClass)}}"auto"!==i.slidesPerView||i.loopedSlides||(i.loopedSlides=r.length),t.loopedSlides=parseInt(i.loopedSlides||i.slidesPerView,10),t.loopedSlides+=i.loopAdditionalSlides,t.loopedSlides>r.length&&(t.loopedSlides=r.length);var d=[],h=[];r.each(function(e,i){var a=s(i);e<t.loopedSlides&&h.push(i),e<r.length&&e>=r.length-t.loopedSlides&&d.push(i),a.attr("data-swiper-slide-index",e)});for(var p=0;p<h.length;p+=1)a.append(s(h[p].cloneNode(!0)).addClass(i.slideDuplicateClass));for(var c=d.length-1;c>=0;c-=1)a.prepend(s(d[c].cloneNode(!0)).addClass(i.slideDuplicateClass))},loopFix:function(){var e,t=this.params,i=this.activeIndex,s=this.slides,a=this.loopedSlides,r=this.allowSlidePrev,n=this.allowSlideNext,o=this.snapGrid,l=this.rtl;this.allowSlidePrev=!0,this.allowSlideNext=!0;var d=-o[i]-this.getTranslate();i<a?(e=s.length-3*a+i,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d)):("auto"===t.slidesPerView&&i>=2*a||i>
7128s.length-2*t.slidesPerView)&&(e=-s.length+i+a,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d));this.allowSlidePrev=r,this.allowSlideNext=n},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,i=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass).remove(),i.removeAttr("data-swiper-slide-index")}},b={setGrabCursor:function(e){if(!h.touch&&this.params.simulateTouch){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){h.touch||(this.el.style.cursor="")}},w={appendSlide:function(e){var t=this.$wrapperEl,i=this.params;if(i.loop&&this.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s<e.length;s+=1)e[s]&&t.append(e[s]);else t.append(e);i.loop&&this.loopCreate(),i.observer&&h.observer||this.update()},prependSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&this.loopDestroy();var a=s+1;if("object"==typeof e&&"length"in e){for(var r=0;r<e.length;r+=1)e[r]&&i.prepend(e[r]);a=s+e.length}else i.prepend(e);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),this.slideTo(a,0,!1)},removeSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&(this.loopDestroy(),this.slides=i.children("."+t.slideClass));var a,r=s;if("object"==typeof e&&"length"in e){for(var n=0;n<e.length;n+=1)a=e[n],this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1);r=Math.max(r,0)}else a=e,this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1),r=Math.max(r,0);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),t.loop?this.slideTo(r+this.loopedSlides,0,!1):this.slideTo(r,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},y=function(){var i=t.navigator.userAgent,s={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:t.cordova||t.phonegap,phonegap:t.cordova||t.phonegap},a=i.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),r=i.match(/(Android);?[\s\/]+([\d.]+)?/),n=i.match(/(iPad).*OS\s([\d_]+)/),o=i.match(/(iPod)(.*OS\s([\d_]+))?/),l=!n&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/);if(a&&(s.os="windows",s.osVersion=a[2],s.windows=!0),r&&!a&&(s.os="android",s.osVersion=r[2],s.android=!0,s.androidChrome=i.toLowerCase().indexOf("chrome")>=0),(n||l||o)&&(s.os="ios",s.ios=!0),l&&!o&&(s.osVersion=l[2].replace(/_/g,"."),s.iphone=!0),n&&(s.osVersion=n[2].replace(/_/g,"."),s.ipad=!0),o&&(s.osVersion=o[3]?o[3].replace(/_/g,"."):null,s.iphone=!0),s.ios&&s.osVersion&&i.indexOf("Version/")>=0&&"10"===s.osVersion.split(".")[0]&&(s.osVersion=i.toLowerCase().split("version/")[1].split(" ")[0]),s.desktop=!(s.os||s.android||s.webView),s.webView=(l||n||o)&&i.match(/.*AppleWebKit(?!.*Safari)/i),s.os&&"ios"===s.os){var d=s.osVersion.split("."),h=e.querySelector('meta[name="viewport"]');s.minimalUi=!s.webView&&(o||l)&&(1*d[0]==7?1*d[1]>=1:1*d[0]>7)&&h&&h.getAttribute("content").indexOf("minimal-ui")>=0}return s.pixelRatio=t.devicePixelRatio||1,s}(),x=function(i){var a=this.touchEventsData,r=this.params,n=this.touches;if(!this.animating||!r.preventIntercationOnTransition){var o=i;if(o.originalEvent&&(o=o.originalEvent),a.isTouchEvent="touchstart"===o.type,(a.isTouchEvent||!("which"in o)||3!==o.which)&&(!a.isTouched||!a.isMoved))if(r.noSwiping&&s(o.target).closest(r.noSwipingSelector?r.noSwipingSelector:"."+r.noSwipingClass)[0])this.allowClick=!0;else if(!r.swipeHandler||s(o).closest(r.swipeHandler)[0]){n.currentX="touchstart"===o.type?o.targetTouches[0].pageX:o.pageX,n.currentY="touchstart"===o.type?o.targetTouches[0].pageY:o.pageY;var l=n.currentX,h=n.currentY;if(!(y.ios&&!y.cordova&&r.iOSEdgeSwipeDetection&&l<=r.iOSEdgeSwipeThreshold&&l>=t.screen.width-r.iOSEdgeSwipeThreshold)){if(d.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),n.startX=l,n.startY=h,a.touchStartTime=d.now(),this.allowClick=!0,this.updateSize(),this.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1),"touchstart"!==o.type){var p=!0;s(o.target).is(a.formElements)&&(p=!1),e.activeElement&&s(e.activeElement).is(a.formElements)&&e.activeElement!==o.target&&e.activeElement.blur(),p&&this.allowTouchMove&&o.preventDefault()}
7128this.emit("touchStart",o)}}}},E=function(t){var i=this.touchEventsData,a=this.params,r=this.touches,n=this.rtl,o=t;if(o.originalEvent&&(o=o.originalEvent),i.isTouched){if(!i.isTouchEvent||"mousemove"!==o.type){var l="touchmove"===o.type?o.targetTouches[0].pageX:o.pageX,h="touchmove"===o.type?o.targetTouches[0].pageY:o.pageY;if(o.preventedByNestedSwiper)return r.startX=l,void(r.startY=h);if(!this.allowTouchMove)return this.allowClick=!1,void(i.isTouched&&(d.extend(r,{startX:l,startY:h,currentX:l,currentY:h}),i.touchStartTime=d.now()));if(i.isTouchEvent&&a.touchReleaseOnEdges&&!a.loop)if(this.isVertical()){if(h<r.startY&&this.translate<=this.maxTranslate()||h>r.startY&&this.translate>=this.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(l<r.startX&&this.translate<=this.maxTranslate()||l>r.startX&&this.translate>=this.minTranslate())return;if(i.isTouchEvent&&e.activeElement&&o.target===e.activeElement&&s(o.target).is(i.formElements))return i.isMoved=!0,void(this.allowClick=!1);if(i.allowTouchCallbacks&&this.emit("touchMove",o),!(o.targetTouches&&o.targetTouches.length>1)){r.currentX=l,r.currentY=h;var p,c=r.currentX-r.startX,u=r.currentY-r.startY;if(void 0===i.isScrolling)this.isHorizontal()&&r.currentY===r.startY||this.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:c*c+u*u>=25&&(p=180*Math.atan2(Math.abs(u),Math.abs(c))/Math.PI,i.isScrolling=this.isHorizontal()?p>a.touchAngle:90-p>a.touchAngle);if(i.isScrolling&&this.emit("touchMoveOpposite",o),"undefined"==typeof startMoving&&(r.currentX===r.startX&&r.currentY===r.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){this.allowClick=!1,o.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&o.stopPropagation(),i.isMoved||(a.loop&&this.loopFix(),i.startTranslate=this.getTranslate(),this.setTransition(0),this.animating&&this.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!a.grabCursor||!0!==this.allowSlideNext&&!0!==this.allowSlidePrev||this.setGrabCursor(!0),this.emit("sliderFirstMove",o)),this.emit("sliderMove",o),i.isMoved=!0;var v=this.isHorizontal()?c:u;r.diff=v,v*=a.touchRatio,n&&(v=-v),this.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;var f=!0,m=a.resistanceRatio;if(a.touchReleaseOnEdges&&(m=0),v>0&&i.currentTranslate>this.minTranslate()?(f=!1,a.resistance&&(i.currentTranslate=this.minTranslate()-1+Math.pow(-this.minTranslate()+i.startTranslate+v,m))):v<0&&i.currentTranslate<this.maxTranslate()&&(f=!1,a.resistance&&(i.currentTranslate=this.maxTranslate()+1-Math.pow(this.maxTranslate()-i.startTranslate-v,m))),f&&(o.preventedByNestedSwiper=!0),!this.allowSlideNext&&"next"===this.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!this.allowSlidePrev&&"prev"===this.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),a.threshold>0){if(!(Math.abs(v)>a.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);
7128if(!i.allowThresholdMove)return i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,void(r.diff=this.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY)}a.followFinger&&((a.freeMode||a.watchSlidesProgress||a.watchSlidesVisibility)&&(this.updateActiveIndex(),this.updateSlidesClasses()),a.freeMode&&(0===i.velocities.length&&i.velocities.push({position:r[this.isHorizontal()?"startX":"startY"],time:i.touchStartTime}),i.velocities.push({position:r[this.isHorizontal()?"currentX":"currentY"],time:d.now()})),this.updateProgress(i.currentTranslate),this.setTranslate(i.currentTranslate))}}}}else i.startMoving&&i.isScrolling&&this.emit("touchMoveOpposite",o)},T=function(e){var t=this,i=t.touchEventsData,s=t.params,a=t.touches,r=t.rtl,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,h=e;if(h.originalEvent&&(h=h.originalEvent),i.allowTouchCallbacks&&t.emit("touchEnd",h),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&s.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);s.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=d.now(),u=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(h),t.emit("tap",h),u<300&&c-i.lastClickTime>300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),i.clickTimeout=d.nextTick(function(){t&&!t.destroyed&&t.emit("click",h)},300)),u<300&&c-i.lastClickTime<300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),t.emit("doubleTap",h))),i.lastClickTime=d.now(),d.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!i.isTouched||!i.isMoved||!t.swipeDirection||0===a.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);if(i.isTouched=!1,i.isMoved=!1,i.startMoving=!1,p=s.followFinger?r?t.translate:-t.translate:-i.currentTranslate,s.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(s.freeModeMomentum){if(i.velocities.length>1){var v=i.velocities.pop(),f=i.velocities.pop(),m=v.position-f.position,g=v.time-f.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)<s.freeModeMinimumVelocity&&(t.velocity=0),(g>150||d.now()-v.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=s.freeModeMomentumVelocityRatio,i.velocities.length=0;var b=1e3*s.freeModeMomentumRatio,w=t.velocity*b,y=t.translate+w;r&&(y=-y);var x,E=!1,T=20*Math.abs(t.velocity)*s.freeModeMomentumBounceRatio;if(y<t.maxTranslate())s.freeModeMomentumBounce?(y+t.maxTranslate()<-T&&(y=t.maxTranslate()-T),x=t.maxTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.maxTranslate();else if(y>t.minTranslate())s.freeModeMomentumBounce?(y-t.minTranslate()>T&&(y=t.minTranslate()+T),x=t.minTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.minTranslate();else if(s.freeModeSticky){for(var S,C=0;C<l.length;C+=1)if(l[C]>-y){S=C;break}y=-(y=Math.abs(l[S]-y)<Math.abs(l[S-1]-y)||"next"===t.swipeDirection?l[S]:l[S-1])}if(0!==t.velocity)b=r?Math.abs((-y-t.translate)/t.velocity):Math.abs((y-t.translate)/t.velocity);else if(s.freeModeSticky)return void t.slideReset();s.freeModeMomentumBounce&&E?(t.updateProgress(x),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&i.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(s.speed),t.setTranslate(x),n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))})):t.velocity?(t.updateProgress(y),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(y),t.updateActiveIndex(),t.updateSlidesClasses()}(!s.freeModeMomentum||u>=s.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,z=t.slidesSizesGrid[0],P=0;P<o.length;P+=s.slidesPerGroup)void 0!==o[P+s.slidesPerGroup]?p>=o[P]&&p<o[P+s.slidesPerGroup]&&(M=P,z=o[P+s.slidesPerGroup]-o[P]):p>=o[P]&&(M=P,z=o[o.length-1]-o[o.length-2]);var k=(p-o[M])/z;if(u>s.longSwipesMs){if(!s.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(k>=s.longSwipesRatio?t.slideTo(M+s.slidesPerGroup):t.slideTo(M)),"prev"===t.swipeDirection&&(k>1-s.longSwipesRatio?t.slideTo(M+s.slidesPerGroup):t.slideTo(M))}else{if(!s.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(M+s.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(M)}}},S=function(){var e=this.params,t=this.el;if(!t||0!==t.offsetWidth){e.breakpoints&&this.setBreakpoint();var i=this.allowSlideNext,s=this.allowSlidePrev;if(this.allowSlideNext=!0,this.allowSlidePrev=!0,this.updateSize(),this.updateSlides(),e.freeMode){var a=Math.min(Math.max(this.translate,this.maxTranslate()),this.minTranslate());this.setTranslate(a),this.updateActiveIndex(),this.updateSlidesClasses(),e.autoHeight&&this.updateAutoHeight()}else this.updateSlidesClasses(),("auto"===e.slidesPerView||e.slidesPerView>1)&&this.isEnd&&!this.params.centeredSlides?this.slideTo(this.slides.length-1,0,!1,!0):this.slideTo(this.activeIndex,0,!1,!0);this.allowSlidePrev=s,this.allowSlideNext=i}},C=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))};var M={attachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl;this.onTouchStart=x.bind(this),this.onTouchMove=E.bind(this),this.onTouchEnd=T.bind(this),this.onClick=C.bind(this);var r="container"===t.touchEventsTarget?s:a,n=!!t.nested;
7128if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!("touchstart"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(i.start,this.onTouchStart,o),r.addEventListener(i.move,this.onTouchMove,h.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener("mousedown",this.onTouchStart,!1),e.addEventListener("mousemove",this.onTouchMove,n),e.addEventListener("mouseup",this.onTouchEnd,!1))}else r.addEventListener(i.start,this.onTouchStart,!1),e.addEventListener(i.move,this.onTouchMove,n),e.addEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",this.onClick,!0),this.on("resize observerUpdate",S)},detachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl,r="container"===t.touchEventsTarget?s:a,n=!!t.nested;if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!("onTouchStart"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,this.onTouchStart,o),r.removeEventListener(i.move,this.onTouchMove,n),r.removeEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener("mousedown",this.onTouchStart,!1),e.removeEventListener("mousemove",this.onTouchMove,n),e.removeEventListener("mouseup",this.onTouchEnd,!1))}else r.removeEventListener(i.start,this.onTouchStart,!1),e.removeEventListener(i.move,this.onTouchMove,n),e.removeEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",this.onClick,!0),this.off("resize observerUpdate",S)}},z={setBreakpoint:function(){var e=this.activeIndex,t=this.loopedSlides;void 0===t&&(t=0);var i=this.params,s=i.breakpoints;if(s&&(!s||0!==Object.keys(s).length)){var a=this.getBreakpoint(s);if(a&&this.currentBreakpoint!==a){var r=a in s?s[a]:this.originalParams,n=i.loop&&r.slidesPerView!==i.slidesPerView;d.extend(this.params,r),d.extend(this,{allowTouchMove:this.params.allowTouchMove,allowSlideNext:this.params.allowSlideNext,allowSlidePrev:this.params.allowSlidePrev}),this.currentBreakpoint=a,n&&(this.loopDestroy(),this.loopCreate(),this.updateSlides(),this.slideTo(e-t+this.loopedSlides,0,!1)),this.emit("breakpoint",r)}}},getBreakpoint:function(e){if(e){var i=!1,s=[];Object.keys(e).forEach(function(e){s.push(e)}),s.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var a=0;a<s.length;a+=1){var r=s[a];r>=t.innerWidth&&!i&&(i=r)}return i||"max"}}},P=function(){return{isIE:!!t.navigator.userAgent.match(/Trident/g)||!!t.navigator.userAgent.match(/MSIE/g),isSafari:(e=t.navigator.userAgent.toLowerCase(),e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(t.navigator.userAgent)};var e}();var k={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,preventIntercationOnTransition:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},$={update:u,translate:v,transition:f,slide:m,loop:g,grabCursor:b,manipulation:w,events:M,breakpoints:z,checkOverflow:{checkOverflow:function(){var e=this.isLocked;this.isLocked=1===this.snapGrid.length,this.allowTouchMove=!this.isLocked,e&&e!==this.isLocked&&(this.isEnd=!1,this.navigation.update())}},classes:{addClasses:function(){var e=this.classNames,t=this.params,i=this.rtl,s=this.$el,a=[];a.push(t.direction),t.freeMode&&a.push("free-mode"),h.flexbox||a.push("no-flexbox"),t.autoHeight&&a.push("autoheight"),i&&a.push("rtl"),t.slidesPerColumn>1&&a.push("multirow"),y.android&&a.push("android"),y.ios&&a.push("ios"),P.isIE&&(h.pointerEvents||h.prefixedPointerEvents)&&a.push("wp8-"+t.direction),a.forEach(function(i){e.push(t.containerModifierClass+i)}),s.addClass(e.join(" "))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(" "))}},images:{loadImage:function(e,i,s,a,r,n){var o;function l(){n&&n()}e.complete&&r?l():i?((o=new t.Image).onload=l,o.onerror=l,a&&(o.sizes=a),s&&(o.srcset=s),i&&(o.src=i)):l()},preloadImages:function(){var e=this;function t(){void 0!==e&&null!==e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(
7128),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var i=0;i<e.imagesToLoad.length;i+=1){var s=e.imagesToLoad[i];e.loadImage(s,s.currentSrc||s.getAttribute("src"),s.srcset||s.getAttribute("srcset"),s.sizes||s.getAttribute("sizes"),!0,t)}}}},L={},I=function(e){function t(){for(var i,a,r,n=[],o=arguments.length;o--;)n[o]=arguments[o];1===n.length&&n[0].constructor&&n[0].constructor===Object?a=n[0]:(i=(r=n)[0],a=r[1]);a||(a={}),a=d.extend({},a),i&&!a.el&&(a.el=i),e.call(this,a),Object.keys($).forEach(function(e){Object.keys($[e]).forEach(function(i){t.prototype[i]||(t.prototype[i]=$[e][i])})});var l=this;void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach(function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if("object"!=typeof s)return;if(!(i in a&&"enabled"in s))return;!0===a[i]&&(a[i]={enabled:!0}),"object"!=typeof a[i]||"enabled"in a[i]||(a[i].enabled=!0),a[i]||(a[i]={enabled:!1})}});var p=d.extend({},k);l.useModulesParams(p),l.params=d.extend({},p,L,a),l.originalParams=d.extend({},l.params),l.passedParams=d.extend({},a),l.$=s;var c=s(l.params.el);if(i=c[0]){if(c.length>1){var u=[];return c.each(function(e,i){var s=d.extend({},a,{el:i});u.push(new t(s))}),u}i.swiper=l,c.data("swiper",l);var v,f,m=c.children("."+l.params.wrapperClass);return d.extend(l,{$el:c,el:i,$wrapperEl:m,wrapperEl:m[0],classNames:[],slides:s(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===l.params.direction},isVertical:function(){return"vertical"===l.params.direction},rtl:"horizontal"===l.params.direction&&("rtl"===i.dir.toLowerCase()||"rtl"===c.css("direction")),wrongRTL:"-webkit-box"===m.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:(v=["touchstart","touchmove","touchend"],f=["mousedown","mousemove","mouseup"],h.pointerEvents?f=["pointerdown","pointermove","pointerup"]:h.prefixedPointerEvents&&(f=["MSPointerDown","MSPointerMove","MSPointerUp"]),l.touchEventsTouch={start:v[0],move:v[1],end:v[2]},l.touchEventsDesktop={start:f[0],move:f[1],end:f[2]},h.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video",lastClickTime:d.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.params.init&&l.init(),l}}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return t.prototype.slidesPerViewDynamic=function(){var e=this.params,t=this.slides,i=this.slidesGrid,s=this.size,a=this.activeIndex,r=1;if(e.centeredSlides){for(var n,o=t[a].swiperSlideSize,l=a+1;l<t.length;l+=1)t[l]&&!n&&(r+=1,(o+=t[l].swiperSlideSize)>s&&(n=!0));for(var d=a-1;d>=0;d-=1)t[d]&&!n&&(r+=1,(o+=t[d].swiperSlideSize)>s&&(n=!0))}else for(var h=a+1;h<t.length;h+=1)i[h]-i[a]<s&&(r+=1);return r},t.prototype.update=function(){var e=this;e&&!e.destroyed&&(e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(t(),e.params.autoHeight&&e.updateAutoHeight()):(("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||t(),e.emit("update"));function t(){var t=e.rtl?-1*e.translate:e.translate,i=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(i),e.updateActiveIndex(),e.updateSlidesClasses()}},t.prototype.init=function(){this.initialized||(this.emit("beforeInit"),this.params.breakpoints&&this.setBreakpoint(),this.addClasses(),this.params.loop&&this.loopCreate(),this.updateSize(),this.updateSlides(),this.params.watchOverflow&&this.checkOverflow(),this.params.grabCursor&&this.setGrabCursor(
7128),this.params.preloadImages&&this.preloadImages(),this.params.loop?this.slideTo(this.params.initialSlide+this.loopedSlides,0,this.params.runCallbacksOnInit):this.slideTo(this.params.initialSlide,0,this.params.runCallbacksOnInit),this.attachEvents(),this.initialized=!0,this.emit("init"))},t.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,s=i.params,a=i.$el,r=i.$wrapperEl,n=i.slides;i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),a.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index").removeAttr("data-swiper-column").removeAttr("data-swiper-row")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(function(e){i.off(e)}),!1!==e&&(i.$el[0].swiper=null,i.$el.data("swiper",null),d.deleteProps(i)),i.destroyed=!0},t.extendDefaults=function(e){d.extend(L,e)},i.extendedDefaults.get=function(){return L},i.defaults.get=function(){return k},i.Class.get=function(){return e},i.$.get=function(){return s},Object.defineProperties(t,i),t}(p),D={name:"device",proto:{device:y},static:{device:y}},O={name:"support",proto:{support:h},static:{support:h}},A={name:"browser",proto:{browser:P},static:{browser:P}},H={name:"resize",create:function(){var e=this;d.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){t.addEventListener("resize",this.resize.resizeHandler),t.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy:function(){t.removeEventListener("resize",this.resize.resizeHandler),t.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}},N={func:t.MutationObserver||t.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var i=this,s=new(0,N.func)(function(e){e.forEach(function(e){i.emit("observerUpdate",e)})});s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(s)},init:function(){if(h.observer&&this.params.observer){if(this.params.observeParents)for(var e=this.$el.parents(),t=0;t<e.length;t+=1)this.observer.attach(e[t]);this.observer.attach(this.$el[0],{childList:!1}),this.observer.attach(this.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach(function(e){e.disconnect()}),this.observer.observers=[]}},X={name:"observer",params:{observer:!1,observeParents:!1},create:function(){d.extend(this,{observer:{init:N.init.bind(this),attach:N.attach.bind(this),destroy:N.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},Y={update:function(e){var t=this,i=t.params,s=i.slidesPerView,a=i.slidesPerGroup,r=i.centeredSlides,n=t.virtual,o=n.from,l=n.to,h=n.slides,p=n.slidesGrid,c=n.renderSlide,u=n.offset;t.updateActiveIndex();var v,f,m,g=t.activeIndex||0;v=t.rtl&&t.isHorizontal()?"right":t.isHorizontal()?"left":"top",r?(f=Math.floor(s/2)+a,m=Math.floor(s/2)+a):(f=s+(a-1),m=a);var b=Math.max((g||0)-m,0),w=Math.min((g||0)+f,h.length-1),y=(t.slidesGrid[b]||0)-(t.slidesGrid[0]||0);function x(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(d.extend(t.virtual,{from:b,to:w,offset:y,slidesGrid:t.slidesGrid}),o===b&&l===w&&!e)return t.slidesGrid!==p&&y!==u&&t.slides.css(v,y+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:y,from:b,to:w,slides:function(){for(var e=[],t=b;t<=w;t+=1)e.push(h[t]);return e}()}),void x();var E=[],T=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var S=o;S<=l;S+=1)(S<b||S>w)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+S+'"]').remove();for(var C=0;C<h.length;C+=1)C>=b&&C<=w&&(void 0===l||e?T.push(C):(C>l&&T.push(C),C<o&&E.push(C)));T.forEach(function(e){t.$wrapperEl.append(c(h[e],e))}),E.sort(function(e,t){return e<t}
7128).forEach(function(e){t.$wrapperEl.prepend(c(h[e],e))}),t.$wrapperEl.children(".swiper-slide").css(v,y+"px"),x()},renderSlide:function(e,t){var i=this.params.virtual;if(i.cache&&this.virtual.cache[t])return this.virtual.cache[t];var a=i.renderSlide?s(i.renderSlide.call(this,e,t)):s('<div class="'+this.params.slideClass+'" data-swiper-slide-index="'+t+'">'+e+"</div>");return a.attr("data-swiper-slide-index")||a.attr("data-swiper-slide-index",t),i.cache&&(this.virtual.cache[t]=a),a},appendSlide:function(e){this.virtual.slides.push(e),this.virtual.update(!0)},prependSlide:function(e){if(this.virtual.slides.unshift(e),this.params.virtual.cache){var t=this.virtual.cache,i={};Object.keys(t).forEach(function(e){i[e+1]=t[e]}),this.virtual.cache=i}this.virtual.update(!0),this.slideNext(0)}},B={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null}},create:function(){d.extend(this,{virtual:{update:Y.update.bind(this),appendSlide:Y.appendSlide.bind(this),prependSlide:Y.prependSlide.bind(this),renderSlide:Y.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){if(this.params.virtual.enabled){this.classNames.push(this.params.containerModifierClass+"virtual");var e={watchSlidesProgress:!0};d.extend(this.params,e),d.extend(this.originalParams,e),this.virtual.update(
7128)}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},G={handle:function(i){var s=i;s.originalEvent&&(s=s.originalEvent);var a=s.keyCode||s.charCode;if(!this.allowSlideNext&&(this.isHorizontal()&&39===a||this.isVertical()&&40===a))return!1;if(!this.allowSlidePrev&&(this.isHorizontal()&&37===a||this.isVertical()&&38===a))return!1;if(!(s.shiftKey||s.altKey||s.ctrlKey||s.metaKey||e.activeElement&&e.activeElement.nodeName&&("input"===e.activeElement.nodeName.toLowerCase()||"textarea"===e.activeElement.nodeName.toLowerCase()))){if(this.params.keyboard.onlyInViewport&&(37===a||39===a||38===a||40===a)){var r=!1;if(this.$el.parents("."+this.params.slideClass).length>0&&0===this.$el.parents("."+this.params.slideActiveClass).length)return;var n=t.innerWidth,o=t.innerHeight,l=this.$el.offset();this.rtl&&(l.left-=this.$el[0].scrollLeft);for(var d=[[l.left,l.top],[l.left+this.width,l.top],[l.left,l.top+this.height],[l.left+this.width,l.top+this.height]],h=0;h<d.length;h+=1){var p=d[h];p[0]>=0&&p[0]<=n&&p[1]>=0&&p[1]<=o&&(r=!0)}if(!r)return}this.isHorizontal()?(37!==a&&39!==a||(s.preventDefault?s.preventDefault():s.returnValue=!1),(39===a&&!this.rtl||37===a&&this.rtl)&&this.slideNext(),(37===a&&!this.rtl||39===a&&this.rtl)&&this.slidePrev()):(38!==a&&40!==a||(s.preventDefault?s.preventDefault():s.returnValue=!1),40===a&&this.slideNext(),38===a&&this.slidePrev()),this.emit("keyPress",a)}},enable:function(){this.keyboard.enabled||(s(e).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(s(e).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},V={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){d.extend(this,{keyboard:{enabled:!1,enable:G.enable.bind(this),disable:G.disable.bind(this),handle:G.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var R={lastScrollTime:d.now(),event:t.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var t="onwheel"in e;if(!t){var i=e.createElement("div");i.setAttribute("onwheel","return;"),t="function"==typeof i.onwheel}return!t&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature("","")&&(t=e.implementation.hasFeature("Events.wheel","3.0")),t}()?"wheel":"mousewheel",normalize:function(e){var t=0,i=0,s=0,a=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handle:function(e){var i=e,s=this,a=s.params.mousewheel;i.originalEvent&&(i=i.originalEvent);var r=0,n=s.rtl?-1:1,o=R.normalize(i);if(a.forceToAxis)if(s.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;r=o.pixelX*n}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;r=o.pixelY}else r=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*n:-o.pixelY;if(0===r)return!0;if(a.invert&&(r=-r),s.params.freeMode){var l=s.getTranslate()+r*a.sensitivity,h=s.isBeginning,p=s.isEnd;if(l>=s.minTranslate()&&(l=s.minTranslate()),l<=s.maxTranslate()&&(l=s.maxTranslate()),s.setTransition(0),s.setTranslate(l),s.updateProgress(),s.updateActiveIndex(),s.updateSlidesClasses(),(!h&&s.isBeginning||!p&&s.isEnd)&&s.updateSlidesClasses(),s.params.freeModeSticky&&(clearTimeout(s.mousewheel.timeout),s.mousewheel.timeout=d.nextTick(function(){s.slideReset()},300)),s.emit("scroll",i),s.params.autoplay&&s.params.autoplayDisableOnInteraction&&s.stopAutoplay(),l===s.minTranslate()||l===s.maxTranslate())return!0}else{if(d.now()-s.mousewheel.lastScrollTime>60)if(r<0)if(s.isEnd&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slideNext(),s.emit("scroll",i);else if(s.isBeginning&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slidePrev(),s.emit("scroll",i);s.mousewheel.lastScrollTime=(new t.Date).getTime()}return i.preventDefault?i.preventDefault():i.returnValue=!1,!1},enable:function(){if(!R.event)return!1;if(this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.on(R.event,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){if(!R.event)return!1;if(!this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.off(R.event,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},F={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>
71280&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass))}},init:function(){var e,t,i=this,a=i.params.navigation;(a.nextEl||a.prevEl)&&(a.nextEl&&(e=s(a.nextEl),i.params.uniqueNavElements&&"string"==typeof a.nextEl&&e.length>1&&1===i.$el.find(a.nextEl).length&&(e=i.$el.find(a.nextEl))),a.prevEl&&(t=s(a.prevEl),i.params.uniqueNavElements&&"string"==typeof a.prevEl&&t.length>1&&1===i.$el.find(a.prevEl).length&&(t=i.$el.find(a.prevEl))),e&&e.length>0&&e.on("click",function(e){e.preventDefault(),i.isEnd&&!i.params.loop||i.slideNext()}),t&&t.length>0&&t.on("click",function(e){e.preventDefault(),i.isBeginning&&!i.params.loop||i.slidePrev()}),d.extend(i.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off("click"),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off("click"),i.removeClass(this.params.navigation.disabledClass))}},W={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,a=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,r=this.pagination.$el,n=this.params.loop?Math.ceil((a-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>a-1-2*this.loopedSlides&&(i-=a-2*this.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==this.params.paginationType&&(i=n+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,"bullets"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(this.isHorizontal()?"width":"height",this.pagination.bulletSize*(t.dynamicMainBullets+4)+"px"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(i>this.previousIndex&&this.pagination.dynamicBulletIndex<t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex+=1:i<this.previousIndex&&this.pagination.dynamicBulletIndex>0&&(this.pagination.dynamicBulletIndex-=1)),o=i-this.pagination.dynamicBulletIndex,d=((l=o+(t.dynamicMainBullets-1))+o)/2),h.removeClass(t.bulletActiveClass+" "+t.bulletActiveClass+"-next "+t.bulletActiveClass+"-next-next "+t.bulletActiveClass+"-prev "+t.bulletActiveClass+"-prev-prev "+t.bulletActiveClass+"-main"),r.length>1)h.each(function(e,a){var r=s(a),n=r.index();n===i&&r.addClass(t.bulletActiveClass),t.dynamicBullets&&(n>=o&&n<=l&&r.addClass(t.bulletActiveClass+"-main"),n===o&&r.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),n===l&&r.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next"))});else if(h.eq(i).addClass(t.bulletActiveClass),t.dynamicBullets){for(var p=h.eq(o),c=h.eq(l),u=o;u<=l;u+=1)h.eq(u).addClass(t.bulletActiveClass+"-main");p.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),c.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next")}if(t.dynamicBullets){var v=Math.min(h.length,t.dynamicMainBullets+4),f=(this.pagination.bulletSize*v-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,m=e?"right":"left";h.css(this.isHorizontal()?m:"top",f+"px")}}if("fraction"===t.type&&(r.find("."+t.currentClass).text(i+1),r.find("."+t.totalClass).text(n)),"progressbar"===t.type){var g=(i+1)/n,b=g,w=1;this.isHorizontal()||(w=g,b=1),r.find("."+t.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+b+") scaleY("+w+")").transition(this.params.speed)}"custom"===t.type&&t.renderCustom?(r.html(t.renderCustom(this,i+1,n)),this.emit("paginationRender",this,r[0])):this.emit
7128("paginationUpdate",this,r[0]),r[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s="";if("bullets"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r<a;r+=1)e.renderBullet?s+=e.renderBullet.call(this,r,e.bulletClass):s+="<"+e.bulletElement+' class="'+e.bulletClass+'"></'+e.bulletElement+">";i.html(s),this.pagination.bullets=i.find("."+e.bulletClass)}"fraction"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):'<span class="'+e.currentClass+'"></span> / <span class="'+e.totalClass+'"></span>',i.html(s)),"progressbar"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'<span class="'+e.progressbarFillClass+'"></span>',i.html(s)),"custom"!==e.type&&this.emit("paginationRender",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=s(t.el);0!==i.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(i.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),t.clickable&&i.on("click","."+t.bulletClass,function(t){t.preventDefault();var i=s(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)}),d.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}}},q={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtl,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,d=(a-s)*i;t&&this.isHorizontal()?(d=-d)>0?(l=s-d,d=0):-d+s>a&&(l=a+d):d<0?(l=s+d,d=0):d+s>
7128a&&(l=a-d),this.isHorizontal()?(h.transforms3d?r.transform("translate3d("+d+"px, 0, 0)"):r.transform("translateX("+d+"px)"),r[0].style.width=l+"px"):(h.transforms3d?r.transform("translate3d(0px, "+d+"px, 0)"):r.transform("translateY("+d+"px)"),r[0].style.height=l+"px"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout(function(){n[0].style.opacity=0,n.transition(400)},1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width="",t[0].style.height="";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,n=r*(a/this.size);s="auto"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+"px":t[0].style.height=s+"px",i[0].style.display=r>=1?"none":"",this.params.scrollbarHide&&(i[0].style.opacity=0),d.extend(e,{trackSize:a,divider:r,moveDivider:n,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](this.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,i=this.scrollbar,s=i.$el,a=i.dragSize,r=i.trackSize;t=((this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-s.offset()[this.isHorizontal()?"left":"top"]-a/2)/(r-a),t=Math.max(Math.min(t,1),0),this.rtl&&(t=1-t);var n=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*t;this.updateProgress(n),this.setTranslate(n),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css("opacity",1),this.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=d.nextTick(function(){i.css("opacity",0),i.transition(400)},1e3)),this.emit("scrollbarDragEnd",e),t.snapOnRelease&&this.slideReset())},enableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.addEventListener(i.start,this.scrollbar.onDragStart,n),r.addEventListener(i.move,this.scrollbar.onDragMove,n),r.addEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener("mousedown",this.scrollbar.onDragStart,n),e.addEventListener("mousemove",this.scrollbar.onDragMove,n),e.addEventListener("mouseup",this.scrollbar.onDragEnd,o))):(r.addEventListener(s.start,this.scrollbar.onDragStart,n),e.addEventListener(s.move,this.scrollbar.onDragMove,n),e.addEventListener(s.end,this.scrollbar.onDragEnd,o))}},disableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.removeEventListener(i.start,this.scrollbar.onDragStart,n),r.removeEventListener(i.move,this.scrollbar.onDragMove,n),r.removeEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener("mousedown",this.scrollbar.onDragStart,n),e.removeEventListener("mousemove",this.scrollbar.onDragMove,n),e.removeEventListener("mouseup",this.scrollbar.onDragEnd,o))):(r.removeEventListener(s.start,this.scrollbar.onDragStart,n),e.removeEventListener(s.move,this.scrollbar.onDragMove,n),e.removeEventListener(s.end,this.scrollbar.onDragEnd,o))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,a=s(i.el);this.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===t.find(i.el).length&&(a=t.find(i.el));var r=a.find("."+this.params.scrollbar.dragClass);0===r.length&&(r=s('<div class="'+this.params.scrollbar.dragClass+'"></div>'),a.append(r)),d.extend(e,{$el:a,el:a[0],$dragEl:r,dragEl:r[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},j={setTransform:function(e,t){var i=this.rtl,a=s(e),r=i?-1:1,n=a.attr("data-swiper-parallax")||"0",o=a.attr("data-swiper-parallax-x"),l=a.attr("data-swiper-parallax-y"),d=a.attr("data-swiper-parallax-scale"),h=a.attr("data-swiper-parallax-opacity");if(o||l?(o=o||"0",l=l||"0"):this.isHorizontal()?(o=n,l="0"):(l=n,o="0"),o=o.indexOf("%")>=0?parseInt(o,10)*t*r+"%":o*t*r+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",void 0!==h&&null!==h){var p=h-(h-1)*(1-Math.abs(t));a[0].style.opacity=p}if(void 0===d||null===d)a.transform("translate3d("+o+", "+l+", 0px)");else{var c=d-(d-1)*(1-Math.abs(t));a.transform("translate3d("+o+", "+l+", 0px) scale("+c+")")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,a=e.progress,r=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,a)}),i.each(function(t,i){var n=i.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),s(i).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,n)})})},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){var a=s(i),r=parseInt(a.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),a.transition(r)})}},K={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2))},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,a=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!h.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=K.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=s(e.target).closest(".swiper-slide"),0===a.$slideEl.length&&(a.$slideEl=this.slides.eq(this.activeIndex)),a.$imageEl=a.$slideEl.find("img, svg, canvas"),a.$imageWrapEl=a.$imageEl.parent("."+t.containerClass),a.maxRatio=a.$imageWrapEl.attr("data-swiper-zoom")||t.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl.transition(0),this.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=K.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(h.gestures?this.zoom.scale=e.scale*i.currentScale:i.scale=s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scale<t.minRatio&&(i.scale=t.minRatio+1-Math.pow(t.minRatio-i.scale+1,.5)),s.$imageEl.transform("translate3d(0,
71280,0) scale("+i.scale+")"))},onGestureEnd:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if(!i.fakeGestureTouched||!i.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!y.android)return;i.fakeGestureTouched=!1,i.fakeGestureMoved=!1}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=Math.max(Math.min(i.scale,s.maxRatio),t.minRatio),s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale("+i.scale+")"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(s.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,i=t.gesture,s=t.image;i.$imageEl&&0!==i.$imageEl.length&&(s.isTouched||(y.android&&e.preventDefault(),s.isTouched=!0,s.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this.zoom,i=t.gesture,s=t.image,a=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(this.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=d.getTranslate(i.$imageWrapEl[0],"x")||0,s.startY=d.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),this.rtl&&(s.startX=-s.startX),this.rtl&&(s.startY=-s.startY));var r=s.width*t.scale,n=s.height*t.scale;if(!(r<i.slideWidth&&n<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-r/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-n/2,0),s.maxY=-s.minY,s.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!t.isScaling){if(this.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform("translate3d("+i.currentX+"px, "+i.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,
71280,0)"),t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0,e.scale=1,e.currentScale=1)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,a,r,n,o,l,d,h,p,c,u,v,f,m,g,b=this.zoom,w=this.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,i="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,i=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(m=y.$slideEl[0].offsetWidth,g=y.$slideEl[0].offsetHeight,a=y.$slideEl.offset().left+m/2-t,r=y.$slideEl.offset().top+g/2-i,l=y.$imageEl[0].offsetWidth,d=y.$imageEl[0].offsetHeight,h=l*b.scale,p=d*b.scale,v=-(c=Math.min(m/2-h/2,0)),f=-(u=Math.min(g/2-p/2,0)),n=a*b.scale,o=r*b.scale,n<c&&(n=c),n>v&&(n=v),o<u&&(o=u),o>f&&(o=f)):(n=0,o=0),y.$imageWrapEl.transition(300).transform("translate3d("+n+"px, "+o+"px,0)"),y.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+b.scale+")"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(i.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas"),i.$imageWrapEl=i.$imageEl.parent("."+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.on("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.off("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}}},U={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var r=i.virtual&&i.params.virtual.enabled?i.$wrapperEl.children("."+i.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):i.slides.eq(e),n=r.find("."+a.elementClass+":not(."+a.loadedClass+"):not(."+a.loadingClass+")");!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||(n=n.add(r[0])),0!==n.length&&n.each(function(e,n){var o=s(n);o.addClass(a.loadingClass);var l=o.attr("data-background"),d=o.attr("data-src"),h=o.attr("data-srcset"),p=o.attr("data-sizes");i.loadImage(o[0],d||l,h,p,!1,function(){if(void 0!==i&&null!==i&&i&&(!i||i.params)&&!i.destroyed){
7128if(l?(o.css("background-image",'url("'+l+'")'),o.removeAttr("data-background")):(h&&(o.attr("srcset",h),o.removeAttr("data-srcset")),p&&(o.attr("sizes",p),o.removeAttr("data-sizes")),d&&(o.attr("src",d),o.removeAttr("data-src"))),o.addClass(a.loadedClass).removeClass(a.loadingClass),r.find("."+a.preloaderClass).remove(),i.params.loop&&t){var e=r.attr("data-swiper-slide-index");if(r.hasClass(i.params.slideDuplicateClass)){var s=i.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+i.params.slideDuplicateClass+")");i.lazy.loadInSlide(s.index(),!1)}else{var n=i.$wrapperEl.children("."+i.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');i.lazy.loadInSlide(n.index(),!1)}}i.emit("lazyImageReady",r[0],o[0])}}),i.emit("lazyImageLoad",r[0],o[0])})}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides,r=e.activeIndex,n=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(n){if(t.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(a[e])return!0;return!1}function h(e){return n?s(e).attr("data-swiper-slide-index"):s(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+i.slideVisibleClass).each(function(t,i){var a=n?s(i).attr("data-swiper-slide-index"):s(i).index();e.lazy.loadInSlide(a)});else if(l>1)for(var p=r;p<r+l;p+=1)d(p)&&e.lazy.loadInSlide(p);else e.lazy.loadInSlide(r);if(o.loadPrevNext)if(l>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(r+u+Math.max(c,u),a.length),f=Math.max(r-Math.max(u,c),0),m=r+l;m<v;m+=1)d(m)&&e.lazy.loadInSlide(m);for(var g=f;g<r;g+=1)d(g)&&e.lazy.loadInSlide(g)}else{var b=t.children("."+i.slideNextClass);b.length>0&&e.lazy.loadInSlide(h(b));var w=t.children("."+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},_={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new _.LinearSpline(this.slidesGrid,e.slidesGrid):new _.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=e.rtl&&"horizontal"===e.params.direction?-a.translate:a.translate;"slide"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&"container"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof I&&n(r[o]);else r instanceof I&&t!==r&&n(r)},setTransition:function(e,t){var i,s=this,a=s.controller.control;function r(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.$wrapperEl.transitionEnd(function(){a&&(t.params.loop&&"slide"===s.params.controller.by&&t.loopFix(),t.transitionEnd())}))}if(Array.isArray(a))for(i=0;i<a.length;i+=1)a[i]!==t&&a[i]instanceof I&&r(a[i]);else a instanceof I&&t!==a&&r(a)}},Z={makeElFocusable:function(e){return e.attr("tabIndex","0"),e},addElRole:function(e,t){return e.attr("role",t),e},addElLabel:function(e,t){return e.attr("aria-label",t),e},disableEl:function(e){return e.attr("aria-disabled",!0),e},enableEl:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(e){var t=this.params.a11y;if(13===e.keyCode){var i=s(e.target);this.navigation&&this.navigation.$nextEl&&i.is(this.navigation.$nextEl)&&(this.isEnd&&!this.params.loop||this.slideNext(),this.isEnd?this.a11y.notify(t.lastSlideMessage):this.a11y.notify(t.nextSlideMessage)),this.navigation&&this.navigation.$prevEl&&i.is(this.navigation.$prevEl)&&(this.isBeg
7128inning&&!this.params.loop||this.slidePrev(),this.isBeginning?this.a11y.notify(t.firstSlideMessage):this.a11y.notify(t.prevSlideMessage)),this.pagination&&i.is("."+this.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation:function(){if(!this.params.loop){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;i&&i.length>0&&(this.isBeginning?this.a11y.disableEl(i):this.a11y.enableEl(i)),t&&t.length>0&&(this.isEnd?this.a11y.disableEl(t):this.a11y.enableEl(t))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each(function(i,a){var r=s(a);e.a11y.makeElFocusable(r),e.a11y.addElRole(r,"button"),e.a11y.addElLabel(r,t.paginationBulletMessage.replace(/{{index}}/,r.index()+1))})},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,"button"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on("keydown",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,"button"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on("keydown",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off("keydown",this.a11y.onEnterKey),t&&t.off("keydown",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},Q={init:function(){if(this.params.history){if(!t.history||!t.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=Q.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||t.addEventListener("popstate",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||t.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=Q.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=t.location.pathname.slice(1).split("/").filter(function(e){return""!==e}),i=e.length;return{key:e[i-2],value:e[i-1]}},setHistory:function(e,i){if(this.history.initialized&&this.params.history.enabled){var s=this.slides.eq(i),a=Q.slugify(s.attr("data-history"));t.location.pathname.includes(e)||(a=e+"/"+a);var r=t.history.state;r&&r.value===a||(this.params.history.replaceState?t.history.replaceState({value:a},null,a):t.history.pushState({value:a},null,a))}},slugify:function(e){return e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s<a;s+=1){var r=this.slides.eq(s);if(Q.slugify(r.attr("data-history"))===t&&!r.hasClass(this.params.slideDuplicateClass)){var n=r.index();this.slideTo(n,e,i)}}else this.slideTo(0,e,i)}},J={onHashCange:function(){var t=e.location.hash.replace("#","");t!==this.slides.eq(this.activeIndex).attr("data-hash")&&this.slideTo(this.$wrapperEl.children("."+this.params.slideClass+'[data-hash="'+t+'"]').index())},setHash:function(){if(this.hashNavigation.initialized&&this.params.hashNavigation.enabled)if(this.params.hashNavigation.replaceState&&t.history&&t.history.replaceState)t.history.replaceState(null,null,"#"+this.slides.eq(this.activeIndex).attr("data-hash")||"");else{var i=this.slides.eq(this.activeIndex),s=i.attr("data-hash")||i.attr("data-history");e.location.hash=s||""}},init:function(){if(!(!this.params.hashNavigation.enabled||this.params.history&&this.params.history.enabled)){this.hashNavigation.initialized=!0;var i=e.location.hash.replace("#","");if(i)for(var a=0,r=this.slides.length;a<r;a+=1){var n=this.slides.eq(a);if((n.attr("data-hash")||n.attr("data-history"))===i&&!n.hasClass(this.params.slideDuplicateClass)){var o=n.index();this.slideTo(o,0,this.params.runCallbacksOnInit,!0)}}this.params.hashNavigation.watchState&&s(t).on("hashchange",this.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&s(t).off("hashchange",this.hashNavigation.onHashCange)}},ee={run:function(){var e=this,t=e.slides.eq(e.activeIndex),i=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(i=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),e.autoplay.timeout=
7128d.nextTick(function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay"))},i)},start:function(){return void 0===this.autoplay.timeout&&(!this.autoplay.running&&(this.autoplay.running=!0,this.emit("autoplayStart"),this.autoplay.run(),!0))},stop:function(){return!!this.autoplay.running&&(void 0!==this.autoplay.timeout&&(this.autoplay.timeout&&(clearTimeout(this.autoplay.timeout),this.autoplay.timeout=void 0),this.autoplay.running=!1,this.emit("autoplayStop"),!0))},pause:function(e){var t=this;t.autoplay.running&&(t.autoplay.paused||(t.auto
vendor: 14,423 bytes, line 7128
7128play.timeout&&clearTimeout(t.autoplay.timeout),t.autoplay.paused=!0,0!==e&&t.params.autoplay.waitForTransition?t.$wrapperEl.transitionEnd(function(){t&&!t.destroyed&&(t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}):(t.autoplay.paused=!1,t.autoplay.run())))}},te={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=this.slides.eq(t),s=-i[0].swiperSlideOffset;this.params.virtualTranslate||(s-=this.translate);var a=0;this.isHorizontal()||(a=s,s=0);var r=this.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:r}).transform("translate3d("+s+"px, "+a+"px, 0px)")}},setTransition:function(e){var t=this,i=t.slides,s=t.$wrapperEl;if(i.transition(e),t.params.virtualTranslate&&0!==e){var a=!1;i.transitionEnd(function(){if(!a&&t&&!t.destroyed){a=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)s.trigger(e[i])}})}}},ie={setTranslate:function(){var e,t=this.$el,i=this.$wrapperEl,a=this.slides,r=this.width,n=this.height,o=this.rtl,l=this.size,d=this.params.cubeEffect,h=this.isHorizontal(),p=this.virtual&&this.params.virtual.enabled,c=0;d.shadow&&(h?(0===(e=i.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),i.append(e)),e.css({height:r+"px"})):0===(e=t.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),t.append(e)));for(var u=0;u<a.length;u+=1){var v=a.eq(u),f=u;p&&(f=parseInt(v.attr("data-swiper-slide-index"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),h||(y=w,w=0);var E="rotateX("+(h?0:-m)+"deg) rotateY("+(h?m:0)+"deg) translate3d("+w+"px, "+y+"px, "+x+"px)";if(b<=1&&b>-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(E),d.slideShadows){var T=h?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),S=h?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===T.length&&(T=s('<div class="swiper-slide-shadow-'+(h?"left":"top")+'"></div>'),v.append(T)),0===S.length&&(S=s('<div class="swiper-slide-shadow-'+(h?"right":"bottom")+'"></div>'),v.append(S)),T.length&&(T[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(h)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(c)-90*Math.floor(Math.abs(c)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),z=d.shadowScale,k=d.shadowScale/M,$=d.shadowOffset;e.transform("scale3d("+z+", 1, "+k+") translate3d(0px, "+(n/2+$)+"px, "+-n/2/k+"px) rotateX(-90deg)")}var L=P.isSafari||P.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+L+"px) rotateX("+(this.isHorizontal()?0:c)+"deg) rotateY("+(this.isHorizontal()?-c:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},se={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=e.eq(t),a=i[0].progress;this.params.flipEffect.limitRotation&&(a=Math.max(Math.min(i[0].progress,1),-1));var r=-180*a,n=0,o=-i[0].swiperSlideOffset,l=0;if(this.isHorizontal()?this.rtl&&(r=-r):(l=o,o=0,n=-r,r=0),i[0].style.zIndex=-Math.abs(Math.round(a))+e.length,this.params.flipEffect.slideShadows){var d=this.isHorizontal()?i.find(".swiper-slide-shadow-left"):i.find(".swiper-slide-shadow-top"),h=this.isHorizontal()?i.find(".swiper-slide-shadow-right"):i.find(".swiper-slide-shadow-bottom");0===d.length&&(d=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"left":"top")+'"></div>'),i.append(d)),0===h.length&&(h=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"right":"bottom")+'"></div>'),i.append(h)),d.length&&(d[0].style.opacity=Math.max(-a,0)),h.length&&(h[0].style.opacity=Math.max(a,0))}i.transform("translate3d("+o+"px, "+l+"px, 0px) rotateX("+n+"deg) rotateY("+r+"deg)")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd(function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)a.trigger(e[i])}})}}},ae={setTranslate:function(){for(var e=this.width,t=this.height,i=this.slides,a=this.$wrapperEl,r=this.slidesSizesGrid,n=this.params.coverflowEffect,o=this.isHorizontal(),l=this.translate,d=o?e/2-l:t/2-l,p=o?n.rotate:-n.rotate,c=n.depth,u=0,v=i.length;u<v;u+=1){var f=i.eq(u),m=r[u],g=(d-f[0].swiperSlideOffset-m/2)/m*n.modifier,b=o?p*g:0,w=o?0:p*g,y=-c*Math.abs(g),x=o?0:n.stretch*g,E=o?n.stretch*g:0;Math.abs(E)<.001&&(E=0),Math.abs(x)<.001&&(x=0),Math.abs(y)<.001&&(y=0),Math.abs(b)<.001&&(b=0),Math.abs(w)<.001&&(w=0);var T="translate3d("+E+"px,"+x+"px,"+y+"px)  rotateX("+w+"deg) rotateY("+b+"deg)";if(f.transform(T),f[0].style.zIndex=1-Math.abs(Math.round(g)),n.slideShadows){var S=o?f.find(".swiper-slide-shadow-left"):f.find(".swiper-slide-shadow-top"),C=o?f.find(".swiper-slide-shadow-right"):f.find(".swiper-slide-shadow-bottom");0===S.length&&(S=s('<div class="swiper-slide-shadow-'+(o?"left":"top")+'"></div>'),f.append(S)),0===C.length&&(C=s('<div class="swiper-slide-shadow-'+(o?"right":"bottom")+'"></div>'),f.append(C)),S.length&&(S[0].style.opacity=g>0?g:0),C.length&&(C[0].style.opacity=-g>0?-g:0)}}(h.pointerEvents||h.prefixedPointerEvents)&&(a[0].style.perspectiveOrigin=d+"px 50%")},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},re=[D,O,A,H,X,B,V,{name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){d.extend(this,{mousewheel:{enabled:!1,enable:R.enable.bind(this),disable:R.disable.bind(this),handle:R.handle.bind(this),lastScrollTime:d.now()}})},on:{init:function(){this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){d.extend(this,{navigation:{init:F.init.bind(this),update:F.update.bind(this),destroy:F.destroy.bind(this)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t=this.navigation,i=t.$nextEl,a=t.$prevEl;!this.params.navigation.hideOnClick||s(e.target).is(a)||s(e.target).is(i)||(i&&i.toggleClass(this.params.navigation.hiddenClass),a&&a.toggleClass(this.params.navigation.hiddenClass))}}},{name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){d.extend(this,{pagination:{init:W.init.bind(this),render:W.render.bind(this),update:W.update.bind(this),destroy:W.destroy.bind(this),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){this.params.loop?this.pagination.update():void 0===this.snapIndex&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){this.params.pagination.el&&this.params.pagination.hideOnClick&&this.pagination.$el.length>0&&!s(e.target).hasClass(this.params.pagination.bulletClass)&&this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){d.extend(this,{scrollbar:{init:q.init.bind(this),destroy:q.destroy.bind(this),updateSize:q.updateSize.bind(this),setTranslate:q.setTranslate.bind(this),setTransition:q.setTransition.bind(this),enableDraggable:q.enableDraggable.bind(this),disableDraggable:q.disableDraggable.bind(this),setDragPosition:q.setDragPosition.bind(this),onDragStart:q.onDragStart.bind(this),onDragMove:q.onDragMove.bind(this),onDragEnd:q.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){d.extend(this,{parallax:{setTransform:j.setTransform.bind(this),setTranslate:j.setTranslate.bind(this),setTransition:j.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0)},init:function(){this.params.parallax&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(i){t[i]=K[i].bind(e)}),d.extend(e,{zoom:t})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){d.extend(this,{lazy:{initialImageLoaded:!1,load:U.load.bind(this),loadInSlide:U.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){d.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:_.getInterpolateFunction.bind(this),setTranslate:_.setTranslate.bind(this),setTransition:_.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:"a11y",params:{a11y:{enabled:!1,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var e=this;d.extend(e,{a11y:{liveRegion:s('<span class="'+e.params.a11y.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>')}}
7128),Object.keys(Z).forEach(function(t){e.a11y[t]=Z[t].bind(e)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){d.extend(this,{history:{init:Q.init.bind(this),setHistory:Q.setHistory.bind(this),setHistoryPopState:Q.setHistoryPopState.bind(this),scrollToSlide:Q.scrollToSlide.bind(this),destroy:Q.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){d.extend(this,{hashNavigation:{initialized:!1,init:J.init.bind(this),destroy:J.destroy.bind(this),setHash:J.setHash.bind(this),onHashCange:J.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){d.extend(this,{autoplay:{running:!1,paused:!1,run:ee.run.bind(this),start:ee.start.bind(this),stop:ee.stop.bind(this),pause:ee.pause.bind(this)}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){d.extend(this,{fadeEffect:{setTranslate:te.setTranslate.bind(this),setTransition:te.setTransition.bind(this)}})},on:{beforeInit:function(){if("fade"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"fade");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){d.extend(this,{cubeEffect:{setTranslate:ie.setTranslate.bind(this),setTransition:ie.setTransition.bind(this)}})},on:{beforeInit:function(){if("cube"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){d.extend(this,{flipEffect:{setTranslate:se.setTranslate.bind(this),setTransition:se.setTransition.bind(this)}})},on:{beforeInit:function(){if("flip"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){d.extend(this,{coverflowEffect:{setTranslate:ae.setTranslate.bind(this),setTransition:ae.setTransition.bind(this)}})},on:{beforeInit:function(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}}];return void 0===I.use&&(I.use=I.Class.use,I.installModule=I.Class.installModule),I.use(re),I});/*!
7129	Zoom 1.7.14
7130	license: MIT
7131	http://www.jacklmoore.com/zoom
7132*/
7133(function ($) {
7134	var defaults = {
7135		url: false,
7136		callback: false,
7137		target: false,
7138		duration: 120,
7139		on: 'mouseover', // other options: grab, click, toggle
7140		touch: true, // enables a touch fallback
7141		onZoomIn: false,
7142		onZoomOut: false,
7143		magnify: 1
7144	};
7145
7146	// Core Zoom Logic, independent of event listeners.
7147	$.zoom = function(target, source, img, magnify) {
7148		var targetHeight,
7149			targetWidth,
7150			sourceHeight,
7151			sourceWidth,
7152			xRatio,
7153			yRatio,
7154			offset,
7155			$target = $(target),
7156			position = $target.css('position'),
7157			$source = $(source);
7158
7159		// The parent element needs positioning so that the zoomed element can be correctly positioned within.
7160		$target.css('position', /(absolute|fixed)/.test(position) ? position : 'relative');
7161		$target.css('overflow', 'hidden');
7162
7163		img.style.width = img.style.height = '';
7164
7165		$(img)
7166			.addClass('zoomImg')
7167			.css({
7168				position: 'absolute',
7169				top: 0,
7170				left: 0,
7171				opacity: 0,
7172				width: img.width * magnify,
7173				height: img.height * magnify,
7174				border: 'none',
7175				maxWidth: 'none',
7176				maxHeight: 'none'
7177			})
7178			.appendTo(target);
7179
7180		return {
7181			init: function() {
7182				targetWidth = $target.outerWidth();
7183				targetHeight = $target.outerHeight();
7184
7185				if (source === $target[0]) {
7186					sourceWidth = targetWidth;
7187					sourceHeight = targetHeight;
7188				} else {
7189					sourceWidth = $source.outerWidth();
7190					sourceHeight = $source.outerHeight();
7191				}
7192
7193				xRatio = (img.width - targetWidth) / sourceWidth;
7194				yRatio = (img.height - targetHeight) / sourceHeight;
7195
7196				offset = $source.offset();
7197			},
7198			move: function (e) {
7199				var left = (e.pageX - offset.left),
7200					top = (e.pageY - offset.top);
7201
7202				top = Math.max(Math.min(top, sourceHeight), 0);
7203				left = Math.max(Math.min(left, sourceWidth), 0);
7204
7205				img.style.left = (left * -xRatio) + 'px';
7206				img.style.top = (top * -yRatio) + 'px';
7207			}
7208		};
7209	};
7210
7211	$.fn.zoom = function (options) {
7212		return this.each(function () {
7213			var
7214			settings = $.extend({}, defaults, options || {}),
7215			//target will display the zoomed image
7216			target = settings.target || this,
7217			//source will provide zoom location info (thumbnail)
7218			source = this,
7219			$source = $(source),
7220			$target = $(target),
7221			img = document.createElement('img'),
7222			$img = $(img),
7223			mousemove = 'mousemove.zoom',
7224			clicked = false,
7225			touched = false,
7226			$urlElement;
7227
7228			// If a url wasn't specified, look for an image element.
7229			if (!settings.url) {
7230				$urlElement = $source.find('img');
7231				if ($urlElement[0]) {
7232					settings.url = $urlElement.data('src') || $urlElement.attr('src');
7233				}
7234				if (!settings.url) {
7235					return;
7236				}
7237			}
7238
7239			(function(){
7240				var position = $target.css('position');
7241				var overflow = $target.css('overflow');
7242
7243				$source.one('zoom.destroy', function(){
7244					$source.off(".zoom");
7245					$target.css('position', position);
7246					$target.css('overflow', overflow);
7247					$img.remove();
7248				});
7249				
7250			}());
7251
7252			img.onload = function () {
7253				var zoom = $.zoom(target, source, img, settings.magnify);
7254
7255				function start(e) {
7256					zoom.init();
7257					zoom.move(e);
7258
7259					// Skip the fade-in for IE8 and lower since it chokes on fading-in
7260					// and changing position based on mousemovement at the same time.
7261					$img.stop()
7262					.fadeTo($.support.opacity ? settings.duration : 0, 1, $.isFunction(settings.onZoomIn) ? settings.onZoomIn.call(img) : false);
7263				}
7264
7265				function stop() {
7266					$img.stop()
7267					.fadeTo(settings.duration, 0, $.isFunction(settings.onZoomOut) ? settings.onZoomOut.call(img) : false);
7268				}
7269
7270				// Mouse events
7271				if (settings.on === 'grab') {
7272					$source
7273						.on('mousedown.zoom',
7274							function (e) {
7275								if (e.which === 1) {
7276									$(document).one('mouseup.zoom',
7277										function () {
7278											stop();
7279
7280											$(document).off(mousemove, zoom.move);
7281										}
7282									);
7283
7284									start(e);
7285
7286									$(document).on(mousemove, zoom.move);
7287
7288									e.preventDefault();
7289								}
7290							}
7291						);
7292				} else if (settings.on === 'click') {
7293					$source.on('click.zoom',
7294						function (e) {
7295							if (clicked) {
7296								// bubble the event up to the document to trigger the unbind.
7297								return;
7298							} else {
7299								clicked = true;
7300								start(e);
7301								$(document).on(mousemove, zoom.move);
7302								$(document).one('click.zoom',
7303									function () {
7304										stop();
7305										clicked = false;
vendor: 6,995 bytes, lines 7306-7573
7306										$(document).off(mousemove, zoom.move);
7307									}
7308								);
7309								return false;
7310							}
7311						}
7312					);
7313				} else if (settings.on === 'toggle') {
7314					$source.on('click.zoom',
7315						function (e) {
7316							if (clicked) {
7317								stop();
7318							} else {
7319								start(e);
7320							}
7321							clicked = !clicked;
7322						}
7323					);
7324				} else if (settings.on === 'mouseover') {
7325					zoom.init(); // Preemptively call init because IE7 will fire the mousemove handler before the hover handler.
7326
7327					$source
7328						.on('mouseenter.zoom', start)
7329						.on('mouseleave.zoom', stop)
7330						.on(mousemove, zoom.move);
7331				}
7332
7333				// Touch fallback
7334				if (settings.touch) {
7335					$source
7336						.on('touchstart.zoom', function (e) {
7337							e.preventDefault();
7338							if (touched) {
7339								touched = false;
7340								stop();
7341							} else {
7342								touched = true;
7343								start( e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] );
7344							}
7345						})
7346						.on('touchmove.zoom', function (e) {
7347							e.preventDefault();
7348							zoom.move( e.originalEvent.touches[0] || e.originalEvent.changedTouches[0] );
7349						});
7350				}
7351				
7352				if ($.isFunction(settings.callback)) {
7353					settings.callback.call(img);
7354				}
7355			};
7356
7357			img.src = settings.url;
7358		});
7359	};
7360
7361	$.fn.zoom.defaults = defaults;
7362}(window.jQuery));
7363/*!
7364 * fancyBox - jQuery Plugin
7365 * version: 2.1.4 (Thu, 10 Jan 2013)
7366 * @requires jQuery v1.6 or later
7367 *
7368 * Examples at http://fancyapps.com/fancybox/
7369 * License: www.fancyapps.com/fancybox/#license
7370 *
7371 * Copyright 2012 Janis Skarnelis - [email protected]
7372 *
7373 */
7374
7375(function (window, document, $, undefined) {
7376	"use strict";
7377
7378	var W = $(window),
7379		D = $(document),
7380		F = $.fancybox = function () {
7381			F.open.apply( this, arguments );
7382		},
7383		IE =  navigator.userAgent.match(/msie/),
7384		didUpdate = null,
7385		isTouch	  = document.createTouch !== undefined,
7386
7387		isQuery	= function(obj) {
7388			return obj && obj.hasOwnProperty && obj instanceof $;
7389		},
7390		isString = function(str) {
7391			return str && $.type(str) === "string";
7392		},
7393		isPercentage = function(str) {
7394			return isString(str) && str.indexOf('%') > 0;
7395		},
7396		isScrollable = function(el) {
7397			return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));
7398		},
7399		getScalar = function(orig, dim) {
7400			var value = parseInt(orig, 10) || 0;
7401
7402			if (dim && isPercentage(orig)) {
7403				value = F.getViewport()[ dim ] / 100 * value;
7404			}
7405
7406			return Math.ceil(value);
7407		},
7408		getValue = function(value, dim) {
7409			return getScalar(value, dim) + 'px';
7410		};
7411
7412	$.extend(F, {
7413		// The current version of fancyBox
7414		version: '2.1.4',
7415
7416		defaults: {
7417			padding : 15,
7418			margin  : 20,
7419
7420			width     : 800,
7421			height    : 600,
7422			minWidth  : 100,
7423			minHeight : 100,
7424			maxWidth  : 9999,
7425			maxHeight : 9999,
7426
7427			autoSize   : true,
7428			autoHeight : false,
7429			autoWidth  : false,
7430
7431			autoResize  : true,
7432			autoCenter  : !isTouch,
7433			fitToView   : true,
7434			aspectRatio : false,
7435			topRatio    : 0.5,
7436			leftRatio   : 0.5,
7437
7438			scrolling : 'auto', // 'auto', 'yes' or 'no'
7439			wrapCSS   : '',
7440
7441			arrows     : true,
7442			closeBtn   : true,
7443			closeClick : false,
7444			nextClick  : false,
7445			mouseWheel : true,
7446			autoPlay   : false,
7447			playSpeed  : 3000,
7448			preload    : 3,
7449			modal      : false,
7450			loop       : true,
7451
7452			ajax  : {
7453				dataType : 'html',
7454				headers  : { 'X-fancyBox': true }
7455			},
7456			iframe : {
7457				scrolling : 'auto',
7458				preload   : true
7459			},
7460			swf : {
7461				wmode: 'transparent',
7462				allowfullscreen   : 'true',
7463				allowscriptaccess : 'always'
7464			},
7465
7466			keys  : {
7467				next : {
7468					13 : 'left', // enter
7469					34 : 'up',   // page down
7470					39 : 'left', // right arrow
7471					40 : 'up'    // down arrow
7472				},
7473				prev : {
7474					8  : 'right',  // backspace
7475					33 : 'down',   // page up
7476					37 : 'right',  // left arrow
7477					38 : 'down'    // up arrow
7478				},
7479				close  : [27], // escape key
7480				play   : [32], // space - start/stop slideshow
7481				toggle : [70]  // letter "f" - toggle fullscreen
7482			},
7483
7484			direction : {
7485				next : 'left',
7486				prev : 'right'
7487			},
7488
7489			scrollOutside  : true,
7490
7491			// Override some properties
7492			index   : 0,
7493			type    : null,
7494			href    : null,
7495			content : null,
7496			title   : null,
7497
7498			// HTML templates
7499			tpl: {
7500				wrap     : '<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',
7501				image    : '<img class="fancybox-image" src="{href}" alt="" />',
7502				iframe   : '<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" allow="geolocation" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency="true"' : '') + '></iframe>',
7503				error    : '<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
7504				closeBtn : '<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',
7505				next     : '<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',
7506				prev     : '<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'
7507			},
7508
7509			// Properties for each animation type
7510			// Opening fancyBox
7511			openEffect  : 'fade', // 'elastic', 'fade' or 'none'
7512			openSpeed   : 250,
7513			openEasing  : 'swing',
7514			openOpacity : true,
7515			openMethod  : 'zoomIn',
7516
7517			// Closing fancyBox
7518			closeEffect  : 'fade', // 'elastic', 'fade' or 'none'
7519			closeSpeed   : 250,
7520			closeEasing  : 'swing',
7521			closeOpacity : true,
7522			closeMethod  : 'zoomOut',
7523
7524			// Changing next gallery item
7525			nextEffect : 'elastic', // 'elastic', 'fade' or 'none'
7526			nextSpeed  : 250,
7527			nextEasing : 'swing',
7528			nextMethod : 'changeIn',
7529
7530			// Changing previous gallery item
7531			prevEffect : 'elastic', // 'elastic', 'fade' or 'none'
7532			prevSpeed  : 250,
7533			prevEasing : 'swing',
7534			prevMethod : 'changeOut',
7535
7536			// Enable default helpers
7537			helpers : {
7538				overlay : true,
7539				title   : true
7540			},
7541
7542			// Callbacks
7543			onCancel     : $.noop, // If canceling
7544			beforeLoad   : $.noop, // Before loading
7545			afterLoad    : $.noop, // After loading
7546			beforeShow   : $.noop, // Before changing in current item
7547			afterShow    : $.noop, // After opening
7548			beforeChange : $.noop, // Before changing gallery item
7549			beforeClose  : $.noop, // Before closing
7550			afterClose   : $.noop  // After closing
7551		},
7552
7553		//Current state
7554		group    : {}, // Selected group
7555		opts     : {}, // Group options
7556		previous : null,  // Previous element
7557		coming   : null,  // Element being loaded
7558		current  : null,  // Currently loaded element
7559		isActive : false, // Is activated
7560		isOpen   : false, // Is currently open
7561		isOpened : false, // Have been fully opened at least once
7562
7563		wrap  : null,
7564		skin  : null,
7565		outer : null,
7566		inner : null,
7567
7568		player : {
7569			timer    : null,
7570			isActive : false
7571		},
7572
7573		// Loaders
vendor: 34,999 bytes, lines 7574-9051
7574		ajaxLoad   : null,
7575		imgPreload : null,
7576
7577		// Some collections
7578		transitions : {},
7579		helpers     : {},
7580
7581		/*
7582		 *	Static methods
7583		 */
7584
7585		open: function (group, opts) {
7586			if (!group) {
7587				return;
7588			}
7589
7590			if (!$.isPlainObject(opts)) {
7591				opts = {};
7592			}
7593
7594			// Close if already active
7595			if (false === F.close(true)) {
7596				return;
7597			}
7598
7599			// Normalize group
7600			if (!$.isArray(group)) {
7601				group = isQuery(group) ? $(group).get() : [group];
7602			}
7603
7604			// Recheck if the type of each element is `object` and set content type (image, ajax, etc)
7605			$.each(group, function(i, element) {
7606				var obj = {},
7607					href,
7608					title,
7609					content,
7610					type,
7611					rez,
7612					hrefParts,
7613					selector;
7614
7615				if ($.type(element) === "object") {
7616					// Check if is DOM element
7617					if (element.nodeType) {
7618						element = $(element);
7619					}
7620
7621					if (isQuery(element)) {
7622						obj = {
7623							href    : element.data('fancybox-href') || element.attr('href'),
7624							title   : element.data('fancybox-title') || element.attr('title'),
7625							isDom   : true,
7626							element : element
7627						};
7628
7629						if ($.metadata) {
7630							$.extend(true, obj, element.metadata());
7631						}
7632
7633					} else {
7634						obj = element;
7635					}
7636				}
7637
7638				href  = opts.href  || obj.href || (isString(element) ? element : null);
7639				title = opts.title !== undefined ? opts.title : obj.title || '';
7640
7641				content = opts.content || obj.content;
7642				type    = content ? 'html' : (opts.type  || obj.type);
7643
7644				if (!type && obj.isDom) {
7645					type = element.data('fancybox-type');
7646
7647					if (!type) {
7648						rez  = element.prop('class').match(/fancybox\.(\w+)/);
7649						type = rez ? rez[1] : null;
7650					}
7651				}
7652
7653				if (isString(href)) {
7654					// Try to guess the content type
7655					if (!type) {
7656						if (F.isImage(href)) {
7657							type = 'image';
7658
7659						} else if (F.isSWF(href)) {
7660							type = 'swf';
7661
7662						} else if (href.charAt(0) === '#') {
7663							type = 'inline';
7664
7665						} else if (isString(element)) {
7666							type    = 'html';
7667							content = element;
7668						}
7669					}
7670
7671					// Split url into two pieces with source url and content selector, e.g,
7672					// "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
7673					if (type === 'ajax') {
7674						hrefParts = href.split(/\s+/, 2);
7675						href      = hrefParts.shift();
7676						selector  = hrefParts.shift();
7677					}
7678				}
7679
7680				if (!content) {
7681					if (type === 'inline') {
7682						if (href) {
7683							content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
7684
7685						} else if (obj.isDom) {
7686							content = element;
7687						}
7688
7689					} else if (type === 'html') {
7690						content = href;
7691
7692					} else if (!type && !href && obj.isDom) {
7693						type    = 'inline';
7694						content = element;
7695					}
7696				}
7697
7698				$.extend(obj, {
7699					href     : href,
7700					type     : type,
7701					content  : content,
7702					title    : title,
7703					selector : selector
7704				});
7705
7706				group[ i ] = obj;
7707			});
7708
7709			// Extend the defaults
7710			F.opts = $.extend(true, {}, F.defaults, opts);
7711
7712			// All options are merged recursive except keys
7713			if (opts.keys !== undefined) {
7714				F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
7715			}
7716
7717			F.group = group;
7718
7719			return F._start(F.opts.index);
7720		},
7721
7722		// Cancel image loading or abort ajax request
7723		cancel: function () {
7724			var coming = F.coming;
7725
7726			if (!coming || false === F.trigger('onCancel')) {
7727				return;
7728			}
7729
7730			F.hideLoading();
7731
7732			if (F.ajaxLoad) {
7733				F.ajaxLoad.abort();
7734			}
7735
7736			F.ajaxLoad = null;
7737
7738			if (F.imgPreload) {
7739				F.imgPreload.onload = F.imgPreload.onerror = null;
7740			}
7741
7742			if (coming.wrap) {
7743				coming.wrap.stop(true, true).trigger('onReset').remove();
7744			}
7745
7746			F.coming = null;
7747
7748			// If the first item has been canceled, then clear everything
7749			if (!F.current) {
7750				F._afterZoomOut( coming );
7751			}
7752		},
7753
7754		// Start closing animation if is open; remove immediately if opening/closing
7755		close: function (event) {
7756			F.cancel();
7757
7758			if (false === F.trigger('beforeClose')) {
7759				return;
7760			}
7761
7762			F.unbindEvents();
7763
7764			if (!F.isActive) {
7765				return;
7766			}
7767
7768			if (!F.isOpen || event === true) {
7769				$('.fancybox-wrap').stop(true).trigger('onReset').remove();
7770
7771				F._afterZoomOut();
7772
7773			} else {
7774				F.isOpen = F.isOpened = false;
7775				F.isClosing = true;
7776
7777				$('.fancybox-item, .fancybox-nav').remove();
7778
7779				F.wrap.stop(true, true).removeClass('fancybox-opened');
7780
7781				F.transitions[ F.current.closeMethod ]();
7782			}
7783		},
7784
7785		// Manage slideshow:
7786		//   $.fancybox.play(); - toggle slideshow
7787		//   $.fancybox.play( true ); - start
7788		//   $.fancybox.play( false ); - stop
7789		play: function ( action ) {
7790			var clear = function () {
7791					clearTimeout(F.player.timer);
7792				},
7793				set = function () {
7794					clear();
7795
7796					if (F.current && F.player.isActive) {
7797						F.player.timer = setTimeout(F.next, F.current.playSpeed);
7798					}
7799				},
7800				stop = function () {
7801					clear();
7802
7803					$('body').unbind('.player');
7804
7805					F.player.isActive = false;
7806
7807					F.trigger('onPlayEnd');
7808				},
7809				start = function () {
7810					if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
7811						F.player.isActive = true;
7812
7813						$('body').bind({
7814							'afterShow.player onUpdate.player'   : set,
7815							'onCancel.player beforeClose.player' : stop,
7816							'beforeLoad.player' : clear
7817						});
7818
7819						set();
7820
7821						F.trigger('onPlayStart');
7822					}
7823				};
7824
7825			if (action === true || (!F.player.isActive && action !== false)) {
7826				start();
7827			} else {
7828				stop();
7829			}
7830		},
7831
7832		// Navigate to next gallery item
7833		next: function ( direction ) {
7834			var current = F.current;
7835
7836			if (current) {
7837				if (!isString(direction)) {
7838					direction = current.direction.next;
7839				}
7840
7841				F.jumpto(current.index + 1, direction, 'next');
7842			}
7843		},
7844
7845		// Navigate to previous gallery item
7846		prev: function ( direction ) {
7847			var current = F.current;
7848
7849			if (current) {
7850				if (!isString(direction)) {
7851					direction = current.direction.prev;
7852				}
7853
7854				F.jumpto(current.index - 1, direction, 'prev');
7855			}
7856		},
7857
7858		// Navigate to gallery item by index
7859		jumpto: function ( index, direction, router ) {
7860			var current = F.current;
7861
7862			if (!current) {
7863				return;
7864			}
7865
7866			index = getScalar(index);
7867
7868			F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];
7869			F.router    = router || 'jumpto';
7870
7871			if (current.loop) {
7872				if (index < 0) {
7873					index = current.group.length + (index % current.group.length);
7874				}
7875
7876				index = index % current.group.length;
7877			}
7878
7879			if (current.group[ index ] !== undefined) {
7880				F.cancel();
7881
7882				F._start(index);
7883			}
7884		},
7885
7886		// Center inside viewport and toggle position type to fixed or absolute if needed
7887		reposition: function (e, onlyAbsolute) {
7888			var current = F.current,
7889				wrap    = current ? current.wrap : null,
7890				pos;
7891
7892			if (wrap) {
7893				pos = F._getPosition(onlyAbsolute);
7894
7895				if (e && e.type === 'scroll') {
7896					delete pos.position;
7897
7898					wrap.stop(true, true).animate(pos, 200);
7899
7900				} else {
7901					wrap.css(pos);
7902
7903					current.pos = $.extend({}, current.dim, pos);
7904				}
7905			}
7906		},
7907
7908		update: function (e) {
7909			var type = (e && e.type),
7910				anyway = !type || type === 'orientationchange';
7911
7912			if (anyway) {
7913				clearTimeout(didUpdate);
7914
7915				didUpdate = null;
7916			}
7917
7918			if (!F.isOpen || didUpdate) {
7919				return;
7920			}
7921
7922			didUpdate = setTimeout(function() {
7923				var current = F.current;
7924
7925				if (!current || F.isClosing) {
7926					return;
7927				}
7928
7929				F.wrap.removeClass('fancybox-tmp');
7930
7931				if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
7932					F._setDimension();
7933				}
7934
7935				if (!(type === 'scroll' && current.canShrink)) {
7936					F.reposition(e);
7937				}
7938
7939				F.trigger('onUpdate');
7940
7941				didUpdate = null;
7942
7943			}, (anyway && !isTouch ? 0 : 300));
7944		},
7945
7946		// Shrink content to fit inside viewport or restore if resized
7947		toggle: function ( action ) {
7948			if (F.isOpen) {
7949				F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;
7950
7951				// Help browser to restore document dimensions
7952				if (isTouch) {
7953					F.wrap.removeAttr('style').addClass('fancybox-tmp');
7954
7955					F.trigger('onUpdate');
7956				}
7957
7958				F.update();
7959			}
7960		},
7961
7962		hideLoading: function () {
7963			D.unbind('.loading');
7964
7965			$('#fancybox-loading').remove();
7966		},
7967
7968		showLoading: function () {
7969			var el, viewport;
7970
7971			F.hideLoading();
7972
7973			el = $('<div id="fancybox-loading"><div></div></div>').click(F.cancel).appendTo('body');
7974
7975			// If user will press the escape-button, the request will be canceled
7976			D.bind('keydown.loading', function(e) {
7977				if ((e.which || e.keyCode) === 27) {
7978					e.preventDefault();
7979
7980					F.cancel();
7981				}
7982			});
7983
7984			if (!F.defaults.fixed) {
7985				viewport = F.getViewport();
7986
7987				el.css({
7988					position : 'absolute',
7989					top  : (viewport.h * 0.5) + viewport.y,
7990					left : (viewport.w * 0.5) + viewport.x
7991				});
7992			}
7993		},
7994
7995		getViewport: function () {
7996			var locked = (F.current && F.current.locked) || false,
7997				rez    = {
7998					x: W.scrollLeft(),
7999					y: W.scrollTop()
8000				};
8001
8002			if (locked) {
8003				rez.w = locked[0].clientWidth;
8004				rez.h = locked[0].clientHeight;
8005
8006			} else {
8007				// See http://bugs.jquery.com/ticket/6724
8008				rez.w = isTouch && window.innerWidth  ? window.innerWidth  : W.width();
8009				rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();
8010			}
8011
8012			return rez;
8013		},
8014
8015		// Unbind the keyboard / clicking actions
8016		unbindEvents: function () {
8017			if (F.wrap && isQuery(F.wrap)) {
8018				F.wrap.unbind('.fb');
8019			}
8020
8021			D.unbind('.fb');
8022			W.unbind('.fb');
8023		},
8024
8025		bindEvents: function () {
8026			var current = F.current,
8027				keys;
8028
8029			if (!current) {
8030				return;
8031			}
8032
8033			// Changing document height on iOS devices triggers a 'resize' event,
8034			// that can change document height... repeating infinitely
8035			W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);
8036
8037			keys = current.keys;
8038
8039			if (keys) {
8040				D.bind('keydown.fb', function (e) {
8041					var code   = e.which || e.keyCode,
8042						target = e.target || e.srcElement;
8043
8044					// Skip esc key if loading, because showLoading will cancel preloading
8045					if (code === 27 && F.coming) {
8046						return false;
8047					}
8048
8049					// Ignore key combinations and key events within form elements
8050					if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
8051						$.each(keys, function(i, val) {
8052							if (current.group.length > 1 && val[ code ] !== undefined) {
8053								F[ i ]( val[ code ] );
8054
8055								e.preventDefault();
8056								return false;
8057							}
8058
8059							if ($.inArray(code, val) > -1) {
8060								F[ i ] ();
8061
8062								e.preventDefault();
8063								return false;
8064							}
8065						});
8066					}
8067				});
8068			}
8069
8070			if ($.fn.mousewheel && current.mouseWheel) {
8071				F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {
8072					var target = e.target || null,
8073						parent = $(target),
8074						canScroll = false;
8075
8076					while (parent.length) {
8077						if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
8078							break;
8079						}
8080
8081						canScroll = isScrollable( parent[0] );
8082						parent    = $(parent).parent();
8083					}
8084
8085					if (delta !== 0 && !canScroll) {
8086						if (F.group.length > 1 && !current.canShrink) {
8087							if (deltaY > 0 || deltaX > 0) {
8088								F.prev( deltaY > 0 ? 'down' : 'left' );
8089
8090							} else if (deltaY < 0 || deltaX < 0) {
8091								F.next( deltaY < 0 ? 'up' : 'right' );
8092							}
8093
8094							e.preventDefault();
8095						}
8096					}
8097				});
8098			}
8099		},
8100
8101		trigger: function (event, o) {
8102			var ret, obj = o || F.coming || F.current;
8103
8104			if (!obj) {
8105				return;
8106			}
8107
8108			if ($.isFunction( obj[event] )) {
8109				ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
8110			}
8111
8112			if (ret === false) {
8113				return false;
8114			}
8115
8116			if (obj.helpers) {
8117				$.each(obj.helpers, function (helper, opts) {
8118					if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
8119						opts = $.extend(true, {}, F.helpers[helper].defaults, opts);
8120
8121						F.helpers[helper][event](opts, obj);
8122					}
8123				});
8124			}
8125
8126			$.event.trigger(event + '.fb');
8127		},
8128
8129		isImage: function (str) {
8130			return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp)((\?|#).*)?$)/i);
8131		},
8132
8133		isSWF: function (str) {
8134			return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);
8135		},
8136
8137		_start: function (index) {
8138			var coming = {},
8139				obj,
8140				href,
8141				type,
8142				margin,
8143				padding;
8144
8145			index = getScalar( index );
8146			obj   = F.group[ index ] || null;
8147
8148			if (!obj) {
8149				return false;
8150			}
8151
8152			coming = $.extend(true, {}, F.opts, obj);
8153
8154			// Convert margin and padding properties to array - top, right, bottom, left
8155			margin  = coming.margin;
8156			padding = coming.padding;
8157
8158			if ($.type(margin) === 'number') {
8159				coming.margin = [margin, margin, margin, margin];
8160			}
8161
8162			if ($.type(padding) === 'number') {
8163				coming.padding = [padding, padding, padding, padding];
8164			}
8165
8166			// 'modal' propery is just a shortcut
8167			if (coming.modal) {
8168				$.extend(true, coming, {
8169					closeBtn   : false,
8170					closeClick : false,
8171					nextClick  : false,
8172					arrows     : false,
8173					mouseWheel : false,
8174					keys       : null,
8175					helpers: {
8176						overlay : {
8177							closeClick : false
8178						}
8179					}
8180				});
8181			}
8182
8183			// 'autoSize' property is a shortcut, too
8184			if (coming.autoSize) {
8185				coming.autoWidth = coming.autoHeight = true;
8186			}
8187
8188			if (coming.width === 'auto') {
8189				coming.autoWidth = true;
8190			}
8191
8192			if (coming.height === 'auto') {
8193				coming.autoHeight = true;
8194			}
8195
8196			/*
8197			 * Add reference to the group, so it`s possible to access from callbacks, example:
8198			 * afterLoad : function() {
8199			 *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
8200			 * }
8201			 */
8202
8203			coming.group  = F.group;
8204			coming.index  = index;
8205
8206			// Give a chance for callback or helpers to update coming item (type, title, etc)
8207			F.coming = coming;
8208
8209			if (false === F.trigger('beforeLoad')) {
8210				F.coming = null;
8211
8212				return;
8213			}
8214
8215			type = coming.type;
8216			href = coming.href;
8217
8218			if (!type) {
8219				F.coming = null;
8220
8221				//If we can not determine content type then drop silently or display next/prev item if looping through gallery
8222				if (F.current && F.router && F.router !== 'jumpto') {
8223					F.current.index = index;
8224
8225					return F[ F.router ]( F.direction );
8226				}
8227
8228				return false;
8229			}
8230
8231			F.isActive = true;
8232
8233			if (type === 'image' || type === 'swf') {
8234				coming.autoHeight = coming.autoWidth = false;
8235				coming.scrolling  = 'visible';
8236			}
8237
8238			if (type === 'image') {
8239				coming.aspectRatio = true;
8240			}
8241
8242			if (type === 'iframe' && isTouch) {
8243				coming.scrolling = 'scroll';
8244			}
8245
8246			// Build the neccessary markup
8247			coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );
8248
8249			$.extend(coming, {
8250				skin  : $('.fancybox-skin',  coming.wrap),
8251				outer : $('.fancybox-outer', coming.wrap),
8252				inner : $('.fancybox-inner', coming.wrap)
8253			});
8254
8255			$.each(["Top", "Right", "Bottom", "Left"], function(i, v) {
8256				coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
8257			});
8258
8259			F.trigger('onReady');
8260
8261			// Check before try to load; 'inline' and 'html' types need content, others - href
8262			if (type === 'inline' || type === 'html') {
8263				if (!coming.content || !coming.content.length) {
8264					return F._error( 'content' );
8265				}
8266
8267			} else if (!href) {
8268				return F._error( 'href' );
8269			}
8270
8271			if (type === 'image') {
8272				F._loadImage();
8273
8274			} else if (type === 'ajax') {
8275				F._loadAjax();
8276
8277			} else if (type === 'iframe') {
8278				F._loadIframe();
8279
8280			} else {
8281				F._afterLoad();
8282			}
8283		},
8284
8285		_error: function ( type ) {
8286			$.extend(F.coming, {
8287				type       : 'html',
8288				autoWidth  : true,
8289				autoHeight : true,
8290				minWidth   : 0,
8291				minHeight  : 0,
8292				scrolling  : 'no',
8293				hasError   : type,
8294				content    : F.coming.tpl.error
8295			});
8296
8297			F._afterLoad();
8298		},
8299
8300		_loadImage: function () {
8301			// Reset preload image so it is later possible to check "complete" property
8302			var img = F.imgPreload = new Image();
8303
8304			img.onload = function () {
8305				this.onload = this.onerror = null;
8306
8307				F.coming.width  = this.width;
8308				F.coming.height = this.height;
8309
8310				F._afterLoad();
8311			};
8312
8313			img.onerror = function () {
8314				this.onload = this.onerror = null;
8315
8316				F._error( 'image' );
8317			};
8318
8319			img.src = F.coming.href;
8320
8321			if (img.complete !== true) {
8322				F.showLoading();
8323			}
8324		},
8325
8326		_loadAjax: function () {
8327			var coming = F.coming;
8328
8329			F.showLoading();
8330
8331			F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
8332				url: coming.href,
8333				error: function (jqXHR, textStatus) {
8334					if (F.coming && textStatus !== 'abort') {
8335						F._error( 'ajax', jqXHR );
8336
8337					} else {
8338						F.hideLoading();
8339					}
8340				},
8341				success: function (data, textStatus) {
8342					if (textStatus === 'success') {
8343						coming.content = data;
8344
8345						F._afterLoad();
8346					}
8347				}
8348			}));
8349		},
8350
8351		_loadIframe: function() {
8352			var coming = F.coming,
8353				iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))
8354					.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)
8355					.attr('src', coming.href);
8356
8357			// This helps IE
8358			$(coming.wrap).bind('onReset', function () {
8359				try {
8360					$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();
8361				} catch (e) {}
8362			});
8363
8364			if (coming.iframe.preload) {
8365				F.showLoading();
8366
8367				iframe.one('load', function() {
8368					$(this).data('ready', 1);
8369
8370					// iOS will lose scrolling if we resize
8371					if (!isTouch) {
8372						$(this).bind('load.fb', F.update);
8373					}
8374
8375					// Without this trick:
8376					//   - iframe won't scroll on iOS devices
8377					//   - IE7 sometimes displays empty iframe
8378					$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
8379
8380					F._afterLoad();
8381				});
8382			}
8383
8384			coming.content = iframe.appendTo( coming.inner );
8385
8386			if (!coming.iframe.preload) {
8387				F._afterLoad();
8388			}
8389		},
8390
8391		_preloadImages: function() {
8392			var group   = F.group,
8393				current = F.current,
8394				len     = group.length,
8395				cnt     = current.preload ? Math.min(current.preload, len - 1) : 0,
8396				item,
8397				i;
8398
8399			for (i = 1; i <= cnt; i += 1) {
8400				item = group[ (current.index + i ) % len ];
8401
8402				if (item.type === 'image' && item.href) {
8403					new Image().src = item.href;
8404				}
8405			}
8406		},
8407
8408		_afterLoad: function () {
8409			var coming   = F.coming,
8410				previous = F.current,
8411				placeholder = 'fancybox-placeholder',
8412				current,
8413				content,
8414				type,
8415				scrolling,
8416				href,
8417				embed;
8418
8419			F.hideLoading();
8420
8421			if (!coming || F.isActive === false) {
8422				return;
8423			}
8424
8425			if (false === F.trigger('afterLoad', coming, previous)) {
8426				coming.wrap.stop(true).trigger('onReset').remove();
8427
8428				F.coming = null;
8429
8430				return;
8431			}
8432
8433			if (previous) {
8434				F.trigger('beforeChange', previous);
8435
8436				previous.wrap.stop(true).removeClass('fancybox-opened')
8437					.find('.fancybox-item, .fancybox-nav')
8438					.remove();
8439			}
8440
8441			F.unbindEvents();
8442
8443			current   = coming;
8444			content   = coming.content;
8445			type      = coming.type;
8446			scrolling = coming.scrolling;
8447
8448			$.extend(F, {
8449				wrap  : current.wrap,
8450				skin  : current.skin,
8451				outer : current.outer,
8452				inner : current.inner,
8453				current  : current,
8454				previous : previous
8455			});
8456
8457			href = current.href;
8458
8459			switch (type) {
8460				case 'inline':
8461				case 'ajax':
8462				case 'html':
8463					if (current.selector) {
8464						content = $('<div>').html(content).find(current.selector);
8465
8466					} else if (isQuery(content)) {
8467						if (!content.data(placeholder)) {
8468							content.data(placeholder, $('<div class="' + placeholder + '"></div>').insertAfter( content ).hide() );
8469						}
8470
8471						content = content.show().detach();
8472
8473						current.wrap.bind('onReset', function () {
8474							if ($(this).find(content).length) {
8475								content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
8476							}
8477						});
8478					}
8479				break;
8480
8481				case 'image':
8482					content = current.tpl.image.replace('{href}', href);
8483				break;
8484
8485				case 'swf':
8486					content = '<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="' + href + '"></param>';
8487					embed   = '';
8488
8489					$.each(current.swf, function(name, val) {
8490						content += '<param name="' + name + '" value="' + val + '"></param>';
8491						embed   += ' ' + name + '="' + val + '"';
8492					});
8493
8494					content += '<embed src="' + href + '" type="application/x-shockwave-flash" width="100%" height="100%"' + embed + '></embed></object>';
8495				break;
8496			}
8497
8498			if (!(isQuery(content) && content.parent().is(current.inner))) {
8499				current.inner.append( content );
8500			}
8501
8502			// Give a chance for helpers or callbacks to update elements
8503			F.trigger('beforeShow');
8504
8505			// Set scrolling before calculating dimensions
8506			current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
8507
8508			// Set initial dimensions and start position
8509			F._setDimension();
8510
8511			F.reposition();
8512
8513			F.isOpen = false;
8514			F.coming = null;
8515
8516			F.bindEvents();
8517
8518			if (!F.isOpened) {
8519				$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
8520
8521			} else if (previous.prevMethod) {
8522				F.transitions[ previous.prevMethod ]();
8523			}
8524
8525			F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
8526
8527			F._preloadImages();
8528		},
8529
8530		_setDimension: function () {
8531			var viewport   = F.getViewport(),
8532				steps      = 0,
8533				canShrink  = false,
8534				canExpand  = false,
8535				wrap       = F.wrap,
8536				skin       = F.skin,
8537				inner      = F.inner,
8538				current    = F.current,
8539				width      = current.width,
8540				height     = current.height,
8541				minWidth   = current.minWidth,
8542				minHeight  = current.minHeight,
8543				maxWidth   = current.maxWidth,
8544				maxHeight  = current.maxHeight,
8545				scrolling  = current.scrolling,
8546				scrollOut  = current.scrollOutside ? current.scrollbarWidth : 0,
8547				margin     = current.margin,
8548				wMargin    = getScalar(margin[1] + margin[3]),
8549				hMargin    = getScalar(margin[0] + margin[2]),
8550				wPadding,
8551				hPadding,
8552				wSpace,
8553				hSpace,
8554				origWidth,
8555				origHeight,
8556				origMaxWidth,
8557				origMaxHeight,
8558				ratio,
8559				width_,
8560				height_,
8561				maxWidth_,
8562				maxHeight_,
8563				iframe,
8564				body;
8565
8566			// Reset dimensions so we could re-check actual size
8567			wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
8568
8569			wPadding = getScalar(skin.outerWidth(true)  - skin.width());
8570			hPadding = getScalar(skin.outerHeight(true) - skin.height());
8571
8572			// Any space between content and viewport (margin, padding, border, title)
8573			wSpace = wMargin + wPadding;
8574			hSpace = hMargin + hPadding;
8575
8576			origWidth  = isPercentage(width)  ? (viewport.w - wSpace) * getScalar(width)  / 100 : width;
8577			origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
8578
8579			if (current.type === 'iframe') {
8580				iframe = current.content;
8581
8582				if (current.autoHeight && iframe.data('ready') === 1) {
8583					try {
8584						if (iframe[0].contentWindow.document.location) {
8585							inner.width( origWidth ).height(9999);
8586
8587							body = iframe.contents().find('body');
8588
8589							if (scrollOut) {
8590								body.css('overflow-x', 'hidden');
8591							}
8592
8593							origHeight = body.height();
8594						}
8595
8596					} catch (e) {}
8597				}
8598
8599			} else if (current.autoWidth || current.autoHeight) {
8600				inner.addClass( 'fancybox-tmp' );
8601
8602				// Set width or height in case we need to calculate only one dimension
8603				if (!current.autoWidth) {
8604					inner.width( origWidth );
8605				}
8606
8607				if (!current.autoHeight) {
8608					inner.height( origHeight );
8609				}
8610
8611				if (current.autoWidth) {
8612					origWidth = inner.width();
8613				}
8614
8615				if (current.autoHeight) {
8616					origHeight = inner.height();
8617				}
8618
8619				inner.removeClass( 'fancybox-tmp' );
8620			}
8621
8622			width  = getScalar( origWidth );
8623			height = getScalar( origHeight );
8624
8625			ratio  = origWidth / origHeight;
8626
8627			// Calculations for the content
8628			minWidth  = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
8629			maxWidth  = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
8630
8631			minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
8632			maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
8633
8634			// These will be used to determine if wrap can fit in the viewport
8635			origMaxWidth  = maxWidth;
8636			origMaxHeight = maxHeight;
8637
8638			if (current.fitToView) {
8639				maxWidth  = Math.min(viewport.w - wSpace, maxWidth);
8640				maxHeight = Math.min(viewport.h - hSpace, maxHeight);
8641			}
8642
8643			maxWidth_  = viewport.w - wMargin;
8644			maxHeight_ = viewport.h - hMargin;
8645
8646			if (current.aspectRatio) {
8647				if (width > maxWidth) {
8648					width  = maxWidth;
8649					height = getScalar(width / ratio);
8650				}
8651
8652				if (height > maxHeight) {
8653					height = maxHeight;
8654					width  = getScalar(height * ratio);
8655				}
8656
8657				if (width < minWidth) {
8658					width  = minWidth;
8659					height = getScalar(width / ratio);
8660				}
8661
8662				if (height < minHeight) {
8663					height = minHeight;
8664					width  = getScalar(height * ratio);
8665				}
8666
8667			} else {
8668				width = Math.max(minWidth, Math.min(width, maxWidth));
8669
8670				if (current.autoHeight && current.type !== 'iframe') {
8671					inner.width( width );
8672
8673					height = inner.height();
8674				}
8675
8676				height = Math.max(minHeight, Math.min(height, maxHeight));
8677			}
8678
8679			// Try to fit inside viewport (including the title)
8680			if (current.fitToView) {
8681				inner.width( width ).height( height );
8682
8683				wrap.width( width + wPadding );
8684
8685				// Real wrap dimensions
8686				width_  = wrap.width();
8687				height_ = wrap.height();
8688
8689				if (current.aspectRatio) {
8690					while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
8691						if (steps++ > 19) {
8692							break;
8693						}
8694
8695						height = Math.max(minHeight, Math.min(maxHeight, height - 10));
8696						width  = getScalar(height * ratio);
8697
8698						if (width < minWidth) {
8699							width  = minWidth;
8700							height = getScalar(width / ratio);
8701						}
8702
8703						if (width > maxWidth) {
8704							width  = maxWidth;
8705							height = getScalar(width / ratio);
8706						}
8707
8708						inner.width( width ).height( height );
8709
8710						wrap.width( width + wPadding );
8711
8712						width_  = wrap.width();
8713						height_ = wrap.height();
8714					}
8715
8716				} else {
8717					width  = Math.max(minWidth,  Math.min(width,  width  - (width_  - maxWidth_)));
8718					height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
8719				}
8720			}
8721
8722			if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
8723				width += scrollOut;
8724			}
8725
8726			inner.width( width ).height( height );
8727
8728			wrap.width( width + wPadding );
8729
8730			width_  = wrap.width();
8731			height_ = wrap.height();
8732
8733			canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
8734			canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
8735
8736			$.extend(current, {
8737				dim : {
8738					width	: getValue( width_ ),
8739					height	: getValue( height_ )
8740				},
8741				origWidth  : origWidth,
8742				origHeight : origHeight,
8743				canShrink  : canShrink,
8744				canExpand  : canExpand,
8745				wPadding   : wPadding,
8746				hPadding   : hPadding,
8747				wrapSpace  : height_ - skin.outerHeight(true),
8748				skinSpace  : skin.height() - height
8749			});
8750
8751			if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
8752				inner.height('auto');
8753			}
8754		},
8755
8756		_getPosition: function (onlyAbsolute) {
8757			var current  = F.current,
8758				viewport = F.getViewport(),
8759				margin   = current.margin,
8760				width    = F.wrap.width()  + margin[1] + margin[3],
8761				height   = F.wrap.height() + margin[0] + margin[2],
8762				rez      = {
8763					position: 'absolute',
8764					top  : margin[0],
8765					left : margin[3]
8766				};
8767
8768			if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
8769				rez.position = 'fixed';
8770
8771			} else if (!current.locked) {
8772				rez.top  += viewport.y;
8773				rez.left += viewport.x;
8774			}
8775
8776			rez.top  = getValue(Math.max(rez.top,  rez.top  + ((viewport.h - height) * current.topRatio)));
8777			rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width)  * current.leftRatio)));
8778
8779			return rez;
8780		},
8781
8782		_afterZoomIn: function () {
8783			var current = F.current;
8784
8785			if (!current) {
8786				return;
8787			}
8788
8789			F.isOpen = F.isOpened = true;
8790
8791			F.wrap.css('overflow', 'visible').addClass('fancybox-opened');
8792
8793			F.update();
8794
8795			// Assign a click event
8796			if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
8797				F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
8798					if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
8799						e.preventDefault();
8800
8801						F[ current.closeClick ? 'close' : 'next' ]();
8802					}
8803				});
8804			}
8805
8806			// Create a close button
8807			if (current.closeBtn) {
8808				$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
8809					e.preventDefault();
8810
8811					F.close();
8812				});
8813			}
8814
8815			// Create navigation arrows
8816			if (current.arrows && F.group.length > 1) {
8817				if (current.loop || current.index > 0) {
8818					$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
8819				}
8820
8821				if (current.loop || current.index < F.group.length - 1) {
8822					$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
8823				}
8824			}
8825
8826			F.trigger('afterShow');
8827
8828			// Stop the slideshow if this is the last item
8829			if (!current.loop && current.index === current.group.length - 1) {
8830				F.play( false );
8831
8832			} else if (F.opts.autoPlay && !F.player.isActive) {
8833				F.opts.autoPlay = false;
8834
8835				F.play();
8836			}
8837		},
8838
8839		_afterZoomOut: function ( obj ) {
8840			obj = obj || F.current;
8841
8842			$('.fancybox-wrap').trigger('onReset').remove();
8843
8844			$.extend(F, {
8845				group  : {},
8846				opts   : {},
8847				router : false,
8848				current   : null,
8849				isActive  : false,
8850				isOpened  : false,
8851				isOpen    : false,
8852				isClosing : false,
8853				wrap   : null,
8854				skin   : null,
8855				outer  : null,
8856				inner  : null
8857			});
8858
8859			F.trigger('afterClose', obj);
8860		}
8861	});
8862
8863	/*
8864	 *	Default transitions
8865	 */
8866
8867	F.transitions = {
8868		getOrigPosition: function () {
8869			var current  = F.current,
8870				element  = current.element,
8871				orig     = current.orig,
8872				pos      = {},
8873				width    = 50,
8874				height   = 50,
8875				hPadding = current.hPadding,
8876				wPadding = current.wPadding,
8877				viewport = F.getViewport();
8878
8879			if (!orig && current.isDom && element.is(':visible')) {
8880				orig = element.find('img:first');
8881
8882				if (!orig.length) {
8883					orig = element;
8884				}
8885			}
8886
8887			if (isQuery(orig)) {
8888				pos = orig.offset();
8889
8890				if (orig.is('img')) {
8891					width  = orig.outerWidth();
8892					height = orig.outerHeight();
8893				}
8894
8895			} else {
8896				pos.top  = viewport.y + (viewport.h - height) * current.topRatio;
8897				pos.left = viewport.x + (viewport.w - width)  * current.leftRatio;
8898			}
8899
8900			if (F.wrap.css('position') === 'fixed' || current.locked) {
8901				pos.top  -= viewport.y;
8902				pos.left -= viewport.x;
8903			}
8904
8905			pos = {
8906				top     : getValue(pos.top  - hPadding * current.topRatio),
8907				left    : getValue(pos.left - wPadding * current.leftRatio),
8908				width   : getValue(width  + wPadding),
8909				height  : getValue(height + hPadding)
8910			};
8911
8912			return pos;
8913		},
8914
8915		step: function (now, fx) {
8916			var ratio,
8917				padding,
8918				value,
8919				prop       = fx.prop,
8920				current    = F.current,
8921				wrapSpace  = current.wrapSpace,
8922				skinSpace  = current.skinSpace;
8923
8924			if (prop === 'width' || prop === 'height') {
8925				ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
8926
8927				if (F.isClosing) {
8928					ratio = 1 - ratio;
8929				}
8930
8931				padding = prop === 'width' ? current.wPadding : current.hPadding;
8932				value   = now - padding;
8933
8934				F.skin[ prop ](  getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) ) );
8935				F.inner[ prop ]( getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
8936			}
8937		},
8938
8939		zoomIn: function () {
8940			var current  = F.current,
8941				startPos = current.pos,
8942				effect   = current.openEffect,
8943				elastic  = effect === 'elastic',
8944				endPos   = $.extend({opacity : 1}, startPos);
8945
8946			// Remove "position" property that breaks older IE
8947			delete endPos.position;
8948
8949			if (elastic) {
8950				startPos = this.getOrigPosition();
8951
8952				if (current.openOpacity) {
8953					startPos.opacity = 0.1;
8954				}
8955
8956			} else if (effect === 'fade') {
8957				startPos.opacity = 0.1;
8958			}
8959
8960			F.wrap.css(startPos).animate(endPos, {
8961				duration : effect === 'none' ? 0 : current.openSpeed,
8962				easing   : current.openEasing,
8963				step     : elastic ? this.step : null,
8964				complete : F._afterZoomIn
8965			});
8966		},
8967
8968		zoomOut: function () {
8969			var current  = F.current,
8970				effect   = current.closeEffect,
8971				elastic  = effect === 'elastic',
8972				endPos   = {opacity : 0.1};
8973
8974			if (elastic) {
8975				endPos = this.getOrigPosition();
8976
8977				if (current.closeOpacity) {
8978					endPos.opacity = 0.1;
8979				}
8980			}
8981
8982			F.wrap.animate(endPos, {
8983				duration : effect === 'none' ? 0 : current.closeSpeed,
8984				easing   : current.closeEasing,
8985				step     : elastic ? this.step : null,
8986				complete : F._afterZoomOut
8987			});
8988		},
8989
8990		changeIn: function () {
8991			var current   = F.current,
8992				effect    = current.nextEffect,
8993				startPos  = current.pos,
8994				endPos    = { opacity : 1 },
8995				direction = F.direction,
8996				distance  = 200,
8997				field;
8998
8999			startPos.opacity = 0.1;
9000
9001			if (effect === 'elastic') {
9002				field = direction === 'down' || direction === 'up' ? 'top' : 'left';
9003
9004				if (direction === 'down' || direction === 'right') {
9005					startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
9006					endPos[ field ]   = '+=' + distance + 'px';
9007
9008				} else {
9009					startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
9010					endPos[ field ]   = '-=' + distance + 'px';
9011				}
9012			}
9013
9014			// Workaround for http://bugs.jquery.com/ticket/12273
9015			if (effect === 'none') {
9016				F._afterZoomIn();
9017
9018			} else {
9019				F.wrap.css(startPos).animate(endPos, {
9020					duration : current.nextSpeed,
9021					easing   : current.nextEasing,
9022					complete : F._afterZoomIn
9023				});
9024			}
9025		},
9026
9027		changeOut: function () {
9028			var previous  = F.previous,
9029				effect    = previous.prevEffect,
9030				endPos    = { opacity : 0.1 },
9031				direction = F.direction,
9032				distance  = 200;
9033
9034			if (effect === 'elastic') {
9035				endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
9036			}
9037
9038			previous.wrap.animate(endPos, {
9039				duration : effect === 'none' ? 0 : previous.prevSpeed,
9040				easing   : previous.prevEasing,
9041				complete : function () {
9042					$(this).trigger('onReset').remove();
9043				}
9044			});
9045		}
9046	};
9047
9048	/*
9049	 *	Overlay helper
9050	 */
9051
9052	F.helpers.overlay = {
9053		defaults : {
9054			closeClick : true,  // if true, fancyBox will be closed when user clicks on the overlay
9055			speedOut   : 200,   // duration of fadeOut animation
9056			showEarly  : true,  // indicates if should be opened immediately or wait until the content is ready
9057			css        : {},    // custom CSS properties
9058			locked     : !isTouch,  // if true, the content will be locked into overlay
9059			fixed      : true   // if false, the overlay CSS position property will not be set to "fixed"
9060		},
9061
9062		overlay : null,   // current handle
9063		fixed   : false,  // indicates if the overlay has position "fixed"
9064
9065		// Public methods
9066		create : function(opts) {
9067			opts = $.extend({}, this.defaults, opts);
9068
9069			if (this.overlay) {
9070				this.close();
9071			}
9072
9073			this.overlay = $('<div class="fancybox-overlay"></div>').appendTo( 'body' );
9074			this.fixed   = false;
9075
9076			if (opts.fixed && F.defaults.fixed) {
9077				this.overlay.addClass('fancybox-overlay-fixed');
9078
9079				this.fixed = true;
9080			}
9081		},
9082
9083		open : function(opts) {
9084			var that = this;
9085
9086			opts = $.extend({}, this.defaults, opts);
9087
9088			if (this.overlay) {
9089				this.overlay.unbind('.overlay').width('auto').height('auto');
9090
9091			} else {
9092				this.create(opts);
9093			}
9094
9095			if (!this.fixed) {
9096				W.bind('resize.overlay', $.proxy( this.update, this) );
9097
9098				this.update();
9099			}
9100
9101			if (opts.closeClick) {
9102				this.overlay.bind('click.overlay', function(e) {
9103					if ($(e.target).hasClass('fancybox-overlay')) {
9104						if (F.isActive) {
9105							F.close();
9106						} else {
9107							that.close();
9108						}
9109					}
9110				});
9111			}
9112
9113			this.overlay.css( opts.css ).show();
9114		},
9115
9116		close : function() {
9117			$('.fancybox-overlay').remove();
9118
9119			W.unbind('resize.overlay');
9120
9121			this.overlay = null;
9122
9123			if (this.margin !== false) {
9124				$('body').css('margin-right', this.margin);
9125
9126				this.margin = false;
9127			}
9128
9129			if (this.el) {
9130				this.el.removeClass('fancybox-lock');
9131			}
9132		},
9133
9134		// Private, callbacks
9135
9136		update : function () {
9137			var width = '100%', offsetWidth;
9138
9139			// Reset width/height so it will not mess
9140			this.overlay.width(width).height('100%');
9141
9142			// jQuery does not return reliable result for IE
9143			if (IE) {
9144				offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
9145
9146				if (D.width() > offsetWidth) {
9147					width = D.width();
9148				}
9149
9150			} else if (D.width() > W.width()) {
9151				width = D.width();
9152			}
9153
9154			this.overlay.width(width).height(D.height());
9155		},
9156
9157		// This is where we can manipulate DOM, because later it would cause iframes to reload
9158		onReady : function (opts, obj) {
9159			$('.fancybox-overlay').stop(true, true);
9160
9161			if (!this.overlay) {
9162				this.margin = D.height() > W.height() || $('body').css('overflow-y') === 'scroll' ? $('body').css('margin-right') : false;
9163				this.el     = document.all && !document.querySelector ? $('html') : $('body');
9164
9165				this.create(opts);
9166			}
9167
9168			if (opts.locked && this.fixed) {
9169				obj.locked = this.overlay.append( obj.wrap );
9170				obj.fixed  = false;
9171			}
9172
9173			if (opts.showEarly === true) {
9174				this.beforeShow.apply(this, arguments);
9175			}
9176		},
9177
9178		beforeShow : function(opts, obj) {
9179			if (obj.locked) {
9180				this.el.addClass('fancybox-lock');
9181
9182				if (this.margin !== false) {
9183					$('body').css('margin-right', getScalar( this.margin ) + obj.scrollbarWidth);
9184				}
9185			}
9186
9187			this.open(opts);
9188		},
9189
9190		onUpdate : function() {
9191			if (!this.fixed) {
9192				this.update();
9193			}
9194		},
9195
9196		afterClose: function (opts) {
9197			// Remove overlay if exists and fancyBox is not opening
9198			// (e.g., it is not being open using afterClose callback)
9199			if (this.overlay && !F.isActive) {
9200				this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
9201			}
9202		}
9203	};
9204
9205	/*
9206	 *	Title helper
9207	 */
9208
9209	F.helpers.title = {
9210		defaults : {
9211			type     : 'float', // 'float', 'inside', 'outside' or 'over',
9212			position : 'bottom' // 'top' or 'bottom'
9213		},
9214
9215		beforeShow: function (opts) {
9216			var current = F.current,
9217				text    = current.title,
9218				type    = opts.type,
9219				title,
9220				target;
9221
9222			if ($.isFunction(text)) {
9223				text = text.call(current.element, current);
9224			}
9225
9226			if (!isString(text) || $.trim(text) === '') {
9227				return;
9228			}
9229
9230			title = $('<div class="fancybox-title fancybox-title-' + type + '-wrap">
9230' + text + '</div>');
9231
9232			switch (type) {
9233				case 'inside':
9234					target = F.skin;
9235				break;
9236
9237				case 'outside':
9238					target = F.wrap;
9239				break;
9240
9241				case 'over':
9242					target = F.inner;
9243				break;
9244
9245				default: // 'float'
9246					target = F.skin;
9247
9248					title.appendTo('body');
9249
9250					if (IE) {
9251						title.width( title.width() );
9252					}
9253
9254					title.wrapInner('<span class="child"></span>');
9255
9256					//Increase bottom margin so this title will also fit into viewport
9257					F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
9258				break;
9259			}
9260
9261			title[ (opts.position === 'top' ? 'prependTo'  : 'appendTo') ](target);
9262		}
9263	};
9264
9265	// jQuery plugin initialization
9266	$.fn.fancybox = function (options) {
9267		var index,
9268			that     = $(this),
9269			selector = this.selector || '',
9270			run      = function(e) {
9271				var what = $(this).blur(), idx = index, relType, relVal;
9272
9273				if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
9274					relType = options.groupAttr || 'data-fancybox-group';
9275					relVal  = what.attr(relType);
9276
9277					if (!relVal) {
9278						relType = 'rel';
9279						relVal  = what.get(0)[ relType ];
9280					}
9281
9282					if (relVal && relVal !== '' && relVal !== 'nofollow') {
9283						what = selector.length ? $(selector) : that;
9284						what = what.filter('[' + relType + '="' + relVal + '"]');
9285						idx  = what.index(this);
9286					}
9287
9288					options.index = idx;
9289
9290					// Stop an event from bubbling if everything is fine
9291					if (F.open(what, options) !== false) {
9292						e.preventDefault();
9293					}
9294				}
9295			};
9296
9297		options = options || {};
9298		index   = options.index || 0;
9299
9300		if (!selector || options.live === false) {
9301			that.unbind('click.fb-start').bind('click.fb-start', run);
9302
9303		} else {
9304			D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
9305		}
9306
9307		this.filter('[data-fancybox-start=1]').trigger('click');
9308
9309		return this;
9310	};
9311
9312	// Tests that need a body at doc ready
9313	D.ready(function() {
9314		if ( $.scrollbarWidth === undefined ) {
9315			// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
9316			$.scrollbarWidth = function() {
9317				var parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'),
9318					child  = parent.children(),
9319					width  = child.innerWidth() - child.height( 99 ).innerWidth();
9320
9321				parent.remove();
9322
9323				return width;
9324			};
9325		}
9326
9327		if ( $.support.fixedPosition === undefined ) {
9328			$.support.fixedPosition = (function() {
9329				var elem  = $('<div style="position:fixed;top:20px;"></div>').appendTo('body'),
9330					fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
9331
9332				elem.remove();
9333
9334				return fixed;
9335			}());
9336		}
9337
9338		$.extend(F.defaults, {
9339			scrollbarWidth : $.scrollbarWidth(),
9340			fixed  : $.support.fixedPosition,
9341			parent : $('body')
9342		});
9343	});
9344
9345}(window, document, jQuery));/*
9346 * Lazy Load - jQuery plugin for lazy loading images
9347 *
9348 * Copyright (c) 2007-2012 Mika Tuupola
9349 *
9350 * Licensed under the MIT license:
9351 *   http://www.opensource.org/licenses/mit-license.php
9352 *
9353 * Project home:
9354 *   http://www.appelsiini.net/projects/lazyload
9355 *
9356 * Version:  1.8.3
9357 *
9358 */
9359(function($, window, document, undefined) {
9360    var $window = $(window);
9361
9362    $.fn.lazyload = function(options) {
9363        var elements = this;
9364        var $container;
9365        var settings = {
9366            threshold       : 0,
9367            failure_limit   : 0,
9368            event           : "scroll",
9369            effect          : "show",
9370            container       : window,
9371            data_attribute  : "original",
9372            skip_invisible  : true,
9373            appear          : null,
9374            load            : null
9375        };
9376
9377        function update() {
9378            var counter = 0;
9379      
9380            elements.each(function() {
9381                var $this = $(this);
9382                if (settings.skip_invisible && !$this.is(":visible")) {
9383                    return;
9384                }
9385                if ($.abovethetop(this, settings) ||
9386                    $.leftofbegin(this, settings)) {
9387                        /* Nothing. */
9388                } else if (!$.belowthefold(this, settings) &&
9389                    !$.rightoffold(this, settings)) {
9390                        $this.trigger("appear");
9391                        /* if we found an image we'll load, reset the counter */
9392                        counter = 0;
9393                } else {
9394                    if (++counter > settings.failure_limit) {
9395                        return false;
9396                    }
9397                }
9398            });
9399
9400        }
9401
9402        if(options) {
9403            /* Maintain BC for a couple of versions. */
9404            if (undefined !== options.failurelimit) {
9405                options.failure_limit = options.failurelimit; 
9406                delete options.failurelimit;
9407            }
9408            if (undefined !== options.effectspeed) {
9409                options.effect_speed = options.effectspeed; 
9410                delete options.effectspeed;
9411            }
9412
9413            $.extend(settings, options);
9414        }
9415
9416        /* Cache container as jQuery as object. */
9417        $container = (settings.container === undefined ||
9418                      settings.container === window) ? $window : $(settings.container);
9419
9420        /* Fire one scroll event per scroll. Not one scroll event per image. */
9421        if (0 === settings.event.indexOf("scroll")) {
9422            $container.bind(settings.event, function(event) {
vendor: 5,857 bytes, lines 9423-9569
9423                return update();
9424            });
9425        }
9426
9427        this.each(function() {
9428            var self = this;
9429            var $self = $(self);
9430
9431            self.loaded = false;
9432
9433            /* When appear is triggered load original image. */
9434            $self.one("appear", function() {
9435                if (!this.loaded) {
9436                    if (settings.appear) {
9437                        var elements_left = elements.length;
9438                        settings.appear.call(self, elements_left, settings);
9439                    }
9440                    $("<img />")
9441                        .bind("load", function() {
9442                            $self
9443                                .hide()
9444                                .attr("src", $self.data(settings.data_attribute))
9445                                [settings.effect](settings.effect_speed);
9446                            self.loaded = true;
9447
9448                            /* Remove image from array so it is not looped next time. */
9449                            var temp = $.grep(elements, function(element) {
9450                                return !element.loaded;
9451                            });
9452                            elements = $(temp);
9453
9454                            if (settings.load) {
9455                                var elements_left = elements.length;
9456                                settings.load.call(self, elements_left, settings);
9457                            }
9458                        })
9459                        .attr("src", $self.data(settings.data_attribute));
9460                }
9461            });
9462
9463            /* When wanted event is triggered load original image */
9464            /* by triggering appear.                              */
9465            if (0 !== settings.event.indexOf("scroll")) {
9466                $self.bind(settings.event, function(event) {
9467                    if (!self.loaded) {
9468                        $self.trigger("appear");
9469                    }
9470                });
9471            }
9472        });
9473
9474        /* Check if something appears when window is resized. */
9475        $window.bind("resize", function(event) {
9476            update();
9477        });
9478              
9479        /* With IOS5 force loading images when navigating with back button. */
9480        /* Non optimal workaround. */
9481        if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) {
9482            $window.bind("pageshow", function(event) {
9483                if (event.originalEvent.persisted) {
9484                    elements.each(function() {
9485                        $(this).trigger("appear");
9486                    });
9487                }
9488            });
9489        }
9490
9491        /* Force initial check if images should appear. */
9492        $(window).load(function() {
9493            update();
9494        });
9495        
9496        return this;
9497    };
9498
9499    /* Convenience methods in jQuery namespace.           */
9500    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
9501
9502    $.belowthefold = function(element, settings) {
9503        var fold;
9504        
9505        if (settings.container === undefined || settings.container === window) {
9506            fold = $window.height() + $window.scrollTop();
9507        } else {
9508            fold = $(settings.container).offset().top + $(settings.container).height();
9509        }
9510
9511        return fold <= $(element).offset().top - settings.threshold;
9512    };
9513    
9514    $.rightoffold = function(element, settings) {
9515        var fold;
9516
9517        if (settings.container === undefined || settings.container === window) {
9518            fold = $window.width() + $window.scrollLeft();
9519        } else {
9520            fold = $(settings.container).offset().left + $(settings.container).width();
9521        }
9522
9523        return fold <= $(element).offset().left - settings.threshold;
9524    };
9525        
9526    $.abovethetop = function(element, settings) {
9527        var fold;
9528        
9529        if (settings.container === undefined || settings.container === window) {
9530            fold = $window.scrollTop();
9531        } else {
9532            fold = $(settings.container).offset().top;
9533        }
9534
9535        return fold >= $(element).offset().top + settings.threshold  + $(element).height();
9536    };
9537    
9538    $.leftofbegin = function(element, settings) {
9539        var fold;
9540        
9541        if (settings.container === undefined || settings.container === window) {
9542            fold = $window.scrollLeft();
9543        } else {
9544            fold = $(settings.container).offset().left;
9545        }
9546
9547        return fold >= $(element).offset().left + settings.threshold + $(element).width();
9548    };
9549
9550    $.inviewport = function(element, settings) {
9551         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
9552                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);
9553     };
9554
9555    /* Custom selectors for your convenience.   */
9556    /* Use as $("img:below-the-fold").something() or */
9557    /* $("img").filter(":below-the-fold").something() which is faster */
9558
9559    $.extend($.expr[':'], {
9560        "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
9561        "above-the-top"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },
9562        "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
9563        "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
9564        "in-viewport"    : function(a) { return $.inviewport(a, {threshold : 0}); },
9565        /* Maintain BC for couple of versions. */
9566        "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
9567        "right-of-fold"  : function(a) { return $.rightoffold(a, {threshold : 0}); },
9568        "left-of-fold"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }
9569    });
vendor: 9,339 bytes, lines 9570-9818
9570
9571})(jQuery, window, document);
9572/*
9573 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
9574 *
9575 * Uses the built in easing capabilities added In jQuery 1.1
9576 * to offer multiple easing options
9577 *
9578 * TERMS OF USE - jQuery Easing
9579 * 
9580 * Open source under the BSD License. 
9581 * 
9582 * Copyright © 2008 George McGinley Smith
9583 * All rights reserved.
9584 * 
9585 * Redistribution and use in source and binary forms, with or without modification, 
9586 * are permitted provided that the following conditions are met:
9587 * 
9588 * Redistributions of source code must retain the above copyright notice, this list of 
9589 * conditions and the following disclaimer.
9590 * Redistributions in binary form must reproduce the above copyright notice, this list 
9591 * of conditions and the following disclaimer in the documentation and/or other materials 
9592 * provided with the distribution.
9593 * 
9594 * Neither the name of the author nor the names of contributors may be used to endorse 
9595 * or promote products derived from this software without specific prior written permission.
9596 * 
9597 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
9598 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
9599 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
9600 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
9601 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
9602 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
9603 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
9604 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
9605 * OF THE POSSIBILITY OF SUCH DAMAGE. 
9606 *
9607*/
9608
9609// t: current time, b: begInnIng value, c: change In value, d: duration
9610jQuery.easing['jswing'] = jQuery.easing['swing'];
9611
9612jQuery.extend( jQuery.easing,
9613{
9614	def: 'easeOutQuad',
9615	swing: function (x, t, b, c, d) {
9616		//alert(jQuery.easing.default);
9617		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
9618	},
9619	easeInQuad: function (x, t, b, c, d) {
9620		return c*(t/=d)*t + b;
9621	},
9622	easeOutQuad: function (x, t, b, c, d) {
9623		return -c *(t/=d)*(t-2) + b;
9624	},
9625	easeInOutQuad: function (x, t, b, c, d) {
9626		if ((t/=d/2) < 1) return c/2*t*t + b;
9627		return -c/2 * ((--t)*(t-2) - 1) + b;
9628	},
9629	easeInCubic: function (x, t, b, c, d) {
9630		return c*(t/=d)*t*t + b;
9631	},
9632	easeOutCubic: function (x, t, b, c, d) {
9633		return c*((t=t/d-1)*t*t + 1) + b;
9634	},
9635	easeInOutCubic: function (x, t, b, c, d) {
9636		if ((t/=d/2) < 1) return c/2*t*t*t + b;
9637		return c/2*((t-=2)*t*t + 2) + b;
9638	},
9639	easeInQuart: function (x, t, b, c, d) {
9640		return c*(t/=d)*t*t*t + b;
9641	},
9642	easeOutQuart: function (x, t, b, c, d) {
9643		return -c * ((t=t/d-1)*t*t*t - 1) + b;
9644	},
9645	easeInOutQuart: function (x, t, b, c, d) {
9646		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
9647		return -c/2 * ((t-=2)*t*t*t - 2) + b;
9648	},
9649	easeInQuint: function (x, t, b, c, d) {
9650		return c*(t/=d)*t*t*t*t + b;
9651	},
9652	easeOutQuint: function (x, t, b, c, d) {
9653		return c*((t=t/d-1)*t*t*t*t + 1) + b;
9654	},
9655	easeInOutQuint: function (x, t, b, c, d) {
9656		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
9657		return c/2*((t-=2)*t*t*t*t + 2) + b;
9658	},
9659	easeInSine: function (x, t, b, c, d) {
9660		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
9661	},
9662	easeOutSine: function (x, t, b, c, d) {
9663		return c * Math.sin(t/d * (Math.PI/2)) + b;
9664	},
9665	easeInOutSine: function (x, t, b, c, d) {
9666		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
9667	},
9668	easeInExpo: function (x, t, b, c, d) {
9669		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
9670	},
9671	easeOutExpo: function (x, t, b, c, d) {
9672		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
9673	},
9674	easeInOutExpo: function (x, t, b, c, d) {
9675		if (t==0) return b;
9676		if (t==d) return b+c;
9677		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
9678		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
9679	},
9680	easeInCirc: function (x, t, b, c, d) {
9681		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
9682	},
9683	easeOutCirc: function (x, t, b, c, d) {
9684		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
9685	},
9686	easeInOutCirc: function (x, t, b, c, d) {
9687		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
9688		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
9689	},
9690	easeInElastic: function (x, t, b, c, d) {
9691		var s=1.70158;var p=0;var a=c;
9692		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
9693		if (a < Math.abs(c)) { a=c; var s=p/4; }
9694		else var s = p/(2*Math.PI) * Math.asin (c/a);
9695		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
9696	},
9697	easeOutElastic: function (x, t, b, c, d) {
9698		var s=1.70158;var p=0;var a=c;
9699		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
9700		if (a < Math.abs(c)) { a=c; var s=p/4; }
9701		else var s = p/(2*Math.PI) * Math.asin (c/a);
9702		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
9703	},
9704	easeInOutElastic: function (x, t, b, c, d) {
9705		var s=1.70158;var p=0;var a=c;
9706		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
9707		if (a < Math.abs(c)) { a=c; var s=p/4; }
9708		else var s = p/(2*Math.PI) * Math.asin (c/a);
9709		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
9710		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
9711	},
9712	easeInBack: function (x, t, b, c, d, s) {
9713		if (s == undefined) s = 1.70158;
9714		return c*(t/=d)*t*((s+1)*t - s) + b;
9715	},
9716	easeOutBack: function (x, t, b, c, d, s) {
9717		if (s == undefined) s = 1.70158;
9718		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
9719	},
9720	easeInOutBack: function (x, t, b, c, d, s) {
9721		if (s == undefined) s = 1.70158; 
9722		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
9723		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
9724	},
9725	easeInBounce: function (x, t, b, c, d) {
9726		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
9727	},
9728	easeOutBounce: function (x, t, b, c, d) {
9729		if ((t/=d) < (1/2.75)) {
9730			return c*(7.5625*t*t) + b;
9731		} else if (t < (2/2.75)) {
9732			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
9733		} else if (t < (2.5/2.75)) {
9734			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
9735		} else {
9736			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
9737		}
9738	},
9739	easeInOutBounce: function (x, t, b, c, d) {
9740		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
9741		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
9742	}
9743});
9744
9745/*
9746 *
9747 * TERMS OF USE - EASING EQUATIONS
9748 * 
9749 * Open source under the BSD License. 
9750 * 
9751 * Copyright © 2001 Robert Penner
9752 * All rights reserved.
9753 * 
9754 * Redistribution and use in source and binary forms, with or without modification, 
9755 * are permitted provided that the following conditions are met:
9756 * 
9757 * Redistributions of source code must retain the above copyright notice, this list of 
9758 * conditions and the following disclaimer.
9759 * Redistributions in binary form must reproduce the above copyright notice, this list 
9760 * of conditions and the following disclaimer in the documentation and/or other materials 
9761 * provided with the distribution.
9762 * 
9763 * Neither the name of the author nor the names of contributors may be used to endorse 
9764 * or promote products derived from this software without specific prior written permission.
9765 * 
9766 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
9767 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
9768 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
9769 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
9770 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
9771 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
9772 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
9773 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
9774 * OF THE POSSIBILITY OF SUCH DAMAGE. 
9775 *
9776 */(function($) {
9777  'use strict';
9778
9779  var _currentSpinnerId = 0;
9780
9781  function _scopedEventName(name, id) {
9782    return name + '.touchspin_' + id;
9783  }
9784
9785  function _scopeEventNames(names, id) {
9786    return $.map(names, function(name) {
9787      return _scopedEventName(name, id);
9788    });
9789  }
9790
9791  $.fn.TouchSpin = function(options) {
9792
9793    if (options === 'destroy') {
9794      this.each(function() {
9795        var originalinput = $(this),
9796            originalinput_data = originalinput.data();
9797        $(document).off(_scopeEventNames([
9798          'mouseup',
9799          'touchend',
9800          'touchcancel',
9801          'mousemove',
9802          'touchmove',
9803          'scroll',
9804          'scrollstart'], originalinput_data.spinnerid).join(' '));
9805      });
9806      return;
9807    }
9808
9809    var defaults = {
9810      min: 0,
9811      max: 100,
9812      initval: '',
9813      replacementval: '',
9814      step: 1,
9815      decimals: 0,
9816      stepinterval: 100,
9817      forcestepdivisibility: 'round', // none | floor | round | ceil
9818      stepintervaldelay: 500,
9819      verticalbuttons: false,
9820      verticalupclass: 'glyphicon glyphicon-chevron-up',
9821      verticaldownclass: 'glyphicon glyphicon-chevron-down',
9822      prefix: '',
9823      postfix: '',
9824      prefix_extraclass: '',
9825      postfix_extraclass: '',
9826      booster: true,
9827      boostat: 10,
9828      maxboostedstep: false,
9829      mousewheel: true,
9830      buttondown_class: 'btn btn-default',
9831      buttonup_class: 'btn btn-default',
9832	  buttondown_txt: '-',
9833	  buttonup_txt: '+'
9834    };
9835
9836    var attributeMap = {
9837      min: 'min',
9838      max: 'max',
9839      initval: 'init-val',
9840      replacementval: 'replacement-val',
9841      step: 'step',
9842      decimals: 'decimals',
9843      stepinterval: 'step-interval',
9844      verticalbuttons: 'vertical-buttons',
9845      verticalupclass: 'vertical-up-class',
9846      verticaldownclass: 'vertical-down-class',
9847      forcestepdivisibility: 'force-step-divisibility',
9848      stepintervaldelay: 'step-interval-delay',
9849      prefix: 'prefix',
9850      postfix: 'postfix',
9851      prefix_extraclass: 'prefix-extra-class',
9852      postfix_extraclass: 'postfix-extra-class',
9853      booster: 'booster',
9854      boostat: 'boostat',
9855      maxboostedstep: 'max-boosted-step',
9856      mousewheel: 'mouse-wheel',
9857      buttondown_class: 'button-down-class',
9858      buttonup_class: 'button-up-class',
9859	  buttondown_txt: 'button-down-txt',
9860	  buttonup_txt: 'button-up-txt'
9861    };
9862
9863    return this.each(function() {
9864
9865      var settings,
9866          originalinput = $(this),
9867          originalinput_data = originalinput.data(),
9868          container,
9869          elements,
9870          value,
9871          downSpinTimer,
9872          upSpinTimer,
9873          downDelayTimeout,
9874          upDelayTimeout,
9875          spincount = 0,
9876          spinning = false;
9877
9878      init();
9879
9880
9881      function init() {
9882        if (originalinput.data('alreadyinitialized')) {
9883          return;
9884        }
9885
9886        originalinput.data('alreadyinitialized', true);
9887        _currentSpinnerId += 1;
9888        originalinput.data('spinnerid', _currentSpinnerId);
9889
9890
9891        if (!originalinput.is('input')) {
9892          console.log('Must be an input.');
9893          return;
9894        }
9895
9896        _initSettings();
9897        _setInitval();
9898        _checkValue();
9899        _buildHtml();
9900        _initElements();
9901        _hideEmptyPrefixPostfix();
9902        _bindEvents();
9903        _bindEventsInterface();
9904        elements.input.css('display', 'block');
9905      }
9906
9907      function _setInitval() {
9908        if (settings.initval !== '' && originalinput.val() === '') {
9909          originalinput.val(settings.initval);
9910        }
9911      }
9912
9913      function changeSettings(newsettings) {
9914        _updateSettings(newsettings);
9915        _checkValue();
9916
9917        var value = elements.input.val();
9918
9919        if (value !== '') {
9920          value = Number(elements.input.val());
9921          elements.input.val(value.toFixed(settings.decimals));
9922        }
9923      }
9924
9925      function _initSettings() {
9926        settings = $.extend({}, defaults, originalinput_data, _parseAttributes(), options);
9927      }
9928
9929      function _parseAttributes() {
9930        var data = {};
9931        $.each(attributeMap, function(key, value) {
9932          var attrName = 'bts-' + value + '';
9933          if (originalinput.is('[data-' + attrName + ']')) {
9934            data[key] = originalinput.data(attrName);
9935          }
9936        });
9937        return data;
9938      }
9939
9940      function _updateSettings(newsettings) {
9941        settings = $.extend({}, settings, newsettings);
9942      }
9943
9944      function _buildHtml() {
9945        var initval = originalinput.val(),
9946            parentelement = originalinput.parent();
9947
9948        if (initval !== '') {
9949          initval = Number(initval).toFixed(settings.decimals);
9950        }
9951
9952        originalinput.data('initvalue', initval).val(initval);
9953        originalinput.addClass('form-control');
9954
9955        if (parentelement.hasClass('input-group')) {
9956          _advanceInputGroup(parentelement);
9957        }
9958        else {
9959          _buildInputGroup();
9960        }
9961      }
9962
9963      function _advanceInputGroup(parentelement) {
9964        parentelement.addClass('bootstrap-touchspin');
9965
9966        var prev = originalinput.prev(),
9967            next = originalinput.next();
9968
9969        var downhtml,
9970            uphtml,
9971            prefixhtml = '<span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span>',
9972            postfixhtml = '<span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span>';
9973
9974        if (prev.hasClass('input-group-btn')) {
9975          downhtml = '<button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">' + settings.buttondown_txt + '</button>';
9976          prev.append(downhtml);
9977        }
9978        else {
9979          downhtml = '<span class="input-group-btn"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">' + settings.buttondown_txt + '</button></span>';
9980          $(downhtml).insertBefore(originalinput);
9981        }
9982
9983        if (next.hasClass('input-group-btn')) {
9984          uphtml = '<button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">' + settings.buttonup_txt + '</button>';
9985          next.prepend(uphtml);
9986        }
9987        else {
9988          uphtml = '<span class="input-group-btn"><button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">' + settings.buttonup_txt + '</button></span>';
9989          $(uphtml).insertAfter(originalinput);
9990        }
9991
9992        $(prefixhtml).insertBefore(originalinput);
9993        $(postfixhtml).insertAfter(originalinput);
9994
9995        container = parentelement;
9996      }
9997
9998      function _buildInputGroup() {
9999        var html;
10000
10001        if (settings.verticalbuttons) {
10002          html = '<div class="input-group bootstrap-touchspin"><span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span><span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span><span class="input-group-btn-vertical"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-up" type="button"><i class="' + settings.verticalupclass + '"></i></button><button class="' + settings.buttonup_class + ' bootstrap-touchspin-down" type="button"><i class="' + settings.verticaldownclass + '"></i></button></span></div>';
10003        }
10004        else {
10005          html = '<div class="input-group bootstrap-touchspin"><span class="input-group-btn"><button class="' + settings.buttondown_class + ' bootstrap-touchspin-down" type="button">' + settings.buttondown_txt + '</button></span><span class="input-group-addon bootstrap-touchspin-prefix">' + settings.prefix + '</span><span class="input-group-addon bootstrap-touchspin-postfix">' + settings.postfix + '</span><span class="input-group-btn"><button class="' + settings.buttonup_class + ' bootstrap-touchspin-up" type="button">' + settings.buttonup_txt + '</button></span></div>';
10006        }
10007
10008        container = $(html).insertBefore(originalinput);
10009
10010        $('.bootstrap-touchspin-prefix', container).after(originalinput);
10011
10012        if (originalinput.hasClass('input-sm')) {
10013          container.addClass('input-group-sm');
10014        }
10015        else if (originalinput.hasClass('input-lg')) {
10016          container.addClass('input-group-lg');
10017        }
10018      }
10019
10020      function _initElements() {
10021        elements = {
10022          down: $('.bootstrap-touchspin-down', container),
10023          up: $('.bootstrap-touchspin-up', container),
10024          input: $('input', container),
10025          prefix: $('.bootstrap-touchspin-prefix', container).addClass(settings.prefix_extraclass),
10026          postfix: $('.bootstrap-touchspin-postfix', container).addClass(settings.postfix_extraclass)
10027        };
10028      }
10029
10030      function _hideEmptyPrefixPostfix() {
10031        if (settings.prefix === '') {
10032          elements.prefix.hide();
10033        }
10034
10035        if (settings.postfix === '') {
10036          elements.postfix.hide();
10037        }
10038      }
10039
10040      function _bindEvents() {
10041        originalinput.on('keydown', function(ev) {
10042          var code = ev.keyCode || ev.which;
10043
10044          if (code === 38) {
10045            if (spinning !== 'up') {
10046              upOnce();
10047              startUpSpin();
10048            }
10049            ev.preventDefault();
10050          }
10051          else if (code === 40) {
10052            if (spinning !== 'down') {
10053              downOnce();
10054              startDownSpin();
10055            }
10056            ev.preventDefault();
10057          }
10058        });
10059
10060        originalinput.on('keyup', function(ev) {
10061          var code = ev.keyCode || ev.which;
10062
10063          if (code === 38) {
10064            stopSpin();
10065          }
10066          else if (code === 40) {
10067            stopSpin();
10068          }
10069        });
10070
10071        originalinput.on('blur', function() {
10072          _checkValue();
10073        });
10074
10075        elements.down.on('keydown', function(ev) {
10076          var code = ev.keyCode || ev.which;
10077
10078          if (code === 32 || code === 13) {
10079            if (spinning !== 'down') {
10080              downOnce();
10081              startDownSpin();
10082            }
10083            ev.preventDefault();
10084          }
10085        });
10086
10087        elements.down.on('keyup', function(ev) {
10088          var code = ev.keyCode || ev.which;
10089
10090          if (code === 32 || code === 13) {
10091            stopSpin();
10092          }
10093        });
10094
10095        elements.up.on('keydown', function(ev) {
10096          var code = ev.keyCode || ev.which;
10097
10098          if (code === 32 || code === 13) {
10099            if (spinning !== 'up') {
10100              upOnce();
10101              startUpSpin();
10102            }
10103            ev.preventDefault();
10104          }
10105        });
10106
10107        elements.up.on('keyup', function(ev) {
10108          var code = ev.keyCode || ev.which;
10109
10110          if (code === 32 || code === 13) {
10111            stopSpin();
10112          }
10113        });
10114
10115        elements.down.on('mousedown.touchspin', function(ev) {
10116          elements.down.off('touchstart.touchspin');  // android 4 workaround
10117
10118          if (originalinput.is(':disabled')) {
10119            return;
10120          }
10121
10122          downOnce();
10123          startDownSpin();
10124
10125          ev.preventDefault();
10126          ev.stopPropagation();
10127        });
10128
10129        elements.down.on('touchstart.touchspin', function(ev) {
10130          elements.down.off('mousedown.touchspin');  // android 4 workaround
10131
10132          if (originalinput.is(':disabled')) {
10133            return;
10134          }
10135
10136          downOnce();
10137          startDownSpin();
10138
10139          ev.preventDefault();
10140          ev.stopPropagation();
10141        });
10142
10143        elements.up.on('mousedown.touchspin', function(ev) {
10144          elements.up.off('touchstart.touchspin');  // android 4 workaround
10145
10146          if (originalinput.is(':disabled')) {
10147            return;
10148          }
10149
10150          upOnce();
10151          startUpSpin();
10152
10153          ev.preventDefault();
10154          ev.stopPropagation();
10155        });
10156
10157        elements.up.on('touchstart.touchspin', function(ev) {
10158          elements.up.off('mousedown.touchspin');  // android 4 workaround
10159
10160          if (originalinput.is(':disabled')) {
10161            return;
10162          }
10163
10164          upOnce();
10165          startUpSpin();
10166
10167          ev.preventDefault();
10168          ev.stopPropagation();
10169        });
10170
10171        elements.up.on('mouseout touchleave touchend touchcancel', function(ev) {
10172          if (!spinning) {
10173            return;
10174          }
10175
10176          ev.stopPropagation();
10177          stopSpin();
10178        });
10179
10180        elements.down.on('mouseout touchleave touchend touchcancel', function(ev) {
10181          if (!spinning) {
10182            return;
10183          }
10184
10185          ev.stopPropagation();
10186          stopSpin();
10187        });
10188
10189        elements.down.on('mousemove touchmove', function(ev) {
10190          if (!spinning) {
10191            return;
10192          }
10193
10194          ev.stopPropagation();
10195          ev.preventDefault();
10196        });
10197
10198        elements.up.on('mousemove touchmove', function(ev) {
10199          if (!spinning) {
10200            return;
10201          }
10202
10203          ev.stopPropagation();
10204          ev.preventDefault();
10205        });
10206
10207        $(document).on(_scopeEventNames(['mouseup', 'touchend', 'touchcancel'], _currentSpinnerId).join(' '), function(ev) {
10208          if (!spinning) {
10209            return;
10210          }
10211
10212          ev.preventDefault();
10213          stopSpin();
10214        });
10215
10216        $(document).on(_scopeEventNames(['mousemove', 'touchmove', 'scroll', 'scrollstart'], _currentSpinnerId).join(' '), function(ev) {
10217          if (!spinning) {
10218            return;
10219          }
10220
10221          ev.preventDefault();
10222          stopSpin();
10223        });
10224
10225        originalinput.on('mousewheel DOMMouseScroll', function(ev) {
10226          if (!settings.mousewheel || !originalinput.is(':focus')) {
10227            return;
10228          }
10229
10230          var delta = ev.originalEvent.wheelDelta || -ev.originalEvent.deltaY || -ev.originalEvent.detail;
10231
10232          ev.stopPropagation();
10233          ev.preventDefault();
10234
10235          if (delta < 0) {
10236            downOnce();
10237          }
10238          else {
10239            upOnce();
10240          }
10241        });
10242      }
10243
10244      function _bindEventsInterface() {
10245        originalinput.on('touchspin.uponce', function() {
10246          stopSpin();
10247          upOnce();
10248        });
10249
10250        originalinput.on('touchspin.downonce', function() {
10251          stopSpin();
10252          downOnce();
10253        });
10254
10255        originalinput.on('touchspin.startupspin', function() {
10256          startUpSpin();
10257        });
10258
10259        originalinput.on('touchspin.startdownspin', function() {
10260          startDownSpin();
10261        });
10262
10263        originalinput.on('touchspin.stopspin', function() {
10264          stopSpin();
10265        });
10266
10267        originalinput.on('touchspin.updatesettings', function(e, newsettings) {
10268          changeSettings(newsettings);
10269        });
10270      }
10271
10272      function _forcestepdivisibility(value) {
10273        switch (settings.forcestepdivisibility) {
10274          case 'round':
10275            return (Math.round(value / settings.step) * settings.step).toFixed(settings.decimals);
10276          case 'floor':
10277            return (Math.floor(value / settings.step) * settings.step).toFixed(settings.decimals);
10278          case 'ceil':
10279            return (Math.ceil(value / settings.step) * settings.step).toFixed(settings.decimals);
10280          default:
10281            return value;
10282        }
10283      }
10284
10285      function _checkValue() {
10286        var val, parsedval, returnval;
10287
10288        val = originalinput.val();
10289
10290        if (val === '') {
10291          if (settings.replacementval !== '') {
10292            originalinput.val(settings.replacementval);
10293            originalinput.trigger('change');
10294          }
10295          return;
10296        }
10297
10298        if (settings.decimals > 0 && val === '.') {
10299          return;
10300        }
10301
10302        parsedval = parseFloat(val);
10303
10304        if (isNaN(parsedval)) {
10305          if (settings.replacementval !== '') {
10306            parsedval = settings.replacementval;
10307          }
10308          else {
10309            parsedval = 0;
10310          }
10311        }
10312
10313        returnval = parsedval;
10314
10315        if (parsedval.toString() !== val) {
10316          returnval = parsedval;
10317        }
10318
10319        if (parsedval < settings.min) {
10320          returnval = settings.min;
10321        }
10322
10323        if (parsedval > settings.max) {
10324          returnval = settings.max;
10325        }
10326
10327        returnval = _forcestepdivisibility(returnval);
10328
10329        if (Number(val).toString() !== returnval.toString()) {
10330          originalinput.val(returnval);
10331          originalinput.trigger('change');
10332        }
10333      }
10334
10335      function _getBoostedStep() {
10336        if (!settings.booster) {
10337          return settings.step;
10338        }
10339        else {
10340          var boosted = Math.pow(2, Math.floor(spincount / settings.boostat)) * settings.step;
10341
10342          if (settings.maxboostedstep) {
10343            if (boosted > settings.maxboostedstep) {
10344              boosted = settings.maxboostedstep;
10345              value = Math.round((value / boosted)) * boosted;
10346            }
10347          }
10348
10349          return Math.max(settings.step, boosted);
10350        }
10351      }
10352
10353      function upOnce() {
10354        _checkValue();
10355
10356        value = parseFloat(elements.input.val());
10357        if (isNaN(value)) {
10358          value = 0;
10359        }
10360
10361        var initvalue = value,
10362            boostedstep = _getBoostedStep();
10363
10364        value = value + boostedstep;
10365
10366        if (value > settings.max) {
10367          value = settings.max;
10368          originalinput.trigger('touchspin.on.max');
10369          stopSpin();
10370        }
10371
10372        elements.input.val(Number(value).toFixed(settings.decimals));
10373
10374        if (initvalue !== value) {
10375          originalinput.trigger('change');
10376        }
10377      }
10378
10379      function downOnce() {
10380        _checkValue();
10381
10382        value = parseFloat(elements.input.val());
10383        if (isNaN(value)) {
10384          value = 0;
10385        }
10386
10387        var initvalue = value,
10388            boostedstep = _getBoostedStep();
10389
10390        value = value - boostedstep;
10391
10392        if (value < settings.min) {
10393          value = settings.min;
10394          originalinput.trigger('touchspin.on.min');
10395          stopSpin();
10396        }
10397
10398        elements.input.val(value.toFixed(settings.decimals));
10399
10400        if (initvalue !== value) {
10401          originalinput.trigger('change');
10402        }
10403      }
10404
10405      function startDownSpin() {
10406        stopSpin();
10407
10408        spincount = 0;
10409        spinning = 'down';
10410
10411        originalinput.trigger('touchspin.on.startspin');
10412        originalinput.trigger('touchspin.on.startdownspin');
10413
10414        downDelayTimeout = setTimeout(function() {
10415          downSpinTimer = setInterval(function() {
10416            spincount++;
10417            downOnce();
10418          }, settings.stepinterval);
10419        }, settings.stepintervaldelay);
10420      }
10421
10422      function startUpSpin() {
10423        stopSpin();
10424
10425        spincount = 0;
10426        spinning = 'up';
10427
10428        originalinput.trigger('touchspin.on.startspin');
10429        originalinput.trigger('touchspin.on.startupspin');
10430
10431        upDelayTimeout = setTimeout(function() {
10432          upSpinTimer = setInterval(function() {
10433            spincount++;
10434            upOnce();
10435          }, settings.stepinterval);
10436        }, settings.stepintervaldelay);
10437      }
10438
10439      function stopSpin() {
10440        clearTimeout(downDelayTimeout);
10441        clearTimeout(upDelayTimeout);
10442        clearInterval(downSpinTimer);
10443        clearInterval(upSpinTimer);
10444
10445        switch (spinning) {
10446          case 'up':
10447            originalinput.trigger('touchspin.on.stopupspin');
10448            originalinput.trigger('touchspin.on.stopspin');
10449            break;
10450          case 'down':
10451            originalinput.trigger('touchspin.on.stopdownspin');
10452            originalinput.trigger('touchspin.on.stopspin');
10453            break;
10454        }
10455
10456        spincount = 0;
10457        spinning = false;
vendor: 6,997 bytes, lines 10458-10467
10458      }
10459
10460    });
10461
10462  };
10463
10464})(jQuery);
10465/*! nanoScrollerJS - v0.8.7 - (c) 2015 James Florentino; Licensed MIT */
10466
10467!function(a){return"function"==typeof define&&define.amd?define(["jquery"],function(b){return a(b,window,document)}):"object"==typeof exports?module.exports=a(require("jquery"),window,document):a(jQuery,window,document)}(function(a,b,c){"use strict";var d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H;z={paneClass:"nano-pane",sliderClass:"nano-slider",contentClass:"nano-content",enabledClass:"has-scrollbar",flashedClass:"flashed",activeClass:"active",iOSNativeScrolling:!1,preventPageScrolling:!1,disableResize:!1,alwaysVisible:!1,flashDelay:1500,sliderMinHeight:20,sliderMaxHeight:null,documentContext:null,windowContext:null},u="scrollbar",t="scroll",l="mousedown",m="mouseenter",n="mousemove",p="mousewheel",o="mouseup",s="resize",h="drag",i="enter",w="up",r="panedown",f="DOMMouseScroll",g="down",x="wheel",j="keydown",k="keyup",v="touchmove",d="Microsoft Internet Explorer"===b.navigator.appName&&/msie 7./i.test(b.navigator.appVersion)&&b.ActiveXObject,e=null,D=b.requestAnimationFrame,y=b.cancelAnimationFrame,F=c.createElement("div").style,H=function(){var a,b,c,d,e,f;for(d=["t","webkitT","MozT","msT","OT"],a=e=0,f=d.length;f>e;a=++e)if(c=d[a],b=d[a]+"ransform",b in F)return d[a].substr(0,d[a].length-1);return!1}(),G=function(a){return H===!1?!1:""===H?a:H+a.charAt(0).toUpperCase()+a.substr(1)},E=G("transform"),B=E!==!1,A=function(){var a,b,d;return a=c.createElement("div"),b=a.style,b.position="absolute",b.width="100px",b.height="100px",b.overflow=t,b.top="-9999px",c.body.appendChild(a),d=a.offsetWidth-a.clientWidth,c.body.removeChild(a),d},C=function(){var a,c,d;return c=b.navigator.userAgent,(a=/(?=.+Mac OS X)(?=.+Firefox)/.test(c))?(d=/Firefox\/\d{2}\./.exec(c),d&&(d=d[0].replace(/\D+/g,"")),a&&+d>23):!1},q=function(){function j(d,f){this.el=d,this.options=f,e||(e=A()),this.$el=a(this.el),this.doc=a(this.options.documentContext||c),this.win=a(this.options.windowContext||b),this.body=this.doc.find("body"),this.$content=this.$el.children("."+this.options.contentClass),this.$content.attr("tabindex",this.options.tabIndex||0),this.content=this.$content[0],this.previousPosition=0,this.options.iOSNativeScrolling&&null!=this.el.style.WebkitOverflowScrolling?this.nativeScrolling():this.generate(),this.createEvents(),this.addEvents(),this.reset()}return j.prototype.preventScrolling=function(a,b){if(this.isActive)if(a.type===f)(b===g&&a.originalEvent.detail>0||b===w&&a.originalEvent.detail<0)&&a.preventDefault();else if(a.type===p){if(!a.originalEvent||!a.originalEvent.wheelDelta)return;(b===g&&a.originalEvent.wheelDelta<0||b===w&&a.originalEvent.wheelDelta>0)&&a.preventDefault()}},j.prototype.nativeScrolling=function(){this.$content.css({WebkitOverflowScrolling:"touch"}),this.iOSNativeScrolling=!0,this.isActive=!0},j.prototype.updateScrollValues=function(){var a,b;a=this.content,this.maxScrollTop=a.scrollHeight-a.clientHeight,this.prevScrollTop=this.contentScrollTop||0,this.contentScrollTop=a.scrollTop,b=this.contentScrollTop>this.previousPosition?"down":this.contentScrollTop<this.previousPosition?"up":"same",this.previousPosition=this.contentScrollTop,"same"!==b&&this.$el.trigger("update",{position:this.contentScrollTop,maximum:this.maxScrollTop,direction:b}),this.iOSNativeScrolling||(this.maxSliderTop=this.paneHeight-this.sliderHeight,this.sliderTop=0===this.maxScrollTop?0:this.contentScrollTop*this.maxSliderTop/this.maxScrollTop)},j.prototype.setOnScrollStyles=function(){var a;B?(a={},a[E]="translate(0, "+this.sliderTop+"px)"):a={top:this.sliderTop},D?(y&&this.scrollRAF&&y(this.scrollRAF),this.scrollRAF=D(function(b){return function(){return b.scrollRAF=null,b.slider.css(a)}}(this))):this.slider.css(a)},j.prototype.createEvents=function(){this.events={down:function(a){return function(b){return a.isBeingDragged=!0,a.offsetY=b.pageY-a.slider.offset().top,a.slider.is(b.target)||(a.offsetY=0),a.pane.addClass(a.options.activeClass),a.doc.bind(n,a.events[h]).bind(o,a.events[w]),a.body.bind(m,a.events[i]),!1}}(this),drag:function(a){return function(b){return a.sliderY=b.pageY-a.$el.offset().top-a.paneTop-(a.offsetY||.5*a.sliderHeight),a.scroll(),a.contentScrollTop>=a.maxScrollTop&&a.prevScrollTop!==a.maxScrollTop?a.$el.trigger("scrollend"):0===a.contentScrollTop&&0!==a.prevScrollTop&&a.$el.trigger("scrolltop"),!1}}(this),up:function(a){return function(b){return a.isBeingDragged=!1,a.pane.removeClass(a.options.activeClass),a.doc.unbind(n,a.events[h]).unbind(o,a.events[w]),a.body.unbind(m,a.events[i]),!1}}(this),resize:function(a){return function(b){a.reset()}}(this),panedown:function(a){return function(b){return a.sliderY=(b.offsetY||b.originalEvent.layerY)-.5*a.sliderHeight,a.scroll(),a.events.down(b),!1}}(this),scroll:function(a){return function(b){a.updateScrollValues(),a.isBeingDragged||(a.iOSNativeScrolling||(a.sliderY=a.sliderTop,a.setOnScrollStyles()),null!=b&&(a.contentScrollTop>=a.maxScrollTop?(a.options.preventPageScrolling&&a.preventScrolling(b,g),a.prevScrollTop!==a.maxScrollTop&&a.$el.trigger("scrollend")):0===a.contentScrollTop&&(a.options.preventPageScrolling&&a.preventScrolling(b,w),0!==a.prevScrollTop&&a.$el.trigger("scrolltop"))))}}(this),wheel:function(a){return function(b){var c;if(null!=b)return c=b.delta||b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.detail||b.originalEvent&&-b.originalEvent.detail,c&&(a.sliderY+=-c/3),a.scroll(),!1}}(this),enter:function(a){return function(b){var c;if(a.isBeingDragged)return 1!==(b.buttons||b.which)?(c=a.events)[w].apply(c,arguments):void 0}}(this)}},j.prototype.addEvents=function(){var a;this.removeEvents(),a=this.events,this.options.disableResize||this.win.bind(s,a[s]),this.iOSNativeScrolling||(this.slider.bind(l,a[g]),this.pane.bind(l,a[r]).bind(""+p+" "+f,a[x])),this.$content.bind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.removeEvents=function(){var a;a=this.events,this.win.unbind(s,a[s]),this.iOSNativeScrolling||(this.slider.unbind(),this.pane.unbind()),this.$content.unbind(""+t+" "+p+" "+f+" "+v,a[t])},j.prototype.generate=function(){var a,c,d,f,g,h,i;return f=this.options,h=f.paneClass,i=f.sliderClass,a=f.contentClass,(g=this.$el.children("."+h)).length||g.children("."+i).length||this.$el.append('<div class="'+h+'"><div class="'+i+'" /></div>'),this.pane=this.$el.children("."+h),this.slider=this.pane.find("."+i),0===e&&C()?(d=b.getComputedStyle(this.content,null).getPropertyValue("padding-right").replace(/[^0-9.]+/g,""),c={right:-14,paddingRight:+d+14}):e&&(c={right:-e},this.$el.addClass(f.enabledClass)),null!=c&&this.$content.css(c),this},j.prototype.restore=function(){this.stopped=!1,this.iOSNativeScrolling||this.pane.show(),this.addEvents()},j.prototype.reset=function(){var a,b,c,f,g,h,i,j,k,l,m,n;return this.iOSNativeScrolling?void(this.contentHeight=this.content.scrollHeight):(this.$el.find("."+this.options.paneClass).length||this.generate().stop(),this.stopped&&this.restore(
10467),a=this.content,f=a.style,g=f.overflowY,d&&this.$content.css({height:this.$content.height()}),b=a.scrollHeight+e,l=parseInt(this.$el.css("max-height"),10),l>0&&(this.$el.height(""),this.$el.height(a.scrollHeight>l?l:a.scrollHeight)),i=this.pane.outerHeight(!1),k=parseInt(this.pane.css("top"),10),h=parseInt(this.pane.css("bottom"),10),j=i+k+h,n=Math.round(j/b*i),n<this.options.sliderMinHeight?n=this.options.sliderMinHeight:null!=this.options.sliderMaxHeight&&n>this.options.sliderMaxHeight&&(n=this.options.sliderMaxHeight),g===t&&f.overflowX!==t&&(n+=e),this.maxSliderTop=j-n,this.contentHeight=b,this.paneHeight=i,this.paneOuterHeight=j,this.sliderHeight=n,this.paneTop=k,this.slider.height(n),this.events.scroll(),this.pane.show(),this.isActive=!0,a.scrollHeight===a.clientHeight||this.pane.outerHeight(!0)>=a.scrollHeight&&g!==t?(this.pane.hide(),this.isActive=!1):this.el.clientHeight===a.scrollHeight&&g===t?this.slider.hide():this.slider.show(),this.pane.css({opacity:this.options.alwaysVisible?1:"",visibility:this.options.alwaysVisible?"visible":""}),c=this.$content.css("position"),("static"===c||"relative"===c)&&(m=parseInt(this.$content.css("right"),10),m&&this.$content.css({right:"",marginRight:m})),this)},j.prototype.scroll=function(){return this.isActive?(this.sliderY=Math.max(0,this.sliderY),this.sliderY=Math.min(this.maxSliderTop,this.sliderY),this.$content.scrollTop(this.maxScrollTop*this.sliderY/this.maxSliderTop),this.iOSNativeScrolling||(this.updateScrollValues(),this.setOnScrollStyles()),this):void 0},j.prototype.scrollBottom=function(a){return this.isActive?(this.$content.scrollTop(this.contentHeight-this.$content.height()-a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTop=function(a){return this.isActive?(this.$content.scrollTop(+a).trigger(p),this.stop().restore(),this):void 0},j.prototype.scrollTo=function(a){return this.isActive?(this.scrollTop(this.$el.find(a).get(0).offsetTop),this):void 0},j.prototype.stop=function(){return y&&this.scrollRAF&&(y(this.scrollRAF),this.scrollRAF=null),this.stopped=!0,this.removeEvents(),this.iOSNativeScrolling||this.pane.hide(),this},j.prototype.destroy=function(){return this.stopped||this.stop(),!this.iOSNativeScrolling&&this.pane.length&&this.pane.remove(),d&&this.$content.height(""),this.$content.removeAttr("tabindex"),this.$el.hasClass(this.options.enabledClass)&&(this.$el.removeClass(this.options.enabledClass),this.$content.css({right:""})),this},j.prototype.flash=function(){return!this.iOSNativeScrolling&&this.isActive?(this.reset(),this.pane.addClass(this.options.flashedClass),setTimeout(function(a){return function(){a.pane.removeClass(a.options.flashedClass)}}(this),this.options.flashDelay),this):void 0},j}(),a.fn.nanoScroller=function(b){return this.each(function(){var c,d;if((d=this.nanoscroller)||(c=a.extend({},z,b),this.nanoscroller=d=new q(this,c)),b&&"object"==typeof b){if(a.extend(d.options,b),null!=b.scrollBottom)return d.scrollBottom(b.scrollBottom);if(null!=b.scrollTop)return d.scrollTop(b.scrollTop);if(b.scrollTo)return d.scrollTo(b.scrollTo);if("bottom"===b.scroll)return d.scrollBottom(0);if("top"===b.scroll)return d.scrollTop(0);if(b.scroll&&b.scroll instanceof a)return d.scrollTo(b.scroll);if(b.stop)return d.stop();if(b.destroy)return d.destroy();if(b.flash)return d.flash()}return d.reset()})},a.fn.nanoScroller.Constructor=q});/*!
10468 * Smooth Scroll - v1.4.10 - 2013-03-02
10469 * https://github.com/kswedberg/jquery-smooth-scroll
10470 * Copyright (c) 2013 Karl Swedberg
10471 * Licensed MIT (https://github.com/kswedberg/jquery-smooth-scroll/blob/master/LICENSE-MIT)
10472 */
10473(function(l){function t(l){return l.replace(/(:|\.)/g,"\\$1")}var e="1.4.10",o={exclude:[],excludeWithin:[],offset:0,direction:"top",scrollElement:null,scrollTarget:null,beforeScroll:function(){},afterScroll:function(){},easing:"swing",speed:400,autoCoefficent:2},r=function(t){var e=[],o=!1,r=t.dir&&"left"==t.dir?"scrollLeft":"scrollTop";return this.each(function(){if(this!=document&&this!=window){var t=l(this);t[r]()>0?e.push(this):(t[r](1),o=t[r]()>0,o&&e.push(this),t[r](0))}}),e.length||this.each(function(){"BODY"===this.nodeName&&(e=[this])}),"first"===t.el&&e.length>1&&(e=[e[0]]),e};l.fn.extend({scrollable:function(l){var t=r.call(this,{dir:l});return this.pushStack(t)},firstScrollable:function(l){var t=r.call(this,{el:"first",dir:l});return this.pushStack(t)},smoothScroll:function(e){e=e||{};var o=l.extend({},l.fn.smoothScroll.defaults,e),r=l.smoothScroll.filterPath(location.pathname);return this.unbind("click.smoothscroll").bind("click.smoothscroll",function(e){var n=this,s=l(this),c=o.exclude,i=o.excludeWithin,a=0,f=0,h=!0,u={},d=location.hostname===n.hostname||!n.hostname,m=o.scrollTarget||(l.smoothScroll.filterPath(n.pathname)||r)===r,p=t(n.hash);if(o.scrollTarget||d&&m&&p){for(;
10473h&&c.length>a;)s.is(t(c[a++]))&&(h=!1);for(;h&&i.length>f;)s.closest(i[f++]).length&&(h=!1)}else h=!1;h&&(e.preventDefault(),l.extend(u,o,{scrollTarget:o.scrollTarget||p,link:n}),l.smoothScroll(u))}),this}}),l.smoothScroll=function(t,e){var o,r,n,s,c=0,i="offset",a="scrollTop",f={},h={};"number"==typeof t?(o=l.fn.smoothScroll.defaults,n=t):(o=l.extend({},l.fn.smoothScroll.defaults,t||{}),o.scrollElement&&(i="position","static"==o.scrollElement.css("position")&&o.scrollElement.css("position","relative"))),o=l.extend({link:null},o),a="left"==o.direction?"scrollLeft":a,o.scrollElement?(r=o.scrollElement,c=r[a]()):r=l("html, body").firstScrollable(),o.beforeScroll.call(r,o),n="number"==typeof t?t:e||l(o.scrollTarget)[i]()&&l(o.scrollTarget)[i]()[o.direction]||0,f[a]=n+c+o.offset,s=o.speed,"auto"===s&&(s=f[a]||r.scrollTop(),s/=o.autoCoefficent),h={duration:s,easing:o.easing,complete:function(){o.afterScroll.call(o.link,o)}},o.step&&(h.step=o.step),r.length?r.stop().animate(f,h):o.afterScroll.call(o.link,o)},l.smoothScroll.version=e,l.smoothScroll.filterPath=function(l){return l.replace(/^\//,"").replace(/(index|default).[a-zA-Z]{3,4}$/,"").replace(/\/$/,"")},l.fn.smoothScroll.defaults=o})(jQuery);/*! tooltipster v4.2.6 */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){function b(a){this.$container,this.constraints=null,this.__$tooltip,this.__init(a)}function c(b,c){var d=!0;return a.each(b,function(a,e){return void 0===c[a]||b[a]!==c[a]?(d=!1,!1):void 0}),d}function d(b){var c=b.attr("id"),d=c?h.window.document.getElementById(c):null;return d?d===b[0]:a.contains(h.window.document.body,b[0])}function e(){if(!g)return!1;var a=g.document.body||g.document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e<d.length;e++)if("string"==typeof b[d[e]+c])return!0;return!1}var f={animation:"fade",animationDuration:350,content:null,contentAsHTML:!1,contentCloning:!1,debug:!0,delay:300,delayTouch:[300,500],functionInit:null,functionBefore:null,functionReady:null,functionAfter:null,functionFormat:null,IEmin:6,interactive:!1,multiple:!1,parent:null,plugins:["sideTip"],repositionOnScroll:!1,restoration:"none",selfDestruction:!0,theme:[],timer:0,trackerInterval:500,trackOrigin:!1,trackTooltip:!1,trigger:"hover",triggerClose:{click:!1,mouseleave:!1,originClick:!1,scroll:!1,tap:!1,touchleave:!1},triggerOpen:{click:!1,mouseenter:!1,tap:!1,touchstart:!1},updateAnimation:"rotate",zIndex:9999999},g="undefined"!=typeof window?window:null,h={hasTouchCapability:!(!g||!("ontouchstart"in g||g.DocumentTouch&&g.document instanceof g.DocumentTouch||g.navigator.maxTouchPoints)),hasTransitions:e(),IE:!1,semVer:"4.2.6
vendor: 28,893 bytes, line 10473
10473",window:g},i=function(){this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__instancesLatestArr=[],this.__plugins={},this._env=h};i.prototype={__bridge:function(b,c,d){if(!c[d]){var e=function(){};e.prototype=b;var g=new e;g.__init&&g.__init(c),a.each(b,function(a,b){0!=a.indexOf("__")&&(c[a]?f.debug&&console.log("The "+a+" method of the "+d+" plugin conflicts with another plugin or native methods"):(c[a]=function(){return g[a].apply(g,Array.prototype.slice.apply(arguments))},c[a].bridged=g))}),c[d]=g}return this},__setWindow:function(a){return h.window=a,this},_getRuler:function(a){return new b(a)},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_plugin:function(b){var c=this;if("string"==typeof b){var d=b,e=null;return d.indexOf(".")>0?e=c.__plugins[d]:a.each(c.__plugins,function(a,b){return b.name.substring(b.name.length-d.length-1)=="."+d?(e=b,!1):void 0}),e}if(b.name.indexOf(".")<0)throw new Error("Plugins must be namespaced");return c.__plugins[b.name]=b,b.core&&c.__bridge(b.core,c,b.name),this},_trigger:function(){var a=Array.prototype.slice.apply(arguments);return"string"==typeof a[0]&&(a[0]={type:a[0]}),this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,a),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,a),this},instances:function(b){var c=[],d=b||".tooltipstered";return a(d).each(function(){var b=a(this),d=b.data("tooltipster-ns");d&&a.each(d,function(a,d){c.push(b.data(d))})}),c},instancesLatest:function(){return this.__instancesLatestArr},off:function(){return this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},origins:function(b){var c=b?b+" ":"";return a(c+".tooltipstered").toArray()},setDefaults:function(b){return a.extend(f,b),this},triggerHandler:function(){return this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.tooltipster=new i,a.Tooltipster=function(b,c){this.__callbacks={close:[],open:[]},this.__closingTime,this.__Content,this.__contentBcr,this.__destroyed=!1,this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__enabled=!0,this.__garbageCollector,this.__Geometry,this.__lastPosition,this.__namespace="tooltipster-"+Math.round(1e6*Math.random()),this.__options,this.__$originParents,this.__pointerIsOverOrigin=!1,this.__previousThemes=[],this.__state="closed",this.__timeouts={close:[],open:null},this.__touchEvents=[],this.__tracker=null,this._$origin,this._$tooltip,this.__init(b,c)},a.Tooltipster.prototype={__init:function(b,c){var d=this;if(d._$origin=a(b),d.__options=a.extend(!0,{},f,c),d.__optionsFormat(),!h.IE||h.IE>=d.__options.IEmin){var e=null;if(void 0===d._$origin.data("tooltipster-initialTitle")&&(e=d._$origin.attr("title"),void 0===e&&(e=null),d._$origin.data("tooltipster-initialTitle",e)),null!==d.__options.content)d.__contentSet(d.__options.content);else{var g,i=d._$origin.attr("data-tooltip-content");i&&(g=a(i)),g&&g[0]?d.__contentSet(g.first()):d.__contentSet(e)}d._$origin.removeAttr("title").addClass("tooltipstered"),d.__prepareOrigin(),d.__prepareGC(),a.each(d.__options.plugins,function(a,b){d._plug(b)}),h.hasTouchCapability&&a(h.window.document.body).on("touchmove."+d.__namespace+"-triggerOpen",function(a){d._touchRecordEvent(a)}),d._on("created",function(){d.__prepareTooltip()})._on("repositioned",function(a){d.__lastPosition=a.position})}else d.__options.disabled=!0},__contentInsert:function(){var a=this,b=a._$tooltip.find(".tooltipster-content"),c=a.__Content,d=function(a){c=a};return a._trigger({type:"format",content:a.__Content,format:d}),a.__options.functionFormat&&(c=a.__options.functionFormat.call(a,a,{origin:a._$origin[0]},a.__Content)),"string"!=typeof c||a.__options.contentAsHTML?b.empty().append(c):b.text(c),a},__contentSet:function(b){return b instanceof a&&this.__options.contentCloning&&(b=b.clone(!0)),this.__Content=b,this._trigger({type:"updated",content:b}),this},__destroyError:function(){throw new Error("This tooltip has been destroyed and cannot execute your method call.")},__geometry:function(){var b=this,c=b._$origin,d=b._$origin.is("area");if(d){var e=b._$origin.parent().attr("name");c=a('img[usemap="#'+e+'"]')}var f=c[0].getBoundingClientRect(),g=a(h.window.document),i=a(h.window),j=c,k={available:{document:null,window:null},document:{size:{height:g.height(),width:g.width()}},window:{scroll:{left:h.window.scrollX||h.window.document.documentElement.scrollLeft,top:h.window.scrollY||h.window.document.documentElement.scrollTop},size:{height:i.height(),width:i.width()}},origin:{fixedLineage:!1,offset:{},size:{height:f.bottom-f.top,width:f.right-f.left},usemapImage:d?c[0]:null,windowOffset:{bottom:f.bottom,left:f.left,right:f.right,top:f.top}}};if(d){var l=b._$origin.attr("shape"),m=b._$origin.attr("coords");if(m&&(m=m.split(","),a.map(m,function(a,b){m[b]=parseInt(a)})),"default"!=l)switch(l){case"circle":var n=m[0],o=m[1],p=m[2],q=o-p,r=n-p;k.origin.size.height=2*p,k.origin.size.width=k.origin.size.height,k.origin.windowOffset.left+=r,k.origin.windowOffset.top+=q;break;case"rect":var s=m[0],t=m[1],u=m[2],v=m[3];k.origin.size.height=v-t,k.origin.size.width=u-s,k.origin.windowOffset.left+=s,k.origin.windowOffset.top+=t;break;case"poly":for(var w=0,x=0,y=0,z=0,A="even",B=0;B<m.length;B++){var C=m[B];"even"==A?(C>y&&(y=C,0===B&&(w=y)),w>C&&(w=C),A="odd"):(C>z&&(z=C,1==B&&(x=z)),x>C&&(x=C),A="even")}k.origin.size.height=z-x,k.origin.size.width=y-w,k.origin.windowOffset.left+=w,k.origin.windowOffset.top+=x}}var D=function(a){k.origin.size.height=a.height,k.origin.windowOffset.left=a.left,k.origin.windowOffset.top=a.top,k.origin.size.width=a.width};for(b._trigger({type:"geometry",edit:D,geometry:{height:k.origin.size.height,left:k.origin.windowOffset.left,top:k.origin.windowOffset.top,width:k.origin.size.width}}),k.origin.windowOffset.right=k.origin.windowOffset.left+k.origin.size.width,k.origin.windowOffset.bottom=k.origin.windowOffset.top+k.origin.size.height,k.origin.offset.left=k.origin.windowOffset.left+k.window.scroll.left,k.origin.offset.top=k.origin.windowOffset.top+k.window.scroll.top,k.origin.offset.bottom=k.origin.offset.top+k.origin.size.height,k.origin.offset.right=k.origin.offset.left+k.origin.size.width,k.available.document={bottom:{height:k.document.size.height-k.origin.offset.bottom,width:k.document.size.width},left:{height:k.document.size.height,width:k.origin.offset.left},right:{height:k.document.size.height,width:k.document.size.width-k.origin.offset.right},top:{height:k.origin.offset.top,width:k.document.size.width}},k.available.window={bottom:{height:Math.max(k.window.size.height-Math.max(k.origin.windowOffset.bottom,0),0),width:k.window.size.width},left:{height:k.window.size.height,width:Math.max(k.origin.windowOffset.left,0)},right:{height:k.window.size.height,width:Math.max(k.window.size.width-Math.max(k.origin.windowOffset.right,0),0)},top:{height:Math.max(k.origin.windowOffset.top,0),width:k.window.size.width}};"html"!=j[0].tagName.toLowerCase();){if("fixed"==j.css("position")){k.origin.fixedLineage=!0;break}j=j.parent()}return k},__optionsFormat:function(){return"number"==typeof this.__options.animationDuration&&(this.__options.animationDuration=[this.__options.animationDuration,this.__options.animationDuration]),"number"==typeof this.__options.delay&&(this.__options.delay=[this.__options.delay,this.__options.delay]),"number"==typeof this.__options.delayTouch&&(this.__options.delayTouch=[this.__options.delayTouch,this.__options.delayTouch]),"string"==typeof this.__options.theme&&(this.__options.theme=[this.__options.theme]),null===this.__options.parent?this.__options.parent=a(h.window.document.body):"string"==typeof this.__options.parent&&(this.__options.parent=a(this.__options.parent)),"hover"==this.__options.trigger?(this.__options.triggerOpen={mouseenter:!0,touchstart:!0},this.__options.triggerClose={mouseleave:!0,originClick:!0,touchleave:!0}):"click"==this.__options.trigger&&(this.__options.triggerOpen={click:!0,tap:!0},this.__options.triggerClose={click:!0,tap:!0}),this._trigger("options"),this},__prepareGC:function(){var b=this;return b.__options.selfDestruction?b.__garbageCollector=setInterval(function(){var c=(new Date).getTime();b.__touchEvents=a.grep(b.__touchEvents,function(a,b){return c-a.time>6e4}),d(b._$origin)||b.close(function(){b.destroy()})},2e4):clearInterval(b.__garbageCollector),b},__prepareOrigin:function(){var a=this;if(a._$origin.off("."+a.__namespace+"-triggerOpen"),h.hasTouchCapability&&a._$origin.on("touchstart."+a.__namespace+"-triggerOpen touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen",function(b){a._touchRecordEvent(b)}),a.__options.triggerOpen.click||a.__options.triggerOpen.tap&&h.hasTouchCapability){var b="";a.__options.triggerOpen.click&&(b+="click."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.tap&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&a._open(b)})}if(a.__options.triggerOpen.mouseenter||a.__options.triggerOpen.touchstart&&h.hasTouchCapability){var b="";a.__options.triggerOpen.mouseenter&&(b+="mouseenter."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.touchstart&&h.hasTouchCapability&&(b+="touchstart."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){!a._touchIsTouchEvent(b)&&a._touchIsEmulatedEvent(b)||(a.__pointerIsOverOrigin=!0,a._openShortly(b))})}if(a.__options.triggerClose.mouseleave||a.__options.triggerClose.touchleave&&h.hasTouchCapability){var b="";a.__options.triggerClose.mouseleave&&(b+="mouseleave."+a.__namespace+"-triggerOpen "),a.__options.triggerClose.touchleave&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&(a.__pointerIsOverOrigin=!1)})}return a},__prepareTooltip:function(){var b=this,c=b.__options.interactive?"auto":"";return b._$tooltip.attr("id",b.__namespace).css({"pointer-events":c,zIndex:b.__options.zIndex}),a.each(b.__previousThemes,function(a,c){b._$tooltip.removeClass(c)}),a.each(b.__options.theme,function(a,c){b._$tooltip.addClass(c)}),b.__previousThemes=a.merge([],b.__options.theme),b},__scrollHandler:function(b){var c=this;if(c.__options.triggerClose.scroll)c._close(b);else if(d(c._$origin)&&d(c._$tooltip)){var e=null;if(b.target===h.window.document)c.__Geometry.origin.fixedLineage||c.__options.repositionOnScroll&&c.reposition(b);else{e=c.__geometry();var f=!1;if("fixed"!=c._$origin.css("position")&&c.__$originParents.each(function(b,c){var d=a(c),g=d.css("overflow-x"),h=d.css("overflow-y");if("visible"!=g||"visible"!=h){var i=c.getBoundingClientRect();if("visible"!=g&&(e.origin.windowOffset.left<i.left||e.origin.windowOffset.right>i.right))return f=!0,!1;if("visible"!=h&&(e.origin.windowOffset.top<i.top||e.origin.windowOffset.bottom>i.bottom))return f=!0,!1}return"fixed"==d.css("position")?!1:void 0}),f)c._$tooltip.css("visibility","hidden");else if(c._$tooltip.css("visibility","visible"),c.__options.repositionOnScroll)c.reposition(b);else{var g=e.origin.offset.left-c.__Geometry.origin.offset.left,i=e.origin.offset.top-c.__Geometry.origin.offset.top;c._$tooltip.css({left:c.__lastPosition.coord.left+g,top:c.__lastPosition.coord.top+i})}}c._trigger({type:"scroll",event:b,geo:e})}return c},__stateSet:function(a){return this.__state=a,this._trigger({type:"state",state:a}),this},__timeoutsClear:function(){return clearTimeout(this.__timeouts.open),this.__timeouts.open=null,a.each(this.__timeouts.close,function(a,b){clearTimeout(b)}),this.__timeouts.close=[],this},__trackerStart:function(){var a=this,b=a._$tooltip.find(".tooltipster-content");return a.__options.trackTooltip&&(a.__contentBcr=b[0].getBoundingClientRect()),a.__tracker=setInterval(function(){if(d(a._$origin)&&d(a._$tooltip)){if(a.__options.trackOrigin){var e=a.__geometry(),f=!1;c(e.origin.size,a.__Geometry.origin.size)&&(a.__Geometry.origin.fixedLineage?c(e.origin.windowOffset,a.__Geometry.origin.windowOffset)&&(f=!0):c(e.origin.offset,a.__Geometry.origin.offset)&&(f=!0)),f||(a.__options.triggerClose.mouseleave?a._close():a.reposition())}if(a.__options.trackTooltip){var g=b[0].getBoundingClientRect();g.height===a.__contentBcr.height&&g.width===a.__contentBcr.width||(a.reposition(),a.__contentBcr=g)}}else a._close()},a.__options.trackerInterval),a},_close:function(b,c,d){var e=this,f=!0;if(e._trigger({type:"close",event:b,stop:function(){f=!1}}),f||d){c&&e.__callbacks.close.push(c),e.__callbacks.open=[],e.__timeoutsClear();var g=function(){a.each(e.__callbacks.close,function(a,c){c.call(e,e,{event:b,origin:e._$origin[0]})}),e.__callbacks.close=[]};if("closed"!=e.__state){var i=!0,j=new Date,k=j.getTime(),l=k+e.__options.animationDuration[1];if("disappearing"==e.__state&&l>e.__closingTime&&e.__options.animationDuration[1]>0&&(i=!1),i){e.__closingTime=l,"disappearing"!=e.__state&&e.__stateSet("disappearing");var m=function(){clearInterval(e.__tracker),e._trigger({type:"closing",event:b}),e._$tooltip.off("."+e.__namespace+"-triggerClose").removeClass("tooltipster-dying"),a(h.window).off("."+e.__namespace+"-triggerClose"),e.__$originParents.each(function(b,c){a(c).off("scroll."+e.__namespace+"-triggerClose")}),e.__$originParents=null,a(h.window.document.body).off("."+e.__namespace+"-triggerClose"),e._$origin.off("."+e.__namespace+"-triggerClose"),e._off("dismissable"),e.__stateSet("closed"),e._trigger({type:"after",event:b}),e.__options.functionAfter&&e.__options.functionAfter.call(e,e,{event:b,origin:e._$origin[0]}),g()};h.hasTransitions?(e._$tooltip.css({"-moz-animation-duration":e.__options.animationDuration[1]+"ms","-ms-animation-duration":e.__options.animationDuration[1]+"ms","-o-animation-duration":e.__options.animationDuration[1]+"ms","-webkit-animation-duration":e.__options.animationDuration[1]+"ms","animation-duration":e.__options.animationDuration[1]+"ms","transition-duration":e.__options.animationDuration[1]+"ms"}),e._$tooltip.clearQueue().removeClass("tooltipster-show").addClass("tooltipster-dying"),e.__options.animationDuration[1]>0&&e._$tooltip.delay(e.__options.animationDuration[1]),e._$tooltip.queue(m)):e._$tooltip.stop().fadeOut(e.__options.animationDuration[1],m)}}else g()}return e},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_open:function(b,c){var e=this;if(!e.__destroying&&d(e._$origin)&&e.__enabled){var f=!0;if("closed"==e.__state&&(e._trigger({type:"before",event:b,stop:function(){f=!1}}),f&&e.__options.functionBefore&&(f=e.__options.functionBefore.call(e,e,{event:b,origin:e._$origin[0]}))),f!==!1&&null!==e.__Content){c&&e.__callbacks.open.push(c),e.__callbacks.close=[],e.__timeoutsClear();var g,i=function(){"stable"!=e.__state&&e.__stateSet("stable"),a.each(e.__callbacks.open,function(a,b){b.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}),e.__callbacks.open=[]};if("closed"!==e.__state)g=0,"disappearing"===e.__state?(e.__stateSet("appearing"),h.hasTransitions?(e._$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-show"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i)):e._$tooltip.stop().fadeIn(i)):"stable"==e.__state&&i();else{if(e.__stateSet("appearing"),g=e.__options.animationDuration[0],e.__contentInsert(),e.reposition(b,!0),h.hasTransitions?(e._$tooltip.addClass("tooltipster-"+e.__options.animation).addClass("tooltipster-initial").css({"-moz-animation-duration":e.__options.animationDuration[0]+"ms","-ms-animation-duration":e.__options.animationDuration[0]+"ms","-o-animation-duration":e.__options.animationDuration[0]+"ms","-webkit-animation-duration":e.__options.animationDuration[0]+"ms","animation-duration":e.__options.animationDuration[0]+"ms","transition-duration":e.__options.animationDuration[0]+"ms"}),setTimeout(function(){"closed"!=e.__state&&(e._$tooltip.addClass("tooltipster-show").removeClass("tooltipster-initial"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i))},0)):e._$tooltip.css("display","none").fadeIn(e.__options.animationDuration[0],i),e.__trackerStart(),a(h.window).on("resize."+e.__namespace+"-triggerClose",function(b){var c=a(document.activeElement);(c.is("input")||c.is("textarea"))&&a.contains(e._$tooltip[0],c[0])||e.reposition(b)}).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)}),e.__$originParents=e._$origin.parents(),e.__$originParents.each(function(b,c){a(c).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)})}),e.__options.triggerClose.mouseleave||e.__options.triggerClose.touchleave&&h.hasTouchCapability){e._on("dismissable",function(a){a.dismissable?a.delay?(m=setTimeout(function(){e._close(a.event)},a.delay),e.__timeouts.close.push(m)):e._close(a):clearTimeout(m)});var j=e._$origin,k="",l="",m=null;e.__options.interactive&&(j=j.add(e._$tooltip)),e.__options.triggerClose.mouseleave&&(k+="mouseenter."+e.__namespace+"-triggerClose ",l+="mouseleave."+e.__namespace+"-triggerClose "),e.__options.triggerClose.touchleave&&h.hasTouchCapability&&(k+="touchstart."+e.__namespace+"-triggerClose",l+="touchend."+e.__namespace+"-triggerClose touchcancel."+e.__namespace+"-triggerClose"),j.on(l,function(a){if(e._touchIsTouchEvent(a)||!e._touchIsEmulatedEvent(a)){var b="mouseleave"==a.type?e.__options.delay:e.__options.delayTouch;e._trigger({delay:b[1],dismissable:!0,event:a,type:"dismissable"})}}).on(k,function(a){!e._touchIsTouchEvent(a)&&e._touchIsEmulatedEvent(a)||e._trigger({dismissable:!1,event:a,type:"dismissable"})})}e.__options.triggerClose.originClick&&e._$origin.on("click."+e.__namespace+"-triggerClose",function(a){e._touchIsTouchEvent(a)||e._touchIsEmulatedEvent(a)||e._close(a)}),(e.__options.triggerClose.click||e.__options.triggerClose.tap&&h.hasTouchCapability)&&setTimeout(function(){if("closed"!=e.__state){var b="",c=a(h.window.document.body);e.__options.triggerClose.click&&(b+="click."+e.__namespace+"-triggerClose "),e.__options.triggerClose.tap&&h.hasTouchCapability&&(b+="touchend."+e.__namespace+"-triggerClose"),c.on(b,function(b){e._touchIsMeaningfulEvent(b)&&(e._touchRecordEvent(b),e.__options.interactive&&a.contains(e._$tooltip[0],b.target)||e._close(b))}),e.__options.triggerClose.tap&&h.hasTouchCapability&&c.on("touchstart."+e.__namespace+"-triggerClose",function(a){e._touchRecordEvent(a)})}},0),e._trigger("ready"),e.__options.functionReady&&e.__options.functionReady.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}if(e.__options.timer>0){var m=setTimeout(function(){e._close()},e.__options.timer+g);e.__timeouts.close.push(m)}}}return e},_openShortly:function(a){var b=this,c=!0;if("stable"!=b.__state&&"appearing"!=b.__state&&!b.__timeouts.open&&(b._trigger({type:"start",event:a,stop:function(){c=!1}}),c)){var d=0==a.type.indexOf("touch")?b.__options.delayTouch:b.__options.delay;d[0]?b.__timeouts.open=setTimeout(function(){b.__timeouts.open=null,b.__pointerIsOverOrigin&&b._touchIsMeaningfulEvent(a)?(b._trigger("startend"),b._open(a)):b._trigger("startcancel")},d[0]):(b._trigger("startend"),b._open(a))}return b},_optionsExtract:function(b,c){var d=this,e=a.extend(!0,{},c),f=d.__options[b];return f||(f={},a.each(c,function(a,b){var c=d.__options[a];void 0!==c&&(f[a]=c)})),a.each(e,function(b,c){void 0!==f[b]&&("object"!=typeof c||c instanceof Array||null==c||"object"!=typeof f[b]||f[b]instanceof Array||null==f[b]?e[b]=f[b]:a.extend(e[b],f[b]))}),e},_plug:function(b){var c=a.tooltipster._plugin(b);if(!c)throw new Error('The "'+b+'" plugin is not defined');return c.instance&&a.tooltipster.__bridge(c.instance,this,c.name),this},_touchIsEmulatedEvent:function(a){for(var b=!1,c=(new Date).getTime(),d=this.__touchEvents.length-1;d>=0;d--){var e=this.__touchEvents[d];if(!(c-e.time<500))break;e.target===a.target&&(b=!0)}return b},_touchIsMeaningfulEvent:function(a){return this._touchIsTouchEvent(a)&&!this._touchSwiped(a.target)||!this._touchIsTouchEvent(a)&&!this._touchIsEmulatedEvent(a)},_touchIsTouchEvent:function(a){return 0==a.type.indexOf("touch")},_touchRecordEvent:function(a){return this._touchIsTouchEvent(a)&&(a.time=(new Date).getTime(),this.__touchEvents.push(a)),this},_touchSwiped:function(a){for(var b=!1,c=this.__touchEvents.length-1;c>=0;c--){var d=this.__touchEvents[c];if("touchmove"==d.type){b=!0;break}if("touchstart"==d.type&&a===d.target)break}return b},_trigger:function(){var b=Array.prototype.slice.apply(arguments);return"string"==typeof b[0]&&(b[0]={type:b[0]}),b[0].instance=this,b[0].origin=this._$origin?this._$origin[0]:null,b[0].tooltip=this._$tooltip?this._$tooltip[0]:null,this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,b),a.tooltipster._trigger.apply(a.tooltipster,b),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,b),this},_unplug:function(b){var c=this;if(c[b]){var d=a.tooltipster._plugin(b);d.instance&&a.each(d.instance,function(a,d){c[a]&&c[a].bridged===c[b]&&delete c[a]}),c[b].__destroy&&c[b].__destroy(),delete c[b]}return c},close:function(a){return this.__destroyed?this.__destroyError():this._close(null,a),this},content:function(a){var b=this;if(void 0===a)return b.__Content;if(b.__destroyed)b.__destroyError();else if(b.__contentSet(a),null!==b.__Content){if("closed"!==b.__state&&(b.__contentInsert(),b.reposition(),b.__options.updateAnimation))if(h.hasTransitions){var c=b.__options.updateAnimation;b._$tooltip.addClass("tooltipster-update-"+c),setTimeout(function(){"closed"!=b.__state&&b._$tooltip.removeClass("tooltipster-update-"+c)},1e3)}else b._$tooltip.fadeTo(200,.5,function(){"closed"!=b.__state&&b._$tooltip.fadeTo(200,1)})}else b._close();return b},destroy:function(){var b=this;if(b.__destroyed)b.__destroyError();else{"closed"!=b.__state?b.option("animationDuration",0)._close(null,null,!0):b.__timeoutsClear(),b._trigger("destroy"),b.__destroyed=!0,b._$origin.removeData(b.__namespace).off("."+b.__namespace+"-triggerOpen"),a(h.window.document.body).off("."+b.__namespace+"-triggerOpen");var c=b._$origin.data("tooltipster-ns");if(c)if(1===c.length){var d=null;"previous"==b.__options.restoration?d=b._$origin.data("tooltipster-initialTitle"):"current"==b.__options.restoration&&(d="string"==typeof b.__Content?b.__Content:a("<div></div>").append(b.__Content).html()),d&&b._$origin.attr("title",d),b._$origin.removeClass("tooltipstered"),b._$origin.removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else c=a.grep(c,function(a,c){return a!==b.__namespace}),b._$origin.data("tooltipster-ns",c);b._trigger("destroyed"),b._off(),b.off(),b.__Content=null,b.__$emitterPrivate=null,b.__$emitterPublic=null,b.__options.parent=null,b._$origin=null,b._$tooltip=null,a.tooltipster.__instancesLatestArr=a.grep(a.tooltipster.__instancesLatestArr,function(a,c){return b!==a}),clearInterval(b.__garbageCollector)}return b},disable:function(){return this.__destroyed?(this.__destroyError(),this):(this._close(),this.__enabled=!1,this)},elementOrigin:function(){return this.__destroyed?void this.__destroyError():this._$origin[0]},elementTooltip:function(){return this._$tooltip?this._$tooltip[0]:null},enable:function(){return this.__enabled=!0,this},hide:function(a){return this.close(a)},instance:function(){return this},off:function(){return this.__destroyed||this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},open:function(a){return this.__destroyed?this.__destroyError():this._open(null,a),this},option:function(b,c){return void 0===c?this.__options[b]:(this.__destroyed?this.__destroyError():(this.__options[b]=c,this.__optionsFormat(),a.inArray(b,["trigger","triggerClose","triggerOpen"])>=0&&this.__prepareOrigin(),"selfDestruction"===b&&this.__prepareGC()),this)},reposition:function(a,b){var c=this;return c.__destroyed?c.__destroyError():"closed"!=c.__state&&d(c._$origin)&&(b||d(c._$tooltip))&&(b||c._$tooltip.detach(),c.__Geometry=c.__geometry(),c._trigger({type:"reposition",event:a,helper:{geo:c.__Geometry}})),c},show:function(a){return this.open(a)},status:function(){return{destroyed:this.__destroyed,enabled:this.__enabled,open:"closed"!==this.__state,state:this.__state}},triggerHandler:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.fn.tooltipster=function(){var b=Array.prototype.slice.apply(arguments),c="You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.";if(0===this.length)return this;if("string"==typeof b[0]){var d="#*$~&";return this.each(function(){var e=a(this).data("tooltipster-ns"),f=e?a(this).data(e[0]):null;if(!f)throw new Error("You called Tooltipster's \""+b[0]+'" method on an uninitialized element');if("function"!=typeof f[b[0]])throw new Error('Unknown method "'+b[0]+'"');this.length>1&&"content"==b[0]&&(b[1]instanceof a||"object"==typeof b[1]&&null!=b[1]&&b[1].tagName)&&!f.__options.contentCloning&&f.__options.debug&&console.log(c);var g=f[b[0]](b[1],b[2]);return g!==f||"instance"===b[0]?(d=g,!1):void 0}),"#*$~&"!==d?d:this}a.tooltipster.__instancesLatestArr=[];var e=b[0]&&void 0!==b[0].multiple,g=e&&b[0].multiple||!e&&f.multiple,h=b[0]&&void 0!==b[0].content,i=h&&b[0].content||!h&&f.content,j=b[0]&&void 0!==b[0].contentCloning,k=j&&b[0].contentCloning||!j&&f.contentCloning,l=b[0]&&void 0!==b[0].debug,m=l&&b[0].debug||!l&&f.debug;return this.length>1&&(i instanceof a||"object"==typeof i&&null!=i&&i.tagName)&&!k&&m&&console.log(c),this.each(function(){var c=!1,d=a(this),e=d.data("tooltipster-ns"),f=null;e?g?c=!0:m&&(console.log("Tooltipster: one or more tooltips are already attached to the element below. Ignoring."),console.log(this)):c=!0,c&&(f=new a.Tooltipster(this,b[0]),e||(e=[]),e.push(f.__namespace),d.data("tooltipster-ns",e),d.data(f.__namespace,f),f.__options.functionInit&&f.__options.functionInit.call(f,f,{origin:this}),f._trigger("init")),a.tooltipster.__instancesLatestArr.push(f)}),this},b.prototype={__init:function(b){this.__$tooltip=b,this.__$tooltip.css({left:0,overflow:"hidden",position:"absolute",top:0}).find(".tooltipster-content").css("overflow","auto"),this.$container=a('<div class="tooltipster-ruler"></div>').append(this.__$tooltip).appendTo(h.window.document.body)},__forceRedraw:function(){var a=this.__$tooltip.parent();this.__$tooltip.detach(),this.__$tooltip.appendTo(a)},constrain:function(a,b){return this.constraints={width:a,height:b},this.__$tooltip.css({display:"block",height:"",overflow:"auto",width:a}),this},destroy:function(){this.__$tooltip.detach().find(".tooltipster-content").css({display:"",overflow:""}),this.$container.remove()},free:function(){return this.constraints=null,this.__$tooltip.css({display:"",height:"",overflow:"visible",width:""}),this},measure:function(){this.__forceRedraw();var a=this.__$tooltip[0].getBoundingClientRect(),b={size:{height:a.height||a.bottom-a.top,width:a.width||a.right-a.left}};if(this.constraints){var c=this.__$tooltip.find(".tooltipster-content"),d=this.__$tooltip.outerHeight(),e=c[0].getBoundingClientRect(),f={height:d<=this.constraints.height,width:a.width<=this.constraints.width&&e.width>=c[0].scrollWidth-1};b.fits=f.height&&f.width}return h.IE&&h.IE<=11&&b.size.width!==h.window.document.documentElement.clientWidth&&(b.size.width=Math.ceil(b.size.width)+1),b}};var j=navigator.userAgent.toLowerCase();-1!=j.indexOf("msie")?h.IE=parseInt(j.split("msie")[1]):-1!==j.toLowerCase().indexOf("trident")&&-1!==j.indexOf(" rv:11")?h.IE=11:-1!=j.toLowerCase().indexOf("edge/")&&(h.IE=parseInt(j.toLowerCase().split("edge/")[1]))
vendor: 10,550 bytes, lines 10473-10509
10473;var k="tooltipster.sideTip";return a.tooltipster._plugin({name:k,instance:{__defaults:function(){return{arrow:!0,distance:6,functionPosition:null,maxWidth:null,minIntersection:16,minWidth:0,position:null,side:"top",viewportAware:!0}},__init:function(a){var b=this;b.__instance=a,b.__namespace="tooltipster-sideTip-"+Math.round(1e6*Math.random()),b.__previousState="closed",b.__options,b.__optionsFormat(),b.__instance._on("state."+b.__namespace,function(a){"closed"==a.state?b.__close():"appearing"==a.state&&"closed"==b.__previousState&&b.__create(),b.__previousState=a.state}),b.__instance._on("options."+b.__namespace,function(){b.__optionsFormat()}),b.__instance._on("reposition."+b.__namespace,function(a){b.__reposition(a.event,a.helper)})},__close:function(){this.__instance.content()instanceof a&&this.__instance.content().detach(),this.__instance._$tooltip.remove(),this.__instance._$tooltip=null},__create:function(){var b=a('<div class="tooltipster-base tooltipster-sidetip"><div class="tooltipster-box"><div class="tooltipster-content"></div></div><div class="tooltipster-arrow"><div class="tooltipster-arrow-uncropped"><div class="tooltipster-arrow-border"></div><div class="tooltipster-arrow-background"></div></div></div></div>');this.__options.arrow||b.find(".tooltipster-box").css("margin",0).end().find(".tooltipster-arrow").hide(),this.__options.minWidth&&b.css("min-width",this.__options.minWidth+"px"),this.__options.maxWidth&&b.css("max-width",this.__options.maxWidth+"px"),
10474this.__instance._$tooltip=b,this.__instance._trigger("created")},__destroy:function(){this.__instance._off("."+self.__namespace)},__optionsFormat:function(){var b=this;if(b.__options=b.__instance._optionsExtract(k,b.__defaults()),b.__options.position&&(b.__options.side=b.__options.position),"object"!=typeof b.__options.distance&&(b.__options.distance=[b.__options.distance]),b.__options.distance.length<4&&(void 0===b.__options.distance[1]&&(b.__options.distance[1]=b.__options.distance[0]),void 0===b.__options.distance[2]&&(b.__options.distance[2]=b.__options.distance[0]),void 0===b.__options.distance[3]&&(b.__options.distance[3]=b.__options.distance[1]),b.__options.distance={top:b.__options.distance[0],right:b.__options.distance[1],bottom:b.__options.distance[2],left:b.__options.distance[3]}),"string"==typeof b.__options.side){var c={top:"bottom",right:"left",bottom:"top",left:"right"};b.__options.side=[b.__options.side,c[b.__options.side]],"left"==b.__options.side[0]||"right"==b.__options.side[0]?b.__options.side.push("top","bottom"):b.__options.side.push("right","left")}6===a.tooltipster._env.IE&&b.__options.arrow!==!0&&(b.__options.arrow=!1)},__reposition:function(b,c){var d,e=this,f=e.__targetFind(c),g=[];e.__instance._$tooltip.detach();var h=e.__instance._$tooltip.clone(),i=a.tooltipster._getRuler(h),j=!1,k=e.__instance.option("animation");switch(k&&h.removeClass("tooltipster-"+k),a.each(["window","document"],function(d,k){var l=null;if(e.__instance._trigger({container:k,helper:c,satisfied:j,takeTest:function(a){l=a},results:g,type:"positionTest"}),1==l||0!=l&&0==j&&("window"!=k||e.__options.viewportAware))for(var d=0;d<e.__options.side.length;d++){var m={horizontal:0,vertical:0},n=e.__options.side[d];"top"==n||"bottom"==n?m.vertical=e.__options.distance[n]:m.horizontal=e.__options.distance[n],e.__sideChange(h,n),a.each(["natural","constrained"],function(a,d){if(l=null,e.__instance._trigger({container:k,event:b,helper:c,mode:d,results:g,satisfied:j,side:n,takeTest:function(a){l=a},type:"positionTest"}),1==l||0!=l&&0==j){var h={container:k,distance:m,fits:null,mode:d,outerSize:null,side:n,size:null,target:f[n],whole:null},o="natural"==d?i.free():i.constrain(c.geo.available[k][n].width-m.horizontal,c.geo.available[k][n].height-m.vertical),p=o.measure();if(h.size=p.size,h.outerSize={height:p.size.height+m.vertical,width:p.size.width+m.horizontal},"natural"==d?c.geo.available[k][n].width>=h.outerSize.width&&c.geo.available[k][n].height>=h.outerSize.height?h.fits=!0:h.fits=!1:h.fits=p.fits,"window"==k&&(h.fits?"top"==n||"bottom"==n?h.whole=c.geo.origin.windowOffset.right>=e.__options.minIntersection&&c.geo.window.size.width-c.geo.origin.windowOffset.left>=e.__options.minIntersection:h.whole=c.geo.origin.windowOffset.bottom>=e.__options.minIntersection&&c.geo.window.size.height-c.geo.origin.windowOffset.top>=e.__options.minIntersection:h.whole=!1),g.push(h),h.whole)j=!0;else if("natural"==h.mode&&(h.fits||h.size.width<=c.geo.available[k][n].width))return!1}})}}),e.__instance._trigger({edit:function(a){g=a},event:b,helper:c,results:g,type:"positionTested"}),g.sort(function(a,b){if(a.whole&&!b.whole)return-1;if(!a.whole&&b.whole)return 1;if(a.whole&&b.whole){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}if(a.fits&&!b.fits)return-1;if(!a.fits&&b.fits)return 1;if(a.fits&&b.fits){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}return"document"==a.container&&"bottom"==a.side&&"natural"==a.mode?-1:1}),d=g[0],d.coord={},d.side){case"left":case"right":d.coord.top=Math.floor(d.target-d.size.height/2);break;case"bottom":case"top":d.coord.left=Math.floor(d.target-d.size.width/2)}switch(d.side){case"left":d.coord.left=c.geo.origin.windowOffset.left-d.outerSize.width;break;case"right":d.coord.left=c.geo.origin.windowOffset.right+d.distance.horizontal;break;case"top":d.coord.top=c.geo.origin.windowOffset.top-d.outerSize.height;break;case"bottom":d.coord.top=c.geo.origin.windowOffset.bottom+d.distance.vertical}"window"==d.container?"top"==d.side||"bottom"==d.side?d.coord.left<0?c.geo.origin.windowOffset.right-this.__options.minIntersection>=0?d.coord.left=0:d.coord.left=c.geo.origin.windowOffset.right-this.__options.minIntersection-1:d.coord.left>c.geo.window.size.width-d.size.width&&(c.geo.origin.windowOffset.left+this.__options.minIntersection<=c.geo.window.size.width?d.coord.left=c.geo.window.size.width-d.size.width:d.coord.left=c.geo.origin.windowOffset.left+this.__options.minIntersection+1-d.size.width):d.coord.top<0?c.geo.origin.windowOffset.bottom-this.__options.minIntersection>=0?d.coord.top=0:d.coord.top=c.geo.origin.windowOffset.bottom-this.__options.minIntersection-1:d.coord.top>c.geo.window.size.height-d.size.height&&(c.geo.origin.windowOffset.top+this.__options.minIntersection<=c.geo.window.size.height?d.coord.top=c.geo.window.size.height-d.size.height:d.coord.top=c.geo.origin.windowOffset.top+this.__options.minIntersection+1-d.size.height):(d.coord.left>c.geo.window.size.width-d.size.width&&(d.coord.left=c.geo.window.size.width-d.size.width),d.coord.left<0&&(d.coord.left=0)),e.__sideChange(h,d.side),c.tooltipClone=h[0],c.tooltipParent=e.__instance.option("parent").parent[0],c.mode=d.mode,c.whole=d.whole,c.origin=e.__instance._$origin[0],c.tooltip=e.__instance._$tooltip[0],delete d.container,delete d.fits,delete d.mode,delete d.outerSize,delete d.whole,d.distance=d.distance.horizontal||d.distance.vertical;var l=a.extend(!0,{},d);if(e.__instance._trigger({edit:function(a){d=a},event:b,helper:c,position:l,type:"position"}),e.__options.functionPosition){var m=e.__options.functionPosition.call(e,e.__instance,c,l);m&&(d=m)}i.destroy();var n,o;"top"==d.side||"bottom"==d.side?(n={prop:"left",val:d.target-d.coord.left},o=d.size.width-this.__options.minIntersection):(n={prop:"top",val:d.target-d.coord.top},o=d.size.height-this.__options.minIntersection),n.val<this.__options.minIntersection?n.val=this.__options.minIntersection:n.val>o&&(n.val=o);var p;p=c.geo.origin.fixedLineage?c.geo.origin.windowOffset:{left:c.geo.origin.windowOffset.left+c.geo.window.scroll.left,top:c.geo.origin.windowOffset.top+c.geo.window.scroll.top},d.coord={left:p.left+(d.coord.left-c.geo.origin.windowOffset.left),top:p.top+(d.coord.top-c.geo.origin.windowOffset.top)},e.__sideChange(e.__instance._$tooltip,d.side),c.geo.origin.fixedLineage?e.__instance._$tooltip.css("position","fixed"):e.__instance._$tooltip.css("position",""),e.__instance._$tooltip.css({left:d.coord.left,top:d.coord.top,height:d.size.height,width:d.size.width}).find(".tooltipster-arrow").css({left:"",top:""}).css(n.prop,n.val),e.__instance._$tooltip.appendTo(e.__instance.option("parent")),e.__instance._trigger({type:"repositioned",event:b,position:d})},__sideChange:function(a,b){a.removeClass("tooltipster-bottom").removeClass("tooltipster-left").removeClass("tooltipster-right").removeClass("tooltipster-top").addClass("tooltipster-"+b)},__targetFind:function(a){var b={},c=this.__instance._$origin[0].getClientRects();if(c.length>1){var d=this.__instance._$origin.css("opacity");1==d&&(this.__instance._$origin.css("opacity",.99),c=this.__instance._$origin[0].getClientRects(),this.__instance._$origin.css("opacity",1))}if(c.length<2)b.top=Math.floor(a.geo.origin.windowOffset.left+a.geo.origin.size.width/2),b.bottom=b.top,b.left=Math.floor(a.geo.origin.windowOffset.top+a.geo.origin.size.height/2),b.right=b.left;else{var e=c[0];b.top=Math.floor(e.left+(e.right-e.left)/2),e=c.length>2?c[Math.ceil(c.length/2)-1]:c[0],b.right=Math.floor(e.top+(e.bottom-e.top)/2),e=c[c.length-1],b.bottom=Math.floor(e.left+(e.right-e.left)/2),e=c.length>2?c[Math.ceil((c.length+1)/2)-1]:c[c.length-1],b.left=Math.floor(e.top+(e.bottom-e.top)/2)}return b}}}),a});;(function (root, factory) {
10475    if (typeof define === 'function' && define.amd) {
10476        define(['jquery'], factory);
10477    } else if (typeof exports === 'object') {
10478        module.exports = factory(require('jquery'));
10479    } else {
10480        root.jquery_mmenu_js = factory(root.jQuery);
10481    }
10482}(this, function (jQuery) {
10483    /*
10484 * jQuery mmenu v7.0.0
10485 * @requires jQuery 1.7.0 or later
10486 *
10487 * mmenu.frebsite.nl
10488 *
10489 * Copyright (c) Fred Heusschen
10490 * www.frebsite.nl
10491 *
10492 * License: CC-BY-NC-4.0
10493 * http://creativecommons.org/licenses/by-nc/4.0/
10494 */
10495    !function (e) {
10496        function t() {
10497            e[n].glbl || (l = {
10498                $wndw: e(window),
10499                $docu: e(document),
10500                $html: e("html"),
10501                $body: e("body")
10502            }, s = {}, a = {}, r = {}, e.each([s, a, r], function (e, t) {
10503                t.add = function (e) {
10504                    e = e.split(" ");
10505                    for (var n = 0, i = e.length; n < i; n++) t[e[n]] = t.mm(e[n])
10506                }
10507            }), s.mm = function (e) {
10508                return "mm-" + e
10509            }, s.add("wrapper menu panels panel nopanel navbar listview nolistview listitem btn hidden"), s.umm = function (e) {
vendor: 14,280 bytes, lines 10510-10684
10510                return "mm-" == e.slice(0, 3) && (e = e.slice(3)), e
10511            }, a.mm = function (e) {
10512                return "mm-" + e
10513            }, a.add("parent child title"), r.mm = function (e) {
10514                return e + ".mm"
10515            }, r.add("transitionend webkitTransitionEnd click scroll resize keydown mousedown mouseup touchstart touchmove touchend orientationchange"), e[n]._c = s, e[n]._d = a, e[n]._e = r, e[n].glbl = l)
10516        }
10517
10518        var n = "mmenu", i = "7.0.0";
10519        if (!(e[n] && e[n].version > i)) {
10520            e[n] = function (e, t, n) {
10521                return this.$menu = e, this._api = ["bind", "getInstance", "initPanels", "openPanel", "closePanel", "closeAllPanels", "setSelected"], this.opts = t, this.conf = n, this.vars = {}, this.cbck = {}, this.mtch = {}, "function" == typeof this.___deprecated && this.___deprecated(), this._initHooks(), this._initWrappers(), this._initAddons(), this._initExtensions(), this._initMenu(), this._initPanels(), this._initOpened(), this._initAnchors(), this._initMatchMedia(), "function" == typeof this.___debug && this.___debug(), this
10522            }, e[n].version = i, e[n].uniqueId = 0, e[n].wrappers = {}, e[n].addons = {}, e[n].defaults = {
10523                hooks: {},
10524                extensions: [],
10525                wrappers: [],
10526                navbar: {add: !0, title: "Menu", titleLink: "parent"},
10527                onClick: {setSelected: !0},
10528                slidingSubmenus: !0
10529            }, e[n].configuration = {
10530                classNames: {
10531                    divider: "Divider",
10532                    inset: "Inset",
10533                    nolistview: "NoListview",
10534                    nopanel: "NoPanel",
10535                    panel: "Panel",
10536                    selected: "Selected",
10537                    spacer: "Spacer",
10538                    vertical: "Vertical"
10539                }, clone: !1, openingInterval: 25, panelNodetype: "ul, ol, div", transitionDuration: 400
10540            }, e[n].prototype = {
10541                getInstance: function () {
10542                    return this
10543                }, initPanels: function (e) {
10544                    this._initPanels(e)
10545                }, openPanel: function (t, i) {
10546                    if (this.trigger("openPanel:before", t), t && t.length && (t.is("." + s.panel) || (t = t.closest("." + s.panel)), t.is("." + s.panel))) {
10547                        var r = this;
10548                        if ("boolean" != typeof i && (i = !0), t.parent("." + s.listitem + "_vertical").length) t.parents("." + s.listitem + "_vertical").addClass(s.listitem + "_opened").children("." + s.panel).removeClass(s.hidden), this.openPanel(t.parents("." + s.panel).not(function () {
10549                            return e(this).parent("." + s.listitem + "_vertical").length
10550                        }).first()), this.trigger("openPanel:start", t), this.trigger("openPanel:finish", t); else {
10551                            if (t.hasClass(s.panel + "_opened")) return;
10552                            var l = this.$pnls.children("." + s.panel),
10553                                o = this.$pnls.children("." + s.panel + "_opened");
10554                            if (!e[n].support.csstransitions) return o.addClass(s.hidden).removeClass(s.panel + "_opened"), t.removeClass(s.hidden).addClass(s.panel + "_opened"), this.trigger("openPanel:start", t), void this.trigger("openPanel:finish", t);
10555                            l.not(t).removeClass(s.panel + "_opened-parent");
10556                            for (var d = t.data(a.parent); d;) d = d.closest("." + s.panel), d.parent("." + s.listitem + "_vertical").length || d.addClass(s.panel + "_opened-parent"), d = d.data(a.parent);
10557                            l.removeClass(s.panel + "_highest").not(o).not(t).addClass(s.hidden), t.removeClass(s.hidden);
10558                            var c = function () {
10559                                o.removeClass(s.panel + "_opened"), t.addClass(s.panel + "_opened"), t.hasClass(s.panel + "_opened-parent") ? (o.addClass(s.panel + "_highest"), t.removeClass(s.panel + "_opened-parent")) : (o.addClass(s.panel + "_opened-parent"), t.addClass(s.panel + "_highest")), r.trigger("openPanel:start", t)
10560                            }, h = function () {
10561                                o.removeClass(s.panel + "_highest").addClass(s.hidden), t.removeClass(s.panel + "_highest"), r.trigger("openPanel:finish", t)
10562                            };
10563                            i && !t.hasClass(s.panel + "_noanimation") ? setTimeout(function () {
10564                                r.__transitionend(t, function () {
10565                                    h()
10566                                }, r.conf.transitionDuration), c()
10567                            }, r.conf.openingInterval) : (c(), h())
10568                        }
10569                        this.trigger("openPanel:after", t)
10570                    }
10571                }, closePanel: function (e) {
10572                    this.trigger("closePanel:before", e);
10573                    var t = e.parent();
10574                    t.hasClass(s.listitem + "_vertical") && (t.removeClass(s.listitem + "_opened"), e.addClass(s.hidden), this.trigger("closePanel", e)), this.trigger("closePanel:after", e)
10575                }, closeAllPanels: function (e) {
10576                    this.trigger("closeAllPanels:before"), this.$pnls.find("." + s.listview).children().removeClass(s.listitem + "_selected").filter("." + s.listitem + "_vertical").removeClass(s.listitem + "_opened");
10577                    var t = this.$pnls.children("." + s.panel), n = e && e.length ? e : t.first();
10578                    this.$pnls.children("." + s.panel).not(n).removeClass(s.panel + "_opened").removeClass(s.panel + "_opened-parent").removeClass(s.panel + "_highest").addClass(s.hidden), this.openPanel(n, !1), this.trigger("closeAllPanels:after")
10579                }, togglePanel: function (e) {
10580                    var t = e.parent();
10581                    t.hasClass(s.listitem + "_vertical") && this[t.hasClass(s.listitem + "_opened") ? "closePanel" : "openPanel"](e)
10582                }, setSelected: function (e) {
10583                    this.trigger("setSelected:before", e), this.$menu.find("." + s.listitem + "_selected").removeClass(s.listitem + "_selected"), e.addClass(s.listitem + "_selected"), this.trigger("setSelected:after", e)
10584                }, bind: function (e, t) {
10585                    this.cbck[e] = this.cbck[e] || [], this.cbck[e].push(t)
10586                }, trigger: function () {
10587                    var e = this, t = Array.prototype.slice.call(arguments), n = t.shift();
10588                    if (this.cbck[n]) for (var i = 0, s = this.cbck[n].length; i < s; i++) this.cbck[n][i].apply(e, t)
10589                }, matchMedia: function (e, t, n) {
10590                    var i = {yes: t, no: n};
10591                    this.mtch[e] = this.mtch[e] || [], this.mtch[e].push(i)
10592                }, _initHooks: function () {
10593                    for (var e in this.opts.hooks) this.bind(e, this.opts.hooks[e])
10594                }, _initWrappers: function () {
10595                    this.trigger("initWrappers:before");
10596                    for (var t = 0; t < this.opts.wrappers.length; t++) {
10597                        var i = e[n].wrappers[this.opts.wrappers[t]];
10598                        "function" == typeof i && i.call(this)
10599                    }
10600                    this.trigger("initWrappers:after")
10601                }, _initAddons: function () {
10602                    this.trigger("initAddons:before");
10603                    var t;
10604                    for (t in e[n].addons) e[n].addons[t].add.call(this), e[n].addons[t].add = function () {
10605                    };
10606                    for (t in e[n].addons) e[n].addons[t].setup.call(this);
10607                    this.trigger("initAddons:after")
10608                }, _initExtensions: function () {
10609                    this.trigger("initExtensions:before");
10610                    var e = this;
10611                    this.opts.extensions.constructor === Array && (this.opts.extensions = {all: this.opts.extensions});
10612                    for (var t in this.opts.extensions) this.opts.extensions[t] = this.opts.extensions[t].length ? s.menu + "_" + this.opts.extensions[t].join(" " + s.menu + "_") : "", this.opts.extensions[t] && !function (t) {
10613                        e.matchMedia(t, function () {
10614                            this.$menu.addClass(this.opts.extensions[t])
10615                        }, function () {
10616                            this.$menu.removeClass(this.opts.extensions[t])
10617                        })
10618                    }(t);
10619                    this.trigger("initExtensions:after")
10620                }, _initMenu: function () {
10621                    this.trigger("initMenu:before");
10622                    this.conf.clone && (this.$orig = this.$menu, this.$menu = this.$orig.clone(), this.$menu.add(this.$menu.find("[id]")).filter("[id]").each(function () {
10623                        e(this).attr("id", s.mm(e(this).attr("id")))
10624                    })), this.$menu.attr("id", this.$menu.attr("id") || this.__getUniqueId()), this.$pnls = e('<div class="' + s.panels + '" />').append(this.$menu.children(this.conf.panelNodetype)).prependTo(this.$menu), this.$menu.addClass(s.menu).parent().addClass(s.wrapper), this.trigger("initMenu:after")
10625                }, _initPanels: function (t) {
10626                    this.trigger("initPanels:before", t), t = t || this.$pnls.children(this.conf.panelNodetype);
10627                    var n = e(), i = this, a = function (t) {
10628                        t.filter(i.conf.panelNodetype).each(function (t) {
10629                            var r = i._initPanel(e(this));
10630                            if (r) {
10631                                i._initNavbar(r), i._initListview(r), n = n.add(r);
10632                                var l = r.children("." + s.listview).children("li").children(i.conf.panelNodeType).add(r.children("." + i.conf.classNames.panel));
10633                                l.length && a(l)
10634                            }
10635                        })
10636                    };
10637                    a(t), this.trigger("initPanels:after", n)
10638                }, _initPanel: function (e) {
10639                    this.trigger("initPanel:before", e);
10640                    if (e.hasClass(s.panel)) return e;
10641                    if (this.__refactorClass(e, this.conf.classNames.panel, s.panel), this.__refactorClass(e, this.conf.classNames.nopanel, s.nopanel), this.__refactorClass(e, this.conf.classNames.inset, s.listview + "_inset"), e.filter("." + s.listview + "_inset").addClass(s.nopanel), e.hasClass(s.nopanel)) return !1;
10642                    var t = e.hasClass(this.conf.classNames.vertical) || !this.opts.slidingSubmenus;
10643                    e.removeClass(this.conf.classNames.vertical);
10644                    var n = e.attr("id") || this.__getUniqueId();
10645                    e.is("ul, ol") && (e.removeAttr("id"), e.wrap("<div />"), e = e.parent()), e.attr("id", n), e.addClass(s.panel + " " + s.hidden);
10646                    var i = e.parent("li");
10647                    return t ? i.addClass(s.listitem + "_vertical") : e.appendTo(this.$pnls), i.length && (i.data(a.child, e), e.data(a.parent, i)), this.trigger("initPanel:after", e), e
10648                }, _initNavbar: function (t) {
10649                    if (this.trigger("initNavbar:before", t), !t.children("." + s.navbar).length) {
10650                        var n = t.data(a.parent), i = e('<div class="' + s.navbar + '" />'),
10651                            r = this.__getPanelTitle(t, this.opts.navbar.title), l = "";
10652                        if (n && n.length) {
10653                            if (n.hasClass(s.listitem + "_vertical")) return;
10654                            if (n.parent().is("." + s.listview)) var o = n.children("a, span").not("." + s.btn + "_next"); else var o = n.closest("." + s.panel).find('a[href="#' + t.attr("id") + '"]');
10655                            o = o.first(), n = o.closest("." + s.panel);
10656                            var d = n.attr("id");
10657                            switch (r = this.__getPanelTitle(t, e("<span>" + o.text() + "</span>").text()), this.opts.navbar.titleLink) {
10658                                case"anchor":
10659                                    l = o.attr("href");
10660                                    break;
10661                                case"parent":
10662                                    l = "#" + d
10663                            }
10664                            i.append('<a class="' + s.btn + " " + s.btn + "_prev " + s.navbar + '__btn" href="#' + d + '" />')
10665                        } else if (!this.opts.navbar.title) return;
10666                        this.opts.navbar.add && t.addClass(s.panel + "_has-navbar"), i.append('<a class="' + s.navbar + '__title"' + (l.length ? ' href="' + l + '"' : "") + ">" + r + "</a>").prependTo(t), this.trigger("initNavbar:after", t)
10667                    }
10668                }, _initListview: function (t) {
10669                    this.trigger("initListview:before", t);
10670                    var n = this.__childAddBack(t, "ul, ol");
10671                    this.__refactorClass(n, this.conf.classNames.nolistview, s.nolistview);
10672                    var i = n.not("." + s.nolistview).addClass(s.listview).children().addClass(s.listitem);
10673                    this.__refactorClass(i, this.conf.classNames.selected, s.listitem + "_selected"), this.__refactorClass(i, this.conf.classNames.divider, s.listitem + "_divider"), this.__refactorClass(i, this.conf.classNames.spacer, s.listitem + "_spacer");
10674                    var r = t.data(a.parent);
10675                    if (r && r.is("." + s.listitem) && !r.children("." + s.btn + "_next").length) {
10676                        var l = r.children("a, span").first(),
10677                            o = e('<a class="' + s.btn + '_next" href="#' + t.attr("id") + '" />').insertBefore(l);
10678                        l.is("span") && o.addClass(s.btn + "_fullwidth")
10679                    }
10680                    this.trigger("initListview:after", t)
10681                }, _initOpened: function () {
10682                    this.trigger("initOpened:before");
10683                    var e = this.$pnls.find("." + s.listitem + "_selected").removeClass(s.listitem + "_selected").last().addClass(s.listitem + "_selected"),
10684                        t = e.length ? e.closest("." + s.panel) : this.$pnls.children("." + s.panel).first();
vendor: 4,573 bytes, lines 10685-10752
10685                    this.openPanel(t, !1), this.trigger("initOpened:after")
10686                }, _initAnchors: function () {
10687                    this.trigger("initAnchors:before");
10688                    var t = this;
10689                    l.$body.on(r.click + "-oncanvas", "a[href]", function (i) {
10690                        var a = e(this), r = a.attr("href"), l = t.$menu.find(a).length,
10691                            o = a.is("." + s.listitem + " > a"),
10692                            d = a.is('[rel="external"]') || a.is('[target="_blank"]');
10693                        if (l && r.length > 1 && "#" == r.slice(0, 1)) try {
10694                            var c = t.$menu.find(r);
10695                            if (c.is("." + s.panel)) return t[a.parent().hasClass(s.listitem + "_vertical") ? "togglePanel" : "openPanel"](c), void i.preventDefault()
10696                        } catch (h) {
10697                        }
10698                        var f = {close: null, setSelected: null, preventDefault: "#" == r.slice(0, 1)};
10699                        for (var p in e[n].addons) {
10700                            var u = e[n].addons[p].clickAnchor.call(t, a, l, o, d);
10701                            if (u) {
10702                                if ("boolean" == typeof u) return void i.preventDefault();
10703                                "object" == typeof u && (f = e.extend({}, f, u))
10704                            }
10705                        }
10706                        l && o && !d && (t.__valueOrFn(a, t.opts.onClick.setSelected, f.setSelected) && t.setSelected(e(i.target).parent()), t.__valueOrFn(a, t.opts.onClick.preventDefault, f.preventDefault) && i.preventDefault(), t.__valueOrFn(a, t.opts.onClick.close, f.close) && t.opts.offCanvas && "function" == typeof t.close && t.close())
10707                    }), this.trigger("initAnchors:after")
10708                }, _initMatchMedia: function () {
10709                    var e = this;
10710                    for (var t in this.mtch) !function () {
10711                        var n = t, i = window.matchMedia(n);
10712                        e._fireMatchMedia(n, i), i.addListener(function (t) {
10713                            e._fireMatchMedia(n, t)
10714                        })
10715                    }()
10716                }, _fireMatchMedia: function (e, t) {
10717                    for (var n = t.matches ? "yes" : "no", i = 0; i < this.mtch[e].length; i++) this.mtch[e][i][n].call(this)
10718                }, _getOriginalMenuId: function () {
10719                    var e = this.$menu.attr("id");
10720                    return this.conf.clone && e && e.length && (e = s.umm(e)), e
10721                }, __api: function () {
10722                    var t = this, n = {};
10723                    return e.each(this._api, function (e) {
10724                        var i = this;
10725                        n[i] = function () {
10726                            var e = t[i].apply(t, arguments);
10727                            return "undefined" == typeof e ? n : e
10728                        }
10729                    }), n
10730                }, __valueOrFn: function (e, t, n) {
10731                    if ("function" == typeof t) {
10732                        var i = t.call(e[0]);
10733                        if ("undefined" != typeof i) return i
10734                    }
10735                    return "function" != typeof t && "undefined" != typeof t || "undefined" == typeof n ? t : n
10736                }, __getPanelTitle: function (t, i) {
10737                    var s;
10738                    return "function" == typeof this.opts.navbar.title && (s = this.opts.navbar.title.call(t[0])), "undefined" == typeof s && (s = t.data(a.title)), "undefined" != typeof s ? s : "string" == typeof i ? e[n].i18n(i) : e[n].i18n(e[n].defaults.navbar.title)
10739                }, __refactorClass: function (e, t, n) {
10740                    return e.filter("." + t).removeClass(t).addClass(n)
10741                }, __findAddBack: function (e, t) {
10742                    return e.find(t).add(e.filter(t))
10743                }, __childAddBack: function (e, t) {
10744                    return e.children(t).add(e.filter(t))
10745                }, __filterListItems: function (e) {
10746                    return e.not("." + s.listitem + "_divider").not("." + s.hidden)
10747                }, __filterListItemAnchors: function (e) {
10748                    return this.__filterListItems(e).children("a").not("." + s.btn + "_next")
10749                }, __openPanelWoAnimation: function (e) {
10750                    e.hasClass(s.panel + "_noanimation") || (e.addClass(s.panel + "_noanimation"), this.__transitionend(e, function () {
10751                        e.removeClass(s.panel + "_noanimation")
10752                    }
10752, this.conf.openingInterval), this.openPanel(e))
10753                }, __transitionend: function (e, t, n) {
10754                    var i = !1, s = function (n) {
10755                        "undefined" != typeof n && n.target != e[0] || (i || (e.off(r.transitionend), e.off(r.webkitTransitionEnd), t.call(e[0])), i = !0)
10756                    };
10757                    e.on(r.transitionend, s), e.on(r.webkitTransitionEnd, s), setTimeout(s, 1.1 * n)
10758                }, __getUniqueId: function () {
10759                    return s.mm(e[n].uniqueId++)
10760                }
10761            }, e.fn[n] = function (i, s) {
10762                t(), i = e.extend(!0, {}, e[n].defaults, i), s = e.extend(!0, {}, e[n].configuration, s);
10763                var a = e();
10764                return this.each(function () {
10765                    var t = e(this);
10766                    if (!t.data(n)) {
10767                        var r = new e[n](t, i, s);
10768                        r.$menu.data(n, r.__api()), a = a.add(r.$menu)
10769                    }
10770                }), a
10771            }, e[n].i18n = function () {
10772                var t = {};
10773                return function (n) {
10774                    switch (typeof n) {
10775                        case"object":
10776                            return e.extend(t, n), t;
10777                        case"string":
10778                            return t[n] || n;
10779                        case"undefined":
10780                        default:
10781                            return t
10782                    }
10783                }
10784            }(), e[n].support = {
10785                touch: "ontouchstart" in window || navigator.msMaxTouchPoints || !1,
10786                csstransitions: function () {
10787                    return "undefined" == typeof Modernizr || "undefined" == typeof Modernizr.csstransitions || Modernizr.csstransitions
10788                }(),
10789                csstransforms: function () {
10790                    return "undefined" == typeof Modernizr || "undefined" == typeof Modernizr.csstransforms || Modernizr.csstransforms
10791                }(),
10792                csstransforms3d: function () {
10793                    return "undefined" == typeof Modernizr || "undefined" == typeof Modernizr.csstransforms3d || Modernizr.csstransforms3d
10794                }()
10795            };
10796            var s, a, r, l
10797        }
10798    }(jQuery);
10799    /*
10800 * jQuery mmenu offCanvas add-on
10801 * mmenu.frebsite.nl
10802 *
10803 * Copyright (c) Fred Heusschen
10804 */
10805    !function (e) {
10806        var t = "mmenu", n = "offCanvas";
10807        e[t].addons[n] = {
10808            setup: function () {
10809                if (this.opts[n]) {
10810                    var i = this.opts[n], s = this.conf[n];
10811                    r = e[t].glbl, this._api = e.merge(this._api, ["open", "close", "setPage"]), "object" != typeof i && (i = {}), i = this.opts[n] = e.extend(!0, {}, e[t].defaults[n], i), "string" != typeof s.pageSelector && (s.pageSelector = "> " + s.pageNodetype), this.vars.opened = !1;
10812                    var a = [o.menu + "_offcanvas"];
10813                    e[t].support.csstransforms || a.push(o["no-csstransforms"]), e[t].support.csstransforms3d || a.push(o["no-csstransforms3d"]), this.bind("initMenu:after", function () {
10814                        var e = this;
10815                        this.setPage(r.$page), this._initBlocker(), this["_initWindow_" + n](), this.$menu.addClass(a.join(" ")).parent("." + o.wrapper).removeClass(o.wrapper), this.$menu[s.menuInsertMethod](s.menuInsertSelector);
10816                        var t = window.location.hash;
10817                        if (t) {
10818                            var i = this._getOriginalMenuId();
10819                            i && i == t.slice(1) && setTimeout(function () {
10820                                e.open()
10821                            }, 1e3)
10822                        }
10823                    }), this.bind("open:start:sr-aria", function () {
10824                        this.__sr_aria(this.$menu, "hidden", !1)
10825                    }), this.bind("close:finish:sr-aria", function () {
10826                        this.__sr_aria(this.$menu, "hidden", !0)
10827                    }), this.bind("initMenu:after:sr-aria", function () {
10828                        this.__sr_aria(this.$menu, "hidden", !0)
10829                    })
10830                }
10831            }, add: function () {
10832                o = e[t]._c, i = e[t]._d, s = e[t]._e, o.add("slideout page no-csstransforms3d"), i.add("style")
10833            }, clickAnchor: function (e, t) {
10834                var i = this;
10835                if (this.opts[n]) {
10836                    var s = this._getOriginalMenuId();
10837                    if (s && e.is('[href="#' + s + '"]')) {
10838                        if (t) return this.open(), !0;
10839                        var a = e.closest("." + o.menu);
10840                        if (a.length) {
10841                            var p = a.data("mmenu");
10842                            if (p && p.close) return p.close(), i.__transitionend(a, function () {
10843                                i.open()
10844                            }, i.conf.transitionDuration), !0
10845                        }
10846                        return this.open(), !0
10847                    }
10848                    if (r.$page) return s = r.$page.first().attr("id"), s && e.is('[href="#' + s + '"]') ? (this.close(), !0) : void 0
10849                }
10850            }
10851        }
10851, e[t].defaults[n] = {blockUI: !0, moveBackground: !0}, e[t].configuration[n] = {
10852            pageNodetype: "div",
10853            pageSelector: null,
10854            noPageSelector: [],
10855            wrapPageIfNeeded: !0,
10856            menuInsertMethod: "prependTo",
10857            menuInsertSelector: "body"
10858        }, e[t].prototype.open = function () {
10859            if (this.trigger("open:before"), !this.vars.opened) {
10860                var e = this;
10861                this._openSetup(), setTimeout(function () {
10862                    e._openFinish()
10863                }, this.conf.openingInterval), this.trigger("open:after")
10864            }
10865        }, e[t].prototype._openSetup = function () {
10866            var t = this, a = this.opts[n];
10867            this.closeAllOthers(), r.$page.each(function () {
10868                e(this).data(i.style, e(this).attr("style") || "")
10869            }), r.$wndw.trigger(s.resize + "-" + n, [!0]);
10870            var p = [o.wrapper + "_opened"];
10871            a.blockUI && p.push(o.wrapper + "_blocking"), "modal" == a.blockUI && p.push(o.wrapper + "_modal"), a.moveBackground && p.push(o.wrapper + "_background"), r.$html.addClass(p.join(" ")), setTimeout(function () {
10872                t.vars.opened = !0
10873            }, this.conf.openingInterval), this.$menu.addClass(o.menu + "_opened")
10874        }, e[t].prototype._openFinish = function () {
10875            var e = this;
10876            this.__transitionend(r.$page.first(), function () {
10877                e.trigger("open:finish")
10878            }, this.conf.transitionDuration), this.trigger("open:start"), r.$html.addClass(o.wrapper + "_opening")
10879        }, e[t].prototype.close = function () {
10880            if (this.trigger("close:before"), this.vars.opened) {
10881                var t = this;
10882                this.__transitionend(r.$page.first(), function () {
10883                    t.$menu.removeClass(o.menu + "_opened");
10884                    var n = [o.wrapper + "_opened", o.wrapper + "_blocking", o.wrapper + "_modal", o.wrapper + "_background"];
10885                    r.$html.removeClass(n.join(" ")), r.$page.each(function () {
10886                        e(this).attr("style", e(this).data(i.style))
10887                    }), t.vars.opened = !1, t.trigger("close:finish")
10888                }, this.conf.transitionDuration), this.trigger("close:start"), r.$html.removeClass(o.wrapper + "_opening"), this.trigger("close:after")
10889            }
10890        }, e[t].prototype.closeAllOthers = function () {
10891            r.$body.find("." + o.menu + "_offcanvas").not(this.$menu).each(function () {
10892                var n = e(this).data(t);
10893                n && n.close && n.close()
10894            })
10895        }, e[t].prototype.setPage = function (t) {
10896            this.trigger("setPage:before", t);
10897            var i = this, s = this.conf[n];
10898            t && t.length || (t = r.$body.find(s.pageSelector), s.noPageSelector.length && (t = t.not(s.noPageSelector.join(", "))), t.length > 1 && s.wrapPageIfNeeded && (t = t.wrapAll("<" + this.conf[n].pageNodetype + " />").parent())), t.each(function () {
10899                e(this).attr("id", e(this).attr("id") || i.__getUniqueId())
10900            }), t.addClass(o.page + " " + o.slideout), r.$page = t, this.trigger("setPage:after", t)
10901        }, e[t].prototype["_initWindow_" + n] = function () {
10902            r.$wndw.off(s.keydown + "-" + n).on(s.keydown + "-" + n, function (e) {
10903                if (r.$html.hasClass(o.wrapper + "_opened") && 9 == e.keyCode) return e.preventDefault(), !1
10904            });
10905            var e = 0;
10906            r.$wndw.off(s.resize + "-" + n).on(s.resize + "-" + n, function (t, n) {
10907                if (1 == r.$page.length && (n || r.$html.hasClass(o.wrapper + "_opened"))) {
10908                    var i = r.$wndw.height();
10909                    (n || i != e) && (e = i, r.$page.css("minHeight", i))
10910                }
10911            })
10912        }, e[t].prototype._initBlocker = function () {
10913            var t = this;
10914            this.opts[n].blockUI && (r.$blck || (r.$blck = e('<div class="' + o.page + "__blocker " + o.slideout + '" />')), r.$blck.appendTo(r.$body).off(s.touchstart + "-" + n + " " + s.touchmove + "-" + n).on(s.touchstart + "-" + n + " " + s.touchmove + "-" + n, function (e) {
10915                e.preventDefault(), e.stopPropagation(), r.$blck.trigger(s.mousedown + "-" + n)
10916            }
10916).off(s.mousedown + "-" + n).on(s.mousedown + "-" + n, function (e) {
10917                e.preventDefault(), r.$html.hasClass(o.wrapper + "_modal") || (t.closeAllOthers(), t.close())
10918            }))
10919        };
10920        var o, i, s, r
10921    }(jQuery);
10922    /*
10923 * jQuery mmenu screenReader add-on
10924 * mmenu.frebsite.nl
10925 *
10926 * Copyright (c) Fred Heusschen
10927 */
10928    !function (t) {
10929        var i = "mmenu", n = "screenReader";
10930        t[i].addons[n] = {
10931            setup: function () {
10932                var a = this, o = this.opts[n], h = this.conf[n];
10933                s = t[i].glbl, "boolean" == typeof o && (o = {
10934                    aria: o,
10935                    text: o
10936                }), "object" != typeof o && (o = {}), o = this.opts[n] = t.extend(!0, {}, t[i].defaults[n], o), o.aria && (this.bind("initAddons:after", function () {
10937                    this.bind("initMenu:after", function () {
10938                        this.trigger("initMenu:after:sr-aria")
10939                    }), this.bind("initNavbar:after", function () {
10940                        this.trigger("initNavbar:after:sr-aria", arguments[0])
10941                    }), this.bind("openPanel:start", function () {
10942                        this.trigger("openPanel:start:sr-aria", arguments[0])
10943                    }), this.bind("close:start", function () {
10944                        this.trigger("close:start:sr-aria")
10945                    }), this.bind("close:finish", function () {
10946                        this.trigger("close:finish:sr-aria")
10947                    }), this.bind("open:start", function () {
10948                        this.trigger("open:start:sr-aria")
10949                    }), this.bind("initOpened:after", function () {
10950                        this.trigger("initOpened:after:sr-aria")
10951                    })
10952                }), this.bind("updateListview", function () {
10953                    this.$pnls.find("." + e.listview).children().each(function () {
10954                        a.__sr_aria(t(this), "hidden", t(this).is("." + e.hidden))
10955                    })
10956                }), this.bind("openPanel:start", function (t) {
10957                    var i = this.$menu.find("." + e.panel).not(t).not(t.parents("." + e.panel)),
10958                        n = t.add(t.find("." + e.listitem + "_vertical ." + e.listitem + "_opened").children("." + e.panel));
10959                    this.__sr_aria(i, "hidden", !0), this.__sr_aria(n, "hidden", !1)
10960                }), this.bind("closePanel", function (t) {
10961                    this.__sr_aria(t, "hidden", !0)
10962                }), this.bind("initPanels:after", function (i) {
10963                    var n = i.find("." + e.btn).each(function () {
10964                        a.__sr_aria(t(this), "owns", t(this).attr("href").replace("#", ""))
10965                    });
10966                    this.__sr_aria(n, "haspopup", !0)
10967                }), this.bind("initNavbar:after", function (t) {
10968                    var i = t.children("." + e.navbar);
10969                    this.__sr_aria(i, "hidden", !t.hasClass(e.panel + "_has-navbar"))
10970                }), o.text && (this.bind("initlistview:after", function (t) {
10971                    var i = t.find("." + e.listview).find("." + e.btn + "_fullwidth").parent().children("span");
10972                    this.__sr_aria(i, "hidden", !0)
10973                }), "parent" == this.opts.navbar.titleLink && this.bind("initNavbar:after", function (t) {
10974                    var i = t.children("." + e.navbar), n = !!i.children("." + e.btn + "_prev").length;
10975                    this.__sr_aria(i.children("." + e.title), "hidden", n)
10976                }))), o.text && (this.bind("initAddons:after", function () {
10977                    this.bind("setPage:after", function () {
10978                        this.trigger("setPage:after:sr-text", arguments[0])
10979                    })
10980                }), this.bind("initNavbar:after", function (n) {
10981                    var r = n.children("." + e.navbar), a = r.children("." + e.title).text(),
10982                        s = t[i].i18n(h.text.closeSubmenu);
10983                    a && (s += " (" + a + ")"), r.children("." + e.btn + "_prev").html(this.__sr_text(s))
10984                }), this.bind("initListview:after", function (n) {
10985                    var s = n.data(r.parent);
10986                    if (s && s.length) {
10987                        var o = s.children("." + e.btn + "_next"), d = o.nextAll("span, a").first().text(),
10988                            l = t[i].i18n(h.text[o.parent().is("." + e.listitem + "_vertical") ? "toggleSubmenu" : "openSubmenu"]);
10989                        d && (l += " (" + d + ")"), o.html(a.__sr_text(l))
10990                    }
10991                }))
10992            }, add: function () {
10993                e = t[i]._c, r = t[i]._d, a = t[i]._e, e.add("sronly")
10994            }, clickAnchor: function (t, i) {
10995            }
10996        }, t[i].defaults[n] = {aria: !0, text: !0}, t[i].configuration[n] = {
10997            text: {
10998                closeMenu: "Close menu",
10999                closeSubmenu: "Close submenu",
11000                openSubmenu: "Open submenu",
11001                toggleSubmenu: "Toggle submenu"
11002            }
11003        }, t[i].prototype.__sr_aria = function (t, i, n) {
11004            t.prop("aria-" + i, n)[n ? "attr" : "removeAttr"]("aria-" + i, n)
11005        }, t[i].prototype.__sr_role = function (t, i) {
11006            t.prop("role", i)[i ? "attr" : "removeAttr"]("role", i)
11007        }, t[i].prototype.__sr_text = function (t) {
11008            return '<span class="' + e.sronly + '">' + t + "</span>"
11009        };
11010        var e, r, a, s
11011    }(jQuery);
11012    /*
11013 * jQuery mmenu scrollBugFix add-on
11014 * mmenu.frebsite.nl
11015 *
11016 * Copyright (c) Fred Heusschen
11017 */
11018    !function (o) {
11019        var t = "mmenu", n = "scrollBugFix";
11020        o[t].addons[n] = {
11021            setup: function () {
11022                var r = this.opts[n];
11023                this.conf[n];
11024                i = o[t].glbl, o[t].support.touch && this.opts.offCanvas && this.opts.offCanvas.blockUI && ("boolean" == typeof r && (r = {fix: r}), "object" != typeof r && (r = {}), r = this.opts[n] = o.extend(!0, {}, o[t].defaults[n], r), r.fix && (this.bind("open:start", function () {
11025                    this.$pnls.children("." + e.panel + "_opened").scrollTop(0)
11026                }), this.bind("initMenu:after", function () {
11027                    this["_initWindow_" + n]()
11028                })))
11029            }, add: function () {
11030                e = o[t]._c, r = o[t]._d, s = o[t]._e
11031            }, clickAnchor: function (o, t) {
11032            }
11033        }, o[t].defaults[n] = {fix: !0}, o[t].prototype["_initWindow_" + n] = function () {
11034            var t = this;
11035            i.$docu.off(s.touchmove + "-" + n).on(s.touchmove + "-" + n, function (o) {
11036                i.$html.hasClass(e.wrapper + "_opened") && o.preventDefault()
11037            });
11038            var r = !1;
11039            i.$body.off(s.touchstart + "-" + n).on(s.touchstart + "-" + n, "." + e.panels + "> ." + e.panel, function (o) {
11040                i.$html.hasClass(e.wrapper + "_opened") && (r || (r = !0, 0 === o.currentTarget.scrollTop ? o.currentTarget.scrollTop = 1 : o.currentTarget.scrollHeight === o.currentTarget.scrollTop + o.currentTarget.offsetHeight && (o.currentTarget.scrollTop -= 1), r = !1))
11041            }).off(s.touchmove + "-" + n).on(s.touchmove + "-" + n, "." + e.panels + "> ." + e.panel, function (t) {
11042                i.$html.hasClass(e.wrapper + "_opened") && o(this)[0].scrollHeight > o(this).innerHeight() && t.stopPropagation()
11043            }), i.$wndw.off(s.orientationchange + "-" + n).on(s.orientationchange + "-" + n, function () {
11044                t.$pnls.children("." + e.panel + "_opened").scrollTop(0).css({"-webkit-overflow-scrolling": "auto"}).css({"-webkit-overflow-scrolling": "touch"})
11045            })
11046        };
11047        var e, r, s, i
11048    }(jQuery);
11049    return true;
11050}));
11051$.fn.fingerprint = function(){
11052
11053	if( window.user_uuid )
11054		return window.user_uuid;
11055
11056	var canvas = document.body.appendChild(document.createElement('canvas'));
11057	var ctx = canvas.getContext('2d');
11058	canvas.height = 200;
11059	canvas.width = 500;
11060	canvas.style = "display:none";
11061
11062	// Text with lowercase/uppercase/punctuation symbols
11063	var txt = "🔴🔵🔶🔷🔸🔹 LoVe ❤ GOMEZ! \n\r 🏀🏁🏂🏃🏄🏆";
11064	ctx.textBaseline = "top";
11065	// The most common type
11066	ctx.font = "14px 'Arial'";
11067	ctx.textBaseline = "alphabetic";
11068	ctx.fillStyle = "#f60";
11069	ctx.fillRect(125,1,62,20);
11070	// Some tricks for color mixing to increase the difference in rendering
11071	ctx.fillStyle = "#069";
11072	ctx.fillText(txt, 2, 15);
11073	ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
11074	ctx.fillText(txt, 4, 17);
11075
11076	// canvas blending
11077	// http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/
11078	// http://jsfiddle.net/NDYV8/16/
11079	ctx.globalCompositeOperation = 'multiply';
11080	ctx.fillStyle = 'rgb(255,0,255)';
11081	ctx.beginPath();
11082	ctx.arc(50, 50, 50, 0, Math.PI * 2, true);
11083	ctx.closePath();
11084	ctx.fill();
11085	ctx.fillStyle = 'rgb(0,255,255)';
11086	ctx.beginPath();
11087	ctx.arc(100, 50, 50, 0, Math.PI * 2, true);
11088	ctx.closePath();
11089	ctx.fill();
11090	ctx.fillStyle = 'rgb(255,255,0)';
11091	ctx.beginPath();
11092	ctx.arc(75, 100, 50, 0, Math.PI * 2, true);
11093	ctx.closePath();
11094	ctx.fill();
11095	ctx.fillStyle = 'rgb(255,0,255)';
11096	ctx.arc(75, 75, 75, 0, Math.PI * 2, true);
11097	ctx.arc(75, 75, 25, 0, Math.PI * 2, true);
11098	ctx.fill('evenodd');
11099
11100	var sha256 = (function(){
11101
11102	  // Eratosthenes seive to find primes up to 311 for magic constants. This is why SHA256 is better than SHA1
11103	  var i = 1,
11104		  j,
11105		  K = [],
11106		  H = [];
11107
11108	  while(++i < 18){
11109		for(j = i * i; j < 312; j += i){
11110		  K[j] = 1;
11111		}
11112	  }
11113
11114	  function x(num, root){
11115		return (Math.pow(num, 1 / root) % 1) * 4294967296|0;
11116	  }
11117
11118	  for(i = 1, j = 0; i < 313; ){
11119		if(!K[++i]){
11120		  H[j] = x(i,2);
11121		  K[j++] = x(i,3);
11122		}
11123	  }
11124
11125	  function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }
11126
11127	  function SHA256(b){
11128		var HASH = H.slice(i = 0),
11129			s = unescape(encodeURI(b)), /* encode as utf8 */
11130			W = [],
11131			l = s.length,
11132			m = [],
11133			a, y, z;
11134		for(; i < l; ) m[i >> 2] |= (s.charCodeAt(i) & 0xff) << 8 * (3 - i++ % 4);
11135
11136		l *= 8;
11137
11138		m[l >> 5] |= 0x80 << (24 - l % 32);
11139		m[z = (l + 64 >> 5) | 15] = l;
11140
11141		for(i = 0; i < z; i += 16){
11142		  a = HASH.slice(j = 0, 8);
11143
11144		  for(; j < 64; a[4] += y){
11145			if(j < 16){
11146			  W[j] = m[j + i];
11147			}else{
11148			  W[j] =
11149				(S(y = W[j - 2], 17) ^ S(y, 19) ^ (y >>> 10)) +
11150				(W[j - 7]|0) +
11151				(S(y = W[j - 15], 7) ^ S(y, 18) ^ (y >>> 3)) +
11152				(W[j - 16]|0);
11153			}
11154
11155			a.unshift(
11156			  (
11157				y = (
11158				  a.pop() +
11159				  (S(b = a[4], 6) ^ S(b, 11) ^ S(b, 25)) +
11160				  (((b & a[5]) ^ ((~b) & a[6])) + K[j])|0
11161				) +
11162				(W[j++]|0)
11163			  ) +
11164			  (S(l = a[0], 2) ^ S(l, 13) ^ S(l, 22)) +
11165			  ((l & a[1]) ^ (a[1] & a[2]) ^ (a[2] & l))
11166			);
11167		  }
11168
11169		  for(j = 8; j--; ) HASH[j] = a[j] + HASH[j];
11170		}
11171
11172		for(s = ''; j < 63; ) s += ((HASH[++j >> 3] >> 4 * (7 - j % 8)) & 15).toString(16);
11173
11174		return s;
11175	  }
11176
11177	  return SHA256;
11178	})();
11179
11180	window.user_uuid = sha256(canvas.toDataURL());
11181
11182	return window.user_uuid;
11183};
11184
11185
11186var checkDevice = ( function(){
11187
11188	$.ajax({
11189		method: 'POST',
11190		data: { 'device_uuid' : $.fn.fingerprint()  },
11191		dataType: 'json',
11192		url: $('body').data('host') + '/' + $('body').data('lang') + '/auth/checkDevice',
11193		success: function(response) {
11194			// console.log( 'sort.success' );
11195			// console.log( response );
11196			if( !response.result && response.redirect ){
11197				document.location.href = response.redirect;
11198			}
11199		}
11200	});
11201});
11202
11203
11204/*var interval = setInterval( checkDevice, 1000 * 60 );*/
11205$( document ).ready( checkDevice );;(function(root, factory) {
11206  if (typeof define === 'function' && define.amd) {
11207    define(['jquery'], factory);
11208  } else if (typeof exports === 'object') {
11209    module.exports = factory(require('jquery'));
11210  } else {
11211    root.jquery_mmenu_all_js = factory(root.jQuery);
11212  }
11213}(this, function(jQuery) {
11214/*!
11215 * jQuery mmenu v7.0.6
11216 * @requires jQuery 1.7.0 or later
11217 *
11218 * mmenu.frebsite.nl
11219 *
11220 * Copyright (c) Fred Heusschen
11221 * www.frebsite.nl
11222 *
11223 * License: CC-BY-NC-4.0
11224 * http://creativecommons.org/licenses/by-nc/4.0/
11225 */
11226!function(e){function t(){e[n].glbl||(l={$wndw:e(window),$docu:e(document),$html:e("html"),$body:e("body")},s={},a={},r={},e.each([s,a,r],function(e,t){t.add=function(e){e=e.split(" ");for(var n=0,i=e.length;n<i;n++)t[e[n]]=t.mm(e[n])}}),s.mm=function(e){return"mm-"+e},s.add("wrapper menu panels panel nopanel navbar listview nolistview listitem btn hidden"),s.umm=function(e){return"mm-"==e.slice(0,3)&&(e=e.slice(3)),e},a.mm=function(e){return"mm-"+e},a.add("parent child title"),r.mm=function(e){return e+".mm"},r.add("transitionend webkitTransitionEnd click scroll resize keydown mousedown mouseup touchstart touchmove touchend orientationchange"),e[n]._c=s,e[n]._d=a,e[n]._e=r,e[n].glbl=l)}var n="mmenu",i="7.0.6";if(!(e[n]&&e[n].version>i)){e[n]=function(e,t,n){return this.$menu=e,this._api=["bind","getInstance","initPanels","openPanel","closePanel","closeAllPanels","setSelected"],this.opts=t,this.conf=n,this.vars={},this.cbck={},this.mtch={},"function"==typeof this.___deprecated&&this.___deprecated(),this._initWrappers(),this._initAddons(),this._initExtensions(),this._initHooks(),this._initMenu(),this._initPanels(),this._initOpened(),this._initAnchors(),this._initMatchMedia(),"function"==typeof this.___debug&&this.___debug(),this},e[n].version=i,e[n].uniqueId=0,e[n].wrappers={},e[n].addons={},e[n].defaults={hooks:{},extensions:[],wrappers:[],navbar:{add:!0,title:"Menu",titleLink:"parent"},onClick:{setSelected:!0},slidingSubmenus:!0},e[n].configuration={classNames:{divider:"Divider",inset:"Inset",nolistview:"NoListview",nopanel:"NoPanel",panel:"Panel",selected:"Selected",spacer:"Spacer",vertical:"Vertical"},clone:!1,openingInterval:25,panelNodetype:"ul, ol, div",transitionDuration:400},e[n].prototype={getInstance:function(){return this},initPanels:function(e){this._initPanels(e)},openPanel:function(t,i){if(this.trigger("openPanel:before",t),t&&t.length&&(t.is("."+s.panel)||(t=t.closest("."+s.panel)),t.is("."+s.panel))){var r=this;if("boolean"!=typeof i&&(i=!0),t.parent("."+s.listitem+"_vertical").length)t.parents("."+s.listitem+"_vertical").addClass(s.listitem+"_opened").children("."+s.panel).removeClass(s.hidden),this.openPanel
vendor: 10,409 bytes, line 11226
11226(t.parents("."+s.panel).not(function(){return e(this).parent("."+s.listitem+"_vertical").length}).first()),this.trigger("openPanel:start",t),this.trigger("openPanel:finish",t);else{if(t.hasClass(s.panel+"_opened"))return;var l=this.$pnls.children("."+s.panel),o=this.$pnls.children("."+s.panel+"_opened");if(!e[n].support.csstransitions)return o.addClass(s.hidden).removeClass(s.panel+"_opened"),t.removeClass(s.hidden).addClass(s.panel+"_opened"),this.trigger("openPanel:start",t),void this.trigger("openPanel:finish",t);l.not(t).removeClass(s.panel+"_opened-parent");for(var d=t.data(a.parent);d;)d=d.closest("."+s.panel),d.parent("."+s.listitem+"_vertical").length||d.addClass(s.panel+"_opened-parent"),d=d.data(a.parent);l.removeClass(s.panel+"_highest").not(o).not(t).addClass(s.hidden),t.removeClass(s.hidden);var c=function(){o.removeClass(s.panel+"_opened"),t.addClass(s.panel+"_opened"),t.hasClass(s.panel+"_opened-parent")?(o.addClass(s.panel+"_highest"),t.removeClass(s.panel+"_opened-parent")):(o.addClass(s.panel+"_opened-parent"),t.addClass(s.panel+"_highest")),r.trigger("openPanel:start",t)},h=function(){o.removeClass(s.panel+"_highest").addClass(s.hidden),t.removeClass(s.panel+"_highest"),r.trigger("openPanel:finish",t)};i&&!t.hasClass(s.panel+"_noanimation")?setTimeout(function(){r.__transitionend(t,function(){h()},r.conf.transitionDuration),c()},r.conf.openingInterval):(c(),h())}this.trigger("openPanel:after",t)}},closePanel:function(e){this.trigger("closePanel:before",e);var t=e.parent();t.hasClass(s.listitem+"_vertical")&&(t.removeClass(s.listitem+"_opened"),e.addClass(s.hidden),this.trigger("closePanel",e)),this.trigger("closePanel:after",e)},closeAllPanels:function(e){this.trigger("closeAllPanels:before"),this.$pnls.find("."+s.listview).children().removeClass(s.listitem+"_selected").filter("."+s.listitem+"_vertical").removeClass(s.listitem+"_opened");var t=this.$pnls.children("."+s.panel),n=e&&e.length?e:t.first();this.$pnls.children("."+s.panel).not(n).removeClass(s.panel+"_opened").removeClass(s.panel+"_opened-parent").removeClass(s.panel+"_highest").addClass(s.hidden),this.openPanel(n,!1),this.trigger("closeAllPanels:after")},togglePanel:function(e){var t=e.parent();t.hasClass(s.listitem+"_vertical")&&this[t.hasClass(s.listitem+"_opened")?"closePanel":"openPanel"](e)},setSelected:function(e){this.trigger("setSelected:before",e),this.$menu.find("."+s.listitem+"_selected").removeClass(s.listitem+"_selected"),e.addClass(s.listitem+"_selected"),this.trigger("setSelected:after",e)},bind:function(e,t){this.cbck[e]=this.cbck[e]||[],this.cbck[e].push(t)},trigger:function(){var e=this,t=Array.prototype.slice.call(arguments),n=t.shift();if(this.cbck[n])for(var i=0,s=this.cbck[n].length;i<s;i++)this.cbck[n][i].apply(e,t)},matchMedia:function(e,t,n){var i={yes:t,no:n};this.mtch[e]=this.mtch[e]||[],this.mtch[e].push(i)},_initHooks:function(){for(var e in this.opts.hooks)this.bind(e,this.opts.hooks[e])},_initWrappers:function(){this.trigger("initWrappers:before");for(var t=0;t<this.opts.wrappers.length;t++){var i=e[n].wrappers[this.opts.wrappers[t]];"function"==typeof i&&i.call(this)}this.trigger("initWrappers:after")},_initAddons:function(){this.trigger("initAddons:before");var t;for(t in e[n].addons)e[n].addons[t].add.call(this),e[n].addons[t].add=function(){};for(t in e[n].addons)e[n].addons[t].setup.call(this);this.trigger("initAddons:after")},_initExtensions:function(){this.trigger("initExtensions:before");var e=this;this.opts.extensions.constructor===Array&&(this.opts.extensions={all:this.opts.extensions});for(var t in this.opts.extensions)this.opts.extensions[t]=this.opts.extensions[t].length?s.menu+"_"+this.opts.extensions[t].join(" "+s.menu+"_"):"",this.opts.extensions[t]&&!function(t){e.matchMedia(t,function(){this.$menu.addClass(this.opts.extensions[t])},function(){this.$menu.removeClass(this.opts.extensions[t])})}(t);this.trigger("initExtensions:after")},_initMenu:function(){this.trigger("initMenu:before");this.conf.clone&&(this.$orig=this.$menu,this.$menu=this.$orig.clone(),this.$menu.add(this.$menu.find("[id]")).filter("[id]").each(function(){e(this).attr("id",s.mm(e(this).attr("id")))})),this.$menu.attr("id",this.$menu.attr("id")||this.__getUniqueId()),this.$pnls=e('<div class="'+s.panels+'" />').append(this.$menu.children(this.conf.panelNodetype)).prependTo(this.$menu),this.$menu.addClass(s.menu).parent().addClass(s.wrapper),this.trigger("initMenu:after")},_initPanels:function(t){this.trigger("initPanels:before",t),t=t||this.$pnls.children(this.conf.panelNodetype);var n=e(),i=this,a=function(t){t.filter(i.conf.panelNodetype).each(function(t){var r=i._initPanel(e(this));if(r){i._initNavbar(r),i._initListview(r),n=n.add(r);var l=r.children("."+s.listview).children("li").children(i.conf.panelNodetype).add(r.children("."+i.conf.classNames.panel));l.length&&a(l)}})};a(t),this.trigger("initPanels:after",n)},_initPanel:function(e){this.trigger("initPanel:before",e);if(e.hasClass(s.panel))return e;if(this.__refactorClass(e,this.conf.classNames.panel,s.panel),this.__refactorClass(e,this.conf.classNames.nopanel,s.nopanel),this.__refactorClass(e,this.conf.classNames.inset,s.listview+"_inset"),e.filter("."+s.listview+"_inset").addClass(s.nopanel),e.hasClass(s.nopanel))return!1;var t=e.hasClass(this.conf.classNames.vertical)||!this.opts.slidingSubmenus;e.removeClass(this.conf.classNames.vertical);var n=e.attr("id")||this.__getUniqueId();e.is("ul, ol")&&(e.removeAttr("id"),e.wrap("<div />"),e=e.parent()),e.attr("id",n),e.addClass(s.panel+" "+s.hidden);var i=e.parent("li");return t?i.addClass(s.listitem+"_vertical"):e.appendTo(this.$pnls),i.length&&(i.data(a.child,e),e.data(a.parent,i)),this.trigger("initPanel:after",e),e},_initNavbar:function(t){if(this.trigger("initNavbar:before",t),!t.children("."+s.navbar).length){var n=t.data(a.parent),i=e('<div class="'+s.navbar+'" />'),r=this.__getPanelTitle(t,this.opts.navbar.title),l="";if(n&&n.length){if(n.hasClass(s.listitem+"_vertical"))return;if(n.parent().is("."+s.listview))var o=n.children("a, span").not("."+s.btn+"_next");else var o=n.closest("."+s.panel).find('a[href="#'+t.attr("id")+'"]');o=o.first(),n=o.closest("."+s.panel);var d=n.attr("id");switch(r=this.__getPanelTitle(t,e("<span>"+o.text()+"</span>").text()),this.opts.navbar.titleLink){case"anchor":l=o.attr("href");break;case"parent":l="#"+d}i.append('<a class="'+s.btn+" "+s.btn+"_prev "+s.navbar+'__btn" href="#'+d+'" />')}else if(!this.opts.navbar.title)return;this.opts.navbar.add&&t.addClass(s.panel+"_has-navbar"),i.append('<a class="'+s.navbar+'__title"'+(l.length?' href="'+l+'"':"")+">"+r+"</a>").prependTo(t),this.trigger("initNavbar:after",t)}},_initListview:function(t){this.trigger("initListview:before",t);var n=this.__childAddBack(t,"ul, ol");this.__refactorClass(n,this.conf.classNames.nolistview,s.nolistview);var i=n.not("."+s.nolistview).addClass(s.listview).children().addClass(s.listitem);this.__refactorClass(i,this.conf.classNames.selected,s.listitem+"_selected"),this.__refactorClass(i,this.conf.classNames.divider,s.listitem+"_divider"),this.__refactorClass(i,this.conf.classNames.spacer,s.listitem+"_spacer");var r=t.data(a.parent);if(r&&r.is("."+s.listitem)&&!r.children("."+s.btn+"_next").length){var l=r.children("a, span").first(),o=e('<a class="'+s.btn+'_next" href="#'+t.attr("id")+'" />').insertBefore(l);l.is("span")&&o.addClass(s.btn+"_fullwidth")}this.trigger("initListview:after",t)},_initOpened:function(){this.trigger("initOpened:before");var e=this.$pnls.find("."+s.listitem+"_selected").removeClass(s.listitem+"_selected").last().addClass(s.listitem+"_selected"),t=e.length?e.closest("."+s.panel):this.$pnls.children("."+s.panel).first();this.openPanel(t,!1),this.trigger("initOpened:after")},_initAnchors:function(){this.trigger("initAnchors:before");var t=this;l.$body.on(r.click+"-oncanvas","a[href]",function(i){var a=e(this),r=a.attr("href"),l=t.$menu.find(a).length,o=a.is("."+s.listitem+" > a"),d=a.is('[rel="external"]')||a.is('[target="_blank"]');if(l&&r.length>1&&"#"==r.slice(0,1))try{var c=t.$menu.find(r);if(c.is("."+s.panel))return t[a.parent().hasClass(s.listitem+"_vertical")?"togglePanel":"openPanel"](c),void i.preventDefault()}catch(h){}var f={close:null,setSelected:null,preventDefault:"#"==r.slice(0,1)};for(var p in e[n].addons){var u=e[n].addons[p].clickAnchor.call(t,a,l,o,d);if(u){if("boolean"==typeof u)return void i.preventDefault();"object"==typeof u&&(f=e.extend({},f,u))}}l&&o&&!d&&(t.__valueOrFn(a,t.opts.onClick.setSelected,f.setSelected)&&t.setSelected(e(i.target).parent()),t.__valueOrFn(a,t.opts.onClick.preventDefault,f.preventDefault)&&i.preventDefault(),t.__valueOrFn(a,t.opts.onClick.close,f.close)&&t.opts.offCanvas&&"function"==typeof t.close&&t.close())}),this.trigger("initAnchors:after")},_initMatchMedia:function(){var e=this;for(var t in this.mtch)!function(){var n=t,i=window.matchMedia(n);e._fireMatchMedia(n,i),i.addListener(function(t){e._fireMatchMedia(n,t)})}()},_fireMatchMedia:function(e,t){for(var n=t.matches?"yes":"no",i=0;i<this.mtch[e].length;i++)this.mtch[e][i][n].call(this)},_getOriginalMenuId:function(){var e=this.$menu.attr("id");return this.conf.clone&&e&&e.length&&(e=s.umm(e)),e},__api:function(){var t=this,n={};return e.each(this._api,function(e){var i=this;n[i]=function(){var e=t[i].apply(t,arguments);return"undefined"==typeof e?n:e}}),n},__valueOrFn:function(e,t,n){if("function"==typeof t){var i=t.call(e[0]);if("undefined"!=typeof i)return i}return"function"!=typeof t&&"undefined"!=typeof t||"undefined"==typeof n?t:n},__getPanelTitle:function(t,i){var s;return"function"==typeof this.opts.navbar.title&&(s=this.opts.navbar.title.call(t[0])),"undefined"==typeof s&&(s=t.data(a.title)),"undefined"!=typeof s?s:"string"==typeof i?e[n].i18n(i):e[n].i18n(e[n].defaults.navbar.title)},__refactorClass:function(e,t,n){return e.filter("."+t).removeClass(t).addClass(n)},__findAddBack:function(e,t){return e.find(t).add(e.filter(t))},__childAddBack:function(e,t){return e.children(t).add(e.filter(t))},__filterListItems:function(e){return e.not("."+s.listitem+"_divider").not("."+s.hidden)},__filterListItemAnchors:function(e){return this.__filterListItems(e).children("a").not("."+s.btn+"_next")},__openPanelWoAnimation:function(e){e.hasClass(s.panel+"_noanimation")||(e.addClass(s.panel+"_noanimation"),this.__transitionend(e,function(){e.removeClass(s.panel+"_noanimation")}
11226,this.conf.openingInterval),this.openPanel(e))},__transitionend:function(e,t,n){var i=!1,s=function(n){"undefined"!=typeof n&&n.target!=e[0]||(i||(e.off(r.transitionend),e.off(r.webkitTransitionEnd),t.call(e[0])),i=!0)};e.on(r.transitionend,s),e.on(r.webkitTransitionEnd,s),setTimeout(s,1.1*n)},__getUniqueId:function(){return s.mm(e[n].uniqueId++)}},e.fn[n]=function(i,s){t(),i=e.extend(!0,{},e[n].defaults,i),s=e.extend(!0,{},e[n].configuration,s);var a=e();return this.each(function(){var t=e(this);if(!t.data(n)){var r=new e[n](t,i,s);r.$menu.data(n,r.__api()),a=a.add(r.$menu)}}),a},e[n].i18n=function(){var t={};return function(n){switch(typeof n){case"object":return e.extend(t,n),t;case"string":return t[n]||n;case"undefined":default:return t}}}(),e[n].support={touch:"ontouchstart"in window||navigator.msMaxTouchPoints||!1,csstransitions:function(){return"undefined"==typeof Modernizr||"undefined"==typeof Modernizr.csstransitions||Modernizr.csstransitions}(),csstransforms:function(){return"undefined"==typeof Modernizr||"undefined"==typeof Modernizr.csstransforms||Modernizr.csstransforms}(),csstransforms3d:function(){return"undefined"==typeof Modernizr||"undefined"==typeof Modernizr.csstransforms3d||Modernizr.csstransforms3d}()};var s,a,r,l}}(jQuery);
11227/*
11228 * jQuery mmenu offCanvas add-on
11229 * mmenu.frebsite.nl
11230 */
11231!function(e){var t="mmenu",n="offCanvas";e[t].addons[n]={setup:function(){if(this.opts[n]){var i=this.opts[n],s=this.conf[n];r=e[t].glbl,this._api=e.merge(this._api,["open","close","setPage"]),"object"!=typeof i&&(i={}),i=this.opts[n]=e.extend(!0,{},e[t].defaults[n],i),"string"!=typeof s.pageSelector&&(s.pageSelector="> "+s.pageNodetype),this.vars.opened=!1;var a=[o.menu+"_offcanvas"];e[t].support.csstransforms||a.push(o["no-csstransforms"]),e[t].support.csstransforms3d||a.push(o["no-csstransforms3d"]),this.bind("initMenu:after",function(){var e=this;this.setPage(r.$page),this._initBlocker(),this["_initWindow_"+n](),this.$menu.addClass(a.join(" ")).parent("."+o.wrapper).removeClass(o.wrapper),this.$menu[s.menuInsertMethod](s.menuInsertSelector);var t=window.location.hash;if(t){var i=this._getOriginalMenuId();i&&i==t.slice(1)&&setTimeout(function(){e.open()},1e3)}}),this.bind("open:start:sr-aria",function(){this.__sr_aria(this.$menu,"hidden",!1)}),this.bind("close:finish:sr-aria",function(){this.__sr_aria(this.$menu,"hidden",!0)}),this.bind("initMenu:after:sr-aria",function(){this.__sr_aria(this.$menu,"hidden",!0)})}},add:function(){o=e[t]._c,i=e[t]._d,s=e[t]._e,o.add("slideout page no-csstransforms3d"),i.add("style")},clickAnchor:function(e,t){var i=this;if(this.opts[n]){var s=this._getOriginalMenuId();if(s&&e.is('[href="#'+s+'"]')){if(t)return this.open(),!0;var a=e.closest("."+o.menu);if(a.length){var p=a.data("mmenu");if(p&&p.close)return p.close(),i.__transitionend(a,function(){i.open()},i.conf.transitionDuration),!0}return this.open(),!0}if(r.$page)return s=r.$page.first().attr("id"),s&&e.is('[href="#'+s+'"]')?(this.close(),!0):void 0}}},e[t].defaults[n]={blockUI:!0,moveBackground:!0},e[t].configuration[n]={pageNodetype:"div",pageSelector:null,noPageSelector:[],wrapPageIfNeeded:!0,menuInsertMethod:"prependTo",menuInsertSelector:"body"},e[t].prototype.open=function(){if(this.trigger("open:before"),!this.vars.opened){var e=this;this._openSetup(),setTimeout(function(){e._openFinish()},this.conf.openingInterval),this.trigger("open:after")}},e[t].prototype._openSetup=function(){var t=this,a=this.opts[n];this.closeAllOthers(),r.$page.each(function(){e(this).data(i.style,e(this).attr("style")||"")}),r.$wndw.trigger(s.resize+"-"+n,[!0]);var p=[o.wrapper+"_opened"];a.blockUI&&p.push(o.wrapper+"_blocking"),"modal"==a.blockUI&&p.push(o.wrapper+"_modal"),a.moveBackground&&p.push(o.wrapper+"_background"),r.$html.addClass(p.join(" ")),setTimeout(function(){t.vars.opened=!0},this.conf.openingInterval),this.$menu.addClass(o.menu+"_opened")},e[t].prototype._openFinish=function(){var e=this;this.__transitionend(r.$page.first(),function(){e.trigger("open:finish")},this.conf.transitionDuration),this.trigger("open:start"),r.$html.addClass(o.wrapper+"_opening")},e[t].prototype.close=function(){if(this.trigger("close:before"),this.vars.opened){var t=this;this.__transitionend(r.$page.first(),function(){t.$menu.removeClass(o.menu+"_opened");var n=[o.wrapper+"_opened",o.wrapper+"_blocking",o.wrapper+"_modal",o.wrapper+"_background"];r.$html.removeClass(n.join(" ")),r.$page.each(function(){e(this).attr("style",e(this).data(i.style))}),t.vars.opened=!1,t.trigger("close:finish")},this.conf.transitionDuration),this.trigger("close:start"),r.$html.removeClass(o.wrapper+"_opening"),this.trigger("close:after")}},e[t].prototype.closeAllOthers=function(){r.$body.find("."+o.menu+"_offcanvas").not(this.$menu).each(function(){var n=e(this).data(t);n&&n.close&&n.close()})},e[t].prototype.setPage=function(t){this.trigger("setPage:before",t);var i=this,s=this.conf[n];t&&t.length||(t=r.$body.find(s.pageSelector),s.noPageSelector.length&&(t=t.not(s.noPageSelector.join(", "))),t.length>1&&s.wrapPageIfNeeded&&(t=t.wrapAll("<"+this.conf[n].pageNodetype+" />").parent())),t.each(function(){e(this).attr("id",e(this).attr("id")||i.__getUniqueId())}),t.addClass(o.page+" "+o.slideout),r.$page=t,this.trigger("setPage:after",t)},e[t].prototype["_initWindow_"+n]=function(){r.$wndw.off(s.keydown+"-"+n).on(s.keydown+"-"+n,function(e){if(r.$html.hasClass(o.wrapper+"_opened")&&9==e.keyCode)return e.preventDefault(),!1});var e=0;r.$wndw.off(s.resize+"-"+n).on(s.resize+"-"+n,function(t,n){if(1==r.$page.length&&(n||r.$html.hasClass(o.wrapper+"_opened"))){var i=r.$wndw.height();(n||i!=e)&&(e=i,r.$page.css("minHeight",i))}})},e[t].prototype._initBlocker=function(){var t=this;
11231this.opts[n].blockUI&&(r.$blck||(r.$blck=e('<div class="'+o.page+"__blocker "+o.slideout+'" />')),r.$blck.appendTo(r.$body).off(s.touchstart+"-"+n+" "+s.touchmove+"-"+n).on(s.touchstart+"-"+n+" "+s.touchmove+"-"+n,function(e){e.preventDefault(),e.stopPropagation(),r.$blck.trigger(s.mousedown+"-"+n)}).off(s.mousedown+"-"+n).on(s.mousedown+"-"+n,function(e){e.preventDefault(),r.$html.hasClass(o.wrapper+"_modal")||(t.closeAllOthers(),t.close())}))};var o,i,s,r}(jQuery);
11232/*
11233 * jQuery mmenu screenReader add-on
11234 * mmenu.frebsite.nl
11235 */
11236!function(t){var i="mmenu",n="screenReader";t[i].addons[n]={setup:function(){var a=this,o=this.opts[n],h=this.conf[n];s=t[i].glbl,"boolean"==typeof o&&(o={aria:o,text:o}),"object"!=typeof o&&(o={}),o=this.opts[n]=t.extend(!0,{},t[i].defaults[n],o),o.aria&&(this.bind("initAddons:after",function(){this.bind("initMenu:after",function(){this.trigger("initMenu:after:sr-aria")}),this.bind("initNavbar:after",function(){this.trigger("initNavbar:after:sr-aria",arguments[0])}),this.bind("openPanel:start",function(){this.trigger("openPanel:start:sr-aria",arguments[0])}),this.bind("close:start",function(){this.trigger("close:start:sr-aria")}),this.bind("close:finish",function(){this.trigger("close:finish:sr-aria")}),this.bind("open:start",function(){this.trigger("open:start:sr-aria")}),this.bind("initOpened:after",function(){this.trigger("initOpened:after:sr-aria")})}),this.bind("updateListview",function(){this.$pnls.find("."+e.listview).children().each(function(){a.__sr_aria(t(this),"hidden",t(this).is("."+e.hidden))})}),this.bind("openPanel:start",function(t){var i=this.$menu.find("."+e.panel).not(t).not(t.parents("."+e.panel)),n=t.add(t.find("."+e.listitem+"_vertical ."+e.listitem+"_opened").children("."+e.panel));this.__sr_aria(i,"hidden",!0),this.__sr_aria(n,"hidden",!1)}),this.bind("closePanel",function(t){this.__sr_aria(t,"hidden",!0)}),this.bind("initPanels:after",function(i){var n=i.find("."+e.btn).each(function(){a.__sr_aria(t(this),"owns",t(this).attr("href").replace("#",""))});this.__sr_aria(n,"haspopup",!0)}),this.bind("initNavbar:after",function(t){var i=t.children("."+e.navbar);this.__sr_aria(i,"hidden",!t.hasClass(e.panel+"_has-navbar"))}),o.text&&(this.bind("initlistview:after",function(t){var i=t.find("."+e.listview).find("."+e.btn+"_fullwidth").parent().children("span");this.__sr_aria(i,"hidden",!0)}),"parent"==this.opts.navbar.titleLink&&this.bind("initNavbar:after",function(t){var i=t.children("."+e.navbar),n=!!i.children("."+e.btn+"_prev").length;this.__sr_aria(i.children("."+e.title),"hidden",n)}))),o.text&&(this.bind("initAddons:after",function(){this.bind("setPage:after",function(){this.trigger("setPage:after:sr-text",arguments[0])})}),this.bind("initNavbar:after",function(n){var r=n.children("."+e.navbar),a=r.children("."+e.title).text(),s=t[i].i18n(h.text.closeSubmenu);a&&(s+=" ("+a+")"),r.children("."+e.btn+"_prev").html(this.__sr_text(s))}),this.bind("initListview:after",function(n){var s=n.data(r.parent);if(s&&s.length){var o=s.children("."+e.btn+"_next"),d=o.nextAll("span, a").first().text(),l=t[i].i18n(h.text[o.parent().is("."+e.listitem+"_vertical")?"toggleSubmenu":"openSubmenu"]);d&&(l+=" ("+d+")"),o.html(a.__sr_text(l))}}))},add:function(){e=t[i]._c,r=t[i]._d,a=t[i]._e,e.add("sronly")},clickAnchor:function(t,i){}},t[i].defaults[n]={aria:!0,text:!0},t[i].configuration[n]={text:{closeMenu:"Close menu",closeSubmenu:"Close submenu",openSubmenu:"Open submenu",toggleSubmenu:"Toggle submenu"}},t[i].prototype.__sr_aria=function(t,i,n){t.prop("aria-"+i,n)[n?"attr":"removeAttr"]("aria-"+i,n)},t[i].prototype.__sr_role=function(t,i){t.prop("role",i)[i?"attr":"removeAttr"]("role",i)},t[i].prototype.__sr_text=function(t){return'<span class="'+e.sronly+'">'+t+"</span>"};var e,r,a,s}(jQuery);
11237/*
11238 * jQuery mmenu scrollBugFix add-on
11239 * mmenu.frebsite.nl
11240 */
11241!function(o){var t="mmenu",n="scrollBugFix";o[t].addons[n]={setup:function(){var r=this.opts[n];this.conf[n];i=o[t].glbl,o[t].support.touch&&this.opts.offCanvas&&this.opts.offCanvas.blockUI&&("boolean"==typeof r&&(r={fix:r}),"object"!=typeof r&&(r={}),r=this.opts[n]=o.extend(!0,{},o[t].defaults[n],r),r.fix&&(this.bind("open:start",function(){this.$pnls.children("."+e.panel+"_opened").scrollTop(0)}),this.bind("initMenu:after",function(){this["_initWindow_"+n]()})))},add:function(){e=o[t]._c,r=o[t]._d,s=o[t]._e},clickAnchor:function(o,t){}},o[t].defaults[n]={fix:!0},o[t].prototype["_initWindow_"+n]=function(){var t=this;i.$docu.off(s.touchmove+"-"+n).on(s.touchmove+"-"+n,function(o){i.$html.hasClass(e.wrapper+"_opened")&&o.preventDefault()});var r=!1;i.$body.off(s.touchstart+"-"+n).on(s.touchstart+"-"+n,"."+e.panels+"> ."+e.panel,function(o){i.$html.hasClass(e.wrapper+"_opened")&&(r||(r=!0,0===o.currentTarget.scrollTop?o.currentTarget.scrollTop=1:o.currentTarget.scrollHeight===o.currentTarget.scrollTop+o.currentTarget.offsetHeight&&(o.currentTarget.scrollTop-=1),r=!1))}).off(s.touchmove+"-"+n).on(s.touchmove+"-"+n,"."+e.panels+"> ."+e.panel,function(t){i.$html.hasClass(e.wrapper+"_opened")&&o(this)[0].scrollHeight>o(this).innerHeight()&&t.stopPropagation()}),i.$wndw.off(s.orientationchange+"-"+n).on(s.orientationchange+"-"+n,function(){t.$pnls.children("."+e.panel+"_opened").scrollTop(0).css({"-webkit-overflow-scrolling":"auto"}).css({"-webkit-overflow-scrolling":"touch"})})};var e,r,s,i}(jQuery);
11242/*
11243 * jQuery mmenu autoHeight add-on
11244 * mmenu.frebsite.nl
11245 */
11246!function(t){var e="mmenu",i="autoHeight";t[e].addons[i]={setup:function(){var h=this.opts[i];this.conf[i];if(a=t[e].glbl,"boolean"==typeof h&&h&&(h={height:"auto"}),"string"==typeof h&&(h={height:h}),"object"!=typeof h&&(h={}),h=this.opts[i]=t.extend(!0,{},t[e].defaults[i],h),"auto"==h.height||"highest"==h.height){this.bind("initMenu:after",function(){this.$menu.addClass(n.menu+"_autoheight")});var s=function(e){if(!this.opts.offCanvas||this.vars.opened){var i=Math.max(parseInt(this.$pnls.css("top"),10),0)||0,s=Math.max(parseInt(this.$pnls.css("bottom"),10),0)||0,a=0;this.$menu.addClass(n.menu+"_autoheight-measuring"),"auto"==h.height?(e=e||this.$pnls.children("."+n.panel+"_opened"),e.parent("."+n.listitem+"_vertical").length&&(e=e.parents("."+n.panel).not(function(){return t(this).parent("."+n.listitem+"_vertical").length})),e.length||(e=this.$pnls.children("."+n.panel)),a=e.first().outerHeight()):"highest"==h.height&&this.$pnls.children("."+n.panel).each(function(){var e=t(this);e.parent("."+n.listitem+"_vertical").length&&(e=e.parents("."+n.panel).not(function(){return t(this).parent("."+n.listitem+"_vertical").length})),a=Math.max(a,e.first().outerHeight())}),this.$menu.height(a+i+s).removeClass(n.menu+"_autoheight-measuring")}};this.opts.offCanvas&&this.bind("open:start",s),"highest"==h.height&&this.bind("initPanels:after",s),"auto"==h.height&&(this.bind("updateListview",s),this.bind("openPanel:start",s),this.bind("closePanel",s))}},add:function(){n=t[e]._c,h=t[e]._d,s=t[e]._e,s.add("resize")},clickAnchor:function(t,e){}},t[e].defaults[i]={height:"default"};var n,h,s,a}(jQuery);
11247/*
11248 * jQuery mmenu backButton add-on
11249 * mmenu.frebsite.nl
11250 */
11251!function(n){var t="mmenu",o="backButton";n[t].addons[o]={setup:function(){function e(){l=[c],this.$pnls.children("."+i.panel+"_opened-parent").add(s.$pnls.children("."+i.panel+"_opened")).each(function(){l.push("#"+n(this).attr("id"))})}if(this.opts.offCanvas){var s=this,h=this.opts[o];this.conf[o];a=n[t].glbl,"boolean"==typeof h&&(h={close:h}),"object"!=typeof h&&(h={}),h=n.extend(!0,{},n[t].defaults[o],h);var c="#"+this.$menu.attr("id");if(h.close){var l=[];this.bind("open:finish",function(){history.pushState(null,document.title,c)}),this.bind("open:finish",e),this.bind("openPanel:finish",e),this.bind("close:finish",function(){l=[],history.back(),history.pushState(null,document.title,location.pathname+location.search)}),n(window).on("popstate",function(t){if(s.vars.opened&&l.length){l=l.slice(0,-1);var o=l[l.length-1];
11251o==c?s.close():(s.openPanel(n(o)),history.pushState(null,document.title,c))}})}h.open&&n(window).on("popstate",function(n){s.vars.opened||location.hash!=c||s.open()})}},add:function(){return window.history&&window.history.pushState?(i=n[t]._c,e=n[t]._d,void(s=n[t]._e)):void(n[t].addons[o].setup=function(){})},clickAnchor:function(n,t){}},n[t].defaults[o]={close:!1,open:!1};var i,e,s,a}(jQuery);
11252/*
11253 * jQuery mmenu columns add-on
11254 * mmenu.frebsite.nl
11255 */
11256!function(e){var n="mmenu",i="columns";e[n].addons[i]={setup:function(){function l(e){var n=e.data(s.parent);if(n&&(n=n.closest("."+a.panel),n.length)){var i=n.attr("class");if(i&&(i=i.split(a.panel+"_columns-")[1]))for(i=parseInt(i.split(" ")[0],10)+1;i>0;){var l=this.$pnls.children("."+a.panel+"_columns-"+i);if(!l.length){i=-1;break}i++,l.removeClass(r).addClass(a.hidden)}}}var o=this.opts[i];this.conf[i];if(t=e[n].glbl,"boolean"==typeof o&&(o={add:o}),"number"==typeof o&&(o={add:!0,visible:o}),"object"!=typeof o&&(o={}),"number"==typeof o.visible&&(o.visible={min:o.visible,max:o.visible}),o=this.opts[i]=e.extend(!0,{},e[n].defaults[i],o),o.add){o.visible.min=Math.max(1,Math.min(6,o.visible.min)),o.visible.max=Math.max(o.visible.min,Math.min(6,o.visible.max));for(var d="",p="",m=0;m<=o.visible.max;m++)d+=" "+a.menu+"_columns-"+m,p+=" "+a.panel+"_columns-"+m;d.length&&(d=d.slice(1),p=p.slice(1));var r=p+" "+a.panel+"_opened "+a.panel+"_opened-parent "+a.panel+"_highest",c=function(n){var i=this.$pnls.children("."+a.panel+"_opened-parent").length;n.hasClass(a.panel+"_opened-parent")||i++,i=Math.min(o.visible.max,Math.max(o.visible.min,i)),this.$menu.removeClass(d).addClass(a.menu+"_columns-"+i),this.$pnls.children("."+a.panel).removeClass(p).filter("."+a.panel+"_opened-parent").add(n).slice(-o.visible.max).each(function(n){e(this).addClass(a.panel+"_columns-"+n)})};this.bind("openPanel:before",l),this.bind("openPanel:start",c)}},add:function(){a=e[n]._c,s=e[n]._d,l=e[n]._e},clickAnchor:function(e,n){}},e[n].defaults[i]={add:!1,visible:{min:1,max:3}};var a,s,l,t}(jQuery);
11257/*
11258 * jQuery mmenu counters add-on
11259 * mmenu.frebsite.nl
11260 */
11261!function(t){var e="mmenu",n="counters";t[e].addons[n]={setup:function(){var s=this,d=this.opts[n];this.conf[n];if(c=t[e].glbl,"boolean"==typeof d&&(d={add:d,update:d}),"object"!=typeof d&&(d={}),d=this.opts[n]=t.extend(!0,{},t[e].defaults[n],d),this.bind("initListview:after",function(t){var e=this.conf.classNames[n].counter;this.__refactorClass(t.find("."+e),e,i.counter)}),d.add&&this.bind("initListview:after",function(e){var n;switch(d.addTo){case"panels":n=e;break;default:n=e.filter(d.addTo)}n.each(function(){var e=t(this).data(a.parent);e&&(e.children("."+i.counter).length||e.prepend(t('<em class="'+i.counter+'" />')))})}),d.update){var r=function(e){e=e||this.$pnls.children("."+i.panel),e.each(function(){var e=t(this),n=e.data(a.parent);if(n){var c=n.children("em."+i.counter);c.length&&(e=e.children("."+i.listview),e.length&&c.html(s.__filterListItems(e.children()).length))}})};this.bind("initListview:after",r),this.bind("updateListview",r)}},add:function(){i=t[e]._c,a=t[e]._d,s=t[e]._e,i.add("counter")},clickAnchor:function(t,e){}},t[e].defaults[n]={add:!1,addTo:"panels",count:!1},t[e].configuration.classNames[n]={counter:"Counter"};var i,a,s,c}(jQuery);
11262/*
11263 * jQuery mmenu dividers add-on
11264 * mmenu.frebsite.nl
11265 */
11266!function(i){var e="mmenu",t="dividers";i[e].addons[t]={setup:function(){var s=this,a=this.opts[t];this.conf[t];if(l=i[e].glbl,"boolean"==typeof a&&(a={add:a,fixed:a}),"object"!=typeof a&&(a={}),a=this.opts[t]=i.extend(!0,{},i[e].defaults[t],a),a.type&&this.bind("initMenu:after",function(){this.$menu.addClass(n.menu+"_"+t+"-"+a.type)}),a.add&&this.bind("initListview:after",function(e){var t;switch(a.addTo){case"panels":t=e;break;default:t=e.filter(a.addTo)}t.length&&(t.children("."+n.listitem+"_divider").remove(),t.find("."+n.listview).each(function(){var e="";s.__filterListItems(i(this).children()).each(function(){var t=i.trim(i(this).children("a, span").text()).slice(0,1).toLowerCase();t!=e&&t.length&&(e=t,i('<li class="'+n.listitem+" "+n.listitem+'_divider">'+t+"</li>").insertBefore(this))})}))}),a.fixed){this.bind("initPanels:after",function(){"undefined"==typeof this.$fixeddivider&&(this.$fixeddivider=i('<ul class="'+n.listview+" "+n.listview+'_fixeddivider"><li class="'+n.listitem+" "+n.listitem+'_divider"></li></ul>').appendTo(this.$pnls).children())});var o=function(e){if(e=e||this.$pnls.children("."+n.panel+"_opened"),!e.is(":hidden")){var t=e.find("."+n.listitem+"_divider").not("."+n.hidden),s=e.scrollTop()||0,d="";t.each(function(){i(this).position().top+s<s+1&&(d=i(this).text())}),this.$fixeddivider.text(d),this.$pnls[d.length?"addClass":"removeClass"](n.panel+"_dividers")}};this.bind("open:start",o),this.bind("openPanel:start",o),this.bind("updateListview",o),this.bind("initPanel:after",function(i){i.off(d.scroll+"-"+t+" "+d.touchmove+"-"+t).on(d.scroll+"-"+t+" "+d.touchmove+"-"+t,function(e){i.hasClass(n.panel+"_opened")&&o.call(s,i)})})}},add:function(){n=i[e]._c,s=i[e]._d,d=i[e]._e,d.add("scroll")},clickAnchor:function(i,e){}},i[e].defaults[t]={add:!1,addTo:"panels",fixed:!1,type:null};var n,s,d,l}(jQuery);
11267/*
11268 * jQuery mmenu drag add-on
11269 * mmenu.frebsite.nl
11270 */
11271!function(e){function n(e,n,t){return e<n&&(e=n),e>t&&(e=t),e}function t(t,o,i){var r,p,d,f=this,u={events:"panleft panright",typeLower:"x",typeUpper:"X",open_dir:"right",close_dir:"left",negative:!1},c="width",l=u.open_dir,m=function(e){e<=t.maxStartPos&&(g=1)},h=function(){return e("."+s.slideout)},g=0,_=0,v=0,b=this.opts.extensions.all,w="undefined"==typeof b?"left"
vendor: 1,982 bytes, line 11271
11271:b.indexOf(s.menu+"_position-right")>-1?"right":b.indexOf(s.menu+"_position-top")>-1?"top":b.indexOf(s.menu+"_position-bottom")>-1?"bottom":"left",y="undefined"==typeof b?"back":b.indexOf(s.menu+"_position-top")>-1||b.indexOf(s.menu+"_position-bottom")>-1||b.indexOf(s.menu+"_position-front")>-1?"front":"back";switch(w){case"top":case"bottom":u.events="panup pandown",u.typeLower="y",u.typeUpper="Y",c="height"}switch(w){case"right":case"bottom":u.negative=!0,m=function(e){e>=i.$wndw[c]()-t.maxStartPos&&(g=1)}}switch(w){case"right":u.open_dir="left",u.close_dir="right";break;case"top":u.open_dir="down",u.close_dir="up";break;case"bottom":u.open_dir="up",u.close_dir="down"}switch(y){case"front":h=function(){return f.$menu}}var x,O=this.__valueOrFn(this.$menu,t.node,i.$page);"string"==typeof O&&(O=e(O));var $=new Hammer(O[0],this.opts[a].vendors.hammer);$.on("panstart",function(e){m(e.center[u.typeLower]),x=h(),l=u.open_dir}),$.on(u.events+" panend",function(e){g>0&&e.preventDefault()}),$.on(u.events,function(e){if(r=e["delta"+u.typeUpper],u.negative&&(r=-r),r!=_&&(l=r>=_?u.open_dir:u.close_dir),_=r,_>t.threshold&&1==g){if(i.$html.hasClass(s.wrapper+"_opened"))return;g=2,f._openSetup(),f.trigger("open:start"),i.$html.addClass(s.dragging),v=n(i.$wndw[c]()*o[c].perc,o[c].min,o[c].max)}2==g&&(p=n(_,10,v)-("front"==y?v:0),u.negative&&(p=-p),d="translate"+u.typeUpper+"("+p+"px )",x.css({"-webkit-transform":"-webkit-"+d,transform:d}))}),$.on("panend",function(e){2==g&&(i.$html.removeClass(s.dragging),x.css("transform",""),f[l==u.open_dir?"_openFinish":"close"]()),g=0})}function o(e,n,t,o){var i=this,p=e.data(r.parent);if(p){p=p.closest("."+s.panel);var d=new Hammer(e[0],i.opts[a].vendors.hammer),f=null;d.on("panright",function(e){f||(i.openPanel(p),f=setTimeout(function(){clearTimeout(f),f=null},i.conf.openingInterval+i.conf.transitionDuration))})}}var i="mmenu",a="drag";e[i].addons[a]={setup:function(){if(this.opts.offCanvas){var n=this.opts[a],s=this.conf[a
11271];d=e[i].glbl,"boolean"==typeof n&&(n={menu:n,panels:n}),"object"!=typeof n&&(n={}),"boolean"==typeof n.menu&&(n.menu={open:n.menu}),"object"!=typeof n.menu&&(n.menu={}),"boolean"==typeof n.panels&&(n.panels={close:n.panels}),"object"!=typeof n.panels&&(n.panels={}),n=this.opts[a]=e.extend(!0,{},e[i].defaults[a],n),n.menu.open&&this.bind("setPage:after",function(){t.call(this,n.menu,s.menu,d)}),n.panels.close&&this.bind("initPanel:after",function(e){o.call(this,e,n.panels,s.panels,d)})}},add:function(){return"function"!=typeof Hammer||Hammer.VERSION<2?(e[i].addons[a].add=function(){},void(e[i].addons[a].setup=function(){})):(s=e[i]._c,r=e[i]._d,p=e[i]._e,void s.add("dragging"))},clickAnchor:function(e,n){}},e[i].defaults[a]={menu:{open:!1,maxStartPos:100,threshold:50},panels:{close:!1},vendors:{hammer:{}}},e[i].configuration[a]={menu:{width:{perc:.8,min:140,max:440},height:{perc:.8,min:140,max:880}},panels:{}};var s,r,p,d}(jQuery);
11272/*
11273 * jQuery mmenu dropdown add-on
11274 * mmenu.frebsite.nl
11275 */
11276!function(t){var o="mmenu",e="dropdown";t[o].addons[e]={setup:function(){if(this.opts.offCanvas){var r=this,f=this.opts[e],p=this.conf[e];if(a=t[o].glbl,"boolean"==typeof f&&f&&(f={drop:f}),"object"!=typeof f&&(f={}),"string"==typeof f.position&&(f.position={of:f.position}),f=this.opts[e]=t.extend(!0,{},t[o].defaults[e],f),f.drop){var l;this.bind("initMenu:after",function(){if(this.$menu.addClass(i.menu+"_"+e),"string"!=typeof f.position.of){var o=this._getOriginalMenuId();o&&o.length&&(f.position.of='[href="#'+o+'"]')}"string"==typeof f.position.of&&(l=t(f.position.of),f.event=f.event.split(" "),1==f.event.length&&(f.event[1]=f.event[0]),"hover"==f.event[0]&&l.on(s.mouseenter+"-"+e,function(){r.open()}),"hover"==f.event[1]&&this.$menu.on(s.mouseleave+"-"+e,function(){r.close()}))}),this.bind("open:start",function(){this.$menu.data(n.style,this.$menu.attr("style")||""),a.$html.addClass(i.wrapper+"_dropdown")}),this.bind("close:finish",function(){this.$menu.attr("style",this.$menu.data(n.style)),a.$html.removeClass(i.wrapper+"_dropdown")});var h=function(t,o){var e=o[0],n=o[1],s="x"==t?"scrollLeft":"scrollTop",r="x"==t?"outerWidth":"outerHeight",h="x"==t?"left":"top",u="x"==t?"right":"bottom",d="x"==t?"width":"height",c="x"==t?"maxWidth":"maxHeight",m=null,v=a.$wndw[s](),x=l.offset()[h]-=v,b=x+l[r](),w=a.$wndw[d](),g=p.offset.button[t]+p.offset.viewport[t];if(f.position[t])switch(f.position[t]){case"left":case"bottom":m="after";break;case"right":case"top":m="before"}null===m&&(m=x+(b-x)/2<w/2?"after":"before");var $,y;return"after"==m?($="x"==t?x:b,y=w-($+g),e[h]=$+p.offset.button[t],e[u]="auto",f.tip&&n.push(i.menu+"_tip-"+("x"==t?"left":"top"))):($="x"==t?b:x,y=$-g,e[u]="calc( 100% - "+($-p.offset.button[t])+"px )",e[h]="auto",f.tip&&n.push(i.menu+"_tip-"+("x"==t?"right":"bottom"))),e[c]=Math.min(p[d].max,y),[e,n]},u=function(t){if(this.vars.opened){this.$menu.attr("style",this.$menu.data(n.style));var o=[{},[]];o=h.call(this,"y",o),o=h.call(this,"x",o),this.$menu.css(o[0]),f.tip&&this.$menu.removeClass(i.tipleft+" "+i.tipright+" "+i.tiptop+" "+i.tipbottom).addClass(o[1].join(" "))}};this.bind("open:start",u),a.$wndw.on(s.resize+"-"+e,function(t){u.call(r)}),this.opts.offCanvas.blockUI||a.$wndw.on(s.scroll+"-"+e,function(t){u.call(r)})}}},add:function(){i=t[o]._c,n=t[o]._d,s=t[o]._e,i.add("dropdown"),s.add("mouseenter mouseleave resize scroll")},clickAnchor:function(t,o){}},t[o].defaults[e]={drop:!1,event:"click",position:{},tip:!0},t[o].configuration[e]={offset:{button:{x:-5,y:5},viewport:{x:20,y:20}},height:{max:880},width:{max:440}};var i,n,s,a}(jQuery);
11277/*
11278 * jQuery mmenu fixedElements add-on
11279 * mmenu.frebsite.nl
11280 */
11281!function(s){var t="mmenu",i="fixedElements";s[t].addons[i]={setup:function(){if(this.opts.offCanvas){var n=(this.opts[i],this.conf[i]);c=s[t].glbl;var o=function(t){var o=this.conf.classNames[i].fixed,f=t.find("."+o);this.__refactorClass(f,o,e.slideout),f[n.elemInsertMethod](n.elemInsertSelector);var a=this.conf.classNames[i].sticky,r=t.find("."+a);this.__refactorClass(r,a,e.sticky),r=t.find("."+e.sticky),r.length&&(this.bind("open:start",function(){if("hidden"==c.$html.css("overflow")){var t=c.$wndw.scrollTop()+n.sticky.offset;r.each(function(){s(this).css("top",parseInt(s(this).css("top"),10)+t)})}}),this.bind("close:finish",function(){r.css("top","")}))};this.bind("setPage:after",o)}},add:function(){e=s[t]._c,n=s[t]._d,o=s[t]._e,e.add("sticky")},clickAnchor:function(s,t){}},s[t].configuration[i]={sticky:{offset:0},elemInsertMethod:"appendTo",elemInsertSelector:"body"},s[t].configuration.classNames[i]={fixed:"Fixed",sticky:"Sticky"};var e,n,o,c}(jQuery);
11282/*
11283 * jQuery mmenu iconbar add-on
11284 * mmenu.frebsite.nl
11285 */
11286!function(a){var t="mmenu",n="iconbar";a[t].addons[n]={setup:function(){function s(a){f.removeClass(e.iconbar+"__tab_selected");var t=f.filter('[href="#'+a.attr("id")+'"]');if(t.length)t.addClass(e.iconbar+"__tab_selected");else{var n=a.data(i.parent);n&&n.length&&s(n.closest("."+e.panel))}}var d=this,c=this.opts[n];this.conf[n];if(r=a[t].glbl,c instanceof Array&&(c={add:!0,top:c}),c.add){var l=null;if(a.each(["top","bottom"],function(t,n){var i=c[n];i instanceof Array||(i=[i]);for(var o=a('<div class="'+e.iconbar+"__"+n+'" />'),r=0,s=i.length;r<s;r++)o.append(i[r]);o.children().length&&(l||(l=a('<div class="'+e.iconbar+'" />')),l.append(o))}),l&&(this.bind("initMenu:after",function(){this.$menu.addClass(e.menu+"_iconbar-"+c.size).prepend(l)}),"tabs"==c.type)){l.addClass(e.iconbar+"_tabs");var f=l.find("a");f.on(o.click+"-"+n,function(t){var n=a(this);if(n.hasClass(e.iconbar+"__tab_selected"))return void t.stopImmediatePropagation();try{var i=a(n.attr("href"));i.hasClass(e.panel)&&(t.preventDefault(),t.stopImmediatePropagation(),d.__openPanelWoAnimation(i))}catch(o){}}),this.bind("openPanel:start",s)}}},add:function(){e=a[t]._c,i=a[t]._d,o=a[t]._e,e.add(n)},clickAnchor:function(a,t){}},a[t].defaults[n]={add:!1,size:40,top:[],bottom:[]},a[t].configuration[n]={};var e,i,o,r}(jQuery);
11287/*
11288 * jQuery mmenu iconPanels add-on
11289 * mmenu.frebsite.nl
11290 */
11291!function(e){var i="mmenu",n="iconPanels";e[i].addons[n]={setup:function(){var a=this,l=this.opts[n],d=(this.conf[n],!1);if(s=e[i].glbl,"boolean"==typeof l&&(l={add:l}),"number"!=typeof l&&"string"!=typeof l||(l={add:!0,visible:l}),"object"!=typeof l&&(l={}),"first"==l.visible&&(d=!0,l.visible=1),l=this.opts[n]=e.extend(!0,{},e[i].defaults[n],l),l.visible=Math.min(3,Math.max(1,l.visible)),l.visible++,l.add){for(var r="",o=0;o<=l.visible;
11291o++)r+=" "+t.panel+"_iconpanel-"+o;r.length&&(r=r.slice(1));var c=function(i){if(!i.parent("."+t.listitem+"_vertical").length){var n=a.$pnls.children("."+t.panel).removeClass(r);d&&n.removeClass(t.panel+"_iconpanel-first").first().addClass(t.panel+"_iconpanel-first"),n.filter("."+t.panel+"_opened-parent").removeClass(t.hidden).not(function(){return e(this).parent("."+t.listitem+"_vertical").length}).add(i).slice(-l.visible).each(function(i){e(this).addClass(t.panel+"_iconpanel-"+i)})}};this.bind("initMenu:after",function(){var e=[t.menu+"_iconpanel-"+l.size];l.hideNavbar&&e.push(t.menu+"_hidenavbar"),l.hideDivider&&e.push(t.menu+"_hidedivider"),this.$menu.addClass(e.join(" "))}),this.bind("openPanel:start",c),this.bind("initPanels:after",function(e){c.call(a,a.$pnls.children("."+t.panel+"_opened"))}),this.bind("initListview:after",function(e){!l.blockPanel||e.parent("."+t.listitem+"_vertical").length||e.children("."+t.panel+"__blocker").length||e.prepend('<a href="#'+e.closest("."+t.panel).attr("id")+'" class="'+t.panel+'__blocker" />')})}},add:function(){t=e[i]._c,a=e[i]._d,l=e[i]._e},clickAnchor:function(e,i){}},e[i].defaults[n]={add:!1,blockPanel:!0,hideDivider:!1,hideNavbar:!0,size:40,visible:3};var t,a,l,s}(jQuery);
11292/*
11293 * jQuery mmenu keyboardNavigation add-on
11294 * mmenu.frebsite.nl
11295 */
11296!function(n){function e(e,t){e=e||this.$pnls.children("."+i.panel+"_opened");var a=n(),s=this.$menu.children("."+i.mm("navbars_top")+", ."+i.mm("navbars_bottom")).children("."+i.navbar);s.find(r).filter(":focus").length||("default"==t&&(a=e.children("."+i.listview).find("a[href]").not("."+i.hidden),a.length||(a=e.find(r).not("."+i.hidden)),a.length||(a=s.find(r).not("."+i.hidden))),a.length||(a=this.$menu.children("."+i.tabstart)),a.first().focus())}var t="mmenu",a="keyboardNavigation";n[t].addons[a]={setup:function(){if(!n[t].support.touch){var s=this.opts[a];this.conf[a];if(d=n[t].glbl,"boolean"!=typeof s&&"string"!=typeof s||(s={enable:s}),"object"!=typeof s&&(s={}),s=this.opts[a]=n.extend(!0,{},n[t].defaults[a],s),s.enable){var o=n('<button class="'+i.tabstart+'" tabindex="0" type="button" />'),r=n('<button class="'+i.tabend+'" tabindex="0" type="button" />');this.bind("initMenu:after",function(){s.enhance&&this.$menu.addClass(i.menu+"_keyboardfocus"),this["_initWindow_"+a](s.enhance)}),this.bind("initOpened:before",function(){this.$menu.prepend(o).append(r).children("."+i.mm("navbars-top")+", ."+i.mm("navbars-bottom")).children("."+i.navbar).children("a."+i.title).attr("tabindex",-1)}),this.bind("open:finish",function(){e.call(this,null,s.enable)}),this.bind("openPanel:finish",function(n){e.call(this,n,s.enable)}),this.bind("initOpened:after:sr-aria",function(){var n=this.$menu.children("."+i.tabstart+", ."+i.tabend);this.__sr_aria(n,"hidden",!0),this.__sr_role(n,"presentation")})}}},add:function(){i=n[t]._c,s=n[t]._d,o=n[t]._e,i.add("tabstart tabend"),o.add("focusin keydown")},clickAnchor:function(n,e){}},n[t].defaults[a]={enable:!1,enhance:!1},n[t].configuration[a]={},n[t].prototype["_initWindow_"+a]=function(e){d.$wndw.off(o.keydown+"-offCanvas"),d.$wndw.off(o.focusin+"-"+a).on(o.focusin+"-"+a,function(e){if(d.$html.hasClass(i.wrapper+"_opened")){var t=n(e.target);t.is("."+i.tabend)&&t.parent().find("."+i.tabstart).focus()}}),d.$wndw.off(o.keydown+"-"+a).on(o.keydown+"-"+a,function(e){var t=n(e.target),a=t.closest("."+i.menu);if(a.length){a.data("mmenu");if(t.is("input, textarea"));else switch(e.keyCode){case 13:(t.is(".mm-toggle")||t.is(".mm-check"))&&t.trigger(o.click);break;case 32:case 37:case 38:case 39:case 40:e.preventDefault()}}}),e&&d.$wndw.off(o.keydown+"-"+a).on(o.keydown+"-"+a,function(e){var t=n(e.target),a=t.closest("."+i.menu);if(a.length){var o=a.data("mmenu");if(t.is("input"))switch(e.keyCode){case 27:t.val("")}else switch(e.keyCode){case 8:var d=a.find("."+i.panel+"_opened").data(s.parent);d&&d.length&&o.openPanel(d.closest("."+i.panel));break;case 27:a.hasClass(i.menu+"_offcanvas")&&o.close()}}})};var i,s,o,d,r="input, select, textarea, button, label, a[href]"}(jQuery);
11297/*
11298 * jQuery mmenu lazySubmenus add-on
11299 * mmenu.frebsite.nl
11300 */
11301!function(n){var e="mmenu",i="lazySubmenus";n[e].addons[i]={setup:function(){var t=this.opts[i];this.conf[i];a=n[e].glbl,"boolean"==typeof t&&(t={load:t}),"object"!=typeof t&&(t={}),t=this.opts[i]=n.extend(!0,{},n[e].defaults[i],t),t.load&&(this.bind("initMenu:after",function(){this.$pnls.find("li").children(this.conf.panelNodetype).not("."+l.inset).not("."+l.nolistview).not("."+l.nopanel).addClass(l.panel+"_lazysubmenu "+l.nolistview+" "+l.nopanel)}),this.bind("initPanels:before",function(n){n=n||this.$pnls.children(this.conf.panelNodetype),this.__findAddBack(n,"."+l.panel+"_lazysubmenu").not("."+l.panel+"_lazysubmenu ."+l.panel+"_lazysubmenu").removeClass(l.panel+"_lazysubmenu "+l.nolistview+" "+l.nopanel)}),this.bind("initOpened:before",function(){var n=this.$pnls.find("."+this.conf.classNames.selected).parents("."+l.panel+"_lazysubmenu");n.length&&(n.removeClass(l.panel+"_lazysubmenu "+l.nolistview+" "+l.nopanel),this.initPanels(n.last()))}),this.bind("openPanel:before",function(n){var e=this.__findAddBack(n,"."+l.panel+"_lazysubmenu").not("."+l.panel+"_lazysubmenu ."+l.panel+"_lazysubmenu");e.length&&this.initPanels(e)}))},add:function(){l=n[e]._c,t=n[e]._d,s=n[e]._e},clickAnchor:function(n,e){}},n[e].defaults[i]={load:!1},n[e].configuration[i]={};var l,t,s,a}(jQuery);
11302/*
11303 * jQuery mmenu navbar add-on
11304 * mmenu.frebsite.nl
11305 */
11306!function(n){var t="mmenu",a="navbars";n[t].addons[a]={setup:function(){var o=this,r=this.opts[a],i=this.conf[a
11306];if(s=n[t].glbl,"undefined"!=typeof r){r instanceof Array||(r=[r]);var c={},d={};r.length&&(n.each(r,function(s){var f=r[s];"boolean"==typeof f&&f&&(f={}),"object"!=typeof f&&(f={}),"undefined"==typeof f.content&&(f.content=["prev","title"]),f.content instanceof Array||(f.content=[f.content]),f=n.extend(!0,{},o.opts.navbar,f);var l=n('<div class="'+e.navbar+'" />'),u=f.height;"number"!=typeof u?u=1:(u=Math.min(4,Math.max(1,u)),u>1&&l.addClass(e.navbar+"_size-"+u));var v=f.position;switch(v){case"bottom":break;default:v="top"}c[v]||(c[v]=0),c[v]+=u,d[v]||(d[v]=n('<div class="'+e.navbars+"_"+v+'" />')),d[v].append(l);for(var p=0,b=f.content.length;p<b;p++){var h=n[t].addons[a][f.content[p]]||null;h?h.call(o,l,f,i):(h=f.content[p],h instanceof n||(h=n(f.content[p])),l.append(h))}var m=n[t].addons[a][f.type]||null;m&&m.call(o,l,f,i),l.children("."+e.btn).length&&l.addClass(e.navbar+"_has-btns")}),this.bind("initMenu:after",function(){for(var n in c)this.$menu.addClass(e.menu+"_navbar_"+n+"-"+c[n]),this.$menu["bottom"==n?"append":"prepend"](d[n])}))}},add:function(){e=n[t]._c,o=n[t]._d,r=n[t]._e,e.add(a)},clickAnchor:function(n,t){}},n[t].configuration[a]={breadcrumbs:{separator:"/",removeFirst:!1}},n[t].configuration.classNames[a]={};var e,o,r,s}(jQuery);
11307/*
11308 * jQuery mmenu pageScroll add-on
11309 * mmenu.frebsite.nl
11310 */
11311!function(t){function e(t){a&&a.length&&a.is(":visible")&&o.$html.add(o.$body).animate({scrollTop:a.offset().top+t}),a=!1}function i(t){try{return!("#"==t||"#"!=t.slice(0,1)||!o.$page.find(t).length)}catch(e){return!1}}var s="mmenu",n="pageScroll";t[s].addons[n]={setup:function(){var r=this,a=this.opts[n],c=this.conf[n];if(o=t[s].glbl,"boolean"==typeof a&&(a={scroll:a}),a=this.opts[n]=t.extend(!0,{},t[s].defaults[n],a),a.scroll&&this.bind("close:finish",function(){e(c.scrollOffset)}),a.update){var r=this,d=[],h=[];r.bind("initListview:after",function(e){r.__filterListItemAnchors(e.find("."+l.listview).children("li")).each(function(){var e=t(this).attr("href");i(e)&&d.push(e)}),h=d.reverse()});var p=-1;o.$wndw.on(f.scroll+"-"+n,function(e){for(var i=o.$wndw.scrollTop(),s=0;s<h.length;s++)if(t(h[s]).offset().top<i+c.updateOffset){p!==s&&(p=s,r.setSelected(r.__filterListItemAnchors(r.$pnls.children("."+l.panel+"_opened").find("."+l.listview).children("li")).filter('[href="'+h[s]+'"]').parent()));break}})}},add:function(){l=t[s]._c,r=t[s]._d,f=t[s]._e},clickAnchor:function(s,r,f){if(a=!1,r&&f&&this.opts.offCanvas&&this.opts[n].scroll&&o.$page&&o.$page.length){var c=s.attr("href");if(i(c)){if(a=t(c),!this.$menu.hasClass(l.mm("sidebar-expanded"))||!o.$html.is('[class*="'+l.mm("sidebar-expanded")+'"]'))return{close:!0};e(this.conf[n].scrollOffset)}}}},t[s].defaults[n]={scroll:!1,update:!1},t[s].configuration[n]={scrollOffset:0,updateOffset:50};var l,r,f,o,a=!1}(jQuery);
11312/*
11313 * jQuery mmenu RTL add-on
11314 * mmenu.frebsite.nl
11315 */
11316!function(t){var e="mmenu",n="rtl";t[e].addons[n]={setup:function(){var u=this.opts[n];this.conf[n];i=t[e].glbl,"object"!=typeof u&&(u={use:u}),u=this.opts[n]=t.extend(!0,{},t[e].defaults[n],u),"boolean"!=typeof u.use&&(u.use="rtl"==(i.$html.attr("dir")||"").toLowerCase()),u.use&&this.bind("initMenu:after",function(){this.$menu.addClass(s.menu+"_rtl")})},add:function(){s=t[e]._c,u=t[e]._d,o=t[e]._e},clickAnchor:function(t,e){}},t[e].defaults[n]={use:"detect"};var s,u,o,i}(jQuery);
11317/*
11318 * jQuery mmenu searchfield add-on
11319 * mmenu.frebsite.nl
11320 */
11321!function(e){function n(e,n){if(n)for(var s in n)e.attr(s,n[s])}function s(e){switch(e){case 9:case 16:case 17:case 18:case 37:case 38:case 39:case 40:return!0}return!1}var a="mmenu",t="searchfield";e[a].addons[t]={setup:function(){var n=this,s=this.opts[t],i=this.conf[t];r=e[a].glbl,"boolean"==typeof s&&(s={add:s}),"object"!=typeof s&&(s={}),"boolean"==typeof s.panel&&(s.panel={add:s.panel}),"object"!=typeof s.panel&&(s.panel={}),s.add&&("panel"==s.addTo&&(s.panel.add=!0),s.panel.add&&(s.showSubPanels=!1,s.panel.splash&&(s.cancel=!0)),s=this.opts[t]=e.extend(!0,{},e[a].defaults[t],s),i=this.conf[t]=e.extend(!0,{},e[a].configuration[t],i),this.bind("close:start",function(){this.$menu.find("."+l.searchfield).children("input").blur()}),this.bind("initPanels:after",function(a){var t=e();s.panel.add&&(t=this._initSearchPanel(a));var l;switch(s.addTo){case"panels":l=a;break;case"panel":l=t;break;default:l=this.$menu.find(s.addTo)}if(l.each(function(){var a=n._initSearchfield(e(this));s.search&&a.length&&n._initSearching(a)}),s.noResults){var i=s.panel.add?t:a;i.each(function(){n._initNoResultsMsg(e(this))})}}))},add:function(){l=e[a]._c,i=e[a]._d,d=e[a]._e,l.add("searchfield"),i.add("searchfield"),d.add("input focus blur")},clickAnchor:function(e,n){if(e.hasClass(l.searchfield+"__btn")){if(e.hasClass(l.btn+"_clear")){var s=e.closest("."+l.searchfield).find("input");return s.val(""),this.search(s),!0}if(e.hasClass(l.btn+"_next"))return e.closest("."+l.searchfield).submit(),!0}}},e[a].defaults[t]={add:!1,addTo:"panels",noResults:"No results found.",placeholder:"Search",panel:{add:!1,dividers:!0,fx:"none",id:null,
vendor: 10,204 bytes, lines 11321-11336
11321splash:null,title:"Search"},search:!0,showTextItems:!1,showSubPanels:!0},e[a].configuration[t]={clear:!1,form:!1,input:!1,submit:!1};var l,i,d,r;e[a].prototype._initSearchPanel=function(n){var s=this.opts[t];this.conf[t];if(this.$pnls.children("."+l.panel+"_search").length)return e();var a=e('<div class="'+l.panel+'_search " />').append("<ul />").appendTo(this.$pnls);switch(s.panel.id&&a.attr("id",s.panel.id),s.panel.title&&a.attr("data-mm-title",s.panel.title),s.panel.fx){case!1:break;case"none":a.addClass(l.panel+"_noanimation");break;default:a.addClass(l.panel+"_fx-"+s.panel.fx)}return s.panel.splash&&a.append('<div class="'+l.panel+'__searchsplash">'+s.panel.splash+"</div>"),this._initPanels(a),a},e[a].prototype._initSearchfield=function(s){var i=this.opts[t],d=this.conf[t];if(s.parent("."+l.listitem+"_vertical").length)return e();if(s.find("."+l.searchfield).length)return e();var r=e("<"+(d.form?"form":"div")+' class="'+l.searchfield+'" />'),h=e('<div class="'+l.searchfield+'__input" />'),c=e('<input placeholder="'+e[a].i18n(i.placeholder)+'" type="text" autocomplete="off" />');return h.append(c).appendTo(r),s.hasClass(l.searchfield)?s.replaceWith(r):(s.prepend(r),s.hasClass(l.panel)&&s.addClass(l.panel+"_has-searchfield")),n(c,d.input),d.clear&&e('<a class="'+l.btn+" "+l.btn+"_clear "+l.searchfield+'__btn" href="#" />').appendTo(h),n(r,d.form),d.form&&d.submit&&!d.clear&&e('<a class="'+l.btn+" "+l.btn+"_next "+l.searchfield+'__btn" href="#" />').appendTo(h),i.cancel&&e('<a href="#" class="'+l.searchfield+'__cancel">'+e[a].i18n("cancel")+"</a>").appendTo(r),r},e[a].prototype._initSearching=function(n){var a=this,r=this.opts[t],h=(this.conf[t],{});n.closest("."+l.panel+"_search").length?(h.$pnls=this.$pnls.find("."+l.panel),h.$nrsp=n.closest("."+l.panel)):n.closest("."+l.panel).length?(h.$pnls=n.closest("."+l.panel),h.$nrsp=h.$pnls):(h.$pnls=this.$pnls.find("."+l.panel),h.$nrsp=this.$menu),r.panel.add&&(h.$pnls=h.$pnls.not("."+l.panel+"_search"));var c=n.find("input"),p=n.find("."+l.searchfield+"__cancel"),o=this.$pnls.children("."+l.panel+"_search"),f=h.$pnls.find("."+l.listitem);h.$itms=f.not("."+l.listitem+"_divider"),h.$dvdr=f.filter("."+l.listitem+"_divider"),r.panel.add&&r.panel.splash&&c.off(d.focus+"-"+t+"-splash").on(d.focus+"-"+t+"-splash",function(e){a.openPanel(o)}),r.cancel&&(c.off(d.focus+"-"+t+"-cancel").on(d.focus+"-"+t+"-cancel",function(e){p.addClass(l.searchfield+"__cancel-active")}),p.off(d.click+"-"+t+"-splash").on(d.click+"-"+t+"-splash",function(n){n.preventDefault(),e(this).removeClass(l.searchfield+"__cancel-active"),o.hasClass(l.panel+"_opened")&&a.openPanel(a.$pnls.children("."+l.panel+"_opened-parent").last())})),r.panel.add&&"panel"==r.addTo&&this.bind("openPanel:finish",function(e){e[0]===o[0]&&c.focus()}),c.data(i.searchfield,h).off(d.input+"-"+t).on(d.input+"-"+t,function(e){s(e.keyCode)||a.search(c)}),this.search(c)},e[a].prototype._initNoResultsMsg=function(n){var s=this.opts[t];this.conf[t];if(n.closest("."+l.panel).length||(n=this.$pnls.children("."+l.panel).first()),!n.children("."+l.panel+"__noresultsmsg").length){var i=n.children("."+l.listview).first(),d=e('<div class="'+l.panel+"__noresultsmsg "+l.hidden+'" />').append(e[a].i18n(s.noResults));i.length?d.insertAfter(i):d.prependTo(n)}},e[a].prototype.search=function(n,s){var a=this,d=this.opts[t];this.conf[t];n=n||this.$menu.find("."+l.searchfield).chidren("input").first(),s=s||n.val(),s=s.toLowerCase().trim();var r="a",h="a, span",c=n.data(i.searchfield),p=n.closest("."+l.searchfield),o=p.find("."+l.btn),f=this.$pnls.children("."+l.panel+"_search"),u=c.$pnls,_=c.$itms,v=c.$dvdr,m=c.$nrsp;if(_.removeClass(l.listitem+"_nosubitems").find("."+l.btn+"_fullwidth-search").removeClass(l.btn+"_fullwidth-search "+l.btn+"_fullwidth"),f.children("."+l.listview).empty(),u.scrollTop(0),s.length){if(_.add(v).addClass(l.hidden),_.each(function(){var n=e(this),a=r;(d.showTextItems||d.showSubPanels&&n.find("."+l.btn+"_next"))&&(a=h),n.children(a).not("."+l.btn+"_next").text().toLowerCase().indexOf(s)>-1&&n.removeClass(l.hidden)}),d.panel.add){var b=e();u.each(function(){var n=a.__filterListItems(e(this).find("."+l.listitem)).clone(!0);n.length&&(d.panel.dividers&&(b=b.add('<li class="'+l.listitem+" "+l.listitem+'_divider">'+e(this).find("."+l.navbar+"__title").text()+"</li>")),b=b.add(n))}),b.find("."+l.mm("toggle")).remove().end().find("."+l.mm("check")).remove().end().find("."+l.btn).remove(),f.children("."+l.listview).append(b),this.openPanel(f)}else d.showSubPanels&&u.each(function(n){var s=e(this);a.__filterListItems(s.find("."+l.listitem)).each(function(){var n=e(this),s=n.data(i.child);s&&s.find("."+l.listview).children().removeClass(l.hidden)})}),e(u.get().reverse()).each(function(s){var t=e(this),d=t.data(i.parent);d&&(a.__filterListItems(t.find("."+l.listitem)).length?d.hasClass(l.hidden)&&d.removeClass(l.hidden).children("."+l.btn+"_next").not("."+l.btn+"_fullwidth").addClass(l.btn+"_fullwidth").addClass(l.btn+"_fullwidth-search"):n.closest("."+l.panel).length||((t.hasClass(l.panel+"_opened")||t.hasClass(l.panel+"_opened-parent"))&&setTimeout(function(){a.openPanel(d.closest("."+l.panel))},(s+1)*(1.5*a.conf.openingInterval)),d.addClass(l.listitem+"_nosubitems")))}),this.__filterListItems(u.find("."+l.listitem)).each(function(){e(this).prevAll("."+l.listitem+"_divider").first().removeClass(l.hidden)});o.removeClass(l.hidden),m.find("."+l.panel+"__noresultsmsg")[_.not("."+l.hidden).length?"addClass":"removeClass"](l.hidden),d.panel.add&&(d.panel.splash&&f.find("."+l.panel+"__searchsplash").addClass(l.hidden),_.add(v).removeClass(l.hidden))}else _.add(v).removeClass(l.hidden),o.addClass(l.hidden),m.find("."+l.panel+"__noresultsmsg").addClass(l.hidden),d.panel.add&&(d.panel.splash?f.find("."+l.panel+"__searchsplash").removeClass(l.hidden):n.closest("."+l.panel+"_search").length||this.openPanel(this.$pnls.children("."+l.panel+"_opened-parent").last()));this.trigger("updateListview")}}(jQuery);
11322/*
11323 * jQuery mmenu sectionIndexer add-on
11324 * mmenu.frebsite.nl
11325 */
11326!function(e){var a="mmenu",n="sectionIndexer";e[a].addons[n]={setup:function(){var r=this,d=this.opts[n];this.conf[n];s=e[a].glbl,"boolean"==typeof d&&(d={add:d}),"object"!=typeof d&&(d={}),d=this.opts[n]=e.extend(!0,{},e[a].defaults[n],d);var h=null;this.bind("initPanels:after",function(a){if(d.add){var s;switch(d.addTo){case"panels":s=a;break;default:s=e(d.addTo,this.$menu).filter("."+i.panel)}s.find("."+i.listitem+"_divider").closest("."+i.panel).addClass(i.panel+"_has-sectionindexer"),h||(h=e('<div class="'+i.sectionindexer+'" />').prependTo(this.$menu).append('<a href="#a">a</a><a href="#b">b</a><a href="#c">c</a><a href="#d">d</a><a href="#e">e</a><a href="#f">f</a><a href="#g">g</a><a href="#h">h</a><a href="#i">i</a><a href="#j">j</a><a href="#k">k</a><a href="#l">l</a><a href="#m">m</a><a href="#n">n</a><a href="#o">o</a><a href="#p">p</a><a href="#q">q</a><a href="#r">r</a><a href="#s">s</a><a href="#t">t</a><a href="#u">u</a><a href="#v">v</a><a href="#w">w</a><a href="#x">x</a><a href="#y">y</a><a href="#z">z</a>'),h.on(t.mouseover+"-"+n+" "+t.touchstart+"-"+n,"a",function(a){var n=e(a.target).attr("href").slice(1),t=r.$pnls.children("."+i.panel+"_opened"),s=t.find("."+i.listview),d=-1,h=t.scrollTop();t.scrollTop(0),s.children("."+i.listitem+"_divider").not("."+i.hidden).each(function(){d<0&&n==e(this).text().slice(0,1).toLowerCase()&&(d=e(this).position().top)}),t.scrollTop(d>-1?d:h)}));var o=function(e){e=e||this.$pnls.children("."+i.panel+"_opened"),this.$menu[(e.hasClass(i.panel+"_has-sectionindexer")?"add":"remove")+"Class"](i.menu+"_has-sectionindexer")};this.bind("openPanel:start",o),this.bind("initPanels:after",o)}})},add:function(){i=e[a]._c,r=e[a]._d,t=e[a]._e,i.add("sectionindexer"),t.add("mouseover")},clickAnchor:function(e,a){if(e.parent().is("."+i.indexer))return!0}},e[a].defaults[n]={add:!1,addTo:"panels"};var i,r,t,s}(jQuery);
11327/*
11328 * jQuery mmenu setSelected add-on
11329 * mmenu.frebsite.nl
11330 */
11331!function(e){var t="mmenu",n="setSelected";e[t].addons[n]={setup:function(){var a=this,r=this.opts[n];this.conf[n];if(l=e[t].glbl,"boolean"==typeof r&&(r={hover:r,parent:r}),"object"!=typeof r&&(r={}),r=this.opts[n]=e.extend(!0,{},e[t].defaults[n],r),"detect"==r.current){var d=function(e){e=e.split("?")[0].split("#")[0];var t=a.$menu.find('a[href="'+e+'"], a[href="'+e+'/"]');t.length?a.setSelected(t.parent(),!0):(e=e.split("/").slice(0,-1),e.length&&d(e.join("/")))};this.bind("initMenu:after",function(){d(window.location.href)})}else r.current||this.bind("initListview:after",function(e){e.find("."+i.listview).children("."+i.listitem+"_selected").removeClass(i.listitem+"_selected")});r.hover&&this.bind("initMenu:after",function(){this.$menu.addClass(i.menu+"_selected-hover")}),r.parent&&(this.bind("openPanel:finish",function(e){this.$pnls.find("."+i.listview).find("."+i.listitem+"_selected-parent").removeClass(i.listitem+"_selected-parent");for(var t=e.data(s.parent);t;)t.not("."+i.listitem+"_vertical").addClass(i.listitem+"_selected-parent"),t=t.closest("."+i.panel).data(s.parent)}),this.bind("initMenu:after",function(){this.$menu.addClass(i.menu+"_selected-parent")}))},add:function(){i=e[t]._c,s=e[t]._d,a=e[t]._e},clickAnchor:function(e,t){}},e[t].defaults[n]={current:!0,hover:!1,parent:!1};var i,s,a,l}(jQuery);
11332/*
11333 * jQuery mmenu sidebar add-on
11334 * mmenu.frebsite.nl
11335 */
11336!function(e){var s="mmenu",d="sidebar";e[s].addons[d]={setup:function(){if(this.opts.offCanvas){var n=this.opts[d];this.conf[d];l=e[s].glbl,("string"==typeof n||"boolean"==typeof n&&n||"number"==typeof n)&&(n={expanded:n}),"object"!=typeof n&&(n={}),"boolean"==typeof n.collapsed&&n.collapsed&&(n.collapsed="all"),"string"!=typeof n.collapsed&&"number"!=typeof n.collapsed||(n.collapsed={use:n.collapsed}),"object"!=typeof n.collapsed&&(n.collapsed={}),"number"==typeof n.collapsed.use&&(n.collapsed.use="(min-width: "+n.collapsed.use+"px)"),"boolean"==typeof n.expanded&&n.expanded&&(n.expanded="all"),"string"!=typeof n.expanded&&"number"!=typeof n.expanded||(n.expanded={use:n.expanded}),"object"!=typeof n.expanded&&(n.expanded={}),"number"==typeof n.expanded.use&&(n.expanded.use="(min-width: "+n.exp
11336anded.use+"px)"),n=this.opts[d]=e.extend(!0,{},e[s].defaults[d],n);var t=a.wrapper+"_sidebar-collapsed-"+n.collapsed.size,i=a.wrapper+"_sidebar-expanded-"+n.expanded.size;n.collapsed.use&&(this.bind("initMenu:after",function(){this.$menu.addClass(a.menu+"_sidebar-collapsed"),n.collapsed.blockMenu&&this.opts.offCanvas&&!this.$menu.children("."+a.menu+"__blocker").length&&this.$menu.prepend('<a class="'+a.menu+'__blocker" href="#'+this.$menu.attr("id")+'" />'),n.collapsed.hideNavbar&&this.$menu.addClass(a.menu+"_hidenavbar"),n.collapsed.hideDivider&&this.$menu.addClass(a.menu+"_hidedivider")}),"boolean"==typeof n.collapsed.use?this.bind("initMenu:after",function(){l.$html.addClass(t)}):this.matchMedia(n.collapsed.use,function(){l.$html.addClass(t)},function(){l.$html.removeClass(t)})),n.expanded.use&&(this.bind("initMenu:after",function(){this.$menu.addClass(a.menu+"_sidebar-expanded")}),"boolean"==typeof n.expanded.use?this.bind("initMenu:after",function(){l.$html.addClass(i),this.open()}):this.matchMedia(n.expanded.use,function(){l.$html.addClass(i),l.$html.hasClass(a.wrapper+"_sidebar-closed")||this.open()},function(){l.$html.removeClass(i),this.close()}),this.bind("close:start",function(){l.$html.hasClass(i)&&l.$html.addClass(a.wrapper+"_sidebar-closed")}),this.bind("open:start",function(){l.$html.removeClass(a.wrapper+"_sidebar-closed")}))}},add:function(){a=e[s]._c,n=e[s]._d,t=e[s]._e},clickAnchor:function(e,s,n){if(this.opts[d].expanded.use&&l.$html.is('[class*="'+a.wrapper+'_sidebar-expanded-"]')&&s&&n)return{close:!1}}},e[s].defaults[d]={collapsed:{use:!1,size:40,blockMenu:!0,hideDivider:!1,hideNavbar:!0},expanded:{use:!1,size:30}},e[s].configuration[d]={};var a,n,t,l}(jQuery);
11337/*
11338 * jQuery mmenu toggles add-on
11339 * mmenu.frebsite.nl
11340 */
11341!function(t){var e="mmenu",c="toggles";t[e].addons[c]={setup:function(){var s=this;this.opts[c],this.conf[c];a=t[e].glbl,this.bind("initPanels:after",function(e){this.__refactorClass(e.find("input"),this.conf.classNames[c].toggle,n.toggle),this.__refactorClass(e.find("input"),this.conf.classNames[c].check,n.check),e.find("input."+n.toggle+", input."+n.check).each(function(){var e=t(this),c=e.closest("li"),i=e.hasClass(n.toggle)?"toggle":"check",a=e.attr("id")||s.__getUniqueId();c.children('label[for="'+a+'"]').length||(e.attr("id",a),c.prepend(e),t('<label for="'+a+'" class="'+n[i]+'"></label>').insertBefore(c.children("a, span").last()))})})},add:function(){n=t[e]._c,s=t[e]._d,i=t[e]._e,n.add("toggle check")},clickAnchor:function(t,e){}},t[e].configuration.classNames[c]={toggle:"Toggle",check:"Check"};var n,s,i,a}(jQuery);
11342/*
11343 * jQuery mmenu navbar add-on breadcrumbs content
11344 * mmenu.frebsite.nl
11345 */
11346!function(a){var r="mmenu",n="navbars",e="breadcrumbs";a[r].addons[n][e]=function(n,e,s){var t=this,i=a[r]._c,b=a[r]._d;i.add("separator");var c=a('<span class="'+i.navbar+'__breadcrumbs" />').appendTo(n);this.bind("initNavbar:after",function(r){if(!r.children("."+i.navbar).children("."+i.navbar+"__breadcrumbs").length){r.removeClass(i.panel+"_has-navbar");for(var n=[],e=a('<span class="'+i.navbar+'__breadcrumbs"></span>'),t=r,c=!0;t&&t.length;){if(t.is("."+i.panel)||(t=t.closest("."+i.panel)),!t.parent("."+i.listitem+"_vertical").length){var d=t.children("."+i.navbar).children("."+i.navbar+"__title").text();d.length&&n.unshift(c?"<span>"+d+"</span>":'<a href="#'+t.attr("id")+'">'+d+"</a>"),c=!1}t=t.data(b.parent)}s.breadcrumbs.removeFirst&&n.shift(),e.append(n.join('<span class="'+i.separator+'">'+s.breadcrumbs.separator+"</span>")).appendTo(r.children("."+i.navbar))}}),this.bind("openPanel:start",function(a){var r=a.find("."+i.navbar+"__breadcrumbs");r.length&&c.html(r.html()||"")}),this.bind("initNavbar:after:sr-aria",function(r){r.children("."+i.navbar).children("."+i.breadcrumbs).children("a").each(function(){t.__sr_aria(a(this),"owns",a(this).attr("href").slice(1))})})}}(jQuery);
11347/*
11348 * jQuery mmenu navbar add-on close content
11349 * mmenu.frebsite.nl
11350 */
11351!function(t){var e="mmenu",n="navbars",a="close";t[e].addons[n][a]=function(n,a){var s=t[e]._c;t[e].glbl;s.add("close");var r=t('<a class="'+s.btn+" "+s.btn+"_close "+s.navbar+'__btn" href="#" />').appendTo(n);this.bind("setPage:after",function(t){r.attr("href","#"+t.attr("id"))}),this.bind("setPage:after:sr-text",function(n){r.html(this.__sr_text(t[e].i18n(this.conf.screenReader.text.closeMenu))),this.__sr_aria(r,"owns",r.attr("href").slice(1))})}}(jQuery);
11352/*
11353 * jQuery mmenu navbar add-on next content
11354 * mmenu.frebsite.nl
11355 */
11356!function(a){var n="mmenu",t="navbars",e="next";a[n].addons[t][e]=function(e,s){var r,i,h,d=a[n]._c,o=a('<a class="'+d.btn+" "+d.btn+"_next "+d.navbar+'__btn" href="#" />').appendTo(e);this.bind("openPanel:start",function(a){r=a.find("."+this.conf.classNames[t].panelNext),i=r.attr("href"),h=r.html(),i?o.attr("href",i):o.removeAttr("href"),o[i||h?"removeClass":"addClass"](d.hidden),o.html(h)}),this.bind("openPanel:start:sr-aria",function(a){this.__sr_aria(o,"hidden",o.hasClass(d.hidden)),this.__sr_aria(o,"owns",(o.attr("href")||"").slice(1))})},a[n].configuration.classNames[t].panelNext="Next"}(jQuery);
11357/*
11358 * jQuery mmenu navbar add-on prev content
11359 * mmenu.frebsite.nl
11360 */
11361!function(a){var n="mmenu",r="navbars",e="prev";a[n].addons[r][e]=function(e,t){var i=a[n]._c,s=a('<a class="'+i.btn+" "+i.btn+"_prev "+i.navbar+'__btn" href="#" />').appendTo(e);this.bind("initNavbar:after",function(a){a.removeClass(i.panel+"_has-navbar")});var h,l,d;this.bind("openPanel:start",function(a){a.parent("."+i.listitem+"_vertical").length||(h=a.find("."+this.conf.classNames[r].panelPrev),h.length||(h=a.children("."+i.navbar).children("."+i.btn+"_prev")),l=h.attr("href"),d=h.html(),l?s.attr("href",l):s.removeAttr("href"),s[l||d?"removeClass":"addClass"](i.hidden),s.html(d))}),this.bind("initNavbar:after:sr-aria",function(a){var n=a.children("."+i.navbar);this.__sr_aria(n,"hidden",!0)}),this.bind("openPanel:start:sr-aria",function(a){this.__sr_aria(s,"hidden",s.hasClass(i.hidden)),this.__sr_aria(s,"owns",(s.attr("href")||"").slice(1))})},a[n].configuration.classNames[r].panelPrev="Prev"}(jQuery);
11362/*
11363 * jQuery mmenu navbar add-on searchfield content
11364 * mmenu.frebsite.nl
11365 */
11366!function(s){var e="mmenu",a="navbars",d="searchfield";s[e].addons[a][d]=function(a,d){var i=s[e]._c,t=s('<div class="'+i.searchfield+'" />').appendTo(a);"object"!=typeof this.opts.searchfield&&(this.opts.searchfield={}),this.opts.searchfield.add=!0,this.opts.searchfield.addTo=t}}(jQuery);
11367/*
11368 * jQuery mmenu navbar add-on tabs content
11369 * mmenu.frebsite.nl
11370 */
11371!function(a){var t="mmenu",e="navbars",n="tabs";a[t].addons[e][n]=function(n,s,r){function i(a){c.removeClass(d.navbar+"__tab_selected");var t=c.filter('[href="#'+a.attr("id")+'"]');if(t.length)t.addClass(d.navbar+"__tab_selected");else{var e=a.data(l.parent);e&&e.length&&i(e.closest("."+d.panel))}}var d=a[t]._c,l=a[t]._d,o=a[t]._e,_=this,c=n.children("a");n.addClass(d.navbar+"_tabs").parent().addClass(d.navbars+"_has-tabs"),c.on(o.click+"-"+e,function(t){t.preventDefault();var e=a(this);if(e.hasClass(d.navbar+"__tab_selected"))return void t.stopImmediatePropagation();try{_.__openPanelWoAnimation(a(e.attr("href"))),t.stopImmediatePropagation()}catch(n){}}),this.bind("openPanel:start",i)}}(jQuery);
11372/*
11373 * jQuery mmenu navbar add-on title content
11374 * mmenu.frebsite.nl
11375 */
11376!function(t){var a="mmenu",e="navbars",n="title";t[a].addons[e][n]=function(n,i){var r,s,l,h=t[a]._c,d=t('<a class="'+h.navbar+'__title" />').appendTo(n);this.bind("openPanel:start",function(t){t.parent("."+h.listitem+"_vertical").length||(l=t.find("."+this.conf.classNames[e].panelTitle),l.length||(l=t.children("."+h.navbar).children("."+h.navbar+"__title")),r=l.attr("href"),s=l.html()||i.title,r?d.attr("href",r):d.removeAttr("href"),d[r||s?"removeClass":"addClass"](h.hidden),d.html(s))});var o;this.bind("openPanel:start:sr-aria",function(t){if(this.opts.screenReader.text&&(o||(o=this.$menu.children("."+h.navbars+"_top, ."+h.navbars+"_bottom").children("."+h.navbar).children("."+h.btn+"_prev")),o.length)){var a=!0;"parent"==this.opts.navbar.titleLink&&(a=!o.hasClass(h.hidden)),this.__sr_aria(d,"hidden",a)}})},t[a].configuration.classNames[e].panelTitle="Title"}(jQuery);
11377/*
11378 * jQuery mmenu Angular wrapper
11379 * mmenu.frebsite.nl
11380 */
11381!function(e){var n="mmenu",t="angular";e[n].wrappers[t]=function(){this.opts.onClick={close:!0,preventDefault:!1,setSelected:!0}}}(jQuery);
11382/*
11383 * jQuery mmenu Bootstrap 3 wrapper
11384 * mmenu.frebsite.nl
11385 */
11386!function(n){var a="mmenu",e="bootstrap3";n[a].wrappers[e]=function(){if(this.$menu.hasClass("navbar-collapse")){this.conf.classNames.selected="active",this.conf.classNames.divider="divider",this.conf.clone=!0,this.opts.hooks=this.opts.hooks||{};for(var n="",a=["nav-tabs","nav-pills","navbar-nav"],e=0;e<a.length;e++)if(this.$menu.find("."+a[e]).length){n=a[e];break}n.length&&(this.opts.hooks["initMenu:before"]=function(){"navbar-nav"==n&&this.$menu.wrapInner("<div />")},this.opts.hooks["initMenu:after"]=function(){t.menu.call(this),t.dropdown.call(this),t[n.split("nav
11386-").join("").split("-nav").join("")].call(this)})}};var t={menu:function(){this.$menu.find(".nav").removeClass("nav").end().find(".sr-only").remove().end().find(".divider:empty").remove();for(var n=["role","aria-haspopup","aria-expanded"],a=0;a<n.length;a++)this.$menu.find("["+n[a]+"]").removeAttr(n[a])},dropdown:function(){var a=this.$menu.find(".dropdown");a.removeClass("dropdown"),a.children(".dropdown-toggle").find(".caret").remove().end().each(function(){n(this).replaceWith("<span>"+n(this).html()+"</span>")}),a.children(".dropdown-menu").removeClass("dropdown-menu")},tabs:function(){this.$menu.find(".nav-tabs").removeClass("nav-tabs")},pills:function(){this.$menu.find(".nav-pills").removeClass("nav-pills")},navbar:function(){var n=this;this.$menu.removeClass("collapse navbar-collapse").find('[class*="navbar-"]').removeClass("navbar-left navbar-right navbar-nav navbar-text navbar-btn");var a=this.$menu.find(".navbar-form");this.conf.searchform={form:{action:a.attr("action"),method:a.attr("method")},input:{name:a.find("input").attr("name")},submit:!0},a.remove(),(this.$orig||this.$menu).closest(".navbar").find(".navbar-header").find(".navbar-toggle").off("click").on("click",function(a){n.open(),a.stopImmediatePropagation(),a.preventDefault()})}}}(jQuery);
11387/*
11388 * jQuery mmenu Bootstrap 4 wrapper
11389 * mmenu.frebsite.nl
11390 */
11391!function(n){function e(e){for(var a=n("<a />"),t=["href","title","target"],r=0;r<t.length;r++)"undefined"!=typeof e.attr(t[r])&&a.attr(t[r],e.attr(t[r]));return a.html(e.html()),a.find(".sr-only").remove(),a}function a(a){var t=n("<ul />");return a.find(".dropdown-item, .dropdown-divider").each(function(){var a=n(this),r=n("<li />");a.hasClass("dropdown-divider")?r.addClass("Divider"):r.append(e(a)),t.append(r)}),t}function t(t){var r=n("<ul />");return t.find(".nav-item").each(function(){var t=n(this),i=n("<li />");if(t.hasClass("active")&&i.addClass("Selected"),!t.hasClass("nav-link")){var o=t.children(".dropdown-menu");o.length&&i.append(a(o)),t=t.children(".nav-link")}i.prepend(e(t)),r.append(i)}),r}var r="mmenu",i="bootstrap4";n[r].wrappers[i]=function(){var e=this;if(this.$menu.hasClass("navbar-collapse")){this.conf.clone=!1;var r=n("<nav />"),i=n("<div />");r.append(i),this.$menu.children().each(function(){var r=n(this);switch(!0){case r.hasClass("navbar-nav"):i.append(t(r));break;case r.hasClass("dropdown-menu"):i.append(a(r));break;case r.hasClass("form-inline"):e.conf.searchfield.form={action:r.attr("action")||null,method:r.attr("method")||null},e.conf.searchfield.input={name:r.find("input").attr("name")||null},e.conf.searchfield.clear=!1,e.conf.searchfield.submit=!0;break;default:i.append(r.clone(!0))}}),this.bind("initMenu:before",function(){r.prependTo("body"),this.$menu=r}),this.$menu.parent().find(".navbar-toggler").removeAttr("data-target").removeAttr("aria-controls").off("click").on("click",function(n){n.preventDefault(),n.stopImmediatePropagation(),e[e.vars.opened?"close":"open"]()})}}}(jQuery);
11392/*
11393 * jQuery mmenu jQuery Mobile wrapper
11394 * mmenu.frebsite.nl
11395 */
11396!function(e){var n="mmenu",t="jqueryMobile";e[n].wrappers[t]=function(){var n=this;this.opts.onClick.close=!1,this.conf.offCanvas.pageSelector="div.ui-page-active",e("body").on("pagecontainerchange",function(e,t){"function"==typeof n.close&&(n.close(),n.setPage(t.toPage))}),this.bind("initAnchors:after",function(){e("body").on("click",".mm-listview a",function(n){n.isDefaultPrevented()||(n.preventDefault(),e("body").pagecontainer("change",this.href))})})}}(jQuery);
11397/*
11398 * jQuery mmenu Magento wrapper
11399 * mmenu.frebsite.nl
11400 */
11401!function(e){var n="mmenu",a="magento";e[n].wrappers[a]=function(){this.conf.classNames.selected="active"}}(jQuery);
11402/*
11403 * jQuery mmenu Olark wrapper
11404 * mmenu.frebsite.nl
11405 */
11406!function(n){var o="mmenu",a="olark";n[o].wrappers[a]=function(){this.conf.offCanvas.noPageSelector.push("#olark")}}(jQuery);
11407/*
11408 * jQuery mmenu Turbolinks wrapper
11409 * mmenu.frebsite.nl
11410 */
11411!function(n){var t="mmenu",o="turbolinks";n[t].wrappers[o]=function(){var o,r;n(document).on("turbolinks:before-visit",function(){r=n("html"),o=r.attr("class"),o=n.grep(o.split(/\s+/),function(n){return!/mm-/.test(n)}).join(" ")}).on("turbolinks:load",function(){"undefined"!=typeof r&&(r.attr("class",o),n[t].glbl=!1)})}}(jQuery);
11412/*
11413 * jQuery mmenu WordPress wrapper
11414 * mmenu.frebsite.nl
11415 */
11416!function(s){var e="mmenu",n="wordpress";s[e].wrappers[n]=function(){this.conf.classNames.selected="current-menu-item",s("#wpadminbar").css("position","fixed").addClass("mm-slideout")}}(jQuery);
11417return true;
11418}));
11419/*!
11420 * Bootstrap-select v1.14.0-beta3 (https://github.com/snapappointments/bootstrap-select/blob/main/js/bootstrap-select.js)
11421 *
11422 * Copyright 2012-2022 SnapAppointments, LLC
11423 * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
11424 */
11425(function ($) {
11426    'use strict';
11427
11428    var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
11429
11430    var uriAttrs = [
11431        'background',
11432        'cite',
11433        'href',
11434        'itemtype',
11435        'longdesc',
11436        'poster',
11437        'src',
11438        'xlink:href'
11439    ];
11440
11441    var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
11442
11443    var DefaultWhitelist = {
11444        // Global attributes allowed on any supplied element below.
11445        '*': ['class', 'dir', 'id', 'lang', 'role', 'tabindex', 'style', ARIA_ATTRIBUTE_PATTERN],
11446        a: ['target', 'href', 'title', 'rel'],
11447        area: [],
11448        b: [],
11449        br: [],
11450        col: [],
11451        code: [],
11452        div: [],
11453        em: [],
11454        hr: [],
11455        h1: [],
11456        h2: [],
11457        h3: [],
11458        h4: [],
11459        h5: [],
11460        h6: [],
11461        i: [],
11462        img: ['src', 'alt', 'title', 'width', 'height'],
11463        li: [],
11464        ol: [],
11465        p: [],
11466        pre: [],
11467        s: [],
11468        small: [],
11469        span: [],
11470        sub: [],
11471        sup: [],
11472        strong: [],
11473        u: [],
11474        ul: []
11475    };
11476
11477    /**
11478     * A pattern that recognizes a commonly useful subset of URLs that are safe.
11479     *
11480     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
11481     */
11482    var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
11483
11484    /**
11485     * A pattern that matches safe data URLs. Only matches image, video and audio types.
11486     *
11487     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
11488     */
11489    var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
11490
11491    var ParseableAttributes = ['title', 'placeholder'];
11491 // attributes to use as settings, can add others in the future
11492
11493    function allowedAttribute (attr, allowedAttributeList) {
11494        var attrName = attr.nodeName.toLowerCase();
11495
11496        if ($.inArray(attrName, allowedAttributeList) !== -1) {
11497            if ($.inArray(attrName, uriAttrs) !== -1) {
11498                return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
11499            }
11500
11501            return true;
11502        }
11503
11504        var regExp = $(allowedAttributeList).filter(function (index, value) {
11505            return value instanceof RegExp;
11506        });
11507
11508        // Check if a regular expression validates the attribute.
11509        for (var i = 0, l = regExp.length; i < l; i++) {
11510            if (attrName.match(regExp[i])) {
11511                return true;
11512            }
11513        }
11514
11515        return false;
11516    }
11517
11518    function sanitizeHtml (unsafeElements, whiteList, sanitizeFn) {
11519        if (sanitizeFn && typeof sanitizeFn === 'function') {
11520            return sanitizeFn(unsafeElements);
11521        }
11522
11523        var whitelistKeys = Object.keys(whiteList);
11524
11525        for (var i = 0, len = unsafeElements.length; i < len; i++) {
11526            var elements = unsafeElements[i].querySelectorAll('*');
11527
11528            for (var j = 0, len2 = elements.length; j < len2; j++) {
11529                var el = elements[j];
11530                var elName = el.nodeName.toLowerCase();
11531
11532                if (whitelistKeys.indexOf(elName) === -1) {
11533                    el.parentNode.removeChild(el);
11534
11535                    continue;
11536                }
11537
11538                var attributeList = [].slice.call(el.attributes);
11539                var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
11540
11541                for (var k = 0, len3 = attributeList.length; k < len3; k++) {
11542                    var attr = attributeList[k];
11543
11544                    if (!allowedAttribute(attr, whitelistedAttributes)) {
11545                        el.removeAttribute(attr.nodeName);
11546                    }
11547                }
11548            }
11549        }
11550    }
11551
11552    function getAttributesObject ($select) {
11553        var attributesObject = {},
11554            attrVal;
11555
11556        ParseableAttributes.forEach(function (item) {
11557            attrVal = $select.attr(item);
11558            if (attrVal) attributesObject[item] = attrVal;
11559        });
11560
11561        // for backwards compatibility
11562        // (using title as placeholder is deprecated - remove in v2.0.0)
11563        if (!attributesObject.placeholder && attributesObject.title) {
11564            attributesObject.placeholder = attributesObject.title;
11565        }
11566
11567        return attributesObject;
11568    }
11569
11570    // Polyfill for browsers with no classList support
11571    // Remove in v2
11572    if (!('classList' in document.createElement('_'))) {
11573        (function (view) {
11574            if (!('Element' in view)) return;
11575
11576            var classListProp = 'classList',
11577                protoProp = 'prototype',
11578                elemCtrProto = view.Element[protoProp],
11579                objCtr = Object,
11580                classListGetter = function () {
11581                    var $elem = $(this);
11582
11583                    return {
11584                        add: function (classes) {
11585                            classes = Array.prototype.slice.call(arguments).join(' ');
11586                            return $elem.addClass(classes);
11587                        },
11588                        remove: function (classes) {
11589                            classes = Array.prototype.slice.call(arguments).join(' ');
11590                            return $elem.removeClass(classes);
11591                        },
11592                        toggle: function (classes, force) {
11593                            return $elem.toggleClass(classes, force);
11594                        },
11595                        contains: function (classes) {
11596                            return $elem.hasClass(classes);
11597                        }
11598                    };
11599                };
11600
11601            if (objCtr.defineProperty) {
11602                var classListPropDesc = {
11603                    get: classListGetter,
11604                    enumerable: true,
11605                    configurable: true
11606                };
11607                try {
11608                    objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
11609                } catch (ex) { // IE 8 doesn't support enumerable:true
11610                    // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36
11611                    // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected
11612                    if (ex.number === undefined || ex.number === -0x7FF5EC54) {
11613                        classListPropDesc.enumerable = false;
11614                        objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
11615                    }
11616                }
11617            } else if (objCtr[protoProp].__defineGetter__) {
11618                elemCtrProto.__defineGetter__(classListProp, classListGetter);
11619            }
11620        }(window));
11621    }
11622
11623    var testElement = document.createElement('_');
11624
11625    testElement.classList.add('c1', 'c2');
11626
11627    if (!testElement.classList.contains('c2')) {
11628        var _add = DOMTokenList.prototype.add,
11629            _remove = DOMTokenList.prototype.remove;
11630
11631        DOMTokenList.prototype.add = function () {
11632            Array.prototype.forEach.call(arguments, _add.bind(this));
11633        };
11634
11635        DOMTokenList.prototype.remove = function () {
11636            Array.prototype.forEach.call(arguments, _remove.bind(this));
11637        };
11638    }
11639
11640    testElement.classList.toggle('c3', false);
11641
11642    // Polyfill for IE 10 and Firefox <24, where classList.toggle does not
11643    // support the second argument.
11644    if (testElement.classList.contains('c3')) {
11645        var _toggle = DOMTokenList.prototype.toggle;
11646
11647        DOMTokenList.prototype.toggle = function (token, force) {
11648            if (1 in arguments && !this.contains(token) === !force) {
11649                return force;
11650            } else {
11651                return _toggle.call(this, token);
11652            }
11653        };
11654    }
11655
11656    testElement = null;
11657
11658    // Polyfill for IE (remove in v2)
11659    Object.values = typeof Object.values === 'function' ? Object.values : function (obj) {
11660        return Object.keys(obj).map(function (key) {
11661            return obj[key];
11662        });
11663    };
11664
11665    // shallow array comparison
11666    function isEqual (array1, array2) {
11667        return array1.length === array2.length && array1.every(function (element, index) {
11668            return element === array2[index];
11669        });
11670    };
11671
11672    // <editor-fold desc="Shims">
11673    if (!String.prototype.startsWith) {
11674        (function () {
11675            'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
11676            var toString = {}.toString;
11677            var startsWith = function (search) {
11678                if (this == null) {
11679                    throw new TypeError();
11680                }
11681                var string = String(this);
11682                if (search && toString.call(search) == '[object RegExp]') {
11683                    throw new TypeError();
11684                }
11685                var stringLength = string.length;
11686                var searchString = String(search);
11687                var searchLength = searchString.length;
11688                var position = arguments.length > 1 ? arguments[1] : undefined;
11689                // `ToInteger`
11690                var pos = position ? Number(position) : 0;
11691                if (pos != pos) { // better `isNaN`
11692                    pos = 0;
11693                }
11694                var start = Math.min(Math.max(pos, 0), stringLength);
11695                // Avoid the `indexOf` call if no match is possible
11696                if (searchLength + start > stringLength) {
11697                    return false;
11698                }
11699                var index = -1;
11700                while (++index < searchLength) {
11701                    if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
11702                        return false;
11703                    }
11704                }
11705                return true;
11706            };
11707            if (Object.defineProperty) {
11708                Object.defineProperty(String.prototype, 'startsWith', {
11709                    'value': startsWith,
11710                    'configurable': true,
11711                    'writable': true
11712                });
11713            } else {
11714                String.prototype.startsWith = startsWith;
11715            }
11716        }());
11717    }
11718
11719    function toKebabCase (str) {
11720        return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, function ($, ofs) {
11721            return (ofs ? '-' : '') + $.toLowerCase();
11722        });
11723    }
11724
11725    function getSelectedOptions () {
11726        var options = this.selectpicker.main.data;
11727
11728        if (this.options.source.data || this.options.source.search) {
11729            options = Object.values(this.selectpicker.optionValuesDataMap);
11730        }
11731
11732        var selectedOptions = options.filter(function (item) {
11733            if (item.selected) {
11734                if (this.options.hideDisabled && item.disabled) return false;
11735                return true;
11736            }
11737
11738            return false;
11739        }, this);
11740
11741        // ensure only 1 option is selected if multiple are set in the data source
11742        if (this.options.source.data && !this.multiple && selectedOptions.length > 1) {
11743            for (var i = 0; i < selectedOptions.length - 1; i++) {
11744                selectedOptions[i].selected = false;
11745            }
11746
11747            selectedOptions = [ selectedOptions[selectedOptions.length - 1] ];
11748        }
11749
11750        return selectedOptions;
11751    }
11752
11753    // much faster than $.val()
11754    function getSelectValues (selectedOptions) {
11755        var value = [],
11756            options = selectedOptions || getSelectedOptions.call(this),
11757            opt;
11758
11759        for (var i = 0, len = options.length; i < len; i++) {
11760            opt = options[i];
11761
11762            if (!opt.disabled) {
11763                value.push(opt.value === undefined ? opt.text : opt.value);
11764            }
11765        }
11766
11767        if (!this.multiple) {
11768            return !value.length ? null : value[0];
11769        }
11770
11771        return value;
11772    }
11773
11774    // set data-selected on select element if the value has been programmatically selected
11775    // prior to initialization of bootstrap-select
11776    // * consider removing or replacing an alternative method *
11777    var valHooks = {
11778        useDefault: false,
11779        _set: $.valHooks.select.set
11780    };
11781
11782    $.valHooks.select.set = function (elem, value) {
11783        if (value && !valHooks.useDefault) $(elem).data('selected', true);
11784
11785        return valHooks._set.apply(this, arguments);
11786    };
11787
11788    var changedArguments = null;
11789
11790    var EventIsSupported = (function () {
11791        try {
11792            new Event('change');
11793            return true;
11794        } catch (e) {
11795            return false;
11796        }
11797    })();
11798
11799    $.fn.triggerNative = function (eventName) {
11800        var el = this[0],
11801            event;
11802
11803        if (el.dispatchEvent) { // for modern browsers & IE9+
11804            if (EventIsSupported) {
11805                // For modern browsers
11806                event = new Event(eventName, {
11807                    bubbles: true
11808                });
11809            } else {
11810                // For IE since it doesn't support Event constructor
11811                event = document.createEvent('Event');
11812                event.initEvent(eventName, true, false);
11813            }
11814
11815            el.dispatchEvent(event);
11816        }
11817    };
11818    // </editor-fold>
11819
11820    function stringSearch (li, searchString, method, normalize) {
11821        var stringTypes = [
11822                'display',
11823                'subtext',
11824                'tokens'
11825            ],
11826            searchSuccess = false;
11827
11828        for (var i = 0; i < stringTypes.length; i++) {
11829            var stringType = stringTypes[i],
11830                string = li[stringType];
11831
11832            if (string) {
11833                string = string.toString();
11834
11835                // Strip HTML tags. This isn't perfect, but it's much faster than any other method
11836                if (stringType === 'display') {
11837                    string = string.replace(/<[^>]+>/g, '');
11838                }
11839
11840                if (normalize) string = normalizeToBase(string);
11841                string = string.toUpperCase();
11842
11843                if (typeof method === 'function') {
11844                    searchSuccess = method(string, searchString);
11845                } else if (method === 'contains') {
11846                    searchSuccess = string.indexOf(searchString) >= 0;
11847                } else {
11848                    searchSuccess = string.startsWith(searchString);
11849                }
11850
11851                if (searchSuccess) break;
11852            }
11853        }
11854
11855        return searchSuccess;
11856    }
11857
11858    function toInteger (value) {
11859        return parseInt(value, 10) || 0;
11860    }
11861
11862    // Borrowed from Lodash (_.deburr)
11863    /** Used to map Latin Unicode letters to basic Latin letters. */
11864    var deburredLetters = {
11865        // Latin-1 Supplement block.
11866        '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
11867        '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
11868        '\xc7': 'C',  '\xe7': 'c',
11869        '\xd0': 'D',  '\xf0': 'd',
11870        '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
11871        '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
11872        '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
11873        '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
11874        '\xd1': 'N',  '\xf1': 'n',
11875        '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
11876        '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
11877        '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
11878        '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
11879        '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
11880        '\xc6': 'Ae', '\xe6': 'ae',
11881        '\xde': 'Th', '\xfe': 'th',
11882        '\xdf': 'ss',
11883        // Latin Extended-A block.
11884        '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
11885        '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
11886        '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
11887        '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
11888        '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
11889        '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
11890        '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
11891        '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
11892        '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
11893        '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
11894        '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
11895        '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
11896        '\u0134': 'J',  '\u0135': 'j',
11897        '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
11898        '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
11899        '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
11900        '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
11901        '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
11902        '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
11903        '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
11904        '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
11905        '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
11906        '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
11907        '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
11908        '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
11909        '\u0163': 't',  '\u0165': 't', '\u0167': 't',
11910        '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
11911        '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
11912        '\u0174': 'W',  '\u0175': 'w',
11913        '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
11914        '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
11915        '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
11916        '\u0132': 'IJ', '\u0133': 'ij',
11917        '\u0152': 'Oe', '\u0153': 'oe',
11918        '\u0149': "'n", '\u017f': 's'
11919    };
11920
11921    /** Used to match Latin Unicode letters (excluding mathematical operators). */
vendor: 10,276 bytes, lines 11922-12234
11922    var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
11923
11924    /** Used to compose unicode character classes. */
11925    var rsComboMarksRange = '\\u0300-\\u036f',
11926        reComboHalfMarksRange = '\\ufe20-\\ufe2f',
11927        rsComboSymbolsRange = '\\u20d0-\\u20ff',
11928        rsComboMarksExtendedRange = '\\u1ab0-\\u1aff',
11929        rsComboMarksSupplementRange = '\\u1dc0-\\u1dff',
11930        rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;
11931
11932    /** Used to compose unicode capture groups. */
11933    var rsCombo = '[' + rsComboRange + ']';
11934
11935    /**
11936     * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
11937     * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
11938     */
11939    var reComboMark = RegExp(rsCombo, 'g');
11940
11941    function deburrLetter (key) {
11942        return deburredLetters[key];
11943    };
11944
11945    function normalizeToBase (string) {
11946        string = string.toString();
11947        return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
11948    }
11949
11950    // List of HTML entities for escaping.
11951    var escapeMap = {
11952        '&': '&amp;',
11953        '<': '&lt;',
11954        '>': '&gt;',
11955        '"': '&quot;',
11956        "'": '&#x27;',
11957        '`': '&#x60;'
11958    };
11959
11960    // Functions for escaping and unescaping strings to/from HTML interpolation.
11961    var createEscaper = function (map) {
11962        var escaper = function (match) {
11963            return map[match];
11964        };
11965        // Regexes for identifying a key that needs to be escaped.
11966        var source = '(?:' + Object.keys(map).join('|') + ')';
11967        var testRegexp = RegExp(source);
11968        var replaceRegexp = RegExp(source, 'g');
11969        return function (string) {
11970            string = string == null ? '' : '' + string;
11971            return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
11972        };
11973    };
11974
11975    var htmlEscape = createEscaper(escapeMap);
11976
11977    /**
11978     * ------------------------------------------------------------------------
11979     * Constants
11980     * ------------------------------------------------------------------------
11981     */
11982
11983    var keyCodeMap = {
11984        32: ' ',
11985        48: '0',
11986        49: '1',
11987        50: '2',
11988        51: '3',
11989        52: '4',
11990        53: '5',
11991        54: '6',
11992        55: '7',
11993        56: '8',
11994        57: '9',
11995        59: ';',
11996        65: 'A',
11997        66: 'B',
11998        67: 'C',
11999        68: 'D',
12000        69: 'E',
12001        70: 'F',
12002        71: 'G',
12003        72: 'H',
12004        73: 'I',
12005        74: 'J',
12006        75: 'K',
12007        76: 'L',
12008        77: 'M',
12009        78: 'N',
12010        79: 'O',
12011        80: 'P',
12012        81: 'Q',
12013        82: 'R',
12014        83: 'S',
12015        84: 'T',
12016        85: 'U',
12017        86: 'V',
12018        87: 'W',
12019        88: 'X',
12020        89: 'Y',
12021        90: 'Z',
12022        96: '0',
12023        97: '1',
12024        98: '2',
12025        99: '3',
12026        100: '4',
12027        101: '5',
12028        102: '6',
12029        103: '7',
12030        104: '8',
12031        105: '9'
12032    };
12033
12034    var keyCodes = {
12035        ESCAPE: 27, // KeyboardEvent.which value for Escape (Esc) key
12036        ENTER: 13, // KeyboardEvent.which value for Enter key
12037        SPACE: 32, // KeyboardEvent.which value for space key
12038        TAB: 9, // KeyboardEvent.which value for tab key
12039        ARROW_UP: 38, // KeyboardEvent.which value for up arrow key
12040        ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key
12041    };
12042
12043    // eslint-disable-next-line no-undef
12044    var Dropdown = window.Dropdown || bootstrap.Dropdown;
12045
12046    function getVersion () {
12047        var version;
12048
12049        try {
12050            version = $.fn.dropdown.Constructor.VERSION;
12051        } catch (err) {
12052            version = Dropdown.VERSION;
12053        }
12054
12055        return version;
12056    }
12057
12058    var version = {
12059        success: false,
12060        major: '3'
12061    };
12062
12063    try {
12064        version.full = (getVersion() || '').split(' ')[0].split('.');
12065        version.major = version.full[0];
12066        version.success = true;
12067    } catch (err) {
12068        // do nothing
12069    }
12070
12071    var selectId = 0;
12072
12073    var EVENT_KEY = '.bs.select';
12074
12075    var classNames = {
12076        DISABLED: 'disabled',
12077        DIVIDER: 'divider',
12078        SHOW: 'open',
12079        DROPUP: 'dropup',
12080        MENU: 'dropdown-menu',
12081        MENURIGHT: 'dropdown-menu-right',
12082        MENULEFT: 'dropdown-menu-left',
12083        // to-do: replace with more advanced template/customization options
12084        BUTTONCLASS: 'btn-default',
12085        POPOVERHEADER: 'popover-title',
12086        ICONBASE: 'glyphicon',
12087        TICKICON: 'glyphicon-ok'
12088    };
12089
12090    var Selector = {
12091        MENU: '.' + classNames.MENU,
12092        DATA_TOGGLE: 'data-toggle="dropdown"'
12093    };
12094
12095    var elementTemplates = {
12096        div: document.createElement('div'),
12097        span: document.createElement('span'),
12098        i: document.createElement('i'),
12099        subtext: document.createElement('small'),
12100        a: document.createElement('a'),
12101        li: document.createElement('li'),
12102        whitespace: document.createTextNode('\u00A0'),
12103        fragment: document.createDocumentFragment(),
12104        option: document.createElement('option')
12105    };
12106
12107    elementTemplates.selectedOption = elementTemplates.option.cloneNode(false);
12108    elementTemplates.selectedOption.setAttribute('selected', true);
12109
12110    elementTemplates.noResults = elementTemplates.li.cloneNode(false);
12111    elementTemplates.noResults.className = 'no-results';
12112
12113    elementTemplates.a.setAttribute('role', 'option');
12114    elementTemplates.a.className = 'dropdown-item';
12115
12116    elementTemplates.subtext.className = 'text-muted';
12117
12118    elementTemplates.text = elementTemplates.span.cloneNode(false);
12119    elementTemplates.text.className = 'text';
12120
12121    elementTemplates.checkMark = elementTemplates.span.cloneNode(false);
12122
12123    var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);
12124    var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);
12125
12126    var generateOption = {
12127        li: function (content, classes, optgroup) {
12128            var li = elementTemplates.li.cloneNode(false);
12129
12130            if (content) {
12131                if (content.nodeType === 1 || content.nodeType === 11) {
12132                    li.appendChild(content);
12133                } else {
12134                    li.innerHTML = content;
12135                }
12136            }
12137
12138            if (typeof classes !== 'undefined' && classes !== '') li.className = classes;
12139            if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);
12140
12141            return li;
12142        },
12143
12144        a: function (text, classes, inline) {
12145            var a = elementTemplates.a.cloneNode(true);
12146
12147            if (text) {
12148                if (text.nodeType === 11) {
12149                    a.appendChild(text);
12150                } else {
12151                    a.insertAdjacentHTML('beforeend', text);
12152                }
12153            }
12154
12155            if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\s+/));
12156            if (inline) a.setAttribute('style', inline);
12157
12158            return a;
12159        },
12160
12161        text: function (options, useFragment) {
12162            var textElement = elementTemplates.text.cloneNode(false),
12163                subtextElement,
12164                iconElement;
12165
12166            if (options.content) {
12167                textElement.innerHTML = options.content;
12168            } else {
12169                textElement.textContent = options.text;
12170
12171                if (options.icon) {
12172                    var whitespace = elementTemplates.whitespace.cloneNode(false);
12173
12174                    // need to use <i> for icons in the button to prevent a breaking change
12175                    // note: switch to span in next major release
12176                    iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);
12177                    iconElement.className = this.options.iconBase + ' ' + options.icon;
12178
12179                    elementTemplates.fragment.appendChild(iconElement);
12180                    elementTemplates.fragment.appendChild(whitespace);
12181                }
12182
12183                if (options.subtext) {
12184                    subtextElement = elementTemplates.subtext.cloneNode(false);
12185                    subtextElement.textContent = options.subtext;
12186                    textElement.appendChild(subtextElement);
12187                }
12188            }
12189
12190            if (useFragment === true) {
12191                while (textElement.childNodes.length > 0) {
12192                    elementTemplates.fragment.appendChild(textElement.childNodes[0]);
12193                }
12194            } else {
12195                elementTemplates.fragment.appendChild(textElement);
12196            }
12197
12198            return elementTemplates.fragment;
12199        },
12200
12201        label: function (options) {
12202            var textElement = elementTemplates.text.cloneNode(false),
12203                subtextElement,
12204                iconElement;
12205
12206            textElement.innerHTML = options.display;
12207
12208            if (options.icon) {
12209                var whitespace = elementTemplates.whitespace.cloneNode(false);
12210
12211                iconElement = elementTemplates.span.cloneNode(false);
12212                iconElement.className = this.options.iconBase + ' ' + options.icon;
12213
12214                elementTemplates.fragment.appendChild(iconElement);
12215                elementTemplates.fragment.appendChild(whitespace);
12216            }
12217
12218            if (options.subtext) {
12219                subtextElement = elementTemplates.subtext.cloneNode(false);
12220                subtextElement.textContent = options.subtext;
12221                textElement.appendChild(subtextElement);
12222            }
12223
12224            elementTemplates.fragment.appendChild(textElement);
12225
12226            return elementTemplates.fragment;
12227        }
12228    };
12229
12230    var getOptionData = {
12231        fromOption: function (option, type) {
12232            var value;
12233
12234            switch (type) {
12235                case 'divider':
12236                    value = option.getAttribute('data-divider') === 'true';
12237                    break;
12238
12239                case 'text':
12240                    value = option.textContent;
12241                    break;
12242
12243                case 'label':
12244                    value = option.label;
12245                    break;
12246
12247                case 'style':
12248                    value = option.style.cssText;
12249                    break;
12250
12251                case 'title':
12252                    value = option.title;
12253                    break;
12254
12255                default:
12256                    value = option.getAttribute('data-' + toKebabCase(type));
12257                    break;
12258            }
12259
12260            return value;
12261        },
12262        fromDataSource: function (option, type) {
12263            var value;
12264
12265            switch (type) {
12266                case 'text':
12267                case 'label':
12268                    value = option.text || option.value || '';
12269                    break;
12270
12271                default:
12272                    value = option[type];
12273                    break;
12274            }
12275
12276            return value;
12277        }
12278    };
12279
12280    function showNoResults (searchMatch, searchValue) {
12281        if (!searchMatch.length) {
12282            elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '"' + htmlEscape(searchValue) + '"');
12283            this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);
12284        }
12285    }
12286
12287    function filterHidden (item) {
12288        return !(item.hidden || this.options.hideDisabled && item.disabled);
12289    }
12290
12291    var Selectpicker = function (element, options) {
12292        var that = this;
12293
12294        // bootstrap-select has been initialized - revert valHooks.select.set back to its original function
12295        if (!valHooks.useDefault) {
12296            $.valHooks.select.set = valHooks._set;
12297            valHooks.useDefault = true;
12298        }
12299
12300        this.$element = $(element);
12301        this.$newElement = null;
12302        this.$button = null;
12303        this.$menu = null;
12304        this.options = options;
12305        this.selectpicker = {
12306            main: {
12307                data: [],
12308                optionQueue: elementTemplates.fragment.cloneNode(false),
12309                hasMore: false
12310            },
12311            search: {
12312                data: [],
12313                hasMore: false
12314            },
12315            current: {}, // current is either equal to main or search depending on if a search is in progress
12316            view: {},
12317            // map of option values and their respective data (only used in conjunction with options.source)
12318            optionValuesDataMap: {},
12319            isSearching: false,
12320            keydown: {
12321                keyHistory: '',
12322                resetKeyHistory: {
12323                    start: function () {
12324                        return setTimeout(function () {
12325                            that.selectpicker.keydown.keyHistory = '';
12326                        }, 800);
12327                    }
12328                }
12329            }
12330        };
12331
12332        this.sizeInfo = {};
12333
12334        // Format window padding
12335        var winPad = this.options.windowPadding;
12336        if (typeof winPad === 'number') {
12337            this.options.windowPadding = [winPad, winPad, winPad, winPad];
12338        }
12339
12340        // Expose public methods
12341        this.val = Selectpicker.prototype.val;
12342        this.render = Selectpicker.prototype.render;
12343        this.refresh = Selectpicker.prototype.refresh;
12344        this.setStyle = Selectpicker.prototype.setStyle;
12345        this.selectAll = Selectpicker.prototype.selectAll;
12346        this.deselectAll = Selectpicker.prototype.deselectAll;
12347        this.destroy = Selectpicker.prototype.destroy;
12348        this.remove = Selectpicker.prototype.remove;
12349        this.show = Selectpicker.prototype.show;
12350        this.hide = Selectpicker.prototype.hide;
12351
12352        this.init();
12353    };
12354
12355    Selectpicker.VERSION = '1.14.0-beta3';
12356
12357    // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
12358    Selectpicker.DEFAULTS = {
12359        noneSelectedText: 'Nothing selected',
12360        noneResultsText: 'No results matched {0}',
12361        countSelectedText: function (numSelected, numTotal) {
12362            return (numSelected == 1) ? '{0} item selected' : '{0} items selected';
12363        },
12364        maxOptionsText: function (numAll, numGroup) {
12365            return [
12366                (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
12367                (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
12368            ];
12369        },
12370        selectAllText: 'Select All',
12371        deselectAllText: 'Deselect All',
12372        source: {
12373            pageSize: 40
12374        },
12375        chunkSize: 40,
12376        doneButton: false,
12377        doneButtonText: 'Close',
12378        multipleSeparator: ', ',
12379        styleBase: 'btn',
12380        style: classNames.BUTTONCLASS,
12381        size: 'auto',
12382        title: null,
12383        placeholder: null,
12384        allowClear: false,
12385        selectedTextFormat: 'values',
12386        width: false,
12387        container: false,
12388        hideDisabled: false,
12389        showSubtext: false,
12390        showIcon: true,
12391        showContent: true,
12392        dropupAuto: true,
12393        header: false,
12394        liveSearch: false,
12395        liveSearchPlaceholder: null,
12396        liveSearchNormalize: false,
12397        liveSearchStyle: 'contains',
12398        actionsBox: false,
12399        iconBase: classNames.ICONBASE,
12400        tickIcon: classNames.TICKICON,
12401        showTick: false,
12402        template: {
12403            caret: '<span class="caret"></span>'
12404        },
12405        maxOptions: false,
12406        mobile: false,
12407        selectOnTab: true,
12408        dropdownAlignRight: false,
12409        windowPadding: 0,
12410        virtualScroll: 600,
12411        display: false,
12412        sanitize: true,
12413        sanitizeFn: null,
12414        whiteList: DefaultWhitelist
12415    };
12416
12417    Selectpicker.prototype = {
12418
12419        constructor: Selectpicker,
12420
12421        init: function () {
12422            var that = this,
12423                id = this.$element.attr('id'),
12424                element = this.$element[0],
12425                form = element.form;
12426
12427            selectId++;
12428            this.selectId = 'bs-select-' + selectId;
12429
12430            element.classList.add('bs-select-hidden');
12431
12432            this.multiple = this.$element.prop('multiple');
12433            this.autofocus = this.$element.prop('autofocus');
12434
12435            if (element.classList.contains('show-tick')) {
12436                this.options.showTick = true;
12437            }
12438
12439            this.$newElement = this.createDropdown();
12440
12441            this.$element
12442                .after(this.$newElement)
12443                .prependTo(this.$newElement);
12444
12445            // ensure select is associated with form element if it got unlinked after moving it inside newElement
12446            if (form && element.form === null) {
12447                if (!form.id) form.id = 'form-' + this.selectId;
12448                element.setAttribute('form', form.id);
12449            }
12450
12451            this.$button = this.$newElement.children('button');
12452            if (this.options.allowClear) this.$clearButton = this.$button.children('.bs-select-clear-selected');
12453            this.$menu = this.$newElement.children(Selector.MENU);
12454            this.$menuInner = this.$menu.children('.inner');
12455            this.$searchbox = this.$menu.find('input');
12456
12457            element.classList.remove('bs-select-hidden');
12458
12459            this.fetchData(function () {
12460                that.render(true);
12461                that.buildList();
12462
12463                requestAnimationFrame(function () {
12464                    that.$element.trigger('loaded' + EVENT_KEY);
12465                });
12466            });
12467
12468            if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);
12469
12470            if (typeof id !== 'undefined') {
12471                this.$button.attr('data-id', id);
12472            }
12473
12474            this.checkDisabled();
12475            this.clickListener();
12476
12477            if (version.major > 4) this.dropdown = new Dropdown(this.$button[0]);
12478
12479            if (this.options.liveSearch) {
12480                this.liveSearchListener();
12481                this.focusedParent = this.$searchbox[0];
12482            } else {
12483                this.focusedParent = this.$menuInner[0];
12484            }
12485
12486            this.setStyle();
12487            this.setWidth();
12488            if (this.options.container) {
12489                this.selectPosition();
12490            } else {
12491                this.$element.on('hide' + EVENT_KEY, function () {
12492                    if (that.isVirtual()) {
12493                        // empty menu on close
12494                        var menuInner = that.$menuInner[0],
12495                            emptyMenu = menuInner.firstChild.cloneNode(false);
12496
12497                        // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''
12498                        menuInner.replaceChild(emptyMenu, menuInner.firstChild);
12499                        menuInner.scrollTop = 0;
12500                    }
12501                });
12502            }
12503            this.$menu.data('this', this);
12504            this.$newElement.data('this', this);
12505            if (this.options.mobile) this.mobile();
12506
12507            this.$newElement.on({
12508                'hide.bs.dropdown': function (e) {
12509                    that.$element.trigger('hide' + EVENT_KEY, e);
12510                },
12511                'hidden.bs.dropdown': function (e) {
12512                    that.$element.trigger('hidden' + EVENT_KEY, e);
12513                },
12514                'show.bs.dropdown': function (e) {
vendor: 23,062 bytes, lines 12515-12990
12515                    that.$element.trigger('show' + EVENT_KEY, e);
12516                },
12517                'shown.bs.dropdown': function (e) {
12518                    that.$element.trigger('shown' + EVENT_KEY, e);
12519                }
12520            });
12521
12522            if (element.hasAttribute('required')) {
12523                this.$element.on('invalid' + EVENT_KEY, function () {
12524                    that.$button[0].classList.add('bs-invalid');
12525
12526                    that.$element
12527                        .on('shown' + EVENT_KEY + '.invalid', function () {
12528                            that.$element
12529                                .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened
12530                                .off('shown' + EVENT_KEY + '.invalid');
12531                        })
12532                        .on('rendered' + EVENT_KEY, function () {
12533                            // if select is no longer invalid, remove the bs-invalid class
12534                            if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');
12535                            that.$element.off('rendered' + EVENT_KEY);
12536                        });
12537
12538                    that.$button.on('blur' + EVENT_KEY, function () {
12539                        that.$element.trigger('focus').trigger('blur');
12540                        that.$button.off('blur' + EVENT_KEY);
12541                    });
12542                });
12543            }
12544
12545            if (form) {
12546                $(form).on('reset' + EVENT_KEY, function () {
12547                    requestAnimationFrame(function () {
12548                        that.render();
12549                    });
12550                });
12551            }
12552        },
12553
12554        createDropdown: function () {
12555            // Options
12556            // If we are multiple or showTick option is set, then add the show-tick class
12557            var showTick = (this.multiple || this.options.showTick) ? ' show-tick' : '',
12558                multiselectable = this.multiple ? ' aria-multiselectable="true"' : '',
12559                inputGroup = '',
12560                autofocus = this.autofocus ? ' autofocus' : '';
12561
12562            if (version.major < 4 && this.$element.parent().hasClass('input-group')) {
12563                inputGroup = ' input-group-btn';
12564            }
12565
12566            // Elements
12567            var drop,
12568                header = '',
12569                searchbox = '',
12570                actionsbox = '',
12571                donebutton = '',
12572                clearButton = '';
12573
12574            if (this.options.header) {
12575                header =
12576                    '<div class="' + classNames.POPOVERHEADER + '">' +
12577                    '<button type="button" class="close" aria-hidden="true">&times;</button>' +
12578                    this.options.header +
12579                    '</div>';
12580            }
12581
12582            if (this.options.liveSearch) {
12583                searchbox =
12584                    '<div class="bs-searchbox">' +
12585                    '<input type="search" class="form-control" autocomplete="off"' +
12586                    (
12587                        this.options.liveSearchPlaceholder === null ? ''
12588                            :
12589                            ' placeholder="' + htmlEscape(this.options.liveSearchPlaceholder) + '"'
12590                    ) +
12591                    ' role="combobox" aria-label="Search" aria-controls="' + this.selectId + '" aria-autocomplete="list">' +
12592                    '</div>';
12593            }
12594
12595            if (this.multiple && this.options.actionsBox) {
12596                actionsbox =
12597                    '<div class="bs-actionsbox">' +
12598                    '<div class="btn-group btn-group-sm">' +
12599                    '<button type="button" class="actions-btn bs-select-all btn ' + classNames.BUTTONCLASS + '">' +
12600                    this.options.selectAllText +
12601                    '</button>' +
12602                    '<button type="button" class="actions-btn bs-deselect-all btn ' + classNames.BUTTONCLASS + '">' +
12603                    this.options.deselectAllText +
12604                    '</button>' +
12605                    '</div>' +
12606                    '</div>';
12607            }
12608
12609            if (this.multiple && this.options.doneButton) {
12610                donebutton =
12611                    '<div class="bs-donebutton">' +
12612                    '<div class="btn-group">' +
12613                    '<button type="button" class="btn btn-sm ' + classNames.BUTTONCLASS + '">' +
12614                    this.options.doneButtonText +
12615                    '</button>' +
12616                    '</div>' +
12617                    '</div>';
12618            }
12619
12620            if (this.options.allowClear) {
12621                clearButton = '<span class="close bs-select-clear-selected" title="' + this.options.deselectAllText + '"><span>&times;</span>';
12622            }
12623
12624            drop =
12625                '<div class="dropdown bootstrap-select' + showTick + inputGroup + '">' +
12626                '<button type="button" tabindex="-1" class="' +
12627                this.options.styleBase +
12628                ' dropdown-toggle" ' +
12629                (this.options.display === 'static' ? 'data-display="static"' : '') +
12630                Selector.DATA_TOGGLE +
12631                autofocus +
12632                ' role="combobox" aria-owns="' +
12633                this.selectId +
12634                '" aria-haspopup="listbox" aria-expanded="false">' +
12635                '<div class="filter-option">' +
12636                '<div class="filter-option-inner">' +
12637                '<div class="filter-option-inner-inner">&nbsp;</div>' +
12638                '</div> ' +
12639                '</div>' +
12640                clearButton +
12641                '</span>' +
12642                (
12643                    version.major >= '4' ? ''
12644                        :
12645                        '<span class="bs-caret">' +
12646                        this.options.template.caret +
12647                        '</span>'
12648                ) +
12649                '</button>' +
12650                '<div class="' + classNames.MENU + ' ' + (version.major >= '4' ? '' : classNames.SHOW) + '">' +
12651                header +
12652                searchbox +
12653                actionsbox +
12654                '<div class="inner ' + classNames.SHOW + '" role="listbox" id="' + this.selectId + '" tabindex="-1" ' + multiselectable + '>' +
12655                '<ul class="' + classNames.MENU + ' inner ' + (version.major >= '4' ? classNames.SHOW : '') + '" role="presentation">' +
12656                '</ul>' +
12657                '</div>' +
12658                donebutton +
12659                '</div>' +
12660                '</div>';
12661
12662            return $(drop);
12663        },
12664
12665        setPositionData: function () {
12666            this.selectpicker.view.canHighlight = [];
12667            this.selectpicker.view.size = 0;
12668            this.selectpicker.view.firstHighlightIndex = false;
12669
12670            for (var i = 0; i < this.selectpicker.current.data.length; i++) {
12671                var li = this.selectpicker.current.data[i],
12672                    canHighlight = true;
12673
12674                if (li.type === 'divider') {
12675                    canHighlight = false;
12676                    li.height = this.sizeInfo.dividerHeight;
12677                } else if (li.type === 'optgroup-label') {
12678                    canHighlight = false;
12679                    li.height = this.sizeInfo.dropdownHeaderHeight;
12680                } else {
12681                    li.height = this.sizeInfo.liHeight;
12682                }
12683
12684                if (li.disabled) canHighlight = false;
12685
12686                this.selectpicker.view.canHighlight.push(canHighlight);
12687
12688                if (canHighlight) {
12689                    this.selectpicker.view.size++;
12690                    li.posinset = this.selectpicker.view.size;
12691                    if (this.selectpicker.view.firstHighlightIndex === false) this.selectpicker.view.firstHighlightIndex = i;
12692                }
12693
12694                li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;
12695            }
12696        },
12697
12698        isVirtual: function () {
12699            return (this.options.virtualScroll !== false) && (this.selectpicker.main.data.length >= this.options.virtualScroll) || this.options.virtualScroll === true;
12700        },
12701
12702        createView: function (isSearching, setSize, refresh) {
12703            var that = this,
12704                scrollTop = 0;
12705
12706            this.selectpicker.isSearching = isSearching;
12707            this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;
12708
12709            this.setPositionData();
12710
12711            if (setSize) {
12712                if (refresh) {
12713                    scrollTop = this.$menuInner[0].scrollTop;
12714                } else if (!that.multiple) {
12715                    var element = that.$element[0],
12716                        selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;
12717
12718                    if (typeof selectedIndex === 'number' && that.options.size !== false) {
12719                        var selectedData = that.selectpicker.main.data[selectedIndex],
12720                            position = selectedData && selectedData.position;
12721
12722                        if (position) {
12723                            scrollTop = position - ((that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2);
12724                        }
12725                    }
12726                }
12727            }
12728
12729            scroll(scrollTop, true);
12730
12731            this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {
12732                if (!that.noScroll) scroll(this.scrollTop, updateValue);
12733                that.noScroll = false;
12734            });
12735
12736            function scroll (scrollTop, init) {
12737                var size = that.selectpicker.current.data.length,
12738                    chunks = [],
12739                    chunkSize,
12740                    chunkCount,
12741                    firstChunk,
12742                    lastChunk,
12743                    currentChunk,
12744                    prevPositions,
12745                    positionIsDifferent,
12746                    previousElements,
12747                    menuIsDifferent = true,
12748                    isVirtual = that.isVirtual();
12749
12750                that.selectpicker.view.scrollTop = scrollTop;
12751
12752                chunkSize = that.options.chunkSize; // number of options in a chunk
12753                chunkCount = Math.ceil(size / chunkSize) || 1; // number of chunks
12754
12755                for (var i = 0; i < chunkCount; i++) {
12756                    var endOfChunk = (i + 1) * chunkSize;
12757
12758                    if (i === chunkCount - 1) {
12759                        endOfChunk = size;
12760                    }
12761
12762                    chunks[i] = [
12763                        (i) * chunkSize + (!i ? 0 : 1),
12764                        endOfChunk
12765                    ];
12766
12767                    if (!size) break;
12768
12769                    if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {
12770                        currentChunk = i;
12771                    }
12772                }
12773
12774                if (currentChunk === undefined) currentChunk = 0;
12775
12776                prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1];
12777
12778                // always display previous, current, and next chunks
12779                firstChunk = Math.max(0, currentChunk - 1);
12780                lastChunk = Math.min(chunkCount - 1, currentChunk + 1);
12781
12782                that.selectpicker.view.position0 = isVirtual === false ? 0 : (Math.max(0, chunks[firstChunk][0]) || 0);
12783                that.selectpicker.view.position1 = isVirtual === false ? size : (Math.min(size, chunks[lastChunk][1]) || 0);
12784
12785                positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;
12786
12787                if (that.activeElement !== undefined) {
12788                    if (init) {
12789                        if (that.activeElement !== that.selectedElement) {
12790                            that.defocusItem(that.activeElement);
12791                        }
12792                        that.activeElement = undefined;
12793                    }
12794
12795                    if (that.activeElement !== that.selectedElement) {
12796                        that.defocusItem(that.selectedElement);
12797                    }
12798                }
12799
12800                if (that.prevActiveElement !== undefined && that.prevActiveElement !== that.activeElement && that.prevActiveElement !== that.selectedElement) {
12801                    that.defocusItem(that.prevActiveElement);
12802                }
12803
12804                if (init || positionIsDifferent || that.selectpicker.current.hasMore) {
12805                    previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];
12806
12807                    if (isVirtual === false) {
12808                        that.selectpicker.view.visibleElements = that.selectpicker.current.elements;
12809                    } else {
12810                        that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);
12811                    }
12812
12813                    that.setOptionStatus();
12814
12815                    // if searching, check to make sure the list has actually been updated before updating DOM
12816                    // this prevents unnecessary repaints
12817                    if (isSearching || (isVirtual === false && init)) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements);
12818
12819                    // if virtual scroll is disabled and not searching,
12820                    // menu should never need to be updated more than once
12821                    if ((init || isVirtual === true) && menuIsDifferent) {
12822                        var menuInner = that.$menuInner[0],
12823                            menuFragment = document.createDocumentFragment(),
12824                            emptyMenu = menuInner.firstChild.cloneNode(false),
12825                            marginTop,
12826                            marginBottom,
12827                            elements = that.selectpicker.view.visibleElements,
12828                            toSanitize = [];
12829
12830                        // replace the existing UL with an empty one - this is faster than $.empty()
12831                        menuInner.replaceChild(emptyMenu, menuInner.firstChild);
12832
12833                        for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {
12834                            var element = elements[i],
12835                                elText,
12836                                elementData;
12837
12838                            if (that.options.sanitize) {
12839                                elText = element.lastChild;
12840
12841                                if (elText) {
12842                                    elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];
12843
12844                                    if (elementData && elementData.content && !elementData.sanitized) {
12845                                        toSanitize.push(elText);
12846                                        elementData.sanitized = true;
12847                                    }
12848                                }
12849                            }
12850
12851                            menuFragment.appendChild(element);
12852                        }
12853
12854                        if (that.options.sanitize && toSanitize.length) {
12855                            sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);
12856                        }
12857
12858                        if (isVirtual === true) {
12859                            marginTop = (that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position);
12860                            marginBottom = (that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position);
12861
12862                            menuInner.firstChild.style.marginTop = marginTop + 'px';
12863                            menuInner.firstChild.style.marginBottom = marginBottom + 'px';
12864                        } else {
12865                            menuInner.firstChild.style.marginTop = 0;
12866                            menuInner.firstChild.style.marginBottom = 0;
12867                        }
12868
12869                        menuInner.firstChild.appendChild(menuFragment);
12870
12871                        // if an option is encountered that is wider than the current menu width, update the menu width accordingly
12872                        // switch to ResizeObserver with increased browser support
12873                        if (isVirtual === true && that.sizeInfo.hasScrollBar) {
12874                            var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;
12875
12876                            if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {
12877                                menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';
12878                            } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {
12879                                // set to 0 to get actual width of menu
12880                                that.$menu[0].style.minWidth = 0;
12881
12882                                var actualMenuWidth = menuInner.firstChild.offsetWidth;
12883
12884                                if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {
12885                                    that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;
12886                                    menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';
12887                                }
12888
12889                                // reset to default CSS styling
12890                                that.$menu[0].style.minWidth = '';
12891                            }
12892                        }
12893                    }
12894
12895                    if ((!isSearching && that.options.source.data || isSearching && that.options.source.search) && that.selectpicker.current.hasMore && currentChunk === chunkCount - 1) {
12896                        // Don't load the next chunk until scrolling has started
12897                        // This prevents unnecessary requests while the user is typing if pageSize is <= chunkSize
12898                        if (scrollTop > 0) {
12899                            // Chunks use 0-based indexing, but pages use 1-based. Add 1 to convert and add 1 again to get next page
12900                            var page = Math.floor((currentChunk * that.options.chunkSize) / that.options.source.pageSize) + 2;
12901
12902                            that.fetchData(function () {
12903                                that.render();
12904                                that.buildList(size, isSearching);
12905                                that.setPositionData();
12906                                scroll(scrollTop);
12907                            }, isSearching ? 'search' : 'data', page, isSearching ? that.selectpicker.search.previousValue : undefined);
12908                        }
12909                    }
12910                }
12911
12912                that.prevActiveElement = that.activeElement;
12913
12914                if (!that.options.liveSearch) {
12915                    that.$menuInner.trigger('focus');
12916                } else if (isSearching && init) {
12917                    var index = 0,
12918                        newActive;
12919
12920                    if (!that.selectpicker.view.canHighlight[index]) {
12921                        index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);
12922                    }
12923
12924                    newActive = that.selectpicker.view.visibleElements[index];
12925
12926                    that.defocusItem(that.selectpicker.view.currentActive);
12927
12928                    that.activeElement = (that.selectpicker.current.data[index] || {}).element;
12929
12930                    that.focusItem(newActive);
12931                }
12932            }
12933
12934            $(window)
12935                .off('resize' + EVENT_KEY + '.' + this.selectId + '.createView')
12936                .on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {
12937                    var isActive = that.$newElement.hasClass(classNames.SHOW);
12938
12939                    if (isActive) scroll(that.$menuInner[0].scrollTop);
12940                });
12941        },
12942
12943        focusItem: function (li, liData, noStyle) {
12944            if (li) {
12945                liData = liData || this.selectpicker.current.data[this.selectpicker.current.elements.indexOf(this.activeElement)];
12946                var a = li.firstChild;
12947
12948                if (a) {
12949                    a.setAttribute('aria-setsize', this.selectpicker.view.size);
12950                    a.setAttribute('aria-posinset', liData.posinset);
12951
12952                    if (noStyle !== true) {
12953                        this.focusedParent.setAttribute('aria-activedescendant', a.id);
12954                        li.classList.add('active');
12955                        a.classList.add('active');
12956                    }
12957                }
12958            }
12959        },
12960
12961        defocusItem: function (li) {
12962            if (li) {
12963                li.classList.remove('active');
12964                if (li.firstChild) li.firstChild.classList.remove('active');
12965            }
12966        },
12967
12968        setPlaceholder: function () {
12969            var that = this,
12970                updateIndex = false;
12971
12972            if ((this.options.placeholder || this.options.allowClear) && !this.multiple) {
12973                if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option');
12974
12975                // this option doesn't create a new <li> element, but does add a new option at the start,
12976                // so startIndex should increase to prevent having to check every option for the bs-title-option class
12977                updateIndex = true;
12978
12979                var element = this.$element[0],
12980                    selectTitleOption = false,
12981                    titleNotAppended = !this.selectpicker.view.titleOption.parentNode,
12982                    selectedIndex = element.selectedIndex,
12983                    selectedOption = element.options[selectedIndex],
12984                    firstSelectable = element.querySelector('select > *:not(:disabled)'),
12985                    firstSelectableIndex = firstSelectable ? firstSelectable.index : 0,
12986                    navigation = window.performance && window.performance.getEntriesByType('navigation'),
12987                    // Safari doesn't support getEntriesByType('navigation') - fall back to performance.navigation
12988                    isNotBackForward = (navigation && navigation.length) ? navigation[0].type !== 'back_forward' : window.performance.navigation.type !== 2;
12989
12990                if (titleNotAppended) {
12991                    // Use native JS to prepend option (faster)
12992                    this.selectpicker.view.titleOption.className = 'bs-title-option';
12993                    this.selectpicker.view.titleOption.value = '';
12994
12995                    // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.
12996                    // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,
12997                    // if so, the select will have the data-selected attribute
12998                    selectTitleOption = !selectedOption || (selectedIndex === firstSelectableIndex && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined);
12999                }
13000
13001                if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {
13002                    element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);
13003                }
13004
13005                // Set selected *after* appending to select,
13006                // otherwise the option doesn't get selected in IE
13007                // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11
13008                if (selectTitleOption && isNotBackForward) {
13009                    element.selectedIndex = 0;
13010                } else if (document.readyState !== 'complete') {
13011                    // if navigation type is back_forward, there's a chance the select will have its value set by BFCache
13012                    // wait for that value to be set, then run render again
13013                    window.addEventListener('pageshow', function () {
13014                        if (that.selectpicker.view.displayedValue !== element.value) that.render();
13015                    });
13016                }
13017            }
13018
13019            return updateIndex;
13020        },
13021
13022        fetchData: function (callback, type, page, searchValue) {
13023            page = page || 1;
13024            type = type || 'data';
13025
13026            var that = this,
13027                data = this.options.source[type],
13028                builtData;
13029
13030            if (data) {
13031                this.options.virtualScroll = true;
13032
13033                if (typeof data === 'function') {
13034                    data.call(
13035                        this,
13036                        function (data, more, totalItems) {
13037                            var current = that.selectpicker[type === 'search' ? 'search' : 'main'];
13038                            current.hasMore = more;
13039                            current.totalItems = totalItems;
13040                            builtData = that.buildData(data, type);
13041                            callback.call(that, builtData);
13042                            that.$element.trigger('fetched' + EVENT_KEY);
13043                        },
13044                        page,
13045                        searchValue
13046                    );
13047                } else if (Array.isArray(data)) {
13048                    builtData = that.buildData(data, type);
13049                    callback.call(that, builtData);
13050                }
13051            } else {
13052                builtData = this.buildData(false, type);
13053                callback.call(that, builtData);
13054            }
13055        },
13056
13057        buildData: function (data, type) {
13058            var that = this;
13059            var dataGetter = data === false ? getOptionData.fromOption : getOptionData.fromDataSource;
13060
13061            var optionSelector = ':not([hidden]):not([data-hidden="true"]):not([style*="display: none"])',
13062                mainData = [],
13063                startLen = this.selectpicker.main.data ? this.selectpicker.main.data.length : 0,
13064                optID = 0,
13065                startIndex = this.setPlaceholder() && !data ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop
13066
13067            if (type === 'search') {
13068                startLen = this.selectpicker.search.data.length;
13069            }
13070
13071            if (this.options.hideDisabled) optionSelector += ':not(:disabled)';
13072
13073            var selectOptions = data ? data.filter(filterHidden, this) : this.$element[0].querySelectorAll('select > *' + optionSelector);
13074
13075            function addDivider (config) {
13076                var previousData = mainData[mainData.length - 1];
13077
13078                // ensure optgroup doesn't create back-to-back dividers
13079                if (
13080                    previousData &&
13081                    previousData.type === 'divider' &&
13082                    (previousData.optID || config.optID)
13083                ) {
13084                    return;
13085                }
13086
13087                config = config || {};
13088                config.type = 'divider';
13089
13090                mainData.push(config);
13091            }
13092
13093            function addOption (item, config) {
13094                config = config || {};
13095
13096                config.divider = dataGetter(item, 'divider');
13097
13098                if (config.divider === true) {
13099                    addDivider({
13100                        optID: config.optID
13101                    });
13102                } else {
13103                    var liIndex = mainData.length + startLen,
13104                        cssText = dataGetter(item, 'style'),
13105                        inlineStyle = cssText ? htmlEscape(cssText) : '',
13106                        optionClass = (item.className || '') + (config.optgroupClass || '');
13107
13108                    if (config.optID) optionClass = 'opt ' + optionClass;
13109
13110                    config.optionClass = optionClass.trim();
13111                    config.inlineStyle = inlineStyle;
13112
13113                    config.text = dataGetter(item, 'text');
13114                    config.title = dataGetter(item, 'title');
13115                    config.content = dataGetter(item, 'content');
13116                    config.tokens = dataGetter(item, 'tokens');
13117                    config.subtext = dataGetter(item, 'subtext');
13118                    config.icon = dataGetter(item, 'icon');
13119
13120                    config.display = config.content || config.text;
13121                    config.value = item.value === undefined ? item.text : item.value;
13122                    config.type = 'option';
13123                    config.index = liIndex;
13124
13125                    config.option = !item.option ? item : item.option; // reference option element if it exists
13126                    config.option.liIndex = liIndex;
13127                    config.selected = !!item.selected;
13128                    config.disabled = config.disabled || !!item.disabled;
13129
13130                    if (data !== false) {
13131                        if (that.selectpicker.optionValuesDataMap[config.value]) {
13132                            config = $.extend(that.selectpicker.optionValuesDataMap[config.value], config);
13133                        } else {
13134                            that.selectpicker.optionValuesDataMap[config.value] = config;
13135                        }
13136                    }
13137
13138                    mainData.push(config);
13139                }
13140            }
13141
13142            function addOptgroup (index, selectOptions) {
13143                var optgroup = selectOptions[index],
13144                    // skip placeholder option
13145                    previous = index - 1 < startIndex ? false : selectOptions[index - 1],
13146                    next = selectOptions[index + 1],
13147                    options = data ? optgroup.children.filter(filterHidden, this) : optgroup.querySelectorAll('option' + optionSelector);
13148
13149                if (!options.length) return;
13150
13151                var config = {
13152                        display: htmlEscape(dataGetter(item, 'label')),
13153                        subtext: dataGetter(optgroup, 'subtext'),
13154                        icon: dataGetter(optgroup, 'icon'),
13155                        type: 'optgroup-label',
13156                        optgroupClass: ' ' + (optgroup.className || ''),
13157                        optgroup: optgroup
13158                    },
13159                    headerIndex,
13160                    lastIndex;
13161
13162                optID++;
13163
13164                if (previous) {
13165                    addDivider({ optID: optID });
13166                }
13167
13168                config.optID = optID;
13169
13170                mainData.push(config);
13171
13172                for (var j = 0, len = options.length; j < len; j++) {
13173                    var option = options[j];
13174
13175                    if (j === 0) {
13176                        headerIndex = mainData.length - 1;
13177                        lastIndex = headerIndex + len;
13178                    }
13179
13180                    addOption(option, {
13181                        headerIndex: headerIndex,
13182                        lastIndex: lastIndex,
13183                        optID: config.optID,
13184                        optgroupClass: config.optgroupClass,
13185                        disabled: optgroup.disabled
13186                    });
13187                }
13188
13189                if (next) {
13190                    addDivider({ optID: optID });
13191                }
13192            }
13193
13194            for (var len = selectOptions.length, i = startIndex; i < len; i++) {
13195                var item = selectOptions[i],
13196                    children = item.children;
13197
13198                if (children && children.length) {
13199                    addOptgroup.call(this, i, selectOptions);
13200                } else {
13201                    addOption.call(this, item, {});
13202                }
13203            }
13204
13205            switch (type) {
13206                case 'data': {
13207                    if (!this.selectpicker.main.data) {
13208                        this.selectpicker.main.data = [];
13209                    }
13210                    Array.prototype.push.apply(this.selectpicker.main.data, mainData);
13211                    this.selectpicker.current.data = this.selectpicker.main.data;
13212                    break;
13213                }
13214                case 'search': {
13215                    Array.prototype.push.apply(this.selectpicker.search.data, mainData);
13216                    break;
13217                }
13218            }
13219
13220            return mainData;
13221        },
13222
13223        buildList: function (size, searching) {
13224            var that = this,
13225                selectData = searching ? this.selectpicker.search.data : this.selectpicker.main.data,
13226                mainElements = [],
13227                widestOptionLength = 0;
13228
13229            if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {
13230                elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';
13231                elementTemplates.a.appendChild(elementTemplates.checkMark);
13232            }
13233
13234            function buildElement (mainElements, item) {
13235                var liElement,
13236                    combinedLength = 0;
13237
13238                switch (item.type) {
vendor: 14,788 bytes, lines 13239-13533
13239                    case 'divider':
13240                        liElement = generateOption.li(
13241                            false,
13242                            classNames.DIVIDER,
13243                            (item.optID ? item.optID + 'div' : undefined)
13244                        );
13245
13246                        break;
13247
13248                    case 'option':
13249                        liElement = generateOption.li(
13250                            generateOption.a(
13251                                generateOption.text.call(that, item),
13252                                item.optionClass,
13253                                item.inlineStyle
13254                            ),
13255                            '',
13256                            item.optID
13257                        );
13258
13259                        if (liElement.firstChild) {
13260                            liElement.firstChild.id = that.selectId + '-' + item.index;
13261                        }
13262
13263                        break;
13264
13265                    case 'optgroup-label':
13266                        liElement = generateOption.li(
13267                            generateOption.label.call(that, item),
13268                            'dropdown-header' + item.optgroupClass,
13269                            item.optID
13270                        );
13271
13272                        break;
13273                }
13274
13275                if (!item.element) {
13276                    item.element = liElement;
13277                } else {
13278                    item.element.innerHTML = liElement.innerHTML;
13279                }
13280                mainElements.push(item.element);
13281
13282                // count the number of characters in the option - not perfect, but should work in most cases
13283                if (item.display) combinedLength += item.display.length;
13284                if (item.subtext) combinedLength += item.subtext.length;
13285                // if there is an icon, ensure this option's width is checked
13286                if (item.icon) combinedLength += 1;
13287
13288                if (combinedLength > widestOptionLength) {
13289                    widestOptionLength = combinedLength;
13290
13291                    // guess which option is the widest
13292                    // use this when calculating menu width
13293                    // not perfect, but it's fast, and the width will be updating accordingly when scrolling
13294                    that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];
13295                }
13296            }
13297
13298            var startIndex = size || 0;
13299
13300            for (var len = selectData.length, i = startIndex; i < len; i++) {
13301                var item = selectData[i];
13302
13303                buildElement(mainElements, item);
13304            }
13305
13306            if (size) {
13307                if (searching) {
13308                    Array.prototype.push.apply(this.selectpicker.search.elements, mainElements);
13309                } else {
13310                    Array.prototype.push.apply(this.selectpicker.main.elements, mainElements);
13311                    this.selectpicker.current.elements = this.selectpicker.main.elements;
13312                }
13313            } else {
13314                if (searching) {
13315                    this.selectpicker.search.elements = mainElements;
13316                } else {
13317                    this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;
13318                }
13319            }
13320        },
13321
13322        findLis: function () {
13323            return this.$menuInner.find('.inner > li');
13324        },
13325
13326        render: function (init) {
13327            var that = this,
13328                element = this.$element[0],
13329                // ensure titleOption is appended and selected (if necessary) before getting selectedOptions
13330                placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,
13331                selectedOptions = getSelectedOptions.call(this),
13332                selectedCount = selectedOptions.length,
13333                selectedValues = getSelectValues.call(this, selectedOptions),
13334                button = this.$button[0],
13335                buttonInner = button.querySelector('.filter-option-inner-inner'),
13336                multipleSeparator = document.createTextNode(this.options.multipleSeparator),
13337                titleFragment = elementTemplates.fragment.cloneNode(false),
13338                showCount,
13339                countMax,
13340                hasContent = false;
13341
13342            function createSelected (item) {
13343                if (item.selected) {
13344                    that.createOption(item, true);
13345                } else if (item.children && item.children.length) {
13346                    item.children.map(createSelected);
13347                }
13348            }
13349
13350            // create selected option elements to ensure select value is correct
13351            if (this.options.source.data && init) {
13352                selectedOptions.map(createSelected);
13353                element.appendChild(this.selectpicker.main.optionQueue);
13354
13355                if (placeholderSelected) placeholderSelected = element.selectedIndex === 0;
13356            }
13357
13358            button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !selectedValues && selectedValues !== 0);
13359
13360            if (!that.multiple && selectedOptions.length === 1) {
13361                that.selectpicker.view.displayedValue = selectedValues;
13362            }
13363
13364            if (this.options.selectedTextFormat === 'static') {
13365                titleFragment = generateOption.text.call(this, { text: this.options.placeholder }, true);
13366            } else {
13367                showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 0;
13368
13369                // determine if the number of selected options will be shown (showCount === true)
13370                if (showCount) {
13371                    countMax = this.options.selectedTextFormat.split('>');
13372                    showCount = (countMax.length > 1 && selectedCount > countMax[1]) || (countMax.length === 1 && selectedCount >= 2);
13373                }
13374
13375                // only loop through all selected options if the count won't be shown
13376                if (showCount === false) {
13377                    if (!placeholderSelected) {
13378                        for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {
13379                            if (selectedIndex < 50) {
13380                                var option = selectedOptions[selectedIndex],
13381                                    titleOptions = {};
13382
13383                                if (option) {
13384                                    if (this.multiple && selectedIndex > 0) {
13385                                        titleFragment.appendChild(multipleSeparator.cloneNode(false));
13386                                    }
13387
13388                                    if (option.title) {
13389                                        titleOptions.text = option.title;
13390                                    } else if (option.content && that.options.showContent) {
13391                                        titleOptions.content = option.content.toString();
13392                                        hasContent = true;
13393                                    } else {
13394                                        if (that.options.showIcon) {
13395                                            titleOptions.icon = option.icon;
13396                                        }
13397                                        if (that.options.showSubtext && !that.multiple && option.subtext) titleOptions.subtext = ' ' + option.subtext;
13398                                        titleOptions.text = option.text.trim();
13399                                    }
13400
13401                                    titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));
13402                                }
13403                            } else {
13404                                break;
13405                            }
13406                        }
13407
13408                        // add ellipsis
13409                        if (selectedCount > 49) {
13410                            titleFragment.appendChild(document.createTextNode('...'));
13411                        }
13412                    }
13413                } else {
13414                    var optionSelector = ':not([hidden]):not([data-hidden="true"]):not([data-divider="true"]):not([style*="display: none"])';
13415                    if (this.options.hideDisabled) optionSelector += ':not(:disabled)';
13416
13417                    // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.
13418                    var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,
13419                        tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;
13420
13421                    titleFragment = generateOption.text.call(this, {
13422                        text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())
13423                    }, true);
13424                }
13425            }
13426
13427            // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText
13428            if (!titleFragment.childNodes.length) {
13429                titleFragment = generateOption.text.call(this, {
13430                    text: this.options.placeholder ? this.options.placeholder : this.options.noneSelectedText
13431                }, true);
13432            }
13433
13434            // if the select has a title, apply it to the button, and if not, apply titleFragment text
13435            // strip all HTML tags and trim the result, then unescape any escaped tags
13436            button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();
13437
13438            if (this.options.sanitize && hasContent) {
13439                sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);
13440            }
13441
13442            buttonInner.innerHTML = '';
13443            buttonInner.appendChild(titleFragment);
13444
13445            if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {
13446                var filterExpand = button.querySelector('.filter-expand'),
13447                    clone = buttonInner.cloneNode(true);
13448
13449                clone.className = 'filter-expand';
13450
13451                if (filterExpand) {
13452                    button.replaceChild(clone, filterExpand);
13453                } else {
13454                    button.appendChild(clone);
13455                }
13456            }
13457
13458            this.$element.trigger('rendered' + EVENT_KEY);
13459        },
13460
13461        /**
13462         * @param [style]
13463         * @param [status]
13464         */
13465        setStyle: function (newStyle, status) {
13466            var button = this.$button[0],
13467                newElement = this.$newElement[0],
13468                style = this.options.style.trim(),
13469                buttonClass;
13470
13471            if (this.$element.attr('class')) {
13472                this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, ''));
13473            }
13474
13475            if (version.major < 4) {
13476                newElement.classList.add('bs3');
13477
13478                if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') &&
13479                    (newElement.previousElementSibling || newElement.nextElementSibling) &&
13480                    (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')
13481                ) {
13482                    newElement.classList.add('bs3-has-addon');
13483                }
13484            }
13485
13486            if (newStyle) {
13487                buttonClass = newStyle.trim();
13488            } else {
13489                buttonClass = style;
13490            }
13491
13492            if (status == 'add') {
13493                if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));
13494            } else if (status == 'remove') {
13495                if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));
13496            } else {
13497                if (style) button.classList.remove.apply(button.classList, style.split(' '));
13498                if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));
13499            }
13500        },
13501
13502        liHeight: function (refresh) {
13503            if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;
13504
13505            var newElement = elementTemplates.div.cloneNode(false),
13506                menu = elementTemplates.div.cloneNode(false),
13507                menuInner = elementTemplates.div.cloneNode(false),
13508                menuInnerInner = document.createElement('ul'),
13509                divider = elementTemplates.li.cloneNode(false),
13510                dropdownHeader = elementTemplates.li.cloneNode(false),
13511                li,
13512                a = elementTemplates.a.cloneNode(false),
13513                text = elementTemplates.span.cloneNode(false),
13514                header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,
13515                search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,
13516                actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
13517                doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,
13518                firstOption = this.$element[0].options[0];
13519
13520            this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;
13521
13522            text.className = 'text';
13523            a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');
13524            newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;
13525            newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating
13526            if (this.options.width === 'auto') menu.style.minWidth = 0;
13527            menu.className = classNames.MENU + ' ' + classNames.SHOW;
13528            menuInner.className = 'inner ' + classNames.SHOW;
13529            menuInnerInner.className = classNames.MENU + ' inner ' + (version.major >= '4' ? classNames.SHOW : '');
13530            divider.className = classNames.DIVIDER;
13531            dropdownHeader.className = 'dropdown-header';
13532
13533            text.appendChild(document.createTextNode('\u200b'));
13534
13535            if (this.selectpicker.current.data.length) {
13536                for (var i = 0; i < this.selectpicker.current.data.length; i++) {
13537                    var data = this.selectpicker.current.data[i];
13538                    if (data.type === 'option' && $(data.element.firstChild).css('display') !== 'none') {
13539                        li = data.element;
13540                        break;
13541                    }
13542                }
13543            } else {
13544                li = elementTemplates.li.cloneNode(false);
13545                a.appendChild(text);
13546                li.appendChild(a);
13547            }
13548
13549            dropdownHeader.appendChild(text.cloneNode(true));
13550
13551            if (this.selectpicker.view.widestOption) {
13552                menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));
13553            }
13554
13555            menuInnerInner.appendChild(li);
13556            menuInnerInner.appendChild(divider);
13557            menuInnerInner.appendChild(dropdownHeader);
13558            if (header) menu.appendChild(header);
13559            if (search) {
13560                var input = document.createElement('input');
13561                search.className = 'bs-searchbox';
13562                input.className = 'form-control';
13563                search.appendChild(input);
13564                menu.appendChild(search);
13565            }
13566            if (actions) menu.appendChild(actions);
13567            menuInner.appendChild(menuInnerInner);
13568            menu.appendChild(menuInner);
13569            if (doneButton) menu.appendChild(doneButton);
13570            newElement.appendChild(menu);
13571
13572            document.body.appendChild(newElement);
13573
13574            var liHeight = li.offsetHeight,
13575                dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0,
13576                headerHeight = header ? header.offsetHeight : 0,
13577                searchHeight = search ? search.offsetHeight : 0,
13578                actionsHeight = actions ? actions.offsetHeight : 0,
13579                doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,
13580                dividerHeight = $(divider).outerHeight(true),
13581                menuStyle = window.getComputedStyle(menu),
13582                menuWidth = menu.offsetWidth,
13583                menuPadding = {
13584                    vert: toInteger(menuStyle.paddingTop) +
13585                        toInteger(menuStyle.paddingBottom) +
13586                        toInteger(menuStyle.borderTopWidth) +
13587                        toInteger(menuStyle.borderBottomWidth),
13588                    horiz: toInteger(menuStyle.paddingLeft) +
13589                        toInteger(menuStyle.paddingRight) +
13590                        toInteger(menuStyle.borderLeftWidth) +
13591                        toInteger(menuStyle.borderRightWidth)
13592                },
13593                menuExtras = {
13594                    vert: menuPadding.vert +
13595                        toInteger(menuStyle.marginTop) +
13596                        toInteger(menuStyle.marginBottom) + 2,
13597                    horiz: menuPadding.horiz +
13598                        toInteger(menuStyle.marginLeft) +
13599                        toInteger(menuStyle.marginRight) + 2
13600                },
13601                scrollBarWidth;
13602
13603            menuInner.style.overflowY = 'scroll';
13604
13605            scrollBarWidth = menu.offsetWidth - menuWidth;
13606
13607            document.body.removeChild(newElement);
13608
13609            this.sizeInfo.liHeight = liHeight;
13610            this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight;
13611            this.sizeInfo.headerHeight = headerHeight;
13612            this.sizeInfo.searchHeight = searchHeight;
13613            this.sizeInfo.actionsHeight = actionsHeight;
13614            this.sizeInfo.doneButtonHeight = doneButtonHeight;
vendor: 10,248 bytes, lines 13615-13815
13615            this.sizeInfo.dividerHeight = dividerHeight;
13616            this.sizeInfo.menuPadding = menuPadding;
13617            this.sizeInfo.menuExtras = menuExtras;
13618            this.sizeInfo.menuWidth = menuWidth;
13619            this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz;
13620            this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth;
13621            this.sizeInfo.scrollBarWidth = scrollBarWidth;
13622            this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight;
13623
13624            this.setPositionData();
13625        },
13626
13627        getSelectPosition: function () {
13628            var that = this,
13629                $window = $(window),
13630                pos = that.$newElement.offset(),
13631                $container = $(that.options.container),
13632                containerPos;
13633
13634            if (that.options.container && $container.length && !$container.is('body')) {
13635                containerPos = $container.offset();
13636                containerPos.top += parseInt($container.css('borderTopWidth'));
13637                containerPos.left += parseInt($container.css('borderLeftWidth'));
13638            } else {
13639                containerPos = { top: 0, left: 0 };
13640            }
13641
13642            var winPad = that.options.windowPadding;
13643
13644            this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();
13645            this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2];
13646            this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();
13647            this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1];
13648            this.sizeInfo.selectOffsetTop -= winPad[0];
13649            this.sizeInfo.selectOffsetLeft -= winPad[3];
13650        },
13651
13652        setMenuSize: function (isAuto) {
13653            this.getSelectPosition();
13654
13655            var selectWidth = this.sizeInfo.selectWidth,
13656                liHeight = this.sizeInfo.liHeight,
13657                headerHeight = this.sizeInfo.headerHeight,
13658                searchHeight = this.sizeInfo.searchHeight,
13659                actionsHeight = this.sizeInfo.actionsHeight,
13660                doneButtonHeight = this.sizeInfo.doneButtonHeight,
13661                divHeight = this.sizeInfo.dividerHeight,
13662                menuPadding = this.sizeInfo.menuPadding,
13663                menuInnerHeight,
13664                menuHeight,
13665                divLength = 0,
13666                minHeight,
13667                _minHeight,
13668                maxHeight,
13669                menuInnerMinHeight,
13670                estimate,
13671                isDropup;
13672
13673            if (this.options.dropupAuto) {
13674                // Get the estimated height of the menu without scrollbars.
13675                // This is useful for smaller menus, where there might be plenty of room
13676                // below the button without setting dropup, but we can't know
13677                // the exact height of the menu until createView is called later
13678                estimate = liHeight * this.selectpicker.current.data.length + menuPadding.vert;
13679
13680                isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot;
13681
13682                // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth)
13683                if (this.selectpicker.isSearching === true) {
13684                    isDropup = this.selectpicker.dropup;
13685                }
13686
13687                this.$newElement.toggleClass(classNames.DROPUP, isDropup);
13688                this.selectpicker.dropup = isDropup;
13689            }
13690
13691            if (this.options.size === 'auto') {
13692                _minHeight = this.selectpicker.current.data.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0;
13693                menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert;
13694                minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;
13695                menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0);
13696
13697                if (this.$newElement.hasClass(classNames.DROPUP)) {
13698                    menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert;
13699                }
13700
13701                maxHeight = menuHeight;
13702                menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;
13703            } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {
13704                for (var i = 0; i < this.options.size; i++) {
13705                    if (this.selectpicker.current.data[i].type === 'divider') divLength++;
13706                }
13707
13708                menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;
13709                menuInnerHeight = menuHeight - menuPadding.vert;
13710                maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;
13711                minHeight = menuInnerMinHeight = '';
13712            }
13713
13714            this.$menu.css({
13715                'max-height': maxHeight + 'px',
13716                'overflow': 'hidden',
13717                'min-height': minHeight + 'px'
13718            });
13719
13720            this.$menuInner.css({
13721                'max-height': menuInnerHeight + 'px',
13722                'overflow': 'hidden auto',
13723                'min-height': menuInnerMinHeight + 'px'
13724            });
13725
13726            // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView
13727            this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1);
13728
13729            if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) {
13730                this.sizeInfo.hasScrollBar = true;
13731                this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth;
13732            }
13733
13734            if (this.options.dropdownAlignRight === 'auto') {
13735                this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < (this.sizeInfo.totalMenuWidth - selectWidth));
13736            }
13737
13738            if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update();
13739        },
13740
13741        setSize: function (refresh) {
13742            this.liHeight(refresh);
13743
13744            if (this.options.header) this.$menu.css('padding-top', 0);
13745
13746            if (this.options.size !== false) {
13747                var that = this,
13748                    $window = $(window);
13749
13750                this.setMenuSize();
13751
13752                if (this.options.liveSearch) {
13753                    this.$searchbox
13754                        .off('input.setMenuSize propertychange.setMenuSize')
13755                        .on('input.setMenuSize propertychange.setMenuSize', function () {
13756                            return that.setMenuSize();
13757                        });
13758                }
13759
13760                if (this.options.size === 'auto') {
13761                    $window
13762                        .off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize')
13763                        .on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () {
13764                            return that.setMenuSize();
13765                        });
13766                } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {
13767                    $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize');
13768                }
13769            }
13770
13771            this.createView(false, true, refresh);
13772        },
13773
13774        setWidth: function () {
13775            var that = this;
13776
13777            if (this.options.width === 'auto') {
13778                requestAnimationFrame(function () {
13779                    that.$menu.css('min-width', '0');
13780
13781                    that.$element.on('loaded' + EVENT_KEY, function () {
13782                        that.liHeight();
13783                        that.setMenuSize();
13784
13785                        // Get correct width if element is hidden
13786                        var $selectClone = that.$newElement.clone().appendTo('body'),
13787                            btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth();
13788
13789                        $selectClone.remove();
13790
13791                        // Set width to whatever's larger, button title or longest option
13792                        that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth);
13793                        that.$newElement.css('width', that.sizeInfo.selectWidth + 'px');
13794                    });
13795                });
13796            } else if (this.options.width === 'fit') {
13797                // Remove inline min-width so width can be changed from 'auto'
13798                this.$menu.css('min-width', '');
13799                this.$newElement.css('width', '').addClass('fit-width');
13800            } else if (this.options.width) {
13801                // Remove inline min-width so width can be changed from 'auto'
13802                this.$menu.css('min-width', '');
13803                this.$newElement.css('width', this.options.width);
13804            } else {
13805                // Remove inline min-width/width so width can be changed
13806                this.$menu.css('min-width', '');
13807                this.$newElement.css('width', '');
13808            }
13809            // Remove fit-width class if width is changed programmatically
13810            if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {
13811                this.$newElement[0].classList.remove('fit-width');
13812            }
13813        },
13814
13815        selectPosition: function () {
13816            this.$bsContainer = $('<div class="bs-container" />');
13817
13818            var that = this,
13819                $container = $(this.options.container),
13820                pos,
13821                containerPos,
13822                actualHeight,
13823                getPlacement = function ($element) {
13824                    var containerPosition = {},
13825                        // fall back to dropdown's default display setting if display is not manually set
13826                        display = that.options.display || (
13827                            // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default
13828                            $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display
13829                                : false
13830                        );
13831
13832                    that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP));
13833                    pos = $element.offset();
13834
13835                    if (!$container.is('body')) {
13836                        containerPos = $container.offset();
13837                        containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();
13838                        containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();
13839                    } else {
13840                        containerPos = { top: 0, left: 0 };
13841                    }
13842
13843                    actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight;
13844
13845                    // Bootstrap 4+ uses Popper for menu positioning
13846                    if (version.major < 4 || display === 'static') {
13847                        containerPosition.top = pos.top - containerPos.top + actualHeight;
13848                        containerPosition.left = pos.left - containerPos.left;
13849                    }
13850
13851                    containerPosition.width = $element[0].offsetWidth;
13852
13853                    that.$bsContainer.css(containerPosition);
13854                };
13855
13856            this.$button.on('click.bs.dropdown.data-api', function () {
13857                if (that.isDisabled()) {
13858                    return;
13859                }
13860
13861                getPlacement(that.$newElement);
13862
13863                that.$bsContainer
13864                    .appendTo(that.options.container)
13865                    .toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW))
13866                    .append(that.$menu);
13867            });
13868
13869            $(window)
13870                .off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId)
13871                .on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () {
13872                    var isActive = that.$newElement.hasClass(classNames.SHOW);
13873
13874                    if (isActive) getPlacement(that.$newElement);
13875                });
13876
13877            this.$element.on('hide' + EVENT_KEY, function () {
13878                that.$menu.data('height', that.$menu.height());
13879                that.$bsContainer.detach();
13880            });
13881        },
13882
13883        createOption: function (data, init) {
13884            var optionData = !data.option ? data : data.option;
13885
13886            if (optionData && optionData.nodeType !== 1) {
13887                var option = (init ? elementTemplates.selectedOption : elementTemplates.option).cloneNode(true);
13888                if (optionData.value !== undefined) option.value = optionData.value;
13889                option.textContent = optionData.text;
13890
13891                option.selected = true;
13892
13893                if (optionData.liIndex !== undefined) {
13894                    option.liIndex = optionData.liIndex;
13895                } else if (!init) {
13896                    option.liIndex = data.index;
13897                }
13898
13899                data.option = option;
13900
13901                this.selectpicker.main.optionQueue.appendChild(option);
13902            }
13903        },
13904
13905        setOptionStatus: function (selectedOnly) {
13906            var that = this;
13907
13908            that.noScroll = false;
13909
13910            if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) {
13911                for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) {
13912                    var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0],
13913                        option = liData.option;
13914
13915                    if (option) {
13916                        if (selectedOnly !== true) {
13917                            that.setDisabled(liData);
13918                        }
13919
13920                        that.setSelected(liData);
13921                    }
13922                }
13923
13924                // append optionQueue (documentFragment with option elements for select options)
13925                if (this.options.source.data) this.$element[0].appendChild(this.selectpicker.main.optionQueue);
13926            }
13927        },
13928
13929        /**
13930         * @param {Object} liData - the option object that is being changed
13931         * @param {boolean} selected - true if the option is being selected, false if being deselected
13932         */
13933        setSelected: function (liData, selected) {
13934            selected = selected === undefined ? liData.selected : selected;
13935
13936            var li = liData.element,
13937                activeElementIsSet = this.activeElement !== undefined,
13938                thisIsActive = this.activeElement === li,
13939                prevActive,
13940                a,
13941                // if current option is already active
13942                // OR
13943                // if the current option is being selected, it's 
13943NOT multiple, and
13944                // activeElement is undefined:
13945                //  - when the menu is first being opened, OR
13946                //  - after a search has been performed, OR
13947                //  - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeElement)
13948                keepActive = thisIsActive || (selected && !this.multiple && !activeElementIsSet);
13949
13950            if (!li) return;
13951
13952            if (selected !== undefined) {
13953                liData.selected = selected;
13954                if (liData.option) liData.option.selected = selected;
13955            }
13956
13957            if (selected && this.options.source.data) {
13958                this.createOption(liData, false);
13959            }
13960
13961            a = li.firstChild;
13962
13963            if (selected) {
13964                this.selectedElement = li;
13965            }
13966
13967            li.classList.toggle('selected', selected);
13968
13969            if (keepActive) {
13970                this.focusItem(li, liData);
13971                this.selectpicker.view.currentActive = li;
13972                this.activeElement = li;
13973            } else {
13974                this.defocusItem(li);
13975            }
13976
13977            if (a) {
13978                a.classList.toggle('selected', selected);
13979
13980                if (selected) {
13981                    a.setAttribute('aria-selected', true);
13982                } else {
13983                    if (this.multiple) {
13984                        a.setAttribute('aria-selected', false);
13985                    } else {
13986                        a.removeAttribute('aria-selected');
13987                    }
13988                }
13989            }
13990
13991            if (!keepActive && !activeElementIsSet && selected && this.prevActiveElement !== undefined) {
13992                prevActive = this.prevActiveElement;
13993
13994                this.defocusItem(prevActive);
13995            }
13996        },
13997
13998        /**
13999         * @param {number} index - the index of the option that is being disabled
14000         * @param {boolean} disabled - true if the option is being disabled, false if being enabled
14001         */
14002        setDisabled: function (liData) {
14003            var disabled = liData.disabled,
14004                li = liData.element,
14005                a;
14006
14007            if (!li) return;
14008
14009            a = li.firstChild;
14010
14011            li.classList.toggle(classNames.DISABLED, disabled);
14012
14013            if (a) {
14014                if (version.major >= '4') a.classList.toggle(classNames.DISABLED, disabled);
14015
14016                if (disabled) {
14017                    a.setAttribute('aria-disabled', disabled);
14018                    a.setAttribute('tabindex', -1);
14019                } else {
14020                    a.removeAttribute('aria-disabled');
14021                    a.setAttribute('tabindex', 0);
14022                }
14023            }
14024        },
14025
14026        isDisabled: function () {
14027            return this.$element[0].disabled;
14028        },
14029
14030        checkDisabled: function () {
14031            if (this.isDisabled()) {
14032                this.$newElement[0].classList.add(classNames.DISABLED);
14033                this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true);
14034            } else {
14035                if (this.$button[0].classList.contains(classNames.DISABLED)) {
14036                    this.$newElement[0].classList.remove(classNames.DISABLED);
14037                    this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false);
14038                }
14039            }
14040        },
14041
14042        clickListener: function () {
14043            var that = this,
14044                $document = $(document);
14045
14046            $document.data('spaceSelect', false);
14047
14048            this.$button.on('keyup', function (e) {
14049                if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {
14050                    e.preventDefault();
14051                    $document.data('spaceSelect', false);
14052                }
14053            });
14054
14055            this.$newElement.on('show.bs.dropdown', function () {
14056                if (!that.dropdown && version.major === '4') {
14057                    that.dropdown = that.$button.data('bs.dropdown');
14058                    that.dropdown._menu = that.$menu[0];
14059                }
14060            });
14061
14062            function clearSelection (e) {
14063                if (that.multiple) {
14064                    that.deselectAll();
14065                } else {
14066                    var element = that.$element[0],
14067                        prevValue = element.value,
14068                        prevIndex = element.selectedIndex,
14069                        prevOption = element.options[prevIndex],
14070                        prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false;
14071
14072                    if (prevData) {
14073                        that.setSelected(prevData, false);
14074                    }
14075
14076                    element.selectedIndex = 0;
14077
14078                    changedArguments = [prevIndex, false, prevValue];
14079                    that.$element.triggerNative('change');
14080                }
14081
14082                // remove selected styling if menu is open
14083                if (that.$newElement.hasClass(classNames.SHOW)) {
14084                    if (that.options.liveSearch) {
14085                        that.$searchbox.trigger('focus');
14086                    }
14087
14088                    that.createView(false);
14089                }
14090            }
14091
14092            this.$button.on('click.bs.dropdown.data-api', function (e) {
14093                if (that.options.allowClear) {
14094                    var target = e.target,
14095                        clearButton = that.$clearButton[0];
14096
14097                    // IE doesn't support event listeners on child elements of buttons
14098                    if (/MSIE|Trident/.test(window.navigator.userAgent)) {
14099                        target = document.elementFromPoint(e.clientX, e.clientY);
14100                    }
14101
14102                    if (target === clearButton || target.parentElement === clearButton) {
14103                        e.stopImmediatePropagation();
14104                        clearSelection(e);
14105                    }
14106                }
14107
14108                if (!that.$newElement.hasClass(classNames.SHOW)) {
14109                    that.setSize();
14110                }
14111            });
14112
14113            function setFocus () {
14114                if (that.options.liveSearch) {
14115                    that.$searchbox.trigger('focus');
14116                } else {
14117                    that.$menuInner.trigger('focus');
14118                }
14119            }
14120
14121            function checkPopperExists () {
14122                if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state) {
14123                    setFocus();
14124                } else {
14125                    requestAnimationFrame(checkPopperExists);
14126                }
14127            }
14128
14129            this.$element.on('shown' + EVENT_KEY, function () {
vendor: 15,179 bytes, lines 14130-14427
14130                if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) {
14131                    that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop;
14132                }
14133
14134                if (version.major > 3) {
14135                    requestAnimationFrame(checkPopperExists);
14136                } else {
14137                    setFocus();
14138                }
14139            });
14140
14141            // ensure posinset and setsize are correct before selecting an option via a click
14142            this.$menuInner.on('mouseenter', 'li a', function (e) {
14143                var hoverLi = this.parentElement,
14144                    position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,
14145                    index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi),
14146                    hoverData = that.selectpicker.current.data[index + position0];
14147
14148                that.focusItem(hoverLi, hoverData, true);
14149            });
14150
14151            this.$menuInner.on('click', 'li a', function (e, retainActive) {
14152                var $this = $(this),
14153                    element = that.$element[0],
14154                    position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,
14155                    clickedData = that.selectpicker.current.data[$this.parent().index() + position0],
14156                    clickedElement = clickedData.element,
14157                    prevValue = getSelectValues.call(that),
14158                    prevIndex = element.selectedIndex,
14159                    prevOption = element.options[prevIndex],
14160                    prevData = prevOption ? that.selectpicker.main.data[prevOption.liIndex] : false,
14161                    triggerChange = true;
14162
14163                // Don't close on multi choice menu
14164                if (that.multiple && that.options.maxOptions !== 1) {
14165                    e.stopPropagation();
14166                }
14167
14168                e.preventDefault();
14169
14170                // Don't run if the select is disabled
14171                if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) {
14172                    var option = clickedData.option,
14173                        $option = $(option),
14174                        state = option.selected,
14175                        optgroupData = that.selectpicker.current.data.find(function (datum) {
14176                            return datum.optID === clickedData.optID && datum.type === 'optgroup-label';
14177                        }),
14178                        optgroup = optgroupData ? optgroupData.optgroup : undefined,
14179                        dataGetter = optgroup instanceof Element ? getOptionData.fromOption : getOptionData.fromDataSource,
14180                        optgroupOptions = optgroup && optgroup.children,
14181                        maxOptions = parseInt(that.options.maxOptions),
14182                        maxOptionsGrp = optgroup && parseInt(dataGetter(optgroup, 'maxOptions')) || false;
14183
14184                    if (clickedElement === that.activeElement) retainActive = true;
14185
14186                    if (!retainActive) {
14187                        that.prevActiveElement = that.activeElement;
14188                        that.activeElement = undefined;
14189                    }
14190
14191                    if (!that.multiple || maxOptions === 1) { // Deselect previous option if not multi select
14192                        if (prevData) that.setSelected(prevData, false);
14193                        that.setSelected(clickedData, true);
14194                    } else { // Toggle the clicked option if multi select.
14195                        that.setSelected(clickedData, !state);
14196                        that.focusedParent.focus();
14197
14198                        if (maxOptions !== false || maxOptionsGrp !== false) {
14199                            var maxReached = maxOptions < getSelectedOptions.call(that).length,
14200                                selectedGroupOptions = 0;
14201
14202                            if (optgroup && optgroup.children) {
14203                                for (var i = 0; i < optgroup.children.length; i++) {
14204                                    if (optgroup.children[i].selected) selectedGroupOptions++;
14205                                }
14206                            }
14207
14208                            var maxReachedGrp = maxOptionsGrp < selectedGroupOptions;
14209
14210                            if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {
14211                                if (maxOptions && maxOptions === 1) {
14212                                    element.selectedIndex = -1;
14213                                    that.setOptionStatus(true);
14214                                } else if (maxOptionsGrp && maxOptionsGrp === 1) {
14215                                    for (var i = 0; i < optgroupOptions.length; i++) {
14216                                        var _option = optgroupOptions[i];
14217                                        that.setSelected(that.selectpicker.current.data[_option.liIndex], false);
14218                                    }
14219
14220                                    that.setSelected(clickedData, true);
14221                                } else {
14222                                    var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,
14223                                        maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,
14224                                        maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),
14225                                        maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),
14226                                        $notify = $('<div class="notify"></div>');
14227                                    // If {var} is set in array, replace it
14228                                    /** @deprecated */
14229                                    if (maxOptionsArr[2]) {
14230                                        maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);
14231                                        maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);
14232                                    }
14233
14234                                    that.$menu.append($notify);
14235
14236                                    if (maxOptions && maxReached) {
14237                                        $notify.append($('<div>' + maxTxt + '</div>'));
14238                                        triggerChange = false;
14239                                        that.$element.trigger('maxReached' + EVENT_KEY);
14240                                    }
14241
14242                                    if (maxOptionsGrp && maxReachedGrp) {
14243                                        $notify.append($('<div>' + maxTxtGrp + '</div>'));
14244                                        triggerChange = false;
14245                                        that.$element.trigger('maxReachedGrp' + EVENT_KEY);
14246                                    }
14247
14248                                    setTimeout(function () {
14249                                        that.setSelected(clickedData, false);
14250                                    }, 10);
14251
14252                                    $notify[0].classList.add('fadeOut');
14253
14254                                    setTimeout(function () {
14255                                        $notify.remove();
14256                                    }, 1050);
14257                                }
14258                            }
14259                        }
14260                    }
14261
14262                    if (that.options.source.data) that.$element[0].appendChild(that.selectpicker.main.optionQueue);
14263
14264                    if (!that.multiple || (that.multiple && that.options.maxOptions === 1)) {
14265                        that.$button.trigger('focus');
14266                    } else if (that.options.liveSearch) {
14267                        that.$searchbox.trigger('focus');
14268                    }
14269
14270                    // Trigger select 'change'
14271                    if (triggerChange) {
14272                        if (that.multiple || prevIndex !== element.selectedIndex) {
14273                            // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed.
14274                            changedArguments = [option.index, $option.prop('selected'), prevValue];
14275                            that.$element
14276                                .triggerNative('change');
14277                        }
14278                    }
14279                }
14280            });
14281
14282            this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) {
14283                if (e.currentTarget == this) {
14284                    e.preventDefault();
14285                    e.stopPropagation();
14286                    if (that.options.liveSearch && !$(e.target).hasClass('close')) {
14287                        that.$searchbox.trigger('focus');
14288                    } else {
14289                        that.$button.trigger('focus');
14290                    }
14291                }
14292            });
14293
14294            this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {
14295                e.preventDefault();
14296                e.stopPropagation();
14297                if (that.options.liveSearch) {
14298                    that.$searchbox.trigger('focus');
14299                } else {
14300                    that.$button.trigger('focus');
14301                }
14302            });
14303
14304            this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () {
14305                that.$button.trigger('click');
14306            });
14307
14308            this.$searchbox.on('click', function (e) {
14309                e.stopPropagation();
14310            });
14311
14312            this.$menu.on('click', '.actions-btn', function (e) {
14313                if (that.options.liveSearch) {
14314                    that.$searchbox.trigger('focus');
14315                } else {
14316                    that.$button.trigger('focus');
14317                }
14318
14319                e.preventDefault();
14320                e.stopPropagation();
14321
14322                if ($(this).hasClass('bs-select-all')) {
14323                    that.selectAll();
14324                } else {
14325                    that.deselectAll();
14326                }
14327            });
14328
14329            this.$button
14330                .on('focus' + EVENT_KEY, function (e) {
14331                    var tabindex = that.$element[0].getAttribute('tabindex');
14332
14333                    // only change when button is actually focused
14334                    if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {
14335                        // apply select element's tabindex to ensure correct order is followed when tabbing to the next element
14336                        this.setAttribute('tabindex', tabindex);
14337                        // set element's tabindex to -1 to allow for reverse tabbing
14338                        that.$element[0].setAttribute('tabindex', -1);
14339                        that.selectpicker.view.tabindex = tabindex;
14340                    }
14341                })
14342                .on('blur' + EVENT_KEY, function (e) {
14343                    // revert everything to original tabindex
14344                    if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {
14345                        that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex);
14346                        this.setAttribute('tabindex', -1);
14347                        that.selectpicker.view.tabindex = undefined;
14348                    }
14349                });
14350
14351            this.$element
14352                .on('change' + EVENT_KEY, function () {
14353                    that.render();
14354                    that.$element.trigger('changed' + EVENT_KEY, changedArguments);
14355                    changedArguments = null;
14356                })
14357                .on('focus' + EVENT_KEY, function () {
14358                    if (!that.options.mobile) that.$button[0].focus();
14359                });
14360        },
14361
14362        liveSearchListener: function () {
14363            var that = this;
14364
14365            this.$button.on('click.bs.dropdown.data-api', function () {
14366                if (!!that.$searchbox.val()) {
14367                    that.$searchbox.val('');
14368                    that.selectpicker.search.previousValue = undefined;
14369                }
14370            });
14371
14372            this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) {
14373                e.stopPropagation();
14374            });
14375
14376            this.$searchbox.on('input propertychange', function () {
14377                var searchValue = that.$searchbox[0].value;
14378
14379                that.selectpicker.search.elements = [];
14380                that.selectpicker.search.data = [];
14381
14382                if (searchValue) {
14383                    that.selectpicker.search.previousValue = searchValue;
14384
14385                    if (that.options.source.search) {
14386                        that.fetchData(function (builtData) {
14387                            that.render();
14388                            that.buildList(undefined, true);
14389                            that.noScroll = true;
14390                            that.$menuInner.scrollTop(0);
14391                            that.createView(true);
14392                            showNoResults.call(that, builtData, searchValue);
14393                        }, 'search', 0, searchValue);
14394                    } else {
14395                        var i,
14396                            searchMatch = [],
14397                            q = searchValue.toUpperCase(),
14398                            cache = {},
14399                            cacheArr = [],
14400                            searchStyle = that._searchStyle(),
14401                            normalizeSearch = that.options.liveSearchNormalize;
14402
14403                        if (normalizeSearch) q = normalizeToBase(q);
14404
14405                        for (var i = 0; i < that.selectpicker.main.data.length; i++) {
14406                            var li = that.selectpicker.main.data[i];
14407
14408                            if (!cache[i]) {
14409                                cache[i] = stringSearch(li, q, searchStyle, normalizeSearch);
14410                            }
14411
14412                            if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) {
14413                                if (li.headerIndex > 0) {
14414                                    cache[li.headerIndex - 1] = true;
14415                                    cacheArr.push(li.headerIndex - 1);
14416                                }
14417
14418                                cache[li.headerIndex] = true;
14419                                cacheArr.push(li.headerIndex);
14420
14421                                cache[li.lastIndex + 1] = true;
14422                            }
14423
14424                            if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i);
14425                        }
14426
14427                        for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {
14428                            var index = cacheArr[i],
14429                                prevIndex = cacheArr[i - 1],
14430                                li = that.selectpicker.main.data[index],
14431                                liPrev = that.selectpicker.main.data[prevIndex];
14432
14433                            if (li.type !== 'divider' || (li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i)) {
14434                                that.selectpicker.search.data.push(li);
14435                                searchMatch.push(that.selectpicker.main.elements[index]);
14436                            }
14437                        }
14438
14439                        that.activeElement = undefined;
14440                        that.noScroll = true;
14441                        that.$menuInner.scrollTop(0);
14442                        that.selectpicker.search.elements = searchMatch;
14443                        that.createView(true);
14444                        showNoResults.call(that, searchMatch, searchValue);
14445                    }
14446                } else if (that.selectpicker.search.previousValue) { // for IE11 (#2402)
14447                    that.$menuInner.scrollTop(0);
14448                    that.createView(false);
14449                }
14450            });
14451        },
14452
14453        _searchStyle: function () {
14454            return this.options.liveSearchStyle || 'contains';
14455        },
14456
14457        val: function (value) {
14458            var element = this.$element[0];
14459
14460            if (typeof value !== 'undefined') {
14461                var selectedOptions = getSelectedOptions.call(this),
14462                    prevValue = getSelectValues.call(this, selectedOptions);
14463
14464                changedArguments = [null, null, prevValue];
14465
14466                if (!Array.isArray(value)) value = [ value ];
14467
14468                value.map(String);
14469
14470                for (var i = 0; i < selectedOptions.length; i++) {
14471                    var item = selectedOptions[i];
14472
14473                    if (item && value.indexOf(String(item.value)) === -1) {
14474                        this.setSelected(item, false);
14475                    }
14476                }
14477
14478                // only update selected value if it matches an existing option
14479                this.selectpicker.main.data.filter(function (item) {
14480                    if (value.indexOf(String(item.value)) !== -1) {
14481                        this.setSelected(item, true);
14482                        return true;
14483                    }
14484
14485                    return false;
14486                }, this);
14487
14488                if (this.options.source.data) element.appendChild(this.selectpicker.main.optionQueue);
14489
14490                this.$element.trigger('changed' + EVENT_KEY, changedArguments);
14491
14492                if (this.$newElement.hasClass(classNames.SHOW)) {
14493                    if (this.multiple) {
14494                        this.setOptionStatus(true);
14495                    } else {
14496                        var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex;
14497
14498                        if (typeof liSelectedIndex === 'number') {
14499                            this.setSelected(this.selectpicker.current.data[liSelectedIndex], true);
14500                        }
14501                    }
14502                }
14503
14504                this.render();
14505
14506                changedArguments = null;
14507
14508                return this.$element;
14509            } else {
14510                return this.$element.val();
14511            }
14512        },
14513
14514        changeAll: function (status) {
14515            if (!this.multiple) return;
14516            if (typeof status === 'undefined') status = true;
14517
14518            var element = this.$element[0],
14519                previousSelected = 0,
14520                currentSelected = 0,
14521                prevValue = getSelectValues.call(this);
14522
14523            element.classList.add('bs-select-hidden');
14524
14525            for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) {
14526                var liData = data[i],
14527                    option = liData.option;
14528
14529                if (option && !liData.disabled && liData.type !== 'divider') {
14530                    if (liData.selected) previousSelected++;
14531                    option.selected = status;
14532                    liData.selected = status;
14533                    if (status === true) currentSelected++;
14534                }
14535            }
14536
14537            element.classList.remove('bs-select-hidden');
14538
14539            if (previousSelected === currentSelected) return;
14540
14541            this.setOptionStatus();
14542
14543            changedArguments = [null, null, prevValue];
14544
14545            this.$element
14546                .triggerNative('change');
14547        },
14548
14549        selectAll: function () {
14550            return this.changeAll(true);
14551        },
14552
14553        deselectAll: function () {
14554            return this.changeAll(false);
14555        },
14556
14557        toggle: function (e, state) {
14558            var isActive,
14559                triggerClick = state === undefined;
14560
14561            e = e || window.event;
14562
14563            if (e) e.stopPropagation();
14564
14565            if (triggerClick === false) {
14566                isActive = this.$newElement[0].classList.contains(classNames.SHOW);
14567                triggerClick = state === true && isActive === false || state === false && isActive === true;
14568            }
14569
14570            if (triggerClick) this.$button.trigger('click.bs.dropdown.data-api');
14571        },
14572
14573        open: function (e) {
14574            this.toggle(e, true);
14575        },
14576
14577        close: function (e) {
14578            this.toggle(e, false);
14579        },
14580
14581        keydown: function (e) {
14582            var $this = $(this),
14583                isToggle = $this.hasClass('dropdown-toggle'),
14584                $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU),
14585                that = $parent.data('this'),
14586                $items = that.findLis(),
14587                index,
14588                isActive,
14589                liActive,
14590                activeLi,
14591                offset,
14592                updateScroll = false,
14593                downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab,
14594                isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab,
14595                scrollTop = that.$menuInner[0].scrollTop,
14596                isVirtual = that.isVirtual(),
14597                position0 = isVirtual === true ? that.selectpicker.view.position0 : 0;
14598
14599            // do nothing if a function key is pressed
14600            if (e.which >= 112 && e.which <= 123) return;
14601
14602            isActive = that.$menu.hasClass(classNames.SHOW);
14603
14604            if (
14605                !isActive &&
14606                (
14607                    isArrowKey ||
14608                    (e.which >= 48 && e.which <= 57) ||
14609                    (e.which >= 96 && e.which <= 105) ||
14610                    (e.which >= 65 && e.which <= 90)
14611                )
14612            ) {
14613                that.$button.trigger('click.bs.dropdown.data-api');
14614
14615                if (that.options.liveSearch) {
14616                    that.$searchbox.trigger('focus');
14617                    return;
14618                }
14619            }
14620
14621            if (e.which === keyCodes.ESCAPE && isActive) {
14622                e.preventDefault();
14623                that.$button.trigger('click.bs.dropdown.data-api').trigger('focus');
14624            }
14625
14626            if (isArrowKey) { // if up or down
14627                if (!$items.length) return;
14628
14629                liActive = that.activeElement;
14630                index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1;
14631
14632                if (index !== -1) {
14633                    that.defocusItem(liActive);
14634                }
14635
14636                if (e.which === keyCodes.ARROW_UP) { // up
14637                    if (index !== -1) index--;
14638                    if (index + position0 < 0) index += $items.length;
14639
14640                    if (!that.selectpicker.view.canHighlight[index + position0]) {
14641                        index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0;
14642                        if (index === -1) index = $items.length - 1;
14643                    }
14644                } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down
14645                    index++;
14646                    if (index + position0 >= that.selectpicker.view.canHighlight.length) index = that.selectpicker.view.firstHighlightIndex;
14647
14648                    if (!that.selectpicker.view.canHighlight[index + position0]) {
14649                        index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true);
14650                    }
14651                }
14652
14653                e.preventDefault();
14654
14655                var liActiveIndex = position0 + index;
14656
14657                if (e.which === keyCodes.ARROW_UP) { // up
14658                    // scroll to bottom and highlight last option
14659                    if (position0 === 0 && index === $items.length - 1) {
14660                        that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight;
14661
14662                        liActiveIndex = that.selectpicker.current.elements.length - 1;
14663                    } else {
14664                        activeLi = that.selectpicker.current.data[liActiveIndex];
14665
14666                        // could be undefined if no results exist
14667                        if (activeLi) {
14668                            offset = activeLi.position - activeLi.height;
14669
14670                            updateScroll = offset < scrollTop;
14671                        }
14672                    }
14673                } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) { // down
14674                    // scroll to top and highlight first option
vendor: 4,725 bytes, lines 14675-14787
14675                    if (index === that.selectpicker.view.firstHighlightIndex) {
14676                        that.$menuInner[0].scrollTop = 0;
14677
14678                        liActiveIndex = that.selectpicker.view.firstHighlightIndex;
14679                    } else {
14680                        activeLi = that.selectpicker.current.data[liActiveIndex];
14681
14682                        // could be undefined if no results exist
14683                        if (activeLi) {
14684                            offset = activeLi.position - that.sizeInfo.menuInnerHeight;
14685
14686                            updateScroll = offset > scrollTop;
14687                        }
14688                    }
14689                }
14690
14691                liActive = that.selectpicker.current.elements[liActiveIndex];
14692
14693                that.activeElement = (that.selectpicker.current.data[liActiveIndex] || {}).element;
14694
14695                that.focusItem(liActive);
14696
14697                that.selectpicker.view.currentActive = liActive;
14698
14699                if (updateScroll) that.$menuInner[0].scrollTop = offset;
14700
14701                if (that.options.liveSearch) {
14702                    that.$searchbox.trigger('focus');
14703                } else {
14704                    $this.trigger('focus');
14705                }
14706            } else if (
14707                (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which)) ||
14708                (e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory)
14709            ) {
14710                var searchMatch,
14711                    matches = [],
14712                    keyHistory;
14713
14714                e.preventDefault();
14715
14716                that.selectpicker.keydown.keyHistory += keyCodeMap[e.which];
14717
14718                if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel);
14719                that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start();
14720
14721                keyHistory = that.selectpicker.keydown.keyHistory;
14722
14723                // if all letters are the same, set keyHistory to just the first character when searching
14724                if (/^(.)\1+$/.test(keyHistory)) {
14725                    keyHistory = keyHistory.charAt(0);
14726                }
14727
14728                // find matches
14729                for (var i = 0; i < that.selectpicker.current.data.length; i++) {
14730                    var li = that.selectpicker.current.data[i],
14731                        hasMatch;
14732
14733                    hasMatch = stringSearch(li, keyHistory, 'startsWith', true);
14734
14735                    if (hasMatch && that.selectpicker.view.canHighlight[i]) {
14736                        matches.push(li.element);
14737                    }
14738                }
14739
14740                if (matches.length) {
14741                    var matchIndex = 0;
14742
14743                    $items.removeClass('active').find('a').removeClass('active');
14744
14745                    // either only one key has been pressed or they are all the same key
14746                    if (keyHistory.length === 1) {
14747                        matchIndex = matches.indexOf(that.activeElement);
14748
14749                        if (matchIndex === -1 || matchIndex === matches.length - 1) {
14750                            matchIndex = 0;
14751                        } else {
14752                            matchIndex++;
14753                        }
14754                    }
14755
14756                    searchMatch = matches[matchIndex];
14757
14758                    activeLi = that.selectpicker.main.data[searchMatch];
14759
14760                    if (scrollTop - activeLi.position > 0) {
14761                        offset = activeLi.position - activeLi.height;
14762                        updateScroll = true;
14763                    } else {
14764                        offset = activeLi.position - that.sizeInfo.menuInnerHeight;
14765                        // if the option is already visible at the current scroll position, just keep it the same
14766                        updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight;
14767                    }
14768
14769                    liActive = that.selectpicker.main.elements[searchMatch];
14770
14771                    that.activeElement = liActive;
14772
14773                    that.focusItem(liActive);
14774
14775                    if (liActive) liActive.firstChild.focus();
14776
14777                    if (updateScroll) that.$menuInner[0].scrollTop = offset;
14778
14779                    $this.trigger('focus');
14780                }
14781            }
14782
14783            // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu.
14784            if (
14785                isActive &&
14786                (
14787                    (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory) ||
14788                    e.which === keyCodes.ENTER ||
14789                    (e.which === keyCodes.TAB && that.options.selectOnTab)
14790                )
14791            ) {
14792                if (e.which !== keyCodes.SPACE) e.preventDefault();
14793
14794                if (!that.options.liveSearch || e.which !== keyCodes.SPACE) {
14795                    that.$menuInner.find('.active a').trigger('click', true); // retain active class
14796                    $this.trigger('focus');
14797
14798                    if (!that.options.liveSearch) {
14799                        // Prevent screen from scrolling if the user hits the spacebar
14800                        e.preventDefault();
14801                        // Fixes spacebar selection of dropdown items in FF & IE
14802                        $(document).data('spaceSelect', true);
14803                    }
14804                }
14805            }
14806        },
14807
14808        mobile: function () {
14809            // ensure mobile is set to true if mobile function is called after init
14810            this.options.mobile = true;
14811            this.$element[0].classList.add('mobile-device');
14812        },
14813
14814        refresh: function () {
14815            var that = this;
14816            // update options if data attributes have been changed
14817            var config = $.extend({}, this.options, getAttributesObject(this.$element), this.$element.data()); // in this order on refresh, as user may change attributes on select, and options object is not passed on refresh
14818            this.options = config;
14819
14820            if (this.options.source.data) {
14821                this.render();
14822                this.buildList();
14823            } else {
14824                this.fetchData(function () {
14825                    that.render();
14826                    that.buildList();
14827                });
14828            }
14829
14830            this.checkDisabled();
14831            this.setStyle();
14832            this.setWidth();
14833
14834            this.setSize(true);
14835
14836            this.$element.trigger('refreshed' + EVENT_KEY);
14837        },
14838
14839        hide: function () {
14840            this.$newElement.hide();
14841        },
14842
14843        show: function () {
14844            this.$newElement.show();
14845        },
14846
14847        remove: function () {
14848            this.$newElement.remove();
14849            this.$element.remove();
14850        },
14851
14852        destroy: function () {
14853            this.$newElement.before(this.$element).remove();
14854
14855            if (this.$bsContainer) {
14856                this.$bsContainer.remove();
14857            } else {
14858                this.$menu.remove();
14859            }
14860
14861            if (this.selectpicker.view.titleOption && this.selectpicker.view.titleOption.parentNode) {
14862                this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption);
14863            }
14864
14865            this.$element
14866                .off(EVENT_KEY)
14867                .removeData('selectpicker')
14868                .removeClass('bs-select-hidden selectpicker mobile-device');
14869
14870            $(window).off(EVENT_KEY + '.' + this.selectId);
14871        }
14872    };
14873
14874    // SELECTPICKER PLUGIN DEFINITION
14875    // ==============================
14876    function Plugin (option) {
14877        // get the args of the outer function..
14878        var args = arguments;
14879        // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them
14880        // to get lost/corrupted in android 2.3 and IE9 #715 #775
14881        var _option = option;
14882
14883        [].shift.apply(args);
14884
14885        // if the version was not set successfully
14886        if (!version.success) {
14887            // try to retreive it again
14888            try {
14889                version.full = (getVersion() || '').split(' ')[0].split('.');
14890            } catch (err) {
14891                // fall back to use BootstrapVersion if set
14892                if (Selectpicker.BootstrapVersion) {
14893                    version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.');
14894                } else {
14895                    version.full = [version.major, '0', '0'];
14896
14897                    console.warn(
14898                        'There was an issue retrieving Bootstrap\'s version. ' +
14899                        'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' +
14900                        'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.',
14901                        err
14902                    );
14903                }
14904            }
14905
14906            version.major = version.full[0];
14907            version.success = true;
14908        }
14909
14910        if (version.major >= '4') {
14911            // some defaults need to be changed if using Bootstrap 4
14912            // check to see if they have already been manually changed before forcing them to update
14913            var toUpdate = [];
14914
14915            if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({ name: 'style', className: 'BUTTONCLASS' });
14916            if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({ name: 'iconBase', className: 'ICONBASE' });
14917            if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({ name: 'tickIcon', className: 'TICKICON' });
14918
14919            classNames.DIVIDER = 'dropdown-divider';
14920            classNames.SHOW = 'show';
14921            classNames.BUTTONCLASS = 'btn-light';
14922            classNames.POPOVERHEADER = 'popover-header';
14923            classNames.ICONBASE = '';
14924            classNames.TICKICON = 'bs-ok-default';
14925
14926            for (var i = 0; i < toUpdate.length; i++) {
14927                var option = toUpdate[i];
14928                Selectpicker.DEFAULTS[option.name] = classNames[option.className];
14929            }
14930        }
14931
14932        if (version.major > '4') {
14933            Selector.DATA_TOGGLE = 'data-bs-toggle="dropdown"';
14934        }
14935
14936        var value;
14937        var chain = this.each(function () {
14938            var $this = $(this);
14939            if ($this.is('select')) {
14940                var data = $this.data('selectpicker'),
14941                    options = typeof _option == 'object' && _option;
14942
14943                // for backwards compatibility
14944                // (using title as placeholder is deprecated - remove in v2.0.0)
14945                if (options.title) options.placeholder = options.title;
14946
14947                if (!data) {
14948                    var dataAttributes = $this.data();
14949
14950                    for (var dataAttr in dataAttributes) {
14951                        if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
14952                            delete dataAttributes[dataAttr];
14953                        }
14954                    }
14955
14956                    var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, getAttributesObject($this), dataAttributes, options); // this is correct order on initial render
14957                    config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), dataAttributes.template, options.template);
14958                    config.source = $.extend({}, Selectpicker.DEFAULTS.source, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.source : {}), options.source);
14959                    $this.data('selectpicker', (data = new Selectpicker(this, config)));
14960                } else if (options) {
14961                    for (var i in options) {
14962                        if (Object.prototype.hasOwnProperty.call(options, i)) {
14963                            data.options[i] = options[i];
14964                        }
14965                    }
14966                }
14967
14968                if (typeof _option == 'string') {
14969                    if (data[_option] instanceof Function) {
14970                        value = data[_option].apply(data, args);
14971                    } else {
14972                        value = data.options[_option];
14973                    }
14974                }
14975            }
14976        });
14977
14978        if (typeof value !== 'undefined') {
14979            // noinspection JSUnusedAssignment
14980            return value;
14981        } else {
14982            return chain;
14983        }
14984    }
14985
14986    var old = $.fn.selectpicker;
14987    $.fn.selectpicker = Plugin;
14988    $.fn.selectpicker.Constructor = Selectpicker;
14989
14990    // SELECTPICKER NO CONFLICT
14991    // ========================
14992    $.fn.selectpicker.noConflict = function () {
14993        $.fn.selectpicker = old;
14994        return this;
14995    };
14996
14997    // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3
14998    function keydownHandler () {
14999        if (version.major < 5) {
15000            if ($.fn.dropdown) {
15001                // wait to define until function is called in case Bootstrap isn't loaded yet
15002                var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown;
15003                return bootstrapKeydown.apply(this, arguments);
15004            }
15005        } else {
15006            return Dropdown.dataApiKeydownHandler;
15007        }
15008    }
15009
15010    $(document)
15011        .off('keydown.bs.dropdown.data-api')
15012        .on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [' + Selector.DATA_TOGGLE + ']', keydownHandler)
15013        .on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler)
15014        .on('keydown' + EVENT_KEY, '.bootstrap-select [' + Selector.DATA_TOGGLE + '], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown)
15015        .on('focusin.modal', '.bootstrap-select [' + Selector.DATA_TOGGLE + '], .bootstrap-select [role="listbox"], .bootstrap-select .bs-searchbox input', function (e) {
15016            e.stopPropagation();
15017        });
15018
15019    // SELECTPICKER DATA-API
15020    // =====================
15021    document.addEventListener('DOMContentLoaded', function () {
15022        $('.selectpicker').each(function () {
15023            var $selectpicker = $(this);
15024            Plugin.call($selectpicker, $selectpicker.data());
15025        });
15026    });
15027})(jQuery);
15028//Using an object literal for a jQuery feature
15029var website = {
15030	init: function( settings ) {
15031		website.config = {
15032			bxslider: '.bxslider',
15033			bxslider_banners: '.bxslider_banners',
15034			bxSliders: {},
15035			lazyload: 'img.lazy',
15036			imagefit: '.image-fit',
15037			sectionfit: '.section-fit',
15038			videofit: '.video-fit',
15039			fancy: '[rel="lightbox"]',
15040			fancyContact: '[rel="form"]',
15041			orphans: 'article p',
15042			animate: '.animated',
15043			dotted:'.dotdotdot',
15044			nano:'.nano',
15045			selectpicker:'.selectpicker',
15046			smoothscroll: '.navbar a, .tour-subnav a, .smoothscroll',
15047			data: '',
15048			swiperSelector: '.swiper',
15049			swipers: [],
15050			inputHasValue: 'input, textarea',
15051			bottomBarSelector: '.bottom-bar',
15052			mobile: 1024,
15053		};
15054		//allow overriding the default config
15055		$.extend( website.config, settings );
15056
15057		website.initNav();
15058		website.initFbTab();
15059		website.tryInitECommerce();
15060		website.setup();
15061		website.initDisplayingCheckedInputs();
15062		website.initBottomBar( $( website.config.bottomBarSelector ) );
15063
15064		website.registerLang();
15065		website.checkDomain();
15066
15067		setInterval( function() {
15068			/*website.initFitSection( website.config.sectionfit );
15069			website.initFitImage( website.config.imagefit );*/
15070		} , 1000 );
15071	},
15072	setup: function( obj ) {
15073		if( typeof obj == "undefined" ) obj = $('body');
15074		else obj = $(obj);
15075
15076		website.initFitSection( obj.find( website.config.sectionfit ) );
15077		website.initFitImage( obj.find( website.config.imagefit ) );
15078		website.initBxSlider( obj.find( website.config.bxslider ) );
15079		website.initBxSlider2( obj.find( website.config.bxslider_banners ) );
15080		website.initFitVideo( website.config.videofit );
15081
15082		website.initLazyLoad( obj.find( website.config.lazyload ) );
15083		website.initFancybox( obj.find( website.config.fancy ) );
15084		website.initFancyboxContact( obj.find( website.config.fancyContact ) );
15085		website.initOrphans( obj.find( website.config.orphans ) );
15086		website.initSmoothScroll( obj.find( website.config.smoothscroll ) );
15087		website.initAnimate( obj.find( website.config.animate ) );
15088		// website.initDotted( obj.find( website.config.dotted ) );
15089		// website.initStellar( );
15090		// website.initNano( obj.find( website.config.nano ) );
15091		website.initSelectpicker( obj.find( website.config.selectpicker ) );
15092		website.initSwiper( obj.find( website.config.swiperSelector ) );
15093		website.initInputHasValue( obj.find( website.config.inputHasValue ) );
15094		website.initMobile( website.config.mobile );
15095		website.initBasket();
15096
15097		obj.tooltip({'selector':'[rel=tooltip]'/*, container: 'body'*/});
15098		obj.popover({'selector':'[rel=popover]', container: 'body'});
15099	},
15100	resize: function() {
15101		//website.initFitSection( website.config.sectionfit );
15102		website.initFitImage( website.config.imagefit );
15103		website.initMobile( website.config.mobile );
15104
15105		for(var i = 0, keys = Object.keys(website.config.swipers), swiper; swiper = website.config.swipers[keys[i]]; i++)
15106		{
15107			swiper.updateSize();
15108		}
15109
15110		setTimeout( function(){
15111			website.initFitImage( website.config.imagefit );
15112		}, 500 );
15113	},
15114
15115	initMobile: function( size ) {
15116
15117		if( $('body').data('detect').indexOf('mobile')>=0 || window.self !== window.top ) return;
15118
15119		var tablet = 1024;
15120		var phone = 768;
15121
15122		urlstring = document.location.href;
15123
15124		if( window.innerWidth < phone && $('body').data('mobile').indexOf('phone')<0 ){
15125			urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'mobile=phone';
15126			document.location.href = urlstring;
15127		}
15128		if( window.innerWidth <= tablet && $(window).width() >= phone && $('body').data('mobile').indexOf('tablet')<0 ){
15129			urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'mobile=tablet';
15130			document.location.href = urlstring;
15131		}
15132		if( window.innerWidth > tablet && $('body').data('mobile').indexOf('desktop')<0 ){
15133			urlstring += ( urlstring.match( /[\?]/g ) ? '&' : '?' ) + 'mobile=0';
15134			document.location.href = urlstring;
15135		}
15136	},
15137
15138	initFitVideo: function( obj ) {
15139		$(obj).each(function( id, el ) {
15140			website.fitImage( $(el), $(el).find('video'), 1 );
15141		});
15142	},
15143
15144	fitImage: function( imgFrame, imgObj, nofade ){
15145
15146		if( !$(imgObj).hasClass('loaded') && !nofade )
15147			$(imgObj).fadeOut();
15148
15149		$(imgFrame).css('position', 'relative' );
15150		$(imgFrame).css('overflow', 'hidden' );
15151		$(imgObj).css('position', 'absolute' );
15152		$(imgObj).css('max-width', 'none' );
15153
15154		var frameW = $(imgFrame).actual( 'width' );
15155		var frameH = $(imgFrame).actual( 'height' );
15156		var imgW = $(imgObj).actual( 'width' );
15157		var imgH = $(imgObj).actual( 'height' );
15158
15159		ratioW = frameW / imgW;
15160		ratioH = frameH / imgH;
15161
15162		if ( ratioW > ratioH ) {
15163			$(imgObj).css("width", parseInt(frameW));
15164			$(imgObj).css("height", 'auto' );
15165		}
15166		else {
15167			$(imgObj).css("height", parseInt(frameH));
15168			$(imgObj).css("width", 'auto' );
15169		};
15170
15171		imgW = $(imgObj).actual( 'width' );
15172		imgH = $(imgObj).actual( 'height' );
15173
15174		$(imgObj).css("top", (frameH-imgH)/2);
15175		$(imgObj).css("left", (frameW-imgW)/2);
15176
15177		$( imgObj ).load(function() {
15178			$(imgObj).addClass('loaded');
15179			$(imgObj).fadeIn();
15180			website.fitImage( imgFrame, imgObj );
15181		});
15182
15183		setTimeout(function() {
15184				$(imgObj).fadeIn();
15185			}, 1000
15186		);
15187
15188		if( nofade ){
15189			$( imgObj ).bind("loadedmetadata", function() {
15190				$(imgObj).addClass('loaded');
15191				website.fitImage( imgFrame, imgObj );
15192			});
15193		}
15194	},
15195
15196	//Init all lazy images based on .lazy class
15197	initNav: function( obj ) {
15198		$('.btn-navbar span').css('display', 'none' );
15199		$('.btn-navbar').append( "<strong>MENU</strong>" );
15200		$( '.navbar .nav > .active' ).append( "<div class='line'></div>" );
15201	},
15202
15203	initDotted: function( obj ) {
15204		$(obj).dotdotdot({
15205			watch		: true,
15206		}  );
15207	},
15208
15209	tryInitECommerce: function(obj) {
15210		console.log( "tryInitECommerce" );
15211
15212		let time = true;
15213
15214		// event for product remove by clicking "X" on the basketWidget
15215		$('body').on('click', '.cart-more a[data-ecommerce]', function (e) {
15216			var elem = $(this);
15217			website.sendRemoveFromCart(elem);
15218		});
15219
15220		setTimeout(function(){
15221			time = false;
15222		}, 10e3);
15223
15224		function tryInit() {
15225			var result = website.initECommerce(obj);
15226			if (result === false || time) {
15227				setTimeout(tryInit, 1000, obj);
15228			}
15229		}
15230		tryInit();
15231	},
15232
15233	initECommerce: function(obj = document.body) {
15234		//console.log( "tryInitECommerce" );
15235		//console.log( obj );
15236		var elements = website.findEcommerce(obj);
15237
15238		if (elements === false) {
15239			return false;
15240		}
15241
15242		website.sendImpressions(elements);
15243
15244		elements.attr('data-ecommerce-inited', true);
15245
15246		return elements;
15247	},
15248
15249	findEcommerce: function(obj = document.body) {
15250		var elements = $(obj).find('[data-ecommerce]:not([data-ecommerce-inited])');
15251		if (!elements.length) {
15252			return false;
15253		}
15254		return elements;
15255	},
15256
15257	sendImpressions: function(elements) {
15258		website.sendProductsImpressions(elements);
15259		website.sendPromotionsImpressions(elements);
15260	},
15261
15262	sendProductsImpressions: function(elements) {
15263		console.log( "sendProductsImpressions" );
15264
15265		let products = [];
15266		for (let index = 0; index < elements.length; ++index) {
15267			const element = elements[index];
15268
15269			let json_string   = element.getAttribute('data-json');
15270			let json = JSON.parse(json_string);
15271			if (json && json.type == 'product') {
15272
15273				// add listener for clicks
15274				if (element.hasAttribute('data-click')) {
15275					element.addEventListener('click', website.sendProductClick);
15276					// console.log('dodałem eventListener do produktu!');
15277				}
15278
15279				// impression should be counted only once, so we use this tag 'data-impression' on only one of the product links.
15280				if (element.hasAttribute('data-impression')) {
15281					products.push(json);
15282					// console.log('wysłałem impression produktu!');
15283					// console.log(json);
15284				}
15285			}
15286
15287		};
15288
15289		window.dataLayer = window.dataLayer || [];
15290		dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
15291		dataLayer.push({
15292			'ecommerce': {
15293				'currencyCode': 'PLN',                       // Local currency is optional.
15294				'impressions': products
15295			}
15296		});
15297	},
15298
15299	sendPromotionsImpressions: function(elements) {
15300		let promotions = [];
15301		for (let index = 0; index < elements.length; ++index) {
15302			const element = elements[index];
15303			let json_string = element.getAttribute('data-json');
15304			let json = JSON.parse(json_string);
15305			if (json && json.type == 'promotion') {
15306				promotions.push(json);
15307				// add listener for clicks
15308				element.addEventListener('click', website.sendPromotionClick);
15309				// console.log('dodałem eventListener do promocji!');
15310			}
15311		};
15312
15313		// send impressions
15314		window.dataLayer = window.dataLayer || [];
15315		dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
15316		dataLayer.push({
15317			'ecommerce': {
15318				'promoView': {
15319					'promotions': promotions
15320				}
15321			}
15322		});
15323	},
15324
15325	sendPromotionClick: function(event) {
15326		console.log('promo click!');
15327		var json = JSON.parse( this.getAttribute('data-json') );
15328
15329		window.dataLayer = window.dataLayer || [];
15330		dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
15331		dataLayer.push({
15332			'event': 'promotionClick',
15333			'ecommerce': {
15334				'promoClick': {
15335					'promotions': [json]
15336				}
15337			},
15338		});
15339	},
15340
15341	sendProductClick: function(event) {
15342		//console.log('product click!');
15343
15344		var json = JSON.parse( this.getAttribute('data-json') );
15345
15346		window.dataLayer = window.dataLayer || [];
15347		dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
15348		dataLayer.push({
15349			'event': 'productClick',
15350			'ecommerce': {
15351				'click': {
15352					'actionField': {'list': 'Search Results'},      // Optional list property.
15353					'products': [json]
15354				}
15355			},
15356		});
15357	},
15358
15359	sendAddToCart: function(element, quantity) {
15360		var json = element.data('json');
15361		if( typeof json === "undefined" ) return;
15362		// if the argument is null, then take the quantity from the data-field
15363		json.quantity = quantity ? quantity : json.quantity;
15364
15365		dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
15366		dataLayer.push({
15367			'event': 'addToCart',
15368			'ecommerce': {
15369				'currencyCode': 'PLN',
15370				'add': {                                // 'add' actionFieldObject measures.
15371					'products': [json]                    //  adding a product to a shopping cart.
15372				}
15373			}
15374		});
15375		console.log('Add sent: '+json.quantity);
15376	},
15377
15378	sendRemoveFromCart: function(element, quantity) {
15379		var json = element.data('json');
15380		if( typeof json === "undefined" ) return;
15381
15382		json.quantity = quantity ? quantity : json.quantity;
15383
15384		dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
15385		dataLayer.push({
15386			'event': 'removeFromCart',
15387			'ecommerce': {
15388				'currencyCode': 'PLN',
15389				'remove': {                             // 'remove' actionFieldObject measures.
15390					'products': [json]                      //  removing a product from a shopping cart.
15391				}
15392			}
15393		});
15394		console.log('Remove sent: '+json.quantity);
15395	},
15396
15397	initNano: function( obj ) {
15398		$(obj).nanoScroller({
15399			alwaysVisible: true,
15400			preventPageScrolling: true,
15401		});
15402	},
15403
15404	initStellar: function( ) {
15405		$.stellar({
15406			horizontalScrolling: false,
15407			verticalOffset: 0,
15408			positionProperty: 'transform',
15409			responsive: true,
15410			hideDistantElements: false,
15411		});
15412	},
15413
15414
15415	initSelectpicker: function( obj ) {
15416
15417		if( !$.isFunction( $.fn.selectpicker ) ) return;
15418
15419		var defaultWhiteList = $.fn.selectpicker.Constructor.DEFAULTS.whiteList;
15420		var dataRegex = /^data-[\w-]+/;
15421		defaultWhiteList['*'].push(dataRegex);
15422
15423		$(obj).each(function( id, el ) {
15424			$(el).selectpicker( $(el).data() );
15425		});
15426	},
15427
15428	//Init all bxsliders based on .bxslider class
15429	initBxSlider: function( obj ) {
15430		if( !$.isFunction( $.fn.bxSlider ) ) return;
15431
15432		$(obj).each(function( id, el ) {
15433			if( !$(el).parent().hasClass('bx-viewport') ){
15434
15435				var elId = $(el).attr('id') ? $(el).attr('id') : 'bx'+ Object.keys(website.config.bxSliders).length;
15436
15437				website.config.bxSliders[elId] = $(el).bxSlider( $.extend({
15438					onSlideBefore: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); },
15439					onSlideAfter: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); },
15440					pagerCustom: '#bx-pager',
15441					speed: 1000,
15442					easing: 'easeInOutExpo',
15443					useCSS: false
15444				}, $(el).data() ) );
15445			}
15446		});
15447	},
15448	initBxSlider2: function( obj ) {
15449		if( !$.isFunction( $.fn.bxSlider ) ) return;
15450
15451		$(obj).each(function( id, el ) {
15452
15453			if( !$(el).parent().hasClass('bx-viewport') ){
15454
15455				if( $(el).hasClass("noslider") ){
15456					$(el).bxSlider( $.extend({
15457						onSlideBefore: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); },
15458						onSlideAfter: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); },
15459						auto: false,
15460						pager: false,
15461						controls: false,
15462						easing: 'easeInOutExpo',
15463						useCSS: false
15464					}, $(el).data() ) );
15465				}
15466				else{
15467					$(el).bxSlider( $.extend({
15468						onSlideBefore: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); },
15469						onSlideAfter: function( slideElement ){ $(slideElement).find('img').trigger("scroll"); },
15470						auto: true,
15471						//mode: 'fade',
15472						tickerHover: true,
15473						pager: true,
15474						controls: false,
15475						pause: 5000,
15476						speed: 1000,
15477						easing: 'easeInOutExpo',
15478						useCSS: false
15479					}, $(el).data() ) );
15480				}
15481
15482			}
15483		});
15484	},
15485
15486	initSwiper: function (obj) {
15487		if(!Swiper) return;
15488		var swipersSync = [];
15489		$(obj).each(function (id, el) {
15490			var $el = $(el);
15491			if(!$el.find('.swiper-slide').length) return;
15492			var data = $el.data();
15493			if(data.pagination)
15494			{
15495				for(var ind1= 0, funName1, keys1 = Object.keys(data.pagination); funName1 = data.pagination[keys1[ind1]]; ind1++ )
15496				{
15497					if(keys1[ind1].indexOf('render') > -1)
15498					{
15499						data.pagination[keys1[ind1]] = eval('window["'+funName1.replace('.','"]["')+'"]') || funName1;
15500					}
15501				}
15502			}
15503			var pushSwiper = data.autoplay && data.swiperSyncId;
15504			if(pushSwiper)
15505			{
15506				if(!swipersSync[data.swiperSyncId])
15507				{
15508					swipersSync[data.swiperSyncId] = {
15509						autoplay: data.autoplay,
15510						sliders: []
15511					};
15512				}
15513				delete data.autoplay;
15514			}
15515			var elId = $el.attr('id') ? $el.attr('id') : 'bx'+ Object.keys(website.config.swipers).length;
15516			if(data.on){
15517				for(var ind = 0, funName, keys = Object.keys(data.on); funName = data.on[keys[ind]]; ind++ )
15518				{
15519					data.on[keys[ind]] = $.isFunction( funName ) ? funName : eval('window["'+funName.replace('.','"]["')+'"]');
15520				}
15521				if(data.on.init)
15522				{
15523					data.init = false;
15524				}
15525			}
15526			try{
15527				website.config.swipers[elId] = new Swiper(this,$.extend({
15528					loop: true
15529				},data));
15530
15531				website.initLazyLoad( $(this).find( website.config.lazyload ) );
15532
15533				website.config.swipers[elId].on("slideChangeTransitionEnd", function ( ) {
15534
15535					$(this.$el).find("img.lazy-waiting").filter(":in-viewport").trigger('scroll');
15536
15537					//var $slide = $(this.slides[this.activeIndex]);
15538					var $slide = $(this.slides[this.activeIndex]);
15539					if( $slide.hasClass('swiper-slide-duplicate') ){
15540						//console.log( "duplicate" );
15541						website.initLazyLoad( $slide.find( ".lazy-waiting" ) );
15542						$slide.find( ".lazy-waiting" ).trigger("scroll");
15543					}
15544
15545					var $slide = $(this.slides[this.activeIndex+1]);
15546					if( $slide.hasClass('swiper-slide-duplicate') ){
15547						website.initLazyLoad( $slide.find( ".lazy-waiting" ) );
15548					}
15549					$slide.find( ".lazy-waiting" ).trigger("scroll");
15550
15551					var $slide = $(this.slides[this.activeIndex+2]);
15552					if( $slide.hasClass('swiper-slide-duplicate') ){
15553						website.initLazyLoad( $slide.find( ".lazy-waiting" ) );
15554					}
15555					$slide.find( ".lazy-waiting" ).trigger("scroll");
15556
15557					// console.log( "swipeChange:"+elId+" / "+this.realIndex+" / "+this.activeIndex );
15558					// console.log( $slide );
15559				});
15560			}
15561			catch (ex) {
15562				console.log([{'elId':apielId,'context':this,'data':data,'element':el},ex]);
15563			}
15564			if(data.on && data.on.init)
15565			{
15566				website.config.swipers[elId].init();
15567			}
15568			if(pushSwiper) swipersSync[data.swiperSyncId].sliders.push(this.swiper);
15569		});
15570
15571		for(var fu = 0, el, keys = Object.keys(swipersSync); el = swipersSync[keys[fu]]; fu++ ){
15572			setInterval(function () {
15573				for(var i = 0, item; item = this[i]; i++) item.slideNext();
15574			}
15574.bind(el.sliders), (el.sliders[0].speed || 300) + (el.autoplay.delay || 5000));
15575		}
15576	},
15577
15578	//Init all lazy images based on .lazy class
15579	initLazyLoad: function( obj ) {
15580		if( !$.isFunction( $.fn.lazyload ) ) return;
15581
15582		$(obj).addClass('lazy-waiting').show().lazyload({
15583			threshold : 200,
15584			failure_limit : 100,
15585			effect : "fadeIn",
15586			//bind: "appear",
15587			skip_invisible : true,
15588			appear: function() {
15589				$(this).removeClass('lazy-waiting').addClass('lazy-loading');
15590			},
15591			load: function() {
15592				$(this).removeClass('lazy-loading').addClass('lazy-loaded');
15593			}
15594		});
15595		setTimeout(function(){
15596			$(obj).filter(":in-viewport").trigger('scroll');
15597		}, 100);
15598		// $(obj).filter(":in-viewport").trigger('scroll');
15599	},
15600
15601	//Init all fancy box galleries based on rel=lightbox-gallery
15602	initFancybox: function( obj ) {
15603		if( !$.isFunction( $.fn.fancybox ) ) return;
15604
15605		$(obj).each(function( id, el ) {
15606
15607			$( el ).fancybox( $.extend( {
15608				'transitionIn'	: 'elastic',
15609				'transitionOut'	: 'elastic',
15610				'titlePosition' : 'inside',
15611				'overlayColor' : '#fff',
15612				'overlayOpacity' : '0.9',
15613				'padding' : '2',
15614				'iframe' : {
15615					scrolling : 'auto',
15616					preload   : false
15617				}
15618			}, $(el).data() ) );
15619
15620		});
15621
15622		website.initFancyboxGallery();
15623	},
15624
15625	initFancyboxContact: function( obj ) {
15626		if( !$.isFunction( $.fn.fancybox ) ) return;
15627
15628		$(obj).each(function( id, el ) {
15629			var options = $.extend( {
15630				'transitionIn'	: 'elastic',
15631				'transitionOut'	: 'elastic',
15632				'titlePosition' : 'inside',
15633				'overlayColor' : '#fff',
15634				'overlayOpacity' : '0.9',
15635				'padding' : '2',
15636				'iframe' : {
15637					scrolling : 'auto',
15638					preload   : false
15639				}
15640			}, $(el).data() );
15641
15642			if (window.innerWidth <= 768) {
15643				options.width = '95%';
15644			} else {
15645				options.width = '70%';
15646			}
15647
15648			$( el ).fancybox( options );
15649		});
15650
15651	},
15652	//Init all fancy box galleries based on rel=lightbox-gallery
15653	initFancyboxGallery: function() {
15654		if( !$.isFunction( $.fn.fancybox ) ) return;
15655
15656		var obj = '.fancybox';
15657		var galleries = {};
15658		$(obj).each(function( id, el ) {
15659
15660			var rel = $(el).attr('rel');
15661			galleries[rel] = rel;
15662		});
15663
15664		$.each( galleries, function( id, el ) {
15665
15666			el = $( '[rel='+el+']' );
15667			$( el ).fancybox( $.extend( {
15668				'transitionIn'	: 'elastic',
15669				'transitionOut'	: 'elastic',
15670				'titlePosition' : 'inside',
15671				'overlayColor' : '#fff',
15672				'overlayOpacity' : '0.9',
15673				'padding' : '2',
15674				'iframe' : {
15675					scrolling : 'auto',
15676					preload   : false
15677				}
15678			}, $(el).data() ) );
15679
15680		});
15681	},
15682
15683	//Init all fancy box galleries based on rel=lightbox-gallery
15684	initFitImage: function( obj ) {
15685		$(obj).each(function( id, el ) {
15686			website.fitImage( $(el), $(el).find('img') );
15687		});
15688	},
15689
15690	//Init all section-fit
15691	initFitSection: function( obj ) {
15692
15693		$(obj).each(function( id, el ) {
15694
15695			var wHeight = $(window).height();
15696			var toHeight = wHeight;
15697			var headerHeight = $('header').height();
15698			var percentHeight = $(el).data('percent-height');
15699			var percentHeightSm = $(el).data('percent-height-sm');
15700			var percentHeightXs = $(el).data('percent-height-xs');
15701
15702			var pixelHeight = $(el).data('px-height');
15703			var pixelHeightSm = $(el).data('px-height-sm');
15704			var pixelHeightXs = $(el).data('px-height-xs');
15705
15706			var minHeight = $(el).data('px-min-height');
15707			var minHeightSm = $(el).data('px-min-height-sm');
15708			var minHeightXs = $(el).data('px-min-height-xs');
15709
15710			var offsetHeight = $(el).data('offset-height');
15711
15712			if( percentHeight ) {
15713				toHeight = parseInt( wHeight * (percentHeight/100) );
15714				headerHeight = parseInt( headerHeight * (percentHeight/100) );
15715			};
15716			if( $(window).width() < 979 && percentHeightSm ) {
15717				toHeight = parseInt(  wHeight * (percentHeightSm/100) );
15718				headerHeight = parseInt( headerHeight * (percentHeightSm/100) );
15719			};
15720			if( $(window).width() < 768 && percentHeightXs ) {
15721				toHeight = parseInt( wHeight * (percentHeightXs/100) );
15722				headerHeight = parseInt( headerHeight * (percentHeightXs/100) );
15723			}
15724
15725			if( pixelHeight ) {
15726				toHeight = pixelHeight;
15727				headerHeight = 0;
15728			};
15729			if( $(window).width() < 979 && pixelHeightSm ) {
15730				toHeight = pixelHeightSm;
15731				headerHeight = 0;
15732			};
15733			if( $(window).width() < 768 && pixelHeightXs ) {
15734				toHeight = pixelHeightXs;
15735				headerHeight = 0;
15736			}
15737
15738			if( $(window).width() < 979 && minHeightSm ) {
15739				minHeight = minHeightSm;
15740			};
15741			if( $(window).width() < 768 && minHeightXs ) {
15742				minHeight = minHeightXs;
15743			}
15744
15745			//offset height if needed
15746			if( offsetHeight ) {
15747				toHeight = toHeight - offsetHeight
15748			};
15749
15750
15751			if( !$(el).hasClass('no-header') ) toHeight = toHeight-headerHeight;
15752			if( $(window).width() < 979 && $(el).hasClass('no-mobilefit') ) toHeight = 'auto';
15753
15754			//SET HEIGHT
15755			if( minHeight && toHeight < minHeight ) {
15756				$(el).css("height", minHeight );
15757			} else {
15758				$(el).css("height", toHeight );
15759			}
15760
15761		});
15762	},
15763
15764	fitImage: function( imgFrame, imgObj ){
15765
15766		$(imgFrame).css('position', 'relative' );
15767		$(imgFrame).css('overflow', 'hidden' );
15768		$(imgObj).css('position', 'absolute' );
15769		$(imgObj).css('max-width', 'none' );
15770
15771		var frameW = $(imgFrame).actual( 'width' );
15772		var frameH = $(imgFrame).actual( 'height' );
15773		var imgW = $(imgObj).actual( 'width' );
15774		var imgH = $(imgObj).actual( 'height' );
15775
15776		ratioW = frameW / imgW;
15777		ratioH = frameH / imgH;
15778
15779		if ( ratioW > ratioH ) {
15780			$(imgObj).css("width", parseInt(frameW));
15781			$(imgObj).css("height", 'auto' );
15782		}
15783		else {
15784			$(imgObj).css("height", parseInt(frameH));
15785			$(imgObj).css("width", 'auto' );
15786		};
15787
15788		imgW = $(imgObj).actual( 'width' );
15789		imgH = $(imgObj).actual( 'height' );
15790
15791		$(imgObj).css("top", (frameH-imgH)/2);
15792		$(imgObj).css("left", (frameW-imgW)/2);
15793
15794		$( imgObj ).load(function() { website.fitImage( imgFrame, imgObj ); });
15795	},
15796
15797	initOrphans: function( obj ){
15798		$( obj ).each(function( id, el ) {
15799			content = $(el).html();
15800			if( content && content.length > 0) {
15801				replaced = content.replace(/(\s)([\S])[\s]+/g, "$1$2&nbsp;");
15802				$(el).html(replaced);
15803			}
15804		});
15805	},
15806
15807	//Init smooth scroll plugin
15808	initSmoothScroll: function( obj ) {
15809		if( !$.isFunction( $.fn.smoothScroll ) ) return;
15810
15811		$(obj).smoothScroll( { easing: 'easeInOutExpo', speed: 1000 } );
15812	},
15813
15814	//Init  contact
15815	initEmails: function() {
15816
15817		$('a[href^="mailto:"]').each(function( id, el ) {
15818
15819			var email_encoded = $( el ).attr('href').replace('mailto:', '');
15820			var email = $.rot13( email_encoded );
15821//    		console.log( email_encoded + " -> " + email );
15822
15823			$( el ).attr('href', $( el ).attr('href').replace( email_encoded , email) );
15824			$( el ).html( $( el ).html().replace( email_encoded , email) );
15825
15826			if( $( el ).attr('data-original-title') )
15827				$( el ).attr('data-original-title', $( el ).attr('data-original-title').replace( email_encoded , email) );
15828		});
15829	},
15830
15831	initAnimate: function( obj ) {
15832
15833		$(obj).each(function( id, el ) {
15834
15835			var type = $(el).data('animate-class');
15836			if( typeof type === "undefined" ) type = 'fadeIn';
15837			var delay = $(el).data('animate-delay');
15838
15839			var event = $(el).data('animate-event');
15840			var eventType = $(el).data('animate-event-class');
15841			var event2 = $(el).data('animate-event2');
15842			var eventType2 = $(el).data('animate-event-class2');
15843
15844			if( event ){
15845				$(el).bind( event, function() {
15846					$(el).removeClass( type ).removeClass( eventType ).removeClass( eventType2 ).addClass( eventType );
15847				});
15848			}
15849			if( event2 ){
15850				$(el).bind( event2, function() {
15851					$(el).removeClass( type ).removeClass( eventType ).removeClass( eventType2 ).addClass( eventType2 );
15852				});
15853			}
15854
15855			if( delay ){
15856				$(el).css('opacity', 0);
15857				setTimeout( function(){
15858					$(el).css('opacity', 1);
15859					$(el).removeClass( type ).addClass( type);
15860				}, delay );
15861			}
15862			else{
15863				$(el).removeClass( type ).addClass( type);
15864			}
15865		});
15866	},
15867
15868	initFbTab: function() {
15869		var el = '.fb-tab';
15870		if ($(el).length) {
15871			var baseWidth = $(el).find('.content').outerWidth();
15872			$('.tab').bind('mouseenter', function() {
15873				//$(el).css('z-index', 110);
15874				$(el).stop(true,false).animate( { right : 0 }, 400, 'easeInOutExpo');
15875			});
15876
15877			$(el).bind('mouseleave', function() {
15878				$(el).stop(true,false).animate( { right : -(baseWidth) }, 400, 'easeInOutExpo', function() {
15879					//$(el).css('z-index', 20);
15880				});
15881			})
15882		}
15883	},
15884
15885	initDisplayingCheckedInputs: function() {
15886		//$( "input[type=checkbox]:checked:enabled" ).each(function(index, el) {
15887		//	$(el).parent().addClass("checked");
15888		//});
15889		//$( "input[type=radio]:checked:enabled" ).each(function(index, el) {
15890		//	$(el).parent().addClass("checked");
15891		//});
15892
15893		$( "input[type=checkbox], input[type=radio]" ).each(function(index, el) {
15894			$(this).prop("checked") ? $(this).parent().addClass("checked") : $(this).parent().removeClass("checked");
15895		});
15896
15897		$("input[type=checkbox]").change(function() {
15898			$(this).prop("checked") ? $(this).parent().addClass("checked") : $(this).parent().removeClass("checked");
15899		});
15900
15901		$("input[type=radio]").change(function() {
15902			$("input[name='" + $(this).attr("name") + "']").each(function(index, el) {
15903				$(el).parent().removeClass("checked");
15904			});
15905
15906			$(this).parent().addClass("checked");
15907		});
15908	},
15909
15910	languageGet: function () {
15911		var nav = window.navigator,
15912			browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
15913			i,
15914			language,
15915			userLang;
15916
15917		// support for HTML 5.1 "navigator.languages"
15918		if (Array.isArray(nav.languages)) {
15919			for (i = 0; i < nav.languages.length; i++) {
15920				language = nav.languages[i];
15921				if (language && language.length) {
15922					userLang = language;
15923				}
15924			}
15925		}
15926
15927		// support for other well known properties in browsers
15928		for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
15929			language = nav[browserLanguagePropertyKeys[i]];
15930			if (language && language.length) {
15931				userLang = language;
15932			}
15933		}
15934
15935		if( userLang ){
15936			language = userLang.split('-')[0];
15937			return language;
15938		}
15939
15940		return null;
15941	},
15942	checkLang: function (lang) {
15943		var blockedUp = lang.toUpperCase();
15944		var actLang = website.languageGet();
15945		var actLangUp = actLang.toUpperCase()
15946
15947		return blockedUp.indexOf(actLangUp)<0 ? false : true;
15948		//return blockedUp.includes(actLangUp);
15949	},
15950
15951	registerLang: function () {
15952
15953		var currentLang = website.languageGet();
15954		var c = $.cookie( "userLanguage" );
15955		var host = $('body').data('host')+'/'+$('body').data('lang');
15956
15957		console.log( ['host', host + "/default/setLanguageUser", 'c', c, 'userLanguage', currentLang] );
15958
15959		if ( c ) {
15960			$.ajax({
15961				method: "GET",
15962				url: host + "/default/setLanguageUser",
15963				data: { userLanguage: currentLang }
15964			}).done(function( response ) {
15965				console.log( "Zwrotka " + response );
15966			});
15967		} else {
15968			$.cookie( "userLanguage", currentLang );
15969		}
15970	},
15971
15972	checkDomain: function () {
15973
15974		var hashCheck = website.hashString(location.hostname);
15975		var hashDomain = $('meta[name=hash]').attr('content');
15976		var lang = $('body').data('lang');
15977		var host = '/'+lang;
15978
15979		//console.log( 'checkDomain', host, hashDomain, hashCheck );
15980
15981		const allowedLanguages = ['nl', 'si', 'be', 'bf', 'at', 'bg', 'cz', 'de', 'el', 'es', 'fr', 'hr', 'it', 'lt', 'hu', 'ro', 'sk', 'pl', 'en', 'ua'];
15982
15983		if (allowedLanguages.includes(lang)
15984			&& hashCheck !== hashDomain
15985			&& !window.location.href.endsWith('/403')) {
15986			window.location.href = `${host}/403`;
15987			//console.log( 'redirectDomain', `${host}/403` );
15988		}
15989	},
15990
15991	hashString:function(_0x3a2b){let _0x4f1c=0x811c9dc5>>>0;for(let _0x2d8e=0x0;_0x2d8e<_0x3a2b['\x6c\x65\x6e\x67\x74\x68'];_0x2d8e++){let _0x5c9f=_0x3a2b['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x2d8e);_0x5c9f>0xff&&(_0x5c9f&=0xff);_0x4f1c^=_0x5c9f;_0x4f1c=Math['\x69\x6d\x75\x6c'](_0x4f1c,0x1000193)>>>0x0;}return _0x4f1c['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10)['\x70\x61\x64\x53\x74\x61\x72\x74'](0x8,'\x30');},
15992
15993	initInputHasValue: function (el) {
15994		$(el).on('keyup custom.keyup change blur input',function () {
15995			var input = $(this);
15996			if(input.val())
15997				input.addClass('has-value');
15998			else
15999				input.removeClass('has-value');
16000		}).trigger('custom.keyup');
16001	},
16002
16003	initBottomBar: function (el) {
16004		if(!(this instanceof website.initBottomBar))
16005		{
16006			return new website.initBottomBar(el);
16007		}
16008		var items = [];
16009
16010		function removeEach(elem) {
16011			var its = items;
16012			for(var i = 0, item, keys = Object.keys(its); item = its[keys[i]]; i++)
16013			{
16014				if(item === elem)
16015					delete items[keys[i]];
16016			}
16017		}
16018
16019		this.removeItem = function (elem,key) {
16020			if(!elem) return;
16021			this.el.each(function (id,_item) {
16022				$(_item.childNodes).filter(function () {
16023					return this === elem;
16024				}).remove();
16025			});
16026			if(key!==undefined)
16027			{
16028				try
16029				{
16030					delete items[key];
16031				}
16032				catch (ex)
16033				{
16034					removeEach(elem);
16035				}
16036			}
16037			else
16038			{
16039				removeEach(elem);
16040			}
16041		};
16042
16043		this.addItem = function (elem,key) {
16044			if(!elem) return;
16045			this.el.each(function (id,_item) {
16046				$(_item).append(elem);
16047			});
16048			if(key!==undefined)
16049			{
16050				if(items[key])
16051					this.removeItem(elem,key);
16052				items[key] = elem;
16053			}
16054			else
16055				items.push();
16056		};
16057
16058		this.addItems = function (elems) {
16059			for(var i = 0, item, keys = Object.keys(elems); item = elems[keys[i]]; i++)
16060			{
16061				this.addItem(item, keys[i]);
16062			}
16063		};
16064
16065		this.el = $(el).each(function (id, elem) {
16066
16067		}.bind(this));
16068
16069		website.initBottomBar = this;
16070	},
16071
16072	swiperMobilePaginationRender: function (i,c) {
16073		return '<div class="col-auto px-0 d-flex category-slider-link-reset ' + c + '"><span data-slide="' + i + '" class="category-slider-link fs-15 ls-20 font-weight-semi">' + $(this.el).find('.swiper-names [data-id="' + i + '"]').text() + '</span></div>';
16074	},
16075
16076	swiperMobilePaginationBars: function (i,c) {
16077		return '<div class="swiper-custom-bullet d-flex flex-column align-items-center justify-content-center ' + c + '"><div class="swiper-custom-bullet-bar"></div></div>'
16078	},
16079
16080
16081	getBaseUrl: function () {
16082		return $('body').data('host')+'/'+$('body').data('lang');
16083	},
16084
16085	initBasket: function (obj) {
16086
16087		// if( typeof obj == "undefined" ) return false;
16088		if( typeof obj == "undefined" ) obj = $( "body" );
16089		else obj = $(obj);
16090
16091		// $( document ).on( "click", "a.offsite", function() {} );
16092		// $(obj).find( "[data-target=add-1]" ).live( "click",{});
16093
16094		console.log( "initBasket" );
16095
16096		$(obj).off( 'click', "[data-target=add-1]" );
16097		$(obj).on( 'click', "[data-target=add-1]", function(event) { website.basketAdd( this, event) } );
16098
16099
16100		$(obj).off( 'click', "[data-target=add-2]" );
16101		$(obj).on( 'click', "[data-target=add-2]", function(event) { website.wishlistAdd( this, event) } );
16102
16103		$(obj).off( 'click', "[data-target=add-3]" );
16104		$(obj).on( 'click', "[data-target=add-3]", function(event) { website.basketAdd( this, event) } );
16105
16106		$(obj).off( 'click', "[data-target=add-4]" );
16107		$(obj).on( 'click', "[data-target=add-4]", function(event) { website.wishlistAdd( this, event) } );
16108
16109		$(obj).off( 'click', "[data-target=del-4]" );
16110		$(obj).on( 'click', "[data-target=del-4]", function(event) { website.wishlistDelete( this, event) } );
16111
16112		// $(obj).find( "[data-target=add-2]" ).off();
16113		// $(obj).find( "[data-target=add-2]" ).on( 'click', function(event) { website.wishlistAdd(this, event) } );
16114		//
16115		// $(obj).find( "[data-target=add-3]" ).off();
16116		// $(obj).find( "[data-target=add-3]" ).on( 'click', function(event) { website.basketAdd( this, event) } );
16117
16118		$(obj).find( "#basketModal [data-dismiss=modal]" ).off();
16119		$(obj).find( "#basketModal [data-dismiss=modal]" ).click( function(event) {
16120			$("#eCms-alert").fadeOut( "slow" );
16121			setTimeout( function() {
16122				$("#basketModal").remove()
16123			}, 1000 );
16124		} );
16125
16126	},
16127
16128	basketAdd : function( element, event ) {
16129
16130		event.preventDefault();
16131		console.log( "basketAdd" );
16132
16133		var $this = $( element );
16134
16135		var size = 0;
16136		var size_input = $( element ).closest("form").find( "[data-target=size]");
16137		if( size_input.length ){
16138			if (size_input.get(0).type=="radio") {
16139				var size = size_input.filter(":checked").val();
16140			} else {
16141				var size = size_input.val();
16142			}
16143		}
16144		console.log(event);
16145		var id = size>0 ? size : $this.data( "id" );
16146		var quantity = $this.attr( "data-size" );
16147		var outside = $this.attr( "data-outside" );
16148		var form = $this.closest("form");
16149		var url = $this.attr( "data-action" ) ? $this.attr( "data-action" ) : website.getBaseUrl() + "/basket/add";
16150		var voucher_from = form.find( "[data-target=voucher_from]" ).val();
16151		var voucher_to = form.find( "[data-target=voucher_to]" ).val();
16152		var voucher_email = form.find( "[data-target=voucher_email]" ).val();
16153		var voucher_text  = form.find( "[data-target=voucher_text]" ).val();
16154		var voucher_method  = form.find( "[data-target=voucher_method]:checked" ).val();
16155		var voucher_datetime  = form.find( "[data-target=voucher_datetime]" ).val();
16156
16157		if( outside==1 ){
16158			$.fancybox.open([website.getBaseUrl() + "/product/" + id + "/action/outside"], {
16159				toolbar  : false,
16160				smallBtn : false,
16161				type: "iframe",
16162				baseClass: "fancybox-change-password",
16163				width: 500,
16164				height: 600,
16165				iframe : {
16166					preload : false
16167				}
16168			});
16169			return;
16170		}
16171
16172		$(element).attr("disabled","disabled");
16173		var disableTimeoutId = setTimeout( function(){
16174			$(element).addClass("disabled");
16175			disableTimeoutId = null;
16176		}, 1000 );
16177
16178		if ($.fn.showAlertTimeout) clearTimeout($.fn.showAlertTimeout);
16179
16180		$.ajax( {
16181			url         : url,
16182			data        : {
16183				pk : id,
16184				size : size,
16185				quantity : quantity,
16186				voucher_from : voucher_from,
16187				voucher_to : voucher_to,
16188				voucher_email : voucher_email,
16189				voucher_text : voucher_text,
16190				voucher_method : voucher_method,
16191				voucher_datetime : voucher_datetime,
16192			},
16193			type        : "POST",
16194			dataType    : "JSON",
16195			success     : function( data ) {
16196				$( "[data-target=basket-quantity]" ).text( "" + data.items_count + "" );
16197				$( "[data-target=basket-value]" ).text( "" + data.summation + "" );
16198
16199				if( data.redirect ) document.location.href = data.redirect;
16200
16201				if( data.modal )
16202					website.showAlertModal( data.modal );
16203				else
16204					website.showAlert( data.alert );
16205
16206
16207				if( data.errors && form.length>0 ){
16208					console.log( 'errors', data.errors, form.length );
16209					console.log( Object.keys(data.errors) );
16210
16211					var error_fields = Object.keys(data.errors);
16212					for (const field_key of error_fields )
16213					{
16214						var field = form.find( '#'+field_key );
16215						if( field.length ){
16216							//var section = field.closest('section');
16217
16218							jQuery('html, body')
16219								.stop(true, false)
16220								.animate({scrollTop: field.offset().top - $('header').height() - 50}, 500, 'easeInOutExpo');
16221
16222							break;
16223						}
16224					}
16225
16226					// Object.keys(data.errors).forEach(function(key) {
16227					//
16228					// });
16229				}
16230
16231				website.basketReload();
16232				if (data.script) {
16233					eval( data.script ); // ddd
16234				}
16235				try {
16236					if (data.product_value) {
16237						dataLayer.push(
16238							{
16239								"event": "basket_add",
16240								"ecomm_totalvalue": data.product_value / 100,
16241								"ecomm_prodid" : id
16242							});
16243					}
16244					if (data.ec_product) {
16245						dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
16246						dataLayer.push({
16247							"event": "addToCart",
16248							"ecommerce": {
16249								"currencyCode": "PLN",
16250								"add": {                                // "add" actionFieldObject measures.
16251									"products": [ data.ec_product ]
16252								}
16253							}
16254						});
16255						console.log("Added to basket");
16256					}
16257				}
16258				catch (ex){console.log(["No dataLayer object!", ex]);}
16259			},
16260			complete    : function() {
16261				$this.attr("disabled",null);
16262				$this.removeClass("disabled");
16263				if (disableTimeoutId) clearTimeout(disableTimeoutId);
16264			}
16265		} );
16266
16267		return false;
16268	},
16269
16270	basketAddApi : function( id, quantity ) {
16271
16272		$.ajax( {
16273			url         : website.getBaseUrl() + "/basket/add",
16274			data        : {
16275				pk : id,
16276				quantity : quantity,
16277			},
16278			type        : "POST",
16279			dataType    : "JSON",
16280			success     : function( data ) {
16281				$( "[data-target=basket-quantity]" ).text( "" + data.items_count + "" );
16282				$( "[data-target=basket-value]" ).text( "" + data.summation + "" );
16283
16284				if( data.redirect ) document.location.href = data.redirect;
16285
16286				if( data.modal )
16287					website.showAlertModal( data.modal );
16288				else
16289					website.showAlert( data.alert );
16290
16291				website.basketReload();
16292				if (data.script) {
16293					eval( data.script ); // ddd
16294				}
16295				try {
16296					if (data.product_value) {
16297						dataLayer.push(
16298							{
16299								"event": "basket_add",
16300								"ecomm_totalvalue": data.product_value / 100,
16301								"ecomm_prodid" : id
16302							});
16303					}
16304					if (data.ec_product) {
16305						dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
16306						dataLayer.push({
16307							"event": "addToCart",
16308							"ecommerce": {
16309								"currencyCode": "PLN",
16310								"add": {                                // "add" actionFieldObject measures.
16311									"products": [ data.ec_product ]
16312								}
16313							}
16314						});
16315						console.log("Added to basket");
16316					}
16317				}
16318				catch (ex){console.log(["No dataLayer object!", ex]);}
16319			}
16320		} );
16321
16322		return false;
16323	},
16324
16325	basketCheckApi : async function( id ) {
16326
16327		return new Promise((resolve, reject) => {
16328			console.log( 'website.basketCheckApi' );
16329
16330			$.ajax( {
16331				url         : website.getBaseUrl() + "/basket/check",
16332				data        : { pk : id },
16333				type        : "POST",
16334				dataType    : "JSON",
16335				//async		: false,
16336				cache		: false,
16337				success     : function( response ) {
16338					resolve(response);
16339				},
16340				error: function( response ){
16341					reject(response);
16342				},
16343			} );
16344		})
16345	},
16346
16347	wishlistAdd : function( element, event ) {
16348
16349		console.log( 'website.wishlistAdd' );
16350		event.preventDefault();
16351
16352		var $this = $( element );
16353
16354		if( !$this.attr("data-in-wishlist") ) $this.attr("data-in-wishlist", 1 );
16355		else $this.attr("data-in-wishlist", null );
16356
16357		var from = "wishlist";
16358
16359		var size = 0;
16360		var size_input = $( element ).closest("form").find( "[data-target=size]");
16361		if( size_input.length ){
16362			if (size_input.get(0).type=="radio") {
16363				var size = size_input.filter(":checked").val();
16364			} else {
16365				var size = size_input.val();
16366			}
16367		}
16368		console.log(event);
16369		var id = size>0 ? size : $this.data( "id" );
16370		var quantity = $this.attr( "data-size" );
16371
16372		$.ajax( {
16373			url         : website.getBaseUrl() + "/wishlist/add",
16374			data        : { pk : id, size : $( "[data-target=size]" ).val(), quantity : quantity, from : from },
16375			type        : "POST",
16376			dataType    : "JSON",
16377			success     : function( data ) {
16378				$( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" );
16379				$( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" );
16380				website.showAlert( data.alert );
16381			}
16382		} );
16383
16384		return false;
16385	},
16386
16387	wishlistDelete : function( element, event ) {
16388
16389		console.log( 'website.wishlistDelete' );
16390		event.preventDefault();
16391
16392		var $this = $( element );
16393		$this.attr("data-in-wishlist", null );
16394
16395		var from = "wishlist";
16396		var id = $this.data( "id" );
16397		var quantity = $this.attr( "data-size" );
16398
16399		$.ajax( {
16400			url         : website.getBaseUrl() + "/wishlist/delete",
16401			data        : { pk : id, size : $( "[data-target=size]" ).val(), quantity : quantity, from : from },
16402			type        : "POST",
16403			dataType    : "JSON",
16404			success     : function( data ) {
16405				$( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" );
16406				$( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" );
16407				website.showAlert( data.alert );
16408			}
16409		} );
16410
16411		return false;
16412	},
16413
16414	wishlistAddApi : function( id ) {
16415
16416		console.log( 'website.wishlistAddApi' );
16417
16418		var from = "wishlist";
16419		var quantity = 1;
16420
16421		$.ajax( {
16422			url         : website.getBaseUrl() + "/wishlist/add",
16423			data        : { pk : id, size : $( "[data-target=size]" ).val(), quantity : quantity, from : from },
16424			type        : "POST",
16425			dataType    : "JSON",
16426			success     : function( data ) {
16427				$( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" );
16428				$( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" );
16429				website.showAlert( data.alert );
16430			}
16431		} );
16432
16433		return false;
16434	},
16435
16436	wishlistDeleteApi : function( id ) {
16437
16438		console.log( 'website.wishlistDeleteApi' );
16439		var from = "wishlist";
16440		var quantity = 1;
16441
16442		$.ajax( {
16443			url         : website.getBaseUrl() + "/wishlist/delete",
16444			data        : { pk : id, quantity : quantity, from : from },
16445			type        : "POST",
16446			dataType    : "JSON",
16447			success     : function( data ) {
16448				$( "[data-target=wishlist-quantity]" ).text( "" + data.items_count + "" );
16449				$( "[data-target=wishlist-quantity]" ).text( "" + data.summation + "" );
16450				website.showAlert( data.alert );
16451			}
16452		} );
16453
16454		return false;
16455	},
16456
16457	wishlistCheckApi : async function( id ) {
16458
16459		return new Promise((resolve, reject) => {
16460			console.log( 'website.wishlistCheckApi' );
16461
16462			$.ajax( {
16463				url         : website.getBaseUrl() + "/wishlist/check",
16464				data        : { pk : id },
16465				type        : "POST",
16466				dataType    : "JSON",
16467				//async		: false,
16468				cache		: false,
16469				success     : function( response ) {
16470					resolve(response);
16471				},
16472				error: function( response ){
16473					reject(response);
16474				},
16475			} );
16476		})
16477	},
16478
16479	basketReload: function () {
16480
16481		$.ajax( {
16482			url         : website.getBaseUrl() + "/basket/ajaxRequest",
16483			data        : { ajax : { action : "reload" } },
16484			type        : "POST",
16485			dataType    : "html",
16486			success     : function( data ) { $( "div[data-target=reload]" ).html( data ); },
16487			complete    : function( data ) {  }
16488		} );
16489	},
16490
16491	showAlertModal: function ( data ) {
16492		$( "#eCms-alert" ).hide();
16493		$( "#eCms-alert" ).html(  );
16494
16495		if($("#basketModal").length> 0 ){
16496			$("#basketModal").modal('hide');
16497			$("#basketModal").remove();
16498			$(".modal-backdrop").remove();
16499		}
16500
16501		$( "body" ).append( data );
16502		// $( "#eCms-alert" ).fadeIn(  );
16503		$('#basketModal').modal('show');
16504
16505		$('#basketModal').on('shown.bs.modal', function () {
16506			website.setup( "#basketModal" );
16507		})
16508		// setTimeout( function() {
16509		// 	website.setup( "#eCms-alert" );
16510		// }, 50 );
16511	},
16512
16513	showAlert: function ( data ) {
16514		$( "#eCms-alert" ).css( { display : "none" } );
16515		$( "#eCms-alert" ).html( data );
16516		$( "#eCms-alert" ).fadeIn( "slow" );
16517
16518		$.fn.showAlertTimeout = setTimeout( function() {
16519			$( "#eCms-alert" ).fadeOut( "slow" );
16520		}, 3000 );
16521	},
16522
16523	toggleScrollbar : function( opt ) {
16524
16525		if( $("body").hasClass("compensate-for-scrollbar") ){
16526			$("body").removeClass("compensate-for-scrollbar");
16527			$("#fancybox-style-noscroll").remove();
16528		}
16529		else if ( opt=='hide' || ( document.body.scrollHeight > window.innerHeight ) ) {
16530			$("head").append(
16531				'<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:' +
16532				(window.innerWidth - document.documentElement.clientWidth) +
16533				"px;}</style>"
16534			);
16535
16536			$("body").addClass("compensate-for-scrollbar");
16537		}
16538	},
16539
16540	copyToClipboard : function( text ) {
16541//            console.log( "copyToClipboard:" + text );
16542
16543		if (window.clipboardData && window.clipboardData.setData) {
16544			// Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.
16545			return window.clipboardData.setData("Text", text);
16546
16547		}
16548		else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
16549			var textarea = document.createElement("textarea");
16550			textarea.textContent = text;
16551			textarea.style.position = "fixed";  // Prevent scrolling to bottom of page in Microsoft Edge.
16552			document.body.appendChild(textarea);
16553			textarea.select();
16554			try {
16555				return document.execCommand("copy");  // Security exception may be thrown by some browsers.
16556			}
16557			catch (ex) {
16558				console.warn("Copy to clipboard failed.", ex);
16559				return false;
16560			}
16561			finally {
16562				document.body.removeChild(textarea);
16563			}
16564		}
16565	}
16566};
16567
16568$.fn.testLoadFilter = function() {
16569	console.log('test load filter');
16570};
16571
16572function copyToClipboard(text) {
16573
16574	if (window.clipboardData && window.clipboardData.setData) {
16575		// Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.
16576		return window.clipboardData.setData("Text", text);
16577	}
16578	else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
16579		var textarea = document.createElement("textarea");
16580		textarea.textContent = text;
16581		textarea.style.position = "fixed";  // Prevent scrolling to bottom of page in Microsoft Edge.
16582		document.body.appendChild(textarea);
16583		textarea.select();
16584		try {
16585			return document.execCommand("copy");  // Security exception may be thrown by some browsers.
16586		}
16587		catch (ex) {
16588			console.warn("Copy to clipboard failed.", ex);
16589			return false;
16590		}
16591		finally {
16592			document.body.removeChild(textarea);
16593		}
16594	}
16595}
16596
16597$( document ).ready( website.init );
16598$( document ).load( website.setup );
16599$( window ).resize( website.resize );
16600window.initselectpicker = function(){website.initSelectpicker('.selectpicker')};
16601
16602$(document).ready(function(){
16603	$('.login-user a').mousemove(function(){
16604		$('.tooltip-login').addClass('active');
16605	});
16606
16607	$('.login-user a').mouseout(function(){
16608		$('.tooltip-login').removeClass('active');
16609	});
16610
16611	$('.wishlist a').mousemove(function(){
16612		$('.tooltip-wishlist').addClass('active');
16613	});
16614
16615	$('.wishlist a').mouseout(function(){
16616		$('.tooltip-wishlist').removeClass('active');
16617	});
16618});
16619//     Underscore.js 1.6.0
16620//     http://underscorejs.org
16621//     (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
16622//     Underscore may be freely distributed under the MIT license.
16623(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return n instanceof j?n:this instanceof j?void(this._wrapped=n):new j(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION="1.6.0";var A=j.each=j.forEach=function(n,t,e){if(null==n)return n;if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return;return n};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var O="Reduce of empty array with no initial value";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},j.find=j.detect=function(n,t,r){var e;return k(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var k=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:k(n,function(n){return n===t})}
16623,j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,j.property(t))},j.where=function(n,t){return j.filter(n,j.matches(t))},j.findWhere=function(n,t){return j.find(n,j.matches(t))},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);var e=-1/0,u=-1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;o>u&&(e=n,u=o)}),e},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);var e=1/0,u=1/0;return A(n,function(n,i,a){var o=t?t.call(r,n,i,a):n;u>o&&(e=n,u=o)}),e},j.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=j.random(r++),e[r-1]=e[t],e[t]=n}),e},j.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=j.values(n)),n[j.random(n.length-1)]):j.shuffle(n).slice(0,Math.max(0,t))};var E=function(n){return null==n?j.identity:j.isFunction(n)?n:j.property(n)};j.sortBy=function(n,t,r){return t=E(t),j.pluck(j.map(n,function(n,e,u){return{value:n,index:e,criteria:t.call(r,n,e,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=E(r),A(t,function(i,a){var o=r.call(e,i,a,t);n(u,o,i)}),u}};j.groupBy=F(function(n,t,r){j.has(n,t)?n[t].push(r):n[t]=[r]}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=E(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])<u?i=o+1:a=o}return i},j.toArray=function(n){return n?j.isArray(n)?o.call(n):n.length===+n.length?j.map(n,j.identity):j.values(n):[]},j.size=function(n){return null==n?0:n.length===+n.length?n.length:j.keys(n).length},j.first=j.head=j.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:0>t?[]:o.call(n,0,t)},j.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},j.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},j.rest=j.tail=j.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},j.compact=function(n){return j.filter(n,j.identity)};var M=function(n,t,r){return t&&j.every(n,j.isArray)?c.apply(r,n):(A(n,function(n){j.isArray(n)||j.isArguments(n)?t?a.apply(r,n):M(n,t,r):r.push(n)}),r)};j.flatten=function(n,t){return M(n,t,[])},j.without=function(n){return j.difference(n,o.call(arguments,1))},j.partition=function(n,t){var r=[],e=[];return A(n,function(n){(t(n)?r:e).push(n)}),[r,e]},j.uniq=j.unique=function(n,t,r,e){j.isFunction(t)&&(e=r,r=t,t=!1);var u=r?j.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:j.contains(a,r))||(a.push(r),i.push(n[e]))}),i},j.union=function(){return j.uniq(j.flatten(arguments,!0))},j.intersection=function(n){var t=o.call(arguments,1);return j.filter(j.uniq(n),function(n){return j.every(t,function(t){return j.contains(t,n)})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,"length").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,""+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;
16623if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===j&&(e[u]=arguments[r++]);for(;r<arguments.length;)e.push(arguments[r++]);return n.apply(this,e)}},j.bindAll=function(n){var t=o.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return A(t,function(t){n[t]=j.bind(n[t],n)}),n},j.memoize=function(n,t){var r={};return t||(t=j.identity),function(){var e=t.apply(this,arguments);return j.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},j.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},j.defer=function(n){return j.delay.apply(j,[n,1].concat(o.call(arguments,1)))},j.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var c=function(){o=r.leading===!1?0:j.now(),a=null,i=n.apply(e,u),e=u=null};return function(){var l=j.now();o||r.leading!==!1||(o=l);var f=t-(l-o);return e=this,u=arguments,0>=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u),e=u=null):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o,c=function(){var l=j.now()-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u),i=u=null))};return function(){i=this,u=arguments,a=j.now();var l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u),i=u=null),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return j.partial(t,n)},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=function(n){if(!j.isObject(n))return[];if(w)return w(n);var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==String(t);case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o)&&"constructor"in n&&"constructor"in t)return!1;r.push(n),e.push(t);var c=0,f=!0;if("[object Array]"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;
16623if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return"[object Array]"==l.call(n)},j.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){j["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,"callee"))}),"function"!=typeof/./&&(j.isFunction=function(n){return"function"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.constant=function(n){return function(){return n}},j.property=function(n){return function(t){return t[n]}},j.matches=function(n){return function(t){if(t===n)return!0;for(var r in n)if(n[r]!==t[r])return!1;return!0}},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},j.now=Date.now||function(){return(new Date).getTime()};var T={escape:{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"}};T.unescape=j.invert(T.escape);var I={escape:new RegExp("["+j.keys(T.escape).join("")+"]","g"),unescape:new RegExp("("+j.keys(T.unescape).join("|")+")","g")};j.each(["escape","unescape"],function(n){j[n]=function(t){return null==t?"":(""+t).replace(I[n],function(t){return T[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+"";return n?n+t:t},j.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n","	":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return"\\"+B[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=new Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}}),"function"==typeof define&&define.amd&&define("underscore",[],function(){return j})}).call(this);//Vue.config.devtools = true;
16624
16625var quick = new Vue({
16626    el: '#searchbox',
16627    data: {
16628        results: {
16629            query: [],
16630            brand: [],
16631            category: [],
16632            popular: [],
16633            item: []
16634        },
16635        loading: 1,
16636        query: '',
16637        itemCount: '',
16638        searchUrl: '',
16639        typeWriterTimeout: [],
16640    },
16641    computed: {
16642        countResults: function () {
16643            var count = 0;
16644            $.each( this.results, function (index, item) {
16645                //console.log( item.length );
16646                count+= item.length;
16647            });
16648
16649            return count;
16650        }
16651    },
16652    watch:{
16653    },
16654    mounted: function() {
16655        var _self = this;
16656
16657        $( this.$el ).find('[data-target="searchbox-output"]').addClass('d-none');
16658
16659        $( this.$el ).find('[data-target="searchbox-input"]').bind('keyup', _.debounce(function () {
16660                _self.query = $(this).val();
16661                _self.sendForm();
16662        }, 250, false) );
16663
16664        $( this.$el ).find('[data-action="searchbox-close"]').on( 'click', function (event) {
16665            $( _self.$el ).find('[data-target="searchbox-output"]').addClass('d-none');
16666            $( _self.$el ).find('[data-target="searchbox-backdrop"]').addClass('d-none');
16667            $( _self.$el ).find('[data-target="searchbox-close"]').addClass('d-none');
16668            $( _self.$el ).find('[data-target="searchbox-input"]').val('').trigger('keyup');
16669            $( _self.$el ).removeClass('active');
16670        });
16671
16672        $( this.$el ).find('[data-action="searchbox-close-layer"]').on( 'click', function (event) {
16673            $( _self.$el ).find('[data-target="searchbox"]').addClass('d-none');
16674            $( _self.$el ).find('[data-target="searchbox-output"]').addClass('d-none');
16675            $( _self.$el ).find('[data-target="searchbox-backdrop"]').addClass('d-none');
16676            $( _self.$el ).find('[data-target="searchbox-close"]').addClass('d-none');
16677            //$( _self.$el ).find('[data-target="searchbox-input"]').val('').trigger('keyup');
16678            $( _self.$el ).removeClass('active');
16679        });
16680
16681        $( this.$el ).find('[data-action="searchbox-clean"]').live( 'click', function (event) {
16682            $( _self.$el ).find('[data-target="searchbox-input"]').val('').focus().trigger('keyup');
16683            _self.placeholderStop();
16684        });
16685
16686        $( this.$el ).find('[data-target="searchbox-input"]').on('active', function ( ev ) { //'mouseenter'
16687            // $( _self.$el ).find('[data-target="searchbox-input"]').focus();
16688
16689            _self.query = $(this).val();
16690            if( _self.results.item.length<1 ) {
16691                _self.getData();
16692            }
16693            $( _self.$el ).find('[data-target="searchbox"]').removeClass('d-none');
16694            $( _self.$el ).find('[data-target="searchbox-output"]').removeClass('d-none');
16695            $( _self.$el ).find('[data-target="searchbox-backdrop"]').removeClass('d-none');
16696            $( _self.$el ).find('[data-target="searchbox-close"]').removeClass('d-none');
16697            $( _self.$el ).addClass('active');
16698        });
16699
16700        $( '[data-target="searchbox-input"], [data-action="searchbox-open"]' ).on('click', function ( ev ) { //'mouseenter'
16701            ev.preventDefault();
16702            $( _self.$el ).find('[data-target="searchbox-input"]').trigger('active');
16703            $( _self.$el ).find('[data-target="searchbox-input"]').focus();
16704            _self.placeholderStop();
16705        });
16706
16707        $( '[data-target="searchbox-input"]' ).on('blur', function ( ev ) {
16708            _self.placeholderStart();
16709        });
16710
16711        // $( '[data-target="searchbox-input"]' ).on('blur',
16712        //     _.debounce(function () {
16713        //         _self.placeholderStart();
16714        // }, 250, true));
16715
16716        this.$nextTick(function(){
16717            _self.query = $( this.$el ).find('[data-target="searchbox-input"]').val();
16718            _self.placeholderStart();
16719        });
16720
16721        // .on('mouseleave blur focusout', function () {
16722        //     $( _self.$el ).find('output').addClass('d-none');
16723        // });
16724        
16725    },
16726    methods: {
16727
16728        getUrl: function( value ) {
16729            return this.query.length>0 ? $( this.$el ).find('form').data('action') : $( this.$el ).find('form').data('top');
16730        },
16731
16732        getValue: function( value, glue ) {
16733            var res = [];
16734
16735            if( Array.isArray( value ) ){
16736                if( typeof value[0] === 'object' && value[0] !== null ){
16737                    value.forEach(function (obj, index) {
16738                        var val = obj.name || obj.title || obj.id;
16739                        if( !res.includes(val) ){
16740                            res.push( val );
16741                        }
16742                    });
16743                }
16744                else{
16745                    res = value;
16746                }
16747            }
16748            else{
16749                res.push( value );
16750            }
16751
16752            return res.join( glue || ' ');
16753        },
16754
16755        sendQuery: function( value ) {
16756            if( value.indexOf('/')>-1 ) {
16757                document.location.href = value;
16758            }
16759            else{
16760                value = value.replace('&amp;', '&');
16761                this.query = value;
16762                $( this.$el ).find('[data-target="searchbox-input"]').val(value);
16763                this.submitForm();
16764            }
16765            return this.requestUrl();
16766        },
16767
16768        queryUrl: function( value ) {
16769            //console.log( value, value.indexOf('/') );
16770            if( value.indexOf('/') > -1 ) {
16771                return value;
16772            }
16773            //console.log( this );
16774            return this.requestUrl( value );
16775        },
16776
16777        requestUrl: function( value ) {
16778            var url = $( this.$el ).find('form').attr('action');
16779            value = value.replace('&amp;', '%26');
16780            if( value ) {
16781                url+= '?q='+value;
16782            }
16783
16784            return url;
16785        },
16786
16787        dataUrl: function() {
16788            return this.query.length>0 ? $( this.$el ).find('form').data('action') : $( this.$el ).find('form').data('top');
16789        },
16790        
16791        sendForm: function() {
16792            var formSerialize = this.serializeForm();
16793            this.getData();
16794        },
16795
16796        serializeForm: function() {
16797            var form = $( this.$el ).find('form');
16798            return form.serialize();
16799        },
16800
16801        submitForm: function() {
16802            var form = $( this.$el ).find('form').eq(0);
16803            return form.submit();
16804        },
16805
16806        clearResults: function() {
16807            this.results = {
16808                query: [],
16809                brand: [],
16810                category: [],
16811                popular: [],
16812                item: []
16813            };
16814        },
16815        
16816        getData: function( repeat=0 ) {
16817
16818            //console.log( 'repeat', repeat );
16819            if( !repeat ){
16820                $( this.$el ).find('.searchbox-filter-gender').attr( 'disabled', false );
16821            }
16822            if( this.query.length>0 ){
16823                $( this.$el ).find('.searchbox-filter-gender').attr( 'disabled', true );
16824            }
16825
16826            var url = this.dataUrl();
16827            var params = this.serializeForm();
16828
16829            // this.loading = 1;
16830
16831            axios.get(url + '?' + params ).then(function(res) {
16832
16833                this.loading = 0;
16834
16835                if( !res.data ) { return; }
16836                var data = res.data;
16837
16838                this.itemCount = data.exact_match_hits_count;
16839                this.searchUrl = data.suggested_url;
16840
16841                this.clearResults();
16842
16843                data.hits.forEach(function (item, index) {
16844                    var type = item.type;
16845                    if( !(type in this.results) ){
16846                        this.results[type] = [];
16847                    }
16848                    this.results[type].push( item );
16849                }.bind(this));
16850
16851                // console.log( this.results.brand );
16852                // console.log( this.results.category );
16853                // console.log( this.results.item );
16854                // if( !this.results.item.length && !repeat && $( this.$el ).find('#f_item').length > 0 ){
16855                //     $( this.$el ).find('.searchbox-filter-gender').attr( 'disabled', true );
16856                //     this.getData( 1 );
16857                // }
16858
16859                this.$nextTick(function() {
16860                    // this.changePrice();
16861                    // this.copyFilters();
16862                });
16863            }.bind(this)).catch();
16864
16865        },
16866
16867        placeholderStart: function() {
16868
16869            var placeholders = $( this.$el ).find('[data-target="searchbox-input"]').data('placeholder');
16870            if( placeholders.length > 0 ) {
16871                this.typeWriter('[data-target="searchbox-input"]', placeholders);
16872                this.typeWriter('[data-target="searchbox-button-input"]', placeholders);
16873            }
16874        },
16875
16876        placeholderStop: function() {
16877
16878            var placeholders = $( this.$el ).find('[data-target="searchbox-input"]').data('placeholder');
16879            if( placeholders.length > 0 ) {
16880                $(this.$el).find('[data-target="searchbox-input"]').attr('placeholder', '');
16881                $(this.$el).find('[data-target="searchbox-button-input"]').attr('placeholder', '');
16882            }
16883        },
16884
16885        typeWriter: function (selector_target, text_list, i = 0, text_list_i=0, delay_ms=75) {
16886            var _self = this;
16887            var writerId = btoa(selector_target);
16888
16889            //console.log( selector_target, this.typeWriterTimeout[writerId] );
16890            clearTimeout( this.typeWriterTimeout[writerId] );
16891
16892            if( document.activeElement == document.querySelector(selector_target) ) return false; //HAS FOCUS
16893
16894            if (!i) {
16895                document.querySelector(selector_target).placeholder = '';
16896            }
16897            txt = text_list[text_list_i];
16898            if (i <= txt.length * 2 ) {
16899                if( i > txt.length ){
16900                    document.querySelector(selector_target).placeholder = document.querySelector(selector_target).placeholder.slice(0, -1);
16901                }
16902                else{
16903                    document.querySelector(selector_target).placeholder += txt.charAt(i);
16904                }
16905                i++;
16906                this.typeWriterTimeout[writerId] = setTimeout(_self.typeWriter, ( i==txt.length) ? 1500 : delay_ms, selector_target, text_list, i, text_list_i);
16907            }
16908            else {
16909                text_list_i++;
16910                if (typeof text_list[text_list_i] === 'undefined')  {
16911                    this.typeWriterTimeout[writerId] = setTimeout(_self.typeWriter, (delay_ms), selector_target, text_list);
16912                }
16913                else {
16914                    i = 0;
16915                    this.typeWriterTimeout[writerId] = setTimeout(_self.typeWriter, (delay_ms), selector_target, text_list, i, text_list_i);
16916                }
16917            }
16918        }
16919    }
16920});

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.