// ----------------------------------------------------------------------------------------------------------
// funcoes da versao 2.0
// validacoes em tempo real

// valida campo em tempo real
function validaCampoTR(campo,qtd){
	campo.style.borderColor = (campo.value.length < qtd  ? "red" : "white");
}

// valida o email em tempo real
function validaEmailTR(campo){
	campo.style.borderColor = (!validarEmail(campo.value) ? "red" : "white");
}

// ----------------------------------------------------------------------------------------------------------
// valida o formulario

function validarCampo(campo,qtd){
	texto = " Campo obrigatório";
	
	if(campo.value.length < qtd){
		showMsgErro(campo,1,texto);
		marcarCampo(campo,1);
		return false;
	} else {
		showMsgErro(campo,0);
		marcarCampo(campo,0);
		return true;
	}
}


function validarCampo2(campo,qtd){
	if(campo.value.length < qtd){
		return false;
	} else {
		return true;
	}
}

function showMsgErro(campo,mostrar,texto){

	if(mostrar){
		if(texto == "") texto = " Campo obrigatório";
		//document.getElementById("req_"+campo.name).innerHTML = "<font color='red'>"+texto+"</a>";
		document.getElementById("req_"+campo.name).innerHTML = texto;
	} else {
		if(!texto) texto = " *";
		document.getElementById("req_"+campo.name).innerHTML = texto;
	}
}

function marcarCampo(campo,marcar){
	if(marcar)	campo.className = campo.className.replace("-req","") +"-req";
	else		campo.className = campo.className.replace("-req","");
}


// ----------------------------------------------------------------------------------------------------------
// funcoes para mascaras

function mascaraCEP(campo,event){
    return formataCampo(campo,'00000-000', event);
}

function mascaraCNPJ(campo,event){
    return formataCampo(campo,'00.000.000/0000-00', event);
}

//formata de forma generica os campos
function formataCampo(campo, mascara, evento) {
    var boleanoMascara;
    
    var digitado = evento.keyCode;
    exp = /\-|\.|\/|\(|\)| /g
    campoSoNumeros = campo.value.toString().replace( exp, "" );
  
    var posicaoCampo = 0;    
    var novoValorCampo="";
    var tamanhoMascara = campoSoNumeros.length;;
    
    if (digitado != 8) { // backspace
        for(i=0; i<= tamanhoMascara; i++) {
            boleanoMascara  = ((mascara.charAt(i) == "-") || (mascara.charAt(i) == ".")
                                || (mascara.charAt(i) == "/"))
            boleanoMascara  = boleanoMascara || ((mascara.charAt(i) == "(")
                                || (mascara.charAt(i) == ")") || (mascara.charAt(i) == " "))
            if (boleanoMascara) {
                novoValorCampo += mascara.charAt(i);
                  tamanhoMascara++;
            }else {
                novoValorCampo += campoSoNumeros.charAt(posicaoCampo);
                posicaoCampo++;
              }           
          }    
        campo.value = novoValorCampo;
        return true;
    }else {
        return true;
    }
}
// ----------------------------------------------------------------------------------------------------------
// funcoes genericas

function abrir(pagina,apelido,largura,altura,barra){
	if(barra) scrollbars = "yes";
	else scrollbars = "no";

	config="toolbar=no,location=no,width="+largura+",height="+altura+",status=no,menubar=no,scrollbars="+scrollbars+",resizable=no,top=10,left=10";
	pop=window.open(pagina,apelido,config);
}


function validarCep(evt,obj){
	cep = obj.value;
	var charCode = (evt.which) ? evt.which : evt.keyCode

	if(charCode != 8){
		if((cep.length == 5)){
			cep+="-";
		}
	}
	return(cep);
}

/**
 * formata campo de data
 *
 * @param: event
 * @param: object
 * @return: data formatada
 */
