/**
 * @author	Breiner E. Hernández G.	<bhernandez>
 */

/**
 * Función invocada desde el success como un callback para manejar la respuesta del server
 * cuando devuelve las ciudades o regiones dependiendo del/los eventos lanzados
 */
var responseCallback = function (data, elDOM) {
    if (data.success) {
        elDOM.html(data.response);
    } else {
        console.log(data.message);
    }
}


/**
 * Cuando una lista con Paises cambia de selección, busca sus respectivas regiones
 * o departamentos y las coloca en la lista de regiones o departamentos si existe
 */
Formularios_changePais = function () {
    var sessionToken = $("#id_dept:hidden").val();
    var pais_id = $(this).val();
    if (pais_id == ""){
        pais_id = null;
    }
    var field_id = $(this).data('fieldid');
    var region_list = $(this).parents('.skin_' + field_id).find('.fieldFrmD');
    if (!region_list.length) {
        return;
    }
    var url_regiones = $("#getRegiones").data("urlregiones");
    jQuery.ajax({
        url: url_regiones,
        async: false,
        dataType: 'json',
        data: {idPais: pais_id, sxToken: sessionToken},
        method: 'post'
    }).done(function (data) {
        responseCallback(data, region_list);
        region_list.trigger('change');
    });
}


/**
 * Cuando una lista con Regiones o Departamentos cambia de selección, busca sus
 * respectivas ciudades y las coloca en la lista de ciudades si existe
 */
Formularios_changeRegion = function () {
    var sessionToken = $("#id_ciudad:hidden").val();
    var region_id = $(this).val();
    if (region_id == ""){
        region_id = null;
    }
    var field_id = $(this).data('fieldid');
    var ciudad_list = $(this).parents('.skin_' + field_id).find('.fieldFrmC');
    if (!ciudad_list.length) {
        return;
    }
    var url_ciudades = $("#getCiudades").data("urlciudad");
    jQuery.ajax({
        url: url_ciudades,
        async: false,
        dataType: 'json',
        data: {idRegion: region_id, sxToken: sessionToken},
        method: 'post'
    }).done(function (data) {
        responseCallback(data, ciudad_list);
    });
}


/**
 * Escucha eventos OnChange sobre las listas y ejecuta las funciones
 * dependiendo del elemento sobre el cual fueron lanzados
 */
$(document).on('change', '.fieldFrmP', Formularios_changePais);
$(document).on('change', '.fieldFrmD', Formularios_changeRegion);





/**
 * Funcionalidades AJAX para adicionar campo de values adicionales en los tipos de campo
 * con más de un valor.
 *
 * @author Breiner E. Hernández G. <bhernandez>
 */

/**
 * Función encargada de colocar un nuevo campo para ingresar un nuevo valor para los campos de
 * multiples valores.
 */
Formularios_addFieldNewValue = function () {
    var messages = $('.messages');
    var html = ' <div class="col-md-2"></div><div class="col-md-10"><input class="form-control form-control-sm" type="text" name="valueNuevo[]" value="" size="30" maxlength="255"><span class="btn btn-remove-value">' + messages.data('delete') + '</span><div/>';
    $('.new-values-content').append(html);
}

/**
 * Función encargada de quitar un campo de los posibles nuevos valores a crear.
 * Elimina: Campo (input), botón eliminar (span) y salto de línea al final (<br />)
 */
Formularios_removeFieldNewValue = function () {
    $(this).prev().remove();
    $(this).next().remove();
    $(this).remove();
}

$(document).on('click', '.btn-add-value', Formularios_addFieldNewValue);
$(document).on('click', '.btn-remove-value', Formularios_removeFieldNewValue);





/**
 * Funcionalidades AJAX para mostrar u ocultar campo de configuración para el mensaje de ayuda
 * de un campo requerido.
 *
 * @author Breiner E. Hernández G. <bhernandez>
 */

/**
 * Función encargada de colocar un nuevo campo para ingresar un nuevo valor para los campos de
 * multiples valores.
 */
Formularios_showHideValMsg = function () {
    var checked = $('#valReq').is(':checked');
    var valMsg = $('.valMsg');
    if (checked) {
        valMsg.removeClass('hide-valMsg');
        valMsg.addClass('show-valMsg');
    } else {
        valMsg.removeClass('show-valMsg');
        valMsg.addClass('hide-valMsg');
    }
}

$(document).on('click', '#valReq', Formularios_showHideValMsg);
$(document).on('ready', Formularios_showHideValMsg);





/**
 * Funcionalidades AJAX para desplegar campos de tipo etiqueta de las filas y columnas de los
 * campos de tipo cuadrícula.
 *
 * @author Breiner E. Hernández G. <bhernandez>
 */

