

// Breakpoint für Sichtbarkeit Nav-Main-Overlay: lg
// teilweise anders als BS-Breakpoints
var breakpoint_lg = 880;
var breakpoint_xl = 1200;

// var body_width = $("body").width();
var body_width = window.innerWidth;


jQuery(document).ready(function() {

	// Wenn es einen Notfall-Störer gibt, dann diesen Dialog sofort anzeigen
	$("#th-emergency").modal("show");



	// Fancybox (optional)
	//
	// Controls sollen nicht automatisch ausgeblendet werden
	$('.th-lightbox-opener').fancybox({
		titleShow : true,
		idleTime : false,
		afterLoad : function(instance, current) {
    	current.$image.attr('alt', current.opts.$orig.find('img').attr('alt') );
  	}
	});



	// Slick-Slider (optional)
	//
	// https://kenwheeler.github.io/slick/
	// Plugin im Seitenfuß einbinden
	$(".th-slider").slick({
		// Bezeichnung der Pfeile ggf. anpassen
		prevArrow: '<button type="button" class="slick-prev">Vorheriges Element einblenden</button>',
		nextArrow: '<button type="button" class="slick-next">Nächstes Element einblenden</button>',
		rows: 0 // Fix vor v1.8.0-1 https://github.com/kenwheeler/slick/issues/3207
	});

	// fehlende Attribute ergänzen
	$(".th-slider .slick-dots").each(function () {
		$(this).attr("aria-label","Element wählen");
	});

	// Live Region innerhalb Slider
	// https://www.w3.org/TR/wai-aria-1.1/#role_definitions
	$(".th-slider").each(function () {
		$(this).append('<div class="th-slider-liveregion sr-only" role="status" aria-live="polite" aria-atomic="true"></div>');
		let that = $(this);
		$(this).on('afterChange', function(event, slick, currentSlide){
			$(that).find('.th-slider-liveregion').html('Element '+(currentSlide+1)+' eingeblendet');
		});
	});

	// Problem mit Validierung aria-describedby
	// Fix von https://github.com/kenwheeler/slick/issues/2020
	$(".th-slider .th-txt").each(function () {
		var $slide = $(this).parent();
		if ($slide.attr("aria-describedby") != undefined) { // ignore extra/cloned slides
			$(this).attr("id", $slide.attr("aria-describedby"));
		}
	});


	// Blur im IE11 nur über SVG-Filter möglich
	if ($(".th-slider-blur").length > 0) {
		var currImage = $("div.slick-current > img");
		var bgImageUrl = currImage[0].getAttribute("src");
		var target = $(".th-slider-bg");
		target.attr("xlink:href",bgImageUrl);

		$(".th-slider-blur").on("afterChange", function(event, slick, currentSlide){
			var currImage = $("div.slick-current > img");
			var bgImageUrl = currImage[0].getAttribute("src");
			target.attr("xlink:href",bgImageUrl);
		});
	};



	// Hauptnavigation


	// Menü über Nav-Tiny-Button einblenden/ausblenden
	$(".th-nav-tiny button").click(function() {
		if ($(this).attr("aria-expanded") == "false") {
			$(".th-nav-main").show();
			$(this)
				.attr("aria-expanded","true")
				.addClass("th-shownav");
			// Menu aufklappen, wenn auf Unterseiten
			$("[aria-current=page]")
				.closest("li.th-hasnav.th-current")
				.find("button.th-lvl1-trg[aria-expanded=false]")
				.click();
			$(".th-lvl3-lnk[aria-current=page]")
				.closest("li.card")
				.find(".th-lvl2-trg[aria-expanded=false]")
				.click();	
		} else {
			$(".th-nav-main").hide();
			$(this)
				.attr("aria-expanded","false")
				.removeClass("th-shownav");
		}
	});


	// Menüflap über Level1-Menüpunkt einblenden/ausblenden
	// betrifft: alle Menüpunkte Level 1 mit Unterseiten im Desktop-Zustand
	$(".th-nav-main .th-lvl1-lst>li.th-hasnav>button").click(function() {
		var isOn = $(this).closest(".th-hasnav").hasClass("th-shownav");
		// Bedeutung 1: Wenn aktuelles Menü geöffnet wird, dann alle anderen Schließen
		// Bedeutung 2: Aktuelles offenes Menü über Quermenübutton schließen
		$(".th-nav-main .th-lvl1-lst>li.th-hasnav").removeClass("th-shownav");
		$(".th-nav-main .th-lvl1-lst>li.th-hasnav>button").attr("aria-expanded","false");
		if (!isOn) { 
			$(this).closest(".th-hasnav").addClass("th-shownav");
			$(this).attr("aria-expanded","true");
			$(this).next(".th-nav-flap").find(".th-nav-inner").addClass("show");
		}
	});



	$(window).bind("resize", function() {
		var body_width = window.innerWidth;
		if (body_width < (breakpoint_lg)) { // Mobil
		} else { // Desktop
			$("#th-nav-main").show();
		};
	});


	// Menü ausblenden
	// a) beim Verlassen durch Fokus außerhalb
	// Desktop
	$(".th-hasnav .th-nav-close-flap button").focusout(function(){
		$(this).closest("li.th-hasnav").removeClass("th-shownav");
		$(".th-nav-main .th-lvl1-lst>li.th-hasnav>button").attr("aria-expanded","false");
	});
	// Mobil
	$(".th-nav-main .th-nav-close-menu button").focusout(function(){
		$(".th-nav-main").hide();
		$(".th-nav-tiny button")
			.focus()
			.removeClass("th-shownav")
			.attr("aria-expanded","false");
	});


	// b) über ESC
	$(document).keyup(function(e) {
		if (e.keyCode == 27) { // escape key maps to keycode `27`
			if (body_width < (breakpoint_lg)) { // Mobil
				$(".th-nav-main").hide();
				$(".th-nav-tiny button")
					.focus()
					.removeClass("th-shownav")
					.attr("aria-expanded","false");
			} else { // Desktop
				$(".th-nav-main .th-lvl1-lst>li.th-shownav>button").focus();
				$(".th-nav-main .th-lvl1-lst>li.th-hasnav").removeClass("th-shownav");
				$(".th-nav-main .th-lvl1-lst>li.th-hasnav>button").attr("aria-expanded","false");
			}
		}
	});
	// c) über Schließen-Button im Menü
	// Desktop
	$(".th-nav-close-flap>button").click(function() {
		$(".th-nav-main .th-lvl1-lst>li.th-shownav>button").focus();
		$(this).closest("li.th-hasnav").removeClass("th-shownav");
		$(".th-nav-main .th-lvl1-lst>li.th-hasnav>button").attr("aria-expanded","false");
	}); 
	// Mobil
	$(".th-nav-close-menu>button").click(function() {
		$(".th-nav-main").hide();
		$(".th-nav-tiny button")
			.focus()
			.removeClass("th-shownav")
			.attr("aria-expanded","false");
	});
	

	// Menu aufklappen, wenn auf Unterseiten
	$(".th-lvl1-btn").click(function() {
		if ($(this).attr("aria-expanded") == "true") {
			$(".th-lvl3-lnk[aria-current=page]")
				.closest("li.card")
				.find(".th-lvl2-trg[aria-expanded=false]")
				.click();
		}
	});



	// Bootstrap Dropdowns
	//
	// Multi-Level-Support

	$(".th-dropdown-inner .dropdown-toggle").click(function(e) {
		$(".th-dropdown-menu-inner").not($(this).parent().next(".th-dropdown-menu-inner")).hide("fast");
		$(this).parent().next(".th-dropdown-menu-inner").toggle("fast");
		if ($(this).attr("aria-expanded") == "false") {
			$(this).attr("aria-expanded","true");
		} else {
			$(this).attr("aria-expanded","false");
		}
		e.stopPropagation();
		e.preventDefault();
	});

	//Dropdowns mit ESC ausblenden, wenn Focus innerhalb
	$(document).keyup(function(e) {
		if (e.keyCode == 27) {
			$(':focus').closest(".dropdown.show").find("button.dropdown-toggle").click().focus();
		}
	});

});
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


