/*
axs.Forms

Aquí viene el JS para tratar con formularios y elementos
Requiere jQuery

 */
var axs;
if (!axs) axs = {};
if (!axs.Forms) {
    axs.Forms = {};
}


$(document).ready(function () {
    /**
     * Sistema Dep, proporcionado y adaptado para AXS desde el original ZERFREX
     *
     * El sistema DepMaster permite que al cambiar el valor de un <select>, que llamaremos master,
     * se lea por AJAX una lista de valores y se coloquen en otro <select>, que llamaremos target.
     * El <select> que controla tiene que tener la clase css axjDepMaster, y los siguientes atributos:
     *
     * Obligatorios:
     * data-axs-dep-type   = El tipo de acción:
     *  - ajax      :: obtener los nuevos valores por ajax
     *  - copyval   :: copiar el valor de un select a otro
     * data-axs-dep-target = El selector (jQuery) del target
     * data-axs-dep-source = La fuente, depende del tipo:
     *  - Si type es 'ajax', es la URL del backend AJAX.
     *  - Si type es 'copyval', es el selector jQuery del select origen para copiar su valor
     *
     * Opcionales:
     * data-axs-dep-codeall = Este valor se le pasa al backend AJAX si el master estaba vacío.
     * data-axs-dep-default = Valor a seleccionar automáticamente después de cargar los valores del target.
     * data-axs-dep-disabletrigger = Si es 1, no emitir el evento change después de cargar los valores del target.
     */
    $(document).on('change', 'select.axjDepMaster', function (event) {
        var selval = $(this).val();
        var type = $(this).attr("data-axs-dep-type");
        var target = $(this).attr("data-axs-dep-target");
        var disabletrigger = $(this).attr("data-axs-dep-disabletrigger");

        if (type === 'ajax') {
            var all = $(this).attr("data-axs-dep-codeall");
            if (selval != '') {
                var source = $(this).attr("data-axs-dep-source") + selval;
            } else {
                if (all != '') {
                    var source = $(this).attr("data-axs-dep-source") + all;
                } else {
                    return;
                }
            }
            var value = $(this).attr("data-axs-dep-default");
            $.ajax(source, {
                    success: function (data) {
                        let objeto = JSON.parse(data);
                        $(target).each(function () {
                            $(this).html('');
                        });
                        $.each(objeto, function (k, v) {
                            $(target).each(function () {
                                $(this).append(new Option(v, k));
                            });
                        });
                        if (value != '') {
                            $(target).each(function () {
                                $(this).val(value);
                            });
                        }
                        if (disabletrigger != 1) {
                            $(target).trigger("change");
                        }
                    }
                }
            );
        } else if (type === 'copyval') {
            var source = $(this).attr("data-axs-dep-source");
            $(target).val($(source).val());
            if (disabletrigger != 1) {
                $(target).trigger("change");
            }
        }
    });
});
