PageSourceSearch

https://consultapopular.rs.gov.br/matriz_common/versions/2.1.5/themes/frontend/js/demandalai.js?2.1.5.161.6+4

js consultapopular.rs.gov.br collected 2026-09-26 17:40:37 UTC 33,243 bytes, 707 lines download raw bytes

1function getSemAcentuacao(texto) {
2    texto = texto.replace(new RegExp('[ÁÀÂÃ]','gi'), 'a');
3    texto = texto.replace(new RegExp('[ÉÈÊ]','gi'), 'e');
4    texto = texto.replace(new RegExp('[ÍÌÎ]','gi'), 'i');
5    texto = texto.replace(new RegExp('[ÓÒÔÕ]','gi'), 'o');
6    texto = texto.replace(new RegExp('[ÚÙÛ]','gi'), 'u');
7    texto = texto.replace(new RegExp('[Ç]','gi'), 'c');
8    return texto;                 
9}
10
11function getNomeUf(siglaUf) {
12    var nomeUf;
13    switch (siglaUf) {
14        case 'AC':  nomeUf = 'Acre';                 break;
15        case 'AL':  nomeUf = 'Alagoas';              break;
16        case 'AM':  nomeUf = 'Amazonas';             break;
17        case 'AP':  nomeUf = 'Amapá';                break;
18        case 'BA':  nomeUf = 'Bahia';                break;
19        case 'CE':  nomeUf = 'Ceará';                break;
20        case 'DF':  nomeUf = 'Distrito Federal';     break;
21        case 'ES':  nomeUf = 'Espírito Santo';       break;
22        case 'GO':  nomeUf = 'Goiás';                break;
23        case 'MA':  nomeUf = 'Maranhão';             break;
24        case 'MT':  nomeUf = 'Mato Grosso';          break;
25        case 'MS':  nomeUf = 'Mato Grosso do Sul';   break;
26        case 'MG':  nomeUf = 'Minas Gerais';         break;
27        case 'PA':  nomeUf = 'Pará';                 break;
28        case 'PB':  nomeUf = 'Paraíba';              break;
29        case 'PR':  nomeUf = 'Paraná';               break;
30        case 'PE':  nomeUf = 'Pernambuco';           break;
31        case 'PI':  nomeUf = 'Piauí';                break;
32        case 'RJ':  nomeUf = 'Rio de Janeiro';       break;
33        case 'RN':  nomeUf = 'Rio Grande do Norte';  break;
34        case 'RS':  nomeUf = 'Rio Grande do Sul';    break;
35        case 'RO':  nomeUf = 'Rondônia';             break;
36        case 'RR':  nomeUf = 'Roraima';              break;
37        case 'SC':  nomeUf = 'Santa Catarina';       break;
38        case 'SP':  nomeUf = 'São Paulo';            break;
39        case 'SE':  nomeUf = 'Sergipe';              break;
40        case 'TO':  nomeUf = 'Tocantins';            break;
41        default:    nomeUf = '';
42    }
43    return nomeUf;
44}
45
46function initAutoComplete(autoCompleteHandler, $municipio) {
47    var inputListSelector = "#" + $municipio.attr("id") + "AutoComplete";
48    var $inputListSelector = $(inputListSelector);
49    var inputValueSelector = "#" + $municipio.attr("id");
50    var $inputValueSelector = $(inputValueSelector);
51
52    if (autoCompleteHandler) {
53        autoCompleteHandler.destroy();
54    } else {
55        $inputListSelector.on("blur", function () {
56            var list = form.demandaLai.municipios;
57            var item = getSelectedItem(list, $inputListSelector);                
58            if (item) {
59                $inputValueSelector.val(item.id_municipio);
60                $inputListSelector.val(item.nome_municipio);
61            } else {
62                $inputValueSelector.val("");
63            }
64        });
65    }
66    autoCompleteHandler = new autoComplete({
67        "selector": inputListSelector,
68        "minChars": 1,
69        "source": function (term, suggest) {
70            var list = form.demandaLai.municipios;
71            var matches = list.reduce(function (result, item) {
72                if (item.nome_municipio.toLowerCase().indexOf(term.toLowerCase()) > -1) {
73                    result.push(item);
74                }
75                return result;
76            }, []);
77            suggest(matches);
78        },
79        "renderItem": function (item, search) {
80            return '<div class="autocomplete-suggestion" data-id="' + item.id_municipio + '" data-val="' + item.nome_municipio + '">' + item.nome_municipio + '</div>';
81        },
82        "onSelect": function (event, term, item) {
83            $inputListSelector.val($(item).attr("data-val"));
84        }
85    });
86    /**
87     * Chrome passou a ignorar autocomplete=off, ver maiores informações
88     * em https://stackoverflow.com/questions/12374442/chrome-ignores-autocomplete-off
89     * Adicionado autocomplete=none como forma de contorno
90     */        
91    $inputListSelector.attr("autocomplete", "none");
92}
93
94function getSelectedItem(list, $element) { 
95    for (var len = list.length, i = 0; i < len; i++) {
96        if ($element.val().toLowerCase() === list[i].nome_municipio.toLowerCase()) {
97            $element.val(list[i].id_municipio);
98            $element.val(list[i].nome_municipio);
99            return list[i];
100        }
101    }
102    return null;
103}
104
105jQuery(function ($)
106{
107    var formulario = {};
108    var autoCompleteHandler = null;
109    var currentUploadSize = 0;
110
111    function initCustomRules() {
112        $.validator.addMethod('isCountyValid', function (value, element) {
113            if($(element).is(':required')) {
114                return getSelectedItem(form.demandaLai.municipios, $(element));
115            } else {
116                if(!$(element).val()) {
117                    return true;
118                } else {
119                    return getSelectedItem(form.demandaLai.municipios, $(element));
120                }
121            }
122        }, matriz.utils.internationalization.translate("Município não faz parte do estado selecionado", "demanda_lai"));
123
124        $.validator.addMethod('requerirAnexos', function (value, element) {
125            if (element.getAttribute("data-id")) {
126                if (formulario.campos[element.getAttribute("data-id")] !== undefined) {
127                    return formulario.campos[element.getAttribute("data-id")].files.length > 0;
128                } else {
129                    return false;
130                }
131            } else {
132                return formulario.files.length > 0;
133            }
134        }, matriz.utils.internationalization.translate("É obrigatório o envio de anexo(s).", "demanda_lai"));
135
136        if($('.money')) {        
137            $('.money').mask('#.##0,00', {reverse: true, maxlength: false});
138        }
139    }
140
141    function initCountryField($pais, $uf, $municipio) {
142        //var $pais = $("#sIdPais");
143        let $idPais = typeof $pais.val() !== 'undefined' ? $pais.val() : "";
144        var idFormulario = $("[name='idformulario']").val();
145        var reqLai = idFormulario ? "&idformulario=" + idFormulario : "";
146        return matriz.utils.ajax({
147            "modal": false,
148            "url": "/_service/demandalai/estados?id_pais=" + $idPais + reqLai
149        }).done(function (data) {
150            $municipio[0].value = "";
151            $("#" + $municipio.attr("id") + "AutoComplete")[0].value = "";
152            formulario.reset();
153            //var $uf = $("#sIdUf");
154            $uf.find('option').remove();
155            $uf.append('<option value="">Selecione...</option>');
156            var $data = $(data);
157            $data.each(function(index, item) {
158                $uf.append('<option value="'+item.id_uf+'">'+item.nome_uf+'</option>');
159            });
160        });
161    }
162
163    function initStateField($uf, $municipio) {
164        //var $uf = $("#sIdUf");
165        let $idUf = typeof $uf.val() !== 'undefined' ? $uf.val() : "";
166        var idFormulario = $("[name='idformulario']").val();
167        var reqLai = idFormulario ? "&idformulario=" + idFormulario : "";
168        return matriz.utils.ajax({
169            "modal": false,
170            "url": "/_service/demandalai/municipios?id_uf=" + $idUf + reqLai
171        }).done(function (data) {
172            $municipio[0].value = "";
173            $("#" + $municipio.attr("id") + "AutoComplete")[0].value = "";
174            form.demandaLai.municipios = data;
175            formulario.reset();
176            initAutoComplete(autoCompleteHandler, $municipio);
177        });
178    }
179
180    function initCepField($cep, $pais, $uf, $municipio, $bairro, $logradouro) {
181        //var $cep = $("#sCep");
182        if ($cep.valid()) {
183            matriz.ui.loading.modal.show();
184            $.ajax({
185                url: "/_service/dne/busca/endereco/" + $cep.val().toString().replace('-', '')
186            }).then(function (dataEndereco) {
187
188                if(dataEndereco.erros){
189                    for (let i = 0; i < dataEndereco.erros.length; i++) {
190                        matriz.ui.loading.modal.hide();
191                        matriz.box.notify.default(dataEndereco.erros[i].erro, 'warning');
192                    }
193                    return;
194                }
195
196                $bairro.val(dataEndereco.bairro);
197                $logradouro.val(dataEndereco.logradouroExtenso);
198                $("#" + $pais.attr("id") + " option:contains('BRASIL')").prop("selected", true);
199                initCountryField($pais, $uf, $municipio).then(function () {
200                    $("#" + $uf.attr("id") + " option:contains('" + getNomeUf(dataEndereco.uf) + "')").prop("selected", true);
201                    initStateField($uf, $municipio).then(function (dataMunicipios) {
202                        $.each(dataMunicipios, function(i, item) {
203                            if (getSemAcentuacao(item.nome_municipio.toLowerCase()) === dataEndereco.municipio.toLowerCase()) {
204                                $("#" + $municipio.attr("id") + "AutoComplete").val(item.nome_municipio).blur();
205                            }
206                        });
207                        matriz.ui.loading.modal.hide();
208                    });
209                });
210            }).fail(function () {
211                matriz.ui.loading.modal.hide();
212                matriz.box.notify.default("Não foi possível identificar o CEP informado.", 'warning');
213            });
214        }
215    }
216    
217    function initGeorreferenciamentoField () {
218        $("button[data-matriz-action=find-in-map], button[data-matriz-action=draw-marker]").on("click", function () {
219            $("#sTxtGeorreferenciamento-error").remove();
220            $("#sTxtGeorreferenciamentoDemanda-error").remove();
221        });
222        $("#sIdUf, #sIdPais, #sIdMunicipioAutoComplete, #sCep, #sLogradouro, #sNumEndereco, input[name^=sBairro]").change(function () {
223            if($(".modal-body #geoID").length) {
224                $(".modal-body #geoID").val("sTxtGeorreferenciamento");
225            }
226            $("button[data-matriz-action=clear-map]").trigger("click");
227        });
228        $("#sIdUfDemanda, #sIdPaisDemanda, #sIdMunicipioAutoCompleteDemanda, #sCepDemanda, #sLogradouroDemanda, #sNumEnderecoDemanda, input[name^=sBairroDemanda]").change(function () {
229            if($(".modal-body #geoID").length) {
230                $(".modal-body #geoID").val("sTxtGeorreferenciamentoDemanda");
231            }
232            $("button[data-matriz-action=clear-map]").trigger("click");
233        });
234    }
235    
236    formulario.containers = {};
237    formulario.containers.formulario = $("#formDemandaLai");
238    formulario.containers.captcha = $("#fCaptchaMatrizContainer");
239    formulario.maxArquivos = parseInt(formulario.containers.formulario.attr("data-maxarquivos"));
240    formulario.tamanhomaximo = parseInt(formulario.containers.formulario.attr("data-tamanhomaximo"));
241    formulario.files = [];
242    formulario.filessequence = 0;
243    formulario.campos = [];
244
245    formulario.valid = function () {
246        return formulario.containers.formulario.valid();
247    };
248    
249    var validateOptions = {
250        ignore: ":hidden:not('.requerirAnexos')",
251        errorClass: "matriz__has-warning",
252        validClass: "matriz__has-success",
253        errorElement: "div",
254        errorPlacement: function (error, element) {
255            if(element[0].classList[1] == "input-data" || $(element).is(':checkbox') || $(element).is(':radio')) {
256                element.parent().parent().append(error);
257            } else{
258                element.parent().append(error);
259            }
260        },
261        highlight: function (element, errorClass, validClass) {
262            $(element).addClass(errorClass).removeClass(validClass);
263
264            if ($(element).next().hasClass("matriz-ui-combobox")) {
265                $(element).selectpicker("refresh");
266            }
267        },
268        unhighlight: function (element, errorClass, validClass) {
269            $(element).removeClass(errorClass).addClass(validClass);
270            if ($(element).next().hasClass("matriz-ui-combobox")) {
271                $(element).selectpicker("refresh");
272            }
273        }
274    };
275    
276    formulario.reset = function() {
277        return formulario.containers.formulario.validate(validateOptions).resetForm();
278    }
279
280    formulario.init = function () {
281        $("#modalLoading").removeClass("hidden");
282        initCustomRules();
283        initAutoComplete(autoCompleteHandler, $("#sIdMunicipio"));
284        $("#sIdUf").on("change", function(){
285            initStateField($(this), $("#sIdMunicipio"));
286        });
287        $("#sIdPais").on("change", function(){
288            initCountryField($(this), $("#sIdUf"), $("#sIdMunicipio"));
289        });
290        $("#sCep").on("change", function(){
291            initCepField($(this), $("#sIdPais"), $("#sIdUf"), $("#sIdMunicipio"), $("input[id^=sBairro_]"), $("#sLogradouro"));
292        });
293        initAutoComplete(autoCompleteHandler, $("#sIdMunicipioDemanda"));
294        $("#sIdUfDemanda").on("change", function(){
295            initStateField($(this), $("#sIdMunicipioDemanda"));
296        });
297        $("#sIdPaisDemanda").on("change", function(){
298            initCountryField($(this), $("#sIdUfDemanda"), $("#sIdMunicipioDemanda"));
299        });
300        $("#sCepDemanda").on("change", function(){
301            initCepField($(this), $("#sIdPaisDemanda"), $("#sIdUfDemanda"), $("#sIdMunicipioDemanda"), $("input[id^=sBairroDemanda_]"), $("#sLogradouroDemanda"));
302        });
303        initCarregarArquivo();
304        $(".campo-arquivo").each(function() {
305            initCarregarCampoArquivo($(this));
306        });
307        initGeorreferenciamentoField();
308        formulario.containers.formulario.validate(validateOptions);
309        if (formulario.containers.formulario.attr("data-submit") === "default") {
310            formulario.containers.formulario.submit(formulario.default);
311        } else {
312            formulario.containers.formulario.submit(formulario.submit);
313        }
314        $("#fCaptchaMatrizRecarregar").click(formulario.generateCaptcha);
315    };
316
317    function populateSelectedOption(fromSelector, inSelector) {
318        $(inSelector).val($("option[value='" + $(fromSelector).val() + "']").text());
319    }
320
321    function initBotaoCarregarArquivo() {
322        if (formulario.maxArquivos > 0) {
323            $("#uploadArquivo").removeClass("hidden");
324        }
325    }
326
327    function initBotaoCarregarCampoArquivo(campo) {
328        if (campo.maxArquivos > 0) {
329            $(".uploadArquivo").removeClass("hidden");
330        }
331    }
332
333    function bytesParaMega(bytes) {
334        return Math.round((bytes / Math.pow(1024, 2)) * 100) / 100 + "MB";
335    }
336
337    initCarregarArquivo = function () {
338        initBotaoCarregarArquivo();
339        if ($("#buttonCarregarArquivo").length > 0) {
340             var fileInput = new mOxie.FileInput({
341                browse_button: "buttonCarregarArquivo",
342                multiple: true,
343                accept: [{
344                        title: "Selecione o arquivo para envio ...",
345                        extensions: $("buttonCarregarArquivo").attr("data-matriz-tipos-permitidos")
346                    }]
347            });
348            fileInput.onchange = function (e) {
349                if (formulario.files.length < formulario.maxArquivos) {
350                    var filesInvalidLength = [];
351                    for (var key in this.files) {
352                        let file = this.files[key];
353                        if (file.size <= formulario.tamanhomaximo) {
354                            file.filesequence = ++formulario.filessequence;
355                            formulario.files.push(file);
356                            var div = "<div class='removerArquivo' data-filename='" + file.name + "' data-filesequence='" + file.filesequence + "'> Arquivo: " + file.name + " (" + bytesParaMega(file.size) + " ) \n\
357                                    <button name='buttonClose' type='button' class='close' \n\
358                                    data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>\n\
359                                    &times;</span></button></div>";
360                            $("#upload-queue").append($(div));
361                            currentUploadSize += file.size;
362                            $("#upload-size").text("Total: " + bytesParaMega(currentUploadSize));
363                            if ($('.requerirAnexos').length > 0) {
364                                $(".requerirAnexos").valid();
365                            }
366                        } else {
367                            filesInvalidLength.push(file.name);
368                        }
369                    }
370                    if (filesInvalidLength.length > 0) {
371                        let mensagem = "";
372                        if (filesInvalidLength.length === 1) {
373                            mensagem = "O arquivo %FILE_NAME% possui tamanho inválido e não foi adicionado.<br>";
374                        } else {
375                            mensagem = "Os arquivos %FILE_NAME% possuem tamanho inválido e não foram adicionados.<br>";
376                        }
377                        matriz.box.uniquemodal.create({
378                            titulo: "Tamanho do arquivo inválido!",
379                            mensagem: mensagem.replace("%FILE_NAME%", filesInvalidLength.join(", ")) +
380                                    "<p>O tamanho do arquivo não pode ser superior a " + bytesParaMega(formulario.tamanhomaximo) + ". </p>",
381                            corContextual: "warning"
382                        });
383                    }
384                } else {
385                    matriz.box.uniquemodal.create({
386                        titulo: "Máximo de arquivos alcançado!",
387                        mensagem: "<p>É permitido o envio de até " + formulario.maxArquivos + ". </p>",
388                        corContextual: "warning"
389                    });
390                }
391            };
392            fileInput.init();
393            formulario.containers.formulario.on("click", ".removerArquivo", function () {
394                var divRemoverArquivo = $(this);
395                var fileSequence = parseInt(divRemoverArquivo.attr('data-fileSequence'));
396                var encontrado = false;
397                var index = formulario.files.findIndex(function(file){
398                    if (fileSequence === file.filesequence && !encontrado) {
399                        encontrado = true;
400                        return true;
401                    }
402                    return false;
403                });
404                formulario.files.splice(index, 1);
405                currentUploadSize = formulario.files.reduce(function(anterior, atual) {
406                    return anterior + atual.size;
407                }, 0);
408
409                $("#upload-size").text("Total: " + bytesParaMega(currentUploadSize));
410            });
411        }
412    }
413
414    initCarregarCampoArquivo = function ($campo) {
415        var campo = {};
416        campo.maxArquivos = parseInt($campo.attr("data-maxarquivos"));
417        campo.tamanhomaximo = parseInt($campo.attr("data-tamanhomaximo"));
418        campo.files = [];
419        campo.filessequence = 0;
420        initBotaoCarregarCampoArquivo(campo);
421        if ($campo.length > 0) {
422             var fileInput = new mOxie.FileInput({
423                browse_button: $campo.attr("id"),
424                multiple: true,
425                accept: [{
426                    title: "Selecione o arquivo para envio ...",
427                    extensions: $campo.attr("data-matriz-tipos-permitidos")
428                }]
429            });
430            fileInput.onchange = function (e) {
431                if (campo.files.length < campo.maxArquivos) {
432                    var filesInvalidLength = [];
433                    for (var key in this.files) {
434                        let file = this.files[key];
435                        if (file.size <= campo.tamanhomaximo) {
436                            file.filesequence = ++campo.filessequence;
437                            campo.files.push(file);
438                            formulario.campos[$campo.attr("id")] = campo;
439                            var div = "<div class='remover" + $campo.attr("id") + "' data-filename='" + file.name + "' data-filesequence='" + file.filesequence + "'> Arquivo: " + file.name + " (" + bytesParaMega(file.size) + " ) \n\
440                                    <button name='buttonClose' type='button' class='close' \n\
441                                    data-dismiss='alert' aria-label='Close'><span aria-hidden='true'>\n\
442                                    &times;</span></button></div>";
443                            $campo.parent().find(".upload-queue").append($(div));
444                            currentUploadSize += file.size;
445                            $campo.parent().find(".upload-size").text("Total: " + bytesParaMega(currentUploadSize));
446                            if ($campo.attr('data-required') === "true") {
447                                $(".requerirAnexos").valid();
448                            }
449                        } else {
450                            filesInvalidLength.push(file.name);
451                        }
452                    }
453                    if (filesInvalidLength.length > 0) {
454                        let mensagem = "";
455                        if (filesInvalidLength.length === 1) {
456                            mensagem = "O arquivo %FILE_NAME% possui tamanho inválido e não foi adicionado.";
457                        } else {
458                            mensagem = "Os arquivos %FILE_NAME% possuem tamanho inválido e não foram adicionados.";
459                        }
460                        matriz.box.uniquemodal.create({
461                            titulo: "Tamanho do arquivo inválido!",
462                            mensagem: mensagem.replace("%FILE_NAME%", filesInvalidLength.join(", ")) +
463                                "<p>O tamanho do arquivo não pode ser superior a " + bytesParaMega(campo.tamanhomaximo) + ". </p>",
464                            corContextual: "warning"
465                        });
466                    }
467                } else {
468                    matriz.box.uniquemodal.create({
469                        titulo: "Máximo de arquivos alcançado!",
470                        mensagem: "<p>É permitido o envio de até " + campo.maxArquivos + ". </p>",
471                        corContextual: "warning"
472                    });
473                }
474            };
475            fileInput.init();
476            formulario.containers.formulario.on("click", ".remover" + $campo.attr("id"), function () {
477                var divRemoverArquivo = $(this);
478                var fileSequence = parseInt(divRemoverArquivo.attr('data-fileSequence'));
479                var encontrado = false;
480                var index = formulario.campos[$campo.attr("id")].files.findIndex(function(file){
481                    if (fileSequence === file.filesequence && !encontrado) {
482                        encontrado = true;
483                        return true;
484                    }
485                    return false;
486                });
487                formulario.campos[$campo.attr("id")].files.splice(index, 1);
488                currentUploadSize = formulario.campos[$campo.attr("id")].files.reduce(function(anterior, atual) {
489                    return anterior + atual.size;
490                }, 0);
491
492                $campo.parent().find(".upload-size").text("Total: " + bytesParaMega(currentUploadSize));
493            });
494        }
495    }
496
497    formulario.default = function (event) {
498        event.preventDefault();
499        if (formulario.valid()) {
500            formulario.generateFormKey();
501            var formData = new FormData();
502            formData.append("g-recaptcha-response", $("#g-recaptcha-response").val());
503            formulario.default.captcha = function (formData) {
504                if ($("div[data-matriz-component='Turnstile']").length > 0) {
505                    $("#formDemandaLai").off("submit");
506                    $("#formDemandaLai").submit();
507                    turnstile.reset();
508                } else {
509                    $.ajax({
510                        "type": "POST",
511                        "url": "/_service/demandalai/check-captcha",
512                        cache: false,
513                        enctype: "multipart/form-data",
514                        contentType: false,
515                        processData: false,
516                        "data": formData
517                    }).done(function () {
518                        $("#formDemandaLai").off("submit");
519                        $("#formDemandaLai").submit();
520                        //formulario.containers.formulario.submit();
521                    }).fail(function (jqXHR) {
522                        matriz.ajax.uniquemodalmessage.fail.warn(jqXHR);
523                    });
524                }
525            }
526            formulario.default.captcha(formData);
527        }
528        return false;
529    };
530
531    formulario.submit = function (event) {
532        event.preventDefault();
533        if (formulario.valid()) {
534            formulario.generateFormKey();
535            matriz.box.uniquemodal.create({
536                titulo: "Enviando formulário",
537                mensagem: "<p>Enviando mensagem, por favor aguarde. <img src='/matriz_common/images/loadings/clock.gif' /></p>",
538                corContextual: "info",
539                buttons: [],
540                keyboard: false,
541                customClass: "modal-loading"
542            });
543
544            populateSelectedOption("#sIdUf", "#sIdUfNome");
545            populateSelectedOption("#fTipo", "#fTipoNome");
546            populateSelectedOption("#fAssunto", "#fAssuntoNome");
547
548            if ($("#sTxtGeorreferenciamento").length) {
549                $("#sTxtGeorreferenciamento").val($("#sTxtGeorreferenciamento").val().replace("(","").replace(")",""));
550            }
551
552            if ($("#sTxtGeorreferenciamentoDemanda").length) {
553                $("#sTxtGeorreferenciamentoDemanda").val($("#sTxtGeorreferenciamentoDemanda").val().replace("(","").replace(")",""));
554            }
555
556            var formData = new FormData();
557
558            for (var indice = 0, len = formulario.files.length; indice < len; indice++) {
559                formData.append("arquivo[" + indice + "]", formulario.files[indice].getSource());
560            }
561
562            $(".campo-arquivo").each(function() {
563                if (formulario.campos[$(this).attr("id")] !== undefined) {
564                    for (var indice = 0, len = formulario.campos[$(this).attr("id")].files.length; indice < len; indice++) {
565                        formData.append($(this).attr("id") + "[" + indice + "]", formulario.campos[$(this).attr("id")].files[indice].getSource());
566                    }
567                }
568            });
569            
570            $('#formDemandaLai input, select, textarea').each(function(){
571                var type = $(this).prop("type");
572                if (type != "radio" && type != "checkbox") {
573                    if ($(this).attr('name')) {
574                        formData.append($(this).attr('name'), $(this).val());
575                    }
576                }
577            });
578            
579            var radio = $("#formDemandaLai").find("input[type=radio]");
580            $.each(radio, function (key, val) {
581                if ($(this).is(":checked")) {
582                    formData.append($(val).attr('name'), $(val).attr('value'));
583                }
584            });
585            
586            var checkbox = $("#formDemandaLai").find("input[type=checkbox]");
587            $.each(checkbox, function (key, val) {     
588                if ($(this).is(":checked")) {
589                    formData.append($(val).attr('name'), $(val).attr('value'));
590                }
591            });
592            
593            formData.append("g-recaptcha-response", $("#g-recaptcha-response").val());
594
595            formulario.submit.form = function (formData) {
596                $.ajax({
597                    "type": "POST",
598                    "url": formulario.containers.formulario.attr("action"),
599                    cache: false,
600                    enctype: "multipart/form-data",
601                    contentType: false,
602                    processData: false,
603                    "data": formData /*formulario.containers.formulario.serialize()*/
604                }).done(function (data) {
605                    if ($("input[name=modelodemanda]").val() === "DEMANDA_LAI_ANONIMO") {
606                        window.location.href = data;
607                    } else {
608                        formulario.containers.formulario[0].reset();
609                        formulario.containers.captcha.hide();
610                        $("#upload-queue").empty();
611                        $("#upload-size").empty();
612                        $(".upload-queue").empty();
613                        $(".upload-size").empty();
614                        formulario.files = [];
615
616                        $(".campo-arquivo").each(function() {
617                            if (formulario.campos[$(this).attr("id")] !== undefined) {
618                                formulario.campos[$(this).attr("id")].files = [];
619                            }
620                        });
621
622                        if($(".modal-body #geoID").length) {
623                            $(".modal-body #geoID").val('');
624                        }
625                        $("button[data-matriz-action=clear-map]").trigger("click");
626                        matriz.box.uniquemodal.create({
627                            titulo: matriz.utils.internationalization.translate("Formulário enviado com sucesso", "faleconosco"),
628                            mensagem: "<p>" + data + ".</p>",
629                            corContextual: "success"
630                        });
631                    }
632                }).fail(function (jqXHR) {
633                    if (jqXHR.status === 412) {
634                        formulario.generateCaptcha();
635                    }
636                    if (window.grecaptcha !== undefined) {
637                        window.grecaptcha.reset();
638                    }
639                    matriz.ajax.uniquemodalmessage.fail.warn(jqXHR);
640
641                    var responseText = jqXHR.responseText;
642                    if (responseText.substr(0, 40) === "Autenticação no Login Cidadão requerida.") {
643                        $("#uniqueModal").bind("destroyed", function() {
644                            window.location.reload(true);
645                        });
646                    }
647                });
648                if ($("div[data-matriz-component='Turnstile']").length > 0) {
649                    turnstile.reset();
650                }
651            }
652
653            formulario.submit.captcha = function (formData) {
654                if ($("div[data-matriz-component='Turnstile']").length > 0) {
655                    formulario.submit.form(formData);
656                } else {
657                    $.ajax({
658                        "type": "POST",
659                        "url": "/_service/demandalai/check-captcha",
660                        cache: false,
661                        enctype: "multipart/form-data",
662                        contentType: false,
663                        processData: false,
664                        "data": formData
665                    }).done(function () {
666                        formulario.submit.form(formData);
667                    }).fail(function (jqXHR) {
668                        matriz.ajax.uniquemodalmessage.fail.warn(jqXHR);
669                    });
670                }
671            }
672
673            formulario.submit.captcha(formData);
674
675        }
676        return false;
677    };
678
679    formulario.generateFormKey = function () {
680        matriz.ui.loading.modal.show();
681        $.ajax({
682            url: "/_service/demandalai/generate",
683            async: false
684        }).done(function (data) {
685            $("input[name=chaveFormulario]").val(data.chave);
686        }).always(function () {
687            matriz.ui.loading.modal.hide();
688        });
689    };
690
691    formulario.generateCaptcha = function () {
692        matriz.ui.loading.modal.show();
693        $.ajax({
694            url: "/_service/demandalai/captcha"
695        }).done(function (data) {
696            $("#fCaptchaMatrizID").val(data.id);
697            $("#fCaptchaMatrizPergunta").html(data.enunciado);
698            $("#fCaptchaMatrizContainer").show();
699            $("#fCaptchaMatriz").focus();
700        }).always(function () {
701            matriz.ui.loading.modal.hide();
702        });
703        return false;
704    };
705
706    formulario.init();
707});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.