/*
** Fade in/out manager
**
** Developed by Robin Theilade / Alpha Solutions
*/
var ImageFadeInOutManager = {
    initialize: function() {
        this.nodes = new Array();
        setInterval("ImageFadeInOutManager.iteration();", 10);
    },
    register: function(node, min, max) {
        if(!node) {
            throw 'Node is null'
        }
        this.wireEvents(node);
        node.childNodes.item(1).style.display = 'block';
        node.childNodes.item(1).style.opacity = min;
        node.childNodes.item(1).style['filter'] = 'Alpha(opacity=' + (min * 100.0) + ')';
        node.childNodes.item(1).style.height = (node.childNodes.item(1).offsetHeight) + 'px';
        node.childNodes.item(1).style.top = (-(node.childNodes.item(1).offsetHeight)) + 'px';
        this.nodes[this.nodes.length] = { node: node, min: min, max: max, mode: 0 };
    },
    wireEvents: function(node) {
        node.onmouseover = this.handleMouseOver;
        node.onmouseout = this.handleMouseOut;
        for (var index = 0; index < node.childNodes.length; index++) {
            var subnode = node.childNodes.item(index);
            if (subnode.tagName) {
                this.wireEvents(subnode);
            }
        }
    },
    iteration: function() {
        if (!this.nodes) {
            return;
        }
        for (var index = 0; index < this.nodes.length; index++) {
            var nodeInfo = this.nodes[index];
            if (!nodeInfo) {
                continue;
            }
            var opaqueNode = nodeInfo.node.childNodes.item(1);
            var currentOpacity = parseFloat(opaqueNode.style.opacity);
            if (nodeInfo.mode == 1) {
                if (currentOpacity > nodeInfo.min) {
                    opaqueNode.style.opacity = currentOpacity - 0.05;
                    opaqueNode.style['filter'] = 'Alpha(opacity=' + ((currentOpacity - 0.05) * 100.0) + ')';
                }
                else {
                    nodeInfo.mode = 0;
                }
            }
            else if (nodeInfo.mode == -1) {
                if (currentOpacity < nodeInfo.max) {
                    opaqueNode.style.opacity = currentOpacity + 0.05;
                    opaqueNode.style['filter'] = 'Alpha(opacity=' + ((currentOpacity + 0.05) * 100.0) + ')';
                }
                else {
                    nodeInfo.mode = 0;
                }
            }
        }
    },
    handleMouseOver: function(evt) {
        evt = evt || event;
        for (var index = 0; index < ImageFadeInOutManager.nodes.length; index++) {
            target = evt.target || evt.srcElement;
            do {
                if (target == ImageFadeInOutManager.nodes[index].node) {
                    ImageFadeInOutManager.nodes[index].mode = -1;
                    return;
                }
                target = target.parentNode;
            } while (target);
        }
    },
    handleMouseOut: function(evt) {
        evt = evt || event;
        for (var index = 0; index < ImageFadeInOutManager.nodes.length; index++) {
            target = evt.target || evt.srcElement;
            do {
                if (target == ImageFadeInOutManager.nodes[index].node) {
                    ImageFadeInOutManager.nodes[index].mode = 1;
                    return;
                }
                target = target.parentNode;
            } while (target);
        }
    }
}
