<?php //Optimizaciones 25w12c
require_once("../../app/functions.php");
$pag = basename($_SERVER['PHP_SELF']);
gen_plantilla(true, $pag, true, true, 'Calendario', true, true);
?>


<section class="cristal" <?= (!get_config_usuario($_SESSION['id_usuario'], 'reducir_efectos_movimiento')) ? 'style="view-transition-name: cristal;"' : '' ?>>
    <section name="Calendario" method="post" class="flex column gap1 supercentrado">
        <h1 class="resaltado flex row supercentrado"><span class="animacion-izq-drch">🗓️</span> Calendario</h1>
        <section class="flex row gap1" style="align-items: flex-end;">
            <?php if (SISTEMA_INCIDENCIAS && $_SESSION['tipo_usuario'] != 'empleado'): ?>
                <button class="enlaces flex row gap05 btn-p" onclick="cargar_comprobar_incidencias()"
                    style="background-color: #fd9522;">
                    <svg xmlns="http://www.w3.org/2000/svg" id="ico-compr-incidencia" viewBox="0 0 448 512" width="1.5rem"
                        height="1.5rem">
                        <path
                            d="M224 0c-17.7 0-32 14.3-32 32l0 19.2C119 66 64 130.6 64 208l0 18.8c0 47-17.3 92.4-48.5 127.6l-7.4 8.3c-8.4 9.4-10.4 22.9-5.3 34.4S19.4 416 32 416l384 0c12.6 0 24-7.4 29.2-18.9s3.1-25-5.3-34.4l-7.4-8.3C401.3 319.2 384 273.9 384 226.8l0-18.8c0-77.4-55-142-128-156.8L256 32c0-17.7-14.3-32-32-32zm45.3 493.3c12-12 18.7-28.3 18.7-45.3l-64 0-64 0c0 17 6.7 33.3 18.7 45.3s28.3 18.7 45.3 18.7s33.3-6.7 45.3-18.7z" />
                    </svg>
                    Compr. incidencias
                </button>
            <?php endif; ?>
            <a href="<?= SITIO_CARPETA ?>/views/tables/fichajes" class="btn-p">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
                    <path
                        d="M352 224L352 320L480 320L480 224L352 224zM288 224L160 224L160 320L288 320L288 224zM96 384L96 160C96 124.7 124.7 96 160 96L480 96C515.3 96 544 124.7 544 160L544 480C544 515.3 515.3 544 480 544L160 544C124.7 544 96 515.3 96 480L96 384zM480 384L352 384L352 480L480 480L480 384zM288 480L288 384L160 384L160 480L288 480z" />
                </svg>
                Vista tabla
            </a>
            <a href="<?= SITIO_CARPETA ?>/views/tables/calendario_anual" class="btn-p">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
                    <path
                        d="M216 64C229.3 64 240 74.7 240 88L240 128L400 128L400 88C400 74.7 410.7 64 424 64C437.3 64 448 74.7 448 88L448 128L480 128C515.3 128 544 156.7 544 192L544 480C544 515.3 515.3 544 480 544L160 544C124.7 544 96 515.3 96 480L96 192C96 156.7 124.7 128 160 128L192 128L192 88C192 74.7 202.7 64 216 64zM216 176L160 176C151.2 176 144 183.2 144 192L144 240L496 240L496 192C496 183.2 488.8 176 480 176L216 176zM144 288L144 480C144 488.8 151.2 496 160 496L480 496C488.8 496 496 488.8 496 480L496 288L144 288z" />
                </svg>
                Vista anual
            </a>
            <?php if ($_SESSION['tipo_usuario'] == 'empleado'): ?>
                <a href="<?= SITIO_CARPETA ?>/views/forms/vacaciones" class="btn-p">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
                        <path d="M346.3 271.8l-60.1-21.9L214 448H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H282.1l64.1-176.2zm121.1-.2l-3.3 9.1 67.7 24.6c18.1 6.6 38-4.2 39.6-23.4c6.5-78.5-23.9-155.5-80.8-208.5c2 8 3.2 16.3 3.4 24.8l.2 6c1.8 57-7.3 113.8-26.8 167.4zM462 99.1c-1.1-34.4-22.5-64.8-54.4-77.4c-.9-.4-1.9-.7-2.8-1.1c-33-11.7-69.8-2.4-93.1 23.8l-4 4.5C272.4 88.3 245 134.2 226.8 184l-3.3 9.1L434 269.7l3.3-9.1c18.1-49.8 26.6-102.5 24.9-155.5l-.2-6zM107.2 112.9c-11.1 15.7-2.8 36.8 15.3 43.4l71 25.8 3.3-9.1c19.5-53.6 49.1-103 87.1-145.5l4-4.5c6.2-6.9 13.1-13 20.5-18.2c-79.6 2.5-154.7 42.2-201.2 108z" />
                    </svg>
                    Solicitar vacaciones
                </a>
            <?php endif; ?>
            <?php if ($_SESSION['tipo_usuario'] == 'admin'): ?>
                <a href="<?= SITIO_CARPETA ?>/views/forms/festivo" class="btn-p">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
                        <path
                            d="M224 64C241.7 64 256 78.3 256 96L256 128L384 128L384 96C384 78.3 398.3 64 416 64C433.7 64 448 78.3 448 96L448 128L480 128C515.3 128 544 156.7 544 192L544 480C544 515.3 515.3 544 480 544L160 544C124.7 544 96 515.3 96 480L96 192C96 156.7 124.7 128 160 128L192 128L192 96C192 78.3 206.3 64 224 64zM224 320C206.3 320 192 334.3 192 352L192 416C192 433.7 206.3 448 224 448L288 448C305.7 448 320 433.7 320 416L320 352C320 334.3 305.7 320 288 320L224 320z" />
                    </svg>
                    Añadir festivo
                </a>
            <?php endif; ?>
        </section>


        <section class="flex row gap1 row-column">
            <input type="hidden" name="mes" id="mes" value="<?= date("n") ?>">
            <input type="hidden" name="año" id="año" value="<?= date("Y") ?>">
            <section class="flex column" id="cont-cal-anterior" style="justify-content: flex-end;">
                <button type="button" id="anterior" class="btn-p">Anterior</button>
            </section>
            <section class="flex column gap05 justificado" id="cont-cal-nombre">
                <h2 class="rojo" id="mostrarmes"><?= match (date("n")) {
                    '1' => "Enero",
                    '2' => "Febrero",
                    '3' => "Marzo",
                    '4' => "Abril",
                    '5' => "Mayo",
                    '6' => "Junio",
                    '7' => "Julio",
                    '8' => "Agosto",
                    '9' => "Septiembre",
                    '10' => "Octubre",
                    '11' => "Noviembre",
                    '12' => "Diciembre"
                }
                    . " " . date("Y"); ?></h2>
                <?php $mostrar_apellidos = get_config('mostrar_apellidos_tabla'); ?>
                <label class="flex column gap05">
                    <datalist id="nombres">
                        <?php
                        $nombres = consulta("SELECT id, nombre, apellidos FROM empleados ORDER BY nombre;", [], true);
                        if (!empty($nombres)) {
                            for ($i = 0; $i < count($nombres); $i++) {
                                $nombre_completo = $mostrar_apellidos && !empty($nombres[$i]["apellidos"])
                                    ? $nombres[$i]["nombre"] . " " . $nombres[$i]["apellidos"]
                                    : $nombres[$i]["nombre"];
                                echo "<option value='" . $nombre_completo . "'>";
                                echo $nombres[$i]["id"];
                                echo "</option>";
                            }
                        }
                        // Añadir empleados eliminados si está activada la opción
                        if (get_config('mostrar_empleados_eliminados')) {
                            $nombres_eliminados = consulta("SELECT id_empleado, nombre FROM empleados_eliminados ORDER BY nombre;", [], true);
                            if (!empty($nombres_eliminados)) {
                                for ($i = 0; $i < count($nombres_eliminados); $i++) {
                                    echo "<option value='" . $nombres_eliminados[$i]["nombre"] . "'>" . $nombres_eliminados[$i]["id_empleado"] . " (Eliminado)</option>";
                                }
                            }
                        }
                        ?>
                    </datalist>
                    <?php
                    $placeholder = $mostrar_apellidos ? 'Nombre o apellidos' : 'Nombre';
                    //Comprobar si es empleado
                    if ($_SESSION['tipo_usuario'] != 'empleado') {
                        $bus = consulta("SELECT * FROM filtro_busqueda WHERE fecha=? AND id_usuario=? ORDER BY id DESC limit 1;", [date("Y-m-d"), $_SESSION['id_usuario']], true);
                        if (!empty($nombres)) {
                            // Si existe búsqueda guardada y tiene nombre, usarla. Si no, usar el primero por defecto.
                            if (!empty($bus) && !empty($bus[0]["nombre"])) {
                                echo '<input type="search" list="nombres" name="nombre" id="nombre" placeholder="' . $placeholder . '" value="' . $bus[0]["nombre"] . '" style="width:15rem">';
                            } else {
                                // Construir nombre completo del primero si no hay busqueda guardada
                                $nom_default = $mostrar_apellidos && !empty($nombres[0]["apellidos"])
                                    ? $nombres[0]["nombre"] . " " . $nombres[0]["apellidos"]
                                    : $nombres[0]["nombre"];
                                echo '<input type="search" list="nombres" name="nombre" id="nombre" placeholder="' . $placeholder . '" style="width:15rem" value="' . $nom_default . '">';
                            }
                        } else
                            echo '<input type="search" list="nombres" name="nombre" id="nombre" placeholder="' . $placeholder . '" style="width:15rem" value="">';
                    } else {
                        $nombre = consulta('SELECT nombre FROM empleados WHERE id=?', [$_SESSION['id_empleado']], true)[0]['nombre'];
                        if (!empty($nombre)) {
                            echo '<input type="hidden" name="nombre" id="nombre" placeholder="Nombre" value="' . $nombre . '">';
                        } else
                            echo '<input type="hidden" name="nombre" id="nombre" placeholder="Nombre" value="">';
                    }
                    ?>

                    <select name="empleado" id="empleado" style="display: none;">
                        <?php
                        $empleados = consulta("SELECT id, nombre, apellidos FROM empleados ORDER BY nombre, id;", [], true);
                        if (!empty($empleados))
                            for ($i = 0; $i < count($empleados); $i++) {
                                $nombre_select = $mostrar_apellidos && !empty($empleados[$i]["apellidos"])
                                    ? $empleados[$i]["nombre"] . " " . $empleados[$i]["apellidos"]
                                    : $empleados[$i]["nombre"];
                                echo "<option value='" . $empleados[$i]["id"] . "' " . ($_SESSION['tipo_usuario'] == 'empleado' && $_SESSION['id_empleado'] == $empleados[$i]["id"] ? 'selected' : '') . ">" . $nombre_select . "</option>";
                            }
                        // Añadir empleados eliminados si está activada la opción
                        if (get_config('mostrar_empleados_eliminados')) {
                            $empleados_eliminados = consulta("SELECT id_empleado, nombre FROM empleados_eliminados ORDER BY nombre;", [], true);
                            if (!empty($empleados_eliminados))
                                for ($i = 0; $i < count($empleados_eliminados); $i++) {
                                    $nombre_eliminado = $empleados_eliminados[$i]["nombre"] . " (Eliminado - ID: " . $empleados_eliminados[$i]["id_empleado"] . ")";
                                    echo "<option value='" . $empleados_eliminados[$i]["id_empleado"] . "'>" . $nombre_eliminado . "</option>";
                                }
                        }
                        ?>
                    </select></label>
            </section>
            <section class="flex column" id="cont-cal-siguiente" style="justify-content: flex-end;">
                <button type="button" id="siguiente" class="btn-p">Siguiente</button>
            </section>
        </section>
    </section>
    <section id="calendario"></section>
