﻿jQuery(function ($) {
    $("img[src$=png]").pngfix();

});
var pagesize = 20;
var _fd = [];
var _sortby = "";
var _sortorder = "";
var pageindex = 0;
var _dbg = 0;
var _q = "";
var sortVip = 0;

$(document).ready(function () {
    //console.profile("Test initial load profiler");
    initialUi();
    initialData();
    //console.profileEnd("Test innitial load profilter");
});

function initialUi() {
    $('#sort').change(sortResults);
    //$('#img-filter > input:checkbox').click(filterImageListings);
    $('#img-filter > input:checkbox').attr("checked", false);
    $('#img-filter').labelize('chkbox-label-hover').click(filterImageListings);
    //$('#search').click(submitSearch);
    $('#pagesize').click(updatePagesize);
    $("#init-panel").hide();
    $('#browserMpg').click(function (e) {
        e.preventDefault();
        $('#mpgModalContent').modal();
    });
    $(".search-adv").click(function () {
        $("#init-panel").slideToggle("show");
        $(this).toggleClass("active"); return false;
    });
    $('div.toggler-c').toggleElements({ fxAnimation: 'show', fxSpeed: 'slow', className: 'toggler' });
    _sortby = getKey("sb");
    _sortorder = getKey("so");
    _dbg = getKey("debug");
    for (var i = 0; i < $('#sort')[0].length; i++) {
        if ($('#sort')[0].options[i].value == _sortby + (_sortorder.length > 0 ? ';so=' + _sortorder : ''))
            $('#sort')[0].selectedIndex = i;
    }
    $('#r-search').click(function () {
        $('.s-form-section').toggle("fast");
        $('#r-search').toggleClass("r-search-closed");
        $('#r-search').toggleClass("r-search-opened");
    });
    loadBrowseData();
    $("form#s-form").submit(function () {
        if (validateModifySearchInput()) {
            var m = $('#s-make option:selected').html() == "All" ? "" : $('#s-make option:selected').html();
            var md = $('#s-model option:selected').html() == "All" ? "" : $('#s-model option:selected').html();
            var yf = $('#s-year-min option:selected').val();
            var yt = $('#s-year-max option:selected').val();
            var pl = $('#s-price-min option:selected').val();
            var ph = $('#s-price-max option:selected').val();
            var ml = $('#s-mileage-min option:selected').val();
            var mh = $('#s-mileage-max option:selected').val();
            var vt = $('#s-type option:selected').val();
            var _zip = $('#s-zip').val();
            var _dist = $('#s-dist option:selected').val();
            location.href = "m=" + m + ";md=" + md + ";z=" + _zip + ";dist=" + _dist + ";yf=" + yf + ";yt=" + yt + ";pl=" + pl + ";ph=" + ph + ";ml=" + ml + ";mh=" + mh + ";vt=" + vt;
            return false;
        } else {
            return false;
        }
    });
}

