var tb_className = 'tbtitle';
var tb_parent_className = 'box';
var tb_class_open = 'open';
var tb_class_closed = 'closed';
var tb_class_defaultopen = 'defopen';
var tb_icon_open = 'img/icons/arrow_in.gif';
var tb_icon_closed = 'img/icons/arrow_out.gif';
var tb_fx_enabled = true;
var tb_fx_speed = 10;
var tb_fx_step = 20;
var tb_fx_limit = 200;

function addLoadEvent(func) {
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		var oldonload = window.onload;
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

addLoadEvent(tb_init);

function findclass(classes, cn){
	for (var i = 0; i < classes.length; i ++)
		if (classes[i] == cn) return i;
	return -1;
}
function hasclass(node, cn){
	var classes = node.className;
	if (classes != '') {
		classes = classes.split(' ');
		return findclass(classes, cn) > -1;
	}
	return false;
}
function delclass(node, cn){
	var classes = node.className;
	if (classes != '') {
		classes = classes.split(' ');
		var i = findclass(classes, cn);
		if (i > -1) {
			node.className = classes.slice(0, i).join(' ') + ' ' + classes.slice(i + 1).join(' ');
			return true;
		}
	}
	return false;
}
function addclass(node, cn){
	var classes = node.className;
	if (classes != '') {
		classes = classes.split(' ');
		if (findclass(classes, cn) > -1) {
			return false;
		}
		classes.push(cn);
		cn = classes.join(' ');
	}
	node.className = cn;
	return true;
}
function replaceclass(node, oldCN, newCN){
	delclass(node, oldCN);
	addclass(node, newCN);
}

function tb_init(){
	var tbs = document.getElementsByTagName('div');
	for (var i = 0; i < tbs.length; i ++) {
		if (hasclass(tbs[i],tb_className)) {
			tbs_init2(tbs[i]);
		}
	}
}

function tbs_init2(tb){
	var parent = tb.parentNode;
	if (!parent) return;

	var defopen = hasclass(tb, tb_class_defaultopen);
	if (defopen) delclass(tb, tb_class_defaultopen);

	// prepare tb
	tb.onclick = tb_toggle;
	var img = document.createElement('img');
	img.src = defopen ? tb_icon_open : tb_icon_closed;
	tb.insertBefore(document.createTextNode(" "), tb.firstChild);
	tb.insertBefore(img, tb.firstChild);

	// move contents
	var div = document.createElement('div');
	for (var i = parent.childNodes.length - 1; i >= 0 ; i --)
		div.insertBefore(parent.childNodes[i], div.firstChild);
	div.className = defopen ? tb_class_open : tb_class_closed;

	// ensure parent is empty
	parent.innerHTML = '';

	// append box and contents
	parent.appendChild(tb);
	parent.appendChild(div);
	return;
}

function tb_toggle(e){
	if (!e) var e = window.event;
	if (e.target) div = e.target;
	else div = e.srcElement;

	div.blur();

	var box = div.nextSibling;
	if (!box) return;

	if (!hasclass(box, tb_class_open)) tb_open(box);
	else tb_close(box);
}

function tb_open(div, h, step){
	if (!tb_fx_enabled) {
		replaceclass(div, tb_class_closed, tb_class_open);
		return;
	}
	if (!h || !step) {
		replaceclass(div, tb_class_closed, tb_class_open);

		h = div.offsetHeight;
		if (h / tb_fx_step * tb_fx_speed > tb_fx_limit)
			step = Math.round(h / tb_fx_limit * tb_fx_speed);
		else step = tb_fx_step;

		div.style.height = '0px';
		div.style.overflow = 'hidden';

		if (document.all) div.style.filter = 'Alpha(opacity=0)';
		else div.style.opacity = '0';
	}

	var newH = parseInt(div.style.height) + step;

	if (newH < h) {
		div.style.height = newH+'px';

		if (document.all) div.style.filter = 'Alpha(opacity='+Math.round(newH / h * 100)+')';
		else div.style.opacity = newH / h;

		window.setTimeout(function (){ tb_open(div,h,step); }, tb_fx_speed);
	}
	else {
		var img = div.previousSibling.firstChild;
		img.src = tb_icon_open;

		div.style.height = '';
		div.style.overflow = '';

		if (document.all) div.style.filter = 'Alpha(opacity=100)';
		else div.style.opacity = 1;
	}
}

function tb_close(div, h, step){
	if (!tb_fx_enabled) {
		replaceclass(div, tb_class_open, tb_class_closed);
		return;
	}
	if (!h || !step) {
		h = div.offsetHeight;
		if (h / tb_fx_step * tb_fx_speed > tb_fx_limit)
			step = Math.round(h / tb_fx_limit * tb_fx_speed);
		else step = tb_fx_step;

		div.style.height = h + 'px';
		div.style.overflow = 'hidden';
	}

	newH = parseInt(div.style.height) - step;

	if (newH > 0) {
		div.style.height = newH+'px';

		if (document.all) div.style.filter = 'Alpha(opacity='+Math.round(newH / h * 100)+')';
		else div.style.opacity = newH / h;

		window.setTimeout(function (){ tb_close(div,h,step); }, tb_fx_speed);
	}
	else {
		var img = div.previousSibling.firstChild;
		img.src = tb_icon_closed;

		div.style.height = '';
		div.style.overflow = '';

		replaceclass(div, tb_class_open, tb_class_closed);
	}
}