
$(function ($) {
  const searchField = $('input.tx-solr-q');
  searchField.focusin(function () {
    $(this).addClass('open');
  });

  searchField.focusout(function () {
    setTimeout(function () {
      searchField.removeClass('open')
    }, 250);
  });

  jQuery.generateFlashMessage = function (msg, status) {
    var message = '<div class="alert alert-' + status + ' alert-dismissible"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>';
    return message + msg + '</div>';
  };

  $('div.accordion-item a').on('click', function () {
    if ($(this).hasClass('collapsed')) {
      $(this).parent().next('.accordion-state').text('Accordion item is uitgeklapt');

    } else {
      $(this).parent().next('.accordion-state').text('Accordion item is ingeklapt');
    }
  });

  $('nav#mobilemenu').on('shown.bs.collapse', function () {
    let menuheight = $('nav#mobilemenu').outerHeight();

    $('header .headerimage').css('top', 110 + menuheight + 'px');
    $('.search-container').css('top', menuheight + 'px');
  });

  $('nav#mobilemenu').on('hidden.bs.collapse', function () {
    $('header .headerimage').css('top', '');
    $('.search-container').css('top', '');
  });

  if ($('.headerimage').length) {
    $('.rootline-outer').addClass(' has-image');
  }

  // begroting page functions
  var totalRevenue = parseFloat(jQuery('.total-revenue span').text(),10);

  jQuery('.card-body').each(function(){
    if (jQuery('.spending-category')[0]){
      var catRevenue = parseFloat(jQuery(this).find('.spending-category span').text(), 10);
      var calcRevenue =  catRevenue / totalRevenue * 100;
      jQuery(this).find('.progress').animate(
        {
          width: calcRevenue + '%',
          left: 0
        },
        'slow'
      );
      jQuery('.progress-total').html(totalRevenue);
      if (catRevenue > totalRevenue) {
        jQuery( '.total-revenue' ).parent().before( '<div class="card col-sm-12 centered">Let op, de waarde van de ondewerpen is meer dan het totaal!</div>');
      }
    }
  });
});

jQuery.extend(jQuery.fancybox.defaults, {
	protect : false,
	trapFocus : true,
});
$('.image-gallery-small').click( function(element) {
  let target = element.target;
  $('.image-gallery-main').attr('src', $(target).attr('src'));
})

