function MaskData(src, evt){
    return MaskData(src, evt, "");
}

function MaskData(src, evt, handleFunction,handleFunction2){
    var sValor = "";
    var index = 0;
    var tecla = "";
    var sData = "";

    if(typeof(handleFunction2)=='undefined')
        handleFunction2='';

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8)
        tecla = "-1";

    // Teclas ENTER e TAB seguem o fluxo normal
    if ((evt.keyCode == 9) || (evt.keyCode == 13))
        return true;

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    sValor = src.value;

    while(sValor.indexOf("/",0)!=-1)
        sValor = sValor.replace("/","");

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1") {
        sValor = sValor.substr(0,sValor.length-1);
        tecla = "";
    }    

    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length < 8) // Limitamos a somente 10 caracteres o TELEFONE, desconsideramos o "0" a esquerda
        sValor += tecla;

    // Agora temos o valor vamos formata-lo
    // DATA 00/00/0000
    // Como o formato é fixo vamos efetuar um switch com o length
    switch(sValor.length){
        case 1:
        case 2:
            sData = sValor;
            break;
        case 3:
        case 4:
            sData = sValor.substr(0,2) + "/" + sValor.substr(2,sValor.length);
            break;
        case 5:
        case 6:
        case 7:
        case 8:
            sData = sValor.substr(0,2) + "/" + sValor.substr(2,2) + "/" + sValor.substr(4,sValor.length);
            break;
    }    

    src.value = sData;

    if (sValor.length == 8)
        if (!ValidaDATA(src.value)) {
            alert('Data inválida');
            src.value = "";
            sValor = "";	
        }

    if (handleFunction != null && handleFunction.length != 0 && handleFunction != 'undefined')
        eval(handleFunction + "\(" + src.id + ");");
    if (handleFunction2 != null && handleFunction2.length != 0 && handleFunction2 != 'undefined' && sValor.length == 8)
        eval(handleFunction2 + "\('" + src.id + "','" + src.recordNumber + "');");

    return false;
}

function ValidaDATA(src){
    
    var ret = true;
    
    var sData = src;

    var sValor = sData;

    while(sValor.indexOf("/",0)!=-1)
        sValor = sValor.replace("/","");

    if (sValor.length != 8)
        return false;

    var iDia = parseInt(sData.substr(0,2),10);
    var iMes = parseInt(sData.substr(3,2),10);
    var iAno = parseInt(sData.substr(6,4),10);
    
    if 
    (
        (iDia < 1) || 
        (
            (iDia < 1 || iDia > 30) && 
            (iMes == 4 || iMes == 6 || iMes == 9 || iMes == 11) 
        ) || 
        (iDia > 31) 
    )
        ret = false;

    var anoBissexto = (iAno % 400 == 0 || iAno % 4 == 0 && iAno % 100 != 0);

    if (iMes < 1 || iMes > 12)
        ret = false;

    if 
    (
        iMes == 2 && 
        (
            iDia <1 || iDia > 29 || 
            (iDia > 28 && !anoBissexto)
        )
    )
        ret = false;

    return ret;

}

function MaskTELEFONE(src, evt){
    var sValor = "";
    var index = 0;
    var tecla = "";
    var sTelefone = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8)
        tecla = "-1";

    // Teclas ENTER e TAB seguem o fluxo normal
    if ((evt.keyCode == 9) || (evt.keyCode == 13))
        return true;

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    sValor = src.value;
    
    while(sValor.indexOf("(",0)!=-1)
        sValor = sValor.replace("(","");

    while(sValor.indexOf(")",0)!=-1)
        sValor = sValor.replace(")","");

    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");

    while(sValor.indexOf(" ",0)!=-1)
        sValor = sValor.replace(" ","");    

    // Vamos verificar se existe algo no campo primeiro
    if(sValor.length > 0) {
        // Vamos eliminar os ZEROS a esquerda
        while(sValor.charAt(0) == "0"){
            sValor = sValor.substr(1,sValor.length);
        }
    }

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1") {
        sValor = sValor.substr(0,sValor.length-1);
        tecla = "";
    }    
       
    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length < 10) // Limitamos a somente 10 caracteres o TELEFONE, desconsideramos o "0" a esquerda
        sValor += tecla;

    // Vamos acrescentar o ZERO a esquerda sempre
    sValor = "0" + sValor;

    // Agora temos o valor vamos formata-lo
    // TELEFONE (000) 000-0000 ou (000) 0000-0000
    // Como o formato é fixo vamos efetuar um switch com o length
    switch(sValor.length){
        case 1:
            sTelefone = ""; // Neste caso somente esta o "0" a esquerda então limparemos o campo
            break;
        case 2:
        case 3:
            sTelefone = "\(" + sValor + ")";
            break;
        case 4:
        case 5:
        case 6:
            sTelefone = "\(" + sValor.substr(0,3) + ")  " + sValor.substr(3,sValor.length);
            break;
        case 7:
        case 8:
        case 9:
        case 10:
            sTelefone = "\(" + sValor.substr(0,3) + ")  " + sValor.substr(3,3) + "-" + sValor.substr(6,sValor.length);
            break;
        case 11:
            sTelefone = "\(" + sValor.substr(0,3) + ") " + sValor.substr(3,4) + "-" + sValor.substr(7,sValor.length);
            break;    
    }    

    src.value = sTelefone;

    return false;
}