</section>
<section id="showdialog"></section>
<aside id="comprobarincidencia"></aside>
<script>
    window.onload = () => {
        const inputNombre = document.getElementById('nombre');
        const selectEmpleado = document.getElementById('empleado');
        const opciones = Array.from(selectEmpleado.options);

        let timeout;

        inputNombre.addEventListener('input', () => {
            clearTimeout(timeout);
            timeout = setTimeout(() => {
                const texto = inputNombre.value.toLowerCase().trim();
                if (!texto) return;

                // Función para normalizar texto (quitar acentos)
                const normalizar = (str) => str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
                const textoNorm = normalizar(texto);

                // Buscar coincidencia: primero exacta, luego parcial
                let mejorCoincidencia = null;
                let mejorPuntuacion = 0;

                for (const opt of opciones) {
                    const contenido = normalizar(opt.textContent);
                    let puntuacion = 0;

                    // Coincidencia exacta al inicio = mayor puntuación
                    if (contenido.startsWith(textoNorm)) {
                        puntuacion = 100;
                    }
                    // Contiene el texto = puntuación media
                    else if (contenido.includes(textoNorm)) {
                        puntuacion = 50;
                    }
                    // Buscar si alguna palabra coincide
                    else {
                        const palabrasBuscadas = textoNorm.split(' ');
                        const palabrasOpcion = contenido.split(' ');
                        for (const palabra of palabrasBuscadas) {
                            if (palabra.length > 1) {
                                for (const palabraOpt of palabrasOpcion) {
                                    if (palabraOpt.startsWith(palabra)) {
                                        puntuacion += 20;
                                    } else if (palabraOpt.includes(palabra)) {
                                        puntuacion += 10;
                                    }
                                }
                            }
                        }
                    }

                    if (puntuacion > mejorPuntuacion) {
                        mejorPuntuacion = puntuacion;
                        mejorCoincidencia = opt;
                    }
                }

                if (mejorCoincidencia) {
                    selectEmpleado.value = mejorCoincidencia.value;
                    selectEmpleado.dispatchEvent(new Event('change'));
                }
            }, 300); // Espera para no disparar en cada letra
        });

        // Sincronizar select con input al cargar la página
        function sincronizarSelectConInput() {
            const texto = inputNombre.value.trim();
            if (!texto) return;

            const normalizar = (str) => str.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().trim();
            const textoNorm = normalizar(texto);

            // Primero buscar coincidencia exacta (ignorando mayúsculas y acentos)
            for (const opt of opciones) {
                if (normalizar(opt.textContent) === textoNorm) {
                    selectEmpleado.value = opt.value;
                    return;
                }
            }

            // Si no hay coincidencia exacta, buscar la mejor aproximación
            let mejorCoincidencia = null;
            let mejorPuntuacion = 0;

            for (const opt of opciones) {
                const contenido = normalizar(opt.textContent);
                let puntuacion = 0;

                if (contenido.startsWith(textoNorm)) {
                    puntuacion = 100;
                } else if (contenido.includes(textoNorm)) {
                    puntuacion = 50;
                } else {
                    const palabrasBuscadas = textoNorm.split(' ').filter(p => p.length > 0);
                    const palabrasOpcion = contenido.split(' ').filter(p => p.length > 0);
                    for (const palabra of palabrasBuscadas) {
                        if (palabra.length > 1) {
                            for (const palabraOpt of palabrasOpcion) {
                                if (palabraOpt === palabra) {
                                    puntuacion += 30; // Coincidencia exacta de palabra
                                } else if (palabraOpt.startsWith(palabra)) {
                                    puntuacion += 20;
                                } else if (palabraOpt.includes(palabra)) {
                                    puntuacion += 10;
                                }
                            }
                        }
                    }
                }

                if (puntuacion > mejorPuntuacion) {
                    mejorPuntuacion = puntuacion;
                    mejorCoincidencia = opt;
                }
            }

            if (mejorCoincidencia) {
                selectEmpleado.value = mejorCoincidencia.value;
            }
        }

        // Sincronizar al cargar
        sincronizarSelectConInput();


        function actualizar_calendario() {
            let mes = 1;
            switch (window.mes.value) {
                case '1':
                    mes = "Enero";
                    break;
                case '2':
                    mes = "Febrero";
                    break;
                case '3':
                    mes = "Marzo";
                    break;
                case '4':
                    mes = "Abril";
                    break;
                case '5':
                    mes = "Mayo";
                    break;
                case '6':
                    mes = "Junio";
                    break;
                case '7':
                    mes = "Julio";
                    break;
                case '8':
                    mes = "Agosto";
                    break;
                case '9':
                    mes = "Septiembre";
                    break;
                case '10':
                    mes = "Octubre";
                    break;
                case '11':
                    mes = "Noviembre";
                    break;
                case '12':
                    mes = "Diciembre";
                    break;
            }
            window.mostrarmes.innerHTML = mes + " " + window.año.value;
            cargar_calendario();
        }
        actualizar_calendario();
        window.empleado.addEventListener("change", () => {
            actualizar_calendario();
        });
        window.anterior.addEventListener("click", () => {
            if (window.mes.value == 1) {
                window.mes.value = 12;
                window.año.value = window.año.value - 1;
            } else {
                window.mes.value = window.mes.value - 1;
            }
            actualizar_calendario();
        });
        window.siguiente.addEventListener("click", () => {
            if (window.mes.value == 12) {
                window.mes.value = 1;
                window.año.value = parseInt(window.año.value) + 1;
            } else {
                window.mes.value = parseInt(window.mes.value) + 1;
            }
            actualizar_calendario();
        });

    };

    function cargar_calendario() {
        poner_cargando_calendario();
        ajax('tables/table_calendario', 'calendario', "empleado=" + window.empleado.value + "&mes=" + window.mes.value + "&año=" + window.año.value <?= (SISTEMA_INSPECTOR && $_SESSION['tipo_usuario'] == 'inspector') ? '+ "&inspector"' : '' ?>, [<?= ($_SESSION['tipo_usuario'] == 'admin' && SISTEMA_INCIDENCIAS) ? `'cargar_incidencias()',` : '`cargar_agregar_registro()`,`cargar_editar_registro()`,' ?> 'quitar_cargando_calendario()']);
    }

    function cargar_ajax_table() {
        cargar_calendario();
    }

    <?php if ($_SESSION['tipo_usuario'] == 'admin' && SISTEMA_INCIDENCIAS): ?>

        function cargar_incidencias() {
            cargar_agregar_registro();
            cargar_editar_registro();
        }

        function abrir_incidencia(elem) {
            const dataInfo = elem.getAttribute('data-info');
            if (dataInfo !== null) {
                ajax('dialogs/incidencia', 'showdialog', "id=" + dataInfo, ['cargar_dialog()', 'cerrar_dialog()', 'aplicar_motivo()']);
            }
        }

        function aplicar_motivo() {
            let select = document.getElementById("selectmotivo");
            let hidden = document.getElementById("motivo");
            let btnaplicar = document.getElementById("btnaplicar");
            if (select && hidden && btnaplicar) {
                select.addEventListener("change", function () {
                    hidden.value = select.value;
                });
                btnaplicar.addEventListener("click", () => {
                    let form = document.getElementById("form-apli-motivo");

                    form.onsubmit = function (event) {
                        event.preventDefault();
                    };
                    ajax('forms/aplicar_incidencia', 'showdialog', "id=" + window.id.value +
                        "&id_empleado=" + window.id_empleado.value +
                        "&fecha=" + window.fecha.value +
                        "&motivo=" + window.motivo.value +
                        "&dialog=" + window.dialog.value, ['cargar_calendario()', 'cargar_incidencias()']);
                    animacion_y_cierre_dialog()
                });
            }
        }
    <?php endif; ?>

    function cargar_agregar_registro() {
        const c_crear_registo = document.querySelectorAll('.c-crear-registro');

        c_crear_registo.forEach(crear_registro => {
            crear_registro.addEventListener('click', () => {
                const datafecha = crear_registro.getAttribute('data-fecha');
                const dataempleado = crear_registro.getAttribute('data-empleado');

                if (datafecha !== null) {
                    ajax('dialogs/dialog_crear_registro', 'showdialog', "fecha=" + datafecha + "&id_empleado=" + dataempleado, ['cargar_dialog()', 'agregar_registro()']);
                }
            });
        });
    }

    function agregar_registro() {
        let fecha = document.getElementById("fecha");
        let id_empleado = document.getElementById("id_empleado");
        let hora1 = document.getElementById("hora1");
        let hora2 = document.getElementById("hora2");
        let hora3 = document.getElementById("hora3");
        let hora4 = document.getElementById("hora4");
        let hora5 = document.getElementById("hora5");
        let hora6 = document.getElementById("hora6");
        let hora7 = document.getElementById("hora7");
        let hora8 = document.getElementById("hora8");
        let hora9 = document.getElementById("hora9");
        let hora10 = document.getElementById("hora10");
        let btncrear = document.getElementById("crear-registro");

        if (!btncrear) return; // Si no hay botón, salir (empleado no encontrado)

        btncrear.addEventListener("click", () => {
            if (!hora1.value || hora1.value === "00:00" || hora1.value === "") {
                const contenedor = document.getElementById('notificaciones');
                if (contenedor) {
                    crear_notificacion("error", "La primera hora es obligatoria");
                } else {
                    alert("La primera hora es obligatoria");
                }
                return;
            }
            let data = "id_empleado=" + id_empleado.value +
                "&fecha=" + fecha.value +
                "&hora1=" + hora1.value +
                "&hora2=" + hora2.value +
                "&hora3=" + hora3.value +
                "&hora4=" + hora4.value +
                "&hora5=" + hora5.value +
                "&hora6=" + hora6.value +
                "&hora7=" + hora7.value +
                "&hora8=" + hora8.value +
                "&hora9=" + hora9.value +
                "&hora10=" + hora10.value +
                "&ajax=true";

            let id_motivo = document.getElementById("id_motivo");
            if (id_motivo) {
                data += "&id_motivo=" + id_motivo.value;
            }

            <?php if ($_SESSION['tipo_usuario'] == 'admin' && PERMITIR_OCULTAR_APROBACIONES): ?>
                let ocultar = document.getElementById('no_mostrar_aprobaciones');
                if (ocultar && ocultar.checked) {
                    data += '&no_mostrar_aprobaciones=true';
                }
            <?php endif; ?>
            ajax('forms/crear_registro', 'notificaciones', data, ['cargar_calendario()'
                <?= ($_SESSION['tipo_usuario'] == 'admin' && SISTEMA_INCIDENCIAS) ? `,'cargar_incidencias()'` : '' ?>
            ]);
            animacion_y_cierre_dialog();
        });
    }

    function cargar_editar_registro() {
        const svgElements = document.querySelectorAll('.c-editar-registro');

        svgElements.forEach(svgElement => {
            svgElement.addEventListener('click', function () {
                const datafecha = this.getAttribute('data-fecha');
                const dataid = this.getAttribute('data-id');

                if (datafecha !== null) {
                    ajax('dialogs/dialog_editar_registro', 'showdialog', "id=" + dataid, ['cargar_dialog()', 'editar_registro()']);
                }
            });
        });
    }

    function editar_registro() {
        let fecha = document.getElementById("fecha");
        let id = document.getElementById("id");
        let nombre_empleado = document.getElementById("nombre_empleado");
        let h1 = document.getElementById("hora1");
        let h2 = document.getElementById("hora2");
        let h3 = document.getElementById("hora3");
        let h4 = document.getElementById("hora4");
        let h5 = document.getElementById("hora5");
        let h6 = document.getElementById("hora6");
        let h7 = document.getElementById("hora7");
        let h8 = document.getElementById("hora8");
        let h9 = document.getElementById("hora9");
        let h10 = document.getElementById("hora10");
        let btncrear = document.getElementById("editar-registro");

        btncrear.addEventListener("click", () => {
            if (h1 && (!h1.value || h1.value === "00:00" || h1.value === "")) {
                const contenedor = document.getElementById('notificaciones');
                if (contenedor) {
                    crear_notificacion("error", "La primera hora es obligatoria");
                } else {
                    alert("La primera hora es obligatoria");
                }
                return;
            }
            let data = "id=" + (id ? id.value : "");

            let id_motivo = document.getElementById("id_motivo");
            if (id_motivo) {
                data += "&id_motivo=" + id_motivo.value;
            }

            if (h1) {
                data += "&hora1=" + h1.value;
            }
            if (h2) {
                data += "&hora2=" + h2.value;
            }
            if (h3) {
                data += "&hora3=" + h3.value;
            }
            if (h4) {
                data += "&hora4=" + h4.value;
            }
            if (h5) {
                data += "&hora5=" + h5.value;
            }
            if (h6) {
                data += "&hora6=" + h6.value;
            }
            if (h7) {
                data += "&hora7=" + h7.value;
            }
            if (h8) {
                data += "&hora8=" + h8.value;
            }
            if (h9) {
                data += "&hora9=" + h9.value;
            }
            if (h10) {
                data += "&hora10=" + h10.value;
            }
            <?php if ($_SESSION['tipo_usuario'] == 'admin' && PERMITIR_OCULTAR_APROBACIONES): ?>
                let ocultar = document.getElementById('no_mostrar_aprobaciones');
                if (ocultar && ocultar.checked) {
                    data += '&no_mostrar_aprobaciones=true';
                }
            <?php endif; ?>

            ajax('forms/modificar_registro', 'notificaciones', data, ['cargar_calendario()'
                <?= ($_SESSION['tipo_usuario'] == 'admin' && SISTEMA_INCIDENCIAS) ? `,'cargar_incidencias()'` : ',`cargar_agregar_registro()`,`cargar_editar_registro()`' ?>
            ]);
        });
    }

    function poner_cargando_calendario() {
        let calendario = document.getElementById("calendario");
        //no interactue
        calendario.style.pointerEvents = "none";
        calendario.style.opacity = ".7";
    }

    function quitar_cargando_calendario() {
        let cargando = document.getElementById("calendario");
        //interactuable
        calendario.style.pointerEvents = "auto";
        calendario.style.opacity = "1";
    }

    function eliminar_registro(btn) {
        ajax('dialogs/dialog_delete_registro', 'showdialog', "id=" + btn.getAttribute("data-id"), ['cargar_dialog()', 'cargar_eliminar("registro")']);
    }

    <?php if ($_SESSION['tipo_usuario'] == 'admin' && SISTEMA_INCIDENCIAS): ?>

        function cargar_comprobar_incidencias() {
            let ico_sincro = document.getElementById("ico-compr-incidencia");
            ico_sincro.classList.add("agitar");
            ajax("../comprobar_incidencias", "comprobarincidencia", "", ['quitar_cargando_compr_incidencia()', 'cargar_calendario()']);
        }

        function quitar_cargando_compr_incidencia() {
            let ico_sincro = document.getElementById("ico-compr-incidencia");
            ico_sincro.classList.remove("agitar");
        }
    <?php endif; ?>
    <?php if (get_config('notas')): ?>

        function llamar_nota(id_registro) {
            ajax('dialogs/dialog_nota', 'showdialog', 'id=' + id_registro, ['cargar_dialog()']);
        }

        function guardar_nota(id_registro) {
            let nota = document.getElementById('nota');
            ajax('forms/nota', 'notificaciones', 'id=' + id_registro + '&nota=' + nota.value, ['cargar_calendario()', 'animacion_y_cierre_dialog()']);
        }

        <?php if ($_SESSION['tipo_usuario'] == "empleado"): ?>
            function solicitar_nota(id_registro) {
                let nota = document.getElementById('nota');
                if (!nota.value.trim()) {
                    alert('Por favor, escribe una nota antes de enviar');
                    return;
                }
                ajax('forms/solicitar_nota', 'notificaciones', 'id_registro=' + id_registro + '&nota=' + encodeURIComponent(nota.value), ['cargar_calendario()', 'animacion_y_cierre_dialog()']);
            }
        <?php endif; ?>
    <?php endif; ?>

    function mostrar_vacaciones_otros(elem) {
        const nombres = JSON.parse(elem.dataset.nombres);
        const fecha = elem.dataset.fecha;
        let html = '<dialog id="dialog" class="cristal" open>';
        html += '<h2>🏖️ Vacaciones el <b class="rojo">' + fecha + '</b></h2>';
        html += '<section class="flex column gap05" style="width:100%;">';
        nombres.forEach(n => {
            html += '<span style="color:light-dark(#7c3aed, #c4a5ff);font-weight:bold;padding:0.3rem 0;">• ' + n + '</span>';
        });
        html += '</section>';
        html += '<section class="flex row gap5 pa1">';
        html += '<button id="cancelar" class="btn-t" title="Cerrar">Cerrar</button>';
        html += '</section>';
        html += '</dialog>';
        document.getElementById('showdialog').innerHTML = html;
        cargar_dialog();
    }
</script>
<?php footer(true); ?>