<!-----//


function emailCheck (emailStr) {
/*
 funcao para verificar email emailCheck(frm.email.value)
*/

var checkTLD=1;

var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

var emailPat=/^(.+)@(.+)$/;

var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

var validChars="\[^\\s" + specialChars + "\]";

var quotedUser="(\"[^\"]*\")";

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

var atom=validChars + '+';

var word="(" + atom + "|" + quotedUser + ")";

var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

var matchArray=emailStr.match(emailPat);

if (matchArray==null) {

alert("O Email digitado está incorreto");
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

// Start by checking that only basic ASCII characters are in the strings (0-127).

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
alert("Ths username contains invalid characters.");
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
alert("Ths domain name contains invalid characters.");
return false;
   }
}

// See if "user" is valid 

if (user.match(userPat)==null) {

// user is not valid

alert("O Email digitado está incorreto");
return false;
}

/* if the e-mail address is at an IP address (as opposed to a symbolic
host name) make sure the IP address is valid. */

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

// this is an IP address

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
alert("Destination IP address is invalid!");
return false;
   }
}
return true;
}

// Domain is symbolic name.  Check if it's valid.
 
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
alert("O Email digitado está incorreto.");
return false;
   }
}

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
alert("O Email digitado está incorreto");
return false;
}

if (len<2) {
alert("O Email digitado está incorreto");
return false;
}

// If we've gotten this far, everything's valid!
return true;
}



function fTrim(str){
	/************************************************************************************
		FTRIM (STR)
		Função genérica utilizando expressões regulares para retornar campo
		sem espaços.
	************************************************************************************/
	return str.replace(/(^\s*)|(\s*$)/g, "");
}

function checkFields(form, fields){
	/*************************************************************************************
		CHECKFIELDS (FORM, FIELDS)
		Função Genérica que verifica se os campos estão vazios,
		ele recebe o form da página como primeiro argumento
		e os nomes dos campos e seus respectivos rótulo.		
		ex.: checkFields(this, [["nome","Nome"],["end","Endereço"]]);
		Premissa: Função inArray().
	**************************************************************************************/
	// Cria as variáveis que serão utilizadas na função
	var obj;
	var cont1;
	var cont2;
	var checked;
	var types;
	var typesPass; 
		
	
	// Inicia as variáveis com seus valores		
	cont1     = fields.length;
	types     = ["text", "textarea", "password", "select-one", "select-multiple", "file"];
	typesPass = ["submit", "button", "reset", "hidden"];

	// Inicia a verificação
	for(var i = 0; i < cont1; i++) {
		obj = eval("form." + fields[i][0]);
		
		if(inArray(types, obj.type) == false && inArray(typesPass, obj.type) == false) { 
			cont2 = obj.length;
			checked = false;
			for(var j = 0; j < cont2; j++ )
				if (obj[j].checked == true) { checked = true; }
			if(checked == false) {
				alert("Por favor preencha o campo " + fields[i][1] + " corretamente!" );
				obj[0].focus();
				return false;
			}
		} else {
			if(inArray(types, obj.type)) {
				
				if(fTrim(obj.value) == "") {
					alert("Por favor preencha o campo " + fields[i][1] + " corretamente!" );
					obj.focus();
					return false;
				}
			}
		}

	}
	return true;		  
}

function inArray(list, type) {
	/*************************************************************************************
		INARRAY (LIST, TYPE)
		Função que retorna true (verdadeiro) se o o valor que chega pelo parâmetro TYPE 
		estiver dentro do array do parâmetro LIST e false (falso) caso não esteja.
		ex.: inArray(["text", "textarea"], "text");
	**************************************************************************************/	
	// Cria as variáveis que serão utilizadas na função
	var cont;
	var result;
	
	// Inicia as variáveis com os seus valores
	cont   = list.length;
	result = false;
	
	// Inicia a verificação
	for(var i = 0; i < cont; i++) 
		if(list[i] == type) 
			result = true;
	
	return result;					
}


