var nInc = 5; // ms timer increment for motion
var nDurSlide = 600; // ms duration of slide
var viTimer = new Array();
var vnStart = new Array();
var voDiv = new Array();
var vHt = new Array();
var vyMoving = new Array();
var vyDown = new Array();
// two main externally called functions
function SlideDown(oID){
	if(vyMoving[oID]) return;
	if(document.getElementById(oID).style.display != "none") return;
	vyMoving[oID] = true;
	vyDown[oID] = true;
	StartSlide(oID);
}
function SlideUp(oID){
	if(vyMoving[oID]) return;
	if(document.getElementById(oID).style.display == "none") return;
	vyMoving[oID] = true;
	vyDown[oID] = false;
	StartSlide(oID);
}
// internal functions
function StartSlide(oID){
	voDiv[oID] = document.getElementById(oID);
	vHt[oID] = parseInt(voDiv[oID].style.height);
	vnStart[oID] = (new Date()).getTime();
	if(vyDown[oID]) {voDiv[oID].style.height = "1px";}
	voDiv[oID].style.display = "block";
	viTimer[oID] = setInterval('SlideTick(\'' + oID + '\');',nInc);
}

function SlideTick(oID){
	var nDurElapsed = (new Date()).getTime() - vnStart[oID];
	if (nDurElapsed > nDurSlide) {EndSlide(oID)}
	else {
		var d =Math.round(nDurElapsed / nDurSlide * vHt[oID]);
		if (!vyDown[oID])  d = vHt[oID] - d;
		voDiv[oID].style.height = d + "px";
	}
	return;
}

function EndSlide(oID){
	clearInterval(viTimer[oID]);
	if(!vyDown[oID]) voDiv[oID].style.display = "none";
	voDiv[oID].style.height = vHt[oID] + "px";
	delete(vyMoving[oID]);
	delete(viTimer[oID]);
	delete(vnStart[oID]);
	delete(vHt[oID]);
	delete(voDiv[oID]);
	delete(vyDown[oID]);
	DeployNext();
	return;
}