function initialData() {
    //$("#content-loading").fadeOut(200, function () {
    if (_d && _d.VehicleListings) {
        _fd = [];
        for (var i = 0; i < _d.VehicleListings.length; i++)
            _fd.push(i);
        loadFilters();
        loadPagers();
        sortData(_sortby, _sortorder);
        $('#total_count').html(_d.TotalCount);
        $('#input-z').html(_d.Zip + "<span class='edit_mark'>&nbsp;</span>");
        $('#input-dist').html(_d.SearchRange + "<span class='edit_mark'>&nbsp;</span>");
        bind_update();
        if (_d.City.length > 0)
            $('#result-location').html('Showing results near ' + _d.City + ', ' + _d.StateCode);
    }
    $("#content-panel").fadeIn(10);
    //});

    _q = unescape(getKey("q"));
    if (_q == null || _q == "")
        _q = unescape(getKey("m")) + (getKey("md").length > 0 ? " " + unescape(getKey("md")) : "") + (getKey("t").length > 0 ? " " + unescape(getKey("t")) : "");
    else {
        $('#tb_vx').val(_q);
    }

    if (_d == null) {
        $('#notice-msg').append("<p class=\"no-result\">We couldn't find any results within <span class=\"no-result\">" + _s_dist + "</span> miles from <span class=\"no-result\">" + _s_z + "</span> for \"<span class=\"no-result\">" + _q + "</span>\"</p>").show();
        $('#search-input-string').hide();
        $('.filter-element').hide();
        $('#right-column').hide();
        //$('.s-form-section').toggle();
        $('#r-search').toggleClass("r-search-closed");
        $('#r-search').toggleClass("r-search-opened");
    } else {
        _sortby = getHashKey("sortby") == null ? "dist" : getHashKey("sortby");
        _sortorder = getHashKey("orderby") == null ? "asc" : getHashKey("orderby");
        var real_q = "";
        if (getKey("vt").length > 0) {
            real_q = getKey("vt");
        } else {
            if (!_d.IsOriginal) {
                real_q = fixedMakeName() + (getKeyFromString("md", _d.QueryString).length > 0 ? " " + getKeyFromString("md", _d.QueryString) : "") + (getKeyFromString("t", _d.QueryString).length > 0 ? " " + getKeyFromString("t", _d.QueryString) : "");
                $('#notice-msg').append("<p class=\"no-result\">We couldn't find any results within <span class=\"no-result\">" + _s_dist + "</span> miles from <span class=\"no-result\">" + _s_z + "</span> for \"<span class=\"no-result\">" + _q + "</span>\"</p>").show();
            } else {
                real_q = _q;
            }
        }
        if (_d.TotalCount == 0) {
            $('#search-input-string').hide();
            $('.filter-element').hide();
            $('#right-column').hide();
            //$('.s-form-section').toggle();
            $('#r-search').toggleClass("r-search-closed");
            $('#r-search').toggleClass("r-search-opened");
        } else {
            if (_d.TotalCount > 500) {
                var svr_page = 0;
                if (getKey("p") != null && getKey("p") != "")
                    svr_page = parseInt(getKey("p"));
                if (svr_page > 0) {
                    $("#pager_tab_pre").parent().show();
                    $("#pager_tab_pre").attr("href", upsertKey("p", svr_page - 1));
                } else {
                    $("#pager_tab_pre").parent().hide();
                }
                if ((svr_page + 1) * 500 < _d.TotalCount) {
                    $("#pager_tab_next").html("next " + (_d.TotalCount - (svr_page + 1) * 500).toString());
                    $("#pager_tab_next").attr("href", upsertKey("p", svr_page + 1));
                    $("#pager_tab_next").parent().show();
                } else {
                    $("#pager_tab_current").html((_d.TotalCount - svr_page * 500).toString());
                    $("#pager_tab_next").parent().hide();
                }
                $("#pager_tab").show();

            }
        }
        $('#q_str').html(real_q);

        loadExistData();
    }
}
function fixedMakeName() {
    var mNames = getKeyFromString("m", _d.QueryString).toLowerCase().replace(" truck", "").split(",");
    return uniqueArr(mNames).join(", ");
}