function validaData(evt,obj){
	data = obj.value;
	var charCode = (evt.which) ? evt.which : evt.keyCode

	//if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 45) {
    //    return(data);
	//} else {
		if(charCode != 8){
			if((data.length == 2) || (data.length == 5)){
				data+="/";
			} else if(data.length == 3){
				if (data.indexOf("/") == -1){
					data = data.substring(0,2) + "/" + data.substring(2,3);
				}
			} else if(data.length == 6){
				if(data.substring(5,6) != "/"){
					data = data.substring(0,5) + "/" + data.substring(5,6);
				}
			}
		}
	//}
	return(data);
}

/**
 * avancar para o proximo campo quando o conteudo do mesmo chegar a qtd de caracteres
 * informada
 *
 * @param: campo atual (objeto)
 * @param: proximo campo
 * @param: qtd de caracteres
 */
function avancar(evt,obj,proximo,qtd){
  	var charCode = (evt.which) ? evt.which : evt.keyCode
  	// se for diferente de tabulacao e de shift
    if((charCode != 9) && (charCode != 16)){
        if(obj.value.length >= qtd){
            eval("document.form."+proximo+".focus();");
        }
    }
}

/**
 * checa se esta sendo digitado somente numeros
 *
 * @param: event
 * @return:
 */
function somenteNumero(evt){
	evt = (evt) ? evt : window.event
	var charCode = (evt.which) ? evt.which : evt.keyCode

	/*	
	if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 45
		&& charCode != 37
		&& charCode != 39
		&& charCode != 46
	) {
	*/
	if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 45) {	
		status = "Este campo aceita somente números."
		return false
	}
	status = ""
	return true
}

/**
 * checa qual o browser usado
 *
 * modelo de como usar:
 *
 * if (checaBrowser('konqueror')){
	browser = "Konqueror";
	OS = "Linux";
 * }
 * else if (checaBrowser('firefox')) browser = "Firefox"
 * else if (checaBrowser('safari')) browser = "Safari"
 * else if (checaBrowser('omniweb')) browser = "OmniWeb"
 * else if (checaBrowser('opera')) browser = "Opera"
 * else if (checaBrowser('webtv')) browser = "WebTV";
 * else if (checaBrowser('icab')) browser = "iCab"
 * else if (checaBrowser('msie')) browser = "Internet Explorer"
 * else if (!checaBrowser('compatible')){
 * 	browser = "Netscape Navigator"
 * 	version = detect.charAt(8);
 * }
 * else browser = "An unknown browser";
 */
function checaBrowser(string){
    var detect = navigator.userAgent.toLowerCase();
    var OS,browser,total,thestring;
    var version = 0;
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}


function validarDataFormato(d){
	var reData = /(\d{2})\/(\d{2})\/(\d{4})/;
	var datePart = d.match(reData); // datePartconterá [0]=dia, [1]=mes e [2]=ano

	if(datePart == null){
		//alert("Data Invalida");
		return false;
	}
	// passando as partes da data para variáveis mais "amigáveis":
	var dd = datePart[1], mm = datePart[2], yy = datePart[3];

	//condições de datas inválidas:
	// dia menor que 1 ou maior que 31
	if (dd<1) { return false;}

	// mes fora dos limites
	if (mm<1 || mm>12) { return false;}

	// validacoes com o ano

	if(yy < 1) { return false;}
	if(yy.length != 4) { return false; }


	// meses 4,6,9,11 nao possuem mais de 30 dias
	if ((dd > 30) && (mm == 4)) {return false;}
	if ((dd > 30) && (mm == 6)) {return false;}
	if ((dd > 30) && (mm == 9)) {return false;}
	if ((dd > 30) && (mm == 11)) {return false;}

	if ((dd > 31) && (mm == 1)) {return false;}
	if ((dd > 31) && (mm == 3)) {return false;}
	if ((dd > 31) && (mm == 5)) {return false;}
	if ((dd > 31) && (mm == 7)) {return false;}
	if ((dd > 31) && (mm == 8)) {return false;}
	if ((dd > 31) && (mm == 10)) {return false;}
	if ((dd > 31) && (mm == 12)) {return false;}

	// fevereiro não tem mais de 28 dias, exceto em ano bissexto
	if ((dd > 29) && (mm == 2)) {return false;}
	if ((dd > 28) && (mm == 2) && (!anobissexto(yy) )) {return false;}

	// se passou pelos testes acima, então a data é considerada válida.
	return true;
}

