var currentPage = 0;
var Paginator = new Class({
	initialize: function(){
		
		this.page = currentPage;
		
		this.params = null;
		
			
		this.itemsPerPage = 0;
		this.numberOfPages =0;
		
		this.totalContainers = [];
		
		this.itemsContainer = "comments";
		this.pagesContainer = "pagging";
		this.totalCounterContainer ="totalComments";
	
		this.dataCallbackURL 		= "";
		this.countCallbackURL 		= "";
		
		this.addItemCallback 	= "";
		this.deleteItemCallback = "";
		
		this.dataRetrieveFunction 	= null;
		
		this.addItemCompleteFunction 	= "";
		this.deleteItemCompleteFunction = "";
		
		this.first 		= "First";
		this.next 		= "&gt";
		this.previous 	= "&lt";
		this.last 		= "Last";
		
		
		this.countItems = 0; 
	},
	render:function(){
		this.renderItems(0);
		this.renderPageLinks();
		
	},
	renderItems:function(page){
		
		//$(this.itemsContainer).setHTML("<div class=\"wait\"><img  src=\"/images/load.gif\">");
		//remove old page items
		if($$('.paginable')!=null){
			$$('.paginable').each(function(item){
				$(item).remove();
			});
		}
		var paginator = this;
		this.page = page;
		currentPage = page;

		var myCallback = new Callback(this.dataCallbackURL+"/"+this.page,this.params,
									function(decoded){
										//$(paginator.ite7msContainer).setHTML("");
										paginator.dataRetrieveFunction(decoded.data);
									},
									function(decoded){
										alert("Data retrieve Error");
									});
											
		myCallback.request();
		
	},

	renderPageLinks:function(){
		this.countItems = 0;
		var paginator = this;
		var myCallback = new Callback(this.countCallbackURL,this.params,
									function(decoded){
										paginator.countItems = decoded.data;
										if(paginator.totalCounterContainer!=""&& $(paginator.totalCounterContainer)!=null)
											$(paginator.totalCounterContainer).setText(""+paginator.countItems);
										paginator.showPageLinks();
									}
									,
									function(decoded){
										alert("Count Error");
									});
											
		myCallback.request();
	},
	
	
	showPageLinks:function(){
		if(isNaN(this.countItems)){
			this.countItems = 0;
		}
	
		var container = $(this.pagesContainer);
		if($(container))
			container.setHTML("");
		if(this.countItems>this.itemsPerPage){
			this.numberOfPages = Math.ceil(this.countItems/this.itemsPerPage);
			var paginator = this;
			
			
			//firstPage
			var firstPageLink  = new Element("a",{id:"firstPage",href:""}).setText(this.first).addEvent('click',function(ev){
				(new Event(ev)).stop();
				currentPage = 0;
				paginator.renderItems(this.numberOfPages-1);
				paginator.hideOrShowNextLinks($("pageLink"+(0)));
			});
			$(firstPageLink).style.display="none";
			$(container).adopt(firstPageLink);
			
			
			//lastPage
			var lastPageLink  = new Element("a",{id:"lastPage",href:""}).setText(this.last).addEvent('click',function(ev){
				(new Event(ev)).stop();
				currentPage = paginator.numberOfPages-1;
				paginator.renderItems(paginator.numberOfPages-1);
				var lastPageNumber = paginator.numberOfPages-1;
				paginator.hideOrShowNextLinks($("pageLink"+lastPageNumber));
				
			});
			$(lastPageLink).style.display="none";
			$(container).adopt(lastPageLink);
			
			for(var i=0;i<this.numberOfPages;i++){
				var pageNumber = i+1;
				var pageLink  = new Element("a",{id:"pageLink"+i,href:""}).setText(pageNumber).addEvent('click',function(ev){
				
					(new Event(ev)).stop();
					currentPage = $("value["+this.id+"]").value;
					paginator.renderItems(currentPage);
					paginator.hideOrShowNextLinks(this);
					
					
				}).addClass("pageLink");
				var pageLinkValue  = new Element("input",{type:"hidden",value:i,id:"value[pageLink"+i+"]"});
				$(pageLink).injectBefore($('lastPage'));
				$(pageLinkValue).injectAfter(container);
			}
			
			if($("pageLink0")!=null)	this.hideOrShowNextLinks($("pageLink0"));
		}
		
	},
	hideOrShowNextLinks:function(selectedLink){
		var pageSelectedNumber = $("value["+selectedLink.id+"]").value;
		
		var firstPage = pageSelectedNumber-3;
		var lastPage = firstPage+7;
		
		if(firstPage<0){
			firstPage = 0;
			lastPage = 7;
		}
		
		if(lastPage>this.numberOfPages){
			
			lastPage = this.numberOfPages;
			firstPage = lastPage-7;
			if(firstPage<0){
				firstPage = 0;
			}
		}
		if(pageSelectedNumber==0)
			$('firstPage').style.display="none";
		else
			$('firstPage').style.display="block";
		
		if(pageSelectedNumber==lastPage-1)
			$('lastPage').style.display="none";
		else
			$('lastPage').style.display="block";
		
		$$('.pageLink').each(function(link){
			
			$(link).removeClass("selected");
			
			var pageNumber = $("value["+link.id+"]").value;
			if(pageNumber>=firstPage && pageNumber<lastPage){
				$(link.id).style.display="block";
			}else{
				$(link.id).style.display="none";
			}
		});
		
		
		$(selectedLink).addClass("selected");
	},
	reload: function(){
		this.renderItems(this.page);
		this.renderPageLinks();
	}
	
	
	
});
window.waiterSearchPaginatorComponent = '';
var SearchPaginator = new Class({
	initialize: function(){
		
		this.page = currentPage;
		
		this.params = null;
		
			
		this.itemsPerPage = 0;
		this.numberOfPages =0;
		
		
		this.itemsContainer = "comments";
		this.pagesContainer = "pagging";
		this.totalCounterContainer = this.pagesContainer + "totalComments";
	
		this.dataCallbackURL 		= "";
		this.countCallbackURL 		= "";
		
		this.addItemCallback 	= "";
		this.deleteItemCallback = "";
		
		this.dataRetrieveFunction 	= null;
		
		this.addItemCompleteFunction 	= "";
		this.deleteItemCompleteFunction = "";
		
		this.first 		= "First";
		this.next 		= "&gt";
		this.previous 	= "&lt";
		this.last 		= "Last";
		
		
		this.countItems = 0;
		this.functionToDoAfterCount = Class.empty;
	}
	,render:function(){
		this.renderItems(0);	
	}
	,renderItems:function(page){
		window.waiterSearchPaginatorComponent = new showWaiter({ component 	: this.itemsContainer });
		window.waiterSearchPaginatorComponent.start();
		//remove old page items
		if($$('.paginable')!=null){
			$$('.paginable').each(function(item){
				$(item).remove();
			});
		}
		var me = this;
		this.page = page;
		currentPage = page;

		var myCallback = new Callback(this.dataCallbackURL+"/"+this.page
			,this.params
			,function(decoded){
				me.dataRetrieveFunction(decoded.data);
				window.waiterSearchPaginatorComponent.stop();
			},function(decoded){
				alert("Data retrieve Error");
				window.waiterSearchPaginatorComponent.stop();
			}
		).request();
	}
	,renderPageLinks:function(){
		var me = this;
		window.waiterSearchPaginatorComponent = new showWaiter({ component 	: me.pagesContainer });
		window.waiterSearchPaginatorComponent.start();
		this.countItems = 0;
		var me = this;
		var myCallback = new Callback(
			this.countCallbackURL
			,this.params
			,function(decoded){
				me.countItems = decoded.data;
				if(me.totalCounterContainer!=""&& $(me.totalCounterContainer)!=null)
					$(me.totalCounterContainer).setText(""+me.countItems);
				me.showPageLinks();
				me.functionToDoAfterCount(decoded.data);
				window.waiterSearchPaginatorComponent.stop();
			}
			,function(decoded){
				alert("Count Error");
				window.waiterSearchPaginatorComponent.stop();
			}
		).request();
	}
	,showPageLinks:function(){
		var me = this;
		if(isNaN(this.countItems)){
			this.countItems = 0;
		}
		var container = $(this.pagesContainer);
		container.setHTML("");
		if(this.countItems>this.itemsPerPage){
			this.numberOfPages = Math.ceil(this.countItems/this.itemsPerPage);
			
			//firstPage
			var firstPageLink  = new Element("a",{id:me.pagesContainer+"firstPage",href:""}).setText(this.first).addEvent('click',function(ev){
				(new Event(ev)).stop();
				currentPage = 0;
				me.renderItems(this.numberOfPages-1);
				me.hideOrShowNextLinks($(me.pagesContainer+"pageLink"+(0)));
			});
			$(firstPageLink).addClass('skipLink');
			$(firstPageLink).style.display="none";
			$(container).adopt(firstPageLink);
						
			//lastPage
			var lastPageLink  = new Element("a",{id:me.pagesContainer+"lastPage",href:""}).setText(this.last).addEvent('click',function(ev){
				(new Event(ev)).stop();
				currentPage = me.numberOfPages-1;
				me.renderItems(me.numberOfPages-1);
				var lastPageNumber = me.numberOfPages-1;
				me.hideOrShowNextLinks($(me.pagesContainer+"pageLink"+lastPageNumber));
				
			});
			$(lastPageLink).addClass('skipLink');
			$(lastPageLink).style.display="none";
			$(container).adopt(lastPageLink);

			for(var i=0;i<this.numberOfPages;i++){
				var pageNumber = i+1;
				var pageLink  = new Element("a",{id:me.pagesContainer+"pageLink"+i,href:""}).setText(pageNumber).addEvent('click',function(ev){				
					(new Event(ev)).stop();
					currentPage = $(me.pagesContainer+"value["+this.id+"]").value;
					me.renderItems(currentPage);
					me.hideOrShowNextLinks(this);
				}).addClass("pageLink");
				var pageLinkValue  = new Element("input",{type:"hidden",value:i,id:me.pagesContainer+"value["+me.pagesContainer+"pageLink"+i+"]"});
				$(pageLink).injectBefore($(me.pagesContainer+'lastPage'));
				$(pageLinkValue).injectAfter(container);
			}
			if($(me.pagesContainer+"pageLink0")!=null)	this.hideOrShowNextLinks($(me.pagesContainer+"pageLink0"));
		}
	}
	,hideOrShowNextLinks:function(selectedLink){
		var me = this;
		var pageSelectedNumber = $(me.pagesContainer+"value["+selectedLink.id+"]").value;
		
		var firstPage = pageSelectedNumber-3;
		var lastPage = firstPage+7;
		
		if(firstPage<0){
			firstPage = 0;
			lastPage = 7;
		}
		if(lastPage>this.numberOfPages){
			
			lastPage = this.numberOfPages;
			firstPage = lastPage-7;
			if(firstPage<0){
				firstPage = 0;
			}
		}
		if(pageSelectedNumber==0)
			$(me.pagesContainer+'firstPage').style.display="none";
		else
			$(me.pagesContainer+'firstPage').style.display="block";
		
		if(pageSelectedNumber==lastPage-1)
			$(me.pagesContainer+'lastPage').style.display="none";
		else
			$(me.pagesContainer+'lastPage').style.display="block";
		var parentLink = null;
		$$('.pageLink').each(function(link){

			parentLink = $(link).getParent();
			if (parentLink.id == me.pagesContainer){
				$(link).removeClass("selected");			
				var pageNumber = $(me.pagesContainer+"value["+link.id+"]").value;
				if(pageNumber>=firstPage && pageNumber<lastPage){
					$(link.id).style.display="block";
				}else{
					$(link.id).style.display="none";
				}
			}
		});
		$(selectedLink).addClass("selected");
	}
});