jQuery(document).ready(function() {
      $('a[href$=".pdf"]').each(function(){
        $(this).attr("target", "_blank");
      });

      $('a#toplink').on( "click", function(e) { 
          e.stopPropagation();
          e.preventDefault();
          $('html, body').animate({ scrollTop: 0 }, 'fast');
      });

    /*notice for IE*/
    //userAgent in IE7 WinXP returns: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
    //userAgent in IE11 Win7 returns: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

    if (navigator.userAgent.indexOf('MSIE') != -1)
        var detectIEregexp = /MSIE (\d+\.\d+);/ //test for MSIE x.x
    else // if no "MSIE" string in userAgent
        var detectIEregexp = /Trident.*rv[ :]*(\d+\.\d+)/ //test for rv:x.x or rv x.x where Trident string exists

    if (detectIEregexp.test(navigator.userAgent)) { //if some form of IE        
          //document.html.classList.add("outdated-ie");      
          var root = document.getElementsByTagName( 'html' )[0];
          root.setAttribute( 'class', 'outdated-ie' );
          document.getElementById("ienotice").style.display = "block";     
                              
        // hinweis über esc ausblenden        
        $(document).keyup(function(e) {
          if (e.keyCode == 27) { // escape key maps to keycode `27`                  
            document.getElementById("ienotice").style.display = "none";           
          }
        });
    }
    else {
        //console.log("n/a");
    }

      //insert bootstrap5 classes for image ratio and embed ratio
$(".th-pic.ratio[class*='th-pic-']").each(function() {  
  this.className = this.className.replace("th-pic-", "ratio-");
  this.className = this.className.replace("by", "x");  
});

$(".ratio[class*='embed-']").each(function() {  
  this.className = this.className.replace("embed-responsive-", "ratio-");
  this.className = this.className.replace("by", "x");  
});

    // Open all urls that don't belong to our domain in a new window or tab
      $("a[href^='http:']:not([href*='" + window.location.host + "'])").each(function(){
        $(this).attr("target", "_blank");
      });

      /**mega-slider**/
      $(".th-slider-mega .frame-type-shortcut").addClass("th-slider-wrapper");
      $(".th-slider-mega .frame-type-shortcut .frame-type-header h3").addClass("th-hdl h2");
      $(".th-slider-mega .frame-type-shortcut div[data-ce-columns=3]").addClass("th-gallery row");
      $(".th-slider-mega .frame-type-shortcut div[data-ce-columns=3] figure").addClass("col-4");
        

      /*pfeile im bilder-teaser-slider*/
      $(".th-slider.th-tiles-slider .slick-prev").prepend( "<i class='fas fa-angle-left' aria-hidden='true'></i>" );
      $(".th-slider.th-tiles-slider .slick-next").prepend( "<i class='fas fa-angle-right' aria-hidden='true'></i>" );


        $(window).on("resize, scroll",function(){       
          if ($(window).scrollTop()==0) {
            $(".th-nav-sticky button").attr("aria-expanded","false");
            $(".th-nav-main").attr("aria-expanded","false");
            $(".th-nav-sticky button").removeClass("th-shownav");          
            $(".th-nav-main").removeClass("collapse show");  
            $(".sticky-top").removeClass("navbar-transition");
            $(".th-nav-main").show();
            $(".frame-type-menu_section").removeClass("sticky-top-100");
            if( ($(".th-nav-main").attr("aria-expanded")=="false")) {
              $( ".th-nav-flap" ).css("height", "inherit");
              $( ".th-nav-flap" ).css("max-height", "inherit");
              $( ".th-nav-main > .th-container" ).css("height", "inherit");
              $( ".th-nav-main > .th-container" ).css("max-height", "inherit");
            } 
            if( ($(".sticky-top button").attr("aria-expanded")=="false") && (window.innerWidth < 880) ) {
                $(".th-nav-main").hide();
            }
          } else {        
            if ($(window).scrollTop()>0) {
              $(".sticky-top").addClass("navbar-transition");
              $(".frame-type-menu_section").addClass("sticky-top-100");
              if( ($(".th-nav-main").attr("aria-expanded")=="false") && $(".sticky-top").hasClass("navbar-transition")) {
                $(".th-nav-main").hide();
                $( ".th-nav-flap" ).css("height", "inherit");                
                $( ".th-nav-flap" ).css("max-height", "inherit");
              }
            } else {
              $(".sticky-top").removeClass("navbar-transition");
              $(".th-nav-main").hide();
              $(".frame-type-menu_section").removeClass("sticky-top-100");
            }
           }
        });      

        //calc window-height and set height to dropdown menu
        $( "#th-nav-main .th-lvl1-btn" ).on( "click", function() {
          var win_height = $( window ).height()-300;
          $( ".th-nav-main > .th-container" ).css("height", "inherit");
          if ($(".th-header").is('.navbar-transition')){
            //hamburger            
            $( ".th-nav-flap" ).css("max-height", "inherit");
          } else {
            //megamenu            
            $( ".th-nav-flap" ).css("max-height", win_height);
          }
        });

        //calc window-height and set height to hamburger dropdown menu
        $( ".navbar-toggler" ).on( "click", function() {
          $( ".th-nav-flap" ).css("height", "inherit");
          if ($(".th-header").is('.navbar-transition')){
            //hamburger                   
            var win_height_ham = $( window ).height()-200;
            $( ".navbar-transition .th-nav-main > .th-container" ).css("max-height", win_height_ham);
          }

          if ($(".th-header").is('.mobile')){
            //hamburger mobile                  
            var win_height_ham = $( window ).height()-100;
            $( ".mobile .th-nav-main > .th-container" ).css("height", win_height_ham);
          }          
        });        


        $(window).on('orientationchange', function() {
              

              $( ".th-nav-flap" ).css("height", "inherit");
              $( ".th-nav-main > .th-container" ).css("height", "inherit");

              if ($(".th-header").is('.navbar-transition')){
                //hamburger                   
                var win_height_ham = $( window ).height()-200;
                $( ".navbar-transition .th-nav-main > .th-container" ).css("max-height", win_height_ham);
              }

              if ($(".th-header").is('.mobile')){
                //hamburger mobile                  
                var win_height_ham = $( window ).height()-100;
                $( ".mobile .th-nav-main > .th-container" ).css("height", win_height_ham);
              } 

               $(window).one('resize', function() {

                if (window.innerWidth < 880) {
                  $(".th-header").addClass("mobile");
                  $(".th-nav-main").hide();  
                } else {
                  $( ".th-nav-main > .th-container" ).css("height", "inherit");
                  $(".th-header").removeClass("mobile");
   
                  $(".th-nav-main").show();   
                }
              });       
        });


        // Menü über Nav-sticky-Button einblenden/ausblenden
          $(".th-nav-sticky button").click(function() {
            if ($(this).attr("aria-expanded") == "true") {
              $(".th-nav-main").show();
              $(".th-nav-main").attr("aria-expanded","true");
              $(this)
                .attr("aria-expanded","true")
                .addClass("th-shownav");
            } else {
              $(".th-nav-main").hide();
              $(".th-nav-main").attr("aria-expanded","false");
              $(this)
                .attr("aria-expanded","false")
                .removeClass("th-shownav");
            }
          });      

        if (window.innerWidth < 880) {
          $(".th-header").addClass("mobile");
        }
      
        if($(".frame-default").hasClass("frame-type-uploads")){
            $(this).find("h2").addClass("th-lst-head");
        } 

        var headlines = [  'H6', 'H5', 'H4', 'H1', 'H2', 'H3'];
        //set external link layout
        $('.th-content a[target="_blank"]:not(:has(img, i)), .th-content .ce-uploads a:not(:has(img)), .th-content .target-blank a:not(:has(img)), .th-slider .article a[target="_blank"].more').each(function(){
                $(this).attr('target','_blank');
                var nodeName = $(this).parent().prop("tagName");
                
                if(jQuery.inArray(nodeName, headlines) == -1) {
                var href= $(this).attr("href");
                var extension = href.substr( (href.lastIndexOf('.') +1) ).toLowerCase();

                    switch(extension) {
                        case 'zip':
                        case 'rar':
                            $(this).prepend('<i class="fas fa-download" aria-hidden="true"></i>');
                            break;                                                  
                        case 'xls':
                        case 'xlsx':
                            $(this).prepend('<i class="fas fa-file-excel" aria-hidden="true"></i>');
                            break;                                                 
                        case 'doc':
                        case 'docx':
                            $(this).prepend('<i class="fas fa-file-word" aria-hidden="true"></i>');
                            break;   
                        case 'ppt':
                        case 'pptx':
                            $(this).prepend('<i class="fas fa-file-powerpoint" aria-hidden="true"></i>');
                            break;                                                                                                        
                        case 'pdf':
                            $(this).prepend('<i class="fas fa-file-pdf" aria-hidden="true"></i>');
                            break;
                        case 'jpg':
                        case 'jpeg':
                        case 'png':
                        case 'gif':
                        case 'JPG':
                        case 'JPEG':
                            $(this).prepend('<i class="fas fa-file-image" aria-hidden="true"></i>');
                            break;  
                        case 'mp3':
                        case 'wma':
                        case 'wav':
                            $(this).prepend('<i class="fas fa-file-audio" aria-hidden="true"></i>');
                            break;      
                        case 'mov':
                        case 'mp4':
                        case 'wmv':
                        case 'avi':                        
                            $(this).prepend('<i class="fas fa-file-video" aria-hidden="true"></i>');                            
                            break;                                                                                
                        default:                        
                           $(this).prepend('<i class="fas fa-external-link-alt" aria-hidden="true"></i>');
                    }
                }
         });  

        //set mailto-link layout
        $('.th-content a[href^="mailto:"]').prepend('<i class="fas fa-envelope" aria-hidden="true"></i>');         
    

        $("a.fancybox").fancybox();

        if($(".powermail_fieldwrap_type_text").hasClass("alert-info")){
            $(".powermail_fieldwrap_type_text").addClass("alert layout1");
        }     

        //replace data-aria attributes from f.link with correct aria
        $("[data-aria-label]").each(function () {
                var label = $(this).attr("data-aria-label");
                $(this).attr("aria-label" , label);
                $(this).removeAttr("data-aria-label");
            });    

        $("[data-aria-current]").each(function () {
                var current = $(this).attr("data-aria-current");
                $(this).attr("aria-current" , current);
                $(this).removeAttr("data-aria-current");
            });                 

        if( $(".th-kvsl h1")) $(".th-kvsl img").attr("aria-labelledby", "h1");        


        if( $( '.th-video .ratio' ).length > 0 ) {

            $('.video-config').click(function() {                  
                $('.video-config-box').toggle();

                $(".video-config-box input:checkbox").change(function() {
                    var ischecked= $(this).is(':checked');
                    if(!ischecked) {
                      var cname = 'th-youtube-video';
                      var d = new Date(); //Create an date object
                      d.setTime(d.getTime() - (1000*60*60*24)); //Set the time to the past. 1000 milliseonds = 1 second
                      var expires = "expires=" + d.toGMTString(); //Compose the expirartion date                      
                      window.document.cookie = cname+"="+"; "+expires+"; path=/"; //Set the cookie with name and the expiration date

                      setTimeout(function(){
                        location.reload();
                      },1000);
                    }
                });

            }); 



            if($.cookie("th-youtube-video")=="1") {
                
                $( '.th-video .ratio' ).each( function() {
                    v_wrapper = $( this );
                    v_trigger = $( this ).find( '.video_trigger');
                    v_trigger.hide();
        
                    v_wrapper.children( '.video_layer' ).show().children( 'iframe' ).attr( 'src', 'https://www.youtube-nocookie.com/embed/' + v_trigger.attr( 'data-source' ) + '?rel=0&controls=1&showinfo=0&autoplay=0' ).attr('title', v_trigger.attr( 'data-title' ));
                    $('.video-config' ).show();
                    $('.video-config-box input:checkbox').prop('checked', true);                    
                });

            } else {
                
                $( '.th-video .ratio' ).each( function() {
                    _wrapper = $( this );
                    
                    _wrapper.children( '.video_trigger' ).children('.th-video-hinweis').children( 'input[type="button"]' ).click( function() {                  
                                                                   
                        $.cookie("th-youtube-video", "1", { path: '/', expires: 356 });      
                                
                        $( '.th-video .ratio' ).each( function() {
                            v_wrapper = $( this );
                            v_trigger = $( this ).find( '.video_trigger');
                            v_trigger.hide();
                
                            v_wrapper.children( '.video_layer' ).show().children( 'iframe' ).attr( 'src', 'https://www.youtube-nocookie.com/embed/' + v_trigger.attr( 'data-source' ) + '?rel=0&controls=1&showinfo=0&autoplay=0' ).attr('title', v_trigger.attr( 'data-title' ));

                            $('.video-config' ).show();
                            $('.video-config-box input:checkbox').prop('checked', true);                            
                        });                                      

                    });
                });
             }
        }    
    
    $('form.date-menu').on('submit', function(e) {
        e.preventDefault;
        
        //console.log('switching month');
        
        var url = $(this).find('select').val();
        if(url) {
            console.log('    success');
            location.href = url;
        }
        
        return false;
    });
    
    // On every re-initialization
//    $('.th-slider-special-sub').on('init, reInit', function(event, slick){
//        var maxWidth = $(slick).width();
//        maxWidth = Math.ceil((maxWidth - 100) / 5);
//        $(slick).find('.slick-slide').css('max-width', maxWidth);
//        console.info('~~~~~ maxWidth=', maxWidth);
//    });
    $('.th-slider-special-sub').on('breakpoint', function(event, slick, breakpoint){
        var maxWidth = $(slick).width();
        maxWidth = Math.ceil((maxWidth - 100) / 5);
        $(slick).find('.slick-slide').css('max-width', maxWidth);
        //console.info('~~~~~ maxWidth=', maxWidth);
    });
    
    $('.accordion.hide .collapse').collapse("hide");
    $('.accordion.show li:first-child .collapse').collapse("show");

/*var buttonsContainer = $('.shariff');
new Shariff(buttonsContainer, {
    mailUrl: 'mailto:info@XXX.de',
});
*/

  
  if($('#contentOnePage').length) {
      var onePageContents = $('#contentOnePage section.th-box').length;
      var menuLinks = $('#th-nav-main li > a');
      var url = window.location.href.split("#")[0];
      $('#contentOnePage section.th-box').each(function(index) {
          var link1 = '';
          var link2 = '';
         if(index==0) {
             link1 = '<a class="th-nav-page-link" href="'+url+'#th-top" aria-label="einen Abschnitt nach oben"><i class="fas fa-arrow-up" aria-hidden="true"></i></a>';
         } else {
             link1 = '<a class="th-nav-page-link" href="'+$(menuLinks[index-1]).attr('href')+'" aria-label="einen Abschnitt nach oben"><i class="fas fa-arrow-up" aria-hidden="true"></i></a>';
         }
         var new_id = $(this).attr('aria-label').toLowerCase().trim().replace(/\s+/g, "-").replace(/ä/g, 'ae').replace(/ö/g, 'oe').replace(/ü/g, 'ue').replace(/ß/g, 'ss');
         var content = '<nav class="th-nav-page" aria-label="Sprunglinks zu Abschnitten" id="'+new_id+'"><ul><li>'+link1+'</li>';
         for (i = 0; i < onePageContents; i++) {
             if(i==index) {
                 content += '<li><a href="'+$(menuLinks[i]).attr('href')+'" aria-label="Abschnitt '+(i+1)+'" class="th-nav-page-indicator th-current"></a></li>';
             } else {
                 content += '<li><a href="'+$(menuLinks[i]).attr('href')+'" aria-label="Abschnitt '+(i+1)+'" class="th-nav-page-indicator"></a></li>';
             }
             
         }
         if(index < (onePageContents-1)) {
             link2 = '<a class="th-nav-page-link" href="'+$(menuLinks[index+1]).attr('href')+'" aria-label="einen Abschnitt nach unten"><i class="fas fa-arrow-down" aria-hidden="true"></i></a>';
         } else {
             link2 = '<span class="th-nav-page-link" disabled=""><i class="fas fa-arrow-down" aria-hidden="true"></i></span>';
         }
         content += '<li>'+link2+'</li>';
         
         content += '</ul></nav>';
         
         $(this).before(content);
      });
  }

});

