


var valida = new Object();

valida = { 
	
	regEmail : [],
	EmailErro : "O Email digitado esta em formato invalido",
	
	regTime : [ ],
	TimeErro : "Este não é um formato de Tempo válido",
	
	regData : [ ],
	DataErro : "Este não é um formato de Data válido",
	
	regMoeda : [ ],
	MoedaErro : "Formato de Moeda Invalido",
	
	regDigito : [ ],
	DigitoErro : "Este não é um formato de Digito Valido",
	
	regDecimal : [ ],
	DecimalErro : "É necessario um formado decimal, EX: 0.00 "	,
	
	regNumero : [ ],
	NumeroErro : "Apenas é aceito numeros!",
	
	CpfErro : "CPF Invalido",
	CnpjErro : "CNPJ invalido",
	CepErro : "Formato CEP Errado"
}



/** Expressoes regulares tiradas , http://www.mhavila.com.br/topicos/web/valform.html **/

/* 1. Livre — ReEmail1 aceita nome-local com todos os caracteres permitidos na RFC 2822: [\w!#$%&'*+/=?^`{|}~-]; e o domínio tem definição bem livre, por nome basicamente fixando apenas que o TLD deve ter entre 2 e 6 caracteres: [A-Za-z]{2,6}; ou por número IP entre colchetes: \[\d{1,3}(\.\d{1,3}){3}\].
   2. Compacto — ReEmail2 limita os caracteres permitidos no nome-local de forma mais compacta e restritiva, porém cobre os casos mais comuns. Aceita como nome-local uma ou mais palavras separadas por ponto ([\w-]+(\.[\w-]+)*), onde cada palavra é definida por [\w-]+ permitindo assim letra, dígito, sublinhado e hífen. Também limita o tamanho de nomes de domínio entre 2 e 63 caracteres apenas com letras, dígitos, sublinhado e hífen: [\w-]{2,63}.
   3. Restrito — ReEmail3 é uma variação da ReEmail2, mas força nomes de domínio entre 2 e 63 caracteres, deixa de usar a seqüência \w para não permitir o sublinhado e garante que não há hífen nem na primeira nem na última posição, conforme RFC 1034/1035. O resultado é o seguinte para representar um nome de domínio: [A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d].
*/

valida.regEmail[1] = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
valida.regEmail[2] = /^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
valida.regEmail[3] = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;

/*
   1. Horário HH:MM simples — aceita dois pares de dois dígitos separados por dois-pontos (:); pode ser usado para hora:minutos ou ainda para minutos:segundos, porém não valida as faixas de valor válidos para os dígitos, aceitando assim qualquer valor entre 00 e 99.
   2. Horário HH:MM 24h — aceita horas na faixa 00-23 e minutos 00-59, separados por dois-pontos.
   3. Horário HH:MM 12h — aceita horas na faixa 01-12 e minutos 00-59, separados por dois-pontos.
   4. Tempo horas:MM:SS — aceita qualquer quantidade de horas (0 ou mais, um ou mais dígitos), minutos 00-59 e segundos 00-59, todos separados por dois-pontos.
   5. Tempo horas:MM:SS.mili — similar ao anterior, porém inclui 3 dígitos finais para milisegundos 000-999, separados dos anteriores por ponto (.).
*/

valida.regTime[1] = /^\d{2}:\d{2}$/;
valida.regTime[2] = /^([0-1]\d|2[0-3]):[0-5]\d$/;
valida.regTime[3] = /^(0[1-9]|1[0-2]):[0-5]\d$/;
valida.regTime[4] = /^\d+:[0-5]\d:[0-5]\d$/;
valida.regTime[5] = /^\d+:[0-5]\d:[0-5]\.\d{3}\d$/;


