﻿// referência
// http://snippets.dzone.com/posts/show/666
//

maskInput = function(f, m) { //v1.0
    function mask(e) {
        var patterns = { "1": /[A-Z]/i, "2": /[0-9]/, "4": /[À-ÿ]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C": 5, "c": 1, "*": 8 };
        function accept(c, rule) {
            for (var i = 1, r = rules[rule] || 0; i <= r; i <<= 1)
                if (r & i && patterns[i].test(c))
                break;
            return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for (var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), { keypress: 0, keyup: 1 })
        addEvent(f, i, mask);
};

// formatarNumero(num)
// - num: um número qualquer
// - retorno: uma string representando o número formatado, com separador de milhar e de casas decimais
function formatarNumero(num) {
    var sinal = num >= 0 ? '' : '-';

    num = Math.abs(num);

    var resultado = num.toFixed(2);

    if (resultado.indexOf('.00') > 0) {
        resultado = resultado.replace('.00', '');
    }

    if (resultado.indexOf('.') > 0) {
        resultado = resultado.replace('.', ',');
    }

    var ind = resultado.indexOf(',')-1;
    if (ind < 0) {
        ind = resultado.length - 1;
    }

    var casas = 0;
    for (var i = ind; i >= 0; i--) {
        casas++;
        if (casas == 3) {
            casas = 0;
            if (i != 0) {
                resultado = resultado.substring(0, i) + '.' + resultado.substr(i);
            }
        }
    }

    resultado = sinal + resultado;
    
    return resultado;
}



