/**************************************************************
*
* 게시판 목록 관련 Javascript 모음
*
**************************************************************/





/*
 * 게시물 내용보기 화면으로 이동한다.
 * @param messageId : 메시지ID
 * @param messageNumber : 메시지 번호
 */     
function view(messageId,messageNumber) {
    var listForm = nv.$("listForm");
    listForm.messageId.value = messageId;
    listForm.messageNumber.value=messageNumber;
    listForm.action="view.do";
    listForm.submit();
}


    
/*
 * 맨처음 목록으로 이동.
 */     
function first() {
    var listForm = nv.$("listForm");
    listForm.startId.value = 'zzzzzz~';
    listForm.startPage.value=1;
    listForm.curPage.value=1;
    listForm.action="list.do";
    listForm.submit();
}



/*
 * 마지막 페이지 목록으로 이동.
 */ 
function last() {
    var listForm = nv.$("listForm");
    listForm.lastPageFlag.value = true;
    listForm.action="list.do";
    listForm.submit();
}


 
/*
 * 해당 페이지내 이미지들로 슬라이드 팝업 화면을 띄운다.
 */   
function slide(){
    nv.Popup.open("", "slideShow", 550, 585, "no");
    var listForm = nv.$("listForm");
    listForm.target = "slideShow";
    listForm.action = "slide.do";
    listForm.submit();
    listForm.target = "";
}



/*
 * 메모형 게시판에서 메모를 삭제한다.
 * @param messageId : 메시지ID
 * @param authenticateFlag 
 */          
function deleteMemo(messageId, authenticateFlag){
    nv.$("messageId").value = messageId;
    var listForm = nv.$("listForm");
    if(authenticateFlag == "true") {
        listForm.action = "delete.do";
    } else {
        listForm.action = "delete.password.check.do";    
    }    
    listForm.submit();
}



/*
 * 앨범형 이미지로 보기 상세레이어 띄우기
 * @param messageId : 메시지ID
 * @param messageNumber : 메시지 번호 
 * @param imageSrc : 이미지 src
 * @param width : 이미지 width값
 * @param height : 이미지 height값
 * @param title : 게시물 제목
 * @param nickName : 사용자 닉네임
 * @param dateString : 날짜 문자열 
 */
function listDescLayer(messageId, messageNumber, imageSrc, width, height, title, nickName, dateString) {
    var htmlTxt = "";
    var resizeWidth = (width > 450) ? 450 : width;
     
    htmlTxt += "        <div class=\"pic\"><img src=\"" + imageSrc + "&original=true\" onError='defaultImage(this);' ";
    htmlTxt += "             width=\"" + resizeWidth + "\"" ;
    htmlTxt += "              onclick='view(\"" + messageId + "\", \"" + messageNumber + "\");' ";
    htmlTxt += "              style='cursor: pointer;'/></div>";        
    htmlTxt += "        <div class=\"info\">";
    htmlTxt += "        <div>제목: <span style=\"font-weight:bold\"><a href='javascript:view(\"" + messageId + "\", \"" + messageNumber + "\");'>" + title + "</a></span></div>";
    htmlTxt += "        <div>작성자 :<span class=\"writer\"> " + nickName + "</span> <span class=\"date\">(" + dateString + ")</span></div>";
    htmlTxt += "        </div>";   
    htmlTxt += "        <div class=\"close\"><img src=\"" + imageServer + "/images/bbs/popbox_x.gif\" ";
    htmlTxt += "             onclick='nv.$(\"nemoDescView\").style.display = \"none\";' ";
    htmlTxt += "            style='cursor: pointer;' /></div>";   
    htmlTxt += " <div class=\"clear\"></div>"     
    
    if (nv.$('nemoDescView').style.display == 'none') nv.$('nemoDescView').style.display =   '';
    nv.$('nemoDescView').innerHTML =   htmlTxt;
} 



/*
 * 앨범형 보기 유형 변경하기
 * @param listType : 변경유형 
 */
function listViewSytle(listType) {
    nv.$("listForm").listType.value = listType;
    nv.$('listForm').action = "list.do";
    nv.$('listForm').submit();
}


