﻿var ToolTippObj = new Object();
(function($){
    var _open=false,
        eId = "_tt_"+Number(Date.parse(new Date())).toString(16)+"_tt_",
        elem = null,
        txtElem = null,
        pos = null,
        offset = { x:-5,y:22 };
    
    $.over=function(obj,ev){
        if(_open) $._close();
        if(typeof obj == "string") obj = document.getElementById(obj) || false;
        if(obj && obj.getElementsByTagName("div")){
            obj.onmousemove=function(ev){
                pos = $._getMousePos(ev);
                $._repositionLayer();
            };
            var txt = obj.getElementsByTagName("div")[0].innerHTML;
            $._open(txt);
            pos = $._getMousePos(ev);
            $._repositionLayer();
        }
    };
    $.out=function(obj,e){
        if(typeof obj == "string") obj = document.getElementById(obj) || false;
        if(obj && obj.getElementsByTagName("div")){
            $._close();
        }                
    };
    
    $._repositionLayer=function(){
        if(elem && pos != null && pos.x){
            var bodyDim = $._getDocumentDim();
            var elemDim = $._getElemDim(elem);
                        
            if(bodyDim.w && elemDim.w){
                elem.style.top = (pos.y+offset.y)+"px";
                if(pos.x >= bodyDim.w/2)
                {
                    elem.style.left = (pos.x-elemDim.w-offset.x)+"px";
                }
                else 
                {
                    elem.style.left = (pos.x+(offset.x*-1))+"px";
                }
            } else {
                elem.style.top = (pos.y+offset.y)+"px";
                elem.style.left = (pos.x+offset.x)+"px";
            }
        }
    };
    
    $._getMousePos=function(event){
        event = event || window.event;
        var e = {
                    x: (event.pageX || event.clientX + (document.documentElement || document.body).scrollLeft),
                    y: (event.pageY || event.clientY + (document.documentElement || document.body).scrollTop)
                };
        return e;
    };
    
    $._getElemDim=function(elem){
        var e = {
                    w:((document.layers)?elem.document.width:elem.offsetWidth),
                    h:((document.layers)?elem.document.height:elem.offsetHeight)
                };
        return e;
    };
    
    $._getDocumentDim=function(){
        var e={
                w:((window.innerWidth || window.innerHeight)?window.innerWidth:((document.body.clientWidth || document.body.clientHeight)?document.body.clientWidth:false)),
                h:((window.innerWidth || window.innerHeight)?window.innerHeight:((document.body.clientWidth || document.body.clientHeight)?document.body.clientHeight:false))
              };
        return e;
    };
    
    $._open=function(text){
        text = text.replace(/^\s+/g, '').replace(/\s+$/g, ''); // required for FF bug
        if(text.length > 0){
            if(elem != null){
                txtElem.innerHTML = text;
                elem.style.display="block";
            } else {
                elem = document.createElement("div");
                elem.id = eId;
                elem.style.position="absolute";
                elem.style.zIndex=9999;
                elem.className="ToolTipp_";
                txtElem = document.createElement("div");
                txtElem.className="txt";
                txtElem.innerHTML = text;
                elem.appendChild(txtElem);
                document.body.appendChild(elem); 
            }
        }
        _open=true;
    };
    $._close=function(){
        if(elem!=null){
            elem.style.display="none";
        }else if(document.getElementById(eId)){
            elem = document.getElementById(eId);
            elem.style.display="none";
        }
        _open=false;
    };
})(ToolTippObj);