
var Tooltip = {
    elements: {},
    create: function(element_id, title, message, options) {
            if (this.elements[element_id]) {
                this.destroy(element_id);
            }
            this.elements[element_id] = {   id:         element_id,
                                            title:      title,
                                            message:    message,
                                            options:    options,
                                            bOver:      null,
                                            bOut:       null,
                                            tooltip:    null,
                                            enabled:    true    };
            this.elements[element_id].bOver = this.show.bindAsEventListener(this, element_id);
            this.elements[element_id].bOut = this.hide.bindAsEventListener(this, element_id);
            Event.observe(element_id, 'mouseover', this.elements[element_id].bOver);
            Event.observe(element_id, 'mouseout', this.elements[element_id].bOut);   
        },
    destroy: function(element_id) {
            Event.stopObserving(element_id, 'mouseover', this.elements[element_id].bOver);
            Event.stopObserving(element_id, 'mouseout', this.elements[element_id].bOut);
        },
    show: function(event, element_id) {
            if (this.elements[element_id].enabled) {
                if (!this.elements[element_id].tooltip) {
                    this.elements[element_id].tooltip = Element.extend(document.createElement('div')).hide().addClassName('tooltip').setStyle({position:'absolute'});
                    document.getElementsByTagName("body").item(0).appendChild(this.elements[element_id].tooltip);    
                
                }
                
                this.elements[element_id].tooltip.innerHTML = '';
                
                new Insertion.Top(this.elements[element_id].tooltip, '<h1>' + this.elements[element_id].title + '</h1>');
                new Insertion.Bottom(this.elements[element_id].tooltip, '<p>' + this.elements[element_id].message + '</p>');
                this.fadeIn(element_id);
                
                if (!this.elements[element_id].options.mouseSpacing) {
                    mouseSpacing = [0, 20];
                } else {
                    mouseSpacing = this.elements[element_id].options.mouseSpacing;
                }
                innerPadding = [25 + mouseSpacing[0], 25 + mouseSpacing[1]];
                
                innerDim = crossBrowser_innerDimensions();
                
                x = Event.pointerX(event) + mouseSpacing[0];
                y = Event.pointerY(event) + mouseSpacing[1];
                
                w = this.elements[element_id].tooltip.getWidth();
                
                if (this.elements[element_id].options.minWidth && w < this.elements[element_id].options.minWidth) {
                    w = this.elements[element_id].options.minWidth;
                }
                
                if (x + w + innerPadding[0] > innerDim[0]) {
                    x = innerDim[0] - w - innerPadding[0];
                }
                //if (y+this.elements[element_id].tooltip.getHeight()+innerPadding > innerDim[1]) {
                //    y = innerDim[1]-this.elements[element_id].tooltip.getHeight()-innerPadding;
                //}
                
                this.elements[element_id].tooltip.setStyle({left: x + 'px', top: y + 'px'});
                
                 
            }
        },
    fadeIn: function(element_id) {
            if (this.elements[element_id].tooltip.getStyle('display') == 'none' ||
                this.elements[element_id].tooltip.getOpacity() < 0.01) {
                
                Effect.Appear(this.elements[element_id].tooltip, { duration: 0.3 });
            } else {
                window.setTimeout('Tooltip.fadeIn(\'' + element_id + '\')', 10);
            }
        },
    hide: function(event, element_id) {
            this.fadeOut(element_id);
        },
    fadeOut: function(element_id) {
            if (this.elements[element_id].tooltip.getOpacity() > 0.99) {
                Effect.Fade(this.elements[element_id].tooltip, { duration: 0.3 });
            } else {
                window.setTimeout('Tooltip.fadeOut(\'' + element_id + '\')', 10);
            }
        },
    disable: function(element_id) {
        this.elements[element_id].enabled = false;
        },
    enable: function(element_id) {
        this.elements[element_id].enabled = true;    
        }

}