jQuery(document).ready(function() {
  initComments();

  /**
   * Code to be execute on initialization (and ajax load)
   */
  function initComments() {
    jQuery(document).find('.tx-windcomments2-pi1 .respond-options .like-options, .tx-windcomments2-pi1 .respond-options .like-list').each(function(){
      addPopOver(jQuery(this));
    });
  }

  jQuery(document).on(
    'click',
    '.resp-options li a',
    function() {
      var link = jQuery(this);
      var respOptions = jQuery(this).parents('.resp-options');
      var additionalData = {};
      if (respOptions.data('parent')) {
        additionalData = {'tx_windcomments2_pi1[query]' : respOptions.data('query'),
          'tx_windcomments2_pi1[config]': respOptions.data('config'), 'tx_windcomments2_pi1[parent]': respOptions.data('parent'),
          'type': link.data('type'), 'tx_windcomments2_pi1[action]': link.data('action'), 'tx_windcomments2_pi1[like]': link.data('like'),
          'tx_windcomments2_pi1[additional]': link.data('additional')};
      } else {
        additionalData = {'tx_windcomments2_pi1[query]' : respOptions.data('query'),
          'tx_windcomments2_pi1[config]': respOptions.data('config'), 'type': link.data('type'),
          'tx_windcomments2_pi1[action]': link.data('action'), 'tx_windcomments2_pi1[like]': link.data('like'),
          'tx_windcomments2_pi1[additional]': link.data('additional')};
      }

      jQuery.ajax({
        method: 'POST',
        url: link.attr('href'),
        data: additionalData,
        dataType: 'json',
        cache: false,
        success: function (data, textStatus, jqXHR) {
          if (data && data.status) {
            var contentElement = jQuery('.content-main .tx-windcomments2-pi1').parents('.frame');
            contentElement.find('.tx-windcomments2-pi1').load(
              document.URL + ' #' + contentElement.attr('id') + ' .tx-windcomments2-pi1',
              function(response, status, xhr ) {
                initComments();
              }
            );
          }
        }
      });

      return false;
    }
  );

  jQuery(document).on(
    'click',
    '.respond-options a.respond',
    function() {
      var commentId = jQuery(this).data('parent');
      if (commentId !== 0) {
        var form = jQuery(this).parents('.comment').find('.reaction-form.inline');
        form.removeClass('d-none');
        form.find('textarea').focus();
      } else {
        jQuery(this).parents('.tx-windcomments2-pi1').find('form.main-form textarea').focus()
      }
      return false;
    }
  );

  jQuery(document).on(
    'submit',
    '.tx-windcomments2-pi1 form.ajaxForm, .tx-windcomments2-pi1 .list form.inline-commentform',
    function() {
      var form = jQuery(this);
      var submit = form.find('input[type=submit]');
      submit.attr('disabled', true);
      jQuery.ajax({
        method: 'POST',
        url: form.attr('action'),
        data: form.serialize(),
        dataType: 'json',
        cache: false,
        success: function (data, textStatus, jqXHR) {
          if (!data.status && data.msg) {
            form.find('.alert').remove();
            form.prepend(jQuery.generateFlashMessage(data.msg, 'danger'));
          } else if (data.status) {
            var contentElement = form.parents('.frame');
            contentElement.find('.tx-windcomments2-pi1').load(
              document.URL + ' #' + contentElement.attr('id') + ' .tx-windcomments2-pi1',
              function(response, status, xhr ) {
                initComments();
              }
            );
          }
          submit.attr('disabled', false);
        }
      });

      return false;
    }
  );

  jQuery(document).on(
    'click',
    '.tx-windcomments2-pi1 .list .delete-comment',
    function() {
      confirmCommentRemoval(jQuery(this));
      return false;
    }
  );

  jQuery(document).on(
    'click',
    'div.tx-windcomments2-pi1 div.list div.comments-header div.amount',
    function() {
      $(this).children().toggleClass('down');
      $(this).parent().next().toggleClass('d-none');
    }
  );

  jQuery(document).on(
    'click',
    '.tx-windcomments2-pi1 .respond-options a.quote',
    function() {
      var selected = jQuery(this).hasClass('selected');
      var commentForm = jQuery(this).parents('.comment').find('.reaction-form.inline');
      commentForm.removeClass('d-none');
      // remove selection for all
      jQuery('.tx-windcomments2-pi1 .respond-options a.quote.selected').removeClass('selected');
      jQuery('.tx-windcomments2-pi1 input.quoteId').val('');
      jQuery('.tx-windcomments2-pi1 .quotedText:not(.d-none)').text('').addClass('d-none');
      if (!selected) {
        jQuery(this).addClass('selected');
        var quoteId = jQuery(this).closest('.comment').data('uid');
        var quoteText = jQuery(this).closest('.comment').find('.comment-text').html();
        commentForm.find('input.quoteId').val(quoteId);
        commentForm.find('.quotedText').html(quoteText).removeClass('d-none');
        commentForm.find('textarea').focus();
      }
      return false;
    }
  );

  function confirmCommentRemoval(link) {
    var pageType = $(link).data('pagetype');
    var comment = $(link).data('comment');
    var initialData = {'type': pageType, 'tx_windcomments2_pi1[action]': 'delete', 'tx_windcomments2_pi1[comment]': comment};

    link.confirmModal({
      confirmTitle: 'Bevestigen',
      confirmMessage: 'Weet u het zeker?',
      confirmOk: 'Ja',
      confirmCancel: 'Nee',
      confirmAutoOpen: true,
      confirmCallback: function(link) {
        jQuery.ajax({
          method: 'POST',
          data: initialData,
          url: link.attr('href'),
          dataType: 'json',
          cache: false,
          success: function (data, textStatus, jqXHR) {
            if (!data.status && data.msg) {
              // add msg
              var comment = link.parents('.comment');
              comment.find('.alert').remove();
              comment.prepend(jQuery.generateFlashMessage(data.msg, 'danger'));
            } else if (data.status) {
              var contentElement = link.parents('.frame');
              contentElement.find('.tx-windcomments2-pi1').load(
                document.URL + ' #' + contentElement.attr('id') + ' .tx-windcomments2-pi1',
                function(response, status, xhr ) {
                  initComments();
                }
              );
            }
          }
        });
      }
    });
    link.off();
  }

  // Hide popovers when clicked outside
  jQuery('html').on('click', function(e) {
    if (typeof jQuery(e.target).data('original-title') === 'undefined') {
      jQuery('[data-original-title]').popover('hide');
    }
  });

  /**
   * Add popover to given element
   * @param list
   */
  function addPopOver(list) {
    list.find('.po-label').popover({
      html: true,
      container: list,
      placement: 'top',
      content: list.find('ul')
    }).on('show.bs.popover', function() {
      jQuery('[data-original-title]').popover('hide');
    });
  }
});

