/**
 * jQuery IOL MessageList plugin file.
 */
(function($) {
    //MessageList class
    function MessageList($content,options) {
        this.messageList = $content;
        this.settings = $.extend({}, $.fn.messageList.defaults, options || {});
    }
    //MessageList class methods
    $.extend(MessageList.prototype, {
        /**
         * init()
         */
        init:function() {
            //find all message intems in list
            this.messageList.find('.message').each(
                    $.proxy(function(index,message) {
                        //message action init
                        this.initMessageAction($(message));
                    }, this));

           //selected action event attaching
            $('a[href="#markAsReadSelected"]').click($.proxy(this.markAsReadSelected, this));
            $('a[href="#markAsUnreadSelected"]').click($.proxy(this.markAsUnreadSelected, this));
            $('a[href="#deleteSelected"]').click($.proxy(this.deleteSelected, this));
            $('[data-action="removeDeletedSelected"]').click($.proxy(this.removeDeletedSelected, this));
            $('[data-action="moveToMessages"]').click($.proxy(this.moveToMessages, this));
            $('a[href="#emptyTrash"]').click($.proxy(this.emptyTrash, this));
        
            return this;
        },
        initMessageAction:function($message) {
            $message.find('input[type="checkbox"]').each(
                    function() {
                        $checkbox = $(this);
                        $checkbox.change(function() {
                            if ($(this).attr('checked')) {
                                $(this).parents('tr:eq(0)').addClass('selected');
                            }
                            else {
                                $(this).parents('tr:eq(0)').removeClass('selected');
                            }
                        });
                        if ($checkbox.attr('checked')) {
                            $(this).parents('tr:eq(0)').addClass('selected');
                        }
                        else {
                            $(this).parents('tr:eq(0)').removeClass('selected');
                        }

                    });

            $message.find("a.deleteAction").click($.proxy(this.deleteConversation, this));
            $message.find("a.readAction").click($.proxy(this.toggleReadStatus, this));
            $message.find("a.removeAction").click($.proxy(this.removeDeleted, this));
            $message.find("td.photo,td.attachment,td.username,td.body,td.date").click(function() {
                $tr = $(this).parent('tr');
                var href = $tr.find('a.conversationAction').attr("href");
                if (href) window.location = href;
            });
        },
        markAsReadSelected:function(event) {
            event.preventDefault();
            var messageIdList = [];
            var messageCUUIDList = [];
            this.messageList.find("input[type='checkbox']:checked").each(function() {
                $checkbox = $(this);
                var messageId = $checkbox.parents('tr.message').attr('id').replace('message_', '');

                //mark as read icon change
                $('#message_' + messageId).removeClass('new');

                messageIdList.push(messageId);
                messageCUUIDList.push($checkbox.val());

            });
            if (messageIdList.length == 0) return;

            $.ajax({
                type: "POST",
                url: rpcServerURL,
                data:{
                    "jsonrpc": "2.0",
                    "method": "/mailbox/markAsRead",
                    "params": {"messageIdList": messageIdList,"messageCUUIDList": messageCUUIDList},
                    "id": 1
                },
                success: function(jsonrpc) {
                    if (jsonrpc.result) {
                        Member.updateNewMessageCount(jsonrpc.result['mailboxNewMessageCount']);
                    }
                }
            });
        },
        markAsUnreadSelected:function(event) {
            event.preventDefault();
            var messageIdList = [];
            var messageCUUIDList = [];
            this.messageList.find("input[type='checkbox']:checked").each(function() {
                $checkbox = $(this);
                var messageId = $checkbox.parents('tr.message').attr('id').replace('message_', '');

                //mark as unread icon change
                $('#message_' + messageId).addClass('new');

                messageIdList.push(messageId);
                messageCUUIDList.push($checkbox.val());

            });
            if (messageIdList.length == 0) return;

            $.ajax({
                type: "POST",
                url: rpcServerURL,
                data:{
                    "jsonrpc": "2.0",
                    "method": "/mailbox/markAsUnread",
                    "params": {"messageIdList": messageIdList,"messageCUUIDList": messageCUUIDList},
                    "id": 1
                },
                success: function(jsonrpc) {
                    if (jsonrpc.result) {
                        Member.updateNewMessageCount(jsonrpc.result['mailboxNewMessageCount']);
                    }
                }
            });


        },
        deleteSelected:function(event) {
             event.preventDefault();
            //find all checked messages
            var messageIdList = [];
            this.messageList.find("input[type='checkbox']:checked").each(function() {
                $checkbox = $(this);
                var messageId = $checkbox.parents('tr.message').attr('id').replace('message_', '');
                messageIdList.push(messageId);
            });
            if (messageIdList.length == 0) return; //empty list stop action

            $.getJSON(rpcServerURL,
                    {
                        "jsonrpc": "2.0",
                        "method": "/mailbox/deleteSelectedConversations",
                        "params": {"messageIdList": messageIdList},
                        "id": 1
                    },
                    function(jsonrpc) {
                        if (jsonrpc.result) {
                            for (var i = 0; i < messageIdList.length; i++) {
                                $('#message_' + messageIdList[i]).fadeOut('fast', function() {
                                    $(this).remove;
                                });
                            }
                            Member.updateNewMessageCount(jsonrpc.result['mailboxNewMessageCount']);
                        }
                    });
        },
        moveToMessages:function(event){
             event.preventDefault();
             var messageIdList = [];
            this.messageList.find("input[type='checkbox']:checked").each(function() {
                $checkbox = $(this);
                var messageId = $checkbox.parents('tr.message').attr('id').replace('message_', '');
                messageIdList.push(messageId);
            });
            if (messageIdList.length == 0) return; //empty list stop action

             $.getJSON(rpcServerURL,
                    {
                        "jsonrpc": "2.0",
                        "method": "/mailbox/selectedMoveToMessages",
                        "params": {"messageIdList": messageIdList},
                        "id": 1
                    },
                    function(jsonrpc) {
                        if (jsonrpc.result) {
                            for (var i = 0; i < messageIdList.length; i++) {
                                $('#message_' + messageIdList[i]).fadeOut('fast', function() {
                                    $(this).remove;
                                });
                            }
                            Member.updateNewMessageCount(jsonrpc.result['mailboxNewMessageCount']);
                        }
                    });
        },
        removeDeleted:function(event) {

            event.preventDefault();
            $message = $(event.currentTarget);
            
            if (!confirm(this.settings.removeDeletedConfirmMessage)) return;

            var messageId = $message.attr('href').replace('#message_', '')
            $.getJSON(rpcServerURL,
                    {
                        "jsonrpc": "2.0",
                        "method": "/mailbox/removeDeletedConversation",
                        "params": {"messageId": messageId,"messageList":1},
                        "id": 1
                    },
                    function(jsonrpc) {
                        if (jsonrpc.result) {

                            $('#message_' + jsonrpc.result.messageId).fadeOut('fast', function() {
                                 $message.remove();
                            });

                        }
                    });


        },
        toggleReadStatus:function(event){
                event.preventDefault();
                $message = $(event.currentTarget);
                var messageId = $message.attr('href').replace('#message_', '')
                $.getJSON(rpcServerURL,
                        {
                            "jsonrpc": "2.0",
                            "method": "/mailbox/toggleReadStatus",
                            "params": {"messageId": messageId},
                            "id": 1
                        },
                        function(jsonrpc) {
                            if (jsonrpc.result) {
                                if (jsonrpc.result.readStatus == 'yes') {
                                    $('#message_' + jsonrpc.result.messageId).removeClass('new');
                                }
                                if (jsonrpc.result.readStatus == 'no') {
                                    $('#message_' + jsonrpc.result.messageId).addClass('new');
                                }

                                Member.updateNewMessageCount(jsonrpc.result['mailboxNewMessageCount']);

                            }
                        });
        },
        deleteConversation:function(event) {
            event.preventDefault();
            $message = $(event.currentTarget);
            var messageId = $message.attr('href').replace('#message_', '')
            $.getJSON(rpcServerURL,
                    {
                        "jsonrpc": "2.0",
                        "method": "/mailbox/deleteConversation",
                        "params": {"messageId": messageId,"messageListView":1},
                        "id": 1
                    },
                    function(jsonrpc) {
                        if (jsonrpc.result) {

                            $('#message_' + jsonrpc.result.messageId).fadeOut('fast', function() {
                                $(this).remove
                            });
                            Member.updateNewMessageCount(jsonrpc.result['mailboxNewMessageCount']);
                        }
                    });
        },
        removeDeletedSelected:function(event){
            event.preventDefault();
            $message = $(event.currentTarget);
            if (!confirm(this.settings.removeDeletedConfirmMessage)) return;
            //find all checked messages
            var messageIdList = [];
            this.messageList.find("input[type='checkbox']:checked").each(function() {
                $checkbox = $(this);
                var messageId = $checkbox.parents('tr.message').attr('id').replace('message_', '');
                messageIdList.push(messageId);
            });
            if (messageIdList.length == 0) return; //empty list stop action

             $.getJSON(rpcServerURL,
                    {
                        "jsonrpc": "2.0",
                        "method": "/mailbox/removeDeletedSelectedConversations",
                        "params": {"messageIdList": messageIdList},
                        "id": 1
                    },
                    function(jsonrpc) {
                        if (jsonrpc.result) {
                            for (var i = 0; i < messageIdList.length; i++) {
                                $('#message_' + messageIdList[i]).fadeOut('fast', function() {
                                    $message.remove();
                                });
                            }
                        }
                    });

        },
        emptyTrash:function(event){
            event.preventDefault();
             var messageIdList = [];
             if (!confirm(this.settings.emptyTrashConfirmMessage)) return;
            this.messageList.find("tr.message").each(function() {
                $message = $(this);
                var messageId = $message.attr('id').replace('message_', '');
                messageIdList.push(messageId);
            });
            if (messageIdList.length == 0) return; //empty list stop action

            $.getJSON(rpcServerURL,
                               {
                                   "jsonrpc": "2.0",
                                   "method": "/mailbox/removeDeletedSelectedConversations",
                                   "params": {"messageIdList": messageIdList},
                                   "id": 1
                               },
                               function(jsonrpc) {
                                   if (jsonrpc.result) {
                                       for (var i = 0; i < messageIdList.length; i++) {
                                           $('#message_' + messageIdList[i]).fadeOut('fast', function() {
                                               $message.remove();
                                           });
                                       }
                                   }
                               });
        }
    });

    //plugin code
    $.extend($.fn, {
        messageList:function(options) {

            var $this = $(this);

            $this.messageList = $this.data('messageList');
            if (!$this.messageList)
            {
			    $this.messageList  = new MessageList($this,options);
                $this.messageList.init();
                $this.data('messageList', $this.messageList);
            }
            return $this;
        }

    });
    //plugin defaults settings
    $.fn.messageList.defaults = {
        removeDeletedConfirmMessage:'Do you really want to remove deleted message?',
        emptyTrashConfirmMessage:'Do you really want to empty trash?'
    };
})(jQuery);





