﻿var CMT_PANEL_ID = "#comment_panel";
var CMT_PLACE_ID = "#opinionList";
var CMT_WRITEPLACE_ID = "#comment_write_wrap";
var WRT_PANEL_ID = "#comment";
var RPL_PANEL_ID = "#comment_reply";
var RPL_BUTTON_ID = "#CommentReplyButton";
var RPL_PANEL_PLACEHOLDER = "#replyPlace_";
var RPL_PANEL_CLASS = CMT_PLACE_ID +" table td.replyPlace";
var RPL_COUNT = "#comment_count";
var RPL_DISPLAY_CLASS = "cmtlist_open_wrap";
var CMT_MAXLEN = 200;
var CMT_MAXLEN_WARN_COLOR = "#f00";
var CMT_RECOM_MSG = "글을 작성하실 때에는 타인을 존중해 주시기 바랍니다. 타인을 비방하거나 개인정보 유출시 운영정책에 의하여 제재를 받거나 관련 법에 의하여 처벌 받을 수 있습니다.";

var CommentHelper = {
    Updatable:true,
    Commentable:true,
    Code:0,
    BoardSN:0,
    LoadURL:Website.RootPath +"Common/BBS/CommentList.aspx",
    URL:Website.RootPath +"Common/BBS/CommentProcessing.aspx", 
    Postable:false,
    EnablePost:function() {
        if ($(WRT_PANEL_ID +" textarea").val() == CMT_RECOM_MSG)
            $(WRT_PANEL_ID +" textarea").val("");
        if ($(RPL_PANEL_ID +" textarea").val() == CMT_RECOM_MSG)
            $(RPL_PANEL_ID +" textarea").val("");
        this.Postable = true;
    },
    DisablePost:function() {
        $(WRT_PANEL_ID +" textarea").val(CMT_RECOM_MSG);
        $(RPL_PANEL_ID +" textarea").val(CMT_RECOM_MSG);
        this.Postable = false;
    },
    ShowList:function() {
        if(!$(CMT_PANEL_ID).hasClass(RPL_DISPLAY_CLASS)) {
            $(CMT_PANEL_ID).addClass(RPL_DISPLAY_CLASS);
        }
    },
    HideList:function() {
        if($(CMT_PANEL_ID).hasClass(RPL_DISPLAY_CLASS)) {
            $(CMT_PANEL_ID).removeClass(RPL_DISPLAY_CLASS);
        }
    },    
    Init:function(code, sn, commentable, updatable, maxLen) {
        this.maxLen = (maxLen) ? maxLen : CMT_MAXLEN;
        this.Updatable = (updatable == false) ? false : true;
        this.Commentable = (commentable == false) ? false : true;
        this.Code = code;
        this.BoardSN = sn;
        
        if (this.Commentable) {
            $(WRT_PANEL_ID +" textarea")
            .val(CMT_RECOM_MSG)
            .keyup(function() {
                var len = getStringLength($(WRT_PANEL_ID+" textarea").val());
                $(WRT_PANEL_ID+" strong").text(len);
                $(WRT_PANEL_ID+" strong").css("color", ((len > this.maxLen) ? CMT_MAXLEN_WARN_COLOR : ""));
            })
            .bind("focus", function() { $(this).addClass("edit"); CommentHelper.EnablePost(); })
            .bind("blur", function() { $(this).removeClass("edit"); });
            
            $(RPL_PANEL_ID + " textarea")
            .val(CMT_RECOM_MSG)
            .keyup(function() {
                var len = getStringLength($(RPL_PANEL_ID + " textarea").val());
                $(RPL_PANEL_ID+" strong").text(len);
                $(RPL_PANEL_ID+" strong").css("color", ((len > this.maxLen) ? CMT_MAXLEN_WARN_COLOR : ""));
            })
            .bind("focus", function() { $(this).addClass("edit"); CommentHelper.EnablePost(); })
            .bind("blur", function() { $(this).removeClass("edit"); });
        }
        else {
            $(WRT_PANEL_ID).remove();
            $(RPL_PANEL_ID).remove();
        }
        this.UpdateList();
    },
    UpdateList:function(page) {
        page = (page) ? page : 1;
        $(CMT_PLACE_ID).load(this.LoadURL, {code:this.Code,sn:this.BoardSN,cPage:page,commentable:this.Commentable,updatable:this.Updatable}, function() {
            var size = $(CMT_PLACE_ID +" li").size();
            $(RPL_COUNT).text(size + "개");
            if (size == 0) {
                CommentHelper.HideList();
            }
        });
        if (this.Commentable) {
            $(WRT_PANEL_ID).show();
            $(RPL_PANEL_ID).hide();
        }
    },
    AddComment:function() {
        if (this.Commentable) {
            if (!this.Postable || $.trim($(WRT_PANEL_ID +" textarea").val()) == "") {
                alert("코멘트를 입력해 주세요.");
                $(WRT_PANEL_ID +" textarea").focus();
                return;
            }
            else {
                if (getStringLength($(WRT_PANEL_ID +" textarea").val()) > this.maxLen) {
                    alert("코멘트는 최대 "+this.maxLen+"byte 까지만 입력 가능합니다.\n\n내용을 줄여서 등록해 주세요.");
                    $(WRT_PANEL_ID +" textarea").focus();
                    return;
                }
            }
            
            var postData = "code="+this.Code+"&mode=add&sn="+this.BoardSN+"&comment="+escape($(WRT_PANEL_ID +" textarea").val());
            $.post(this.URL, postData, function(data, status) {
                CommentHelper.DisablePost();
                if (status == "success" && data == "ok") {
                    CommentHelper.UpdateList();
                    CommentHelper.InitializeComment();
                    CommentHelper.ShowList();
                }
                else {
                    switch(data) {
                        case "logout":
                            alert("로그인 하신 후 이용해 주세요.");
                            break;
                        case "no_character":
                            alert("캐릭터를 생성하신 후 이용해 주세요.");
                            break;
                        case "blocked":
                            alert("지난 주제이거나 코멘트 등록 기간이 아닙니다.");
                            break;
                        case "empty":
                            alert("내용을 입력해 주세요.");
                            break;
                        case "overflow":
                            alert("코멘트는 최대 "+CommentHelper.maxLen+"byte 까지만 입력 가능합니다.\n\n내용을 줄여서 등록해 주세요.");
                            break;
                        case "ban":
                            alert("허스키 익스프레스의 이용이 제한된 상태로 코멘트 등록이 불가능 합니다.");
                            break;
                        default:
                            alert("일시적인 오류로 코멘트가 등록되지 않았습니다.\n\n다시 등록해 주세요.");
                            break;
                    }
                }
            });
        }
    },
    DeleteComment:function(id) {
        if (this.Updatable) {
            if (confirm("코멘트를 삭제하시겠습니까?")) {
                $.post(this.URL, {code:this.Code,mode:"delete",sn:this.BoardSN,id:id}, function(data, status) {
                    if (status == "success" && data == "ok") {
                        CommentHelper.UpdateList();
                    }
                    else {
                        var msg = (status == "success") ? data : "오류가 발생하여 코멘트를 삭제하지 못하였습니다.\n\n코멘트를 삭제하시려면 다시 시도해 주세요.";
                        alert(msg);
                    }
                });
            }
        }
    },
    SetReplyCommentForm:function(id) {
        if (this.Commentable) {
            CommentHelper.InitializeComment();
            if ($(RPL_BUTTON_ID).attr("title") == id) {
                $(RPL_BUTTON_ID).attr("title", "");
                $(RPL_PANEL_ID).hide();
                $(RPL_PANEL_PLACEHOLDER + id).hide();
                $(WRT_PANEL_ID).show();
            }
            else {
                $(RPL_BUTTON_ID).attr("title", id);
                $(RPL_PANEL_ID).appendTo(RPL_PANEL_PLACEHOLDER + id);
                $(RPL_PANEL_ID).show();
                $(RPL_PANEL_CLASS).hide();
                $(RPL_PANEL_PLACEHOLDER + id).show();
                $(RPL_PANEL_ID+" textarea").focus();
                $(WRT_PANEL_ID).hide();
            }
        }
    },
    ReplyComment:function() {
        if (this.Commentable) {
            if (!this.Postable || $.trim($(RPL_PANEL_ID + " textarea").val()) == "") {
                alert("답변 코멘트를 입력해 주세요.");
                $(RPL_PANEL_ID + " textarea").focus();
                return;
            }
            else {
                if (getStringLength($(RPL_PANEL_ID + " textarea").val()) > this.maxLen) {
                    alert("코멘트는 최대 "+this.maxLen+"byte 까지만 입력 가능합니다.\n\n내용을 줄여서 등록해 주세요.");
                    $(RPL_PANEL_ID + " textarea").focus();
                    return;
                }
            }
            
            var commentId = $(RPL_BUTTON_ID).attr("title");
            var postData = "code="+this.Code+"&mode=reply&sn="+this.BoardSN+"&id="+commentId+"&comment="+escape($(RPL_PANEL_ID + " textarea").val());
            $.post(this.URL, postData, function(data, status) {
                CommentHelper.DisablePost();
                if (status == "success" && data == "ok") {
                    CommentHelper.UpdateList();
                    CommentHelper.InitializeComment();
                    $(RPL_BUTTON_ID).attr("title","");
                    $(RPL_PANEL_ID).appendTo(CMT_WRITEPLACE_ID).hide();
                    $(RPL_PANEL_CLASS).hide();
                    $(WRT_PANEL_ID).show();
                }
                else {
                    switch(data) {
                        case "logout":
                            alert("로그인 하신 후 이용해 주세요.");
                            break;
                        case "no_character":
                            alert("캐릭터를 생성하신 후 이용해 주세요.");
                            break;
                        case "blocked":
                            alert("지난 주제이거나 코멘트 등록 기간이 아닙니다.");
                            break;
                        case "empty":
                            alert("내용을 입력해 주세요.");
                            break;
                        case "overflow":
                            alert("코멘트는 최대 "+CommentHelper.maxLen+"byte 까지만 입력 가능합니다.\n\n내용을 줄여서 등록해 주세요.");
                            break;
                        case "ban":
                            alert("허스키 익스프레스의 이용이 제한된 상태로 코멘트 등록이 불가능 합니다.");
                            break;
                        default:
                            alert("일시적인 오류로 코멘트가 등록되지 않았습니다.\n\n다시 등록해 주세요.");
                            break;
                    }
                }
            });
        }
    },
    InitializeComment:function() {
        if (this.Commentable) {
            $(WRT_PANEL_ID+" strong").text(0).css("color", "");
            $(RPL_PANEL_ID+" strong").text(0).css("color", "");
        }
    }
};
