(function() {

    var filterType = document.getElementById('filterType');
    var classFilter = document.getElementById('ClassFilter');
    var classList = document.getElementById('ClassList');

    function filter() {
        var value = classFilter.value.toLowerCase();

        var items = classList.getElementsByTagName('li');
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            var itemName = item.getAttribute('data-name') || '';
            itemName = itemName.toLowerCase().replace(/\s/g, '');
            if (itemName.indexOf(value) >= 0) {
                item.style.display = '';
            } else {
                item.style.display = 'none';
            }
        }
    }
    classFilter.onkeyup = filter;

    function getQueryParameter(name) {
        var match = new RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }

    var show = getQueryParameter('show');
    if (show) {
        document.getElementById('filterType').value = show;
    }

    var searchTerm = getQueryParameter('classFilter') || '';
    classFilter.value = searchTerm;
    filter();

    function resetFilter() {
        classFilter.value = '';
        filter();
    }

    function updateMenuLinks() {
        var links = classList.getElementsByTagName('a');
        var searchTerm = classFilter.value;
        for (var i = 0; i < links.length; i++) {
            var link = links[i];
            var prefix = link.href.split('?')[0];
            link.href = prefix + (searchTerm === '' ? '' : '?classFilter=' + searchTerm);
        }
    }

    var menuLinks = classList.getElementsByTagName('a');
    for (var i = 0; i < menuLinks.length; i++) {
        menuLinks[i].onclick = function() {
            updateMenuLinks();
        }
    }
})();