var timerlen = 5;
var slideAniLen = 250;

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(objname){
        if (moving["subItems" + objname])
                return;

        if (document.getElementById("subItems" + objname).style.display != "none")
                return; // cannot slide down something that is already visible

        moving["subItems" + objname] = true;
        dir["subItems" + objname] = "down";
        startslide("subItems" + objname);
        var expandDiv = $get("expandDiv" + objname);
        expandDiv.innerHTML = "<img src=\"../images/SiteMapTemplateImages/upSiteMapIcon.jpg\" onclick=\"slideup(" + objname + ")\" />";
}

function slideup(objname){
    if (moving["subItems" + objname])
                return;

        if (document.getElementById("subItems" + objname).style.display == "none")
                return; // cannot slide up something that is already hidden

            moving["subItems" + objname] = true;
            dir["subItems" + objname] = "up";
            startslide("subItems" + objname);
        var expandDiv = $get("expandDiv" + objname);
        expandDiv.innerHTML = "<img src=\"../images/SiteMapTemplateImages/downSiteMapIcon.jpg\" onclick=\"slidedown(" + objname + ")\" />";
}

function startslide(objname){
    obj[objname] = document.getElementById(objname);
    var test = obj[objname].style.height
    endHeight[objname] = parseInt(obj[objname].style.height.replace('px',''));
    startTime[objname] = (new Date()).getTime();

    if (dir[objname] == "down") {
        obj[objname].style.height = "1px";
        }

        obj[objname].style.display = "block";

        timerID[objname] = setInterval('slidetick(\'' + objname + '\');', timerlen);
}

function slidetick(objname){
    var elapsed = (new Date()).getTime() - startTime[objname];

        if (elapsed > slideAniLen)
            endSlide(objname)
        else {
            var d = Math.round(elapsed / slideAniLen * endHeight[objname]);
            if (dir[objname] == "up")
                d = endHeight[objname] - d;

            obj[objname].style.height = d + "px";
        }

        return;
}

function endSlide(objname){
    clearInterval(timerID[objname]);

    if (dir[objname] == "up")
            obj[objname].style.display = "none";

        obj[objname].style.height = endHeight[objname] + "px";

        delete (moving[objname]);
        delete (timerID[objname]);
        delete (startTime[objname]);
        delete (endHeight[objname]);
        delete (obj[objname]);
        delete (dir[objname]);

        return;
}
