Vetstoria.privatemessages = new(new Class({

    __construct: function () {

        this.folders = ['Inbox', 'Sent', 'Draft', 'Trash'];
        this.contextualmenu_messages = [];
        this.contextualmenu_unread_messages = [];
        this.debug = [];
        this.draft_message = false;
    },
    init: function () {

        console.log('Vetstoria.privatemessages.init');

    },
    //Check if a folder exists
    folder_exists: function (folder) {

        var k, a = this.folders;

        for (k in a)
        if (a[k] == folder) return true;

        return false;
    },
    db_select_all: function (owner_type, owner_id) {

        console.log("Vetstoria.privatemessages : db_select_all");
        var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/get');

        if (getData.state == 1) return null;

		if(getData.data!="null") return getData.data;
		else return [];
    },
    db_select_folder_search: function (owner_type, owner_id, folder, page, search) {

		var searchString = JSON.stringify({"search_text":search});
        var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/get/' + folder + '/' + page + '/search', searchString);

        if (getData.state == 1) return null;

		if(getData.data!="null") return getData.data;
		else return [];
    },
    db_select_folder_search_count: function (owner_type, owner_id, folder, search) {

		var searchString = JSON.stringify({"search_text":search});
        var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/count/' + folder + '/search', searchString);

        if (getData.state == 1) return null;

		if(getData.data!="null") return getData.data;
		else return 0;
    },
    db_select_folder_page: function (owner_type, owner_id, folder, page) {

        console.log("Vetstoria.privatemessages : db_select_all");
        var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/get/' + folder + '/' + page);

        if (getData.state == 1) return null;

		if(getData.data!="null") return getData.data;
		else return [];
    },    
    db_select_folder: function (owner_type, owner_id, folder) {

        console.log("Vetstoria.privatemessages : db_select_all");
        var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/get/' + folder);

        if (getData.state == 1) return null;

		if(getData.data!="null") return getData.data;
		else return [];
    },
    db_get_folder_count: function (owner_type, owner_id, folder) {

        console.log("Vetstoria.privatemessages : db_select_all");
        var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/count/' + folder);

        if (getData.state == 1) return null;

		if(getData.data!="null") return getData.data;
		else return 0;
    },
    db_add: function (owner_type, owner_id, message_object) {

        console.log('Vetstoria.privatemessages : db add message_object : ', message_object);
        var data_string = JSON.stringify(message_object);

        return Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/sendmessage', data_string);

    },
    db_save: function (owner_type, owner_id, message_object) {

        console.log('db add message_object : ', message_object);
        var data_string = JSON.stringify(message_object);

        return Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/savemessage', data_string);
    },
    db_delete: function (owner_type, owner_id, selectID) {

        if (selectID.id) {
            var selectID = JSON.stringify(selectID);
            Vetstoria.json_command_async('messagebox/' + owner_type + '/' + owner_id + '/delete/', selectID);
        }
        else {
            Vetstoria.json_command_async('messagebox/' + owner_type + '/' + owner_id + '/delete/' + selectID);
        }

    },
    db_change_folder: function (owner_type, owner_id, selectID, folder) {

        if (selectID.id) {
            var selectID = JSON.stringify(selectID);
            Vetstoria.json_command("messagebox/" + owner_type + "/" + owner_id + "/move/" + folder, selectID);
        } else {
            Vetstoria.json_command("messagebox/" + owner_type + "/" + owner_id + "/move/" + selectID + "/" + folder);
        }

    },
    db_read: function (owner_type, owner_id, selectId) {
        if (selectId.id) {
            var selectId = JSON.stringify(selectId);
            Vetstoria.json_command_async("messagebox/" + owner_type + "/" + owner_id + "/read/", selectId);
        }
        else {
            Vetstoria.json_command_async("messagebox/" + owner_type + "/" + owner_id + "/read/" + selectId);
        }

    },
    db_unread: function (owner_type, owner_id, selectId) {
        if (selectId.id) {
            var selectId = JSON.stringify(selectId);
            Vetstoria.json_command_async("messagebox/" + owner_type + "/" + owner_id + "/unread/", selectId);
        }
        else {
            Vetstoria.json_command_async("messagebox/" + owner_type + "/" + owner_id + "/unread/" + selectId);
        }
    },

    db_user_unread_count: function (owner_type, owner_id) {
		var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/getuserunreadcount');
		if(getData!="null" && getData.state==0 && getData.data!="null") return getData.data;
		else return false;
    },
    
    db_subuser_unread_count: function (owner_type, owner_id, selectId) {
		var getData = Vetstoria.json_command('messagebox/' + owner_type + '/' + owner_id + '/getsubuserunreadcount');
		if(getData!="null" && getData.state==0 && getData.data!="null") return getData.data
		else return false;
    },

    //throw a confirm popup if busy 	
    busy_confirm: function () {

        var question = 'You are about to leave while it seems you are processing an important thing. Are you sure you want to quit ?';
        var prt = this;

        $.msgbox(question, {
            type: "confirm",
            buttons: [{
                type: "submit",
                value: "Yes"
            },
            {
                type: "submit",
                value: "No"
            }]
        }, function (result) {
            if (result === "Yes") {

            }
        });
    },

    get_contextualmenu_messages: function (owner_type, owner_id) {

        console.log("Vetstoria.privatemessages : get the last messages");
        var messages = Vetstoria.json_command('messagebox/' + Vetstoria.session.data.session_type + '/' + Vetstoria.session.get().id + '/get');
        var prt = this;
        if (messages.state == 1) {
            return false;
        }
        if (messages.data == "null") {
            prt.display_contextualmenu_messages();
            return false;
        }
        for (var i = 0, j = messages.data.length; i < j; i++) {
            if (messages.data[i].folder.toLocaleLowerCase() == 'inbox') {
                this.contextualmenu_messages.push(messages.data[i]);
                if (messages.data[i].read == 0) {
                    this.contextualmenu_unread_messages.push(messages.data[i]);
                }
            }
        }

        this.contextualmenu_messages = this.contextualmenu_messages.length > 10 ? this.contextualmenu_messages.slice(0, 9) : this.contextualmenu_messages;
        this.contextualmenu_unread_messages = this.contextualmenu_unread_messages.length > 10 ? this.contextualmenu_unread_messages.slice(0, 9) : this.contextualmenu_unread_messages;


        this.display_contextualmenu_messages();
        this.check_new_contextualmenu_messages();

    },
    display_contextualmenu_messages: function () {

        var $ul = $("<ul/>");
        var prt = this;
        var divWidth = 420;
        if (this.contextualmenu_messages.length == 0) {
            var $span = $("<span style='padding:5px 20px;display:block'/>").text("No new messages.");
            var $read = $("<a/>").text("See all").css({
                "cursor": "pointer",
                "list-style": "none"
            });

            //   $("div.user_info div.messages").empty().append($span).append($("<hr/>")).append($("<div style='padding:0 0 5px 35px;'/>").append($read));
            $("div.user_info div.messages").empty().append($span).append($("<hr/>")).append($("<div style='padding:0 0 5px 35px;'/>").append($read));
            return;
        }

        for (var i = 0, length = this.contextualmenu_messages.length; i < length; i++) {

            var $li = $("<li/>").html(this.contextualmenu_messages[i].title);
            var $date = $("<em/>").attr("rel", this.contextualmenu_messages[i].date).addClass("timestamp");

            if (this.contextualmenu_messages[i].read == 0) {
                $li.addClass("unread");
            };
            (function () {
                var id = prt.contextualmenu_messages[i].id;
                $li.click(function () {
                    prt.show_contextualmenu_message_content(id);
                    prt.db_read(Vetstoria.session.data.session_type, Vetstoria.session.get().id, id);
                    $(this).removeClass("unread");
                });
            })()

            $li.append($date);
            $ul.append($li);

        }

        if (this.contextualmenu_messages.length != 0) {

            var $read = $("<a/>").text("Read all").css({
                "cursor": "pointer",
                "list-style": "none"
            }).click(function () {
                var selectId = {};
                selectId.id = [];
                if (prt.contextualmenu_unread_messages.length == 0) {
                    return false;
                }

                for (var i = 0, j = prt.contextualmenu_unread_messages.length; i < j; i++) {
                    selectId.id.push(prt.contextualmenu_unread_messages[i].id);
                }

                prt.db_read(Vetstoria.session.data.session_type, Vetstoria.session.get().id, selectId);
                $(this).parents("div.messages").find("li.unread").removeClass("unread");
            });

            $("div.user_info div.messages").empty().append($ul).append($("<hr/>")).append($("<div style='padding:0 0 5px 35px;'/>").append($read));
            $("div.user_info li.messages").find("a").text("Messages (" + prt.contextualmenu_unread_messages.length + ")");

        }

    },
    show_contextualmenu_message_content: function (id) {

        var message = this.contextualmenu_messages;

        $.each(message, function (i) {

            if (message[i].id == id) {

                var sender = '<div class="ui card mini clinic"><div class="image"><a href="javascript:;"><img src="" alt="" style="margin:5px"/></a></div><div class="information"><p class="name"><a href="javascript:;">' + 'firstname' + ' ' + 'lastname' + '</a></p><p class="name"><a href="javascript:;"></a></p><p class="meta"><a href="javascript:;"></a></p></div><div class="toolbar"></div></div>';
                var title = message[i].title;
                var content = message[i].content;
                var date = message[i].date;
                var str = '<table width="500" border="0" cellspacing="10" cellpadding="0" style="font-size:15px;color:#666666"><tr><td width="100" align="right"><label style="font-weight:bold;padding-right:10px;">sender:</label></td><td width="400">' + sender.toString() + '</td></tr><tr><td align="right"><label style="padding-right:10px;font-weight:bold;">title:</label></td><td>' + title + '</td></tr><tr><td align="right"><label style="font-weight:bold;padding-right:10px;">date:</label></td><td>' + date + '</td></tr><tr><td align="right" valign="top"><label style="font-weight:bold;padding-right:10px;">content:</label></td><td>' + content + '</td></tr></table>';
                jQuery.facebox(str);

            }
        });
    },
    check_new_contextualmenu_messages: function () {

        var prt = this;

        console.log("Vetstoria.privatemessages : get");

        setInterval(function () {

            console.log("Vetstoria.privatemessages : get new messages");

            $.get("messagebox/" + Vetstoria.session.data.session_type + '/' + Vetstoria.session.get().id + "/get/", function (json) {

                if (json.state != 0) return;

                if (json.data == "null") {
                    prt.contextualmenu_messages = [];
                    prt.display_contextualmenu_messages();

                    return;
                }

                var temp = [],
                    unread_temp = [];

                for (var i = 0, j = json.data.length; i < j; i++) {
                    if (json.data[i].folder.toLocaleLowerCase() == 'inbox') {
                        temp.push(json.data[i]);
                        if (json.data[i].read == 0) {
                            unread_temp.push(json.data[i]);
                        }
                    }
                }

                temp = temp.length > 10 ? temp.slice(0, 9) : temp;
                unread_temp = unread_temp > 10 ? unread_temp.slice(0, 9) : unread_temp;

                if (JSON.stringify(prt.contextualmenu_messages) != JSON.stringify(temp)) {
                    prt.contextualmenu_messages = temp;
                    prt.contextualmenu_unread_messages = unread_temp;
                    prt.display_contextualmenu_messages();
                }

            });

        }, 30000);
    }

}));