function WindSolrLiveResults() {
  this.init = function() {
    $.Autocomplete.prototype.oldHide = $.Autocomplete.prototype.hide;
    $.Autocomplete.prototype.hide = function() {
      var that = this;

      if (!that.options.doNotHide) {
        that.oldHide();
      }
    };

    $('form[data-windsolrliveresults]').each(function () {
      var form = $(this);
      var searchBox = form.find('.tx-windsolrliveresults');
      form.attr('autocomplete', 'off');

      var maxTextSize = form[0].hasAttribute('data-windsolrliveresults-maxtextsize') ? form.data('windsolrliveresults-maxtextsize') : 100;
      var textCropAfter = form[0].hasAttribute('data-windsolrliveresults-textcropafter') ? form.data('windsolrliveresults-textcropafter') : '...';
      var textCropOnSpace = form[0].hasAttribute('data-windsolrliveresults-textcroponspace') ? form.data('windsolrliveresults-textcroponspace') : false;
      var autocompleteWidth = form[0].hasAttribute('data-windsolrliveresults-width') ? form.data('windsolrliveresults-width') : form.outerWidth();
      var autocompleteHeight = form[0].hasAttribute('data-windsolrliveresults-height') ? form.data('windsolrliveresults-height') : 1000;
      var autocompleteZindex = form[0].hasAttribute('data-windsolrliveresults-zindex') ? form.data('windsolrliveresults-zindex') : 9;

      if (searchBox.length === 1) {
        searchBox.css('position', 'relative');

        var moreButtonClicked = false;
        form.on('submit', function (e) {
          if (form.find('.tx-windsolrliveresults').val() === '') {
            e.preventDefault();
            form.find('.tx-windsolrliveresults').focus();
          } else if (!moreButtonClicked && $('.autocomplete-suggestions .autocomplete-more').length === 1) {
            e.preventDefault();
            $('.autocomplete-suggestions .autocomplete-more').click();
          } else if ($('.autocomplete-suggestions').filter(':visible').length === 0) {
            e.preventDefault();
          }
        });

        searchBox.devbridgeAutocomplete({
          serviceUrl: form.data('windsolrliveresults'),
          paramName: 'tx_windsolrliveresults_solrliveresults[queryString]',
          dataType: 'json',
          maxHeight: autocompleteHeight,
          autoSelectFirst: false,
          triggerSelectOnValidInput: false,
          width: autocompleteWidth,
          zIndex: autocompleteZindex,
          preventBadQueries: false,
          showNoSuggestionNotice: true,
          noSuggestionNotice: '',
          doNotHide: true,
          appendTo:'div.search',
          onSearchStart: function(parameters) {
            $('.loading-search').show();
            $('.autocomplete-suggestions').attr('aria-label', 'Suggesties voor het zoeken');
          },
          onSearchComplete: function(query, results) {
            $('.loading-search').hide();

            if (($('.search-overlay').length) == 0) {
              $('.wrapper').prepend('<div class="search-overlay" />');
            }
          },
          beforeRender: function(container, results) {
            var totalResults = 0;
            var originalQuery = '';
            var usedQuery = '';
            if (results.length > 0) {
              totalResults = results[0].found;
              originalQuery = results[0].originalQuery;
              usedQuery = results[0].usedQuery;
            }

            var resultTextContainer = $('<div class="resulttext" role="alert" />');
            var resultText = '';
            if (totalResults <= 0) {
              resultTextContainer.addClass('none');
              resultText = 'Uw zoekopdracht leverde <span class="totalresults"></span> resultaten op.';
            } else if (originalQuery === usedQuery) {
              resultText = 'Uw zoekopdracht naar <span class="originalquery"></span> leverde <span class="totalresults"></span> resultaten op.';
            } else {
              resultText = 'Uw zoekopdracht naar <span class="originalquery"></span> leverde <span class="nototalresults">geen</span> resultaten op. Een zoekopdracht naar <span class="altquery"></span> leverde <span class="totalresults"></span> resultaten op.';
            }
            resultTextContainer.html(resultText);
            resultTextContainer.find('span.originalquery').text(originalQuery);
            resultTextContainer.find('span.altquery').text(usedQuery);
            resultTextContainer.find('span.totalresults').text(totalResults);
            container.prepend(resultTextContainer);

            var closeButton = $('<div tabindex="0" role="button" aria-labelledby="zoeken sluiten" class="autocomplete-close" />')
              .html('<button class="btn btn-autocomplete-close" title="Zoeksuggesties sluiten">X</button>')
              .click(function() {
                searchBox.devbridgeAutocomplete().oldHide();
                $('.search-overlay').remove();
              })
              .keydown(function (e) {
                if (e.which == 13) {
                  searchBox.devbridgeAutocomplete().oldHide();
                }
              });
            container.prepend(closeButton);
            if (results.length > 0) {
              var moreContainer = $('<div tabindex="0" role="button" aria-labelledby="meer zoekresultaten" class="autocomplete-more btn-default" />');
              moreContainer.text('Alle zoekresultaten');
              moreContainer.click(function () {
                moreButtonClicked = true;
                searchBox.val(usedQuery);
                form.submit();
              });
              moreContainer.keydown(function (e) {
                if (e.which == 13) {
                  $(moreContainer).click();
                }
              });
              container.append(moreContainer);
            }
          },
          transformResult: function(response) {
            var result = {suggestions: []};

            $.each(response.documents, function(key, value) {
              var item = {
                value: response.originalQuery,
                data: value
              };

              if (key === 0) {
                item.usedQuery = response.query;
                item.originalQuery = response.originalQuery;
                item.found = response.found;
              }
              result.suggestions.push(item);
            });

            return result;
          },
          formatResult: function(result, currentValue) {
            if (!currentValue) {
              return result.value;
            }

            var $crop_limit = 60;
            if(result.data.title.length > $crop_limit) {
              var title = $($.parseHTML(result.data.title)).text().substring(0,$crop_limit) + '...';
            } else {
              var title = $($.parseHTML(result.data.title)).text();
            }

            var content = $($.parseHTML(result.data.content)).text();
            if (content.length > maxTextSize) {
              content = content.substring(0, maxTextSize);
              if (textCropOnSpace) {
                var lastSpace = content.lastIndexOf(' ');
                if (lastSpace >= 0) {
                  content = content.substring(0, lastSpace)
                }
              }
              content += textCropAfter;
            }

            var resultContainer = $('<div />');
            resultContainer.addClass(result.data.type);

            var resultTitle = $('<h2 />');
            var resultTitleLink = $('<a />');
            resultTitleLink.attr('href', result.data.url);
            resultTitleLink.text(title);
            resultTitle.append(resultTitleLink);
            resultContainer.append(resultTitle);

            var resultContent = $('<div class="text" />');
            resultContent.text(content);
            resultContainer.append(resultContent);

            return $('<div />').append(resultContainer).html();
          },
          onSelect: function(result) {
            window.location.href = result.data.url;
          },
          deferRequestBy: 100
        });
      }
    });
  };
}

$(document).ready(function() {
  var windSolrLiveResults = new WindSolrLiveResults();
  windSolrLiveResults.init();

  $("body").on("tx_solr_updated", function() {
    windSolrLiveResults.init();
  });
});
