var Opciones = {
    urlBD: 'prontus_set_bd.cgi',
    urlRegenBD: 'prontus_regenerabd.cgi',
    urlRegenART: 'prontus_art_regen.cgi',
    urlRegenPORT: 'prontus_port_regen.cgi',
    urlRegenCAL: 'prontus_update_calendar.cgi',
    urlRegenDamBD: 'dam/prontus_dam_regen.cgi',
    urlCheckInst: 'prontus_check_install.cgi',
    urlCheckPlat: 'prontus_check_platform.cgi',
    urlRegenTax: 'prontus_regenera_taxport_web.cgi',
    urlRegenTag: 'prontus_regenera_tagport_web.cgi',
    optsDefault: {
        open: true,
        width: '520px',
        height: '500px',
        overlayClose: false,
        iframe: true,
        escKey: false // Deshabilita el ESC
    },
    statusCounter: 0,
    maxarticsLimit: 1000,

    // -------------------------------------------------------------------------
    init: function () {
        // Para el Datetimepicker de las opciones avanzadas
        $('#fecharegen').datetimepicker({
            format: 'DD-MM-YYYY',
            locale: 'es',
            useCurrent: false
        });

        /* FUNCIONES JS PARA EL ENVIO DE FECHAS
        CUALQUIERA DE LAS DIFERENTES OPCIONES SERAN ENVIADAS MEDIANTE EL MISMO INPUT #fecharegen */
        $('#operador-art').change(function (e) {
            e.preventDefault();
            //Reset de Variables
            $('#fecharegen').val('');
            $('#ts_art').val('');
            $('#datefrom').val('');
            $('#dateto').val('');
            $('#ts_art').attr('type','hidden');
            $('#fecharegen').attr('type','text');

            //Verificación tipo de fecha.
            let value = $(this).val();
            if (value == "rango"){
                $('#fecharegen').hide();
                $('.daterange').show();
            }else if(value == 'ts'){
                $('#ts_art').attr('type','text');
                $('#fecharegen').attr('type','hidden');
                $('.daterange').hide();
            }else{
                $('#fecharegen').show();
                $('.daterange').hide();
            }
        });

        /* INICIO - CONSTRUCCION DE RANGO DE FECHAS
        DESCRIPCIÓN: CONFIGURACION DATEPICKER RANGE Y CONSTRUCCION DE FECHAS */
        $( "#datefrom" ).datetimepicker({
            format: 'DD-MM-YYYY',
            locale: 'es',
            useCurrent: false
        });

        $( "#dateto" ).datetimepicker({
            format: 'DD-MM-YYYY',
            locale: 'es',
            useCurrent: false
        });

        $("#datefrom").on("dp.change", function (e) {
            e.preventDefault();
            $('#dateto').data("DateTimePicker").minDate(e.date);
            let realDate = getDateRange();
            $('#fecharegen').val(realDate);
        });
        $("#dateto").on("dp.change", function (e) {
            e.preventDefault();
            $('#datefrom').data("DateTimePicker").maxDate(e.date);
            let realDate = getDateRange();
            $('#fecharegen').val(realDate);
        });

        function getDateRange(){
            let datefrom = $('#datefrom').val();
            let dateto = $('#dateto').val();
            return `${datefrom}/${dateto}`;
        }
        /* FIN - CONSTRUCCION DE RANGO DE FECHAS */

        //TS
        $('#ts_art').change(function (e) {
            e.preventDefault();
            $('#fecharegen').val($(this).val());
        })
    },

    // -------------------------------------------------------------------------
    checkboxToggleChecked: function (name, action) {
        if (action == true) {
            $('input[name="' + name + '"]').prop("checked", true);
        } else {
            $('input[name="' + name + '"]').prop("checked", false);
        }
    },

    // -------------------------------------------------------------------------
    checkStatus: function (theURL) {
        $.ajax({
            url: theURL,
            dataType: 'json',
            cache: false,
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                setTimeout(function () {
                    Opciones.checkStatus(theURL);
                }, 500);
                SubmitForm.handleError(theURL, XMLHttpRequest, textStatus, errorThrown);
            },
            success: function (resp, textStatus) {
                if (resp === null) {
                    if (Opciones.statusCounter > 10) {
                        $('#msg-loading').hide();
                        $('#msg-error').html("Error al procesar, recargue la página para continuar");
                        $('#msg-log').fadeIn();
                        return;
                    } else {
                        Opciones.statusCounter++;
                    }
                    setTimeout(function () {
                        Opciones.checkStatus(theURL);
                    }, 1500);
                    return;
                }
                if (resp.status === 0) {
                    if (typeof resp.inprogress !== 'undefined') {
                        $('#inprogress').html(resp.inprogress).fadeIn();
                    }
                    setTimeout(function () {
                        Opciones.checkStatus(theURL);
                    }, 1500);
                } else {
                    $('#inprogress').hide();
                    $('.boton-generico').fadeIn();
                    if (resp.error) {
                        $('#msg-loading').hide();
                        $('#msg-error').html(resp.msg);
                        $('#msg-log').fadeIn();

                    } else if (resp.msg !== '') {
                        $('#msg-loading').html(resp.msg);
                        $('#msg-log').fadeIn();

                    } else {
                        $('#msg-loading').hide();
                        $('#msg-result').fadeIn();
                        $('#msg-log').fadeIn();
                    }
                    if (resp.total) {
                        $('#total').html(resp.total);
                        $('#total').parent().fadeIn();
                    }
                }
            }
        });

    },

    // -------------------------------------------------------------------------
    checkStatusAdvanced: function (theURL, postFunction) {
        Opciones.postFunction = postFunction;
        $.ajax({
            url: theURL,
            dataType: 'json',
            cache: false,
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                SubmitForm.handleError(theURL, XMLHttpRequest, textStatus, errorThrown);
            },
            success: function (resp, textStatus) {
                if (resp === null) {
                    if (Opciones.statusCounter > 10) {
                        $('#status-progress .status-loading').hide();
                        $('#status-progress .status-msg').html('');
                        $('#status-progress .boton-generico').fadeIn();
                        $('#status-progress .status-result').hide();
                        $('#status-progress .status-error').fadeIn();
                        return;
                    } else {
                        Opciones.statusCounter++;
                    }
                    setTimeout(function () {
                        Opciones.checkStatus(theURL);
                    }, 1500);
                    return;
                }
                if (resp.loading == 1) {
                    if (typeof resp.total === 'undefined') {
                        resp.total = '';
                    }
                    if (typeof resp.actual === 'undefined') {
                        resp.actual = '';
                    }
                    var percentage = 'No disponible';
                    if (resp.total !== '' && resp.actual !== '' && resp.total > 0) {
                        percentage = Math.floor((100 * resp.actual) / resp.total) + '%';
                    }
                    $('#status-progress .status-loading').show();
                    $('#status-progress .status-actual').html(resp.actual).show();
                    $('#status-progress .status-total').html(resp.total).show();
                    $('#status-progress .status-percentage').html(percentage).show();
                    setTimeout(function () {
                        Opciones.checkStatusAdvanced(theURL);
                    }, 1500);
                } else {
                    if (typeof resp.msg === 'undefined' || resp.msg === 'null') {
                        resp.msg = '';
                    }
                    $('#status-progress .status-loading').hide();
                    $('#status-progress .status-msg').html(resp.msg);
                    $('#status-progress .boton-generico').fadeIn();
                    if (resp.status == 1) {
                        $('#status-progress .status-result').fadeIn();
                        $('#status-progress .status-error').hide();
                        if (typeof Opciones.postFunction === 'function') {
                            Opciones.postFunction();
                        }
                    } else {
                        $('#status-progress .status-result').hide();
                        $('#status-progress .status-error').fadeIn();
                    }
                }
            }
        });

    },

    // -------------------------------------------------------------------------
    openPopupLog: function (obj) {

        if (typeof obj === 'undefined') {
            return;
        }

        if ($(obj).attr('href') === '') {
            return;
        }

        var loc = $(obj).attr('href');
        var wpop = 800;
        var hpop = 600;
        var posx = 0;
        var posy = 0;
        var nom = $(obj).attr('rel');
        if (nom === '') {
            nom = 'new_win_log';
        }
        if (screen.width && screen.height) {
            if (wpop < screen.width) {
                posx = (screen.width - wpop) / 2;
            }
            if (hpop < screen.height) {
                posy = (screen.height - hpop) / 2;
            }
        } else {
            showModalAlert({
                title: 'Error',
                type: 'red',
                msg: 'No fue posible abrir el log.'
            });

        }

        Utiles.subWin(loc, nom, wpop, hpop, posx, posy);
        return false;
    },

    // -------------------------------------------------------------------------
    validarMaxartics: function (maxartics) {
        if (maxartics > Opciones.maxarticsLimit) {
            $('#msg-maxartics span').html(Opciones.maxarticsLimit);
            $('#msg-maxartics').show();
        }
    },

    // -------------------------------------------------------------------------
    validarTaxNivCero: function (taxniv) {
        if (taxniv == '0') {
            $('#msg-taxniv-cero').show();
        }
    }

};

$(document).ready(function() {
    Opciones.init();
});