var tsk_map;
var tsk_map_layers = {};
$(document).ready(function(){
	if($('.tx-tsk-map').length) {
		$('#tsk-map-filter-body').hide();

		// remove the shadow pane (otherwise each shadow image is read out)
		$('.leaflet-shadow-pane').remove();
			
		// prevent screen readers from reading out each map tile
		$('.leaflet-tile-container img, .leaflet-shadow-pane img').attr('role','presentation').attr('alt','');

		tsk_map = L.map('tsk-map', {zoomControl:false}).setView([tsk_map_lat,tsk_map_lng], tsk_map_zoom);

		L.tileLayer('https://sgx.geodatenzentrum.de/wmts_topplus_web_open/tile/1.0.0/web_grau/default/WEBMERCATOR/{z}/{y}/{x}.png', {
			maxZoom: 18,
			attribution: '&copy; <a href="https://www.bkg.bund.de" target="_blank">Bundesamt f&uuml;r Kartographie und Geod&auml;sie</a> 2021, <a href="https://sg.geodatenzentrum.de/web_public/Datenquellen_TopPlus_Open.pdf" target="_blank">Datenquellen</a>',
			zoom: 9,
			center: [tsk_map_lat,tsk_map_lng]
		}).addTo(tsk_map);
		
		new L.Control.Zoom({ position: 'topright' }).addTo(tsk_map);

		tsk_map.createPane('districts');
		tsk_map.getPane('districts').style.zIndex = 299;
			
		var district_boundary = new L.geoJson(null,{
			style: function (feature) {
				return {
					fillColor: '#0076a6',
					weight: 2,
					opacity: 1,
					color: '#0076a6',
					//dashArray: '3',
					fillOpacity: 0.05,
					pane: 'districts'
				};
			}
		});
		district_boundary.addTo(tsk_map);
		
		var groupAreas = L.featureGroup().setZIndex(300);
		tsk_map.addLayer(groupAreas);
		
		var groupRadius = L.featureGroup().setZIndex(301);
		tsk_map.addLayer(groupRadius);
		
		var groupRoute = L.featureGroup().setZIndex(302);
		tsk_map.addLayer(groupRoute);
		var groupRouteMouseOver = L.featureGroup().setZIndex(303);
		tsk_map.addLayer(groupRouteMouseOver);
		
		var groupPoint = L.featureGroup().setZIndex(304);
		tsk_map.addLayer(groupPoint);
		
		if(tsk_map_landkreise!==undefined && tsk_map_landkreise) {
			$.ajax({
				dataType: "json",
				url: "/typo3conf/ext/tsk_map/Resources/Public/th.geojson",
				success: function(data) {
					$(data.features).each(function(key, data) {
						district_boundary.addData(data);
					});
				},
				error: function(error) {
				}
			});
		}
		
		if(tsk_map_informations!==undefined) {
			if(tsk_map_informations.Area!==undefined && tsk_map_informations.Area.length){
				$(tsk_map_informations.Area).each(function(key, data) {
					let marker = L.polygon(data.coordinates, {
						color: data.color,
						opacity: data.opacity,
						weight: data.weight,
						fillColor: data.color,
						fillOpacity: data.opacity
					}).addTo(groupAreas);
					marker._path.setAttribute('tabindex', '0');
					marker._path.setAttribute('aria-label', 'Bereich');
					if(data.info) {
						marker.bindPopup(data.info);
					}
					tsk_map_layers[data.id] = [marker];
					//$('#tsk-map-sr').append('<li id="tsk-map-sr-el-'+data.id+'" role="listitem" class="sr-only sr-only-focusable" aria-label="Bereich" tabindex="0">'+data.info+'</li>');
				});
			}
			if(tsk_map_informations.Route!==undefined && tsk_map_informations.Route.length){
				$(tsk_map_informations.Route).each(function(key, data) {
					let marker = L.polyline(data.coordinates, {
						color: data.color,
						opacity: data.opacity,
						width: data.weight,
					}).addTo(groupRoute);
					marker._path.setAttribute('tabindex', '0');
					marker._path.setAttribute('aria-label', 'Strecke');
					if(data.info) {
						let markerMouseOver = L.polyline(data.coordinates, {
							color: data.color,
							opacity: 0,
							weight: 6,
						}).addTo(groupRouteMouseOver);
						markerMouseOver.bindPopup(data.info);
						markerMouseOver.on('mouseover', function(e) {
							var layer = e.target;
							layer.setStyle({
								opacity: 0.5,
							});
						});
						markerMouseOver.on('mouseout', function(e) {
							var layer = e.target;
							layer.setStyle({
								opacity: 0,
							});
						});
						tsk_map_layers[data.id] = [marker, markerMouseOver];
						//$('#tsk-map-sr').append('<li id="tsk-map-sr-el-'+data.id+'" role="listitem" class="sr-only sr-only-focusable" aria-label="Strecke" tabindex="0">'+data.info+'</li>');
					}
				});
			}
			if(tsk_map_informations.Radius!==undefined && tsk_map_informations.Radius.length){
				$(tsk_map_informations.Radius).each(function(key, data) {
					let marker = L.circle(data.coordinates[0], {
						color: data.color,
						opacity: data.opacity,
						weight: data.weight,
						fillColor: data.color,
						fillOpacity: data.opacity,
						radius: data.radius
					}).addTo(groupRadius);
					marker._path.setAttribute('tabindex', '0');
					marker._path.setAttribute('aria-label', 'Kreismarkierung');    			
					if(data.info) {
						marker.bindPopup(data.info);
					}
					tsk_map_layers[data.id] = [marker];
					//$('#tsk-map-sr').append('<li id="tsk-map-sr-el-'+data.id+'" role="listitem" class="sr-only sr-only-focusable" aria-label="Kreis" tabindex="0">'+data.info+'</li>');
				});
			}
			if(tsk_map_informations.Point!==undefined && tsk_map_informations.Point.length){
				$(tsk_map_informations.Point).each(function(key, data) {
					let icon = null;
					if(data.marker!==undefined && data.marker) {
						icon = L.icon({
							iconUrl: data.marker.iconUrl,
							iconSize:     [data.marker.w, data.marker.h],
							iconAnchor:   [data.marker.x, data.marker.y]
						});
					}
					let marker = L.marker(data.coordinates[0], {
						icon: icon
					}).addTo(groupPoint);
					if(data.info) {
						marker.bindPopup(data.info);
					}
					tsk_map_layers[data.id] = [marker];
					//$('#tsk-map-sr').append('<li id="tsk-map-sr-el-'+data.id+'" role="listitem" class="sr-only sr-only-focusable" aria-label="Marker" tabindex="0">'+data.info+'</li>');
				});
			}
		}

		$('#tsk-map .leaflet-marker-pane img').attr('aria-label', 'Markierung');
		
		$('#tsk-map-filter-btn').on('click', function(){
			if($('#tsk-map-filter').hasClass('active')) {
				$('#tsk-map-filter').removeClass('active');
				$('#tsk-map-filter-btn').attr('aria-expanded', 'false');
				$('#tsk-map-filter-btn i').removeClass('fa-angle-left').addClass('fa-angle-right');
				$('#tsk-map-filter-body').hide();
			} else {
				$('#tsk-map-filter-body').show();
				$('#tsk-map-filter').addClass('active');
				$('#tsk-map-filter-btn').attr('aria-expanded', 'true');
				$('#tsk-map-filter-btn i').removeClass('fa-angle-right').addClass('fa-angle-left');
			}
		});
		
		$('.tsk-map-filter-cb').on('change', function(){
			searchInfo();
		});
		
		$('#filter-search-btn').on('click', function(){
			searchInfo();
		});
		
		function searchInfo() {
			var cat_checked = [];
			var search = $('#filter-search-keyword').val();
			var search_regex = null;
			var filter_cb_count = $('.tsk-map-filter-cb').length;
			if(search) {
				search_regex = new RegExp(search, "i")
			}
			if($('.tsk-map-filter-cb:checked').length) {
				$('.tsk-map-filter-cb:checked').each(function() {
					cat_checked.push(parseInt($(this).val()));
				});
			}
			if(tsk_map_informations!==undefined) {
				if(tsk_map_informations.Area!==undefined && tsk_map_informations.Area.length){
					$(tsk_map_informations.Area).each(function(key, data) {
						let intersection = [];
						if(search) {
							if(data.info.search(search_regex)!==-1) {
								intersection = data.categories.filter(x => cat_checked.includes(x));
							}
						} else {
							intersection = data.categories.filter(x => cat_checked.includes(x));
						}
						
						if(intersection.length) {
							$(tsk_map_layers[data.id]).each(function(key3,marker) {
								if(!groupAreas.hasLayer(marker)){
									groupAreas.addLayer(marker);
								}
							});
							$('#tsk-map-sr-el-'+data.id).show();
						} else {
							if(filter_cb_count) {
								$(tsk_map_layers[data.id]).each(function(key3,marker) {
									if(groupAreas.hasLayer(marker)){
										groupAreas.removeLayer(marker);
									}	
								});
								$('#tsk-map-sr-el-'+data.id).hide();
							} else {
								if(data.info.search(search_regex)!==-1 || !search_regex) {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(!groupAreas.hasLayer(marker)){
											groupAreas.addLayer(marker);
										}
									});
									$('#tsk-map-sr-el-'+data.id).show();
								} else {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(groupAreas.hasLayer(marker)){
											groupAreas.removeLayer(marker);
										}	
									});
									$('#tsk-map-sr-el-'+data.id).hide();
								}
							}
						}
					});
				}
				if(tsk_map_informations.Route!==undefined && tsk_map_informations.Route.length){
					$(tsk_map_informations.Route).each(function(key, data) {
						let intersection = [];
						if(search) {
							if(data.info.search(search_regex)!==-1) {
								intersection = data.categories.filter(x => cat_checked.includes(x));
							}
						} else {
							intersection = data.categories.filter(x => cat_checked.includes(x));
						}
						if(intersection.length) {
							$(tsk_map_layers[data.id]).each(function(key3,marker) {
								if(!groupRoute.hasLayer(marker)){
									groupRoute.addLayer(marker);
								}
							});
							$('#tsk-map-sr-el-'+data.id).show();
						} else {
							if(filter_cb_count) {
								$(tsk_map_layers[data.id]).each(function(key3,marker) {
									if(groupRoute.hasLayer(marker)){
										groupRoute.removeLayer(marker);
									}	
								});
								$('#tsk-map-sr-el-'+data.id).hide();
							} else {
								if(data.info.search(search_regex)!==-1 || !search_regex) {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(!groupRoute.hasLayer(marker)){
											groupRoute.addLayer(marker);
										}
									});
									$('#tsk-map-sr-el-'+data.id).show();
								} else {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(groupRoute.hasLayer(marker)){
											groupRoute.removeLayer(marker);
										}	
									});
									$('#tsk-map-sr-el-'+data.id).hide();
								}
							}
						}
					});
				}
				if(tsk_map_informations.Radius!==undefined && tsk_map_informations.Radius.length){
					$(tsk_map_informations.Radius).each(function(key, data) {
						let intersection = [];
						if(search) {
							if(data.info.search(search_regex)!==-1) {
								intersection = data.categories.filter(x => cat_checked.includes(x));
							}
						} else {
							intersection = data.categories.filter(x => cat_checked.includes(x));
						}
						if(intersection.length) {
							$(tsk_map_layers[data.id]).each(function(key3,marker) {
								if(!groupRadius.hasLayer(marker)){
									groupRadius.addLayer(marker);
								}
							});
							$('#tsk-map-sr-el-'+data.id).show();
						} else {
							if(filter_cb_count) {
								$(tsk_map_layers[data.id]).each(function(key3,marker) {
									if(groupRadius.hasLayer(marker)){
										groupRadius.removeLayer(marker);
									}	
								});
								$('#tsk-map-sr-el-'+data.id).hide();
							} else {
								if(data.info.search(search_regex)!==-1 || !search_regex) {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(!groupRadius.hasLayer(marker)){
											groupRadius.addLayer(marker);
										}
									});
									$('#tsk-map-sr-el-'+data.id).show();
								} else {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(groupRadius.hasLayer(marker)){
											groupRadius.removeLayer(marker);
										}	
									});
									$('#tsk-map-sr-el-'+data.id).hide();
								}
							}
						}
					});
				}
				if(tsk_map_informations.Point!==undefined && tsk_map_informations.Point.length){
					$(tsk_map_informations.Point).each(function(key, data) {
						let intersection = [];
						if(search) {
							if(data.info.search(search_regex)!==-1) {
								intersection = data.categories.filter(x => cat_checked.includes(x));
							}
						} else {
							intersection = data.categories.filter(x => cat_checked.includes(x));
						}
						
						if(intersection.length) {
							$(tsk_map_layers[data.id]).each(function(key3,marker) {
								if(!groupPoint.hasLayer(marker)){
									groupPoint.addLayer(marker);
								}
							});
							$('#tsk-map-sr-el-'+data.id).show();
						} else {
							if(filter_cb_count) {
								$(tsk_map_layers[data.id]).each(function(key3,marker) {
									if(groupPoint.hasLayer(marker)){
										groupPoint.removeLayer(marker);
									}	
								});
								$('#tsk-map-sr-el-'+data.id).hide();
							} else {
								if(data.info.search(search_regex)!==-1 || !search_regex) {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(!groupPoint.hasLayer(marker)){
											groupPoint.addLayer(marker);
										}
									});
									$('#tsk-map-sr-el-'+data.id).show();
								} else {
									$(tsk_map_layers[data.id]).each(function(key3,marker) {
										if(groupPoint.hasLayer(marker)){
											groupPoint.removeLayer(marker);
										}	
									});
									$('#tsk-map-sr-el-'+data.id).hide();
								}
							}
						}
					});
				}
			}
		}

		var current_popup = undefined;
		tsk_map.on('popupopen',function(popup) {
			// shift focus to the popup when it opens
			$(popup.popup._container).find('.leaflet-popup-content').attr('tabindex','-1').focus();

			// move the close button to the end of the popup content so screen readers reach it
			// after the main popup content, not before
			var close = $(popup.popup._container).find('.leaflet-popup-close-button');
			$(popup.popup._container).find('.leaflet-popup-close-button').remove();
			close.attr('title','Close item');
			$(popup.popup._container).append(close);

			//remember reference for closing with keyboard
			current_popup = popup;
		});

		// return focus to the icon we started from before opening the pop up
		tsk_map.on('popupclose',function(popup) {

			if (popup.popup._source.hasOwnProperty('_icon')) {
				$(popup.popup._source._icon).focus();
			} else if (popup.popup._source.hasOwnProperty('_path')) {
				$(popup.popup._source._path).focus();
			}

			current_popup = undefined;
		});

		document.addEventListener('keydown', function(event) {
			var ESCAPE = 27;

			if (current_popup && event.keyCode == ESCAPE) {
				event.preventDefault();
				event.stopPropagation();
				tsk_map.closePopup();
			}
		})
	}
});



