/////////////////////
// Utilities
/////////////////////

// eslint-disable-next-line no-unused-vars
function getDeepHeight($el) {
  var height = $el.height();
  if (height > 0) {
    return height;
  } else if ($el.children().length == 0) {
    return 0;
  } else {
    height = $el
      .children()
      .toArray()
      .map(function (el) {
        return el.offsetHeight;
      })
      .reduce(function (acc, cur) {
        return acc + cur;
      });

    if (height > 0) {
      return height;
    } else {
      for (var i = 0; i < $el.children().length; i++) {
        height = getDeepHeight($el.children().eq(i));
        if (height > 0) {
          break;
        }
      }
    }
    return height;
  }
}

// will return false if display: none or visibility: hidden
// opacity: 0 will return true
let isVisible = function (el) {
  return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);
};

// eslint-disable-next-line no-unused-vars
let getHeightSum = function (elements) {
  let sum = 0;
  elements.forEach((el) => {
    const rect = el.getBoundingClientRect();
    sum += rect.height;
  });
  return sum;
};

function getLargestDistanceFromTopOfWindow(elements) {
  let distance = 0;
  elements.forEach((el) => {
    distance = Math.max(distance, el.getBoundingClientRect().bottom);
  });
  return distance;
}

let isImportantStickElement = function (el, top_threshold, exclude_elements) {
  const position = getComputedStyle(el, null).getPropertyValue('position');
  return (
    (position === 'fixed' || position === 'sticky') &&
    isVisible(el) &&
    el.getBoundingClientRect().top < top_threshold &&
    !exclude_elements.includes(el)
  );
};

let setFadeChildrenTransistionDelay = function (el) {
  const children = [...el.children];
  let delay = 150;
  if (el.classList.contains('delay')) {
    delay = 300;
  } else if (el.classList.contains('delay-xl')) {
    delay = 600;
  }
  children.forEach((child, index) => {
    child.style.transitionDelay = delay * index + 'ms';
  });
};

let initializeScrollMotion = function () {
  const scrollMotionElements = [...document.querySelectorAll('.logosbase .scroll-motion')];
  scrollMotionElements.forEach((el) => {
    new ScrollMotion(el);
  });
};

class ScrollMotion {
  constructor(el) {
    this.el = el;
    this.scrollHandler = () => {
      this.position = this.el.getBoundingClientRect().top - window.innerHeight * 0.9;
      if (isVisible(this.el) && this.position <= 0) {
        if (this.el.classList.contains('fade-children')) {
          setFadeChildrenTransistionDelay(this.el);
        }
        this.el.classList.add('active');
        this.destroy();
      }
    };
    this.scrollHandler();
    document.addEventListener('scroll', this.scrollHandler);
  }

  destroy() {
    document.removeEventListener('scroll', this.scrollHandler);
  }
}

let initializeLoadMotion = function () {
  const loadMotionElements = [...document.querySelectorAll('.logosbase .load-motion')];
  loadMotionElements.forEach((el) => {
    if (el.classList.contains('fade-children')) {
      setFadeChildrenTransistionDelay(el);
    }
    el.classList.add('active');
  });
};

/////////////////////
// HTML
/////////////////////

var ExpandCollapse = function (expandTxt, collapseTxt, groupId, className) {
  if (!className) {
    className = 'btn btn--secondary-outline';
  }
  var html = '';
  html +=
    '<div class="expand-collapse" style="text-align: center; overflow: hidden; width: 100%; margin-bottom: 48px; padding: 0 15px;">';
  html +=
    '<a href="#" class="expand-collapse__btn js-expand-collapse ' +
    className +
    '" data-expand-text="' +
    expandTxt +
    '" data-collapse-text="' +
    collapseTxt +
    '" data-expand-collapse-group="' +
    groupId +
    '">' +
    expandTxt +
    '</a>';
  html += '</div>';
  return html;
};

var CurrentNavItem = function (name) {
  return '<div class="secondary-nav__current">' + name + '</div>';
};