function MaskCEP(src, evt){
    return MaskCEP(src, evt, "");
}

function MaskCEP(src, evt, handleFunction){
    var sValor = "";
    var index = 0;
    var tecla = "";
    var sCEP = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8)
        tecla = "-1";

    // Teclas ENTER e TAB seguem o fluxo normal
    if ((evt.keyCode == 9) || (evt.keyCode == 13))
        return true;

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    sValor = src.value;
    
    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1") {
        sValor = sValor.substr(0,sValor.length-1);
        tecla = "";
    }    

    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length < 8) // Limitamos a somente 8 caracteres o CEP
        sValor += tecla;

    // Agora temos o valor vamos formata-lo
    // CEP 00000-000
    // Como o formato é fixo vamos efetuar um switch com o length
    switch(sValor.length){
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            sCEP = sValor;
            break;
        case 6:
        case 7:
        case 8:
            sCEP = sValor.substr(0,5) + "-" + sValor.substr(5,sValor.length);
            break;    
    }    

    src.value = sCEP;

   if (handleFunction != null && handleFunction.length != 0 && handleFunction != 'undefined')
        eval(handleFunction + "\('" + src.id + "');");

    return false;
}

function MaskCNPJ(src, evt, chk){
    var sValor = "";
    var index = 0;
    var tecla = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8) {
        src.value = src.value.substr(0,src.value.length-1);
        tecla = "-1";
    }    

    // Teclas ENTER e TAB seguem o fluxo normal
    if ((evt.keyCode == 9) || (evt.keyCode == 13))
        return true;

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1")
        tecla = "";

    sValor = src.value;

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");
    while(sValor.indexOf("/",0)!=-1)
        sValor = sValor.replace("/","");

    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length<14) // Limitamos a somente 11 caracteres o CPF
        sValor += tecla;

    // Agora temos o valor vamos formata-lo
    // CNPJ 00.000.000/0000-00
    // Como para o CPF possuimos tamanho fixo vamos efetuar um switch com o length do campo
    var sCNPJ = "";
    
    switch(sValor.length){
        case 1:
        case 2:
            sCNPJ = sValor;
            break;
        case 3:
        case 4:
        case 5:
            sCNPJ = sValor.substr(0,2) + '.' + sValor.substr(2,sValor.length);
            break;
        case 6:
        case 7:
        case 8:
            sCNPJ = sValor.substr(0,2) + '.' + sValor.substr(2,3) + '.' + sValor.substr(5,sValor.length);
            break;
        case 9:    
        case 10:
        case 11:
        case 12:
            sCNPJ = sValor.substr(0,2) + '.' + sValor.substr(2,3) + '.' + sValor.substr(5,3) + '/' + sValor.substr(8,sValor.length);
            break;
        case 13:
        case 14:
            sCNPJ = sValor.substr(0,2) + '.' + sValor.substr(2,3) + '.' + sValor.substr(5,3) + '/' + sValor.substr(8,4) + '-' + sValor.substr(12,sValor.length);
            break;    
    }

    src.value = sCNPJ;
    
    if (chk && sValor.length == 14)
        if (!ValidaCNPJ(src)) {
	    src.value = "";
            alert('CNPJ inválido');
	}

    return false;
}