/*!
 * Tsk Solr v1.0.0 (https://www.g-m-m.de)
 * Copyright 2017-2023 Lars Einloft
 * Licensed under the GPL-2.0-or-later license
 */
console.log("WE LOVE TYPO3");

// global function
;(function (window, document, $, undefined) {
    'use strict';

    var W = $(window),
        U = typeof undefined,
        D = $(document),
        toTopEl = '#to-top',
        $navBar = $('.nav-bar');

    D.ready(function () {
        $('[data-add-to-cart="form"]').click(function (e) {
            e.preventDefault();
            $.get(
                $(this).attr('href'),
                function(data){
                    $('[data-add-to-cart="result"]').html(data);
                });
        });
    });

    D.ajaxComplete(function () {
        $('[data-add-to-cart-uri]').submit(function (e) {
            e.preventDefault();
            $('[data-add-to-cart-uri]').unbind( "submit" );

            var form = $(this);
            var url = form.attr('data-add-to-cart-uri');

            var data = new FormData( this );
            var submitButton = $("button[type='submit']", form);
            data.append($(submitButton).attr('name'), $(submitButton).attr('value'));

            $.ajax({
                type: "POST",
                url: url,
                data: data,
                processData: false,
                contentType: false,
                success: function(data)
                {
                    handleAddToCartSuccessResponse(form, data);
                }
            });

        });
    });

}(window, document, jQuery));

