/**
@name GeneralLib.js
@description Fornece métodos de utilidade geral
@methods 
	BloqueiaAspas, 
	pfnCancelar, 
	pfnLTrim, 
	pfnMensagemErro,
	pfnInserirOption(PCampo,PValue,PText),
	pfnIsNumeric, 
	pfnNormalize, 
	pfnPreecheRB, 
	pfnRTrim, 
	pfnSubmit, 
	pfnSelecioneRadio,
	pfnTrim
@created 05/11/2003
@author Jorge Bittencourt
*/


//*************************************************************************************************************
/**
@name BloqueiaAspas
@description Bloqueia o usuário de digitar aspas simples ou duplas em um campo
@created 27/11/2003
@param e: o evento que representa a tecla digitada
@return true, se a tecla digitada for diferente de uma aspa simples ou dupla, false, caso contrário
@author Jorge Bittencourt
*/
function BloqueiaAspas(e)
{
    var tecla = event.keyCode;
    // bloqueie aspas simples e dupla e sustenido
    if (tecla == 39 || tecla == 34 || tecla == 35 || tecla == 92) 
        event.keyCode = 0;
}

//*************************************************************************************************************
/**
@name BloqueiaCaracteresEspecificos
@description Bloqueia o usuário de digitar caracteres que não forem alfa númericos.
@created 27/11/2006
@param e: o evento que representa a tecla digitada
@return true, se a tecla digitada for diferente dos caracteres Alfa Númericos
*/
function BloqueiaCaracteresEspecificos()
{
    var tecla = event.keyCode;
    // bloqueie caracteres especiais, só deixa letra e número.
    if ((tecla < 48) ||(tecla > 57 && tecla < 65) || (tecla > 90 && tecla < 97) || (tecla > 122)) 
        event.keyCode = 0;
}
//*************************************************************************************************************
/**
@name pfnBuscarEntre
@description Retorna a string que está entre determinado dados.
@created 19/12/2005
@param StrInicial O valor inicial de onde deve iniciar a busca
@param StrFinal O valor final até onde retornar
@param StringCompleta A string completa.
@return a string que está entre os dois valores.

*/
function pfnBuscarEntre(StringCompleta,StrInicial,StrFinal)
{
	return StringCompleta.substring(StringCompleta.indexOf(StrInicial)+StrInicial.length,StringCompleta.indexOf(StrFinal));
}
//*************************************************************************************************************
/**
@name checkForEnter
@description Simula um click no botão espeficificado quando o usuário aperta enter
@created 18/08/2004
@param buttonName: o nome do botão a ser clicado
@author Jorge Bittencourt
*/
function checkForEnter(buttonName)
{
	// o return está aqui porque, em campos onde a validação é feita no onblur,
	// a validação geral do formulário está interferindo. Quando os erros forem
	// exibidos por meio de spans, retire o return.
	return;
    // recupere o botão especificado
    var button = document.getElementById(buttonName);
    if (event.keyCode == 13)
        button.click(); 
}


//*************************************************************************************************************
/**
@name checkForEnterFocus
@description Dá foco em um input quando o usuário aperta enter em algum input
@created 19/10/2004
@param inputName: o nome do input que receberá o foco
@author Jorge Bittencourt
*/
function checkForEnterFocus(inputName)
{
    // recupere o botão especificado
    var input = document.getElementById(inputName);
    if (event.keyCode == 13 && input != null && input.style.visibility != "hidden" && 
      input.style.display != "none" && !input.disabled)
    {
        input.focus();
    }
}


