var mailingList = {
    _formEmpty: true,
    _sending: false,

    msg: {
        start: 'Мы начинаем <s>КВН</s> рассылку',
        stop: 'Закончили <s>апплодировать</s> рассылку',
        resetSuccess: 'Список обновлен!',
        testSent: 'Письмо успешно отправлено!'
    },

    emailLabelId: '#mailing-list-email-',

    css: {
        errorClass: 'mailing-list-email-error',
        sentClass: 'mailing-list-email-sent'
    },

    formEmpty: function(isEmpty) {
        if ('undefined' != typeof isEmpty) {
            this._formEmpty = isEmpty;
        } else {
            return this._formEmpty;
        }
    },

    viewMail: function(id) {
        var ajax = new leto.ajax('/mailing-list/mail/ajax-view/');
        ajax.onSuccess = function(html) {
            $('#mailing-list-mails').html(html);
        }
        ajax.query({ mailId: id });
    },

    listMails: function() {
        var ajax = new leto.ajax('/mailing-list/mail/ajax-list/');
        ajax.onSuccess = function(html) {
            $('#mailing-list-mails').html(html);
        }
        ajax.query();
    },

    useAsTemplate: function(id) {
        if (!this.formEmpty()) {
            if (!confirm('Форма заполнена, несохраненные данные будут утеряны')) {
                return false;
            }
        }

        var ajax = new leto.ajax('/mailing-list/mail/ajax-form/');
        var t = this;
        ajax.onSuccess = function(html) {
            //размещаем полученную заполненную форму
            //переключаем интерфейс на вкладку с ней
            //отмечаем, что в форме несохраненные данные
            //первую вкладку переключаем на список писем
            $('#mailing-list-form').html(html);
            $('#mailing-list-tabs').tabs('select', 'mailing-list-form');
            t.formEmpty(false);
            t.listMails();
        }
        ajax.query({ mailId: id });
    },

    saveMail: function(form, keep) {
        var ajax = new leto.ajax('/mailing-list/mail/ajax-save/');
        ajax.onSuccess = function(id) {
            if (!keep) form.submit();
            $('#mailig-list-mail-id').val(id);
        }

        ajax.onError = function(error) {
            leto.box(0, error);
        }

        ajax.query({ f: form });
    },

    select: function(form) {
        var ajax = new leto.ajax('/mailing-list/list/ajax-select/');
        ajax.onSuccess = function(html) {
            $('#mailing-list-select').html(html);
        }
        ajax.query({ f: form });
    },

    temp2result: function(form) {
        var ajax = new leto.ajax('/mailing-list/list/ajax-temp2result/');
        var t = this;
        ajax.onSuccess = function(html) {
            $('#mailing-list-select').html(html[0]);
            //$('#mailing-list-result').html(html[1]);

            t.html.replaceResult(html[1]);

            $('#mailing-list-accordion').accordion('activate', 0);
        }
        ajax.query({ f: form });
    },

    add2result: function(email, name) {
        var ajax = new leto.ajax('/mailing-list/list/ajax-add2result/');
        var t = this;
        ajax.onSuccess = function(htmlResultList) {

            //alert(html);
            t.html.replaceResult(htmlResultList);
            t.html.saveTabAcc();
        }

        ajax.onError = function(error) {
            leto.box(0, error);
        }

        ajax.query({ 'email': email, 'name': name });
    },

    toggleSend: function(sending) {
        //если нет сопоставления списку - предупредим!
        if (!sending && !$('#mailing-list-listId').val() && !confirm('Список не сохранен, отписаться будет невозможно никогда и во веки веков. Продолжить?')) {
            return false;
        }

        if ('undefined' != typeof sending) {
            this._sending = sending;
        } else {
            this._sending = !this._sending;
        }

        leto.box(1, this._sending ? this.msg.start : this.msg.stop);
        if (this._sending) {
            var form = this.html.saveTabAccForm(); //сохраняем текущее состояние формы
            this.send(form); //начинаем отправку
        }
    },

    send: function(form) { //форма может придти при начале рассылки см. пред. ф-цию
        var ajax = new leto.ajax('/mailing-list/list/ajax-send/');
        var t = this;
        ajax.onSuccess = function(r) {
            if (r.stop) {
                //окончание рассылки
                t.toggleSend(false);

                //сохраним ВСЕ в БД
                var form = $('#mailing-list-tab-acc').get(0);
                t.saveMail(form, true);
            }

            else {
                t.setEmailStatus(r.email, r.sent);
                if (t._sending) {
                    t.send(null);
                }
            }
        }
        ajax.onError = function(error) {
            leto.box(0, error);
        }
        ajax.query({ 'form': { 'form': form }});
    },

    setEmailStatus: function(email, sent) {
        email = email.replace(/\./g, '\\.');
        email = email.replace('@', '\\@');
        $(this.emailLabelId + email).parent().addClass(sent ? this.css.sentClass : this.css.errorClass);
    },

    resetStatus: function(resetSent) {
        var ajax = new leto.ajax('/mailing-list/list/ajax-reset-status/');
        var t = this;
        ajax.onSuccess = function(html) {
            leto.box(1, t.msg.resetSuccess);
            t.html.replaceResult(html, true);
            //сохраняем ВСЕ
            t.html.saveTabAccForm();
        }

        ajax.onError = function(error) {
            leto.box(0, error);
        }
        ajax.query({ 'resetSent': resetSent });
    },

    sendTest: function(form, email) {
        var ajax = new leto.ajax('/mailing-list/list/ajax-test-send/');
        var t = this;
        ajax.onError = function(error) {
            leto.box(0, error);
        }
        ajax.onSuccess = function() {
            leto.box(1, t.msg.testSent);
        }
        ajax.query({ 'form': form, 'email':  email });
    },

    html: {
        replaceResult: function(html, keepListId) {
            $('#mailing-list-result').html(html);

            if ('undefined' == typeof resetListId) {
                $('#mailing-list-listId').val('');
            }
        },

        saveTabAccForm: function() {
            var form = $('#mailing-list-tab-acc').get(0);
            mailingList.saveMail(form, true);
            return form;
        }
    },

    clearResultList: function(form) {
        var ajax = new leto.ajax('/mailing-list/list/ajax-clear-result/');
        var t = this;
        ajax.onSuccess = function(html) {
            t.html.replaceResult(html);
        }
        ajax.query({ f: form });
    },

    list: {
        save: function(listId, listName) {
            var ajax = new leto.ajax('/mailing-list/list/ajax-list-save/');
            var t = mailingList;

            ajax.onError = function(error) {
                leto.box(0, error);
            }
            ajax.onSuccess = function(r) {
                leto.box(1, t.msg.testSent);

                if (-1 == listId) {

                    //сохранить форму
                    mailingList.html.saveTabAccForm();

                    //обновить списочек
                    mailingList.html.replaceResult(r.html);

                    //обновить mail_list_id
                    $('#mailing-list-listId').val(r.listId);
                }
            }
            ajax.query({ 'listId': listId, 'listName':  listName });

        }
    }
};