function loadBrowseData() {
    $('#s-make options').remove();
    var m_options = '<option value="">All</option>';
    for (var i = 0; i < _b.makes.length; i++) {
        if (_b.makes[i].text.toLowerCase() == _s_m.split(",")[0].toLowerCase()) {
            m_options += '<option selected=\"selected\" value="' + _b.makes[i].id + '">' + _b.makes[i].text + '</option>';
        } else {
            m_options += '<option value="' + _b.makes[i].id + '">' + _b.makes[i].text + '</option>';
        }
    }
    $('#s-make').html(m_options);
    $('#s-model options').remove();
    $('#s-model').html('<option value="">All</option>');
    $('#s-model').attr("disabled", $('#s-make option:selected').html() == "All");
    $('#s-make').change(function () {
        var selected_index = $(this).val();
        $('#s-model options').remove();
        var md_options = '<option value="">All</option>';
        for (var i = 0; i < _b.makes[selected_index].models.length; i++) {
            if (_b.makes[selected_index].models[i].toLowerCase() == _s_md.split(",")[0].toLowerCase()) {
                md_options += '<option selected=\"selected\" value="' + _b.makes[selected_index].models[i] + '">' + _b.makes[selected_index].models[i] + '</option>';
            } else {
                md_options += '<option value="' + _b.makes[selected_index].models[i] + '">' + _b.makes[selected_index].models[i] + '</option>';
            }
        }
        $('#s-model').html(md_options);
        $('#s-model').attr("disabled", false);
    });
    if ($('#s-make option:selected').html() != "All") {
        var selected_index = $('#s-make option:selected').val();
        $('#s-model options').remove();
        var md_options = '<option value="">All</option>';
        for (var i = 0; i < _b.makes[selected_index].models.length; i++) {
            if (_b.makes[selected_index].models[i].toLowerCase() == _s_md.split(",")[0].toLowerCase()) {
                md_options += '<option selected=\"selected\" value="' + _b.makes[selected_index].models[i] + '">' + _b.makes[selected_index].models[i] + '</option>';
            } else {
                md_options += '<option value="' + _b.makes[selected_index].models[i] + '">' + _b.makes[selected_index].models[i] + '</option>';
            }
        }
        $('#s-model').html(md_options);
        $('#s-model').attr("disabled", false);
    }

}
function loadExistData() {
    if (_s_yf != "")
        $('#s-year-min').children('option').each(function () {
            if ($(this).val() == _s_yf) {
                $(this).attr("selected", true);
            }
        });
    if (_s_yt != "")
        $('#s-year-max option').each(function () {
            if ($(this).val() == _s_yt) {
                $(this).attr("selected", true);
            }
        });
    if (_s_z != "")
        $('#s-zip').val(_s_z);
    if (_s_dist != "")
        $('#s-dist option').each(function () {
            if ($(this).val() == _s_dist) {
                $(this).attr("selected", true);
            }
        });
    if (_s_pl != "")
        $('#s-price-min option').each(function () {
            if ($(this).val() == _s_pl) {
                $(this).attr("selected", true);
            }
        });
    if (_s_ph != "")
        $('#s-price-max option').each(function () {
            if ($(this).val() == _s_ph) {
                $(this).attr("selected", true);
            }
        });
    if (_s_vt != "")
        $('#s-type option').each(function () {
            if ($(this).val().toLowerCase() == _s_vt.toLowerCase()) {
                $(this).attr("selected", true);
            }
        });
}
function validateModifySearchInput() {
    return true;
}
function compareCars() {
    var result = "";
    var cars_to_compare = $(".compare-list[checked]").each(function () {
        result += $(this).val() + ",";
    });

    window.location = "../compare/" + result;
}

function loadPagers() {
    if (_fd && _fd.length > 0) {
        $(".pager-container").show().pagination(_fd.length, {
            num_edge_entries: 2,
            num_display_entries: 5,
            items_per_page: pagesize,
            callback: loadSearchResultPage
        });
    }
    else {
        $(".pager-container").hide();
    }
}

function bind_update() {
    $('.editThis').bind("mouseover", function (e) {
        $(this).css("background-color", "#FFC");
        $(this).children(".edit_mark").css("background", "url(/buy/sc/i/edit_on.gif) no-repeat center center");
    });
    $('.editThis').bind("mouseout", function (e) {
        $(this).css("background-color", "#FF9");
        $(this).children(".edit_mark").css("background", "url(/buy/sc/i/edit_off.gif) no-repeat center center");
    });
    $('.editThis').bind("click", function (e) {
        $(this).children(".edit_mark").remove();
        var parentId = this.parentNode.id;
        var editType = this.parentNode.classname;
        var revert = this.innerHTML;
        var param = parentId.split('_')[1];

        $('.updateThis').css("position", "relative");
        $('.updateThis').css("z-index", "-10");
        $('#' + parentId).css("z-index", "10");
        $('#' + parentId).html("<div class=\"float_editor\"><form id=\"form_" + parentId + "\" onsubmit=\"update_value('" + parentId + "', true,'" + param + "');\"><input maxlength=5 size=5 type=\"input\" id=\"input_" + parentId + "\" value=\"" + revert + "\" /> <input type='submit' id=\"submit_" + parentId + "\" class='edit_this_submit' value=\"Save\" /><a id=\"cancel_" + parentId + "\" href=\"javascript:void(0);\">Cancel</a></form></div>");

        //set the focus on the newly embedded input box
        $("#input_" + parentId)[0].focus();
        $("#input_" + parentId)[0].select();

        //bind the cancel functionality to the cancel button
        $("#cancel_" + parentId).click(function () {
            update_value(parentId, revert, param);
        });
        $("#submit_" + parentId).click(function () {
            update_value(parentId, true, param);
        });
        //$("#input_" + parentId).blur(function(e) {
        //update_value(parentId, revert, param);
        //});

    });
}

