/*
 * 	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: 9,
			delay: 0,
			numeric: false,
			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 next, prev, prevInactive, nextInactive;
		var page = 1;
		var timeout;
		var clicked = false;
        
        //number of pages (round number up)
        var pages = Math.ceil(count/step);
        
        if (1 == pages) {
            //if there is only one page, don't show any paginator
            return false;
        }
        
        var ol = $('<div class="pager-controls" id="'+ options.controls +'"></div>').insertAfter(this);
        
        if(options.nextprev){
            next = $('<a class="next"><span class="hidetext">Next</span></a>')
                .hide()
                .appendTo(ol)
                .click(function(){
                    clicked = true;
                    page++;
                    show();
                });
            nextInactive = $('<span class="next-inactive"><span class="hidetext">Next</span></span>')
                .hide()
                .appendTo(ol);
            
            prev = $('<a class="previous"><span class="hidetext">Previous</span></a>')
                .hide()
                .appendTo(ol)
                .click(function(){
                    clicked = true;
                    page--;
                    show();
                });
            prevInactive = $('<span class="previous-inactive"><span class="hidetext">Previous</span></span>')
                .hide()
                .appendTo(ol);
        }
        var t_curr = $('<span class="pager-nos"><b><span class="page-no">'+ page +'</span></b> OF <b>'+ pages + '</b></span>').appendTo(ol);
        show();
        
        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 );
                }
			});
            
			$('li','#'+ options.controls).removeClass(options.current);
			$('li[data-index="'+page+'"]','#'+ options.controls).addClass(options.current);
			$('#' + options.controls + ' span.page-no').html(page);
			if(options.auto){
				if(!options.clickstop && !clicked) {
                    timeout = setTimeout(auto,options.pause);
                }
			}
            
            if(options.nextprev){
                /*if (pages == 1) {                   //no pagination needed - only single page
                    prev.fadeOut('fast');
                    next.fadeOut('fast');
                    prevInactive.fadeIn('fast');
                    nextInactive.fadeIn('fast');
                } else*/
                if (page == 1) {             //first page
                    prev.fadeOut('fast');
                    nextInactive.fadeOut('fast');
                    prevInactive.fadeIn('fast');
                    next.fadeIn('fast');
                } else if (page == pages) {         //last page
                    prevInactive.fadeOut('fast');
                    next.fadeOut('fast');
                    prev.fadeIn('fast');
                    nextInactive.fadeIn('fast');
                } else {                            //every other page
                    prevInactive.fadeOut('fast');
                    nextInactive.fadeOut('fast');
                    prev.fadeIn('fast');
                    next.fadeIn('fast');
                }
            }
		}
        
        function auto(){
			if(upper <= count){
                page++;
                show();
            }
		}
	}
})(jQuery);;

