var Admin = {

    prontus_id: '',
    reindexar_todo: '8888', // flag para indicar al reindexador que debe actualizar todo.
    dir_cgi_cpn: 'cgi-cpn',
    dir_cgi_bin: 'cgi-bin',

    counterError: 0,
    maxErrorCounter: 3,

    const: {
        fotoFijaTag: 'FOTOFIJA_',
        fotoFijaWTag: '_WFOTOFIJA_',
        fotoFijaHTag: '_HFOTOFIJA_',
        fotoFijaMaxWTag: '_MAXWFOTOFIJA_',
        fotoFijaMaxHTag: '_MAXHFOTOFIJA_',
        chkCuadrarTag: 'CHK_cuadrar_'
    },

    urlLogout: 'prontus_logout.cgi',
    urlPing: 'prontus_ping_inuse.cgi',
    urlOIDCRefresh: 'sso/prontus_oidc_refresh.cgi',
    urlGoogleData: 'seo/prontus_get_google_stats.cgi',
    urlUserInfo: 'prontus_head_info.cgi',
    urlUpdate: 'prontus_update.cgi',

    timePing: 5000,
    timerPingId: null,
    pingType: 'cpan',

    timeRefreshOIDCToken: 1800000, //intenta refrescar el token oidc cada 30 minutos.
    timerRefreshOIDCTokenId: null,
    refreshOIDCTokenType: 'cpan',

    isHttps: false,
    frontprotocol: 'http://',
    publicHost: '',
    maxFileSizeM: null,
    maxFileSizeB: null,

    randcode: 0,
    dialog: false,

    min_char_busqueda: 2, // cantidad mínima de caracteres para búsquedas.

    init: function (prontus_id) {
        // estoy en pantalla de login, recuperar clave o similares, en que la URL contiene el nombre del Prontus.
        if (typeof prontus_id === 'undefined' || prontus_id === '') {
            prontus_id = Admin.getURLParam('_prontus_id');
        }
        Admin.prontus_id = prontus_id;
        // MAX_UPLOAD_SIZE está declarada en comun_head.html
        if (typeof MAX_UPLOAD_SIZE !== 'undefined' && MAX_UPLOAD_SIZE > 0) {
            Admin.maxFileSizeB = MAX_UPLOAD_SIZE;
            Admin.maxFileSizeM = Math.round(MAX_UPLOAD_SIZE / (1024 * 1024));
        }

        if (typeof (ProntusConf) !== 'undefined' && typeof (ProntusConf['front-protocol']) !== 'undefined' && ProntusConf['front-protocol'] != '') {
            Admin.frontprotocol = ProntusConf['front-protocol'] + '://';
        }

        if (typeof (ProntusConf) !== 'undefined' && typeof (ProntusConf['public-host']) !== 'undefined' && ProntusConf['public-host'] != '') {
            Admin.publicHost = Admin.frontprotocol + ProntusConf['public-host'];
        }

        window.addEventListener('resize', Admin.resizeMobileUI);

        Admin.loadUserData();

        Admin.randcode = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
        // cambiar clave
        $("#prontus-cpan-data").on("click", ".cambiarClaveHead", function () {
            Admin.cambiarClave();
            return false;
        });
        // cerrar sesión
        $("#prontus-cpan-data").on("click", '.cerrarSesionHead', function () {
            $('#modal-loading-mensaje').html('Por favor espera mientras Prontus se cierra.');
            $('#modal-loading').modal({ backdrop: 'static', keyboard: false });
            Admin.cerrarSesion();
            return false;
        });

        // Crear alerta
        $("#prontus-cpan-data").on("click", ".crearAlerta", function () {
            Admin.showCrearAlerta();
            return false;
        });

        // evento para actualizar
        $("#prontus-cpan-data").on("click", "#update-prontus div", Admin.prontusUpdate);

        $("#modal_update").on("click", ".boton-loading", function () {
            $('#modal_update').modal('hide');
            Admin.cerrarSesion();
        });

        $("#modal_update").on("click", ".boton-update-close", function () {
            $('#modal_update').modal('hide');
        });

        // cambio de prontus
        $("#prontus-cpan-data").on("blur change", "#prontus-sso-select", Admin.changeProntus);

        // guardar datos de config.
        $('.guardar_cambios').click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            var vista = $('input[name="_cfg"]').val();
            if (!vista) {
                showModalAlert({
                    title: 'Error',
                    type: 'red',
                    msg: 'No es posible guardar los cambios'
                });
            } else {
                Cfgedit.guardaCfg(vista);
            }
        });

        // descartar edición de datos de config.
        $('.descartar_cambios').click(function () {
            window.location.reload();
            return false;
        });

        if (!Date.now) { // por si acaso IE8 llega a resurgir...
            Date.now = function () { return new Date().getTime(); }
        }

        $('a.crear-nuevo-articulo').click(Admin.cambiarURLCrearArticulo);

        var temp = window.location.href.split('?')[0].split('/');
        var current_cgi = temp[temp.length - 1];
        if ('prontus_index.cgi' != current_cgi && 'prontus_olvidopass.cgi' != current_cgi && !/wizard_prontus/.test(window.location.href) && !/cgi-cpn\/wizard/.test(window.location.href)) {
            setTimeout(Admin.pingCpan, Admin.timePing);
            if (ProntusConf['oidc-enabled'] != 0) {
                setTimeout(Admin.refreshOIDCToken, Admin.timeRefreshOIDCToken);
            }
        }
    },

    resizeMobileUI: function () {
        let prontusUserMenu = document.getElementById('prontus-user-menu');

        $('#prontus-menu-mobile').css('max-height', (window.innerHeight - 60) + 'px');
        if (window.innerWidth < 504) {
            let nav = document.getElementById('main-nav');
            let logoWidth = nav.querySelector('.prontus-logo').getBoundingClientRect().width;
            let menuWidth = nav.querySelector('.navbar-toggle').getBoundingClientRect().width;

            if (prontusUserMenu !== null) {
                prontusUserMenu.style['max-width'] = (window.innerWidth - logoWidth - menuWidth - 5) + 'px';
            }
        } else {
            if (prontusUserMenu !== null) {
                prontusUserMenu.style['max-width'] = '';
            }
        }
        if (window.innerWidth < 366) {
            $('#area_colapsar').removeClass('pull-right');
        } else {
            $('#area_colapsar').addClass('pull-right');
        }
    },

    changeProntus: function (event) {
        var selected = $(event.target).val();
        if (Admin.prontus_id != selected) {
            var regexp = new RegExp('(/' + Admin.dir_cgi_cpn + '\/.*?\\.cgi)')
            var result = regexp.exec(window.location.href);
            window.location.href = result[1] + '?' + '_prontus_id=' + selected;
        }
    },

    loadUserData: function () {
        // Para la carga de la informacion del usuario y prontus
        $('#prontus-cpan-data').load('/' + Admin.dir_cgi_cpn + '/' + Admin.urlUserInfo + '?_prontus_id=' + Admin.prontus_id, Admin.resizeMobileUI);
        if (document.getElementById('prontus-cpan-data') && ProntusConf['seo-api-enabled'] === 1) {
            // buscamos datos de google analytics y search console.
            Admin.getGoogleData();
        }
    },

    cerrarSesion: function () {
        if (Admin.timerPingId !== null) {
            clearTimeout(Admin.timerPingId);
        }
        $.ajax({
            url: '/' + Admin.dir_cgi_cpn + '/' + Admin.urlLogout,
            data: {
                '_prontus_id': Admin.prontus_id,
                '_modo': 'ajax'
            },
            dataType: 'json',
            type: 'POST',
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                $('#modal-loading').modal('hide');
                SubmitForm.handleError(Admin.urlLogout, XMLHttpRequest, textStatus, errorThrown);
            },
            success: function (resp, textStatus) {
                clearTimeout(Admin.timerPingId);
                $('#modal-loading').modal('hide');
                showModalAlert({
                    title: 'Sesión cerrada',
                    type: 'blue',
                    msg: 'Vuelve Prontus...',
                    cbBtnOK: function () {
                        window.location.href = resp.url;
                    }
                });

            }
        });
    },

    cambiarClave: function () {
        $('#modalCambioClave').modal();
    },

    showCrearAlerta: function () {
        $('#modalCrearAlerta').modal();
    },

    displayMessage: function (str, tipo) {
        if (tipo == 'info' || tipo == 'alert' || tipo == 'error') {
            var color = 'green';
            if (tipo == 'alert') {
                color = 'yellow';
            } else if (tipo == 'error') {
                color = 'red';
            }
            showModalAlert({
                title: 'Sesión cerrada',
                type: color,
                msg: str
            });
        }
    },

    updateConcurrency: function (msg, tipo) {
        if (msg !== '') {
            var str;
            if (tipo == 'port') {
                msg = 'Otros usuarios editando esta Portada: ' + msg;
                str = '<span>' + msg + '</span>';
                $('#concurrency').html(str).fadeIn();
            } else if (tipo == 'art') {
                msg = 'Otros usuarios editando este Artículo: ' + msg;
                str = '<span>' + msg + '</span>';
                $('#concurrency .message').html(str);
                $('#concurrency').fadeIn();
            } else {
                return;
            }
        } else {
            $('#concurrency').hide();
        }
    },

    updateLockRecurso: function (value, tipo_rec) {
        if (typeof $('#lock_recurso').val() == 'undefined') {
            // Se define el input, para que la proxima vez que se haga el ping, no se vuelva a mostrar el mensaje.
            $('body').append('<input type="hidden" id="lock_recurso" value="' + value + '" />');
            var msg;
            if (value == 1) {
                // Solo advertencia.
                if (tipo_rec == 'art') msg = "Este Artículo está siendo utilizado por otro usuario.\nIngresa el siguiente código para poder utilizarlo.";
                if (tipo_rec == 'port') msg = "Esta Portada está siendo utilizada por otro usuario.\nIngresa el siguiente código para poder utilizarla.";
                msg = "Advertencia:\n\n" + msg + "\n\nCódigo: " + Admin.randcode;
                Admin._lockRecursoPrompt(msg);
            } else if (value == 2) {
                // Bloqueo total.
                if (tipo_rec == 'art') msg = "El artículo está siendo utilizado por otro usuario y ha sido bloqueado para su edición.<br>Volver a <a href='/cgi-cpn/prontus_art_list.cgi?_prontus_id=" + Admin.prontus_id + "'>Artículos creados</a>";
                if (tipo_rec == 'port') msg = "La portada está siendo utilizada por otro usuario y ha sido bloqueada para su edición.";
                Admin._lockRecursoTotal(tipo_rec, msg);
            }
        }
    },

    _lockRecursoPrompt: function (msg) {
        var code = prompt(msg);
        var resp = '';
        if (code == null || code == '') {
            resp = "Debes ingresar el código " + Admin.randcode + " para desbloquear el recurso.";
            Admin._lockRecursoPrompt(resp);
        } else {
            if (code != Admin.randcode) {
                resp = "El código ingresado es inválido.\nPorfavor ingresa el siguiente código para desbloquear el recurso: " + Admin.randcode;
                Admin._lockRecursoPrompt(resp);
            }
        }
    },

    // maneja el bloqueo total de edición de un artículo o portada.
    _lockRecursoTotal: function (tipo, msg) {
        if (tipo == 'art') {
            $('#modal-loading .modal-title').text('Bloqueo de edición');
            $('#modal-loading-mensaje').html(msg);
            $('#modal-loading').modal({ backdrop: 'static', keyboard: false });
            $('#modal-loading img.img-responsive').hide();
        } else {
            $('#port-lista-areas').hide();
            $('#port-lista-arts').find('.group-btns button.pub-in-area').hide();
        }
    },

    pingCpan: function () {
        if (Admin.pingType == 'cpan') {
            Admin.pingRecurso('cpan', '', Admin.pingCpan);
        }
    },

    refreshOIDCToken: function () {
        if (Admin.refreshOIDCTokenType == 'cpan') {
            Admin.refreshRecurso('cpan', '', Admin.refreshOIDCToken);
        }
    },

    pingRecurso: function (tipo_rec, nom_rec, completeFunc) {
        if (Admin.pingType == 'cpan') {
            Admin.pingType = tipo_rec;
        }
        if (Admin.timerPingId !== null && tipo_rec != 'cpan') {
            clearTimeout(Admin.timerPingId);
        }
        var datos = {
            _tipo_recurso: tipo_rec,
            _prontus_id: Admin.prontus_id
        };

        if (nom_rec !== null && nom_rec != '') {
            datos._nom_recurso = nom_rec;
        }
        $.ajax({
            url: '/' + Admin.dir_cgi_cpn + '/' + Admin.urlPing,
            data: datos,
            type: "POST",
            dataType: 'json',
            complete: function () {
                Admin.timerPingId = setTimeout(function () {
                    completeFunc();
                }, Admin.timePing);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                Admin.counterError++;

                if (Admin.counterError >= Admin.maxErrorCounter) {
                    Admin.showErrorAlert(errorThrown, XMLHttpRequest.status, XMLHttpRequest.getAllResponseHeaders());
                }
            },
            success: function (resp, textStatus) {
                if (resp === null) {
                    return;
                }

                Admin.counterError = 0;

                if (resp.status != 1) {
                    if (resp.logout) {
                        clearTimeout(Admin.timerPingId);
                        showModalAlert({
                            title: 'Se ha producido un error',
                            msg: resp.msg,
                            cbBtnOK: function () {
                                window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_index.cgi?_prontus_id=' + Admin.prontus_id;
                            }
                        });
                        setTimeout(function () { window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_index.cgi?_prontus_id=' + Admin.prontus_id; }, 3000);

                    }
                    Admin.displayMessage(resp.msg, 'error');
                } else {
                    if (Admin.dialog) {
                        Admin.dialog.close();
                        Admin.dialog = null;
                    }

                    Admin.updateConcurrency(resp.msg, tipo_rec);
                    Admin.updateLockRecurso(resp.lock, tipo_rec);

                    if (typeof resp.alerta != 'undefined') {
                        Alerta.checkAlerta(resp.alerta);
                    }
                }
            }
        });
    },

    // similar a pingRecurso, intenta refrescar un token de sesión OIDC.
    // se invoca cada 30 minutos. Si la CGI responde que no corresponde, no se repite.
    refreshRecurso: function (tipo_rec, nom_rec, completeFunc) {
        if (Admin.refreshOIDCTokenType == 'cpan') {
            Admin.refreshOIDCTokenType = tipo_rec;
        }
        if (Admin.timerRefreshOIDCTokenId !== null && tipo_rec != 'cpan') {
            clearTimeout(Admin.timerRefreshOIDCTokenId);
        }
        var datos = {
            _tipo_recurso: tipo_rec,
            _prontus_id: Admin.prontus_id
        };

        if (nom_rec !== null && nom_rec != '') {
            datos._nom_recurso = nom_rec;
        }
        $.ajax({
            url: '/' + Admin.dir_cgi_cpn + '/' + Admin.urlOIDCRefresh,
            data: datos,
            dataType: 'json',
            type: 'POST',
            complete: function () {
                Admin.timerRefreshOIDCTokenId = setTimeout(function () {
                    completeFunc();
                }, Admin.timeRefreshOIDCToken);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                Admin.counterError++;

                if (Admin.counterError >= Admin.maxErrorCounter) {
                    Admin.showErrorAlert(errorThrown, XMLHttpRequest.status, XMLHttpRequest.getAllResponseHeaders());
                }
            },
            success: function (resp, textStatus) {
                if (resp === null) {
                    return;
                }

                Admin.counterError = 0;

                if (resp.status != 1) {
                    if (resp.logout || resp.status == 0) {
                        clearTimeout(Admin.timerRefreshOIDCTokenId);
                        showModalAlert({
                            title: 'Se ha producido un error',
                            msg: resp.msg,
                            cbBtnOK: function () {
                                window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_index.cgi?_prontus_id=' + Admin.prontus_id;
                            }
                        });
                        setTimeout(function () { window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_index.cgi?_prontus_id=' + Admin.prontus_id; }, 3000);
                    }
                } else {
                    if (Admin.dialog) {
                        Admin.dialog.close();
                        Admin.dialog = null;
                    }

                    Admin.updateConcurrency(resp.msg, tipo_rec);
                    Admin.updateLockRecurso(resp.lock, tipo_rec);
                }
            }
        });
    },

    getGoogleData: function () {
        var datos = {
            _prontus_id: Admin.prontus_id
        };
        $.ajax({
            url: '/' + Admin.dir_cgi_cpn + '/' + Admin.urlGoogleData,
            data: datos,
            dataType: 'json',
            type: 'POST',
            complete: function (data) {
                // console.log('complete');
                // console.log(data);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                // console.log('error');
                // console.log(textStatus);
            },
            success: function (resp, textStatus) {
                if (resp === null) {
                    return;
                }
                if (resp.status != 1) {
                    // console.log('success with error');
                    // console.log(resp.analytics.msg);
                    // console.log(resp.google_console.msg);
                } else {
                    // procesamos los datos de analytics y los mostramos.
                    let analytics = resp.analytics;
                    let keys = [];
                    for (let key in analytics) {
                        if (analytics.hasOwnProperty(key) && key != 'status' && key != 'msg') {
                            keys.push(key);
                        }
                    }
                    keys.sort().reverse();
                    let latest_data = analytics[keys[0]];
                    let prev_data = analytics[keys[1]];
                    $('#google-analytics-pageviews').text(latest_data.pageviews).attr('title', 'Datos al ' + Admin.helper.fechaISOtoHuman(keys[0]));
                    $('#google-analytics-users').text(latest_data.users).attr('title', 'Datos al ' + Admin.helper.fechaISOtoHuman(keys[0]));
                    let difference = latest_data.pageviews - prev_data.pageviews;
                    $('#google-analytics-pageviews-icon, #google-analytics-users-icon').removeClass();
                    if (!isNaN(difference)) {
                        if (difference >= 0) {
                            $('#google-analytics-pageviews-icon').addClass('fas fa-caret-up txtnextgreen');
                        } else if (difference == 0) {
                            $('#google-analytics-pageviews-icon').addClass('fas fa-equals');
                        } else {
                            $('#google-analytics-pageviews-icon').addClass('fas fa-caret-down txtnextred');
                        }
                    }

                    difference = latest_data.users - prev_data.users;
                    if (!isNaN(difference)) {
                        if (difference >= 0) {
                            $('#google-analytics-users-icon').addClass('fas fa-caret-up txtnextgreen');
                        } else if (difference == 0) {
                            $('#google-analytics-users-icon').addClass('fas fa-equals');
                        } else {
                            $('#google-analytics-users-icon').addClass('fas fa-caret-down txtnextred');
                        }
                    }

                    // procesamos los datos de search_console y los mostramos.
                    let search_console = resp.search_console;
                    keys = [];
                    for (let key in search_console) {
                        if (search_console.hasOwnProperty(key) && key != 'status' && key != 'msg') {
                            keys.push(key);
                        }
                    }
                    keys.sort().reverse();
                    latest_data = search_console[keys[0]];
                    prev_data = search_console[keys[1]];
                    $('#google-search-console-prints').text(latest_data.prints).attr('title', 'Datos al ' + Admin.helper.fechaISOtoHuman(keys[0]));
                    $('#google-search-console-clicks').text(latest_data.clicks).attr('title', 'Datos al ' + Admin.helper.fechaISOtoHuman(keys[0]));
                    $('#google-search-console-prints-icon, #google-search-console-clicks-icon').removeClass();
                    difference = latest_data.prints - prev_data.prints;
                    if (!isNaN(difference)) {
                        if (difference >= 0) {
                            $('#google-search-console-prints-icon').addClass('fas fa-caret-up txtnextgreen');
                        } else if (difference == 0) {
                            $('#google-search-console-prints-icon').addClass('fas fa-equals');
                        } else {
                            $('#google-search-console-prints-icon').addClass('fas fa-caret-down txtnextred');
                        }
                    }

                    difference = latest_data.clicks - prev_data.clicks;
                    if (!isNaN(difference)) {
                        if (difference >= 0) {
                            $('#google-search-console-clicks-icon').addClass('fas fa-caret-up txtnextgreen');
                        } else if (difference == 0) {
                            $('#google-search-console-clicks-icon').addClass('fas fa-equals');
                        } else {
                            $('#google-search-console-clicks-icon').addClass('fas fa-caret-down txtnextred');
                        }
                    }
                }
            }
        });
    },

    showErrorAlert: function (error, status, detalle) {
        var strerror = "<strong>Espera unos minutos y actualiza la página</strong>. "
            + "Si el problema persiste, consulta con el administrador de tu servidor web.<br><br>"
            + "El servidor ha entregado el siguiente mensaje: <strong>" + error + "</strong><br><br>"
            + "Status: <strong>" + status + "</strong><br><br>Detalles:<br><pre>" + detalle +  "</pre>";

        if (!Admin.dialog) {
            Admin.dialog = showModalDialog({
                title: "Se ha producido un error crítico",
                msg: strerror,
                type: "red"
            });
        }
    },

    prontusUpdate: function () {
        var last_version_disponible = $(this).attr("data-prontus-version");
        if (last_version_disponible == undefined) {
            return false;
        }
        $('#modal_update .status-error').hide();
        $('#modal_update .status-loading').show();
        $('#modal_update .status-result').hide();
        $('#modal_update .msg-result').hide();
        $('#modal_update .boton-update-close').hide();
        showModalConfirm({
            msg: '¿Estás seguro de actualizar a Prontus ' + last_version_disponible + '?' + '\nEsta operación actualizará las CGIs y el \'core\' de la instancia Prontus instalada en su sitio web.',
            type: 'blue',
            icon: "glyphicon glyphicon-question-sign",
            btnClassOk: 'hovwhite radius15 noborder txtnextwhite pad-top-bot7 pad-lef-rig20 int-nextgreen nextgreen',
            okTitle: 'Actualizar Prontus',
            cbBtnOK: function () {
                $('#modal_update').modal('show');
                $.ajax({
                    url: '/' + Admin.dir_cgi_cpn + '/' + Admin.urlUpdate,
                    data: {
                        '_prontus_id': Admin.prontus_id
                    },
                    dataType: 'json',
                    type: 'POST',
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        SubmitForm.handleError(Admin.urlUpdate, XMLHttpRequest, textStatus, errorThrown);
                        $('#modal_update').modal('hide');
                    },
                    success: function (data, textStatus) {
                        if (data.status == 1) {
                            clearTimeout(Admin.timerPingId);
                            setTimeout(Admin.checkUpdateStatus, 2000);
                        } else {
                            showModalAlert({
                                type: "red",
                                title: "Se produjo un error al procesar la solicitud",
                                icon: "glyphicon glyphicon-exclamation-sign",
                                msg: data.msg,
                                cbBtnOK: function () {
                                    $('#modal_update').modal('hide');
                                }
                            });
                        }
                    }
                });
            },
            cbBtnCancel: function () { }
        });
    },

    checkUpdateStatus: function () {
        var status_url = '/' + Admin.prontus_id + '/cpan/procs/loading/result_prontus_update.json';
        $.ajax({
            url: status_url,
            dataType: 'json',
            cache: false,
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                Admin.counterError++;
                if (Admin.counterError >= Admin.maxErrorCounter) {
                    SubmitForm.handleError(status_url, XMLHttpRequest, textStatus, errorThrown);
                    $('#modal_update').modal('hide');
                } else {
                    setTimeout(Admin.checkUpdateStatus, 2000);
                }
            },
            success: function (data, textStatus) {
                Admin.counterError = 0;
                if (data.status == 1) {
                    if (data.loading == 1) {
                        setTimeout(Admin.checkUpdateStatus, 2000);
                    } else {
                        $('#modal_update .status-loading').hide();
                        $('#modal_update .status-result').show();
                        $('#modal_update .msg-result').show();
                        $('#modal_update .boton-loading').show();
                    }
                    $('#prontus-update-progress').css("width", data.actual + "%");
                    $('#prontus-update-progress').attr("aria-valuenow", data.actual);
                    $('#prontus-update-progress-label').html(data.actual + "%");
                } else {
                    $('#prontus-update-progress').css("width", "0%");
                    $('#prontus-update-progress').attr("aria-valuenow", "0");
                    $('#prontus-update-progress-label').html("0%");
                    $('#modal_update .status-msg').html(data.msg);
                    $('#modal_update .status-error').show();
                    $('#modal_update .msg-result').show();
                    $('#modal_update .boton-update-close').show();
                }
            }
        });

    },

    getURLParam: function (param_wanted) {
        var queries = {};
        $.each(document.location.search.substring(1).split('&'), function (c, q) {
            var i = q.split('=');
            if (typeof i[1] !== 'undefined') {
                queries[i[0].toString()] = i[1].toString();
            }
        });
        if (typeof queries[param_wanted] !== 'undefined') {
            return queries[param_wanted];
        }
        return undefined;
    },

    // usada en PortAdmin y ArticList.
    borrarArticulo: function (ts, $item) {
        var tipo_rec = 'art';
        // revisamos que el artículo no esté siendo editado
        $.ajax({
            url: '/' + Admin.dir_cgi_cpn + '/' + Admin.urlPing,
            data: { _tipo_recurso: tipo_rec, _nom_recurso: ts, _prontus_id: Admin.prontus_id },
            type: "POST",
            dataType: 'json',
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                Admin.counterError++;

                if (Admin.counterError >= Admin.maxErrorCounter) {
                    Admin.showErrorAlert(errorThrown, XMLHttpRequest.status, XMLHttpRequest.getAllResponseHeaders());
                } else {
                    setTimeout(Admin.borrarArticulo, 500, ts, $item);
                }
            },
            success: function (resp, textStatus) {
                if (resp === null) {
                    return;
                }

                Admin.counterError = 0;

                if (resp.status != 1) {
                    if (resp.logout) {
                        clearTimeout(Admin.timerPingId);
                        showModalAlert({
                            title: 'Se ha producido un error',
                            msg: resp.msg,
                            cbBtnOK: function () {
                                window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_index.cgi?_prontus_id=' + Admin.prontus_id;
                            }
                        });
                        setTimeout(function () { window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_index.cgi?_prontus_id=' + Admin.prontus_id; }, 3000);

                    }
                    Admin.displayMessage(resp.msg, 'error');
                } else {
                    if (Admin.dialog) {
                        Admin.dialog.close();
                        Admin.dialog = null;
                    }
                    Admin.updateConcurrency(resp.msg, tipo_rec);
                    var data = {
                        _prontus_id: Admin.prontus_id,
                        _ts: ts
                    };

                    // el artículo estaba siendo editado. Avisamos al usuario y terminamos.
                    if (resp.lock != 0) {
                        showModalAlert({
                            title: 'No es posible borrar',
                            type: 'blue',
                            msg: "El artículo está siendo editado por el usuario " + resp.msg + '.',
                            cbBtnOK: function () {
                                $item.removeClass("list-group-item-danger");
                                $item.find(".group-btns").show();
                                $item.find(".row-loading").hide();
                            }
                        });

                        return;
                    }

                    $.ajax({
                        url: "/{0}/prontus_art_borrar.cgi".format(Admin.dir_cgi_cpn),
                        type: 'POST',
                        dataType: 'json',
                        data: data,
                        success: function (response) {
                            if (response.status == 1) {
                                $item.fadeOut('fast');
                                $item.remove();
                            } else {
                                showModalAlert({
                                    title: "Ha ocurrido un error",
                                    msg: response.msg,
                                    type: "red",
                                    icon: "glyphicon glyphicon-exclamation-sign",
                                    cbBtnOK: function () {
                                        $item.removeClass("list-group-item-danger");
                                        $item.find(".group-btns").show();
                                        $item.find(".row-loading").hide();
                                    }
                                });
                            }
                        },
                        error: function () {
                            showModalAlert({
                                title: "Ha ocurrido un error",
                                msg: "El artículo no se pudo eliminar. Inténtalo nuevamente.",
                                type: "red",
                                icon: "glyphicon glyphicon-exclamation-sign",
                                cbBtnOK: function () {
                                    $item.removeClass("list-group-item-danger");
                                    $item.find(".group-btns").show();
                                    $item.find(".row-loading").hide();

                                }
                            });
                        }
                    });
                }
            }
        });
    },

    // actualizamos la URL de crear artículo si en localstorage
    // está guardado el último fid usado.
    // Esta función se aplica en Admin.init al onclick de este link.
    cambiarURLCrearArticulo: function () {
        let crear_nuevo_articulo_href = $('a.crear-nuevo-articulo').prop('href');
        let last_fid_selected = Admin.helper.getValueLS('_last_fid_selected');
        if (crear_nuevo_articulo_href && last_fid_selected) {
            let new_url = Admin.helper.updateURLParameter(crear_nuevo_articulo_href, '_fid', last_fid_selected);
            $('a.crear-nuevo-articulo').prop('href', new_url);
        }
    },

    helper: {
        setValueLS: function (name, value) {
            localStorage.setItem(name, value);
        },

        getValueLS: function (name) {
            return localStorage.getItem(name);
        },

        // actualiza o agrega el parámetro "param" al valor "paramVal" en la string "url". Devuelve la nueva URL.
        updateURLParameter(url, param, paramVal) {
            var newAdditionalURL = "";
            var tempArray = url.split("?");
            var baseURL = tempArray[0];
            var additionalURL = tempArray[1];
            var temp = "";
            if (additionalURL) {
                tempArray = additionalURL.split("&");
                for (var i = 0; i < tempArray.length; i++) {
                    if (tempArray[i].split('=')[0] != param) {
                        newAdditionalURL += temp + tempArray[i];
                        temp = "&";
                    }
                }
            }
            var rows_txt = temp + "" + param + "=" + paramVal;
            return baseURL + "?" + newAdditionalURL + rows_txt;
        },
        // recibe una fecha en formato yyyy-mm-dd y devuelve una fecha dd/mm/yyyy
        fechaISOtoHuman(fechaISO) {
            let partes = fechaISO.split('-');
            if (partes.length == 3) {
                return partes[2] + '/' + partes[1] + '/' + partes[0];
            }
            return fechaISO; // si falló no hacemos nada.
        }
    }
};

$(document).ready(function () {
    Admin.init($('body').attr("data-prontus-id"));
});