function keyInterger( tecla ) {
  /*******************************************************************************
  	keyInterger ( tecla )
  	Funçao para permitir a digitação somente de números.
  	A funçao dá suporte para números do tipo moeda, portando valores como:
  	17.50  ou 17,50 são permitidos.
  	TECLAS PERMITIDAS
	  -> 48 a 57  => Números do teclado alfa numérico
	  -> 96 a 105 => Números do teclado numérico
	  -> 46 => Tecla [Delete]
	  -> 8 => Tecla [Back space]
	  -> 188 e 110 => Virgula
	  -> 190 e 194 => Ponto
	  EXEMPLO:
	  <INPUT type="text" name="fldValor" onKeyPress="return keyInterger( this.event.keyCode );">
  ********************************************************************************/
  if( ( tecla == 47 ) | (tecla < 46 | tecla > 57) && (tecla < 98 | tecla > 99) && ((tecla != 8)) ){
   //alert("Tecla não permitida para este campo.\nFavor utilizar apenas números, [vírgula] e [ponto]");
   return false;
  }
  else{
  	return true;
  }
}


function keyInterger2( tecla ) {
  /*******************************************************************************
  	keyInterger ( tecla )
  	Funçao para permitir a digitação SOMENTE de números. nao permite pontos nem virgula
  	TECLAS PERMITIDAS
	  -> 48 a 57  => Números do teclado alfa numérico
	  -> 96 a 105 => Números do teclado numérico
	  -> 46 => Tecla [Delete]
	  -> 8 => Tecla [Back space]
	  -> 188 e 110 => Virgula
	  -> 190 e 194 => Ponto
	  EXEMPLO:
	  <INPUT type="text" name="fldValor" onKeyPress="return keyInterger2( this.event.keyCode );">
  ********************************************************************************/
  if(( tecla == 44 ) | ( tecla == 46 ) | ( tecla == 47 ) | (tecla < 46 | tecla > 57) && (tecla < 98 | tecla > 99) && ((tecla != 8)) && ( tecla != 13 )){
   //alert("Tecla não permitida para este campo.\nFavor utilizar apenas números, [vírgula] e [ponto]");
   return false;
  }
  else{
  	return true;
  }
}