function anobissexto(ano){
 	if (((ano % 4) == 0 && (ano % 100)!=0) || (ano % 400)==0){
 		return true;
	} else {
		return false;
	}
}


// comparaData
// compara duas datas e retorna o status da segunda em relacao a primeira
// recebe:
//	- data inicial
//  - data final
// retorna:
//	- status da segunda em relacao a primeira {menor|igual|maior}
function comparaData(dataIni,dataFim){

	if (dataIni.length > 0) {
		if (dataIni.charAt(2) != '/' || dataIni.charAt(5) != '/') {
			return false;
		}
		var diaInicial = dataIni.substring(0,2);
		var mesInicial = dataIni.substring(3,5);
		var anoInicial = dataIni.substring(6,10);
	}

	if (dataFim.length > 0) {
		if (dataFim.charAt(2) != '/' || dataFim.charAt(5) != '/') {
			return false;
		}
		var diaFinal = dataFim.substring(0,2);
		var mesFinal = dataFim.substring(3,5);
		var anoFinal = dataFim.substring(6,10);


		if (anoFinal < anoInicial) {
			return("menor");
		}
		else if(anoFinal > anoInicial){
			return("maior");
		}
		else if (anoFinal == anoInicial) {
			if(mesFinal > mesInicial){
				return("maior");
			}
			else if (mesFinal < mesInicial) {
				return("menor");
			}
			else if (mesFinal == mesInicial){

				if(diaFinal < diaInicial) {
					return("menor");
				}
				else if(diaFinal > diaInicial) {
					return("maior");
				}
				else if(diaFinal == diaInicial) {
					return("igual");
				}
			}
		}
	}
	return("erro");
}


function validaCPF(cpf) {

	cpf = cpf.replace(/\./g,"");
	cpf = cpf.replace(/\-/g,"");

	erro = new String;
	if (cpf.length < 11) erro += "Sao necessarios 11 digitos para verificacao do CPF! ";
	var nonNumbers = /\D/;
	if (nonNumbers.test(cpf)) erro += "A verificacao de CPF suporta apenas numeros! ";
	if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
		erro += "Numero de CPF invalido!"
	}
	var a = [];
	var b = new Number;
	var c = 11;
	for (i=0; i<11; i++){
		a[i] = cpf.charAt(i);
		if (i < 9) b += (a[i] * --c);
	}
	if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
	b = 0;
	c = 11;
	for (y=0; y<10; y++) b += (a[y] * c--);
		if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
		if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
			erro +="Digito verificador com problema!";
		}
	if (erro.length > 0){
		//alert(erro);
		return false;
	}
	return true;
}

function validaCNPJ(CNPJ) {
	erro = new String;
	if (CNPJ.length < 18) erro += "É necessario preencher corretamente o número do CNPJ! ";
	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! ";
	}
	//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(/\./g,"");
		CNPJ = CNPJ.replace(/\-/g,"");
		CNPJ = CNPJ.replace(/\//g,"");
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)) erro += "A verificação de CNPJ suporta apenas números! ";
	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;
	} else {
		//alert("CNPJ valido!");
		return true;
   }
   return true;
}

function validarEmail(email) {
	var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
	if(!(er.test(email))){
		return false;
	} else {
		return true;
	}
}

/**
 * avancar para o proximo campo quando o conteudo do mesmo chegar a qtd de caracteres
 * informada
 *
 * @param: campo atual (objeto)
 * @param: proximo campo
 * @param: qtd de caracteres
 */
function avancar(evt,obj,proximo,qtd){
  	var charCode = (evt.which) ? evt.which : evt.keyCode
  	// se for diferente de tabulacao e de shift
    if((charCode != 9) && (charCode != 16)){
        if(obj.value.length >= qtd){
            eval("document.form1."+proximo+".focus();");
        }
    }
}
