// 아래의 소스코드는 daum.net 카페의 자바스크립트를 참고하였습니다.
// 회원이름 클릭시 회원정보등을 보여주는 레이어
function insertHead(name, text, evt)
{
    var idx = this.heads.length;
    var row = new SideViewRow(-idx, name, text, evt);
    this.heads[idx] = row;
    return row;
}

function insertTail(name, evt)
{
    var idx = this.tails.length;
    var row = new SideViewRow(idx, name, evt);
    this.tails[idx] = row;
    return row;
}

function SideViewRow(idx, name, onclickEvent)
{
    this.idx = idx;
    this.name = name;
    this.onclickEvent = onclickEvent;
    this.renderRow = renderRow;

    this.isVisible = true;
    this.isDim = false;
}

function renderRow()
{
    if (!this.isVisible)
        return "";

    var str = "<li><span id=\"sideViewRow_"+this.name+"\">"+this.onclickEvent+"</span></li>";
    return str;
}

function showSideView(curObj, mb_id, name, email, homepage)
{
    var sideView = new SideView('sideview', curObj, mb_id, name, email, homepage);
    sideView.showLayer();
}

function SideView(targetObj, curObj, mb_id, name, email, homepage)
{
    this.targetObj = targetObj;
    this.curObj = curObj;
    this.mb_id = mb_id;
    name = name.replace(/…/g,"");
    this.name = name;
    this.email = email;
    this.homepage = homepage;
    this.showLayer = showLayer;
    this.makeNameContextMenus = makeNameContextMenus;
    this.heads = new Array();
    this.insertHead = insertHead;
    this.tails = new Array();
    this.insertTail = insertTail;
    this.getRow = getRow;
    this.hideRow = hideRow;
    this.dimRow = dimRow;

    // 회원이라면 // (비회원의 경우 검색 없음)
    //if (g4_is_member) {
        // 쪽지보내기
        if (mb_id)
            // 불여우 자바스크립트창이 뜨는 오류를 수정
            this.insertTail("memo", '<a href="'+g4_bbs_url+'/memo_form.php?me_recv_mb_id='+mb_id+'" onclick="win_memo(this.href); return false;">쪽지보내기</a>');
        // 메일보내기
        if (email)
            this.insertTail("mail", '<a href="'+g4_bbs_url+'/formmail.php?mb_id='+mb_id+'&name='+encodeURIComponent(name)+'&email='+email+'" onclick="win_email(this.href); return false;">메일보내기</a>');
        // 홈페이지
        if (homepage)
            this.insertTail("homepage", '<a href="'+homepage+'" onclick="win_homepage(this.href); return false;">홈페이지</a>');
        // 자기소개
        if (mb_id)
            this.insertTail("info", '<a href="'+g4_bbs_url+'/profile.php?mb_id='+mb_id+'" onclick="win_profile(this.href); return false;">자기소개</a>');
    //}

    // 게시판테이블 아이디가 넘어왔을 경우
    if (g4_bo_table) {
        if (mb_id) // 회원일 경우 아이디로 검색
            this.insertTail("mb_id", "<a href='"+g4_bbs_url+"/board.php?bo_table="+g4_bo_table+"&sca="+g4_sca+"&sfl=mb_id,1&stx="+mb_id+"'>아이디로 검색</a>");
        else // 비회원일 경우 이름으로 검색
            this.insertTail("name", "<a href='"+g4_bbs_url+"/board.php?bo_table="+g4_bo_table+"&sca="+g4_sca+"&sfl=wr_name,1&stx="+name+"'>이름으로 검색</a>");
    }
    if (mb_id)
        this.insertTail("new", "<a href='"+g4_bbs_url+"/new.php?mb_id="+mb_id+"'>전체게시물</a>");

    // 최고관리자일 경우
    if (g4_is_admin == "super") {
        // 회원정보변경
        if (mb_id)
            this.insertTail("modify", "<a href='"+g4_admin_url+"/member_form.php?w=u&mb_id="+mb_id+"' target='_blank'>회원정보변경</a>");
        // 포인트내역
        if (mb_id)
            this.insertTail("point", "<a href='"+g4_admin_url+"/point_list.php?sfl=mb_id&stx="+mb_id+"' target='_blank'>포인트내역</a>");
    }
}

function showLayer()
{
    clickAreaCheck = true;
    var oSideViewLayer = document.getElementById(this.targetObj);
    var oBody = document.body;
    var curObjParent = this.curObj.parentNode;

    if (oSideViewLayer == null) {
        oSideViewLayer = document.createElement("div");
        oSideViewLayer.id = this.targetObj;
        //oSideViewLayer.style.position = "absolute";
        //oBody.appendChild(oSideViewLayer);
    }

    curObjParent.appendChild(oSideViewLayer);

    oSideViewLayer.innerHTML = this.makeNameContextMenus();

    /*

    if (getAbsoluteTop(this.curObj) + this.curObj.offsetHeight + oSideViewLayer.scrollHeight + 5 > oBody.scrollHeight)
        oSideViewLayer.style.top = getAbsoluteTop(this.curObj) - getAbsoluteTop(this.curObj.offsetParent) - oSideViewLayer.scrollHeight + "px";
    else
        oSideViewLayer.style.top = getAbsoluteTop(this.curObj) - getAbsoluteTop(this.curObj.offsetParent) + this.curObj.offsetHeight + "px";

    oSideViewLayer.style.left = getAbsoluteLeft(this.curObj) - getAbsoluteLeft(this.curObj.offsetParent) - this.curObj.offsetWidth + 65 + "px";

    */

    divDisplay(this.targetObj, 'block');

    selectBoxHidden(this.targetObj);
}

