jQuery.fn.quickpaginate = function(settings) {
    settings = jQuery.extend({
        perpage: 6,
        pager: null,
        showcounter: true,
        prev: "qp_next",
        next: "qp_prev",
        pagenumber: "qp_pagenumber",
        totalnumber: "qp_totalnumber",
        counter: "qp_counter"
    }, settings);
    var cm;
    var total;
    var last = false;
    var first = true;
    var items = jQuery(this);
    var nextbut;
    var prevbut;
    var init = function() {
        items.show();
        total = items.size();
        if (items.size() > settings.perpage) {
            items.filter(":gt(" + (settings.perpage - 1) + ")").hide();
            cm = settings.perpage;
            setNav();
        }
    };
    var goNext = function() {
        if (!last) {
            var nm = cm + settings.perpage;
            items.hide();
            items.slice(cm, nm).show();
            cm = nm;
            if (cm >= total) {
                last = true;
                nextbut.addClass("qp_disabled");
            }
            if (settings.showcounter)
                settings.pager.find("." + settings.pagenumber).text(cm / settings.perpage);
            prevbut.removeClass("qp_disabled");
            first = false;
        }
    };
    var goPrev = function() {
        if (!first) {
            var nm = cm - settings.perpage;
            items.hide();
            items.slice((nm - settings.perpage), nm).show();
            cm = nm;
            if (cm == settings.perpage) {
                first = true;
                prevbut.addClass("qp_disabled");
            }
            if (settings.showcounter)
                settings.pager.find("." + settings.pagenumber).text(cm / settings.perpage);
            nextbut.removeClass("qp_disabled");
            last = false;
        }
    };
    var setNav = function() {
        if (settings.pager === null) {
            settings.pager = jQuery('<div class="qc_pager"></div>');
            items.eq(items.size() - 1).after(settings.pager);
        }
        var pagerNav = $('<a class="' + settings.prev + '" href="#">Prev</a><a class="' + settings.next + '" href="#">Next</a>');
        jQuery(settings.pager).append(pagerNav);
        if (settings.showcounter) {
            var counter = '<span class="' + settings.counter + '"><span class="' + settings.pagenumber + '"></span> / <span class="' + settings.totalnumber + '"></span></span>';
            settings.pager.find("." + settings.prev).after(counter);
            settings.pager.find("." + settings.pagenumber).text(1);
            settings.pager.find("." + settings.totalnumber).text(Math.ceil(total / settings.perpage));
        }
        nextbut = settings.pager.find("." + settings.next);
        prevbut = settings.pager.find("." + settings.prev);
        prevbut.addClass("qp_disabled");
        nextbut.click(function() {
            goNext();
            return false;
        });
        prevbut.click(function() {
            goPrev();
            return false;
        });
    };
    init();
};

jQuery.fn.playlistpaginate = function(settings) {
    settings = jQuery.extend({
        perpage: 6,
        pager: null,
        showcounter: true,
        prev: "qp_next",
        next: "qp_prev",
        pagenumber: "qp_pagenumber",
        totalnumber: "qp_totalnumber",
        counter: "qp_counter"
    }, settings);
    var cm;
    var total;
    var last = false;
    var first = true;
    var items = jQuery(this);
    var nextbut;
    var prevbut;
    var init = function() {
        items.show();
        total = items.size();
        if (items.size() > settings.perpage) {
            items.filter(":gt(" + (settings.perpage - 1) + ")").hide();
            cm = settings.perpage;
            setNav();
        }
    };
    var goNext = function() {
        if (!last) {
            var nm = cm + settings.perpage;
            items.hide();
            items.slice(cm, nm).show();
            cm = nm;
            if (cm >= total) {
                last = true;
                nextbut.addClass("qp_disabled");
            }
            if (settings.showcounter)
                settings.pager.find("." + settings.pagenumber).text(cm / settings.perpage);
            prevbut.removeClass("qp_disabled");
            first = false;
        }
    };
    var goPrev = function() {
        if (!first) {
            var nm = cm - settings.perpage;
            items.hide();
            items.slice((nm - settings.perpage), nm).show();
            cm = nm;
            if (cm == settings.perpage) {
                first = true;
                prevbut.addClass("qp_disabled");
            }
            if (settings.showcounter)
                settings.pager.find("." + settings.pagenumber).text(cm / settings.perpage);
            nextbut.removeClass("qp_disabled");
            last = false;
        }
    };
    var setNav = function() {
        if (settings.pager === null) {
            settings.pager = jQuery('<div class="qc_pager"></div>');
            items.eq(items.size() - 1).after(settings.pager);
        }
        var pagerNav = $('<a class="' + settings.prev + '" href="#"><< Prev</a><a class="' + settings.next + '" href="#">Next >></a>');
        jQuery(settings.pager).append(pagerNav);
        if (settings.showcounter) {
            var counter = '<span class="' + settings.counter + '"><span class="' + settings.pagenumber + '"></span> / <span class="' + settings.totalnumber + '"></span></span>';
            settings.pager.find("." + settings.prev).after(counter);
            settings.pager.find("." + settings.pagenumber).text(1);
            settings.pager.find("." + settings.totalnumber).text(Math.ceil(total / settings.perpage));
        }
        nextbut = settings.pager.find("." + settings.next);
        prevbut = settings.pager.find("." + settings.prev);
        prevbut.addClass("qp_disabled");
        nextbut.click(function() {
            goNext();
            $('.playlistEntryBlock').hide();
            return false;
        });
        prevbut.click(function() {
            goPrev();
            $('.playlistEntryBlock').hide();
            return false;
        });
    };
    init();
};