var UsrAdmin = {
    maxLength: 32,
    minLength: 8,
    idAdmin: 1,

    init: function () {
        $('#fichaNuevoUsuario, #fichaUsuarioAdmin').on('click', function () {
            var userid = $(this).data('userid');
            UsrAdmin.cargarFicha(userid);
            return false;
        });

        $('#user-list').on('click', '.cargarFicha', function () {
            var userid = $(this).data('userid');
            UsrAdmin.cargarFicha(userid);
            return false;
        });

        $('#user-list').on('click', '.borrarUsuario', function () {
            var userid = $(this).data('userid');
            if (userid) {
                UsrAdmin.borrar(userid);
            } else {
                showModalAlert({
                    title: 'Error',
                    type: 'red',
                    msg: 'No es posible borrar este usuario.'
                });
            }
            return false;
        });

        $('#user-list').on('click', '.recuperarUsuario', function () {
            var userid = $(this).data('userid');
            if (userid) {
                UsrAdmin.recuperar(userid);
            } else {
                showModalAlert({
                    title: 'Error',
                    type: 'red',
                    msg: 'No es posible recuperar este usuario.'
                });
            }
            return false;
        });

        // eventos del modal ficha de usuario
        $('#modalUsuarioContenido').on('click', '.selectTodosArticulos', function () {
            UsrAdmin.checkboxToggleChecked('arts_'+ this.dataset.prontus +'[]', true);
            return false;
        });
        $('#modalUsuarioContenido').on('click', '.selectNingunArticulo', function () {
            UsrAdmin.checkboxToggleChecked('arts_'+ this.dataset.prontus +'[]', false);
            return false;
        });
        $('#modalUsuarioContenido').on('click', '.selectTodasPortadas', function () {
            UsrAdmin.checkboxToggleChecked('ports_'+ this.dataset.prontus +'[]', true);
            return false;
        });
        $('#modalUsuarioContenido').on('click', '.selectNingunaPortada', function () {
            UsrAdmin.checkboxToggleChecked('ports_'+ this.dataset.prontus +'[]', false);
            return false;
        });
        $('#modalUsuarioContenido').on('click', '#genera_psw', function () {
            UsrAdmin.generaPassword();
            return false;
        });
        $('#modalUsuarioContenido').on('click', '.guardarFicha', function () {
            var userid = $(this).data('userid');
            UsrAdmin.guardarFicha(userid);
            return false;
        });
        $('#modalUsuarioContenido').on('blur change', '#perfil', function (e) {
            e.preventDefault();
            if (this.value == 1) {
                $('.content-list').hide();
            } else {
                $('.content-list').show();
            }
        });

        $(window).resize(function() {
            // ajusta alto del contenedor de usuarios para scroll
            var listado = document.getElementById('user-list');
            listado.style.height = (window.innerHeight - listado.getBoundingClientRect().y - 25) +"px";
        });
        $(window).resize();

        $('.input-search').on('blur', UsrAdmin.filtrarItems);
        $('.input-search').on('keyup', UsrAdmin.filtrarItems);
        $('#filtro_perfil').on('click', UsrAdmin.filtrarItems);
        $('#comparador_expiracion').on('click', UsrAdmin.filtrarItems);

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

        $('#genera_psw').on('click', UsrAdmin.generaPassword);
        UsrAdmin.cargaUsuarios();
    },

    filtrarItems: function(event) {
        var usr = document.getElementById('filtro_usuario').value.toLowerCase();
        var nom = document.getElementById('filtro_nombre').value.toLowerCase();
        var email = document.getElementById('filtro_correo').value.toLowerCase();
        var perfil_id = document.getElementById('filtro_perfil').value;
        var fec_exp_format = document.getElementById('filtro_expiracion').value;
        var fec_exp = document.getElementById('filtro_expiracion').value;
        fec_exp = fec_exp == ''? 0:fec_exp;
        fec_exp = new Date(fec_exp).getTime()/1000;

        var comparador = document.getElementById('comparador_expiracion').value;
        var elements = document.getElementById('user-list').children;
        var total = elements.length;
        for (var i = 0; i < total; i++) {
            if ((elements[i].dataset.usr.toLowerCase().indexOf(usr) > -1) &&
                (elements[i].dataset.nom.toLowerCase().indexOf(nom) > -1) &&
                (elements[i].dataset.email.toLowerCase().indexOf(email) > -1) &&
                (perfil_id < 1 || perfil_id == elements[i].dataset.perfil_id) &&
                ( elements[i].dataset.fec_exp != 0 && fec_exp != 0 &&
                   (elements[i].dataset.fec_exp_format.indexOf(fec_exp_format) > -1 && comparador == '=' ||
                    elements[i].dataset.fec_exp > fec_exp && comparador == '>' ||
                    elements[i].dataset.fec_exp < fec_exp && comparador == '<') || comparador == '' )) {
                $(elements[i]).show();
            } else {
                $(elements[i]).hide();
            }
        }
    },

    generaPassword: function () {
        $.ajax({
            dataType: 'json',
            url: '/' + Admin.dir_cgi_cpn + '/prontus_psw_gen.cgi',
            success: function(data) {
                document.getElementById('psw1').value = data.pwd;
                document.getElementById('psw2').value = data.pwd;
                $('#psw_gen').html(data.pwd).fadeIn();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                SubmitForm.handleError('/' + Admin.dir_cgi_cpn + '/prontus_psw_gen.cgi', XMLHttpRequest, textStatus, errorThrown);
            }
        });

    },

    cargarFicha: function (id) {
        var url;

        if (typeof id === 'undefined' || id === '') {
            url = '/' + Admin.dir_cgi_cpn + '/prontus_usr_ficha.cgi?_prontus_id=' + Admin.prontus_id;
        } else {
            url = '/' + Admin.dir_cgi_cpn + '/prontus_usr_ficha.cgi?_prontus_id=' + Admin.prontus_id + '&USERS_ID=' + id;
        }

        var title = "Agregar Nuevo Usuario";
        if (id == UsrAdmin.idAdmin) {
            title = 'Modificar cuenta de Administrador';
        } else if (id) {
            title = "Modificar cuenta de usuario";
        }

        $('#modalUsuarioContenido').load(url, function (responseText, textStatus, req) {
            if (textStatus == 'error') {
                showModalAlert({
                    title: 'Error de servidor',
                    type: 'red',
                    msg: responseText
                });
            } else {
                if ($('#modalUsuarioContenido #perfil').val() == 1){
                    $('.content-list').hide();
                } else {
                    $('.content-list').show();
                }

                $('#modalUsuarioLabel').html(title);
                $('#modalUsuario').modal();
                UsrAdmin.initFicha();
            }
        });
    },

    initFicha: function () {
        $("#range-slide").slider({
            range: "min",
            value: 0,
            min: 0,
            max: 365,
            slide: function (e, ui) {
                $('#exp_days').val(ui.value);
            }
        });

        $("#range-slide").slider("option", "value", $('#exp_days').val());

        $('#exp_days').on('keyup', function (e) {
            if (e.keyCode == 13) {
                if ($(this).val() < 0) {
                    $(this).val(0);
                    $("#range-slide").slider("option", "value", 0);
                } else if ($(this).val() > 365) {
                    $(this).val(365);
                    $("#range-slide").slider("option", "value", 365);
                } else {
                    $("#range-slide").slider("option", "value", $(this).val());
                }
            }
        });

        UsrAdmin.bindCheckPasswordStrength();

        $('#show_password').on('click', function (e) {
            e.preventDefault();
            var $element = $('#psw1');
            if ($element.attr('type') == 'text') {
                $element.attr('type', "password");
            } else {
                $element.attr('type', "text");
            }
        });
    },

    bindCheckPasswordStrength: function () {
        $('#psw1,#psw1_head').on('keyup', function (e) {
            $('#psw_strength,#psw_strength_head').html(UsrAdmin.checkPasswordStrength($(this).val()));
        });
    },

    checkPasswordStrength: function (password) {
        if (password.length == 0) return '';
        if (password.length < UsrAdmin.minLength) {
            $('#psw_strength,#psw_strength_head').parent().removeClass('has-warning has-success').addClass('has-warning');

            return 'Contraseña muy corta';
        }

        if (!password.match(/([a-z])/)) {
            return 'Incluye letras minúsculas';
        } else if (!password.match(/([A-Z])/)) {
            $('#psw_strength,#psw_strength_head').parent().removeClass('has-warning has-success').addClass('has-warning');
            return 'Incluye al menos una mayúscula';
        } else if (!password.match(/([0-9])/)) {
            $('#psw_strength,#psw_strength_head').parent().removeClass('has-warning has-success').addClass('has-warning');
            return 'Incluye al menos un número';
        } else if (!password.match(/([!,%,&,@,#,$,^,*,?,_,.])/)) {
            $('#psw_strength,#psw_strength_head').parent().removeClass('has-warning has-success').addClass('has-warning');
            return 'Te falta incluir uno de estos caracteres especiales: !%&@#$^*?_.';
        } else {
            $('#psw_strength,#psw_strength_head').parent().removeClass('has-warning has-success').addClass('has-success');
            return 'Excelente!';
        }
    },

    borrar: function (id) {
        var msg = '¿Estás seguro de borrar este usuario?';
        showModalConfirm({
            'title':'Borrar Usuario',
            'msg': msg,
            type: "orange",
            icon: "glyphicon glyphicon-exclamation-sign",
            okTitle: 'Borrar',
            btnClassOk: 'hovwhite radius15 noborder txtnextwhite pad-top-bot7 pad-lef-rig20 int-nextred nextred',
            cbBtnOK: function() {
                $.ajax({
                    url: '/' + Admin.dir_cgi_cpn + '/prontus_usr_borrar.cgi',
                    type: 'POST',
                    dataType: 'json',
                    data: { '_id': id, '_prontus_id': Admin.prontus_id },
                    success: function (data) {
                        if (data.status == '0') {
                            showModalAlert({
                                title: 'Error de servidor',
                                type: 'red',
                                msg: data.msg
                            });
                        } else {
                            UsrAdmin.cargaUsuarios();
                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        SubmitForm.handleError('/' + Admin.dir_cgi_cpn + '/prontus_usr_borrar.cgi', XMLHttpRequest, textStatus, errorThrown);
                    }
                });
            }
        });
    },

    recuperar: function (id) {
        var msg = '¿Estás seguro de recuperar este usuario?';
        showModalConfirm({
            'title':'Recuperar Usuario',
            'msg': msg,
            type: "orange",
            icon: "glyphicon glyphicon-exclamation-sign",
            okTitle: 'Recuperar',
            btnClassOk: 'hovwhite radius15 noborder txtnextwhite pad-top-bot7 pad-lef-rig20 int-nextred nextred',
            cbBtnOK: function() {
                $.ajax({
                    url: '/' + Admin.dir_cgi_cpn + '/prontus_usr_borrar.cgi',
                    type: 'POST',
                    dataType: 'json',
                    data: { '_id': id, '_prontus_id': Admin.prontus_id, '_recover': 1 },
                    success: function (data) {
                        if (data.status == '0') {
                            showModalAlert({
                                title: 'Error de servidor',
                                type: 'red',
                                msg: data.msg
                            });
                        } else {
                            UsrAdmin.cargaUsuarios();
                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                        SubmitForm.handleError('/' + Admin.dir_cgi_cpn + '/prontus_usr_borrar.cgi', XMLHttpRequest, textStatus, errorThrown);
                    }
                });
            }
        });
    },

    guardarFicha: function (id) {
        var msg = '¿Estás seguro que deseas guardar tus datos?';
        if (id == UsrAdmin.idAdmin) {
            showModalConfirm({
                'title':'Modificar Usuario Administrador',
                'msg': msg,
                type: "orange",
                icon: "glyphicon glyphicon-exclamation-sign",
                btnClassOk: 'hovwhite radius15 noborder txtnextwhite pad-top-bot7 pad-lef-rig20 int-nextyellow nextyellow',
                okTitle: 'Guardar',
                cbBtnOK: function() {
                    UsrAdmin.enviarDatos(id);
                    return true;
                },
                cbBtnCancel: function () {
                    return false;
                }
            });
        } else {
            UsrAdmin.enviarDatos(id);
        }
    },

    enviarDatos: function(id) {
        var configAjax = {
            formSelector: '#frmUsrFicha',
            actionURL: '/' + Admin.dir_cgi_cpn + '/prontus_usr_sbmit.cgi?_prontus_id='+Admin.prontus_id
        };

        var optsAjax = {
            success: function (json, statusText) {
                if (json.status == '1' && json.msg === '') {
                    if (id == UsrAdmin.idAdmin) {
                        window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_logout.cgi?_prontus_id=' + Admin.prontus_id;
                    } else {
                        $('#modalUsuario').modal('hide')
                        UsrAdmin.cargaUsuarios();
                    }
                } else if (json.status == '1' && json.msg !== '') {
                    showModalAlert({
                        title: 'Resultado',
                        type: 'green',
                        msg: json.msg
                    });
                    if (id == UsrAdmin.idAdmin) {
                        window.location.href = '/' + Admin.dir_cgi_cpn + '/prontus_logout.cgi?_prontus_id=' + Admin.prontus_id;
                    } else {
                        $('#modalUsuario').modal('hide')
                        UsrAdmin.cargaUsuarios();
                    }
                } else if (json.status == '0') {
                    showModalAlert({
                        title: 'Error de servidor',
                        type: 'red',
                        msg: json.msg
                    });
                }
            }, // success
            complete: function () {
                /* Cargando... */
            },
            error: function(xhr, ajaxOptions, thrownError) {
                showModalAlert({
                    title: 'Error de servidor',
                    type: 'red',
                    msg: thrownError
                });
            }
        };
        SubmitForm.submitGenericAjax(configAjax, optsAjax);

    },

    toggleChecked: function (o) {
        if ($(o).is(':checked')) {
            $(o).parent().find('label').addClass('checked');
        } else {
            $(o).parent().find('label').removeClass('checked');
        }
    },

    checkboxToggleChecked: function (name, action) {
        if (action == true) {
            $('input[name="' + name + '"]').attr("checked", "checked");
            $('input[name="' + name + '"]').next('label').addClass("checked");
        } else {
            $('input[name="' + name + '"]').removeAttr("checked");
            $('input[name="' + name + '"]').next('label').removeClass("checked");
        }
    },
    cargaUsuarios: function() {
        $('#modal-loading').modal();
        $.ajax({
            url: '/' + Admin.dir_cgi_cpn + '/prontus_usr_list.cgi',
            data: { '_prontus_id': Admin.prontus_id },
            dataType: 'json',
            type: 'POST',
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                Admin.counterError++;
                if (Admin.counterError >= Admin.maxErrorCounter) {
                    SubmitForm.handleError(status_url, XMLHttpRequest, textStatus, errorThrown);
                    $('#modal-loading').modal('hide');
                } else {
                    setTimeout(UsrAdmin.cargaUsuarios, 500);
                }
            },
            success: function(resp, textStatus) {
                Admin.counterError = 0;
                if (resp.status == 1) {
                    var template = document.getElementById('tpl_list').textContent;
                    var list = '';
                    for(var i = 0; i <resp.data.length; i++) {
                        var aux = template;
                        // fecha expiracion se formatea aparte y antes
                        if (resp.data[i].fec_exp > 1) {
                            var fec_exp = new Date(resp.data[i].fec_exp * 1000);
                            var formatted_fec_exp = zeroLead(fec_exp.getDate()) + "/" + zeroLead(fec_exp.getMonth() + 1) + "/" + fec_exp.getFullYear() + " " + zeroLead(fec_exp.getHours()) + ":" + zeroLead(fec_exp.getMinutes()) + ":" + zeroLead(fec_exp.getSeconds());
                            aux = aux.replace(new RegExp( '{{_fec_exp_format}}', "g"), formatted_fec_exp);
                        } else {
                            aux = aux.replace(new RegExp( '{{_fec_exp_format}}', "g"), '');
                        }
                        // resto de campos
                        for (var prop in resp.data[i]) {
                            aux = aux.replace(new RegExp('{{_'+prop+'}}', "g"), resp.data[i][prop]);
                            if (resp.data[i].deleted == '1') {
                                aux = aux.replace(new RegExp('{{_activo}}', "g"), 'hidden');
                                aux = aux.replace(new RegExp('{{_borrado}}', "g"), '');
                                aux = aux.replace(new RegExp('{{_estado}}', "g"), 'No');
                            } else {
                                aux = aux.replace(new RegExp('{{_activo}}', "g"), '');
                                aux = aux.replace(new RegExp('{{_borrado}}', "g"), 'hidden');
                                aux = aux.replace(new RegExp('{{_estado}}', "g"), 'Si');
                            }
                        }
                        list = list + aux;
                    }

                    var listado = document.getElementById('user-list');
                    while (listado.firstChild) {
                        listado.removeChild(listado.lastChild);
                    }
                    listado.insertAdjacentHTML('afterbegin',list);
                    $('#modal-loading').modal('hide');
                } else {
                    $('#modal-loading').modal('hide');
                    showModalAlert({
                        title: 'Se ha producido un error',
                        type: 'red',
                        msg: resp.msg
                    });
                }
            }
        });
    }
};
