
var CONTEXTO = "/";

/**
 * Fun??o de retorno que ser? executada toda vez que a
 * tela modal for fechada. O primeiro parametro dessa 
 * fun??o indicar? se a tela foi cancelada
 */
var funcaoRetornoTelnumericMaskaCadastro

/**
 * Guarda o ?ltimo link clicado. Ver m?todo antesOnclickDoLink(link).
 */
var hrefDoUltimoLinkClicado;

/**
* V?riavel global para saber qual a vertente de browser sendo utilizada
*/
var Nav4 = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 4));

/**
* Faz o acompanhamento da janela modal criada
*/
var dialogWin = new Object();

function URLEncode(sStr) {
    return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27');
}


/**
 * Abre uma tela de cadastro em uma janela modal. A fun??o
 * de retorno deve conter como primeiro parametro um booleano
 * que indicar? se a tela foi cancelada
 */
function abrirCadastroModal(url, largura, altura, funcaoRetorno)
{
	if (!dialogWin.win || (dialogWin.win && dialogWin.win.closed)) {

		if (url.indexOf("?") < 0)
		{
			url += "?telaModal=true"; 
		}
		else
		{
			url += "&telaModal=true";
		}
		
		dialogWin.url = url;

		dialogWin.width = largura;
		dialogWin.height = altura;
		dialogWin.funcaoRetornoTelaCadastro = funcaoRetorno;

		var attr = "resizable=no,scrollbars=yes,status=yes,";

		// Cria um nome unico para a janela.
		dialogWin.name = (new Date()).getTime().toString();

		// Junta os atributos e centraliza a janela que vai aparecer.
		if (Nav4) {
			// centraliza na janela
			dialogWin.left = window.screenX +
				 ((window.outerWidth - dialogWin.width) / 2)
			dialogWin.top = window.screenY +
				 ((window.outerHeight - dialogWin.height) / 2)
			attr = attr + "screenX=" + dialogWin.left +
				 ",screenY=" + dialogWin.top + ",width=" +
				 dialogWin.width + ",height=" + dialogWin.height
		} else {
			// centraliza na tela
			dialogWin.left = (screen.width - dialogWin.width) / 2
			dialogWin.top = (screen.height - dialogWin.height) / 2
			attr = attr + "left=" + dialogWin.left + ",top=" +
				 dialogWin.top + ",width=" + dialogWin.width + ",height=" + dialogWin.height
		}

		// Bloqueia os eventos
		blockEvents();

		// Cria a janela propriamente dita e atribui o foco a ela
		dialogWin.win=window.open(dialogWin.url, dialogWin.name, attr);
		dialogWin.win.focus();

	} else {
		dialogWin.win.focus()
	}
}

/**
 * Abre uma tela de modal
 */
function abrirTelaModal(url, largura, altura, funcaoRetorno)
{
	if (!dialogWin.win || (dialogWin.win && dialogWin.win.closed)) {
	
		dialogWin.url = url;

		dialogWin.width = largura;
		dialogWin.height = altura;
		dialogWin.funcaoRetorno = funcaoRetorno;

		var attr = "resizable=no,scrollbars=yes,status=yes,";

		// Cria um nome unico para a janela.
		dialogWin.name = (new Date()).getTime().toString();

		// Junta os atributos e centraliza a janela que vai aparecer.
		if (Nav4) {
			// centraliza na janela
			dialogWin.left = window.screenX +
				 ((window.outerWidth - dialogWin.width) / 2)
			dialogWin.top = window.screenY +
				 ((window.outerHeight - dialogWin.height) / 2)
			attr = attr + "screenX=" + dialogWin.left +
				 ",screenY=" + dialogWin.top + ",width=" +
				 dialogWin.width + ",height=" + dialogWin.height
		} else {
			// centraliza na tela
			dialogWin.left = (screen.width - dialogWin.width) / 2
			dialogWin.top = (screen.height - dialogWin.height) / 2
			attr = attr + "left=" + dialogWin.left + ",top=" +
				 dialogWin.top + ",width=" + dialogWin.width + ",height=" + dialogWin.height
		}

		// Bloqueia os eventos
		blockEvents();

		// Cria a janela propriamente dita e atribui o foco a ela
		dialogWin.win=window.open(dialogWin.url, dialogWin.name, attr);
		dialogWin.win.focus();

	} else {
		dialogWin.win.focus()
	}
}


function exibirJanelaModal(url, largura, altura)
{
	window.showModalDialog(url,"","dialogWidth="+largura+
		"pt;dialogHeight="+altura+
		"pt; center=yes;help=no;scroll=no;status=no;unadorned=yes;");
}

/**
* Captura todos os eventos que podem ocorrer na janela enquanto a tela modal
* est? aberta
*/
function blockEvents() {
	if (Nav4) {
		window.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS);
		window.onclick = deadend;
	} else {
		disableForms();
	}
	window.onfocus = checkModal;
}

/**
* Quando a janela modal for fechada, restaura os eventos originais
*/
function unblockEvents() {
	if (Nav4) {
		window.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS)
		window.onclick = null
		window.onfocus = null
	} else {
		enableForms()
	}
}

/**
* Invocado quando a janela pai recebe o foco.  Caso a janela modal exista
* ela recebe o foco de volta, caso n?o retorna-se os valores dos eventos
* armazenados
*/
function checkModal() {

	// se a janela modal existir muda o foco para ela
	if (dialogWin.win && !dialogWin.win.closed) {
		dialogWin.win.focus()
	} else
		if (IELinkHref !=null){
			unblockEvents();
			IELinkHref = null;
		}

	return true
}





/**
* Retorna os valores originais dos formularios, links e eventos desabilitados
*/
function enableForms() {

    // restaura os forms
    for (var i = 0; i < document.forms.length; i++) {
      for (var j = 0; j < document.forms[i].elements.length; j++) {
        document.forms[i].elements[j].disabled = IEForms[i][j]
      }
    }

    // restaura os onClicks
    for (i = 0; i < document.links.length; i++) {
      document.links[i].onclick = IELinkClicks[i]
    }

    // restaura os href
    for (k = 0; k < document.links.length; k++) {
      document.links[k].href = IELinkHref[k]
    }

    // restaura os eventos do documento e da janela
    document.onclick = IEOnClick;
    window.onfocus = IEOnFocus;
}


/**
 * Este m?todo ? executado no onclick de qualquer link que usa a tag link da
 * taglib html-rw.
 * O m?todo guarda qual ? o href do ?ltimo link clicado.
 * Para o m?todo tratarRespostaDemorada() funcionar corretamente ? necess?rio
 * saber qual ? o ?ltimo href clicado.
 */
