function doctab(tab,body){
	var lis = (typeof tab==='string'?document.getElementById(tab):tab).getElementsByTagName('li');
	var children = (typeof body==='string'?document.getElementById(body):body).childNodes;
	var cts = [];
	for( var i=0;i<children.length;i++ ){
		if( children[i].tagName && children[i].tagName.toLowerCase()==='div' )
			cts.push( children[i] );
	}
	if( lis.length != cts.length ) throw new Error('doctab encounter different number error.');
	var f = null;
	for( var i=0;i<lis.length;i++ ){
		lis[i].index = i;
		f = lis[i].onmouseover = function(){
			var j = this.index || 0;
			lis[j].className = (j==lis.length-1)?'selected last':'selected';
			lis[j].style.zIndex = 10;
			cts[j].style.display = 'block';
			for( var i=0;i<j;i++ ){
				lis[i].className = '';
				lis[i].style.zIndex = 10-(j-i);
				cts[i].style.display = 'none';
			}i++;
			for( ;i<lis.length;i++ ){
				lis[i].className = (j==i-1)?'last':'';
				lis[i].style.zIndex = 10-(i-j);
				cts[i].style.display = 'none';
			}
		}
	}
	if (f) f();
}

function doctabs( tabClass, tabTagName, bodyClass, bodyTagName ){
	var alltabs = document.getElementsByTagName(tabTagName||"*"); 
	var tabs = new Array(); 
	for(var e=0,x=0;e<alltabs.length;e++) { 
		if((alltabs[e].className==tabClass)) { 
			tabs[x++]=alltabs[e]; 
		} 
	} 
	var allbodies = document.getElementsByTagName(bodyTagName||"*"); 
	var bodies = new Array(); 
	for(var e=0,x=0;e<allbodies.length;e++) { 
		if((allbodies[e].className==bodyClass)) { 
			bodies[x++]=allbodies[e]; 
		} 
	} 
	for( var i=0;i<tabs.length;i++ ){
		doctab( tabs[i], bodies[i] );
	}
}

function autoScroll( boxClass, boxTagName, scrollerTagName, unitTagName, itvl ){
	var allboxes = document.getElementsByTagName(boxTagName||"*");
	var boxes = new Array(); 
	for(var e=0,x=0;e<allboxes.length;e++) { 
		if((allboxes[e].className==boxClass)) { 
			boxes[x++]=allboxes[e]; 
		} 
	}
	var scroller = boxes[0].getElementsByTagName(scrollerTagName)[0];
	var units = boxes[0].getElementsByTagName(unitTagName);
	if( !units || !units.length ) return;
	
	var unit = units[0];
	var copyunit = document.createElement( unitTagName );
	copyunit.innerHTML = unit.innerHTML;
	scroller.appendChild( copyunit );
	
	var x = 0;
	var x1 = 0;
	var toId = 0;
	var subCycle = 0;
	var t = 0;
	var r = function(){
		if( t>=units.length-1 ){
			scroller.style.top = '0px';
			t=0;
		}
	}
	var f = function(){
		if( subCycle <=20 ){
			scroller.style.top = (x1 - subCycle*(x1-x)/20)+'px';
			toId = setTimeout( f, 20 );
			subCycle ++;
		}else{
			subCycle = 0;
			r();
		}
	}
	
	var isover = false;
	var _itvl = setInterval( function(){
		if( isover ) return;
		t++; 
		var _top = 0;
		for( var i=0;i<t-1;i++ ){ _top += units[i].offsetHeight }
		x1 = -_top;
		x = -(_top + units[i].offsetHeight);
		
		clearTimeout( toId );
		f();
	}, itvl );
	
	scroller.onmouseover = function(){
		isover = true;
	}
	scroller.onmouseout = function(){
		isover = false;
	}
}
