var currElem;
var leaveElem;
var timerId;
var debug = false;

function output(msg) {
	if (debug) {
		ts = new Date();
		debugElem = document.getElementById('debug');
		debugElem.value = ts.getSeconds() + ': ' + msg + '\n' + debugElem.value;
	}
}

function leaveNow() {
	if (leaveElem != null) {
		unhighlight(leaveElem);
		hideSub(leaveElem);
		output(leaveElem.id + ' onmouseout');

		if (currElem == leaveElem) {
			currElem = null;
		}
		leaveElem_id = leaveElem.id;
		if (leaveElem_id.indexOf('_') > -1) {
			parent_id = leaveElem_id.substr(0,leaveElem_id.length-3);
			if (currElem == null || currElem.id.indexOf(parent_id) == -1) {
				leaveElem = document.getElementById(parent_id);
				leaveNow();
			}
		}
		leaveElem = null;
	}
	window.clearTimeout(timerId);
}

function setLeave(elem) {
	leaveElem = elem;
	timerId = window.setTimeout('leaveNow()',100);
}

function cancelLeave() {
	window.clearTimeout(timerId);
}

function over(src_id) {
	src = document.getElementById(src_id);
	if (currElem != src) {
		currElem = src;
		showSubFlag = true;
	} else {
		showSubFlag = false;
	}
	if (src == leaveElem) {
		cancelLeave();
	} else if (leaveElem != null && src.id.indexOf(leaveElem.id) > -1) {
		cancelLeave();
	} else {
		leaveNow();
	}
	if (showSubFlag) {
		showSub(src);
		output(src.id + ' onmouseover');
	}
	highlight(src);
}

function out(src_id) {
	src = document.getElementById(src_id);
	setLeave(src);
}

function showSub(parent) {
	parent_id = parent.id
	sub_id = parent_id + '_';
	parentContainer_id = parent_id.substr(0,parent_id.length-2);
	sub = document.getElementById(sub_id);
	parentContainer = document.getElementById(parentContainer_id);
	if (sub != null) {
		workElem = parent;
		vertOffset = 0;
		while (workElem.offsetParent != null) {
			output(workElem.tagName + ' = ' +  workElem.offsetTop);
			vertOffset = vertOffset + workElem.offsetTop;
			workElem = workElem.offsetParent;
		}
		subBottom = vertOffset + sub.offsetHeight;
		winBottom = window.innerHeight?window.innerHeight+window.scrollY:document.body.clientHeight+document.body.scrollTop;
		subTop = subBottom > winBottom?vertOffset-(subBottom-winBottom):vertOffset;
		subTop = subTop < 0?0:subTop;
		sub.style.left = (parent_id.length<5?parentContainer.offsetLeft + parentContainer.offsetWidth:parentContainer.offsetLeft + parentContainer.offsetWidth-1)+3;
		sub.style.top = document.all?subTop-1:subTop;
		toggleFormSelects(false)
		sub.style.visibility = 'visible';
		sub.style.zIndex = 1;
	}
}

function toggleFormSelects(show) {
	sel = document.getElementsByTagName("SELECT");
	for (i=0; i < sel.length; i++) {
		if (show) {
			sel[i].style.visibility = "visible";
		} else {
			sel[i].style.visibility = "visible";
		}
	}
}

function hideSub(parent) {
	sub_id = parent.id + '_';
	sub = document.getElementById(sub_id);
	if (sub != null) {
		sub.style.visibility = 'hidden';
		toggleFormSelects(true)
		sub.style.zIndex = null;
	}
}

function highlight(src) {
	if (src.id.length > 4) {
		src.parentNode.style.backgroundColor = '#999999';
	} else {
		src.style.backgroundColor = '#999999';
	}
}

function unhighlight(src) {
	if (src.id.length > 4) {
		src.parentNode.style.backgroundColor = 'transparent';
	} else {
		src.style.backgroundColor = 'transparent';
	}
}