//*************************************************************************************************************
/**
@name pfnCancelar
@description Pergunta ao usuário se deseja cancelar uma operação qualquer e, caso
 afirmativo, o redireciona à página especificada pelo usuário
@created 05/11/2003
@param paginaRedirecionar: página à qual o usuário será redirecionado caso deseje cancelar a operação
@param mensagem: A mensagem que será mostrada ao usuário perguntando se ele deseja cancelar a operação
@return Não retorna nada
@author Jorge Bittencourt
*/
function pfnCancelar(paginaRedirecionar, mensagem)
{
    // assuma que o redirecionamento acontecerá
    var doRedirect = true;
    
    // verifique se há alguma mensagem a ser mostrada
    if (mensagem != "")
    {
        // somente se houver uma mensagem a ser mostrada e o usuário não confirmar o redirecionamento, este
        // não deverá ocorrer
        if (!confirm(mensagem))
            doRedirect = false;
    }
    
    // antes de redirecionar o usuário, verifique se a página de redirecionamento não é vazia
    if (doRedirect && paginaRedirecionar != "")
        window.location = paginaRedirecionar;
}

    
//*************************************************************************************************************
/**
@name pfnEnable
@description Habilita ou desabilita um campo
@created 27/05/2004
@param inputName: o campo que será habilitado ou não
@param toggle: determina se o campo será habilitado ou desabilitado
@param onclickName: o nome do evento onclick a ser atribuído ao elemento
@author Jorge Bittencourt
*/
function pfnEnable(inputName, toggle, onclickName)
{
 	var input = document.getElementById(inputName);
 	if (input != null)
 	{
	 	input.disabled = !toggle;
		if (onclickName != '')
			document.getElementById(inputName).onclick = onclickName;
	}
}

//*************************************************************************************************************
/**
@name pfnFormataTelefone
@description Formata o telefone à medida que os caracteres são digitados
 Inclui as barras. Não permite a digitação de caracteres que não sejam números
 Deve ser usada no evento onKeyPress
@created 30/10/2003
@param input: o campo onde o telefone é digitado
@return Não retorna nada
@author Marcos Lopes Conde
*/
function pfnFormataTelefone(input)
{
	if (event.keyCode < 48 || event.keyCode > 57)
		event.returnValue = false;
	else
	{
		var data = input.value;
		// verifique se todos os números fora as barras são de fato número
		if(data.length == 1)
		{
			data = input.value;
			data = data.replace("(","");
			data = "(" + data;
			input.value = data;
		}
		
		if(data.length == 3)
			input.value = input.value + ")";
		if(data.length == 8)
			input.value = input.value + "-";
	}
}

//*************************************************************************************************************
/**
@name pfnFormataTelefone
@description Formata o telefone quando perde o foco.
 Inclui as barras. Não permite a digitação de caracteres que não sejam números
 Deve ser usada no evento onBlur
@created 30/10/2003
@param input: o campo onde o telefone é digitado
@return Não retorna nada
@author Marcos Lopes Conde
*/
function pfnFormataeValidaTelefone(input,mensagem)
{

	try 
	{
	if (input.value!='') 
	{
		if (mensagem=='')
			mensagem = 'Valor inválido';
				
			var dataInicial = input.value;
			var data = dataInicial.replace("(","");
			data = data.replace(")","");
			data = data.replace("-","");
			if(data.length != 10)
			 { 
				alert(mensagem);
				//para focar no final
				input.value= input.value+ "";
				return false;
			 }
			 input.value = data;
			//essa função está na validação de número.
			if (!pfnValideNumeric(input, mensagem))
			{
				input.value = dataInicial;
				return false;
			}
			input.value = "("+ data.substring(0, 2)+ ")"+data.substring(2, 6) + "-" + data.substring(6, 10);
		}						
	}
	catch(e) 
	{						// Caso ocorra algum erro.
		alert(e);
		return(e + " ocorreu um erro ao execultar a função.");		// Retorna a mensagem de erro.
	}
}



//*************************************************************************************************************
/**
@name pfnFocus
@description Focaliza o input com o id especificado
@created 09/11/2004
@return inputName: the id of the element to focus
@author Jorge Bittencourt
*/
function pfnFocus(inputId)
{
  if (document.getElementById(inputId) != null)
  {
    document.getElementById(inputId).focus();
  }
}


//*************************************************************************************************************
/**
@name pfnGoTo
@description Redireciona o usuário para a página especificada
@created 29/04/2004
@return target: a página para a qual o usuário será redirecionado
@author Jorge Bittencourt
*/
function pfnGoTo(target)
{
    window.location = target;
}

