if (typeof document.attachEvent != 'undefined') {
    window.attachEvent('onload', init);
}
else {
    window.addEventListener('load', init, false);
}
var oDv = document.createElement("div");
var dvCot = document.createElement("div");
var boxMove, fixposx, fixposy, lockX, lockY, fixx, fixy, ox, oy, boxLeft, boxRight, boxTop, boxBottom, evt, mouseX, mouseY, totalScrollTop, totalScrollLeft;
ox = 10;
oy = 10;
lockX = 0;
lockY = 0;
function init() {
    if (typeof document.attachEvent != 'undefined') {
        document.attachEvent('onmousemove', moveMouse);
        document.attachEvent('onclick', checkMove);
    }
    else {
        document.addEventListener('mousemove', moveMouse, false);
        document.addEventListener('click', checkMove, false);
    }
    oDv.appendChild(dvCot);
    oDv.style.position = "absolute";
    oDv.style.visibility = 'hidden';
    document.body.appendChild(oDv);    
}
function defCotStyle() {
    dvCot.style.width = '180px';
    dvCot.style.fontFamily = 'arial';
    dvCot.style.border = '1px solid #666666';
    dvCot.style.padding = '5px';
    dvCot.style.fontSize = '12px';
    dvCot.style.lineHeight = '16px';
    dvCot.style.color = '#000';
    dvCot.style.background = '#fffbbe';
    dvCot.style.whiteSpace = "normal";
    dvCot.style.wordBreak = "break-all";
    dvCot.style.overflow = "hidden";
    dvCot.style.filter = 'alpha(opacity=85)';
    dvCot.style.opacity = '0.85';
}
function checkElemBO(txt) {
    if (!txt || typeof (txt) != 'string')
        return false;        
    else
        return true;
}
function scanBO(curNode) {
    if (checkElemBO(curNode.title)) {
        curNode.boCOT = curNode.title;
        curNode.title = '';
        curNode.hasbox = 1;
    }
    else
        curNode.hasbox = 2;
}
function Left(elem) {
    var x = 0;
    if (elem.calcLeft)
        return elem.calcLeft;
    var oElem = elem;
    while (elem) {
        if ((elem.currentStyle) && (!isNaN(parseInt(elem.currentStyle.borderLeftWidth))) && (x != 0))
            x += parseInt(elem.currentStyle.borderLeftWidth);
        x += elem.offsetLeft;
        elem = elem.offsetParent;
    }
    oElem.calcLeft = x;
    return x;
}
function Top(elem) {
    var x = 0;
    if (elem.calcTop)
        return elem.calcTop;
    var oElem = elem;
    while (elem) {
        if ((elem.currentStyle) && (!isNaN(parseInt(elem.currentStyle.borderTopWidth))) && (x != 0))
            x += parseInt(elem.currentStyle.borderTopWidth);
        x += elem.offsetTop;
        elem = elem.offsetParent;
    }
    oElem.calcTop = x;
    return x;
}
var ah;
function applyStyles() {
    if (ah)
        oDv.removeChild(dvCot);
    dvCot = document.createElement("div");
    defCotStyle();
    dvCot.innerHTML = CBE.boCOT;
    ah = false;
    if (CBE.boCOT != '') {
        oDv.appendChild(dvCot);
        ah = true;
    }
}
var CSE, iterElem, LSE, CBE, LBE, totalScrollLeft, totalScrollTop, width, height;
var ini = false;
function SHW() {
    if (document.body && (document.body.clientWidth != 0)) {
        width = document.body.clientWidth;
        height = document.body.clientHeight;
    }
    if (document.documentElement && (document.documentElement.clientWidth != 0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
        width = document.documentElement.clientWidth;
        height = document.documentElement.clientHeight;
    }
    return [width, height];
}
var ID = null;
function moveMouse(e) {
    e ? evt = e : evt = event;
    CSE = evt.target ? evt.target : evt.srcElement;
    if (!CSE.hasbox) {
        iElem = CSE;
        while ((iElem.parentNode) && (!iElem.hasbox)) {
            scanBO(iElem);
            iElem = iElem.parentNode;
        }
    }
    if ((CSE != LSE) && (!isChild(CSE, dvCot))) {
        if (!CSE.boxItem) {
            iterElem = CSE;
            while ((iterElem.hasbox == 2) && (iterElem.parentNode))
                iterElem = iterElem.parentNode;
            CSE.boxItem = iterElem;
        }
        iterElem = CSE.boxItem;
        if (CSE.boxItem && (CSE.boxItem.hasbox == 1)) {
            LBE = CBE;
            CBE = iterElem;
            if (CBE != LBE) {
                applyStyles();
                if (ID != null)
                    clearTimeout(ID);
                COL = 1;
                ID = setTimeout("oDv.style.visibility='visible';ID=null;", 0);
                lockX = 0;
                lockY = 0;
                boxMove = true;
            }
        }
        else if (!isChild(CSE, dvCot) && (boxMove)) {
            if ((!isChild(CBE, CSE)) || (CSE.tagName != 'TABLE')) {
                CBE = null;
                if (ID != null)
                    clearTimeout(ID);
                fadeOut();
            }
        }
        LSE = CSE;
    }
    else if ((isChild(CSE, dvCot) && (boxMove))) {
        totalScrollLeft = 0;
        totalScrollTop = 0;
        iterElem = CSE;
        while (iterElem) {
            if (!isNaN(parseInt(iterElem.scrollTop)))
                totalScrollTop += parseInt(iterElem.scrollTop);
            if (!isNaN(parseInt(iterElem.scrollLeft)))
                totalScrollLeft += parseInt(iterElem.scrollLeft);
            iterElem = iterElem.parentNode;
        }
        if (CBE != null) {
            boxLeft = Left(CBE) - totalScrollLeft;
            boxRight = parseInt(Left(CBE) + CBE.offsetWidth) - totalScrollLeft;
            boxTop = Top(CBE) - totalScrollTop;
            boxBottom = parseInt(Top(CBE) + CBE.offsetHeight) - totalScrollTop;
            doCheck();
        }
    }
    if (boxMove && CBE) {
        bodyScrollTop = document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
        bodyScrollLet = document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
        mouseX = evt.pageX ? evt.pageX - bodyScrollLet : evt.clientX - document.body.clientLeft;
        mouseY = evt.pageY ? evt.pageY - bodyScrollTop : evt.clientY - document.body.clientTop;
        if (CBE) {
            mouseY < -oy ? lockY = -mouseY - oy : lockY = 0;
            mouseX < -ox ? lockX = -mouseX - ox : lockX = 0;
            mouseY > (SHW()[1] - oDv.offsetHeight - oy) ? lockY = -mouseY + SHW()[1] - oDv.offsetHeight - oy : lockY = lockY;
        }
        oDv.style.left = ((fixposx) || (fixposx == 0)) ? fixposx : bodyScrollLet + mouseX + ox + lockX + "px";
        oDv.style.top = ((fixposy) || (fixposy == 0)) ? fixposy : bodyScrollTop + mouseY + oy + lockY + 10 + "px";
    }
}
function doCheck() {
    if ((mouseX < boxLeft) || (mouseX > boxRight) || (mouseY < boxTop) || (mouseY > boxBottom)) {
        CBE = null;
    }
}
var COL = 0;
function fadeOut() {
    oDv.style.visibility = 'hidden';
}
function isChild(s, d) {
    while (s) {
        if (s == d)
            return true;
        s = s.parentNode;
    }
    return false;
}
var cSrc;
function checkMove(e) {
    e ? evt = e : evt = event;
    cSrc = evt.target ? evt.target : evt.srcElement;
    if ((!boxMove) && (!isChild(cSrc, oDv))) {
        fadeOut();
        boxMove = true;
        CBE = null;
    }
}