
C.Pager = Class.create();

/**
 * config properties
 *  - start
 *  - end
 *  - targetEl
 *  - callbackFn
 *  - rendererFn
 *  - current
 *  - maxContinuousPages
 *  - renderOnClick
 */
C.Pager.prototype = {
	
	
	initialize : function( config )
	{
		this.renderOnClick = true;
			
		Object.extend(this,config);
		

		
	},
	
	
	render : function()
	{
		var leftRange;
		var rightRange;
		var showFirst = false;
		var showLast = false;		
		
		// if there are more pages than the pager will allow for 
		// maxContinuousPages, we need to figure out if we need to 
		// create a start / end page
		if ( this.end - this.start > this.maxContinuousPages )
		{
			var rangeSides = Math.floor(this.maxContinuousPages / 2);
			var leftExtra = 0;
			var rightExtra = 0;

			


			var leftRange = this.current - rangeSides 
			if ( leftRange < 1 )
			{
				rightExtra = Math.abs(leftRange+1);				
				leftRange = 1;
			} 
			
//			console.log(leftRange, this.current, rangeSides);
			
			
			var rightRange = this.current + rangeSides 
			if ( rightRange > this.end )
			{
//				console.log(324342);
				leftExtra = rightRange - this.end;				
				rightRange = this.end;
			} 

			leftRange -= leftExtra;
			rightRange += rightExtra;
			
			if ( leftRange != 1  ) showFirst = true;
			if ( rightRange != this.end   ) showLast = true;

//			console.log(rangeSides);			
//			console.log('left',leftRange,'right',rightRange, 'max', this.end);
//			console.log(showFirst,showLast);
		}
		else
		{
			leftRange = 1;
			rightRange = this.end;
		}
		

		
		if (!this.renderedEl) 
		{
			this.renderedEl = new Element('div');
			this.renderedEl.observe('click',this.onPageChange.bind(this));
			$(this.targetEl).insert(this.renderedEl);				
		}
		else 
		{
			this.renderedEl.update("");			
		}

		
		var el = this.renderedEl;
		var self = this;
		
		// create 'prev' link
		// -------------------
		if ( this.current != this.start )
		{
	 		var ln = new Element("a");
		 	//ln.setAttribute("class",'pagerlink');
			ln.addClassName('pagerlink');
		 	ln.setAttribute('page','prev');
		 	//ln.observe('click',this.onPageChange.bindAsEventListener(this,'prev'));
		 	ln.update("&lt; prev");
		 	el.insert(ln);

			if (  showFirst )
			{
				el.insert( this.makePageLink( 1 ) );				
				el.insert( new Element("span").update("...") );
			}
				
			
		}

		var range = $R( leftRange, rightRange );
		
		range.each( function(e){
//			var ln = new Element("a").update(e);
//			ln.addClassName('pagerlink');
///			
//			ln.setAttribute('page',e);
			var ln = self.makePageLink(e);
			if( self.current == e ) ln.addClassName('pagerlink-active');			
			el.insert(ln);
			//ln.observe('click', this.onPageChange.bind(this));
		});
		
		if ( this.current != this.end )
		{
			if ( showLast )
			{
				el.insert( new Element("span").update("...") );
				el.insert( this.makePageLink( this.end ) );
			}
			var ln = this.makePageLink('next');
//		 	var ln = new Element("a");
//		 	ln.setAttribute("class",'pagerlink');
//		 	ln.setAttribute('page','next');
//		 	ln.update("next &gt;");
		 	el.insert(ln);
		}
		
		el.hide();

		


	},
	
	makePageLink : function( pg )
	{
	 	var ln = new Element("a");
	 	ln.addClassName('pagerlink');
	 	ln.setAttribute('page',pg );
		if ( Object.isNumber(pg) ) ln.update(pg);
		else if ( pg == 'next') ln.update("next &gt;");		
		else if ( pg == 'prev') ln.update("&lt; prev");
		return ln;
	},
	
	hide : function()
	{
		if ( this.renderedEl ) 	this.renderedEl.hide();
	},
	
	show : function()
	{
		if ( this.renderedEl ) this.renderedEl.show();
	},
	
	onPageChange : function(evt)
	{
		Event.stop(evt);
		var s = Event.element(evt);
		
		var page = s.getAttribute('page');
		
		if ( page == 'next' ) page = ++this.current;
		else if ( page == 'prev' ) page = --this.current;
		else this.current = parseInt(page);

	//	if (this.renderOnClick) 
//		{
			this.render();
			this.show();
	//	}
//		console.log("EHER", this.current);
		
		if ( this.callbackFn )	this.callbackFn(page);
		

	}
	
	
	
}