function updateCountry(billingCountry, shippingCountry) {
    var postParams = {
        "tx_cart_cart[shipping_same_as_billing]": $("#shipping-same-as-billing").is(":checked"),
        "tx_cart_cart[billing_country]": billingCountry,
        "tx_cart_cart[shipping_country]": shippingCountry
    };

    $.ajax({
        async: "true",
        url: update_country,
        type: "POST",

        data: postParams,

        success: function(data)
        {
            $("#checkout-step-shipping-method").html($(data).filter("#checkout-step-shipping-method").html());
            $("#checkout-step-payment-method").html($(data).filter("#checkout-step-payment-method").html());
            $("#checkout-step-summary").html($(data).filter("#checkout-step-summary").html());
        }
    });
}

function updateCurrency(currencyCode, action) {
    var postParams = {
        "tx_cart_cart[currencyCode]": currencyCode
    };

    $.ajax({
        async: "true",
        url: action,
        type: "POST",

        data: postParams,

        success: function(data)
        {
            $("#form-cart").html($(data).filter("#form-cart").html());
            $("#checkout-step-shipping-method").html($(data).filter("#checkout-step-shipping-method").html());
            $("#checkout-step-payment-method").html($(data).filter("#checkout-step-payment-method").html());
            $("#checkout-step-coupon").html($(data).filter("#checkout-step-coupon").html());
            $("#checkout-step-summary").html($(data).filter("#checkout-step-summary").html());
        }
    });
}