//*************************************************************************************************************
/**
@name pfnInserirOption
@description Inclui um novo option no select.
@created 05/12/2005
@param PCampo: O campo que será select que será inserido o option. Ex document.frmPrincipal.ipslLog ou document.getElementById("ipslLog")
@param PValue: O campo value que fica oculto mas será enviado pelo form para a próxima página.
@param PText : O campo de texto que será mostrado ao cliente.
@return Não retorna nada
@author Marcos Lopes Conde.
*/
function pfnInserirOption(PCampo,PValue,PText)
{
	if (PCampo != undefined)
	{
		// INSERE UM NOVO CAMPO.
		// Cria um elemento select.
		var oOption = document.createElement("OPTION");
		// Insere o texto.
		oOption.text=PValue;
		// Insere o value.
		oOption.value=PText;
		// Insere a opção no select.
		PCampo.add(oOption);
	}
}
//*************************************************************************************************************
/**
@name pfnIsAlphaNumeric
@description Determina se a última tecla digitada é um dígito ou uma letra (e opcionalmente um espaço)
@created 10/04/2003
@return true, se a tecla for um dígito ou letra (ou espaço), false, caso contrário
@author Jorge Bittencourt
*/
function pfnIsAlphaNumeric(permiteEspaco)
{
    var code = event.keyCode;
    if ((code == 32 && !permiteEspaco) || (code < 48 && code != 32) || (code > 57 && code < 65) || (code > 90 && code < 97) || code > 122)
    {
        event.returnValue = false;
        return false;
    }
    else
    {
        event.returnValue = true;
        return true;
    }
}   


//*************************************************************************************************************
/**
@name pfnLTrim
@description Elimina caracteres em branco do lado esquerdo de uma string (enters, tabs, tabs verticais e espaços)
@created 31/12/2003
@param str: a string da qual se quer retirar os espaços em branco
@return a string passada sem nenhum espaço do lado esquerdo
@author Jorge Bittencourt
*/
function pfnLTrim(str)
{
    return str.replace(/^(\s)*/g, "");
}

//*************************************************************************************************************
/**
@name pfnMensagemErro
@description Mostra a mensagem de erro ao cliente.
@Mensagem : A mensagem que será exibida ao cliente.
@Form: O nome do form onde está o campo que será focado.
@CampoFocar: O nome do campo que será focado.
@Div : Se a mensagem for aparecer em um Div.
@created 05/12/2005
@return Não retorna nada
@author Marcos Lopes Conde.
*/
function pfnMensagemErro(Mensagem,Form,CampoFocar,Div)
{
	if (Div=='')
	{
		alert(Mensagem);
	}
	else
	{
	   eval(Div + '.innerHTML = ' + Mensagem);
	}
	if (CampoFocar!=''&& Form!='')
	{
		eval('document.' + Form + '.' + CampoFocar + '.focus();');
	}
}

