/*
* 	Easy Paginate 1.0 - jQuery plugin
*	written by Alen Grakalic	
*	http://cssglobe.com/
*
*	Copyright (c) 2011 Alen Grakalic (http://cssglobe.com)
*	Dual licensed under the MIT (MIT-LICENSE.txt)
*	and GPL (GPL-LICENSE.txt) licenses.
*
*	Built for jQuery library
*	http://jquery.com
*
*/

(function ($) {

    $.fn.easyPaginate = function (options) {

        var defaults = {
            step: 4,
            delay: 100,
            numeric: true,
            nextprev: true,
            auto: false,
            pause: 4000,
            clickstop: true,
            controls: 'pagination',
            current: 'current'
        };

        var options = $.extend(defaults, options);
        var step = options.step;
        var lower, upper;
        var children = $(this).children();
        var count = children.length;
        var obj, next, prev;
        var page = 1;
        var timeout;
        var clicked = false;

        function show() {
            clearTimeout(timeout);
            lower = ((page - 1) * step);
            upper = lower + step;
            $(children).each(function (i) {
                var child = $(this);
                child.hide();
                if (i >= lower && i < upper) { setTimeout(function () { child.fadeIn('fast') }, (i - (Math.floor(i / step) * step)) * options.delay); }
                if (options.nextprev) {
                    if (upper >= count) { next.fadeOut('fast'); } else { next.fadeIn('fast'); };
                    if (lower >= 1) { prev.fadeIn('fast'); } else { prev.fadeOut('fast'); };
                };
            });
            $('li', '#' + options.controls).removeClass(options.current);
            $('li[data-index="' + page + '"]', '#' + options.controls).addClass(options.current);

            

      
            if (options.auto) {
                if (options.clickstop && clicked) { } else { timeout = setTimeout(auto, options.pause); };
            };
        };

        function auto() {
            if (upper <= count) { page++; show(); }
            if (upper >= count) {
                page = 0;
            }
        };

        this.each(function () {

            obj = this;

            if (count > step) {

                var pages = Math.floor(count / step);
                if ((count / step) > pages) pages++;

                var ol = $('<ol id="' + options.controls + '"></ol>').insertAfter(obj);

                if (options.nextprev) {
                    prev = $('<li class="prev"></li>')
						.hide()
						.appendTo(ol)
						.click(function () {
						    clicked = true;
						    page--;
						    show();
						});
                };

                if (options.numeric) {
                    for (var i = 1; i <= pages; i++) {
                        $('<li data-index="' + i + '">' + i + '</li>')
						.appendTo(ol)
						.click(function () {
						    clicked = true;
						    page = $(this).attr('data-index');
						    show();
						});
                    };
                };

                if (options.nextprev) {
                    next = $('<li class="next"></li>')
						.hide()
						.appendTo(ol)
						.click(function () {
						    clicked = true;
						    page++;
						    show();
						});
                };

                show();
            };
        });

    };

})(jQuery);
