/*
cgCreate - Pagination Script - Last modified on 2/15/2010
Requirements: Jquery Version 1.1.3.1 or higher.

Call using cgCreate() function.

args:  (con,item,num,nav)
	con: css selector of the element containing items to be grouped into pages
		ex: "ul.container", defaults to "#con" if unspecified
	item -
		def: css selector of elements to be grouped
		ex: "ul.container li", defaults to ".item" if unspecified
	num -
		def: integer, number of items per group/page
		ex: 4, defaults to 10 if unspecified
	nav -
		def: css selector of containing element for navigation controls
		ex: "#nav", creates div with 'cgNav' className inside of the container if unspecified
		
css classes:
.cgHide -> Default property should be{ display:none}
.sel -> Selected page in paging controls

.firstBtn
.prevBtn
.nextBtn
.lastBtn
.pg1, .pg2...
*/
function cgCreate(con,pitem,num,nav)
{	
	if(!con){	var nav = "#con";	}
	if(!pitem){	var nav = ".item";	}
	if(!num || num==0){	var num = 10;	}
	
	//Check to make sure the container exists
	if($(con)[0]){
		if(!nav){$(con).prepend("<div class='cgNav'></div>"); var nav = con+" "+".cgNav"; }
		else{
			$(nav).prepend("<div class='cgNav'></div>"); nav = nav+" .cgNav";
		}

		var group = 1;
		var total= Math.ceil($(con+" "+pitem).length/num);
		
		//update group items with classnames, i.e., organize the groups.
		for(var i=0;i<total;i++){
			for(e=0;e<num;e++){
				if($(con+" "+pitem)[e+(i*num)]){
					$(con+" "+pitem)[e+(i*num)].className+=" pg"+(i+1);
				}
			}
		}
		
		//Create numbered navigation for each page/group.
		$(nav).append("<span class='numbers'></span>");
			
		cg_numbers();	
		cg_Switch(nav);	
	}
	
	function cg_Switch(nav)
	{	
		//keep group within boundaries
		if(group>total){group = total;}
		if(group<1){group=1;}

		//hide all *items except for the ones with the dynamic class
		$(con+" "+pitem).addClass("hide");
		$(con+" .pg"+group).removeClass("hide");
		
		cg_numbers();	
	}
	
	function cg_numbers()
	{
		$(nav+" .prevBtn, "+nav+" .nextBtn, "+nav+" .lastBtn, "+nav+" .nTitle").remove();
		$(nav+" .numbers").html(" ");
		var bP = "<a href='#' class='prevBtn'>&lt;&lt;</a>";
		var bN = "<a href='#' class='nextBtn'>&gt;&gt;</a>";
		var bL = "<a href='#' class='lastBtn'>Last</a>";
		var bF = "<a href='#' class='firstBtn'>First</a>";
		
		
		var nList = new Array();
		
		if(group<3 || total<6){
			for(var i=0;i<total;i++){
				if(i<5){	nList.push(i+1);	}
			}	
			$(nav).append(bN+bL);	
		}else if(group>total-3){
			nList.push(total-4,total-3,total-2,total-1,total);
			$(nav).prepend(bP);
			$(nav).append(bN+bL);
		}else{
			$(nav).prepend(bP);
			$(nav).append(bN+bL);
			nList.push(group-2,group-1,group,Math.ceil(group)+1,Math.ceil(group)+2);
		}
		$(nav).prepend("<span class='nTitle'>Pages </span>");

		cg_genNums(nList);
	}
	
	function cg_genNums(array)
	{	
		var numArray = new Array();
		for(i=0;i<array.length;i++){	
			if(array[i] == group){
				numArray[i] = "<a class='num"+array[i]+" sel' name='"+array[i]+"'>"+array[i]+"</a>";
			}else{
				numArray[i] = "<a href='#' name='"+array[i]+"' class='num"+array[i]+"'>"+array[i]+"</a>";
			}
		}
		
		for(x in numArray){
			$(nav+" .numbers").append(numArray[x]);
			if(x!=(numArray.length-1)){
				$(nav+" .numbers").append("<span>|</span>");
			}
		}
		$(nav+" .numbers a").click(function() { group=$(this).attr('name'); cg_Switch(nav); return false; })
		$(nav+" .firstBtn").click(function() {group=1; cg_Switch(nav); return false; })
		$(nav+" .lastBtn").click(function() {group=total; cg_Switch(nav); return false; })
		$(nav+" .nextBtn").click(function() {group++; cg_Switch(nav); return false; })
		$(nav+" .prevBtn").click(function() {group--; cg_Switch(nav); return false; })	
	}
}
