var chatrequest = function (f, d, sFunc, fFunc) {
    if (typeof fFunc != 'function')
        fFunc = function () { };
    $.ajax({ url: "Chat.aspx/" + f, data: JSON.stringify(d), dataType: 'json', type: 'POST', contentType: "application/json; charset=utf-8", success: sFunc, error: fFunc });
};

function chatadd(a, chat) {
    if ($("#chatm_" + a.toString()).length == 0 && chat.Status.IsActive) {
        $("<div id=\"chatm_" + a.toString() + "\" class=\"chatcontainer\"><div id=\"chatbox\"" + (chat.Status.IsOpen?" class=\"chatbox_a\"":"") + "><span id=\"o_" + a.toString() + "\" class=\"chatname\">" + chat.User.Name + "</span><span id=\"c_" + a.toString() + "\" class=\"chatclose\"></span></div></div>").appendTo("#chat");
        $("#o_" + a.toString()).click(function (event) { mswitch(a); });
        $("#c_" + a.toString()).click(function (event) { cclose(a); });
    }
    if ($("#m_" + a.toString()).length == 0 && chat.Status.IsOpen) {
        $("<div id=\"m_" + a.toString() + "\" class=\"chatmsg\"><div class=\"chatcontent\" id=\"chat_" + a.toString() + "\"></div><div class=\"chatinput\"><textarea id=\"msg_" + a.toString() + "\" rows=\"2\" ></textarea><input type=\"button\" id=\"msgb_" + a.toString() + "\" value=\"SEND\" /></div><div class=\"chatmsgtop\"><span class=\"chatnametop\">" + chat.User.Name + "</span></div></div>").appendTo("#chatm_" + a.toString());
        $("#msg_" + a.toString()).keydown(function (event) { if (event.keyCode == '13') { if ($("#msg_" + a.toString()).val().length) sendd(a, $("#msg_" + a.toString()).val()); $("#msg_" + a.toString()).val(""); event.cancelBubble = true; return false; } });
        $("#msgb_" + a.toString()).click(function (event) { if ($("#msg_" + a.toString()).val().length) sendd(a, $("#msg_" + a.toString()).val()); $("#msg_" + a.toString()).val(""); });
    }

    if (!chat.Status.IsOpen) {
        $("#m_" + a.toString()).remove();
        $("#chatm_" + a.toString() + " > #chatbox").removeClass("chatbox_a");
    } else
        $("#chatm_" + a.toString() + " > #chatbox").addClass("chatbox_a");
    if (!chat.Status.IsActive)
        $("#chatm_" + a.toString()).remove();
}

function chatset(a, chat) {
    var msgs = "";
    chatadd(a, chat);
    for (var i = 0; i < chat.Messages.length; i++) {
        var bIsIncoming = a.toString() == chat.Messages[i].ActorID.toString();
        msgs += "<div class=\"" + (bIsIncoming ? "chatmsg_i" : "chatmsg_o") + "\"><div class=\"chatmsgdate\">" + chat.Messages[i].Timestamp.toString().substring(0,5) + "</div><div class=\"chatmsgmsg\">" + chat.Messages[i].Message + "</div><span class=\"chatarrow\"></span></div>";
    }
    if ($("#chat_" + a.toString()).length > 0) {
        $("#chat_" + a.toString()).html(msgs);
        $("#chat_" + a.toString()).scrollTop($("#chat_" + a.toString())[0].scrollHeight);
    }
}

function chatpopulate(chats) {
    for (var i = 0; i < chats.length; i++) {
        chatset(chats[i].ActorID, chats[i]);
    }
}

function chatcheck() {
    chatrequest("GetChats", {}, function (result) { chatpopulate(result.d); }, null);
}

function sendd(t, m) {
    chatrequest("SendChatMessage", { iDstActorID: t, sMessage: m }, function (result) { chatset(t, result.d); }, null);
}

function newchat(a) {
    chatrequest("AddChat", { iDstActorID: a }, function (result) { chatset(a, result.d); }, null);
}

function cclose(a) {
    chatrequest("CloseChat", { iDstActorID: a }, function (result) { chatset(a, result.d); }, null);
}

function mswitch(a) {
    chatrequest("SwitchChatMessages", { iDstActorID: a }, function (result) { chatset(a, result.d); }, null);
}