/*

function getAbsoluteTop(oNode)
{
    var oCurrentNode=oNode;
    var iTop=0;
    while(oCurrentNode.tagName!="body") {
        iTop+=oCurrentNode.offsetTop - oCurrentNode.scrollTop;
        oCurrentNode=oCurrentNode.offsetParent;
    }
    return iTop;
}

function getAbsoluteLeft(oNode)
{
    var oCurrentNode=oNode;
    var iLeft=0;
    iLeft+=oCurrentNode.offsetWidth;
    while(oCurrentNode.tagName!="body") {
        iLeft+=oCurrentNode.offsetLeft;
        oCurrentNode=oCurrentNode.offsetParent;
    }
    return iLeft;
}

*/


function makeNameContextMenus()
{
    var str = "<ul>";

    var i=0;
    for (i=this.heads.length - 1; i >= 0; i--)
        str += this.heads[i].renderRow();

    var j=0;
    for (j=0; j < this.tails.length; j++)
        str += this.tails[j].renderRow();

    str += "</ul>";
    return str;
}

function getRow(name)
{
    var i = 0;
    var row = null;
    for (i=0; i<this.heads.length; ++i)
    {
        row = this.heads[i];
        if (row.name == name) return row;
    }

    for (i=0; i<this.tails.length; ++i)
    {
        row = this.tails[i];
        if (row.name == name) return row;
    }
    return row;
}

function hideRow(name)
{
    var row = this.getRow(name);
    if (row != null)
        row.isVisible = false;
}

function dimRow(name)
{
    var row = this.getRow(name);
    if (row != null)
        row.isDim = true;
}
// Internet Explorer에서 셀렉트박스와 레이어가 겹칠시 레이어가 셀렉트 박스 뒤로 숨는 현상을 해결하는 함수
// 레이어가 셀렉트 박스를 침범하면 셀렉트 박스를 hidden 시킴
// <div id=LayerID style="display:none; position:absolute;" onpropertychange="selectBoxHidden('LayerID')">
function selectBoxHidden(layer_id)
{
    //var ly = eval(layer_id);
    var ly = document.getElementById(layer_id);

    // 레이어 좌표
    var ly_left   = ly.offsetLeft;
    var ly_top    = ly.offsetTop;
    var ly_right  = ly.offsetLeft + ly.offsetWidth;
    var ly_bottom = ly.offsetTop + ly.offsetHeight;

    // 셀렉트박스의 좌표
    var el;

    for (i=0; i<document.forms.length; i++) {
        for (k=0; k<document.forms[i].length; k++) {
            el = document.forms[i].elements[k];
            if (el.type == "select-one") {
                var el_left = el_top = 0;
                var obj = el;
                if (obj.offsetParent) {
                    while (obj.offsetParent) {
                        el_left += obj.offsetLeft;
                        el_top  += obj.offsetTop;
                        obj = obj.offsetParent;
                    }
                }
                el_left   += el.clientLeft;
                el_top    += el.clientTop;
                el_right  = el_left + el.clientWidth;
                el_bottom = el_top + el.clientHeight;

                // 좌표를 따져 레이어가 셀렉트 박스를 침범했으면 셀렉트 박스를 hidden 시킴
                if ( (el_left >= ly_left && el_top >= ly_top && el_left <= ly_right && el_top <= ly_bottom) ||
                     (el_right >= ly_left && el_right <= ly_right && el_top >= ly_top && el_top <= ly_bottom) ||
                     (el_left >= ly_left && el_bottom >= ly_top && el_right <= ly_right && el_bottom <= ly_bottom) ||
                     (el_left >= ly_left && el_left <= ly_right && el_bottom >= ly_top && el_bottom <= ly_bottom) ||
                     (el_top <= ly_bottom && el_left <= ly_left && el_right >= ly_right)
                    )
                    el.style.visibility = 'hidden';
            }
        }
    }
}

// 감추어진 셀렉트 박스를 모두 보이게 함
function selectBoxVisible()
{
    for (i=0; i<document.forms.length; i++)
    {
        for (k=0; k<document.forms[i].length; k++)
        {
            el = document.forms[i].elements[k];
            if (el.type == "select-one" && el.style.visibility == 'hidden')
                el.style.visibility = 'visible';
        }
    }
}


function getAbsoluteTop(oNode)
{
    var oCurrentNode=oNode;
    var iTop=0;
    while(oCurrentNode.tagName!="BODY") {
        iTop+=oCurrentNode.offsetTop - oCurrentNode.scrollTop;
        oCurrentNode=oCurrentNode.offsetParent;
    }
    return iTop;
}


function getAbsoluteLeft(oNode)
{
    var oCurrentNode=oNode;
    var iLeft=0;
    iLeft+=oCurrentNode.offsetWidth;
    while(oCurrentNode.tagName!="BODY") {
        iLeft+=oCurrentNode.offsetLeft;
        oCurrentNode=oCurrentNode.offsetParent;
    }
    return iLeft;
}

function divDisplay(id, act)
{
    selectBoxVisible();

    document.getElementById(id).style.display = act;
}

function hideSideView()
{
    if (document.getElementById("sideview"))
        divDisplay ("sideview", 'none');
}

var clickAreaCheck = false;
document.onclick = function()
{
    if (!clickAreaCheck)
        hideSideView();
    else
        clickAreaCheck = false;
}