var _paq = _paq || [];
var swe = ((typeof swe !== 'undefined') && (swe !== null)) ? swe : (function () {

  // Private



  // Public
  return {
    // Version
    version: "1.0.4",


    // Merge options
    mergeOptions: function(userOptions, options) {
      Object.keys(userOptions).forEach(function (key) {
        options[key] = userOptions[key];
      });
    },


    // Get cookie
    getCookie: function (name) {
      var i,
          c,
          nameEQ = name + "=",
          ca = document.cookie.split(";");

      for (i = 0; i < ca.length; i++) {
        c = ca[i];

        while (c.charAt(0) === " ") {
          c = c.substring(1, c.length);
        }

        if (c.indexOf(nameEQ) === 0) {
          return c.substring(nameEQ.length, c.length);
        }
      }
    },


    // Set / delete cookie
    setCookie: function (name, value, days) {
      var date = new Date(),
          expires;

      if (days) {
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
      } else {
        expires = "; expires=Thu, 01 Jan 1970 00:00:01 GMT";
      }

      document.cookie = name + "=" + value + expires + "; path=/; SameSite=Strict";
    },


    // Cookie banner
    cookieBanner: function (privacyUrl) {
      document.body.insertAdjacentHTML("beforeend", "<div class=\"cookie-banner\"><div class=\"container\"><div class=\"flex flex--wrap\"><div class=\"flex__md-75\"><p class=\"cookie-banner__text\">Um Ihnen ein besseres Nutzererlebnis zu bieten, verwenden wir Cookies. Durch Nutzung unserer Dienste stimmen Sie unserer Verwendung von Cookies zu. <a rel=\"nofollow\" href=\"" + privacyUrl + "\">Weitere Informationen</a></p></div><div class=\"flex__md-25\"><button type=\"button\" class=\"cookie-banner__button\">Ok</button></div></div></div></div>");

      var cookieBanner = document.querySelector(".cookie-banner"),
          cookieBannerButton = document.querySelector(".cookie-banner__button"),
          cookie = swe.getCookie("cookieBanner");

      if(cookie !== "Set") {
        if (cookieBanner.classList) {
          cookieBanner.classList.add("cbv");
        } else {
          // todo
        }
      }

      cookieBannerButton.addEventListener("click", function () {
        swe.setCookie("cookieBanner", "Set", 365);

        if (cookieBanner.classList) {
          cookieBanner.classList.remove("cbv");
        } else {
          // todo
        }
      });
    },


    // Datetimepicker
    datetimepicker: function(name, el, userDatetimepickerOptions) {
      if (document.querySelector(el) !== null) {
        // https://chmln.github.io/flatpickr/examples/
        var datetimepickerOptions = {
          dateFormat: "d.m.Y",

          // Localization
          locale: "de",
        };


        if (userDatetimepickerOptions) {
          swe.mergeOptions(userDatetimepickerOptions, datetimepickerOptions);
        }

        if (typeof flatpickr === 'undefined') return;

        return flatpickr(el, datetimepickerOptions);
      }
    },


    // Slider
    slider: function(name, el, userSliderOptions) {
      if (document.querySelector(el) !== null) {
        // https://flickity.metafizzy.co/options.html
        var sliderOptions = {
          accessibility: true,
          adaptiveHeight: false,
          autoPlay: false,
          pauseAutoPlayOnHover: true,
          cellAlign: "left",
          cellSelector: ".slide",
          contain: false,
          draggable: true,
          freeScroll: false,
          groupCells: false,
          lazyLoad: true,
          prevNextButtons: true,
          pageDots: true,
          wrapAround: true,
          imagesLoaded: true,
        };


        if (userSliderOptions) {
          swe.mergeOptions(userSliderOptions, sliderOptions);
        }

        var sliders = document.querySelectorAll(el);

        var createSlider = function(nam, el) {
          var nam = new Flickity(el, sliderOptions);

          nam.resize();


          /**
           * Fix for Chrome: Play video automatically
           */
          if (document.querySelector(el + " video") !== null) {
            var sliderVideos = document.querySelectorAll(el + " video");

            [].forEach.call(sliderVideos, function(sliderVideo) {
              sliderVideo.addEventListener("canplay", function() {
                sliderVideo.play();

                nam.resize();
              });
            });
          }
        };

        [].forEach.call(sliders, function(slider, index) {
          slider.setAttribute("data-" + name, "slider-" + index);


          createSlider("slider-" + name + index, '[data-' + name + '="slider-' + index + '\"]');
        });


        if (document.querySelector(".flickity-page-dots") !== null) {
          var dotTimer,
              dotResize = window,
              aDots = [];


          var dot = function() {
            var dotsC = document.querySelectorAll(".flickity-page-dots");

            Array.prototype.forEach.call(dotsC, function(dotC) {
              var dots = dotC.querySelectorAll(".dot");

              if (dots.length === 1) {
                //Array.prototype.forEach.call(dots, function(dot) {
                  dotC.style.display = "none";
                //});
              } else {
                dotC.style.display = "block";
              }
            });
          };

          dotResize.addEventListener("resize", function (event) {
            cancelAnimationFrame(dotTimer);
            dotTimer = requestAnimationFrame(dot);
          });

          dot();
        }
      }
    },


    checkForm: function(btn, form) {
      if (document.querySelector(form) !== null) {
        var next;
        var endInputs = document.querySelectorAll("input[data-val]");
        var endSelects = document.querySelectorAll("select[data-val]");
        var endTextareas = document.querySelectorAll("textarea[data-val]");

        var check = function() {
          next = true;

          if (!document.getElementById("herr").checked && !document.getElementById("frau").checked) {
            alert("Bitte Anrede auswählen");
            next = false;
          }

          [].forEach.call(endInputs, function (ei) {
            if (ei.value.length === 0) {
              alert(ei.getAttribute("data-val"));
              next = false;
            }

            if (ei.value.length > 0 && ei.type == "email") {
              var patt = new RegExp("@");

              if (ei.value.length < 3) {
                alert("E-Mail-Adresse ist zu kurz");
                next = false;
              } else if (ei.value.length >= 3 && !patt.test(ei.value)) {
                alert("Es fehlt ein @ in der E-Mail-Adresse");
                next = false;
              } else if (ei.value.length >= 3 && ei.value.indexOf(".", ei.value.indexOf("@")) == -1) {
                alert("Nach dem @ der E-Mail-Adresse muss ein Punkt folgen");
                next = false;
              }
            }
          });

          [].forEach.call(endSelects, function (select) {
            if (select.selectedIndex == 0) {
              alert(select.getAttribute("data-val"));
              next = false;
            }
          });

          [].forEach.call(endTextareas, function (textarea) {
            if (textarea.value.length === 0) {
              alert(textarea.getAttribute("data-val"));
              next = false;
            }
          });


          return next;
        };
      }


      if (btn && document.querySelector(btn) !== null) {
        var checkButton = document.querySelector(btn);

        checkButton.addEventListener("click", function () {
          check();
        });
      }
    },


        /**
         * Navigation (Mobile)
         */
        mobileNav: function (el, options) {
            if (document.querySelector(el) !== null) {


                var paddingHeight = document.querySelector('.nav-container').offsetHeight;

                document.querySelector(el).style.paddingTop = (paddingHeight + (paddingHeight / 2)) + 'px';

                mobileNav = offside(el, options);
                var ebene = 0;

                // ...
                var navEl = document.querySelectorAll(el + ' li');
                [].forEach.call(navEl, function (el, i) {
                    if (el.classList.contains('dropdown')) {
                        el.insertAdjacentHTML('beforeend', '<span class="open-sesam__trigger"><i class="fa fa-angle-right" aria-hidden="true"></i></span>');
                    }
                });

                var navSubEl = document.querySelectorAll(el + " li ul");
                [].forEach.call(navSubEl, function (el, i) {
                    var caption = el.parentNode.querySelector("a").textContent;
                    el.insertAdjacentHTML('afterbegin', '<li class="close-sesam"><span><i class="fa fa-angle-left" aria-hidden="true"></i> ' + caption + '</span></li>');
                });

                var navSpanEl = document.querySelectorAll(el + ' span.open-sesam__trigger');
                [].forEach.call(navSpanEl, function (el, i) {
                    el.addEventListener('click', function (event) {
                        if (ebene === 0) {
                            //el.parentNode.parentNode.style.left = '-17em';
                            el.parentNode.parentNode.style.left = '-50em';
                        } else {
                            el.parentNode.parentNode.style.left = '0';
                        }
                        //el.parentNode.querySelector('ul').style.left = '17em';
                        el.parentNode.querySelector('ul').style.left = '50em';
                        el.parentNode.querySelector('ul').style.display = 'block';
                        ebene++;

                    event.preventDefault();
                    });
                });

              var navAEl = document.querySelectorAll(el + ' .dropdown > a');
                [].forEach.call(navAEl, function (el, i) {
                    el.addEventListener('click', function () {
                        if (ebene === 0) {
                            //el.parentNode.parentNode.style.left = '-17em';
                            el.parentNode.parentNode.style.left = '-50em';
                        } else {
                            el.parentNode.parentNode.style.left = '0';
                        }
                        //el.parentNode.querySelector('ul').style.left = '17em';
                        el.parentNode.querySelector('ul').style.left = '50em';
                        el.parentNode.querySelector('ul').style.display = 'block';
                        ebene++;

                    event.preventDefault();
                    });
                });

                var navCloseEl = document.querySelectorAll(el + ' .close-sesam');
                [].forEach.call(navCloseEl, function (el, i) {
                    el.addEventListener('click', function () {
                        ebene--;
                        el.parentNode.style.left = '0';
                        el.parentNode.style.display = 'none';
                        if (ebene === 0) {
                            el.parentNode.parentNode.parentNode.parentNode.querySelector('ul').style.left = '0';
                        } else {
                            //el.parentNode.parentNode.parentNode.parentNode.querySelector('ul').style.left = '17em';
                            el.parentNode.parentNode.parentNode.parentNode.querySelector('ul').style.left = '50em';
                        }

                   event.preventDefault();
                    });
                });

                 var navCloseButton = document.querySelectorAll(el + ' .close-nav');
                 [].forEach.call(navCloseButton, function(el, i) {
                 el.addEventListener('click', function() {
                 mobileNav.close();
                 });
                 });
                document.querySelector(el).style.display = 'block';
            }
        },


    // Smooth scroll
    smoothScroll: function (nav) {
      smoothScroll.init({
        selector: ".scroll", // Selector for links (must be a class, ID, data attribute, or element tag)
        selectorHeader: nav, // Selector for fixed headers (must be a valid CSS selector) [optional]
        speed: 500, // Integer. How fast to complete the scroll in milliseconds
        easing: "easeInOutCubic", // Easing pattern to use
        offset: 0, // Integer. How far to offset the scrolling anchor location in pixels
        //callback: function ( anchor, toggle ) {} // Function to run after scrolling
      });


      // # From another page
      if (window.location.hash) {
        // Check if all images loaded
        imagesLoaded(".wrapper", function(imagesLoaded) {
          var anchor = document.querySelector(window.location.hash); // Get the anchor

          smoothScroll.animateScroll(anchor);

          //console.log(window.location.hash);
        });
      }
    },


    // Lazy load
    lazyLoad: function () {

    },


    // Google Analytics
    googleAnalytics: function (id) {
      if (id !== "UA-00000000-0") {
        window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments);};ga.l=+new Date();

        ga('create', id, 'auto');
        ga('set', 'anonymizeIp', true);
        ga('send', 'pageview');

        var gaProperty = id,
            disableStr = 'ga-disable-' + gaProperty;

        if (document.cookie.indexOf(disableStr + '=true') > -1) {
          window[disableStr] = true;
        }

        function gaOptout() {
          document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
          window[disableStr] = true;
        }

        var script = document.createElement("script");
        script.src = "https://google-analytics.com/analytics.js";
        document.body.appendChild(script);

        if (document.getElementById("GAOptOut") !== null) {
          var el = document.getElementById("GAOptOut");

          el.addEventListener("click", function () {
            if(window[disableStr] !== true){
              gaOptout();
              var stand = el.innerHTML;
              el.innerHTML = stand + " <span id=\"GAOptOutFeedback\" style=\"color:#FF0000\"> (Opt-Out-Cookie ist für " + window.location.origin + " gesetzt)</span>";
            }
          });

          if (document.cookie.indexOf(disableStr + '=true') > -1) {
            var stand = el.innerHTML;
            el.innerHTML = stand + " <span id=\"GAOptOutFeedback\" style=\"color:#FF0000\"> (Opt-Out-Cookie ist für " + window.location.origin + " gesetzt)</span>";
          }
        }

        // Tracking for PDF-Links
        [].filter.call(document.querySelectorAll("a"), function (a) {
          if (a.href.match("\\.pdf$")) {

            if (googleAnalyticsID != "UA-00000000-0") {
              a.setAttribute("onclick", "ga('send', 'event', 'PDF', 'Download', '" + a.getAttribute("href").substring(a.getAttribute("href").lastIndexOf("/")+1) + " - PDF Download')");
            }
          }
        });
      }
    },
	
    /**
     * Matomo
     */
    matomo: function(baseUrl, siteId) {
      if (baseUrl !== 'https://www.domain.de/matomo/') {
        //var _paq = _paq || [];

        _paq.push(["trackPageView"]);
        _paq.push(["enableLinkTracking"]);

        var u=baseUrl;
        _paq.push(["setTrackerUrl", u+"piwik.php"]);
        _paq.push(["setSiteId", siteId]);

        var d=document, g=d.createElement("script"); s=d.getElementsByTagName("script")[0];
        g.setAttribute("id", "matomo");
        g.type="text/javascript";
        g.defer=true; g.async=true; g.src=u+"piwik.js";
        s.parentNode.insertBefore(g,s);
      }
    },

	


    // Google maps
    loadMap: function () {
      if (document.querySelector(".google-maps") !== null) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        document.getElementsByTagName("head")[0].appendChild(script);
        script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyAI_7DwQcYTEMEX22TGxxapdd67lu5Bl3w&language=de&region=de&callback=swe.setMap";
      }
    },

    setMap: function () {
      var map,
          marker = [];


      var googleMapsEl = document.querySelector(".google-maps"),
          Lat = parseFloat(googleMapsEl.getAttribute("data-lat-center")),
          Lng = parseFloat(googleMapsEl.getAttribute("data-lng-center")),
          customControl = googleMapsEl.getAttribute("data-customControl"),
          zoom = parseInt(googleMapsEl.getAttribute("data-zoom")) || 17;


      var data = [];
      var newData = {};



      var elements = document.querySelectorAll(".google-maps-data");

      [].forEach.call(elements, function(element) {
        if (element.getAttribute("data-iconImage") == "") {
          newData = {
            infoWindow: element.getAttribute("data-infoWindow"),
            title: element.getAttribute("data-title"),
            lat: parseFloat(element.getAttribute("data-lat")),
            lng: parseFloat(element.getAttribute("data-lng")),
            icon: {
              path: "M0-48c-9.8 0-17.7 7.8-17.7 17.4 0 15.5 17.7 30.6 17.7 30.6s17.7-15.4 17.7-30.6c0-9.6-7.9-17.4-17.7-17.4z",
              fillColor: element.getAttribute("data-iconColor") || "#111",
              fillOpacity: 1,
              strokeColor: "",
              strokeWeight: 0
            },
            description: element.querySelector(".des").innerHTML,
          };
        } else {
          newData = {
            infoWindow: element.getAttribute("data-infoWindow"),
            title: element.getAttribute("data-title"),
            lat: parseFloat(element.getAttribute("data-lat")),
            lng: parseFloat(element.getAttribute("data-lng")),
            icon: element.getAttribute("data-iconImage"),
            description: element.querySelector(".des").innerHTML,
          };
        }

        data.push(newData);
      });



      var infoWindows = [];
      var options = {
        zoom: zoom,
        minZoom: 3,
        disableDefaultUI: true,
        scrollwheel: false,
        draggable: window.innerWidth > 1024 ? true : false,
        styles: [
          {
            "featureType": "all",
            "elementType": "all",
            "stylers": [
              {
                "saturation": "-100"
              },
              {
                "gamma": "1.50"
              }
            ]
          }
        ],
        mapTypeId: "roadmap",
        center: {lat: Lat, lng: Lng}
      };

      map = new google.maps.Map(googleMapsEl, options);


      Object.keys(data).forEach(function(i) {
        marker[i] = new google.maps.Marker({
          position: new google.maps.LatLng( data[i].lat, data[i].lng ),
          icon: data[i].icon,
          optimized: false,
          map: map,
          title: data[i].title
        });

        var infowindow = new google.maps.InfoWindow({
          content: data[i].description
        });

        infoWindows.push(infowindow);


        marker[i].addListener('click', function() {
          if (infowindow) {
            for (var x = 0; x < infoWindows.length; x++) {
              infoWindows[x].close();
            }
            //console.log("close");
          }
          infoWindows[i].open(map, marker[i]);
        });

        if (data[i].infoWindow == 1) {
          infoWindows[i].open(map, marker[i]);
        }
      });


      // Custom zoom control
      if (customControl == 1) {
        var zoomControlDiv = document.createElement("div"),
            controlUIzoomIn = document.createElement("div"),
            controlUIzoomOut = document.createElement("div"),
            zoomControl = new CustomZoomControl(zoomControlDiv, map);

        function CustomZoomControl (controlDiv, map) {
          if (controlUIzoomIn.classList && controlUIzoomOut.classList) {
            controlUIzoomIn.classList.add("zoom-in");
            controlUIzoomOut.classList.add("zoom-out");
          }

          controlUIzoomIn.innerHTML = "<i class=\"fa fa-plus\"></i>";
          controlUIzoomOut.innerHTML = "<i class=\"fa fa-minus\"></i>";

          controlDiv.appendChild(controlUIzoomIn);
          controlDiv.appendChild(controlUIzoomOut);

          google.maps.event.addDomListener(controlUIzoomIn, "click", function () {
            map.setZoom(map.getZoom()+1);
          });

          google.maps.event.addDomListener(controlUIzoomOut, "click", function () {
            map.setZoom(map.getZoom()-1);
          });
        }

        map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(zoomControlDiv);
      }


      google.maps.event.addDomListener(window, "resize", function () {
        var center = map.getCenter();
        google.maps.event.trigger(map, "resize");
        map.setCenter(center);
        map.set("draggable", window.innerWidth > 1024 ? true : false);
      });
    },


    // Lightbox
    lightbox: function (el, options) {
      if (document.querySelector(el) !== null) {
        Tobi(el, options);
      }
    },


    // Images loaded
    imagesLoaded: function (el, func) {
      if (document.querySelector(el) !== null) {
        imagesLoaded(document.querySelector(el), func);
      }
    },
    
    
    /**
     * Counter
     */
    counter: function(animation) {
      if (document.querySelector(".counter") === null) return;
      let counterEls = document.querySelectorAll(".counter"),
        counter = [],
        options;

      // set 1 second timeout for having all fonts loaded
      setTimeout(function () {
        for (let i = 0; i < counterEls.length; i += 1) {
          let counterEl = counterEls[i]
          counterEl.setAttribute("id", "count" + i);

          options = {
            useEasing: true,
            useGrouping: true,
            separator: '.',
            decimal: ',',
          };

          counter[i] = new CountUp(counterEl.querySelector(".counter__num"), counterEl.getAttribute("data-start"), counterEl.getAttribute("data-end"), 0, 2.5, options);

          /*if (counterEl.querySelector(".counter__info") !== null) {
            tippy(counterEl.querySelector(".counter__info"));
          }*/

          inView("#count" + i).on("enter", function() {
            if (counter[i].error) {
              console.error(counter[i].error);
              return;
            }

            if (animation) {
              counterEl.querySelector(".counter__num").classList.add("animated");
              counterEl.querySelector(".counter__num").classList.add("bounceIn");
            }

            counter[i].start();
          });
        }
      }, 1000);
    },



    // Accordion
    accordion: function () {
      if (document.querySelector(".dce-accordion") !== null) {
        var elements = document.querySelectorAll(".dce-accordion .dce-accordion__title");

        for (i = 0; i < elements.length; i++) {
          elements[i].addEventListener("click", function () {
            var topLevelElements = document.querySelectorAll(".dce-accordion.toplevel .dce-accordion__title.first");
            if(this.classList.contains("first") && !this.classList.contains("active")) {
                Array.prototype.forEach.call(topLevelElements, function (element, index, array) {
                    element.classList.remove("active");
                });
            }
            this.classList.toggle("active");
				
			var parent = this.parentElement.parentElement;
			window.location.hash = '#'+parent.id
			window.scrollTo({top: parent.offsetTop - 100, left: 0, behavior: 'smooth'})
          });
        }
      }
    },


    // Up!
    up: function (id, el) {
      if (document.querySelector(el) !== null) {
        var rafTimer,
            upScroll = window,
            upLink = document.querySelector(el),
            anchor = document.querySelector(id);

        upLink.addEventListener("click", function (event) {
          smoothScroll.animateScroll(anchor);

          event.preventDefault();
        });

        var toggleUp = function() {
          if (window.pageYOffset > window.innerHeight / 2 && window.innerWidth > 1024) {
            upLink.style.display = "block";
          } else {
            upLink.style.display = "none";
          }
        };


        upScroll.addEventListener("scroll", function (event) {
          cancelAnimationFrame(rafTimer);
          rafTimer = requestAnimationFrame(toggleUp);
        });

        toggleUp();
      }
    },


    // Fixed nav
    fixedNav: function () {
      if (document.querySelector("nav.desktop") !== null) {
        var sfn,
            sfnScroll = window,
            sfnTimer,
            navMeta,
            navMetaHeight = 0,
            nav = document.querySelector("nav.desktop");

        if (document.querySelector(".nav-meta") !== null) {
          navMeta = document.querySelector(".nav-meta"),
          navMetaHeight = navMeta.getBoundingClientRect().height;
        }

        sfn = function () {
          if (window.pageYOffset > navMetaHeight) {
            nav.classList.add("fixed");
          } else {
            nav.classList.remove("fixed");
          }
        };


        sfnScroll.addEventListener("scroll", function (event) {
          cancelAnimationFrame(sfnTimer);
          sfnTimer = requestAnimationFrame(sfn);
        });

        sfn();
      }
    },


    // Is in viewport
    isInViewport: function (el) {

    },


    // Same height
    sameHeight: function (el) {
      if (document.querySelector(el) !== null) {
        var sH,
            sHScroll = window,
            sHTimer;

        sH = function () {
          var elements = document.querySelectorAll(el),
              max_height = 0,
              len = 0,
              i;

          if ( (elements) && (elements.length > 0) ) {
            len = elements.length;

            for (i = 0; i < len; i++) { // get max height
              elements[i].style.height = ''; // reset height attr

              if (elements[i].clientHeight > max_height) {
                max_height = elements[i].clientHeight;
              }
            }

            for (i = 0; i < len; i++) { // set max height to all elements
              elements[i].style.height = max_height + 'px';
            }
          }
        };


        sHScroll.addEventListener("resize", function (event) {
          cancelAnimationFrame(sHTimer);
          sHTimer = requestAnimationFrame(sH);
        });

        setTimeout(function () { // set 1 second timeout for having all fonts loaded
          sH();
        }, 1000);
      }
    },



  };
})();




/**
 * Dit un dat
 */

// Add "_blank" to PDF-Links
[].filter.call(document.querySelectorAll("a"), function (a) {
  if (a.href.match("\\.pdf$")) {
    a.target = "_blank";
  }
});


// Column slider
swe.slider("columnSlider", ".column-slider", {
  cellAlign: "left",
  cellSelector: "[class*='flex__']",
  groupCells: true,
  prevNextButtons: false,
  wrapAround: false,
  contain: true,
});