/**
@name pfnValidaCampo(Campo,Mensagem,TipoValidacao)
@description Valida os campos.
@params Campo : Pega o campo
@params Mensagem: A mensagem que será mostrada ao usuário, se vier em branco mostra a mensagem padrão.
@params TipoValidacao: Tipo de validação para o usuário.
@params Div: Se tem algum div especifico para mostrar a mensagem.
@created 11/02/2006
@return Não retorna nada
*/
function pfnValidaCampo(Campo,Mensagem,TipoValidacao,Div)
{
	try
	{
        switch (TipoValidacao.toUpperCase()) 
        {
			case "OBRIGATÓRIO":
			case "OBRIGATORIO":
				//Verifica se está escrito obrigatório ou obrigatorio e entra nesta condição.
				//Verifica se o campo existe.
				if (Campo!=undefined)
				{
				
					var TipoCampo = Campo.type;
					//Deixa o tipo no formato minusculo.			
					TipoCampo = TipoCampo.toLowerCase();
					//Se for campo select.
					if (TipoCampo == 'select-one')				
					{	
						//Retira os espaços e verifica se o campo está em branco.
						if (Campo.selectedIndex == 0)
						{
							//Define este campo para receber o foco.
							campoToFocus = Campo;
							//Verifica se tem mensagem se não tiver coloca a mensagem padrão de erro.
  							if (pfnTrim(Mensagem) !='')
  							{
  								throw Mensagem;
  							}
  							else
  							{
  								throw "Preenchimento do campo obrigatório.";
  							}
  						}
  					}
  					else
  					{
						//Retira os espaços e verifica se o campo está em branco.
						if (pfnTrim(Campo.value) == '')
						{
							//Define este campo para receber o foco.
							campoToFocus = Campo;
							//Verifica se tem mensagem se não tiver coloca a mensagem padrão de erro.
  							if (pfnTrim(Mensagem) !='')
  							{
  								throw Mensagem;
  							}
  							else
  							{
  								throw "Preenchimento do campo obrigatório.";
  							}
  						}
					}
  				}
  				else
  				{
  					throw "Campo inexistente.";  			
  				}
			case "MAIORMENOR":
			case "NUMERICO":
			case "LETRA":
			default:
        }
	}
	catch (e)
	{
		//Verifica se ocorreu algum erro no servidor.
		if (pfnTrim(e)=='')
		{
			alert('E00 - Ocorreu um erro no servidor:' + e.description)
		}
		else	
		{
			// Mostra a mensagem de erro.
			alert(e);
			var TipoCampo = campoToFocus.type;
			
			//Deixa o tipo no formato minusculo.			
			TipoCampo = TipoCampo.toLowerCase()
			if ((TipoCampo != 'hidden') && (campoToFocus.style.visible != 'none'))
			{
				//Se for estes tipos pode receber foco.
				if (	
						TipoCampo == 'button'	||
						TipoCampo == 'submit'	||
						TipoCampo == 'text'		||
						TipoCampo == 'textarea' ||				
						TipoCampo == 'reset'
					)				
					{	
						campoToFocus.focus();
					}
				//Se for campo select.
				if (TipoCampo == 'select-one')				
					{	
						campoToFocus.focus();
					}			

			}	
		}
		//retorno verdadeiro, deu erro, o padrão é retornar falso..
		return true;
	}
	
}

//*************************************************************************************************************
/**
@name pfnNormalize
@description Completa uma string o número especificado de dígitos. Se a string passada contiver menos
 dígitos do que o especificado, completa a string à esquerda com a string passada
 A string passada precisa ter um caractere, caso contrário nada é feito e original é retornado
 Se original contiver length ou mais caracteres, nada é feito e original é retornado
@created 31/12/2003
@param original: a string original
@param length: o tamanho desejado da string final
@param strToReplace: a string a completar original
@param left: se for true, strToReplace é concatenada à esquerda, caso
 contrário é concatenada à direita
@return a string passada sem nenhum espaço nas extremidades
@author Jorge Bittencourt
*/
function pfnNormalize(original, length, strToReplace, left)
{
    if (strToReplace.length != 1 || original.length >= length)
        return original;
    else
    {
        var strToConcatenate = "";
        for (i = 0; i < length - original.length; i++)
            strToConcatenate = strToConcatenate + strToReplace;
        
        if (left)
            return strToConcatenate + original;
        else
            return original + strToConcatenate;
    }
}


//*************************************************************************************************************
/**
@name pfnPreencheHidden
@description Preenche um input hidden com o valor text do index especificado de um campo select
@param inputHdId: o id do input hidden
@param select: o elemento select
@return Não retorna nada
@author Marcos Lopes Conde.
*/
function pfnPreencheHidden(inputHdId, select)
{
	var input = document.getElementById(inputHdId);
	if (input != null)
    input.value = select.options[select.selectedIndex].text;
}


//*************************************************************************************************************
/**
@name pfnPreecheRB
@description Ao focar um campo de texto seleciona automaticamente o RB
@created 15/01/2004
@param pNomeform: O nome do Form
@param pNomeCampo: O nome do Campo Radio não é o nome do campo texto
@param preencheRBNumero: O Número do rádio button que vc deseja selecionar
@return Não retorna nada
@author Marcos Condes Lopes
@exemplo <input onClick="fnGeneralLibJSPodeCancelar('deseja cancelar','inicio.asp');"></input>
*/
function pfnPreecheRB(pNomeform,pNomeCampo,preencheRBNumero)
{
    var valoratual;
    //pega o valor do Radio para verificar se já está checado.
    eval('valoratual = document.' + pNomeform + '.' + pNomeCampo + '[' + preencheRBNumero + '].checked;');
    //se não fizer este if e dar checkin duas vezes dá um erro no java script.
    if( valoratual == false)
        eval('document.' + pNomeform + '.' + pNomeCampo + '[' + preencheRBNumero + '].checked = true;');    
}


