
(function($) {

		var opts;

    $.fn.pager = function(options) {

        opts = $.extend({}, $.fn.pager.defaults, options);

        return this.each(function() {
						
	        var $pager = $('<ul class="pages"></ul>');
	        
	        $pager.append($('<li class="first">Pagina: </li>'));
	
	        $pager.append(create_btn('prev'));
	       
	        var to_show = parseInt(opts.offset)-1 + parseInt(opts.max_nav);	        
	        var upper = Math.min(parseInt(opts.page_count), to_show);
	       
					for(var i = opts.offset; i <= upper; i++) {				
						var $btn = $('<li class="page_' + i + ' num">' + i + '</li>');						
						if (i == opts.page_num) {
							$btn.addClass('current');
						}						
						$btn.appendTo($pager);
					}
														
					var $btns = $pager.find('li.num');					
					$btns.each(function(n) { this.index = n+1; });					
					$btns.click(function() { flip_to_page($(this), this.index) });
					
					$pager.append(create_btn('next'));
	
					$(this).empty().append($pager); 					
        });
    }
    
    var flip_to_page = function($el, index) {
    	
    	if ((index < opts.offset && index != 0) || index >= (opts.offset + opts.max_nav)) {
    		
    		var offset = 1;
    		
    		if (index < opts.offset) {    			
    			offset = opts.offset - opts.max_nav;
    		}
    		
    		if (index >= (opts.offset + opts.max_nav)) {
    			offset =  index;
    		}
    		   		
    		$el.closest('div').pager({'page_num': index, 'page_count': opts.page_count, 'max_nav': 4,
																	'offset': offset, 'callback': opts.callback});
			}
			
			//alert('test');
    	    	
    	if (index != opts.page_num 
    					&& index <= opts.page_count && index >= 1) {


    		$el.siblings().andSelf().show().removeClass('current').filter('.page_' + index).addClass('current');
				
				$prev_btn = $el.parent().find('li.prev');
				
    		if (index <= 1) {
    			$prev_btn.addClass('inactive_prev');
    		} else {
    			$prev_btn.removeClass('inactive_prev');
    		}
    		
    		$next_btn = $el.parent().find('li.next');
    		
    		if (index  >= opts.page_count) {
    			$next_btn.addClass('inactive_next');
    		} else {
    			$next_btn.removeClass('inactive_next');
    		}
					
    		opts.page_num = index;    	
    		opts.callback(index);	
    		
    	}
    }

    var create_btn = function(lbl) {
      
      var $btn = $('<li class="' + lbl + ' ctrl"></li>');

      if (lbl == 'prev') {
      	if (opts.page_num <= 1) {
      		$btn.addClass('inactive_prev');
      	}
      	$btn.click(function() {
      		flip_to_page($(this), parseInt(opts.page_num) - 1);     
      	});      	
      } else if (lbl == 'next') {
      	if (opts.page_num >= opts.page_count) {
      		$btn.addClass('inactive_next');
      	} 
      	$btn.click(function() {
      		flip_to_page($(this), parseInt(opts.page_num) + 1);
      	});      	
      }
      
      return $btn;      
    }

    $.fn.pager.defaults = {
        page_num: 1,
        page_count: 1,
        max_nav: 3
    }

})(jQuery);