function checkDate( Input ){
	var Data = Input.value;

	/*Expressão Regular comentada para modelo mais específico /^([0-9]{2})[\/]([0-9]{2})[\/]([0-9]{4})$/; */
	var DataRegEx = /^([012][0-9]|3[01])\/(0[1-9]|1[012])\/([0-9]{4})$/;

	if(!(Matches = Data.match(DataRegEx))){
		alert("Formato de data inválido.\nPor favor preencha o campo novamente!");
		Input.focus();
		return false;
	}

	// quebra a data em DIA, MES e ANO
	var Dia = Matches[1], Mes = Matches[2], Ano = Matches[3];

	if(Dia<1 || Dia>31){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
	if(Mes<1 || Mes>12){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
	if ((Mes==4 || Mes==6 || Mes==9 || Mes==11) && Dia>30){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }

	if (Mes==2) {
		var Resto = (Ano % 4); 
	
		if (Resto==0 && Dia>29){ alert("Em anos bissextos, o mês de fevereiro só tem 29 dias.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }
		if (Resto != 0 && Dia>28){ alert("Data inválida.\nPor favor preencha o campo novamente!"); Input.focus(); return false; }	
	}
	
	return true;
}// fim checkDate


function maskDate( Field ){
	var tamanho = Field.value.length;

	if( tamanho == 2 ){ Field.value = Field.value + '/'; }
	else if( tamanho == 5 ){ Field.value = Field.value + '/'; }
}


function checkHours( Field ){
	var Hora = Field.value;
	var RegExp = /^([01][0-9]|2[0-3])\:([0-5][0-9])$/; //-> Expressão regular para definir formato do horário HH:MM ( 00:00 a 23:59 )
 
	if(!(arrVal = Hora.match(RegExp))){
		alert("Horário inválido.\nPor favor digite o horário correto!");
		Field.focus();
		return false;
	}
	return true
} //checkHours

function formatHours( Field ){	
	var sizeHora = Field.value.length;
	// adicionar o ':' automático
	if( sizeHora == 2 ){
		Field.value = Field.value + ':'
		Field.value.length++;
	}
	return true
}// formatHours

/*************************************************************************/
function formatCurrency(num) {
//coloca data no formatao 1.000,00
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+'.'+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + '' + num + ',' + cents);
}


	
	
/*************************************************************************/
function formatCurrency2(num) {
//coloca data no formatao 1.000,00 
// se os centavos estiverem entre 0 e 50 arredonda pra 50 
// se os centavos forem > 50 soma 1 no valor e arredonda pra 0
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();

// pegando o valor de arredondamento
if (frm.fl_arredondar.value=="N"){  // verificando a opcao de arredondamento (  null , P , U, N ) do config
	if (cents>0&&cents<50){cents=0;}
	if (cents>=50){num=eval(num)+1;cents=0;}
}	

if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+''+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + '' + num + '.' + cents);
}	

function checkPeriodo( objFrm, dataInicio, dataTermino ){
/*********************************************************************************
	VALIDARPERIODO( FORM, DATA1, DATA2 );
		Função genérica para validação de período entre datas.
		Tem como objetivo verificar se a data de término é menor que
		a data de inicio do período.

	Exemplo de como chamar a função:
		<input type="button" name="botao" value="! validar !" onClick="checkPeriodo( frm, 'fldDataIni', 'fldDataFim' );">

	Nota: Veja que os campos aonde estão as datas são passados como string comum.
***********************************************************************************/
	var dtIni, dtFim;
	var ctlDt1, ctlDt2;
	// obter o value do campo
	var dtInicio	= eval( "objFrm." + dataInicio );
	var dtTermino	= eval( "objFrm." + dataTermino );

	// retirar a barra de separação para transformar
	// em um numero inteiro
	// ex.:  27/01/1982 - 27011982
	ctlDt1	= dtInicio.value.split("/");
	ctlDt2	= dtTermino.value.split("/");

	// para validar o período deve-se iniciar do Ano para o Dia
	dtIni	= ctlDt1[2] + ctlDt1[1] + ctlDt1[0];
	dtFim	= ctlDt2[2] + ctlDt2[1] + ctlDt2[0];

	if ( parseInt(dtIni) > parseInt(dtFim) ){
		alert( "Período inválido!\nA data final é menor que a data de inicio do período." );
		dtInicio.focus();
		return false;
	}
	return true;
}
//-->




function tirarZerosEsquerda(STR){

  var sAux='';
  var i=0;
  STR=new String(STR);
  
  while (i < STR.length ){
    if ((STR.charAt(i)!='.') && (STR.charAt(i)!=',')){
	  sAux += STR.charAt(i);
    }
	i++
  }
  
  
  STR = new String(sAux);
  sAux = '';
  i=0;
  
  while (i < STR.length ){
    if (STR.charAt(i) != '0'){
      sAux = STR.substring(i,STR.length)
	  i = STR.length;
	}
    i++;
  }
  
  return  sAux;
}

function formatarOnKeyUp(OBJ){
/*********************************************************************************
	formatarOnKeyUp( objeto );
	Exemplo de como chamar a função:
		<input type="text" name="text" value="! validar !" onkeyup="formatarOnKeyUp(this);">
***********************************************************************************/
  var decimal,inteiro;
  var i,count;
  STR = new String(OBJ.value); 
  STR = tirarZerosEsquerda(STR);
  inteiro='';
		if (STR.length == 1){
			  inteiro  = '0';
			  decimal = '0' + STR;
			}
			else { 
			  if (STR.length == 2){
				  inteiro  = '0';
				  decimal = STR;
				}
				else{
				  decimal = STR.substring(STR.length-2,STR.length);
				  i=3;
				  count=0;
				  while (i<=STR.length){
			 		if (count==3) {
					  inteiro = '.' + inteiro;
					  count = 0;
					}
				    inteiro = STR.charAt(STR.length-i) + inteiro;
					count++;
					i++;
				  }
				}
			}
    
  
		if (inteiro == '') {
		  inteiro = '0';
		}
  
		if (decimal == '') {
		  decimal = '00';
		}
		OBJ.value = inteiro+','+decimal;
  
}