/* "fade.js" */

nereidFadeObjects = new Object();
nereidFadeTimers = new Object();
fakeIndex = 0;

nereidSlideObjects = new Object();
nereidSlideTimers = new Object();

/*
Gradual-Highlight Image Script II-
By J. Mark Birenbaum (birenbau@ugrad.cs.ualberta.ca)
Permission granted to Dynamicdrive.com to feature script in archive
For full source to script, visit http://dynamicdrive.com
-----
This script is modified by Tim Chien (timdream at seed dot net dot tw)
For useable in all browsers
*/

/* object - image to be faded (actual object, not name);
 * destop - destination transparency level (ie 80, for mostly solid)
 * rate   - time in milliseconds between trasparency changes (best under 100)
 * delta  - amount of change each time (ie 5, for 5% change in transparency)
 */

function nereidFade(object, destOp, rate, delta){
    if ((object != "[object]") && (object != "[object HTMLImageElement]") && (object != "[object HTMLDivElement]")) {  //do this so I can take a string too
        setTimeout("nereidFade("+object+","+destOp+","+rate+","+delta+")",0);
        return;
    }

    if (!object.sourceIndex) {  //timdream: for non-IE browsers that doesn't have sourceIndex propertie
        object.sourceIndex = fakeIndex;
        fakeIndex++;
    }

    try {
        opacity = object.filters.alpha.opacity;
    } catch(e) {
        if (object.style.MozOpacity) opacity = object.style.MozOpacity*100;
        else if (object.style.opacity) opacity = object.style.opacity*100;
        else return;
    }

    clearTimeout(nereidFadeTimers[object.sourceIndex]);

    diff = destOp-opacity;
    direction = 1;
    if (opacity > destOp){
        direction = -1;
    }
    delta=Math.min(direction*diff,delta);

    try {
        object.filters.alpha.opacity += direction*delta;
    } catch (e) {
        if (object.style.MozOpacity) object.style.MozOpacity = parseFloat(object.style.MozOpacity) + direction*delta/100;
        else if (object.style.opacity) object.style.opacity = parseFloat(object.style.opacity) + direction*delta/100;;
    }

    if (opacity != destOp){
        nereidFadeObjects[object.sourceIndex]=object;
        nereidFadeTimers[object.sourceIndex]=setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+")",rate);
    }
}

function nereidSlide(object, destHeight, rate, delta){
    clearTimeout(nereidSlideTimers[object.sourceIndex]);

    height = parseInt(object.style.height);

    diff = destHeight-height;
    direction = 1;

    if (height > destHeight){
        direction = -1;
    }

    delta=Math.min(direction*diff,delta);
    height += direction*delta;
    object.style.height = height+'px';

    if (direction == -1) {
    if (height > destHeight){
        nereidSlideObjects[object.sourceIndex]=object;
        nereidSlideTimers[object.sourceIndex]=setTimeout("nereidSlide(nereidSlideObjects["+object.sourceIndex+"],"+destHeight+","+rate+","+delta+")",rate);
        }
    } else {
    if (height < destHeight){
        nereidSlideObjects[object.sourceIndex]=object;
        nereidSlideTimers[object.sourceIndex]=setTimeout("nereidSlide(nereidSlideObjects["+object.sourceIndex+"],"+destHeight+","+rate+","+delta+")",rate);
        }
    }
}
