VERSION 1 - mousemove 사용
/* =========================================================
   VERSION 1
   mousemove 사용
   마우스 커서를 따라가는 Tooltip
   ========================================================= */

scwin.onpageload = function() {

    scwin.initTooltip(
        grpPink.getID(),
        "분홍색 영역입니다.\n마우스를 움직이면 풍선말이 따라옵니다."
    );

    scwin.initTooltip(
        grpLime.getID(),
        "연두색 영역입니다.\n마우스를 움직이면 풍선말이 따라옵니다."
    );

};


scwin.initTooltip = function(targetRealId, tooltipHtml) {

    var targetDom =
        document.getElementById(targetRealId);

    if (!targetDom) {
        return;
    }

    /* 마우스 진입 */
    targetDom.addEventListener("mouseenter", function(e) {

        scwin.showTooltip(
            e,
            tooltipHtml
        );

    });

    /* 마우스 이동 */
    targetDom.addEventListener("mousemove", function(e) {

        scwin.moveTooltip(e);

    });

    /* 마우스 이탈 */
    targetDom.addEventListener("mouseleave", function() {

        scwin.hideTooltip();

    });

};


scwin.showTooltip = function(e, html) {

    var tooltipDom =
        document.getElementById(tooltip.getID());

    var contentDom =
        document.getElementById(tooltipContent.getID());

    if (!tooltipDom || !contentDom) {
        return;
    }

    /* tooltipContent에 내용 삽입 */
    contentDom.innerHTML =
        html.replace(/\n/g, "<br>");

    /* 툴팁 표시 */
    tooltipDom.classList.add("tooltipShow");

    /* 마우스 위치로 이동 */
    scwin.moveTooltip(e);

};


scwin.moveTooltip = function(e) {

    var tooltipDom =
        document.getElementById(tooltip.getID());

    if (!tooltipDom) {
        return;
    }

    var gapX = 15;
    var gapY = 15;

    var left =
        e.clientX + gapX;

    var top =
        e.clientY + gapY;

    tooltipDom.style.left =
        left + "px";

    tooltipDom.style.top =
        top + "px";

};


scwin.hideTooltip = function() {

    var tooltipDom =
        document.getElementById(tooltip.getID());

    if (!tooltipDom) {
        return;
    }

    tooltipDom.classList.remove("tooltipShow");

};
VERSION 2 - mousemove 없음 / 특정 영역 위쪽 고정
/* =========================================================
   VERSION 2
   mousemove 없음
   특정 영역 위쪽에 고정되는 Tooltip
   ========================================================= */

scwin.onpageload = function() {

    scwin.initTooltip(
        grpPink.getID(),
        "분홍색 영역입니다.\n마우스를 움직여도 풍선말은 고정됩니다."
    );

    scwin.initTooltip(
        grpLime.getID(),
        "연두색 영역입니다.\n마우스 아웃 시 자연스럽게 사라집니다."
    );

};


scwin.initTooltip = function(targetRealId, tooltipHtml) {

    var targetDom =
        document.getElementById(targetRealId);

    if (!targetDom) {
        return;
    }

    /* 마우스 진입 */
    targetDom.addEventListener("mouseenter", function() {

        scwin.showTooltip(
            targetDom,
            tooltipHtml
        );

    });

    /* mousemove 없음 */

    /* 마우스 이탈 */
    targetDom.addEventListener("mouseleave", function() {

        scwin.hideTooltip();

    });

};


scwin.showTooltip = function(targetDom, html) {

    var tooltipDom =
        document.getElementById(tooltip.getID());

    var contentDom =
        document.getElementById(tooltipContent.getID());

    if (!tooltipDom || !contentDom) {
        return;
    }

    /* tooltipContent에 내용 삽입 */
    contentDom.innerHTML =
        html.replace(/\n/g, "<br>");

    /* 툴팁 표시 */
    tooltipDom.classList.add("tooltipShow");

    /* 특정 영역 기준으로 위치 설정 */
    scwin.positionTooltip(
        targetDom,
        tooltipDom
    );

};


scwin.positionTooltip = function(targetDom, tooltipDom) {

    var rect =
        targetDom.getBoundingClientRect();

    var gap = 15;

    var tooltipWidth =
        tooltipDom.offsetWidth;

    var tooltipHeight =
        tooltipDom.offsetHeight;

    /* 대상 영역의 가로 중앙 */
    var left =
        rect.left +
        (rect.width - tooltipWidth) / 2;

    /* 대상 영역의 위쪽 */
    var top =
        rect.top -
        tooltipHeight -
        gap;

    tooltipDom.style.left =
        left + "px";

    tooltipDom.style.top =
        top + "px";

};


scwin.hideTooltip = function() {

    var tooltipDom =
        document.getElementById(tooltip.getID());

    if (!tooltipDom) {
        return;
    }

    tooltipDom.classList.remove("tooltipShow");

};