/**
 * fazPaginacaoXML(intPagina,intRegistrosPagina,intRegistros,nodePai,xsl)
 *------Escreve o resultado paginado de uma consulta ao banco de dados.
 *------A consulta deve retornar um XML e não um Recordset
 *------A consulta deve usar um documento XSL para exibição dos dados e deve existir na pagina html a sua referência
 <xml id="xslTeste" name="xslTeste" src="xslTeste.xsl"></xml>

 *------O objeto XML com o resultado da consulta ao banco deve ser GLOBAL e sempre se chamar xmlRetorno
 *------A exibição do resultado deve seguir o padrão de apresentação das consultas e relatórios do PNPEWEB.
 *------Seguindo o padrão  os seguintes objetos devem existir no seu documento HTML com os nomes iguais ao exemplo abaixo (fildConsulta,lblLegendaPaginacao,divResultadoConsulta,tdPaginacaoNavegacao):
 <fieldset id="fildConsulta" style="display:none;">
 <legend class="quadro"><span class="busca" id="lblLegendaPaginacao"></span></legend>
 <div id="divResultadoConsulta" style="display:none;"></div>
 <table	border="0" width="100%" cellpadding="2" cellspacing="0" align="center">
 <tr>
 <td align="center" id="tdPaginacaoNavegacao"></td>
 </tr>
 </table>
 </fieldset>

 *------fieldConsulta -  É o quadro que envolve o resultado da consulta
 *------lblLegendaPaginacao -  É aquela famosa legenda que aparece na exibição do resultado - informa o total de registros,  a pagina atual e quantas paginas tem no total
 *------divResultadoConsulta -  É a area aonde o XSL vai exibir os resultados
 *------tdPaginacaoNavegacao -  É a linha aonde vai ser abrigado o numero das páginas

 *------No documento xsl sempre deve ter o seguinte cabeçalho antes do <xsl:template match="/"> :
 <xsl:param name="recordCount" select="//XXX/PAGINACAO/@recordCount"/>	<!-- número de registros -->
 <xsl:param name="recordsPerPage" select="//XXX/PAGINACAO/@recordsPerPage" />	<!-- número de registros por página -->
 <xsl:param name="pageNumber" select="//XXX/PAGINACAO/@pageNumber" />	<!-- número da páginas -->
 <xsl:param name="totalPaginas" select="//XXX/PAGINACAO/@totalPaginas" />	<!--total de páginas-->

 *------Após montar o laço no XSL <xsl:for-each select="//XXX/ZZZ/row"> deve se colocar o seguinte if entre os campos a exibir
 <xsl:if test="position() &gt; document.getElementByIdrecordsPerPage * number(document.getElementByIdpageNumber) and
 position() &lt;= number(document.getElementByIdrecordsPerPage * number(document.getElementByIdpageNumber) +
 document.getElementByIdrecordsPerPage)">
 </xsl:if>
 * A função "fazPaginacaoXML" dever ser chamada na função que retorna o XML.



 * @param int intPagina
 *     Numero da Página escolhida -  inicialmente deve se passar zero
 * @param int intRegistrosPagina
 *     Quantidade de resultados que deseja exibir na página
 * @param int intRegistros
 *     Quantidade de registros que a consulta retornou
 *     Deve se conseguir da seguinte maneira - var intRegistros = xmlRetorno.selectNodes("//XXX/ZZZ/row").length;
 * @param String nodePai
 *     Nome do nó pai que vai receber o filho com a paginação - 'XXX'
 * @param String xsl
 *     ID do objeto XSL que deve existir na pagina HTML
 * @return void
 * Tomar cuidado qndo criar campos no seu formulario Essas variaveis são usadas--> document.getElementById('paginaAtual') document.getElementById('quantidadePaginas')
 * e preenchidas
 */

/*
 *Retorna o obj que foi passado o ID.
 */

