﻿function g_mail_message_discussion_count_chars(elem, charleftId) {
    var jelem = j$(elem);
    var elemCharsLeft = j$("#" + charleftId);
    var countLeft = 1000 - jelem.val().length;
    elemCharsLeft.text(g_tr.message_chars_left + countLeft);
    if (countLeft < 0) {
        elemCharsLeft[0].style.color = "red";
    } else {
        elemCharsLeft[0].style.color = "black";
    }
}

function g_mail_message_discussion_send_message(mesgtextAreaId) {
    var txtarea = j$("#"+mesgtextAreaId);
    var txt = txtarea.val();
    var countLeft = 1000 - txtarea.val().length;
    if (countLeft < 0) {
        alert(g_tr.message_post_limit);
        return;
    }
    txtarea.val("");

    if (isSet(global_connection)) {
        var discussionMgr = global_connection.mailDiscussionManager;
        discussionMgr.sendMailToDiscussion(discussionMgr.currentDiscussion, txt);
    }
}

function g_loadAllMessages() {
    //j$("#mail_new_message").hide();
    g_mail_discussion_show_panel("mail_message_panel");

    if (isSet(global_connection)) {
        global_connection.mailDiscussionManager.loadAllDiscussions();
    }
}

function g_createNewMessage() {
    g_mail_discussion_show_panel("mail_new_message");
    var destobj = j$("#mail_destination");
    if (isSet(global_connection)) {
        global_connection.contactsManager.currentDiscussion = -1;
        var contacts = global_connection.contactsManager.contactList;
        var cbxobj = destobj;


        var len = cbxobj[0].options.length;
        for (var i = 0; i < len; i++) {
            cbxobj[0].options.remove(0);
        }

        for (var i = 0; i < contacts.length; i++) {
            if (contacts[i].type == "Contact") {
                var option = new Option(contacts[i].nickname, contacts[i].uniqueid);
                cbxobj[0].options.add(option);
            }
        }

        var txtarea = j$("#mail_message_discussion_post_textarea2");
        txtarea.val("");
        g_mail_message_discussion_count_chars(txtarea, 'mail_message_discussion_chars_left2');
    }
}


function g_openMailDiscussion(discussionid) {
    g_mail_discussion_show_panel("mail_message_discussion_panel");
    var txtarea = j$("#mail_message_discussion_post_textarea");
    txtarea.val("");
    g_mail_message_discussion_count_chars(txtarea, 'mail_message_discussion_chars_left');

    if (isSet(global_connection)) {
        global_connection.mailDiscussionManager.loadDiscussion(discussionid);
    }
}

function g_sendNewMessage(mesgtextAreaId) {
    var destobj = j$("#mail_destination");
    var textobj = j$("#" + mesgtextAreaId);

    var uuid = destobj.val();
    var nickname = destobj.text();
    var text = textobj.val();

    if (isSet(global_connection)) {
        var index = global_connection.contactsManager.getIndexByUUID(uuid);
        if (index > -1) {
            global_connection.mailDiscussionManager.sendMailToUUID(uuid, text);
        } else {
            alert(sformat(g_tr.message_contact_notfound, nickname));
        }
    }
}


function g_mail_discussion_show_panel(panelid) {
    j$("#mail_new_message").hide();
    j$("#mail_message_panel").hide();
    j$("#mail_message_discussion_panel").hide();
    j$("#" + panelid).show();
}



function MailDiscussionManager(con) {
    this.connection = con;
    this.discussions = new Array();
    this.currentDiscussion = -1;

    // add listeners
    con.messageListeners.addListener(new MessageListener("msg2", "*", "mail", global_DefaultSchema, internalHandleMailMessage, this));
}

MailDiscussionManager.prototype = {
    displayDiscussions: MailDiscussionManager_DisplayDiscussions,
    displayThisDiscussion: MailDiscussionManager_DisplayThisDiscussion,
    displayInsertDiscussion: MailDiscussionManager_DisplayInsertPosts,
    loadAllDiscussions: MailDiscussionManager_LoadAllDiscussions,
    loadDiscussion: MailDiscussionManager_LoadDiscussion,
    sendMailToUUID: MailDiscussionManager_SendMailToUUID,
    sendMailToDiscussion: MailDiscussionManager_SendMailToDiscussion,
    close: MailDiscussionManager_Close
}


function MailDiscussionManager_DisplayThisDiscussion(discussion_posts, peerNickname) {
    if (!isSet(discussion_posts)) {
        return;
    }

    var discussionTitle = j$("#mail_message_discussion_panel_title");
    if (typeof (peerNickname) != "undefined") {
        discussionTitle.text(g_tr.message_discussion_with + peerNickname);
    } else {
        discussionTitle.text(g_tr.message_discussion_with);
    }


    var divObj = j$("#mail_message_discussion_content");
    divObj.html("");
    var rowCount = discussion_posts.length;

    var htmlStr = "<div id='mail_message_discussion_content_marker'></div>"; // just put a marker
    for (var i = 0; i < rowCount; i++) {
        htmlStr += GetMailDisucssionHtml(discussion_posts[i]);
    }
    divObj.html(htmlStr);
}


