﻿$.fn.paginate = function (settings) {
    settings = jQuery.extend({
        next: null,
        prev: null,
        size: 9,
        fireNextPrev: null
    }, settings);
    var items = $(this);
    var prev = $(settings.prev);
    var next = $(settings.next);
    prev.hide();
    next.hide();
    var showItems = function (from, to) {
        for (var i = from; i < to; i++) {
            $(items[i]).show();
        }
    }
    var hideItems = function (from, to) {
        for (var i = from; i < to; i++) {
            $(items[i]).hide();
        }
    }

    if (items.length > settings.size) {
        next.show();
    }
    var start = 0;
    hideItems(settings.size > items.length ? items.length : settings.size, items.length);
    next.click(function () {
        var from = start;
        start += settings.size;
        hideItems(from, start);
        var to = start + settings.size;
        to = to > items.length ? items.length : to;
        hideItems(start, to);
        if (to >= items.length) {
            next.hide();
        }
        prev.show();
        showItems(start, to);
        if (settings.fireNextPrev == null || settings.fireNextPrev()) {
            $(items[start]).click();
        }
    });
    prev.click(function () {
        var to = start + settings.size;
        to = to > items.length ? items.length : to;
        hideItems(start, to);
        start -= settings.size;
        start = start < 0 ? 0 : start;
        hideItems(start, to);
        if (start == 0) {
            prev.hide();
        }
        next.show();
        var to = start + settings.size;
        to = to > items.length ? items.length : to;
        showItems(start, to);
        if (settings.fireNextPrev == null || settings.fireNextPrev()) {
            $(items[start]).click();
        }
    });
};