//*************************************************************************************************************
/**
@name pfnRTrim
@description Elimina caracteres em branco do lado direito de uma string (enters, tabs, tabs verticais e espaços)
@created 31/12/2003
@param str: a string da qual se quer retirar os espaços em branco
@return a string passada sem nenhum espaço do lado direito
@author Jorge Bittencourt
*/
function pfnRTrim(str)
{
    return str.replace(/(\s)*$/g, "");
}


//*************************************************************************************************************
/**
@name pfnSelecioneRadio
@description Seleciona ou deseleciona o input type radio especificado, no index especificado
 O parâmetro seleciona determina se a opção será selecionada ou deselecionada
@created 05/12/2003
@param radioName: o nome do input
@param index: o index da opção (0-based)
@param seleciona: um boolean (ou string "true" ou "false") que determina se a opção será selecionada
 ou deselecionada
@return Não retorna nada
@author Jorge Bittencourt
*/
function pfnSelecioneRadio(radioName, index, seleciona)
{
    // primeiro verifique se o radio existe, e se o index do radio existe
    eval("var existe = document.all('" + radioName + "') != null;");
    eval("existe = existe && (document.all('" + radioName + "')[" + index + "] != null);");
    // se ele existir
    if (existe)
    {
        var statement = "document.all('" + radioName + "')[" + index + "].checked = " + seleciona + ";";
        eval(statement);
    }
}

//*************************************************************************************************************
/**
@name pfnReplaceAll(StringOriginal,StringSubstituir,StringSubstituirPor)
@description Substitui todas as palavras em uma string.
@created 31/12/2005
@param StringOriginal: a string da qual será substituída.
@param StringSubstituir: a expressão a ser procurada e substituída.
@param StringSubstituirPor: a expressão a ser colocada no lugar da palavra substituída.
@return a string passada totalmente substituída, pois o replace só substitui a primeira ocorrência.
@author Marcos Lopes Conde
*/
function pfnReplaceAll(StringOriginal,StringSubstituir,StringSubstituirPor)
{
	var ResultadoStr = '';
	var i;
	// quebre a lista
	var ids = StringOriginal.split(StringSubstituir);
	// procure por selected na lista
	for (i = 0; i < ids.length; i++)
	{
		if (ids.length-1 == i)	
		{	
			ResultadoStr = ResultadoStr + ids[i];
		}
		else
		{
			ResultadoStr = ResultadoStr + ids[i] + StringSubstituirPor;
		}		
	}	
	return ResultadoStr; 
}
//*************************************************************************************************************
/**
@name pfnSubmit
@description Submete o formulário para a página especificada, e antes armazena no elemento especificado o 
 nome do elemento que submeteu o formulário
@created 17/12/2003
@param target: o nome da página que será atribuído ao parâmetro action do formulário
@param formName: o nome do formulário
@param holdingElement: o nome do elemento que armazenará o nome do elemento que fez com que o
 forumlário fosse submetido
@param causeElementName: o nome do elemento que fez com que o formulário fosse submetido
@return Não retorna nada
@author Jorge Bittencourt
*/
function pfnSubmit(target, formName, holdingElement, causeElementName)
{
    // só atribua a causa ao elemento caso o elemento que armazena a razão e o nome do elemento que causou
    // a submissão tenham sido especificados
    if (causeElementName != "" && holdingElement != "")
    {
        eval("document.all.item('" + holdingElement + "').value = '" + causeElementName + "';");
    }
    // só atribua o target do formulário caso este parâmetro tenha sido especificado
    if (target != "")
    {
        eval("document." + formName + ".action = '" + target + "';");
    }
    
    // submeta o formulário
    eval("document." + formName + ".submit();");
}


//*************************************************************************************************************
/**
@name pfnSubmitConfirmation
@description Submete o formulário para a página especificada se o usuário confirmar a operação
@created 06/10/2004
@param target: o nome da página que será atribuído ao parâmetro action do formulário
@param formName: o nome do formulário
@param holdingElement: o nome do elemento que armazenará o nome do elemento que fez com que o
 forumlário fosse submetido
@param causeElementName: o nome do elemento que fez com que o formulário fosse submetido
@param mensagem: A mensagem a ser exibida ao usuário
@return Não retorna nada
@author Jorge Bittencourt
*/
function pfnSubmitConfirmation(target, formName, holdingElement, causeElementName, mensagem)
{
    if (confirm(mensagem))
	 	pfnSubmit(target, formName, holdingElement, causeElementName);
}