var DropDownToggle = function () {
  return '<a href="#" class="secondary-nav__dropdown-toggle"><svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Artboard" stroke="#005EC3"><polyline id="Path-2" transform="translate(8.000000, 8.500000) scale(1, -1) translate(-8.000000, -8.500000) " points="3 11 8.00702192 6 13 10.9859758"></polyline></g></g></svg></a>';
};

var Popover = function (imageUrl) {
  var html = '';
  html += '<div class="logosbase">';
  html += '<div class="popover-image">';
  html += '<div class="container">';
  html += '<div class="popover-image__image">';
  html +=
    '<a href="#" class="popover-image__close icon-btn icon-btn--close icon-btn--solid js-close-popover"></a>';
  html += '<img src="' + imageUrl + '">';
  html += '</div>';
  html += '</div>';
  html += '</div>';
  html += '</div>';
  return html;
};

/////////////////////
// Plugins
/////////////////////

var logosbase = {
  // Expand Collapse

  expandCollapse: {
    init: function (
      displayCount,
      expandTxt,
      collapseTxt,
      className,
      renderedGroups,
      selectedGroupIds
    ) {
      this.$items = $('.js-can-expand-collapse');
      this.displayCount = displayCount !== undefined ? displayCount : 6;
      this.expandTxt = expandTxt !== undefined ? expandTxt : 'Show more';
      this.collapseTxt = collapseTxt !== undefined ? collapseTxt : 'Show less';
      this.renderedGroups = renderedGroups !== undefined ? renderedGroups : new Array();
      this.className = className;

      if (this.$items) {
        var groupIds = selectedGroupIds !== undefined ? selectedGroupIds : this.getGroupIds();
        for (var i = 0; i < groupIds.length; i++) {
          var $groupItems = this.getGroup(groupIds[i]);
          this.renderGroup(groupIds[i], $groupItems);
        }
      }
    },

    renderGroup: function (groupId, $groupItems) {
      if ($groupItems.length > this.displayCount && this.renderedGroups.indexOf(groupId) === -1) {
        this.collapseGroup(groupId);
        $groupItems
          .last()
          .after(ExpandCollapse(this.expandTxt, this.collapseTxt, groupId, this.className));
        var $groupBtn = this.getGroupBtn(groupId);

        $groupBtn.data('isCollapsed', true);

        (function (groupId) {
          $groupBtn.on(
            'click',
            function (e) {
              e.preventDefault();
              if ($groupBtn.data('isCollapsed')) {
                this.expandGroup(groupId);
              } else {
                this.collapseGroup(groupId);
              }
            }.bind(this)
          );
        }.bind(this)(groupId));

        this.renderedGroups.push(groupId);
      }
    },

    getGroupIds: function () {
      var groupIds = [];
      this.$items.each(function () {
        var group = $(this).data('expand-collapse-group');
        if (groupIds.indexOf(group) === -1) {
          groupIds[group - 1] = group;
        }
      });
      return groupIds;
    },
    getGroup: function (groupId) {
      return $('.js-can-expand-collapse[data-expand-collapse-group="' + groupId + '"]');
    },
    getCollapsedItems: function (groupId) {
      var $groupItems = this.getGroup(groupId);
      return $groupItems.eq(this.displayCount - 1).nextAll('.js-can-expand-collapse');
    },
    getGroupBtn: function (groupId) {
      return $('.js-expand-collapse[data-expand-collapse-group="' + groupId + '"]');
    },

    expandGroup: function (groupId) {
      var $groupItems = this.getGroup(groupId),
        $groupBtn = this.getGroupBtn(groupId);
      this.collapseAllGroups();
      $groupItems.show();
      $groupBtn.text($groupBtn.data('collapse-text'));
      $groupBtn.data('isCollapsed', false);
    },
    collapseGroup: function (groupId) {
      var $collapsedItems = this.getCollapsedItems(groupId),
        $groupBtn = this.getGroupBtn(groupId);
      $collapsedItems.hide();
      $groupBtn.text($groupBtn.data('expand-text'));
      $groupBtn.data('isCollapsed', true);
    },
    collapseAllGroups: function () {
      var groupIds = this.renderedGroups;
      for (var i = 0; i < groupIds.length; i++) {
        this.collapseGroup(groupIds[i]);
      }
    },
  },

  // Popover

  popover: {
    init: function () {
      this.openHandlers();
      this.closeHandlers();
    },
    openHandlers: function () {
      $('.js-popover').on('click', function (e) {
        e.preventDefault();
        $('body')
          .css('overflowY', 'hidden')
          .append(Popover($(this).data('popover-image')));
      });
    },
    closeHandlers: function () {
      $('.js-close-popover').on('click', function (e) {
        e.preventDefault();
        $('.popover-image').remove();
        $('body').css('overflowY', 'auto');
      });
      $(document).mouseup(function (e) {
        var $popoverImage = $('.popover__image');
        if (!$popoverImage.is(e.target) && $popoverImage.has(e.target).length === 0) {
          $('.popover-image').remove();
          $('body').css('overflowY', 'auto');
        }
      });
      $(document).on('keyup', function (e) {
        if (e.keyCode == 27) {
          $('.popover-image').remove();
          $('body').css('overflowY', 'auto');
        }
      });
    },
  },

  // Secondary Nav

  secondaryNav: {
    init: function ($menu) {
      if (typeof $menu != 'undefined') {
        this.$menu = $menu;
      } else {
        this.$menu = $('.secondary-nav').first();
      }
      this.$window = $(window);
      this.$body = $('body');

      this.$menuLinks = this.$menu.find(`.secondary-nav__link[href^="#"], .secondary-nav__link[href^="${window.location.pathname}#"]`).not('.more-btn');
      [...this.$menuLinks].forEach(function(item, i) {
        item.setAttribute(
          'href',
          item.getAttribute('href').replace(window.location.pathname, '')
        )
      })
      this.$menuLinksInPage = this.$menuLinks.filter(function (i, $link) {
        if ($link.getAttribute('href') != '#') {
          return $($link.getAttribute('href'))[0];
        }
      });
      this.$menuToggle = this.$menu.find('.secondary-nav__toggle');
      this.breakpoint = 600;
      this.isMobile = this.$window.width() < this.breakpoint;
      this.isMobileNavInit = this.isMobile;
      this.isDropdownInit =
        (this.isMobile || Modernizr.touch) && $('.secondary-nav__dropdown').length > 0; // eslint-disable-line no-undef
      this.menuOffset = 0;
      this.sectionOffsets = new Array();
      this.menuHeight = this.isMobile ? 42 : this.$menu.height();
      this.winWidth = this.$window.width();
      this.initialMenuPosition = this.$menu.offset().top;
      this.isStickyOffsetSet = false;
      this.sheet = document.createElement('style');
      document.body.appendChild(this.sheet);

      if (logosbase.secondaryNav.$menu.hasClass('secondary-nav--unlimited')) {
        logosbase.secondaryNav.initSecondaryNavUnlimited();
      }
      this.initMenuOffset(
        function () {
          this.initSectionOffsets(
            function () {
              this.$window.bind('scroll', this.onScroll);
              this.$window.bind('resize', this.onResize);
              this.$menuLinks.bind('click', this.onLinkClick);

              if (this.isMobileNavInit) {
                this.initMobileNav();
              }

              if (this.isDropdownInit) {
                this.initDropdowns();
              }

              this.$window[0].scrollBy(0, -10);
            }.bind(this)
          );
        }.bind(this)
      );
    },
    reset: function (reinit = true) {
      if (typeof this.$menu != 'undefined') {
        this.$window.unbind('scroll');
        this.$window.unbind('resize');
        this.$menuLinks.unbind('click');
        if (this.isDropdownInit) {
          this.removeDropdowns();
        }
        if (this.isMobile) {
          this.removeMobileNav();
        }
        this.unstick();
        this.sectionOffsets = new Array();
        if (reinit) {
          this.init(this.$menu);
        }
      }
    },
    initMenuOffset: function (callback) {
      if (this.menuOffset == 0) {
        this.menuOffset = this.$menu.offset().top - logosbase.secondaryNav.getStickyOffset();
        setTimeout(
          function () {
            this.initMenuOffset(callback);
          }.bind(this),
          200
        );
      } else {
        callback();
      }
    },
    initSectionOffsets: function (callback) {
      var offsets = this.sectionOffsets;
      var len = offsets.length;
      if (
        offsets.length >= 3 &&
        JSON.stringify(offsets[len - 1]) == JSON.stringify(offsets[len - 2]) &&
        JSON.stringify(offsets[len - 1]) == JSON.stringify(offsets[len - 3])
      ) {
        this.sectionOffsets = offsets[len - 1];
        callback();
      } else {
        offsets.push(
          $.map(this.$menuLinksInPage, function ($link) {
            if ($link.getAttribute('href') != '#') {
              return (
                window.pageYOffset + $($link.getAttribute('href'))[0].getBoundingClientRect().top
              );
            }
          })
        );
        setTimeout(
          function () {
            this.initSectionOffsets(callback);
          }.bind(this),
          200
        );
      }
    },
    initDropdowns: function () {
      $('.secondary-nav__dropdown').each(function () {
        var $dropdownToggle = $(DropDownToggle());
        $(this).before($dropdownToggle);
        $dropdownToggle.bind('click', logosbase.secondaryNav.onDropdownToggleClick);
      });
    },
    removeDropdowns: function () {
      $('.secondary-nav__dropdown-toggle').each(function () {
        $('.secondary-nav__dropdown').attr('style', '');
        $(this).unbind('click');
        $(this).remove();
      });
    },
    initMobileNav: function () {
      $('.secondary-nav__toggle').bind('click', this.onNavToggleClick);
      if (logosbase.secondaryNav.$menuLinks.length > 0) {
        this.setCurrentItem(this.$menuLinks[0].textContent);
      }
    },
    removeMobileNav: function () {
      if (this.$menu.hasClass('secondary-nav--open')) {
        this.toggleNav();
      }
      $('.secondary-nav__toggle').unbind('click');
      $('.secondary-nav__current').remove();
    },
    onScroll: function () {
      var isMobile = logosbase.secondaryNav.isMobile;
      var $window = logosbase.secondaryNav.$window;
      //var menuHeight = logosbase.secondaryNav.menuHeight;
      var ws = $window.scrollTop();

      if (isMobile && logosbase.secondaryNav.$menuLinks.length > 0) {
        const currentItem = logosbase.secondaryNav.getCurrentItem(ws);
        logosbase.secondaryNav.setCurrentItem(currentItem);
      }

      // Stick once when window is scrolled past initial position of the secondary nav
      if (ws > logosbase.secondaryNav.initialMenuPosition) {
        logosbase.secondaryNav.setStickyOffset();
        logosbase.secondaryNav.stick();
      } else {
        logosbase.secondaryNav.unstick();
      }
    },
    onResize: function () {
      var $window = logosbase.secondaryNav.$window;
      var isMobile = logosbase.secondaryNav.isMobile;
      var breakpoint = logosbase.secondaryNav.breakpoint;
      if ($window.width() != logosbase.secondaryNav.winWidth) {
        clearTimeout(this.resizeTimer);
        this.resizeTimer = setTimeout(function () {
          var newIsMobile = logosbase.secondaryNav.winWidth < breakpoint;

          if (newIsMobile != isMobile) {
            logosbase.secondaryNav.isMobile = newIsMobile;
          }
          logosbase.secondaryNav.reset();
          logosbase.secondaryNav.winWidth = $(window).width();
        }, 250);
      }

      if (logosbase.secondaryNav.$menu.hasClass('secondary-nav--unlimited')) {
        logosbase.secondaryNav.autoNavMore();
      }
    },
    onOrientationChange: function () {
      var $window = logosbase.secondaryNav.$window;
      var isMobile = logosbase.secondaryNav.isMobile;
      var breakpoint = logosbase.secondaryNav.breakpoint;
      var newIsMobile = $window.width() < breakpoint;

      if (newIsMobile != isMobile) {
        logosbase.secondaryNav.isMobile = newIsMobile;
      }
      logosbase.secondaryNav.reset();
    },
    onNavToggleClick: function (e) {
      e.preventDefault();
      logosbase.secondaryNav.toggleNav();
    },
    onLinkClick: function (e) {
      var isMobileNavInit;
      var isDropdownInit;
      var $dropdownToggle;
      if ($(e.target.hash)[0]) {
        isMobileNavInit = logosbase.secondaryNav.isMobileNavInit;
        isDropdownInit = logosbase.secondaryNav.isDropdownInit;
        e.preventDefault();
        e.target.blur();
        if (isMobileNavInit) {
          logosbase.secondaryNav.toggleNav(function () {
            logosbase.secondaryNav.scrollTo(e.target.hash, e.target.textContent);
          });
        } else {
          logosbase.secondaryNav.scrollTo(e.target.hash, e.target.textContent);
        }
        if (!isMobileNavInit && isDropdownInit) {
          $dropdownToggle = $(e.target)
            .closest('.secondary-nav__dropdown')
            .siblings('.secondary-nav__dropdown-toggle');
          logosbase.secondaryNav.toggleDropdown($dropdownToggle);
        }
      } else if (e.target.getAttribute('href') === '#') {
        isMobileNavInit = logosbase.secondaryNav.isMobileNavInit;
        isDropdownInit = logosbase.secondaryNav.isDropdownInit;
        e.preventDefault();
        e.target.blur();
        if (isMobileNavInit) {
          logosbase.secondaryNav.toggleNav(function () {
            logosbase.secondaryNav.scrollTo('#', e.target.textContent);
          });
        } else {
          logosbase.secondaryNav.scrollTo('#', e.target.textContent);
        }
        if (!isMobileNavInit && isDropdownInit) {
          $dropdownToggle = $(e.target)
            .closest('.secondary-nav__dropdown')
            .siblings('.secondary-nav__dropdown-toggle');
          logosbase.secondaryNav.toggleDropdown($dropdownToggle);
        }
      }
    },
    onDropdownToggleClick: function (e) {
      //If link is internal prevent default
      let anchorLink = e.target.getAttribute('href');

      //Added this condition to also catch the svg's and polylines used on the mobile version
      if (e.target.tagName === 'svg' || e.target.tagName === 'polyline') {
        e.preventDefault();
      } else if (anchorLink.startsWith('#')) {
        e.preventDefault();
      }

      logosbase.secondaryNav.toggleDropdown($(e.target));
    },
    stick: function () {
      this.$menu.addClass('secondary-nav--fixed');
      this.$body.css('marginTop', this.menuHeight + 'px');

      if (this.$menu.hasClass('secondary-nav--open')) {
        this.$body[0].style.overflow = 'hidden';
      }
    },
    unstick: function () {
      this.$menu.removeClass('secondary-nav--fixed');
      this.$body.css('marginTop', 0);
    },
    toggleNav: function (callback) {
      var shouldOpen = !this.$menu.hasClass('secondary-nav--open');
      var isStuck = this.$menu.hasClass('secondary-nav--fixed');

      this.$menuToggle.toggleClass('secondary-nav__toggle--active');
      this.$menu.toggleClass('secondary-nav--open');

      if (isStuck) {
        if (shouldOpen) {
          this.$body[0].style.overflow = 'hidden';
        } else {
          this.$body[0].style.overflow = 'auto';
        }
      }

      setTimeout(callback, 400);
    },
    toggleDropdown: function ($dropdownToggle, callback) {
      if (!$dropdownToggle.hasClass('secondary-nav__dropdown-toggle')) {
        $dropdownToggle = $dropdownToggle.parents('.secondary-nav__dropdown-toggle');
      }
      var $dropdown = $dropdownToggle
        .closest('.secondary-nav__item')
        .find('.secondary-nav__dropdown');
      $dropdown.slideToggle(400, function () {
        if ($(this).is(':visible')) {
          $(this).css('display', 'block');
        }
      });
      $dropdownToggle.toggleClass('secondary-nav__dropdown-toggle--flipped');
      setTimeout(callback, 400);
    },
    scrollTo: function (targetSelector, targetName) {
      var menuHeight = this.menuHeight;
      var stickyOffset = logosbase.secondaryNav.getStickyOffset();
      var $target;
      if (targetSelector === '#') {
        $target = $('body');
      } else {
        $target = $(targetSelector);
      }
      var targetOffset = $target.offset().top;

      $('html, body').animate(
        {
          scrollTop: targetOffset - stickyOffset - menuHeight,
        },
        1000,
        function () {
          if (this.isMobile) {
            setTimeout(
              function () {
                this.setCurrentItem(targetName);
              }.bind(this),
              100
            );
          }
        }.bind(this)
      );
    },
    setCurrentItem: function (name) {
      var $list = $('.secondary-nav__list');
      if ($('.secondary-nav__current').length) {
        $('.secondary-nav__current').text(name);
      } else {
        $list.before($(CurrentNavItem(name)));
      }
    },
    getCurrentItem: function (ws) {
      var $menuLinks = logosbase.secondaryNav.$menuLinks;
      var sectionOffsets = logosbase.secondaryNav.sectionOffsets;
      var currentItem = $menuLinks[0].textContent;
      for (var i = 0; i < sectionOffsets.length; i++) {
        if (ws > sectionOffsets[i] - this.menuHeight) {
          currentItem = $menuLinks[i].textContent;
        }
      }
      return currentItem;
    },
    getStickyOffset: function () {
      let logosbase_elements = [...document.querySelectorAll('.logosbase *')];
      let hotJar_elements = [...document.querySelectorAll('._hj-widget-container *')];
      let fixed_elements = [...document.querySelectorAll('*')].filter(function (el) {
        return isImportantStickElement(el, 150, [...logosbase_elements, ...hotJar_elements]);
      });
      return getLargestDistanceFromTopOfWindow(fixed_elements);
    },
    setStickyOffset: function () {
      this.sheet.innerHTML = `.logosbase .secondary-nav.secondary-nav--fixed, .logosbase_l8 .secondary-nav.secondary-nav--fixed, .logosbase_l9 .secondary-nav.secondary-nav--fixed { top: ${logosbase.secondaryNav.getStickyOffset()}px; }`;
      logosbase.secondaryNav.isStickyOffsetSet = true;
    },
    initSecondaryNavUnlimited: function () {
      this.$mainMenu = $('#mainMenu');
      this.$autoNav = $('#autoNav');
      this.$autoNavMore = $('#autoNavMore');
      this.$autoNavMoreList = $('#autoNavMoreList');
      this.$autoNavMore.bind('click', logosbase.secondaryNav.onDropdownToggleClick);
      this.autoNavMore();
    },
    autoNavMore: function () {
      //calculate width of items in nav bar
      if ($(window).width() <= 600) {
        // move all items out of more dropdown
        let $children = logosbase.secondaryNav.$mainMenu.find(
          '.auto-nav-more .secondary-nav__item'
        );
        $children.insertBefore(logosbase.secondaryNav.$autoNavMore);
        logosbase.secondaryNav.$autoNavMore.hide();
      } else {
        // if items in nav bar > window width, move  items to to more dropdown
        const $menuWidth = logosbase.secondaryNav.$mainMenu.width();
        let $autoNavWidth = logosbase.secondaryNav.$autoNav.width();
        if ($autoNavWidth > $menuWidth) {
          while ($autoNavWidth > $menuWidth) {
            //move 1 item into more dropdown
            let $item_to_move = logosbase.secondaryNav.$mainMenu
              .find('.main-nav > .secondary-nav__item:not(.auto-nav-more)')
              .last();
            $item_to_move.prependTo(logosbase.secondaryNav.$autoNavMoreList);
            logosbase.secondaryNav.$autoNavMore.show();
            $autoNavWidth = logosbase.secondaryNav.$autoNav.width();
          }
        } else {
          let $last_more_item = logosbase.secondaryNav.$autoNavMoreList
            .find('.secondary-nav__item')
            .first();
          while ($last_more_item.width() + $autoNavWidth < $menuWidth) {
            // move as many children out of dropwdown as possible
            $last_more_item.insertBefore(logosbase.secondaryNav.$autoNavMore);
            $last_more_item = logosbase.secondaryNav.$autoNavMoreList
              .find('.secondary-nav__item')
              .first();
            $autoNavWidth = logosbase.secondaryNav.$autoNav.width();
            // hide more if empty
            if (logosbase.secondaryNav.$autoNavMoreList.children().length == 0) {
              logosbase.secondaryNav.$autoNavMore.hide();
            }
          }
        }
      }
    },
  },
  // Set Equal Height

  setEqualHeight: {
    init: function ($elements, minWidth) {
      var minHeight = 0;
      if (minWidth !== undefined) {
        if ($(window).width() < minWidth) {
          return;
        }
      }
      $elements.each(function () {
        var outerHeight = $(this).outerHeight();
        minHeight = outerHeight > minHeight ? outerHeight : minHeight;
      });

      if (minHeight == 0) {
        setTimeout(function () {
          logosbase.setEqualHeight.init($elements, minWidth);
        }, 200);
      } else {
        $elements.each(function () {
          $(this).css('min-height', minHeight);
        });
      }
    },
  },

  // Video Background

  videoBg: {
    init: function ($els) {
      var ua = window.navigator.userAgent;
      var iOS = /iPad|iPhone|iPod/.test(ua);
      var Android = /Android/.test(ua);
      var isMinWidth = $(window).width() >= 769;

      if (!iOS && !Android && isMinWidth) {
        $els.each(function () {
          var $this = $(this);
          var $videoBg = $('<div class="video-bg"></div>');
          //var bg = $this.attr('data-bg');
          var $video = $('<video loop="true" autoplay="true" muted="true"></video>');
          var sources = '';
          var mp4 = $this.attr('data-mp4');
          var ogg = $this.attr('data-ogg');
          var webm = $this.attr('data-webm');
          var mp4Html = mp4 ? '<source src="' + mp4 + '" type="video/mp4">' : '';
          var oggHtml = ogg ? '<source src="' + ogg + '" type="video/ogg">' : '';
          var webmHtml = webm ? '<source src="' + webm + '" type="video/webm">' : '';

          if (mp4 || ogg || webm) {
            sources = mp4Html + oggHtml + webmHtml;
            $video.html(sources);
            $videoBg.html($video);
            $this.prepend($videoBg);
          }
        });
      }
    },
  },
};

