<?php
require_once("config/config_dir_raiz.php");
include_once("cabecalho.php");

$config = new Config();
//require_once($config->diretorio_raiz()."/src/model/bd/BiDAO.php");
//$biDAO = new BiDAO();
//$listaRelatorios = $biDAO->monta_filtro(1, "formDadosbi_analiseFiltro", "resultadoBi_analise");
//$listaRelatorios = $biDAO->monta_analise(1, $_POST);
//echo count($listaRelatorios);

include_once("rodape.php");
?>
<div style="width: 100%; padding: 10px; max-width: 900px; margin: 0 auto;">
<div id='filtro_analise'></div>
<div id="resultadoBi_analise" style="width: 100%; overflow: auto; height: 400px;"></div>
</div>

<!-- teste com graficos!-->
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>-->
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/highcharts-more.js"></script>
<script src="https://code.highcharts.com/modules/data.js"></script>

<!-- <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto; overflow: auto;"></div>-->

<div id="modal_geral" style="display: none; padding: 10px; width: 100%; max-width: 500px; height: 100%; max-height: 500px; background: rgba(0,0,0, 0.6); position: fixed; margin: 0; left: 50%; transform: translateX(-50%); z-index: 10; top: 10px; ">
	<a href="javaScript:void(0)" onclick="$(this).parent().css('display', 'none');" style="position: fixed; left: calc(100% - 40px); color: red; font-weight: bold;">X</a>
	<div class="conteudo_modal" style="background: white; overflow: auto; height: 100%;"></div>
	
</div>

