//////////////////////////////////////////////////////////////////////////////////////////
////////						Biblioteca JavaScript							//////////
////////					Webroom Soluções Interativa							//////////
////////						A internet sob Medida							//////////
////////					http://www.webroom.com.br							//////////
////////					email:: webroom@webroom.com.br						//////////
//////////////////////////////////////////////////////////////////////////////////////////
////////				Criado por : Flávio Theruo Kaminisse					//////////
////////					E-Mail : flavio@webroom.com.br						//////////
////////						Data Criação : 28/09/2008						//////////
////////																		//////////
////////				- Compatível com MSIE, Firefox e Opera.					//////////
//////////////////////////////////////////////////////////////////////////////////////////


//Verificando se o que é digitado é somente campos numéricos
function KeyCode(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode;
	if ((charCode < 48 || charCode > 57) && charCode!=8)
	 return false;
	return true;
}



//Validacao de senha.
function validaSenha(campo)
{
  
  if(campo.value.length<6)
  {
     //alert('A senha deve ter no mínimo 6 dígitos !');
     campo.value = "";
     campo.focus();
     return false;
  }

  

  var i; 
  var num = 0, carac = 0;

  for (i = 0; i < campo.value.length; i++)
  {

     var c = campo.value.charAt(i);

     // ha um numero
     if (((c >= "0") && (c <= "9")))
                 num++;

     if (((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")))
                 carac++;
  }

  if (num < 3 || carac == 0)
  {

    // alert("A senha deve conter letras e números (mínimo 3 números) !"); 
     campo.value = "";
     campo.focus(); 
     return false;
  }

  if (/(1234|4321)/.test(campo.value))
  {

    // alert("A senha não pode conter os seqüenciais 1234 ou 4321 !");
     campo.value = "";
     campo.focus();
     return false;
  }

  s = campo.value
  hoje = new Date()
  ano = hoje.getYear()

  for (f=-2; f<=2; f++)
  {

     n = s.indexOf(ano + f,0)

     if (n > -1)
     {
        // alert('Não é permitido colocar o ano como senha !');
         return false;
     }
  }
  return true;
}




//Função responsável por verificar se o campo é igual à máscara
//se for igual, deixo o valor como vazio, caso contrário não faço nada
function trata_valor( campo ) {
	if ( campo.value == WBR_GetDisplayMask(campo,true) )
		campo.value = '';
}



function valida_data(campo_data) {    
	if ( campo_data.value != '' ) {
	    //alert(camp_data.value);
		var date = campo_data.value;
		var array_data = new Array;
		var ExpReg = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[1-3][0-9]{3}$");
		//vetor que contem o dia o mes e o ano
		array_data = date.split("/");
		erro = false;
		//Valido se a data esta no formato dd/mm/yyyy e se o dia tem 2 digitos e esta entre 01 e 31
		//se o mes tem d2 digitos e esta entre 01 e 12 e o ano se tem 4 digitos e esta entre 1000 e 2999
		if(array_data[2] < 1900){
		    erro = true;
		}
		else if ( date.search(ExpReg) == -1 )
			erro = true;
		//Valido os meses que nao tem 31 dias com execao de fevereiro
		else if ( ( ( array_data[1] == 4 ) || ( array_data[1] == 6 ) || ( array_data[1] == 9 ) || ( array_data[1] == 11 ) ) && ( array_data[0] > 30 ) )
			erro = true;
		//Valido o mes de fevereiro
		else if ( array_data[1] == 2 ) {
			//Valido ano que nao e bissexto
			if ( ( array_data[0] > 28 ) && ( ( array_data[2] % 4 ) != 0 ) )
				erro = true;
			//Valido ano bissexto
			if ( ( array_data[0] > 29 ) && ( ( array_data[2] % 4 ) == 0 ) )
				erro = true;
		}
		if ( erro ) {
			return false;
		}
		return true;
	}
}


function valida_email(campo_email) {
	if ( campo_email.value != '' ) {
		//Expressao Regular utilizada para validar o endereco de email
		var ExpReg = /^[a-zA-Z0-9_\.-]{2,}@([A-Za-z0-9_-]{2,}\.)+[A-Za-z]{2,4}$/;
		if ( !ExpReg.test(campo_email.value) ) {
			return false;
		}
		return true;
	}
}

function valida_hora(campo_hora) {
    trata_valor( campo_hora );
	if ( campo_hora.value != '' ) {
		//Expressao Regular utilizada para validar a hora
		var ExpReg = /^([0-1][0-9]|[2][0-3]):[0-5][0-9]$/;
		if ( campo_hora.value.search(ExpReg) == -1 ) {
			campo_hora.focus();
			return false;
		}
		return true;
	}
}

function valida_somente_numero(campo_numero) {
	if ( campo_numero.value != '' ) {
		//Expressao Regular utilizada para validar se o campo possui somente numeros
		var ExpReg = /^\d{0,}$/;
		if ( campo_numero.value.search(ExpReg) == -1 ) {
			return false;
		}
		return true;
	}
}

function valida_telefone(campo_telefone) {
    trata_valor( campo_telefone );
	if ( campo_telefone.value != '' ) {
		//Expressao Regular utilizada para validar o telefone
		var ExpReg = /^\([0-9]{2}\) [0-9]{4}-[0-9]{4}$/;
		if ( campo_telefone.value.search(ExpReg) == -1 ) {
			return false;
		}
		return true;
	}
}

function valida_CEP(campo_cep) {
    //trata_valor( campo_cep );
	if ( campo_cep.value != '' ) {
		//Expressao Regular utilizada para validar o formato do CEP
		var ExpReg = /^\d{2}\.\d{3}-\d{3}$/;
		if ( campo_cep.value.search(ExpReg) == -1 ) {
			campo_cep.focus();
			return false;
		}
		return true;
	}
}

function valida_CPF(campo_cpf) {
    
    //trata_valor( campo_cpf );
	if ( campo_cpf.value != '' ) {
		var soma;
		var multiplicador;
		var dig1 = 0;
		var dig2 = 0;
		var verifica;
		var cpf = campo_cpf.value;
		//Expressao Regular utilizada para validar o formato CPF
		var ExpReg = /^(\d{3}).(\d{3}).(\d{3})-(\d{2})$/;
		
		if ( cpf.search(ExpReg) == -1 ) {
			campo_cpf.focus();
			return false;
		}
		
		//Remover os caracteres diferentes de número
		cpf = cpf.replace("\.","");
		cpf = cpf.replace("\.","");
		cpf = cpf.replace("-","");
		
		
		if(cpf.match("11111111111")!=null)
		{
		    campo_cpf.focus();
		    return false
		}
		else if(cpf.match("22222222222")!=null)
		{
		    campo_cpf.focus();
		    return false
		}
		else if(cpf.match("33333333333")!=null)
		{
		    campo_cpf.focus();
		    return false
		}
		else if(cpf.match("44444444444")!=null)
		{
		    campo_cpf.focus();
		    return false;
		}
		else if(cpf.match("55555555555")!=null)
		{
		    campo_cpf.focus();
		    return false;
		}
		else if(cpf.match("66666666666")!=null)
		{
		    campo_cpf.focus();
		    return false;
		}
		else if(cpf.match("77777777777")!=null)
		{
		    campo_cpf.focus();
		    return false;
		}
		else if(cpf.match("88888888888")!=null)
		{
		    campo_cpf.focus();
		    return false;
		}
		else if(cpf.match("99999999999")!=null)
		{
		    campo_cpf.focus();
		    return false;
		}
		
		verifica = cpf.match("00000000000");
		//Se todos os caracteres sao diferentes de zero
		if ( verifica == null ) {
			//Utilizo o algoritmo de calcular os digitos verificadores do CPF
			//Calculo o primeiro digito verificador
			soma = 0;
			multiplicador = 10;
			for ( i = 0; i < 9; i++ ) {
				soma += parseInt(cpf.substr(i,1) * multiplicador);
				multiplicador--;
			} //Fim do for
			dig1 = parseInt(11 - (soma % 11));
			if ( dig1 == 11 || dig1 == 10 )
				dig1 = 0;
			//Calculo o segundo digito verificador
			soma = 0;
			multiplicador = 11;
			for ( i = 0; i < 10; i++ ) {
				soma += parseInt(cpf.substr(i,1) * multiplicador);
				multiplicador--;
			} //Fim do for
			dig2 = parseInt(11 - (soma % 11));
			if ( dig2 == 11 || dig2 == 10 )
				dig2 = 0;
			//Se os dois digitos nao forem iguais o CPF e invalido
			if ( !( ( dig1 == parseInt(cpf.substr(9,1)) ) && ( dig2 == parseInt(cpf.substr(10,1)) ) ) ) {
				campo_cpf.focus();
				return false;
			} //if
		} //if
		else {
			campo_cpf.focus();
			return false;
		} //Fim do else
		return true;
	}
}

function valida_CNPJ(campo_cnpj) {
	var valor = campo_cnpj.value;
	valor = valor.replace("\.","");
	valor = valor.replace("\.","");
	valor = valor.replace(".","");
	valor = valor.replace("/","");
	valor = valor.replace("-","");
	var erro = false;
	if ( valor. value != '' ) {
		if ( valor.length != 14 )
			erro = true;
		
		var numeros = valor.split('');
	
		var igual = true;
		for ( j = 1; j < 14; j++ ) {
			if ( numeros[j] != numeros[0] ) {
				igual = false;
				break;
			}
		} //Fim do for
			
		if ( igual )
			erro = true;
			
		var soma = 0;
		var fator = 5;
		for ( j = 0; j < 12 ; j++ ) {
			soma += fator * numeros[j];
			fator--;
			if ( fator == 1 )
				fator = 9;
		}
		
		var resultado = soma % 11;
		
		if ( resultado == 1 || resultado == 0 ) {
			if ( numeros[12] != 0 )
				erro = true;
		}
		else {
			if ( numeros[12] != 11 - resultado )
				erro = true;
		}
		
		soma = 0;
		fator = 6;
		for ( j = 0; j < 13 ; j++ ) {
			soma += fator * numeros[j];
			fator--;
			if ( fator == 1 )
				fator=9;
		} //Fim do for
		
		resultado = soma%11;
		
		if ( resultado == 1 || resultado == 0 ) {
			if ( numeros[13] != 0 )
				erro = true;
		}
		else {
			if ( numeros[13] != 11 - resultado )
				erro = true;
		}
		if ( erro == true ) {
			campo_cnpj.focus();
			return false;
		}
		return true;
	}
}

function valida_valor(campo_valor) {
	if ( campo_valor.value != '' ) {
		var valor = campo_valor.value;
		//Expressao regular que garante que o numero nao comece com zero e que siga
		//os padroes do numero que sao apenas digitos e ponto (.) e virgula (,)
		var ExpReg = /^[^0]+[0-9\.,]{0,}$/;
		var count_virgula = 0;
		var count_ponto = 0;
		var coloquei_virgula = false;
		if ( valor.search(ExpReg) == -1 ) {
			campo_valor.focus();
			alert("O Valor não pode iniciar com zero (0)!");
			return false;
		}
		//Utilizo um algoritmo semelhante ao formatacao do numero para validar o campo
		//Iniciando da direita para a esquerda analiso o numero digito a digito
		//sendo que depois de dois digitos tenho que ter uma virgula (,)
		//e depois da virgula de tres em tres digitos tenho que ter um ponto (.)
		for ( i = valor.length - 1; i >= 0; i-- ) {
			if ( count_virgula == 2 && !coloquei_virgula ) {
				coloquei_virgula = true;
			} //if
			if ( count_virgula == 2 && !coloquei_virgula && valor.charAt(i) != "," ) {
				campo_valor.focus();
				alert("Formato Inválido (,)!");
				return false;
			} //if
			if ( count_ponto != 0 && valor.charAt(i) != "." && ( count_ponto % 4 ) == 0 ) {
				if ( !( valor.charAt(i) == "-" && i == 0 ) ) {
					campo_valor.focus();
					alert("Formato Inválido (.)!");
					return false;
				} //if ( !( valor.charAt(i) == "-" && i == 0 ) )
			} //if ( count_ponto != 0 && valor.charAt(i) != "." && ( count_ponto % 4 ) == 0 )
			if ( coloquei_virgula )
				count_ponto++;
			else
				count_virgula++;
		} //Fim do for
		return true;
	} //if ( campo_valor.value != '' )
}

function valida_valor2(campo_valor) {
	var valor = campo_valor.value;
	var ExpReg = /[-+]?[0-9]{1,3}(\.[0-9]{3})?(,[0-9]{2})?/;
	if ( valor.search(ExpReg) == -1 ) {
		alert("Valor inválido!");
		campo_valor.focus();
	}
}



//Função responsável pela validação dos dígitos do cartão
function cartaoValido(st) {
	if ( st.length > 19 )
		return (false);
	
	sum = 0; mul = 1; l = st.length;
	for ( i = 0; i < l; i++ ) {

		digit = st.substring(l-i-1,l-i);
		tproduct = parseInt(digit ,10)*mul;
		if (tproduct >= 10)
			sum += (tproduct % 10) + 1;
		else
			sum += tproduct;
		if (mul == 1)
			mul++;
		else
			mul--;
	} //Fim do for
	
	if ( ( sum % 10 ) == 0 )
		return (true);
	else
		return (false);
}

//Função responsável pela remoção de caracteres diferentes de números
function strip(val) {
	val = "" + val;
	if ( val == null )
		return "";
	var result = "";
	for ( i = 0; i < val.length; i++ ) {
		character = val.charAt(i);
		if ( "0123456789".indexOf(character) != -1 )
			result += character;
	}
	return result;
}

//Função responsável pela validação de números de cartão de crédito
function valida_cartao(campo_cartao) {
	trata_valor( campo_cartao );
	if ( campo_cartao.value != '' ) {
		if ( !cartaoValido(strip(campo_cartao.value)) ) {
			campo_cartao.focus();
			alert("O número do cartão de crédito é inválido");
			return false;
		}
	}
}