// -------------------------------------- micro.jsp 

    /**
     * 이모티콘 선택 div를 감추거나 표시
     * @param {object} element 엘리먼트 객체
     */
    function openEmoticonLineDiv(element) {
        // 버튼 엘리먼트의 좌표 획득
        var elementXY = nv.UI.getXY(element);
        // 위치 변경
        var emoticonSelectDiv = nv.$("emoticonSelectDiv");
        emoticonSelectDiv.style.left = (elementXY.x + 15) + "px"; 
        emoticonSelectDiv.style.top = elementXY.y + "px";
        // 감추거나 표시
        if(emoticonSelectDiv.style.display == "none") {
            emoticonSelectDiv.style.display = "inline";
        } else {
            emoticonSelectDiv.style.display = "none"; 
        }
    }
    
    /**
     * 선택된 이모티콘을 표시
     * @param {string} emoticonNum 이모티콘 번호
     */
    function selectEmoticonLine(emoticonNum) {
        nv.$("emoticonId").value = emoticonNum;
        nv.$("emoticonImg").src = "" + imageServer + "/images/bbs/emoticon/b_" + emoticonNum + ".gif";
        nv.$("emoticonSelectDiv").style.display = "none";
    }
    
    /**
     * 한줄쓰기 등록
     */
    function writeLineMessage() {
        var validator = new nv.Validator(null, bbsCommon.alertMsg);
        validator.checkRequired("contents", "한줄쓰기 내용을 입력해 주세요.", true);
        validator.checkMaxLengthByte("contents", 3000, 3, "한줄쓰기는 3000바이트까지 등록 가능합니다.");
        if(!validator.validate()) return;
        
        // 태그 체크
        if(!bbsCommon.tagValidator(nv.$("tags"))) {
            nv.$("tags").focus();
            return;
        }

        var messageForm = nv.$("messageForm");
        messageForm.submit();
    }
        
    /**
     * 댓글 보이기/감추기
     * @param {string] messageId 메세지 ID
     */
    function viewLineComment(messageId) {
        var commentListDiv = nv.$("commentBoxDiv_" + messageId);
        var commentWriteDiv = nv.$("commentWriteDiv_" + messageId);
        var commentLineDiv = nv.$("commentLineDiv_" + messageId);
        
        if(commentListDiv.style.display == "none") {
            commentListDiv.style.display = "block";
            // 쓰기 권한이 있을 경우에 입력박스 표시
            if(nv.$("availableCommentFlag").value == "true")
                commentWriteDiv.style.display = "block";
            commentLineDiv.style.display = "block";
            getLineCommentList(1, messageId);
        } else {
            commentListDiv.style.display = "none"
            commentWriteDiv.style.display = "none" 
            commentLineDiv.style.display = "none"
        }
    }
    
    /**
     * 댓글 목록 조회 Ajax 호출
     * @param {string} commentPage 댓글 페이지
     * @param {string} messageId 메세지 ID
     */
    function getLineCommentList(commentPage, messageId) {
        // DIV 영역을 비운다.
        nv.Dom.removeChildNodes(nv.$("commentListDiv_" + messageId));
        // Ajax 파라미터
        var param = "";
        param += "messageId=" + messageId;
        param += "&boardName=" + nv.$("boardName").value;
        param += "&curViewPage=" + commentPage;
        // 목록 Ajax 호출
        new nv.Ajax("comment.list.do", param, callback_LineCommentList, "GET", "JSON",
                { "commentPage" : commentPage, "messageId" : messageId }); 
    }
    
    /**
     * 댓글 목록 Callback 함수
     * @param {object} resultObj 결과 JSON 객체
     * @param {string} commentPage 댓글 페이지
     */
    function callback_LineCommentList(resultObj, deliveryData) {
        if(resultObj.result == "success") {
            // 페이지에 결과가 없을경우 이전 페이지 조회
            if(deliveryData.commentPage > 1 && resultObj.data.length < 1) {
                getLineCommentList(deliveryData.commentPage-1);
                return;
            }
            // 댓글를 감싸는 엘리먼트
            var commentBoxElement = nv.$("commentListDiv_" + deliveryData.messageId);
            // 등록된 댓글 div 생성
            for(var i=0; i<resultObj.data.length; i++) {
                var commentObj = resultObj.data[i];
                // div 생성
                var commentElement = document.createElement("div");
                commentElement.className = "micro_comment_view";
                commentBoxElement.appendChild(commentElement);
                // 댓글 HTML 텍스트
                var htmlTxt = "";
                htmlTxt += "<table><tr>";
                htmlTxt += "    <td class=\"td4\">";
                htmlTxt += "    <div class=\"writer\">" + commentObj.registerNickname + "</div>";
                htmlTxt += "</td>";
                htmlTxt += "<td class=\"td5\">" + commentObj.contents;
                htmlTxt += "    <span class=\"date_coment\">(" + commentObj.registerDate.detailDate + ")</span>";
                // 삭제버튼
                if(commentObj.registerId == nv.$("userKey").value || nv.$("availableManageFlag").value == "true") {
                    if(commentObj.registerId == nv.$("anonymousId").value && nv.$("availableManageFlag").value == "false") {  // 익명 댓글일 경우
                        htmlTxt += "<span><a onclick=\"openAnonymousLineComment('" + commentObj.commentId + "', '" + deliveryData.messageId + "', this);\" style=\"cursor: pointer;\"><img src=\"" + imageServer + "/images/bbs/btn_x2.gif\" id=\"deletePasswordCommentBtnImg\"></a></span>";
                    } else {
                        htmlTxt += "<span><a href=\"javascript:deleteLineComment('" + commentObj.commentId + "', '" + deliveryData.messageId + "');\" title=\"댓글 삭제\"><img src=\"" + imageServer + "/images/bbs/btn_x2.gif\" /></a></span>";
                    }
                }    
                htmlTxt += "</td></tr></table>";
                commentElement.innerHTML = htmlTxt;
            }  // ~for(i)
            
            // 변경된 페이지를 기억한다.
            nv.$("curViewPage_" + deliveryData.messageId).value = deliveryData.commentPage;
            
            // 페이징을 재생성한다.
            drawLinePaging(deliveryData.messageId);
            
            // 코멘트 수 갱신
            if(nv.$("commentCountDiv_" + deliveryData.messageId)) {
                 nv.$("commentCountDiv_" + deliveryData.messageId).innerHTML = "(" + nv.$("commentCount_" + deliveryData.messageId).value + ")";
            }
        } else {
            bbsCommon.alertMsg("잠시 후 다시 시도해 주세요.");
        }
    }
    
    /**
     * 페이징 링크 생성
     * @param {string] messageId 메세지 ID
     */ 
    function drawLinePaging(messageId) {
        // 페이지당 표시 건수
        var pageCount = (nv.$("commentListLines")) ? nv.$("commentListLines").value : 10;
        // 페이징 div를 비운다.
        nv.Dom.removeChildNodes(nv.$("commentPagingDiv_" + messageId));
        // 페이징 div 생성
        var commentPagingElement = document.createElement("div");
        commentPagingElement.setAttribute("align", "center");
        // 페이징 div에 재생성한 페이징 엘리먼트를 추가한다.
        nv.$("commentPagingDiv_" + messageId).appendChild(commentPagingElement);
        // 페이지 계산. 소수점은 올림처리한다.
        var totalPage = Math.ceil(nv.$("commentCount_" + messageId).value / pageCount);
        // 이전/다음 페이지이동 계산
        var pageSetNum = Math.ceil(nv.$("curViewPage_" + messageId).value / pageCount);
        var endPage = pageSetNum * 10;
        var startPage = endPage - 9; 
        // 페이징 링크 텍스트 생성
        var pageTxt = "";
        // 이전 페이징 이미지 버튼
        if(endPage > 10) {
            pageTxt += "<span class=\"paging_btn\"><a href=\"javascript:getLineCommentList(1, '" + messageId + "');\" title=\"첫 페이지\"><img src=\"" + imageServer + "/images/bbs/btn_pre.gif\"></a></span>";
            pageTxt += "<span class=\"paging_btn\"><a href=\"javascript:getLineCommentList(" + (endPage-10) + ", '" + messageId + "')\" title=\"이전 10 페이지\"><img src=\"" + imageServer + "/images/bbs/btn_pre_1.gif\"></a></span>";
        }
        if(endPage > totalPage) endPage = totalPage;
        for(var i=startPage; i<=endPage; i++) {
            if(i != startPage) pageTxt += " | "
            if(i == nv.$("curViewPage_" + messageId).value) {
                pageTxt += "<span class=\"view\">" + i + "</span>";
            } else {
                pageTxt += "<span><a href=\"javascript:getLineCommentList('" + i + "', '" + messageId + "');\" title=\"" + i + " 페이지로 이동\">" + i + "</a></span>";
            }
        }
        // 다음 페이징 이미지 버튼
        if(totalPage > endPage) {
            pageTxt += "<span class=\"paging_btn\"><a href=\"javascript:getLineCommentList(" + (startPage+10) + ", '" + messageId + "');\" title=\"다음 10 페이지\"><img src=\"" + imageServer + "/images/bbs/btn_next_1.gif\"></a></span>";
            pageTxt += "<span class=\"paging_btn\"><a href=\"javascript:getLineCommentList(" + (totalPage) + ", '" + messageId + "');\" title=\"마지막 페이지\"><img src=\"" + imageServer + "/images/bbs/btn_next.gif\"></a></span>";
        }
        commentPagingElement.innerHTML = pageTxt + "<br /><br />";
    }
    
    
    /**
     * 댓글 등록 Ajax 호출
     * @param {string] messageId 메세지 ID
     */
    function writeLineComment(messageId) {
        // 내용 입력 체크
        var validator = new nv.Validator(null, bbsCommon.alertMsg);
        validator.checkRequired("contents_" + messageId, "댓글 내용을 입력해 주세요.", true);
        validator.checkMaxLengthByte("contents_" + messageId, 3000, 3, "댓글은 3000바이트까지 등록 가능합니다.");
        // 비로그인 등록시
        if(nv.$("availableCommentFlag").value == "true" && nv.$("authenticateUserFlag").value == "false") {
            validator.checkRequired("registerNickname_" + messageId, "닉네임을 입력해 주세요.", true);
            validator.checkRequired("anonymousPassword_" + messageId, "비밀번호를 입력해 주세요.", true);
        }        
        if(!validator.validate()) return;
    
        var param = "";
        param += "messageId=" + messageId;
        param += "&boardName=" + nv.$("boardName").value;
        param += "&emoticonId=1";
        param += "&contents=" + nv.$("contents_" + messageId).value;
        
        // 비로그인 등록시
        if(nv.$("availableCommentFlag").value == "true" && nv.$("authenticateUserFlag").value == "false") {
            param += "&registerNickname=" + nv.$("registerNickname_" + messageId).value;
            param += "&anonymousPassword=" + nv.$("anonymousPassword_" + messageId).value;
        }        
        
        new nv.Ajax("comment.write.do", param, callback_WriteLineComment, "POST", "JSON", messageId);
    }
    
    
    /**
     * 댓글 등록 콜백
     * @param {object] resultObj 결과 JSON 객체
     * @param {string] messageId 메세지 ID
     */
    function callback_WriteLineComment(resultObj, messageId) {
        if(resultObj.result == "success") {
            // 입력란 초기화
            nv.$("contents_" + messageId).value = "";
            // 댓글 수 증가
            nv.$("commentCount_" + messageId).value = parseInt(nv.$("commentCount_" + messageId).value) + 1;
            // 댓글영역 표시
            nv.$("commentBoxDiv_" + messageId).style.display = "block";
            // 페이징 재생성  
            drawLinePaging(messageId);
            // 1페이지로 이동
            getLineCommentList(1, messageId);
        } else {
            bbsCommon.alertMsg("잠시 후 다시 시도해 주세요.");
        }
    }

     
    function openAnonymousLineComment(commentId, messageId, element) {
        
        nv.$("listForm").commentId.value = commentId;
        nv.$("listForm").messageId.value = messageId;
        
        // 버튼 엘리먼트의 좌표 획득
        var elementXY = nv.UI.getXY(element);
        
        // 위치 변경
        var commentPasswordDeleteDiv = nv.$("commentPasswordDeleteDiv");
        commentPasswordDeleteDiv.style.left = (elementXY.x) + "px"; 
        commentPasswordDeleteDiv.style.top = (elementXY.y) + "px";
        
        commentPasswordDeleteDiv.style.display = "inline";
    }
    
    function hideDeleteAnonymousLineCommentDiv() {
        var commentPasswordDeleteDiv = nv.$("commentPasswordDeleteDiv");
        nv.$("commentAnonymousPassword").value = "";
        commentPasswordDeleteDiv.style.display = "none"; 
    }
    
    function deleteAnonymousLineComment() {
        
        var validator = new nv.Validator(null, bbsCommon.alertMsg);
        validator.checkRequired("commentAnonymousPassword", "비밀번호를 입력해 주세요.", true);
        if(!validator.validate()) return;

        var messageId = nv.$("listForm").messageId.value;
        
        var param = "";
        param += "commentId=" + nv.$("listForm").commentId.value;
        param += "&messageId=" + messageId;
        param += "&boardName=" + nv.$("listForm").boardName.value;
        param += "&anonymousPassword=" + nv.$("commentAnonymousPassword").value;
        new nv.Ajax("comment.delete.do", param, callback_DeleteComment, "POST", "JSON", messageId);
        
        hideDeleteAnonymousLineCommentDiv();        
    }     
     
     
    /**
     * 댓글 삭제 Ajax 호출
     * @param {string] commentId 댓글 ID
     * @param {string] messageId 메세지 ID
     */
    function deleteLineComment(commentId, messageId) {
        var param = "";
        param += "commentId=" + commentId;
        param += "&messageId=" + messageId;
        param += "&boardName=" + nv.$("boardName").value;
        new nv.Ajax("comment.delete.do", param, callback_DeleteLineComment, "POST", "JSON", messageId);
    }
    
    /**
     * 댓글 삭제 콜백
     * @param {object] resultObj 결과 JSON 객체
     * @param {string] messageId 메세지 ID
     */
    function callback_DeleteLineComment(resultObj, messageId) {
        if(resultObj.result == "success") {
            // 댓글 수 감소
            nv.$("commentCount_" + messageId).value = parseInt(nv.$("commentCount_" + messageId).value) - 1;            
            // 페이징 재생성
            drawLinePaging(messageId);
            // 현재 페이지를 리로딩
            getLineCommentList(nv.$("curViewPage_" + messageId).value, messageId);
        } else if(resultObj.result == "password") {
            bbsCommon.alertMsg("잘못된 비밀번호 입니다.");        
        } else {
            bbsCommon.alertMsg("잠시후 다시 시도해 주세요.");
        }
    }

    /**
     * 추천하기 Ajax 호출
     * @param {string} messageId 메세지 ID
     */
    function lineRecommendation(messageId){
        if(nv.$("authenticateUserFlag").value != "true") {
            bbsCommon.alertMsg("로그인 하셔야 합니다.")
            return;
        }
    
        var param = "";
        param += "recommendPoint=1";  // 추천점수 기본값
        param += "&messageId=" + messageId;
        param += "&boardName=" + nv.$("boardName").value;
        
        new nv.Ajax("recommendation.do", param, callback_LineRecommendation, "GET", "JSON", messageId);    
    }
    
    /**
     * 추천하기 콜백
     * @param {object} resultObj 결과 JSON 객체
     * @param {object} messageId 메세지 ID
     */
    function callback_LineRecommendation(resultObj, messageId){
         if(resultObj.result == "success") {
             // 추천수 증가처리
             nv.$("recommendNumDiv_" + messageId).innerHTML = parseInt(nv.$("recommendNumDiv_" + messageId).innerHTML) + 1;
        	 bbsCommon.alertMsg("추천하였습니다.");
         } else if(resultObj.result == "aleady"){
             bbsCommon.alertMsg("추천은 한번만 가능합니다.");
         } else {
             bbsCommon.alertMsg("잠시후 다시 시도해 주세요.");
         }
    }