function incrementQuantity(event) {
  const parentElement = event.target.parentElement;
  const quantityInput = parentElement.querySelector('input');
  const inputValue = parseInt(quantityInput.value);
  quantityInput.value = inputValue + 1;
  validateInputField(event, inputValue + 1);
}

function decrementQuantity(event) {
  const parentElement = event.target.parentElement;
  const quantityInput = parentElement.querySelector('input');
  const inputValue = parseInt(quantityInput.value);
  if (inputValue > 2 || inputValue < 2500) {
    quantityInput.value = inputValue - 1;
    validateInputField(event, inputValue - 1);
  }
}

function handleResourceButtonClick(event) {
  const sku = event.target.dataset['sku'];
  const quantity = event.target.parentElement.querySelector('.quantity-controller input').value;
  const newUrl = `/buy/${sku}?quantity=${quantity}`;
  updateModalButtonURL(newUrl); // eslint-disable-line no-undef
  openModal(newUrl); // eslint-disable-line no-undef
}

function validateInputField(event, quantity = null) {
  if (!quantity) {
    quantity = parseInt(
      event.target.parentElement.querySelector('.quantity-controller input').value
    );
  }
  const resourceButton = event.target.parentElement.parentElement.querySelector('button.btn');
  if (Number.isInteger(quantity) && quantity >= 2 && quantity <= 2500) {
    resourceButton.disabled = false;
  } else {
    resourceButton.disabled = true;
  }
}

