var ajaxpagination = Class.create();
ajaxpagination.prototype = {
	initialize: function(options) {
		
		
		this.params			= (options.params) 			? options.params 			: new Object();
		this.n				= (options.objName) 		? options.objName 			: '';
		this.label_next		= (options.next) 			? options.next 				: '';
		this.label_previous	= (options.previous) 		? options.previous 			: '';
		this.updatediv 		= (options.updatediv) 		? options.updatediv 		: '';
		this.paginationdiv 	= (options.paginationdiv) 	? options.paginationdiv 	: '';
		this.queryparams	= (options.queryparams) 	? options.queryparams 		: '';
		this.nbitems		= (options.nbitems) 		? options.nbitems 			: 0;
		this.itembypage 	= (options.itembypage) 		? options.itembypage 		: 0;
		this.page			= (options.page) 			? options.page 				: 0;
		this.url 			= (options.url) 			? options.url 				: false;
		this.evalresult	 	= (options.evalresult) 		? options.evalresult 		: false;
		
		this.updateNbPage();
		this.setPage(this.page);
	},
	updateNbPage:function(){
		this.nbpage 	= this.nbitems/this.itembypage;
		this.nbpage 	= (Math.round(this.nbpage)<this.nbpage) ? Math.round(this.nbpage)+1 : Math.round(this.nbpage);
		this.pagination();
	},
	pagination:function(){
		if(this.nbpage<=1 || isNaN(this.nbpage)){
			if($(this.paginationdiv))
				$(this.paginationdiv).update("<li>&nbsp;</li>");
		}else{
			var html 		= '';
			var prev 		= (this.page==0) ? 0 : this.page-1;
			var next 		= ((this.page+1)==this.nbpage) ? this.nbpage-1 : this.page+1;
			var classprev 	= (this.page==0) ? 'class="disabled"' : '';
			var classnext 	= ((this.page+1)==this.nbpage) ? 'class="disabled"' : '';
				
			
			html = '<li id="pagination_previous" '+classprev+'><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+prev+');" title="'+this.label_previous+'">'+this.label_previous+'</a></li>';
			var firstPage 	= 1;
			var endPage		= this.nbpage;
			html+=(this.page == (firstPage-1)) ? '<li class="current"><span>'+firstPage+'</span></li>' : '<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+(firstPage-1)+');">'+firstPage+'</a></span></li>';
			if(this.page<=3){
				for(t=1;t<this.nbpage-1;t++){
					if(t<5)
						html+=(this.page == t) ? '<li class="current"><span>'+(t+1)+'</span></li>' : '<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+t+');">'+(t+1)+'</a></span></li>';
				}
				html+='<li class="truncate">...</li>';
				html+='<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+(endPage-1)+');">'+(endPage)+'</a></span></li>';
			}else if(this.page>3 && this.page<this.nbpage-4){
				html+='<li class="truncate">...</li>';
	 			var t	= this.page;
	 			var tp	= t-1;
	 			var tn	= t+1;
	 			html+='<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+(tp)+');">'+(tp+1)+'</a></span></li>';
	 			html+='<li class="current"><span>'+(t+1)+'</span></li>'
				html+='<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+(tn)+');">'+(tn+1)+'</a></span></li>';
				html+='<li class="truncate">...</li>';
				html+='<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+(endPage-1)+');">'+(endPage)+'</a></span></li>';
			}else if(this.page>=this.nbpage-4){
				html+='<li class="truncate">...</li>';
	 			for(t=this.nbpage-4;t<this.nbpage;t++){
					html+=(this.page == t) ? '<li class="current"><span>'+(t+1)+'</span></li>' : '<li><span><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+t+');">'+(t+1)+'</a></span></li>';
				}
			}
			html+='<li id="pagination_next" '+classnext+'><a href="javascript:void(0);" onclick="'+this.n+'.setPage('+next+');" title="'+this.label_next+'">'+this.label_next+'</a></li>';
			if($(this.paginationdiv))
				$(this.paginationdiv).update(html);
		}
	},
	setQueryParams:function(v){ this.queryparams= v ; },
	setNbpage:function(v){ this.nbpage = v; },
	setNbItems:function(v){ this.nbitems = v; },
	setParams:function(o){ this.params = o; },
	setPage:function(p){
		this.page=p;
		this.pagination();
		if(this.url)
			this.updateContent();
		if(this.callBackSetPage)
			this.callBackSetPage();
	},
	updateContent:function(){
		this.params.start = this.page;
		this.params.limit = this.itembypage;
		new Ajax.Request(
			this.url+this.queryparams,{
				parameters:this.params,
				method: 'get',
				onSuccess:this.displaycontent.bind(this)
			}
		);	
	},
	displaycontent:function(e){
		if(this.evalresult && this.evalresult==true){
			var tool = eval(e.responseText)[0];
			$(this.updatediv).update(tool.items);
			this.setNbItems(tool.total);
			this.updateNbPage();
			if(this.page>0 && tool.count==0){
				this.setPage(this.page-1);
			}
			
		}else{
			$(this.updatediv).update(e.responseText);
		}
	}	
}