if (window.disqus === undefined) {
    var disqus = {};
}

disqus.messagesx = (function(){
    var self = {};

    self.user_id = 0;
    self.messages = [];
    self.unread_count = 0;

    var message_types = {
        1: 'PLAIN_MESSAGE',
        2: 'AB_PLAIN_MESSAGE',
        3: 'ACHIEVEMENT_MESSAGE',
        4: 'PRO_REGISTER_MESSAGE'
    };

    // Formatters return a $('li') object.
    var message_formatter = {
        'DEFAULT': function(message) {
            return $("<li>"+message.formatted.text.replace(/<br\s*\/?>/gi, "")+"</li>");
        },
        'PLAIN_MESSAGE': function(message) {
            return $("<li>"+message.formatted.text.replace(/<br\s*\/?>/gi, "")+"</li>");
        },
        'AB_PLAIN_MESSAGE': function(message) {
            if (window.AB_TESTS !== undefined) {
                AB_TESTS.message = message.formatted.text;
            }
            return $("<li class='message-path-"+message.formatted.path+"'>"+message.formatted.text.replace(/<br\s*\/?>/gi, "")+"</li>");
        },
        'ACHIEVEMENT_MESSAGE': function(message) {
            return $("<li>"+message.formatted.text+"</li>");
        },
        'PRO_REGISTER_MESSAGE': function(message) {
            return $("<li>"+message.formatted.text.replace(/<br\s*\/?>/gi, "")+"</li>");
        }
    };

    var insert_messages = function() {
        var $list = $('#message-list ul');
        $.each(self.messages, function(index, message) {
            // continue to next message if message is not a plain message
            if (message.type != 1) {
                return true;
            }
            var formatter = (!!message_types[message.type])?message_formatter[message_types[message.type]]:message_formatter.DEFAULT;
            var $li = formatter(message);
            $li.addClass("message message-"+message.theme);
            $li.attr('id', 'message-'+message.id);
            var $a = $("<a href='#' class='messages-close'>X</a>");
            $li.append($a);
            $a.click(function(e) {
                e.preventDefault();
                $(this).parent().remove();
                DISQUS.sexyapi.messagesx.markRead({
                    data: {
                        message: message.id
                    }
                });
            });
            $list.append($li);
        });
    };

    self.init = function(user_id) {
        self.user_id = user_id;

        DISQUS.sexyapi.messagesx.unread({
            data: {
                user: 'username:'+self.user_id
            },
            success: function(data) {
                self.unread_count = data.count;
                self.messages = data.messages;
                insert_messages();
            }
        });
    };

    return self;
})();

