var ToolTip = {
    toolTipElem: null,
    
    show: function(e, elemId) {
        var target      = ( e.target ) ? e.target : e.srcElement;
        var toolTipElem = document.getElementById(elemId);
        
        if( e.type == 'mouseover' )
        {
            target.onmousemove = ToolTip.move;
        }
        
        ToolTip.setPosition(e, toolTipElem);
        toolTipElem.style.display = 'block';
        toolTipElem.displayed     = true;
        target.toolTipElem = toolTipElem;
    },
    
    hide: function(e) {
        var target = ( e.target ) ? e.target : e.srcElement;
        var toElem = ( e.relatedTarget ) ? e.relatedTarget : e.toElement;
        
        if( arguments.length > 1 )
        {
            var elemId = arguments[1];
            var toolTipElem = document.getElementById(elemId);
            var test = false;
            
            if( toolTipElem != null && toolTipElem != toElem )
            {// toElem != null rajouté ŕ cause d'IE 5.01 (??)
                while( toElem != null && toElem.nodeType != 9 )
                {
                    if( toolTipElem == toElem )
                    {
                        test = true;
                        break;
                    }
                    
                    toElem = toElem.parentNode;
                }
                
                if( test == false )
                {
                    toolTipElem.style.display = 'none';
                }
            }
        }
        else if( typeof(target.toolTipElem) != 'undefined' && target.toolTipElem.displayed == true && toolTipElem != toElem )
        {
            target.toolTipElem.style.display = 'none';
            target.toolTipElem.displayed = false;
            target.onmousemove = null;
        }
    },
    
    move: function(e) {
        if( !e ) e = window.event;
        var target = ( e.target ) ? e.target : e.srcElement;
        
        if( target.toolTipElem.displayed == false )
        {
            return;
        }
        
        ToolTip.setPosition(e, target.toolTipElem);
    },
    
    setPosition: function(e, toolTipElem) {
        var posX = 0, posY = 0;
        
        if( typeof(e.pageX) != 'undefined' )
        {
            posX = e.pageX;
            posY = e.pageY;
        }
        else
        {
            if( typeof(document.documentElement) != 'undefined' 
                && (document.documentElement.scrollLeft != 0 || document.documentElement.scrollTop != 0 ) )
            {
                posX = (e.clientX + document.documentElement.scrollLeft);
                posY = (e.clientY + document.documentElement.scrollTop);
            }
            else
            {
                posX = (e.clientX + document.body.scrollLeft);
                posY = (e.clientY + document.body.scrollTop);
            }
        }
        
        var computedWidth = 30;
        var ecart = -15;
        if( e.type != 'click' )
        {
            if( typeof(window.getComputedStyle) != 'undefined' )
            {
                computedWidth = window.getComputedStyle(toolTipElem, null).getPropertyValue('width');
            }
            else
            {
                computedWidth = toolTipElem.offsetWidth;
            }
            
            computedWidth = (parseInt(computedWidth)/2);
            ecart = 28;
        }
        
        toolTipElem.style.left = (posX - computedWidth) + 'px';
        toolTipElem.style.top  = (posY + ecart) + 'px';
    }
};