function ValidaCNPJ(src){
    var sValor = src.value;
    var i = 0;
    var DIGITO_1 = 0;
    var DIGITO_2 = 0;
    var SOMA = 0;

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");
    while(sValor.indexOf("/",0)!=-1)
        sValor = sValor.replace("/","");

    if (sValor.length!=14) // Somente validaremos o CNPJ se o mesmo estiver completamente preenchido
        return false;
    
    for (i=0;i<4;i++){
        SOMA += parseInt(sValor.substr(i,1)) * (6-(i+1))
    }

    for (i=0;i<8;i++){
        SOMA += parseInt(sValor.substr(i+4,1)) * (10-(i+1))
    }
    
    DIGITO_1 = 11 - (SOMA % 11);
    if(DIGITO_1 == 10 || DIGITO_1 == 11)
        DIGITO_1 = 0;

    SOMA = 0;    
    for (i=0;i<5;i++){
        SOMA += parseInt(sValor.substr(i,1)) * (7-(i+1))
    }

    for (i=0;i<8;i++){
        SOMA += parseInt(sValor.substr(i+5,1)) * (10-(i+1))
    }
    
    DIGITO_2 = 11 - (SOMA % 11);
    if(DIGITO_2 == 10 || DIGITO_2 == 11)
        DIGITO_2 = 0;

    return (DIGITO_1 == parseInt(sValor.substr(12,1)) && DIGITO_2 == parseInt(sValor.substr(13,1)));

}
function MaskCPF(src, evt) {
    return MaskCPF(src, evt, false, null);
}

function MaskCPF(src, evt, chk){
    return MaskCPF(src, evt, chk, null);
}
function MaskCPF(src, evt, chk, handleFunction){
    return MaskCPF(src, evt, chk, handleFunction);
}


function MaskCPF(src, evt, chk, handleFunction){

  if(typeof(handleFunction)=='undefined')
        handleFunction = '';

    var sValor = "";
    var index = 0;
    var tecla = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8) {
        src.value = src.value.substr(0,src.value.length-1);
        tecla = "-1";
    }    

    // Teclas ENTER e TAB seguem o fluxo normal
    if ((evt.keyCode == 9) || (evt.keyCode == 13)){
        sValor = src.value;
        if(sValor.replace(".","").replace(".","").replace("-","").length == 11){ // Limitamos a somente 16 caracteres o número do cartão
            sValor = src.value;
            tecla = sValor.substr(sValor.length-1, 1);
            sValor ="";
        }
        else{
            alert('Entre com o número "completo" do CPF!')
            return false;
        }
    }

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1")
        tecla = "";

    sValor = src.value;

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");
    while(sValor.indexOf("/",0)!=-1)
        sValor = sValor.replace("/","");

    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length<11) // Limitamos a somente 11 caracteres o CPF
        sValor += tecla;

    // Agora temos o valor vamos formata-lo
    // CPF 000.000.000-00
    // Como para o CPF possuimos tamanho fixo vamos efetuar um switch com o length do campo
    var sCPF = "";
    
    switch(sValor.length){
        case 1:
        case 2:
        case 3:
            sCPF = sValor;
            break;
        case 4:
        case 5:
        case 6:
            sCPF = sValor.substr(0,3) + '.' + sValor.substr(3,sValor.length);
            break;
        case 7:
        case 8:
        case 9:
            sCPF = sValor.substr(0,3) + '.' + sValor.substr(3,3) + '.' + sValor.substr(6,sValor.length);
            break;
        case 10:
        case 11:
            sCPF = sValor.substr(0,3) + '.' + sValor.substr(3,3) + '.' + sValor.substr(6,3) + '-' + sValor.substr(9,sValor.length);
            break;    
    }

    src.value = sCPF;
    
    if (!ValidaCPF(src)) 
      src.style.color='red';
    else
        src.style.color='blue';
        
    if (chk && sValor.length == 11)
        if (!ValidaCPF(src)) {
	    src.value = "";
            alert('CPF inválido');
	}
    else{
        if (handleFunction != null && handleFunction.length != 0 && handleFunction != 'undefined')
        eval(handleFunction + "\('" + src.id + "');");
    }

    return false;
}