<script>
	montaFiltro("filtro_analise", <?php echo $_GET["analise"];?>,"formDadosbi_analiseFiltro", "resultadoBi_analise" );
	function montaFiltro(filtro, cod_analise, nomeForm, seletor)
	{	
		html = "";
		$.post("src/controller/Bi_analiseControllerUser.php?mod=monta_filtro&analise="+cod_analise,{}, function (retorno)
		{
			existe_multiplo_escolha = false;
			html += '<div id="modal'+nomeForm+'" style="display: none; padding: 10px; width: 100%; max-width: 500px; height: 100%; max-height: 500px; background: rgba(0,0,0, 0.6); position: fixed; margin: 0; left: 50%; transform: translateX(-50%); z-index: 10; ; top: 10px;">'
			html += '<form " style="background: white; height: 100%;" action=\'src/controller/Bi_analiseControllerUser.php?mod=executar&analise='+cod_analise+'&seletor='+seletor+'\' id="'+nomeForm+'" class="form_filtro">';;
			for(i = 0; i < retorno.input_form.length; i++)
			{
				input = retorno.input_form[i];
				tipoInput = "text";
				atributos = "";
				clasInpu = "form ";
				labelObrigatorio = "";
				if(input.tipo == "data")
				{
					atributos += "data-mask='00/00/0000' placeholder='00/00/0000' ";
					clasInpu = "form mask";
				}
				else if(input.tipo == "data hora minuto")
				{
					atributos += "data-mask='00/00/0000 00:00' placeholder='00/00/0000 00:00' ";
					clasInpu = "form mask";
				}
				else if(input.tipo == "número inteiro")
				{
					tipoInput = "number";
					atributos += "data-mask='0000000000000000000' placeholder='000' ";
					clasInpu = "form mask";
				}
				else if(input.tipo == "número decimal")
				{
					atributos += "data-mask='000.000.000.000.000,00' placeholder='000,00' data-mask-reverse='true' ";
					clasInpu = "form mask";
				}
				
				if(input.obrigatorio)
				{
					atributos += "required ";
					labelObrigatorio = '<span class="form_obrigatorio">*</span>';
				}
				html += "<div class='filtroForm' >";
					html += "<label>"+labelObrigatorio+input.label+"</label> <br>";
					if(input.tipo == "data")
					{
						html += "<input id='"+input.id+"' name='"+input.id+"' tipo='"+input.tipo+"' "+atributos+" class='"+clasInpu+"' />"	
					}
					else if(input.tipo == "múltipla escolha")
					{
						existe_multiplo_escolha = true;
						html += "<div class='divMultiPlaEscolha' style='width: 300px;'>"
						html += '<select name="'+input.id+'[]" placeholder="'+labelObrigatorio+input.label+'" id="search'+input.id+'" multiple="multiple">';
						//html += '<option value=""></option>';
						for(iMult =0; iMult < input.dadosEscolher.length; iMult ++)
						{
							html += '<option value="'+input.dadosEscolher[iMult]+'">'+input.dadosEscolher[iMult]+'</option>';
						}
						html += "</select>"
						html += "</div>";
						
					}
					
				html += "</div>";
				
			}
			html += "<button type=\"button\" class=\"btnSuccess btnSn\"   onclick=\" if(montaTebelaBi('"+nomeForm+"','"+seletor+"')) { $('#btn_fechar_filtrobi_analise').prop('disabled',false); $('#btn_fechar_filtrobi_analise').click(); }\">Filtrar </button>";
			html += '</form>';
			html += '</div>'
			html += '<a href="javaScript:void(0);" style="z-index: 5;" onclick="$(\'#modal'+nomeForm+'\').css(\'display\', \'block\')"> <img src="images/filtroIcon.png" style="height: 40px; opacity: 0.5;"/> </a>';
			html += '<a href="javaScript:void(0);" style="z-index: 5;" onclick="pivotTabela(\''+seletor+'\', \'analise'+retorno.config.codigo+'\');"><img src="images/PivotIcon.png" style="height: 40px; opacity: 0.5;"/></a>';
			
			html += ' -- <a href="javaScript:void(0);" style="z-index: 5;" onclick="trocaTipoAnalise(\'analise'+retorno.config.codigo+'\', \'table\', \'tipoDash\');"><img src="images/gridIcon.png" style="height: 40px; opacity: 0.5;"/></a>';
			html += '<a href="javaScript:void(0);" style="z-index: 5;" onclick="trocaTipoAnalise(\'analise'+retorno.config.codigo+'\', \'chart\', \'line\');"><img src="images/graficoLinhaIcon.png" style="height: 40px; opacity: 0.5;"/></a>';
			html += '<a href="javaScript:void(0);" style="z-index: 5;" onclick="trocaTipoAnalise(\'analise'+retorno.config.codigo+'\', \'chart\', \'column\');"><img src="images/graficoColunaIcon.png" style="height: 40px; opacity: 0.5;"/></a>';
			html += '<a href="javaScript:void(0);" style="z-index: 5;" onclick="trocaTipoAnalise(\'analise'+retorno.config.codigo+'\', \'chart\', \'bar\');"><img src="images/graficoBarraIcon.png" style="height: 40px; opacity: 0.5;"/></a>';
			html += '<a href="javaScript:void(0);" style="z-index: 5;" onclick="trocaTipoAnalise(\'analise'+retorno.config.codigo+'\', \'chart\', \'pie\');"><img src="images/graficoPizzaIcon.png" style="height: 40px; opacity: 0.5;"/></a>';
			$("#filtro_analise").html(html);
			if(existe_multiplo_escolha)
			{
				/*var jq14 = jQuery.noConflict(true); 
				$(document).ready(function(){
					$('#search'+input.id).selectize();
					$('.divMultiPlaEscolha').parent().css("width", "100%");
					$('.divMultiPlaEscolha').css("width", $('.divMultiPlaEscolha').parent().css("width"));
				});*/

				$("select").select2({ width: '100%' });
				
				$(document).ready(function(){
					$('.select2').parent().css("width", "100%");
					$('.divMultiPlaEscolha').parent().css("width", "100%");
					$('.divMultiPlaEscolha').css("width", $('.divMultiPlaEscolha').parent().css("width"));
				});
			}
			//importar script 
			$.getScript("js/formulario.js", function() {
			  // alert("Script loaded but not necessarily executed.");
			});
			if(retorno.input_form.length == 0)
			{
				montaTebelaBi(nomeForm,seletor);
			}
			//alert(retorno.config.nome);
		},'json'
		);
	}
	//monta tabela
	listaTabs = [];
	somadorParcial = [];
	contadorParcial = [];
	function montaTebelaBi(formulario, seletor)
	{	
		//alert(seletor);
		bloqueio_form = false;
		$("#"+formulario + ' input[required]').each(function() {
			
			if ($(this).val() == ""  )
			{
				bloqueio_form = true;
				$(this).css("border-color","red");
			}	
			else
			{
				$(this).css("border-color","#6b8dae");
			}	
		});
		
		$("#"+formulario+' select[required]').each(function() {
			
			if ($(this).val() == ""  )
			{
				bloqueio_form = true;
				$(this).css("border-color","red");
				
				if($(this).attr("name"))
				{
					//alert($(this).attr("name"))
					//select2
					name_select = $(this).attr("name");
					$("#"+formulario+' span').each(function() {
						if($(this).attr("aria-labelledby"))
						{
							if($(this).attr("aria-labelledby").split("-")[1] == name_select) 
							{
								//alert(name_select+ " - "+$(this).attr("aria-labelledby").split("-")[1])
								$(this).css("border-color","red");
							}
						}
					});
				}
			}	
			else
			{
				$(this).css("border-color","#6b8dae");
				
				if($(this).attr("name"))
				{
					//alert($(this).attr("name"))
					//select2
					name_select = $(this).attr("name");
					$("#"+formulario+' span').each(function() {
						if($(this).attr("aria-labelledby"))
						{
							if($(this).attr("aria-labelledby").split("-")[1] == name_select) 
							{
								$(this).css("border-color","#6b8dae");
							}
						}
					});
				}
			}
			
		});
		
		if (! bloqueio_form)
		{	
			
			$('#modal'+formulario+'').css('display', 'none');
			//$('.btnSalvar').remove();
			dadosJson = $("#"+formulario).serialize(); 
			$.post($("#"+formulario).attr("action"),dadosJson, function (retorno)
			{
				
				//////////////////////////////
				///normal/////
				tipo = "table";
				tipoDash = "";
				if(retorno.config.usar_charts)
				{
					tipo = "chart";
					tipoDash = retorno.config.tipo_charts;
				}
				montaTabDash(retorno, tipo, seletor, tipoDash);
				listaTabs.push({"codigo": "analise"+retorno.config.codigo, "tipo": tipo, "seletor": seletor, "pivot": false, "dados": retorno})
				
			},'json'
			);
		}
		else
		{
			alert("Verifique campos obrigatórios!");
		}	
		somadorParcial = [];
		contadorParcial = [];
		somadorTotal = [];
		contadorTotal = [];
		return ! bloqueio_form;
	}
	erro = null
	function montaTabDash(retorno, tipo, seletor, tipoDash)
	{
		//tipo table ou dashboard ou chart
		
		html = "";
		if(! retorno.config.usar_charts)
		{
			//html += '<a href="javaScript:void(0);" onclick="pivotTabela(\''+seletor+'\', \'analise'+retorno.config.codigo+'\');">Pivot</a>'
		}
		indicesColunasToralizar = [];
		indicesColunasMedia = [];
		ultimoValorParaQubraParcial = [];
		nomesColunasQuebraParcial = [];
		indicesColunasQuebraParcial = [];
		indiceColunaAnaliseVertical = null;//continuar fazer igual o faturamento diário
		html += "<table class='tableAnalise' id='analise"+retorno.config.codigo+"' style='width: "+(retorno.colunas.length*100)+"px;'>";
		html += "<thead><tr>";
		
		//colunas com quebra parcial
		for(i =0; i < retorno.colunas.length; i++)
		{
			coluna = retorno.colunas[i];
			for(j =0; j < coluna.campos_quebar_parcial.length; j++)
			{
				ja_incluiu = false;
				for(k =0; k < nomesColunasQuebraParcial.length; k++)
				{
					if(coluna.campos_quebar_parcial[j] == nomesColunasQuebraParcial[k])
					{
						ja_incluiu = true;
					}
				}
				if(! ja_incluiu)
				{
					nomesColunasQuebraParcial.push(coluna.campos_quebar_parcial[k]);
				}
			}
		}
		//indices com quebra parcial
		for(i =0; i < retorno.colunas.length; i++)
		{
			somadorParcial.push([]); //inicia com 0 pega e valor pelo indice
			contadorParcial.push([]); //inicia com 0 e valor pelo indice 
			
			coluna = retorno.colunas[i];
			for(j =0; j < nomesColunasQuebraParcial.length; j++)
			{
				if(nomesColunasQuebraParcial[j] == coluna.nome)
				{
					indicesColunasQuebraParcial.push(i);
				}
			}
		}
		
		for(l =0; l < indicesColunasQuebraParcial.length; l++)
		{
			//console.log(indicesColunasQuebraParcial[l])
	
			for(i =0; i < retorno.colunas.length; i++)
			{
				somadorParcial[indicesColunasQuebraParcial[l]].push(0);
				contadorParcial[indicesColunasQuebraParcial[l]].push(0);
			}
			
		}
		for(i =0; i < retorno.colunas.length; i++)
		{
			coluna = retorno.colunas[i];
			//colunas quebrar media e totalizador
			
			html += "<td>"+coluna.nome+"</td>";
			if(coluna.totaliza)
			{
				indicesColunasToralizar.push(i); 
			}
			
			if(coluna.media)
			{
				indicesColunasMedia.push(i); 
				
			}
			somadorTotal.push(0); 
			contadorTotal.push(0);
			ultimoValorParaQubraParcial.push("nulini");
			
		}
		
		html += "</thead><tbody>";
		//dados
		for(i =0; i < retorno.dados.length; i++)
		{
			valores = retorno.dados[i];
			//validar quebra parcial
			for(l =0; l < indicesColunasQuebraParcial.length; l++)
			{
				indiceColunaQuebar = indicesColunasQuebraParcial[l];
				if(valores[indiceColunaQuebar] != ultimoValorParaQubraParcial[indiceColunaQuebar] 
				&& i > 0  && tipo == "table"
				//falta criar as colunas quebrar, esta fixo a primeira
				)
				{
					html += montaMediaParcial(indicesColunasMedia, retorno.colunas, indiceColunaQuebar, indicesColunasQuebraParcial);
					html += montaTotalParcial(indicesColunasToralizar, retorno.colunas, indiceColunaQuebar, indicesColunasQuebraParcial);
				}
			}
			//
			html += "<tr>";
			algumaColunaTemValorDifDaLinhaAnt = false;
			for(j =0; j < valores.length; j++)
			{
				style="";
				if(valores[j] == ultimoValorParaQubraParcial[j] && ! algumaColunaTemValorDifDaLinhaAnt) ///&& j ==0)//sem coluna querar
				{
					if(true)
					{
						style="border: none; color: #cce5ff;";
					}
				}
				else
				{
					algumaColunaTemValorDifDaLinhaAnt = true;
				}
				html += "<td style='"+style+"'>"+valores[j]+"</td>";
				if(indicesColunasToralizar.includes(j))
				{
					for(l =0; l < indicesColunasQuebraParcial.length; l++)
					{
						indiceColunaQuebar = indicesColunasQuebraParcial[l];
						//console.log(indiceColunaQuebar)
						somadorParcial[indiceColunaQuebar][j] = somadorParcial[indiceColunaQuebar][j] +parseFloat(valores[j]);	
		
					}
					somadorTotal[j] = somadorTotal[j] +parseFloat(valores[j]);
				}
				if(indicesColunasMedia.includes(j))
				{
					for(l =0; l < indicesColunasQuebraParcial.length; l++)
					{
						indiceColunaQuebar = indicesColunasQuebraParcial[l];
						contadorParcial[indiceColunaQuebar][j] = contadorParcial[indiceColunaQuebar][j] +1;
					}
					contadorTotal[j] = contadorTotal[j] +1;
				}
				ultimoValorParaQubraParcial[j] = valores[j];
			}
			html += "</tr>";
			
		}
		
		if(tipo == "table")
		{
			for(l =0; l < indicesColunasQuebraParcial.length; l++)
			{
				indiceColunaQuebar = indicesColunasQuebraParcial[l];
				html += montaMediaParcial(indicesColunasMedia, retorno.colunas, indiceColunaQuebar, indicesColunasQuebraParcial);
				html += montaTotalParcial(indicesColunasToralizar, retorno.colunas, indiceColunaQuebar, indicesColunasQuebraParcial);
			}
		}
		html += montaTotalFinal(indicesColunasToralizar, retorno.colunas);
		html += "</tbody></table>";
		//alert(seletor+" "+html);
		$("#"+seletor).html(html);
		//pivot
		//pivotTabela(seletor, 'analise'+retorno.config.codigo)
		//cabecalho fixo
		document.getElementById(seletor).addEventListener("scroll", function(){
		   var translate = "translate(0,"+this.scrollTop+"px)";
		   this.querySelector("thead").style.transform = translate;
		});
		
		
		if(tipo == "chart")
		{
			
			/*for(i =0; i < 2; i++)//só a primeira e segunda coluna
			{
				series = [];
				categories= [];
				data = [];
				categoria = [];
				coluna = retorno.colunas[i];
				for(j =0; j < retorno.dados.length; j++)
				{
					valores = retorno.dados[j];
					data.push(valores[i]);
					categoria.push(valores[i]);
				}
				//name: coluna.nome,
				if(i == 0)
				{
					categories.push( categoria);
				}
				else if(i == 1)
				{
					series.push({ data: data});
				}
			}
			Highcharts.chart(seletor, {
					chart: {
							type: tipoDash,
							inverted: false
					},
					xAxis: {
						categories: categories
					},
					
				series: series
					
			});
			
			*/
			Highcharts.addEvent(Highcharts, 'displayError', function (err) {
			  if(err.message.includes("error"))
			  {
				abrir_modal("modal_geral", "<b style='color: red;'>Erro ao montar o gráfico</b> <Br> Abaixo exemplo de tabela para gráfico. <br><img src='images/exemplo_grafico.png' style='width: 100%;'/>");
			  }
			}); 
			Highcharts.chart(seletor, {
				data: {
					table: 'analise'+retorno.config.codigo
				},
				chart: {
					type: tipoDash
				},
				title: {
					text: ''
				},
				subtitle: {
					text:
						''
				},
				xAxis: {
					type: 'category'
				},
				yAxis: {
					allowDecimals: false,
					title: {
						text: 'Amount'
					}
				}
			});
			
			
			
			/*Highcharts.chart(seletor, {
					chart: {
							type: tipoDash,
							inverted: false
					},
					data: {
						table: 'analise'+retorno.config.codigo
					}
					
			});*/
		}
	}
	function trocaTipoAnalise(table, tipo, tipoDash)
	{
		tabela = retornaTabelaPorNome(table);
		montaTabDash(tabela.dados, tipo, tabela.seletor, tipoDash);
	}
	function montaMediaParcial(indicesColunasMedia, colunas, indiceColunaQuebar, indicesColunasQuebraParcial)
	{
		html = "";
		if(indicesColunasMedia.length > 0
						//falta criar as colunas quebrar, esta fixo a primeira
		)
		{
			//caso os primeiros indices forem zero limpa e não exibe
			if(indiceColunaQuebar > 0)
			{
				entrou_zerar = false;
				for(l =0; l < indicesColunasQuebraParcial.length; l++)
				{
					indice_atual = indicesColunasQuebraParcial[l];
					if(indice_atual < indiceColunaQuebar)
					{
						for(k =0; k < colunas.length; k++)
						{
							if(indicesColunasToralizar.includes(k) && somadorParcial[indice_atual][k] == 0)
							{
								somadorParcial[indiceColunaQuebar][k] = 0;
								contadorParcial[indiceColunaQuebar][k] = 0;
								entrou_zerar = true;
								k = colunas.length;
								l = indicesColunasQuebraParcial.length;
							}
						}
					}
				}
				if(entrou_zerar)
				{
					return html;
				}
			}
			
			//cria uma coluna com totalizador e media
			html += "<tr>";
			for(k =0; k < colunas.length; k++)
			{
				if(k == indiceColunaQuebar)
				{
					html += "	<td class='tdTotalizadorBi'>Média parcial</td>";
				}
				else if(indicesColunasMedia.includes(k))
				{
					if(contadorParcial[indiceColunaQuebar][k] > 0)
					{
						html += "	<td class='tdTotalizadorBi'>"+roundToTwo(somadorParcial[indiceColunaQuebar][k]/contadorParcial[indiceColunaQuebar][k])+"</td>";
						//somadorParcial[k] = 0;
						contadorParcial[indiceColunaQuebar][k] = 0;
					}
					else
					{
						html += "	<td class='tdTotalizadorBi'>0</td>";
					}
				}
				else
				{
					html += "	<td></td>";
				}
			}
			html += "</tr>";
			//contadorParcial[j] = 0;
		}
		return html;
	}
	function montaTotalParcial(indicesColunasToralizar, colunas, indiceColunaQuebar, indicesColunasQuebraParcial)
	{
		html = "";
		if(indicesColunasToralizar.length > 0 )
		{
			//caso os primeiros indices forem zero limpa e não exibe
			if(indiceColunaQuebar > 0)
			{
				entrou_zerar = false;
				for(l =0; l < indicesColunasQuebraParcial.length; l++)
				{
					indice_atual = indicesColunasQuebraParcial[l];
					if(indice_atual < indiceColunaQuebar)
					{
						for(k =0; k < colunas.length; k++)
						{
							if(indicesColunasToralizar.includes(k) && somadorParcial[indice_atual][k] == 0)
							{
								somadorParcial[indiceColunaQuebar][k] = 0;
								contadorParcial[indiceColunaQuebar][k] = 0;
								entrou_zerar = true;
								k = colunas.length;
								l = indicesColunasQuebraParcial.length;
							}
						}
					}
				}
				if(entrou_zerar)
				{
					return html;
				}
			}
			//cria uma coluna com totalizador e media
			html += "<tr>";
			for(k =0; k < colunas.length; k++)
			{
				if(k == indiceColunaQuebar)
				{
					html += "	<td class='tdTotalizadorBi'>Total parcial</td>";
				}
				else if(indicesColunasToralizar.includes(k))
				{
					html += "	<td class='tdTotalizadorBi'>"+roundToTwo(somadorParcial[indiceColunaQuebar][k])+"</td>";
					somadorParcial[indiceColunaQuebar][k] = 0;
					contadorParcial[indiceColunaQuebar][k] = 0;
				}
				else
				{
					html += "	<td></td>";
				}
			}
			html += "</tr>";
		}
		return html;
	}
	function montaTotalFinal(indicesColunasMedia, colunas)
	{
		htmlMedia = "";
		htmlTotal = "";
		if(indicesColunasMedia.length > 0)
		{
			//cria uma coluna com totalizador e media
			htmlMedia += "<tr>";
			htmlTotal += "<tr>";
			htmlMedia += "	<td class='tdTotalizadorBi'>Média</td>";
			htmlTotal += "	<td class='tdTotalizadorBi'>Total</td>";
			for(k =1; k < colunas.length; k++)
			{
				entrouQuebra= false;
				if(true)//for(l =0; l < indicesColunasQuebraParcial.length; l++)
				{
					if(indicesColunasMedia.includes(k))
					{
						entrouQuebra= true;
						if(contadorTotal[k] > 0)
						{
							htmlMedia += "	<td class='tdTotalizadorBi'>"+roundToTwo(somadorTotal[k]/contadorTotal[k])+"</td>";
							//somadorParcial[k] = 0;
							contadorTotal[k] = 0;
						}
						else
						{
							htmlMedia += "	<td class='tdTotalizadorBi'>0</td>";
						}
					}
					if(indicesColunasToralizar.includes(k))
					{
						entrouQuebra= true;
						htmlTotal += "	<td class='tdTotalizadorBi'>"+somadorTotal[k]+"</td>";
							//somadorParcial[k] = 0;
						contadorTotal[k] = 0;
						somadorTotal[k] = 0;
					}
					
				}
				if(! entrouQuebra)
				{
					htmlMedia += "	<td></td>";
					htmlTotal += "	<td></td>";
				}
			}
			htmlMedia += "</tr>";
			htmlTotal += "</tr>";
			
		}
		return htmlMedia+htmlTotal;
	}
	function tableHtmlToarray(table)
	{
		const trs = document.querySelectorAll('#'+table+' tr');
		const result = [];
		for(let tr of trs) {
		  let th_td = tr.getElementsByTagName('td');
		  if (th_td.length == 0) {
			th_td = tr.getElementsByTagName('th');
		  }
		  
		  let th_td_array = Array.from(th_td); // convert HTMLCollection to an Array
		  th_td_array = th_td_array.map(tag => tag.innerText); // get the text of each element
		  result.push(th_td_array);
		}

		//console.log(result);
		return result;
	}

	
	function roundToTwo(num) {
		return +(Math.round(num + "e+2")  + "e-2");
	}
	
	
	//pivotar tabela
	function tableHtmlToarray(tableSeletor)
	{
		const trs = document.querySelectorAll('#'+tableSeletor+' tr');
		const result = [];
		for(let tr of trs) {
		  let th_td = tr.getElementsByTagName('td');
		  if (th_td.length == 0) {
			th_td = tr.getElementsByTagName('th');
		  }
		  
		  let th_td_array = Array.from(th_td); // convert HTMLCollection to an Array
		  th_td_array = th_td_array.map(tag => tag.innerText); // get the text of each element
		  result.push(th_td_array);
		}

		//console.log(result);
		return result;
	}

	function retornaTabelaPorNome(table)
	{
		//alert(table);
		for(i=0; i< listaTabs.length; i++)
		{
			if(listaTabs[i].codigo == table)
			{
				return listaTabs[i];
			}
			
		}
		return null;
	}

	function pivotTabela(seletor, tableSeletor)
	{
		
		tabela = retornaTabelaPorNome(tableSeletor);
		if(tabela.pivot)
		{
			tabela.pivot = false;
			montaTabDash(tabela.dados, "table", tabela.seletor, tabela.tipoDash);
			return null;
		}
		tabela.pivot = true;
		array = tableHtmlToarray(tableSeletor);
		if(array.length > 0)
		{
			qtdColunas = array[0].length;
			html = "<table id='"+tableSeletor+"' class='tableAnalise' style='width: "+(qtdColunas*100)+"px;'>";
			
			for(i = 0; i < qtdColunas; i++)
			{
				html += "<tr>";
				for(j =0; j < array.length; j++)
				{
					atributos = "";
					if(j == 0) //primeira coluna
					{
						atributos = "class='tdTotalizadorBi'";
					}
					else if(array[j][i].includes("Média parcial") || array[j][i].includes("Total parcial"))
					{
						atributos = "class='tdTotalizadorBi'";
					}
					html += "<td "+atributos+">"+array[j][i]+"</td>";
				}
				html += "</tr>";
			}
			html += "</table>";
			$("#"+seletor).html(html);
			$("#"+seletor).css("overflow", "auto");
		}
		return null;
	}
	
	function abrir_modal(id, conteudo)
	{
			$("#"+id+" .conteudo_modal").html(conteudo);
			$("#"+id).css("display", "block");
	}
	
</script>
<!--
$(function() {
		Highcharts.chart('container', {
			chart: {
				type: 'line',
				inverted: false
			},
			data: {
				table: 'datatable2'
			}
			
		});
	});
	
	$(function() {
		Dashboards.board('container', {
			chart: {
				type: 'line',
				inverted: false
			},
			data: {
				table: 'datatable'
			}
			
		});
	});
	-->