var TINY={};

function T$(i){return document.getElementById(i)}
function T$$(e,p){return p.getElementsByTagName(e)}

TINY.table=function(){
	function sorter(n){this.n=n; this.pagesize=10; this.paginate=0}
	sorter.prototype.init=function(e,f){
		var t=ge(e), i=0; this.e=e; this.l=t.r.length; t.a=[];
		t.h=T$$('thead',T$(e))[0].rows[0]; t.w=t.h.cells.length;
		for(i;i<t.w;i++){
			var c=t.h.cells[i];
			if(c.className!='nosort'){
				c.className=this.head; c.onclick=new Function(this.n+'.wk(this.cellIndex)');				
			}
		}
		for(i=0;i<this.l;i++){t.a[i]={}}
		if(f!=null){var a=new Function(this.n+'.wk('+f+')'); a()}
		if(this.paginate){this.g=1; this.pages()}		
	};	
	sorter.prototype.wk=function(y){
		var t=ge(this.e), x=t.h.cells[y], i=0;
		for(i;i<this.l;i++){
	      t.a[i].o=i; var v=t.r[i].cells[y]; t.r[i].style.display='';
	      while(v.hasChildNodes()){v=v.firstChild}
	      t.a[i].v=v.nodeValue?v.nodeValue:''	      
	    }
		for(i=0;i<t.w;i++){var c=t.h.cells[i]; if(c.className!='nosort'){c.className=this.head}}
		if(t.p==y){t.a.reverse(); x.className=t.d?this.asc:this.desc; t.d=t.d?0:1}
		else{t.p=y; t.a.sort(cp); t.d=0; x.className=this.asc}
		var n=document.createElement('tbody');
		for(i=0;i<this.l;i++){
			var r=t.r[t.a[i].o].cloneNode(true); n.appendChild(r);
			r.className=i%2==0?this.even:this.odd; var cells=T$$('td',r);
			for(var z=0;z<t.w;z++){cells[z].className=y==z?i%2==0?this.evensel:this.oddsel:''}
		}
		t.replaceChild(n,t.b); if(this.paginate){this.size(this.pagesize)}
		if (this.paginate==true){
			mypages="";
			mypages="<a href='javascript:void(0)' style='text-decoration:none;' onClick='sorter.move(-1)' onfocus='if(this.blur)this.blur()'>&lt;</a>&nbsp;&nbsp;";
			for (i=0;i<this.d;i++){
				mypages+="<a href='javascript:void(0)' onClick='sorter.getPage("+(i+1)+")' id='page_"+(i+1)+"' onfocus='if(this.blur)this.blur()'>"+(i+1)+"</a>&nbsp;"
			}
			mypages+="&nbsp;<a href='javascript:void(0)' style='text-decoration:none;' onClick='sorter.move(1)' onfocus='if(this.blur)this.blur()'>&gt;</a>";
			document.getElementById("navigation").innerHTML=mypages; 		
			this.highlightPage(this.g,this.d);		
		}
	};
	sorter.prototype.page=function(s){
		var t=ge(this.e), i=0, l=s+parseInt(this.pagesize);
		if(this.currentid&&this.limitid){T$(this.currentid).innerHTML=this.g}
		for(i;i<this.l;i++){t.r[i].style.display=i>=s&&i<l?'':'none'}		
	};
	sorter.prototype.move=function(d,m){
		var s=d==1?(m?this.d:this.g+1):(m?1:this.g-1);
		if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.pagesize)
		}
		this.highlightPage(this.g,this.d);	 	
	};
	sorter.prototype.size=function(s){
		this.pagesize=s; this.g=1; this.pages(); this.page(0);
		if(this.currentid&&this.limitid){T$(this.limitid).innerHTML=this.d}		
	};
	sorter.prototype.pages=function(){this.d=Math.ceil(this.l/this.pagesize)};
	function ge(e){var t=T$(e); t.b=T$$('tbody',t)[0]; t.r=t.b.rows; return t};
	function cp(f,c){
		var g,h; f=g=f.v.toLowerCase(), c=h=c.v.toLowerCase();
		var i=parseFloat(f.replace(/(\$|\,)/g,'')), n=parseFloat(c.replace(/(\$|\,)/g,''));
		if(!isNaN(i)&&!isNaN(n)){g=i,h=n}
		i=Date.parse(f); n=Date.parse(c);
		if(!isNaN(i)&&!isNaN(n)){g=i; h=n}		
		return g>h?1:(g<h?-1:0)	
	};		
	sorter.prototype.highlightPage=function(actPage,pageAmount){
		for (j=1;j<=pageAmount;j++){
			if (j==actPage){
				document.getElementById("page_"+this.g).style.color="#4095CC";
				document.getElementById("page_"+this.g).style.textDecoration="underline";
			}
			else{
				document.getElementById("page_"+j).style.color="#717274";
				document.getElementById("page_"+j).style.textDecoration="none";
			}		
		}	
	};	
	sorter.prototype.getPage=function(target_page){
		curr_page=this.g;
		last_page=this.d;
		page_gap=target_page-curr_page;
		if (target_page<curr_page){
			page_gap=page_gap*-1;     	
		} 
		for (i=0;i<page_gap;i++){
			if (target_page<curr_page){
				this.move(-1);
			}
			else{
				this.move(1);				
			}
		}
		this.highlightPage(this.g,this.d);			
	};	
	return{sorter:sorter}	
}();