$("#billingAddress-country").change(function () {
    var billingCountry = $(this).val();
    var shippingCountry = "";

    if(!$("#shipping-same-as-billing").is(":checked")) {
        shippingCountry = $("#shippingAddress-country").val();
    }

    updateCountry(billingCountry, shippingCountry);
});

$("#shippingAddress-country").change(function () {
    var billingCountry = $("#billingAddress-country").val();
    var shippingCountry = $(this).val();

    updateCountry(billingCountry, shippingCountry);
});

$("#shipping-same-as-billing").change(function() {
    //$("#checkout-step-shipping-address").toggle(!this.checked);

    var billingCountry = $("#billingAddress-country").val();
    var shippingCountry = $("#shippingAddress-country").val();

    if(!$("#shipping-same-as-billing").is(":checked")) {
        $("#checkout-step-shipping-address input, #checkout-step-shipping-address select").each(function() {
            if($(this).data("disable-shipping")) {
                $(this).prop("disabled", false);
            }
        });
    } else {
        $("#checkout-step-shipping-address input, #checkout-step-shipping-address select").each(function() {
            if($(this).data("disable-shipping")) {
                $(this).prop("disabled", true);
            }
        });
    }

    updateCountry(billingCountry, shippingCountry);
});

$(".cart-currency-selector").change(function () {
    updateCurrency($(this).val(), $(this).closest("form").attr("action"));
});

