(function(window) {
    var callbacks = {
        attachBeginCallbackSubmit: function () {},
        attachEndCallbackSubmit: function () {}
    };
    var prontus = {
        prontusSubmit: false,
        setCallback: function (option, fn) {
            if (option == 'attachBeginCallbackSubmit') {
                callbacks.attachBeginCallbackSubmit = fn;
            } else if (option == 'attachEndCallbackSubmit') {
                callbacks.attachEndCallbackSubmit = fn;
            }
        }
    };

    // Similar a .submit() pero con callback de inicio y fin.
    $.fn.prontusSubmit = function (fn) {
        prontus.prontusSubmit = true;
        this.on("submit", function (e) {
            // Callback que se ejecuta al inicio.
            if (typeof callbacks.attachBeginCallbackSubmit == 'function') {
                callbacks.attachBeginCallbackSubmit(e);
            }

            // Callback principal.
            var returned = fn();

            // Callback que se ejecuta al final. Recibe como parámetro el evento y lo que retorno la funcion principal.
            if (typeof callbacks.attachEndCallbackSubmit == 'function') {
                callbacks.attachEndCallbackSubmit(e, returned);
            }

            // Si es false, retorna false para que no se envie el formulario.
            if (returned === false) {
                return false;
            }

            // Muestra el modal de guardando...
            if (document.getElementById('_accion').value != 'preview') {
                $('#modal-loading-mensaje').html('Por favor espera mientras Prontus guarda el artículo.');
                $('#modal-loading').modal({backdrop: 'static', keyboard: false});
            }
        });
    };

    // Solo se expone el objeto prontus.
    window.prontus = prontus;
})(window);
