﻿function trim(string) {
    if (string == undefined)
        return "";
       
    return string.replace(/^\s*/, "").replace(/\s*$/, "");
}

var alphaSort = 0;

function sortPage(sorter) {
    var things = new Array();
    var thingCount = 0;
    var tops = new Array();
    var totalHeight = 0;

    $(".category-item").each(function () {
        things[thingCount] = $(this);
        tops[thingCount] = totalHeight;

        totalHeight += $(this).height() + 10;
        thingCount++;
    });

    $(".category-item").parent().animate({
        height: (totalHeight - 10) + "px"
        }, 3000);

    if (sorter == "Alpha") {
        if (alphaSort == 0) {
            things.sort(sortByName);
            alphaSort = 1;
        }
        else {
            things.sort(sortByNameDesc);
            alphaSort = 0;
        }
    }
    else {
        alphaSort = 0;

        if (sorter == "Reviews")
            things.sort(sortByReviews);
        else if (sorter == "Recent") 
            things.sort(sortByRecent);
        else 
            things.sort(sortByRatings);
    }
    
    for (var i = 0; i < things.length; i++) {
        var topStr = tops[i] + "px";

        things[i].animate({
            top: topStr,
        }, 1000 );
    }
}

function sortByReviews(a, b) {
    var aVal = a.attr("rel").split("|")[1];
    var bVal = b.attr("rel").split("|")[1];
    return bVal - aVal;
}

function sortByRatings(a, b) {
    var aVal = a.attr("rel").split("|")[2];
    var bVal = b.attr("rel").split("|")[2];
    return bVal - aVal;
}
function sortByRecent(a, b) {
    var aVal = a.attr("rel").split("|")[3];
    var bVal = b.attr("rel").split("|")[3];
    return bVal - aVal;
}

function sortByName(a, b) {
    var aVal = a.attr("rel").split("|")[0];
    var bVal = b.attr("rel").split("|")[0];
    return (bVal < aVal) - (aVal < bVal);
}
function sortByNameDesc(a, b) {
    var aVal = a.attr("rel").split("|")[0];
    var bVal = b.attr("rel").split("|")[0];
    return (bVal > aVal) - (aVal > bVal);
}
