var timerlen = 5;
var slideAniLen = 500;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();

function slidedown(mydiv){
  if(moving[mydiv])
    return;
 
  if(document.getElementById(mydiv).style.display != “none”)
    return; // cannot slide down something that is already visible
 
  moving[mydiv] = true;
  dir[mydiv] = “down”;
  startslide(mydiv);
}
 
function slideup(mydiv){
  if(moving[mydiv])
    return;
 
  if(document.getElementById(mydiv).style.display == “none”)
    return; // cannot slide up something that is already hidden
 
  moving[mydiv] = true;
  dir[mydiv] = “up”;
  startslide(mydiv);
}

function startslide(mydiv){
  obj[mydiv] = document.getElementById(mydiv);
 
  endHeight[mydiv] = parseInt(obj[mydiv].style.height);
  startTime[mydiv] = (new Date()).getTime();
 
  if(dir[mydiv] == “down”){
    obj[mydiv].style.height = “1px”;
  }
 
  obj[mydiv].style.display = “block”;
 
  timerID[mydiv] = setInterval(’slidetick(” + mydiv + ”);’,timerlen);
}

function slidetick(mydiv){
  var elapsed = (new Date()).getTime() - startTime[mydiv];
 
  if (elapsed > slideAniLen)
    endSlide(mydiv)
  else {
    var d =Math.round(elapsed / slideAniLen * endHeight[mydiv]);
    if(dir[mydiv] == “up”)
      d = endHeight[mydiv] - d;
 
    obj[mydiv].style.height = d + “px”;
  }
 
  return;
}

function endSlide(mydiv){
  clearInterval(timerID[mydiv]);
 
  if(dir[mydiv] == “up”)
    obj[mydiv].style.display = “none”;
 
  obj[mydiv].style.height = endHeight[mydiv] + “px”;
 
  delete(moving[mydiv]);
  delete(timerID[mydiv]);
  delete(startTime[mydiv]);
  delete(endHeight[mydiv]);
  delete(obj[mydiv]);
  delete(dir[mydiv]);
 
  return;
}