if (document.all) {
   fadeObjects = new Object();
   fadeTimes   = new Object();
}

function fadeOver(object, destOp, rate, delta, rollTo) {
   if (!document.all) {
      if (rollTo != null) {
         rollover(object, rollTo); // if only 4 parameters, is considered null
      }
      return;
   }

   if (object != "[object]") { // so string can also be taken
      setTimeout("fadeOver("+object+","+destOp+","+rate+","+delta+",'"+rollTo+"')",0);
      return;
   }

   clearTimeout(fadeTimes[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){
      fadeObjects[object.sourceIndex]=object;
      fadeTimes[object.sourceIndex]=setTimeout("fadeOver(fadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+",'"+rollTo+"')",rate);
   }
}