//*************************************************************************************************************
/**
@name pfnTrim
@description Elimina caracteres em branco do lado direito e esquerdo de uma string (enters, tabs, tabs verticais 
 e espaços)
@created 31/12/2003
@param str: a string da qual se quer retirar os espaços em branco
@return a string passada sem nenhum espaço nas extremidades
@author Jorge Bittencourt
*/
function pfnTrim(str)
{
    return str.replace(/(\s)*$|^(\s)*/g, "");
}


//*************************************************************************************************************
/**
@name pfnValideAspas
@description Verifica se existem caracteres proibidos no campos especificado
@created 20/10/2004
@param input: o campo a ser validado
@param msgErro: a mensagem de erro a ser exibida. Se estiver vazia, não exibe nada
@return true, se a validação tiver sucesso, ou false, caso contrário
@author Jorge Bittencourt
*/
function pfnValideAspas(input, msgErro)
{
	if (input != null)
	{
	   var matches = input.value.match(/[\'#\\\"]/g);
		if (matches != null && matches.length > 0)
		{
			if (msgErro != "")
			{
				alert(msgErro);
				input.select();
				input.focus();
				return false;
			}
		}
	}
	return true;
}

//*************************************************************************************************************
/**
@name pfnValideCaracteresEspeciais()
@description Verifica se existem caracteres que não são letras ou números
@created 20/10/2007
@param input: o campo a ser validado
@param msgErro: a mensagem de erro a ser exibida. Se estiver vazia, não mostra nada.
@return true, se a validação tiver sucesso, ou false, caso contrário
*/
function pfnValideCaracteresEspeciais(input, msgErro)
{
	if (input != null)
	{
		var ipText = input.value;
		for (var x = 0 ; x < ipText.length ; x++)
		{
			var tecla = new String(ipText.charCodeAt(x));
			if ((tecla < 48) ||(tecla > 57 && tecla < 65) || (tecla > 90 && tecla < 97) || (tecla > 122)) 
			{
				if (msgErro != "")
				{
					alert(msgErro);
					input.select();
					input.focus();
					return false;
				}
			}
		}
	}
	return true;
}

//*************************************************************************************************************
/**
@name pfnValideEmail
@description Verifica se o e-mail digitado no campo especificado é válido e exibe,
 opcionalmente, a mensagem de erro especificada
@created 03/11/25004
@param input: o campo que contém o e-mail a ser validado
@param msgErro: a mensagem de erro a ser exibida. Se estiver vazia, não exibe nada
@return true, se a validação tiver sucesso, ou false, caso contrário
@author Jorge Bittencourt
*/
function pfnValideEmail(input, msgErro)
{

	// recupere o e-mail
	var email = pfnTrim(input.value);
	if (email != "")
	{
		// a expressão regular para um e-mail válido
		var re = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/gi;
		var matches = re.exec(email);
		// deve existir exatamente um e-mail
		if (matches == null || email != matches[0])
	   {
			if (msgErro != "")
			{
				alert(msgErro);
				input.select();
				input.focus();
				return false;
			}
		}
	}
   return true;
}

//Para debulgar o Java Script.
function d(Mensagem)
{
	try 
	{
		alert(Mensagem);
		//document.frmPrincipal.textarea1.value =document.frmPrincipal.textarea1.value + '\n' + Mensagem;
		//<textarea id=textarea1 name=textarea1></textarea>
	}
	catch(e) 
	{						// Caso ocorra algum erro.
		alert(e);
		return(e + " ocorreu um erro ao execultar a função.");		// Retorna a mensagem de erro.
	}
}

 function fnVerificaSeOCEPENumerico(input)// e formata
{

 	    if ((event.keyCode<48)||(event.keyCode>57))
  	    {
		    event.returnValue = false;
		}
        else
        {
    	    if(input.value.length==5)
    	    {
			    input.value=input.value + "-" ;
			}
	    }


        //**************************

}