function ValidaCPF(src){
    var sValor = src.value;
    var i = 0;
    var DIGITO_1 = 0;
    var DIGITO_2 = 0;
    var SOMA = 0;

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");
    if (sValor.length!=11) // Somente validaremos o CPF se o mesmo estiver completamente preenchido
        return false;
    
    if(
        (sValor == "00000000000") ||
        (sValor == "11111111111") ||
        (sValor == "22222222222") ||
        (sValor == "33333333333") ||
        (sValor == "44444444444") ||
        (sValor == "55555555555") ||
        (sValor == "66666666666") ||
        (sValor == "77777777777") ||
        (sValor == "88888888888") ||
        (sValor == "99999999999")
        )
        return false;
    
    for (i=0;i<9;i++){
        SOMA += parseInt(sValor.substr(i,1)) * (11-(i+1))
    }
    
    DIGITO_1 = 11 - (SOMA % 11);
    if(DIGITO_1 == 10 || DIGITO_1 == 11)
        DIGITO_1 = 0;

    SOMA = 0;    
    for (i=0;i<10;i++){
        SOMA += parseInt(sValor.substr(i,1)) * (12-(i+1))
    }
    
    DIGITO_2 = 11 - (SOMA % 11);
    if(DIGITO_2 == 10 || DIGITO_2 == 11)
        DIGITO_2 = 0;

    return (DIGITO_1 == parseInt(sValor.substr(9,1)) && DIGITO_2 == parseInt(sValor.substr(10,1)));

}

function MaskCPFCNPJ(src, evt) {
    return MaskCPFCNPJ(src, evt, false);
}

function MaskCPFCNPJ(src, evt, chk){

    if((src.value.length < 14) || (src.value.length < 16 && evt.keyCode == 8))
        MaskCPF(src, evt, false);
    else
        MaskCNPJ(src, evt, false);

    if(chk){
        ValidateCPFCNPJ(src);
    }

    return false;
}

function ValidateCPFCNPJ(src){
    if(src.value.length < 14) // ainda não é nem CPF
        src.style.color='red';
    
    if(src.value.length == 14)
        if(!ValidaCPF(src))
            src.style.color='red';
        else
            src.style.color='blue';
    if((src.value.length > 14) && (src.value.length < 18))
        src.style.color='red';
    
    if(src.value.length == 18)
        if(!ValidaCNPJ(src))
            src.style.color='red';
        else
            src.style.color='blue';
}

function RepeatChar(ch, num){
    var ret = "";
    var i = 0;
    for (i = 0; i<num;i++){
        ret += ch;
    }
    return ret;
}

function MaskDecimal_Ex(src){
    return MaskDecimal(src, null, false, '', true, true, '', true);
}

function MaskDecimal(src){
    return MaskDecimal(src, null, false, '', true, false);
}

function MaskDecimal(src, evt){
    return MaskDecimal(src, evt, false);
}

function MaskDecimal(src, evt, neg){
    return MaskDecimal(src, evt, neg, '');
}

function MaskDecimal(src, evt, neg, handleFunction){
    return MaskDecimal(src, evt, neg, handleFunction, false);
}

function MaskDecimal(src, evt, neg, handleFunction, noevent){
    return MaskDecimal(src, evt, neg, handleFunction, noevent, true);
}

function MaskDecimal(src, evt, neg, handleFunction, noevent, noempty){
    return MaskDecimal(src, evt, neg, handleFunction, noevent, noempty, '', false);
}

