function isDigit(ch) {
    var numbers = "0123456789";
    return (numbers.indexOf(ch) >= 0);
}

function insert(string, index, newValue) {
    var len = string.length;
    var a = (index <= 0) ? "" : string.substr(0, index);
    var b = (index >= len) ? "" : string.substr(index, len-index);
    return a + newValue + b;
}

function getOnlyDigit(value) {
    if (value == null) {
        return null;
    }
    var number = "";
    // recupera apenas numeros
    for (var i = 0; i < value.length; i++) {
        var ch = value.charAt(i);
        if (isDigit(ch)) {
            number += ch;
        }
    }
    return number;
}

function maskNumber(event) {
    event = new Event(event);
    
    var key = event.key;
    var code = event.code;
    
    var test = event.event.which == 0
            || isDigit(key)
            || key == "tab"
            || key == "enter"
            || key == "backspace";
    if (!test) {
       event.stop();
    }
    return test;
}

function doMaskCpf(event) {
    var number = getOnlyDigit(this.value);

    // Formata mascara
    if (number.length > 11) {
        number = number.substr(0, 11);
    }
    if (number.length > 3) {
        number = insert(number, 3, '.');
    }
    if (number.length > 7) {
        number = insert(number, 7, '.');
    }
    if (number.length > 11) {
        number = insert(number, 11, '-');
    }
    this.value = number;
}

function doMaskCnpj(event) {
    var number = getOnlyDigit(this.value);

    // Formata mascara
    if (number.length > 14) {
        number = number.substr(0, 14);
    }
    if (number.length > 2) {
        number = insert(number, 2, '.');
    }
    if (number.length > 6) {
        number = insert(number, 6, '.');
    }
    if (number.length > 10) {
        number = insert(number, 10, '/');
    }
    if (number.length > 15) {
        number = insert(number, 15, '-');
    }
    this.value = number;
}

function doMaskTelefone(event) {
    var number = getOnlyDigit(this.value);

    // Formata mascara
    if (number.length > 10) {
        number = number.substr(0, 10);
    }
    if (number.length > 0) {
    	number = insert(number, 0, '(');
    }
    if (number.length > 3) {
        number = insert(number, 3, ') ');
    }
    if (number.length > 9) {
        number = insert(number, 9, '-');
    }
    this.value = number;
}
