﻿function MsgsLoadUsers() {
    var url = "/widgets/services/user/messages.asmx/GetUsersList";

    var data = {};

    $.ajax({
        url: url,
        data: JSON.stringify(data),
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataFilter: function (data) { return data; },
        success: function (data) {
            console.log(data);
            var d = data.d;
            if (d.length > 0) {
                for (var i = 0; i < d.length; i++) {
                    MsgsAppendUser(d[i]);
                }
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // alert(textStatus);
        }
    });
}

function MsgsAppendUser(item) {

    var pane = $('.scroll-pane-left');
    var content = pane.data('jsp').getContentPane();

    var checkID = "msgs-user-" + item.FromID;
    var div = $("#" + checkID);

    if (div.length == 0) {
        div = $("<div id=\"" + checkID + "\"></div>").addClass("messages-nicks-item");
        div.addClass("from-user");
        content.append(div);
        div.click(MsgsNickClick);
    }
    div.text("");
    var imgSrc = "/images/usericon.ashx?id=" + item.FromID + "&width=30&height=30";
    var img = $("<img />").attr("src", imgSrc);
    div.append(img);
    var nick = $("<span/>").text(item.FromName);
    div.append(nick);
    if (item.UnreadCount > 0 && !div.hasClass("selected")) {
        div.append($("<span class=\"messages-count\"></span>").text("(" + item.UnreadCount.toString() + ")"))
        if (!div.hasClass("new")) {
            div.addClass("new");
        }
    }

    var scroll = $('.scroll-pane-left').jScrollPane();
    var api = scroll.data('jsp');
    api.reinitialise;
    // api.scrollToPercentY(0);
}

function MsgsNickClick() {
    $("#messages-form-send").attr("disabled", "");
    $("#messages-form-body").focus();
    var div = $(this);
    var userID = parseInt($(this).attr("id").replace("msgs-user-", ""));
    var isSelected = div.hasClass("selected");
    if (!isSelected) {
        $("#messages-nicks .selected").removeClass("selected");
        div.addClass("selected");
        MsgsLoadMessages();
    }
    if (div.hasClass("new")) {
        div.removeClass("new");
    }
    var count = div.find(".messages-count");
    count.remove();
}

function MsgsLoadMessages() {
    var div = $("#messages-nicks .selected");
    if (div.length > 0) {
        var userID = parseInt(div.attr("id").replace("msgs-user-", ""));

        var url = "/widgets/services/user/messages.asmx/LoadMessages";

        var data = { FromID: userID };

        $.ajax({
            url: url,
            data: JSON.stringify(data),
            dataType: "json",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataFilter: function (data) { return data; },
            success: function (data) {
                console.log(data);
                var d = data.d;
                console.log(data);
                var pane = $('.scroll-pane');
                var content = pane.data('jsp').getContentPane();
                content.find(".my-message, .from-message").remove();
                if (d.length > 0) {
                    for (var i = 0; i < d.length; i++) {
                        MsgsAppendMessage(d[i]);
                    }
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                // alert(textStatus);
            }
        });
    }
}

function MsgsAppendMessage(item) {
    var pane = $('.scroll-pane');
    var content = pane.data('jsp').getContentPane();
    var id = "msgs-msg-" + item.MsgID;
    var div = $("<div id=\"" + id + "\"></div>").addClass("message").addClass(item.IsMy ? "my-message" : "from-message");
    var nick = $("<span></span>").addClass("nickname").text(item.IsMy ? "You" : item.FromName);
    var time = item.Date != "" ? $("<date></date>").text(item.Date + ":") : "";
    time = "";
    var body = $("<p></p>").addClass("body").text(item.Body);
    div.append(nick).append($("<span>&nbsp;</span>")).append(time).append(body);
    content.append(div);

    var scroll = $('.scroll-pane').jScrollPane();
    var api = scroll.data('jsp');
    api.reinitialise;
    api.scrollToPercentY(98);
}

function MsgsUpdate() {
    var div = $("#messages-nicks .selected");

    var userID = 0;
    if (div.length > 0) {
        userID = parseInt(div.attr("id").replace("msgs-user-", ""));
    }
    var url = "/widgets/services/user/messages.asmx/GetUpdates";
    var lastMsg = $("#messages-content .message:last");
    var lastID = 0;
    if (lastMsg.length > 0) {
        lastID = parseInt(lastMsg.attr("id").replace("msgs-msg-", ""));
    }

    var data = { LastMsgID: lastID, CurrentUserID: userID };

    $.ajax({
        url: url,
        data: JSON.stringify(data),
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataFilter: function (data) { return data; },
        success: function (data) {
            console.log(data);
            var d = data.d;
            var messages = d.Messages;
            var users = d.Users;
            if (messages.length > 0) {
                for (var i = 0; i < messages.length; i++) {
                    MsgsAppendMessage(messages[i]);
                }
            }
            if (users.length > 0) {
                for (var i = 0; i < users.length; i++) {
                    MsgsAppendUser(users[i]);
                }
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            // alert(textStatus);
        }
    });
}

var Messages = {
    NeedSetUser: false,
    StartUserID: 0,
    StartMessages: function (UserID) {
        var url = "/widgets/services/user/messages.htm";

        Messages.StartUserID = UserID;
        Messages.NeedSetUser = UserID != 0 && UserID;

        var msgs = $("#messages-root");

        if (msgs.length == 0) {
            $.ajax({
                url: url,
                success: function (data) {
                    var html = data;
                    var host = $("#host");
                    host.html(html);

                    Messages.CenterPopup();
                    Messages.LoadPopup();
                    Messages.InitEvents();

                    Messages.SelectUserByID(Messages.StartUserID);
                    MsgsLoadUsers();
                }
            });
        } else {
            Messages.CenterPopup();
            Messages.LoadPopup();

            Messages.SelectUserByID(Messages.StartUserID);

        }
    },
    InitEvents: function () {

        $("#backgroundPopup").click(function () {
            Messages.PopupSwitch();
        });

        $(function jspAuto() {
            $('.scroll-pane').jScrollPane({ autoReinitialise: true });
        });
        $(function () {
            $('.scroll-pane-left').jScrollPane();
        });
        $(function (jspScroll) {
            var scroll = $('.scroll-pane').jScrollPane();
            var api = scroll.data('jsp');
            $(function () {
                api.scrollToPercentY(98);
            });
        });

        $('.scroll-pane').bind('jsp-initialised', 'jspScroll');
        $('.scroll-pane').bind('jsp-initialised', 'jspAuto');
        $('.jspPane').resize('jspScroll');

        $("#messages-form-send").click(function () {
            var text = $("#messages-form-body").val();
            var userID = parseInt($("#messages-nicks .selected").attr("id").replace("msgs-user-", ""));
            var url = "/widgets/services/user/messages.asmx/PostMessage";

            var data = { ToID: userID, Body: text };
            var toID = userID;

            $.ajax({
                url: url,
                data: JSON.stringify(data),
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    console.log(data);

                    var item = {
                        Body: text,
                        Date: "",
                        FromID: 0,
                        FromName: "You",
                        IsMy: true,
                        MsgID: data.d
                    }

                    MsgsAppendMessage(item);
                    Messages.PutDialogOnTop(toID);

                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    // alert(textStatus);
                }
            });

            $("#messages-form-body").val("").focus();

            return false;
        });

        window.setInterval("MsgsUpdate();", 15 * 1000);
    },
    SelectUserByID: function (id) {
        var sel = "#msgs-user-" + id;
        var user = $(sel);
        var userID = id;
        if (user.length) {
            Messages.SetActiveUserByID(id);
        } else {
            var url = "/widgets/services/user/messages.asmx/GetUserByID";

            var data = { UserID: userID };

            $.ajax({
                url: url,
                data: JSON.stringify(data),
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    var usr = data.d;
                    MsgsAppendUser(usr);
                    Messages.SetActiveUserByID(usr.FromID);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    // alert(textStatus);
                }
            });
        }
    },
    SetActiveUserByID: function (id) {
        $("#messages-form-send").attr("disabled", "");
        $("#messages-form-body").focus();
        var sel = "#msgs-user-" + id;
        var div = $(sel);
        var userID = id;
        var isSelected = div.hasClass("selected");
        if (!isSelected) {
            $("#messages-nicks .selected").removeClass("selected");
            div.addClass("selected");
            MsgsLoadMessages();
        }
        if (div.hasClass("new")) {
            div.removeClass("new");
        }
        var count = div.find(".messages-count");
        count.remove();
    },
    PutDialogOnTop: function (id) {
        var sel = "#msgs-user-" + id;
        var div = $(sel);
        if (div.length) {
            var pane = $('.scroll-pane-left');
            var content = pane.data('jsp').getContentPane();
            content.prepend(div);

            var scroll = $('.scroll-pane-left').jScrollPane();
            var api = scroll.data('jsp');
            api.reinitialise;
            api.scrollToPercentY(0);

        }
    },
    PopupStatus: 0,
    CenterPopup: function () {
        //request data for centering  
        var windowWidth = document.documentElement.clientWidth;
        var windowHeight = document.documentElement.clientHeight;
        var popupHeight = $("#messages-root").height();
        var popupWidth = $("#messages-root").width();
        //centering  
        $("#messages-root").css({
            "position": "absolute",
            "top": windowHeight / 2 - popupHeight / 2,
            "left": windowWidth / 2 - popupWidth / 2
        });
        //only need force for IE6  

        $("#backgroundPopup").css({
            "height": windowHeight
        });
    },
    LoadPopup: function () {
        if (Messages.PopupStatus == 0) {
            $("#backgroundPopup").css({
                "opacity": "0.7"
            });
            $("#backgroundPopup").show();
            $("#messages-root").show();

            $("#messages-root").css('visibility', 'visible');
            $('#messages-root #maximize').css('visibility', 'hidden');
            Messages.PopupStatus = 1;
        }
    },
    DisablePopup: function () {
        //disables popup only if it is enabled  
        if (Messages.PopupStatus == 1) {
            $("#backgroundPopup").hide();
            $("#messages-root").css('visibility', 'hidden');
            $('#messages-root #maximize').css('visibility', 'visible');
            Messages.PopupStatus = 0;
        }
    },
    PopupSwitch: function () {
        if (Messages.PopupStatus == 0) {
            Messages.CenterPopup();
            Messages.LoadPopup();
        } else {
            Messages.DisablePopup();
        }
    } // function PopupSwitch() ...
}
