PageSourceSearch

https://landshuter-hochzeit.de/assets/js/doubletaptogo.js,accessib…t.js,colorbox.min.js,swipe.m...-212fa786.js

js landshuter-hochzeit.de collected 2026-10-01 12:19:49 UTC 62,280 bytes, 1,514 lines download raw bytes

1/*
2	By Osvaldas Valutis, www.osvaldas.info
3	Available for use under the MIT License
4*/
5
6
7
8;(function(e,t,n,r){e.fn.doubleTapToGo=function(r){if(!("ontouchstart"in t)&&!navigator.msMaxTouchPoints&&!navigator.userAgent.toLowerCase().match(/windows phone os 7/i))return false;this.each(function(){var t=false;e(this).on("click",function(n){var r=e(this);if(r[0]!=t[0]){n.preventDefault();t=r}});e(n).on("click touchstart MSPointerDown",function(n){var r=true,i=e(n.target).parents();for(var s=0;s<i.length;s++)if(i[s]==t[0])r=false;if(r)t=false})});return this}})(jQuery,window,document);
9/**
10 * Accessibility settings
11 */
12jQuery(document).ready(function() 
13{
14	// Fontsize
15	if( Number( localStorage.getItem('accessibility_fontsize') ) != 0)
16	{
17		jQuery('html,body').addClass('acc_fontsize_'+Number( localStorage.getItem('accessibility_fontsize') ));
18	}	
19	// Default fonts active
20	if( Number( localStorage.getItem('accessibility_default_fonts') ) > 0)
21	{
22		jQuery('html,body').addClass('acc_default_fonts');
23	}
24	// High contrast active
25	if( Number( localStorage.getItem('accessibility_contrast') ) > 0)
26	{
27		jQuery('html,body').addClass('acc_contrast');
28		
29		if( jQuery('link#css_acc_contrast').length < 1 )
30		{
31			jQuery('head').append('<link id="css_acc_contrast" rel="stylesheet" type="text/css" href="files/cto_layout/css/accessibility_widget/acc_contrast.css">');
32		}
33	}
34	// Boldface active
35	if( Number( localStorage.getItem('accessibility_boldface') ) > 0)
36	{
37		jQuery('html,body').addClass('acc_boldface');
38	}
39	// disable_animations
40	if( Number( localStorage.getItem('accessibility_disable_animations') ) > 0)
41	{
42		jQuery('html,body').addClass('acc_disable_animations');
43		
44		if( jQuery('link#css_acc_disable_animations').length < 1 )
45		{
46			jQuery('head').append('<link id="css_acc_disable_animations" rel="stylesheet" type="text/css" href="files/cto_layout/css/accessibility_widget/acc_disable_animations.css">');
47		}
48	}	
49});
50
51// tabmenu
52jQuery(document).ready(function () {
53    let menuItems = jQuery('#accessibility_tabmenu a'); // Alle Links im Tab-Menü
54    let firstItem = menuItems.first(); // Erstes Element
55    let lastItem = menuItems.last(); // Letztes Element
56	
57	menuItems.on('keydown', function (e) {
58        if (e.key === 'Tab' && !e.shiftKey) { // Tab gedrückt, ohne Shift
59            e.preventDefault();
60            if (jQuery(this).is(lastItem)) {
61                firstItem.focus(); // Springe zurück zum ersten Tab-Element
62            } else {
63                jQuery(this).next().focus(); // Gehe zum nächsten Element
64            }
65        } else if (e.key === 'Tab' && e.shiftKey) { // Shift + Tab gedrückt
66            e.preventDefault();
67            if (jQuery(this).is(firstItem)) {
68                lastItem.focus(); // Springe zurück zum letzten Tab-Element
69            } else {
70                jQuery(this).prev().focus(); // Gehe zum vorherigen Element
71            }
72        }
73    });
74});
75
76jQuery(document).ready(function () {
77    jQuery('#top *, \
78       .header *')
79       .attr('tabindex', '-1');
80});
81/*!
82	Colorbox 1.6.4
83	license: MIT
84	http://www.jacklmoore.com/colorbox
85
86	Included patches:
87	* https://github.com/jackmoore/colorbox/pull/832
88*/
89!function(d,a,h){var s,c,u,g,f,p,m,w,l,v,x,y,b,T,r,t,C,H,k,W,I,M,E,P,S,F,K,L,R,$,D,B,n,o={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return d(this).attr("href")},title:function(){return this.title},createImg:function(){var i=new Image,t=d(this).data("cbox-img-attrs");return"object"==typeof t&&d.each(t,function(t,e){i[t]=e}),i},createIframe:function(){var i=a.createElement("iframe"),t=d(this).data("cbox-iframe-attrs");return"object"==typeof t&&d.each(t,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},N="colorbox",O="cbox",_=O+"Element",j=O+"_open",z=O+"_load",A=O+"_c
89omplete",e=O+"_cleanup",q=O+"_closed",U=O+"_purge",G=d("<a/>"),Q="div",J=0,V={};function X(t,e,i){var n=a.createElement(t);return e&&(n.id=O+e),i&&(n.style.cssText=i),d(n)}function Y(){return h.innerHeight?h.innerHeight:d(h).height()}function Z(t){return t.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex="0"]')}function tt(t){return Z(t).first()}function et(t){return Z(t).last()}function it(t,i){i!==Object(i)&&(i={}),this.cache={},this.el=t,this.value=function(t){var e;return void 0===this.cache[t]&&(void 0!==(e=d(this.el).attr("data-cbox-"+t))?this.cache[t]=e:void 0!==i[t]?this.cache[t]=i[t]:void 0!==o[t]&&(this.cache[t]=o[t])),this.cache[t]},this.get=function(t){var e=this.value(t);return d.isFunction(e)?e.call(this.el,this):e}}function nt(t){var e=l.length,i=(F+t)%e;return i<0?e+i:i}function ot(t,e){return Math.round((/%/.test(t)?("x"===e?v.width():Y())/100:1)*parseInt(t,10))}function at(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function rt(t,e){return t.get("retinaUrl")&&1<h.devicePixelRatio?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function ht(t){ht.str!==t&&(c.add(s).removeClass(ht.str).addClass(t),ht.str=t)}function st(t){d(a).trigger(t),G.triggerHandler(t)}var i,lt,dt,ct,ut=(dt=O+"Slideshow_",ct="click."+O,function(){i?I.get("slideshow")||(G.unbind(e,wt),wt()):I.get("slideshow")&&l[1]&&(i=!0,G.one(e,wt),I.get("slideshowAuto")?pt():mt(),t.attr("aria-hidden","false").show())});function gt(){clearTimeout(lt)}function ft(){(I.get("loop")||l[F+1])&&(gt(),lt=setTimeout(B.next,I.get("slideshowSpeed")))}function pt(){t.html(I.get("slideshowStop")).attr("aria-label",I.get("slideshowStop")).unbind(ct).one(ct,mt),G.bind(A,ft).bind(z,gt),c.removeClass(dt+"off").addClass(dt+"on")}function mt(){gt(),G.unbind(A,ft).unbind(z,gt),t.html(I.get("slideshowStart")).attr("aria-label",I.get("slideshowStart")).unbind(ct).one(ct,function(){B.next(),pt()}),c.removeClass(dt+"on").addClass(dt+"off")}function wt(){i=!1,t.attr("aria-hidden","true").hide(),gt(),G.unbind(A,ft).unbind(z,gt),c.removeClass(dt+"off "+dt+"on")}function vt(t){var e;if(!$){if(e=d(t).data(N),function(t){F=0,t&&!1!==t&&"nofollow"!==t?(l=d("."+_).filter(function(){return new it(this,d.data(this,N)).get("rel")===t}),-1===(F=l.index(I.el))&&(l=l.add(I.el),F=l.length-1)):l=d(I.el)}((I=new it(t,e)).get("rel")),!L){L=R=!0,ht(I.get("className")),c.css({visibility:"hidden",display:"block",opacity:""}).attr("aria-hidden","true"),x=X(Q,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),g.css({width:"",height:""}).append(x),M=f.height()+w.height()+g.outerHeight(!0)-g.height(),E=p.width()+m.width()+g.outerWidth(!0)-g.width(),P=x.outerHeight(!0),S=x.outerWidth(!0);var i=ot(I.get("initialWidth"),"x"),n=ot(I.get("initialHeight"),"y"),o=I.get("maxWidth"),a=I.get("maxHeight");I.w=Math.max((!1!==o?Math.min(i,ot(o,"x")):i)-S-E,0),I.h=Math.max((!1!==a?Math.min(n,ot(a,"y")):n)-P-M,0),x.css({width:"",height:I.h}),B.position(),st(j),I.get("onOpen"),W.add(T).hide(),c.attr("aria-hidden","false"),I.get("returnFocus")&&G.one(q,function(){d(I.el).focus()})}var r=parseFloat(I.get("opacity"));s.css({opacity:r==r?r:"",cursor:I.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),I.get("closeButton")?k.html(I.get("close")).attr("aria-hidden","false").appendTo(g):k.appendTo("<div/>"),function(){var t,e,i,n=B.prep,o=++J;K=!(R=!0),st(U),st(z),I.get("onLoad"),I.h=I.get("height")?ot(I.get("height"),"y")-P-M:I.get("innerHeight")&&ot(I.get("innerHeight"),"y"),I.w=I.get("width")?ot(I.get("width"),"x")-S-E:I.get("innerWidth")&&ot(I.get("innerWidth"),"x"),I.mw=I.w,I.mh=I.h,I.get("maxWidth")&&(I.mw=ot(I.get("maxWidth"),"x")-S-E,I.mw=I.w&&I.w<I.mw?I.w:I.mw);I.get("maxHeight")&&(I.mh=ot(I.get("maxHeight"),"y")-P-M,I.mh=I.h&&I.h<I.mh?I.h:I.mh);if(t=I.get("href"),D=setTimeout(function(){b.show()},100),I.get("inline")){var a=d(t).eq(0);i=d("<div>").hide().insertBefore(a),G.one(U,function(){i.replaceWith(a)}),n(a)}else I.get("iframe")?n(" "):I.get("html")?n(I.get("html")):at(I,t)?(t=rt(I,t),K=I.get("createImg"),d(K).addClass(O+"Photo").bind("error."+O,function(){n(X(Q,"Error").html(I.get("imgError")))}).one("load",function(){o===J&&setTimeout(function(){var t;I.get("retinaImage")&&1<h.devicePixelRatio&&(K.height=K.height/h.devicePixelRatio,K.width=K.width/h.devicePixelRatio),I.get("scalePhotos")&&(e=function(){K.height-=K.height*t,K.width-=K.width*t},I.mw&&K.width>I.mw&&(t=(K.width-I.mw)/K.width,e()),I.mh&&K.height>
89I.mh&&(t=(K.height-I.mh)/K.height,e())),I.h&&(K.style.marginTop=Math.max(I.mh-K.height,0)/2+"px"),l[1]&&(I.get("loop")||l[F+1])&&(K.style.cursor="pointer",d(K).bind("click."+O,function(){B.next()})),K.style.width=K.width+"px",K.style.height=K.height+"px",n(K)},1)}),K.src=t):t&&y.load(t,I.get("data"),function(t,e){o===J&&n("error"===e?X(Q,"Error").html(I.get("xhrError")):d(this).contents())})}()}}function xt(){c||(n=!1,v=d(h),c=X(Q).attr({id:N,class:!1===d.support.opacity?O+"IE":"",role:"dialog","aria-hidden":"true","aria-labelledby":"cboxTitle","aria-describedby":"cboxCurrent"}).hide(),s=X(Q,"Overlay").hide(),b=d([X(Q,"LoadingOverlay")[0],X(Q,"LoadingGraphic")[0]]),u=X(Q,"Wrapper"),g=X(Q,"Content").append(T=X(Q,"Title").attr("aria-live","polite"),r=X(Q,"Current"),H=d('<button type="button">previous</button>').attr({id:O+"Previous","aria-hidden":"true"}),C=d('<button type="button">next</button>').attr({id:O+"Next","aria-hidden":"true"}),t=d('<button type="button">start slideshow</button>').attr({id:O+"Slideshow","aria-hidden":"true"}),b),k=d('<button type="button">close</button>').attr({id:O+"Close","aria-hidden":"true"}),u.append(X(Q).append(X(Q,"TopLeft"),f=X(Q,"TopCenter"),X(Q,"TopRight")),X(Q,!1,"clear:left").append(p=X(Q,"MiddleLeft"),g,m=X(Q,"MiddleRight")),X(Q,!1,"clear:left").append(X(Q,"BottomLeft"),w=X(Q,"BottomCenter"),X(Q,"BottomRight"))).find("div div").css({float:"left"}),y=X(Q,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),W=C.add(H).add(r).add(t)),a.body&&!c.parent().length&&d(a.body).append(s,c.append(u,y))}d[N]||(d(xt),(B=d.fn[N]=d[N]=function(e,t){var i=this;return e=e||{},d.isFunction(i)&&(i=d("<a/>"),e.open=!0),i[0]&&(xt(),function(){function t(t){1<t.which||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),vt(this))}return!!c&&(n||(n=!0,C.click(function(){B.next()}),H.click(function(){B.prev()}),k.click(function(){B.close()}),s.click(function(){I.get("overlayClose")&&B.close()}),d(a).bind("keydown."+O,function(t){var e=t.keyCode;L&&I.get("escKey")&&27===e&&(t.preventDefault(),B.close()),L&&I.get("arrowKey")&&l[1]&&!t.altKey&&(37===e?(t.preventDefault(),H.click()):39===e&&(t.preventDefault(),C.click())),L&&I.get("trapFocus")&&9===e&&(1===Z(c).length?t.preventDefault():t.shiftKey?a.activeElement===tt(c)[0]&&(t.preventDefault(),et(c).focus()):a.activeElement===et(c)[0]&&(t.preventDefault(),tt(c).focus()))}),d.isFunction(d.fn.on)?d(a).on("click."+O,"."+_,t):d("."+_).live("click."+O,t)),!0)}()&&(t&&(e.onComplete=t),i.each(function(){var t=d.data(this,N)||{};d.data(this,N,d.extend(t,e))}).addClass(_),new it(i[0],e).get("open")&&vt(i[0]))),i}).position=function(e,t){var i,n,o,a=0,r=0,h=c.offset();function s(){f[0].style.width=w[0].style.width=g[0].style.width=parseInt(c[0].style.width,10)-E+"px",g[0].style.height=p[0].style.height=m[0].style.height=parseInt(c[0].style.height,10)-M+"px"}if(v.unbind("resize."+O),c.css({top:-9e4,left:-9e4}),n=v.scrollTop(),o=v.scrollLeft(),I.get("fixed")?(h.top-=n,h.left-=o,c.css({position:"fixed"})):(a=n,r=o,c.css({position:"absolute"})),!1!==I.get("right")?r+=Math.max(v.width()-I.w-S-E-ot(I.get("right"),"x"),0):!1!==I.get("left")?r+=ot(I.get("left"),"x"):r+=Math.round(Math.max(v.width()-I.w-S-E,0)/2),!1!==I.get("bottom")?a+=Math.max(Y()-I.h-P-M-ot(I.get("bottom"),"y"),0):!1!==I.get("top")?a+=ot(I.get("top"),"y"):a+=Math.round(Math.max(Y()-I.h-P-M,0)/2),c.css({top:h.top,left:h.left,visibility:"visible"}).attr("aria-hidden","false"),u[0].style.width=u[0].style.height="9999px",i={width:I.w+S+E,height:I.h+P+M,top:a,left:r},e){var l=0;d.each(i,function(t){i[t]===V[t]||(l=e)}),e=l}V=i,e||c.css(i),c.dequeue().animate(i,{duration:e||0,complete:function(){s(),R=!1,u[0].style.width=I.w+S+E+"px",u[0].style.height=I.h+P+M+"px",I.get("reposition")&&setTimeout(function(){v.bind("resize."+O,B.position)},1),d.isFunction(t)&&t()},step:s})},B.resize=function(t){var e;L&&((t=t||{}).width&&(I.w=ot(t.width,"x")-S-E),t.innerWidth&&(I.w=ot(t.innerWidth,"x")),x.css({width:I.w}),t.height&&(I.h=ot(t.height,"y")-P-M),t.innerHeight&&(I.h=ot(t.innerHe
89ight,"y")),t.innerHeight||t.height||(e=x.scrollTop(),x.css({height:"auto"}),I.h=x.height()),x.css({height:I.h}),e&&x.scrollTop(e),B.position("none"===I.get("transition")?0:I.get("speed")))},B.prep=function(t){if(L){var e,o="none"===I.get("transition")?0:I.get("speed");x.remove(),(x=X(Q,"LoadedContent").append(t)).hide().appendTo(y.show()).css({width:(I.w=I.w||x.width(),I.w=I.mw&&I.mw<I.w?I.mw:I.w,I.w),overflow:I.get("scrolling")?"auto":"hidden"}).css({height:(I.h=I.h||x.height(),I.h=I.mh&&I.mh<I.h?I.mh:I.h,I.h)}).prependTo(g),y.hide(),d(K).css({float:"none"}),ht(I.get("className")),e=function(){var t,e,i=l.length;function n(){!1===d.support.opacity&&c[0].style.removeAttribute("filter")}L&&(e=function(){clearTimeout(D),b.hide(),st(A),I.get("onComplete")},T.html(I.get("title")).show(),x.show(),1<i?("string"==typeof I.get("current")&&r.html(I.get("current").replace("{current}",F+1).replace("{total}",i)).attr("aria-live","polite").show(),$showNext=I.get("loop")||F<i-1,C[$showNext?"show":"hide"]().html(I.get("next")).attr("aria-hidden",$showNext?"false":"true"),$showPrev=I.get("loop")||F,H[$showPrev?"show":"hide"]().html(I.get("previous")).attr("aria-hidden",$showPrev?"false":"true"),H.is(":focus")||C.is(":focus")||k.is(":focus")||($showPrev?H.focus():$showNext?C.focus():k.focus()),ut(),I.get("preloading")&&d.each([nt(-1),nt(1)],function(){var t=l[this],e=new it(t,d.data(t,N)),i=e.get("href");i&&at(e,i)&&(i=rt(e,i),a.createElement("img").src=i)})):W.hide(),I.get("iframe")?(t=I.get("createIframe"),I.get("scrolling")||(t.scrolling="no"),d(t).attr({src:I.get("href"),class:O+"Iframe"}).one("load",e).appendTo(x),G.one(U,function(){t.src="//about:blank"}),I.get("fastIframe")&&d(t).trigger("load")):e(),"fade"===I.get("transition")?c.fadeTo(o,1,n):n())},"fade"===I.get("transition")?c.fadeTo(o,0,function(){B.position(0,e)}):B.position(o,e)}},B.next=function(){!R&&l[1]&&(I.get("loop")||l[F+1])&&(F=nt(1),vt(l[F]))},B.prev=function(){!R&&l[1]&&(I.get("loop")||F)&&(F=nt(-1),vt(l[F]))},B.close=function(){L&&!$&&(L=!($=!0),st(e),I.get("onCleanup"),v.unbind("."+O),s.fadeTo(I.get("fadeOut")||0,0),c.stop().fadeTo(I.get("fadeOut")||0,0,function(){c.hide().attr("aria-hidden","true"),s.hide(),st(U),x.remove(),setTimeout(function(){$=!1,st(q),I.get("onClosed")},1)}))},B.remove=function(){c&&(c.stop(),d[N].close(),c.stop(!1,!0).remove(),s.remove(),$=!1,c=null,d("."+_).removeData(N).removeClass(_),d(a).unbind("click."+O).unbind("keydown."+O))},B.element=function(){return d(I.el)},B.settings=o)}(jQuery,document,window);
90function Swipe(i,c){function O(){}var l=function(t){setTimeout(t||O,0)},v={addEventListener:!!window.addEventListener,touch:"ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,transitions:function(t){var e,n=["transitionProperty","WebkitTransition","MozTransition","OTransition","msTransition"];for(e in n)if(void 0!==t.style[n[e]])return!0;return!1}(document.createElement("swipe"))};if(i){var h,f,m,o,r,p=i.children[0],x=(c=c||{},parseInt(c.startSlide,10)||0),E=x,g=!1,w=c.speed||300,s=(c.continuous=void 0===c.continuous||c.continuous,{}),a={},b=c.auto||0,t=null,u={},d={},L={handleEvent:function(t){switch(t.type){case"touchstart":this.start(t);break;case"touchmove":this.move(t);break;case"touchend":l(this.end(t));break;case"webkitTransitionEnd":case"msTransitionEnd":case"oTransitionEnd":case"otransitionend":case"transitionend":l(this.transitionEnd(t));break;case"resize":l(D)}c.stopPropagation&&t.stopPropagation()},start:function(t){t=t.touches[0];u={x:t.pageX,y:t.pageY,time:+new Date},r=void 0,d={},p.addEventListener("touchmove",this,!1),p.addEventListener("touchend",this,!1)},move:function(t){var e;1<t.touches.length||t.scale&&1!==t.scale||(c.disableScroll&&t.preventDefault(),e=t.touches[0],d={x:e.pageX-u.x,y:e.pageY-u.y},r=void 0===r?!!(r||Math.abs(d.x)<Math.abs(d.y)):r)||(t.preventDefault(),q(),c.continuous?(I(A(x-1),d.x+f[A(x-1)],0),I(x,d.x+f[x],0),I(A(x+1),d.x+f[A(x+1)],0)):(d.x=d.x/(!x&&0<d.x||x==h.length-1&&d.x<0?Math.abs(d.x)/m+1:1),I(x-1,d.x+f[x-1],0),I(x,d.x+f[x],0),I(x+1,d.x+f[x+1],0)))},end:function(){var t=+new Date-u.time,t=Number(t)<250&&20<Math.abs(d.x)||Math.abs(d.x)>m/2,e=!x&&0<d.x||x==h.length-1&&d.x<0,n=(c.continuous&&(e=!1),d.x<0);r||(t&&!e?(x=n?(c.continuous?(C(A(x-1),-m,0),C(A(x+2),m,0)):C(x-1,-m,0),C(x,f[x]-m,w),C(A(x+1),f[A(x+1)]-m,w),A(x+1)):(c.continuous?(C(A(x+1),m,0),C(A(x-2),-m,0)):C(x+1,m,0),C(x,f[x]+m,w),C(A(x-1),f[A(x-1)]+m,w),A(x-1)),E=g?x%2:x,c.menu&&X(),c.callback&&c.callback(E,h[x])):c.continuous?(C(A(x-1),-m,w),C(x,0,w),C(A(x+1),m,w)):(C(x-1,-m,w),C(x,0,w),C(x+1,m,w))),p.removeEventListener("touchmove",L,!1),p.removeEventListener("touchend",L,!1)},transitionEnd:function(t){parseInt(t.target.getAttribute("data-index"),10)==x&&(b&&P(),c.transitionEnd)&&c.transitionEnd.call(t,E,h[x])}};if(D(),c.menu){var e=c.menu.querySelector(".slider-prev"),n=c.menu.querySelector(".slider-next"),T=c.menu.querySelector(".slider-menu");if(e&&(a.prev=function(t){S(t),q(),W()},s.prev=e,M(s.prev,"click",a.prev)),n&&(a.next=function(t){S(t),q(),z()},s.next=n,M(s.next,"click",a.next)),T){for(var y=0;y<o;y++){var k=document.createElement("b");k.innerHTML="•",k.setAttribute("data-index",y.toString()),y==E&&(k.className="active"),M(k,"click",function(e){return function(t){S(t),q(),N(parseInt(this.getAttribute?this.getAttribute("data-index"):e.attributes["data-index"].nodeValue))}}
90(k)),T.appendChild(k)}s.dots=T}}return Y(),b&&P(),v.addEventListener?(v.touch&&p.addEventListener("touchstart",L,!1),v.transitions&&(p.addEventListener("webkitTransitionEnd",L,!1),p.addEventListener("msTransitionEnd",L,!1),p.addEventListener("oTransitionEnd",L,!1),p.addEventListener("otransitionend",L,!1),p.addEventListener("transitionend",L,!1)),window.addEventListener("resize",L,!1)):window.onresize=function(){D()},{setup:function(){D()},slide:function(t,e){q(),N(t,e)},prev:function(){q(),W()},next:function(){q(),z()},stop:function(){q()},getPos:function(){return E},getNumSlides:function(){return o},kill:function(){q(),p.style.width="",p.style.left="";for(var t=h.length;t--;){var e=h[t];e.style.width="",e.style.left="",v.transitions&&I(t,0,0)}v.addEventListener?(p.removeEventListener("touchstart",L,!1),p.removeEventListener("mousedown",L,!1),p.removeEventListener("webkitTransitionEnd",L,!1),p.removeEventListener("msTransitionEnd",L,!1),p.removeEventListener("oTransitionEnd",L,!1),p.removeEventListener("otransitionend",L,!1),p.removeEventListener("transitionend",L,!1),window.removeEventListener("resize",L,!1)):window.onresize=null;for(var n=s.dots.childNodes;0<n.length;)s.dots.removeChild(n[0]);V(s.prev,"click",a.prev),V(s.next,"click",a.next)}}}function D(){h=p.children;for(var t=0;t<h.length;t++)8==h[t].nodeType&&(p.removeChild(h[t]),--t);o=h.length,h.length<2&&(c.continuous=!1),v.transitions&&c.continuous&&h.length<3&&(p.appendChild(h[0].cloneNode(!0)),p.appendChild(p.children[1].cloneNode(!0)),h=p.children,g=!0),f=new Array(h.length),m=i.getBoundingClientRect().width||i.offsetWidth,p.style.width=h.length*m+"px";for(var e=h.length;e--;){var n=h[e];n.style.width=m+"px",n.setAttribute("data-index",e.toString()),v.transitions&&(n.style.left=e*-m+"px",C(e,e<x?-m:x<e?m:0,0))}c.continuous&&v.transitions&&(C(A(x-1),-m,0),C(A(x+1),m,0)),v.transitions||(p.style.left=x*-m+"px"),i.style.visibility="visible"}function M(t,e,n){v.addEventListener?t.addEventListener(e,n,!1):window.attachEvent&&t.attachEvent("on"+e,n)}function S(t){t.returnValue=!1,t.preventDefault&&t.preventDefault()}function V(t,e,n){v.addEventListener?t.removeEventListener(e,n,!1):window.detachEvent&&t.detachEvent("on"+e,n)}function X(){for(var t=0;t<s.dots.children.length;t++){var e=s.dots.children[t];e.className=parseInt(e.getAttribute?e.getAttribute("data-index"):e.attributes["data-index"].nodeValue)==E?"active":""}}function W(){(c.continuous||x)&&N(x-1)}function z(){(c.continuous||x<h.length-1)&&N(x+1)}function Y(){i.classList.toggle("slider-start",0===x),i.classList.toggle("slider-end",x===h.length-1),c.menu&&(c.menu.classList.toggle("slider-start",0===x),c.menu.classList.toggle("slider-end",x===h.length-1))}function A(t){return(h.length+t%h.length)%h.length}function N(t,e){if(x!=t){if(v.transitions){for(var n,i=Math.abs(x-t)/(x-t),o=(c.continuous&&(n=i,(i=-f[A(t)]/m)!==n)&&(t=-i*h.length+t),Math.abs(x-t)-1);o--;)C(A((x<t?t:x)-o-1),m*i,0);t=A(t),C(x,m*i,e||w),C(t,0,e||w),c.continuous&&C(A(t-i),-m*i,0)}else t=A(t),r=x*-m,s=t*-m,(a=e||w)?(u=+new Date,d=setInterval(function(){var t=+new Date-u;a<t?(p.style.left=s+"px",b&&P(),c.transitionEnd&&c.transitionEnd.call(event,E,h[x]),clearInterval(d)):p.style.left=(s-r)*(Math.floor(t/a*100)/100)+r+"px"},4)):p.style.left=s+"px";var r,s,a,u,d;x=t,E=g?x%2:x,c.menu&&X(),Y(),l(c.callback&&c.callback(E,h[x]))}}function C(t,e,n){I(t,e,n),f[t]=e}function I(t,e,n){t=h[t],t=t&&t.style;t&&(t.webkitTransitionDuration=t.MozTransitionDuration=t.msTransitionDuration=t.OTransitionDuration=t.transitionDuration=n+"ms",t.webkitTransform="translate("+e+"px,0)translateZ(0)",t.msTransform=t.MozTransform=t.OTransform="translateX("+e+"px)")}function P(){null!==t&&clearTimeout(t),t=setTimeout(function(){t=null,z()},b)}function q(){b=0,clearTimeout(t)}}"undefined"!=typeof exports&&((exports="undefined"!=typeof module&&module.exports?module.exports=Swipe:exports).Swipe=Swipe);
91/**
92 * Sicherer Zugriff auf jQuery-Elemente
93 */
94function safeElement(selector, callback) {
95  var el = jQuery(selector);
96  if (el.length && typeof callback === 'function') {
97    callback(el);
98  }
99}
100
101/* =============================================================================
102 * to top link
103 * ========================================================================== */
104jQuery(document).ready(function() {
105  safeElement('.progress-ring__circle', function(progressRing) {
106    var radius = parseFloat(progressRing.attr('r'));
107    if (isNaN(radius)) return;
108
109    var circumference = 2 * Math.PI * radius;
110
111    progressRing.css('stroke-dasharray', circumference);
112    progressRing.css('stroke-dashoffset', circumference);
113
114    function updateProgressRing() {
115      var scrollTop = jQuery(window).scrollTop();
116      var scrollHeight = jQuery(document).height() - jQuery(window).height();
117      var scrollFraction = scrollTop / scrollHeight;
118      var offset = circumference * (1 - scrollFraction);
119      progressRing.css('stroke-dashoffset', offset);
120    }
121
122    jQuery(window).on('scroll', updateProgressRing);
123    updateProgressRing();
124  });
125});
126
127/* =============================================================================
128 * Swiper absichern
129 * ========================================================================== */
130jQuery(document).ready(function() {
131  if (typeof Swiper !== 'undefined') {
132    new Swiper('.swiper-container', {
133      loop: true,
134      pagination: { el: '.swiper-pagination' }
135    });
136  }
137});
138
139/* =============================================================================
140 * mobnav trigger
141 * ========================================================================== */
142 
143jQuery(document).ready(function() 
144{
145	jQuery('.mmenu_trigger').click(function(e) 
146	{
147		var elem = jQuery('#header');
148		if( jQuery('body').hasClass('fixed-header') )
149		{
150			elem = jQuery('#stickyheader');
151		}
152		var delta = elem.position('body').top + elem.height();
153		jQuery('#mmenu').css({
154		    'transition': 'transform 0.6s cubic-bezier(0.1, 0, 0.1, 1)',
155		    'top': delta,
156		    'transform': 'translateY(calc(-100% - ' + delta + 'px))',
157		    'height': 'calc(100% - ' + delta + 'px)',
158		});
159
160	});
161});
162
163/* =============================================================================
164 * Viewport pixel
165 * ========================================================================== */
166jQuery(window).on('load resize', function () 
167{	
168	if (jQuery('#viewport-pixel').length < 1 || jQuery('#viewport-pixel') == undefined)
169	{
170		return;
171	}
172	
173	var val = jQuery('#viewport-pixel').css('opacity');
174	
175	// remove old class
176	jQuery('body').removeClass('viewport_desktop viewport_tablet viewport_mobile');
177
178	// tablet
179	var device = 'desktop';
180	if (val > 0.75)
181	{
182		jQuery('body').addClass('viewport_desktop');
183	}
184	else if (val <= 0.75 && val > 0.5)
185	{
186		jQuery('body').addClass('viewport_tablet');
187		device = 'tablet';
188	}
189	else if (val <= 0.5)
190	{
191		jQuery('body').addClass('viewport_mobile');
192		device = 'mobile';
193	}
194	
195	// fire event
196	jQuery(window).trigger('Eclipse.viewport',{'device':device});
197});
198
199
200/* =============================================================================
201 * Mobile view
202 * ========================================================================== */
203jQuery(document).ready(function() 
204{	
205	if (jQuery('body').hasClass('mobile'))
206	{
207		// set body class
208		jQuery('body').addClass('viewport_mobile');
209		// fire event
210		jQuery(document).trigger('Eclipse.viewport_mobile',{});
211	}
212});
213
214
215/* =============================================================================
216 * IOS workaround for wrong position bug under IOS11,12
217 * ========================================================================== */
218jQuery(document).ready(function() 
219{
220	if( jQuery('body').hasClass('ios') && window.location.hash.toString().length < 1)
221	{
222		jQuery("html, body").animate({scrollTop: 0});
223	} 
224});
225
226/* =============================================================================
227 * PrivacyManager listener
228 * ========================================================================== */
229jQuery(document).on('Privacy.changed', function (event, params)
230{
231	jQuery(document).trigger('Eclipse.user_privacy', params);
232});
233
234jQuery(document).on('Privacy.cleared', function (event)
235{
236	Eclipse_clearPrivacy(true);
237});
238
239
240/* =============================================================================
241 * Eclipse_setPrivacy(intLevel)
242 * @param array||string	Levels of privacy
243 * ========================================================================== */
244function Eclipse_setPrivacy(varLevels)
245{
246	if (typeof (varLevels) == 'Array')
247	{
248		varLevels = varLevels.join(',');
249	}
250	// set local storage
251	localStorage.setItem('user_privacy_settings',varLevels);
252	// fire event
253	jQuery(document).trigger('Eclipse.user_privacy',{'level':varLevels});
254}
255
256
257/* =============================================================================
258 * Eclipse_clearPrivacy(blnReload)
259 * @param boolean	Reload page true/false
260 * ========================================================================== */
261function Eclipse_clearPrivacy(blnReload)
262{
263	if(blnReload == undefined || blnReload == null)
264	{
265		blnReload = true;
266	}
267	
268	// clear local storage
269	localStorage.removeItem('user_privacy_settings');
270	// fire event
271	jQuery(document).trigger('Eclipse.clear_privacy_settings',{});
272	// reload page
273	if(blnReload)
274	{
275		location.reload();
276	}
277}
278
279/* =============================================================================
280 * smartmenu
281 * ========================================================================== */
282jQuery(document).ready(function(){ 
283
284	jQuery('.smartmenu-trigger').click(function(e){
285		e.preventDefault();
286		jQuery('.smartmenu-content').addClass('open');
287		jQuery('.smartmenu').addClass('open');
288		jQuery('body').addClass('no_scroll');
289		jQuery('body').addClass('smartmenu_open');
290	});
291	
292	jQuery('.smartmenu-content .smartmenu-close').click(function(e){
293		e.preventDefault();
294		jQuery('.smartmenu-content').removeClass('open');
295		jQuery('.smartmenu').removeClass('open');
296		jQuery('body').removeClass('no_scroll');
297		jQuery('body').removeClass('smartmenu_open');
298	});
299	
300	jQuery('.smartmenu-content a:not(.submenu)').click(function(e)
301	{
302		if( jQuery(e.target).hasClass('pct_megamenu') )
303		{
304			return false;
305		}
306		
307		// follow link
308		if(jQuery(e.target).attr('target') != '_blank' && jQuery(e.target).attr('href') != "/")
309		{
310			jQuery('.smartmenu-content').removeClass('open');
311			jQuery('body').removeClass('no_scroll');
312			jQuery('body').removeClass('smartmenu_open');
313		}
314	});
315	
316	// open trail content on page load
317	jQuery('.smartmenu-content').find('.trail').addClass('open');
318	jQuery('.smartmenu-content').find('.trail > ul').show();
319});
320
321jQuery(document).ready(function(){ 
322	
323	jQuery('.smartmenu-content .subitems_trigger').on('click', function (e)
324	{
325		e.stopPropagation();
326		var element = jQuery(this).parent('li');
327		if (element.hasClass('open')) {
328			element.removeClass('open');
329			element.find('li').removeClass('open');
330			element.find('ul').slideUp();
331		}
332		else {
333			element.addClass('open');
334			element.children('ul').slideDown();
335			element.siblings('li').children('ul').slideUp();
336			element.siblings('li').removeClass('open');
337			element.siblings('li').find('li').removeClass('open');
338			element.siblings('li').find('ul').slideUp();
339		}
340	});
341
342	// internal redirect pages as container pages
343	jQuery('.smartmenu-content a.forward:not(.click-default), .smartmenu-content a.pct_megamenu:not(.click-default)').click(function (e)
344	{
345		e.preventDefault();
346		e.stopPropagation();
347		jQuery(this).siblings('.subitems_trigger').trigger('click');
348	});
349});
350
351/* =============================================================================
352 * mmenu
353 * ========================================================================== */
354jQuery(document).ready(function(){ 
355	jQuery('.mmenu_trigger, .mmenu_overlay').click(function()
356	{
357		jQuery('body').toggleClass('mmenu_open');
358		jQuery('body').toggleClass('no_scroll');
359		jQuery('.burger').toggleClass('open');
360	});
361});
362
363jQuery(document).keyup(function(e) {
364  if (e.keyCode == 27 && jQuery('body').hasClass('mmenu_open')) 
365  {
366	  jQuery('.burger').removeClass('open');
367	  jQuery('body').removeClass('mmenu_open');
368	  jQuery('body').removeClass('no_scroll');
369  }
370});
371
372/* =============================================================================
373 * mainmenu menuheader (deactivate link)
374 * ========================================================================== */
375jQuery(document).ready(function(){
376	jQuery('.mainmenu .menuheader').removeAttr("href");
377});
378
379/* =============================================================================
380 * mainmenu avoid_click
381 * ========================================================================== */
382jQuery(document).ready(function ()
383{
384	jQuery('.avoid-click > a, .avoid_click > a').click(function (e) { e.preventDefault(); });
385	jQuery('.avoid-click-all a, .avoid_click_all a').click(function (e) { e.preventDefault(); });
386});
387
388/* =============================================================================
389 * mainmenu click opener
390 * ========================================================================== */
391jQuery(document).ready(function() 
392{
393	if( jQuery('body').hasClass('mobile') || jQuery('body').hasClass('viewport_tablet') || jQuery('body').hasClass('viewport_mobile') )
394	{
395		return;
396	}
397
398	var last = null;
399	jQuery('.mainmenu a.click_open').click(function (e)
400	{
401		e.preventDefault();
402		e.stopPropagation();
403		// close last open
404		//if (last != this )
405		//{
406		//	if( jQuery(last).parents() )
407		//	{
408		//		jQuery(last).removeClass('active');
409		//		jQuery(last).next('.megamenu-wrapper, ul').removeClass('active');
410		//		jQuery('.mod_pct_megamenu, .mod_pct_megamenu .item').removeClass('active');
411		//	}
412		//}
413		
414		jQuery('.mainmenu a.pct_megamenu').removeClass('active');
415		jQuery('.mod_pct_megamenu, .mod_pct_megamenu .item').removeClass('active');
416		
417		// toggle
418		if( last == this )
419		{
420			jQuery(this).toggleClass('active');
421			jQuery(this).parent('li.click_open').toggleClass('active');
422			jQuery(this).next('.megamenu-wrapper, ul').toggleClass('active');
423			return;
424		}
425		
426		// close all click_open elements
427		jQuery('.mainmenu .click_open, .mainmenu .click_open ul').removeClass('active');	
428		// open parent click_open elements
429		var parents = jQuery(this).parents('li.click_open');
430		parents.addClass('active');
431		parents.find('> a, > ul').addClass('active');
432		
433		//jQuery(this).toggleClass('active');
434				
435		last = this;
436	});
437});
438
439/* =============================================================================
440 * css3 animation (css/animate.css)
441 * ========================================================================== */
442jQuery(document).ready(function ()
443{
444	var root = jQuery("body");
445	var animationClasses = ["fadeIn", "zoomIn", "fadeInDown","fadeInDownBig","fadeInLeft","fadeInLeftBig","fadeInRight","fadeInRightBig","fadeInUp","fadeInUpBig","rotateIn","zoomIn","slideInDown","slideInLeft","slideInRight","slideInUp","bounceIn","bounceInDown","bounceInLeft","bounceInRight","bounceInUp","imageZoomOut","imageZoomIn"];
446	jQuery.each(animationClasses, function(key, value)
447	{
448		root.find("." + value).each(function()
449		{
450			jQuery(this).removeClass(value).attr("data-animate", value);
451		});
452	});
453	
454	function initObserver( options )
455	{ 
456		// @var IntersectionObserver
457		const objObserver = new IntersectionObserver(function (entries, observer)
458		{
459			entries.forEach(function(entry) 
460			{
461				if (entry.isIntersecting) 
462				{
463					var element = jQuery(entry.target);
464					var animation = element.data("animate");
465					element.removeClass('animate').addClass('animated ' + animation).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function ()
466					{
467						element.removeClass(animation+' animated');
468					});
469					// stop observing
470					objObserver.unobserve( entry.target );
471				}
472			});
473		},options);
474		
475		jQuery('.animate').not('.nowaypoint').each(function(i,elem) 
476		{
477			var element = jQuery(elem);
478			// remove animations for ios or android
479			if(jQuery('body').hasClass('ios') || jQuery('body').hasClass('android')) 
480			{
481				element.removeClass('animate');
482				return true;
483			} 
484			else 
485			{
486				objObserver.observe( element[0] );
487			}
488		});
489	}
490
491	// check if a revolutionslider exists in page
492	if (jQuery(document).revolution != undefined)
493	{
494		jQuery(document).on('RevolutionSlider.loaded', function (e, params)
495		{ 
496			initObserver( { root: null, rootMargin: '0px', threshold: 0.25 } );
497		});
498	}
499	else
500	{
501		initObserver( { root: null, rootMargin: '0px', threshold: 0.25 } );
502	}
503});
504
505/* =============================================================================
506 * #slider min-height
507 * ========================================================================== */
508jQuery(document).ready(setMinHeightToSliderSection);
509jQuery(window).resize(setMinHeightToSliderSection);
510function setMinHeightToSliderSection()
511{
512	if( jQuery('#fix-wrapper').css('position') == 'absolute' )
513	{
514		jQuery('#slider.empty').css('min-height', jQuery('#fix-wrapper').height());
515	}
516	else
517	{
518		jQuery('#slider.empty').css('min-height', '');
519	}
520}
521
522/* =============================================================================
523 * Fixed-header body class
524 * ========================================================================== */
525
526function headerFixed() {
527	var topHeight = jQuery("#top-wrapper").outerHeight();
528	if(topHeight == jQuery(window).innerHeight())
529	{
530		topHeight = jQuery(window).innerHeight() / 3;
531	}
532	
533	if (jQuery(this).scrollTop() > topHeight) {
534		jQuery("body").addClass("fixed-header");
535		
536	} else {
537		jQuery("body").removeClass("fixed-header");
538    }
539};
540	
541jQuery(document).ready(function(){ 
542	headerFixed();
543});
544
545jQuery(window).scroll(function() {
546	headerFixed();
547});
548
549/* =============================================================================
550 * doubleTapToGo scripts/doubletaptogo/
551 * ========================================================================== */
552jQuery(document).ready(function(){
553	if(jQuery('body').hasClass('android') || jQuery('body').hasClass('win') || jQuery('body').hasClass('ios') || jQuery('body').hasClass('viewport_tablet')){
554		jQuery('nav.mainmenu li.submenu:not(.level_2 .megamenu)').doubleTapToGo();
555		jQuery('.smartmenu li.submenu').doubleTapToGo();
556		jQuery('.top_metanavi li.submenu').doubleTapToGo();
557		jQuery('.header_metanavi li.submenu').doubleTapToGo();
558		jQuery('.mod_langswitcher li').doubleTapToGo();
559		
560		jQuery.each(jQuery('.mod_langswitcher li a'),function(i,elem)
561		{
562			jQuery(elem).click(function(e) { e.preventDefault(); window.location.href = jQuery(this).attr('href'); });
563		});
564	}
565});
566
567/* =============================================================================
568 * Add no-scroll class to body when lightbox opens
569 * ========================================================================== */
570jQuery(document).bind('cbox_open',function() {
571	jQuery('body').addClass('no_scroll');
572});
573
574jQuery(document).bind('cbox_closed',function() {
575	jQuery('body').removeClass('no_scroll');
576});
577
578/* =============================================================================
579 * search top trigger
580 * ========================================================================== */
581jQuery(document).ready(function(){
582	jQuery(".ce_search_label").click(function(){
583    	jQuery(".body_bottom .mod_search").addClass("show-search");
584    	jQuery('body').addClass('search_overlay');
585	});
586	jQuery(".body_bottom .close-window").click(function(){
587    	jQuery(".body_bottom .mod_search").removeClass("show-search");
588    	jQuery('body').removeClass('search_overlay');
589	});
590});
591
592/* =============================================================================
593 * scroll to anchors
594 * ========================================================================== */
595jQuery(document).ready(function()
596{
597    jQuery('a.scroll-to-anchor, #main a[href*=\\#], #left a[href*=\\#], #right a[href*=\\#], #slider a[href*=\\#], #footer a[href*=\\#], #bottom a[href*=\\#], .mod_quickmenu a[href*=\\#]').click(function(e)
598	{
599		// return with default behavior
600		if( jQuery(this).hasClass('external-anchor') || jQuery(this).hasClass('not-anchor') )
601		{
602			return true;
603		}
604		
605    	var target = jQuery('#'+jQuery(this).attr("href").split('#')[1]);
606		if(target == undefined || target == null)
607        {
608            return true;    
609        }
610        else if(target.length < 1)
611        {
612	        return true;
613        }
614        
615        e.preventDefault();
616        
617        var stickheaderHeight = 0;
618		if(jQuery('#stickyheader'))
619		{
620			stickheaderHeight = jQuery('#stickyheader').height();
621        }
622		
623		jQuery("html, body").animate({ scrollTop: target.offset().top - stickheaderHeight }, 500, function ()
624		{ 
625			if (jQuery('body').hasClass('mmenu_open'))
626			{
627				jQuery('body').removeClass('mmenu_open');
628				jQuery('body').removeClass('no_scroll');
629				jQuery('.mmenu_trigger .burger').removeClass('open');
630				jQuery('.mmenu_overlay').fadeOut('fast');
631			}	
632		});
633        return false;
634    });
635});
636
637
638/* =============================================================================
639 * force page to start on top "to_top"
640 * ========================================================================== */
641jQuery(document).ready(function ()
642{
643	if (jQuery('body').hasClass('to_top') )
644	{
645		document.body.scrollTop = 0;
646 		document.documentElement.scrollTop = 0;
647		jQuery('html,body').animate({ scrollTop: 0 });
648		// force browsers like chrome to reset last remembered scroll position
649		window.onload = function ()
650		{
651			setTimeout(function(){ scrollTo(0,-1); },0);
652		}
653	}
654});
655
656/* =============================================================================
657 * ce_parallax scripts/parallax/
658 * ========================================================================== */
659jQuery(window).on('Eclipse.viewport',function(e,params)
660{
661	if( params.device == 'desktop' && typeof jQuery(window).stellar == 'function' )
662	{
663		jQuery(window).stellar({ horizontalScrolling: false, responsive: true });
664	}
665});
666
667/* =============================================================================
668 * Parallax elements
669 * ========================================================================== */
670jQuery(document).ready(function ()
671{
672	var elements = jQuery('[class*=parallax-speed]');
673	if (elements.length < 1)
674	{
675		return;
676	}
677
678	elements.addClass('has-parallax');
679	
680	// create a parallax box inside each target element
681	//jQuery.each(elements, function (i,elem)
682	//{
683	//	jQuery(elem).wrapInner('<div class="parallax-inner"></div>');
684	//});
685	
686	const SPEED = 3;
687	const EASING = 50;
688	
689	/**
690	 * Applay the parallax effect on an element
691	 * @param object
692	 * @param integer
693	 */
694	var parallax = function(objElement, intSpeed)
695	{
696		if( intSpeed == undefined || isNaN(intSpeed) )
697		{
698			intSpeed = SPEED;
699		}
700		
701		var pos = objElement.getBoundingClientRect();
702		var posY = pos.y - (pos.height);
703		
704		// fallback when getBoudingClientRect is not available
705		//var posY = jQuery(objElement).offset().top - jQuery(window).scrollTop() - jQuery(objElement).height();
706		
707		var translateY = (posY * (intSpeed / EASING));
708		jQuery(objElement).css({'transform':'translateY('+translateY+'px)'});	
709	}
710	//--
711	
712	var SPEEDS = []; // store easings
713	
714	jQuery(window).scroll(function ()
715	{
716		jQuery.each(elements, function (i,elem)
717		{
718			parallax(elem,SPEEDS[i]);	
719		});
720	});
721	
722	jQuery(document).ready(function ()
723	{
724		jQuery.each(elements, function (i,elem)
725		{
726			for (var z = 1; z <= 10; z++)
727			{
728				if (jQuery(elem).hasClass('parallax-speed-' + z))
729				{
730					SPEEDS[i] = z;
731					return true;
732				}
733			}
734			parallax(elem,SPEEDS[i]);		
735		});
736	});
737});
738
739/* =============================================================================
740 * Accessibility helper for legacy accordions
741 * ========================================================================== */
742jQuery(document).ready(function() 
743{	
744	jQuery.each(jQuery('.ce_accordionStart, .ce_accordionSingle'), function(i,elem)
745	{
746		jQuery(elem).find('.toggler').removeAttr('role');
747		jQuery(elem).find('.toggler').removeAttr('aria-selected');
748		jQuery(elem).find('.toggler').removeAttr('tabindex');
749		jQuery(elem).find('.toggler').attr('aria-disabled',"false");	
750		jQuery(elem).find('.accordion').attr('role','region');
751		jQuery(elem).find('.accordion').removeAttr('aria-hidden');
752	});
753});
754
755
756/* =============================================================================
757 * hyperlink animation
758 * ========================================================================== */
759jQuery(document).ready(function() {
760  jQuery('.ce_hyperlink.animate-style4 .hyperlink_txt,.ce_hyperlink.animate-style5 .hyperlink_txt').each(function() {
761    var $this = jQuery(this);
762    var $span = $this.find('span');
763
764    if ($span.length === 0) {
765      // Wenn kein span vorhanden ist, erstelle eins und füge den gesamten Text ein
766      var text = $this.html();
767      $this.empty().append('<span>' + text + '</span>');
768      $span = $this.find('span');
769    }
770
771    var text = $span.text();
772    var newContent = '';
773
774    // Erstelle neuen Inhalt mit <span> für jedes Zeichen, einschließlich Leerzeichen
775    jQuery.each(text.split(''), function(index, char) {
776      var charSpan = jQuery('<span>').text(char === ' ' ? '\u00A0' : char); // Use non-breaking space for spaces
777      charSpan.css('animation-delay', (index * 0.01) + 's');
778      newContent += charSpan.prop('outerHTML');
779    });
780
781    // Setze neuen Inhalt
782    $span.html(newContent);
783  });
784});
785
786
787/* =============================================================================
788 * parallax footer
789 * ========================================================================== */
790
791jQuery(document).ready(function() {
792    // Prüfe, ob die Klasse 'parallax-footer' im <body> vorhanden ist
793    if (jQuery('body').hasClass('parallax-footer')) {
794        jQuery(window).on('scroll', function() {
795            var scrollTop = jQuery(window).scrollTop(); // Aktuelle Scroll-Position
796            var documentHeight = jQuery(document).height(); // Gesamthöhe des Dokuments
797            var windowHeight = jQuery(window).height(); // Höhe des Fensters
798
799            // Berechne das Scroll-Verhältnis (0 = Anfang, 1 = Ende)
800            var scrollPercent = (scrollTop + windowHeight) / documentHeight;
801
802            // Setze den Start- und Endwert für translateY
803            var startY = -500; // Negative Startposition (z.B. -500px)
804            var endY = 0; // Endposition bei 0px
805
806            // Berechne die aktuelle translateY Position
807            var translateY = startY + (endY - startY) * scrollPercent;
808
809            // Wende die Transformation auf den Footer-Inhalt an
810            jQuery('#footer .inside').css({
811                'transform': 'translateY(' + translateY + 'px)',
812            });
813        });
814    }
815});
816
817/* =============================================================================
818 * offcanvas trigger
819 * ========================================================================== */
820 
821jQuery(document).ready(function(){ 
822	jQuery('.offcanvas-trigger').click(function(){
823		jQuery('#offcanvas-top').toggleClass('offcanvas-top-open');
824		jQuery('.offcanvas-trigger').toggleClass('offcanvas-top-open');
825	});
826});
827
828
829jQuery(document).ready(function()
830{
831	// add hide_optin body class when on imprint or privacy page
832		
833	//--- opt out remove token
834	jQuery('#privacy_optout_link').click(function(e)
835	{
836		e.preventDefault();
837		PrivacyManager.optout(document.location.origin+document.location.pathname);
838	});
839	
840	if(window.location.search.indexOf('clear_privacy_settings') >= 0)
841	{
842		PrivacyManager.optout(document.location.origin+document.location.pathname);
843	}
844	//--
845	
846	var privacy = localStorage.getItem('user_privacy_settings');
847	var expires = Number( localStorage.getItem('user_privacy_settings_expires') );
848	// check lease time
849	var now = new Date().setDate(new Date().getDate());
850	if( now >= expires )
851	{
852		expires = 0;
853	}
854	
855	if(privacy == undefined || privacy == '' || expires <= 0 )
856	{
857		jQuery('#privacy_optin_611').addClass('open');
858		// set privacy level to 0
859		privacy = '0';
860	}
861
862	// set a body class
863	jQuery('body').addClass('privacy_setting_'+privacy.toString().split(',').join('-'));
864	
865	// hide the info
866	jQuery('#ajax_info_611').hide();
867
868	var form = jQuery('#user_privacy_settings_611');
869	var isValid = false;
870	
871	// set focus to autofocus input
872	form.find('input[autofocus]').focus(function(e)
873	{
874		console.log(this);
875		jQuery(this).addClass('focus');
876	});
877
878	// remove readonly from submit when user changes its selection
879	form.find('input[type="checkbox"]').change(function(e)
880	{
881		isValid = false;
882		// required field changed
883		if( form.find('input[required].mandatory').is(':checked') === true )
884		{
885			isValid = true;
886		}
887
888		form.find('input[name="save_settings"]').addClass('readonly');
889		form.find('input[name="save_settings"]').prop('disabled', true);
890		
891		if( isValid === true )
892		{
893			form.find('input[name="save_settings"]').removeClass('readonly');
894			form.find('input[name="save_settings"]').prop('disabled', false);
895		}
896	});
897
898	// allow all
899	form.find('input[name="save_all_settings"]').click(function(e) 
900	{
901		e.preventDefault();
902		// check all checkboxes for user feedback
903		form.find('input[type="checkbox"]').prop('checked',true);
904		// all good
905		isValid = true;
906		// fire save
907		form.find('input[name="save_settings"]').trigger('click');
908	});
909
910	// tech only all
911	form.find('input[name="save_tech_settings"]').click(function(e) 
912	{
913		e.preventDefault();
914		// check required checkbox for user feedback
915		form.find('#cookiebar_privacy_1').prop('checked',true);
916		// all good
917		isValid = true;
918		// fire save
919		form.find('input[name="save_settings"]').trigger('click');
920	});
921
922		
923	form.find('input[name="save_settings"]').click(function(e)
924	{
925		e.preventDefault();
926
927		// check if a required field is still not set
928		if( isValid === false )
929		{
930			return false;
931		}
932
933		// show ajax info
934		jQuery('#ajax_info_611').fadeIn(50);
935		
936		// get the user selection
937		var privacy = PrivacyManager.getUserSelectionFromFormData( form.serializeArray() ).join(',');
938		
939		// set local storage
940		localStorage.setItem('user_privacy_settings',privacy);
941		// set lease time
942		var expires = new Date().setDate(new Date().getDate() + 30);
943		localStorage.setItem('user_privacy_settings_expires',expires);
944		// set a body class
945		jQuery('body').addClass('privacy_setting_'+privacy.toString().split(',').join('-'));
946		// remove negative body class
947		jQuery('body').removeClass('privacy_setting_0');
948		setTimeout(function()
949		{
950			// fire JS event
951			jQuery(document).trigger('Privacy.changed',{'level':privacy});
952
953			// fire form as usal to catch it via php
954			//form.submit();
955		}, 500);
956
957	});
958
959	// help info
960	jQuery(document).ready(function () {
961    let privacyHelpLink = jQuery('#privacy_optin_611 .privacy_help_link');
962    let privacyPopup = jQuery('#privacy_optin_611 .privacy_popup');
963
964    // Klick-Event für das Öffnen/Schließen der Hilfe-Popup
965    privacyHelpLink.click(function () {
966        privacyPopup.toggleClass('view_help');
967    });
968
969    // Fokus + Enter oder Leertaste toggelt ebenfalls die Hilfe-Popup
970    privacyHelpLink.on('keydown', function (event) {
971        if ((event.key === "Enter" || event.key === " ") && jQuery(this).is(':focus')) {
972            privacyPopup.toggleClass('view_help');
973            event.preventDefault(); // Verhindert Standardverhalten (z. B. Scrollen bei Leertaste)
974        }
975    });
976});
977
978
979	// help - scrollToTop
980	jQuery('#privacy_optin_611 .privacy_help_link').click(function()
981	{
982		jQuery("html, body").animate({ scrollTop: 0 });
983		return false;
984	});
985
986});
987
988// listen to Privacy event
989jQuery(document).on('Privacy.changed',function(event,params)
990{
991	if( PrivacyManager.hasAccess(params.level) )
992	{
993		jQuery('#privacy_optin_611').removeClass('open');
994		// send ajax for log file
995		jQuery.ajax(
996		{
997			url:location.href,
998			data:{'user_privacy_settings':params.level,'tstamp':Math.round(new Date().getTime()/1000)}
999		});
1000	}
1001});
1002
1003// Opt-out listener
1004jQuery(document).ready(function()
1005{
1006	jQuery('.privacy_optout_click, .privacy_optout_link').click(function()
1007	{
1008		PrivacyManager.optout();
1009	});
1010});
1011
1012// accessbility focus
1013jQuery(document).ready(function() {
1014       jQuery("#privacy_checkmark_privacy_1").focus();
1015});
1016
1017// accessbility tab-navigation
1018jQuery(document).ready(function () {
1019    jQuery(document).keydown(function (event) {
1020        if (event.key === "Enter" || event.key === " ") { // Enter oder Leertaste
1021            jQuery(".privacy_checkmark:focus").each(function () {
1022                let checkbox = jQuery(this).siblings("input[type='checkbox']");
1023                checkbox.prop("checked", !checkbox.prop("checked"));
1024                event.preventDefault(); // Verhindert unerwünschtes Verhalten (z. B. Scrollen bei Space)
1025            });
1026        }
1027    });
1028});
1029
1030
1031
1032 
1033
1034/**
1035 * Set focus to search input
1036 */
1037jQuery(document).ready(function() 
1038{
1039	jQuery('.ce_search_label').click(function()
1040	{
1041		// wait for element to be in sight app. 800ms tweening delay
1042		setTimeout(function()
1043		{
1044			jQuery('#search_160 input[name="keywords"]').focus();
1045		
1046		}, 800);
1047		
1048		/* add class on click */
1049		jQuery(".body_bottom .mod_search").addClass("show-search");
1050		
1051		/* fadeIn overlay */
1052		jQuery(".body_bottom .mod_search .search-overlay").fadeIn();
1053	});
1054	
1055   /* close button*/
1056	jQuery(".body_bottom .close-window").click(function(){
1057    	jQuery(".body_bottom .mod_search").removeClass("show-search");
1058    	jQuery('body').removeClass('search_overlay');
1059    	jQuery(".search-overlay").fadeOut(300);
1060	});
1061	
1062	jQuery(".search-overlay").click(function(){
1063    	jQuery(".body_bottom .mod_search").removeClass("show-search");
1064    	jQuery('body').removeClass('search_overlay');
1065    	jQuery(".search-overlay").fadeOut(300);
1066	});
1067});
1068
1069jQuery(document).keyup(function(e) {
1070   if (e.keyCode === 27) jQuery(".mod_search").removeClass("show-search");
1071   if (e.keyCode === 27) jQuery("body").removeClass("search_overlay");
1072   if (e.keyCode === 27) jQuery(".search-overlay").fadeOut(300);
1073});
1074
1075
1076 
1077
1078
1079function oversize_126402() {
1080
1081	var contentHeight_126402 = jQuery('.ce_bgimage_126402 .ce_bgimage-inside').height();
1082	var availableHeight = jQuery(window).height() - 100;
1083
1084	if (contentHeight_126402 > availableHeight)
1085	{
1086		jQuery('.ce_bgimage_126402').addClass('oversize');
1087
1088	} else {
1089		jQuery('.ce_bgimage_126402').removeClass('oversize');
1090	}
1091};
1092
1093jQuery(document).ready(function(){
1094    setTimeout(function(){
1095        oversize_126402();
1096    }, 500);
1097});
1098
1099jQuery(window).on("resize", function(){
1100	oversize_126402();
1101});
1102
1103 
1104
1105jQuery(document).ready(function()  {
1106    jQuery('a[data-lightbox]').map(function() 
1107    {
1108      jQuery(this).colorbox(
1109      {
1110        // Put custom options here
1111        loop: false,
1112        rel: jQuery(this).attr('data-lightbox'),
1113        maxWidth: '95%',
1114        maxHeight: '95%'
1115      });
1116   });
1117
1118    jQuery(document).bind('cbox_complete', function(e)
1119    {
1120        if( jQuery.colorbox == undefined )
1121        {
1122          return;
1123        }
1124        var text = jQuery.colorbox.element().next('.caption').text();
1125        if( text )
1126        {
1127          var caption = jQuery('#cboxBottomLeft').append('<div id="cboxCaption">'+text+'</div>');
1128          jQuery('#colorbox').height( jQuery('#colorbox').height() + caption.height()  );
1129        }
1130    });
1131  });
1132
1133
1134// iframe lightbox
1135jQuery(document).ready(function()  
1136{
1137  jQuery('a[data-lightbox-iframe]').map(function() 
1138  {
1139    jQuery(this).colorbox(
1140    {
1141        iframe:true, 
1142        innerWidth:"80%", 
1143        innerHeight:"56%", 
1144        maxWidth:"95%",
1145        maxHeight:'95%',
1146    });
1147  });
1148});
1149
1150// lightbox 50% 50%
1151jQuery(document).ready(function() 
1152{
1153  jQuery('.lightbox50-50 a, a.lightbox50-50').colorbox(
1154    {
1155      // Put custom options here
1156      loop: false,
1157      rel: jQuery(this).attr('data-lightbox'),
1158      width: '50%',
1159      height: '50%'
1160    });
1161});
1162// lightbox 60% 40%
1163jQuery(document).ready(function() 
1164{
1165  jQuery('.lightbox60-40 a, a.lightbox60-40').colorbox(
1166    {
1167      // Put custom options here
1168      loop: false,
1169      rel: jQuery(this).attr('data-lightbox'),
1170      width: '60%',
1171      height: '40%'
1172    });
1173});
1174// lightbox 960px 575px
1175jQuery(document).ready(function() 
1176{
1177  jQuery('.lightbox960 a, a.lightbox960').colorbox(
1178    {
1179      // Put custom options here
1180      loop: false,
1181      rel: jQuery(this).attr('data-lightbox'),
1182      width: '960px',
1183      height: '575px'
1184    });
1185});
1186
1187 
1188
1189/**
1190 * PrivacyManager
1191 */
1192var PrivacyManager =
1193{
1194	/**
1195	 * The privacy localStorage key
1196	 * @var string
1197	 */
1198	privacy_session : 'user_privacy_settings',
1199
1200	/**
1201	 * Get the selected privacy checkbox values from a formular array
1202	 * @param array 
1203	 * @return array
1204	 */
1205	getUserSelectionFromFormData: function (arrSubmitted)
1206	{
1207		if (arrSubmitted == null || arrSubmitted == undefined)
1208		{
1209			return [];
1210		}
1211
1212		var arrReturn = [];
1213		for (var k in arrSubmitted)
1214		{
1215			var v = arrSubmitted[k];
1216			if (v['name'] == 'privacy')
1217			{ 
1218				arrReturn.push(v['value']);
1219			}
1220		}
1221		return arrReturn;
1222	},
1223
1224
1225	/**
1226	 * Access control
1227	 * @param string
1228	 */
1229	hasAccess : function (varSelection)
1230	{
1231		var token = localStorage.getItem( this.privacy_session );
1232		if( token == undefined )
1233		{
1234			return false;
1235		}
1236
1237		// convert to string
1238		if( typeof(varSelection) == 'number' )
1239		{
1240			varSelection = varSelection.toString();
1241		}
1242		// convert to array
1243		if( typeof(varSelection) == 'string' )
1244		{
1245			varSelection = varSelection.split(',');
1246		}
1247
1248		for(i in varSelection)
1249		{
1250			var value = varSelection[i].toString().replace(' ','');
1251			if( token.indexOf( value ) >= 0 )
1252			{
1253				return true;
1254			}
1255		}
1256		return false;
1257	},
1258
1259
1260	/**
1261	 * Clear privacy settings and redirect page
1262	 * @param boolean
1263	 */
1264	optout: function (strRedirect)
1265	{
1266		// clear local storage
1267		localStorage.removeItem(this.privacy_session);
1268		localStorage.removeItem(this.privacy_session+'_expires');
1269		// fire event
1270		jQuery(document).trigger('Privacy.clear_privacy_settings',{});
1271		// log
1272		console.log('Privacy settings cleared');
1273		// redirect
1274		if (strRedirect != undefined)
1275		{
1276			location.href = strRedirect;
1277		}
1278		else
1279		{
1280			location.reload();
1281		}
1282	},
1283
1284
1285	/**
1286	 * Clear all cookies and localstorage
1287	 */
1288	clearAll: function()
1289	{
1290		var host = window.location.hostname;
1291		var domain = host.substring( host.indexOf('.') , host.length);
1292		// clear all cookies
1293		document.cookie.split(";").forEach(function(c) 
1294		{ 
1295			document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"+ ";domain="+host); 
1296			document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"+ ";domain="+domain); 
1297		});
1298		// clear whole localstorage
1299		window.localStorage.clear();
1300		for (var i = 0; i <= localStorage.length; i++) 
1301		{
1302		   localStorage.removeItem(localStorage.key(i));
1303		}
1304		// log
1305		console.log('Cookies and localstorage cleared');
1306	}
1307};
1308
1309
1310
1311/**
1312 * Univerasl optin protection
1313 * @param string	Type of element to be protected e.g. img or iframe etc.
1314 */
1315PrivacyManager.optin = function(strElementType)
1316{
1317	if(strElementType == undefined || strElementType == '')
1318	{
1319		return;
1320	}
1321	// user settings not applied yet
1322	if(localStorage.getItem(this.privacy_session) == undefined || localStorage.getItem(this.privacy_session) == '' || localStorage.getItem(this.privacy_session) <= 0)
1323	{
1324		return
1325	}
1326
1327	// find all scripts having a data-src attribute
1328	var targets = jQuery(strElementType+'[data-src]');	
1329	
1330	if(targets.length > 0)
1331	{
1332		jQuery.each(targets,function(i,e)
1333		{
1334			var privacy = jQuery(e).data('privacy');
1335			if(privacy == undefined)
1336			{
1337				privacy = 0;
1338			}
1339			
1340			var attr = 'src';
1341			if(strElementType == 'link')
1342			{
1343				attr = 'href';
1344			}
1345			else if(strElementType == 'object')
1346			{
1347				attr = 'data';
1348			}
1349			
1350			if(localStorage.getItem('user_privacy_settings').indexOf(privacy) >= 0)
1351			{
1352				jQuery(e).attr(attr,jQuery(e).data('src') );
1353			}
1354		});
1355	}
1356}
1357
1358jQuery(document).on('Privacy.changed', function() 
1359{
1360	PrivacyManager.optin('script');
1361	PrivacyManager.optin('link');
1362	PrivacyManager.optin('iframe');
1363	PrivacyManager.optin('object');
1364	PrivacyManager.optin('img');
1365});
1366
1367jQuery(document).ready(function()
1368{
1369	PrivacyManager.optin('script');
1370	PrivacyManager.optin('link');
1371	PrivacyManager.optin('iframe');
1372	PrivacyManager.optin('object');
1373	PrivacyManager.optin('img');
1374});
1375
1376 
1377
1378jQuery(document).ready(function()  
1379{
1380    //var e = document.querySelectorAll('.content-slider, .slider-control');
1381    jQuery('.content-slider').each(function(i,elem) 
1382    {
1383	    var config = jQuery(elem).attr('data-config');
1384	   	if( config )
1385	    {
1386		    var menu = jQuery(elem).next('.slider-control');
1387		    c = config.split(',');
1388		    var options = 
1389		    {
1390			    'auto': parseInt(c[0]),
1391		        'speed': parseInt(c[1]),
1392		        'startSlide': parseInt(c[2]),
1393		        'continuous': parseInt(c[3])
1394		    }
1395		    // menu
1396		    if ( menu )
1397		    {
1398			    // replace # with slahs
1399			    menu.find('a').attr('href','/');
1400			    options.menu = menu[0];
1401		    }
1402		    new Swipe(elem, options);
1403	     }
1404      });
1405});
1406
1407 
1408
1409jQuery(document).ready(function($) {
1410
1411    const $nav = $('nav.mobile_horizontal');
1412
1413    // Alle Untermenüs beim Start schließen
1414    $nav.find('li.submenu').removeClass('open');
1415
1416
1417    // Toggle-Buttons für alle Untermenüs erzeugen
1418    $nav.find('li.submenu').each(function() {
1419
1420        const $li = $(this);
1421
1422        // Vorhandenen menu-head suchen
1423        let $menuHead = $li.children('.menu-head').first();
1424
1425
1426        // Falls noch kein menu-head vorhanden ist, erzeugen
1427        if ($menuHead.length === 0) {
1428
1429            const $link = $li.children('a').first();
1430
1431            $menuHead = $('<div class="menu-head"></div>');
1432
1433            if ($link.length) {
1434                $link.before($menuHead);
1435                $menuHead.append($link);
1436            }
1437        }
1438
1439
1440        // Toggle-Button nur hinzufügen,
1441        // wenn noch keiner vorhanden ist
1442        if ($menuHead.children('.toggle-btn').length === 0) {
1443
1444            $menuHead.append(
1445                '<button type="button" class="toggle-btn" aria-expanded="false" aria-label="Untermenü ein-/ausklappen">→</button>'
1446            );
1447        }
1448
1449    });
1450
1451
1452    // Aktive Navigationselemente öffnen
1453    $nav.find('li.active').each(function() {
1454
1455        const $activeItem = $(this);
1456
1457        $activeItem.parents('li.submenu').each(function() {
1458
1459            const $parent = $(this);
1460
1461            $parent.addClass('open');
1462
1463            $parent
1464                .children('.menu-head')
1465                .children('.toggle-btn')
1466                .text('↓')
1467                .attr('aria-expanded', 'true');
1468
1469        });
1470
1471    });
1472
1473
1474    // Event vorsichtshalber vorher entfernen,
1475    // damit es nicht mehrfach registriert wird
1476    $nav.off('click.mobileSubmenu', '.toggle-btn');
1477
1478
1479    // Toggle-Logik
1480    $nav.on('click.mobileSubmenu', '.toggle-btn', function(e) {
1481
1482        e.preventDefault();
1483        e.stopPropagation();
1484
1485        const $btn = $(this);
1486        const $li = $btn.closest('li.submenu');
1487        const isOpen = $li.hasClass('open');
1488
1489
1490        // Alle Untermenüs schließen
1491        $nav.find('li.submenu').removeClass('open');
1492
1493        $nav.find('.toggle-btn')
1494            .text('→')
1495            .attr('aria-expanded', 'false');
1496
1497
1498        // Gewähltes Untermenü öffnen,
1499        // sofern es vorher geschlossen war
1500        if (!isOpen) {
1501
1502            $li.addClass('open');
1503
1504            $btn
1505                .text('↓')
1506                .attr('aria-expanded', 'true');
1507
1508        }
1509
1510    });
1511
1512});
1513
1514

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.