    //ToDo: make positioned layer to fit in wiewport
    var oManager = {
        dom: null,
        domElId: 'over',
        mouseX: 0,
        mouseY: 0,
        offset: 10,
        
        MouseMoveHandler: function(e){
            e = e || window.event;
            
            if (e.pageX)
                oManager.mouseX = e.pageX;
            else if(e.clientX)
                oManager.mouseX = e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft);
            else 
                oManager.mouseX = 0;
            
            if (e.pageY)
                oManager.mouseY = e.pageY;
            else if (e.clientY)
                oManager.mouseY = e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop);
            else
                oManager.mouseY = 0;
        },
        init: function(){
            jQuery(document.body).append(
                "<div class='overlay' id='"+this.domElId+"' style='position: absolute; background: transparent'></div>"
            );
            this.dom = jQuery('#'+this.domElId).get(0);
        },
        _wBox: function(){
            var yWithScroll = 0, xWithScroll = 0;
            if (window.innerHeight && window.scrollMaxY) {// Firefox
                yWithScroll = window.innerHeight + window.scrollMaxY;
                xWithScroll = window.innerWidth + window.scrollMaxX;
            } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
                yWithScroll = document.body.scrollHeight;
                xWithScroll = document.body.scrollWidth;
            } else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
                yWithScroll = document.body.offsetHeight;
                xWithScroll = document.body.offsetWidth;
            }
            return [xWithScroll, yWithScroll];           
        },
        bindEvents: function(){
            jQuery(window).bind('mousemove', this.mouseMoveEventListener);
        },
        unbindEvents: function(){
            jQuery(window).unbind('mousemove', this.mouseMoveEventListener);
        },
        mouseMoveEventListener: function(e){
            e = e || window.event;
            oManager.mouseX = e.pageX;
            oManager.mouseY = e.pageY;
            oManager.reposition();
        },
        set: function(content, width){

            width = width || 'auto';
            content = content || '';
            this.bindEvents();
            
            jQuery(this.dom).html(content).css('width', width).show();
            
        },
        stop: function(){
            
            this.unbindEvents();
            jQuery(this.dom).hide();
            
        },
        reposition: function(){
            
            var coordX = this.mouseX, coordY = this.mouseY;
            
            var width = jQuery(this.dom).get(0).clientWidth,
                height = jQuery(this.dom).get(0).clientHeight;
                
            var scrW = this._wBox()[0];
            var scrH = this._wBox()[1];
            
            if (coordX + width + 2*this.offset >= scrW ) 
                coordX -= width + this.offset;
            else 
                coordX += this.offset;
            
            if (coordY + height + 2*this.offset >= scrH ) 
                coordY -= height + this.offset;
            else 
                coordY += this.offset;
            
            jQuery(this.dom).css({
                'left': coordX,
                'top' : coordY
            });
        }
    }
    // aliasing
    var om = oManager;
    om.s = om.set;
    om.d = om.stop;
    
    jQuery(function(){oManager.init()});