/******************************************************************************************

						OBJETOS DE DESTAQUE DE PALAVRAS

******************************************************************************************/

function ItemDestaquePalavra()
{
	this.palavra = "";
	this.inicio = -1;
	this.fim = -1;
}

function ObjDestaquePalavras()
{
	this.indiceoco = 0;
	this.qtdocos = 0;	
	this.textooriginal = "";
	this.palavrasdestacadas = "";
	this.lista = new Array();
}

ObjDestaquePalavras.prototype.analisatexto = ObjDestaquePalavrasanalisatexto;
ObjDestaquePalavras.prototype.adiciona = ObjDestaquePalavrasAdiciona;
ObjDestaquePalavras.prototype.item = ObjDestaquePalavrasItem;
ObjDestaquePalavras.prototype.qtd = ObjDestaquePalavrasQtd;
ObjDestaquePalavras.prototype.limpa = ObjDestaquePalavraslimpa;
ObjDestaquePalavras.prototype.destacar = ObjDestaquePalavrasdestacar;
ObjDestaquePalavras.prototype.rolarateoco = ObjDestaquePalavrasRolarAteLink;
ObjDestaquePalavras.prototype.destacarpalavras = ObjDestaquePalavrasDestacarPalavras;

function ObjDestaquePalavrasAdiciona()
{
	var item = new ItemDestaquePalavra();
	this.lista[this.lista.length] = item;
	return item;
}

function ObjDestaquePalavraslimpa()
{
  this.lista.length = 0;
  this.indiceoco = 0;
  this.qtdocos = 0;
  this.textooriginal = "";
}

function ObjDestaquePalavrasanalisatexto(texto)
{
  this.limpa();
  
  var EXCECOES = ' NEM ONDE EU TU ELE NÓS VÓS ELES O OS A AS QUE QUAL QUAIS AQUELE AQUELA AQUILO - '+
             ' CUJO CUJA CUJOS CUJAS PELO PELA PELOS PELAS DE DA DO DAS DOS EM NÃO SE PARA Nº E I U '+
             ' Á É Í Ó Ú Â Ê Î Ô Û Ã Õ Ä Ë Ï Ö Ü À È Ì Ò Ù MAS CONTUDO TODAVIA PORÉM OU PELO PELAS DAÍ '+
             ' AO NO NA AOS NOS NAS ÃO AQUELE AQUILO AQUELA AQUELES AQUÉM ALÉM AQUELAS ÀQUELES ÀQUELAS AQUI ÀQUELA '+
             ' ÀS ÁS CADA COM COMO DESDE DESSA DESSE DESTE DESSAS DESSES DESTES ELA ELAS ENTÃO ESSE ESSA ESSES ESSAS ESTE ESTA ESTES ESTAS '+
             ' ESTÁ ESTÃO ETC FAR HÁ HAJA HAJAM LA LÁ LAS LHE LHES LO LOS NELE NELA NELES NELAS NISTO NESTE NESSE NESSES NESSA NESSAS NESTAS NESTA NESTES '+
             ' QUEM SÃO SEM SER SER-LHE-Á SER-LHE-ÃO SERÁ SERÃO SEREM SEU SEUS SIDO SUA SUAS TAL TAIS TÃO ' +
             ' XX XXX XXXX XXXXX XXXXXX XXXXXXX XXXXXXXX XXXXXXXXX XXXXXXXXXX ';

  
	var resultado = new Array();
	var	textostr = texto.toUpperCase();
	var i = 0;
	var letra = "";
	var tag = false;
	var item = this.adiciona();
	
	this.textooriginal = texto;
	
	for (i = 0; i < textostr.length; i++)
	{
		letra = textostr.charAt(i);
		if (letra == '<') 
    {
      tag = true;
    	if ((item.palavra != "") && (EXCECOES.indexOf(" " + item.palavra + " ") == -1))
    	{
    		item.fim = i;
    		item = this.adiciona();//palavra nova
    	}
    }
		if (letra == '>') tag = false;
		
		if (!tag)
		{
			if (((letra >= 'A') && (letra <= 'Z')) || 
			    ((letra >= '0') && (letra <= '9')) || 
			    (letra == 'Á') ||
			    (letra == 'Ä') || 
			    (letra == 'Ã') || 
			    (letra == 'À') || 
			    (letra == 'Â') || 
			    (letra == 'É') ||
			    (letra == 'Ë') || 
			    (letra == 'È') || 
			    (letra == 'Ê') || 
			    (letra == 'Í') ||
			    (letra == 'Ï') || 
			    (letra == 'Ì') || 
			    (letra == 'Î') || 
			    (letra == 'Ó') ||
			    (letra == 'Ö') || 
			    (letra == 'Õ') || 
			    (letra == 'Ò') || 
			    (letra == 'Ô') || 
			    (letra == 'Ú') ||
			    (letra == 'Ü') || 
			    (letra == 'Ù') || 
			    (letra == 'Û') || 
			    (letra == 'Ç'))
			    {
			    	if (item.inicio == -1) item.inicio = i;
				    item.palavra = item.palavra + letra;
			    }
			    else
			    {
			    	if ((item.palavra != "") && (EXCECOES.indexOf(" " + item.palavra + " ") == -1))
			    	{
			    		item.fim = i;
			    		item = this.adiciona();//palavra nova
			    	}
			    	else
			    	{
			    	  item.inicio = -1;
			    	  item.palavra = "";
            }
			    }
		}			    
	}
	if ((item.palavra != "") && (EXCECOES.indexOf(" " + item.palavra + " ") == -1))
	{
		item.fim = textostr.length;
	}
	return this.lista.length;
}