function MaskDecimal(src, evt, neg, handleFunction, noevent, noempty, handleFunction2, onlyValue){

    if(typeof(neg)=='undefined')
        neg = false;
    if(typeof(handleFunction)=='undefined')
        handleFunction = '';
    if(typeof(noevent)=='undefined')
        noevent=false;
    if(typeof(noempty)=='undefined')
        noempty=true;
    if(typeof(handleFunction2)=='undefined')
        handleFunction2='';
    if(typeof(onlyValue)=='undefined')
        onlyValue=false;

    var sValor = "";
    var index = 0;
    var tecla = "";
    var sSinal = "";

    if (!noevent) {

        if (evt.keyCode >= 48 && evt.keyCode <= 57)
            tecla = "" + (evt.keyCode - 48);
        if (evt.keyCode >= 96 && evt.keyCode <= 105)
            tecla = "" + (evt.keyCode - 96);
    
        // Vamos validar a tecla pressionada
        switch(tecla) {
        case "0":
        case "1":
        case "2":
        case "3":
        case "4":
        case "5":
        case "6":
        case "7":
        case "8":
        case "9":
            break;
        default:
            tecla = "";
            break;    
        }
    
        // Tecla DEL limpa o campo inteiro
        if (evt.keyCode == 46){
            if(noempty){
                src.value = "0,00";
            }
            else {
                src.value = "";
            }
        }
    
        // Tecla BACKSPACE elimina o ultimo digito
        if (evt.keyCode == 8) {
            src.value = src.value.substr(0,src.value.length-1);
            tecla = "-1";
        }    
    
        // Teclas ENTER e TAB seguem o fluxo normal
        if ((evt.keyCode == 9) || (evt.keyCode == 13))
            return true;
    
        // Teclas de sinal negativo
        if (((evt.keyCode == 109) || (evt.keyCode == 189)) && neg) {
            sSinal = "-";
            tecla = "-1";
        }
    
        // Se a tecla pressionada não for numérica ignora a mesma
        if (tecla == "")
            return false;
    
        // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
        if (tecla == "-1")
            tecla = "";
    } else 
        tecla = "";

    if(!onlyValue)
        sValor = src.value;
    else
        sValor = src;

    // Vamos primeiro verificar se existe o sinal
    if (sValor.charAt(0) == "-") {
        if (neg)
            sSinal = "-";
        sValor = sValor.substr(1,sValor.length);
    }

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf(",",0)!=-1)
        sValor = sValor.replace(",","");

    // Vamos verificar se existe algo no campo primeiro
    if(sValor.length > 0) {
        // Vamos eliminar os ZEROS a esquerda
        while(sValor.charAt(0) == "0"){
            sValor = sValor.substr(1,sValor.length);
        }
    }
    
    // Vamos formatar o campo adicionando a tecla pressionada
    sValor += tecla;



    // Agora temos o valor vamos formata-lo
    // Primeiro vamos verificar se possuimos mais de 2 caracteres do campo
    if(sValor.length <= 2) // 0,01 ou 0,11
        sValor = RepeatChar("0",3-sValor.length) + sValor; // Vamos preencher com ZEROS a esquerda

    // vamos verificar se a quantidade de caracteres digitados ultrapassou o limite permitido
    if(!onlyValue)
        if (sValor.length == src.maxLength)
            return false;

    if(noempty)
        if(sValor.length==0)
            sValor = "0";

    // Agora que garantimos a quantidade minima de caracteres vamos formatar o resultado;
    // Primeiro vamos separar a parte decimal da parte inteira

    var sDecimal = sValor.substr(sValor.length-2,sValor.length);
    var sInteira = sValor.substr(0,sValor.length-2);
    var count = 0;
    var sInteiraTmp = "";
    var sComplemento = "";

    // Vamos formatar a parte inteira
    var resto = sInteira.length % 3;

    if (resto != 0) {
        sComplemento = sInteira.substr(0,resto);
        sInteira = sInteira.substr(resto,sInteira.length);
    }
    count = sInteira.length;
    count = count / 3;

    for (var i = 0; i < count; i++) {
        sInteiraTmp += sInteira.substr(i*3,3);
        if ((i+1) < count) sInteiraTmp += ".";
    }

    if (sComplemento != "" && count > 0) 
        sInteiraTmp = "." + sInteiraTmp;

    // Tratar para não existir o valor -0,00
    if ((sComplemento + sInteiraTmp + "," + sDecimal)=="0,00")
        sSinal = "";
    
    if(!onlyValue)
        src.value = sSinal + sComplemento + sInteiraTmp + "," + sDecimal;
    else
        return (sSinal + sComplemento + sInteiraTmp + "," + sDecimal);

    if (handleFunction != null && handleFunction.length != 0 && handleFunction != 'undefined')
        eval(handleFunction + "\('" + src.id + "');");
    
    if (handleFunction2 != null && handleFunction2.length != 0 && handleFunction2 != 'undefined')
        eval(handleFunction2 + "\('" + src.id + "','" + src.recordNumber + "');");

    return false;

}