function antesOnclickDoLink(link)
{
  hrefDoUltimoLinkClicado = link.href;
}

/**
 * Oculta ou exibe um elemento. Se o elemento estiver vis?vel, este ser?
 * ocultado. Se o elemente estiver oculto, este ser? exibido.
 * @param tabela - O id do elemento.
 * @param campo - O id do comando (link) que troca a exibi??o do elemento.
 * @param textoDoComando - Parte do texto do comando. Seguindo o padr?o:
 *    "Ocultar <textoDoComando>" ou Visualizar "<textoDoComando>".
 */
function ocultarExibir(tabela, campo, textoDoComando)
{
  if(document.all(tabela).style.display != 'block')
  {
    document.all(tabela).style.display = 'block';
    document.all(campo).innerHTML = 'Ocultar&nbsp;' + textoDoComando;
  }
  else
  {
    document.all(tabela).style.display = 'none';
    document.all(campo).innerHTML = 'Visualizar&nbsp;' + textoDoComando;
  }
}


/**
 * Pesquisa
 */
function processarEnter(nomeDoFormulario)
{
  form = nomeDoFormulario;

  var e = window.event;
  var ch = getChar(e);

  if (ch == '\r')
  {
    podeSairSemConfirmacao();
    pesquisar(form);
  }
}


/**
 * Fun??o de valida??o de entrada de dados em campos texto.
 * Deve ser chamada ap?s a declara??o do campo.
 */