// this function sends the updated value back to the server    
function update_value(id, update, param) {
    if (update == true) {
        result = $('#input_' + id).val();
        var _newUrl = upsertKey(param, result);
        $('#form_' + id).attr("action", _newUrl);
        $('#form_' + id).submit();
    }
    else {
        // in the case of a cancel, update is the "revet" value
        result = update;
        $('#' + id).html("<span class=\"editThis\">" + result + "<span class=\"edit_mark\">&nbsp;</span></span>");
        $('.updateThis').css("position", "relative");
        $('.updateThis').css("z-index", "10");
        bind_update();
    }

}

function loadSearchResultPage(pageIndex, pg, showLoading) {
    if (showLoading == null) showLoading = true;
    renderSearchResults(pageIndex, "photo", showLoading);
    return false;
}

function renderSearchResults(pageIndex, template, showLoading) {
    if (showLoading) {
        $("#results-detail").block({
            message: '<img src="../sc/i/loading.gif" />',
            css: { border: 'none', top: '50px' },
            overlayCSS: { backgroundColor: '#FFF', opacity: '1' },
            fadeOut: 10,
            centerY: false
        });
    }
    //clearResultViews();
    var currentPageData = new Object([]);
    if (_fd && _fd.length > 0) {
        var _total = _fd.length;
        var _begin = pageIndex * pagesize + 1;
        var _end;
        for (var i = pageIndex * pagesize; i < (pageIndex + 1) * pagesize; i++) {
            if (_fd[i] != null) {
                currentPageData[i - pageIndex * pagesize] = _d.VehicleListings[_fd[i]];
                _end = i + 1;
            }
        }
        $('#result-count').html('Displaying ' + _begin + '-' + _end + ' of ' + _total + ' listings');
    }
    switch (template) {
        case "photo":
            applyPhotoTemplate(currentPageData);
            break;
        case "list":
            applyListTemplate(currentPageData);
            break;
        default:
            break;
    }
    if (showLoading) { $("#results-detail").fadeIn(200, function () { $('#results-detail').unblock({ fadeOut: 2000 }); }); }
}

function applyPhotoTemplate(data, filters) {
    $('#results-detail').setTemplateURL('../sc/resultPhotoTableV3.htm',
    null, { filter_data: false });
    $('#results-detail').processTemplate(data);
    $(".result-photo tr:odd").addClass("odd");
    $(".result-photo tr:even").addClass("even");
    $(".tp-kbb a").append("<em>KBB : <span class='kbb-retail'></span><br class='clear'/>Seller : <span class='seller-pr'></span><br class='clear'/><br/>You save : <span class='yousave'></span></em>");
    $(".tp-kbb a").hover(function () {
        $(this).find("em").animate({ opacity: "show" }, "fast");
        var _krp = $(this).attr("title");
        var _pr = $(this).attr("type");
        //$(this).find("em").text(hoverText);
        $(this).find("em").find(".kbb-retail").html('$' + formatNumberBy3(_krp, null, ','));
        $(this).find("em").find(".seller-pr").html('$' + formatNumberBy3(_pr, null, ','));
        $(this).find("em").find(".yousave").html('$' + formatNumberBy3(_krp - _pr, null, ','));
    }, function () {
        $(this).find("em").animate({ opacity: "hide" }, "fast");
    });
}

function applyListTemplate(data, filters) {
}

function updatePagesize() {
    pagesize = $('#pagesize').val();
    loadPagers();
    $("#content-panel").fadeIn(200, function () { $('#content-panel').unblock({ fadeOut: 2000 }); });
    loadSearchResultPage(0, null, false);
}

