// JavaScript Document

// Permite somente a entrada de números
function SoNumero(e) {

    var keynum;

    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }

    if (keynum < 48 || keynum > 57) return false;
    else return true;
    
}

// Limpa espaços em branco à esquerda
function LTrim(str)
{
    var whitespace = new String(" \t\n\r");

    var s = new String(str);

    if (whitespace.indexOf(s.charAt(0)) != -1) 
    {
        var j=0, i = s.length;
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
            j++;
        s = s.substring(j, i);
    }

    return s;
}

// Limpa espaços em branco à direita
function RTrim(str)
{
    var whitespace = new String(" \t\n\r");

    var s = new String(str);

    if (whitespace.indexOf(s.charAt(s.length-1)) != -1) 
    {
        var i = s.length - 1; 
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
            i--;
        s = s.substring(0, i+1);
    }
        return s;
}

// Limpa espaços em branco
function Trim(str)
{
    return RTrim(LTrim(str));
}

// formata hora
function FormataHoraOnBlur(campo)
{
	var hora = campo.value;
	
	if(hora.indexOf(":") == -1)
	{
		if(Trim(hora) != ""){
			var re = /([01][0-9]|2[0-3]):([0-5][0-9])/;
			var h = hora.substr(0,2);
			var m = hora.substr(2,2);
			hora = h + ':' + m;
			
			if(re.test(hora))
			{
				campo.value = hora;
			}
			else
			{
				campo.value = "";
				campo.focus();	
			}
		}
	}
}

//PulaCampo(tamanho_campo, valor de quando pular, campo_para_onde_pular)
//onkeyup
function PulaCampo(l, n, x)
{
	if(l == n)
	{
		if((x.type.toUpperCase() == "TEXT"))
		{
			x.select();	
		}
		
		x.focus();
	}
}

/*
Usage: textarea field, the count field, max length
Events: onKeyDown e onKeyUp do textarea
*/
function TextLimit(field, countfield, maxlimit) 
{
	if (field.value.length > maxlimit) // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
	// otherwise, update 'characters left' counter
	else 
		countfield.value = maxlimit - field.value.length;
}

// abre janela popup
function OpenPopUp(sURL, w, h)
{
	var sFeatures;

	//centralizando o popup
	var l = (screen.availWidth-10 - w) / 2;
	var t = (screen.availHeight-20 - h) / 2;
	
	sFeatures = "width=" + w + ",height=" + h + ",left=" + l + ",top=" + t;
	sFeatures += ",scrollbars=yes,statusbar=yes";
	
	window.open(sURL, "PopUp", sFeatures);
	
	return false;
}

/*
Abre uma janela modal
*/
function OpenModal(sURL, w, h, objArgs)
{
	var sFeatures;
	var objReturn;
	
	sFeatures = "dialogHeight:" + h + "px;";
	sFeatures += "dialogWidth:" + w + "px;";
	sFeatures += "help:no;";

	objReturn = window.showModalDialog(sURL, objArgs, sFeatures);
	
	return objReturn;
}

//adiciona mascara de cnpj
function MascaraCNPJ(e, cnpj){

 	if(mascaraInteiro(e)==false)
	{
	    e.returnValue = false;
	}
    return formataCampo(cnpj, '00.000.000/0000-00', e);
}

//adiciona mascara de cep
function MascaraCep(e, cep)
{
    if(mascaraInteiro(e)==false)
    {
        e.returnValue = false;
    }
    return formataCampo(cep, '00000-000', e);
}

//adiciona mascara de data
function MascaraData(e, data)
{	
    if(mascaraInteiro(e)==false)
    {
        e.returnValue = false;
    }
    return formataCampo(data, '00/00/0000', e);
}

//adiciona mascara de hora e minuto (HH:MM)
function MascaraHoraMinuto(e, hora)
{	
    if(mascaraInteiro(e)==false)
    {
        e.returnValue = false;
    }
    return formataCampo(hora, '00:00', e);
}

//adiciona mascara ao telefone com DDD
function MascaraTelefoneComDDD(e, tel)
{
    if(mascaraInteiro(e)==false)
    {
        e.returnValue = false;
    }
    return formataCampo(tel, '(00) 0000-0000', e);
}