function campoTexto(campo)
{
    campo.onblurOriginal = campo.onblur;
  campo.onblur = function(e)
  {
   if (campo.onblurOriginal)
   {
     campo.onblurOriginal(e);
   }

   var invalidChars = '{}()+*/%"\\' + "'";
   var valido=true;
   var car;
   for (i = 0; i < campo.value.length; i++)
   {
      car = campo.value.charAt(i);
      if (!(invalidChars.indexOf(car) == -1))
      {
         valido = false;
        break;
      }
   }
   if (!valido)
   {
      campo.value = "";
      alert('O valor informado para esse campo'	 +
            ' não é válido, pois contém um dos caracteres {}()+/*%"\\' + "'." +
            'Informe outro valor e tente novamente.');
   }
  };

  campo.onchandeOriginal = campo.onchange;
  campo.onchange = function(e)
  {
    if (campo.onchandeOriginal)
    {
      campo.onchandeOriginal(e);
    }

    e = getEvent(e);
    src = getSrc(e);
    pattern = /[^{}()+*/%\\'\\"]*/g;
  };
  campo.onkeypressOriginal = campo.onkeypress;
  campo.onkeypress = function(e)
  {
    if (campo.onkeypressOriginal)
    {
      campo.onkeypressOriginal(e);
    }

    e = getEvent(e);
    campo.onchange(e);
    c = getChar(e);
    pattern = /[^{}()+*/%\\'\\"]/;
    if (pattern.test(c))
    {
      return true;
    }
    else
    {
      return false;
    }
  };
}


function ocultarExibirObjeto(objeto)
{
  if(document.all(objeto).style.display != "block")
  {
    document.all(objeto).style.display = "block";
  }
  else
  {
    document.all(objeto).style.display = "none";
  }
}

/**
 * Executa as fun??es que devem ser executas no evento onbeforeonload.
 * Estas fun??es s?o:
 *   confirmacaoSaidaFormulario
 *   tratarRespostaDemorada
 */
function executarOnBeforeUnload()
{
  result = confirmacaoSaidaFormulario();
  if (!result)
  {
		tratarRespostaDemorada();
  }
//  return result;
}

function confirmacaoSaidaFormulario(){
	if(document.forms[0] != null){
		exibirMensagem = getCampoTelaAlterada();
		if(exibirMensagem != null && exibirMensagem.value == 'true'){
			exibirMensagem = null;
			return 'As alterações feitas nesta tela ainda não foram salvas.';
		}
	}
}

/**
 * Desabilita todos os comando e campos da p?gina e se o servidor demorar
 * mais do que 1250 ms, ser? exibido uma anima??o flash para dar a impress?o
 * que algum processamento est? sendo realizado.
 * Este comportamento s? ocorre se o link redirecionar para outra p?gina,
 * uma vez que este m?todo ? chamado pelo evento onbeforeonload.
 */
function tratarRespostaDemorada()
{

  if (hrefDoUltimoLinkClicado)
  {
    tmp1 = hrefDoUltimoLinkClicado.toLowerCase();
  }
  else
  {
    tmp1 = "";
  }
  hrefDoUltimoLinkClicado = "";
  tmp2 = tmp1.replace("javascript:", "");
  if (tmp1 == tmp2)
  {
    // Se o link n?o solicitar uma p?gina diretamente, o tratamento
    // de respostaDemorada n?o deve ser executado. Isso ocorre quando
    // o link executa uma fun??o javascript ao inv?s redirecionar para uma
    // p?gina.
    // O tratamento n?o deve ser executado porque o javascript pode n?o
    // redirecionar para outra p?gina atrapalhando tudo.
    // Se o javascript redirecionar para outra p?gina, o evento onbeforeonload
    // ser? chamado novamente, funcionando da forma correta.
    executarTratamentoDeRespostaDemorada();
  }
}


/**
* Desabilita os formularios, links e eventos no IE
*/
function desabilitarPagina() {

    // Desabilita os forms
    for (var i = 0; i < document.forms.length; i++) {
      for (var j = 0; j < document.forms[i].elements.length; j++) {
        document.forms[i].elements[j].disabled = true
      }
    }

    cursorType = "wait";
    // Altera o cursor para o cursor de espera (ampulheta).
    document.body.style.cursor = cursorType;

    // Desabilita os hrefs (links)
    for (k = 0; k < document.links.length; k++) {
      comando = document.links[k];
      // Desabilita o evento onclick
      comando.onclick = deadend
      // Muda o estilo (style) para xxxDesabilitado.
      comando.className = comando.className + 'Desabilitado';
      // Muda o href para #.
      comando.href= "#";
      // Altera o cursor para o cursor de espera (ampulheta).
      comando.style.cursor = cursorType;
      comando.style.textDecoration = "none";
    }
    desabilitaESC();
  }

function desabilitaESC()
{
  <!-- evita que o duplo-esc reinicialize um form inteiro no IE -->
  if (document.all)
  {
    document.onkeydown = function ()
    {
      return event.keyCode != 27;
    }
  }
}

/**
 * Desabilita todos os comando e campos da p?gina e se o servidor demorar
 * mais do que 1250 ms, ser? exibido uma anima??o flash para dar a impress?o
 * que algum processamento est? sendo realizado.
 */
function executarTratamentoDeRespostaDemorada()
{
  desabilitarPagina();
  setTimeout("exibirCarregando()", 1250);
}

/**
 * Exibe no centro da ?rea vis?vel da janela uma anima??o flash que d? a
 * sensa??o para usu?rio que esta ocorrendo algum processamento.
 */
function exibirCarregando()
{
  body = document.body;

  // Largura e altura da anima??o flash.
  width = 147;
  height = 17;

  // Largura da borda ao redor da anima??o.
  padding = 15;
  borda = 1;

  // Dimens?es do texto processando.
  espacoEntroAnimacaoETexto = 10;
  alturaTexto = 15;

  // Dimens?o total
  alturaTotal = (height+espacoEntroAnimacaoETexto+alturaTexto+(2*(padding+borda)));
  larguraTotal = (width+(2*(padding+borda)));

  // Calculo da coordenadas x e y da anima??o, incluindo a borda e o texto,
  // de tal forma que ela fique centralizada na janela independentemente
  // de ter ocorrido algum scroll.
  x = ((body.clientHeight / 2) + body.scrollTop) - (alturaTotal / 2);
  y = ((body.clientWidth / 2) + body.scrollLeft) - (larguraTotal / 2);

  // Elemento com o texto Processando...
  htmlTextoProcessando = '<div style="margin: ' + espacoEntroAnimacaoETexto + ' 0 0 0; width: ' + width + '; height: ' + alturaTexto + '; font-weight: bold; text-align: center;">Processando...</div>';

  // Anima??o flash.
  htmlObjetoCarregando = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width=' + width + ' height=' + height + '><param name="movie" value="'+CONTEXTO+'imagens/processando.swf"><param name="quality" value="high"><embed src="'+CONTEXTO+'imagens/processando.swf" quality="high" type="application/x-shockwave-flash" width=' + width + ' height=' + height + '></embed></object>';

  // Elemento que posiciona a anima??o e coloca a borda em volta dela.
  htmlSpanCarregando = '<span id="carregando" style="position: absolute; top: ' + x + '; left: ' + y + '; padding: ' + padding + '; border: ' + borda + ' solid #194E88; background-color: #9FB3CE;">' + htmlObjetoCarregando + htmlTextoProcessando + '</span>'

  // Este iframe esta exatamente na mesmo posi??o e tamanho do htmlSanCarregando.
  // ? necess?rio este iframe para que a borda fique por cima de componentes combo-box.
  // Isso parece ser um bug, mas a ?nica forma que encontrei de burlar este problema foi colocar
  // um iframe por baixo do span.
  htmlIframeCarregando = '<iframe style="position: absolute; top: ' + x + '; left: ' + y + '; width: ' + larguraTotal + '; height: ' + alturaTotal + ';"></iframe>';

  // Inser??o dos elementos na p?gina para que eles sejam exibidos.
  document.body.insertAdjacentHTML("beforeEnd", htmlIframeCarregando);
  document.body.insertAdjacentHTML("beforeEnd", htmlSpanCarregando);

}


/**
* Apresenta a mensagem padrao de confirmacao caso a tela tenha sido alterada.
* Deve ser chamada no onclick do botao cancelar.
*/
function confirmarCancelamento()
{
  if(getCampoTelaAlterada().value == 'true')
  {
     if(!confirm("O botão \"Cancelar\" foi acionado. Todos os dados "+
      "inseridos/alterados nessa tela serão perdidos. " +
      "Gostaria realmente de continuar?"))
    {
      return false;
    }
    else
    {
      getCampoTelaAlterada().value = 'false';
      podeSairSemConfirmacao();
    }
  }
  return true;
}

/**
 * N?o deixa que o usu?rio digite mais carateres do que o especificado pelo
 * par?metro maxLength.
 * Esta fun??o foi criada para campos do tipo textarea, pois ele n?o tem a
 * propriedade maxlength, mas ela poder ser usada, teoricamente, em qualquer
 * campo.
 * @param campo - O campo onde a restri??o maxLength ser? aplicada.
 * @param maxLength - A quantidade m?xima de caracteres permitido no campo.
 */
function setMaxLength(campo, maxLength)
{
  if (campo)
  {
    campo.onkeyupOriginal = campo.onkeyup;
    campo.onkeyup = function(e)
    {
      if (campo.value != null && campo.value.length > maxLength)
      {
        campo.value = campo.value.substring(0, maxLength);
        alert("Este campo atingiu o número máximo de caracteres.");
      }
      if (campo.onkeyupOriginal)
      {
        campo.onkeyupOriginal(e);
      }
    };
  }
}


/**
 * Exibe uma mensagem de confirma??o.
 * Deve ser chamado como um evento.
 */
function confirmarExclusao(nomeDaEntidade, valorDescritivoDoItemAExcluir)
{
  if (valorDescritivoDoItemAExcluir != '')
  {
    valorDescritivoDoItemAExcluir = ' "' + valorDescritivoDoItemAExcluir + '"';
  }
  return confirm('O botão "Excluir" foi acionado. O(A) ' + nomeDaEntidade
      + valorDescritivoDoItemAExcluir + ' será excluído(a) do sistema.'
      + ' Gostaria realmente de continuar?' );
}

/**
 * Exibe mensagem de confirma??o dupla para exclus?o de objeto.
 * Deve ser chamado como um evento.
 */

function confirmarDuplamenteExclusao(nomeDaEntidade, valorDescritivoDoItemAExcluir)
{
  if (confirmarExclusao(nomeDaEntidade, valorDescritivoDoItemAExcluir))
  {
    return confirm('Essa operação não poderá ser desfeita. Para desistir, ' +
    'clique em "Cancelar", para continuar e excluir '+
    'definitivamente o(a) ' + nomeDaEntidade.toLowerCase() + ', clique em "OK".');
  }
  else
  {
    return false
  }
}

/**
 * Verifica se o campo possui uma data v?lida. Retorna 'true' se for e 'false'
 * sen?o.
 * campo - Object que cont?m a data.
 * rotulo - String que cont?m o r?tulo do campo.
 */
function eDataValida(campo, rotuloDoCampo)
{
  valor = campo.value;
  tamanho = valor.length;
  patternFormato = /\d{2}\/\d{2}\/(\d{4})/;
  pattern = /((((0[1-9]|[1-2][0-9]|3[0-1])\/(0[13578]|1[02]))|((0[1-9]|[1-2][0-9]|30)\/(0[469]|11))|(((0[1-9]|1[0-9])|(2[0-8]))\/02))\/(1[89]|2[0-9])[0-9][0-9])|(29\/02\/(((1[89]|2[0-9])(([2468][048]|0[48])|([13579][26])))|(2[024]00)))/g;
  if (tamanho != 0)
  {
    if (!patternFormato.test(valor))
    {
       alert('O valor informado para o campo "' + rotuloDoCampo + '" não é vá' +
       'lido, pois não está no formato dd/mm/aaaa. Informe outro valor e tent' +
       'e novamente.');
	   campo.value = "";	
	   campo.focus();
       return false;
    }
    if (!(tamanho == 10 || tamanho == 0) || !pattern.test(valor))
    {
      alert('O valor informado para o campo "' + rotuloDoCampo + '" não é vál' +
      'ido, pois a data não existe. Informe outro valor e tente novamente.');
      campo.value = "";
      campo.focus();
      return false;
    }
    return true;
  }
}


function isDataValida(valor)
{
  tamanho = valor.length;
  patternFormato = /\d{2}\/\d{2}\/(\d{4})/;
  pattern = /((((0[1-9]|[1-2][0-9]|3[0-1])\/(0[13578]|1[02]))|((0[1-9]|[1-2][0-9]|30)\/(0[469]|11))|(((0[1-9]|1[0-9])|(2[0-8]))\/02))\/(1[89]|2[0-9])[0-9][0-9])|(29\/02\/(((1[89]|2[0-9])(([2468][048]|0[48])|([13579][26])))|(2[024]00)))/g;
  if (tamanho != 0)
  {
    if (!patternFormato.test(valor))
    {
       return false;
    }
    if (!(tamanho == 10 || tamanho == 0) || !pattern.test(valor))
    {
      return false;
    }
    return true;
  }
}

/////////////////////////////////
// Confirma??o ao sair da tela //
/////////////////////////////////


/**
 * Permite a saida da tela sem exigir confirma??o do usu?rio, mesmo que ele
 * tenha feito alguma altera??o. Deve ser usado, por exemplo, no evento onclick
 * do comando salvar.
 */
function podeSairSemConfirmacao()
{
  document.sairSemConfirmacao = 'true';
}

function campoAlterado()
{
	getCampoTelaAlterada().value = 'true';
}

function getCampoTelaAlterada()
{
  return document.getElementsByName('telaAlterada');
}

///////////////////////////////////////////////////////////////////////////////

//////////////////////////
// Utilit?rios internos //
//////////////////////////

////////////////////////////////////////////////////////////////////////////////

function getEvent(e)
{
  if (!e)
  {
    if( window.event ) return window.event;
    else return e;
  }
  else return e;
}

function getChar(e)
{
  if (e.keyCode) code = e.keyCode;
  else if (e.which) code = e.which;
  else return;
  return String.fromCharCode(code);
}

function getSrc(e)
{
  if (e.srcElement) return e.srcElement;
  else if (e.target) return e.target;
}


/*
  Fun??o que exibe uma janela modal com a largura e altura informadas
*/
function exibirJanelaModal(url, largura, altura)
{
  window.showModalDialog(url,"","dialogWidth="+largura+
    "pt;dialogHeight="+altura+
    "pt; center=yes;help=no;scroll=no;status=no;unadorned=yes;");
}

/*
  Fun??o que seleciona todos os elementos de um SELECT
*/
function selecionarTodos(opcoes)
{
  for (var i=0; i < opcoes.options.length; ++i)
    opcoes.options[i].selected = true;
}

/*
  Fun??o que desmarca todos os elementos de um SELECT
*/
function desmarcarTodos(opcoes)
{
  for (var i=0; i < opcoes.options.length; ++i)
    opcoes.options[i].selected = false;
}

/*
  Fun??o utilizada para setar campo alterado no caso do acionamento das teclas
  Backspace e Delete
*/
function testarBackspaceEDelete(event)
{
  //Backspace
  if (event.keyCode==8 || event.which==8)
  {
    campoAlterado();
  }
  //Delete
  else if (event.keyCode==46 || event.which==46)
  {
    campoAlterado();
  }
}


////////////////////////////////////////////////////////////////////////////////
function removerEspacos(texto)
{
  var textoLimpo = texto;

  textoLimpo = removerEspacosADireita(textoLimpo);
  textoLimpo = removerEspacosAEsquerda(textoLimpo);
  textoLimpo = removeEspacosMultiplos(textoLimpo);
  return textoLimpo;
}

function removeEspacosMultiplos(texto)
{
  var w_space = String.fromCharCode(32);
  var strTemp = "";
  var iTemp = 0;
  var espacos = 0;

  while(iTemp < texto.length)
  {
    if(texto.charAt(iTemp) != w_space)
    {
      espacos = 0;
    }
    else
    {
      espacos++;
    }
    if (espacos < 2)
    {
        strTemp += texto.charAt(iTemp);
    }
    iTemp++;
  }
  return strTemp;
}

function removerEspacosADireita(texto){
  var w_space = String.fromCharCode(32);
  var strTemp = "";
  var iTemp = texto.length - 1;

  while(iTemp > -1)
  {
    if(texto.charAt(iTemp) != w_space)
    {
      strTemp = texto.substring(0, iTemp + 1);
      break;
    }
    iTemp--;
  }
  return strTemp;
}

function removerEspacosAEsquerda(texto)
{
  var w_space = String.fromCharCode(32);
  var strTemp = "";
  var iTemp = 0;

  while(iTemp < texto.length)
  {
    if(texto.charAt(iTemp) != w_space)
    {
      strTemp = texto.substring(iTemp, texto.length);
      break;
    }
    iTemp++;
  }
  return strTemp;
}
/*
   Fun??o usada para trocar letras acentuadas pela correspondente n?o acentuada.
*/
function trocarCaracteresAcentuadosPorSimilares(texto)
   {
     if (texto == null)
     {
       return null;
     }
     else
     {
       var cedilhaMai = new RegExp(/[?]/g);
       var cedilhaMin = new RegExp(/[?]/g);
       var acentosAMai = new RegExp(/[?????]/g);
       var acentosAMin = new RegExp(/[?????]/g);
       var acentosEMai = new RegExp(/[????]/g);
       var acentosEMin = new RegExp(/[????]/g);
       var acentosIMai = new RegExp(/[????]/g);
       var acentosIMin = new RegExp(/[????]/g);
       var acentosOMai = new RegExp(/[?????]/g);
       var acentosOMin = new RegExp(/[?????]/g);
       var acentosUMai = new RegExp(/[????]/g);
       var acentosUMin = new RegExp(/[????]/g);

       texto = texto.replace(cedilhaMai, "C");
       texto = texto.replace(cedilhaMin, "c");
       texto = texto.replace(acentosAMai, "A");
       texto = texto.replace(acentosAMin, "a");
       texto = texto.replace(acentosEMai, "E");
       texto = texto.replace(acentosEMin, "e");
       texto = texto.replace(acentosIMai, "I");
       texto = texto.replace(acentosIMin, "i");
       texto = texto.replace(acentosOMai, "O");
       texto = texto.replace(acentosOMin, "O");
       texto = texto.replace(acentosUMai, "U");
       texto = texto.replace(acentosUMin, "u");
       return texto;
     }
   }

function trocarImagemBotao(botao, imagem)
{
  botao.src = imagem;
}


function campoEmail(email) {
  problema = false;

	if (email.value != ""){

		prim = email.value.indexOf("@")
		if(prim < 2) {
      problema = true;
		}
		else if(email.value.indexOf("@",prim + 1) != -1) {
      problema = true;
		}
		else if(email.value.indexOf(".") < 1) {
      problema = true;
	  }
		else if(email.value.indexOf(" ") != -1) {
	      problema = true;
		}
		else if(email.value.indexOf(".@") > 0) {
      problema = true;
		}
		else if(email.value.indexOf("@.") > 0) {
      problema = true;
		}
		else if(email.value.indexOf(".com.br.") > 0) {
      problema = true;
		}
		else if(email.value.indexOf("/") > 0) {
      problema = true;
		}
		else if(email.value.indexOf("[") > 0) {
      problema = true;
		}
		else if(email.value.indexOf("]") > 0) {
      problema = true;
		}
		else if(email.value.indexOf("(") > 0) {
      problema = true;
		}
		else if(email.value.indexOf(")") > 0) {
      problema = true;
		}
		else if(email.value.indexOf("..") > 0) {
      problema = true;
		}
	}

  if(problema){
    alert("O email informado é inválido. Digite um outro e tente novamente.");
    email.value = "";
    email.focus();
    return false;
  }

  return true;
}

function numericMask(field, decimalHouses,maxlength,showSeparators, event)
{
  event = window.event;
  
  decimalHouses = decimalHouses - 1;
  
  if(decimalHouses != 0)
     showSeparators = true;
//  if (event.keyCode==9 || (event.keyCode>=37 && event.keyCode<=40))
//  {
//  		alert("");
//       return true;
//  }else{
//	  alert(event.keyCode);
//  }

  if (event.keyCode > 57 || event.keyCode < 48)
  {
  	return false;
  }
  
  value = field.value;

  vr = value;
  vr = vr.replace(",", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");
  vr = vr.replace(".", "");

  if(vr.length == maxlength && showSeparators){
//    alert("Valor inválido! Ultrapassa o valor m?ximo!");
//    field.value = '';
    return false;
  }
  value = extractNumbers(value);

  if(showSeparators){
    // Tira os 0s a esquerda
    var temp = value;
    for(i = 0 ; i < value.length-1 ; i++)
    {
       if (value.charAt(i) == 0)
           temp = temp.substr(1);
       else
           break;
    }
    value = temp;
  }

  // Quebra dos valores em inteiro e decimal respeitando o numero de casas decimais
  if ((value.length) < decimalHouses){
    var integer = value.substring(0, (value.length) - decimalHouses);
    var integer = 0;
    var dec = value.substring((value.length) - decimalHouses, value.length);
    if (event.keyCode==8)
    {
      if (decimalHouses!=0)
      {
        var integer = value.substring(0, (value.length) - decimalHouses);
        var dec = value.substring((value.length) - decimalHouses, value.length);
        if(dec == 0)
        {
          dec = '';
        }
      }
      else
      {
          var integer=value.substring(0, value.length);
          var dec='';
      }
    }
    if (event.keyCode==8)
    {
      if(value != '' && dec != '')
      {
        while((dec.length) < decimalHouses)
        {
          dec = '0' + dec;
        }
      }
      else
      {
        dec = '';
      }

    }
    if (event.keyCode!=9 && event.keyCode!=8)
    {
      while((dec.length) < decimalHouses)
      {
          dec = '0' + dec;
      }
      }
    }
    else if (decimalHouses != 0)
    {
      var integer = value.substring(0, (value.length) - decimalHouses);
      var dec = value.substring((value.length) - decimalHouses, value.length);
    }
    else
    {
      var integer = value.substring(0, (value.length+1) - decimalHouses);
      var dec = value.substring((value.length+1) - decimalHouses, value.length);
    }
    if (showSeparators)
    {
      temp = '';
      for (i = integer.length ; i >= 0 ; i = i - 3)
         temp = integer.substring(i - 3 , i) + '.' + temp;

      // Tirando os pontos desnecess?rios
       if (temp.substring(0, 1) == '.')
         temp = temp.substr(1);
       temp = temp.substring(0, temp.length-1);
       integer = temp;
    }
    if (decimalHouses!=0 && integer=='' && dec!='')
    {
      integer='0';
    }
    if(value != '')
    {
      if(decimalHouses == 0)
      {
        field.value = integer;
      }
      else
      {
        if(dec != '')
          field.value = integer + ',' + dec;
        else
          field.value = '';
      }
    }
    else
    {
      field.value = '';
    }
}

function IsNumericKey(event)
{
    if (!event)
        event = window.event;

    key = event.keyCode;

    if (navigator.appName == "Microsoft Internet Explorer")
    {
    if (key==0)
         key = event.which;
      if (event.shiftKey)
       {
        if (key==9)
        {
            return true;
        }
        else
         return false;
      }
      else
      {
        if (!event.ctrlKey && !event.altKey)
        {
          if ((key>47 && key<58) || (key>95 && key<106) || (key>=37 && key<=40) || key==9 || key==8 || key==46)
          {
              return true;
          }
          else
           return false;
        }
        else
            return false;
      }
    }
    else
    {
      if (key==0)
      {
         if(event.which != 46)
         {
             key = event.which;
           }
      }
      if (event.shiftKey)
       {
         if (key==9)
        {
              return true;
        }
        else
        {
           event.returnValue = false;
          return false;
            }

       }
       else
       {
          if (!event.ctrlKey && !event.altKey)
          {
          if ((key>47 && key<58) || (key>=37 && key<=40) || key==9 || key==8 || key==46)
          {
                return true;
          }
          else
          {
             event.returnValue = false;
            return false;
              }
         }
         else
         {
           event.returnValue = false;
          return false;
       }
     }
  }
}

function extractNumbers(s)
{
  var r = '';

  for(i = 0 ; i < s.length ; i++)
  {
     if (!isNaN(s.charAt(i)))
         r = r + s.charAt(i);
    }
    return r;
}


////////////////////////////////////////////////////////////////////////////////
//Valida??es de campos de CNPJ, CPF, data e de campos com m?scara pr?-definida//
////////////////////////////////////////////////////////////////////////////////

/*////////////////////////////////////////////////////////////////////////
|| Fun??o para checagem de CPF padrao digito 11                         ||
||                                                                      ||
||   language="JavaScript"                                              ||
|| last modified: setember 5, 2001                                      ||
|| use: <input type="text" onblur="isCNPJ(this)">                        ||
/*////////////////////////////////////////////////////////////////////////


function isCNPJ(campo) {
     var cnpj, i;

     cnpj = campo.value

     cnpj = cnpj.replace(".", "");
     cnpj = cnpj.replace(".", "");
     cnpj = cnpj.replace("/", "");
     cnpj = cnpj.replace("-", "");
     var c  = cnpj.substr(0,12);
     var dv = cnpj.substr(12,2);

      if (cnpj == "00000000000000") {
	    alert('O CNPJ digitado é inválido.');
    	campo.value = "";
	    campo.focus();
	    return false;
      }

      var d1 = 0;
      var ms = "543298765432";

     for (i = 0; i < 12; i++) {
       d1 += c.charAt(i)*ms.charAt(i);
     }
     d1 = (d1 % 11);
      if (d1 == 0 || d1 == 1) {
         d1 = 0;
      } else {
         d1 = 11 - d1;
      }

      var d1 = 0;
      var ms = "543298765432";

     for (i = 0; i < 12; i++) {
       d1 += c.charAt(i)*ms.charAt(i);
     }
     d1 = (d1 % 11);
      if (d1 == 0 || d1 == 1) {
         d1 = 0;
      } else {
         d1 = 11 - d1;
      }

      var c = c + d1;

      var d2 = 0;
      var ms = "6543298765432";
     for (i = 0; i < 13; i++) {
       d2 += c.charAt(i)*ms.charAt(i);
     }
     d2 = (d2 % 11);
      if (d2 == 0 || d2 == 1) {
         d2 = 0;
      } else {
         d2 = 11 - d2;
      }

     if (dv.charAt(0) != d1 || dv.charAt(1) != d2) {
       	alert('O CNPJ digitado é inválido.');
	    campo.value = "";
   	    campo.focus();
    	return false;
     }
      return true;
   }

/*////////////////////////////////////////////////////////////////////////
|| Fun??o para checagem de CPF padrao digito 11                         ||
||                                                                      ||
||   language="JavaScript"                                              ||
|| last modified: setember 5, 2001                                      ||
|| use: <input type="text" onblur="isCPF(this)">                        ||
/*////////////////////////////////////////////////////////////////////////

 function isCPF(campo) {
  CPF = campo.value;

  if (CPF == ''){
    return true;
  }else if (CPF.length != 14){
      alert('O CPF digitado é inválido.');
      campo.select();
      campo.value = '';
      return false;  
  }else{
    for (i=0;i<CPF.length;i++){
      CPF = CPF.replace('.','');
      CPF = CPF.replace('/','');
      CPF = CPF.replace('-','');
    }
    if (CPF.length != 11 || CPF == "00000000000" || CPF == "11111111111" ||
      CPF == "22222222222" ||	CPF == "33333333333" || CPF == "44444444444" ||
      CPF == "55555555555" || CPF == "66666666666" || CPF == "77777777777" ||
      CPF == "88888888888" || CPF == "99999999999"){
      alert('O CPF digitado é inválido.');
      campo.select();
      campo.value = '';
      return false;
    }
    soma = 0;
    for (i=0; i < 9; i ++)
      soma += parseInt(CPF.charAt(i)) * (10 - i);
    resto = 11 - (soma % 11);
    if (resto == 10 || resto == 11)
      resto = 0;
    if (resto != parseInt(CPF.charAt(9))){
      alert('O CPF digitado é inválido.');
      campo.select();
      campo.value = '';
      return false;
    }
    soma = 0;
    for (i = 0; i < 10; i ++)
      soma += parseInt(CPF.charAt(i)) * (11 - i);
    resto = 11 - (soma % 11);
    if (resto == 10 || resto == 11)
      resto = 0;
    if (resto != parseInt(CPF.charAt(10))){
      alert('O CPF digitado é inválido.');
      campo.value = '';
      campo.select();
      return false;
    }
    return true;
  }
 }

/*//////////////////////////////////////////////////////////////////////////
|| Fun??o para checagem de datas e convers?o de char para date
||
||   language="JavaScript"
/*//////////////////////////////////////////////////////////////////////////


function dateBra2Usa(data){
  data = data.substring(3,5)+'/'+data.substring(0,2)+'/'+data.substring(6,10);
  data = new Date(data);
  return data;
}

function now(){
  var data, dia, mes;
  data = new Date();

  dia = data.getDate().toString();
  mes = (parseInt(data.getMonth())+1).toString();

  if (dia.length < 2)
    dia = '0' + dia;
  if (mes.length < 2)
    mes = '0' + mes;

  return dia +'/'+ mes + '/' + data.getFullYear();
}

function dateDiff(date1,date2){
  date1 	= dateBra2Usa(date1);
  date2	= dateBra2Usa(date2);
  return ((date1-date2)/(1000*60*60*24));
}

/**
 * Essa função deve ser chamda no onKeyDown para bloquear a "cola" de um valor
 * no campo
 */
function bloqueiaCopia()
{
	if (window.event.ctrlKey){
		if (window.event.keyCode == 86) {
			alert("Esse campo não pode ter seu valor preenchido através de uma \"cola\".");
			return false;
		}
	}
	return true;
}


/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|| Script language: JavaScript
|| Funcao para validacao de mascara pre-determinada
||
|| Ex:
|| <input type="text" onkeypress="mask(this,'000.000.000.000:000/00-00',1)">
||
|| this		= recebe o campo
|| formato	= formato da mascara
|| conteudo	= 1 - S? Numeros; 2 - S? Letras; 3 - Numeros e Letras; 4 - Alpha numerico(Qualquer caracter)
*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function mask(campo,formato,conteudo, event){

	if (event == null)
	{
		event = window.event;
	}
	
    valor = campo.value;

	var caracs = ['.','/','-',':','(',')',',', ' '];
 	var i, j;
 	var auxPonto	= formato;
 	var auxBarra	= formato;
 	var auxHifen	= formato;
	var auxDblPonto = formato;
	var auxAbrePar	= formato;
	var auxFechaPar	= formato;
	var auxVirgula	= formato;
	var auxEspaco	= formato;
 	var tamanho		= formato.length;
 	var posPonto	= new Array(tamanho);
 	var posBarra	= new Array(tamanho);
 	var posHifen	= new Array(tamanho);
	var posDblPonto	= new Array(tamanho);
	var posAbrePar	= new Array(tamanho);
	var posFechaPar	= new Array(tamanho);
	var posVirgula	= new Array(tamanho);
	var posEspaco	= new Array(tamanho);
	var keyPress	= event;


	campo.maxLength = tamanho;

	if(keycode(keyPress) != 17 && keycode(keyPress) != 16 && keycode(keyPress) !=13 && keycode(keyPress) != 9){
	switch (conteudo){
			case 1: // Verifica se soh podem ser entrados valores numericos
				if (!(keycode(keyPress) >=48 && (keycode(keyPress) <=57)))
  					return false;
				break;
			case 2: // Somente Letras
				if (!( (keycode(keyPress)>= 97 && keycode(keyPress) <= 122) || (keycode(keyPress)>= 65 && keycode(keyPress) <= 90) ))
					return false;
				break;
			case 3: // Letras e numeros
				if (!( (keycode(keyPress)>=48 && keycode(keyPress)<=57) || (keycode(keyPress)>= 97 && keycode(keyPress) <= 122) || (keycode(keyPress)>= 65 && keycode(keyPress) <= 90) ))
					return false;
				break;
		}
	}

 // ----------------------------- PEGA A FORMATACAO DA MASCARA --------------------------
 	for (i=0;i<tamanho;i++){

 		posPonto[i] 	= auxPonto.indexOf('.');
 		posBarra[i] 	= auxBarra.indexOf('/');
 		posHifen[i] 	= auxHifen.indexOf('-');
		posDblPonto[i]	= auxDblPonto.indexOf(':');
		posAbrePar[i]	= auxAbrePar.indexOf('(');
		posFechaPar[i]	= auxFechaPar.indexOf(')');
		posVirgula[i]	= auxVirgula.indexOf(',');
		posEspaco[i]	= auxEspaco.indexOf(' ');

 		auxPonto 	= auxPonto.substring(posPonto[i]+1,tamanho);
 		auxBarra 	= auxBarra.substring(posBarra[i]+1,tamanho);
 		auxHifen	= auxHifen.substring(posHifen[i]+1,tamanho);
		auxDblPonto	= auxDblPonto.substring(posDblPonto[i]+1,tamanho);
		auxAbrePar	= auxAbrePar.substring(posAbrePar[i]+1,tamanho);
		auxFechaPar	= auxFechaPar.substring(posFechaPar[i]+1,tamanho);
		auxVirgula	= auxVirgula.substring(posVirgula[i]+1,tamanho);
		auxEspaco	= auxEspaco.substring(posEspaco[i]+1,tamanho);

 		if (i > 0){
 			posPonto[i]		= posPonto[i] + posPonto[i-1];
 			posBarra[i]		= posBarra[i] + posBarra[i-1];
 			posHifen[i]		= posHifen[i] + posHifen[i-1];
			posDblPonto[i]	= posDblPonto[i] + posDblPonto[i-1];
			posAbrePar[i]	= posAbrePar[i] + posAbrePar[i-1];
			posFechaPar[i]	= posFechaPar[i] + posFechaPar[i-1];
			posVirgula[i]	= posVirgula[i] + posVirgula[i-1];
			posEspaco[i]	= posEspaco[i] + posEspaco[i-1];

 			posPonto[i]		= posPonto[i] + 1;
 			posBarra[i]		= posBarra[i] + 1;
 			posHifen[i]		= posHifen[i] + 1;
			posDblPonto[i]	= posDblPonto[i] + 1;
			posAbrePar[i]	= posAbrePar[i] + 1;
			posFechaPar[i]	= posFechaPar[i] + 1;
			posVirgula[i]	= posVirgula[i] + 1;
			posEspaco[i]	= posEspaco[i] + 1;
 		}



// --------------------- APLICA A FORMATACAO DA MASCARA ------------------
		tecla = keycode(keyPress);
		if (tecla != 8 && tecla != 45 && tecla != 46 && tecla != 47 && tecla != 58){

			if (campo.value.length == posPonto[i]){
				campo.value = campo.value + '.';
				campo.focus();
			}
			if (campo.value.length == posBarra[i]){
				campo.value = campo.value + '/';
				campo.focus();
			}
			if (campo.value.length == posHifen[i]){
				campo.value = campo.value + '-';
				campo.focus();
			}
			if (campo.value.length == posDblPonto[i]){
				campo.value = campo.value + ':';
				campo.focus();
			}
			if (campo.value.length == posAbrePar[i]){
				campo.value = campo.value + '(';
				campo.focus();
			}
			if (campo.value.length == posFechaPar[i]){
				campo.value = campo.value + ')';
				campo.focus();
			}
			if (campo.value.length == posVirgula[i]){
				campo.value = campo.value + ',';
				campo.focus();
			}
			if (campo.value.length == posEspaco[i]){
				campo.value = campo.value + ' ';
				campo.focus();
			}
 		}
 	}


  // Retirando a m?scara
  for(i=0; i < campo.value.length; i++){
	  valor = valor.replace('-','');
  	valor = valor.replace('(','');
	  valor = valor.replace(')','');
 	  valor = valor.replace(':','');
 	  valor = valor.replace('/','');
 	  valor = valor.replace('.','');
 	  valor = valor.replace(',','');
 	  valor = valor.replace(' ','');
  }

	// Faz a valida??o se for apenas n?mero
  // utilizado para fazer a valida??o de Ctrl+V
	if(conteudo == 1){
  	 	if(isNaN(valor)) valor = "";
  }

	indicePonto = 0;
  indiceBarra = 0;
  indiceHifen = 0;
  indiceDblPonto = 0;
  indiceVirgula = 0;
  indiceAbrePar = 0;
  indiceFechaPar = 0;
  indiceEspaco = 0;

	// Varre o campo aplicando a m?scara
  for(i=0; i < valor.length; i++){

		if (i == posPonto[indicePonto]){
	    if(valor.charAt(i) != '.'){
		    if(i == 0){
    	    valor = '.' + valor;
      	}
        else if(i == valor.length){
     	    valor =  valor + '.';
        }
        else{
        	valor = valor.substring(0,i) + '.'+ valor.substring(i);
        }
        indicePonto++;
	    }
		}
		if (i == posBarra[indiceBarra]){
	    if(valor.charAt(i) != '/'){
		    if(i == 0){
    	    valor = '/' + valor;
      	}
       	else if(i == valor.length){
     	    valor =  valor + '/';
        }
        else{
        	valor = valor.substring(0,i) + '/'+ valor.substring(i);
        }
        indiceBarra++;
	    }
		}
		if (i == posHifen[indiceHifen]){
	    if(valor.charAt(i) != '-'){
		    if(i == 0){
    	    valor = '-' + valor;
      	}
        else if(i == valor.length){
     	    valor =  valor + '-';
        }
        else{
        	valor = valor.substring(0,i) + '-'+ valor.substring(i);
        }
        indiceHifen++;
      }
		}
		if (i == posDblPonto[indiceDblPonto]){
	    if(valor.charAt(i) != ':'){
		    if(i == 0){
    	    valor = ':' + valor;
      	}
       	else if(i == valor.length){
     	    valor =  valor + ':';
        }
        else{
        	valor = valor.substring(0,i) + ':'+ valor.substring(i);
        }
        indiceDblPonto++;
	    }
		}
		if (i == posAbrePar[indiceAbrePar]){
	    if(valor.charAt(i) != '('){
		    if(i == 0){
    	    valor = '(' + valor;
      	}
        else if(i == valor.length){
     	    valor =  valor + '(';
        }
        else{
        	valor = valor.substring(0,i) + '('+ valor.substring(i);
        }
        indiceAbrePar++;
      }
		}
		if (i == posFechaPar[indiceFechaPar]){
	    if(valor.charAt(i) != ')'){
		    if(i == 0){
    	    valor = ')' + valor;
      	}
       	else if(i == valor.length){
     	    valor =  valor + ')';
        }
        else{
        	valor = valor.substring(0,i) + ')'+ valor.substring(i);
        }
        indiceFechaPar++;
      }
		}
		if (i == posVirgula[indiceVirgula]){
	    	if(valor.charAt(i) != ','){
		    	if(i == 0){
    	    		valor = ',' + valor;
      			}
        		else if(i == valor.length){
     	    		valor =  valor + ',';
        		}
        		else{
        			valor = valor.substring(0,i) + ','+ valor.substring(i);
        		}
        		indiceVirgula++;
	    	}
		}
		if (i == posEspaco[indiceEspaco]){
	    	if(valor.charAt(i) != ','){
		    	if(i == 0){
    	    		valor = ',' + valor;
      			}
        		else if(i == valor.length){
     	    		valor =  valor + ' ';
        		}
        		else{
        			valor = valor.substring(0,i) + ' '+ valor.substring(i);
        		}
        		indiceEspaco++;
	    	}
		}
  }

  if(campo.value.length > tamanho){
    campo.value = campo.value.substring(0, tamanho);
  }

  campo.value = valor;
}

function keycode(keyPress){
  if (keyPress.keyCode)
  {
  	return keyPress.keyCode;
  }else return keyPress.which;
}

function limpaMascara(str){
  for (var i=0;i<str.length;i++)
    for (var j=0;j<caracs.length;j++)
      if (caracs[j] == str.charAt(i))
        str = str.replace(caracs[j],'');
  return str;
}


function isTelefone(field)
{
	value = field.value;
	if(value == '')
		return;

	var reValue = /^\d{2} \d{4}\-\d{4}$/;
	var flag = reValue.test(value);
	if(!flag)
	{
		alert("Número de telefone é inválido.");
		field.value = '';
		field.focus();
		return;
	}
}

/********************************
* Metodos Privados
*********************************/


/**
* Armazena se houveram altera?oes na tela
*/
var alterado = "nao";

/**
* Evento criado para inibir os eventos onClick na janela chamadora da tela modal
* enquanto esta estiver ativa
*/
function deadend() {
	if (dialogWin.win && !dialogWin.win.closed) {
		dialogWin.win.focus()
		return false
	}
}

/**
* Habilitacao dos elementos dos forms. Isto possibilita que campos, mesmo que
* desabilitados anteriormente, mantenham sua habilitacaoinicial apos a chamada
* da tela modal
*/
var IEForms

/**
* Uma vez que os links n?o podem ser desabilitados no IE esta variavel armazena
* os onClicks de todos os links para que possam ser recuperados posteriormente
*/
var IELinkClicks

/**
* Uma vez que os links n?o podem ser desabilitados no IE esta variavel armazena
* os hrefs de todos os links para que possam ser recuperados posteriormente
*/
var IELinkHref

/**
* Armazena o OnClick do documento
*/
var IEOnClick

/**
* Armazena o onfocus da janela pai
*/
var IEOnFocus

/**
* Desabilita os formularios, links e eventos no IE
*/
function disableForms() {

		// Desabilita os frames
		IEForms = new Array()
		for (var i = 0; i < document.forms.length; i++) {
			IEForms[i] = new Array();
			for (var j = 0; j < document.forms[i].elements.length; j++) {
				IEForms[i][j] = document.forms[i].elements[j].disabled;
				document.forms[i].elements[j].disabled = true
			}
		}

		// Desabilita os eventos onClick
		IELinkClicks = new Array()
		for (i = 0; i < document.links.length; i++) {
			IELinkClicks[i] = document.links[i].onclick
			document.links[i].onclick = deadend
		}

		// Desabilita os hrefs
		IELinkHref = new Array()
		for (k = 0; k < document.links.length; k++) {
			IELinkHref[k] = document.links[k].href
			document.links[k].href = "#"
		}

		// Desabilita o onfocus da janela
		IEOnFocus = window.onfocus;
		window.onfocus = checkModal

		// Desabilita o onclick do documento
		IEOnClick = document.onclick;
		document.onclick = checkModal
	}

/**
* Retorna os valores originais dos formularios, links e eventos desabilitados
*/
function enableForms() {

		// restaura os forms
		for (var i = 0; i < document.forms.length; i++) {
			for (var j = 0; j < document.forms[i].elements.length; j++) {
				document.forms[i].elements[j].disabled = IEForms[i][j]
			}
		}

		// restaura os onClicks
		for (i = 0; i < document.links.length; i++) {
    	try
    	{
				document.links[i].onclick = IELinkClicks[i];
			}
  	  catch(err)
    	{
        // Estava ocorrendo um erro bem estranho, calei a exce??o pois
        // parece que o erro n?o interfere no funcionamento do sistema.
    	}
		}


		// restaura os href
		for (k = 0; k < document.links.length; k++) {
			document.links[k].href = IELinkHref[k]
		}

		// restaura os eventos do documento e da janela
		document.onclick = IEOnClick;
		window.onfocus = IEOnFocus;
}
