// JavaScript Document


function formataCampo(obj, mascara)
{
	var valor = ''
	var tamValor = 0
	var tamMascara = 0
	var resultado = ''
	var aux1 = ''
	var aux2 = ''
	var posMas = 1
	var posVal = 1
	var tecla = obj.value.substr( obj.value.length - 1, 1)
	var masclen = mascara.length

	if(obj.value.length > mascara.length)
	{
		valor = _extraiNumero(obj.value.substring(0, obj.value.length-(obj.value.length-mascara.length)))
	} else {
		valor = _extraiNumero(obj.value)
	}

	//muda formatação somente quando receber uma tecla válida 
	if( !_teclaValida(tecla) && (obj.value != ''))
	{
		tamValor = valor.length
		tamMascara = mascara.length
		while((posVal <= tamValor) && (posMas <= tamMascara))
		{
			// percorre caracter por caracter no valor dado (do fim p/ começo)
			aux1 = valor.substring(tamValor - posVal, (tamValor - posVal) + 1)
			// percorre caracter por caracter na máscara (do fim p/ começo)
			aux2 = mascara.substring(tamMascara - posMas, (tamMascara - posMas) + 1)
			if(aux2 == 'X')
			{
				resultado = aux1 + resultado
				posVal = posVal + 1
			}else if((aux2 == '-') || (aux2 == '/') || (aux2 == '.' ) || (aux2 == '(') || (aux2 == ')') || (aux2 == ',')) // símbolos presentes nas máscaras
			{
				resultado = aux2 + resultado
			}
			posMas = posMas + 1
		}
		//  colocando "posMas" e "posVal" em suas posições atuais
		posVal = posVal - 1
		posMas = posMas - 1
		// caso especial para número de telefone (máscara começa com símbolo)
		if((posMas == tamMascara - 1) && (mascara.substring(0, 1) == '('))
		{
			resultado = '(' + resultado
		}
		
		if (obj.value != resultado)
		{
			if ( (resultado.length>=obj.maxLength) && (masclen>=resultado.length) )
			{
				if (masclen == resultado.length)
				{
					obj.maxLength = masclen
				} else{
					obj.maxLength = resultado.length+1
				}
			}
			obj.value = resultado
		}
		
	}
}


/**
descricao: retorna true quando for um número
*/
function _somenteNumero(numero)
{
	// numeros aceitos 0,1,2,3,4,5,6,7,8,9,37,38,39,40,46
	ER=/(^[0-2]$|^3[789]{0,1}$|^4[06]{0,1}$|^[5-9]$)/
	return ER.test(numero)
}


/**
descricao: retorna somente números [0..9]
*/
function _extraiNumero(dado)
{
	var aux = ''
	for(n=0; n < dado.length; n++){
		if(_somenteNumero(dado.substr(n,1))){
			aux += dado.substr(n,1)
		}
	}
	return aux
}


function __numero(obj) {
	
	numero = _extraiNumero(obj.value);
	obj.value = numero;

}


/**
*/
function mascara_data(param)
{
        var mydata = '';
        mydata = mydata + param.value;
        if (mydata.length == 2){
                mydata = mydata + '/';
                param.value = mydata;
        }
        if (mydata.length == 5){
                mydata = mydata + '/';
                param.value = mydata;
        }
       
	   //if (mydata.length == 10){
       //         verifica_data(param);
       //}
}


/**
descricao: função para tratamento do formato de cpf
*/
function formataCpf(obj)
{
	numero = _extraiNumero(obj.value)
	if (numero.length > 3) {
		formataCampo(obj, "XXX.XXX.XXX-XX")
	} else {
		if (obj.value != numero)
		{
			obj.value = numero
		}
	}
}



/**
descricao: função para tratamento do formato de cpf
*/
function formataCnpj(obj)
{
	numero = _extraiNumero(obj.value)
	if (numero.length > 3) {
		formataCampo(obj, "XX.XXX.XXX/XXXX-XX")
	} else {
		if (obj.value != numero)
		{
			obj.value = numero
		}
	}
}

/**
descricao: função para tratamento do formato de cep
*/
function formataCep(obj)
{
	numero = _extraiNumero(obj.value)
	if (numero.length > 3) {
		formataCampo(obj, "XXXXX-XXX")
	} else {
		if (obj.value != numero)
		{
			obj.value = numero
		}
	}
}

/**
descricao: função para tratamento do formato de placas de carros
*/
function formataPlaca(obj)
{
	valor = obj.value;
	if (valor.length > 3) {
		formataCampo(obj, "XXX-XXXX")
	}
}

function formataTelefone(obj)
{
	numero = _extraiNumero(obj.value)
	if (numero.length >= 1) {
		formataCampo(obj, "(XX)XXXX-XXXX")
	/*
	} else if (numero.length == 9) {
		formataCampo(obj, "(XX)XXX-XXXX")
	} else if (numero.length == 8) {
		formataCampo(obj, "XXXX-XXXX")
	} else if (numero.length > 4) {
		formataCampo(obj, "XXX-XXXX")
	*/
	} else {
		if (obj.value != numero)
		{
			obj.value = numero
		}
	}
}



function validarNumero(obj)
{
	numero = _extraiNumero(obj.value)
	if (obj.value != numero)
	{
		obj.value = numero
	}
}


function formataMoeda(z){  
        v = z.value;
        v=v.replace(/\D/g,"")  //permite digitar apenas números
    v=v.replace(/[0-9]{12}/,"inválido")   //limita pra máximo 999.999.999,99
    v=v.replace(/(\d{1})(\d{8})$/,"$1.$2")  //coloca ponto antes dos últimos 8 digitos
    v=v.replace(/(\d{1})(\d{5})$/,"$1.$2")  //coloca ponto antes dos últimos 5 digitos
    v=v.replace(/(\d{1})(\d{1,2})$/,"$1,$2")    //coloca virgula antes dos últimos 2 digitos
        z.value = v;
}

/*
function formataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
    var whichCode = (window.Event) ? e.which : e.keyCode;

     if ((whichCode == 13) || (whichCode == 0) || (whichCode == 8)) return true;
    key = String.fromCharCode(whichCode); // Valor para o código da Chave
    if (strCheck.indexOf(key) == -1) return false; // Chave inválida

    len = objTextBox.value.length;
    for(i = 0; i < len; i++)
        if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break;
    aux = '';
    for(; i < len; i++)
        if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i);
    aux += key;
    len = aux.length;
    if (len == 0) objTextBox.value = '';
    if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux;
    if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux;
    if (len > 2) {
        aux2 = '';
        for (j = 0, i = len - 3; i >= 0; i--) {
            if (j == 3) {
                aux2 += SeparadorMilesimo;
                j = 0;
            }
            aux2 += aux.charAt(i);
            j++;
        }
        objTextBox.value = '';
		objTextBox.maxlength = objTextBox.maxlength + 2;
        len2 = aux2.length;
        for (i = len2 - 1; i >= 0; i--)
        objTextBox.value += aux2.charAt(i);
        objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
    }
    return false;
}

*/
//  teclas que podem ser pressionadas
function _teclaValida(tecla)
{
	// 8  backspace			9  Tab				33 PageUp				34 PageDown	
	// 35 End				36 Home 			37 seta para esquerda	38 seta para cima 
	// 39 seta para direita 40 seta para baixo	46 Delete
	ER=/(^[8-9]$|^3[3-9]{1}$|^4[06]{1}$)/
	return ER.test(numero)
}