TBTablet = {};
TBTablet.getElementChildNodes = function(p) {
	var ret = [];
	if (!p) return ret;
	for (var i = 0, c = p.childNodes; i < c.length; i++) {
		if (c[i].nodeType == 1)
			ret[ret.length] = c[i];
	}
	return ret;
}
TBTablet.attach = function(container, config) {
	var container = (typeof container == 'string')?document.getElementById(container):container;
	var config = config || {};
	var panels = this.getElementChildNodes(container);
	var tab = panels.shift(0);
	var currClass = config.currentClass || 'current';
	var	tabTriggers = tab.getElementsByTagName('a');
	if (config.tabClass) {
		var filter = [];
		for (var i = 0; i < tabTriggers.length; i++) {
			if (tabTriggers[i].className.indexOf(config.tabClass) != -1)
				filter.push(tabTriggers[i]);
		}
		tabTriggers = filter;
	}
	for (var i = 0; i < panels.length; i++) {
		panels[i].style.display = 'none';
	}
	function $li(o) {
		var p = o.parentNode;
		while (p) {
			if (p.tagName.toLowerCase() == 'li') {
				break;
			}
			p = p.parentNode;
		}
		return p;
	}
	var tbt = {
		switchTab: function(idx) {
			for (var i = 0; i < panels.length; i++) {
				panels[i].style.display = 'none';
			}
			var re = new RegExp('\s*' + currClass, 'i');
			for (var i = 0; i < tabTriggers.length; i++) {
				var tp = $li(tabTriggers[i]);
				tp.className = tp.className.replace(re, '');
			}
			panels[idx].style.display = 'block';
			$li(tabTriggers[idx]).className += ' ' + currClass;
		}
	}

	var et = (config.eventType == 'mouse') ? 'onmouseover' : 'onclick';
	var isDelay = (config.eventType == 'mouse' && config.delay);
	for (var i = 0; i < tabTriggers.length; i++) {
		tabTriggers[i]['onfocus'] = function(idx) {
			var handler = function() {
				if (tbt.delayTimeId) 
					clearTimeout(tbt.delayTimeId);
				tbt.switchTab(idx);
				if (config.onSwitch)
					config.onSwitch(idx);
				return false;
			}
			if (isDelay) {
				tabTriggers[i]['onmouseover'] = function() {
					tbt.delayTimeId = setTimeout(handler, config.delay*1000);
				}
				tabTriggers[i]['onmouseout'] = function() {
					clearTimeout(tbt.delayTimeId);
				}
			} else {
				tabTriggers[i][et] = function(){this.focus(); return false;};
			}
			return handler;
		}(i);
	}
	if (!config.disableAutoSwitchToFirst)
		tbt.switchTab(0);
	return tbt;
}

/*********************************************************************************************************/

TBScrollet = {};
TBScrollet.attach = function(ul, config) {
	var ul = (typeof ul == 'string')?document.getElementById(ul):ul;
	var config = config || {};
	var delay = config.delay||1, speed=config.speed||1, lh = config.lineHeight||1;
	var tid = null, pause = false;
	var tbt = {
		onScroll: function() {
			ul.appendChild(ul.getElementsByTagName('li')[0]);
		},
		slide : function() {
			if (pause) return;
			ul.scrollTop += 2;	//滚动速度步长
			if (ul.scrollTop % lh == 0) {
				clearInterval(tid);
				if (config.onScroll)
					config.onScroll();
				else  
					tbt.onScroll();
				ul.scrollTop = 0;
				setTimeout(start, delay*3500); //停顿时间
			}
		}
	}
	var start = function() {
		if (ul.scrollHeight > ul.offsetHeight) 
			tid=setInterval(tbt.slide, speed);
	}
	ul.onmouseover=function(){pause=true;}
	ul.onmouseout=function(){pause=false;}
	setTimeout(start, (config.startDelay||config.delay)*3000);
	return tbt;
}


