﻿FeedComments("cnFeeds");

function FeedComments(asWrapperId) {
    var U = iUtil();

    var leWrapper = document.getElementById(asWrapperId);
    
    if (!leWrapper || typeof (JS_FeedComment) == "undefined") {
        return false;
    }
    
    var ctrl = {
        cssComment: "feed_comments_v1",
        maxCount: 20
    };
    var view = {
        comment: [
	            '<div class="feed_comment" uid="{K:UserId}" uname="{K:DisplayName}" cid="{K:CommentId}">',
	            '    <a class="del_comment" href="javascript:void(0)" {K:DelLink}></a>',
	            '    <div class="img_seg">',
	            '        <a href="http://www.myspace.cn/{K:UserId}" target="_blank">',
	            '        <img title="{K:DisplayName}" alt="{K:DisplayName}" src="{K:Image}" class="avatar"/>',
	            '        </a>',
	            '    </div>',
	            '    <div class="info_seg">',
	            '        <div class="comment_nick_name">',
	            '            <a href="http://www.myspace.cn/{K:UserId}" target="_blank">{K:DisplayName}</a>',
	            '            <span class="comment_time">{K:Date}</span>',
	            '        </div>',
	            '        <div class="comment_text">{K:Content}<a class="reply_link" href="javascript:void(0)">回复</a></div>',
	            '    </div>',
	            '</div>'].join(""),
        reply: [
	                '<div class="feed_comment feed_reply">',
	                '    <div class="img_seg">',
	                '        <img title="{K:DisplayName}" alt="{K:DisplayName}" src="{K:Image}" class="avatar"/>',
	                '    </div>    ',
	                '    <textarea>添加回复</textarea>',
	                '    <div class="opt">',
	                '        <span class="word_count">140/140</span>',
	                '        <a href="javascript:void(0)" tabindex="12" class="cnViBtnBlue feed_comment_submit"><b><i>回复</i></b></a>',
	                '    </div>',
	                '</div>'].join("")
    };
    get_comments();
    
    function get_comments() {
        var lxFeedComment = [];
        for (var i = 0; i < JS_FeedComment.length; i++) {
            var loComment = JS_FeedComment[i];
            var lsUniqueId = [loComment["FeedTypeId"], loComment["ParentPrimaryId"], loComment["FeedOwnerId"]].join("_");
            if (loComment["ShareType"] && loComment["ShareUserId"]) {
                lsUniqueId = lsUniqueId + "_" + loComment["ShareType"] + "_" + loComment["ShareUserId"];
            }
            lxFeedComment.push(lsUniqueId);
        }

        U.loadAjax({
            "webservices": "http://ajaxv2.myspace.cn/_Common/AjaxService/CommonCommentSvc.svc/json/GetFeedCommentAggrs?r=" + Math.random() + "&feed=" + lxFeedComment.join(","),
            "method": "get",
            "values": "",
            "contentType": "application/x-www-form-urlencoded"
        }, action);
        function action(asData) {
            var loData = U.json2Obj(asData);
            if (loData.result == 1) {                
                init_comments(loData.comments);
            } else if (loData.result == 2) {
                location.href = loData.msg;
            } else {
                //alert(loData.msg);
            }
        }
    }
    function init_comments(axData) {
        if (!axData) {
            axData = [];
        }
        for (var i = 0; i < axData.length; i++) {
            var loData = axData[i];

            var lsFeedId = "fc_" + [loData["FeedTypeId"], loData["ParentPrimaryId"], loData["FeedOwnerId"]].join("_");
            var lsDtId = "dt_" + [loData["FeedTypeId"], loData["ParentPrimaryId"], loData["FeedOwnerId"]].join("_");
            if (loData["ShareType"] && loData["ShareUserId"]) {
                lsFeedId = lsFeedId + "_" + loData["ShareType"] + "_" + loData["ShareUserId"];
                lsDtId = lsDtId + "_" + loData["ShareType"] + "_" + loData["ShareUserId"];
            }
            var leFeed = document.getElementById(lsFeedId);
            if (!leFeed) {
                continue;
            }

            var leDt = document.getElementById(lsDtId);
            if (!leDt) {
                continue;
            }
           
            var leReplyLink = document.createElement("a");
            leReplyLink.href = "javascript:void(0)";
            leReplyLink.style.cssText = 'margin-left:5px;';
            leReplyLink.innerHTML = "收起回复";
            leDt.appendChild(leReplyLink);

            if (JS_Context.UserId == loData.first.UserId || JS_Context.UserId == loData["FeedOwnerId"]) {
                loData.first.DelLink = 'style="display:block;"';
            }
            if (JS_Context.UserId == loData.last.UserId || JS_Context.UserId == loData["FeedOwnerId"]) {
                loData.last.DelLink = 'style="display:block;"';
            }
            var lsComments = "";
            if (loData.total < 1) {

            } else if (loData.total < 2) {
                lsComments = U.smartView(view.comment, loData.first);
            } else if (loData.total < 3) {
                lsComments = U.smartView(view.comment, [loData.first, loData.last]);
            } else if (loData.total <= ctrl.maxCount) {
                lsComments = [U.smartView(view.comment, loData.first), '<div class="feed_comment"><a class="show_all_comment" href="javascript:void(0)" pn="1" ps="', loData.total, '" total="', loData.total, '" >显示全部', loData.total, '条</a></div>', U.smartView(view.comment, loData.last)].join("");
            } else {
                lsComments = [U.smartView(view.comment, loData.first), '<div class="feed_comment"><a class="show_all_comment" href="javascript:void(0)" pn="1" ps="', ctrl.maxCount, '" total="', loData.total, '" >显示另外', ctrl.maxCount, '条</a></div>', U.smartView(view.comment, loData.last)].join("");
            }
            var leComment = document.createElement("div");
            leComment.className = ctrl.cssComment;
            leComment.innerHTML = [lsComments, U.smartView(view.reply, JS_Context)].join("");

            //旧版Userhome
            var lxMoreLess = U.byClass("moreOrLessWrapper", leFeed, "div");
            if (lxMoreLess.length > 0) {
                leFeed.insertBefore(leComment, lxMoreLess[0]);
            } else {
                leFeed.appendChild(leComment);
            }
            FeedComment(leComment);

            U.addEvent(leReplyLink, "click", onClickFeedReply(leReplyLink, leComment, loData.total));
        }
    }

    function onClickFeedReply(aeLink, aeComment, aiCount) {
        return function() {
            if (aeComment.style.display == "none") {
                aeComment.style.display = "block";
                aeLink.innerHTML = "收起回复";

                var leTextarea = aeComment.getElementsByTagName("textarea")[0];
                leTextarea.focus();
            } else {
                aeComment.style.display = "none";
                aeLink.innerHTML = (aiCount).toString() + "条回复";
            }
        }
    }

    function FeedComment(aeWrapper) {
        var leWrapper = aeWrapper;
        var dom = {
            reply_links: U.byClass("reply_link", leWrapper),
            del_links: U.byClass("del_comment", leWrapper),
            show_all_links: U.byClass("show_all_comment", leWrapper, "a"),
            count: U.byClass("word_count", leWrapper, "span")[0],
            textarea: leWrapper.getElementsByTagName("textarea")[0],
            submit: U.byClass("feed_comment_submit", leWrapper, "a")[0],
            getReplyParent: function(aeNode) {
                return aeNode.parentNode.parentNode.parentNode;
            },
            getTextareaParent: function(aeNode) {
                return aeNode.parentNode;
            },
            getDelParent: function(aeNode) {
                return aeNode.parentNode;
            }

        };
        var ctrl = {
            tip: "添加回复",
            cssPublish: "publish_reply",
            reply_to: -1,
            maxLength: 140,
            leftLength: this.maxLength
        };
        var view = {
            comment: [
	            '<div class="feed_comment" uid="{K:UserId}" uname="{K:DisplayName}" cid="{K:CommentId}">',
	            '    <a class="del_comment" href="javascript:void(0)" {K:DelLink}></a>',
	            '    <div class="img_seg">',
	            '        <a href="http://www.myspace.cn/{K:UserId}" target="_blank">',
	            '        <img title="{K:DisplayName}" alt="{K:DisplayName}" src="{K:Image}" class="avatar"/>',
	            '        </a>',
	            '    </div>',
	            '    <div class="info_seg">',
	            '        <div class="comment_nick_name">',
	            '            <a href="http://www.myspace.cn/{K:UserId}" target="_blank">{K:DisplayName}</a>',
	            '            <span class="comment_time">{K:Date}</span>',
	            '        </div>',
	            '        <div class="comment_text">{K:Content}<a class="reply_link" href="javascript:void(0)">回复</a></div>',
	            '    </div>',
	            '</div>'].join("")
        };

        var liLeftWord = ctrl.maxLength;

        listen();

        function listen() {
            U.addEvent(dom.textarea, "focus", onFocusTextarea);
            U.addEvent(dom.textarea, "keyup", caculateWord);
            U.addEvent(dom.textarea, "paste", caculateWord);
            U.addEvent(dom.textarea, "blur", onBlurTextarea);
            U.addEvent(dom.submit, "click", publish_comment);

            for (var i = 0; i < dom.reply_links.length; i++) {
                U.addEvent(dom.reply_links[i], "click", reply_comment);
            }
            for (var i = 0; i < dom.del_links.length; i++) {
                U.addEvent(dom.del_links[i], "click", delete_comment);
            }
            for (var i = 0; i < dom.show_all_links.length; i++) {
                U.addEvent(dom.show_all_links[i], "click", show_more_comments);
            }
        }
        function caculateWord() {
            ctrl.leftLength = ctrl.maxLength - dom.textarea.value.length;
            if (ctrl.leftLength > 0) {
                dom.count.innerHTML = ctrl.leftLength + "/" + ctrl.maxLength;
            } else {
                setTimeout(function() { dom.textarea.value = dom.textarea.value.substring(0, ctrl.maxLength); }, 200);
                dom.count.innerHTML = ctrl.maxLength + "/" + ctrl.maxLength;
            }
        }

        function reply_comment(event) {
            event = event || window.event;
            var leTarget = event.srcElement || event.target;
            var leUnit = dom.getReplyParent(leTarget);

            var loUser = {
                UserId: leUnit.getAttribute("uid"),
                DisplayName: leUnit.getAttribute("uname")
            };
            ctrl.reply_to = loUser.UserId;

            setTimeout(function() {
                dom.textarea.focus();
                dom.textarea.value = "回复" + loUser.DisplayName + ": ";
            }, 200);
            dom.textarea.setAttribute("rid", leUnit.getAttribute("cid"));
            caculateWord();
        }

        function onFocusTextarea() {
            if (dom.textarea.value == ctrl.tip) {
                dom.textarea.value = "";
            }
            U.addClass(dom.getTextareaParent(dom.textarea), ctrl.cssPublish);
            caculateWord();
        }
        function onBlurTextarea() {
            setTimeout(function() {
                if (U.trim(dom.textarea.value) == "") {
                    dom.textarea.value = ctrl.tip;
                }
                U.removeClass(dom.getTextareaParent(dom.textarea), ctrl.cssPublish);
            }, 200);
        }
        function delete_comment(event) {
            event = event || window.event;
            var leTarget = event.srcElement || event.target;
            var leUnit = dom.getDelParent(leTarget);
            if (!confirm("确认要删除这条回复吗？")) {
                return;
            }
            U.loadAjax({
                "webservices": "http://ajaxv2.myspace.cn/_Common/AjaxService/CommonCommentSvc.svc/json/DeleteCommonComment",
                "values": "CommentId=" + leUnit.getAttribute("cid"),
                "contentType": "application/x-www-form-urlencoded"
            }, action);

            function action(asData) {
                var loData = U.json2Obj(asData);
                if (loData.result == 1) {
                    leUnit.parentNode.removeChild(leUnit);
                } else if (loData.result == 2) {
                    location.href = loData.msg;
                } else {
                    alert(loData.msg);
                }
            }

        }
        function publish_comment() {
            var lxId = leWrapper.parentNode.id.split("_");
            if (U.trim(dom.textarea.value) == "") {
                alert("您还没有输入评论内容！");
                return;
            }
            U.loadAjax({
                "webservices": "http://ajaxv2.myspace.cn/_Common/AjaxService/CommonCommentSvc.svc/json/CreateFeedComment",
                "values": ["ReCommentId=", dom.textarea.getAttribute("rid"), "&Content=", encodeURIComponent(dom.textarea.value), "&FeedTypeId=", lxId[1], "&ParentPrimaryId=", lxId[2], "&FeedOwnerId=", lxId[3]].join(""),
                "contentType": "application/x-www-form-urlencoded"
            }, action);
            function action(asData) {
                var loData = U.json2Obj(asData);
                if (loData.result == 1) {
                    insertComment(loData.comment);
                } else if (loData.result == 2) {
                    location.href = loData.msg;
                } else {
                    alert(loData.msg);
                }
            }
            function insertComment(aoData) {
                var loData = aoData;
                var leNewUnit = document.createElement("div");
                loData.DelLink = 'style="display:block;"';
                leNewUnit.innerHTML = U.smartView(view.comment, loData);

                var leReplyUnit = dom.getTextareaParent(dom.textarea);
                leReplyUnit.parentNode.insertBefore(leNewUnit, leReplyUnit);

                var leNewReply = U.byClass("reply_link", leNewUnit)[0];
                var leNewDel = U.byClass("del_comment", leNewUnit)[0];
                U.addEvent(leNewReply, "click", reply_comment);
                U.addEvent(leNewDel, "click", delete_comment);

                dom.textarea.setAttribute("rid", 0);
                dom.textarea.value = ctrl.tip;
            }
        }
        function show_more_comments(event) {
            event = event || window.event;
            var leTarget = event.srcElement || event.target;

            var liPageNum = parseInt(leTarget.getAttribute("pn"));
            var liPageSize = parseInt(leTarget.getAttribute("ps"));
            var liTotal = parseInt(leTarget.getAttribute("total"));
            var lbFirstPage = (liPageNum == 1);
            var lbLastPage = (liPageNum == Math.ceil(liTotal / liPageSize));
            var lxId = leWrapper.parentNode.id.split("_");

            U.loadAjax({
                "webservices": ["http://ajaxv2.myspace.cn/_Common/AjaxService/CommonCommentSvc.svc/json/GetPagedFeedComment?", "PageSize=", liPageSize, "&PageNum=", liPageNum, "&FeedTypeId=", lxId[1], "&ParentPrimaryId=", lxId[2], "&FeedOwnerId=", lxId[3], "&r=", Math.random()].join(""),
                "method": "get",
                "values": "",
                "contentType": "application/x-www-form-urlencoded"
            }, action);

            function action(asData) {
                var loData = U.json2Obj(asData);
                var lxData = loData.comments;
                for (var i = 0; i < lxData.length; i++) {
                    if (JS_Context.UserId == lxData[i].UserId || JS_Context.UserId == lxId[3]) {
                        lxData[i].DelLink = 'style="display:block;"';
                    }
                }
                if (lbFirstPage) {
                    lxData.shift();
                }
                if (lbLastPage) {
                    lxData.pop();
                }

                var leNewUnit = document.createElement("div");
                leNewUnit.innerHTML = U.smartView(view.comment, lxData);


                var liLeftRecord = liTotal - liPageNum * liPageSize;

                var leShowAllUnit = leTarget.parentNode;
                if (lbLastPage || liLeftRecord <= 1) {
                    leShowAllUnit.parentNode.replaceChild(leNewUnit, leShowAllUnit);
                } else {
                    if (liPageSize >= liLeftRecord) {
                        leTarget.innerHTML = "显示最后" + (liLeftRecord - 1) + "条";
                    }
                    leTarget.setAttribute("pn", liPageNum + 1);
                    leShowAllUnit.parentNode.insertBefore(leNewUnit, leShowAllUnit);
                }


                var lxNewReply = U.byClass("reply_link", leNewUnit);
                var lxNewDel = U.byClass("del_comment", leNewUnit);
                for (var i = 0; i < lxNewReply.length; i++) {
                    U.addEvent(lxNewReply[i], "click", reply_comment);
                }
                for (var i = 0; i < lxNewDel.length; i++) {
                    U.addEvent(lxNewDel[i], "click", delete_comment);
                }
            }
        }
    }
    function iUtil() {
        return {
            loadAjax: function(aoObj, afCallback, asDomain) {
                if (navigator.userAgent.indexOf("IE") != -1) {
                    action(delay);
                } else {
                    delay();
                }

                function delay() {
                    if (document.domain != "myspace.cn") {
                        document.domain = "myspace.cn";
                    }
                    if (aoObj == null) {
                        return false;
                    }
                    if (asDomain == null) {
                        asDomain = "ajaxv2";
                    }
                    var lsFrameUrl = "http://" + asDomain + ".myspace.cn/_common/static/ajax.html";
                    var lsFrameName = asDomain + "_frame";
                    var lsFrameWrapperId = asDomain + "_frameWrapper";
                    var leFrameWrapper = document.getElementById(lsFrameWrapperId);
                    if (window.frames[lsFrameName] == null) {
                        leFrameWrapper = document.createElement("span");
                        leFrameWrapper.id = lsFrameWrapperId;
                        leFrameWrapper.style.display = "none";
                        document.body.appendChild(leFrameWrapper);
                        leFrameWrapper.innerHTML = '<iframe name=' + lsFrameName + '></iframe>';
                        addLoadListener();
                    } else if (window.frames[lsFrameName].ajax == null) {
                        addLoadListener();
                    } else {
                        lfCallback();
                    }
                    function addLoadListener() {
                        var leIframe = leFrameWrapper.getElementsByTagName("iframe")[0];
                        if (navigator.userAgent.indexOf("IE") != -1) {
                            leIframe.attachEvent("onload", lfCallback);
                        } else {
                            leIframe.addEventListener("load", lfCallback, false);
                        }
                        leIframe.src = lsFrameUrl;
                    }

                    function lfCallback() {
                        var lsGUID = "_autoCallBackAjax_" + Math.floor(Math.random() * 16000).toString(16);
                        window[lsGUID] = afCallback;
                        aoObj.callback = lsGUID;
                        aoObj.url = aoObj.webservices;
                        aoObj.data = aoObj.values;
                        window.frames[lsFrameName].ajax(aoObj);
                    }
                }
                function action(afDelay) {
                    var timer = function() {
                        try {
                            document.documentElement.doScroll("left");
                            afDelay();
                        } catch (error) {
                            setTimeout(timer, 200);
                        }
                    }
                    timer();
                }
            },
            json2Obj: function(astr) {
                var ljson;
                if (typeof astr == "object") {
                    return astr;
                }
                astr = (astr != null) ? astr.split("\n").join("").split("\r").join("") : "";
                if (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/.test(astr.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) {
                    if (astr != "") {
                        ljson = eval('(' + astr + ')');
                        return ljson;
                    }
                }
                return {};
            },
            addEvent: function(aeTag, asEvt, afHandler) {
                if (!aeTag) {
                    return false;
                }
                if (navigator.userAgent.indexOf("IE") != -1) {
                    aeTag.attachEvent("on" + asEvt, afHandler);
                } else {
                    aeTag.addEventListener(asEvt, afHandler, false);
                }
            },
            byClass: function(asClass, aeP, asTag) {
                var lxNew = [];
                asClass = asClass == null ? "" : asClass;
                aeP = aeP == null ? document : aeP;
                asTag = asTag == null ? "*" : asTag;

                var lxTag = aeP.getElementsByTagName(asTag);
                var pattern = new RegExp("(^|\s)" + asClass + "(\s|$)");
                for (var i = 0; i < lxTag.length; i++) {
                    if ((" " + lxTag[i].className + " ").indexOf(" " + asClass + " ") != -1) {
                        lxNew.push(lxTag[i]);
                    }
                }
                return lxNew;
            },
            addClass: function(aeTag, asClass) {
                if (!aeTag) {
                    return false;
                }
                asClass = asClass == null ? 'cnViOver' : asClass;
                if ((" " + aeTag.className + " ").indexOf(" " + asClass + " ") == -1) {
                    aeTag.className = (aeTag.className + ' ' + asClass).replace(/(^\s*)|(\s*$)/g, "");
                }
                return aeTag;
            },
            removeClass: function(aeTag, asClass) {
                if (!aeTag) {
                    return false;
                }
                asClass = asClass == null ? 'cnViOver' : asClass;
                aeTag.className = aeTag.className.replace(new RegExp('(^|\\s)' + asClass + '(?:\\s|$)'), '$1').replace(/(^\s*)|(\s*$)/g, "");
            },
            trim: function(asStr) {
                asStr = asStr == null ? "" : asStr;
                return asStr.replace(/(^\s*)|(\s*$)/g, "");
            },
            smartView: function(asHTML, axData) {
                var lxLeft = asHTML.split("{K:");
                var lxHTML = [];
                if (!axData) {
                    return false;
                }
                if (axData.constructor != Array) {
                    if (axData.constructor == Number) {
                        var liIndex = axData;
                        axData = [];
                        axData[liIndex - 1] = {};
                    } else {
                        axData = [axData];
                    }
                }
                for (var i = 0; axData && i < axData.length; i++) {
                    for (var j = 0; j < lxLeft.length; j++) {
                        var lsProp = lxLeft[j].substring(0, lxLeft[j].indexOf("}"));
                        if (lsProp != "") {
                            if (lsProp == "k") {
                                lxHTML[lxHTML.length] = i;
                                lxHTML[lxHTML.length] = lxLeft[j].substring(lxLeft[j].indexOf("}") + 1);
                            } else {
                                lxHTML[lxHTML.length] = axData[i][lsProp];
                                lxHTML[lxHTML.length] = lxLeft[j].substring(lxLeft[j].indexOf("}") + 1);
                            }

                        }
                        else {
                            lxHTML[lxHTML.length] = lxLeft[j];
                        }
                    }
                }
                return lxHTML.join("");
            }
        };
    }
}