var subHeight = 95;
var hideShowStep = 25;
var hideShowSpeed = 4;


function hideShow (obj, dest, step, speed) {
	obj = document.getElementById(obj) || obj;
	
	if (dest > 0) {
		obj.style.display = "block";
	}
	
	curHeight = (dest == 0)?subHeight:0;
	
	if (dest == 0) {
		step = -step;
	}

	var intervalId = setInterval(stepOver, speed);

	function stepOver () {
		if (Math.abs((curHeight - dest)) >= Math.abs(step)) {
			obj.style.height = curHeight + step + "px";
			curHeight += step;
		} else {
			clearInterval(intervalId);
			obj.style.height = dest + "px";
			if (dest == 0) {
				obj.style.display = "none";
				if (document.addEventListener) {
					document.getElementById('sub-control-on').addEventListener('mouseover', downFunc, false);
					document.getElementById('sub').removeEventListener('mouseout', upFunc, false);
				} else {
					document.getElementById('sub-control-on').attachEvent('onmouseenter', downFunc);
					document.getElementById('sub').detachEvent('onmouseleave', upFunc);
				}
			} else {
				if (document.addEventListener) {
					document.getElementById('sub-control-on').removeEventListener('mouseover', downFunc, false);
					document.getElementById('sub').addEventListener('mouseout', upFunc, false);
				} else {
					document.getElementById('sub-control-on').detachEvent('onmouseenter', downFunc, false);
					document.getElementById('sub').attachEvent('onmouseleave', upFunc, false);
				}
			}
		}
	}
}

downFunc = function(e) {
	hideShow('sub', subHeight, hideShowStep, hideShowSpeed);
	return false;
}

upFunc = function(e) {
	if (document.addEventListener) {
		var tg = e.target;
		if (tg.nodeName != 'UL') return;
		
		var relTg = e.relatedTarget;
		while (relTg.nodeName != 'BODY') {
			relTg = relTg.parentNode;
			if (relTg == tg) return;
		}
	}

	hideShow('sub', 0, hideShowStep, hideShowSpeed);
	return false;
}

if (document.addEventListener) {
	document.getElementById('sub-control-on').addEventListener('mouseover', downFunc, false);
} else {
	document.getElementById('sub-control-on').attachEvent('onmouseenter', downFunc);
}
