/**
  * Função que valida CPF
  * @param String $s CPF
  * @return boolean
  **/
function validaCpf(s) {
	if(s != "") {
		var cpf = s.replace(/\D/g,'');
		if (
			cpf == '00000000000' ||
			cpf == '11111111111' ||
			cpf == '22222222222' ||
			cpf == '33333333333' ||
			cpf == '44444444444' ||
			cpf == '55555555555' ||
			cpf == '66666666666' ||
			cpf == '77777777777' ||
			cpf == '88888888888' ||
			cpf == '99999999999' ||
			cpf.length != 11)
		{
			return false;
		}
		
		var soma = 0;
		for ( var i = 10 ; i > 1; i--) {
			soma += cpf.charAt(10 - i) * i;			
		}
		d1 = (soma % 11 < 2) ? 0 : (11 - (soma % 11));
		if (d1 != cpf.charAt(9)) {
			return false;
		}
		soma = 0;
		for ($i=11 ; $i>1; $i--) {
			soma += cpf.charAt(11 - i) * i;
		}
		d2 = (soma % 11 < 2) ? 0 : (11 - (soma % 11) );
		if (d2 != cpf.charAt(10)) {
			return false;
		}
		return true;
	}
}

/**
  * Função que valida o CNPJ
  * @param String $value CNPJ
  * @return int status da validação
  **/
function validaCnpj(valor) {
	var cnpj = new Array();
	cnpj = valor;		
	var tam = cnpj.length;
	/**
	  * blacklist cnpj
	  **/		
	if (
		cnpj == '00000000000000' || 
		cnpj == '11111111111111' || 
		cnpj == '22222222222222' || 
		cnpj == '33333333333333' || 
		cnpj == '44444444444444' || 
		cnpj == '55555555555555' || 
		cnpj == '66666666666666' || 
		cnpj == '77777777777777' || 
		cnpj == '88888888888888' || 
		cnpj == '99999999999999' ||
		tam != 14 ) 
	{
		return false;
	}	
	var soma = 0;
	soma += (cnpj.charAt(0) * 5);
	soma += (cnpj.charAt(1) * 4);
	soma += (cnpj.charAt(2) * 3);
	soma += (cnpj.charAt(3) * 2);
	soma += (cnpj.charAt(4) * 9);
	soma += (cnpj.charAt(5) * 8);
	soma += (cnpj.charAt(6) * 7);
	soma += (cnpj.charAt(7) * 6);
	soma += (cnpj.charAt(8) * 5);
	soma += (cnpj.charAt(9) * 4);
	soma += (cnpj.charAt(10) * 3);
	soma += (cnpj.charAt(11) * 2);
	var d1 = soma % 11;
	d1 = d1 < 2 ? 0 : 11 - d1;
	if(cnpj.charAt(12) != d1){	
		return false;
	}
	var soma = 0;
	soma += (cnpj.charAt(0) * 6);
	soma += (cnpj.charAt(1) * 5);
	soma += (cnpj.charAt(2) * 4);
	soma += (cnpj.charAt(3) * 3);
	soma += (cnpj.charAt(4) * 2);
	soma += (cnpj.charAt(5) * 9);
	soma += (cnpj.charAt(6) * 8);
	soma += (cnpj.charAt(7) * 7);
	soma += (cnpj.charAt(8) * 6);
	soma += (cnpj.charAt(9) * 5);
	soma += (cnpj.charAt(10) * 4);
	soma += (cnpj.charAt(11) * 3);
	soma += (cnpj.charAt(12) * 2);
	var d2 = soma % 11;
	d2 = d2 < 2 ? 0 : 11 - d2;
	if (cnpj.charAt(13) != d2){
		return false;
	}
	return true;
}	

/**
  * Função que valida CEP
  * @param String $cep CEP
  * @return boolean
  **/
function validaCep(cep) {
	if(cep != "") {
		expressao = /^[0-9]{5}-[0-9]{3}$/;
		if(!expressao.test(cep)) {
			return false;
		}
		if(!cep.length == 9) {
			return false;
		}
		return true;
	}
}

/**
  * Função que valida o e-mail
  * @param String $value e-mail
  * @return boolean
  **/
function validaEmail(value) {
	expressao = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i;
    if(!expressao.test(value)) {
        return false;
    }
    return true;
}

/**
  * Função que valida o fone
  * @param String $value fone
  * @return boolean
  **/
function validaFone(value){
    if(value != "") {
		expressao = /^\([0-9]{2}\)[0-9]{4}-[0-9]{4}$/;
		if(!expressao.test(value)) {
			return false;
		}
        if(!value.length == 13) {
			return false;
		}
		return true;
	}
}

/**
  * Função que valida a data
  * @param String $value data
  * @return boolean
  **/
function validaData(campo) {
    var valor = campo.split("/");
    if(valor[0] != "" && valor[1] != "" && valor[2] != "") {
        data = new Date(valor[2], valor[1]-1, valor[0]);
        if (valor[2] != data.getFullYear() || valor[1] !=  data.getMonth()+1 || valor[0] != data.getDate() || valor[2] < 1902 || valor[2] > 2037) {
            return false;
        }
    }
    return true;
}