function initQuantityControllerButtons() {
  var incrementButtons = document.querySelectorAll('.quantity-controller__plus');
  var decrementButtons = document.querySelectorAll('.quantity-controller__minus');
  var resourceButtons = document.querySelectorAll('.resource .quantity-controller__btn');
  var inputFields = document.querySelectorAll('.quantity-controller input');

  incrementButtons.forEach((button) => button.addEventListener('click', incrementQuantity));
  decrementButtons.forEach((button) => button.addEventListener('click', decrementQuantity));
  resourceButtons.forEach((button) => button.addEventListener('click', handleResourceButtonClick));
  inputFields.forEach((input) => input.addEventListener('input', validateInputField));
}

function initGroupLicenseHoverEvents() {
  const tooltips = [...document.querySelectorAll('.logosbase_l9 .quantity-controller__tooltipBox')];
  tooltips.forEach((tooltip) => {
    tooltip.addEventListener('mouseenter', () => {
      tooltip.querySelector('.quantity-controller__tooltip').setAttribute('aria-hidden', false);
    });
    tooltip.addEventListener('mouseleave', () => {
      tooltip.querySelector('.quantity-controller__tooltip').setAttribute('aria-hidden', true);
    });
  });
}

function initCountdownTimers() {
  const timers = [...document.querySelectorAll('.logosbase .countdown-timer')];
  timers.forEach((timer) => {
    new CountdownTimer(timer);
  });
}
class CountdownTimer {
  constructor(timer_element) {
    this.timer_element = timer_element;
    this.deadline = this.timer_element.getAttribute('data-countdown-timer-deadline');
    this.display_day = this.timer_element.querySelector('.countdown-timer__days');
    this.display_hour = this.timer_element.querySelector('.countdown-timer__hours');
    this.display_minute = this.timer_element.querySelector('.countdown-timer__minutes');
    this.display_second = this.timer_element.querySelector('.countdown-timer__seconds');

    this.intervalFunc = () => {
      this.updateCountdownTimer();
    };

    this.intervalFunc();
    this.time_interval = setInterval(this.intervalFunc, 1000);
  }

