var nvzErrorSearch = {
    liClassName: "block--error-search__results__list__item",
    ulClassName: "block--error-search__results__list",
    searchIndputId: "error-search-input",
    resultList: "error-result-list",
    controllerPath: "/api/sitecore/Error404Search/Search",
    searchButtonDataSelector: "error-search-button",
    noResultText: 'div[data-selector="error-404-search"]'
};

$(document).ready(function () {
    $('div[data-selector="error-404-search"]').Search(nvzErrorSearch);
});
var nvzNav = {
    liClassName: "block--nav__container--subnav__list--item active",
    ulClassName: "block--nav__container--subnav__list",
    resultList: "navigation-result-list",
    searchIndputId: "search-input",
    //noResultText: 'div[data-selector="navigation"]'
};

var nvzNavSearch = {
    liClassName: "block--nav__container--search-results__list--item active",
    ulClassName: "block--nav__container--search-results__list",
    searchIndputId: "search-input",
    resultList: "search-result-list",
    controllerPath: "/api/sitecore/NavigationModule/Search",
    noResultText: 'div[data-selector="navigation"]'
};


$(document).ready(function () {
    $('div[data-selector="navigation"]').Search(nvzNav);
});


$.fn.Search = function (nvzsearch) {
    return this.each(function () {
        var $modal = $(this);
        var $button = $modal.find('a[data-selector="' + nvzsearch.searchButtonDataSelector + '"]');
        var data = {
        };

        var navSearchCallback = function (data) {
            if (nvzsearch.searchIndputId === nvzErrorSearch.searchIndputId) {
                makeUL(data, nvzErrorSearch);
            }
            else if (nvzsearch.searchIndputId === nvzNavSearch.searchIndputId) {
                makeUL(data, nvzNavSearch);
                theme.navigation.showSearchResults();
            }
        };

        var showingCallback = function (data) {
            var json = JSON.parse(data.Data);
            $('a[data-item-id="' + json.itemId + '"]').parent().toggleClass("active");
            if (json.showing == "true") {
                $('.block--nav__container--subnav').first().attr('data-show', "true");
                makeUL(data.listItems, nvzsearch);
            } else {
                theme.navigation.backToSection();
            }
        };

        var submit = function () {
            var nvzSearchItem;
            if (nvzsearch.searchIndputId === nvzErrorSearch.searchIndputId)
                nvzSearchItem = nvzErrorSearch;
            else if (nvzsearch.searchIndputId === nvzNavSearch.searchIndputId)
                nvzSearchItem = nvzNavSearch;
            data = {
                searchText: document.getElementById(nvzSearchItem.searchIndputId).value
            };
            returnSearch(nvzSearchItem.controllerPath, data, navSearchCallback);
        };
        var showingSubmit = function () {
            data = {
                itemId: $('.subpagenavigation').data('current-page')
            };
            showing("/api/sitecore/NavigationModule/Showing", data, showingCallback);
        };

        var initialiseEvents = function () {
            $('#' + nvzsearch.searchIndputId).keypress(function (e) {
                if (e.which == 13) {
                    submit();
                }
            });
            $button.on("click",
                function () {
                    submit();
                });

        };
        var initialise = function () {
            initialiseEvents();
        };
        initialise();
        if (!$('.block--nav').hasClass('front')) {
            showingSubmit();
        }
    });
};

function showing(path, data, callback) {
    $.ajax({
        type: "POST",
        url: path,
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        cache: false,
        success: callback
    });
}

function returnSearch(path, data, callback) {
    $.ajax({
        type: "POST",
        url: path,
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        cache: false,
        success: callback
    });
}

function makeUL(result, nvzsearch) {
    var a = '<ul class="' + nvzsearch.ulClassName + '">',
        b = '</ul>',
        m = [];

    for (i = 0; i < result.length; i += 1) {
        m[i] = '<li class="' + nvzsearch.liClassName + '">' + '<a href="' + result[i].Url + '"> <p>' + result[i].Title + '</p></a>' + '</li>';
    }
    if (result.length == 0 && nvzsearch.noResultText) {
        var noRerults = $(nvzsearch.noResultText).data('no-results');
        m[0] = '<li class="no-results">' + noRerults + '</li>';
    }

    document.getElementById(nvzsearch.resultList).innerHTML = a + m.join('') + b;
}