function ObjDestaquePalavrasItem(indice)
{
	return this.lista[indice];
}

function ObjDestaquePalavrasQtd()
{
	return this.lista.length;
}

function ObjDestaquePalavrasdestacar(palavras, ehfrase)
{
	var ObjAux = new ObjDestaquePalavras();
	var iPalavra = 0;
	var iTexto = 0;
	var resultado = "";
	var auxstr = this.textooriginal;
	var cntocos = 0;
	var ok = false;
	
	ObjAux.analisatexto(palavras);
	
	if (ehfrase)
	{
	  //
	  // no caso de frases, preciso que todas as palavras estejam na ordem exata. 
    // Assim sendo, pesquiso a primeira e vejo se as seguintes batem...
	  //
	    
  	for (iTexto = (this.qtd() - 1); iTexto >= 0; iTexto--)
  	{
  	  if (this.item(iTexto).palavra == ObjAux.item(ObjAux.qtd() - 1).palavra)
  	  {
  	    //achei a primeira palavra. verifico as próximas
  	    ok = true;
  	    for (iPalavra = (ObjAux.qtd() - 2); iPalavra >= 0; iPalavra--)
  	      if (this.item(iTexto - ObjAux.qtd() + iPalavra + 1).palavra != ObjAux.item(iPalavra).palavra) ok = false;
  	      
  	    if (ok)
  	    {
  				resultado =  "<a id='oco_yyyyy' name='oco_xxxxx' class='destaque_texto'>" + auxstr.slice(this.item(iTexto - ObjAux.qtd() + 1).inicio, this.item(iTexto).fim) + "</a>" + auxstr.slice(this.item(iTexto).fim) + resultado;
  				auxstr = auxstr.slice(0, this.item(iTexto - ObjAux.qtd() + 1).inicio);
				}
      }
  	}//for (iTexto = this.qtd() - 1; iTexto >= 0; iTexto--)
  	resultado = auxstr + resultado;
	  
  }
  else
  { ///
    //    marcando as palavras em qualquer ordem (não é frase mesmo... )
    ///
  	for (iTexto = this.qtd() - 1; iTexto >= 0; iTexto--)
  	{
  		for (iPalavra = 0; iPalavra < ObjAux.qtd(); iPalavra++)
  		{
  			if (this.item(iTexto).palavra == ObjAux.item(iPalavra).palavra)
  			{
  				resultado =  "<a id='oco_yyyyy' name='oco_xxxxx' class='destaque_texto'>" + auxstr.slice(this.item(iTexto).inicio, this.item(iTexto).fim) + "</a>" + auxstr.slice(this.item(iTexto).fim) + resultado;
  				auxstr = auxstr.slice(0, this.item(iTexto).inicio);
  			}
  		}//for (iPalavra = 0; iPalavra < ObjAux.qtd(); iPalavra++)
  	}//for (iTexto = this.qtd() - 1; iTexto >= 0; iTexto--)
  	resultado = auxstr + resultado;
  }
  //
  // agora preciso ajustar os "oco_xxxxx" para que o destaque fique sequencial
  //
  i = resultado.indexOf('oco_xxxxx');
  while (i != -1)
  {
    resultado = resultado.replace("oco_xxxxx", "oco_" + cntocos);
    resultado = resultado.replace("oco_yyyyy", "oco_" + cntocos);
    cntocos++;
    i = resultado.indexOf('oco_xxxxx');
  }
  
	this.palavrasdestacadas = palavras;
  this.indiceoco = 0;
	this.qtdocos = cntocos;
	
	return resultado;
}