$(".currency-selector").change(function () {

    var postParams = {
        "tx_cart_currency[currencyCode]": $(this).val()
    };

    $.ajax({
        async: "true",
        url: $(this).closest("form").attr("action"),
        type: "POST",

        data: postParams,

        success: function(data)
        {
            location.reload();
        }
    });
});

$("#checkout-step-payment-method").on("click", ".set-payment", function(e) {
    var url = $(this).attr("href");

    $.get( url, function( data ) {
        $("#checkout-step-shipping-method").html($(data).filter("#checkout-step-shipping-method").html());
        $("#checkout-step-payment-method").html($(data).filter("#checkout-step-payment-method").html());
        $("#checkout-step-summary").html($(data).filter("#checkout-step-summary").html());
    });

    e.preventDefault();
});

$("#checkout-step-shipping-method").on("click", ".set-shipping", function(e) {
    var url = $(this).attr("href");

    $.get( url, function( data ) {
        $("#checkout-step-shipping-method").html($(data).filter("#checkout-step-shipping-method").html());
        $("#checkout-step-payment-method").html($(data).filter("#checkout-step-payment-method").html());
        $("#checkout-step-summary").html($(data).filter("#checkout-step-summary").html());
    });

    e.preventDefault();
});

$("#be-variants-select").change(function () {
    var special_price = $(this).children().filter(":selected").data("special-price");
    var regular_price = $(this).children().filter(":selected").data("regular-price");
    var special_price_percentage_discount = $(this).children().filter(":selected").data("special-price-percentage-discount");

    $("#product-price .special_price .price").html(special_price);
    $("#product-price .regular_price .price").html(regular_price);
    $("#product-price .special_price_percentage_discount .price").html(special_price_percentage_discount);
});

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || "");
        } else {
            o[this.name] = this.value || "";
        }
    });
    return o;
};

