Pager = (function(){});
Pager.settings = {
		initialPage: 1,
		pages: "#pages",
		paging: "#paging",
		numberOfPages: null,
		numberOfLinks: 5,
		style: 'onPage',
		reqParam: 'page',
		onPaging: null
};
Pager.init = function(options){
	$.extend(Pager.settings,options);
		
	if(Pager.settings.style != 'refreshPage'){
		Pager.pages = $(Pager.settings.pages);
	}
	if(Pager.settings.numberOfPages == null){
		Pager.numberOfPages = $(Pager.pages).find("div.page").length;
	} else {
		Pager.numberOfPages = Pager.settings.numberOfPages;
	}
	if( Pager.numberOfPages>1 ){ 
		Pager.paging = $(Pager.settings.paging);
		$(Pager.paging).find(".totalPages").html(Pager.numberOfPages);
		$(Pager.paging).find("span.first a").click(function(){Pager.gotoFirstPage()});
		$(Pager.paging).find("span.previous a").click(function(){Pager.gotoPreviousPage()});
		$(Pager.paging).find("span.next a").click(function(){Pager.gotoNextPage()});
		$(Pager.paging).find("span.last a").attr("href","#?"+Pager.settings.reqParam+"="+Pager.numberOfPages);
		$(Pager.paging).find("span.last a").click(function(){Pager.gotoLastPage()});
		Pager.gotoPage(Pager.settings.initialPage,true); 
	}
};
Pager.currentPage;
Pager.gotoPage = function(currentPage,initialize){
	if(!initialize && Pager.settings.style == 'refreshPage'){
		if(document.URL.indexOf(Pager.settings.reqParam+"=")>0){
			var url = null; 
			if(Pager.settings.itemsPerPage){
				url=document.URL.replace(new RegExp(Pager.settings.reqParam+"=[0-9]*(:[0-9]*)?"),Pager.settings.reqParam+"="+currentPage+":"+Pager.settings.itemsPerPage);
			}else {
				url=document.URL.replace(new RegExp(Pager.settings.reqParam+"=[0-9]*(:[0-9]*)?"),Pager.settings.reqParam+"="+currentPage);
			}
			document.location = url;
		}else{
			var symbol = document.URL.indexOf("?")>0?"&":"?";
			var url = document.URL + symbol + Pager.settings.reqParam+"=" + currentPage;
			if(Pager.settings.itemsPerPage){
				url=url+":"+Pager.settings.itemsPerPage;
			}
			
			document.location = url;
		}
		return false;
	} 
	if(Pager.settings.style != 'refreshPage'){
		$(Pager.pages).find("div.page:visible").hide();
		$(Pager.pages).find("div.page").eq(currentPage-1).show();
	}
	Pager.currentPage = currentPage;
	$(Pager.paging).find(".currentpage").html(currentPage);
	$(Pager.paging).find("span.pagelinks").empty();
	
	var start = currentPage - Math.floor(Pager.settings.numberOfLinks/2);
	if(start<1) { start = 1; }
	var end = start + Pager.settings.numberOfLinks - 1;
	
	if(end>Pager.numberOfPages) { 
		var diff = end - Pager.numberOfPages;
		end = Pager.numberOfPages; 
		start -= diff;
		if(start<1) { start = 1; }
	}
	for(i=start;i<=end;i++){
		var page = Pager.getPage(i);
		$(Pager.paging).find("span.pagelinks").append(page.getPage(currentPage));
	}
	if(start==1){
		$(Pager.paging).find("span.first").hide();
	} else {
		$(Pager.paging).find("span.first").show();
	}
	if(currentPage==1){
		$(Pager.paging).find("span.previous").hide();
	} else {
		$(Pager.paging).find("span.previous a").attr("href","#?"+Pager.settings.reqParam+"="+(currentPage-1));
		$(Pager.paging).find("span.previous").show();
	}
	if(end==Pager.numberOfPages){
		$(Pager.paging).find("span.last").hide();
	} else {
		$(Pager.paging).find("span.last").show();
	}
	if(currentPage==Pager.numberOfPages){
		$(Pager.paging).find("span.next").hide();
	} else {
		$(Pager.paging).find("span.next a").attr("href","#?"+Pager.settings.reqParam+"="+(currentPage+1));
		$(Pager.paging).find("span.next").show();
	}
	if(Pager.settings.onPaging){
		Pager.settings.onPaging(currentPage);
	}
	$(Pager.paging).css("visibility","visible");
 };
 Pager.pageLinks = {};
 Pager.getPage = function(pageNumber){
	if(!Pager.pageLinks[pageNumber]){
		var page = new Page(pageNumber);
		Pager.pageLinks[pageNumber] = page;
	}
	return Pager.pageLinks[pageNumber];
 };
 
 Pager.gotoFirstPage = function(){
	Pager.gotoPage(1);
 };
 Pager.gotoLastPage = function(){
	Pager.gotoPage(Pager.numberOfPages)
 };
 Pager.gotoPreviousPage = function(){
	Pager.gotoPage(Pager.currentPage-1);
 };
 Pager.gotoNextPage = function(){
	Pager.gotoPage(Pager.currentPage+1);
 };
 
 
 function Page(aPageNumber){
	var me = this;
	me.pageNumber = aPageNumber;
	
	this.gotoPage = function(){
		Pager.gotoPage(me.pageNumber);
	}
	this.getCurrentPage = function(){
		return $("<span class=\"currentpage page\">"+me.pageNumber+"</span>");
	}
	this.getPageLink = function(){
		var link = $("<a href=\"#?"+Pager.settings.reqParam+"="+me.pageNumber+"\">"+me.pageNumber+"</a>");
		$(link).click(me.gotoPage);
		return link;
	}
	this.getPage = function(aPage){
		if(aPage == me.pageNumber){
			return me.getCurrentPage();
		}else{
			return me.getPageLink();
		}
	}
	
 }
 