PageSourceSearch

https://www.kompost.de/typo3temp/assets/compressed/merged-401a0b8d…155bb93728440ccc8fa261a233d73.js?1780297048

js kompost.de collected 2026-09-24 23:32:15 UTC 150,801 bytes, 2,006 lines download raw bytes

1
2var i=Object.defineProperty;var a=(r,e,t)=>e in r?i(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>(a(r,typeof e!="symbol"?e+"":e,t),t);class o{constructor(e){n(this,"wrapper");n(this,"uri");n(this,"type");n(this,"clickHandler",()=>{if(!this.uri){console.error("Error: data-mcuri attribute not found in parent wrapper.");return}if(!this.type){console.warn('Warning: "type" parameter not found in data-mcuri attribute.');return}this.reloadItem()});if(this.wrapper=e.closest(".mediaconsent_wrapper"),this.wrapper)this.uri=this.wrapper.dataset.mcuri,this.type=this.wrapper.dataset.mctype;else throw new Error('Parent wrapper with class "mediaconsent-wrapper" not found.');this.wrapper.addEventListener("click",this.clickHandler.bind(this))}reloadItem(){this.uri!==null&&fetch(this.uri).then(e=>{if(!e.ok)throw new Error("MediaConsent: Failed to load consent content");return e.text()}).then(e=>{this.wrapper!==null?this.wrapper.innerHTML=e:console.error("Error: Wrapper element is null.")}).catch(e=>{console.error("There is a problem with the fetch operation: ",e)})}}document.addEventListener("DOMContentLoaded",()=>{document.querySelectorAll(".mcb").forEach(e=>{new o(e)})});
3//# sourceMappingURL=MediaConsent.js.map
4
5var TYPO3 = TYPO3 || {};
6TYPO3.brochureshop = {
7	indexAction: {
8		initialize: function() {
9			TYPO3.brochureshop.attachToggleEvents();
10			TYPO3.brochureshop.attachShowProgressIndicatorEvents();
11			TYPO3.brochureshop.attachSubmitToCartImage();
12		}
13	},
14	indexWithoutPaginationAction: {
15		initialize: function() {
16			TYPO3.brochureshop.attachToggleEvents();
17			TYPO3.brochureshop.attachShowProgressIndicatorEvents();
18			TYPO3.brochureshop.attachSubmitToCartImage();
19		}
20	},
21	indexAction: {
22		initialize: function() {
23			TYPO3.brochureshop.attachToggleEvents();
24			TYPO3.brochureshop.attachShowProgressIndicatorEvents();
25			TYPO3.brochureshop.attachSubmitToCartImage();
26		}
27	},
28	showBigCartAction: {
29		initialize: function() {
30			TYPO3.brochureshop.attachShowProgressIndicatorEvents();
31		}
32	},
33	enterAddressAction: {
34		initialize: function() {
35			TYPO3.brochureshop.hideOrShowSeparateShippingAddress();
36			TYPO3.brochureshop.attachSeparateShippingAddressEvent();
37			TYPO3.brochureshop.hideOrShowSeparateInvoiceType();
38			TYPO3.brochureshop.attachShowProgressIndicatorEvents();
39		}
40	},
41	confirmOrderAction: {
42		initialize: function() {
43			TYPO3.brochureshop.attachShowProgressIndicatorEvents();
44		}
45	},
46	attachToggleEvents: function() {
47		$(".brochureshop-toggler").click(function() {
48			$('#' + $(this).attr('target')).toggle('fast');
49			$('span', this).toggleClass('brouchureshop-sprite-accordionClosed brouchureshop-sprite-accordionOpened');
50		});
51	},
52	attachSeparateShippingAddressEvent: function() {
53		$("#differentShippingAddress").click(TYPO3.brochureshop.hideOrShowSeparateShippingAddress);
54	},
55	hideOrShowSeparateShippingAddress: function() {
56		if ($("#differentShippingAddress").is(":checked")) {
57			($("#brochureshop-shipping-address")).show();
58		} else {
59			($("#brochureshop-shipping-address")).hide();
60		}
61	},
62	hideOrShowSeparateInvoiceType: function() {
63		if($("input[name='tx_brochureshop_shoppingcartorderform[order][invoiceType]']").val() === '1') {
64			$("#xrechnung").show();
65		}
66		$("input[name='tx_brochureshop_shoppingcartorderform[order][invoiceType]']").change(function(){
67			if ($(this).val() === '1') {
68				$("#xrechnung").show();
69			};
70			if ($(this).val() === '2') {
71				$("#xrechnung").hide();
72			}
73		});
74	},	
75	attachShowProgressIndicatorEvents: function() {
76		$(".brochureshop-action").click(TYPO3.brochureshop.showProgressIndicator);
77	},
78	showProgressIndicator: function() {
79		$("#brochureshop-spinner").show();
80		setTimeout(function() {
81			$("input").attr('disabled', true);
82		}, 100);
83		return true;
84	},
85	attachSubmitToCartImage: function() {
86		$('.tx-brochureshop form').each(function(){
87			var form = $(this);
88			var submit = $(this).find('input[type="submit"]');
89			var cartImage = $(this).find('img.shoppingcart');
90			if (submit.length > 0 && cartImage.length > 0) {
91				$(cartImage).click(function(){
92					form.submit();
93				});
94				submit.addClass('hide');
95			}			
96		});
97	}
98};
99/**
100 * bxSlider v4.2.1d
vendor: 16,654 bytes, lines 100-105
100
101 * Copyright 2013-2017 Steven Wanderski
102 * Written while drinking Belgian ales and listening to jazz
103 * Licensed under MIT (http://opensource.org/licenses/MIT)
104 */
105!function(t){var e={mode:"horizontal",slideSelector:"",infiniteLoop:!0,hideControlOnEnd:!1,speed:500,easing:null,slideMargin:0,startSlide:0,randomStart:!1,captions:!1,ticker:!1,tickerHover:!1,adaptiveHeight:!1,adaptiveHeightSpeed:500,video:!1,useCSS:!0,preloadImages:"visible",responsive:!0,slideZIndex:50,wrapperClass:"bx-wrapper",touchEnabled:!0,swipeThreshold:50,oneToOneTouch:!0,preventDefaultSwipeX:!0,preventDefaultSwipeY:!1,ariaLive:!0,ariaHidden:!0,keyboardEnabled:!1,pager:!0,pagerType:"full",pagerShortSeparator:" / ",pagerSelector:null,buildPager:null,pagerCustom:null,controls:!0,nextText:"Next",prevText:"Prev",nextSelector:null,prevSelector:null,autoControls:!1,startText:"Start",stopText:"Stop",autoControlsCombine:!1,autoControlsSelector:null,auto:!1,pause:4e3,autoStart:!0,autoDirection:"next",stopAutoOnClick:!1,autoHover:!1,autoDelay:0,autoSlideForOnePage:!1,minSlides:1,maxSlides:1,moveSlides:0,slideWidth:0,shrinkItems:!1,onSliderLoad:function(){return!0},onSlideBefore:function(){return!0},onSlideAfter:function(){return!0},onSlideNext:function(){return!0},onSlidePrev:function(){return!0},onSliderResize:function(){return!0},onAutoChange:function(){return!0}};t.fn.bxSlider=function(n){if(0===this.length)return this;if(this.length>1)return this.each(function(){t(this).bxSlider(n)}),this;var s={},o=this,r=t(window).width(),a=t(window).height();if(!t(o).data("bxSlider")){var l=function(){t(o).data("bxSlider")||(s.settings=t.extend({},e,n),s.settings.slideWidth=parseInt(s.settings.slideWidth),s.children=o.children(s.settings.slideSelector),s.children.length<s.settings.minSlides&&(s.settings.minSlides=s.children.length),s.children.length<s.settings.maxSlides&&(s.settings.maxSlides=s.children.length),s.settings.randomStart&&(s.settings.startSlide=Math.floor(Math.random()*s.children.length)),s.active={index:s.settings.startSlide},s.carousel=s.settings.minSlides>1||s.settings.maxSlides>1,s.carousel&&(s.settings.preloadImages="all"),s.minThreshold=s.settings.minSlides*s.settings.slideWidth+(s.settings.minSlides-1)*s.settings.slideMargin,s.maxThreshold=s.settings.maxSlides*s.settings.slideWidth+(s.settings.maxSlides-1)*s.settings.slideMargin,s.working=!1,s.controls={},s.interval=null,s.animProp="vertical"===s.settings.mode?"top":"left",s.usingCSS=s.settings.useCSS&&"fade"!==s.settings.mode&&function(){for(var t=document.createElement("div"),e=["WebkitPerspective","MozPerspective","OPerspective","msPerspective"],i=0;i<e.length;i++)if(void 0!==t.style[e[i]])return s.cssPrefix=e[i].replace("Perspective","").toLowerCase(),s.animProp="-"+s.cssPrefix+"-transform",!0;return!1}(),"vertical"===s.settings.mode&&(s.settings.maxSlides=s.settings.minSlides),o.data("origStyle",o.attr("style")),o.children(s.settings.slideSelector).each(function(){t(this).data("origStyle",t(this).attr("style"))}),d())},d=function(){var e=s.children.eq(s.settings.startSlide);o.wrap('<div class="'+s.settings.wrapperClass+'"><div class="bx-viewport"></div></div>'),s.viewport=o.parent(),s.settings.ariaLive&&!s.settings.ticker&&s.viewport.attr("aria-live","polite"),s.loader=t('<div class="bx-loading" />'),s.viewport.prepend(s.loader),o.css({width:"horizontal"===s.settings.mode?1e3*s.children.length+215+"%":"auto",position:"relative"}),s.usingCSS&&s.settings.easing?o.css("-"+s.cssPrefix+"-transition-timing-function",s.settings.easing):s.settings.easing||(s.settings.easing="swing"),s.viewport.css({width:"100%",overflow:"hidden",position:"relative"}),s.viewport.parent().css({maxWidth:u()}),s.children.css({float:"horizontal"===s.settings.mode?"left":"none",listStyle:"none",position:"relative"}),s.children.css("width",h()),"horizontal"===s.settings.mode&&s.settings.slideMargin>0&&s.children.css("marginRight",s.settings.slideMargin),"vertical"===s.settings.mode&&s.settings.slideMargin>0&&s.children.css("marginBottom",s.settings.slideMargin),"fade"===s.settings.mode&&(s.children.css({position:"absolute",zIndex:0,display:"none"}),s.children.eq(s.settings.startSlide).css({zIndex:s.settings.slideZIndex,display:"block"})),s.controls.el=t('<div class="bx-controls" />'),s.settings.captions&&k(),s.active.last=s.settings.startSlide===f()-1,s.settings.video&&o.fitVids(),"none"===s.settings.preloadImages?e=null:("all"===s.settings.preloadImages||s.settings.ticker)&&(e=s.children),s.settings.ticker?s.settings.pager=!1:(s.settings.controls&&C(),s.settings.auto&&s.settings.autoControls&&T(),s.settings.pager&&b(),(s.settings.controls||s.settings.autoControls||s.settings.pager)&&s.viewport.after(s.controls.el)),null===e?g():c(e,g)},c=function(e,i){var n=e.find('img:not([src=""]), iframe').length,s=0;if(0===n)return void i();e.find('img:not([src=""]), iframe').each(function(){t(this).one("load error",function(){++s===n&&i()}).each(function(){(this.complete||""==this.src)&&t(this).trigger("load")})})},g=function(){if(s.settings.infiniteLoop&&"fade"!==s.settings.mode&&!s.settings.ticker){var e="vertical"===s.settings.mode?s.settings.minSlides:s.settings.maxSlides,i=s.children.slice(0,e).clone(!0).addClass("bx-clone"),n=s.children.slice(-e).clone(!0).addClass("bx-clone");s.settings.ariaHidden&&(i.attr("aria-hidden",!0),n.attr("aria-hidden",!0)),o.append(i).prepend(n)}s.loader.remove(),m(),"vertical"===s.settings.mode&&(s.settings.adaptiveHeight=!0),s.viewport.height(p()),o.redrawSlider(),s.settings.onSliderLoad.call(o,s.active.index),s.initialized=!0,s.settings.responsive&&t(window).on("resize",U),s.settings.auto&&s.settings.autoStart&&(f()>1||s.settings.autoSlideForOnePage)&&L(),s.settings.ticker&&O(),s.settings.pager&&z(s.settings.startSlide),s.settings.controls&&q(),s.settings.touchEnabled&&!s.settings.ticker&&X(),s.settings.keyboardEnabled&&!s.settings.ticker&&t(document).keydown(B)},p=function(){var e=0,n=t();if("vertical"===s.settings.mode||s.settings.adaptiveHeight)if(s.carousel){var o=1===s.settings.moveSlides?s.active.index:s.active.index*x();for(n=s.children.eq(o),i=1;i<=s.settings.maxSlides-1;i++)n=o+i>=s.children.length?n.add(s.children.eq(i-1)):n.add(s.children.eq(o+i))}else n=s.children.eq(s.active.index);else n=s.children;return"vertical"===s.settings.mode?(n.each(function(i){e+=t(this).outerHeight()}),s.settings.slideMargin>0&&(e+=s.settings.slideMargin*(s.settings.minSlides-1))):e=Math.max.apply(Math,n.map(function(){return t(this).outerHeight(!1)}).get()),"border-box"===s.viewport.css("box-sizing")?e+=parseFloat(s.viewport.css("padding-top"))+parseFloat(s.viewport.css("padding-bottom"))+parseFloat(s.viewport.css("border-top-width"))+parseFloat(s.viewport.css("border-bottom-width")):"padding-box"===s.viewport.css("box-sizing")&&(e+=parseFloat(s.viewport.css("padding-top"))+parseFloat(s.viewport.css("padding-bottom"))),e},u=function(){var t="100%";return s.settings.slideWidth>0&&(t="horizontal"===s.settings.mode?s.settings.maxSlides*s.settings.slideWidth+(s.settings.maxSlides-1)*s.settings.slideMargin:s.settings.slideWidth),t},h=function(){var t=s.settings.slideWidth,e=s.viewport.width();if(0===s.settings.slideWidth||s.settings.slideWidth>e&&!s.carousel||"vertical"===s.settings.mode)t=e;else if(s.settings.maxSlides>1&&"horizontal"===s.settings.mode){if(e>s.maxThreshold)return t;e<s.minThreshold?t=(e-s.settings.slideMargin*(s.settings.minSlides-1))/s.settings.minSlides:s.settings.shrinkItems&&(t=Math.floor((e+s.settings.slideMargin)/Math.ceil((e+s.settings.slideMargin)/(t+s.settings.slideMargin))-s.settings.slideMargin))}return t},v=function(){var t=1,e=null;return"horizontal"===s.settings.mode&&s.settings.slideWidth>0?s.viewport.width()<s.minThreshold?t=s.settings.minSlides:s.viewport.width()>s.maxThreshold?t=s.settings.maxSlides:(e=s.children.first().width()+s.settings.slideMargin,t=Math.floor((s.viewport.width()+s.settings.slideMargin)/e)||1):"vertical"===s.settings.mode&&(t=s.settings.minSlides),t},f=function(){var t=0,e=0,i=0;if(s.settings.moveSlides>0){if(!s.settings.infiniteLoop){for(;e<s.children.length;)++t,e=i+v(),i+=s.settings.moveSlides<=v()?s.settings.moveSlides:v();return i}t=Math.ceil(s.children.length/x())}else t=Math.ceil(s.children.length/v());return t},x=function(){return s.settings.moveSlides>0&&s.settings.moveSlides<=v()?s.settings.moveSlides:v()},m=function(){var t,e,i;s.children.length>s.settings.maxSlides&&s.active.last&&!s.settings.infiniteLoop?"horizontal"===s.settings.mode?(e=s.children.last(),t=e.position(),S(-(t.left-(s.viewport.width()-e.outerWidth())),"reset",0)):"vertical"===s.settings.mode&&(i=s.children.length-s.settings.minSlides,t=s.children.eq(i).position(),S(-t.top,"reset",0)):(t=s.children.eq(s.active.index*x()).position(),s.active.index===f()-1&&(s.active.last=!0),void 0!==t&&("horizontal"===s.settings.mode?S(-t.left,"reset",0):"vertical"===s.settings.mode&&S(-t.top,"reset",0)))},S=function(e,i,n,r){var a,l;s.usingCSS?(l="vertical"===s.settings.mode?"translate3d(0, "+e+"px, 0)":"translate3d("+e+"px, 0, 0)",o.css("-"+s.cssPrefix+"-transition-duration",n/1e3+"s"),"slide"===i?(o.css(s.animProp,l),0!==n?o.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(e){t(e.target).is(o)&&(o.off("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),A())}):A()):"reset"===i?o.css(s.animProp,l):"ticker"===i&&(o.css("-"+s.cssPrefix+"-transition-timing-function","linear"),o.css(s.animProp,l),0!==n?o.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(e){t(e.target).is(o)&&(o.off("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd"),S(r.resetValue,"reset",0),F())}):(S(r.resetValue,"reset",0),F()))):(a={},a[s.animProp]=e,"slide"===i?o.animate(a,n,s.settings.easing,function(){A()}):"reset"===i?o.css(s.animProp,e):"ticker"===i&&o.animate(a,n,"linear",function(){S(r.resetValue,"reset",0),F()}))},w=function(){for(var e="",i="",n=f(),o=0;o<n;o++)i="",s.settings.buildPager&&t.isFunction(s.settings.buildPager)||s.settings.pagerCustom?(i=s.settings.buildPager(o),s.pagerEl.addClass("bx-custom-pager")):(i=o+1,s.pagerEl.addClass("bx-default-pager")),e+='<div class="bx-pager-item"><a href="" data-slide-index="'+o+'" class="bx-pager-link">'+i+"</a></div>";s.pagerEl.html(e)},b=function(){s.settings.pagerCustom?s.pagerEl=t(s.settings.pagerCustom):(s.pagerEl=t('<div class="bx-pager" />'),s.settings.pagerSelector?t(s.settings.pagerSelector).html(s.pagerEl):s.controls.el.addClass("bx-has-pager").append(s.pagerEl),w()),s.pagerEl.on("click touchend","a",I)},C=function(){s.controls.next=t('<a class="bx-next" href="">'+s.settings.nextText+"</a>"),s.controls.prev=t('<a class="bx-prev" href="">'+s.settings.prevText+"</a>"),s.controls.next.on("click touchend",P),s.controls.prev.on("click touchend",E),s.settings.nextSelector&&t(s.settings.nextSelector).append(s.controls.next),s.settings.prevSelector&&t(s.settings.prevSelector).append(s.controls.prev),s.settings.nextSelector||s.settings.prevSelector||(s.controls.directionEl=t('<div class="bx-controls-direction" />'),s.controls.directionEl.append(s.controls.prev).append(s.controls.next),s.controls.el.addClass("bx-has-controls-direction").append(s.controls.directionEl))},T=function(){s.controls.start=t('<div class="bx-controls-auto-item"><a class="bx-start" href="">'+s.settings.startText+"</a></div>"),s.controls.stop=t('<div class="bx-controls-auto-item"><a class="bx-stop" href="">'+s.settings.stopText+"</a></div>"),s.controls.autoEl=t('<div class="bx-controls-auto" />'),s.controls.autoEl.on("click",".bx-start",M),s.controls.autoEl.on("click",".bx-stop",y),s.settings.autoControlsCombine?s.controls.autoEl.append(s.controls.start):s.controls.autoEl.append(s.controls.start).append(s.controls.stop),s.settings.autoControlsSelector?t(s.settings.autoControlsSelector).html(s.controls.autoEl):s.controls.el.addClass("bx-has-controls-auto").append(s.controls.autoEl),D(s.settings.autoStart?"stop":"start")},k=function(){s.children.each(function(e){var i=t(this).find("img:first").attr("title");void 0!==i&&(""+i).length&&t(this).append('<div class="bx-caption"><span>'+i+"</span></div>")})},P=function(t){t.preventDefault(),s.controls.el.hasClass("disabled")||(s.settings.auto&&s.settings.stopAutoOnClick&&o.stopAuto(),o.goToNextSlide())},E=function(t){t.preventDefault(),s.controls.el.hasClass("disabled")||(s.settings.auto&&s.settings.stopAutoOnClick&&o.stopAuto(),o.goToPrevSlide())},M=function(t){o.startAuto(),t.preventDefault()},y=function(t){o.stopAuto(),t.preventDefault()},I=function(e){var i,n;e.preventDefault(),s.controls.el.hasClass("disabled")||(s.settings.auto&&s.settings.stopAutoOnClick&&o.stopAuto(),i=t(e.currentTarget),void 0!==i.attr("data-slide-index")&&(n=parseInt(i.attr("data-slide-index")))!==s.active.index&&o.goToSlide(n))},z=function(e){var i=s.children.length;if("short"===s.settings.pagerType)return s.settings.maxSlides>1&&(i=Math.ceil(s.children.length/s.settings.maxSlides)),void s.pagerEl.html(e+1+s.settings.pagerShortSeparator+i);s.pagerEl.find("a").removeClass("active"),s.pagerEl.each(function(i,n){t(n).find("a").eq(e).addClass("active")})},A=function(){if(s.settings.infiniteLoop){var t="";0===s.active.index?t=s.children.eq(0).position():s.active.index===f()-1&&s.carousel?t=s.children.eq((f()-1)*x()).position():s.active.index===s.children.length-1&&(t=s.children.eq(s.children.length-1).position()),t&&("horizontal"===s.settings.mode?S(-t.left,"reset",0):"vertical"===s.settings.mode&&S(-t.top,"reset",0))}s.working=!1,s.settings.onSlideAfter.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index)},D=function(t){s.settings.autoControlsCombine?s.controls.autoEl.html(s.controls[t]):(s.controls.autoEl.find("a").removeClass("active"),s.controls.autoEl.find("a:not(.bx-"+t+")").addClass("active"))},q=function(){1===f()?(s.controls.prev.addClass("disabled"),s.controls.next.addClass("disabled")):!s.settings.infiniteLoop&&s.settings.hideControlOnEnd&&(0===s.active.index?(s.controls.prev.addClass("disabled"),s.controls.next.removeClass("disabled")):s.active.index===f()-1?(s.controls.next.addClass("disabled"),s.controls.prev.removeClass("disabled")):(s.controls.prev.removeClass("disabled"),s.controls.next.removeClass("disabled")))},H=function(){o.startAuto()},W=function(){o.stopAuto()},L=function(){s.settings.autoDelay>0?setTimeout(o.startAuto,s.settings.autoDelay):(o.startAuto(),t(window).focus(H).blur(W)),s.settings.autoHover&&o.hover(function(){s.interval&&(o.stopAuto(!0),s.autoPaused=!0)},function(){s.autoPaused&&(o.startAuto(!0),s.autoPaused=null)})},O=function(){var e,i,n,r,a,l,d,c,g=0;"next"===s.settings.autoDirection?o.append(s.children.clone().addClass("bx-clone")):(o.prepend(s.children.clone().addClass("bx-clone")),e=s.children.first().position(),g="horizontal"===s.settings.mode?-e.left:-e.top),S(g,"reset",0),s.settings.pager=!1,s.settings.controls=!1,s.settings.autoControls=!1,s.settings.tickerHover&&(s.usingCSS?(r="horizontal"===s.settings.mode?4:5,s.viewport.hover(function(){i=o.css("-"+s.cssPrefix+"-transform"),n=parseFloat(i.split(",")[r]),S(n,"reset",0)},function(){c=0,s.children.each(function(e){c+="horizontal"===s.settings.mode?t(this).outerWidth(!0):t(this).outerHeight(!0)}),a=s.settings.speed/c,l="horizontal"===s.settings.mode?"left":"top",d=a*(c-Math.abs(parseInt(n))),F(d)})):s.viewport.hover(function(){o.stop()},function(){c=0,s.children.each(function(e){c+="horizontal"===s.settings.mode?t(this).outerWidth(!0):t(this).outerHeight(!0)}),a=s.settings.speed/c,l="horizontal"===s.settings.mode?"left":"top",d=a*(c-Math.abs(parseInt(o.css(l)))),F(d)})),F()},F=function(t){var e,i,n,r=t||s.settings.speed,a={left:0,top:0},l={left:0,top:0};"next"===s.settings.autoDirection?a=o.find(".bx-clone").first().position():l=s.children.first().position(),e="horizontal"===s.settings.mode?-a.left:-a.top,i="horizontal"===s.settings.mode?-l.left:-l.top,n={resetValue:i},S(e,"ticker",r,n)},N=function(e){var i=t(window),n={top:i.scrollTop(),left:i.scrollLeft()},s=e.offset();return n.right=n.left+i.width(),n.bottom=n.top+i.height(),s.right=s.left+e.outerWidth(),s.bottom=s.top+e.outerHeight(),!(n.right<s.left||n.left>s.right||n.bottom<s.top||n.top>s.bottom)},B=function(t){var e=document.activeElement.tagName.toLowerCase();if(null==new RegExp(e,["i"]).exec("input|textarea")&&N(o)){if(39===t.keyCode)return P(t),!1;if(37===t.keyCode)return E(t),!1}},X=function(){s.touch={start:{x:0,y:0},end:{x:0,y:0}},s.viewport.on("touchstart MSPointerDown pointerdown",Y),s.viewport.on("click",".bxslider a",function(t){s.viewport.hasClass("click-disabled")&&(t.preventDefault(),s.viewport.removeClass("click-disabled"))})},Y=function(
vendor: 7,576 bytes, line 105
105t){if("touchstart"===t.type||0===t.button)if(t.preventDefault(),s.controls.el.addClass("disabled"),s.working)s.controls.el.removeClass("disabled");else{s.touch.originalPos=o.position();var e=t.originalEvent,i=void 0!==e.changedTouches?e.changedTouches:[e],n="function"==typeof PointerEvent;if(n&&void 0===e.pointerId)return;s.touch.start.x=i[0].pageX,s.touch.start.y=i[0].pageY,s.viewport.get(0).setPointerCapture&&(s.pointerId=e.pointerId,s.viewport.get(0).setPointerCapture(s.pointerId)),s.originalClickTarget=e.originalTarget||e.target,s.originalClickButton=e.button,s.originalClickButtons=e.buttons,s.originalEventType=e.type,s.hasMove=!1,s.viewport.on("touchmove MSPointerMove pointermove",R),s.viewport.on("touchend MSPointerUp pointerup",Z),s.viewport.on("MSPointerCancel pointercancel",V)}},V=function(t){t.preventDefault(),S(s.touch.originalPos.left,"reset",0),s.controls.el.removeClass("disabled"),s.viewport.off("MSPointerCancel pointercancel",V),s.viewport.off("touchmove MSPointerMove pointermove",R),s.viewport.off("touchend MSPointerUp pointerup",Z),s.viewport.get(0).releasePointerCapture&&s.viewport.get(0).releasePointerCapture(s.pointerId)},R=function(t){var e=t.originalEvent,i=void 0!==e.changedTouches?e.changedTouches:[e],n=Math.abs(i[0].pageX-s.touch.start.x),o=Math.abs(i[0].pageY-s.touch.start.y),r=0,a=0;s.hasMove=!0,3*n>o&&s.settings.preventDefaultSwipeX?t.preventDefault():3*o>n&&s.settings.preventDefaultSwipeY&&t.preventDefault(),"touchmove"!==t.type&&t.preventDefault(),"fade"!==s.settings.mode&&s.settings.oneToOneTouch&&("horizontal"===s.settings.mode?(a=i[0].pageX-s.touch.start.x,r=s.touch.originalPos.left+a):(a=i[0].pageY-s.touch.start.y,r=s.touch.originalPos.top+a),S(r,"reset",0))},Z=function(e){e.preventDefault(),s.viewport.off("touchmove MSPointerMove pointermove",R),s.controls.el.removeClass("disabled");var i=e.originalEvent,n=void 0!==i.changedTouches?i.changedTouches:[i],r=0,a=0;s.touch.end.x=n[0].pageX,s.touch.end.y=n[0].pageY,"fade"===s.settings.mode?(a=Math.abs(s.touch.start.x-s.touch.end.x))>=s.settings.swipeThreshold&&(s.touch.start.x>s.touch.end.x?o.goToNextSlide():o.goToPrevSlide(),o.stopAuto()):("horizontal"===s.settings.mode?(a=s.touch.end.x-s.touch.start.x,r=s.touch.originalPos.left):(a=s.touch.end.y-s.touch.start.y,r=s.touch.originalPos.top),!s.settings.infiniteLoop&&(0===s.active.index&&a>0||s.active.last&&a<0)?S(r,"reset",200):Math.abs(a)>=s.settings.swipeThreshold?(a<0?o.goToNextSlide():o.goToPrevSlide(),o.stopAuto()):S(r,"reset",200)),s.viewport.off("touchend MSPointerUp pointerup",Z),s.viewport.get(0).releasePointerCapture&&s.viewport.get(0).releasePointerCapture(s.pointerId),!1!==s.hasMove||0!==s.originalClickButton&&"touchstart"!==s.originalEventType||t(s.originalClickTarget).trigger({type:"click",button:s.originalClickButton,buttons:s.originalClickButtons})},U=function(e){if(s.initialized)if(s.working)window.setTimeout(U,10);else{var i=t(window).width(),n=t(window).height();r===i&&a===n||(r=i,a=n,o.redrawSlider(),s.settings.onSliderResize.call(o,s.active.index))}},j=function(t){var e=v();s.settings.ariaHidden&&!s.settings.ticker&&(s.children.attr("aria-hidden","true"),s.children.slice(t,t+e).attr("aria-hidden","false"))},Q=function(t){return t<0?s.settings.infiniteLoop?f()-1:s.active.index:t>=f()?s.settings.infiniteLoop?0:s.active.index:t};return o.goToSlide=function(e,i){var n,r,a,l,d=!0,c=0,g={left:0,top:0},u=null;if(s.oldIndex=s.active.index,s.active.index=Q(e),!s.working&&s.active.index!==s.oldIndex){if(s.working=!0,void 0!==(d=s.settings.onSlideBefore.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index))&&!d)return s.active.index=s.oldIndex,void(s.working=!1);"next"===i?s.settings.onSlideNext.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index)||(d=!1):"prev"===i&&(s.settings.onSlidePrev.call(o,s.children.eq(s.active.index),s.oldIndex,s.active.index)||(d=!1)),s.active.last=s.active.index>=f()-1,(s.settings.pager||s.settings.pagerCustom)&&z(s.active.index),s.settings.controls&&q(),"fade"===s.settings.mode?(s.settings.adaptiveHeight&&s.viewport.height()!==p()&&s.viewport.animate({height:p()},s.settings.adaptiveHeightSpeed),s.children.filter(":visible").fadeOut(s.settings.speed).css({zIndex:0}),s.children.eq(s.active.index).css("zIndex",s.settings.slideZIndex+1).fadeIn(s.settings.speed,function(){t(this).css("zIndex",s.settings.slideZIndex),A()})):(s.settings.adaptiveHeight&&s.viewport.height()!==p()&&s.viewport.animate({height:p()},s.settings.adaptiveHeightSpeed),!s.settings.infiniteLoop&&s.carousel&&s.active.last?"horizontal"===s.settings.mode?(u=s.children.eq(s.children.length-1),g=u.position(),c=s.viewport.width()-u.outerWidth()):(n=s.children.length-s.settings.minSlides,g=s.children.eq(n).position()):s.carousel&&s.active.last&&"prev"===i?(r=1===s.settings.moveSlides?s.settings.maxSlides-x():(f()-1)*x()-(s.children.length-s.settings.maxSlides),u=o.children(".bx-clone").eq(r),g=u.position()):"next"===i&&0===s.active.index?(g=o.find("> .bx-clone").eq(s.settings.maxSlides).position(),s.active.last=!1):e>=0&&(l=e*parseInt(x()),g=s.children.eq(l).position()),void 0!==g&&(a="horizontal"===s.settings.mode?-(g.left-c):-g.top,S(a,"slide",s.settings.speed)),s.working=!1),s.settings.ariaHidden&&j(s.active.index*x())}},o.goToNextSlide=function(){if((s.settings.infiniteLoop||!s.active.last)&&!0!==s.working){var t=parseInt(s.active.index)+1;o.goToSlide(t,"next")}},o.goToPrevSlide=function(){if((s.settings.infiniteLoop||0!==s.active.index)&&!0!==s.working){var t=parseInt(s.active.index)-1;o.goToSlide(t,"prev")}},o.startAuto=function(t){s.interval||(s.interval=setInterval(function(){"next"===s.settings.autoDirection?o.goToNextSlide():o.goToPrevSlide()},s.settings.pause),s.settings.onAutoChange.call(o,!0),s.settings.autoControls&&!0!==t&&D("stop"))},o.stopAuto=function(t){s.autoPaused&&(s.autoPaused=!1),s.interval&&(clearInterval(s.interval),s.interval=null,s.settings.onAutoChange.call(o,!1),s.settings.autoControls&&!0!==t&&D("start"))},o.getCurrentSlide=function(){return s.active.index},o.getCurrentSlideElement=function(){return s.children.eq(s.active.index)},o.getSlideElement=function(t){return s.children.eq(t)},o.getSlideCount=function(){return s.children.length},o.isWorking=function(){return s.working},o.redrawSlider=function(){s.children.add(o.find(".bx-clone")).outerWidth(h()),s.viewport.css("height",p()),s.settings.ticker||m(),s.active.last&&(s.active.index=f()-1),s.active.index>=f()&&(s.active.last=!0),s.settings.pager&&!s.settings.pagerCustom&&(w(),z(s.active.index)),s.settings.ariaHidden&&j(s.active.index*x())},o.destroySlider=function(){s.initialized&&(s.initialized=!1,t(".bx-clone",this).remove(),s.children.each(function(){void 0!==t(this).data("origStyle")?t(this).attr("style",t(this).data("origStyle")):t(this).removeAttr("style")}),void 0!==t(this).data("origStyle")?this.attr("style",t(this).data("origStyle")):t(this).removeAttr("style"),t(this).unwrap().unwrap(),s.controls.el&&s.controls.el.remove(),s.controls.next&&s.controls.next.remove(),s.controls.prev&&s.controls.prev.remove(),s.pagerEl&&s.settings.controls&&!s.settings.pagerCustom&&s.pagerEl.remove(),t(".bx-caption",this).remove(),s.controls.autoEl&&s.controls.autoEl.remove(),clearInterval(s.interval),s.settings.responsive&&t(window).off("resize",U),s.settings.keyboardEnabled&&t(document).off("keydown",B),t(this).removeData("bxSlider"),t(window).off("blur",W).off("focus",H))},o.reloadSlider=function(e){void 0!==e&&(n=e),o.destroySlider(),l(),t(o).data("bxSlider",this)},l(),t(o).data("bxSlider",this),this}}}(jQuery);
vendor: 36,085 bytes, lines 106-112
106/**
107 * Owl Carousel v2.3.4
108 * Copyright 2013-2018 David Deutsch
109 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
110 */
111!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,checkVisibility:!0,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",slideTransition:"",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g>0;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i,g-=1;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;c<d;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],e.prototype.initializeStage=function(){this.$stage=this.$element.find("."+this.settings.stageClass),this.$stage.length||(this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+">",{class:this.settings.stageClass}).wrap(a("<div/>",{class:this.settings.stageOuterClass})),this.$element.append(this.$stage.parent()))},e.prototype.initializeItems=function(){var b=this.$element.find(".owl-item");if(b.length)return this._items=b.get().map(function(b){return a(b)}),this._mergers=this._items.map(function(){return 1}),void this.refresh();this.replace(this.$element.children().not(this.$stage.parent())),this.isVisible()?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass)},e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var a,b,c;a=this.$element.find("img"),b=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,c=this.$element.children(b).width(),a.length&&c<=0&&this.preloadAutoWidthImages(a)}this.initializeStage(),this.initializeItems(),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.isVisible=function(){return!this.settings.checkVisibility||this.$element.is(":visible")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b<c;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.isVisible()&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)<Math.abs(d.y)&&this.is("valid")||(b.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this)))},e.prototype.onDragMove=function(a){var b=null,c=null,d=null,e=this.difference(this._drag.pointer,this.pointer(a)),f=this.difference(this._drag.stage.start,e);this.is("dragging")&&(a.preventDefault(),this.settings.loop?(b=this.coordinates(this.minimum()),c=this.coordinates(this.maximum()+1)-b,f.x=((f.x-b)%c+c)%c+b):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),c=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),d=this.settings.pullDrag?-1*e.x/5:0,f.x=Math.max(Math.min(f.x,b+d),c+d)),this._drag.stage.current=f,this.animate(f.x))},e.prototype.onDragEnd=function(b){var d=this.difference(this._drag.pointer,this.pointer(b)),e=this._drag.stage.current,f=d.x>0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var e=-1,f=30,g=this.width(),h=this.coordinates();return this.settings.freeDrag||a.each(h,a.proxy(function(a,i){return"left"===c&&b>i-f&&b<i+f?e=a:"right"===c&&b>i-g-f&&b<i-g+f?e=a+1:this.op(b,"<",i)&&this.op(b,">",h[a+1]!==d?h[a+1]:i-g)&&(e="left"===c?a+1:a),-1===e},this)),this.settings.loop||(this.op(b,">",h[this.minimum()])?e=b=this.minimum():this.op(b,"<",h[this.maximum()])&&(e=b=this.maximum())),e},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"+(this.settings.slideTransition?" "+this.settings.slideTransition:"")}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){(a=this.normalize(a))!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){if(b=this._items.length)for(c=this._items[--b].width(),d=this.$element.width();b--&&!((c+=this._items[b].width()+this.settings.margin)>d););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2==0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=-1*f*g),a=c+e,(d=((a-h)%g+g)%g+h)!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.isVisible()&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){(a=this.normalize(a,!0))!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),!1!==this.settings.responsive&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$stage.remove(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a<c;case">":return d?a<c:a>c;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&-1!==a.namespace.indexOf("owl")?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.isVisible(),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.isVisible()!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type)){var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&-1*e||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);for(c.lazyLoadEager>0&&(e+=c.lazyLoadEager,c.loop&&(g-=c.lazyLoadEager,e++));f++<e;)this.load(h/2+this._core.relative(g)),h&&a.each(this._core.clones(this._core.relative(g)),i),g++}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={lazyLoad:!1,lazyLoadEager:0},e.prototype.load=function(c){var d=this._core.$stage.children().eq(c),e=d&&d.find(".owl-lazy");!e||a.inArray(d.get(0),this._loaded)>-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src")||f.attr("data-srcset");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):f.is("source")?f.one("load.owl.lazy",a.proxy(function(){this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("srcset",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(c){this._core=c,this._previousHeight=null,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"===a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._intervalId=null;var d=this;a(b).on("load",function(){d._core.settings.autoHeight&&d.update()}),a(b).resize(function(){d._core.settings.autoHeight&&(null!=d._intervalId&&clearTimeout(d._intervalId),d._intervalId=setTimeout(function(){d.update()},250))})};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.settings.lazyLoad,e=this._core.$stage.children().toArray().slice(b,c),f=[],g=0;a.each(e,function(b,c){f.push(a(c).height())}),g=Math.max.apply(null,f),g<=1&&d&&this._previousHeight&&(g=this._previousHeight),this._previousHeight=g,this._core.$stage.parent().height(g).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?"width:"+c.width+"px;height:"+c.height+"px;":"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(c){e='<div class="owl-video-play-icon"></div>',d=k.lazyLoad?a("<div/>",{class:"owl-video-tn "+j,srcType:c}):a("<div/>",{class:"owl-video-tn",style:"opacity:1;background-image:url("+c+")"}),b.after(d),b.after(e)};if(b.wrap(a("<div/>",{class:"owl-video-wrapper",style:g})),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),c=a('<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>'),c.attr("height",h),c.attr("width",g),"youtube"===f.type?c.attr("src","//www.youtube.com/embed/"+f.id+"?autoplay=1&rel=0&v="+f.id):"vimeo"===f.type?c.attr("src","//player.vimeo.com/video/"+f.id+"?autoplay=1"):"vzaar"===f.type&&c.attr("src","//view.vzaar.com/"+f.id+"/player?autoplay=true"),a(c).wrap('<div class="owl-video-frame" />').insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,
112animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to}
vendor: 5,569 bytes, line 112
112,this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['<span aria-label="Previous">&#x2039;</span>','<span aria-label="Next">&#x203a;</span>'],navSpeed:!1,navElement:'button type="button" role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a('<button role="button">').addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","button",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d,e;e=this._core.settings;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)"$relative"===b&&e.navContainer?this._controls[b].html(""):this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a<e;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(
112window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("<support>").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document);
113$(document).ready( function () {
114	// news accordion
115	//$('.news .accordion:first-child').addClass('acc_open');
116	$('.homepage .news .accordion').children().hide();
117	//$('.news .accordion:first-child').children().show();
118	
119	$('.homepage .news-list-view .article').each(function(){
120		var articleTitle = $(this).find('h3 a span').text();
121		var accordionLink = $('<div class="articleHeader">' + articleTitle + '</div>');
122		
123		if (!$(this).hasClass('acc_open')) {
124		$(this).append(articleTitle);
125		} else
126		$(this).html($(this).children());
127		
128		$(this).on('click', function(event){
129			if (!$(this).hasClass('acc_open')) {
130				$('.news .acc_open').children().slideToggle(200);
131				$('.news .acc_open').append($('.news .acc_open').find('h3 a span').text());
132				$('.news .accordion').removeClass('acc_open');
133				$(this).children().slideToggle(200);
134				$(this).addClass('acc_open');
135				$(this).html($(this).children());
136			}
137		});
138	});
139});
140$(document).ready( function () {
141
142	document.documentElement.style.setProperty('--scrollbar-width', (window.innerWidth - document.documentElement.clientWidth) + "px");
143	
144	$('.owl-carousel').owlCarousel({
145		nav: true,
146		responsive : {
147			0: {
148				items: 1,
149				margin: 0
150			},
151			700: {
152				items: 2,
153				margin: 40,
154			},
155			1024: {
156				items: 4,
157				margin: 40,
158			}
159		}
160	});
161	
162	// tables -> responsive tables
163	if( $('table.contenttable').length > 0 ){
164		$('table.contenttable').addClass('table').wrap('<div class="table-responsive" />');
165	}
166
167	// mobile navigation
168	$('#mobile-nav-trigger').click(function(){
169		if ($('.mobile-nav').hasClass('isOpen')){
170			$('.mobile-nav').slideUp().removeClass('isOpen');
171		}else{
172			$('.mobile-nav').slideDown().addClass('isOpen');
173		}
174	});
175
176	// main navigation
177	$('.mobile-nav > ul > li').each( function () {
178		if( $(this).find('ul').length > 0 ){
179			$(this).append('<span class="toggle-subnavigation" />');
180		}
181	});
182
183	// sub navigation 2nd level
184	$('.mobile-nav .hidden-desktop > ul > li').each( function () {
185		if( $(this).find('ul').length > 0 ){
186			$(this).append('<span class="toggle-subnavigation" />');
187		}
188	});
189	
190	// sub navigation 3rd level
191	$('.mobile-nav ul > li > ul > li').each( function () {
192		if( $(this).find('ul').length > 0 ){
193			$(this).append('<span class="toggle-subsubnavigation" />');
194		}
195	});
196
197	// sub navigation 4th level
198	$('.mobile-nav ul > li > ul > li > ul > li').each( function () {
199		if( $(this).find('ul').length > 0 ){
200			$(this).find('.toggle-subsubnavigation').remove();
201			$(this).append('<span class="toggle-subsubsubnavigation" />');
202		}
203	});	
204	
205/* 	// side nav
206	$('#side-nav > ul > li').each( function () {
207		if( $(this).find('ul').length > 0 ){
208			$(this).append('<span class="toggle-subnavigation" />');
209			$(this).find('ul').slideUp(0);
210			if ($(this).hasClass('act')) {
211				$(this).find('ul').slideDown(0);
212			}
213		}
214	});
215	
216	// toogle sidenav
217	$('#side-nav .toggle-subnavigation').click( function () {
218
219		// slideUp all open subnav's 
220		$('#side-nav ul li ul').slideUp();
221
222		// remove/add .open
223		if( $(this).hasClass('open') ){
224			$(this).removeClass('open');
225		}else{
226			$('#side-nav .toggle-subnavigation').removeClass('open');
227			$(this).addClass('open');
228		}
229
230		// subnav slideUp/slideDown
231		var $subnavli = $(this).parent();
232
233		
234		if($subnavli.find('ul').is(':visible')){
235			$subnavli.find('ul').slideUp();
236		}else{
237			$subnavli.find('ul:first').slideDown();
238		}
239	}); */
240	
241	// toogle subnav
242	$('#mainNavigation .toggle-subnavigation').click( function () {
243
244		// slideUp all open subnav's 
245		$('#mainNavigation ul li ul').slideUp();
246
247		// remove/add .open
248		if( $(this).hasClass('open') ){
249			$(this).removeClass('open');
250		}else{
251			$('#mainNavigation .toggle-subnavigation').removeClass('open');
252			$(this).addClass('open');
253		}
254
255		// subnav slideUp/slideDown
256		var $subnavli = $(this).parent();
257
258		
259		if($subnavli.find('ul').is(':visible')){
260			$subnavli.find('ul').slideUp();
261		}else{
262			$subnavli.find('ul:first').slideDown();
263		}
264	});
265	
266	// toogle subnav 3rd level
267	$('#mainNavigation .toggle-subsubnavigation').click( function () {
268
269		// slideUp all open subnav's 
270		$('#mainNavigation ul li ul li ul').slideUp();
271
272		// remove/add .open
273		if( $(this).hasClass('open') ){
274			$(this).removeClass('open');
275		}else{
276			$('#mainNavigation .toggle-subsubnavigation').removeClass('open');
277			$(this).addClass('open');
278		}
279
280		// subnav slideUp/slideDown
281		var $subnavli = $(this).parent();
282		
283		if($subnavli.find('> ul').is(':visible')){
284			$subnavli.find('> ul').slideUp();
285		}else{
286			$subnavli.find('> ul').slideDown();
287		}
288	});
289
290	// toogle subnav 4th level
291	$('#mainNavigation .toggle-subsubsubnavigation').click( function () {
292
293		// slideUp all open subnav's 
294		$('#mainNavigation ul li ul li ul li ul').slideUp();
295
296		// remove/add .open
297		if( $(this).hasClass('open') ){
298			$(this).removeClass('open');
299		}else{
300			$('#mainNavigation .toggle-subsubsubnavigation').removeClass('open');
301			$(this).addClass('open');
302		}
303
304		// subnav slideUp/slideDown
305		var $subnavli = $(this).parent();
306		
307		if($subnavli.find('ul').is(':visible')){
308			$subnavli.find('ul').slideUp();
309		}else{
310			$subnavli.find('ul').slideDown();
311		}
312	});	
313
314
315	
316	// dce accordion
317	
318	$('.dce-accordion').not('.active').siblings().hide();
319	$('.dce-accordion').click( function() {
320		if ( $(this).hasClass('active') ) {
321			$(this).siblings().slideToggle();
322			$(this).removeClass('active');
323		} else {
324			$('.active').siblings().slideToggle();
325			$('.active').removeClass('active');
326			// $('html, body').animate({ scrollTop: 0 }, 'slow');
327			$(this).siblings().slideToggle();
328			$(this).addClass('active');
329		};
330		return false;
331	});
332
333	stickyNav();
334});
335
336//Open Imagemap Popups
337function openPopup(maphref, winname) {
338    popup = window.open(maphref, winname,'scrollbars=1, width=550, height=350');
339    popup.focus();
340}
341
342function stickyNav() {
343    $(window).scroll(function(){
344		if ($(window).width() > 970) {
345			if ( $(this).scrollTop() > 127) {
346				$('.main-header').addClass('sticky');
347				$('.keyvis').css('padding-top','127px');
348			} else {
349				$('.main-header').removeClass('sticky');
350				$('.keyvis').css('padding-top','0px');
351			}
352		} else {
353			if ( $(this).scrollTop() > 60) {
354				$('.main-header').addClass('sticky');
355				$('.keyvis').css('padding-top','60px');
356			} else {
357				$('.main-header').removeClass('sticky');
358				$('.keyvis').css('padding-top','0px');
359			}		
360		}
361    });
362}
363/**
364 * released under MIT license by Insites
365 * https://github.com/insites/cookieconsen
366 * small changes by Die Medialen
367 */
368
369function isTrackingAllowed() {
370    if (window.cookieconsent) return cookieconsent.utils.isTrackingAllowed();
371    else return false;
372}
373
374(function (cc) {
375    // stop from running again, if accidently included more than once.
376    if (cc.hasInitialised) return;
377
378    var util = {
379            // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
380            escapeRegExp: function (str) {
381                return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
382            },
383
384            hasClass: function (element, selector) {
385                var s = ' ';
386                return element.nodeType === 1 &&
387                    (s + element.className + s).replace(/[\n\t]/g, s).indexOf(s + selector + s) >= 0;
388            },
389
390            addClass: function (element, className) {
391                element.className += ' ' + className;
392            },
393
394            removeClass: function (element, className) {
395                var regex = new RegExp('\\b' + this.escapeRegExp(className) + '\\b');
396                element.className = element.className.replace(regex, '');
397            },
398
399            interpolateString: function (str, callback) {
400                var marker = /{{([a-z][a-z0-9\-_]*)}}/ig;
401                return str.replace(marker, function (matches) {
402                    return callback(arguments[1]) || '';
403                })
404            },
405
406            getCookie: function (name) {
407                var value = '; ' + document.cookie;
408                var parts = value.split('; ' + name + '=');
409                return parts.length != 2 ?
410                    undefined : parts.pop().split(';').shift();
411            },
412
413            setCookie: function (name, value, expiryDays, domain, path) {
414                var exdate = new Date();
415                exdate.setDate(exdate.getDate() + (expiryDays || 365));
416
417                var cookie = [
418                    name + '=' + value,
419                    'expires=' + exdate.toUTCString(),
420                    'path=' + (path || '/')
421                ];
422
423                if (domain) {
424                    cookie.push('domain=' + domain);
425                }
426                document.cookie = cookie.join(';');
427            },
428
429            // only used for extending the initial options
430            deepExtend: function (target, source) {
431                for (var prop in source) {
432                    if (source.hasOwnProperty(prop)) {
433                        if (prop in target && this.isPlainObject(target[prop]) && this.isPlainObject(source[prop])) {
434                            this.deepExtend(target[prop], source[prop]);
435                        } else {
436                            target[prop] = source[prop];
437                        }
438                    }
439                }
440                return target;
441            }
442            ,
443
444            // only used for throttling the 'mousemove' event (used for animating the revoke button when `animateRevokable` is true)
445            throttle: function (callback, limit) {
446                var wait = false;
447                return function () {
448                    if (!wait) {
449                        callback.apply(this, arguments);
450                        wait = true;
451                        setTimeout(function () {
452                            wait = false;
453                        }, limit);
454                    }
455                }
456            }
457            ,
458
459            // only used for hashing json objects (used for hash mapping palette objects, used when custom colours are passed through JavaScript)
460            hash: function (str) {
461                var hash = 0,
462                    i, chr, len;
463                if (str.length === 0) return hash;
464                for (i = 0, len = str.length; i < len; ++i) {
465                    chr = str.charCodeAt(i);
466                    hash = ((hash << 5) - hash) + chr;
467                    hash |= 0;
468                }
469                return hash;
470            }
471            ,
472
473            normaliseHex: function (hex) {
474                if (hex[0] == '#') {
475                    hex = hex.substr(1);
476                }
477                if (hex.length == 3) {
478                    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
479                }
480                return hex;
481            }
482            ,
483
484            // used to get text colors if not set
485            getContrast: function (hex) {
486                hex = this.normaliseHex(hex);
487                var r = parseInt(hex.substr(0, 2), 16);
488                var g = parseInt(hex.substr(2, 2), 16);
489                var b = parseInt(hex.substr(4, 2), 16);
490                var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
491                return (yiq >= 128) ? '#000' : '#fff';
492            }
493            ,
494
495            // used to change color on highlight
496            getLuminance: function (hex) {
497                var num = parseInt(this.normaliseHex(hex), 16),
498                    amt = 38,
499                    R = (num >> 16) + amt,
500                    B = (num >> 8 & 0x00FF) + amt,
501                    G = (num & 0x0000FF) + amt;
502                var newColour = (0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 + (B < 255 ? B < 1 ? 0 : B : 255) * 0x100 + (G < 255 ? G < 1 ? 0 : G : 255)).toString(16).slice(1);
503                return '#' + newColour;
504            }
505            ,
506
507            isMobile: function () {
508                return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
509            }
510            ,
511
512            isPlainObject: function (obj) {
513                // The code "typeof obj === 'object' && obj !== null" allows Array objects
514                return typeof obj === 'object' && obj !== null && obj.constructor == Object;
515            }
516            ,
517            isTrackingAllowed: function() {
518                var cookieValue = util.getCookie("tracking_cookie_consent");
519                return (navigator.doNotTrack != 1) && (["dismiss", "allow"].includes(cookieValue));
520            }
521        }
522    ;
523
524    // valid cookie values
525    cc.status = {
526        deny: 'deny',
527        allow: 'allow',
528        dismiss: 'dismiss'
529    };
530
531    // detects the `transitionend` event name
532    cc.transitionEnd = (function () {
533        var el = document.createElement('div');
534        var trans = {
535            t: "transitionend",
536            OT: "oTransitionEnd",
537            msT: "MSTransitionEnd",
538            MozT: "transitionend",
539            WebkitT: "webkitTransitionEnd",
540        };
541
542        for (var prefix in trans) {
543            if (trans.hasOwnProperty(prefix) && typeof el.style[prefix + 'ransition'] != 'undefined') {
544                return trans[prefix];
545            }
546        }
547        return '';
548    }());
549
550    cc.hasTransition = !!cc.transitionEnd;
551
552    // array of valid regexp escaped statuses
553    var __allowedStatuses = Object.keys(cc.status).map(util.escapeRegExp);
554
555    // contains references to the custom <style> tags
556    cc.customStyles = {};
557
558    cc.Popup = (function () {
559
560        var defaultOptions = {
561
562            // if false, this prevents the popup from showing (useful for giving to control to another piece of code)
563            enabled: true,
564
565            // optional (expecting a HTML element) if passed, the popup is appended to this element. default is `document.body`
566            container: null,
567
568            // defaults cookie options - it is RECOMMENDED to set these values to correspond with your server
569            cookie: {
570                // This is the name of this cookie - you can ignore this
571                name: 'tracking_cookie_consent',
572
573                // This is the url path that the cookie 'name' belongs to. The cookie can only be read at this location
574                path: '/',
575
576                // This is the domain that the cookie 'name' belongs to. The cookie can only be read on this domain.
577                //  - Guide to cookie domains - http://erik.io/blog/2014/03/04/definitive-guide-to-cookie-domains/
578                domain: '',
579
580                // The cookies expire date, specified in days (specify -1 for no expiry)
581                expiryDays: 365,
582            },
583
584            // these callback hooks are called at certain points in the program execution
585            onPopupOpen: function () {
586                attachCheckboxHandler('cc-tracking-checkbox', this);
587            },
588            onPopupClose: function () {
589            },
590            onInitialise: function (status) {
591            },
592            onStatusChange: function (status, chosenBefore) {
593            },
594            onRevokeChoice: function () {
595            },
596            // each item defines the inner text for the element that it references
597            content: {
598                header: 'Cookies used on the website!',
599                message: 'This website uses cookies to ensure you get the best experience on our website.',
600                dismiss: 'OK',
601                allow: 'OK',
602                deny: 'Decline',
603                link: 'Learn more',
604                href: 'http://cookiesandyou.com',
605                close: '&#x274c;',
606                optout_text: 'Von anonymer Nutzeranalyse abmelden',
607                checkbox_text: 'Tracking unterbinden',
608                dnt_text: 'Do Not Track ist in Ihrem Browser gesetzt'
609            },
610
611            // This is the HTML for the elements above. The string {{header}} will be replaced with the equivalent text below.
612            // You can remove "{{header}}" and write the content directly inside the HTML if you want.
613            //
614            //  - ARIA rules suggest to ensure controls are tabbable (so the browser can find the first control),
615            //    and to set the focus to the first interactive control (http://w3c.github.io/aria-in-html/)
616            elements: {
617                header: '<span class="cc-header">{{header}}</span>&nbsp;',
618                message: '<span id="cookieconsent:desc" class="cc-message">{{message}}</span>',
619                messagelink: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" rel="noopener noreferrer nofollow" target="_blank">{{link}}</a></span>',
620                dismiss: '<a aria-label="dismiss cookie message" role=button tabindex="0" class="cc-btn cc-dismiss">{{dismiss}}</a>',
621                allow: '<a aria-label="allow cookies" role=button tabindex="0"  class="cc-btn cc-allow">{{allow}}</a>',
622                deny: '<a aria-label="deny cookies" role=button tabindex="0" class="cc-btn cc-deny">{{deny}}</a>',
623                link: '<a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" target="_blank">{{link}}</a>',
624                close: '<span aria-label="dismiss cookie message" role=button tabindex="0" class="cc-close">{{close}}</span>',
625                slideout: '<div class="slideout"><input type="checkbox" name="cc-tracking-checkbox" id="cc-tracking-checkbox" /><label for="cc-tracking-checkbox">{{checkbox_text}}</label></div>',
626                messageoptout: '<span id="cookieconsent:desc" class="cc-message">{{message}} <a aria-label="learn more about cookies" role=button tabindex="0" class="cc-link" href="{{href}}" rel="noopener noreferrer nofollow" target="_blank">{{link}}</a><span class="cc-link cookieaccordion">{{optout_text}}</span></span>'
627                //compliance: compliance is also an element, but it is generated by the application, depending on `type` below
628            },
629
630            // The placeholders {{classes}} and {{children}} both get replaced during initialisation:
631            //  - {{classes}} is where additional classes get added
632            //  - {{children}} is where the HTML children are placed
633            window: '<div role="dialog" aria-live="polite" aria-label="cookieconsent" aria-describedby="cookieconsent:desc" class="cc-window {{classes}}"><!--googleoff: all-->{{children}}<!--googleon: all--></div>',
634
635            // This is the html for the revoke button. This only shows up after the user has selected their level of consent
636            // It can be enabled of disabled using the `revokable` option
637            revokeBtn: '<div class="cc-revoke {{classes}}">Cookie Policy</div>',
638
639            // define types of 'compliance' here. '{{value}}' strings in here are linked to `elements`
640            compliance: {
641                'info': '<div class="cc-compliance">{{dismiss}}</div>',
642                'opt-in': '<div class="cc-compliance cc-highlight">{{dismiss}}{{allow}}</div>',
643                'opt-out': '<div class="cc-compliance cc-highlight">{{dismiss}}{{deny}}</div>',
644            },
645
646            // select your type of popup here
647            type: 'info', // refers to `compliance` (in other words, the buttons that are displayed)
648
649            // define layout layouts here
650            layouts: {
651                // the 'block' layout tend to be for square floating popups
652                'basic': '{{messagelink}}{{compliance}}',
653                'basic-slideout': '{{messageoptout}}{{compliance}}{{slideout}}',
654                'basic-close': '{{messagelink}}{{compliance}}{{close}}',
655                'basic-header': '{{header}}{{message}}{{link}}{{compliance}}',
656
657                // add a custom layout here, then add some new css with the class '.cc-layout-my-cool-layout'
658                //'my-cool-layout': '<div class="my-special-layout">{{message}}{{compliance}}</div>{{close}}',
659            },
660
661            // default layout (see above)
662            layout: 'basic-slideout',
663
664            // this refers to the popup windows position. we currently support:
665            //  - banner positions: top, bottom
666            //  - floating positions: top-left, top-right, bottom-left, bottom-right
667            //
668            // adds a class `cc-floating` or `cc-banner` which helps when styling
669            position: 'bottom', // default position is 'bottom'
670
671            // Available styles
672            //    -block (default, no extra classes)
673            //    -edgeless
674            //    -classic
675            // use your own style name and use `.cc-theme-STYLENAME` class in CSS to edit.
676            // Note: style "wire" is used for the configurator, but has no CSS styles of its own, only palette is used.
677            theme: 'block',
678
679            // The popup is `fixed` by default, but if you want it to be static (inline with the page content), set this to fal
679se
680            // Note: by default, we animate the height of the popup from 0 to full size
681            static: false,
682
683            // if you want custom colours, pass them in here. this object should look like this.
684            // ideally, any custom colours/themes should be created in a separate style sheet, as this is more efficient.
685            //   {
686            //     popup: {background: '#000000', text: '#fff', link: '#fff'},
687            //     button: {background: 'transparent', border: '#f8e71c', text: '#f8e71c'},
688            //     highlight: {background: '#f8e71c', border: '#f8e71c', text: '#000000'},
689            //   }
690            // `highlight` is optional and extends `button`. if it exists, it will apply to the first button
691            // only background needs to be defined for every element. if not set, other colors can be calculated from it
692            palette: null,
693
694            // Some countries REQUIRE that a user can change their mind. You can configure this yourself.
695            // Most of the time this should be false, but the `cookieconsent.law` can change this to `true` if it detects that it should
696            revokable: false,
697
698            // if true, the revokable button will tranlate in and out
699            animateRevokable: true,
700
701            // used to disable link on existing layouts
702            // replaces element messagelink with message and removes content of link
703            showLink: true,
704
705            // set value as scroll range to enable
706            dismissOnScroll: false,
707
708            // set value as time in milliseconds to autodismiss after set time
709            dismissOnTimeout: false,
710
711            // The application automatically decide whether the popup should open.
712            // Set this to false to prevent this from happening and to allow you to control the behaviour yourself
713            autoOpen: true,
714
715            // By default the created HTML is automatically appended to the container (which defaults to <body>). You can prevent this behaviour
716            // by setting this to false, but if you do, you must attach the `element` yourself, which is a public property of the popup instance:
717            //
718            //     var instance = cookieconsent.factory(options);
719            //     document.body.appendChild(instance.element);
720            //
721            autoAttach: true,
722
723            // simple whitelist/blacklist for pages. specify page by:
724            //   - using a string : '/index.html'           (matches '/index.html' exactly) OR
725            //   - using RegExp   : /\/page_[\d]+\.html/    (matched '/page_1.html' and '/page_2.html' etc)
726            whitelistPage: [],
727            blacklistPage: [],
728
729            // If this is defined, then it is used as the inner html instead of layout. This allows for ultimate customisation.
730            // Be sure to use the classes `cc-btn` and `cc-allow`, `cc-deny` or `cc-dismiss`. They enable the app to register click
731            // handlers. You can use other pre-existing classes too. See `src/styles` folder.
732            overrideHTML: null,
733        };
734
735        function CookiePopup() {
736            this.initialise.apply(this, arguments);
737            $('.cc-window .cc-message .cookieaccordion').on('click', function () {
738                $('.cc-window .slideout').slideToggle();
739            });
740        }
741
742        CookiePopup.prototype.initialise = function (options) {
743            if (this.options) {
744                this.destroy(); // already rendered
745            }
746
747            // set options back to default options
748            util.deepExtend(this.options = {}, defaultOptions);
749
750            // merge in user options
751            if (util.isPlainObject(options)) {
752                util.deepExtend(this.options, options);
753            }
754
755            // returns true if `onComplete` was called
756            if (checkCallbackHooks.call(this)) {
757                // user has already answered
758                this.options.enabled = false;
759            }
760
761            // apply blacklist / whitelist
762            if (arrayContainsMatches(this.options.blacklistPage, location.pathname)) {
763                this.options.enabled = false;
764            }
765            if (arrayContainsMatches(this.options.whitelistPage, location.pathname)) {
766                this.options.enabled = true;
767            }
768
769            // the full markup either contains the wrapper or it does not (for multiple instances)
770            var cookiePopup = this.options.window
771                .replace('{{classes}}', getPopupClasses.call(this).join(' '))
772                .replace('{{children}}', getPopupInnerMarkup.call(this));
773
774            // if user passes html, use it instead
775            var customHTML = this.options.overrideHTML;
776            if (typeof customHTML == 'string' && customHTML.length) {
777                cookiePopup = customHTML;
778            }
779
780            // if static, we need to grow the element from 0 height so it doesn't jump the page
781            // content. we wrap an element around it which will mask the hidden content
782            if (this.options.static) {
783                // `grower` is a wrapper div with a hidden overflow whose height is animated
784                var wrapper = appendMarkup.call(this, '<div class="cc-grower">' + cookiePopup + '</div>');
785
786                wrapper.style.display = ''; // set it to visible (because appendMarkup hides it)
787                this.element = wrapper.firstChild; // get the `element` reference from the wrapper
788                this.element.style.display = 'none';
789                util.addClass(this.element, 'cc-invisible');
790            } else {
791                this.element = appendMarkup.call(this, cookiePopup);
792            }
793
794            applyAutoDismiss.call(this);
795
796            applyRevokeButton.call(this);
797
798            if (this.options.autoOpen) {
799                this.autoOpen();
800            }
801        };
802
803        CookiePopup.prototype.destroy = function () {
804            if (this.onButtonClick && this.element) {
805                this.element.removeEventListener('click', this.onButtonClick);
806                this.onButtonClick = null;
807            }
808
809            if (this.dismissTimeout) {
810                clearTimeout(this.dismissTimeout);
811                this.dismissTimeout = null;
812            }
813
814            if (this.onWindowScroll) {
815                window.removeEventListener('scroll', this.onWindowScroll);
816                this.onWindowScroll = null;
817            }
818
819            if (this.onMouseMove) {
820                window.removeEventListener('mousemove', this.onMouseMove);
821                this.onMouseMove = null;
822            }
823
824            if (this.element && this.element.parentNode) {
825                this.element.parentNode.removeChild(this.element);
826            }
827            this.element = null;
828
829            if (this.revokeBtn && this.revokeBtn.parentNode) {
830                this.revokeBtn.parentNode.removeChild(this.revokeBtn);
831            }
832            this.revokeBtn = null;
833
834            removeCustomStyle(this.options.palette);
835            this.options = null;
836        };
837
838        CookiePopup.prototype.open = function (callback) {
839            if (!this.element) return;
840
841            if (!this.isOpen()) {
842                if (cc.hasTransition) {
843                    this.fadeIn();
844                } else {
845                    this.element.style.display = '';
846                }
847
848                if (this.options.revokable) {
849                    this.toggleRevokeButton();
850                }
851                this.options.onPopupOpen.call(this);
852            }
853
854            return this;
855        };
856        CookiePopup.prototype.close = function (showRevoke) {
857            if (!this.element) return;
858
859            if (this.isOpen()) {
860                if (cc.hasTransition) {
861                    this.fadeOut();
862                } else {
863                    this.element.style.display = 'none';
864                }
865
866                if (showRevoke && this.options.revokable) {
867                    this.toggleRevokeButton(true);
868                }
869                this.options.onPopupClose.call(this);
870            }
871
872            return this;
873        };
874
875        CookiePopup.prototype.fadeIn = function () {
876            var el = this.element;
877
878            if (!cc.hasTransition || !el)
879                return;
880
881            // This should always be called AFTER fadeOut (which is governed by the 'transitionend' event).
882            // 'transitionend' isn't all that reliable, so, if we try and fadeIn before 'transitionend' has
883            // has a chance to run, then we run it ourselves
884            if (this.afterTransition) {
885                afterFadeOut.call(this, el)
886            }
887
888            if (util.hasClass(el, 'cc-invisible')) {
889                el.style.display = '';
890
891                if (this.options.static) {
892                    var height = this.element.clientHeight;
893                    this.element.parentNode.style.maxHeight = '100%';
894                }
895
896                var fadeInTimeout = 20; // (ms) DO NOT MAKE THIS VALUE SMALLER. See below
897
898                // Although most browsers can handle values less than 20ms, it should remain above this value.
899                // This is because we are waiting for a "browser redraw" before we remove the 'cc-invisible' class.
900                // If the class is remvoed before a redraw could happen, then the fadeIn effect WILL NOT work, and
901                // the popup will appear from nothing. Therefore we MUST allow enough time for the browser to do
902                // its thing. The actually difference between using 0 and 20 in a set timeout is neglegible anyway
903                this.openingTimeout = setTimeout(afterFadeIn.bind(this, el), fadeInTimeout);
904            }
905        };
906
907        CookiePopup.prototype.fadeOut = function () {
908            var el = this.element;
909
910            if (!cc.hasTransition || !el)
911                return;
912
913            if (this.openingTimeout) {
914                clearTimeout(this.openingTimeout);
915                afterFadeIn.bind(this, el);
916            }
917
918            if (!util.hasClass(el, 'cc-invisible')) {
919                if (this.options.static) {
920                    this.element.parentNode.style.maxHeight = '';
921                }
922
923                this.afterTransition = afterFadeOut.bind(this, el);
924                el.addEventListener(cc.transitionEnd, this.afterTransition);
925
926                util.addClass(el, 'cc-invisible');
927            }
928        };
929
930        CookiePopup.prototype.isOpen = function () {
931            return this.element && this.element.style.display == '' && (cc.hasTransition ? !util.hasClass(this.element, 'cc-invisible') : true);
932        };
933
934        CookiePopup.prototype.toggleRevokeButton = function (show) {
935            if (this.revokeBtn) this.revokeBtn.style.display = show ? '' : 'none';
936        };
937
938        CookiePopup.prototype.revokeChoice = function (preventOpen) {
939            this.options.enabled = true;
940            this.clearStatus();
941
942            this.options.onRevokeChoice.call(this);
943
944            if (!preventOpen) {
945                this.autoOpen();
946            }
947        };
948
949        // returns true if the cookie has a valid value
950        CookiePopup.prototype.hasAnswered = function (options) {
951            return Object.keys(cc.status).indexOf(this.getStatus()) >= 0;
952        };
953
954        // returns true if the cookie indicates that consent has been given
955        CookiePopup.prototype.hasConsented = function (options) {
956            var val = this.getStatus();
957            return val == cc.status.allow || val == cc.status.dismiss;
958        };
959
960        // opens the popup if no answer has been given
961        CookiePopup.prototype.autoOpen = function (options) {
962            !this.hasAnswered() && this.options.enabled && this.open();
963        };
964
965        CookiePopup.prototype.setStatus = function (status) {
966            var c = this.options.cookie;
967            var value = util.getCookie(c.name);
968            var chosenBefore = Object.keys(cc.status).indexOf(value) >= 0;
969
970            // if `status` is valid
971            if (Object.keys(cc.status).indexOf(status) >= 0) {
972
973                util.setCookie(c.name, status, c.expiryDays, c.domain, c.path);
974
975                this.options.onStatusChange.call(this, status, chosenBefore);
976            } else {
977                this.clearStatus();
978            }
979        };
980
981        CookiePopup.prototype.getStatus = function () {
982            return util.getCookie(this.options.cookie.name);
983        };
984
985        CookiePopup.prototype.clearStatus = function () {
986            var c = this.options.cookie;
987            util.setCookie(c.name, '', -1, c.domain, c.path);
988        };
989
990        // This needs to be called after 'fadeIn'. This is the code that actually causes the fadeIn to work
991        // There is a good reason why it's called in a timeout. Read 'fadeIn';
992        function afterFadeIn(el) {
993            this.openingTimeout = null;
994            util.removeClass(el, 'cc-invisible');
995        }
996
997        // This is called on 'transitionend' (only on the transition of the fadeOut). That's because after we've faded out, we need to
998        // set the display to 'none' (so there aren't annoying invisible popups all over the page). If for whenever reason this function
999        // is not called (lack of support), the open/close mechanism will still work.
1000        function afterFadeOut(el) {
1001            el.style.display = 'none'; // after close and before open, the display should be none
1002            el.removeEventListener(cc.transitionEnd, this.afterTransition);
1003            this.afterTransition = null;
1004        }
1005
1006        // this function calls the `onComplete` hook and returns true (if needed) and returns false otherwise
1007        function checkCallbackHooks() {
1008            var complete = this.options.onInitialise.bind(this);
1009
1010            if (!window.navigator.cookieEnabled) {
1011                complete(cc.status.deny);
1012                return true;
1013            }
1014
1015            if (window.CookiesOK || window.navigator.CookiesOK) {
1016                complete(cc.status.allow);
1017                return true;
1018            }
1019
1020            var allowed = Object.keys(cc.status);
1021            var answer = this.getStatus();
1022            var match = allowed.indexOf(answer) >= 0;
1023
1024            if (match) {
1025                complete(answer);
1026            }
1027            return match;
1028        }
1029
1030        function attachCheckboxHandler(checkboxId, popup) {
1031            var cbox = document.getElementById(checkboxId);
1032
1033            if (cbox != undefined) {
1034                //checkbox anhand cookies und dnt setzen
1035                if (navigator.doNotTrack == 1) {
1036                    //opt-out mandatory with DNT set
1037                    cbox.checked = "checked";
1038                    if (document.querySelector) {
1039                        var label = document.querySelector("label[for=" + "cc-tracking-checkbox" + "]");
1040                        label.innerHTML = popup.options.content.dnt_text;
1041
1042                    }
1043                }
1044                else if (util.getCookie("tracking_cookie_consent")!="deny" && navigator.doNotTrack != 1) {
1045                    cbox.checked = false;
1046                }
1047                cbox.onclick = function () {
1048                    if (navigator.doNotTrack == 1) {
1049                        this.checked = "checked"; //opt-out mandatory with DNT set
1050                    }
1051                    else if (this.checked) {
1052                        util.setCookie("tracking_cookie_consent", "deny", 365);
1053                    }
1054                    else {
1055                        util.setCookie("tracking_cookie_consent", "", 365);
1056                    }
1057                    // popup.close(true);
1058                };
1059            }
1060        };
1061
1062        function getPositionClasses() {
1063            var positions = this.options.position.split('-'); // top, bottom, left, right
1064            var classes = [];
1065
1066            // top, left, right, bottom
1067            positions.forEach(function (cur) {
1068                classes.push('cc-' + cur);
1069            });
1070
1071            return classes;
1072        }
1073
1074        function getPopupClasses() {
1075            var opts = this.options;
1076            var positionStyle = (opts.position == 'top' || opts.position == 'bottom') ? 'banner' : 'floating';
1077
1078            if (util.isMobile()) {
1079                positionStyle = 'floating';
1080            }
1081
1082            var classes = [
1083                'cc-' + positionStyle, // floating or banner
1084                'cc-type-' + opts.type, // add the compliance type
1085                'cc-theme-' + opts.theme, // add the theme
1086            ];
1087
1088            if (opts.static) {
1089                classes.push('cc-static');
1090            }
1091
1092            classes.push.apply(classes, getPositionClasses.call(this));
1093
1094            // we only add extra styles if `palette` has been set to a valid value
1095            var didAttach = attachCustomPalette.call(this, this.options.palette);
1096
1097            // if we override the palette, add the class that enables this
1098            if (this.customStyleSelector) {
1099                classes.push(this.customStyleSelector);
1100            }
1101
1102            return classes;
1103        }
1104
1105        function getPopupInnerMarkup() {
1106            var interpolated = {};
1107            var opts = this.options;
1108
1109            // removes link if showLink is false
1110            if (!opts.showLink) {
1111                opts.elements.link = '';
1112                opts.elements.messagelink = opts.elements.message;
1113            }
1114
1115            Object.keys(opts.elements).forEach(function (prop) {
1116                interpolated[prop] = util.interpolateString(opts.elements[prop], function (name) {
1117                    var str = opts.content[name];
1118                    return (name && typeof str == 'string' && str.length) ? str : '';
1119                })
1120            });
1121
1122            // checks if the type is valid and defaults to info if it's not
1123            var complianceType = opts.compliance[opts.type];
1124            if (!complianceType) {
1125                complianceType = opts.compliance.info;
1126            }
1127
1128            // build the compliance types from the already interpolated `elements`
1129            interpolated.compliance = util.interpolateString(complianceType, function (name) {
1130                return interpolated[name];
1131            });
1132
1133            // checks if the layout is valid and defaults to basic if it's not
1134            var layout = opts.layouts[opts.layout];
1135            if (!layout) {
1136                layout = opts.layouts.basic;
1137            }
1138
1139            return util.interpolateString(layout, function (match) {
1140                return interpolated[match];
1141            });
1142        }
1143
1144        function appendMarkup(markup) {
1145            var opts = this.options;
1146            var div = document.createElement('div');
1147            var cont = (opts.container && opts.container.nodeType === 1) ? opts.container : document.body;
1148
1149            div.innerHTML = markup;
1150
1151            var el = div.children[0];
1152
1153            el.style.display = 'none';
1154
1155            if (util.hasClass(el, 'cc-window') && cc.hasTransition) {
1156                util.addClass(el, 'cc-invisible');
1157            }
1158
1159            // save ref to the function handle so we can unbind it later
1160            this.onButtonClick = handleButtonClick.bind(this);
1161
1162            el.addEventListener('click', this.onButtonClick);
1163
1164            if (opts.autoAttach) {
1165                if (!cont.firstChild) {
1166                    cont.appendChild(el);
1167                } else {
1168                    cont.insertBefore(el, cont.firstChild)
1169                }
1170            }
1171
1172            return el;
1173        }
1174
1175        function handleButtonClick(event) {
1176            var targ = event.target;
1177			var fin=false;
1178            if (util.hasClass(targ, 'cc-btn')) {
1179                var matches = targ.className.match(new RegExp("\\bcc-(" + __allowedStatuses.join('|') + ")\\b"));
1180                var match = (matches && matches[1]) || false;
1181                if (match == "dismiss" && util.getCookie("tracking_cookie_consent") == "deny") match = "deny";
1182                if (match) {
1183                    this.setStatus(match);
1184                    this.close(true);
1185                }
1186                if (match == "dismiss" && util.getCookie("tracking_cookie_consent") !== "deny") fin=true;
1187            }
1188            if (util.hasClass(targ, 'cc-close')) {
1189                if (util.isTrackingAllowed()) {
1190                    this.setStatus(cc.status.allow);
1191                }
1192                else {
1193                    this.setStatus(cc.status.deny);
1194                }
1195                this.close(true);
1196            }
1197            if (util.hasClass(targ, 'cc-revoke')) {
1198                this.revokeChoice();
1199            }
1200			if(fin) location.reload(); 
1201        }
1202
1203        // I might change this function to use inline styles. I originally chose a stylesheet because I could select many elements with a
1204        // single rule (something that happened a lot), the apps has changed slightly now though, so inline styles might be more applicable.
1205        function attachCustomPalette(palette) {
1206            var hash = util.hash(JSON.stringify(palette));
1207            var selector = 'cc-color-override-' + hash;
1208            var isValid = util.isPlainObject(palette);
1209
1210            this.customStyleSelector = isValid ? selector : null;
1211
1212            if (isValid) {
1213                addCustomStyle(hash, palette, '.' + selector);
1214            }
1215            return isValid;
1216        }
1217
1218        function addCustomStyle(hash, palette, prefix) {
1219
1220            // only add this if a style like it doesn't exist
1221            if (cc.customStyles[hash]) {
1222                // custom style already exists, so increment the reference count
1223                ++cc.customStyles[hash].references;
1224                return;
1225            }
1226            var colorStyles = {};
1227            var popup = palette.popup;
1228            var button = palette.button;
1229            var highlight = palette.highlight;
1230            var deny = palette.deny;
1231
1232            // needs background colour, text and link will be set to black/white if not specified
1233            if (popup) {
1234                // assumes popup.background is set
1235                popup.text = popup.text ? popup.text : util.getContrast(popup.background);
1236                popup.link = popup.link ? popup.link : popup.text;
1237                colorStyles[prefix + '.cc-window'] = [
1238                    'color: ' + popup.text,
1239                    'background-color: ' + popup.background
1240                ];
1241                colorStyles[prefix + '.cc-revoke'] = [
1242                    'color: ' + popup.text,
1243                    'background-color: ' + popup.background
1244                ];
1245                colorStyles[prefix + ' .cc-link,' + prefix + ' .cc-link:active,' + prefix + ' .cc-link:visited'] 
1245= [
1246                    'color: ' + popup.link
1247                ];
1248
1249                if (button) {
1250                    // assumes button.background is set
1251                    button.text = button.text ? button.text : util.getContrast(button.background);
1252                    button.border = button.border ? button.border : 'transparent';
1253                    colorStyles[prefix + ' .cc-btn'] = [
1254                        'color: ' + button.text,
1255                        'border-color: ' + button.border,
1256                        'background-color: ' + button.background
1257                    ];
1258
1259                    if (button.background != 'transparent')
1260                        colorStyles[prefix + ' .cc-btn:hover, ' + prefix + ' .cc-btn:focus'] = [
1261                            'background-color: ' + getHoverColour(button.background)
1262                        ];
1263
1264                    if (highlight) {
1265                        //assumes highlight.background is set
1266                        highlight.text = highlight.text ? highlight.text : util.getContrast(highlight.background);
1267                        highlight.border = highlight.border ? highlight.border : 'transparent';
1268                        colorStyles[prefix + ' .cc-highlight .cc-btn:first-child'] = [
1269                            'color: ' + highlight.text,
1270                            'border-color: ' + highlight.border,
1271                            'background-color: ' + highlight.background
1272                        ];
1273                    }
1274                }
1275                if (deny) {
1276                    // assumes button.background is set
1277                    deny.text = deny.text ? deny.text : util.getContrast(deny.background);
1278                    deny.border = deny.border ? deny.border : 'transparent';
1279                    colorStyles[prefix + ' .cc-deny'] = [
1280                        'color: ' + deny.text,
1281                        'border-color: ' + deny.border,
1282                        'background-color: ' + deny.background
1283                    ];
1284
1285                    if (deny.background != 'transparent')
1286                        colorStyles[prefix + ' .cc-deny:hover, ' + prefix + ' .cc-deny:focus'] = [
1287                            'background-color: ' + getHoverColour(deny.background)
1288                        ];
1289
1290                    if (highlight) {
1291                        //assumes highlight.background is set
1292                        highlight.text = highlight.text ? highlight.text : util.getContrast(highlight.background);
1293                        highlight.border = highlight.border ? highlight.border : 'transparent';
1294                        colorStyles[prefix + ' .cc-highlight .cc-btn:first-child'] = [
1295                            'color: ' + highlight.text,
1296                            'border-color: ' + highlight.border,
1297                            'background-color: ' + highlight.background
1298                        ];
1299                    }
1300                }
1301
1302            }
1303
1304            // this will be interpretted as CSS. the key is the selector, and each array element is a rule
1305            var style = document.createElement('style');
1306            document.head.appendChild(style);
1307
1308            // custom style doesn't exist, so we create it
1309            cc.customStyles[hash] = {
1310                references: 1,
1311                element: style.sheet
1312            };
1313
1314            var ruleIndex = -1;
1315            for (var prop in colorStyles) {
1316                if (colorStyles.hasOwnProperty(prop)) {
1317                    style.sheet.insertRule(prop + '{' + colorStyles[prop].join(';') + '}', ++ruleIndex);
1318                }
1319            }
1320        }
1321
1322        function getHoverColour(hex) {
1323            hex = util.normaliseHex(hex);
1324            // for black buttons
1325            if (hex == '000000') {
1326                return '#222';
1327            }
1328            return util.getLuminance(hex);
1329        }
1330
1331        function removeCustomStyle(palette) {
1332            if (util.isPlainObject(palette)) {
1333                var hash = util.hash(JSON.stringify(palette));
1334                var customStyle = cc.customStyles[hash];
1335                if (customStyle && !--customStyle.references) {
1336                    var styleNode = customStyle.element.ownerNode;
1337                    if (styleNode && styleNode.parentNode) {
1338                        styleNode.parentNode.removeChild(styleNode);
1339                    }
1340                    cc.customStyles[hash] = null;
1341                }
1342            }
1343        }
1344
1345        function arrayContainsMatches(array, search) {
1346            for (var i = 0, l = array.length; i < l; ++i) {
1347                var str = array[i];
1348                // if regex matches or string is equal, return true
1349                if ((str instanceof RegExp && str.test(search)) ||
1350                    (typeof str == 'string' && str.length && str === search)) {
1351                    return true;
1352                }
1353            }
1354            return false;
1355        }
1356
1357        function applyAutoDismiss() {
1358            var setStatus = this.setStatus.bind(this);
1359
1360            var delay = this.options.dismissOnTimeout;
1361            if (typeof delay == 'number' && delay >= 0) {
1362                this.dismissTimeout = window.setTimeout(function () {
1363                    setStatus(cc.status.dismiss);
1364                }, Math.floor(delay));
1365            }
1366
1367            var scrollRange = this.options.dismissOnScroll;
1368            if (typeof scrollRange == 'number' && scrollRange >= 0) {
1369                var onWindowScroll = function (evt) {
1370                    if (window.pageYOffset > Math.floor(scrollRange)) {
1371                        setStatus(cc.status.dismiss);
1372
1373                        window.removeEventListener('scroll', onWindowScroll);
1374                        this.onWindowScroll = null;
1375                    }
1376                };
1377
1378                this.onWindowScroll = onWindowScroll;
1379                window.addEventListener('scroll', onWindowScroll);
1380            }
1381        }
1382
1383        function applyRevokeButton() {
1384            // revokable is true if advanced compliance is selected
1385            if (this.options.type != 'info') this.options.revokable = true;
1386            // animateRevokable false for mobile devices
1387            if (util.isMobile()) this.options.animateRevokable = false;
1388
1389            if (this.options.revokable) {
1390                var classes = getPositionClasses.call(this);
1391                if (this.options.animateRevokable) {
1392                    classes.push('cc-animate');
1393                }
1394                if (this.customStyleSelector) {
1395                    classes.push(this.customStyleSelector)
1396                }
1397                var revokeBtn = this.options.revokeBtn.replace('{{classes}}', classes.join(' '));
1398                this.revokeBtn = appendMarkup.call(this, revokeBtn);
1399
1400                var btn = this.revokeBtn;
1401                if (this.options.animateRevokable) {
1402                    var wait = false;
1403                    var onMouseMove = util.throttle(function (evt) {
1404                        var active = false;
1405                        var minY = 20;
1406                        var maxY = (window.innerHeight - 20);
1407
1408                        if (util.hasClass(btn, 'cc-top') && evt.clientY < minY) active = true;
1409                        if (util.hasClass(btn, 'cc-bottom') && evt.clientY > maxY) active = true;
1410
1411                        if (active) {
1412                            if (!util.hasClass(btn, 'cc-active')) {
1413                                util.addClass(btn, 'cc-active');
1414                            }
1415                        } else {
1416                            if (util.hasClass(btn, 'cc-active')) {
1417                                util.removeClass(btn, 'cc-active');
1418                            }
1419                        }
1420                    }, 200);
1421
1422                    this.onMouseMove = onMouseMove;
1423                    window.addEventListener('mousemove', onMouseMove);
1424                }
1425            }
1426        }
1427
1428        return CookiePopup
1429    }());
1430
1431    cc.Location = (function () {
1432
1433        // An object containing all the location services we have already set up.
1434        // When using a service, it could either return a data structure in plain text (like a JSON object) or an executable script
1435        // When the response needs to be executed by the browser, then `isScript` must be set to true, otherwise it won't work.
1436
1437        // When the service uses a script, the chances are that you'll have to use the script to make additional requests. In these
1438        // cases, the services `callback` property is called with a `done` function. When performing async operations, this must be called
1439        // with the data (or Error), and `cookieconsent.locate` will take care of the rest
1440        var defaultOptions = {
1441
1442            // The default timeout is 5 seconds. This is mainly needed to catch JSONP requests that error.
1443            // Otherwise there is no easy way to catch JSONP errors. That means that if a JSONP fails, the
1444            // app will take `timeout` milliseconds to react to a JSONP network error.
1445            timeout: 5000,
1446
1447            // the order that services will be attempted in
1448            services: [
1449                'freegeoip',
1450                'ipinfo',
1451                'maxmind'
1452
1453                /*
1454
1455                // 'ipinfodb' requires some options, so we define it using an object
1456                // this object will be passed to the function that defines the service
1457
1458                {
1459                  name: 'ipinfodb',
1460                  interpolateUrl: {
1461                    // obviously, this is a fake key
1462                    api_key: 'vOgI3748dnIytIrsJcxS7qsDf6kbJkE9lN4yEDrXAqXcKUNvjjZPox3ekXqmMMld'
1463                  },
1464                },
1465
1466                // as well as defining an object, you can define a function that returns an object
1467
1468                function () {
1469                  return {name: 'ipinfodb'};
1470                },
1471
1472                */
1473            ],
1474
1475            serviceDefinitions: {
1476
1477                freegeoip: function () {
1478                    return {
1479                        // This service responds with JSON, but they do not have 
1479CORS set, so we must use JSONP and provide a callback
1480                        // The `{callback}` is automatically rewritten by the tool
1481                        url: '//freegeoip.net/json/?callback={callback}',
1482                        isScript: true, // this is JSONP, therefore we must set it to run as a script
1483                        callback: function (done, response) {
1484                            try {
1485                                var json = JSON.parse(response);
1486                                return json.error ? toError(json) : {
1487                                    code: json.country_code
1488                                };
1489                            } catch (err) {
1490                                return toError({error: 'Invalid response (' + err + ')'});
1491                            }
1492                        }
1493                    }
1494                },
1495
1496                ipinfo: function () {
1497                    return {
1498                        // This service responds with JSON, so we simply need to parse it and return the country code
1499                        url: '//ipinfo.io',
1500                        headers: ['Accept: application/json'],
1501                        callback: function (done, response) {
1502                            try {
1503                                var json = JSON.parse(response);
1504                                return json.error ? toError(json) : {
1505                                    code: json.country
1506                                };
1507                            } catch (err) {
1508                                return toError({error: 'Invalid response (' + err + ')'});
1509                            }
1510                        }
1511                    }
1512                },
1513
1514                // This service requires an option to define `key`. Options are proived using objects or functions
1515                ipinfodb: function (options) {
1516                    return {
1517                        // This service responds with JSON, so we simply need to parse it and return the country code
1518                        url: '//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}',
1519                        isScript: true, // this is JSONP, therefore we must set it to run as a script
1520                        callback: function (done, response) {
1521                            try {
1522                                var json = JSON.parse(response);
1523                                return json.statusCode == 'ERROR' ? toError({error: json.statusMessage}) : {
1524                                    code: json.countryCode
1525                                };
1526                            } catch (err) {
1527                                return toError({error: 'Invalid response (' + err + ')'});
1528                            }
1529                        }
1530                    }
1531                },
1532
1533                maxmind: function () {
1534                    return {
1535                        // This service responds with a JavaScript file which defines additional functionality. Once loaded, we must
1536                        // make an additional AJAX call. Therefore we provide a `done` callback that can be called asynchronously
1537                        url: '//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js',
1538                        isScript: true, // this service responds with a JavaScript file, so it must be run as a script
1539                        callback: function (done) {
1540                            // if everything went okay then `geoip2` WILL be defined
1541                            if (!window.geoip2) {
1542                                done(new Error('Unexpected response format. The downloaded script should have exported `geoip2` to the global scope'));
1543                                return;
1544                            }
1545
1546                            geoip2.country(function (location) {
1547                                try {
1548                                    done({
1549                                        code: location.country.iso_code
1550                                    });
1551                                } catch (err) {
1552                                    done(toError(err));
1553                                }
1554                            }, function (err) {
1555                                done(toError(err));
1556                            });
1557
1558                            // We can't return anything, because we need to wait for the second AJAX call to return.
1559                            // Then we can 'complete' the service by passing data or an error to the `done` callback.
1560                        }
1561                    }
1562                },
1563            },
1564        };
1565
1566        function Location(options) {
1567            // Set up options
1568            util.deepExtend(this.options = {}, defaultOptions);
1569
1570            if (util.isPlainObject(options)) {
1571                util.deepExtend(this.options, options);
1572            }
1573
1574            this.currentServiceIndex = -1; // the index (in options) of the service we're currently using
1575        }
1576
1577        Location.prototype.getNextService = function () {
1578            var service;
1579
1580            do {
1581                service = this.getServiceByIdx(++this.currentServiceIndex);
1582            } while (this.currentServiceIndex < this.options.services.length && !service);
1583
1584            return service;
1585        };
1586
1587        Location.prototype.getServiceByIdx = function (idx) {
1588            // This can either be the name of a default locationService, or a function.
1589            var serviceOption = this.options.services[idx];
1590
1591            // If it's a string, use one of the location services.
1592            if (typeof serviceOption === 'function') {
1593                var dynamicOpts = serviceOption();
1594                if (dynamicOpts.name) {
1595                    util.deepExtend(dynamicOpts, this.options.serviceDefinitions[dynamicOpts.name](dynamicOpts));
1596                }
1597                return dynamicOpts;
1598            }
1599
1600            // If it's a string, use one of the location services.
1601            if (typeof serviceOption === 'string') {
1602                return this.options.serviceDefinitions[serviceOption]();
1603            }
1604
1605            // If it's an object, assume {name: 'ipinfo', ...otherOptions}
1606            // Allows user to pass in API keys etc.
1607            if (util.isPlainObject(serviceOption)) {
1608                return this.options.serviceDefinitions[serviceOption.name](serviceOption);
1609            }
1610
1611            return null;
1612        };
1613
1614        // This runs the service located at index `currentServiceIndex`.
1615        // If the service fails, `runNextServiceOnError` will continue trying each service until all fail, or one completes successfully
1616        Location.prototype.locate = function (complete, error) {
1617            var service = this.getNextService();
1618
1619            if (!service) {
1620                error(new Error('No services to run'));
1621                return;
1622            }
1623
1624            this.callbackComplete = complete;
1625            this.callbackError = error;
1626
1627            this.runService(service, this.runNextServiceOnError.bind(this));
1628        };
1629
1630        // Potentially adds a callback to a url for jsonp.
1631        Location.prototype.setupUrl = function (service) {
1632            var serviceOpts = this.getCurrentServiceOpts();
1633            return service.url.replace(/\{(.*?)\}/g, function (_, param) {
1634                if (param === 'callback') {
1635                    var tempName = 'callback' + Date.now();
1636                    window[tempName] = function (res) {
1637                        service.__JSONP_DATA = JSON.stringify(res);
1638                    }
1639                    return tempName;
1640                }
1641                if (param in serviceOpts.interpolateUrl) {
1642                    return serviceOpts.interpolateUrl[param];
1643                }
1644            });
1645        };
1646
1647        // requires a `service` object that defines at least a `url` and `callback`
1648        Location.prototype.runService = function (service, complete) {
1649            var self = this;
1650
1651            // basic check to ensure it resembles a `service`
1652            if (!service || !service.url || !service.callback) {
1653                return;
1654            }
1655
1656            // we call either `getScript` or `makeAsyncRequest` depending on the type of resource
1657            var requestFunction = service.isScript ? getScript : makeAsyncRequest;
1658
1659            var url = this.setupUrl(service);
1660
1661            // both functions have similar signatures so we can pass the same arguments to both
1662            requestFunction(url, function (xhr) {
1663                // if `!xhr`, then `getScript` function was used, so there is no response text
1664                var responseText = xhr ? xhr.responseText : '';
1665
1666                // if the resource is a script, then this function is called after the script has been run.
1667                // if the script is JSONP, then a time defined function `callback_{Date.now}` has already
1668                // been called (as the JSONP callback). This callback sets the __JSONP_DATA property
1669                if (service.__JSONP_DATA) {
1670                    responseText = service.__JSONP_DATA;
1671                    delete service.__JSONP_DATA;
1672                }
1673
1674                // call the service callback with the response text (so it can parse the response)
1675                self.runServiceCallback.call(self, complete, service, responseText);
1676
1677            }, this.options.timeout, service.data, service.headers);
1678
1679            // `service.data` and `service.headers` are optional (they only count if `!service.isScript` anyway)
1680        };
1681
1682        // The service request has run (and possibly has a `responseText`) [no `responseText` if `isScript`]
1683        // We need to run its callback which determines if its successful or not
1684        // `complete` is called on success or failure
1685        Location.prototype.runServiceCallback = function (complete, service, responseText) {
1686            var self = this;
1687            // this is the function that is called if the service uses the async callback in its handler method
1688            var serviceResultHandler = function (asyncResult) {
1689                // if `result` is a valid value, then this function shouldn't really run
1690                // even if it is called by `service.callback`
1691                if (!result) {
1692                    self.onServiceResult.call(self, complete, asyncResult)
1693                }
1694            };
1695
1696            // the function `service.callback` will either extract a country code from `responseText` and return it (in `result`)
1697            // or (if it has to make additional requests) it will call a `done` callback with the country code when it is ready
1698            var result = service.callback(serviceResultHandler, responseText);
1699
1700            if (result) {
1701                this.onServiceResult.call(this, complete, result);
1702            }
1703        };
1704
1705        // This is called with the `result` from `service.callback` regardless of how it provided that result (sync or async).
1706        // `result` will be whatever is returned from `service.callback`. A service callback should provide an object with data
1707        Location.prototype.onServiceResult = function (complete, result) {
1708            // convert result to nodejs style async callback
1709            if (result instanceof Error || (result && result.error)) {
1710                complete.call(this, result, null);
1711            } else {
1712                complete.call(this, null, result);
1713            }
1714        };
1715
1716        // if `err` is set, the next service handler is called
1717        // if `err` is null, the `onComplete` handler is called with `data`
1718        Location.prototype.runNextServiceOnError = function (err, data) {
1719            if (err) {
1720                this.logError(err);
1721
1722                var nextService = this.getNextService();
1723
1724                if (nextService) {
1725                    this.runService(nextService, this.runNextServiceOnError.bind(this));
1726                } else {
1727                    this.completeService.call(this, this.callbackError, new Error('All services failed'));
1728                }
1729            } else {
1730                this.completeService.call(this, this.callbackComplete, data);
1731            }
1732        };
1733
1734        Location.prototype.getCurrentServiceOpts = function () {
1735            var val = this.options.services[this.currentServiceIndex];
1736
1737            if (typeof val == 'string') {
1738                return {name: val};
1739            }
1740
1741            if (typeof val == 'function') {
1742                return val();
1743            }
1744
1745            if (util.isPlainObject(val)) {
1746                return val;
1747            }
1748
1749            return {};
1750        };
1751
1752        // calls the `onComplete` callback after resetting the `currentServiceIndex`
1753        Location.prototype.completeService = function (fn, data) {
1754            this.currentServiceIndex = -1;
1755
1756            fn && fn(data);
1757        };
1758
1759        Location.prototype.logError = function (err) {
1760            var idx = this.currentServiceIndex;
1761            var service = this.getServiceByIdx(idx);
1762
1763            console.error('The service[' + idx + '] (' + service.url + ') responded with the following error', err);
1764        };
1765
1766        function getScript(url, callback, timeout) {
1767            var timeoutIdx, s = document.createElement('script');
1768
1769            s.type = 'text/' + (url.type || 'javascript');
1770            s.src = url.src || url;
1771            s.async = false;
1772
1773            s.onreadystatechange = s.onload = function () {
1774                // this code handles two scenarios, whether called by onload or onreadystatechange
1775                var state = s.readyState;
1776
1777                clearTimeout(timeoutIdx);
1778
1779                if (!callback.done && (!state || /loaded|complete/.test(state))) {
1780                    callback.done = true;
1781                    callback();
1782                    s.onreadystatechange = s.onload = null;
1783                }
1784            };
1785
1786            document.body.appendChild(s);
1787
1788            // You can't catch JSONP Errors, because it's handled by the script tag
1789            // one way is to use a timeout
1790            timeoutIdx = setTimeout(function () {
1791                callback.done = true;
1792                callback();
1793                s.onreadystatechange = s.onload = null;
1794            }, timeout);
1795        }
1796
1797        function makeAsyncRequest(url, onComplete, timeout, postData, requestHeaders) {
1798            var xhr = new (window.XMLHttpRequest || window.ActiveXObject)('MSXML2.XMLHTTP.3.0');
1799
1800            xhr.open(postData ? 'POST' : 'GET', url, 1);
1801
1802            xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
1803            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
1804
1805            if (Array.isArray(requestHeaders)) {
1806                for (var i = 0, l = requestHeaders.length; i < l; ++i) {
1807                    var split = requestHeaders[i].split(':', 2)
1808                    xhr.setRequestHeader(split[0].replace(/^\s+|\s+$/g, ''), split[1].replace(/^\s+|\s+$/g, ''));
1809                }
1810            }
1811
1812            if (typeof onComplete == 'function') {
1813                xhr.onreadystatechange = function () {
1814                    if (xhr.readyState > 3) {
1815                        onComplete(xhr);
1816                    }
1817                };
1818            }
1819
1820            xhr.send(postData);
1821        }
1822
1823        function toError(obj) {
1824            return new Error('Error [' + (obj.code || 'UNKNOWN') + ']: ' + obj.error);
1825        }
1826
1827        return Location;
1828    }());
1829
1830    cc.Law = (function () {
1831
1832        var defaultOptions = {
1833            // Make this false if you want to disable all regional overrides for settings.
1834            // If true, options can differ by country, depending on their cookie law.
1835            // It does not affect hiding the popup for countries that do not have cookie law.
1836            regionalLaw: true,
1837
1838            // countries that enforce some version of a cookie law
1839            hasLaw: ['AT', 'BE', 'BG', 'HR', 'CZ', 'CY', 'DK', 'EE', 'FI', 'FR', 'DE', 'EL', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'SK', '
1839SI', 'ES', 'SE', 'GB', 'UK'],
1840
1841            // countries that say that all cookie consent choices must be revokable (a user must be able too change their mind)
1842            revokable: ['HR', 'CY', 'DK', 'EE', 'FR', 'DE', 'LV', 'LT', 'NL', 'PT', 'ES'],
1843
1844            // countries that say that a person can only "consent" if the explicitly click on "I agree".
1845            // in these countries, consent cannot be implied via a timeout or by scrolling down the page
1846            explicitAction: ['HR', 'IT', 'ES'],
1847        };
1848
1849        function Law(options) {
1850            this.initialise.apply(this, arguments);
1851        }
1852
1853        Law.prototype.initialise = function (options) {
1854            // set options back to default options
1855            util.deepExtend(this.options = {}, defaultOptions);
1856
1857            // merge in user options
1858            if (util.isPlainObject(options)) {
1859                util.deepExtend(this.options, options);
1860            }
1861        };
1862
1863        Law.prototype.get = function (countryCode) {
1864            var opts = this.options;
1865            return {
1866                hasLaw: opts.hasLaw.indexOf(countryCode) >= 0,
1867                revokable: opts.revokable.indexOf(countryCode) >= 0,
1868                explicitAction: opts.explicitAction.indexOf(countryCode) >= 0,
1869            };
1870        };
1871
1872        Law.prototype.applyLaw = function (options, countryCode) {
1873            var country = this.get(countryCode);
1874
1875            if (!country.hasLaw) {
1876                // The country has no cookie law
1877                options.enabled = false;
1878            }
1879
1880            if (this.options.regionalLaw) {
1881                if (country.revokable) {
1882                    // We must provide an option to revoke consent at a later time
1883                    options.revokable = true;
1884                }
1885
1886                if (country.explicitAction) {
1887                    // The user must explicitly click the consent button
1888                    options.dismissOnScroll = false;
1889                    options.dismissOnTimeout = false;
1890                }
1891            }
1892            return options;
1893        };
1894
1895        return Law;
1896    }());
1897
1898    // This function initialises the app by combining the use of the Popup, Locator and Law modules
1899    // You can string together these three modules yourself however you want, by writing a new function.
1900    cc.initialise = function (options, complete, error) {
1901
1902
1903        var law = new cc.Law(options.law);
1904
1905        if (!complete) complete = function () {
1906        };
1907        if (!error) error = function () {
1908        };
1909
1910        cc.getCountryCode(options, function (result) {
1911            // don't need the law or location options anymore
1912            delete options.law;
1913            delete options.location;
1914
1915            if (result.code) {
1916                options = law.applyLaw(options, result.code);
1917            }
1918
1919            complete(new cc.Popup(options));
1920        }, function (err) {
1921            // don't need the law or location options anymore
1922            delete options.law;
1923            delete options.location;
1924
1925            error(err, new cc.Popup(options));
1926        });
1927    };
1928
1929    // This function tries to find your current location. It either grabs it from a hardcoded option in
1930    // `options.law.countryCode`, or attempts to make a location service request. This function accepts
1931    // options (which can configure the `law` and `location` modules) and fires a callback with which
1932    // passes an object `{code: countryCode}` as the first argument (which can have undefined properties)
1933    cc.getCountryCode = function (options, complete, error) {
1934        if (options.law && options.law.countryCode) {
1935            complete({
1936                code: options.law.countryCode
1937            });
1938            return;
1939        }
1940        if (options.location) {
1941            var locator = new cc.Location(options.location);
1942            locator.locate(function (serviceResult) {
1943                complete(serviceResult || {});
1944            }, error);
1945            return;
1946        }
1947        complete({});
1948    };
1949
1950    // export utils (no point in hiding them, so we may as well expose them)
1951    cc.utils = util;
1952
1953    // prevent this code from being run twice
1954    cc.hasInitialised = true;
1955
1956    window.cookieconsent = cc;
1957
1958}(window.cookieconsent || {}));
1959window.addEventListener("load", function() {
1960    var consentType = cookieConsentType;
1961    var position = cookieConsentPosition;
1962    var static = false;
1963    var revokable = (cookieConsentOptOut == 1);
1964    var layout = (consentType == "info") ? "basic-slideout" : "basic";
1965    window.cookieconsent.initialise({
1966        "palette": {
1967            "popup": {
1968                "background": cookieConsentPopupBackgroundColor,
1969                "text": cookieConsentPopupTextColor
1970            },
1971            "button": {
1972                "background": cookieConsentButtonBackgroundColor,
1973                "text": cookieConsentButtonTextColor
1974            },
1975            "deny": {
1976                "background": cookieConsentDisagreeButtonBackgroundColor,
1977                "text": cookieConsentDisagreeButtonTextColor
1978            }
1979        },
1980        "type": consentType,
1981        "layout": layout,
1982        "theme": "edgeless",
1983        "position": position,
1984        "static": static,
1985        "revokable": revokable,
1986        "content": {
1987            "message": cookieConsentMessage,
1988            "dismiss": cookieConsentConfirm,
1989            "deny": cookieConsentDeny,
1990            "allow": cookieConsentConfirm,
1991            "link": cookieConsentLinkText,
1992            "href": cookieConsentUrl,
1993            "optout_text":  cookieConsentOptOutText,
1994            "checkbox_text":  cookieConsentCheckboxText,
1995            "dnt_text":  cookieConsentDoNotTrackSetText
1996        },
1997        "slideout": "<div class='optOut-slideout'><input type='checkbox' name='cc-checkbox' id='cc-checkbox' /><label for='cc-checkbox'>{{checkbox_text}}</label></div>'"
1998
1999    });
2000    var cclink = (document.getElementsByClassName("cc-link")) ? document.getElementsByClassName("cc-link") : [];
2001
2002    for (var i = 0; i < cclink.length; i++) {
2003        cclink[i].style.color = cookieConsentPopupTextColor;
2004    }
2005
2006});

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.