// Funções genéricas
// valida e-mail:
function validaEmail(email){
	return email.search(/(\w[\w\.\+]+)@(.+)\.(\w+)$/)==0;
}
// valida cpf.
// adaptado de: http://forum.imasters.uol.com.br/index.php?showtopic=195915
function validaCPF(cpf){
    var i;
    var soma = soma2 = 0;
    if (!(cpf.match(/^[0-9]{3,3}[.]{0,1}[0-9]{3,3}[.]{0,1}[0-9]{3,3}[-]{0,1}[0-9]{2,2}$/))) {
        return false;
    }
    cpf = retiraCaracter(retiraCaracter(cpf, '.'), '-');
    for(i=0;i<10;i++) {
        if (i<9) {
            soma += cpf.charAt(i) * (10 - i);
        }
        soma2 += cpf.charAt(i) * (11 - i);
    }
    if(((soma % 11) < 2 ? 0 : 11 - (soma  % 11 )) != cpf.charAt(9)) {
        return false;
    }
    return (((soma2 % 11 ) < 2 ? 0 : 11 - (soma2 % 11 )) != cpf.charAt(10)) ? false : true;
}

// função para retirar caracteres
// adaptado de: http://forum.imasters.uol.com.br/index.php?showtopic=195775
function retiraCaracter(string, caracter) {
    var i = 0;
    var final = '';
    while (i < string.length) {
        if (string.charAt(i) == caracter) {
            final += string.substr(0, i);
            string = string.substr(i+1, string.length - (i+1));
            i = 0;
        }
        else {
            i++;
        }
    }
    return final + string;
}

function check_date(DATA) {
	var expReg = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/[1-2][0-9]\d{2})$/;
	var msgErro = 'Formato inválido de data (DD/MM/AAAA).';
	var vdt = new Date();
	var vdia = vdt.getDay();
	var vmes = vdt.getMonth();
	var vano = vdt.getFullYear();
	if ((DATA.value.match(expReg)) && (DATA.value!='')){
		var dia = DATA.value.substring(0,2);
		var mes = DATA.value.substring(3,5);
		var ano = DATA.value.substring(6,10);
		if((mes==04 && dia > 30) || (mes==06 && dia > 30) || (mes==09 && dia > 30) || (mes==11 && dia > 30)){
			alert("Dia incorreto !!! O mês especificado contém no máximo 30 dias.");
//			return false;
		} else{ //1
			if(ano%4!=0 && mes==2 && dia>28){
				alert("Data incorreta!! O mês especificado contém no máximo 28 dias.");
//				return false;
			} else{ //2
				if(ano%4==0 && mes==2 && dia>29){
					alert("Data incorreta!! O mês especificado contém no máximo 29 dias.");
//					return false;
				} else{ //3
					if (ano > vano) {
						alert("Data incorreta!! Ano informado maior que ano atual.");
//						return false;
					}else{ //4
						//alert ("Data correta!");
						return true;
					} //4-else
				} //3-else
			}//2-else
		}//1-else
	} else { //5
		alert(msgErro);
	}
	return false;
}

/*----------------------------------------------------------------------------
Formatação para qualquer mascara
** adaptado de:
http://www.codigofonte.com.br/codigo/js-dhtml/formulario/funcao-para-formatacao-de-mascara-generica
-----------------------------------------------------------------------------*/
function formatar(src, mask){
  var i = src.value.length;
  var saida = mask.substring(0,1);
  var texto = mask.substring(i)
if (texto.substring(0,1) != saida)
  {
    src.value += texto.substring(0,1);
  }
}


// FUNÇÕES PARA MASCARAR CAMPOS:
// adaptado de: http://elcio.com.br/ajax/mascara/
function mascara(o,f){
    v_obj=o
    v_fun=f
    setTimeout("execmascara()",1)
}
function execmascara(){
    v_obj.value=v_fun(v_obj.value)
}

function leech(v){
    v=v.replace(/o/gi,"0")
    v=v.replace(/i/gi,"1")
    v=v.replace(/z/gi,"2")
    v=v.replace(/e/gi,"3")
    v=v.replace(/a/gi,"4")
    v=v.replace(/s/gi,"5")
    v=v.replace(/t/gi,"7")
    return v
}

function soNumeros(v){
    return v.replace(/\D/g,"")
}

function mtelefone(v){
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}