function fazPaginacaoXML(intPagina, intRegistrosPagina, intRegistros, nodePai, xsl, xml){
	
    var intQuantidadePaginas;
        
	if(xml != "" && xml != null) {
		var xmlDados = xml;
	} else {
		var xmlDados = document.getElementById('xmlCTPSRecuperadasHidden').value;
	}
	
	var xmlPagina = criarDOMExecucao(true,xmlDados);
	
    //xmlPagina.resolveExternals = true;
    //Trata o NULL
    intRegistros = (intRegistros == '') ? 0 : intRegistros;
   	
    //Definindo quantidade de páginas
    if((intRegistros % intRegistrosPagina) != 0){
        intQuantidadePaginas =  parseInt((intRegistros / intRegistrosPagina) + 1);
    }else{
        intQuantidadePaginas =  parseInt(intRegistros / intRegistrosPagina);
    }
	
    //Cria o Element com os dados para a paginação
    var PAGINACAO = xmlPagina.createElement("PAGINACAO");
    PAGINACAO.setAttribute("recordCount", intRegistros);
    PAGINACAO.setAttribute("recordsPerPage", intRegistrosPagina);
    PAGINACAO.setAttribute("pageNumber", intPagina);
    PAGINACAO.setAttribute("totalPaginas",intQuantidadePaginas);
    
	//xmlPagina.selectSingleNode(nodePai).appendChild(PAGINACAO);
	xmlPagina.getElementsByTagName(nodePai)[0].appendChild(PAGINACAO);
	
	document.getElementById("divResultadoPaginacao").innerHTML = "";
	
	if(intRegistros > 0) {	
		//imprime o número das páginas para seleção das mesmas
		document.getElementById("divResultadoPaginacao").innerHTML = imprimePaginacao(intPagina, intQuantidadePaginas ,intRegistrosPagina, intRegistros, nodePai, xsl, xmlDados);		
	}
	
    //Seleção do xsl
    xslDoc = criarDOM();			
	xslDoc.load("/sistemas/ctpsrecuperadas/xslCTPSRecuperadas.xsl");		

	document.getElementById('divResultadoConsultaCTPSRecuperadas').innerHTML = "";
	
	if (window.ActiveXObject) {
			
		resultadoXSL = xmlPagina.transformNode(xslDoc);
				
		document.getElementById('divResultadoConsultaCTPSRecuperadas').innerHTML = resultadoXSL;
		
	} else if (document.implementation && document.implementation.createDocument) {
		
		processadorXSLT =  new XSLTProcessor();
		processadorXSLT.importStylesheet(xslDoc);		
		resultadoXSL = processadorXSLT.transformToFragment(xmlPagina,document);		
				
		document.getElementById('divResultadoConsultaCTPSRecuperadas').appendChild(resultadoXSL);
		
	}
	
	document.getElementById('divTotalPaginas').innerHTML = "";
	if(intRegistros > 0) {	
		document.getElementById('divTotalPaginas').innerHTML = "<b>" + intRegistros + "</b> Registro(s) Encontrado(s) - Mostrando Página <b>" + (intPagina + 1) + "</b> de <b>" + intQuantidadePaginas + "</b>";
	}
	
    return;
}

/**
 * fazPaginacaoXML(intPagina,intRegistrosPagina,intRegistros,nodePai,xsl)
 *------Função que imprime o número das páginas para seleção das mesmas
 *------É chamada dentro da função fazPaginacaoXML
 * @param int intPagina
 *     Numero da Página escolhida -  inicialmente deve se passar zero
 * @param int intQuantidadePaginas
 *     Quantidade de Páginas da consulta - vem de dentro da fazPaginacaoXML()
 * @param int intRegistrosPagina
 *     Quantidade de resultados que deseja exibir na página
 * @param int intRegistros
 *     Quantidade de registros que a consulta retornou
 *     Deve se conseguir da seguinte maneira - var intRegistros = xmlRetorno.selectNodes("//XXX/ZZZ/row").length;
 * @param String nodePai
 *     Nome do nó pai que vai receber o filho com a paginação - 'XXX'
 * @param String xsl
 *     ID do objeto XSL que deve existir na pagina HTML
 * @return void
 */
