function SetCookie(cookieName,cookieValue,nDays) {
    var today = new Date();
    var expire = new Date();
    if (nDays==null || nDays==0) nDays=1;
    expire.setTime(today.getTime() + 3600000*24*nDays);
    document.cookie = cookieName+"="+escape(cookieValue)
    + ";expires="+expire.toGMTString();
}

function ReadCookie(cookieName) {
    var theCookie=" "+document.cookie;
    var ind=theCookie.indexOf(" "+cookieName+"=");
    if (ind==-1) ind=theCookie.indexOf(";"+cookieName+"=");
    if (ind==-1 || cookieName=="") return "";
    var ind1=theCookie.indexOf(";",ind+1);
    if (ind1==-1) ind1=theCookie.length;
    return unescape(theCookie.substring(ind+cookieName.length+2,ind1));
}

function insertWaitAjax(element) {
    //jQuery(element).append('<div style="text-align:center;"><img src="/static/img/ajax-loader.gif"></div>');
    jQuery(element).append('<div style="text-align:center;"><i style="font-size: 200%;"class="fa fa-refresh fa-spin"></i></div>');
}



function DispostivoSearch(opts) {

    $(function() {

        var container_ds = $('body').children("#container_ds");
        if (container_ds.length > 0)
            $(container_ds).remove();
        container_ds = $('<div id="container_ds"/>');
        $('body').prepend(container_ds);

        var fields = $("[data-sapl-ta='DispositivoSearch']");
        fields.each(function() {
            var field = $(this);
            var data_type_selection = field.attr('data-type-selection');
            var data_field = field.attr('data-field');
            var data_function = field.attr('data-function');

            var onChangeFieldSelects = function(event) {
                if (data_type_selection == 'checkbox') {
                    var tas = field.find('input[name="ta_select_all"]'); //tas - Textos Articulados
                    tas.off();

                    tas.on('change', function(event) {
                        $(this).closest('ul').find('input[name="'+data_field+'"]').prop("checked", this.checked);
                        //$(this).prop("checked", false);
                    });


                }
                else {
                    var dpts = field.find('input');
                    dpts.off()
                    dpts.attr('type', 'hidden');
                    $('<a class="text-danger">')
                        .insertBefore(dpts)
                        .append($('<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>'))
                        .on('click', function() {
                            if ($(this).closest('ul').find('li').length == 2)
                                $(this).closest('ul').remove();
                            else
                                $(this).closest('li').remove();
                        });
                }
            }
            onChangeFieldSelects();

            var onChangeParamTA = function(event) {
                var tipo_ta = $("select[name='tipo_ta']").val();
                var tipo_model = $("select[name='tipo_model']").val();
                var num_ta = $("input[name='num_ta']").val();
                var ano_ta = $("input[name='ano_ta']").val();
                var dispositivos_internos = $("input[name='dispositivos_internos']:checked").val();
                var rotulo_dispositivo = $("input[name='rotulo_dispositivo']").val();
                var texto_dispositivo = $("input[name='texto_dispositivo']").val();
                var max_results = $("select[name='max_results']").val();
                var url = '';

                if (rotulo_dispositivo.length > 0 || texto_dispositivo.length > 0) {
                    $("input[name='dispositivos_internos']").prop('disabled', false);
                    $("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','1');
                }
                else {
                    $("input[name='dispositivos_internos']").filter('[value="False"]').prop('checked', true);
                    $("input[name='dispositivos_internos']").prop('disabled', true);
                    $("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','0.3');
                    dispositivos_internos = 'False';
                }
                var formData = {
                    'tipo_ta'               : tipo_ta,
                    'tipo_model'            : tipo_model,
                    'num_ta'                : num_ta,
                    'ano_ta'                : ano_ta,
                    'texto'                 : texto_dispositivo,
                    'rotulo'                : rotulo_dispositivo,
                    'dispositivos_internos' : dispositivos_internos,
                    'max_results'           : max_results,
                    'data_type_selection'   : data_type_selection,
                    'data_field'            : data_field,
                    'data_function'         : data_function,
                };

                url = '/ta/search_fragment_form';
                $('.result-busca-dispositivo').html('');
                insertWaitAjax('.result-busca-dispositivo')
                $.get(url, formData).done(function( data ) {
                    $('.result-busca-dispositivo').html(data);

                    if (data_type_selection == 'checkbox') {
                        var tas = $('.result-busca-dispositivo').find('input[name="ta_select_all"]');
                        tas.off();
                        tas.on('change', function(event) {
                            $(this).closest('ul').find('input[name="'+data_field+'"]').prop("checked", this.checked);
                        });
                    }

                });
            }

            var onKeyPressRotuloBuscaTextual = function(event) {
                var rotulo_dispositivo = $("input[name='rotulo_dispositivo']").val();
                var texto_dispositivo = $("input[name='texto_dispositivo']").val();
                var dispositivos_internos = $("input[name='dispositivos_internos']:checked").val();

                if (rotulo_dispositivo.length > 0 || texto_dispositivo.length > 0) {
                    $("input[name='dispositivos_internos']").prop('disabled', false);
                    $("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','1');
                }
                else {
                    $("input[name='dispositivos_internos']").filter('[value="False"]').prop('checked', true);
                    $("input[name='dispositivos_internos']").prop('disabled', true);
                    $("input[name='dispositivos_internos']").closest('#div_id_dispositivos_internos').css('opacity','0.3');
                    dispositivos_internos = 'False';
                }
            }

            var button_ds = field.children("#button_ds");
            if (button_ds.length > 0)
                $(button_ds).remove();
            button_ds = $('<div id="button_ds" class="clearfix"/>');
            field.prepend(button_ds);

            var btn_open_search = $('<button>')
                .text(opts['text_button'])
                .attr('type','button')
                .attr('class','btn btn-sm btn-modal-open');
            button_ds.append(btn_open_search);
            btn_open_search.on('click', function() {
                $.get(opts['url_form'], function(data) {
                    container_ds.html(data);
                    var modal_ds = $('#modal-ds');

                    modal_ds.find("select[name='tipo_ta']").change(function(event) {
                        var url = '';
                        url = '/ta/search_fragment_form?action=get_tipos&tipo_ta='+this.value;
                        modal_ds.find("label[for='id_tipo_model']").html('Tipos de ' + this.children[this.selectedIndex].innerHTML);

                        var select = modal_ds.find("select[name='tipo_model']");
                        select.empty();
                        $('<option value="">Carregando...</option>').appendTo(select);

                        $.get(url).done(function( data ) {
                            select.empty();
                            for(var item in data) {
                                for (var i in data[item])
                                    select.append($("<option>").attr('value',i).text(data[item][i]));
                            }
                            //select.change(onChangeParamTA)
                        });
                    });

                    /*modal_ds.find("input[name='num_ta'], "
                        +"input[name='ano_ta'], "
                        +"select[name='tipo_model'], "
                        +"input[name='texto_dispositivo'], "
                        +"input[name='dispositivos_internos'], "
                        +"input[name='rotulo_dispositivo']"
                    ).change(onChangeParamTA);*/
                    modal_ds.find("input[name='texto_dispositivo'], "
                        +"input[name='rotulo_dispositivo']")
                        .on('keyup', onKeyPressRotuloBuscaTextual)

                    modal_ds.find(".btn-busca").click(onChangeParamTA);

                    modal_ds.find("#btn-modal-select").click(function() {
                        // limpar selecionados se o tipo é radio
                        var listas = field.find('ul');
                        if (data_type_selection == 'radio')
                            listas.remove();

                        // adicionar itens selecionados na caixa modal
                        var selecionados = modal_ds.find('[name="'+data_field+'"]:checked');

                        // com base nos selecionados, limpa seus ta's removendo os não selecionados
                        selecionados.closest('ul').find('input:not(:checked)').filter('[name!="ta_select_all"]').closest('li').remove();

                        selecionados.closest('ul').each(function() {
                            //insere na lista de selecionados os ta's não presentes
                            var ul_lista = field.find('#'+this.id);
                            if (ul_lista.length == 0) {
                                field.append(this);
                                return;
                            }

                            //insere os dispositivos não presentes
                            var inputs_for_this = $(this).find('input');

                            inputs_for_this.each(function() {
                                if (ul_lista.find("#"+this.id).length > 0)
                                    return;
                                ul_lista.append($(this).closest('li'));
                            });
                        });

                        onChangeFieldSelects();

                        modal_ds.modal('hide');
                    });

                    modal_ds.modal('show');
                    onChangeParamTA();
                })
            });
        });
    });
}