﻿var CMT_PANEL_ID = "#comment_panel";
var CMT_PLACE_ID = "#opinionList";
var CMT_WRITEPLACE_ID = "#comment_write_wrap";
var CMT_PAGINGREPEATER_ID = "#CommentPagingRepeater";
var CMT_PAGINGBUTTON_PREV_ID = "#CommentPagingButtonPrev";
var CMT_PAGINGBUTTON_NEXT_ID = "#CommentPagingButtonNext";
var CMT_JSON_TOTALCNT = "CMT_JSON_TOTALCNT";
var CMT_JSON_LISTSIZE = "CMT_JSON_LISTSIZE";
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 = "b.comment_count";
var CMT_MAXLEN = 200;
var CMT_MAXLEN_WARN_COLOR = "#f00";
var CMT_RECOM_MSG = "글을 작성하실 때에는 타인을 존중해 주시기 바랍니다. 타인을 비방하거나 개인정보 유출시 운영정책에 의하여 제재를 받거나 관련 법에 의하여 처벌 받을 수 있습니다.";

var CMT_LOADURL = Website.RootPath + "Common/BBS/CommentList.aspx";
var CMT_listTemplate;

var CommentHelper = {
    Updatable: true,
    Commentable: true,
    Code: 0,
    BoardSN: 0,
    LoadURL: CMT_LOADURL,
    URL: Website.RootPath + "Common/BBS/CommentProcessing.aspx",
    Postable: false,
    ListUpdateType: "BBS",
    Page: 1,
    PagingSize: 10,
    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() {
        $(CMT_PANEL_ID).show();
    },
    HideList: function() {
        $(CMT_PANEL_ID).hide();
    },
    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) {
        CommentHelper.Page = (page) ? page : 1;
        switch (this.ListUpdateType) {
            case "BBS":
                $(CMT_PLACE_ID).load(this.LoadURL, { code: this.Code, sn: this.BoardSN, cPage: CommentHelper.Page, commentable: this.Commentable, updatable: this.Updatable }, function() {
                    var size = $(CMT_PLACE_ID + " li").size() / 3;
                    $(RPL_COUNT).text(size);
                    if (size == 0) {
                        CommentHelper.HideList();
                    }
                });
                break;
            case "JSON":
                //CMT_LOADURL = Website.RootPath + "Common/BBS/CommentListToJson.aspx";
                $.getJSON(this.LoadURL, { code: this.Code, sn: this.BoardSN, cPage: CommentHelper.Page, commentable: this.Commentable, updatable: this.Updatable, listupdatetype:this.ListUpdateType }, function(data) {
                    //리스트 레이어의 첫번째 차일드 ul 템플릿으로 인식
                    if (CMT_listTemplate == undefined) {
                        CMT_listTemplate = $(CMT_PLACE_ID + " #opinionRepeater").html();
                    }
                    //리스트 레이어 비우기
                    $(CMT_PLACE_ID).html("");
                    for (var i = 0; i < data.length; i++) {
                        tmpListItem = CMT_listTemplate;
                        //{ColumnID} 형식 데이터바인드
                        var regexp = /\{([^\:}]*)\}/g;
                        while ((foundArr = regexp.exec(CMT_listTemplate)) != null) {
                            tmpListItem = tmpListItem.replace(eval("/" + foundArr[0] + "/g"), eval("data[" + i + "]." + RegExp.$1));
                        }

                        //{CreateDate:Date},{CreateDate:Time} 두개는 별도 포메팅 ㄱ-;
                        arrCreateDate = data[i].CreateDate.split("T");
                        if (arrCreateDate.length >= 2) {
                            tmpListItem = tmpListItem.replace(eval("/\{CreateDate:Date\}/g"), arrCreateDate[0]);
                            tmpListItem = tmpListItem.replace(eval("/\{CreateDate:Time\}/g"), arrCreateDate[1].substring(0, 5));
                        }
                        //ul 추가
                        $(CMT_PLACE_ID).append("<ul>" + tmpListItem + "</ul>");
                    }

                    //리스트 사이즈
                    var size = $(CMT_PLACE_ID + " li").size() / 3;
                    if ($(RPL_COUNT) != null) {
                        //카운팅 해준다
                        $(RPL_COUNT).text(size);
                    }
                    //없으면 표시하지 않음
                    if (size == 0) {
                        CommentHelper.HideList();
                    } else {
                        $(CMT_PLACE_ID + " #opinionRepeater").show();
                    }

                    CommentHelper.GetPagingNumberListForComment(Number($.cookie(CMT_JSON_LISTSIZE)), CommentHelper.PagingSize, CommentHelper.Page, Number($.cookie(CMT_JSON_TOTALCNT)), "span");
                });
                break;
            default:

                break;
        }


        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 + "&maxLen=" + this.maxLen + "&comment=" + encodeURIComponent($(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;
                        case "5min3over":
                            alert("코멘트는 5분 이내 3개까지 등록 가능합니다.");
                            break;
                        case "1min10over":
                            alert("코멘트는 1분 이내 10개까지 등록 가능합니다.");
                            break;                            
                        case "abuseword":
                            alert("금칙어가 포함되어 있습니다.");
                            break;
                        case "1acc1comm":
                            alert("1계정당 1코멘트만 가능합니다.");
                            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).appendTo(CMT_WRITEPLACE_ID).hide();
                $(RPL_PANEL_PLACEHOLDER + id).hide();
                $(WRT_PANEL_ID).show();
            }
            else {
                $("div.cmt_reply_form").hide();
                $(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=" + encodeURIComponent($(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;
                        case "5min3over":
                            alert("코멘트는 5분 이내 3개까지 등록 가능합니다.");
                            break;
                        case "1min10over":
                            alert("코멘트는 1분 이내 10개까지 등록 가능합니다.");
                            break;                                    
                        case "abuseword":
                            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", "");
        }
        $(WRT_PANEL_ID + " textarea").val(CMT_RECOM_MSG);
        $(RPL_PANEL_ID + " textarea").val(CMT_RECOM_MSG)        
    },
    GetPagingNumberListForComment: function(listSize, pagingSize, PageNo, totalRowCount, repeaterTag) {
        var sb = "";

        var pageCount = parseInt(totalRowCount / listSize);
        if (totalRowCount % listSize > 0)
            pageCount += 1;

        var pageStart = parseInt(((PageNo - 1) / pagingSize)) * pagingSize + 1;
        var pageEnd = ((pageStart + pagingSize - 1) > pageCount) ? pageCount : (pageStart + pagingSize - 1);

        sb += "\n";
        if (PageNo > 1)
            $(CMT_PAGINGBUTTON_PREV_ID).attr("href", "javascript:CommentHelper.UpdateList(CommentHelper.Page-1);");
        else
            $(CMT_PAGINGBUTTON_PREV_ID).attr("href", "javascript:void(false);");

        if (pageEnd == 0) {
            sb += "<" + repeaterTag + "><a>1</a></" + repeaterTag + ">";
        } else {
            for (var i = pageStart; i <= pageEnd; i++) {
                if (i == Number(PageNo))
                    sb += "<" + repeaterTag + " class=\"now_page\">" + i + "</" + repeaterTag + ">";
                else
                    sb += "<" + repeaterTag + "><a href=\"javascript:CommentHelper.UpdateList(" + i + ");\">" + i + "</a></" + repeaterTag + ">";
                if (i != pageEnd)
                    sb += " | ";
            }
        }

        if (PageNo < pageCount)
            $(CMT_PAGINGBUTTON_NEXT_ID).attr("href", "javascript:CommentHelper.UpdateList(CommentHelper.Page+1);");
        else
            $(CMT_PAGINGBUTTON_NEXT_ID).attr("href", "javascript:void(false);");

        $(CMT_PAGINGREPEATER_ID).html(sb);
        return;

    }
};





