HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/tana/frontend/build/assets/scripts/app.min.js
(function() {
  /**
   * Returns a function, that, as long as it continues to be invoked, will not
   * be triggered. The function will be called after it stops being called for
   * N milliseconds. If `immediate` is passed, trigger the function on the
   * leading edge, instead of the trailing.
   * @param {Function} func - Function to be debounced.
   * @param {Number} wait - Debounce time in milliseconds.
   * @param {Boolean} immediate - Trigger the function on the leading edge if true.
   */
  function debounce(func, wait, immediate) {
    var timeout;
    return function() {
      var context = this;
      var args = arguments;
      var later = function() {
        timeout = null;
        if (!immediate) func.apply(context, args);
      };
      var callNow = immediate && !timeout;
      clearTimeout(timeout);
      timeout = setTimeout(later, wait);
      if (callNow) func.apply(context, args);
    };
  }

  /**
   * Custom easing function.
   * @param {number} pos
   */
  function easeOutCubic(pos) {
    return Math.pow(pos - 1, 3) + 1;
  }

  /**
   *
   * @param {HTMLElement} element - Element from which classes will be removed
   * @param {string} prefix - Class prefix that is used to search for specific classes. For example 'theme' will remove all classes that start with theme (theme-one, theme-blue etc.).
   */
  function removeClassesWithPrefix(element, prefix) {
    var classes = element.className.split(' ').filter(function(c) {
      return c.lastIndexOf(prefix, 0) !== 0;
    });
    element.className = classes.join(' ').trim();
  }

  function findGetParameter(parameterName) {
    var result = null,
      tmp = [];
    location.search
      .substr(1)
      .split('&')
      .forEach(function(item) {
        tmp = item.split('=');
        if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
      });
    return result;
  }

  function checkDomain(url) {
    if (url.indexOf('//') === 0) {
      url = window.location.protocol + url;
    }
    return url
      .toLowerCase()
      .replace(/([a-z])?:\/\//, '$1')
      .split('/')[0];
  };

  function isUrlExternal(url) {
    return (url.indexOf(':') > -1 || url.indexOf('//') > -1) && checkDomain(window.location.href) !== checkDomain(url);
  };

  function getRandomIntInclusive(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive
  }

  // CSS used for one page scroll, needs to only be injected when needed otherwise it kills scrolling on other pages because of overflow hiding
  var pageScrollCSS =
    ".onepage-wrapper,.onepage-wrapper .section{width:100%;height:100%}body,html{margin:0;overflow:hidden;-webkit-transition:opacity .4s;-moz-transition:opacity .4s;transition:opacity .4s}.onepage-wrapper,body,html{display:block;position:static;padding:0;width:100%;height:100%}.onepage-wrapper{display:block;position:relative;padding:0;-webkit-transform-style:preserve-3d}.onepage-pagination{position:absolute;right:10px;top:50%;z-index:5;list-style:none;margin:0;padding:0}.onepage-pagination li{padding:0;text-align:center}.onepage-pagination li a{padding:10px;width:4px;height:4px;display:block}.onepage-pagination li a:before{content:'';position:absolute;width:4px;height:4px;background:rgba(0,0,0,.85);border-radius:10px;-webkit-border-radius:10px;-moz-border-radius:10px}.onepage-pagination li a.active:before{width:10px;height:10px;background:0 0;border:1px solid #000;margin-top:-4px;left:8px}.disabled-onepage-scroll,.disabled-onepage-scroll .wrapper{overflow:auto}.disabled-onepage-scroll .onepage-wrapper .section{position:relative!important;top:auto!important;left:auto!important}.disabled-onepage-scroll .onepage-wrapper{-webkit-transform:none!important;-moz-transform:none!important;transform:none!important;-ms-transform:none!important;min-height:100%}.disabled-onepage-scroll .onepage-pagination{display:none}.disabled-onepage-scroll .onepage-wrapper,body.disabled-onepage-scroll,html{position:inherit}";

  // Injecting CSS
  /**
   * Inject CSS `<style>` tag with desired CSS and `id` into the `<head>` element
   * @param {string} rule - String of CSS to be injected
   * @param {string} id - id for the style node that will be appended.
   */
  function injectCSS(rule, id) {
    var css = document.createElement('style'); // Creates <style></style>
    css.type = 'text/css'; // Specifies the type
    css.id = id;
    if (css.styleSheet) css.styleSheet.cssText = rule;
    // Support for IE
    else css.appendChild(document.createTextNode(rule)); // Support for the rest
    document.getElementsByTagName('head')[0].appendChild(css); // Specifies where to place the css
  }

  var handleMenuToggle = function() {
    if (!document.body.classList.contains('menu-open')) {
      document.body.classList.add('menu-open');
    } else {
      document.body.classList.remove('menu-open');
    }
  };

  $('body').on('click', '#menuToggle', handleMenuToggle);

  // Onepage scroll
  function initOnepageScroll() {
    var $scrolledPages = $('.scrolled-pages__container');
    if ($scrolledPages.length) {
      injectCSS(pageScrollCSS, 'pageScrollCSS'); // maybe not needed now with some new tweaks

      var body = document.body;
      var navbar = document.querySelector('.navbar');

      var sliderOptions = {
        sectionContainer: '.scrolled-pages__page',
        pagination: false,
        animationTime: 600,
        ease: 'linear',
        loop: false,
        responsiveFallback: 768,
      };

      $scrolledPages.onepage_scroll(sliderOptions);
    }
  }

  initOnepageScroll();

  function subpageOpen() {
    if (!pageBody.classList.contains('secondary-page-open')) {
      pageBody.classList.add('secondary-page-open');
      document.getElementById('secondaryPage').scrollTop = 0;
    }

    if ($('.scrolled-pages__container').length && window.innerWidth > 768) {
      $('.scrolled-pages__container').revertToNativeScroll();
    }
  }

  function tertiarySubpageOpen() {
    if (!pageBody.classList.contains('tertiary-page-open')) {
      pageBody.classList.add('tertiary-page-open');
      document.getElementById('tertiaryPage').scrollTop = 0;
    }

    if ($('.scrolled-pages__container').length && window.innerWidth > 768) {
      $('.scrolled-pages__container').revertToNativeScroll();
    }
  }

  function getSecondaryPageHTML(secondaryPageData, additionalClass) {
    additionalClass = additionalClass || '';
    var secondaryPageHTML = '';
    var secondaryPageImage = '';
    var secondaryPageLeadText = '';
    var articlePublishDate = '';
    if (secondaryPageData.image) {
      secondaryPageImage += '<div class="col-xs-12">' + '<img src="' + secondaryPageData.image + '" alt="" class="secondary-page__image">' + '</div>';
    }

    if (secondaryPageData.h_text) {
      secondaryPageLeadText = '<div class="col-xs-12 col-sm-8">' + '<div class="secondary-page__post-lead">' + secondaryPageData.h_text + '</div>' + '</div>';
    }

    if (secondaryPageData.publish_date) {
      articlePublishDate = '<div class="col-xs-12">' + '<div class="secondary-page__date">' + secondaryPageData.publish_date + '</div>' + '</div>';
    }

    secondaryPageHTML +=
      '<div class="container">' +
      '<div class="row">' +
      '<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-lg-6 col-lg-offset-3">' +
      '<div class="row">' +
      articlePublishDate +
      '<div class="col-xs-12">' +
      '<h2 class="secondary-page__title">' +
      secondaryPageData.title +
      '</h2>' +
      '</div>' +
      secondaryPageImage +
      '<div class="col-xs-12">' +
      '<div class="secondary-page__post">' +
      '<div class="row">' +
      secondaryPageLeadText +
      '<div class="col-xs-12">' +
      '<div class="secondary-page__post-content ' +
      additionalClass +
      '">' +
      secondaryPageData.text +
      '</div>' +
      '</div>' +
      '</div>' +
      '</div>' +
      '</div>' +
      '</div>' +
      '</div>' +
      '</div>' +
      '</div>' +
      '<div class="circle-part circle-part--bottom">' +
      '<svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 1440 345"><path fill="#1428aa" d="M719.5 345.4A1056 1056 0 0 0 1440 61.8V0c-184.3 185.5-439.1 300.4-720 300.4S184.3 185.5 0 0v62.8a1056.2 1056.2 0 0 0 719.5 282.6z"/></svg>' +
      '</div>';

    return secondaryPageHTML;
  }

  function getRandomPageImageURL(imagesSource) {
    if (imagesSource && imagesSource.length > 0) {
      var randomNumber = getRandomIntInclusive(0, imagesSource.length - 1);
      return imagesSource[randomNumber].url;
    }

    return null;
  }

  var handleSubpageOpening = function(event) {
    event.preventDefault();
    var clickedElement = event.currentTarget;
    var subpageURL = clickedElement.href;
    var subpage = document.getElementById('secondaryPage');
    var subpageContent = subpage.querySelector('.secondary-page__content');

    $.ajax(subpageURL).then(function(response) {
      var tempElement = document.createElement('div');
      tempElement.innerHTML = response;
      var fetchedPageContent = tempElement.querySelector('.secondary-page__content');
      var subpageImagesData = JSON.parse(fetchedPageContent.getAttribute('data-subpage-images'));
      var imageSource = getRandomPageImageURL(subpageImagesData);
      subpageContent.innerHTML = fetchedPageContent.innerHTML;
      if (imageSource) {
        subpageContent.querySelector('.secondary-page__image').src = imageSource
      }
      subpageOpen();
      window.history.pushState({}, '', subpageURL);
    })
  };

  var handleTertiaryOpening = function(event) {
    var clickedElement = event.currentTarget;
    var clickedUrl = clickedElement.href;
    if (!isUrlExternal(clickedUrl)) {
      event.preventDefault();

      $.ajax(clickedUrl).then(function(response) {
        var tempContent = document.createElement('div');
        tempContent.innerHTML = response;
        var fetchedPageContent = tempContent.querySelector('.secondary-page__content');
        var tertiarySubpageContent = document.getElementById('tertiaryPage').querySelector('.tertiary-page__content');
        tertiarySubpageContent.innerHTML = fetchedPageContent.innerHTML;
        tertiarySubpageOpen();
      });
    }
  };

  $('body').on('click', '[data-open-subpage]', handleSubpageOpening);
  $('body').on('click', '.special-editor-content a', handleTertiaryOpening);

  var handleSubpageClosing = function() {
    if (document.body.classList.contains('secondary-page-open')) {
      document.body.classList.remove('secondary-page-open');
      window.history.back();
    }

    if (window.innerWidth > 768 && $('.scrolled-pages__container').length && $('.scrolled-pages__container').reinitOnepageScroll) {
      $('.scrolled-pages__container').reinitOnepageScroll();
    }
  };

  var handleTertiaryClosing = function() {
    if (document.body.classList.contains('tertiary-page-open')) {
      document.body.classList.remove('tertiary-page-open');
    }

    if (window.innerWidth > 768 && $('.scrolled-pages__container').length && $('.scrolled-pages__container').reinitOnepageScroll) {
      $('.scrolled-pages__container').reinitOnepageScroll();
    }
  };

  $('body').on('click', '.secondary-page__close', handleSubpageClosing);
  $('body').on('click', '.tertiary-page__close', handleTertiaryClosing);

  // Full Page switching transition
  var pageBody = document.body;

  function addTransitionCircle() {
    var transitionCircleHTML = '<div class="transition-circle">' + '<div class="transition-circle__inner-circle">' + '</div>' + '</div>';

    return transitionCircleHTML;
  }

  function removeTransitionCircles() {
    var transitionCircle = document.querySelectorAll('.transition-circle');
    transitionCircle.forEach(function(singleCircle) {
      singleCircle.parentNode.removeChild(singleCircle);
    });
  }

  function getNavbarHTML() {
    return document.getElementById('navbar').outerHTML;
  }

  var handleNavLinkClick = function(event) {
    var windowWidth = window.innerWidth;
    var clickedNavItem = event.currentTarget;
    if (windowWidth < 768) return;

    var clickedPageID = parseInt(clickedNavItem.getAttribute('data-target'), 10);
    // If clicked page is the one user is already on, don't do anything.
    if (clickedPageID === parseInt(pageBody.id) || pageBody.classList.contains('page-transition-starting')) {
      event.preventDefault();
      return;
    }

    event.preventDefault();
    var pageHref = clickedNavItem.href;
    if ($('.scrolled-pages__container').revertToNativeScroll) {
      $('.scrolled-pages__container').revertToNativeScroll();
    }

    var visibleWrapper = document.querySelector('.content-wrapper');
    var invisibleWrapper = document.querySelector('.content-wrapper-second');
    var newPageHTML = '';
    var newPageTheme = '';

    visibleWrapper.insertAdjacentHTML('beforeend', addTransitionCircle());
    invisibleWrapper.insertAdjacentHTML('beforeend', addTransitionCircle());
    setTimeout(function() {
      pageBody.classList.add('page-transition-starting');
    }, 100);

    var requestData = {
      action: 'tana_pages_ajax',
      'page-id': clickedPageID,
    };

    var ajaxSettings = {
      async: true,
      url: ajaxurl,
      data: requestData,
      method: 'POST',
      dataType: 'json',
    };

    $.ajax(ajaxSettings).done(function(pageResult) {
      pageResult = pageResult[0];
      newPageHTML += getNavbarHTML();
      newPageHTML += pageResult.content;
      newPageTheme = pageResult.theme;
      currentArticlePage = 1;

      invisibleWrapper.insertAdjacentHTML('afterbegin', newPageHTML);
      pageBody.id = clickedPageID;
      invisibleWrapper.querySelector('.navbar-nav__item--active') &&
        invisibleWrapper.querySelector('.navbar-nav__item--active').classList.remove('navbar-nav__item--active');
      invisibleWrapper.querySelector('.navbar-nav__item a[data-target="' + clickedPageID + '"]').parentNode.classList.add('navbar-nav__item--active');

      invisibleWrapper.style.display = 'block';
      removeClassesWithPrefix(pageBody, 'theme');
      removeClassesWithPrefix(invisibleWrapper, 'theme');
      setTimeout(function() {
        visibleWrapper.style.transform = 'translateX(-100%)';
        invisibleWrapper.style.transform = 'translateX(0)';

        if (newPageTheme != 'none') {
          invisibleWrapper.classList.add('theme-' + newPageTheme);
        }

        // Removes onepage scroll CSS if it exists on page because it messes with other pages and should only be used on homepage.
        document.getElementById('pageScrollCSS') && document.getElementById('pageScrollCSS').parentNode.removeChild(document.getElementById('pageScrollCSS'));
        window.history.pushState('', '', pageHref);
        document.title = clickedNavItem.textContent + ' | Tana';

        setTimeout(function() {
          visibleWrapper.innerHTML = '';
          fadeElements();

          if (newPageTheme === 'none') {
            initOnepageScroll();
            initSliders();
          }

          if (window.innerWidth >= 768) {
            activateCategorySticky();
          }

          if (newPageTheme === 'gray-alternate') {
            contactsPageFullCircle();
          }
        }, 400);

        setTimeout(function() {
          pageBody.classList.remove('page-transition-starting');
          visibleWrapper.style.display = 'none';

          setTimeout(function() {
            visibleWrapper.classList.add('content-wrapper-second');
            visibleWrapper.classList.remove('content-wrapper');
            invisibleWrapper.classList.add('content-wrapper');
            invisibleWrapper.classList.remove('content-wrapper-second');
            removeClassesWithPrefix(pageBody, 'theme');
            if (newPageTheme != null) {
              pageBody.classList.add('theme-' + newPageTheme);
            }
            visibleWrapper.style = '';
            invisibleWrapper.style = '';
            removeTransitionCircles();
          }, 400);
        }, 800);
      }, 1200);
    });
  };

  $('body').on('click', '.navbar-nav__item a', handleNavLinkClick);

  // Position: sticky stuff
  var stickyElementInstance = null;
  function activateCategorySticky() {
    var stickyElement = document.querySelectorAll('.sticky-follow');
    Stickyfill.add(stickyElement);

    // Add special class on position sticky items when they get "stuck"
    var stickyScrollHandler = debounce(function() {
      var stickyElements = document.getElementsByClassName('sticky-follow');
      var scrollY = window.pageYOffset;
      for (var i = stickyElements.length - 1; i >= 0; i--) {
        if (scrollY >= stickyElements[i].getAttribute('data-top')) stickyElements[i].classList.add('js-is-sticky');
        else {
          stickyElements[i].classList.remove('js-is-sticky');
        }
      }
    }, 5);

    window.addEventListener('scroll', stickyScrollHandler);
    var stickyElements = document.getElementsByClassName('sticky-follow');
    for (var i = stickyElements.length - 1; i >= 0; i--) {
      stickyElements[i].setAttribute('data-top', stickyElements[i].offsetTop);
      Stickyfill.add(stickyElements[i]);
    }
  }

  var handleStickyOnResize = debounce(function() {
    var windowWidth = window.innerWidth;
    if (windowWidth >= 768 && !stickyElementInstance) {
      activateCategorySticky();
    } else if (windowWidth < 768) {
      if (stickyElementInstance && stickyElementInstance.removeAll) {
        stickyElementInstance.removeAll();
        stickyElementInstance = null;
      }
    }
  }, 300);

  if (window.innerWidth > 768) {
    activateCategorySticky();
  }

  window.addEventListener('resize', handleStickyOnResize);

  // Fade containers one after each other //
  /**
   * Add faded--in class to single element.
   * @param {HTMLElement} singleElement - Single element to fade in.
   */
  function fadeSingleIn(singleElement) {
    singleElement.classList.add('faded--in');
  }

  /**
   * Fade in array of elements.
   * @param {Array} allElements - Array of elements to fade. Best to send result of document.getElementsByClassName here (or any other DOM method like that)
   * @param {*} delay - Delay in miliseconds (ms) between each fade. Default 200.
   */
  function fadeAllIn(allElements, delay) {
    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;

    var index = 0;
    var i = 0;
    for (i = 0; i < allElements.length; i += 1) {
      setTimeout(function() {
        fadeSingleIn(allElements[index]);
        index += 1;
      }, delay * (i + 1));
    }
  }

  function fadeElements() {
    var elementsToFade = document.getElementsByClassName('faded');

    if (elementsToFade.length) {
      fadeAllIn(elementsToFade);
    }
  }

  /**
   * Set the fill of the SVG circle. 0 is empty, 100 is full.
   * @param {number} percent - Circle percentage fill, passed without '%'.
   * @param {number} circumference - Circle circumference.
   */
  function setProgress(percent, circumference) {
    var offset = circumference - (percent / 100) * circumference;
    return offset;
  }

  function contactsPageFullCircle() {
    document.getElementById('fullPageCircle').innerHTML = '';
    var draw = SVG('fullPageCircle').size('100%', '100%');
    draw.viewbox(0, 0, 100, 100);
    var circle = draw.circle(1000).attr({
      fill: 'transparent',
      stroke: 'transparent',
      'stroke-width': '3.5px',
      r: '68%',
      cx: '50%',
      cy: '50%',
    });

    setTimeout(function() {
      var circleElement = circle.node;
      var circleRadius = circleElement.r.baseVal.value;
      var circleCircumference = circleRadius * 2 * Math.PI;
      circleElement.setAttribute('preserveAspectRatio', 'none');

      circle.rotate(-90, 50, 50);
      circle.attr({
        'stroke-dasharray': circleCircumference + ' ' + circleCircumference,
        'stroke-dashoffset': circleCircumference,
        stroke: '#1428aa',
      });

      circle.attr({
        'stroke-dashoffset': setProgress(1, circleCircumference),
      });

      circle.animate(1500, easeOutCubic).attr({
        'stroke-dashoffset': setProgress(100, circleCircumference),
      });
    }, 200);
  }

  // For contacts page only
  if (window.innerWidth > 992 && pageBody.classList.contains('theme-gray-alternate')) {
    contactsPageFullCircle();
  }

  var handleContactCircleOnResize = debounce(function() {
    if (document.getElementById('fullPageCircle') && !document.getElementById('fullPageCircle').querySelector('svg') && window.innerWidth > 992) {
      contactsPageFullCircle();
    }
  }, 200);

  window.addEventListener('resize', handleContactCircleOnResize);

  function getLinksHTML(linksData) {
    var linksHTML = '';
    var itemCounter = 1;
    linksData.forEach(function(singleItem) {
      if (itemCounter === 1) {
        linksHTML += '<div class="col-md-4">';
      }
      linksHTML +=
        '<div class="links-grid__single faded">' +
        '<h4 class="links-grid__single-title">' +
        singleItem.title +
        '</h4>' +
        '<ul class="list list--unstyled links-grid__single-list">';
      singleItem.links_2.forEach(function(singleItemLinks) {
        linksHTML += '<li>' + '<a href="' + singleItemLinks.link_url + '">' + singleItemLinks.link_title + '</a>' + '</li>';
      });
      linksHTML += '</ul>' + '</div>';

      if (itemCounter === 3) {
        linksHTML += '</div>';
        itemCounter = 1;
      } else {
        itemCounter += 1;
      }
    });

    return linksHTML;
  }

  var currentArticlePage = 1;
  var activeType = 'post';
  var activeCategory = null;
  var activeCategoryName = 'all';
  // Fetching articles
  var handleCategoryLinkClick = function(event) {
    event.preventDefault();
    var clickedLink = event.currentTarget;

    if (clickedLink.classList.contains('list-categories__item--active')) return;

    var resultsContainer = document.querySelector('.results-container');
    var requestData = {};
    var ajaxSettings = {
      async: true,
      url: ajaxurl,
      method: 'POST',
      data: requestData,
    };
    currentArticlePage = 1;

    if (!clickedLink.hasAttribute('data-type')) {
      // All articles
      requestData.action = 'tana_posts_load_more';
      requestData.paged = 1;
      requestData['page-id'] = pageBody.id;
      $.ajax(ajaxSettings).done(function(result) {
        activeType = 'post';
        activeCategory = null;
        activeCategoryName = 'all';
        if (resultsContainer) {
          resultsContainer.querySelector('.row').innerHTML = result;
        }
        window.history.pushState({}, '', window.location.origin + '/insights-resources/');
        fadeElements();
      });
    } else {
      var clickedType = clickedLink.getAttribute('data-type');
      var perPage = 9;
      if (clickedType === 'links') {
        requestData['page-id'] = pageBody.id;
        requestData['data-subpage-type'] = 'links-grid';
        requestData.action = 'tana_secondary_pages_ajax';
        $.ajax(ajaxSettings).done(function(result) {
          result = result[0];
          activeType = 'links';
          if (resultsContainer) {
            resultsContainer.querySelector('.row').innerHTML = getLinksHTML(result);
          }
          window.history.pushState({}, '', window.location.origin + '/insights-resources/?category=links');
          fadeElements();
        });
      } else {
        requestData.action = 'tana_posts_category_load_more';
        requestData.category = clickedType;
        requestData.offset = 0;
        requestData.ppp = perPage;
        $.ajax(ajaxSettings).done(function(result) {
          activeType = 'post';
          activeCategory = clickedType;
          activeCategoryName = clickedLink.textContent.toLowerCase();
          if (resultsContainer) {
            resultsContainer.querySelector('.row').innerHTML = result;
          }
          window.history.pushState({}, '', window.location.origin + '/insights-resources/?category=' + encodeURI(clickedLink.textContent.toLowerCase()));
          fadeElements();
        });
      }
    }

    document.getElementsByClassName('list-categories__item--active')[0] &&
      document.getElementsByClassName('list-categories__item--active')[0].classList.remove('list-categories__item--active');
    clickedLink.classList.add('list-categories__item--active');
    infiniteScrollDone = true;
  };

  $('body').on('click', '.list-categories__item', handleCategoryLinkClick);

  var infiniteScrollDone = true;
  var contentWrapper = document.getElementsByClassName('content-wrapper')[0];
  var handleArticlesInfiniteScroll = debounce(function() {
    if (!resultsContainer) return;
    var isNearBottom = window.innerHeight + window.pageYOffset + 100 >= contentWrapper.scrollHeight - 2;
    if (isNearBottom && activeType === 'post' && infiniteScrollDone) {
      infiniteScrollDone = false;
      var perPage = currentArticlePage === 1 ? 9 : 6;
      var resultsContainer = document.querySelector('.results-container');
      var requestData = {};

      if (activeCategory !== null) {
        requestData.action = 'tana_posts_category_load_more';
        requestData.offset = currentArticlePage * perPage;
        requestData.category = activeCategory;
      } else {
        requestData.action = 'tana_posts_load_more';
        requestData.paged = currentArticlePage + 1;
      }

      var ajaxSettings = {
        async: true,
        url: ajaxurl,
        method: 'POST',
        data: requestData,
      };

      $.ajax(ajaxSettings).done(function(result) {
        infiniteScrollDone = true;
        currentArticlePage += 1;
        if (resultsContainer) {
          resultsContainer.querySelector('.row').insertAdjacentHTML('beforeend', result);
        }
        fadeAllIn(document.querySelectorAll('.faded:not(.faded--in)'), 250);
      });
    }
  }, 50);

  window.addEventListener('scroll', handleArticlesInfiniteScroll);

  // Homepage slider using simple-slider.js
  function initSliders() {
    var sliderContainers = document.querySelectorAll('.slider');
    sliderContainers.forEach(function(singleSliderContainer) {
      var singleSliderInstance = simpleslider.getSlider({
        container: singleSliderContainer,
        children: singleSliderContainer.querySelectorAll('.slider__image'),
        duration: 1,
        delay: 3,
        unit: '',
        prop: 'opacity',
        show: 1,
        end: 0,
      });
      singleSliderContainer.classList.add('first-slider-animation-started');
    });
  }

  initSliders();

  function routingAbout() {
    var subpageLink = findGetParameter('subpage');

    if (subpageLink) {
      document.querySelector('[data-subpage-type="about"]').click();
    }
  }

  function routingServices() {
    var subpageLink = findGetParameter('country');
    var subpageLinkServices = findGetParameter('service');

    if (subpageLink) {
      $('#servicesMap a[data-lowercase="' + subpageLink + '"]').trigger('click');
    }

    if (subpageLinkServices) {
      $('#servicesList [data-service-title="' + subpageLinkServices + '"').trigger('click');
    }
  }

  function routingKnowHow() {
    var articlesCategory = findGetParameter('category');
    var articleID = findGetParameter('article');

    if (articlesCategory) {
      document.querySelector('.list-categories__item[data-category-name="' + articlesCategory + '"]').click();
    } else {
      document.querySelector('.list-categories__item[data-category-name="all"]').click();
    }

    if (articleID) {
      var subpage = document.getElementById('secondaryPage');
      var subpageContent = subpage.querySelector('.secondary-page__content');
      var subpageContentHTML = '';
      var currentPageID = pageBody.id;

      var requestData = {
        action: 'tana_secondary_pages_ajax',
        'data-subpage-type': 'article',
        'page-id': currentPageID,
        'article-id': articleID,
      };

      var ajaxSettings = {
        async: true,
        url: ajaxurl,
        method: 'POST',
        data: requestData,
        dataType: 'json',
      };

      $.ajax(ajaxSettings).done(function(result) {
        subpageContentHTML = getSecondaryPageHTML(result[0]);
        subpageContent.innerHTML = subpageContentHTML;
        subpageOpen();
        if (!findGetParameter('category') || !findGetParameter('article')) {
          window.history.pushState(
            {},
            '',
            window.location.origin + window.location.pathname + '?category=' + encodeURI(activeCategoryName) + '&article=' + articleID
          );
        }
      });
    }
  }

  function routingContacts() {
    var subpageLink = findGetParameter('subpage');

    if (subpageLink) {
      document.querySelector('[data-subpage-type="team"]').click();
    }
  }

  var rootLink = window.location.origin;
  function handlePageRouting(event) {
    var pageLocation = window.location.pathname;

    switch (pageLocation) {
      case '/':
        routingAbout(event);
        break;
      case '/services/':
        routingServices(event);
        break;
      case '/insights-resources/':
        routingKnowHow(event);
        break;
      case '/contacts/':
        routingContacts(event);
        break;
      default:
        break;
    }

    handleSubpageClosing();
  }

  function setSubpageImageOnLoad() {
    var secondaryContentElement = document.getElementsByClassName('secondary-page__content')[0];

    if (secondaryContentElement && secondaryContentElement.hasAttribute('data-subpage-images')) {
      var imagesSource = JSON.parse(secondaryContentElement.getAttribute('data-subpage-images'));
      var randomImageUrl = getRandomPageImageURL(imagesSource);
      if (randomImageUrl) {
        document.getElementsByClassName('secondary-page__image')[0].src = randomImageUrl;
      }
    }
  }

  setSubpageImageOnLoad();
  handlePageRouting();
  fadeElements();

  window.addEventListener('popstate', handlePageRouting);
})();