rollDownDo     = true; // roll down           (true = yes)
rollDownStep   = 4;    // roll down factor    (higher = slower)
rollDownDelay  = 50;   // delay between steps (higher = slower)

rollUpDo       = true; // roll up             (true = yes)
rollUpStep     = 3;    // roll up factor      (higher = slower)
rollUpDelay    = 50;   // delay between steps (higher = slower)

hideTimerDelay = 250;  // timer for auto roll up (higher = slower)

rollTimer      = new Object();
hideTimer      = new Object();
openMenu       = null;

function rollDown(id)
{
    clearTimeout(rollTimer);
    // build references:
    refObject = document.all[id];
    refStyle  = document.all[id].style;
    
    // calculate new position:
    pos = refObject.offsetTop + Math.round(refObject.offsetHeight/rollDownStep);
    if (pos>0) pos = 0;
    refStyle.top = pos;        

    // repeat until completely visible:
    if (pos<0) rollTimer = setTimeout("rollDown('"+id+"');",rollDownDelay);
}

function rollUp(id)
{
    clearTimeout(rollTimer);
    // build references:
    refObject = document.all[id];
    refStyle  = document.all[id].style;
    
    // calculate new position:
    pos = refObject.offsetTop - Math.round(refObject.offsetHeight/rollUpStep);
    if (pos<(refObject.offsetHeight*-1)) pos = refObject.offsetHeight*-1;
    refStyle.top = pos;        

    // repeat until completely visible:
    if (pos>(refObject.offsetHeight*-1)) rollTimer = setTimeout("rollUp('"+id+"');",rollUpDelay);
    else 
    {
        openMenu = null;
        refStyle.visibility = 'hidden';
    }
}

function showInit(obj)
{
    if (document.all[obj.id + 'menu'].innerHTML)
    {
        clearTimeout(hideTimer);
        
        // build references:
        id = obj.id + 'menu';
        refObject = document.all[id];
        refStyle  = document.all[id].style;
            
        if (openMenu!=id)
        {
            if (openMenu!=null)
            {
                document.all[openMenu].style.top = (document.all[openMenu].offsetHeight * -1);
                document.all[openMenu].style.visibility = 'hidden';
            }
           
            // set initial position:
            refStyle.left = obj.offsetLeft;
            if (rollDownDo) refStyle.top  = refObject.offsetHeight*-1;
            
            // make visible:
            openMenu = id;
            refStyle.visibility = 'visible';
            if (rollDownDo) rollDown(id);
        }
    }
}

function hideInit(id)
{
    // build references:
    refObject = document.all[id];
    refStyle  = document.all[id].style;

    // make hidden:
    if (rollUpDo) rollUp(id);
    else refStyle.visibility = 'hidden';
}

function hideTimerInit(id)
{
    if (document.all[id].innerHTML)
        hideTimer = setTimeout("hideInit('"+id+"');",hideTimerDelay);
}
    
function hideTimerBreak()
{
    clearTimeout(hideTimer);
}