var xtimerlen = 5;
var xslideAniLen = 250;

var xtimerID = new Array();
var xstartTime = new Array();
var xobj = new Array();
var xendHeight = new Array();
var xmoving = new Array();
var xdir = new Array();

function xslidedown(objname){
        if(xmoving[objname])
                return;

        if(document.getElementById(objname).style.display != "none")
                return; // cannot slide down something that is already visible

        xmoving[objname] = true;
        xdir[objname] = "down";
        xstartslide(objname);
}

function xslideup(objname){
        if(xmoving[objname])
                return;

        if(document.getElementById(objname).style.display == "none")
                return; // cannot slide up something that is already hidden

        xmoving[objname] = true;
        xdir[objname] = "up";
        xstartslide(objname);
}

function xstartslide(objname){
        xobj[objname] = document.getElementById(objname);

        xendHeight[objname] = parseInt(xobj[objname].style.height);
        xstartTime[objname] = (new Date()).getTime();

        if(xdir[objname] == "down"){
                xobj[objname].style.height = "1px";
        }

        xobj[objname].style.display = "block";

        xtimerID[objname] = setInterval('xslidetick(\'' + objname + '\');',xtimerlen);
}

function xslidetick(objname){
        var elapsed = (new Date()).getTime() - xstartTime[objname];

        if (elapsed > xslideAniLen)
                xendSlide(objname)
        else {
                var d =Math.round(elapsed / xslideAniLen * xendHeight[objname]);
                if(xdir[objname] == "up")
                        d = xendHeight[objname] - d;

                xobj[objname].style.height = d + "px";
        }

        return;
}

function xendSlide(objname){
        clearInterval(xtimerID[objname]);

        if(xdir[objname] == "up")
                xobj[objname].style.display = "none";

        xobj[objname].style.height = xendHeight[objname] + "px";

        delete(xmoving[objname]);
        delete(xtimerID[objname]);
        delete(xstartTime[objname]);
        delete(xendHeight[objname]);
        delete(xobj[objname]);
        delete(xdir[objname]);

        return;
}

function xtoggleSlide(objname){
  if(document.getElementById(objname).style.display == "none"){
    // div is hidden, so let's slide down
    xslidedown(objname);
  }else{
    // div is not hidden, so slide up
    xslideup(objname);
  }
}