function clearResultViews() {
    //$('#results-detail').fadeOut(1000, function() {
    $('#results-detail').empty();
    //});   
}
function sortResults() {
    //if (!sortorder) sortorder = "";
    sortVip = 0;
    var sortby = $('#sort').val();
    $("#content-panel").fadeIn(200, function () { $('#content-panel').unblock({ fadeOut: 2000 }); });
    switch (sortby) {
        case "distance":
            _sortby = "dist";
            _sortorder = "asc";
            break;
        case "distance_desc":
            _sortby = "dist";
            _sortorder = "desc";
            break;
        case "price":
            _sortby = "pr";
            _sortorder = "asc";
            break;
        case "price_desc":
            _sortby = "pr";
            _sortorder = "desc";
            break;
        case "mileage":
            _sortby = "mil";
            _sortorder = "asc";
            break;
        case "mileage_desc":
            _sortby = "mil";
            _sortorder = "desc";
            break;
        case "newest":
            _sortby = "old";
            _sortorder = "desc";
            break;
        case "hasphoto":
            _sortby = "iurl";
            _sortorder = "desc";
            break;
    }

    sortData(_sortby, _sortorder);
}

function sortData(sortBy, orderBy) {
    upsertHashKey("sortby", sortBy);
    upsertHashKey("orderby", orderBy);

    var sortKeys = sortBy.toString().split(',');
    if (_fd && _fd.length > 0) {
        for (var i = 0; i < sortKeys.length; i++) {
            switch (sortKeys[i]) {
                case "dist":
                case "year":
                case "pr":
                case "mil":
                default:
                    _fd.sort(sortNumerical);
                    break;
                case "make":
                case "ec":
                case "model":
                case "iurl":
                    _fd.sort(sortAlphabetical);
                    break;
                case "old":
                    _fd.sort(sortDatetime);
                    break;

            }
        }
        loadSearchResultPage(0);
    }
}
function sortDatetime(a, b) {
    var sortKeys = _sortby.toString().split(',');
    for (var i = 0; i < sortKeys.length; i++) {
        var A = _d.VehicleListings[a][sortKeys[i]].toLowerCase();
        A = A.substr(6, 13);
        var Ax = _d.VehicleListings[a]['isv'];
        var B = _d.VehicleListings[b][sortKeys[i]].toLowerCase();
        B = B.substr(6, 13);
        var Bx = _d.VehicleListings[b]['isv'];
        if (sortVip && Ax > Bx) {
            return -1;
        } else if (sortVip && Ax < Bx) {
            return 1;
        } else {
            if (_sortorder == "desc") {
                if (A < B) return 1;
                else if (A > B) return -1;
                else return 0;
            } else {
                if (A < B) return -1;
                else if (A > B) return 1;
                else return 0;
            }
        }
    }
}
function sortAlphabetical(a, b) {
    var sortKeys = _sortby.toString().split(',');
    for (var i = 0; i < sortKeys.length; i++) {
        var A = _d.VehicleListings[a][sortKeys[i]].toLowerCase();
        var Ax = _d.VehicleListings[a]['isv'];
        var B = _d.VehicleListings[b][sortKeys[i]].toLowerCase();
        var Bx = _d.VehicleListings[b]['isv'];
        if (sortVip && Ax > Bx) {
            return -1;
        } else if (sortVip && Ax < Bx) {
            return 1;
        } else {
            if (_sortorder == "desc") {
                if (A < B) return 1;
                else if (A > B) return -1;
                else return 0;
            } else {
                if (A < B) return -1;
                else if (A > B) return 1;
                else return 0;
            }
        }
    }
}
function sortNumerical(a, b) {
    var sortKeys = _sortby.toString().split(',');
    for (var i = 0; i < sortKeys.length; i++) {
        var A = _d.VehicleListings[a][sortKeys[i]];
        var Ax = _d.VehicleListings[a]['isv'];
        var B = _d.VehicleListings[b][sortKeys[i]];
        var Bx = _d.VehicleListings[b]['isv'];

        if (sortVip && Ax > Bx) {
            return -1;
        } else if (sortVip && Ax < Bx) {
            return 1;
        } else {
            if (isNaN(A) || A < 0) A = 999999999;
            if (isNaN(B) || B < 0) B = 999999999;
            return (_sortorder == "desc" ? B - A : A - B);
        }
    }
}

            
