(function(f) {
    f.fn.maskMoney = function(d) {
        d = f.extend({ symbol: "US$", decimal: ".", precision: 2, thousands: ",", showSymbol: true }, d); d.symbol += " "; return this.each(function() {
            var c = f(this); function j(a) { a = a || window.event; var e = a.charCode || a.keyCode || a.which; if (e == 8) { h(a); a = c.val().substring(0, c.val().length - 1); c.val(k(a)); return false } else if (e == 9) return true; if (e < 48 || e > 57) { h(a); return true } e = String.fromCharCode(e); h(a); c.val(k(c.val() + e)) } function h(a) {
                if (a.preventDefault) a.preventDefault(); else a.returnValue =
false
            } function k(a) { a = a.replace(d.symbol, ""); var e = "", o = "0123456789", l = a.length, b = ""; for (b = 0; b < l; b++) if (a.charAt(b) != "0" && a.charAt(b) != d.decimal) break; for (; b < l; b++) if (o.indexOf(a.charAt(b)) != -1) e += a.charAt(b); b = parseFloat(e); b = isNaN(b) ? 0 : b / Math.pow(10, d.precision); b = b.toFixed(d.precision); e = (b = b.split("."))[1].substr(0, d.precision); for (a = (b = b[0]).length; (a -= 3) >= 1; ) b = b.substr(0, a) + d.thousands + b.substr(a); return g(b + d.decimal + e + Array(d.precision + 1 - e.length).join(0)) } function m() {
                c.val() == "" ? c.val(g(n())) :
c.val(g(c.val()))
            } function i() { c.val() == g(n()) ? c.val("") : c.val(c.val().replace(d.symbol, "")) } function n() { var a = parseFloat("0") / Math.pow(10, d.precision); return a.toFixed(d.precision).replace(new RegExp("\\.", "g"), d.decimal) } function g(a) { if (d.showSymbol) return d.symbol + a; return a } c.bind("keypress", j); c.bind("blur", i); c.bind("focus", m); c.one("unmaskMoney", function() {
                c.unbind("focus", m); c.unbind("blur", i); c.unbind("keypress", j); if (f.browser.msie) this.onpaste = null; else f.browser.mozilla && this.removeEventListener("input",
i, false)
            })
        })
    }; f.fn.unmaskMoney = function() { return this.trigger("unmaskMoney") } 
})(jQuery);
