﻿var _filterTypes = ["make", "location", "year", "price", "class", "ext-color", "drive", "model", "marketplace", "trim"];
var _img_only = false;
function loadFilters() {
    renderAvaibleFilters();
}

function calFilterCounts() {
    //console.profile("filter count");
    //$.each(_d.fls, function() { this.f_count = 0; });
    $.each(_d.fls, function() {
        if (!this.filtered)
            this.f_count = $.grep(this.ids, function(a) { return $.inArray(a, _fd) >= 0 }).length;
    });
    //console.profileEnd("filter count");
}

function renderCurrentFilters() {
    cleanCurrentFilters();
    var showCurrnet = false;
    for (var i = 0, il = _d.fls.length; i < il; i++) {
        var item = _d.fls[i];
        showCurrnet = showCurrnet || item.filtered;
        if (item.filtered) {
            $('#currentFilters > ul').append("<li id='ef_" + i + "' >" + item.text + " (<span class='hyperlinklike'>undo</span>)</li>");
            $('#currentFilters > ul > #ef_' + i).click(function() {
                flagFilterListAt(this.id.split("_")[1], false);
                filterData();
                renderCurrentFilters();
                renderAvaibleFilters();
            });
        }
    }
    showCurrnet ? $('#currentFilters').show() : $('#currentFilters').hide();

}
function renderAvaibleFilters() {
    cleanAvaibleFilters();

    for (var i = 0, il = _d.fls.length; i < il; i++) {
        var item = _d.fls[i];
        if (item.filtered) {
            $('#' + item.type + '-filter').hide();
            $('#' + item.type + '-filter').prev("a").hide();
        } else {
            var _count = item.f_count;
            if (_count > 0) {
                switch (item.type) {
                    case "marketplace":
                        $('#marketplace-filter').append("<p class='filterlist' id='mpf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#mpf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "make":
                        $('#make-filter').append("<p class='filterlist' id='mf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#mf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "model":
                        $('#model-filter').append("<p class='filterlist' id='mdf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#mdf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "trim":
                        $('#trim-filter').append("<p class='filterlist' id='tf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#tf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "year":
                        $('#year-filter').append("<p class='filterlist' id='yf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#yf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "ext-color":
                        $('#ext-color-filter').append("<p class='filterlist' id='ecf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#ecf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "class":
                        $('#class-filter').append("<p class='filterlist' id='clsf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#clsf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "location":
                        $('#location-filter').append("<p class='filterlist' id='lf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#lf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "price":
                        $('#price-filter').append("<p class='filterlist' id='pf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#pf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    case "drive":
                        $('#drive-filter').append("<p class='filterlist' id='drf_" + i + "'>" + item.text + "  (<span class='hyperlinklike'>" + _count + "</span>)</p>");
                        $('#drf_' + i).click(function() {
                            flagFilterListAt(this.id.split("_")[1], true);
                            filterData();
                            renderCurrentFilters();
                            renderAvaibleFilters();

                        });
                        break;

                    default:
                        break;
                }
            }
        }
    }

    $.each(_filterTypes, function() {
        rendorMoreOption(this.toString(), 4);
        if ($('#' + this.toString() + '-filter').html() == "" || $('#' + this.toString() + '-filter').html() == null)
            $('#' + this.toString() + '-filter').prev("a").hide();
    });

    if (_dbg == 1) {
        $('#marketplace-filter').show();
        $('#marketplace-filter').prev("a").addClass("toggler");
        $('#marketplace-filter').prev("a").show();
    } else {
        $('#marketplace-filter').hide();
        $('#marketplace-filter').prev("a").removeClass("toggler");
        $('#marketplace-filter').prev("a").hide();
    }
}
function rendorMoreOption(typeStr, l) {
    $('#' + typeStr + '-filter > p:gt(' + l + ')').hide();
    $('#' + typeStr + '-filter p:nth-child(' + (l + 1) + ')').after("<span class='hyperlinklike2' id='more_" + typeStr + "'>more »</span>");
    $('#more_' + typeStr).click(function() {
        $('#more_' + typeStr).hide();
        $('#' + typeStr + '-filter > p:gt(' + l + ')').show();
    });
}
function getIdCount(ids) {
    return $.grep(ids, function(a) { return $.inArray(a, _fd) >= 0 }).length;
    //return 10;
}
function flagFilterListAt(index, b) {
    if (_d.fls) {
        _d.fls[index].filtered = b;
    }
}
function cleanCurrentFilters() {
    $('#currentFilters > ul').empty();
}
function cleanAvaibleFilters() {
    $('#make-filter').show().empty();
    $('#model-filter').show().empty();
    $('#location-filter').show().empty();
    $('#price-filter').show().empty();
    $('#marketplace-filter').show().empty();
    $('#year-filter').show().empty();
    $('#class-filter').show().empty();
    $('#ext-color-filter').show().empty();
    $('#trim-filter').show().empty();
    $('#drive-filter').show().empty();

    $('#make-filter').prev("a .toggler").show();
    $('#model-filter').prev("a .toggler").show();
    $('#location-filter').prev("a .toggler").show();
    $('#price-filter').prev("a .toggler").show();
    $('#marketplace-filter').prev("a .toggler").show();
    $('#year-filter').prev("a .toggler").show();
    $('#class-filter').prev("a .toggler").show();
    $('#ext-color-filter').prev("a .toggler").show();
    $('#trim-filter').prev("a .toggler").show();
    $('#drive-filter').prev("a .toggler").show();
}

function filterData() {
    _fd = new Object([]);
    for (var i = 0, il = _d.VehicleListings.length; i < il; i++)
        _fd.push(i);

    if (_img_only) {
        _fd = $.grep(_fd, function(a) {
            return ($.inArray(a, _d.ifls[0].ids) >= 0);
        });
    }
    if (_d.fls && _d.fls.length > 0) {
        $.each(_d.fls, function(j, val) {
            if (val.filtered) {
                _fd = $.grep(_fd, function(a) { return ($.inArray(a, val.ids) >= 0); });
            }
        });
    }
    calFilterCounts();
    loadPagers();
    loadSearchResultPage(0);
}

function filterImageListings() {
    if (_img_only != $('#img-filter > input:checkbox').attr("checked")) {
        _img_only = !_img_only;
        $('#image-filter').attr('src', _img_only ? "../sc/i/icon-camera.gif" : "../sc/i/icon-camera-off.gif");
        $('#image-filter').attr('title', _img_only ? "Show all listings." : "Show listings with pictures only.");
        filterData();
        renderCurrentFilters();
        renderAvaibleFilters();
    }
}