
data=new Array();
var sorted=false;
var data,rows,cols;
window.onload=parsetable;
function parsetable(){
	var heads=false;
	var HTML=document.body.innerHTML
	var tableArr=HTML.split(/<table>.*<\/table>/i)
	if (tableArr.length<1){alert("no tables found");return}
	var table=tableArr[0]
	rows=table.split(/<tr>/i).length-1
	var TDorHD=/<t[hd][^>]*>/i
	var endTHD=/<\/t[hd][^>]*>/i
	if (table.match(TDorHD)){
		var tp=table.split(TDorHD)
		for (var i in tp) data.push(tp[i].split(endTHD)[0])
		data.shift()
		if (table.match(/<th[^>]*>/i)) heads=true
		buildtable(data,rows,heads)
	}
	else alert("no data in table")
}

function sortcol(key){
	var A=new Array(rows-1)
	var Temp=new Array(rows-1)
	var Order=new Array(rows-1)
	for (var i=1;i<rows;i++){
		var cell=document.getElementById("C"+(i*cols+key)).innerHTML;
		A[i-1]=Temp[i-1]=cell;
	}
	A.sort()
	for (var i=1;i<rows;i++){
		document.getElementById("C"+(i*cols+key)).innerHTML=A[i-1]
		for (var j=1;j<rows;j++){ if (Temp[j-1]==A[i-1]) Order[j-1]=i-1}
	}
	sorted=true;
	return Order;
}
function sortall(key,O){
	//alert(key+":"+O)
	for (var j=0;j<cols;j++){
		for (var i=1;i<rows;i++){
			document.getElementById("C"+((O[i-1]+1)*cols+j)).innerHTML=data[i*(cols)+j]
		}
		for(var i=1;i<rows;i++){
			data[i*(cols)+j]=document.getElementById("C"+(i*cols+j)).innerHTML
		}
	}
}
function restoresort(key){
	for (i=1;i<rows;i++){
		document.getElementById("C"+(i*cols+key)).innerHTML=data[i*(cols)+key]
	}
	return false
}

function others(n){
	var color=cellcolor
	if(window.event.type=="mouseover"){color=cellover}
	for (var i=1;i<rows;i++){
		document.getElementById("C"+(i*cols+n%cols)).style.background=color;
	}
}
function resting(){
	sorted=false
}
function FindMainColor(b){
	a=b.split("")
	a.shift();
	CV=new Array()
	for (var i=0;i<6;i++) if (i%2==1) CV.push(parseInt(a[i-1]+a[i],16))
	for (i in CV) if (CV[i]>=Math.max(CV[(i+1)%3],CV[(i+2)%3])) mx=i
	//alert("dominant color is "+mx+":"+CV[mx])
	return mx
}

function buildtable(data,rows,h){
	var BC=FindMainColor(document.bgColor);
	headcolor=headover=cellcolor=cellover="#"
	for (j=0;j<3;j++){
		if (j==BC) {
			headcolor+='f0'
			headover+='f8'
			cellcolor+='FF'
			cellover+='ff'
		}
		else{
			headcolor+='c0'
			headover+='a0'
			cellcolor+='f0'
			cellover+='e0'
		}
	}
	document.body.onmouseup=resting
	var s="<table border=1 align=center><tr>"
	cols=Math.floor(data.length/rows)
	for (var i=0;i<rows;i++){
		if ((h)&&(i==0)) s+="<tr onmousemove='selection.empty()'>"
		else s+="<tr>"
		for (var j=0;j<cols;j++){
			if ((h)&&(i==0)) {
				s+="<th center>"
				s+="<div id='C"+(j)+"' style=\"background:"+headcolor+"; cursor='hand'\" "
				s+="onmouseover=\"this.style.background=headover; others("+(j)+"); if (sorted)CT=sortcol("+j+")\" "
				s+="onmouseout=\"this.style.background=headcolor; others("+(j)+"); if (sorted)restoresort("+j+");\" "
				s+="onmousedown='CT=sortcol("+j+")' "
				s+="onmouseup='sortall("+j+",CT)'>"
				s+=data[j]+"</div></th>"
			}
			else {
				s+="<td center><div id='C"+(i*(cols)+j)+"'>"+data[(i)*(cols)+j]+"</div></td>"
			}
		}
		s+="</tr>"
	}
	s+="</table>"
	document.body.innerHTML=s;
}
