function mascaraGeral(objeto, sMask, evtKeyPress)
{
    var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

    if(document.all) { // Internet Explorer
        nTecla = evtKeyPress.keyCode;
    } else if(document.layers) { // Nestcape
        nTecla = evtKeyPress.which;
    } else {
        nTecla = evtKeyPress.which;
        if (nTecla == 8) {
            return true;
        }
    }
    sValue = objeto.value;

    // Limpa todos os caracteres de formatação que
    // já estiverem no campo.
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( ":", "" );
    sValue = sValue.toString().replace( ":", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( " ", "" );
    sValue = sValue.toString().replace( " ", "" );
    fldLen = sValue.length;
    mskLen = sMask.length;

    i = 0;
    nCount = 0;
    sCod = "";
    mskLen = fldLen;

    while (i <= mskLen) {
      bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/") || (sMask.charAt(i) == ":"))
      bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

      if (bolMask) {
        sCod += sMask.charAt(i);
        mskLen++;}
      else {
        sCod += sValue.charAt(nCount);
        nCount++;
      }

      i++;
    }

    objeto.value = sCod;

    if (nTecla != 8) { // backspace
      if (sMask.charAt(i-1) == "9") { // apenas números...
        return ((nTecla > 47) && (nTecla < 58));}
      else { // qualquer caracter...
        return true;
      }
    }
    else {
      return true;
    }
}
function somenteNumeros(valor){
	valor.value = valor.value.replace(/\D/g,"");
	return valor;
}
function formataData(val)
{
   	var pass = val.value;
	var expr = /[0123456789]/;

	for(i=0; i<pass.length; i++){
		// charAt -> retorna o caractere posicionado no índice especificado
		var lchar = val.value.charAt(i);
		var nchar = val.value.charAt(i+1);

		if(i==0){
		   // search -> retorna um valor inteiro, indicando a posição do inicio da primeira
		   // ocorrência de expReg dentro de instStr. Se nenhuma ocorrencia for encontrada o método retornara -1
		   // instStr.search(expReg);
		   if ((lchar.search(expr) != 0) || (lchar>3)){
			  val.value = "";
		   }

		}else if(i==1){

			   if(lchar.search(expr) != 0){
				  // substring(indice1,indice2)
				  // indice1, indice2 -> será usado para delimitar a string
				  var tst1 = val.value.substring(0,(i));
				  val.value = tst1;
 				  continue;
			   }

			   if ((nchar != '/') && (nchar != '')){
				 	var tst1 = val.value.substring(0, (i)+1);

					if(nchar.search(expr) != 0)
						var tst2 = val.value.substring(i+2, pass.length);
					else
						var tst2 = val.value.substring(i+1, pass.length);

					val.value = tst1 + '/' + tst2;
			   }

		 }else if(i==4){

				if(lchar.search(expr) != 0){
					var tst1 = val.value.substring(0, (i));
					val.value = tst1;
					continue;
				}

				if	((nchar != '/') && (nchar != '')){
					var tst1 = val.value.substring(0, (i)+1);

					if(nchar.search(expr) != 0)
						var tst2 = val.value.substring(i+2, pass.length);
					else
						var tst2 = val.value.substring(i+1, pass.length);

					val.value = tst1 + '/' + tst2;
				}
   		  }

		  if(i>=6){
			  if(lchar.search(expr) != 0) {
					var tst1 = val.value.substring(0, (i));
					val.value = tst1;
			  }
		  }
	 }

     if(pass.length>10)
		val.value = val.value.substring(0, 10);
	 	return true;
}
function validaData(str) {
	if(str.value == ""){
		return false;
		exit();
	}
	dia = (str.value.substring(0,2));
    mes = (str.value.substring(3,5));
	ano = (str.value.substring(6,10));
	cons = true;

	// verifica se foram digitados números
	if (isNaN(dia) || isNaN(mes) || isNaN(ano)){
		alert("Preencha a data somente com números.");
		str.value = "";
		str.focus();
		return false;
	}

    // verifica o dia valido para cada mes
    if ((dia < 01)||(dia < 01 || dia > 30) &&
		(mes == 04 || mes == 06 ||  mes == 09 || mes == 11 ) ||  dia > 31) {
    	cons = false;
	}

	// verifica se o mes e valido
	if (mes < 01 || mes > 12 ) {
		cons = false;
	}

	// verifica se e ano bissexto
	if (mes == 2 && ( dia < 01 || dia > 29 ||
	   ( dia > 28 &&
	   (parseInt(ano / 4) != ano / 4)))) {
		cons = false;
	}

	if (cons == false) {
		alert("Data inserida incorreta: " + str.value);
		str.value = "";
		str.focus();
		return false;
	}
}
function mascaraHora(obj)
{
    dtH = obj.value;
    dtH=dtH.replace(/\D/g,"")  //permite digitar apenas números
    dtH=dtH.replace(/[0-9]{5}/,"")   //limita pra máximo 11:11
    dtH=dtH.replace(/(\d{2})(\d{1})/,"$1:$2")
    obj.value = dtH;
}
function validaHora(horario) {
	var hora, min;

	var cons = true;
	if(!horario.value)
		return false;

    if (!(horario.value.match(/^[0-9]{2,2}[:]{0,1}[0-9]{2,2}$/))) {
    	alert("Hora inserida incorreta: " + horario.value + " preencher no formato: HH:MM");
        cons = false;
    }
    horario_tmp = retiraCaracter(horario.value, ':');
    hora = parseInt(horario_tmp.substr(0,2));
    min = parseInt(horario_tmp.substr(2,2));

    if ((hora < 0) || (hora >24)) {
    	cons = false;
    }
    if ((min < 0) || (min >59)) {
        cons = false;
    }
    if(cons == false) {
    	alert("Hora inserida incorreta: " + hora + ":" + min);
        horario.value='';
    	horario.focus();
        return false;
     }

}
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 formataReais(valor) {
   var len = 15;
   var n   = '__0123456789';
   var d   = valor.value;
   var l   = d.length;
   var r   = '';

   if (l > 0) {
    s='';
    a=2;

    for (i=0; i < l; i++) {
        c=d.charAt(i);
        if (n.indexOf(c) > a) {
            a=1;
            s+=c;
        }
    }

    l=s.length;
    t=len-1;

    if (l > t) {
        l=t;
    }
    if (l > 2) {
       r=s.substr(0,l-2)+','+s.substr(l-2,2);
    }
    else {
            r='0,'+s;
    }
    if (r == ''){
        r='0,00';
    }
    else {
        l=r.length;
        if (l > 6) {
            j=l%3;
            w=r.substr(0,j);
            wa=r.substr(j,l-j-6);
            wb=r.substr(l-6,6);
            if (j > 0) {
                w+='.';
            }
            k=(l-j)/3-2;
            for (i=0; i < k; i++){
                w+=wa.substr(i*3,3)+'.';
            }
            r=w+wb;
        }
    }
   }
   if (r.length <= len){
    valor.value=r;
   }
   else {
	valor.value=z;
   }
   return;
}
function validaCpf(cpf){
    var cons = true;
    var cpf2 = cpf.value.replace(/\D+/g, '');

	if(!cpf2)
		return false;

    var c = cpf2.substr(0,9);
    var dv = cpf2.substr(9,2);
    var d1 = 0;
    var i;

    for (i = 0; i < 9; i++) {
        d1 += c.charAt(i)*(10-i);
    }
    if (d1 == 0){
        cons = false;
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9)
        d1 = 0;
    if (dv.charAt(0) != d1) {
        cons= false;
    }
    d1 *= 2;
    for (i = 0; i < 9; i++) {
        d1 += c.charAt(i)*(11-i);
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9)
        d1 = 0;
    if (dv.charAt(1) != d1) {
        cons = false;
    }
    if(cons == false) {
        alert("CPF Inválido!");
        cpf.value = "";
        cpf.focus();
        return false;
    }
    return true;
}

function validaEmailOLD(obj){
  var txt = obj.value;

  if ((txt.length != 0) && ((txt.indexOf("@") < 1) || (txt.indexOf('.') < 7))) {
    alert('E-mail incorreto!');
    obj.value = '';
	obj.focus();
	return false;
  }
}

/**
 * A função recebe tanto uma string, como o objeto do campo que você quer validar.
 * retorna false se for um email inválido
 * @param obj - Objeto
 **/
function validaEmail(obj){
    
    if(obj.value.length <= 0)
        return false;

    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(obj.value)){
        return true;
    }
    
    alert('E-mail incorreto!');
    obj.value = '';
    obj.focus();
    return false;
    
}