function MailDiscussionManager_DisplayInsertPosts(discussion_posts) {
    if (!isSet(discussion_posts)) {
        return;
    }

    var divObj = j$("#mail_message_discussion_content_marker");
    //var oldHtml = divObj.html();
    var rowCount = discussion_posts.length;

    var htmlStr = "";
    for (var i = 0; i < rowCount; i++) {
        htmlStr += GetMailDisucssionHtml(discussion_posts[i]);
    }
    divObj.after(htmlStr);
}

function MailDiscussionManager_DisplayDiscussions(discussions) {
    if (!isSet(discussions)) {
        return;
    }

    var divObj = j$("#mail_message_content");
    divObj.html("");
    var rowCount = discussions.length;

    var htmlStr = "";
    for (var i = 0; i < rowCount; i++) {
        htmlStr += GetMailDiscussionSummaryHtml(discussions[i]);
    }
    divObj.html(htmlStr);

}


function GetMailDiscussionSummaryHtml(mailDiscussion) {
    var html = "<div><div class = 'mail_discussion' onmouseover=\"changeColors(this, '#ffffff','#CA0002')\" onmouseout=\"changeColors(this, 'Black','#ffffff')\" onclick=\"g_openMailDiscussion('" + mailDiscussion.discussionid + "');\" >";
    html += "<img src = '" + mailDiscussion.display_imageUrl + "' class='mail_discussion_image' />";
    html += "<span class='mail_discussion_nickname'>" + mailDiscussion.from_to + " " + mailDiscussion.display_nickname + ":</span><br/>";
    html += encodeHtml(mailDiscussion.text);
    html += "<br/><span class='mail_discussion_footer'>" + mailDiscussion.time + "</span><br/><br/>";
    html += "</div></div>";

    return html;
}

function GetMailDisucssionHtml(mailDiscussion) {
    var html = "<div><div class = 'mail_discussion_message' >";
    html += "<img src = '" + mailDiscussion.display_imageUrl + "' class='mail_discussion_image' />";
    html += "<span class='mail_discussion_nickname'>" + encodeHtml(mailDiscussion.display_nickname) + " </span>"
    html += encodeHtml(mailDiscussion.text);
    html += "<br/><span class='mail_discussion_footer'>" + mailDiscussion.time + "</span><br/><br/>";
    html += "</div>";
    html += "</div>";

    return html;
}

function MailDiscussionManager_Close() {
    var divObj = j$("#mail_message_content");
    divObj.html("");
    this.discussions = new Array();
}


function internalHandleMailMessage(sender, message, targetObject) {
    if (isSet(message.success) && message.success == "false") {
        alert(message.errcode + " - " + message.errmsg);
        return;
    }
    

    if (isSet(targetObject) && isSet(message.posts) && isSet(message.action)
        && (message.action == "Init" || message.action == "LoadAll")) {
        targetObject.discussions = message.posts;
        targetObject.currentDiscussion = -1;
        targetObject.displayDiscussions(targetObject.discussions);

    } else if (isSet(targetObject) && isSet(message.posts) && isSet(message.action)
        && (message.action == "LoadDiscussion")) {
        var thisDiscussions = message.posts;
        targetObject.currentDiscussion = parseInt(message.discussionid);
        targetObject.displayThisDiscussion(thisDiscussions, message.properties["peerNickname"]);
    }
    else if (isSet(targetObject) && isSet(message.posts) && isSet(message.action)
        && (message.action == "Send")) {
        msg_discussionid = parseInt(message.discussionid);
        if (targetObject.currentDiscussion == msg_discussionid) {
            targetObject.discussions.splice(0, 0, message.posts);
            var thisDiscussions = message.posts;
            targetObject.displayInsertDiscussion(thisDiscussions);
        }
        else if (targetObject.currentDiscussion == -1 && msg_discussionid >= 0) {
            g_openMailDiscussion(msg_discussionid);
        }
    }
    else if (isSet(targetObject) && isSet(message.posts) && isSet(message.direction)
        && (message.direction == "Received")) {
        msg_discussionid = parseInt(message.discussionid);
        if (targetObject.currentDiscussion == msg_discussionid) {
            targetObject.discussions.splice(0, 0, message.posts);
            var thisDiscussions = message.posts;
            targetObject.displayInsertDiscussion(thisDiscussions);
        }
    }
}

function MailDiscussionManager_LoadAllDiscussions() {
    var msg = createMailMessage(this.connection.nextMessageID, "LoadAll");
    this.connection.postMessageObject(msg);
}

function MailDiscussionManager_LoadDiscussion(discussionid) {
    var msg = createMailMessage(this.connection.nextMessageID, "LoadDiscussion", ""+discussionid);
    this.connection.postMessageObject(msg);
}

function MailDiscussionManager_SendMailToUUID(destinationUUID, text) {
    var msg = createMailMessage(this.connection.nextMessageID, "Send", null, destinationUUID, null, text);
    this.connection.postMessageObject(msg);
}

function MailDiscussionManager_SendMailToDiscussion(discussionid, text) {
    var msg = createMailMessage(this.connection.nextMessageID, "Send", "" + discussionid, null, null, text);
    this.connection.postMessageObject(msg);
}