function MaskInteiro(src, evt){
    return MaskInteiro(src, evt, false);
}

function MaskInteiro(src, evt, neg){
    return MaskInteiro(src, evt, neg, "");
}

function MaskInteiro(src, evt, neg, handleFunction){

    if(typeof(neg)=='undefined')
        neg = false;
    if(typeof(handleFunction)=='undefined')
        handleFunction = '';

    var sValor = "";
    var index = 0;
    var tecla = "";
    var sSinal = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "0";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8) {
        src.value = src.value.substr(0,src.value.length-1);
        tecla = "-1";
    }    

    // Teclas ENTER e TAB seguem o fluxo normal
    if (evt.keyCode == 9)
        return true;

    if (evt.keyCode == 13)
        return false;

    // Teclas de sinal negativo
    if (((evt.keyCode == 109) || (evt.keyCode == 189)) && neg) {
        sSinal = "-";
        tecla = "-1";
    }

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1")
        tecla = "";

    sValor = src.value;
    
    // Vamos primeiro verificar se existe o sinal
    if (sValor.charAt(0) == "-") {
        if (neg)
            sSinal = "-";
        sValor = sValor.substr(1,sValor.length);
    }

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf(",",0)!=-1)
        sValor = sValor.replace(",","");

    // Vamos verificar se existe algo no campo primeiro
    if(sValor.length > 0) {
        // Vamos eliminar os ZEROS a esquerda
        while(sValor.charAt(0) == "0"){
            sValor = sValor.substr(1,sValor.length);
        }
    }

 
   // vamos verificar se a quantidade de caracteres digitados passou do limite permitido
   if (sValor.length == src.maxLength)
        tecla = "";

    
    // Vamos formatar o campo adicionando a tecla pressionada
    sValor += tecla;

    // Tratar para não existir o valor -0,00
    if (sValor=="0")
        sSinal = "";

    src.value = sSinal + sValor;

    if (handleFunction != null && handleFunction.length != 0 && handleFunction != 'undefined')
        eval(handleFunction + "\(" + src.id + ");");

    return false;

}



function checkEmail(src)
{
    var bRet = true;

    if(src!=null && typeof(src)=='object') {
        if (src.value != "") {
            var reg1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)")
            var reg2 = new RegExp("[a-zA-Z0-9\\-\\.]+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$")
            if (reg1.test(src.value) || !(reg2.test(src.value)))
                bRet = false;
        } else 
            bRet = false;
    } else 
        bRet = false;

    return bRet;
}

function MaskCartao(src, evt){
    return MaskCartao(src, evt, "");
}

function MaskCartao(src, evt, handleFunction){
    var sValor = "";
    var index = 0;
    var tecla = "";
    var sCartao = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
        break;
    default:
        tecla = "";
        break;    
    }

    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8)
        tecla = "-1";

    // Teclas ENTER e TAB seguem o fluxo normal

    if ((evt.keyCode == 9) || (evt.keyCode == 13)){
        //return true;
        sValor = src.value;
        while(sValor.indexOf(".",0)!=-1)
            sValor = sValor.replace(".","");

        if(sValor.replace(".","").length == 16){ // Limitamos a somente 16 caracteres o número do cartão
            sValor = src.value;
            tecla = sValor.substr(sValor.length-1, 1);
            sValor ="";
        }
        else{
            alert('Entre com o número "completo" do Cartão!')
            return false;
        }

    }

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    sValor = src.value;
    
    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1") {
        sValor = sValor.substr(0,sValor.length-1);
        tecla = "";
    }    

    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length < 16) // Limitamos a somente 16 caracteres o número do cartão
        sValor += tecla;

    // Agora temos o valor vamos formata-lo
    // Cartão 0000.0000.0000.0000
    // Como o formato é fixo vamos efetuar um switch com o length
    switch(sValor.length){
        case 1:
        case 2:
        case 3:
        case 4:
            sCartao = sValor;
            break;
        case 5:
        case 6:
        case 7:
        case 8:
            sCartao = sValor.substr(0,4) + "." + sValor.substr(4,sValor.length);
            break;
        case 9:
        case 10:
        case 11:
        case 12:
            sCartao = sValor.substr(0,4) + "." + sValor.substr(4,4) + "." + sValor.substr(8,sValor.length);
            break;
        case 13:
        case 14:
        case 15:
        case 16:
            sCartao = sValor.substr(0,4) + "." + sValor.substr(4,4) + "." + sValor.substr(8,4) + "." + sValor.substr(12,sValor.length);
            break;
    }    

    src.value = sCartao;
    if(sValor.length == 16)
        if (handleFunction != null && handleFunction.length != 0 && handleFunction != 'undefined')
            eval(handleFunction + "\('" + src.id + "');");

    return false;
}

