/** Pagination Class - Written By Tim Fisher (C)2008 Indiepath Ltd
*/
var paginate = function(parameters){


	this.total_results 	= parameters['total_results'];
	this.limit	 		= parameters['limit'];
	this.sort_field 	= parameters['sort_field']||"";
	this.page 			= parameters['page'];
	this.adjacents 		= parameters['adjacents']||3;
	this.callback		= parameters['callback'];
	this.passThru		= parameters['passthru']||"";

}

paginate.prototype = {

	initialise: function(){ 
		if (this.page == 0) {	
			this.page = 1;	
		}
		var counter 	= 0;
		var prev		= parseInt(this.page) - 1;
		var next		= parseInt(this.page) + 1;
		var lastpage	= Math.ceil(this.total_results / this.limit);
		var lpm1		= lastpage - 1;
		var	pagination	= "";
		
		
		
		if( lastpage > 1 ){
			pagination += "<div class='pagination'>";
			//Add previous button
			if (this.page > 1){
				pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+prev+", '"+this.passThru+"');\">&laquo; prev</a>";
			} else {
				pagination += "<span class='disabled'>&laquo; prev</span>";
			}
			//Create list of pages
			if (lastpage < 7 + (this.adjacents * 2)) { 
				//Not enough pages to break up
				for (counter = 1; counter <= lastpage; counter++){
					if (counter == this.page){
						pagination += "<span class='current'>"+counter+"</span>";
					} else {
						pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+counter+", '"+this.passThru+"');\">"+counter+"</a>";
					}
				}			
			} else if (lastpage > 5 + (this.adjacents * 2)) {
				// There are enough pages to hide some
				// Are we near the start of the pages? If so only hide later ones.
				if (this.page < 1 + (this.adjacents * 2)) {
					for (counter = 1; counter < 4 + (this.adjacents * 2); counter++){
						if (counter == this.page){
							pagination += "<span class='current'>"+counter+"</span>";
						} else {
							pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+counter+", '"+this.passThru+"');\">"+counter+"</a>";
						}
					}
					pagination += "...";
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+lpm1+", '"+this.passThru+"');\">"+lpm1+"</a>";
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+lastpage+", '"+this.passThru+"');\">"+lastpage+"</a>";
				} else if (lastpage - (this.adjacents * 2) > this.page && this.page > (this.adjacents * 2)){
					// Must be in the middle so hide some from front and end
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', 1, '"+this.passThru+"');\">1</a>";
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', 2, '"+this.passThru+"');\">2</a>";
					pagination += "...";
					for (counter = this.page - this.adjacents; counter <= this.page + this.adjacents; counter++){
						if (counter == this.page){
							pagination += "<span class='current'>"+counter+"</span>";
						} else {
							pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+counter+", '"+this.passThru+"');\">"+counter+"</a>";
						}
					}
					pagination += "...";
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+lpm1+", '"+this.passThru+"');\">"+lpm1+"</a>";
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+lastpage+", '"+this.passThru+"');\">"+lastpage+"</a>";
				} else {
					// We are close to the end so only hide early pages
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', 1, '"+this.passThru+"');\">1</a>";
					pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', 2, '"+this.passThru+"');\">2</a>";
					pagination += "...";
					for (counter = lastpage - (2 + (this.adjacents * 2)); counter <= lastpage; counter++){
						if (counter == this.page){
							pagination += "<span class='current'>"+counter+"</span>";
						} else {
							pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+counter+", '"+this.passThru+"');\">"+counter+"</a>";
						}
					}
				}
			}
			// Next Button
			if (this.page < counter - 1){
				pagination += "<a href='javascript://' onclick=\""+this.callback+"('"+this.sort_field+"', "+next+", '"+this.passThru+"');\">Next &raquo;</a>";
			} else {
				pagination += "<span class='disabled'>Next &raquo</span>";
			}
			pagination += "</div>\n";
			return pagination;
		}
		return "";
	}
}
