var ComposeMessageDialog = function (settings) {

    var self = this;
    $.extend(this, settings);

    this.recipient = $("#message_id_recipient");
    this.body = $("#message_id_body");
    this.subject = $("#message_id_subject");

    this.dialog = $("#compose_message_dialog").dialog({
        autoOpen: false,
        title:'Wyślij wiadomość',
        width:400,
        modal:true
    });

    this.reply_mode = false;


    $(".compose-message").each(function () {
        $(this).click(function() {
            var link = $(this);
            self.open(link);
        });
    });

    this.search = new SearchBox({
        el: $(".user-autocomplete", this.dialog),
        url:settings.user_url,
        build_label:function(item) {
            var label = item.username;
            if (item.name) {
                label += ", " + item.name;
            }
            if (item.surname) {
                label += ' ' + item.surname;
            }
        },
        not_found_handler: function (search) {
            return [
                {label: 'Nie znaleziono użytkownika.', value:search,  action:'not_found', 'img': NOT_FOUND_IMAGE}
            ];
        },
        build_value:function(item) {
            return item.username;
        },
        render: function (ul, item) {
            return $( "<li></li>" )
                .data( "item.autocomplete", item )
                .append( "<a class='search-row'><div class='media'><img class='img' src='"+item.img+"'><div class='bd'><p>" + item.label  + "</p></div></div></a>")
                .appendTo( ul );
        },
        change: $.proxy(this.onUserChange, this),
        list: 'users'
    });

    $("#compose_message").submit(function () {
        var f = $(this);
        var url = self.reply_mode ? self.reply_url : self.message_url;
        $.post(url, $(this).serialize(),
            function (data) {
                if (data.success) {
                    self.dialog.dialog("close");
                    if (!data.is_authenticated) {
                        self.body.val('');
                        self.recipient.val('');
                        self.subject.val('');
                        AuthDialog.get().register(msgs["registration_required"]);
                    } else {
                        window.location.reload();
                    }
                } else {
                    show_errors(f, data);
                }
            },
        "json");

        return false;
    });
};

ComposeMessageDialog.prototype = {
    onUserChange: function (event, ui) {

    },

    reply: function (link) {
        var self = this;
        var msg_data = link.data("message");
        if (msg_data) {
            var message_id = msg_data.message_id;
            if (message_id != null) {
                this.reply_mode = true;
                $.ajax({
                    url: this.reply_data_url,
                    type: "GET",
                    data: {
                        message_id: message_id
                    },
                    dataType: "json",
                    success:function (data) {
                        if (data.success) {
                            $("#message_id_message_id").val(message_id);
                            self.body.val(data.body);
                            self.subject.val(data.subject);
                            self.recipient.val(data.recipient);
                            $("#compose_message_dialog").dialog("open");
                        }
                    }
                });
            }
            return true;
        } else {
            self.reply_mode = false;
            return false;
        }
    },
    toUser: function (link) {
        var user_data = link.data("user");
        if (user_data) {
            this.recipient.val(user_data.username);

        }
        return false;
    },
    open: function (link) {
        if (!this.reply(link) && !this.toUser(link)) {
            $("#compose_message_dialog").dialog("open");
        }
    }
};