/**
 * Se despliegan los campos para las etiquetas de las columnas
 */
Formularios_dspFieldColumnsTags = function () {
    var content = $('.content-fields-columns');
    var limit = $(this).val();
    if (limit == 9999 || limit == "")
        return;
    var html = '';
    var i = 1;
    if (limit > form_cuadricula_col) {
        i = parseInt(form_cuadricula_col) + 1;
        form_cuadricula_col = limit;
        while (i <= limit) {
            html = Formularios_htmlColumnTag(i, i);
            content.append(html);
            i++;
        }
    } else {
        i = parseInt(limit) + 1;
        var CRclass = '';
        while (i <= form_cuadricula_col) {
            CRclass = 'column-' + i;
            Formulario_removeColumnRowElement(CRclass);
            i++;
        }
        form_cuadricula_col = limit;
    }

}

/**
 * Se despliegan los campos para las etiquetas de las filas
 */
Formularios_dspFieldRowsTags = function () {
    var content = $('.content-fields-rows');
    var limit = $(this).val();
    if (limit == 9999 || limit == "")
        return;
    var html = '';
    var i = 1;
    if (limit > form_cuadricula_row) {
        i = parseInt(form_cuadricula_row) + 1;
        form_cuadricula_row = limit;
        while (i <= limit) {
            html = Formularios_htmlRowTag(i, i);
            content.append(html);
            i++;
        }
    } else {
        //content.html('');
        i = parseInt(limit) + 1;
        var CRclass = '';
        while (i <= form_cuadricula_row) {
            CRclass = 'row-' + i;
            Formulario_removeColumnRowElement(CRclass);
            i++;
        }
        form_cuadricula_row = limit;
    }

}

/**
 * @param 	a 	integer 	Indica el número de columnas
 * @param 	b 	string 		Indica el valor (value) actual del campo
 */
/*
 Formularios_htmlColumnTag = function(a, b){
 var html = '<label class="column-'+a+'">Etiqueta '+a+' de Columna:</label>'
 + '<input class="column-'+a+'" type="text" name="columna['+a+']" id="columna['+a+']" value ="'+b+'"><br class="column-'+a+'" />';
 return html;
 }*/
Formularios_htmlColumnTag = function (a, b) {
    var messages = $('.messages');
    var html = '<div class="form-group column-' + a + '"> <label class="col-md-2 control-label column-' + a + '">' + messages.data('label-column').replace('%1$s', a) + ':</label>'
            + '<div class="col-md-10 column-' + a + '" > <input class="form-control column-' + a + '" type="text" name="columna[' + a + ']" id="columna[' + a + ']" value ="' + b + '"><br class="column-' + a + '" /> </div> </div>';
    return html;
}
/**
 * @param 	a 	integer 	Indica el número de filas
 * @param 	b 	string 		Indica el valor (value) actual del campo
 */
/*
 Formularios_htmlRowTag = function(a, b){
 var html = '<label class="row-'+a+'">Etiqueta '+a+' de Fila:</label>'
 + '<input class="row-'+a+'" type="text" name="fila['+a+']" id="fila['+a+']" value ="'+b+'"><br class="row-'+a+'" />';
 return html;
 }*/
Formularios_htmlRowTag = function (a, b) {
    var messages = $('.messages');
    var html = '<div class="form-group row-' + a + '"> <label class="row-' + a + ' col-md-2 control-label ">' + messages.data('label-row').replace('%1$s', a) + ':</label>'
            + '<div class="col-md-10 row-' + a + '" > <input class="form-control row-' + a + '" type="text" name="fila[' + a + ']" id="fila[' + a + ']" value ="' + b + '"><br class="row-' + a + '" /> </div> </div>';
    return html;
}

Formulario_removeColumnRowElement = function (CRclass) {
    $('.' + CRclass).remove();
}

/**
 * Variables que controlan el número de filas y columnas actuales
 */
var form_cuadricula_col = 0,
        form_cuadricula_row = 0;

$(document).on('change', '#columnas', Formularios_dspFieldColumnsTags);
$(document).on('change', '#filas', Formularios_dspFieldRowsTags);
$(document).ready(function () {
    form_cuadricula_col = $('#columnas').val();
    form_cuadricula_row = $('#filas').val();
    if (form_cuadricula_row == 9999 || form_cuadricula_row == "") {
        form_cuadricula_row = 0;
    }
    if (form_cuadricula_col == 9999 || form_cuadricula_col == "") {
        form_cuadricula_col = 0;
    }
});



/**
 * Mostrar captcha en: loader.php?lServicio=Formularios&lTipo=gst&lFuncion=newForm
 * si el valor del select #tipo es != 'F'
 */