function ConvertNumberToJava(src){

    if(parseFloat(src)==NaN)
        return "";

    var sValor = "";
    sValor = src;

    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");

    while(sValor.indexOf(",",0)!=-1)
        sValor = sValor.replace(",","");

    return (parseFloat(sValor)/100);
}
function retornaRound(num,d){
    var x = new Number()

    x = num;
    x.toFixed(d);
    num = x;

    return num; 
}

function fdp(n,d){    

	var xx = n.indexOf('.')
	var l = n.length
	var zstr = '0000000000000000000000'
	var theInt = ''
	var theFrac = ''
	var theNo = ''
    var arredondamento = '0';
	rfac = ''
	rfacx = 0
	nx = 0
	var xt = parseInt(d) + 1
	var rstr = '' + zstr.substring(1,xt)
	var rfac = '.' + rstr + '0'
	var rfacx = parseFloat(rfac)
	if (xx == -1 ) 	{    // No fraction
		theFrac = zstr
		theInt = "" + n
        arredondamento = '0';
	}
	else if (xx == 0) {
		theInt = '0'
		nx = 0 + parseFloat(n) + parseFloat(rfacx)
		n = nx + zstr
		theFrac = '' + n.substring(1, n.length)
        arredondamento = '' + n.substr(n.length, 1)
	}
	else {
		theInt = n.substring(0,xx);
		nx = parseFloat(n) + rfacx;
		n = '' + nx + zstr;
		theFrac = '' + n.substring(xx+1,xx + 1 + parseInt(d));
        if (parseInt(d) > 2)
            arredondamento = '' + n.substr(parseInt(d),1);
        else
            arredondamento = '' + n.substr(xx + 1 + parseInt(d),1);
	}

	theFrac = theFrac.substring(0,parseInt(d))

	var ii = 0;
    if(parseInt(arredondamento)>4){
        if ((parseInt(theFrac) + 1)>=100)
            theNo = parseInt(theInt)+1 + '.00';
        else if ((parseInt(theFrac)+1)<10)
            theNo = parseInt(theInt)+ '.0' + (parseInt(theFrac)+1);
        else
            theNo = theInt + '.' + (parseInt(theFrac) + 1);
    }
    else
        theNo = theInt + '.' + theFrac;

	return theNo
}

function ConvertDateToJava(src){

    var sData = src; 

    var sDataTemp = sData.substr(3,2) + "/" + sData.substr(0,2) + "/" + sData.substr(6,4);

    if (!Date.parse(sDataTemp)) {
        return null;
    }

    return new Date(sDataTemp);
}

function ConvertDateToString(src){

    var objData = new Date(src);
 
    var strData = "";

    var strMonth = objData.getMonth()+1; 
    var strDay = objData.getDate();
    var strYear = objData.getFullYear();
    
    if(parseInt(strDay)<10)
        strData += "0" + strDay;
    else
        strData += strDay;

    strData += "/";

    if(parseInt(strMonth)<10)
        strData += "0" + strMonth;
    else
        strData += strMonth;

    strData += "/" + strYear;

    return strData;
}