//adiciona mascara ao telefone com DDD
function MascaraTelefoneSemDDD(e, tel)
{
    var ev;
	
    if(window.event) // IE
    {
        ev = event;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        ev = e;
    }

    if(mascaraInteiro(e)==false)
    {
        ev.returnValue = false;
    }
    return formataCampo(tel, '0000-0000', ev);
}

//adiciona mascara ao CPF
function MascaraCPF(e, cpf)
{
    if(mascaraInteiro(e)==false)
    {
        e.returnValue = false;
    }
    return formataCampo(cpf, '000.000.000-00', e);
}

//valida telefone
function ValidaTelefone(tel)
{
    exp = /\(\d{2}\)\ \d{4}\-\d{4}/	
    if(!exp.test(tel.value))
    {
    		alert('Numero de Telefone Inválido!');
    		tel.select();
    }
}

//valida CEP
function ValidaCep(cep)
{
    exp = /\d{2}\.\d{3}\-\d{3}/	
    if(!exp.test(cep.value))
    {
    		alert('Numero de Cep Inválido!');
    		cep.select();
    }
}

//valida data
function ValidaData(data)
{
    exp = /\d{2}\/\d{2}\/\d{4}/	
    if(!exp.test(data.value))		
    {
            alert('Data Inválida!');			
    		data.select();
    }
}

//valida o CPF digitado
function ValidarCPF(Objcpf)
{
	var cpf = Objcpf.value;
	exp = /\.|\-/g	
	cpf = cpf.toString().replace( exp, "" );
	var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
	var soma1=0, soma2=0;
	var vlr =11;
	for(i=0;i<9;i++)
	{
	    soma1+=eval(cpf.charAt(i)*(vlr-1));
	    soma2+=eval(cpf.charAt(i)*vlr);
	    vlr--;
	}
	soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
	soma2=(((soma2+(2*soma1))*10)%11);
	var digitoGerado=(soma1*10)+soma2;
	if(digitoGerado!=digitoDigitado)
	{
            alert('CPF Inválido!');
    		Objcpf.select();
    }
}

//valida numero inteiro com mascara
function mascaraInteiro(e)
{	
    var keynum;

    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }

    if (keynum < 48 || keynum > 57)	return false;
    else return true;
}

//valida o CNPJ digitado
function ValidarCNPJ(ObjCnpj)
{	var cnpj = ObjCnpj.value;
	var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
	var dig1= new Number;
	var dig2= new Number;
	exp = /\.|\-|\//g
	cnpj = cnpj.toString().replace( exp, "" );
	var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13)));
	for(i = 0; i<valida.length; i++)
	{
	    dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0);
	    dig2 += cnpj.charAt(i)*valida[i];
	}
	dig1 = (((dig1%11)<2)? 0:(11-(dig1%11)));
	dig2 = (((dig2%11)<2)? 0:(11-(dig2%11)));
	if(((dig1*10)+dig2) != digito)			
	{
        alert('CNPJ Inválido!');
    	ObjCnpj.select();
    }
}

//formata de forma generica os campos
function formataCampo(campo, Mascara, evento)
{ 	
    var boleanoMascara;
    var Digitato = evento.keyCode;
    exp = /\-|\.|\/|\(|\)|\:| /g
    campoSoNumeros = campo.value.toString().replace( exp, "" );
    var posicaoCampo = 0;
    var NovoValorCampo="";
    var TamanhoMascara = campoSoNumeros.length;;
    if (Digitato != 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) == " "))
            boleanoMascara  = boleanoMascara || (Mascara.charAt(i) == ":")
            if (boleanoMascara)
            {
                NovoValorCampo += Mascara.charAt(i);
                TamanhoMascara++;
            }
            else
            {
                NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
                posicaoCampo++;
            }
        }
        campo.value = NovoValorCampo;
        return true;
    }
    else
    {
        return true;
    }
}

function FormataCpfCnpj(e, objeto)
{
    exp = /\-|\.|\/|\(|\)|\:| /g
    campoSoNumeros = objeto.value.toString().replace( exp, "" );
    objeto.value = campoSoNumeros
    
    var tamanho = objeto.value.length;
    
    if (tamanho == 11)
    {
        MascaraCPF(e, objeto);
        return true; //return ValidarCPF(objeto);
    }
    else if(tamanho == 14)
    {
        MascaraCNPJ(e, objeto);
        return true; 
    }
}