function mtelefone2(v){
    v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
    v=v.replace(/^(\d\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos TRÊS primeiros dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}

function mcpf(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
                                             //de novo (para o segundo bloco de números)
    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
    return v
}

function mcep(v){
    v=v.replace(/\D/g,"")                //Remove tudo o que não é dígito
    v=v.replace(/^(\d{5})(\d)/,"$1-$2") //Esse é tão fácil que não merece explicações
    return v
}

function mcnpj(v){
    v=v.replace(/\D/g,"")                           //Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/,"$1.$2")             //Coloca ponto entre o segundo e o terceiro dígitos
    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") //Coloca ponto entre o quinto e o sexto dígitos
    v=v.replace(/\.(\d{3})(\d)/,".$1/$2")           //Coloca uma barra entre o oitavo e o nono dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")              //Coloca um hífen depois do bloco de quatro dígitos
    return v
}

function mromanos(v){
    v=v.toUpperCase()             //Maiúsculas
    v=v.replace(/[^IVXLCDM]/g,"") //Remove tudo o que não for I, V, X, L, C, D ou M
    //Essa é complicada! Copiei daqui: http://www.diveintopython.org/refactoring/refactoring.html
    while(v.replace(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"")!="")
        v=v.replace(/.$/,"")
    return v
}

function mdata(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca uma barra entre o segundo e o terceiro dígitos
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca uma barra entre o quarto  e o quinto dígitos
                                             //de novo (para o segundo bloco de números)
    return v
}

function msite(v){
    //Esse sem comentarios para que você entenda sozinho ;-)
    v=v.replace(/^http:\/\/?/,"")
    dominio=v
    caminho=""
    if(v.indexOf("/")>-1)
        dominio=v.split("/")[0]
        caminho=v.replace(/[^\/]*/,"")
    dominio=dominio.replace(/[^\w\.\+-:@]/g,"")
    caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"")
    caminho=caminho.replace(/([\?&])=/,"$1")
    if(caminho!="")dominio=dominio.replace(/\.+$/,"")
    v="http://"+dominio+caminho
    return v
}
// FIM ---> FUNÇÕES PARA MASCARAR CAMPOS:

// Função para codificar uma string:
function URLencode(sStr) {
    return scape(sStr).
             replace(/\+/g, '%2B').
             replace(/\”/g,'%22').
             replace(/\’/g, '%27').
             replace(/\//g,'%2F');
}

// Script para validar o formulário de pessoa física.
function validaformPessoaFisica(f) {
	if (f.nome.value == '') {
		alert("Informe o nome.");
		f.nome.focus();
		return false
	}
/*	if (!validaCPF(f.cpf.value)) {
		alert("CPF inválido.");
		f.cpf.focus();
		return false
	}*/
	if (f.nascimento.value == '') {
		alert("Data inválida.");
		f.nascimento.focus();
		return false
	}
	if (f.sexo.value == '0') {
		alert("Selecione o sexo.");
		f.sexo.focus();
		return false
	}
	if (f.estado.value == '0') {
		alert("Selecione o estado.");
		f.estado.focus();
		return false
	}
	if (f.cidade.value == '') {
		alert("Informe o nome da cidade.");
		f.cidade.focus();
		return false
	}
	if (f.bairro.value == '') {
		alert("Informe o nome do bairro.");
		f.bairro.focus();
		return false
	}
	if (f.endereco.value == '') {
		alert("Informe o endereço.");
		f.endereco.focus();
		return false
	}
	if (f.numero.value == '') {
		alert("Informe o numero do endereço.");
		f.numero.focus();
		return false
	}
	if (f.cep.value == '') {
		alert("Informe o cep.");
		f.cep.focus();
		return false
	}
	if (f.telefone.value == '') {
		alert("Informe o número do telefone para contato.");
		f.telefone.focus();
		return false
	}
	if (!validaEmail(f.email.value)) {
		alert("E-mail inválido.");
		f.email.focus();
		return false
	}
	if (f.perfil.value == '0') {
		alert("Selecione o perfil.");
		f.perfil.focus();
		return false
	}
	if (f.senha.value != '') {
		if (f.senha.value.length < 4) {
			alert("Senha deve possuir pelo menos quatro caracteres.");
			f.senha.focus();
			return false
		}
		if (f.conf_senha.value != f.senha.value) {
			alert("As senhas informadas não conferem.");
			f.conf_senha.focus();
			return false
		}	
	} else {
		if (f.senha.value == '') {
		alert("Informe a senha.");
		f.senha.focus();
		return false
	}
	}

	f.telefone.value = soNumeros(f.telefone.value);
	//f.cpf.value = soNumeros(f.cpf.value);
	f.cep.value = soNumeros(f.cep.value);
	return true;
}

// Script para validar o formulário de pessoa juridica.
function validaformPessoaJuridica(f) {
	if (f.nome.value == '') {
		alert("Informe o nome.");
		f.nome.focus();
		return false
	}
	if (f.razao.value == '') {
		alert("Informe a razão social.");
		f.razao.focus();
		return false
	}
	/*if (f.cnpj.value == '') {
		alert("Informe o CNPJ.");
		f.cnpj.focus();
		return false
	}*/
	if (f.responsavel.value == '') {
		alert("Informe o nome do Responsável.");
		f.responsavel.focus();
		return false
	}
	if (f.estado.value == '0') {
		alert("Selecione o estado.");
		f.estado.focus();
		return false
	}
	if (f.cidade.value == '') {
		alert("Informe o nome da cidade.");
		f.cidade.focus();
		return false
	}
	if (f.bairro.value == '') {
		alert("Informe o nome do bairro.");
		f.bairro.focus();
		return false
	}
	if (f.endereco.value == '') {
		alert("Informe o endereço.");
		f.endereco.focus();
		return false
	}
	if (f.numero.value == '') {
		alert("Informe o numero do endereço.");
		f.numero.focus();
		return false
	}
	if (f.cep.value == '') {
		alert("Informe o cep.");
		f.cep.focus();
		return false
	}
	if (f.telefone.value == '') {
		alert("Informe o número do telefone para contato.");
		f.telefone.focus();
		return false
	}
	if (!validaEmail(f.email.value)) {
		alert("E-mail inválido.");
		f.email.focus();
		return false
	}
	if (f.perfil.value == '0') {
		alert("Selecione o perfil.");
		f.perfil.focus();
		return false
	}
	if (f.senha.value != '') {
		if (f.senha.value.length < 4) {
			alert("Senha deve possuir pelo menos quatro caracteres.");
			f.senha.focus();
			return false
		}
		if (f.conf_senha.value != f.senha.value) {
			alert("As senhas informadas não conferem.");
			f.conf_senha.focus();
			return false
		}	
	} else {
		if (f.senha.value == '') {
		alert("Informe a senha.");
		f.senha.focus();
		return false
	}
	}

	f.telefone.value = soNumeros(f.telefone.value);
	//f.cnpj.value = soNumeros(f.cnpj.value);
	f.cep.value = soNumeros(f.cep.value);
	return true;
}
// Script para validar o formulário de cnpj.
	function validaformCNPJ(f) {
		CNPJ = f.cnpjcpf.value;
		erro = new String;
		if (CNPJ.length < 18) erro += "É necessario preencher corretamente o número do CNPJ! \n\n";
    	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
        if (erro.length == 0) erro += "É necessário preencher corretamente o número do CNPJ! \n\n";
        }
        //substituir os caracteres que não são números
        if(document.layers && parseInt(navigator.appVersion) == 4){
        	x = CNPJ.substring(0,2);
            x += CNPJ. substring (3,6);
            x += CNPJ. substring (7,10);
            x += CNPJ. substring (11,15);
            x += CNPJ. substring (16,18);
            CNPJ = x;
       	} else {
            CNPJ = CNPJ. replace (".","");
            CNPJ = CNPJ. replace (".","");
            CNPJ = CNPJ. replace ("-","");
            CNPJ = CNPJ. replace ("/","");
        }
            var nonNumbers = /\D/;
            if (nonNumbers.test(CNPJ)) erro += "A verificação de CNPJ suporta apenas números! \n\n";
            var a = [];
            var b = new Number;
            var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
            for (i=0; i<12; i++){
            	a[i] = CNPJ.charAt(i);
                b += a[i] * c[i+1];
			}
            if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
            b = 0;
            for (y=0; y<13; y++) {
                b += (a[y] * c[y]);
            }
            if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
            if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
                erro +="Dígito verificador com problema!";
            }
            if (erro.length > 0){
                alert(erro);
                return false;
            }
	f.cnpjcpf.value = soNumeros(f.cnpjcpf.value);
    return true;
}
/*
	function validaformCNPJ(f) {
	if (f.cnpjcpf.value == '') {
		alert("Informe o CNPJ.");
		f.cnpjcpf.focus();
		return false
	}
	f.cnpjcpf.value = soNumeros(f.cnpjcpf.value);
	return true;
}*/

// Script para validar o formulário de cpf.
function validaformCPF(f) {
	if (!validaCPF(f.cnpjcpf.value)) {
		alert("CPF inválido.");
		f.cnpjcpf.focus();
		return false
	}
	f.cnpjcpf.value = soNumeros(f.cnpjcpf.value);
	return true;
}
