(function($) {
	$.extend({
		tablesorterMultiPager: new function() {
		
		              function setCookie(c_name,value,expiredays) {
                                                var exdate=new Date();
                                                exdate.setDate(exdate.getDate()+expiredays);
                                                document.cookie=c_name+ "=" +escape(value)+
                                                    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
                                            }
			
			function updatePageDisplay(table) {
			              
			              var c = table.config;
			              if (c.totalRows >= c.minItemsForPaging) {
    			                  var multiPager = 
                                                                    "<div class='show' id='pages' style='padding-left:30px; padding-right:30px; top-margin:8px' >" +
                                                                        "pages: " +
                                                                        "<a href='#'  class='previousBtn' id='" + (c.page-1) + "'><img src='/pix/common/button_prev.gif' alt='previous page' title='previous page' border='0' class='previousBtn' /></a>";
                                                              for (var i = 0; i < c.totalPages; i++)  {
                                                                  if ((i  > (c.page - 5)) && (i  < (c.page + 5))) { 
                                                                    if (i  == c.page) {
                                                                        multiPager = multiPager +
                                                                            "<div class='current'>" + (i + 1) + "</div>";
                                                                    } else {
                                                                        multiPager = multiPager +
                                                                            "<a href='#' id='" + i  + "' >" + (i + 1) + "</a>";
                                                                    }
                                                                  }
                                                              }
                                                               multiPager = multiPager +
                                                                        "<a href='#' class='nextBtn' id='" + (c.page+1) + "'><img src='/pix/common/button_next.gif' alt='next page' title='next page' border='0' class='nextBtn' /></a>" +
                                                                    "</div>" +
                                                                    "<div class='show' >" + 
                                                                        c.items + " per page: " +
                                                                        "<select name='itemsPerPage'>" +
                                                                        "<option style='padding-right:4px;' value='5'>5</option>" +
                                                                        "<option style='padding-right:4px;' value='10'>10</option>" +
                                                                        "<option style='padding-right:4px;' value='15'>15</option>" +
                                                                        "<option style='padding-right:4px;' value='20'>20</option>"
                                                                        "</select>" +
                                                                    "</div>";
                                                                $('.MultiPager > *').remove();
	    		                    $('.MultiPager').append(multiPager);
	    		                    
	    		                    $('.MultiPager option[value="' + c.size +'"]').attr('selected', true);
	    		                    
	    		                    if (c.page == 0) {
	    		                        $('.MultiPager #pages .previousBtn').hide();
        	    		                    }
			                    if (c.page == (c.totalPages - 1)) {
			                        $('.MultiPager #pages .nextBtn').hide();
			                    }
			                
			                    // events
			                    $('.MultiPager #pages a').click( function() {
			                        var pageNum = $(this).attr('id');
    			                        if (pageNum) {
			                            c.page = parseInt(pageNum);
				             moveToPage(table);
				         }
				        return false;
				    });
			                 
				$(".MultiPager select[name='itemsPerPage']").change(function() { 
               		                  setPageSize(table, parseInt($(this).find('option:selected').val(), 10));
               		                  return false;
               		              });
                                                    }
			}
			
			function setPageSize(table,size) {
				var c = table.config;
				c.size = size;
				setCookie("itemsPerPage",size,365);
				c.totalPages = Math.ceil(c.totalRows / c.size);
				c.pagerPositionSet = false;
				moveToPage(table);
				fixPosition(table);
			}
			
			function fixPosition(table) {
				var c = table.config;
				
			              if (c.totalRows >= c.minItemsForPaging) {
				    if(!c.pagerPositionSet && c.positionFixed) {
					var c = table.config, o = $(table);
					if(o.offset) {
						c.container.css({
							top: o.offset().top + o.height() + 'px',
							position: 'absolute'
						});
					}
					c.pagerPositionSet = true;
				    }
				}
			}
						
			
			function moveToPage(table) {
				var c = table.config;
				
			              if (c.totalRows >= c.minItemsForPaging) {
				    if(c.page < 0 || c.page > (c.totalPages-1)) {
					c.page = 0;
				    }
				    $( 'html, body' ).delay(500).animate( { scrollTop: $('#sortableTable').offset().top - 300}, 'fast' );
				    renderTable(table,c.rowsCopy);
				}
			}
			
			function renderTable(table,rows) {
				var c = table.config;
				
			              if (c.totalRows >= c.minItemsForPaging) {
    				    var l = rows.length;
				    var s = (c.page * c.size);
				    var e = (s + c.size);
				    if(e > rows.length ) {
					e = rows.length;
				    }
				    var tableBody = $(table.tBodies[0]);
				    // clear the table body
				    $.tablesorter.clearTableBody(table);
				    for(var i = s; i < e; i++) {
					//tableBody.append(rows[i]);
					var o = rows[i];
					var l = o.length;
					for(var j=0; j < l; j++) {
						tableBody[0].appendChild(o[j]);
					}
				    }
				} else {
				    var l = rows.length;
				    var tableBody = $(table.tBodies[0]);
				    // clear the table body
				    $.tablesorter.clearTableBody(table);
				    for(var i = 0; i < c.totalRows; i++) {
					//tableBody.append(rows[i]);
					var o = rows[i];
					var l = o.length;
					for(var j=0; j < l; j++) {
						tableBody[0].appendChild(o[j]);
					}
				    }
				}
				
				fixPosition(table,tableBody);
				
				$(table).trigger("applyWidgets");
				
			              if (c.totalRows >= c.minItemsForPaging) {
				    if( c.page >= c.totalPages ) {
        			                        moveToLastPage(table);
        			                    }
				}
				
				updatePageDisplay(table);
			}
			
			this.appender = function(table,rows) {
				
				var c = table.config;
				
				c.rowsCopy = rows;
				c.totalRows = rows.length;
				c.totalPages = Math.ceil(c.totalRows / c.size);
				
				renderTable(table,rows);
			};
			
			var itemsPerPageStr = getCookie("itemsPerPage");
			var itemsPerPage = parseInt(itemsPerPageStr);
			if  ((!itemsPerPageStr) || (isNaN(itemsPerPage))) {
			    itemsPerPageStr = '20';
			    itemsPerPage = 20;
			}
			setCookie("itemsPerPage",itemsPerPageStr,365);
			
			this.defaults = {
			               items: 'Items', 
			               size: itemsPerPage,
			               minItemsForPaging: 20,
				offset: 0,
				page: 0,
				totalRows: 0,
				totalPages: 0,
				container: null,
				cssNext: '.next',
				cssPrev: '.prev',
				cssFirst: '.first',
				cssLast: '.last',
				cssPageDisplay: '.pagedisply',
				cssPageSize: '.pagesize',
				seperator: " | ",
				positionFixed: true,
				appender: this.appender
			};
			
			this.construct = function(settings) {
				
				return this.each(function() {	
					
					config = $.extend(this.config, $.tablesorterMultiPager.defaults, settings);
					
					var table = this;
				
					$(this).trigger("appendCache");
										
					config.size = parseInt($(".MultiPager select[name='itemsPerPage']:first option:selected").val());
					
				});
			};
			
		}
	});
	// extend plugin scope
	$.fn.extend({
                    tablesorterMultiPager: $.tablesorterMultiPager.construct
	});
	
})(jQuery);				
