/*jslint vars: true, undef: true, sloppy: true, maxerr: 50, indent: 4 */
var Tags  = {
    loading: true,

    cgiMostrar: 'prontus_tags_resumen.cgi',
    cgiEliminar: 'prontus_tags_borrar.cgi',
    cgiGuardar: 'prontus_tags_guardar.cgi',
    cgiCambiaSt: 'prontus_tags_cambia_st.cgi',

    // -------------------------------------------------------------------------
    init: function () {
        Tags.loading = false;

        /* Quitar clase 'input-sinpulsar' a los inputs que se les hace click. */
        $('#nuevo-tags-0').find('input[type="text"]').focus(function () {
            if ($(this).hasClass('input-sinpulsar')) {
                $(this).removeClass('input-sinpulsar');
                $(this).val('');
            }
        });
        $('#frmBuscadorTags').on('click', '#buscar-tags', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.realizarBusqueda();
        });

        $('#frmBuscadorTags').on('click', '#eliminar-filtros', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.limpiaFiltros();
        });

        $('#acciones-tags').on('click', "#importar-tags", function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.modalImportTag();
        });

        $('#acciones-tags').on('click', "#exportar-tags", function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.modalExportTag();
        });

        $('#acciones-tags').on('click', '#ocultar-deshabilitadas', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.ocultarDeshabilitadas();
        });

        $('#listado-tags').on('click', '.ordenar-vista', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.navVista(this);
        });

        $('#nueva-tag').on('click', '.mostrar-nueva', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.mostrarNuevo();
        });

        $('#nueva-tag').on('click', '#refresh-window', function(e) {
            e.preventDefault();
            e.stopPropagation();
            window.location.reload();
        });

        $('#nueva-tag').on('click', '.guardar-item-nuevo', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.guardarItemNuevo(this);
        });

        $('#lista-tags').on('click', '.resumen-item', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.resumenItem(this);
        });

        $('#lista-tags').on('click', '.slide-toggler', function(e) {
            e.preventDefault();
            e.stopPropagation();
            var elemento = $(this).data('tagport-id');
            $('#'+elemento).slideToggle();
        });

        $('#lista-tags').on('click', '.mostrar-editar', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.mostrarEditar(this);
        });

        $('#lista-tags').on('click', '.eliminar-tag', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.eliminarTags(this);
        });

        $('#lista-tags').on('click', '.cambiar-estado', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.cambiaEstado(this);
        });

        $('#lista-tags').on('click', '.guardar-item', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.guardarItem(this);
        });

        $('#lista-tags').on('click', '.editar-item', function(e) {
            e.preventDefault();
            e.stopPropagation();
            Tags.resumenItem(this);
        });

        // muestra ventana de edicion de F5
        $('.show-f5').off('click').on('click', UrlF5.actions.editUrlTag);
        // Para el buscador
        Utiles.instalaHandlerBuscador('#search_texto', '');
    },

    // -------------------------------------------------------------------------
    // Muestra el resumen de un determinado tag
    resumenItem: function (obj) {
        if (Tags.loading) {
            Tags.handleLoading();
            return;
        }
        var id_tag = Tags.findId(obj);
        var url = '/' + Admin.dir_cgi_cpn + '/' + Tags.cgiMostrar;
        url += '?_prontus_id=' + Admin.prontus_id;
        url += '&_id=' + id_tag;

        //Modal grande
        $('#modal_tags .modal-dialog').addClass('modal-lg');
        // Para el importar y exportar tags
        $('.modal-content').load(url,function(){
            $('#modal_tags').modal('show');
        });
    },

    // -------------------------------------------------------------------------
    // Guarda un item existente en el listado
    guardarItem: function (obj) {
        if (Tags.loading) {
            Tags.handleLoading();
            return;
        }

        var theUrl = '/' + Admin.dir_cgi_cpn + '/' + Tags.cgiGuardar;

        var form_data = {
            "_prontus_id" : Admin.prontus_id
        };

        var id_tag = Tags.findId(obj);
        form_data["_id"] = id_tag;

        var nom_tag = $('#_nom' + id_tag).val();
        form_data["_nom"] = nom_tag;

        /* ver si existen vistas. */
        if ($('input[name^="_nom' + id_tag + '-vista-"]').length > 0) {
            $('input[name^="_nom' + id_tag + '-vista-"]').each(function () {
                var reg_exp = new RegExp("_nom" + id_tag + "-vista-(.*?)", "g");
                var nom_vista = ($(this).attr('name')).replace(reg_exp, '');
                form_data["_nom-"+ nom_vista] = $(this).val();
            });
        }

        if ($('input[name^="_port-tags' + id_tag + '-port"]').val() != undefined) {
            form_data["_port"] = $('input[name^="_port-tags' + id_tag + '-port"]').val();
        } else {
            form_data["_port"] = '';
        }

        /* Mostrar imagen loading y esconder botones. */
        $(obj).parent().parent().find('a').hide();
        $(obj).parent().parent().find('.loading_save').show();

        $.ajax({
            url:        theUrl,
            type:       'POST',
            dataType:   'json',
            data:       form_data,
            cache:      false,
            complete: function () {
                $(obj).parent().parent().find('.loading_save').hide();
                $(obj).parent().parent().find('a').show();
            },
            success: function (data) {
                if (data.status == '0') {
                    if (data.msg) {
                        showModalAlert({
                            title: 'Error',
                            msg: data.msg
                        });
                    } else {
                        showModalAlert({
                            title: 'Error',
                            msg: 'Error, no se pudo guardar'
                        });
                    }
                    return;

                } else {
                    var theId = data.theId;
                    var theName = data.theName;

                    $('#_nom' + theId).val(Tags.unescapeHTML(theName));

                    /* ver si existen vistas. */
                    if ($('input[name^="_nom' + theId + '-vista-"]').length > 0) {
                        var tmp_val;
                        $('input[name^="_nom' + theId + '-vista-"]').each(function () {
                            var reg_exp = new RegExp("_nom" + theId + "-vista-(.*?)", "g");
                            var nom_vista = ($(this).attr('name')).replace(reg_exp, '');
                            tmp_val = data["theName_" + nom_vista];
                            $('#_nom' + theId + '-vista-' + nom_vista).val(Tags.unescapeHTML(tmp_val));
                            $('#divtag' + theId).find('.txt_nom-' + nom_vista).html(tmp_val);
                        });
                    }

                    $('#divtag' + theId).find('.modo-vista').find('.col-tag:eq(0)').html(theName);
                    $('#divtag' + theId).addClass('newitem');
                    Tags.mostrarEditar(obj);
                }
            },
            error:   function (XMLHttpRequest, textStatus, errorThrown) {
                SubmitForm.handleError(theUrl, XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    // -------------------------------------------------------------------------
    // Guarda un nuevo item en el listado
    guardarItemNuevo: function (obj) {
        var newitem = $(obj).data('item');
        if (Tags.loading) {
            Tags.handleLoading();
            return;
        }

        var theUrl = '/' + Admin.dir_cgi_cpn + '/' + Tags.cgiGuardar;
        var form_data = {
            "_prontus_id" : Admin.prontus_id
        };

        /* Mostrar imagen loading y esconder botones. */
        $(obj).parent().parent().find('a').hide();
        $(obj).parent().parent().find('.loading_save').show();

        /* Obtener y armar data para el .ajax */
        form_data["_nom"] = $('#field-text').val();

        /* ver si existen vistas. */
        if ($('input[id^="field-text-vista-"]').length > 0) {
            $('input[id^="field-text-vista-"]').each(function () {
                let nom_vista = $(this).attr('name');
                form_data[nom_vista] = $(this).val();
            });
        }

        // ver si existe url custom para portadas
        if ($('#field-text-url').length > 0) {
            let nom_vista = $('#field-text-url').attr('name');
            form_data[nom_vista] = $('#field-text-url').val();
        }

        $.ajax({
            url:        theUrl,
            type:       'POST',
            dataType:   'json',
            data:       form_data,
            cache:      false,
            complete: function () {
                $(obj).parent().parent().find('.loading_save').hide();
                $(obj).parent().parent().find('a').show();
            },
            success: function (data) {
                if (data.status == '0') {
                    if (data.msg) {
                        showModalAlert({
                            title: 'Error',
                            msg: data.msg
                        });
                    } else {
                        showModalAlert({
                            title: 'Error',
                            msg: 'Error, no se pudo eliminar'
                        });
                    }
                    return;

                } else {
                    Tags.cloneNewItem(data);
                    $('#field-text').val('');
                    $('#field-text-url').val('');
                    $('input[id^="field-text-vista-"]').each(function () {
                        $(this).val('');
                    });
                    if (newitem === 0) {
                        Tags.mostrarNuevo();
                    } else {
                        $('#field-text').focus();
                    }
                }
            },
            error:   function (XMLHttpRequest, textStatus, errorThrown) {
                SubmitForm.handleError(theUrl, XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    // -------------------------------------------------------------------------
    // Elimina un tag del listado
    eliminarTags: function (obj) {

        if (Tags.loading) {
            Tags.handleLoading();
            return;
        }
        var id_tag = Tags.findId(obj);
        var msg = '¿Estás seguro de querer borrar este Tag?';
        showModalConfirm({
            msg: msg,
            icon: "glyphicon glyphicon-question-sign",
            btnClassOk: 'hovwhite radius15 noborder txtnextwhite pad-top-bot7 pad-lef-rig20 int-nextred nextred',
            okTitle: 'Borrar',
            cbBtnOK: function () {
            var theUrl = '/' + Admin.dir_cgi_cpn + '/' + Tags.cgiEliminar;
            var form_data = {
                "_prontus_id" : Admin.prontus_id,
                '_id_tag' : id_tag
            };
            $(obj).parent().parent().find('a').hide();
            $('#divtag' + id_tag + ' .loading-borrar').show();
            $.ajax({
                url:        theUrl,
                type:       'POST',
                dataType:   'json',
                data:       form_data,
                complete: function () {
                    $('#divtag' + id_tag + ' .link-borrar').show();
                    $('#divtag' + id_tag + ' .loading-borrar').hide();
                },
                success: function (data) {
                    if (data.status == '0') {
                        if (data.msg) {
                            showModalAlert({
                                title: 'Error',
                                msg: data.msg
                            });
                        } else {
                            showModalAlert({
                                title: 'Error',
                                msg: 'Error, no se pudo eliminar'
                            });
                        }
                        return;
                    }
                    $('#divtag' + id_tag).parent().fadeOut();
                },
                error:   function (XMLHttpRequest, textStatus, errorThrown) {
                    SubmitForm.handleError(theUrl, XMLHttpRequest, textStatus, errorThrown);
                }
            });
            },
            cbBtnCancel: function () {
                return false;
            }
        });
    },

    // -------------------------------------------------------------------------
    // Cambia el estado de un item en el listado de tags
    cambiaEstado: function (obj) {
        var theId = Tags.findId(obj);

        $(obj).parent().parent().find('a').hide();
        $(obj).parent().parent().find('.loading-borrar').show();

        // btn_ticket_red, btn_ticket_green
        var value = 1;
        if ($(obj).find('span').hasClass('btn_ticket_green') ) {
            value = 0;
        }

        var form_data = {
            "_prontus_id" : Admin.prontus_id,
            '_id_tag' : theId,
            '_new_st' : value
        };
        var theUrl = '/' + Admin.dir_cgi_cpn + '/' + Tags.cgiCambiaSt;
        $.ajax({
            url:        theUrl,
            type:       'POST',
            dataType:   'json',
            data:       form_data,
            complete: function () {
                $(obj).parent().parent().find('a').show();
                $(obj).parent().parent().find('.loading-borrar').hide();
            },
            success: function (data) {
                if (data.status == '0') {
                    showModalAlert({
                        title: 'Error',
                        msg: data.msg
                    });
                } else {
                    if ($(obj).find('span').hasClass('btn_ticket_green')) {
                        $(obj).find('span').removeClass('btn_ticket_green');
                        $(obj).find('span').addClass('btn_ticket_red');

                        $(obj).parents('li').removeClass('habilitado1').addClass('habilitado0');
                    } else {
                        $(obj).find('span').removeClass('btn_ticket_red');
                        $(obj).find('span').addClass('btn_ticket_green');

                        $(obj).parents('li').removeClass('habilitado0').addClass('habilitado1');
                    }
                }
            },
            error:   function (XMLHttpRequest, textStatus, errorThrown) {
                SubmitForm.handleError(theUrl, XMLHttpRequest, textStatus, errorThrown);
            }
        });
    },

    // -------------------------------------------------------------------------
    // Oculta los items que estan deshabilitados
    ocultarDeshabilitadas: function (obj) {
        if ($(obj).hasClass('link-ocultar')) {
            // Ocultar los deshabilitados
            $(obj).hide().parent().find('.link-mostrar').show();
            $('#lista-tags li.habilitado0').slideToggle('slow');
        } else {
            // Mostrar los deshabilitados
            $(obj).hide().parent().find('.link-ocultar').show();
            $('#lista-tags li.habilitado0').slideToggle('slow');
        }
    },

    // -------------------------------------------------------------------------
    // Muestra la caja de nuevo item del listado
    mostrarNuevo: function () {
        $('#nuevo-tags-0').slideToggle('slow');
    },

    // -------------------------------------------------------------------------
    // Muestra la caja de edicion de un item del listado
    mostrarEditar: function (obj) {
        var fila1 = $(obj).parents('.fila1');
        if ($(fila1).find('div:first').is(':visible')) {
            $(fila1).find('.modo-vista').hide();
            $(fila1).find('.modo-edicion').show();
            $(fila1).addClass('editing');
        } else {
            $(fila1).find('.modo-edicion').hide();
            $(fila1).find('.modo-vista').show();
            $(fila1).removeClass('editing');
        }
    },

    // -------------------------------------------------------------------------
    // Clona una fila para poder crear un nuevo item del listado
    cloneNewItem: function (data) {
        var theId = data.theId;
        var theName = data.theName;

        var newLi = $('#lista-tags li:last').clone();
        $(newLi).find('div:first').attr('id', 'divtag' + theId).addClass('newitem');
        $(newLi).find('.col-xs-1').html(theId);
        $(newLi).find('.col-tag:first').html(theName);
        $(newLi).find('.col-tag input:first').attr('id', '_nom' + theId).attr('name', '_nom' + theId).val(Tags.unescapeHTML(theName));
        $(newLi).find('.show-f5').attr("data-elid", theId);

        /* Hay vistas? */
        if ($(newLi).find('input[name^="nom-new-item-vista-"]').length > 0) {
            var tmp_value;
            $(newLi).find('input[name^="nom-new-item-vista-"]').each(function () {
                var vista = ($(this).attr("name")).replace('nom-new-item-vista-', '');
                // eval("tmp_value = data.theName_" + vista);
                tmp_value = data["theName_" + vista];
                $(newLi).find('.txt_nom-' + vista).html(tmp_value);
                $(this).val(Tags.unescapeHTML(tmp_value));
                /* Cambiar nombre del input. */
                $(this).attr("name", "_nom" + theId + "-vista-" + vista);
            });
        }

        $(newLi).prependTo('#lista-tags').fadeIn();
    },

    // -------------------------------------------------------------------------
    // Encuentra el ID de la fila actual en el listado de tags
    findId: function (obj) {
        var theId = $(obj).parents('.row-item').attr('id');
        if (theId !== '') {
            theId = theId.replace('divtag', '');
        }
        return theId;
    },

    // -------------------------------------------------------------------------
    handleLoading: function () {
        // TODO Colocar un loading y ocultarlo en este punto
        showModalAlert({
            title: 'Error',
            type: 'red',
            msg: 'Espera unos segundos antes de realizar esta acción'
        });
    },

    // -------------------------------------------------------------------------
    // Ejecuta la busqueda de tags en el listado de tags
    realizarBusqueda: function () {
        var theUrl =  '/' + Admin.dir_cgi_cpn + '/prontus_tags_admin.cgi';
        $('#frmBuscadorTags').attr("action", theUrl);
        if ($('#search_texto').val() === '') {
            showModalAlert({
                title: 'Error',
                type: 'green',
                msg: "Debes ingresar una palabra para buscar."
            });
        } else {
            $('#frmBuscadorTags').submit();
        }
    },

    // -------------------------------------------------------------------------
    // Limpia los filtros de busqueda en el listado de tags
    limpiaFiltros: function () {
        var theUrl = '/' + Admin.dir_cgi_cpn + '/prontus_tags_admin.cgi?_prontus_id=' + Admin.prontus_id;
        window.location.href = theUrl;
    },

    // -------------------------------------------------------------------------
    // Sirve para cambiar de vista en el listado de tags
    navVista: function (elemento) {
        var direccion = $(elemento).data('direccion');
        var nom_vista = $(elemento).data('vista');
        if (direccion == 'right') {
            if ($('.header.vista-'+nom_vista).next().hasClass('header')) {
                $('.vista-'+nom_vista).hide();
                $('.vista-'+nom_vista).next().show();

                $('.txt_nom-'+nom_vista).hide();
                $('.txt_nom-'+nom_vista).next().show();
            }
        } else if (direccion == 'left') {
            if ($('.header.vista-'+nom_vista).prev().hasClass('header')) {
                $('.vista-'+nom_vista).hide();
                $('.vista-'+nom_vista).prev().show();

                $('.txt_nom-'+nom_vista).hide();
                $('.txt_nom-'+nom_vista).prev().show();
            }
        }
    },

    // -------------------------------------------------------------------------
    // Escapea y ademas despulga un string
    unescapeHTML: function (str) {
        if (typeof str !== 'undefined' && str !== null && str !== '') {
            return str.replace(/&amp;/g, '&').replace(/&gt;/g, '>').replace(/&lt;/g, '<').replace(/&quot;/g, '"').replace(/&#39;/g, "'");
        }
        return '';
    },

    modalExportTag: function() {
        var dataURL = '/'+Admin.dir_cgi_cpn+'/prontus_tags_export.cgi?_prontus_id=' + Admin.prontus_id;
        $('#modal_tags .modal-content').load(dataURL,function(){
            $('#modal_tags').modal({show:true, backdrop: 'static', keyboard: false});
            Opciones.checkStatus('/' + Admin.prontus_id + '/cpan/procs/result_tags_export.json');
        });
    },

    modalImportTag: function() {
        $('#modal_tags_import').modal({show:true, backdrop: 'static', keyboard: false});
        $('#FILE1').filestyle();

        var file = $('#FILE1');
        var msgError = $('#form1 .msg-error');
        var fileFormatIsValid = true;

        file.on('change', function(event) {
            event.preventDefault();
            fileFormatIsValid = Tags.fileValidateFormat(file, msgError);
        });

        $('#form1').on('submit', function(e){
            e.preventDefault();

            if (file.val() === '') {
                alert('Debes ingresar un archivo para Importar.');
                return;
            }

            var form_action = '/'+Admin.dir_cgi_cpn+'/prontus_tags_import.cgi';
            var form = $(this);
            var formdata = false;

            if (window.FormData){
                formdata = new FormData(form[0]);
            }

            if (fileFormatIsValid) {
                $.ajax({
                    url         : form_action,
                    data        : formdata ? formdata : form.serialize(),
                    cache       : false,
                    contentType : false,
                    processData : false,
                    type        : 'POST',
                    success     : function(data, textStatus, jqXHR){
                        $('#modal_tags_import .modal-content').html(data);
                        Opciones.checkStatus('/' + Admin.prontus_id + '/cpan/procs/result_tags_import.json');
                    }
                });
            }
        });
    },
    fileValidateFormat: function(fileUpload, idMsgError) {
        idMsgError.fadeOut();
        var allowedFiles = [".xml"];
        var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:\(\) ])+(" + allowedFiles.join('|') + ")$");
        if (!regex.test(fileUpload.val().toLowerCase())) {
            idMsgError.fadeIn();
            idMsgError.find('p').html('<span class="glyphicon glyphicon-remove text-danger"></span> Formato de archivo no válido');
            return false;
        }
        return true;
    }
}
