$.fn.dataTableExt.oPagination.fullnumber2 = {
		/*
		 * Function: oPagination.four_button.fnInit
		 * Purpose:  Initalise dom elements required for pagination with a list of the pages
		 * Returns:  -
		 * Inputs:   object:oSettings - dataTables settings object
		 *           node:nPaging - the DIV which contains this pagination control
		 *           function:fnCallbackDraw - draw function which must be called on update
		 */
		"fnInit": function ( oSettings, nPaging, fnCallbackDraw )
		{
	
			var nFirst=document.createElement("li");
			var nPrevious=document.createElement("li");
			var nList=document.createElement("ul");
			var nNext=document.createElement("li");
			var nLast=document.createElement("li");
						
//			nFirst.innerHTML=oSettings.oLanguage.oPaginate.sFirst;
//			nPrevious.innerHTML=oSettings.oLanguage.oPaginate.sPrevious;
//			nNext.innerHTML=oSettings.oLanguage.oPaginate.sNext;
//			nLast.innerHTML=oSettings.oLanguage.oPaginate.sLast;
//			
			nFirst.innerHTML="";
			nPrevious.innerHTML="";
			nNext.innerHTML="";
			nLast.innerHTML="";
			
			var oClasses=oSettings.oClasses;
			nFirst.className=oClasses.sPageButton+" "+oClasses.sPageFirst;
			nPrevious.className=oClasses.sPageButton+" "+oClasses.sPagePrevious;
			nNext.className=oClasses.sPageButton+" "+oClasses.sPageNext;
			nLast.className=oClasses.sPageButton+" "+oClasses.sPageLast;
			
//			nPaging.appendChild(nFirst);
//			nPaging.appendChild(nPrevious);
			nPaging.appendChild(nList);
//			nPaging.appendChild(nNext);
//			nPaging.appendChild(nLast); 
			$(nFirst).click(function(){
								oSettings.oApi._fnPageChange(oSettings,"first");
								fnCallbackDraw(oSettings)});
			$(nLast).click(function(){
								oSettings.oApi._fnPageChange(oSettings,"last");
								fnCallbackDraw(oSettings)});
							
			$(nPrevious).click(function(){
								oSettings.oApi._fnPageChange(oSettings,"previous");
								fnCallbackDraw(oSettings)});
			$(nNext).click(function(){
								oSettings.oApi._fnPageChange(oSettings,"next");
								fnCallbackDraw(oSettings)});
			
			$("ul",nPaging).bind("mousedown",function(){
												return false
				}).bind("selectstart",function(){return false});
			
			if(oSettings.sTableId!==""&&typeof oSettings.aanFeatures.p=="undefined"){
				nPaging.setAttribute("id",oSettings.sTableId+"_paginate");
				nFirst.setAttribute("id",oSettings.sTableId+"_first");
				nPrevious.setAttribute("id",oSettings.sTableId+"_previous");
				nNext.setAttribute("id",oSettings.sTableId+"_next");
				nLast.setAttribute("id",oSettings.sTableId+"_last")
			}
		},
		
		/*
		 * Function: oPagination.four_button.fnUpdate
		 * Purpose:  Update the list of page buttons shows
		 * Returns:  -
		 * Inputs:   object:oSettings - dataTables settings object
		 *           function:fnCallbackDraw - draw function which must be called on update
		 */
		"fnUpdate": function ( oSettings, fnCallbackDraw )
		{
			
			if(!oSettings.aanFeatures.p){
				return
			}
			
			var _oExt=$.fn.dataTableExt;
			var iPageCount=_oExt.oPagination.iFullNumbersShowPages;
			var iPageCountHalf=Math.floor(iPageCount/2);
			var iPages=Math.ceil((oSettings.fnRecordsDisplay())/oSettings._iDisplayLength);
			
//			alert('oSettings.fnRecordsDisplay() = ' + oSettings.fnRecordsDisplay());
			
			var iCurrentPage=Math.ceil(oSettings._iDisplayStart/oSettings._iDisplayLength)+1;
			var sList="";
			var iStartButton,iEndButton,i,iLen;
			var oClasses=oSettings.oClasses;
			if(iPages<iPageCount){
				iStartButton=1;
				iEndButton=iPages
			}
			else{
				if(iCurrentPage<=iPageCountHalf){
					iStartButton=1;iEndButton=iPageCount
				}else{
					if(iCurrentPage>=(iPages-iPageCountHalf)){
						iStartButton=iPages-iPageCount+1;
						iEndButton=iPages
					}else{
						iStartButton=iCurrentPage-Math.ceil(iPageCount/2)+1;
						iEndButton=iStartButton+iPageCount-1
					}
				}
			}
					
			
			sFirstPage = '';
			if(iStartButton != 1 ) {
				sFirstPage = '<li class="'+oClasses.sPageButton+'"><div>1</div></li><li class="' + oClasses.sPagePrevious + ' ' + oClasses.sPageButton + ' ' + oSettings.sTableId + '_previous"><div>&lt;</div></li>';
			}	
				
				
				
			sLastPage = '';
			if(iEndButton != iPages ) {
				sLastPage = '<li class="' + oClasses.sPageNext + ' ' + oClasses.sPageButton + ' ' + oSettings.sTableId + '_next"><div>&gt;</div></li><li class="' + oClasses.sPageButton + ' ' + oSettings.sTableId + '_last"><div>'+iPages+'</div></li>';
			}
			
					
			
			for(i=iStartButton;i<=iEndButton;i++){
				if(iCurrentPage!=i){
					sList+='<li class="'+oClasses.sPageButton+'"><div>'+i+"</div></li>"
				}else{
					sList+='<li class="'+oClasses.sPageButtonActive+'"><div>'+i+"</div></li>"
					}
				}
						
				var an=oSettings.aanFeatures.p;
				var anButtons,anStatic,nPaginateList;
				
				var fnClick = function(){	
								
								if($(this).attr("id") != oSettings.sTableId + '_next' && $(this).attr("id") != oSettings.sTableId + '_previous' && !$(this).hasClass(oSettings.sTableId + '_previous') && !$(this).hasClass(oSettings.sTableId + '_next')) {
									var iTarget=($(this).children("div").html()*1)-1;
									oSettings._iDisplayStart=iTarget*oSettings._iDisplayLength;
								}									
								else {
									if($(this).attr("id") == oSettings.sTableId + '_next' || $(this).hasClass(oSettings.sTableId + '_next')) {
										oSettings.oApi._fnPageChange(oSettings,"next");
									}
									
									if($(this).attr("id") == oSettings.sTableId + '_previous' || $(this).hasClass(oSettings.sTableId + '_previous')) {
										oSettings.oApi._fnPageChange(oSettings,"previous");
									}
								}
								fnCallbackDraw(oSettings);
								return false
							 };
				
				var fnFalse = function(){
								return false
							};
									
				for(i=0,iLen=an.length;i<iLen;i++){
					if(an[i].childNodes.length===0){ continue }
										
					nPaginateList=an[i].childNodes[0];
					nPaginateList.innerHTML=sFirstPage + sList + sLastPage;
					
					$("li",nPaginateList).click(fnClick).bind("mousedown",fnFalse).bind("selectstart",fnFalse);
					
					anButtons=an[i].getElementsByTagName("li");
					
					if(anButtons.length > 1) {
					
						anStatic=[anButtons[0],anButtons[1],anButtons[anButtons.length-2],anButtons[anButtons.length-1]];
						$(anStatic).removeClass(oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled);
						if(iCurrentPage==1){
							anStatic[0].className+=" "+oClasses.sPageButtonStaticDisabled+" "+oClasses.sPageButtonActive;
							anStatic[1].className+=" "+oClasses.sPageButtonStaticDisabled;
						} else {
							anStatic[0].className+=" "+oClasses.sPageButton+" pagernextlast";
							anStatic[1].className+=" "+oClasses.sPageButton
							
							if(iCurrentPage==2){
								anStatic[1].className+=" "+oClasses.sPageButtonActive;
							}
							
						}
						if(iCurrentPage==iPages||oSettings._iDisplayLength==-1){
							anStatic[2].className+=" "+oClasses.sPageButtonStaticDisabled;
							anStatic[3].className+=" "+oClasses.sPageButtonStaticDisabled+" "+oClasses.sPageButtonActive;
						} else {
							anStatic[2].className+=" "+oClasses.sPageButton;
							anStatic[3].className+=" "+oClasses.sPageButton+" pagernextlast"
							
							if(iCurrentPage==iPages-1){
								anStatic[2].className+=" "+oClasses.sPageButtonActive;
							}
						}
					}
				}
		}
	};


