/*

Modified by David Kovacs

Based on:

jQuery AjaxPager Plugin
Version 0.8 (05/01/2010)

Usage: $("someSelector").ajaxPager();
Options: startPage (Default: 1)
         pageCount (Default: 10)
         changeSiteEvent (Default: null)
*/
(function($) {
     $.fn.extend({
         ajaxPager: function(options) {
             var defaults = {
                 startPage: 0,
                 pageCount: 10,
                 changeSiteEvent: null,
                 showFirstLast: false,
                 showGoBack : true
             };
             var options = $.extend(defaults, options);
             
             $(this).addClass("pagination");
             
             return this.each(function() {
                 var obj = $(this);
                 if(options.pageCount > 1) {
                     obj.empty().append(CalculatePages(parseInt(options.startPage), parseInt(options.pageCount), options.showGoBack, options.showFirstLast));
                 
                     if($.isFunction(options.changeSiteEvent)) {    
                         options.changeSiteEvent(options.startPage, options.pageCount, true);
                     }
                 
                     var eventHandler = function() { 
                         $(".pagination li").click(function(event) {
                             event.preventDefault();
                             var activePage = $(this).attr('page'); //$(this).find("a").attr("href");
                             if($.isFunction(options.changeSiteEvent)) {
                                 obj.empty().append(CalculatePages(parseInt(activePage), parseInt(options.pageCount),options.showGoBack, options.showFirstLast));
                                 eventHandler();
                                 options.changeSiteEvent(activePage, options.pageCount, false);
                             }
                             return false;
                         });
                     }
                 
                     eventHandler();
                 }
                 else {
                     if($.isFunction(options.changeSiteEvent)) {    
                         options.changeSiteEvent(options.startPage, options.pageCount, true);
                     }
                 }
                 
                 
             });
         }
     });
     
     function CalculatePages(pageIndex, pageCount, showGoBack, showFirstLast) {
         var startPoint = pageIndex - 2;
         var endPoint = pageIndex + 2;
         
         if(pageIndex < 4) {
             startPoint = 0;
             if(pageCount > 4) {
                 endPoint = 4;
             }
             else {
                 endPoint = pageCount;
             }
         }
         
         if(endPoint > pageCount) {
             var minus = endPoint - pageCount;
             startPoint = startPoint - minus;
             endPoint = endPoint - minus;
         }
         
         var $pager = $('<ul></ul>');
        
         var firstBackVisibility = (pageIndex > 0) ? 'visible' : 'hidden';
         
         if(showFirstLast) {
             $('<li class="first" page="1"><a href="#">First</a></li>').appendTo($pager).css('visibility', firstBackVisibility);
         }
         if(showGoBack) {
             var backButton = $('<li class="prev" page="' + (pageIndex - 1) + '"><a href="#">Back</a></li>');
             backButton.css('visibility', firstBackVisibility).appendTo($pager);
         }
         
         for(var page = startPoint; page < endPoint; page++) {
             if(page != pageIndex) {
                 var currentButton = $('<li class="num" page="' + page + '"><a href="#">' 
                                       + (page + 1) + '</a></li>');
             }
             else {
                 var currentButton = $('<li class="num selected" page="' + page + '"><a href="#">'
                                       + (page + 1) + '</a></li>');
             }
             currentButton.appendTo($pager);
         }
         
         if(pageIndex < pageCount - 1) {
             if(showGoBack) {
                 var goButton = $('<li class="next" page="' + (pageIndex + 1) + '"><a href="#">Next</a></li>');
                 goButton.appendTo($pager);
             }
             if(showFirstLast) {
                 $('<li class="last" page="' + pageCount + '"><a href="#">Last</a></li>').appendTo($pager);
             }
         }
         
         return $pager;
     }
})(jQuery);