var Formulario_isFeedbackType = function () {
    var tipo = $('#newForm #tipo').val();
    if (tipo == 'F') {
        $('#newForm #captcha').attr('checked', false);
        $('#newForm .fieldCaptcha').hide();
    } else {
        $('#newForm .fieldCaptcha').show();
    }
}
$(document).on('change', '#newForm #tipo', Formulario_isFeedbackType);
$(document).on('ready', Formulario_isFeedbackType);

/**
 * Configuracion dinamica de parametros para conectar a ws
 */

$(document).ready(function () {
    var messages = $('.messages');
    //Eliminar Fielset
    $(document).on("click", ".deleteBtn", function (event) {
        event.preventDefault();
        $(this).closest('fieldset').remove();
    });

    var fieldConfigParam = '<fieldset class="fieldsetConfigParam" data-num="%data%">' +
            '<legend>%1$s <a href="#" class="deleteBtn"><i class="fa fa-trash" aria-hidden="true"></i></a></legend>' +
            '<div class="form-group"><div class="row mb-3">' +
            '<label class="col-sm-2 col-form-label col-form-label-sm" for="param%data%">%2$s</label>' +
            '<div class="col-md-10">' +
            '<input class="form-control form-control-sm" type="text" name="paramws[%data%][param]" id="param%data%" size="50"><br>' +
            '</div>' +
            '</div></div>' +
            '<div class="form-group"><div class="row mb-3">' +
            '<label class="col-sm-2 col-form-label col-form-label-sm" for="value%data%">Valor</label>' +
            '<div class="col-md-10">' +
            '<input class="form-control form-control-sm" type="text" name="paramws[%data%][value]" id="value%data%" size="50"><br>' +
            '</div>' +
            '</div></div>' +
            '</fieldset>';

    $(document).on("click", ".addInputsParam", function (e) {
        var numIndice = $(".fieldsetConfigParam").last().data("num");

        numIndice = parseInt(numIndice) + 1;
        var newFielset = fieldConfigParam.replace("%data%", numIndice)
                .replace("%data%", numIndice)
                .replace("%data%", numIndice)
                .replace("%data%", numIndice)
                .replace("%data%", numIndice)
                .replace("%data%", numIndice)
                .replace("%data%", numIndice)
                .replace('%1$s', messages.data('web-service'))
                .replace('%2$s', messages.data('param'));
        $(".contentFieldConfigParam").append(newFielset);

        e.preventDefault();
    });
    /*validación personalizada solo letras*/
    if(jQuery.validator) {
        $(function(){
            jQuery.validator.addMethod("alpha", function (value, element, params) {
                // allow any non-whitespace characters as the host part
                var regex = new RegExp(params);
                return this.optional(element) || regex.test(value);
            }, messages.data('validation-letters'));
            /*validación personalizada solo letras y números*/
            jQuery.validator.addMethod("alphaNum", function (value, element, params) {
                // allow any non-whitespace characters as the host part
                var regex = new RegExp(params);
                return this.optional(element) || regex.test(value);
            }, messages.data('validation-letters-numbers'));
            var text = $(".alpha");
            if (text.length > 0) {
                text.each(function () {
                    $(this).rules("add", {alpha: "^[A-ZÑÁÉÍÓÚa-zñáéíóú ]*$"});
                });
            }
            var number = $(".alphaNum");
            if (number.length > 0) {
                number.each(function () {
                    $(this).rules("add", {alphaNum: "^[0-9A-ZÑÁÉÍÓÚa-zñáéíóú ]*$"});
                });
            }
            jQuery.validator.addMethod("mimefile", function (value, element, params) {
                var extens = params.split(', ');
                var extensiones = value.substring(value.lastIndexOf("."));
                extensiones = extensiones.toLocaleLowerCase();
                var validateext = true;
                if(jQuery.inArray( extensiones, extens) == -1){
                    validateext = false;
                }
                return this.optional(element) || validateext;
            }, messages.data('validation-format'));
            var files = $(".mimetype");
            if (files.length > 0) {
                files.each(function () {
                    var extension = $(this).data("extensions");
                    $(this).rules("add", {mimefile: extension});
                });
            }
        });
    }
});

if ($("#DataTables_votos").length) {
    let url = $("#ajaxUrl").data("ajaxurl");

    $("#DataTables_votos").DataTable({
        language: {
            url: '/media/plugins/dataTable/1.10.12/resources/lang/es.json'
        },
        aaSorting: [],
        bRetrieve: true,
        iDisplayLength: 10,
        bDestroy: true,
        bSort: false,
        serverSide: true,
        processing: true,
        "ajax": {
            "url": url,
            "data": function (d) {
                delete d.columns;
            }
        },
        searching: true,
        lengthChange: false,
        autoWidth: false,
        responsive: true
    });
}