function MaskPlaca(src, evt){
    var sValor = "";
    var index = 0;
    var tecla = "";
    var sCartao = "";

    if (evt.keyCode >= 48 && evt.keyCode <= 57)
        tecla = "" + (evt.keyCode - 48);
    if (evt.keyCode >= 96 && evt.keyCode <= 105)
        tecla = "" + (evt.keyCode - 96);
    if (evt.keyCode >= 65 && evt.keyCode <= 90)
        tecla = String.fromCharCode(evt.keyCode);

    // Vamos validar a tecla pressionada
    switch(tecla) {
    case "0":
    case "1":
    case "2":
    case "3":
    case "4":
    case "5":
    case "6":
    case "7":
    case "8":
    case "9":
    case "A":
    case "B":
    case "C":
    case "D":
    case "E":
    case "F":
    case "G":
    case "H":
    case "I":
    case "J":
    case "K":
    case "L":
    case "M":
    case "N":
    case "O":
    case "P":
    case "Q":
    case "R":
    case "S":
    case "T":
    case "U":
    case "V":
    case "W":
    case "Y":
    case "X":
    case "Z":
        break;
    default:
        tecla = "";
        break;    
    }
    // Tecla DEL limpa o campo inteiro
    if (evt.keyCode == 46)
        src.value = "";

    // Tecla BACKSPACE elimina o ultimo digito
    if (evt.keyCode == 8)
        tecla = "-1";

    // Teclas ENTER e TAB seguem o fluxo normal
    if ((evt.keyCode == 9) || (evt.keyCode == 13))
        return true;

    // Se a tecla pressionada não for numérica ignora a mesma
    if (tecla == "")
        return false;

    sValor = src.value;
    
    while(sValor.indexOf(".",0)!=-1)
        sValor = sValor.replace(".","");
    while(sValor.indexOf("-",0)!=-1)
        sValor = sValor.replace("-","");

    // Quando é BACKSPACE colocamos o valor -1 na variavel, por isto temos de limpa-la aqui
    if (tecla == "-1") {
        sValor = sValor.substr(0,sValor.length-1);
        tecla = "";
    }    

    // Vamos formatar o campo adicionando a tecla pressionada
    if(sValor.length < 7) 
        sValor += tecla;

    // Agora temos o valor vamos formata-lo
    // Placa XXX-0000
    // Como o formato é fixo vamos efetuar um switch com o length
    switch(sValor.length){
        case 1:
        case 2:
        case 3:
            sCartao = sValor;
            break;
        case 4:
        case 5:
        case 6:
        case 7:
            sCartao = sValor.substr(0,3) + "-" + sValor.substr(3,sValor.length);
            break;
    }    
    
    // Vamos validar o campo
    if(sCartao.length == 8){
        // Três primeiros tem de ser ALFA
        var sALFA = "ABCDEFGHIJKLMNOPQRSTUVWYXZ";
        var sNUMERICO = "0123456789";
        if (
            sALFA.indexOf(sCartao.substr(0,1))==-1 ||
            sALFA.indexOf(sCartao.substr(1,1))==-1 ||
            sALFA.indexOf(sCartao.substr(2,1))==-1
        ){
            alert("Placa inválida");
            sCartao = "";
        } else {
            if (
                sNUMERICO.indexOf(sCartao.substr(4,1))==-1 || 
                sNUMERICO.indexOf(sCartao.substr(5,1))==-1 ||
                sNUMERICO.indexOf(sCartao.substr(6,1))==-1 ||
                sNUMERICO.indexOf(sCartao.substr(7,1))==-1
            ){
                alert("Placa inválida");
                sCartao = "";
            }
        }
    }

    src.value = sCartao;
    
    return false;
}

function ValidaPlaca(src){

    var sCartao = "";
    
    sCartao = src.value;

    while(sCartao.indexOf(".",0)!=-1)
        sCartao = sCartao.replace(".","");
    while(sCartao.indexOf("-",0)!=-1)
        sCartao = sCartao.replace("-","");

    if(sCartao.length == 7){
        // Três primeiros tem de ser ALFA
        var sALFA = "ABCDEFGHIJKLMNOPQRSTUVWYXZ";
        var sNUMERICO = "0123456789";
        if (
            sALFA.indexOf(sCartao.substr(0,1))==-1 ||
            sALFA.indexOf(sCartao.substr(1,1))==-1 ||
            sALFA.indexOf(sCartao.substr(2,1))==-1
        ){
            return false;
        } else {
            if (
                sNUMERICO.indexOf(sCartao.substr(4,1))==-1 || 
                sNUMERICO.indexOf(sCartao.substr(5,1))==-1 ||
                sNUMERICO.indexOf(sCartao.substr(6,1))==-1 ||
                sNUMERICO.indexOf(sCartao.substr(7,1))==-1
            ){
                return false;
            }
        }
    } else
        return false;
        

    return true;

}