function ObjDestaquePalavrasRetornaElementosComID(elemento, id)
{
  if (typeof(elemento.all) != 'undefined')
  {
    var resultado = elemento.all(id);
    if (typeof(resultado.length) == 'undefined')
    {
      //achou apenas um elemento, entao preciso transformar em vetor para manter o padrão
      var saida = new Array();
      saida[0] = resultado;
      return saida; 
    }
    else
    return resultado;
  }
  
  var coll = elemento.getElementsByTagName("*");
  var resultado = new Array();
  
  if (coll.length)
  {
    for (var i=0;i<coll.length;i++)
      if (coll[i].id == id) resultado[resultado.length] = coll[i];
  } 
  else
    resultado[0] = coll;
    
    
  return resultado;
}


function ObjDestaquePalavrasRolarAteLink(div)
{
  var link = "oco_" + (this.indiceoco);
  var elemento = ObjDestaquePalavrasRetornaElementosComID(div, link)[0];
  var pai = div.parentNode;//a div "rolável" é a de baixo
  pai.scrollTop = elemento.offsetTop;
}


// function ObjDestaquePalavrasRolarAteLink(div)
// {
//   var link = "oco_" + this.indiceoco;
// 	var anchor = div.all(link);
// 	var coords = {x: 0, y: 0 };
// 	alert(link);
// 	alert(div.innerHTML);
// 	alert(anchor);
// 	while (anchor) 
// 	{
// 	   alert(coords.x + "  " + coords.y);
//       coords.x += anchor.offsetLeft;
//       coords.y += anchor.offsetTop;
//       anchor = anchor.offsetParent;
// 	}
// 	window.scrollTo(coords.x, coords.y);
// }

function ObjDestaquePalavrasDestacarPalavras(PalavrasDaPesquisa, DIVASerPesquisado, ehfrase)
{
  this.analisatexto(DIVASerPesquisado.innerHTML);
  
  DIVASerPesquisado.innerHTML = this.destacar(PalavrasDaPesquisa, ehfrase);
}


/******************************************************************************************

						FIM DOS OBJETOS DE DESTAQUE DE PALAVRAS

******************************************************************************************/

var IndiceOcorrenciaExibida = 0;
var QtdTotalOcorrencias = 0;


function DesDestacaPalavra(Obj)
{
	var texto = Obj.innerHTML;
	
	do
	{
		var rx = new RegExp("<a name='oco_", "ig");
		var posicao = texto.search(rx);
		if (posicao == -1)
		{
			rx = new RegExp("<a name=oco_", "ig");
			posicao = texto.search(rx);
		}
		if (posicao == -1) break;
		
		cnt = posicao + 10;
		while (texto.charAt(cnt) != '>') cnt++;
		texto = texto.slice(0, posicao) + texto.slice(cnt + 1);
		
		rx = new RegExp("</a>", "ig");
		posicao = texto.search(rx);
		if (posicao == -1) break;
		texto = texto.slice(0, posicao) + texto.slice(posicao + 8);
	} while (true);
	
	Obj.innerHTML = texto;
}



function PrimeiraOco()
{
  IndiceOcorrenciaExibida = 0;
  RolarAteLink("oco_" + IndiceOcorrenciaExibida);
}

function PreviaOco()
{
  if (IndiceOcorrenciaExibida ) IndiceOcorrenciaExibida --;
  RolarAteLink("oco_" + IndiceOcorrenciaExibida);
}

function ProximaOco()
{
  if (IndiceOcorrenciaExibida < QtdTotalOcorrencias - 1) IndiceOcorrenciaExibida++;
  RolarAteLink("oco_" + IndiceOcorrenciaExibida);
}

function UltimaOco()
{
  IndiceOcorrenciaExibida = QtdTotalOcorrencias - 1;
  RolarAteLink("oco_" + IndiceOcorrenciaExibida);
}