function imprimePaginacao(intPagina, intQuantidadePaginas ,intRegistrosPagina, intRegistros, nodePai, xsl,xml) {

    var i = 0;
    var paginas = "";
    var i2 = 0;
    var pAnterior = 0, pProxima = 0;
	
    paginas = paginas + "<br><table border='0' align='center' cellpadding='1' cellspacing='1' class='ResultadoPaginacao-01'>";
    paginas = paginas + "  <tr>";

    if(intPagina == 0){
        pAnterior = 0;
        pProxima = 1;
        paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center'><img src='/sistemas/ctpsrecuperadas/img/img_PrimeiroOff_01.jpg' width='16' height='16'></td>"
        paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center'><img src='/sistemas/ctpsrecuperadas/img/img_AnteriorOff_01.jpg' width='16' height='16'></td>"
    }
    else if(intQuantidadePaginas > 1){
        pAnterior = parseInt(intPagina) - 1;
        pProxima = parseInt(intPagina) + 1;
        paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center' onclick=\"javascript:fazPaginacaoXML(0, "+ intRegistrosPagina +", "+ intRegistros +", '"+ nodePai +"', '"+ xsl +"','');\"><img src='/sistemas/ctpsrecuperadas/img/img_PrimeiroOn_01.jpg' width='16' height='16'></td>"
        paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center' onclick=\"javascript:fazPaginacaoXML("+ pAnterior +","+ intRegistrosPagina +", "+ intRegistros +", '"+nodePai+"' , '" + xsl+ "','');\"><img src='/sistemas/ctpsrecuperadas/img/img_AnteriorOn_01.jpg' width='16' height='16'></td>"
    }

    for(i=0;i<intQuantidadePaginas;i++){
        i2 = i + 1;
        if( (i + 3) > intPagina && intPagina > (i - 3)){
            if(intPagina != i){
                paginas = paginas + "  <td width='20'bgcolor='#F8F5F1' align='center' style='cursor:pointer' onclick=\"javascript:fazPaginacaoXML("+i+","+ intRegistrosPagina +", "+ intRegistros +", '"+ nodePai +"', '"+ xsl +"','');\" >" + i2 + "</td>"
            }else{
                paginas = paginas + "  <td width='20' height='22' bgcolor='#E9DDCE' align='center' style='cursor:pointer;'>" + i2 + "</td>"
            }
        }
    }

    if(intPagina != (i-1) && intQuantidadePaginas > 1){
          paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center' onclick=\"javascript:fazPaginacaoXML("+ pProxima +","+ intRegistrosPagina +", "+ intRegistros +", '"+nodePai+"' , '" + xsl+ "','');\"><img src='/sistemas/ctpsrecuperadas/img/img_ProximoOn_01.jpg' width='16' height='16'></td>"
          paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center' onclick=\"javascript:fazPaginacaoXML("+(i-1)+", "+ intRegistrosPagina +", "+ intRegistros +", '"+ nodePai +"', '"+ xsl +"','');\"><img src='/sistemas/ctpsrecuperadas/img/img_UltimoOn_01.jpg' width='16' height='16'></td>"
    }
    else{
        paginas = paginas + "  <td width='20' bgcolor='#F8F5F1' align='center'><img src='/sistemas/ctpsrecuperadas/img/img_ProximoOff_01.jpg' width='16' height='16'></td>"
        paginas = paginas + "  <td width='20' height='20' bgcolor='#F8F5F1' align='center'><img src='/sistemas/ctpsrecuperadas/img/img_UltimoOff_01.jpg' width='16' height='16'></td>"
    }
    
    paginas = paginas + "  </tr>";
    paginas = paginas + "</table>";

    return paginas;
}
