nereidFadeObjects = new Object();
nereidFadeTimers = new Object();
nereidFadeObjFFX = new Array();

function nereidFade(object, destOp, rate, delta){
	
	if (!document.all)	return ffx(object, destOp, rate, delta);
	
	if (object != "[object]"){ 
					  setTimeout("nereidFade("+object+","+destOp+","+rate+","+delta+")",0);
					  return;
					 }
	
	clearTimeout(nereidFadeTimers[object.sourceIndex]);

	diff = destOp-object.filters.alpha.opacity;
	direction = 1;
	if (object.filters.alpha.opacity > destOp) direction = -1;

	delta=Math.min(direction*diff,delta);
	object.filters.alpha.opacity+=direction*delta;
	if (object.filters.alpha.opacity != destOp){
					nereidFadeObjects[object.sourceIndex]=object;
					nereidFadeTimers[object.sourceIndex]=setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+")",rate);
					}
}


function ffx(object, destOp, rate, delta){
	
	if (!object){ 
		         setTimeout("ffx("+object+","+destOp+","+rate+","+delta+")",0);
			   return;
			 }
	for (i=0;i<nereidFadeObjFFX.length;i++) if (nereidFadeObjFFX[i]==object.src) break;
	if (i==nereidFadeObjFFX.length) nereidFadeObjFFX.push(object.src);
	
				 
	clearTimeout(nereidFadeTimers[i]);
	
	diff = destOp-object.style.opacity*100;

	direction = 1;
	if (object.style.opacity*100 > destOp) direction = -1;

	delta=Math.min(direction*diff,delta);
	object.style.opacity=parseFloat(object.style.opacity)+(direction*delta)/100;
	
	if (object.style.opacity*100!= destOp){
					nereidFadeObjects[i]=object;
					nereidFadeTimers[i]=setTimeout("ffx(nereidFadeObjects["+i+"],"+destOp+","+rate+","+delta+")",rate);
					}
}