/*
* 	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',
            onpage: 1
        };

        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;
        if (options.onpage != page) { page = options.onpage; }
        //alert(options.onpage);
        var timeout;
        var clicked = false;

        function show() {
            clearTimeout(timeout);
            lower = ((page - 1) * step);
            upper = lower + step;
            $(children).hide();
            $(children).each(function (i) {
                var child = $(this);

                if (i >= lower && i < upper) {
                    // setTimeout(function(){ child.show() }, ( i-( Math.floor(i/step) * step) )*options.delay ); 
                    child.show();
                }
                if (options.nextprev && (typeof (next) != "undefined")) {
                    if (page == (Math.floor(count / step)) + 1) { next.hide(); } else { next.show(); };
                };
                if (options.nextprev && (typeof (prev) != "undefined")) {
                    if (page == 1) { prev.hide(); } else { prev.show(); };
                };
            });
            $('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(); }
        };

        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 ((pages > 1) && options.nextprev) {
                prev = $('<li class="prev">Previous</li>')
						.hide()
						.appendTo(ol)
						.click(function () {
						    clicked = true;
						    page--;
						    show();
						});
            };

            if ((pages > 1) && 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 ((pages > 1) && options.nextprev) {
                next = $('<li class="next">Next</li>')
						.hide()
						.appendTo(ol)
						.click(function () {
						    clicked = true;
						    page++;
						    show();
						});
            };

            show();
            // };
        });

    };

})(jQuery);
