var slideAniLen = 250;
var slideTimer = new Array();
var slideStartTime = new Array();
var slideObj = new Array();
var slideEndHeight = new Array();
var slideMoving = new Array();
var slideDir = new Array();

function slidedown(o,nr){
        if(slideMoving[nr]) return;
        if(o.style.display != "none") return; // cannot slide down something that is already visible

        slideMoving[nr] = true;
        slideDir[nr] = "down";
		slideObj[nr] = o;
        startslide(nr);
}

function slideup(o,nr){
        if(slideMoving[nr]) return;
        if(o.style.display == "none") return; // cannot slide up something that is already hidden

        slideMoving[nr] = true;
        slideDir[nr] = "up";
		slideObj[nr] = o;
        startslide(nr);
}

function startslide(nr){
		slideObj[nr].style.display = "block";
        slideEndHeight[nr] = slideObj[nr].offsetHeight;
		slideObj[nr].style.display = "none";
        slideStartTime[nr] = (new Date()).getTime();

        if(slideDir[nr] == "down") slideObj[nr].style.height = "1px";
        slideObj[nr].style.display = "block";
        slideTimer[nr] = setInterval("slidetick("+nr+")",10);
}

function slidetick(nr){
        var elapsed = (new Date()).getTime() - slideStartTime[nr];

        if (elapsed > slideAniLen) {
                endSlide(nr)
        } else {
                var d =Math.round(elapsed / slideAniLen * slideEndHeight[nr]);
                if(slideDir[nr] == "up") d = slideEndHeight[nr] - d;
                slideObj[nr].style.height = d + "px";
        }
        return;
}

function endSlide(nr){
        clearInterval(slideTimer[nr]);

        if(slideDir[nr] == "up") slideObj[nr].style.display = "none";
        slideObj[nr].style.height = "auto";

        delete(slideMoving[nr]);
        delete(slideTimer[nr]);
        delete(slideStartTime[nr]);
        delete(slideEndHeight[nr]);
        delete(slideObj[nr]);
        delete(slideDir[nr]);
        return;
}