/* dhLib-opacity-functions */

dhLib_doFadeIN = new Array();	/* bool, indicates whether an element is fading currently */
dhLib_doFadeOUT = new Array();	/* ... */
dhLib_opacities = new Array();	/* current opacities of elements while fading */
dhLib_setInvisibleAfter = new Array();	/* is to be set visible/invisble before/after */

/*
 * functions to be called from outside to have an element faded in or out *
 */
function dhLib_fadeIN(id,startOpacity,delay,step,setVisibleBefore) {
	e = dhLib_getElementById(id);
	if ( e ) {
		if ( dhLib_doFadeIN[id] != true ) {
			if ( setVisibleBefore ) { e.style.visibility = "visible"; }
			dhLib_doFadeIN[id] = true;
			dhLib_doFadeOUT[id] = false;
			dhLib_fadeINStep( id , (dhLib_opacities[id])?dhLib_opacities[id]:0 , delay , step );
		} // end.not fading in already
	} // end.element found
} // end.show

function dhLib_fadeOUT(id,startOpacity,delay,step,setInvisibleAfter) {
	if ( dhLib_getElementById(id) ) {
		if ( dhLib_doFadeOUT[id] != true ) {
			dhLib_setInvisibleAfter[id] = setInvisibleAfter;
			dhLib_doFadeOUT[id] = true;
			dhLib_doFadeIN[id] = false;
			dhLib_fadeOUTStep( id , dhLib_opacities[id] , delay , step );
		} // end.not fading out already
	} // end.element found
} // end.hide





/*
 * fades an element by an id, not called directly as these are the 'loops'
 */
function dhLib_fadeINStep(id,opacity,delay,step) {
	/*debug*/ dhLib_writeDebug("fade","in");
	if ( opacity >= 100 || dhLib_doFadeIN[id]==false ) { 
		if ( opacity >= 100 ) {
			dhLib_setOpacity(id,100);
			dhLib_opacities[id] = 100;		
		} // end.set full opacity
		dhLib_doFadeIN[id] = false;
		return(0); 
	} // end.has full opacity
	e = dhLib_getElementById(id);
	if ( e ) {
		dhLib_setOpacity(id,opacity);
	} // end.element found
	opacity = opacity + step;
	fadeCall = "dhLib_fadeINStep('" + id + "' , " + opacity + " , " + delay + " , " + step + ")";
	eval ( "setTimeout( fadeCall , delay);" );
} // end.fadeIN

function dhLib_fadeOUTStep(id,opacity,delay,step) {
	/*debug*/ dhLib_writeDebug("fade","out");
	if ( opacity <= 0 || dhLib_doFadeOUT[id]==false ) {
		if ( opacity <= 0 ) {
			dhLib_setOpacity(id,0);
		} // end.set no opacity
		dhLib_doFadeOUT[id] = false;
		if ( dhLib_setInvisibleAfter[id] ) {
			document.getElementById(id).style.visibility = "hidden";
		} // end.told to set the element invisible after end of loop
		return(0);  
	} // end.no opacity at all
	e = dhLib_getElementById(id);	
	if ( e ) {
		dhLib_setOpacity(id,opacity);
	} // end.elementFound
	opacity = opacity - step;
	fadeCall = "dhLib_fadeOUTStep('" + id + "' , " + opacity + " , " + delay + " , " + step + ")";
	eval ( "setTimeout( fadeCall , delay);" );
} // end.fadeout
