(function (a) { var b = (a.browser.msie ? "paste" : "input") + ".mask"; var c = window.orientation != undefined; a.mask = { definitions: { 9: "[0-9]", a: "[A-Za-z]", "*": "[A-Za-z0-9]" }, dataName: "rawMaskFn" }; a.fn.extend({ caret: function (a, b) { if (this.length == 0) return; if (typeof a == "number") { b = typeof b == "number" ? b : a; return this.each(function () { if (this.setSelectionRange) { this.setSelectionRange(a, b) } else if (this.createTextRange) { var c = this.createTextRange(); c.collapse(true); c.moveEnd("character", b); c.moveStart("character", a); c.select() } }) } else { if (this[0].setSelectionRange) { a = this[0].selectionStart; b = this[0].selectionEnd } else if (document.selection && document.selection.createRange) { var c = document.selection.createRange(); a = 0 - c.duplicate().moveStart("character", -1e5); b = a + c.text.length } return { begin: a, end: b} } }, unmask: function () { return this.trigger("unmask") }, mask: function (d, e) { if (!d && this.length > 0) { var f = a(this[0]); return f.data(a.mask.dataName)() } e = a.extend({ placeholder: "_", completed: null }, e); var g = a.mask.definitions; var h = []; var i = d.length; var j = null; var k = d.length; a.each(d.split(""), function (a, b) { if (b == "?") { k--; i = a } else if (g[b]) { h.push(new RegExp(g[b])); if (j == null) j = h.length - 1 } else { h.push(null) } }); return this.trigger("unmask").each(function () { function v(a) { var b = f.val(); var c = -1; for (var d = 0, g = 0; d < k; d++) { if (h[d]) { l[d] = e.placeholder; while (g++ < b.length) { var m = b.charAt(g - 1); if (h[d].test(m)) { l[d] = m; c = d; break } } if (g > b.length) break } else if (l[d] == b.charAt(g) && d != i) { g++; c = d } } if (!a && c + 1 < i) { f.val(""); t(0, k) } else if (a || c + 1 >= i) { u(); if (!a) f.val(f.val().substring(0, c + 1)) } return i ? d : j } function u() { return f.val(l.join("")).val() } function t(a, b) { for (var c = a; c < b && c < k; c++) { if (h[c]) l[c] = e.placeholder } } function s(a) { var b = a.which, c = f.caret(); if (a.ctrlKey || a.altKey || a.metaKey || b < 32) { return true } else if (b) { if (c.end - c.begin != 0) { t(c.begin, c.end); p(c.begin, c.end - 1) } var d = n(c.begin - 1); if (d < k) { var g = String.fromCharCode(b); if (h[d].test(g)) { q(d); l[d] = g; u(); var i = n(d); f.caret(i); if (e.completed && i >= k) e.completed.call(f) } } return false } } function r(a) { var b = a.which; if (b == 8 || b == 46 || c && b == 127) { var d = f.caret(), e = d.begin, g = d.end; if (g - e == 0) { e = b != 46 ? o(e) : g = n(e - 1); g = b == 46 ? n(g) : g } t(e, g); p(e, g - 1); return false } else if (b == 27) { f.val(m); f.caret(0, v()); return false } } function q(a) { for (var b = a, c = e.placeholder; b < k; b++) { if (h[b]) { var d = n(b); var f = l[b]; l[b] = c; if (d < k && h[d].test(f)) c = f; else break } } } function p(a, b) { if (a < 0) return; for (var c = a, d = n(b); c < k; c++) { if (h[c]) { if (d < k && h[c].test(l[d])) { l[c] = l[d]; l[d] = e.placeholder } else break; d = n(d) } } u(); f.caret(Math.max(j, a)) } function o(a) { while (--a >= 0 && !h[a]); return a } function n(a) { while (++a <= k && !h[a]); return a } var f = a(this); var l = a.map(d.split(""), function (a, b) { if (a != "?") return g[a] ? e.placeholder : a }); var m = f.val(); f.data(a.mask.dataName, function () { return a.map(l, function (a, b) { return h[b] && a != e.placeholder ? a : null }).join("") }); if (!f.attr("readonly")) f.one("unmask", function () { f.unbind(".mask").removeData(a.mask.dataName) }).bind("focus.mask", function () { m = f.val(); var b = v(); u(); var c = function () { if (b == d.length) f.caret(0, b); else f.caret(b) }; (a.browser.msie ? c : function () { setTimeout(c, 0) })() }).bind("blur.mask", function () { v(); if (f.val() != m) f.change() }).bind("keydown.mask", r).bind("keypress.mask", s).bind(b, function () { setTimeout(function () { f.caret(v(true)) }, 0) }); v() }) } }) })(jQuery)
