function refreshCount() {
    LuceneSearch.refreshCount(
        getQueryString(),   // QueryString
        getSelectedTypes(), // Selected Types
        getSelectedTags(),  // Selected Tags
        updateCount         // Callback method
    );
}

function updateCount(value) {
    jQuery("#total").empty().append(value);
}

// JP: this clearForm doesn't clear the query (on purpose)
function clearForm() {
    // Uncheck all checkboxes
    jQuery("input:checkbox").each( function() {
        this.checked = false;
    });

    // Reset all filter classes
    jQuery("#filter li").each( function() {
        jQuery(this).removeClass("changed");
        jQuery(this).removeClass("active");
        jQuery(this).data("title", "Voeg dit onderdeel toe aan zoekopdracht");
    });

    // Update Counter
    refreshCount();

    return false;
}

function goToPage(newPage) {
    try {
        jQuery("#searchForm").get(0).reset();
        jQuery("#currentPage").val(newPage);
        jQuery("#searchForm").get(0).submit();
    }
    catch(e) {
        alert(e);
    }

    return false;
}

function toggleFilter(filter) {
    // Get id of related checkbox
    var filterId   = filter.id;
    var checkboxId = filterId.replace("a_", "c_");

    // Toggle related checkbox
    var checkBox = jQuery("#" + checkboxId).get(0);
    checkBox.checked = !checkBox.checked;

    // Update css of the filter
    var parent = jQuery("#" + filterId).parent("span");
    if (checkBox.checked) {
        if (parent.is("current")) {
            parent.addClass("active");
            parent.data("title", "Verwijder dit onderdeel uit zoekopdracht");
        } else {
            parent.addClass("changed");
            parent.data("title", "Verwijder dit onderdeel uit zoekopdracht");
        }
    } else {
        parent.removeClass("active");
        parent.removeClass("changed");
        parent.data("title", "Voeg dit onderdeel toe aan zoekopdracht");
    }

    // Update Counter
    refreshCount();
}

/* Getter Functions */
function getQueryString() {
    return jQuery("#searchBarQueryString").val();
}

function getSelectedTypes() {
    return getMultipleCheckboxValues("type_fields");
}

function getSelectedTags() {
    return getMultipleCheckboxValues("tag_fields");
}

function getMultipleCheckboxValues(name) {
    var checkboxes = jQuery("#" + name + " input:checkbox[checked='true']");
    var result  = new Array();
    var counter = 0;

    for (var i = 0; i < checkboxes.length; i++) {
        if (checkboxes.get(i).checked) {
            result[counter++] = checkboxes.get(i).value;
        }
    }

    return result;
}