{{ $jquery := resources.Get "js/jquery.min.js" | resources.Fingerprint }}
<script defer src="{{ $jquery.RelPermalink }}"></script>
{{ $masonry := resources.Get "js/masonry.pkgd.min.js" | resources.Fingerprint }}
<script defer src="{{ $masonry.RelPermalink }}"></script>
{{ $imagesloaded := resources.Get "js/imagesloaded.pkgd.min.js" | resources.Fingerprint }}
<script defer src="{{ $imagesloaded.RelPermalink }}"></script>
{{ $enquire := resources.Get "js/enquire.min.js" | resources.Fingerprint }}
<script defer src="{{ $enquire.RelPermalink }}"></script>
{{ $zzo := resources.Get "js/zzo.js" | resources.Minify | resources.Fingerprint }}
<script defer src="{{ $zzo.RelPermalink }}"></script>
{{ $fancyboxjs := resources.Get "js/jquery.fancybox.min.js" | resources.Fingerprint }}
<script defer src="{{ $fancyboxjs.RelPermalink }}"></script>
{{ $fancyboxcss := resources.Get "css/jquery.fancybox.min.css" | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $fancyboxcss.RelPermalink }}">

<script>
  window.onload = function() {
    // masonry
    var $grid = $('.grid').masonry({
      itemSelector: '.grid-item',
      columnWidth: '.grid-sizer',
      percentPosition: true,
    });
    $grid.imagesLoaded().progress(function () {
      $grid.masonry();
    });

    $('.grid-item').mouseenter(function () {
      $(this).children('.grid-item__desc').show();
    });

    $('.grid-item').mouseleave(function () {
      $(this).children('.grid-item__desc').hide();
    });

    $('.grid-item').click(function () {
      $(this).children('a').get(0).click();
    });

    enquire.register("screen and (max-width:500px)", {
      match: function () {
        $('.grid-item').addClass('full');
        $('.grid-sizer').addClass('full');
        $('.grid-item').removeClass('half');
        $('.grid-sizer').removeClass('half');
      },
      unmatch: function () {
        $('.grid-item').addClass('half');
        $('.grid-sizer').addClass('half');
        $('.grid-item').removeClass('full');
        $('.grid-sizer').removeClass('full');
      },
    }).register("screen and (max-width:700px)", {
      match: function () {
        $('.grid-item').addClass('half');
        $('.grid-sizer').addClass('half');
        $('.grid-item').removeClass('third');
        $('.grid-sizer').removeClass('third');
      },
      unmatch: function () {
        $('.grid-item').addClass('third');
        $('.grid-sizer').addClass('third');
        $('.grid-item').removeClass('half');
        $('.grid-sizer').removeClass('half');
      },
    }).register("screen and (max-width:900px)", {
      match: function () {
        $('.grid-item').addClass('third');
        $('.grid-sizer').addClass('third');
        $('.grid-item').removeClass('quarter');
        $('.grid-sizer').removeClass('quarter');
      },
      unmatch: function () {
        $('.grid-item').addClass('quarter');
        $('.grid-sizer').addClass('quarter');
        $('.grid-item').removeClass('third');
        $('.grid-sizer').removeClass('third');
      },
    }).register("screen and (max-width:1200px)", {
      match: function () {
        $('.grid-item').addClass('quarter');
        $('.grid-sizer').addClass('quarter');
        $('.grid-item').removeClass('fifth');
        $('.grid-sizer').removeClass('fifth');
      },
      unmatch: function () {
        $('.grid-item').addClass('fifth');
        $('.grid-sizer').addClass('fifth');
        $('.grid-item').removeClass('quarter');
        $('.grid-sizer').removeClass('quarter');
      },
    });

    // fancybox
    $('[data-fancybox="gallery"]').fancybox({
      loop: true,
      keyboard: true,
      clickContent: true,
      buttons: [
        "zoom",
        "slideShow",
        "fullScreen",
        "download",
        "thumbs",
        "close",
      ],
      caption: function (instance, item) {
        return $(this).data('alt') || '';
      }
    });

    var imgElements = $('.single__contents:not(".single__contents--gallery")').find('img');
    imgElements.each(function (i, v) {
      $(this).css('cursor', 'pointer');
      $(this).wrap(`<a data-fancybox="gallery" href="${$(this).attr('src')}" data-alt="${$(this).attr('alt')}" data-caption="${$(this).attr('alt')}"></a>`);
    });

    // search
    {{ $searchLanguages := .Site.Params.searchLanguages }}
    var searchLanguages = JSON.parse({{ $searchLanguages | jsonify }});
    var baseurl = "{{ "/" | relLangURL }}";

    if (!searchLanguages) {
      searchLanguages = ['en'];
    }

    var lunrIndex = null;
    var pagesIndex = null;
    var searchResults = null;
    var searchMenu = null;

    function endsWith(str, suffix) {
      return str.indexOf(suffix, str.length - suffix.length) !== -1;
    }

    function initLunr() {
      if (!endsWith(baseurl, "/")) {
        baseurl = baseurl + '/';
      };
      if (baseurl.charAt(0) === '/') {
        baseurl = baseurl.slice(1);
      }
      
      $.getJSON(baseurl + "index.json")
        .done(function (index) {
          pagesIndex = index;
          lunrIndex = lunr(function () {
            this.use(lunr.multiLanguage(...searchLanguages));
            this.ref('uri');
            this.field('title');
            this.field('description');
            this.field('content');
            //this.field('tags');
            //this.field('series');
            //this.field('categories');

            var that = this;
            index.forEach(function (page) {
              that.add(page);
            });
          });
        })
        .fail(function (jqxhr, textStatus, error) {
          var err = textStatus + ", " + error;
          console.error("Error getting Hugo index file:", err);
        });
    }

    function search(query) {
      return lunrIndex.search(query).map(function (result) {
        return pagesIndex.filter(function (page) {
          return page.uri === result.ref;
        })[0];
      });
    }

    function renderSearchResults(results) {
      searchResults = document.getElementById('search-results');
      searchMenu = document.getElementById('search-menu');
      searchResults.setAttribute('class', 'dropdown is-active');

      var content = document.createElement('div');
      content.setAttribute('class', 'dropdown-content search-content');

      if (results.length > 0) {
        results.forEach(function (result) {
          var item = document.createElement('a');
          item.setAttribute('href', result.uri);
          item.setAttribute('class', 'dropdown-item');
          item.innerHTML = `<div class="menu-item"><div class="menu-item__title">» ${result.title}</div><div class="menu-item__desc">${result.description ? result.description : result.content}</div></div>`;
          content.appendChild(item);
        });
      } else {
        var item = document.createElement('span');
        item.setAttribute('class', 'dropdown-item');
        item.innerText = 'No results found';
        content.appendChild(item);
      }

      while (searchMenu.hasChildNodes()) {
        searchMenu.removeChild(
          searchMenu.lastChild
        );
      }
      searchMenu.appendChild(content);
    }

    function renderSearchResultsMobile(results) {
      searchResults = document.getElementById('search-mobile-results');

      var content = document.createElement('div');
      content.setAttribute('class', 'mobile-search__content');

      if (results.length > 0) {
        results.forEach(function (result) {
          var item = document.createElement('a');
          item.setAttribute('href', result.uri);
          item.innerHTML = `<div class="mobile-search__item"><div class="mobile-search__item--title">» ${result.title}</div><div class="mobile-search__item--desc">${result.description ? result.description : result.content}</div></div>`;
          content.appendChild(item);
        });
      } else {
        var item = document.createElement('span');
        content.appendChild(item);
      }

      $('#search-mobile-results').empty();
      searchResults.appendChild(content);
    }

    initLunr();

    $("#search").on('input', function (e) {
      if (!e.target.value) {
        $('#search-results').attr('class', 'dropdown');
        return null;
      }

      if ($(window).width() < 770) {
        return null;
      } 

      var results = search(e.target.value);
      renderSearchResults(results);
    });

    $('#search').on('blur', function () {
      if ($(window).width() < 770) {
        return null;
      }
      setTimeout(function () {
        $('#search-results').attr('class', 'dropdown');
      }, 100);
    });

    $('#search').on('click', function (e) {
      if ($(window).width() < 770) {
        return null;
      }
      if (!e.target.value) {
        $('#search-results').attr('class', 'dropdown');
        return null;
      }
      var results = search(e.target.value);
      renderSearchResults(results);
    });

    $('#search').on('keydown', function (e) {
      if ($(window).width() < 770) {
        return null;
      }
      var items = $('#search-menu .dropdown-item');
      var activeIndex = $('#search-menu .dropdown-item.is-active').index();

      items.removeClass('is-active');
      if (e.key === 'ArrowDown') {
        items.eq(activeIndex + 1).addClass('is-active');
      } else if (e.key === 'ArrowUp') {
        items.eq(activeIndex - 1).addClass('is-active');
      } else if (e.key === 'Enter') {
        var currentItemLink = items.eq(activeIndex).attr('href');
        if (currentItemLink) {
          location.href = currentItemLink;
        }
      }
    });

    $("#search-mobile").on('input', function(e) {
      if (!e.target.value) {
        $('#search-mobile-results').empty();
        return null;
      }

      var results = search(e.target.value);
      renderSearchResultsMobile(results);
    });
  }
</script>