
function escapeToHTML(str) {
    str = str.replace(/\r\n/g, "<br />").replace(/\r/g, "<br />").replace(/\n/g, "<br />");
    return str;
}

var googalzchat = {
    interval_mainchat: null,
    interval_idle: null,
    interval_refresh: null,
    interval_status: null,
    interval_useronline: null,
    memberid: null,
    groupid: null,
    groupname: '',
    ismember: false,
    autorefresh: 3000,
    idle: 0,
    connection_timeout: 2000,
    autoidle: 5000,
    showmemberlist: true,
    scrollDown: function() {
        $(".ggzmainchat .layout .mainMessage").animate({ scrollTop: 1000 });
    },
    container: '',
    clearAllInterval: function() {
        clearTimeout(this.interval_mainchat);
        clearInterval(this.interval_idle);
        clearInterval(this.interval_useronline);
        clearInterval(this.interval_refresh);
    },
    openMainchat: function(container, showUseronline, isDraggable) {
        this.container = container;
        var template = "<div class=\"ggzmainchat\"><div class=\"GMainBox-Title title\"><div class=\"InnerBox\"><span id=\"TitleGooChat\"><b></b></span></div></div><div><div class=\"mainMemList\"><div class=\"pointer\">&nbsp;</div><div class=\"list\"><div class=\"inner\"><div class=\"online\"><b>User online</b> <span>(0)</span></div><ul></ul></div></div></div></div><div class=\"main\"><div class=\"layout\"><div class=\"status\">&nbsp;</div><div class=\"mainMessage\">&nbsp;</div><div class=\"clear\">&nbsp;</div></div><div class=\"control\"><div class=\"textMessage\"><textarea cols=\"33\" rows=\"2\" name=\"message\" class=\"message\"></textarea></div><!--div class=\"options\"><div class=\"option\">Options<ul><li><a href=\"javascript:void(0);\" onclick=\"googalzchat.displayMemberList();\">Show/Hide User online</a></li></ul></div><div class=\"emoticon\">Emo</div></div--><div class=\"clear\">&nbsp;</div></div></div></div>";
        $(container).html(template);

        var shadow = $("#chatshadow");
        var context = $("#chatcontext");
        if (shadow.length < 1) {
            shadow = $('<div id=\"chatshadow\"></div>')
                 .css({ backgroundColor: '#000'
                         , position: 'absolute'
                         , opacity: 0.2
                         , zIndex: 499
                         , padding: '6px'
                 })
                 .appendTo('body')
                 .hide();

            context = $("<div id=\"chatcontext\"><a href=\"javascript:void(0);\">Refresh</a></div>")
                .css({ backgroundColor: '#fff'
                        , position: 'absolute'
                        , zIndex: 500
                        , padding: '5px'
                        , border: '1px solid #555'
                        , fontSize: '10px'
                })
                .appendTo('body')
                .hide();
        }


        this.clearAllInterval();
        this.detectMainchat();

        googalzchat.syncuseronline();

        $(container + " .ggzmainchat .title b").text(googalzchat.groupname)
        .append('<span style="font-size:10px;font-weight:normal;">&nbsp;&nbsp;(double click to show/hide user online.)</span>');
        $(container + " .ggzmainchat").corner("top keep")
        .draggable().draggable("disable");

        isDraggable = (isDraggable == undefined) ? true : isDraggable;
        if (isDraggable) {
            $(container + " .ggzmainchat .title").mousedown(
            function()
            { $(container + " .ggzmainchat").draggable("enable"); }).mouseup(
            function()
            { $(container + " .ggzmainchat").draggable("disable"); })
            .css("cursor", "move");
        }
        showUseronline = (showUseronline == undefined) ? true : showUseronline;
        $(container + " .ggzmainchat .title").dblclick(function() { googalzchat.displayMemberList(); });
        if (!showUseronline)
            this.displayMemberList(false);



        $(container + " .ggzmainchat .main .control .textMessage .message").keypress(function(e) {
            var txt = $(this);
            switch (e.keyCode) {
                case 13:
                    if (!e.shiftKey) {
                        var val = $.trim(txt.val());
                        txt.val('');
                        txt.attr("disabled", "disabled");
                        if (val.length > 0) {
                            googalzchat.sendMessage(val);
                            googalzchat.showStatus("sending message..");
                        }
                        setTimeout(
                            function() {
                                txt.removeAttr("disabled");
                                txt.focus();
                            }
                        , 50);
                    }
                    break;
            }
            if (txt.val().length > 1000)
                txt.val(txt.val().substring(0, 1000));
        });
    },
    detectTimeout: function() {
        clearTimeout(this.interval_mainchat);
        this.interval_mainchat = setTimeout(this.detectMainchat, this.autorefresh);
    },
    detectMainchat: function() {
        if ($(this.container + ' .ggzmainchat').length <= 0)
            googalzchat.clearAllInterval();
        googalzchat.syncmessage();
    },
    messageRecieve: function(data, textStatus) {
        var True = true;
        var False = false;
        var container = this.container;
        switch (textStatus) {
            case "success":
                data = eval(data);
                if (data.IsError) {
                    if (data.IsSystem)
                        googalzchat.showStatus(unescape(data.Message), { backgroundColor: 'yellow' });
                    else {
                        googalzchat.clearAllInterval();
                        googalzchat.showmemberlist = true;
                        googalzchat.displayMemberList();
                        $(container + " .ggzmainchat").block(unescape(data.Message));
                    }

                    setTimeout(googalzchat.hideStatus, 1000);
                } else {
                    googalzchat.displaymessage(data);
                    googalzchat.hideStatus();
                    googalzchat.detectTimeout();
                }

                break;
            case "timeout":
                googalzchat.showStatus("connection timeout...");
                googalzchat.interval_status = setTimeout(googalzchat.hideStatus, 5000);
                break;
            case "error":
                googalzchat.showStatus("error request...");
                googalzchat.interval_status = setTimeout(googalzchat.hideStatus, 5000);
                break;
            case "notmodified": break;
                googalzchat.showStatus("not modified...");
                googalzchat.interval_status = setTimeout(googalzchat.hideStatus, 5000);
            case "parsererror": break;
                googalzchat.showStatus("parser error...");
                googalzchat.interval_status = setTimeout(googalzchat.hideStatus, 5000);
            default:
                googalzchat.showStatus("unknown error...");
                googalzchat.interval_status = setTimeout(googalzchat.hideStatus, 5000);
                break;
        }
    },
    sendMessage: function(msg) {
        clearTimeout(this.interval_mainchat);
        $.post("/home/googalzchat/handler/sendmessage.ashx",
        { gid: googalzchat.groupid, msg: msg }
        , googalzchat.messageRecieve);
    },
    syncuseronline: function() {
        var container = this.container;
        var True = true;
        var False = false;
        $.post("/home/googalzchat/handler/getuseronline.ashx", { gid: googalzchat.groupid }
        , function(data, textStatus) {
            if (textStatus == "success") {
                this.interval_useronline = setTimeout(function() { googalzchat.syncuseronline(); }, googalzchat.autorefresh * 3);
                data = eval(data);
                if (!data.IsError) {
                    var i = -1;
                    var str = "";
                    var raw = data.Data;
                    while ((raw[++i] != null) || (raw[i] != undefined)) {
                        str += "<li><div><img src=\"" + unescape(raw[i].Avartar) + "\" alt=\"" + unescape(raw[i].Username) + "\" title=\"" + unescape(raw[i].Username) + "\" align=\"left\" />" + unescape(raw[i].Username) + "<br />";
                        if (raw[i].IsOwner) str += "<span class=\"owner\">owner</span>";
                        else if (raw[i].IsAmbassador) str += "<span class=\"ambassador\">ambassador</span>";
                        else str += "<span class=\"member\">member</span>";
                        str += "</div></li>";
                    }

                    var onlinelist = $(container + ' .ggzmainchat .mainMemList .list .inner ul');
                    if (str.toLowerCase() != onlinelist.html().toLowerCase())
                        onlinelist.html(str);
                    $(container + ' .ggzmainchat .mainMemList .list .inner .online span').text("(" + i + ")");
                }
            }
        });


    },
    syncmessage: function() {
        $.post("/home/googalzchat/handler/getmessage.ashx",
        { gid: googalzchat.groupid }, googalzchat.messageRecieve);
    },
    displaymessage: function(msg) {
        var str = "<ul>";
        var arr = [];
        var container = this.container;
        for (var mess = 0; mess < 25; mess++) {
            if (msg.Data[mess] == null || msg.Data[mess] == undefined) break;
            str += "<li><div><span class=\"avartar\">" +
                        "<img src=\"" + unescape(msg.Data[mess].Avartar) + "\" alt=\"" + unescape(msg.Data[mess].Username) + "\" title=\"" + unescape(msg.Data[mess].Username) + "\" />" +
                        "</span><span class=\"name\" " + (msg.Data[mess].IsOwner ? "style=\"color:red\"" : (msg.Data[mess].IsAmbassador ? "style=\"color:green\"" : '')) + ">" + unescape(msg.Data[mess].Username) + " <span style=\"font-size:10px\">(" + msg.Data[mess].ChatDate + ")</span><span> say: </span></span>" +
                        "<span class=\"message\">" + escapeToHTML(unescape(msg.Data[mess].Message)) + "</span></div></li>";
        }
        str += "</ul>";
        var temp = $("<div></div>").html(str);
        if (temp.html().toLowerCase() != $(container + " .ggzmainchat .layout .mainMessage").html().toLowerCase()) {
            googalzchat.showStatus("update message..");
            $(container + " .ggzmainchat .layout .mainMessage").html(str);
            googalzchat.scrollDown();
        }
    },
    replaceEmoticon: function(msg) {
    },
    displayMemberList: function(display) {
        var container = this.container;
        if (display != undefined) this.showmemberlist = !display;
        if (this.showmemberlist) {
            this.showmemberlist = false;
            $(container + ' .ggzmainchat .mainMemList').fadeOut();
        } else {
            this.showmemberlist = true;
            $(container + ' .ggzmainchat .mainMemList').fadeIn();
        }
    },
    showStatus: function(msg, css) {
        var container = this.container;
        clearTimeout(googalzchat.interval_status);
        if (css == undefined || css == null) css = { backgroundColor: '#fff', zIndex: 20 };
        $(container + " .ggzmainchat .layout .status").removeAttr("style")
        .show()
        .html('<img src="/content/st/im/waiting.gif" alt="waiting" width="14" height="14" /> ' + msg)
        .css(css);

    },
    hideStatus: function() {
        var container = this.container;
        $(container + " .ggzmainchat .layout .status").fadeOut("fast");
    }
};