function handleAddToCartSuccessResponse(form, data) {
    var messageBlock;
    var messageTimeout = form.find('[data-ajax-message-timeout]').data('ajax-message-timeout');

    if (!messageTimeout) {
        messageTimeout = 3000;
    }

    var response = JSON.parse(data);
    if (response.status === "200") {
        $("#cart-preview .cart-preview-count").html(response.count);
        $("#cart-preview .net").html(response.net);
        $("#cart-preview .gross").html(response.gross);

        if (response.count > 0) {
            $("#link-to-checkout").show();
        } else {
            $("#link-to-checkout").hide();
        }

        $(document).trigger("status.cartWasChanged", [true]);

        form.each(function () {
            this.reset();
        });

        form.find('[data-ajax-success-message]').html(response.messageBody);
        form.find('[data-ajax-success-block]').show().delay(messageTimeout).fadeOut("slow");
    } else {
        form.find('[data-ajax-error-message]').html(response.messageBody);
        form.find('[data-ajax-error-block]').show().delay(messageTimeout).fadeOut("slow");
    }
}

$("[data-ajax='1']").submit(function(e) {
    var form = $(this);
    var serializedObject = form.serializeObject();

    $.ajax({
        async: "true",
        url: form.attr("action"),
        type: "POST",

        data: serializedObject,

        success: function(data)
        {
            handleAddToCartSuccessResponse(form, data);
        }
    });

    e.preventDefault();
});

$("#form-cart").submit(function() {
    $("input:submit").attr("disabled", true);
});
$("#form-order").submit(function() {
    $("input:submit").attr("disabled", true);
});
$("#form-coupon").submit(function() {
    $("input:submit").attr("disabled", true);
});
