function altera_cor_icone_prever()
	{
		cor_escolhida = $("#cor").val();
		$(".barra_vertical_widget").css("background", cor_escolhida);
		$(".valor_widget").css("color", cor_escolhida);
		$("#icone_widget").css("color", cor_escolhida);
		$("#icone_widget").attr("class", $("#icone").val());
	}
	
	function avancar_analise_etapa4_widget()
	{
		if($("#titulo").val() == "")
		{
			alert("Informe o título do widget")
			return;
		}
		if($("#select_colunas_valores_vertical").val() == "")
		{
			alert("Informe a coluna de valor")
			return;
		}
		//validar cores
		valido = true;
		erro ="";
		linhaCor = 0;
		$('.linha_cor_dinamica').each(function(){
			linhaCor += 1;
			tipo_validacao = $(this).find('[name="tipo_validacao"]').val();
			//alert(tipo_validacao)
			if(tipo_validacao == "")
			{
				erro = "Informe a condição na linha "+linhaCor+" das cores dinâmicas!";
				valido = false;
			}
			else if (tipo_validacao == "porcentagem_de_ate_da_coluna" || 
				tipo_validacao == "diferenca_de_ate_da_coluna" ||
				tipo_validacao == "de_ate" )
			{
				//alert($(this).find('[name="valueval_de"]').val())
				if($(this).find('[name="val_de"]').val() == "" || $(this).find('[name="val_ate"]').val() == "" )
				{
					erro = "Informe o valor de até na linha "+linhaCor+" das cores dinâmicas!";
					valido = false;
				}
			}
			else if (tipo_validacao == "menor_que" || 
				tipo_validacao == "maior_que" ||
				tipo_validacao == "igual_que" 
				)
			{
				//alert($(this).find('[name="valueval_de"]').val())
				if($(this).find('[name="valor"]').val() == ""  )
				{
					erro = "Informe o valor na linha "+linhaCor+" das cores dinâmicas!";
					valido = false;
				}
			}
			else 
			{
				//alert($(this).find('[name="valueval_de"]').val())
				if($(this).find('[name="col_valor"]').val() == ""  )
				{
					erro = "Informe a coluna para comparação na linha "+linhaCor+" das cores dinâmicas!";
					valido = false;
				}
			}
			 if (tipo_validacao == "porcentagem_de_ate_da_coluna" || 
				tipo_validacao == "diferenca_de_ate_da_coluna" 
				 )
			{
				if($(this).find('[name="col_valor"]').val() == ""  )
				{
					erro = "Informe a coluna para comparação na linha "+linhaCor+" das cores dinâmicas!";
					valido = false;
				}
			}
		});
		if(! valido)
		{
			alert(erro);
			return;
		}
		colunasSelecionadas = $("#select_colunas_info").val();
		aColunasSelecionadas = [];
		colunas_view_vertical = "";
		colunas_valores_vertical = "";
		coluna_vertical = "";
		colunas_quebra_parcial_vertical = "";
		colunas_valores_ocultas_para_calculo = "";
		if($("#select_colunas_info").val() != null)
		{
			//colunas_view_vertical = $("#select_colunas_info").val().toString();
			for(k =0; k < $("#select_colunas_info").val().length; k++)
			{
				if(colunas_view_vertical != ""){colunas_view_vertical += ",";}
				colunas_view_vertical += "`"+$("#select_colunas_info").val()[k]+"`";
			}
			colunas_view_vertical.replaceAll("``","`");
			//colunas_view_vertical += "`"+$("#select_colunas_info").val()+"`";
			
		}
		
		if($("#select_colunas_valores_vertical").val() != null)
		{
			colunas_valores_vertical = $("#select_colunas_valores_vertical").val();
			/*for(k =0; k < $("#select_colunas_valores_vertical").val().length; k++)
			{
				if(colunas_valores_vertical != ""){colunas_valores_vertical += ",";}
				colunas_valores_vertical += "`"+$("#select_colunas_valores_vertical").val()[k]+"`";
			}
			colunas_valores_vertical.replaceAll("``","`");*/
		}
		
		
		//marcar colunas usadas
		for(i =0; i < colunas.length; i++)
		{
			if(colunas_valores_vertical.includes(colunas[i].nome.trim()) ||
			   coluna_vertical.includes(colunas[i].nome.trim()) ||
			   colunas_quebra_parcial_vertical.includes(colunas[i].nome.trim()) 
			)
			{
				colunas[i].oculto = false;
			}
			$('.linha_cor_dinamica').each(function(){
				//alert($(this).find('[name="col_valor"]').val())
				if($(this).find('[name="col_valor"]').length > 0)
				{
					//alert($(this).find('[name="col_valor"]').val())
					if($(this).find('[name="col_valor"]').val().trim() == colunas[i].nome.trim())
					{
						colunas[i].utilizada_para_calculo = true;
						if(colunas_valores_ocultas_para_calculo != "")
						{
							colunas_valores_ocultas_para_calculo += ",";
						}
						colunas_valores_ocultas_para_calculo += "`"+colunas[i].nome.trim()+"`";
					}
				}
			});
		}
		monta_tabela_agregacao();
		
		$("#etapa2").css("display", "none");
		$("#etapa3").css("display", "none");
		$("#etapa4").css("display", "block");
	}
	
	
	function add_regra_cor(obgRegra) {
		sequenci_linha_cor_dinamica += 1;
		html = "";
		valueTipo = "";
		valueval_de = "";
		valueval_ate = "";
		valuevalor = "";
		valuecol_valor = "";
		valuecor = "";
		display_de_atelinha_cor_dinamica = "none";
		display_valor_cor_dinamica = "none";
		display_colunavallinha_cor_dinamica = "none";
		if(obgRegra != null)
		{
			valueTipo = obgRegra.tipo_validacao;
			valueval_de = obgRegra.val_de.replace(",",".");
			valueval_ate = obgRegra.val_ate.replace(",",".");
			valuevalor = obgRegra.valor.replace(",",".");
			valuecol_valor = obgRegra.col_valor;
			valuecor = obgRegra.cor;
			if(valueTipo == "porcentagem_de_ate_da_coluna" || valueTipo == "diferenca_de_ate_da_coluna" )
			{
				display_de_atelinha_cor_dinamica = "block";
				display_colunavallinha_cor_dinamica = "block";
			}
			else if(valueTipo == "de_ate" )
			{
				display_de_atelinha_cor_dinamica = "block";
			}
			else if(valueTipo == "menor_que" || valueTipo == "maior_que" || valueTipo == "igual_que")
			{
				display_valor_cor_dinamica = "block";
			}
			else
			{
				display_colunavallinha_cor_dinamica = "block";
			}
		}
		html +='<div class="linha_cor_dinamica" style="width: 100%; clear:both; display: table; border-bottom: solid 1px #bfbfbf; padding: 5px;">';
		html +='<div style="float: left; vertical-align: middle;">';	
			html +=' <a style="vertical-align: middle;" href="javaScript:void(0);" onclick="$(this).parent().parent().prev().insertAfter($(this).parent().parent());"><i style="font-size: 15px;" class="fa-solid fa-up-long"></i></a> ';
			html +=' <a style="vertical-align: middle;" href="javaScript:void(0);" onclick="$(this).parent().parent().next().insertBefore($(this).parent().parent());"><i style="font-size: 15px;" class="fa-solid fa-down-long"></i></a>';
			html +=' &nbsp;';
			html +=' <a style="vertical-align: middle;" href="javaScript:void(0);" onclick="$(this).parent().parent().remove()"><i style="font-size: 15px;" class="fa fa-trash" aria-hidden="true"></i></a>';
		html +='</div>';
		html +='<div style="float: left; width: 260px; ">';
			html += $("#select_colunas_valores_vertical").val()+" "
			html +='<select class="form" name="tipo_validacao" id="tipo_validacao'+sequenci_linha_cor_dinamica+'" value="'+valueTipo+'" onchange="habilita_colunas_por_tipo_valid(this)" placeholder="Tipo"  style="width: 190px; padding: 5px;">';
			html +='	<option value=""></option>';
			html +='	<option value="de_ate" '+(valueTipo == "de_ate" ? "selected='selected'": "")+'>De Até </option>';
			html +='	<option value="maior_que" '+(valueTipo == "maior_que" ? "selected='selected'": "")+'>Maior que </option>';
			html +='	<option value="menor_que" '+(valueTipo == "menor_que" ? "selected='selected'": "")+'>Menor que </option>';
			html +='	<option value="igual_que" '+(valueTipo == "igual_que" ? "selected='selected'": "")+'>Igual que </option>';
			html +='	<option value="diferente_de" '+(valueTipo == "diferente_de" ? "selected='selected'": "")+'>Diferente de </option>';
			html +='	<option value="maior_que_coluna" '+(valueTipo == "maior_que_coluna" ? "selected='selected'": "")+'>Maior que a coluna </option>';
			html +='	<option value="menor_que_coluna" '+(valueTipo == "menor_que_coluna" ? "selected='selected'": "")+'>Menor que a coluna </option>';
			html +='	<option value="igual_a_coluna" '+(valueTipo == "igual_a_coluna" ? "selected='selected'": "")+'>Igual a coluna </option>';
			html +='	<option value="porcentagem_de_ate_da_coluna" '+(valueTipo == "porcentagem_de_ate_da_coluna" ? "selected='selected'": "")+'>Percentual atingido de até da coluna </option>';
			html +='	<option value="diferenca_de_ate_da_coluna" '+(valueTipo == "diferenca_de_ate_da_coluna" ? "selected='selected'": "")+'>Diferença de até da coluna </option>';
			html +='</select>';
		html +='</div>';
		html +='<div class="de_atelinha_cor_dinamica" style="float: left; display: '+display_de_atelinha_cor_dinamica+';">';	
			html +='	De  <input type="number" name="val_de" tipo="número decimal" value="'+valueval_de+'"  placeholder="000,00" data-mask-reverse="true" class="form " style="width: 120px;">';
			html +='	Até <input type="number" name="val_ate" tipo="número decimal" value="'+valueval_ate+'"  placeholder="000,00" data-mask-reverse="true" class="form " style="width: 120px;" >';
		html +='</div>';
		html +='<div class="valor_cor_dinamica" style="float: left; display: '+display_valor_cor_dinamica+';">';	
			html +='	Valor  <input type="number" name="valor" tipo="número decimal"  value="'+valuevalor+'"  placeholder="000,00" data-mask-reverse="true" class="form " style="width: 120px;">';
		html +='</div>';
		html +='<div class="colunavallinha_cor_dinamica" style="float: left; display: '+display_colunavallinha_cor_dinamica+';">';
			html +='	Coluna <select name="col_valor" id="col_valor'+sequenci_linha_cor_dinamica+'" class="form coluna_valor" value="'+valuecol_valor+'"  placeholder="Tipo"  style="width: 150px; padding: 5px;">';
			html +='		<option value=""></option> ';
			if(obgRegra != null && valuecol_valor != "")
			{
				html +='<option value="'+valuecol_valor+'" selected="selected">'+valuecol_valor+'</option> ';
			}
			html +='	</select>';
		html +='</div>';
		html +='<div style="float: left; ">';
			html +='	Cor <input type="color" value="'+valuecor+'" class="form" name="cor" style="width: 50px;" />';
		html +='</div>';
		html +='</div>';
		//html +='	<br>';
		$('#cores_dinamica').append(html);
		coluna_valor_por_classe('col_valor'+sequenci_linha_cor_dinamica);
		if(obgRegra != null)
		{
			$('#tipo_validacao'+display_de_atelinha_cor_dinamica+' option[value=\''+valueTipo+'\']').attr('selected','selected');
		}
		
	}		
	/*
	pegar do site da fonte
	$('.fa-solid').each(function() {
		text = '<option value="'+$(this).attr("class")+'" data-icon="'+$(this).attr("class")+'">'+$(this).attr("class").replace("fa fa-","")+'</option>';
	   //console.log($(this).attr("class")+" "+$(this).attr("class").replace("fa fa-",""))
	   console.log(text);
	});
	*/
	//$("#icone").select2({ width: '100%' });
	$('#icone').select2({
		width: "100%",
		templateSelection: aceitarFontFa,
		templateResult: aceitarFontFa,
		allowHtml: true
	});
	function aceitarFontFa(icon) {
		var originalOption = icon.element;
		return $('<span><i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text + '</span>');
	}
	
	function coluna_valor_por_classe(idColuna)
	{
		for(i =0; i < colunas.length; i++)
		{
			if(colunas[i].tipo_dado == "int" || colunas[i].tipo_dado == "float")
			{
				selected = false;
				$("#"+idColuna).append($('<option>', {
					value: colunas[i].nome,
					text: colunas[i].nome,
					"selected": selected
				}));
			}
		}
		//$('#linha_grid_'+qtd_linha_filtro+' .tipo_filtro option[value=\''+tipo_filtro+'\']').attr('selected','selected');
	}
	
	function habilita_colunas_por_tipo_valid(seletor)
	{
		//alert($(seletor).val()+seletor)
		if($(seletor).val() == "porcentagem_de_ate_da_coluna" || $(seletor).val() == "diferenca_de_ate_da_coluna" )
		{
			$(seletor).parent().parent().find(".valor_cor_dinamica").css("display", "none");
			$(seletor).parent().parent().find(".colunavallinha_cor_dinamica").css("display", "block");
			$(seletor).parent().parent().find(".de_atelinha_cor_dinamica").css("display", "block");
		}
		else if($(seletor).val() == "de_ate" )
		{
			$(seletor).parent().parent().find(".valor_cor_dinamica").css("display", "none");
			$(seletor).parent().parent().find(".colunavallinha_cor_dinamica").css("display", "none");
			$(seletor).parent().parent().find(".de_atelinha_cor_dinamica").css("display", "block");
		}
		else if($(seletor).val() == "menor_que" || $(seletor).val() == "maior_que" || $(seletor).val() == "igual_que")
		{
			$(seletor).parent().parent().find(".valor_cor_dinamica").css("display", "block");
			$(seletor).parent().parent().find(".de_atelinha_cor_dinamica").css("display", "none");
			$(seletor).parent().parent().find(".colunavallinha_cor_dinamica").css("display", "none");
		}
		else
		{
			$(seletor).parent().parent().find(".valor_cor_dinamica").css("display", "none");
			$(seletor).parent().parent().find(".de_atelinha_cor_dinamica").css("display", "none");
			$(seletor).parent().parent().find(".colunavallinha_cor_dinamica").css("display", "block");
		}
	}

	function finalizar_analise_widget()
	{

		
		
		
		//lista cor dinamica
		lista_cor_dinamica = [];
		$('.linha_cor_dinamica').each(function(){
			cor_dinamica = {tipo_validacao: $(this).find('[name="tipo_validacao"]').val(), val_de: $(this).find('[name="val_de"]').val(),
			val_ate: $(this).find('[name="val_ate"]').val(), col_valor: $(this).find('[name="col_valor"]').val(),
			cor: $(this).find('[name="cor"]').val(), valor: $(this).find('[name="valor"]').val()};
			lista_cor_dinamica.push(cor_dinamica);
		});
		
		query = $("#query").val();
		analise = {nome: $("#nome_analise").val(), query: query, colunas_view_vertical: colunas_view_vertical, 
				colunas_valores_vertical: colunas_valores_vertical, coluna_vertical: coluna_vertical,
				colunas_quebra_parcial_vertical: colunas_quebra_parcial_vertical, codigo: $("#codigo_analise").val(),
				grafico: "5", lista_filtros: lista_filtros, cor: $("#cor").val(), icone: $("#icone").val(),
				colunas: colunas, json_cor_dinamica_widget: lista_cor_dinamica,
				colunas_valores_ocultas_para_calculo: colunas_valores_ocultas_para_calculo,
				titulo_widget_grafico: $("#titulo").val(),
				conexao: $("#conexao").val(), unidade_widget: $("#unidade_widget").val(),
				colunas_quebrar_parcial_analise_vertical: "", colunas_quebrar_media_parcial_analise_vertical: "",
				colunas_total_analise_vertical: "", colunas_media_analise_vertical: "",
				modelo_dados: $("#modelo_dados").val(),
				"area": $("#area").val(), "exibir_em_analise": $("#exibir_em_analise").val()
			};
		//console.log(analise);
		abrir_modal_aviso("<b>Aguarde ...</b>");	
		$.post("src/controller/Bi_analiseControllerUser.php?mod=salvar_analise", 
			analise, 
			function (retorno)
			{
				fechar_modal_aviso();
				if(! retorno.status)
				{
					alert(retorno.mensagem);
				}
				else
				{
					$("#codigo_analise").val(retorno.codigo);
					if(confirm("Sucesso! Código "+retorno.codigo+". Deseja visualizar a análise?"))
					{
						window.open('Analise_view.php?analise='+retorno.codigo, '_blank');
					}
					$(".modal_fechar").click();
						
					//alert(retorno.mensagem);
				}
			},'json'
		);	
	}
	
	
	function escolher_tipo_analise()
	{
		
		//$("#select_colunas_valores_vertical").val(listaInfoValoresArmazenada);
		
		
		for(i =0; i < colunas.length; i++)
		{
			selected = false;
			if(listaInfoArmazenada.includes(colunas[i].nome))
			{
				selected = true;
			}
			if(! listaInfoValoresArmazenada.includes(colunas[i].nome) )
			{
				$("#select_colunas_info").append($('<option>', {
					value: colunas[i].nome,
					text: colunas[i].nome,
					"selected": selected
					
				}));
			}
			
			if(colunas[i].tipo_dado == "int" || colunas[i].tipo_dado == "float")
			{
				selected = false;
				if(listaInfoValoresArmazenada.includes(colunas[i].nome))
				{
					selected = true;
				}
				$("#select_colunas_valores_vertical").append($('<option>', {
					value: colunas[i].nome,
					text: colunas[i].nome,
					"selected": selected
				}));
				
			}
			
		}
		
		
		///recriar os select2
		crar_select2_com_todas_as_configs();
		
		if(listaCorDinamicaArmazenada != null && sequenci_linha_cor_dinamica == 0)
		{
			for(j =0; j < listaCorDinamicaArmazenada.length; j++)
			{
				add_regra_cor(listaCorDinamicaArmazenada[j]);
			}
		}
	}
	
	function crar_select2_com_todas_as_configs()
	{
		$("#select_colunas_info").select2({ width: '100%' });
		$("#select_colunas_info").on("select2:select", function (evt) {var element = evt.params.data.element; var $element = $(element); $element.detach(); $(this).append($element); $(this).trigger("change");});
			
		$("#select_colunas_valores_vertical").select2({ width: '100%' });
		$("#select_colunas_valores_vertical").on("select2:select", function (evt) {var element = evt.params.data.element; var $element = $(element); $element.detach(); $(this).append($element); $(this).trigger("change");});
		
		$(".select2-container--default").click(function(){
			//reprocessar ao abrir os selects
		    ///atualiza_select_vertical()
		});
		//permite sequenciar as seleções
		criar_sequenciar_colunas();
	}

	function criar_sequenciar_colunas()
	{
		$("ul.select2-selection__rendered").sortable({
		  containment: 'parent',
		  stop: function(event, ui) {
		  // event target would be the <ul> which also contains a list item for searching (which has to be excluded)
		   idDoSelect = $(event.target).parent().parent().parent().prev().attr("id");
		   console.log(idDoSelect);
		   ////return {name: $(this).data('data').text, value: $(this).data('data').id }; 
			var arr = Array.from($(event.target).find('li:not(.select2-search)').map(function () { 
				return $(this).data('data').id ;
			  }))
			   console.log(arr);
			  //recriar com sequencia
			 //$("#"+idDoSelect).val(arr).change();
			 
			 // $("#"+idDoSelect).val(arr);
			 //$("#"+idDoSelect).select2(arr, null, false);
			 //$("#"+idDoSelect).select2("val", arr);
			// $("#"+idDoSelect).trigger('change');
			$("#"+idDoSelect).select2('destroy');
			bkpItens = [];
			$("#"+idDoSelect+" > option").each(function() {
				bkpItens.push({text: this.text, value: this.value, "selected": false});
				$(this).prop("selected", false);
				$(this).remove();
			});	
			aValoresAdicionados = [];
			$("#"+idDoSelect).append($('<option>', {
					value: "",
					text: "",
					"selected": false
				}));
			aValoresAdicionados.push("");	
			for(i =0; i < arr.length; i++)
			{
				$("#"+idDoSelect).append($('<option>', {
					value: arr[i],
					text: arr[i],
					"selected": true
				}));
				aValoresAdicionados.push(arr[i]);
			}
			for(i =0; i < bkpItens.length; i++)
			{
				if(! aValoresAdicionados.includes(bkpItens[i].value))
				{
					$("#"+idDoSelect).append($('<option>', {
						value: bkpItens[i].value,
						text: bkpItens[i].value,
						"selected": false
					}));
						
				}
			}
				
			$("#"+idDoSelect).select2({ width: '100%' });		
			$("#"+idDoSelect).on("select2:select", function (evt) {var element = evt.params.data.element; var $element = $(element); $element.detach(); $(this).append($element); $(this).trigger("change");});
			$(".select2-container--default").click(function(){
				//reprocessar ao abrir os selects
				//atualiza_select_vertical()
			});
			criar_sequenciar_colunas();
			
		  }
		  
		});
	}
	
	function sequenciar_colunas_conforme_escolhidas(colunas)
	{
		aColunasSequencial = [];
		aListaInfoArmazenada = listaInfoArmazenada.split(",");
		for(j =0; j < aListaInfoArmazenada.length; j++)
		{
			for(i =0; i < colunas.length; i++)
			{
				if(colunas[i].nome == aListaInfoArmazenada[j])
				{
					aColunasSequencial.push(colunas[i]);
				}
			}
		}
		aListaValArmazenada = listaInfoValoresArmazenada.split(",");
		for(j =0; j < aListaValArmazenada.length; j++)
		{
			for(i =0; i < colunas.length; i++)
			{
				if(colunas[i].nome == aListaValArmazenada[j])
				{
					aColunasSequencial.push(colunas[i]);
				}
			}
		}
		arrayLen = aColunasSequencial.length;
		for(i =0; i < colunas.length; i++)
		{
			achouNome = false;
			for(j =0; j < arrayLen; j++)
			{
				if(colunas[i].nome == aColunasSequencial[j].nome)
				{
					achouNome = true;
				}
			}
			if(! achouNome)
			{
				aColunasSequencial.push(colunas[i]);
			}
		}
		return aColunasSequencial;
	}