Highlight = Class.create();

Highlight.prototype = {    
    initialize: function(element) {        
        element = $(element);
        element.__highlight = this;
        this.element = element;
        Event.observe(element, 'mouseover',
            this.handleMouseOver.bindAsEventListener(this)
        );            
        Event.observe(element, 'mouseout',
            this.handleMouseOut.bindAsEventListener(this)
        );          
        element.style.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity=100)"
          
    },
    
    replaceClass: function(element, enabled) {
        var newStyle = (enabled) ? 'on' : 'off';
        var oldStyle = (enabled) ? 'off' : 'on';
        
        element.className = element.className.replace(
            oldStyle,
            newStyle);
    },
    
    replaceSource : function(element, enabled) {
        var newSuffix = (enabled) ? 'on' : 'off';
        var oldSuffix = (enabled) ? 'off' : 'on';
        element.src = element.src.replace(
            oldSuffix,
            newSuffix);   
    },
    
    freeze : function() {
        this.frozen = true;
    },
    
    unfreeze : function() {
        this.frozen = false;
    },
    
    handleMouseOver : function(event) {
        this.setEnabled(true);
    },
    
    handleMouseOut : function(event) {
        this.setEnabled(false);
    },    
    
    changeOpacity: function(enabled) {
        if (enabled) {
            opacity = 0.5;
        } else {
            opacity = 1.0;
        }
        this.element.style.opacity = opacity;
        if (this.element.filters) {
            this.element.filters.item("DXImageTransform.Microsoft.Alpha").opacity= opacity * 100;
        }
    },
    
    setEnabled : function(enabled) {
        if (this.frozen) {
            return;
        }
        if (this.element.tagName == 'IMG' || this.element.tagName == 'INPUT') {
            this.changeOpacity(enabled);
        } else {
            $A(this.element.getElementsByTagName('SPAN')).each(
                function(element) {
                    if ($(element)) {
                        this.replaceClass($(element), enabled);
                    }
                }.bind(this)
            );
            $A(this.element.getElementsByTagName('IMG')).each(
                function(element) {
                    if ($(element)) {
                        this.replaceSource($(element), enabled);
                    }
                }.bind(this)
            );
        }
        
    }        
};

Highlight.enable = function(element) {
	if (typeof(element) == 'string') {
    	element = document.getElementById(element);
	}
    if (element && !element.__highlight) {
        new Highlight(element);
    }
}

Highlight.enableButton = function(element) {
    if (Highlight.buttonsEnabled) {
        Highlight.enable(element);            
    }    
}
Highlight.enableButtons = function() {
    if (Highlight.buttonsEnabled) {
        $$('input.button').each(
            function(element) {
                Highlight.enable($(element));
            }
        );
        $$('img.button').each(
            function(element) {
                Highlight.enable($(element));
            }
        );
    }
}

Element.addMethods({
    stopClickPropagation: function (element) {
        Event.observe(
            element,
            'click',
            function(event) {
                var link = Event.element(event);                                    
                if (event.preventDefault) {
                    event.stopPropagation(); /* Gecko */
                } else {
                    event.cancelBubble = true; /* Trident */
                }                                    
            }
        );     
    }
}
);


