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();
var downAgain = new Array();

function ShowDebug(s) {
	document.getElementById('debug').innerHTML += '<BR>' + s;
}

/*
Display dropdown at once
*/

var height_ids = new Array();
var height_values = new Array();

function ShowMenu( id, show ) {
	var dropdown = document.getElementById( id );
	if ( show ) {
		dropdown.style.visibility = 'visible';
	} else {
		dropdown.style.visibility = 'hidden';
	}
}
function RollOpen( id, show ) {
	var dropdown = document.getElementById( id );
	if ( show ) {
		var index = -1;
		for ( i = 0; i < height_ids.length; i++ ) {
			if ( height_ids[ i ] == id ) {
				index = i;
			}
		}
		if ( index == -1 ) {
			height_ids[height_ids.length] = id;
			height_values[height_values.length] = dropdown.offsetHeight;
			index = height_ids.length - 1;
		}
		var h = height_values[ index ];
		dropdown.style.height = 2;
		dropdown.style.visibility = 'visible';
		SetDivHeight( dropdown.id, 12, h );
	} else {
		var h = dropdown.offsetHeight;
		dropdown.style.visibility = 'hidden';
	}
}
function SetDivHeight( divid, height, maxheight ) {
	document.getElementById( 'debug' ).innerHTML += '<br>called: SetDivHeight( ' + divid + ', ' + height + ', ' + maxheight + ' )';
	height++;
	if ( height < maxheight ) {
		var div = document.getElementById( divid );
		if ( div ) {
			div.style.height = height;
			var s = 'SetDivHeight( ' + div.id + ', ' + height + ', ' + maxheight + ' )';
			setTimeout( s, 10 );
		} else {
			document.getElementById( 'debug' ).innerHTML += '<br>DIV ' + divid + ' NOT FOUND!';
		}
	}
}


/*
Display dropdown with sliding effect
*/

function slideswitch(objname) {
	if(moving[objname])
		return;
	var visible = ( document.getElementById(objname).style.visibility == "visible" );
	if ( visible ) {
		slideup(objname);
	} else {
		slidedown(objname);
	}
}

function prepareslideup(objname) {
	downAgain[objname] = false;
	setTimeout('slideup(\'' + objname + '\')', 100 );
}

function slidedown(objname){
	downAgain[objname] = true;
       // if(moving[objname])
                //return;

		var displaynone = ( document.getElementById(objname).style.display == "none" );
		var invisible = ( document.getElementById(objname).style.visibility == "hidden" );
        if ( ! ( displaynone || invisible ) ) {
                return; // cannot slide down something that is already visible
		}

        moving[objname] = true;
        dir[objname] = "down";
        startslide(objname);
}

function slideup(objname){
        if(moving[objname])
                return;

		if ( downAgain[objname] )
		{
			return;
		}

        //if(document.getElementById(objname).style.display == "none")
        //        return; // cannot slide up something that is already hidden

		var displaynone = ( document.getElementById(objname).style.display == "none" );
		var invisible = ( document.getElementById(objname).style.visibility == "hidden" );
        if ( displaynone || invisible ) {
                return; // cannot slide up something that is already visible
		}

        moving[objname] = true;
        dir[objname] = "up";
        startslide(objname);
}

function startslide(objname){
        obj[objname] = document.getElementById(objname);

        //endHeight[objname] = parseInt(obj[objname].style.height);
		if (endHeight[objname] == null)
		{
        endHeight[objname] = parseInt(obj[objname].offsetHeight);
		} else {
		}
        startTime[objname] = (new Date()).getTime();

        if(dir[objname] == "down"){
                obj[objname].style.height = "1px";
        }

        //obj[objname].style.display = "block";
        obj[objname].style.visibility = "visible";

        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.visibility = "hidden";
                //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;
}