/*
	Objetivo de ler um XML com a estrutura padrao e realizar a listagem em uma tabela.
	para CSS utilizar os ids abaixo:
	
	xReadTable 	= nome da tabela.
	thead  		= TAG de titulo
	tbody		= TAG de listagem
	
	Para executar o XHREAD inclua 'majax.js' em sua página e utilize um XML no formato de xml.xml na raiz do aplicativo.
*/


// parametro TH serve para nao ler o TH e nem apagar a primeira linha da tabela.
// no caso de paginacoes eh util pois nao precisa apagar o cabecalho ja que foi criado, 
// default eh apagar toda tabela e criar de novo.
// passar como TRUE para nao ler cabecalho

// se desejar passar algum parametro pro XML (no caso de PHP,ASP) utilize a variavel params
// os parametros devem ser passados desta forma "param1=1&param2=2....." e coletados na pagina via POST.

// parametro funcao eh a funcao que sera chamada apos o xRead terminar a listagem
// uso? paginacao. Traga no XML as paginas e use esta funcao para funcionar

var leTit;
var obj;
var func;
function xRead(xml,params,th,funcao)
{

	leTit	  	= (th == null || th == false?false:true);
	params 		= (params == null?'':params);
	func		= (funcao == null?null:funcao);
	var table 	= document.getElementById('xReadTable');
	var wait	= document.getElementById('xReadWait');
	if (table == null)
	{
		alert('ERRO: Tabela xReadTable inexiste.');
	}
	/*if (wait == null)
	{
		alert('ERRO: DIV xReadWait inexiste.');
	}*/
	//top.aguarde(1);
	chamaLoad();
	try{ 
	executar(xml,params,xReadRe); }
	catch (e) { alert('ERRO: Funcao do MAJAX inexiste.'); }
}
// funcao que le o XML executado
function xReadRe()
{

	if (xhReq.readyState==4) 
	{
	
		if (xhReq.status!=200) { alert("ERRO: Erro na leitura do arquivo."); top.aguarde(2); }
		else
		{
			fechaLoad();
			// variaveis de utilização geral
			obj = xhReq.responseXML;
			var tabela = document.getElementById('xReadTable');
			//var wait	= document.getElementById('xReadWait');
			var listagem = obj.getElementsByTagName('listagem');
			var thead;
			var row;
			var titulos;
			var conteudos;
			var linhas;
			var cel;
			
			var alinhamento = Array();
			var largura 	= Array();
			// coloca o XML numa variavel GLOBAL
			// isto faz com que o XML seja acessado por outra funcao se necessario.
			if (obj != null && listagem != null)
			{
				// limpa a tabela de acordo com parametro TH
				leTit == false?limpaTabela('xReadTable',0):limpaTabela('xReadTable',1);
				titulos = listagem[0].getElementsByTagName('titulos')[0].getElementsByTagName('titulo');
				// percorre todos titulos pegando tamanho e alinhamento.
				for (i = 0; i < titulos.length; i++)
				{
					largura[i] 		= titulos[i].getElementsByTagName('larg')[0].firstChild == null?'':titulos[i].getElementsByTagName('larg')[0].firstChild.nodeValue;
					alinhamento[i] 	= titulos[i].getElementsByTagName('align')[0].firstChild == null?'left':titulos[i].getElementsByTagName('align')[0].firstChild.nodeValue;
					// caso seja solicitado titulo, escreve o titulo, criando um tHead se for o primeiro loop
					if (leTit == false) 
					{
						if (i == 0) { thead 	=	tabela.createTHead(); row 	= 	thead.insertRow(0); }
						cel = row.insertCell(i);
						cel.innerHTML = titulos[i].getElementsByTagName('nome')[0].firstChild == null?'':unescape(titulos[i].getElementsByTagName('nome')[0].firstChild.nodeValue);
						cel.width 	  = largura[i];
						cel.align 	  = alinhamento[i];
					}
				}
				
				linhas = listagem[0].getElementsByTagName('linha');
				// percorre o numero de linhas
				if (linhas.length > 0)
				{
					for (i = 0; i < linhas.length; i++)
					{
						conteudos = linhas[i].getElementsByTagName('campo');
						if (conteudos.length < titulos.length) { alert('ERRO: Conteudos são menores que número de menus.'); return; }
						row = tabela.tBodies[0].insertRow(i);
						row.className = (i%2==0?'tr1':'tr2');
						// em cada linha percorrida, ele vai inserindo seus campos em um ROW
						for (c = 0; c < titulos.length; c++)
						{
							cel 			= row.insertCell(c);
							cel.innerHTML 	= conteudos[c].firstChild == null?'':unescape(conteudos[c].firstChild.nodeValue);
							cel.align 		= alinhamento[c];
						}
					}
				}
				else
				{
					
					row = tabela.tBodies[0].insertRow(0);
					cel = row.insertCell(0);
					cel.innerHTML 	= "N&atilde;o h&aacute; registros para esta consulta.";
					cel.align 		= "center";
					cel.colSpan   	= titulos.length;
				}
				// esconde aguarde
				//top.aguarde(2);
				if (func != null)
				{
					func();	
				}
			}
			else
			{
				alert('ERRO: XML fora dos padroes.');	
			}

		}
	}
}

// funcao que limpa a tabela. Deixando 1, mantem o cabecalho, deixando 0, retira todos itens.
function limpaTabela(table,ultimoRegistro)
{
	var tabela = document.getElementById(table);
	if (tabela.rows.length > 0)
	{
		try{
				while(tabela.rows[ultimoRegistro])
				{
					tabela.deleteRow(ultimoRegistro);
				}
				return true;
			}
		catch (e) { alert('ERRO: Erro ao limpar a tabela'); }
	}
}