function validaCnpj(cnpj) {
    var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
    var cnpj2 = cnpj.value.replace(/\D+/g, '');;
    digitos_iguais = 1;

	if(!cnpj2)
		return false;

    if (cnpj2.length < 14) {
        alert("CNPJ Inválido!");
        cnpj.value = "";
        cnpj.focus();
        return false;
    }
    for (i = 0; i < cnpj2.length - 1; i++) {
        if (cnpj2.charAt(i) != cnpj2.charAt(i + 1)) {
            digitos_iguais = 0;
            break;
        }
    }
    if (!digitos_iguais) {
        tamanho = cnpj2.length - 2;
        numeros = cnpj2.substring(0,tamanho);
        digitos = cnpj2.substring(tamanho);
        soma = 0;
        pos = tamanho - 7;

        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2)
                pos = 9;
        }

        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(0)) {
            alert("CNPJ Inválido!");        
            cnpj.value = "";
            cnpj.focus();
            return false;
        }

        tamanho = tamanho + 1;
        numeros = cnpj2.substring(0,tamanho);
        soma = 0;
        pos = tamanho - 7;
        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2)
                pos = 9;
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;

        if (resultado != digitos.charAt(1)) {
            alert("CNPJ Inválido!");
            cnpj.value = "";
            cnpj.focus();
            return false;
        }
        return true;
    }
    else {
        alert("CNPJ Inválido!");
        cnpj.value = "";
        cnpj.focus();
        return false;
    }
}
function mascaraCpfCnpj(cnpj,event) {
	if(cnpj.value.length < 15)
    	return mascaraGeral(cnpj, '999.999.999-99', event);
    else 
    	return mascaraGeral(cnpj, '99.999.999/9999-99', event);
}
function validaCpfCnpj(cnpj) {
	if(cnpj.value.length == 14)
    	return validaCpf(cnpj);
    else
    	return validaCnpj(cnpj);
}


