﻿function maskTelefone() {
    return function (telefone) {
        if (!telefone) { return ''; }

        telefone = telefone.toString();
        telefone = telefone.replace(/\D/g, "");        //Remove tudo o que não é dígito
        telefone = telefone.substr(0, 12);

        var novoDigito = telefone.length == 11;

        telefone = telefone.replace(/^(\d\d)(\d)/g, "($1) $2"); //Coloca parênteses em volta dos dois primeiros dígitos
        telefone = telefone.replace(novoDigito ? /(\d{5})(\d)/ : /(\d{4})(\d)/, "$1-$2");    //Coloca hífen entre o quarto e o quinto dígitos
        return telefone;
    };
};

function maskValor() {
    return function (valor) {
        if (valor === undefined || valor === null || valor === '') { return ''; } // Caso não tenha valor retorna vazio
        if (valor == 0) { return '0'; } // Caso for zero, retorna zero

        valor = valor.toString();
        valor = valor.replace(/\D/g, "");                   //Remove tudo o que não é dígito
        valor = valor.replace(/^0*/, "");                   //Remove zeros a esquerda
        valor = valor.replace(/^(\d)$/g, "00$1");           //Adiciona 00 a esquerda caso o valor seja abaixo de 0,10
        valor = valor.replace(/^(\d\d)$/g, "0$1");          //Adiciona 0 a esquerda caso o valor seja abaixo de 1,00
        valor = valor.replace(/(\d)(\d{2})$/g, "$1,$2");    //Coloca a vírgula
        var regex = new RegExp(/(\d)(\d{3}[\.,])/g);
        while (regex.test(valor)) {
            valor = valor.replace(regex, "$1.$2");    //Coloca os pontos
        }
        return valor;
    };
};

function maskNumerico() {
    return function (numerico) {
        if (!numerico) { return "0"; }

        numerico = numerico.toString();
        numerico = numerico.replace(/\D/g, "");                         //Remove tudo o que não é dígito
        if (numerico === "")
            numerico = "0";
        return numerico;
    };
};

function maskConta() {
    return function (conta) {
        if (!conta) { return ''; }

        conta = conta.toString();
        conta = conta.replace(/\D/g, "");                         //Remove tudo o que não é dígito
        conta = conta.substr(0, 12);
        conta = conta.replace(/(\d)(\d{1})$/g, "$1-$2");          //Coloca o -
        return conta;
    };
}

function maskRenavam() {
    return function (renavam) {
        if (!renavam) { return ''; }

        renavam = renavam.toString();
        renavam = renavam.replace(/\D/g, "");                         //Remove tudo o que não é dígito
        renavam = renavam.substr(0, 11);
        return renavam;
    };
};

function maskCnpj() {
    return function (cnpj) {
        return FormataCnpj(cnpj);
    }
};

function maskCpf() {
    return function (cpf) {
        return FormataCpf(cpf);
    }
};

function maskCpfCnpj() {
    return function (cpfCnpj) {
        if (!cpfCnpj) { return ''; }
        if (cpfCnpj.length <= 11)
            return FormataCpf(cpfCnpj);
        else
            return FormataCnpj(cpfCnpj);
    };
};

function FormataCpf(cpf) {
    if (!cpf) { return ''; }

    cpf = cpf.toString();
    cpf = cpf.replace(/\D/g, "");                    //Remove tudo o que não é dígito
    cpf = cpf.substr(0, 11);
    cpf = cpf.replace(/(\d{3})(\d)/, "$1.$2");       //Coloca um ponto entre o terceiro e o quarto dígitos
    cpf = cpf.replace(/(\d{3})(\d)/, "$1.$2");       //Coloca um ponto entre o sexto e o setimo dígitos
    cpf = cpf.replace(/(\d{3})(\d{1,2})$/, "$1-$2"); //Coloca um hífen entre o nono e o decimo dígitos
    return cpf;
};

function FormataCnpj(cnpj) {
    if (!cnpj) { return ''; }

    cnpj = cnpj.toString();
    cnpj = cnpj.replace(/\D/g, "");                           //Remove tudo o que não é dígito
    cnpj = cnpj.substr(0, 14);
    cnpj = cnpj.replace(/^(\d{2})(\d)/, "$1.$2");             //Coloca ponto entre o segundo e o terceiro dígitos
    cnpj = cnpj.replace(/^(\d{2})\.(\d{3})(\d)/, "$1.$2.$3"); //Coloca ponto entre o quinto e o sexto dígitos
    cnpj = cnpj.replace(/\.(\d{3})(\d)/, ".$1/$2");           //Coloca uma barra entre o oitavo e o nono dígitos
    cnpj = cnpj.replace(/(\d{4})(\d)/, "$1-$2");              //Coloca um hífen depois do bloco de quatro dígitos
    return cnpj;
};

function maskCep() {
    return function (cep) {
        if (!cep) { return ''; }

        cep = cep.toString();
        cep = cep.replace(/\D/g, "");                    //Remove tudo o que não é dígito
        cep = cep.substr(0, 8);
        cep = cep.replace(/^(\d{2})(\d)/, "$1.$2");       //Coloca um ponto entre o terceiro e o quarto dígitos
        cep = cep.replace(/(\d{3})(\d)/, "$1-$2");      //Coloca um hífen depois do bloco de cinco dígitos
        return cep;
    };
};

function maskData() {
    return function (data) {
        if (!data) { return ''; }

        data = data.toString();
        data = data.replace(/[^\d\/]/g, "");                         //Remove tudo o que não é dígito e /
        data = data.substr(0, 10);
        data = data.replace(/^((\d{1})\/|(\d{2})\/?)(\d)/, "$2$3/$4");
        data = data.replace(/^(\d{1,2}\/)((\d{1})\/|(\d{2})\/?)(\d)/, "$1$3$4/$5");
        data = data.replace(/^(\d{1,2}\/)(\d{1,2}\/)(\d{1,4})\d{0,2}/, "$1$2$3");
        return data;
    };
}

function maskHora() {
    return function (hora) {
        if (!hora) { return ''; }
        hora = hora.toString();
        hora = hora.replace(/\D/g, "");
        hora = hora.replace(/^0(\d{4})/, "$1");
        hora = hora.substr(0, 4);
        hora = hora.replace(/^(\d{3})$/, "0$1");
        hora = hora.replace(/^(\d{2})(\d)/, "$1:$2");
        return hora;
    };
};

///Mascara para telefone com código do país
function maskTelefoneDdi() {
    return function (telefone) {
        if (!telefone) { return ''; }

        telefone = telefone.toString();
        telefone = telefone.replace(/\D/g, ""); //Remove tudo o que não é dígito
        telefone = telefone.substr(0, 13);

        var novoDigito = telefone.length == 13;

        telefone = telefone.replace(/^(\d\d)(\d\d)(\d)/g, "+$1 ($2) $3"); //Coloca "+" antes dos dois primeiros dígitos e coloca parenteses no terceiro e no quarto.
        telefone = telefone.replace(novoDigito ? /(\d{5})(\d)/ : /(\d{4})(\d)/, "$1-$2"); //Coloca hífen entre o quarto e o quinto dígitos do número
        return telefone;
    };
};