/* http://jqueryvalidation.org/documentation/ */
(function (t) { t.extend(t.fn, { validate: function (e) { if (!this.length) return e && e.debug && window.console && console.warn("Nothing selected, can't validate, returning nothing."), void 0; var i = t.data(this[0], "validator"); return i ? i : (this.attr("novalidate", "novalidate"), i = new t.validator(e, this[0]), t.data(this[0], "validator", i), i.settings.onsubmit && (this.validateDelegate(":submit", "click", function (e) { i.settings.submitHandler && (i.submitButton = e.target), t(e.target).hasClass("cancel") && (i.cancelSubmit = !0), void 0 !== t(e.target).attr("formnovalidate") && (i.cancelSubmit = !0) }), this.submit(function (e) { function s() { var s; return i.settings.submitHandler ? (i.submitButton && (s = t("").attr("name", i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)), i.settings.submitHandler.call(i, i.currentForm, e), i.submitButton && s.remove(), !1) : !0 } return i.settings.debug && e.preventDefault(), i.cancelSubmit ? (i.cancelSubmit = !1, s()) : i.form() ? i.pendingRequest ? (i.formSubmitted = !0, !1) : s() : (i.focusInvalid(), !1) })), i) }, valid: function () { if (t(this[0]).is("form")) return this.validate().form(); var e = !0, i = t(this[0].form).validate(); return this.each(function () { e = e && i.element(this) }), e }, removeAttrs: function (e) { var i = {}, s = this; return t.each(e.split(/\s/), function (t, e) { i[e] = s.attr(e), s.removeAttr(e) }), i }, rules: function (e, i) { var s = this[0]; if (e) { var r = t.data(s.form, "validator").settings, n = r.rules, a = t.validator.staticRules(s); switch (e) { case "add": t.extend(a, t.validator.normalizeRule(i)), delete a.messages, n[s.name] = a, i.messages && (r.messages[s.name] = t.extend(r.messages[s.name], i.messages)); break; case "remove": if (!i) return delete n[s.name], a; var u = {}; return t.each(i.split(/\s/), function (t, e) { u[e] = a[e], delete a[e] }), u } } var o = t.validator.normalizeRules(t.extend({}, t.validator.classRules(s), t.validator.attributeRules(s), t.validator.dataRules(s), t.validator.staticRules(s)), s); if (o.required) { var l = o.required; delete o.required, o = t.extend({ required: l }, o) } return o } }), t.extend(t.expr[":"], { blank: function (e) { return !t.trim("" + t(e).val()) }, filled: function (e) { return !!t.trim("" + t(e).val()) }, unchecked: function (e) { return !t(e).prop("checked") } }), t.validator = function (e, i) { this.settings = t.extend(!0, {}, t.validator.defaults, e), this.currentForm = i, this.init() }, t.validator.format = function (e, i) { return 1 === arguments.length ? function () { var i = t.makeArray(arguments); return i.unshift(e), t.validator.format.apply(this, i) } : (arguments.length > 2 && i.constructor !== Array && (i = t.makeArray(arguments).slice(1)), i.constructor !== Array && (i = [i]), t.each(i, function (t, i) { e = e.replace(RegExp("\\{" + t + "\\}", "g"), function () { return i }) }), e) }, t.extend(t.validator, { defaults: { messages: {}, groups: {}, rules: {}, errorClass: "error", validClass: "valid", errorElement: "label", focusInvalid: !0, errorContainer: t([]), errorLabelContainer: t([]), onsubmit: !0, ignore: ":hidden", ignoreTitle: !1, onfocusin: function (t) { this.lastActive = t, this.settings.focusCleanup && !this.blockFocusCleanup && (this.settings.unhighlight && this.settings.unhighlight.call(this, t, this.settings.errorClass, this.settings.validClass), this.addWrapper(this.errorsFor(t)).hide()) }, onfocusout: function (t) { this.checkable(t) || !(t.name in this.submitted) && this.optional(t) || this.element(t) }, onkeyup: function (t, e) { (9 !== e.which || "" !== this.elementValue(t)) && (t.name in this.submitted || t === this.lastElement) && this.element(t) }, onclick: function (t) { t.name in this.submitted ? this.element(t) : t.parentNode.name in this.submitted && this.element(t.parentNode) }, highlight: function (e, i, s) { "radio" === e.type ? this.findByName(e.name).addClass(i).removeClass(s) : t(e).addClass(i).removeClass(s) }, unhighlight: function (e, i, s) { "radio" === e.type ? this.findByName(e.name).removeClass(i).addClass(s) : t(e).removeClass(i).addClass(s) } }, setDefaults: function (e) { t.extend(t.validator.defaults, e) }, messages: { required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a valid date (ISO).", number: "Please enter a valid number.", digits: "Please enter only digits.", creditcard: "Please enter a valid credit card number.", equalTo: "Please enter the same value again.", maxlength: t.validator.format("Please enter no more than {0} characters."), minlength: t.validator.format("Please enter at least {0} characters."), rangelength: t.validator.format("Please enter a value between {0} and {1} characters long."), range: t.validator.format("Please enter a value between {0} and {1}."), max: t.validator.format("Please enter a value less than or equal to {0}."), min: t.validator.format("Please enter a value greater than or equal to {0}.") }, autoCreateRanges: !1, prototype: { init: function () { function e(e) { var i = t.data(this[0].form, "validator"), s = "on" + e.type.replace(/^validate/, ""); i.settings[s] && i.settings[s].call(i, this[0], e) } this.labelContainer = t(this.settings.errorLabelContainer), this.errorContext = this.labelContainer.length && this.labelContainer || t(this.currentForm), this.containers = t(this.settings.errorContainer).add(this.settings.errorLabelContainer), this.submitted = {}, this.valueCache = {}, this.pendingRequest = 0, this.pending = {}, this.invalid = {}, this.reset(); var i = this.groups = {}; t.each(this.settings.groups, function (e, s) { "string" == typeof s && (s = s.split(/\s/)), t.each(s, function (t, s) { i[s] = e }) }); var s = this.settings.rules; t.each(s, function (e, i) { s[e] = t.validator.normalizeRule(i) }), t(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ", "focusin focusout keyup", e).validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", e), this.settings.invalidHandler && t(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler) }, form: function () { return this.checkForm(), t.extend(this.submitted, this.errorMap), this.invalid = t.extend({}, this.errorMap), this.valid() || t(this.currentForm).triggerHandler("invalid-form", [this]), this.showErrors(), this.valid() }, checkForm: function () { this.prepareForm(); for (var t = 0, e = this.currentElements = this.elements(); e[t]; t++) this.check(e[t]); return this.valid() }, element: function (e) { e = this.validationTargetFor(this.clean(e)), this.lastElement = e, this.prepareElement(e), this.currentElements = t(e); var i = this.check(e) !== !1; return i ? delete this.invalid[e.name] : this.invalid[e.name] = !0, this.numberOfInvalids() || (this.toHide = this.toHide.add(this.containers)), this.showErrors(), i }, showErrors: function (e) { if (e) { t.extend(this.errorMap, e), this.errorList = []; for (var i in e) this.errorList.push({ message: e[i], element: this.findByName(i)[0] }); this.successList = t.grep(this.successList, function (t) { return !(t.name in e) }) } this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors() }, resetForm: function () { t.fn.resetForm && t(this.currentForm).resetForm(), this.submitted = {}, this.lastElement = null, this.prepareForm(), this.hideErrors(), this.elements().removeClass(this.settings.errorClass).removeData("previousValue") }, numberOfInvalids: function () { return this.objectLength(this.invalid) }, objectLength: function (t) { var e = 0; for (var i in t) e++; return e }, hideErrors: function () { this.addWrapper(this.toHide).hide() }, valid: function () { return 0 === this.size() }, size: function () { return this.errorList.length }, focusInvalid: function () { if (this.settings.focusInvalid) try { t(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus().trigger("focusin") } catch (e) { } }, findLastActive: function () { var e = this.lastActive; return e && 1 === t.grep(this.errorList, function (t) { return t.element.name === e.name }).length && e }, elements: function () { var e = this, i = {}; return t(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function () { return !this.name && e.settings.debug && window.console && console.error("%o has no name assigned", this), this.name in i || !e.objectLength(t(this).rules()) ? !1 : (i[this.name] = !0, !0) }) }, clean: function (e) { return t(e)[0] }, errors: function () { var e = this.settings.errorClass.replace(" ", "."); return t(this.settings.errorElement + "." + e, this.errorContext) }, reset: function () { this.successList = [], this.errorList = [], this.errorMap = {}, this.toShow = t([]), this.toHide = t([]), this.currentElements = t([]) }, prepareForm: function () { this.reset(), this.toHide = this.errors().add(this.containers) }, prepareElement: function (t) { this.reset(), this.toHide = this.errorsFor(t) }, elementValue: function (e) { var i = t(e).attr("type"), s = t(e).val(); return "radio" === i || "checkbox" === i ? t("input[name='" + t(e).attr("name") + "']:checked").val() : "string" == typeof s ? s.replace(/\r/g, "") : s }, check: function (e) { e = this.validationTargetFor(this.clean(e)); var i, s = t(e).rules(), r = !1, n = this.elementValue(e); for (var a in s) { var u = { method: a, parameters: s[a] }; try { if (i = t.validator.methods[a].call(this, n, e, u.parameters), "dependency-mismatch" === i) { r = !0; continue } if (r = !1, "pending" === i) return this.toHide = this.toHide.not(this.errorsFor(e)), void 0; if (!i) return this.formatAndAdd(e, u), !1 } catch (o) { throw this.settings.debug && window.console && console.log("Exception occurred when checking element " + e.id + ", check the '" + u.method + "' method.", o), o } } return r ? void 0 : (this.objectLength(s) && this.successList.push(e), !0) }, customDataMessage: function (e, i) { return t(e).data("msg-" + i.toLowerCase()) || e.attributes && t(e).attr("data-msg-" + i.toLowerCase()) }, customMessage: function (t, e) { var i = this.settings.messages[t]; return i && (i.constructor === String ? i : i[e]) }, findDefined: function () { for (var t = 0; arguments.length > t; t++) if (void 0 !== arguments[t]) return arguments[t]; return void 0 }, defaultMessage: function (e, i) { return this.findDefined(this.customMessage(e.name, i), this.customDataMessage(e, i), !this.settings.ignoreTitle && e.title || void 0, t.validator.messages[i], "Warning: No message defined for " + e.name + "") }, formatAndAdd: function (e, i) { var s = this.defaultMessage(e, i.method), r = /\$?\{(\d+)\}/g; "function" == typeof s ? s = s.call(this, i.parameters, e) : r.test(s) && (s = t.validator.format(s.replace(r, "{$1}"), i.parameters)), this.errorList.push({ message: s, element: e }), this.errorMap[e.name] = s, this.submitted[e.name] = s }, addWrapper: function (t) { return this.settings.wrapper && (t = t.add(t.parent(this.settings.wrapper))), t }, defaultShowErrors: function () { var t, e; for (t = 0; this.errorList[t]; t++) { var i = this.errorList[t]; this.settings.highlight && this.settings.highlight.call(this, i.element, this.settings.errorClass, this.settings.validClass), this.showLabel(i.element, i.message) } if (this.errorList.length && (this.toShow = this.toShow.add(this.containers)), this.settings.success) for (t = 0; this.successList[t]; t++) this.showLabel(this.successList[t]); if (this.settings.unhighlight) for (t = 0, e = this.validElements(); e[t]; t++) this.settings.unhighlight.call(this, e[t], this.settings.errorClass, this.settings.validClass); this.toHide = this.toHide.not(this.toShow), this.hideErrors(), this.addWrapper(this.toShow).show() }, validElements: function () { return this.currentElements.not(this.invalidElements()) }, invalidElements: function () { return t(this.errorList).map(function () { return this.element }) }, showLabel: function (e, i) { var s = this.errorsFor(e); s.length ? (s.removeClass(this.settings.validClass).addClass(this.settings.errorClass), s.html(i)) : (s = t("<" + this.settings.errorElement + ">").attr("for", this.idOrName(e)).addClass(this.settings.errorClass).html(i || ""), this.settings.wrapper && (s = s.hide().show().wrap("<" + this.settings.wrapper + "/>").parent()), this.labelContainer.append(s).length || (this.settings.errorPlacement ? this.settings.errorPlacement(s, t(e)) : s.insertAfter(e))), !i && this.settings.success && (s.text(""), "string" == typeof this.settings.success ? s.addClass(this.settings.success) : this.settings.success(s, e)), this.toShow = this.toShow.add(s) }, errorsFor: function (e) { var i = this.idOrName(e); return this.errors().filter(function () { return t(this).attr("for") === i }) }, idOrName: function (t) { return this.groups[t.name] || (this.checkable(t) ? t.name : t.id || t.name) }, validationTargetFor: function (t) { return this.checkable(t) && (t = this.findByName(t.name).not(this.settings.ignore)[0]), t }, checkable: function (t) { return /radio|checkbox/i.test(t.type) }, findByName: function (e) { return t(this.currentForm).find("[name='" + e + "']") }, getLength: function (e, i) { switch (i.nodeName.toLowerCase()) { case "select": return t("option:selected", i).length; case "input": if (this.checkable(i)) return this.findByName(i.name).filter(":checked").length } return e.length }, depend: function (t, e) { return this.dependTypes[typeof t] ? this.dependTypes[typeof t](t, e) : !0 }, dependTypes: { "boolean": function (t) { return t }, string: function (e, i) { return !!t(e, i.form).length }, "function": function (t, e) { return t(e) } }, optional: function (e) { var i = this.elementValue(e); return !t.validator.methods.required.call(this, i, e) && "dependency-mismatch" }, startRequest: function (t) { this.pending[t.name] || (this.pendingRequest++ , this.pending[t.name] = !0) }, stopRequest: function (e, i) { this.pendingRequest-- , 0 > this.pendingRequest && (this.pendingRequest = 0), delete this.pending[e.name], i && 0 === this.pendingRequest && this.formSubmitted && this.form() ? (t(this.currentForm).submit(), this.formSubmitted = !1) : !i && 0 === this.pendingRequest && this.formSubmitted && (t(this.currentForm).triggerHandler("invalid-form", [this]), this.formSubmitted = !1) }, previousValue: function (e) { return t.data(e, "previousValue") || t.data(e, "previousValue", { old: null, valid: !0, message: this.defaultMessage(e, "remote") }) } }, classRuleSettings: { required: { required: !0 }, email: { email: !0 }, url: { url: !0 }, date: { date: !0 }, dateISO: { dateISO: !0 }, number: { number: !0 }, digits: { digits: !0 }, creditcard: { creditcard: !0 } }, addClassRules: function (e, i) { e.constructor === String ? this.classRuleSettings[e] = i : t.extend(this.classRuleSettings, e) }, classRules: function (e) { var i = {}, s = t(e).attr("class"); return s && t.each(s.split(" "), function () { this in t.validator.classRuleSettings && t.extend(i, t.validator.classRuleSettings[this]) }), i }, attributeRules: function (e) { var i = {}, s = t(e), r = s[0].getAttribute("type"); for (var n in t.validator.methods) { var a; "required" === n ? (a = s.get(0).getAttribute(n), "" === a && (a = !0), a = !!a) : a = s.attr(n), /min|max/.test(n) && (null === r || /number|range|text/.test(r)) && (a = Number(a)), a ? i[n] = a : r === n && "range" !== r && (i[n] = !0) } return i.maxlength && /-1|2147483647|524288/.test(i.maxlength) && delete i.maxlength, i }, dataRules: function (e) { var i, s, r = {}, n = t(e); for (i in t.validator.methods) s = n.data("rule-" + i.toLowerCase()), void 0 !== s && (r[i] = s); return r }, staticRules: function (e) { var i = {}, s = t.data(e.form, "validator"); return s.settings.rules && (i = t.validator.normalizeRule(s.settings.rules[e.name]) || {}), i }, normalizeRules: function (e, i) { return t.each(e, function (s, r) { if (r === !1) return delete e[s], void 0; if (r.param || r.depends) { var n = !0; switch (typeof r.depends) { case "string": n = !!t(r.depends, i.form).length; break; case "function": n = r.depends.call(i, i) } n ? e[s] = void 0 !== r.param ? r.param : !0 : delete e[s] } }), t.each(e, function (s, r) { e[s] = t.isFunction(r) ? r(i) : r }), t.each(["minlength", "maxlength"], function () { e[this] && (e[this] = Number(e[this])) }), t.each(["rangelength", "range"], function () { var i; e[this] && (t.isArray(e[this]) ? e[this] = [Number(e[this][0]), Number(e[this][1])] : "string" == typeof e[this] && (i = e[this].split(/[\s,]+/), e[this] = [Number(i[0]), Number(i[1])])) }), t.validator.autoCreateRanges && (e.min && e.max && (e.range = [e.min, e.max], delete e.min, delete e.max), e.minlength && e.maxlength && (e.rangelength = [e.minlength, e.maxlength], delete e.minlength, delete e.maxlength)), e }, normalizeRule: function (e) { if ("string" == typeof e) { var i = {}; t.each(e.split(/\s/), function () { i[this] = !0 }), e = i } return e }, addMethod: function (e, i, s) { t.validator.methods[e] = i, t.validator.messages[e] = void 0 !== s ? s : t.validator.messages[e], 3 > i.length && t.validator.addClassRules(e, t.validator.normalizeRule(e)) }, methods: { required: function (e, i, s) { if (!this.depend(s, i)) return "dependency-mismatch"; if ("select" === i.nodeName.toLowerCase()) { var r = t(i).val(); return r && r.length > 0 } return this.checkable(i) ? this.getLength(e, i) > 0 : t.trim(e).length > 0 }, email: function (t, e) { return this.optional(e) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(t) }, url: function (t, e) { return this.optional(e) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(t) }, date: function (t, e) { return this.optional(e) || !/Invalid|NaN/.test("" + new Date(t)) }, dateISO: function (t, e) { return this.optional(e) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(t) }, number: function (t, e) { return this.optional(e) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t) }, digits: function (t, e) { return this.optional(e) || /^\d+$/.test(t) }, creditcard: function (t, e) { if (this.optional(e)) return "dependency-mismatch"; if (/[^0-9 \-]+/.test(t)) return !1; var i = 0, s = 0, r = !1; t = t.replace(/\D/g, ""); for (var n = t.length - 1; n >= 0; n--) { var a = t.charAt(n); s = parseInt(a, 10), r && (s *= 2) > 9 && (s -= 9), i += s, r = !r } return 0 === i % 10 }, minlength: function (e, i, s) { var r = t.isArray(e) ? e.length : this.getLength(t.trim(e), i); return this.optional(i) || r >= s }, maxlength: function (e, i, s) { var r = t.isArray(e) ? e.length : this.getLength(t.trim(e), i); return this.optional(i) || s >= r }, rangelength: function (e, i, s) { var r = t.isArray(e) ? e.length : this.getLength(t.trim(e), i); return this.optional(i) || r >= s[0] && s[1] >= r }, min: function (t, e, i) { return this.optional(e) || t >= i }, max: function (t, e, i) { return this.optional(e) || i >= t }, range: function (t, e, i) { return this.optional(e) || t >= i[0] && i[1] >= t }, equalTo: function (e, i, s) { var r = t(s); return this.settings.onfocusout && r.unbind(".validate-equalTo").bind("blur.validate-equalTo", function () { t(i).valid() }), e === r.val() }, remote: function (e, i, s) { if (this.optional(i)) return "dependency-mismatch"; var r = this.previousValue(i); if (this.settings.messages[i.name] || (this.settings.messages[i.name] = {}), r.originalMessage = this.settings.messages[i.name].remote, this.settings.messages[i.name].remote = r.message, s = "string" == typeof s && { url: s } || s, r.old === e) return r.valid; r.old = e; var n = this; this.startRequest(i); var a = {}; return a[i.name] = e, t.ajax(t.extend(!0, { url: s, mode: "abort", port: "validate" + i.name, dataType: "json", data: a, success: function (s) { n.settings.messages[i.name].remote = r.originalMessage; var a = s === !0 || "true" === s; if (a) { var u = n.formSubmitted; n.prepareElement(i), n.formSubmitted = u, n.successList.push(i), delete n.invalid[i.name], n.showErrors() } else { var o = {}, l = s || n.defaultMessage(i, "remote"); o[i.name] = r.message = t.isFunction(l) ? l(e) : l, n.invalid[i.name] = !0, n.showErrors(o) } r.valid = a, n.stopRequest(i, a) } }, s)), "pending" } } }), t.format = t.validator.format })(jQuery), function (t) { var e = {}; if (t.ajaxPrefilter) t.ajaxPrefilter(function (t, i, s) { var r = t.port; "abort" === t.mode && (e[r] && e[r].abort(), e[r] = s) }); else { var i = t.ajax; t.ajax = function (s) { var r = ("mode" in s ? s : t.ajaxSettings).mode, n = ("port" in s ? s : t.ajaxSettings).port; return "abort" === r ? (e[n] && e[n].abort(), e[n] = i.apply(this, arguments), e[n]) : i.apply(this, arguments) } } }(jQuery), function (t) { t.extend(t.fn, { validateDelegate: function (e, i, s) { return this.bind(i, function (i) { var r = t(i.target); return r.is(e) ? s.apply(r, arguments) : void 0 }) } }) }(jQuery);
(function ($) { if ($.fn.inputmask == undefined) { $.inputmask = { defaults: { placeholder: "_", optionalmarker: { start: "[", end: "]" }, quantifiermarker: { start: "{", end: "}" }, groupmarker: { start: "(", end: ")" }, escapeChar: "\\", mask: null, oncomplete: $.noop, onincomplete: $.noop, oncleared: $.noop, repeat: 0, greedy: true, autoUnmask: false, clearMaskOnLostFocus: true, insertMode: true, clearIncomplete: false, aliases: {}, onKeyUp: $.noop, onKeyDown: $.noop, showMaskOnFocus: true, showMaskOnHover: true, onKeyValidation: $.noop, skipOptionalPartCharacter: " ", showTooltip: false, numericInput: false, isNumeric: false, radixPoint: "", skipRadixDance: false, rightAlignNumerics: true, definitions: { "9": { validator: "[0-9]", cardinality: 1 }, a: { validator: "[A-Za-z\u0410-\u044F\u0401\u0451]", cardinality: 1 }, "*": { validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]", cardinality: 1 } }, keyCode: { ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91 }, ignorables: [9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123], getMaskLength: function (buffer, greedy, repeat, currentBuffer, opts) { var calculatedLength = buffer.length; if (!greedy) { if (repeat == "*") { calculatedLength = currentBuffer.length + 1 } else { if (repeat > 1) { calculatedLength += (buffer.length * (repeat - 1)) } } } return calculatedLength } }, val: $.fn.val, escapeRegex: function (str) { var specials = ["/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\"]; return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1") } }; $.fn.inputmask = function (fn, options) { var opts = $.extend(true, {}, $.inputmask.defaults, options), msie10 = false, iphone = navigator.userAgent.match(new RegExp("iphone", "i")) !== null, android = navigator.userAgent.match(new RegExp("android.*safari.*", "i")) !== null, pasteEvent = isInputEventSupported("paste") && !msie10 ? "paste" : "input", android53x, masksets, activeMasksetIndex = 0; if (android) { var browser = navigator.userAgent.match(/safari.*/i), version = parseInt(new RegExp(/[0-9]+/).exec(browser)); android53x = (version <= 537) } if (typeof fn === "string") { switch (fn) { case "mask": resolveAlias(opts.alias, options); masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), 0).mask(this) }); case "unmaskedvalue": var $input = $(this), input = this; if ($input.data("_inputmask")) { masksets = $input.data("_inputmask")["masksets"]; activeMasksetIndex = $input.data("_inputmask")["activeMasksetIndex"]; opts = $input.data("_inputmask")["opts"]; return maskScope(masksets, activeMasksetIndex).unmaskedvalue($input) } else { return $input.val() } case "remove": return this.each(function () { var $input = $(this), input = this; if ($input.data("_inputmask")) { masksets = $input.data("_inputmask")["masksets"]; activeMasksetIndex = $input.data("_inputmask")["activeMasksetIndex"]; opts = $input.data("_inputmask")["opts"]; input._valueSet(maskScope(masksets, activeMasksetIndex).unmaskedvalue($input, true)); $input.removeData("_inputmask"); $input.unbind(".inputmask"); $input.removeClass("focus.inputmask"); var valueProperty; if (Object.getOwnPropertyDescriptor) { valueProperty = Object.getOwnPropertyDescriptor(input, "value") } if (valueProperty && valueProperty.get) { if (input._valueGet) { Object.defineProperty(input, "value", { get: input._valueGet, set: input._valueSet }) } } else { if (document.__lookupGetter__ && input.__lookupGetter__("value")) { if (input._valueGet) { input.__defineGetter__("value", input._valueGet); input.__defineSetter__("value", input._valueSet) } } } try { delete input._valueGet; delete input._valueSet } catch (e) { input._valueGet = undefined; input._valueSet = undefined } } }); break; case "getemptymask": if (this.data("_inputmask")) { masksets = this.data("_inputmask")["masksets"]; activeMasksetIndex = this.data("_inputmask")["activeMasksetIndex"]; return masksets[activeMasksetIndex]["_buffer"].join("") } else { return "" } case "hasMaskedValue": return this.data("_inputmask") ? !this.data("_inputmask")["opts"].autoUnmask : false; case "isComplete": masksets = this.data("_inputmask")["masksets"]; activeMasksetIndex = this.data("_inputmask")["activeMasksetIndex"]; opts = this.data("_inputmask")["opts"]; return maskScope(masksets, activeMasksetIndex).isComplete(this[0]._valueGet().split("")); default: if (!resolveAlias(fn, options)) { opts.mask = fn } masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), activeMasksetIndex).mask(this) }); break } } else { if (typeof fn == "object") { opts = $.extend(true, {}, $.inputmask.defaults, fn); resolveAlias(opts.alias, fn); masksets = generateMaskSets(); return this.each(function () { maskScope($.extend(true, {}, masksets), activeMasksetIndex).mask(this) }) } else { if (fn == undefined) { return this.each(function () { var attrOptions = $(this).attr("data-inputmask"); if (attrOptions && attrOptions != "") { try { attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'); var dataoptions = $.parseJSON("{" + attrOptions + "}"); $.extend(true, dataoptions, options); opts = $.extend(true, {}, $.inputmask.defaults, dataoptions); resolveAlias(opts.alias, dataoptions); opts.alias = undefined; $(this).inputmask(opts) } catch (ex) { } } }) } } } function isInputEventSupported(eventName) { var el = document.createElement("input"), eventName = "on" + eventName, isSupported = (eventName in el); if (!isSupported) { el.setAttribute(eventName, "return;"); isSupported = typeof el[eventName] == "function" } el = null; return isSupported } function resolveAlias(aliasStr, options) { var aliasDefinition = opts.aliases[aliasStr]; if (aliasDefinition) { if (aliasDefinition.alias) { resolveAlias(aliasDefinition.alias) } $.extend(true, opts, aliasDefinition); $.extend(true, opts, options); return true } return false } function getMaskTemplate(mask) { var escaped = false, outCount = 0, greedy = opts.greedy, repeat = opts.repeat; if (repeat == "*") { greedy = false } if (mask.length == 1 && greedy == false) { opts.placeholder = "" } var singleMask = $.map(mask.split(""), function (element, index) { var outElem = []; if (element == opts.escapeChar) { escaped = true } else { if ((element != opts.optionalmarker.start && element != opts.optionalmarker.end) || escaped) { var maskdef = opts.definitions[element]; if (maskdef && !escaped) { for (var i = 0; i < maskdef.cardinality; i++) { outElem.push(getPlaceHolder(outCount + i)) } } else { outElem.push(element); escaped = false } outCount += outElem.length; return outElem } } }); var repeatedMask = singleMask.slice(); for (var i = 1; i < repeat && greedy; i++) { repeatedMask = repeatedMask.concat(singleMask.slice()) } return { mask: repeatedMask, repeat: repeat, greedy: greedy } } function getTestingChain(mask) { var isOptional = false, escaped = false; var newBlockMarker = false; return $.map(mask.split(""), function (element, index) { var outElem = []; if (element == opts.escapeChar) { escaped = true } else { if (element == opts.optionalmarker.start && !escaped) { isOptional = true; newBlockMarker = true } else { if (element == opts.optionalmarker.end && !escaped) { isOptional = false; newBlockMarker = true } else { var maskdef = opts.definitions[element]; if (maskdef && !escaped) { var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0; for (var i = 1; i < maskdef.cardinality; i++) { var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality; outElem.push({ fn: validator ? typeof validator == "string" ? new RegExp(validator) : new function () { this.test = validator } : new RegExp("."), cardinality: cardinality ? cardinality : 1, optionality: isOptional, newBlockMarker: isOptional == true ? newBlockMarker : false, offset: 0, casing: maskdef.casing, def: maskdef.definitionSymbol | element }); if (isOptional == true) { newBlockMarker = false } } outElem.push({ fn: maskdef.validator ? typeof maskdef.validator == "string" ? new RegExp(maskdef.validator) : new function () { this.test = maskdef.validator } : new RegExp("."), cardinality: maskdef.cardinality, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: maskdef.casing, def: maskdef.definitionSymbol | element }) } else { outElem.push({ fn: null, cardinality: 0, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: null, def: element }); escaped = false } newBlockMarker = false; return outElem } } } }) } function generateMaskSets() { var ms = []; var genmasks = []; var maskTokens = []; function analyseMask(mask) { var tokenizer = /(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[]()|\\]+|./g; function maskToken() { this.matches = []; this.isGroup = false; this.isOptional = false; this.isQuantifier = false } var currentToken = new maskToken(), match, m, openenings = []; maskTokens = []; while (match = tokenizer.exec(mask)) { m = match[0]; switch (m.charAt(0)) { case opts.optionalmarker.end: case opts.groupmarker.end: var openingToken = openenings.pop(); if (openenings.length > 0) { openenings[openenings.length - 1]["matches"].push(openingToken) } else { currentToken = new maskToken(); maskTokens.push(openingToken) } break; case opts.optionalmarker.start: if (currentToken.matches.length > 0) { maskTokens.push(currentToken) } currentToken = new maskToken(); currentToken.isOptional = true; openenings.push(currentToken); break; case opts.groupmarker.start: if (currentToken.matches.length > 0) { maskTokens.push(currentToken) } currentToken = new maskToken(); currentToken.isGroup = true; openenings.push(currentToken); break; case opts.quantifiermarker.start: var quantifier = new maskToken(); quantifier.isQuantifier = true; quantifier.matches.push(m); if (openenings.length > 0) { openenings[openenings.length - 1]["matches"].push(quantifier) } else { currentToken.matches.push(quantifier); maskTokens.push(currentToken); currentToken = new maskToken() } break; default: if (openenings.length > 0) { openenings[openenings.length - 1]["matches"].push(m) } else { currentToken.matches.push(m) } } } if (currentToken.matches.length > 0) { maskTokens.push(currentToken) } return maskTokens } function markOptional(maskPart) { return opts.optionalmarker.start + maskPart + opts.optionalmarker.end } function splitFirstOptionalEndPart(maskPart) { var optionalStartMarkers = 0, optionalEndMarkers = 0, mpl = maskPart.length; for (i = 0; i < mpl; i++) { if (maskPart.charAt(i) == opts.optionalmarker.start) { optionalStartMarkers++ } if (maskPart.charAt(i) == opts.optionalmarker.end) { optionalEndMarkers++ } if (optionalStartMarkers > 0 && optionalStartMarkers == optionalEndMarkers) { break } } var maskParts = [maskPart.substring(0, i)]; if (i < mpl) { maskParts.push(maskPart.substring(i + 1, mpl)) } return maskParts } function splitFirstOptionalStartPart(maskPart) { var mpl = maskPart.length; for (i = 0; i < mpl; i++) { if (maskPart.charAt(i) == opts.optionalmarker.start) { break } } var maskParts = [maskPart.substring(0, i)]; if (i < mpl) { maskParts.push(maskPart.substring(i + 1, mpl)) } return maskParts } function generateMask(maskPrefix, maskPart) { var maskParts = splitFirstOptionalEndPart(maskPart); var newMask, maskTemplate; var masks = splitFirstOptionalStartPart(maskParts[0]); if (masks.length > 1) { newMask = maskPrefix + masks[0] + markOptional(masks[1]) + (maskParts.length > 1 ? maskParts[1] : ""); if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ mask: newMask, _buffer: maskTemplate.mask, buffer: maskTemplate.mask.slice(), tests: getTestingChain(newMask), lastValidPosition: undefined, greedy: maskTemplate.greedy, repeat: maskTemplate.repeat }) } newMask = maskPrefix + masks[0] + (maskParts.length > 1 ? maskParts[1] : ""); if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ mask: newMask, _buffer: maskTemplate.mask, buffer: maskTemplate.mask.slice(), tests: getTestingChain(newMask), lastValidPosition: undefined, greedy: maskTemplate.greedy, repeat: maskTemplate.repeat }) } if (splitFirstOptionalStartPart(masks[1]).length > 1) { generateMask(maskPrefix + masks[0], masks[1] + maskParts[1]) } if (maskParts.length > 1 && splitFirstOptionalStartPart(maskParts[1]).length > 1) { generateMask(maskPrefix + masks[0] + markOptional(masks[1]), maskParts[1]); generateMask(maskPrefix + masks[0], maskParts[1]) } } else { newMask = maskPrefix + maskParts; if ($.inArray(newMask, genmasks) == -1) { genmasks.push(newMask); maskTemplate = getMaskTemplate(newMask); ms.push({ mask: newMask, _buffer: maskTemplate.mask, buffer: maskTemplate.mask.slice(), tests: getTestingChain(newMask), lastValidPosition: undefined, greedy: maskTemplate.greedy, repeat: maskTemplate.repeat }) } } } if ($.isArray(opts.mask)) { $.each(opts.mask, function (ndx, lmnt) { generateMask("", lmnt.toString()) }) } else { generateMask("", opts.mask.toString()) } return opts.greedy ? ms : ms.sort(function (a, b) { return a.mask.length - b.mask.length }) } function getPlaceHolder(pos) { return opts.placeholder.charAt(pos % opts.placeholder.length) } function maskScope(masksets, activeMasksetIndex) { var isRTL = false; function getActiveMaskSet() { return masksets[activeMasksetIndex] } function getActiveTests() { return getActiveMaskSet()["tests"] } function getActiveBufferTemplate() { return getActiveMaskSet()["_buffer"] } function getActiveBuffer() { return getActiveMaskSet()["buffer"] } function isValid(pos, c, strict) { strict = strict === true; function _isValid(position, activeMaskset) { var testPos = determineTestPosition(position), loopend = c ? 1 : 0, chrs = "", buffer = activeMaskset.buffer; for (var i = activeMaskset.tests[testPos].cardinality; i > loopend; i--) { chrs += getBufferElement(buffer, testPos - (i - 1)) } if (c) { chrs += c } return activeMaskset.tests[testPos].fn != null ? activeMaskset.tests[testPos].fn.test(chrs, buffer, position, strict, opts) : false } if (strict) { var result = _isValid(pos, getActiveMaskSet()); if (result === true) { result = { pos: pos } } return result } var results = [], result = false, currentActiveMasksetIndex = activeMasksetIndex; $.each(masksets, function (index, value) { if (typeof (value) == "object") { activeMasksetIndex = index; var maskPos = pos; if (currentActiveMasksetIndex != activeMasksetIndex && !isMask(pos)) { if (c == getActiveBufferTemplate()[maskPos] || c == opts.skipOptionalPartCharacter) { results.push({ activeMasksetIndex: index, result: { refresh: true, c: getActiveBufferTemplate()[maskPos] } }); getActiveMaskSet()["lastValidPosition"] = maskPos; return false } else { if (masksets[currentActiveMasksetIndex]["lastValidPosition"] >= maskPos) { getActiveMaskSet()["lastValidPosition"] = -1 } else { maskPos = seekNext(pos) } } } if ((getActiveMaskSet()["lastValidPosition"] == undefined && maskPos == seekNext(-1)) || getActiveMaskSet()["lastValidPosition"] >= seekPrevious(maskPos)) { if (maskPos >= 0 && maskPos < getMaskLength()) { result = _isValid(maskPos, getActiveMaskSet()); if (result !== false) { if (result === true) { result = { pos: maskPos } } var newValidPosition = result.pos || maskPos; if (getActiveMaskSet()["lastValidPosition"] == undefined || getActiveMaskSet()["lastValidPosition"] < newValidPosition) { getActiveMaskSet()["lastValidPosition"] = newValidPosition } } results.push({ activeMasksetIndex: index, result: result }) } } } }); activeMasksetIndex = currentActiveMasksetIndex; return results } function determineActiveMasksetIndex() { var currentMasksetIndex = activeMasksetIndex, highestValid = { activeMasksetIndex: 0, lastValidPosition: -1 }; $.each(masksets, function (index, value) { if (typeof (value) == "object") { var activeMaskset = this; if (activeMaskset.lastValidPosition != undefined) { if (activeMaskset.lastValidPosition > highestValid.lastValidPosition) { highestValid.activeMasksetIndex = index; highestValid.lastValidPosition = activeMaskset.lastValidPosition } } } }); activeMasksetIndex = highestValid.activeMasksetIndex; if (currentMasksetIndex != activeMasksetIndex) { clearBuffer(getActiveBuffer(), seekNext(highestValid.lastValidPosition), getMaskLength()); getActiveMaskSet()["writeOutBuffer"] = true } } function isMask(pos) { var testPos = determineTestPosition(pos); var test = getActiveTests()[testPos]; return test != undefined ? test.fn : false } function determineTestPosition(pos) { return pos % getActiveTests().length } function getMaskLength() { return opts.getMaskLength(getActiveBufferTemplate(), getActiveMaskSet()["greedy"], getActiveMaskSet()["repeat"], getActiveBuffer(), opts) } function seekNext(pos) { var maskL = getMaskLength(); if (pos >= maskL) { return maskL } var position = pos; while (++position < maskL && !isMask(position)) { } return position } function seekPrevious(pos) { var position = pos; if (position <= 0) { return 0 } while (--position > 0 && !isMask(position)) { } return position } function setBufferElement(buffer, position, element, autoPrepare) { if (autoPrepare) { position = prepareBuffer(buffer, position) } var test = getActiveTests()[determineTestPosition(position)]; var elem = element; if (elem != undefined) { switch (test.casing) { case "upper": elem = element.toUpperCase(); break; case "lower": elem = element.toLowerCase(); break } } buffer[position] = elem } function getBufferElement(buffer, position, autoPrepare) { if (autoPrepare) { position = prepareBuffer(buffer, position) } return buffer[position] } function prepareBuffer(buffer, position) { var j; while (buffer[position] == undefined && buffer.length < getMaskLength()) { j = 0; while (getActiveBufferTemplate()[j] !== undefined) { buffer.push(getActiveBufferTemplate()[j++]) } } return position } function writeBuffer(input, buffer, caretPos) { input._valueSet(buffer.join("")); if (caretPos != undefined) { caret(input, caretPos) } } function clearBuffer(buffer, start, end) { for (var i = start, maskL = getMaskLength(); i < end && i < maskL; i++) { setBufferElement(buffer, i, getBufferElement(getActiveBufferTemplate().slice(), i, true)) } } function setReTargetPlaceHolder(buffer, pos) { var testPos = determineTestPosition(pos); setBufferElement(buffer, pos, getBufferElement(getActiveBufferTemplate(), testPos)) } function checkVal(input, writeOut, strict, nptvl) { var inputValue = nptvl != undefined ? nptvl.slice() : truncateInput(input._valueGet()).split(""); $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { ms.buffer = ms._buffer.slice(); ms.lastValidPosition = undefined; ms.p = 0 } }); if (strict !== true) { activeMasksetIndex = 0 } if (writeOut) { input._valueSet("") } var ml = getMaskLength(); $.each(inputValue, function (ndx, charCode) { var index = ndx, lvp = getActiveMaskSet()["lastValidPosition"], pos = getActiveMaskSet()["p"]; pos = lvp == undefined ? index : pos; lvp = lvp == undefined ? -1 : lvp; if ((strict && isMask(index)) || ((charCode != getBufferElement(getActiveBufferTemplate().slice(), index, true) || isMask(index)) && $.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1)) { $(input).trigger("keypress", [true, charCode.charCodeAt(0), writeOut, strict, index]) } }); if (strict === true) { getActiveMaskSet()["lastValidPosition"] = seekPrevious(getActiveMaskSet()["p"]) } } function escapeRegex(str) { return $.inputmask.escapeRegex.call(this, str) } function truncateInput(inputValue) { return inputValue.replace(new RegExp("(" + escapeRegex(getActiveBufferTemplate().join("")) + ")*$"), "") } function clearOptionalTail(input) { var buffer = getActiveBuffer(), tmpBuffer = buffer.slice(), testPos, pos; for (var pos = tmpBuffer.length - 1; pos >= 0; pos--) { var testPos = determineTestPosition(pos); if (getActiveTests()[testPos].optionality) { if (!isMask(pos) || !isValid(pos, buffer[pos], true)) { tmpBuffer.pop() } else { break } } else { break } } writeBuffer(input, tmpBuffer) } this.unmaskedvalue = function ($input, skipDatepickerCheck) { isRTL = $input.data("_inputmask")["isRTL"]; return unmaskedvalue($input, skipDatepickerCheck) }; function unmaskedvalue($input, skipDatepickerCheck) { if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass("hasDatepicker"))) { return $.map(getActiveBuffer(), function (element, index) { return isMask(index) && isValid(index, element, true) ? element : null }).join("") } else { return $input[0]._valueGet() } } function caret(input, begin, end) { function TranslatePosition(pos) { if (isRTL && typeof pos == "number") { var bffrLght = getActiveBuffer().length; pos = bffrLght - pos } return pos } var npt = input.jquery && input.length > 0 ? input[0] : input, range; if (typeof begin == "number") { begin = TranslatePosition(begin); end = TranslatePosition(end); if (!$(input).is(":visible")) { return } end = (typeof end == "number") ? end : begin; if (opts.insertMode == false && begin == end) { end++ } if (npt.setSelectionRange) { npt.selectionStart = begin; npt.selectionEnd = android ? begin : end } else { if (npt.createTextRange) { range = npt.createTextRange(); range.collapse(true); range.moveEnd("character", end); range.moveStart("character", begin); range.select() } } } else { if (!$(input).is(":visible")) { return { begin: 0, end: 0 } } if (npt.setSelectionRange) { begin = npt.selectionStart; end = npt.selectionEnd } else { if (document.selection && document.selection.createRange) { range = document.selection.createRange(); begin = 0 - range.duplicate().moveStart("character", -100000); end = begin + range.text.length } } begin = TranslatePosition(begin); end = TranslatePosition(end); return { begin: begin, end: end } } } this.isComplete = function (buffer) { return isComplete(buffer) }; function isComplete(buffer) { var complete = false, highestValidPosition = 0, currentActiveMasksetIndex = activeMasksetIndex; $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { activeMasksetIndex = ndx; var aml = seekPrevious(getMaskLength()); if (ms.lastValidPosition != undefined && ms.lastValidPosition >= highestValidPosition && ms.lastValidPosition == aml) { var msComplete = true; for (var i = 0; i <= aml; i++) { var mask = isMask(i), testPos = determineTestPosition(i); if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBufferTemplate()[testPos])) { msComplete = false; break } } complete = complete || msComplete; if (complete) { return false } } highestValidPosition = ms.lastValidPosition } }); activeMasksetIndex = currentActiveMasksetIndex; return complete } function isSelection(begin, end) { return isRTL ? (begin - end) > 1 || ((begin - end) == 1 && opts.insertMode) : (end - begin) > 1 || ((end - begin) == 1 && opts.insertMode) } this.mask = function (el) { var $input = $(el); if (!$input.is(":input")) { return } $input.data("_inputmask", { masksets: masksets, activeMasksetIndex: activeMasksetIndex, opts: opts, isRTL: false }); if (opts.showTooltip) { $input.prop("title", getActiveMaskSet()["mask"]) } getActiveMaskSet()["greedy"] = getActiveMaskSet()["greedy"] ? getActiveMaskSet()["greedy"] : getActiveMaskSet()["repeat"] == 0; if ($input.attr("maxLength") != null) { var maxLength = $input.prop("maxLength"); if (maxLength > -1) { $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { if (ms.repeat == "*") { ms.repeat = maxLength } } }) } if (getMaskLength() > maxLength && maxLength > -1) { if (maxLength < getActiveBufferTemplate().length) { getActiveBufferTemplate().length = maxLength } if (getActiveMaskSet()["greedy"] == false) { getActiveMaskSet()["repeat"] = Math.round(maxLength / getActiveBufferTemplate().length) } $input.prop("maxLength", getMaskLength() * 2) } } patchValueProperty(el); getActiveMaskSet()["undoBuffer"] = el._valueGet(); var skipKeyPressEvent = false, ignorable = false; if (el.dir == "rtl" || (opts.numericInput && opts.rightAlignNumerics) || (opts.isNumeric && opts.rightAlignNumerics)) { $input.css("text-align", "right") } if (el.dir == "rtl" || opts.numericInput) { el.dir = "ltr"; $input.removeAttr("dir"); var inputData = $input.data("_inputmask"); inputData.isRTL = true; $input.data("_inputmask", inputData); isRTL = true } $input.unbind(".inputmask"); $input.removeClass("focus.inputmask"); $input.closest("form").bind("submit", function () { if ($input[0]._valueGet && $input[0]._valueGet() != getActiveMaskSet()["undoBuffer"]) { $input.change() } }).bind("reset", function () { $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { ms.buffer = ms._buffer.slice(); ms.lastValidPosition = undefined; ms.p = -1 } }) }); $input.bind("mouseenter.inputmask", function () { var $input = $(this), input = this; if (!$input.hasClass("focus.inputmask") && opts.showMaskOnHover) { if (input._valueGet() != getActiveBuffer().join("")) { writeBuffer(input, getActiveBuffer()) } } }).bind("blur.inputmask", function () { var $input = $(this), input = this, nptValue = input._valueGet(), buffer = getActiveBuffer(); $input.removeClass("focus.inputmask"); if (nptValue != getActiveMaskSet()["undoBuffer"]) { $input.change() } if (opts.clearMaskOnLostFocus && nptValue != "") { if (nptValue == getActiveBufferTemplate().join("")) { input._valueSet("") } else { clearOptionalTail(input) } } if (!isComplete(buffer)) { $input.trigger("incomplete"); if (opts.clearIncomplete) { $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { ms.buffer = ms._buffer.slice(); ms.lastValidPosition = undefined; ms.p = 0 } }); activeMasksetIndex = 0; if (opts.clearMaskOnLostFocus) { input._valueSet("") } else { buffer = getActiveBufferTemplate().slice(); writeBuffer(input, buffer) } } } }).bind("focus.inputmask", function () { var $input = $(this), input = this, nptValue = input._valueGet(); if (opts.showMaskOnFocus && !$input.hasClass("focus.inputmask") && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue == ""))) { if (input._valueGet() != getActiveBuffer().join("")) { writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]) } } $input.addClass("focus.inputmask"); getActiveMaskSet()["undoBuffer"] = input._valueGet(); $input.click() }).bind("mouseleave.inputmask", function () { var $input = $(this), input = this; if (opts.clearMaskOnLostFocus) { if (!$input.hasClass("focus.inputmask")) { if (input._valueGet() == getActiveBufferTemplate().join("") || input._valueGet() == "") { input._valueSet("") } else { clearOptionalTail(input) } } } }).bind("click.inputmask", function () { var input = this; setTimeout(function () { var selectedCaret = caret(input), buffer = getActiveBuffer(); if (selectedCaret.begin == selectedCaret.end) { var clickPosition = selectedCaret.begin, lvp = getActiveMaskSet()["lastValidPosition"], lastPosition; if (opts.isNumeric) { lastPosition = opts.skipRadixDance === false && opts.radixPoint != "" && $.inArray(opts.radixPoint, buffer) != -1 ? $.inArray(opts.radixPoint, buffer) : getMaskLength() } else { lastPosition = seekNext(lvp == undefined ? -1 : lvp) } caret(input, clickPosition < lastPosition && (isValid(clickPosition, buffer[clickPosition], true) !== false || !isMask(clickPosition)) ? clickPosition : lastPosition) } }, 0) }).bind("dblclick.inputmask", function () { var input = this; if (getActiveMaskSet()["lastValidPosition"] != undefined) { setTimeout(function () { caret(input, 0, seekNext(getActiveMaskSet()["lastValidPosition"])) }, 0) } }).bind("keydown.inputmask", keydownEvent).bind("keypress.inputmask", keypressEvent).bind("keyup.inputmask", keyupEvent).bind(pasteEvent + ".inputmask dragdrop.inputmask drop.inputmask", function () { var input = this, $input = $(input); setTimeout(function () { checkVal(input, true, false); if (isComplete(getActiveBuffer())) { $input.trigger("complete") } $input.click() }, 0) }).bind("setvalue.inputmask", function () { var input = this; getActiveMaskSet()["undoBuffer"] = input._valueGet(); checkVal(input, true); if (input._valueGet() == getActiveBufferTemplate().join("")) { input._valueSet("") } }).bind("complete.inputmask", opts.oncomplete).bind("incomplete.inputmask", opts.onincomplete).bind("cleared.inputmask", opts.oncleared); checkVal(el, true, false); var activeElement; try { activeElement = document.activeElement } catch (e) { } if (activeElement === el) { $input.addClass("focus.inputmask"); caret(el, getActiveMaskSet()["p"]) } else { if (opts.clearMaskOnLostFocus) { if (getActiveBuffer().join("") == getActiveBufferTemplate().join("")) { el._valueSet("") } else { clearOptionalTail(el) } } else { writeBuffer(el, getActiveBuffer()) } } installEventRuler(el); function installEventRuler(npt) { var events = $._data(npt).events; $.each(events, function (eventType, eventHandlers) { $.each(eventHandlers, function (ndx, eventHandler) { if (eventHandler.namespace == "inputmask") { var handler = eventHandler.handler; eventHandler.handler = function (e) { if (this.readOnly || this.disabled) { e.preventDefault } else { return handler.apply(this, arguments) } } } }) }) } function patchValueProperty(npt) { var valueProperty; if (Object.getOwnPropertyDescriptor) { valueProperty = Object.getOwnPropertyDescriptor(npt, "value") } if (valueProperty && valueProperty.get) { if (!npt._valueGet) { var valueGet = valueProperty.get; var valueSet = valueProperty.set; npt._valueGet = function () { return isRTL ? valueGet.call(this).split("").reverse().join("") : valueGet.call(this) }; npt._valueSet = function (value) { valueSet.call(this, isRTL ? value.split("").reverse().join("") : value) }; Object.defineProperty(npt, "value", { get: function () { var $self = $(this), inputData = $(this).data("_inputmask"), masksets = inputData.masksets, activeMasksetIndex = inputData.activeMasksetIndex; return inputData && inputData.opts.autoUnmask ? $self.inputmask("unmaskedvalue") : this._valueGet() != masksets[activeMasksetIndex]["_buffer"].join("") ? this._valueGet() : "" }, set: function (value) { this._valueSet(value); $(this).triggerHandler("setvalue.inputmask") } }) } } else { if (document.__lookupGetter__ && npt.__lookupGetter__("value")) { if (!npt._valueGet) { var valueGet = npt.__lookupGetter__("value"); var valueSet = npt.__lookupSetter__("value"); npt._valueGet = function () { return isRTL ? valueGet.call(this).split("").reverse().join("") : valueGet.call(this) }; npt._valueSet = function (value) { valueSet.call(this, isRTL ? value.split("").reverse().join("") : value) }; npt.__defineGetter__("value", function () { var $self = $(this), inputData = $(this).data("_inputmask"), masksets = inputData.masksets, activeMasksetIndex = inputData.activeMasksetIndex; return inputData && inputData.opts.autoUnmask ? $self.inputmask("unmaskedvalue") : this._valueGet() != masksets[activeMasksetIndex]["_buffer"].join("") ? this._valueGet() : "" }); npt.__defineSetter__("value", function (value) { this._valueSet(value); $(this).triggerHandler("setvalue.inputmask") }) } } else { if (!npt._valueGet) { npt._valueGet = function () { return isRTL ? this.value.split("").reverse().join("") : this.value }; npt._valueSet = function (value) { this.value = isRTL ? value.split("").reverse().join("") : value } } if ($.fn.val.inputmaskpatch != true) { $.fn.val = function () { if (arguments.length == 0) { var $self = $(this); if ($self.data("_inputmask")) { if ($self.data("_inputmask")["opts"].autoUnmask) { return $self.inputmask("unmaskedvalue") } else { var result = $.inputmask.val.apply($self); var inputData = $(this).data("_inputmask"), masksets = inputData.masksets, activeMasksetIndex = inputData.activeMasksetIndex; return result != masksets[activeMasksetIndex]["_buffer"].join("") ? result : "" } } else { return $.inputmask.val.apply($self) } } else { var args = arguments; return this.each(function () { var $self = $(this); var result = $.inputmask.val.apply($self, args); if ($self.data("_inputmask")) { $self.triggerHandler("setvalue.inputmask") } return result }) } }; $.extend($.fn.val, { inputmaskpatch: true }) } } } } function shiftL(start, end, c) { var buffer = getActiveBuffer(); while (!isMask(start) && start - 1 >= 0) { start-- } for (var i = start; i < end && i < getMaskLength(); i++) { if (isMask(i)) { setReTargetPlaceHolder(buffer, i); var j = seekNext(i); var p = getBufferElement(buffer, j); if (p != getPlaceHolder(j)) { if (j < getMaskLength() && isValid(i, p, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) { setBufferElement(buffer, i, getBufferElement(buffer, j), true); if (j < end) { setReTargetPlaceHolder(buffer, j) } } else { if (isMask(i)) { break } } } } else { setReTargetPlaceHolder(buffer, i) } } if (c != undefined) { setBufferElement(buffer, seekPrevious(end), c) } if (getActiveMaskSet()["greedy"] == false) { var trbuffer = truncateInput(buffer.join("")).split(""); buffer.length = trbuffer.length; for (var i = 0, bl = buffer.length; i < bl; i++) { buffer[i] = trbuffer[i] } if (buffer.length == 0) { getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice() } } return start } function shiftR(start, end, c, full) { var buffer = getActiveBuffer(); for (var i = start; i <= end && i < getMaskLength(); i++) { if (isMask(i)) { var t = getBufferElement(buffer, i, true); setBufferElement(buffer, i, c, true); if (t != getPlaceHolder(i)) { var j = seekNext(i); if (j < getMaskLength()) { if (isValid(j, t, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) { c = t } else { if (isMask(j)) { break } else { c = t } } } else { break } } else { c = t; if (full !== true) { break } } } else { setReTargetPlaceHolder(buffer, i) } } var lengthBefore = buffer.length; if (getActiveMaskSet()["greedy"] == false) { var trbuffer = truncateInput(buffer.join("")).split(""); buffer.length = trbuffer.length; for (var i = 0, bl = buffer.length; i < bl; i++) { buffer[i] = trbuffer[i] } if (buffer.length == 0) { getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice() } } return end - (lengthBefore - buffer.length) } function keydownEvent(e) { skipKeyPressEvent = false; var input = this, k = e.keyCode, pos = caret(input); if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { e.preventDefault(); if (opts.numericInput || isRTL) { switch (k) { case opts.keyCode.BACKSPACE: k = opts.keyCode.DELETE; break; case opts.keyCode.DELETE: k = opts.keyCode.BACKSPACE; break } } if (isSelection(pos.begin, pos.end)) { if (isRTL) { var pend = pos.end; pos.end = pos.begin; pos.begin = pend } clearBuffer(getActiveBuffer(), pos.begin, pos.end); if (pos.begin == 0 && pos.end == getMaskLength()) { $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { ms.buffer = ms._buffer.slice(); ms.lastValidPosition = undefined; ms.p = 0 } }) } else { var ml = getMaskLength(); if (opts.greedy == false) { shiftL(pos.begin, ml) } else { for (var i = pos.begin; i < pos.end; i++) { if (isMask(i)) { shiftL(pos.begin, ml) } } } checkVal(input, false, true, getActiveBuffer()) } } else { $.each(masksets, function (ndx, ms) { if (typeof (ms) == "object") { activeMasksetIndex = ndx; var beginPos = android53x ? pos.end : pos.begin; var buffer = getActiveBuffer(), firstMaskPos = seekNext(-1), maskL = getMaskLength(); if (k == opts.keyCode.DELETE) { if (beginPos < firstMaskPos) { beginPos = firstMaskPos } if (beginPos < maskL) { if (opts.isNumeric && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) { beginPos = (buffer.length - 1 == beginPos) ? beginPos : seekNext(beginPos); beginPos = shiftL(beginPos, maskL) } else { beginPos = shiftL(beginPos, maskL) } if (getActiveMaskSet()["lastValidPosition"] != undefined) { if (getActiveMaskSet()["lastValidPosition"] != -1 && getActiveBuffer()[getActiveMaskSet()["lastValidPosition"]] == getActiveBufferTemplate()[getActiveMaskSet()["lastValidPosition"]]) { getActiveMaskSet()["lastValidPosition"] = getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"]) } if (getActiveMaskSet()["lastValidPosition"] < firstMaskPos) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["p"] = firstMaskPos } else { getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = beginPos } } } } else { if (k == opts.keyCode.BACKSPACE) { if (beginPos > firstMaskPos) { beginPos -= 1; if (opts.isNumeric && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) { beginPos = shiftR(0, (buffer.length - 1 == beginPos) ? beginPos : beginPos - 1, getPlaceHolder(beginPos), true); beginPos++ } else { beginPos = shiftL(beginPos, maskL) } if (getActiveMaskSet()["lastValidPosition"] != undefined) { if (getActiveMaskSet()["lastValidPosition"] != -1 && getActiveBuffer()[getActiveMaskSet()["lastValidPosition"]] == getActiveBufferTemplate()[getActiveMaskSet()["lastValidPosition"]]) { getActiveMaskSet()["lastValidPosition"] = getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"]) } if (getActiveMaskSet()["lastValidPosition"] < firstMaskPos) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["p"] = firstMaskPos } else { getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = beginPos } } } else { if (activeMasksetIndex > 0) { getActiveMaskSet()["lastValidPosition"] = undefined; getActiveMaskSet()["writeOutBuffer"] = true; getActiveMaskSet()["p"] = firstMaskPos; activeMasksetIndex = 0; getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice(); getActiveMaskSet()["p"] = seekNext(-1); getActiveMaskSet()["lastValidPosition"] = undefined } } } } } }) } determineActiveMasksetIndex(); writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]); if (input._valueGet() == getActiveBufferTemplate().join("")) { $(input).trigger("cleared") } if (opts.showTooltip) { $input.prop("title", getActiveMaskSet()["mask"]) } } else { if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { setTimeout(function () { var caretPos = seekNext(getActiveMaskSet()["lastValidPosition"]); if (!opts.insertMode && caretPos == getMaskLength() && !e.shiftKey) { caretPos-- } caret(input, e.shiftKey ? pos.begin : caretPos, caretPos) }, 0) } else { if ((k == opts.keyCode.HOME && !e.shiftKey) || k == opts.keyCode.PAGE_UP) { caret(input, 0, e.shiftKey ? pos.begin : 0) } else { if (k == opts.keyCode.ESCAPE) { input._valueSet(getActiveMaskSet()["undoBuffer"]); checkVal(input, true, true) } else { if (k == opts.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { opts.insertMode = !opts.insertMode; caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin) } else { if (opts.insertMode == false && !e.shiftKey) { if (k == opts.keyCode.RIGHT) { setTimeout(function () { var caretPos = caret(input); caret(input, caretPos.begin) }, 0) } else { if (k == opts.keyCode.LEFT) { setTimeout(function () { var caretPos = caret(input); caret(input, caretPos.begin - 1) }, 0) } } } } } } } } var caretPos = caret(input); opts.onKeyDown.call(this, e, getActiveBuffer(), opts); caret(input, caretPos.begin, caretPos.end); ignorable = $.inArray(k, opts.ignorables) != -1 } function keypressEvent(e, checkval, k, writeOut, strict, ndx) { if (k == undefined && skipKeyPressEvent) { return false } skipKeyPressEvent = true; var input = this, $input = $(input); e = e || window.event; var k = k || e.which || e.charCode || e.keyCode, c = String.fromCharCode(k); if ((!(e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) && checkval !== true) { return true } else { if (k) { var pos, results, result; if (checkval) { var pcaret = strict ? ndx : getActiveMaskSet()["p"]; pos = { begin: pcaret, end: pcaret } } else { pos = caret(input) } var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false; if (isSlctn) { if (isRTL) { var pend = pos.end; pos.end = pos.begin; pos.begin = pend } var initialIndex = activeMasksetIndex; $.each(masksets, function (ndx, lmnt) { if (typeof (lmnt) == "object") { activeMasksetIndex = ndx; getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(""); var posend = pos.end < getMaskLength() ? pos.end : getMaskLength(); if (getActiveMaskSet()["lastValidPosition"] > pos.begin && getActiveMaskSet()["lastValidPosition"] < posend) { getActiveMaskSet()["lastValidPosition"] = seekPrevious(pos.begin) } else { redetermineLVP = true } clearBuffer(getActiveBuffer(), pos.begin, posend); var ml = getMaskLength(); if (opts.greedy == false) { shiftL(pos.begin, ml) } else { for (var i = pos.begin; i < posend; i++) { if (isMask(i)) { shiftL(pos.begin, ml) } } } } }); if (redetermineLVP === true) { activeMasksetIndex = initialIndex; checkVal(input, false, true, getActiveBuffer()); if (!opts.insertMode) { $.each(masksets, function (ndx, lmnt) { if (typeof (lmnt) == "object") { activeMasksetIndex = ndx; shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true); getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]) } }) } } activeMasksetIndex = initialIndex } if (opts.isNumeric && c == opts.radixPoint && checkval !== true) { var nptStr = getActiveBuffer().join(""); var radixPosition = nptStr.indexOf(opts.radixPoint); if (radixPosition != -1) { pos.begin = pos.begin == radixPosition ? seekNext(radixPosition) : radixPosition; pos.end = pos.begin; caret(input, pos.begin) } } var p = (opts.numericInput && strict != true && !isSlctn) ? seekPrevious(pos.begin) : seekNext(pos.begin - 1); results = isValid(p, c, strict); if (strict === true) { results = [{ activeMasksetIndex: activeMasksetIndex, result: results }] } $.each(results, function (index, result) { activeMasksetIndex = result.activeMasksetIndex; getActiveMaskSet()["writeOutBuffer"] = true; var np = result.result; if (np !== false) { var refresh = false, buffer = getActiveBuffer(); if (np !== true) { refresh = np.refresh; p = np.pos != undefined ? np.pos : p; c = np.c != undefined ? np.c : c } if (refresh !== true) { if (opts.insertMode == true) { var lastUnmaskedPosition = getMaskLength(); var bfrClone = buffer.slice(); while (getBufferElement(bfrClone, lastUnmaskedPosition, true) != getPlaceHolder(lastUnmaskedPosition) && lastUnmaskedPosition >= p) { lastUnmaskedPosition = lastUnmaskedPosition == 0 ? -1 : seekPrevious(lastUnmaskedPosition) } if (lastUnmaskedPosition >= p) { shiftR(p, buffer.length, c); var lvp = getActiveMaskSet()["lastValidPosition"], nlvp = seekNext(lvp); if (nlvp != getMaskLength() && lvp >= p && (getBufferElement(getActiveBuffer(), nlvp) != getPlaceHolder(nlvp))) { getActiveMaskSet()["lastValidPosition"] = nlvp } } else { getActiveMaskSet()["writeOutBuffer"] = false } } else { setBufferElement(buffer, p, c, true) } } getActiveMaskSet()["p"] = seekNext(p) } }); if (strict !== true) { determineActiveMasksetIndex() } if (writeOut !== false) { $.each(results, function (ndx, rslt) { if (rslt.activeMasksetIndex == activeMasksetIndex) { result = rslt; return false } }); if (result != undefined) { var self = this; setTimeout(function () { opts.onKeyValidation.call(self, result.result, opts) }, 0); if (getActiveMaskSet()["writeOutBuffer"] && result.result !== false) { var buffer = getActiveBuffer(); writeBuffer(input, buffer, checkval ? undefined : (opts.numericInput ? seekPrevious(getActiveMaskSet()["p"]) : getActiveMaskSet()["p"])); if (checkval !== true) { setTimeout(function () { if (isComplete(buffer)) { $input.trigger("complete") } }, 0) } } else { if (isSlctn) { getActiveMaskSet()["buffer"] = getActiveMaskSet()["undoBuffer"].split("") } } } } if (opts.showTooltip) { $input.prop("title", getActiveMaskSet()["mask"]) } e.preventDefault() } } } function keyupEvent(e) { var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer(); var caretPos = caret(input); opts.onKeyUp.call(this, e, buffer, opts); caret(input, caretPos.begin, caretPos.end); if (k == opts.keyCode.TAB && $input.hasClass("focus.inputmask") && input._valueGet().length == 0 && opts.showMaskOnFocus) { buffer = getActiveBufferTemplate().slice(); writeBuffer(input, buffer); caret(input, 0); getActiveMaskSet()["undoBuffer"] = input._valueGet() } } }; return this } return this } } })(jQuery);
jQuery.validator.addMethod("email", function (value, element, param) { return this.optional(element) || /^((([A-Za-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([A-Za-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([A-Za-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([A-Za-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([A-Za-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([A-Za-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([A-Za-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([A-Za-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([A-Za-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([A-Za-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); }, jQuery.validator.messages.email);
jQuery.validator.addMethod("mgsname", function (value, element, param) { return this.optional(element) || /^[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿŒœŠŽšžŸµƒªº¡¿A-Za-z\s-`\'\u2018\u2019\u00C0-\u02B8\u0370-\u1FFF\u2C00-\uD7FF\s\(\`\-\)\–,]+$/i.test(value); }, jQuery.validator.messages.text);
/* jQuery Unsigned Currency Plugin http://plugins.jquery.com/project/currencyFormat */
(function (A) { A.fn.extend({ currency: function (B) { var C = { s: ",", d: ".", c: 2 }; C = A.extend({}, C, B); return this.each(function () { var D = (C.n || A(this).text()); D = (typeof D === "number") ? D : ((/\./.test(D)) ? parseFloat(D) : parseInt(D)), s = D < 0 ? "-" : "", i = parseInt(D = Math.abs(+D || 0).toFixed(C.c)) + "", j = (j = i.length) > 3 ? j % 3 : 0; A(this).text(s + (j ? i.substr(0, j) + C.s : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + C.s) + (C.c ? C.d + Math.abs(D - i).toFixed(C.c).slice(2) : "")); return this }) } }) })(jQuery); jQuery.currency = function () { var A = jQuery("").text(arguments[0]).currency(arguments[1]); return A.text() };
/* HTML5 Placeholder jQuery Plugin - http://mths.be/placeholder v2.1.1 by @mathias */
!function (a) { "function" == typeof define && define.amd ? define(["jquery"], a) : a("object" == typeof module && module.exports ? require("jquery") : jQuery) }(function (a) { function b(b) { var c = {}, d = /^jQuery\d+$/; return a.each(b.attributes, function (a, b) { b.specified && !d.test(b.name) && (c[b.name] = b.value) }), c } function c(b, c) { var d = this, f = a(d); if (d.value == f.attr("placeholder") && f.hasClass(m.customClass)) if (f.data("placeholder-password")) { if (f = f.hide().nextAll('input[type="password"]:first').show().attr("id", f.removeAttr("id").data("placeholder-id")), b === !0) return f[0].value = c; f.focus() } else d.value = "", f.removeClass(m.customClass), d == e() && d.select() } function d() { var d, e = this, f = a(e), g = this.id; if ("" === e.value) { if ("password" === e.type) { if (!f.data("placeholder-textinput")) { try { d = f.clone().attr({ type: "text" }) } catch (h) { d = a("").attr(a.extend(b(this), { type: "text" })) } d.removeAttr("name").data({ "placeholder-password": f, "placeholder-id": g }).bind("focus.placeholder", c), f.data({ "placeholder-textinput": d, "placeholder-id": g }).before(d) } f = f.removeAttr("id").hide().prevAll('input[type="text"]:first').attr("id", g).show() } f.addClass(m.customClass), f[0].value = f.attr("placeholder") } else f.removeClass(m.customClass) } function e() { try { return document.activeElement } catch (a) { } } var f, g, h = "[object OperaMini]" == Object.prototype.toString.call(window.operamini), i = "placeholder" in document.createElement("input") && !h, j = "placeholder" in document.createElement("textarea") && !h, k = a.valHooks, l = a.propHooks; if (i && j) g = a.fn.placeholder = function () { return this }, g.input = g.textarea = !0; else { var m = {}; g = a.fn.placeholder = function (b) { var e = { customClass: "placeholder" }; m = a.extend({}, e, b); var f = this; return f.filter((i ? "textarea" : ":input") + "[placeholder]").not("." + m.customClass).bind({ "focus.placeholder": c, "blur.placeholder": d }).data("placeholder-enabled", !0).trigger("blur.placeholder"), f }, g.input = i, g.textarea = j, f = { get: function (b) { var c = a(b), d = c.data("placeholder-password"); return d ? d[0].value : c.data("placeholder-enabled") && c.hasClass(m.customClass) ? "" : b.value }, set: function (b, f) { var g = a(b), h = g.data("placeholder-password"); return h ? h[0].value = f : g.data("placeholder-enabled") ? ("" === f ? (b.value = f, b != e() && d.call(b)) : g.hasClass(m.customClass) ? c.call(b, !0, f) || (b.value = f) : b.value = f, g) : b.value = f } }, i || (k.input = f, l.value = f), j || (k.textarea = f, l.value = f), a(function () { a(document).delegate("form", "submit.placeholder", function () { var b = a("." + m.customClass, this).each(c); setTimeout(function () { b.each(d) }, 10) }) }), a(window).bind("beforeunload.placeholder", function () { a("." + m.customClass).each(function () { this.value = "" }) }) } });
/*! Respond.js v1.4.2: min/max-width media query polyfill * http://j.mp/respondjs */
!function (a) { "use strict"; a.matchMedia = a.matchMedia || function (a) { var b, c = a.documentElement, d = c.firstElementChild || c.firstChild, e = a.createElement("body"), f = a.createElement("div"); return f.id = "mq-test-1", f.style.cssText = "position:absolute;top:-100em", e.style.background = "none", e.appendChild(f), function (a) { return f.innerHTML = '', c.insertBefore(e, d), b = 42 === f.offsetWidth, c.removeChild(e), { matches: b, media: a } } }(a.document) }(this), function (a) { "use strict"; function b() { v(!0) } var c = {}; a.respond = c, c.update = function () { }; var d = [], e = function () { var b = !1; try { b = new a.XMLHttpRequest } catch (c) { b = new a.ActiveXObject("Microsoft.XMLHTTP") } return function () { return b } }(), f = function (a, b) { var c = e(); c && (c.open("GET", a, !0), c.onreadystatechange = function () { 4 !== c.readyState || 200 !== c.status && 304 !== c.status || b(c.responseText) }, 4 !== c.readyState && c.send(null)) }, g = function (a) { return a.replace(c.regex.minmaxwh, "").match(c.regex.other) }; if (c.ajax = f, c.queue = d, c.unsupportedmq = g, c.regex = { media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi, keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi, comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi, urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, findStyles: /@media *([^\{]+)\{([\S\s]+?)$/, only: /(only\s+)?([a-zA-Z]+)\s?/, minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi, other: /\([^\)]*\)/g }, c.mediaQueriesSupported = a.matchMedia && null !== a.matchMedia("only all") && a.matchMedia("only all").matches, !c.mediaQueriesSupported) { var h, i, j, k = a.document, l = k.documentElement, m = [], n = [], o = [], p = {}, q = 30, r = k.getElementsByTagName("head")[0] || l, s = k.getElementsByTagName("base")[0], t = r.getElementsByTagName("link"), u = function () { var a, b = k.createElement("div"), c = k.body, d = l.style.fontSize, e = c && c.style.fontSize, f = !1; return b.style.cssText = "position:absolute;font-size:1em;width:1em", c || (c = f = k.createElement("body"), c.style.background = "none"), l.style.fontSize = "100%", c.style.fontSize = "100%", c.appendChild(b), f && l.insertBefore(c, l.firstChild), a = b.offsetWidth, f ? l.removeChild(c) : c.removeChild(b), l.style.fontSize = d, e && (c.style.fontSize = e), a = j = parseFloat(a) }, v = function (b) { var c = "clientWidth", d = l[c], e = "CSS1Compat" === k.compatMode && d || k.body[c] || d, f = {}, g = t[t.length - 1], p = (new Date).getTime(); if (b && h && q > p - h) return a.clearTimeout(i), i = a.setTimeout(v, q), void 0; h = p; for (var s in m) if (m.hasOwnProperty(s)) { var w = m[s], x = w.minw, y = w.maxw, z = null === x, A = null === y, B = "em"; x && (x = parseFloat(x) * (x.indexOf(B) > -1 ? j || u() : 1)), y && (y = parseFloat(y) * (y.indexOf(B) > -1 ? j || u() : 1)), w.hasquery && (z && A || !(z || e >= x) || !(A || y >= e)) || (f[w.media] || (f[w.media] = []), f[w.media].push(n[w.rules])) } for (var C in o) o.hasOwnProperty(C) && o[C] && o[C].parentNode === r && r.removeChild(o[C]); o.length = 0; for (var D in f) if (f.hasOwnProperty(D)) { var E = k.createElement("style"), F = f[D].join("\n"); E.type = "text/css", E.media = D, r.insertBefore(E, g.nextSibling), E.styleSheet ? E.styleSheet.cssText = F : E.appendChild(k.createTextNode(F)), o.push(E) } }, w = function (a, b, d) { var e = a.replace(c.regex.comments, "").replace(c.regex.keyframes, "").match(c.regex.media), f = e && e.length || 0; b = b.substring(0, b.lastIndexOf("/")); var h = function (a) { return a.replace(c.regex.urls, "$1" + b + "$2$3") }, i = !f && d; b.length && (b += "/"), i && (f = 1); for (var j = 0; f > j; j++) { var k, l, o, p; i ? (k = d, n.push(h(a))) : (k = e[j].match(c.regex.findStyles) && RegExp.$1, n.push(RegExp.$2 && h(RegExp.$2))), o = k.split(","), p = o.length; for (var q = 0; p > q; q++)l = o[q], g(l) || m.push({ media: l.split("(")[0].match(c.regex.only) && RegExp.$2 || "all", rules: n.length - 1, hasquery: l.indexOf("(") > -1, minw: l.match(c.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), maxw: l.match(c.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "") }) } v() }, x = function () { if (d.length) { var b = d.shift(); f(b.href, function (c) { w(c, b.href, b.media), p[b.href] = !0, a.setTimeout(function () { x() }, 0) }) } }, y = function () { for (var b = 0; b < t.length; b++) { var c = t[b], e = c.href, f = c.media, g = c.rel && "stylesheet" === c.rel.toLowerCase(); e && g && !p[e] && (c.styleSheet && c.styleSheet.rawCssText ? (w(c.styleSheet.rawCssText, e, f), p[e] = !0) : (!/^([a-zA-Z:]*\/\/)/.test(e) && !s || e.replace(RegExp.$1, "").split("/")[0] === a.location.host) && ("//" === e.substring(0, 2) && (e = a.location.protocol + e), d.push({ href: e, media: f }))) } x() }; y(), c.update = y, c.getEmValue = u, a.addEventListener ? a.addEventListener("resize", b, !1) : a.attachEvent && a.attachEvent("onresize", b) } }(this);
/*** Cross domain storage. Based on: http://www.nczonline.net/blog/2010/09/07/learning-from-xauth-cross-domain-localstorage/ @author Juan Ramón González Hidalgo @param opts JSON object with the attribute names: - origin Iframe URL - path Path to iframe html file in origin */
function cross_domain_storage(opts) {
var origin = opts.origin || '', path = opts.path || '', cdstorage = {}, _iframe = null, _iframeReady = false, _origin = origin, _path = path, _queue = [], _requests = {}, _id = 0;
var supported = (function () { try { return window.postMessage && window.JSON && 'localStorage' in window && window['localStorage'] !== null; } catch (e) { return false; } })();
//private methods
var _sendRequest = function (data) { if (_iframe) { _requests[data.request.id] = data; _iframe.contentWindow.postMessage(JSON.stringify(data.request), _origin); } };
var _iframeLoaded = function () { _iframeReady = true; if (_queue.length) { for (var i = 0, len = _queue.length; i < len; i++) { _sendRequest(_queue[i]); } _queue = []; } };
var _handleMessage = function (event) { if (event.origin === _origin) { var data = JSON.parse(event.data); if (typeof _requests[data.id] != 'undefined') { if (typeof _requests[data.id].deferred !== 'undefined') { _requests[data.id].deferred.resolve(data.value); } if (typeof _requests[data.id].callback === 'function') { _requests[data.id].callback(data.key, data.value); } delete _requests[data.id]; } } }
//Public methods
cdstorage.getItem = function (key, callback) { if (supported) { var request = { id: ++_id, type: 'get', key: key }, data = { request: request, callback: callback }; if (window.jQuery) { data.deferred = jQuery.Deferred(); } if (_iframeReady) { _sendRequest(data); } else { _queue.push(data); } if (window.jQuery) { return data.deferred.promise(); } } };
cdstorage.setItem = function (key, value) { if (supported) { var request = { id: ++_id, type: 'set', key: key, value: value }, data = { request: request }; if (window.jQuery) { data.deferred = jQuery.Deferred(); } if (_iframeReady) { _sendRequest(data); } else { _queue.push(data); } if (window.jQuery) { return data.deferred.promise(); } } };
if (!_iframe && supported) { _iframe = document.createElement("iframe"); _iframe.style.cssText = "position:absolute;width:1px;height:1px;left:-9999px;"; document.body.appendChild(_iframe); if (window.addEventListener) { _iframe.addEventListener("load", function () { _iframeLoaded(); }, false); window.addEventListener("message", function (event) { _handleMessage(event) }, false); } else if (_iframe.attachEvent) { _iframe.attachEvent("onload", function () { _iframeLoaded(); }, false); window.attachEvent("onmessage", function (event) { _handleMessage(event) }); } _iframe.src = _origin + _path; }
return cdstorage;
}
function wopen(url, name) {
var w = 720; var h = 580;
if (url.indexOf("directdownload") > -1) { location.href = url; }
else { var nWin = window.open(url, name, 'width=' + w + ',height=' + h + ',' + 'location=no,menubar=no,status=no,toolbar=no,scrollbars=no,resizable=no'); nWin.resizeTo(w, h); nWin.focus(); }
}
//captcha
var checkCaptchaResponse = function (response) {
//If the captcha resolved successfully the response in not empty
if (response.length) { //valid response returns are not null
isCaptchaValidated = true;
$(".g-recaptcha").removeClass("alert");
}
};
var d, v, formWS, isCaptchaValidated = true;
jQuery(document).ready(function ($) {
try {
v = $("body").data("variation");
d = $("body").data("device");
$('body').attr('data-gdpr', isGDPR);
$("#preform").validate({
rules: { fn: { mgsname: true }, ln: { mgsname: true } },
errorPlacement: function (error, element) { $(element).not('.valid').addClass("invalidField"); },
success: function (error, element) {
setTimeout(function () {
$("#preform").find('.valid').removeClass("invalidField");
}, 1);
},
submitHandler: function (form) {
if (isCaptchaValidated) {
var theBtag4 = $("#btag4").val();
console.log(theBtag4);
var cat = "REA Form Submit", act = "submit";
console.log("Submit Handler: " + __galab);
if (priorEngage) { localStorage.setItem(engagement, 2); }
logGAEvent(cat, act, __galab);
} else {
$(".g-recaptcha").addClass("alert");
}
}
});
formWS = ($("#optinpromos").is(':checked')) ? 8 : 7; //must remain outside
$("#optinpromos").change(function () {
formWS = ($("#optinpromos").is(':checked')) ? 8 : 7;
$("#preform input[name='ws']").val(formWS);
});
} catch (err) { }
$("input, textarea").placeholder({ customClass: "my-placeholder" });
try { //REA GT 2 Disclaimer
$("#disclaimer").click(function () { $(".theDisclaimer").toggle(); return false; });
} catch (err) { }
try { //REA GT 2 Menu
$(".menu-btn").click(function () { $(".menu-items").toggle(); return false; });
} catch (err) { }
try { //REA ZC 3 Age Verification
$(".verifyTrue").click(function () { $(".verify, .theForm").toggle(); return false; });
$(".verifyFalse").click(function () { $(".verify, .minor").toggle(); return false; });
} catch (err) { }
try { //REA ZC SPL 1 Wheel
$(".zcWheelBtn").click(function () { $(".winpop, .rotor").css({ "display": "block" }); return false; });
} catch (err) { }
try { //REA ZC Jackpot Fire 5 scrollTos
$('#jackpotFireLink').click(function () {
$('html, body').animate({
scrollTop: $("#jackpotFireAnchor").offset().top
}, 1000);
$("#firstName").focus();
});
} catch (err) { }
try { //REA GMD Jackpot scrollTos
$('.gmdJackpotLink').click(function () {
$('html, body').animate({
scrollTop: $("#jackpotFireAnchor").offset().top
}, 1000);
$("#firstName").focus();
});
} catch (err) { }
});
document.addEventListener('DOMContentLoaded', function (event) {
//Open form on CTA click
var formWindow = document.getElementById('form-blackout');
var ctas = document.querySelectorAll('.cta-btn', '.cta-link', '[data-form-modal-open]');
if (formWindow) {
[].forEach.call(ctas, function (el) {
el.addEventListener("click", function (event) {
event.preventDefault();
formWindow.style.display = "block";
document.body.classList.add("modal-open");
// Tracking CTAs
var _ctaGA = JSON.parse(JSON.stringify(_GADATA)); //new json object here
_ctaGA.nonInteraction = true;
_ctaGA.hitCallback = function () { /* console.log("CTA " + el.dataset.ctaOrder + " clicked"); */ };
__gaTracker('send', 'event', "REA Page", "CTA " + el.dataset.ctaOrder + " clicked", __galab, _ctaGA);
});
});
}
//Close form
var closeBtn = document.querySelector('.form-close');
if (closeBtn) {
closeBtn.addEventListener('click', function () {
event.preventDefault();
formWindow.style.display = "none";
document.body.classList.remove("modal-open");
});
}
});