  getCountdownTimeRemaining() {
    const total = Date.parse(this.deadline) - Date.parse(new Date());
    const seconds = Math.floor((total / 1000) % 60);
    const minutes = Math.floor((total / 1000 / 60) % 60);
    const hours = Math.floor((total / (1000 * 60 * 60)) % 24);
    const days = Math.floor(total / (1000 * 60 * 60 * 24));

    return {
      total: total,
      days: days,
      hours: hours,
      minutes: minutes,
      seconds: seconds,
    };
  }

  updateCountdownTimer() {
    const time_remaining = this.getCountdownTimeRemaining();
    if (time_remaining.total <= 0 && typeof this.time_interval != 'undefined') {
      clearInterval(this.time_interval);
    }
    if (this.display_day !== null) {
      this.display_day.innerHTML = ('' + Math.max(0, time_remaining.days)).padStart(2, '0');
    }
    if (this.display_hour !== null) {
      this.display_hour.innerHTML = ('0' + Math.max(0, time_remaining.hours)).slice(-2);
    }
    if (this.display_minute !== null) {
      this.display_minute.innerHTML = ('0' + Math.max(0, time_remaining.minutes)).slice(-2);
    }
    if (this.display_second !== null) {
      this.display_second.innerHTML = ('0' + Math.max(0, time_remaining.seconds)).slice(-2);
    }
  }
}

document.addEventListener('DOMContentLoaded', () => {
  initializeLoadMotion();
  initializeScrollMotion();
  initQuantityControllerButtons();
  initGroupLicenseHoverEvents();
  initCountdownTimers();
});