/* 1. Simples — valida apenas o uso de dígitos, nas posições e quantidade certas: 1 a 2 dígitos para dia e para mês, 1 a 4 dígitos para ano.
   2. Média — testa os dígitos possíveis em cada posição: o primeiro dígito do dia, se houver, deve ser de 0 a 3 ([0-3]?\d); o primeiro dígito do mês, se houver, deve ser 0 ou 1 ([01]?\d); passamos a aceitar apenas 2 ou 4 dígitos para o ano.
   3. Avançada — garante as faixas de valores corretas para dias 1 a 31 ((0?[1-9]|[12]\d|3[01])) e meses 1 a 12 ((0?[1-9]|1[0-2])). E aqui optamos por forçar os 2 primeiros dígitos do ano (correspondentes ao século), quando fornecidos, a serem 19 ou 20 ((19|20)?\d{2}).
   4. Completa — valida os dias permitidos de acordo com o mês. Para este último, foram criados três grupos alternativos de pares dia/mês:
          * Os dias 1 a 29 ((0?[1-9]|[12]\d)) são aceitos em todos os meses (1 a 12): (0?[1-9]|1[0-2])
          * Dia 30 é válido em todos os meses, exceto fevereiro (02): (0?[13-9]|1[0-2])
          * Dia 31 é permitido em janeiro (01), março (03), maio (05), julho (07), agosto (08), outubro (10) e dezembro (12): (0?[13578]|1[02]).
   5. Tradicional — data no formato DD/MM/AAAA, basicamente é a data Completa, porém sem a opcionalidade do zero à esquerda no dia ou mês menor que 10 e sem a opcionalidade e verificação de século no ano, aceitando qualquer seqüência de 4 dígitos (\d{4}) como ano.
*/

valida.regData[1] = /^\d{1,2}\/\d{1,2}\/\d{1,4}$/;
valida.regData[2] = /^[0-3]?\d\/[01]?\d\/(\d{2}|\d{4})$/;
valida.regData[3] = /^(0?[1-9]|[12]\d|3[01])\/(0?[1-9]|1[0-2])\/(19|20)?\d{2}$/;
valida.regData[4] = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
valida.regData[5] = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;


valida.regMoeda = /^\d{1,3}(\.\d{3})*\,\d{2}$/;

valida.regDigito = /^\d+$/;

valida.regDecimal['Pt'] = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
valida.regDecimal['En'] = /^[+-]?((\d+|\d{1,3}(\,\d{3})+)(\.\d*)?|\.\d+)$/;

valida.regNumero = /[~a-zA-Z_]/;

valida.regCep = /^[0-9]{5}-[0-9]{3}$/;

valida.Email = function( EmailString , Nivel ){
	return EmailString.trim().match( this.regEmail[Nivel] );	
}

valida.Time = function( TimeString , Nivel ){
	return TimeString.trim().match( this.regTime[Nivel] );	
}

valida.Data = function( DataString , Nivel ){
	return DataString.trim().match( this.regData[Nivel] );	
}

valida.Decimal = function( DecimalString , Lingua ){
	return DecimalString.trim().match( this.regDecimal[Lingua] );	
}

valida.Digito = function( DigitoString ){
	return DigitoString.trim().match( this.regDigito );	
}

valida.Moeda = function( MoedaString ){
	return MoedaString.trim().match( this.regMoeda );	
}

valida.Numero = function( NumeroString )
{	
	
	if(NumeroString == ""){
		return false;	
	}
	
	return !NumeroString.trim().match( this.regNumero );
}

valida.CnpjCpf = function( Campo , tipo )
{
	var val = Campo.value;
	var base = val.substring(0, val.length-2);
	
	if ( tipo == "CNPJ" ){
		return isCnpj(val);
	}else{
		return isCpf(val);
	
	}
	return false;
}

valida.formatCpfCnpj = function( Campo , tipo )
{	
	if(tipo=="CPF"){
		Campo.value = formatCpfCnpj(Campo.value, true);
	}else{
		Campo.value = formatCpfCnpj(Campo.value, true, true);	
	}
}

valida.CEP = function( CepString ){
	return CepString.match( valida.regCep );
}


valida.DataNascimento = function( DataNascimento ){
	reNasci  = /(\d{2})(\d{2})(\d{4})$/;	
	Data = unformatNumber(DataNascimento.value);	
	DataNascimento.value = Data.lpad(8,'0').replace(reNasci, "$1/$2/$3");
}

