/** * jQuery Validation Plugin 1.8.1 * * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ * http://docs.jquery.com/Plugins/Validation * * Copyright (c) 2006 - 2011 Jörn Zaefferer * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ (function(c){c.extend(c.fn, {validate:function(a){if (this.length){var b = c.data(this[0], "validator"); if (b)return b; b = new c.validator(a, this[0]); c.data(this[0], "validator", b); if (b.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){b.cancelSubmit = true}); b.settings.submitHandler && this.find("input, button").filter(":submit").click(function(){b.submitButton = this}); this.submit(function(d){function e(){if (b.settings.submitHandler){if (b.submitButton)var f = c("").attr("name", b.submitButton.name).val(b.submitButton.value).appendTo(b.currentForm); b.settings.submitHandler.call(b, b.currentForm); b.submitButton && f.remove(); return false}return true}b.settings.debug && d.preventDefault(); if (b.cancelSubmit){b.cancelSubmit = false; return e()}if (b.form()){if (b.pendingRequest){b.formSubmitted = true; return false}return e()} else{b.focusInvalid(); return false}})}return b} else a && a.debug && window.console && console.warn("nothing selected, can't validate, returning nothing")}, valid:function(){if (c(this[0]).is("form"))return this.validate().form(); else{var a = true, b = c(this[0].form).validate(); this.each(function(){a &= b.element(this)}); return a}}, removeAttrs:function(a){var b = {}, d = this; c.each(a.split(/\s/), function(e, f){b[f] = d.attr(f); d.removeAttr(f)}); return b}, rules:function(a, b){var d = this[0]; if (a){var e = c.data(d.form, "validator").settings, f = e.rules, g = c.validator.staticRules(d); switch (a){case "add":c.extend(g, c.validator.normalizeRule(b)); f[d.name] = g; if (b.messages)e.messages[d.name] = c.extend(e.messages[d.name], b.messages); break; case "remove":if (!b){delete f[d.name]; return g}var h = {}; c.each(b.split(/\s/), function(j, i){h[i] = g[i]; delete g[i]}); return h}}d = c.validator.normalizeRules(c.extend({}, c.validator.metadataRules(d), c.validator.classRules(d), c.validator.attributeRules(d), c.validator.staticRules(d)), d); if (d.required){e = d.required; delete d.required; d = c.extend({required:e}, d)}return d}}); c.extend(c.expr[":"], {blank:function(a){return!c.trim("" + a.value)}, filled:function(a){return!!c.trim("" + a.value)}, unchecked:function(a){return!a.checked}}); c.validator = function(a, b){this.settings = c.extend(true, {}, c.validator.defaults, a); this.currentForm = b; this.init()}; c.validator.format = function(a, b){if (arguments.length == 1)return function(){var d = c.makeArray(arguments); d.unshift(a); return c.validator.format.apply(this, d)}; if (arguments.length > 2 && b.constructor != Array)b = c.makeArray(arguments).slice(1); if (b.constructor != Array)b = [b]; c.each(b, function(d, e){a = a.replace(RegExp("\\{" + d + "\\}", "g"), e)}); return a}; c.extend(c.validator, {defaults:{messages:{}, groups:{}, rules:{}, errorClass:"error", validClass:"valid", errorElement:"label", focusInvalid:true, errorContainer:c([]), errorLabelContainer:c([]), onsubmit:true, ignore:[], ignoreTitle:false, onfocusin:function(a){this.lastActive = a; if (this.settings.focusCleanup && !this.blockFocusCleanup){this.settings.unhighlight && this.settings.unhighlight.call(this, a, this.settings.errorClass, this.settings.validClass); this.addWrapper(this.errorsFor(a)).hide()}}, onfocusout:function(a){if (!this.checkable(a) && (a.name in this.submitted || !this.optional(a)))this.element(a)}, onkeyup:function(a){if (a.name in this.submitted || a == this.lastElement)this.element(a)}, onclick:function(a){if (a.name in this.submitted)this.element(a); else a.parentNode.name in this.submitted && this.element(a.parentNode)}, highlight:function(a, b, d){a.type === "radio"?this.findByName(a.name).addClass(b).removeClass(d):c(a).addClass(b).removeClass(d)}, unhighlight:function(a, b, d){a.type === "radio"?this.findByName(a.name).removeClass(b).addClass(d):c(a).removeClass(b).addClass(d)}}, setDefaults:function(a){c.extend(c.validator.defaults, a)}, 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.", accept:"Please enter a value with a valid extension.", maxlength:c.validator.format("Please enter no more than {0} characters."), minlength:c.validator.format("Please enter at least {0} characters."), rangelength:c.validator.format("Please enter a value between {0} and {1} characters long."), range:c.validator.format("Please enter a value between {0} and {1}."), max:c.validator.format("Please enter a value less than or equal to {0}."), min:c.validator.format("Please enter a value greater than or equal to {0}.")}, autoCreateRanges:false, prototype:{init:function(){function a(e){var f = c.data(this[0].form, "validator"); e = "on" + e.type.replace(/^validate/, ""); f.settings[e] && f.settings[e].call(f, this[0])}this.labelContainer = c(this.settings.errorLabelContainer); this.errorContext = this.labelContainer.length && this.labelContainer || c(this.currentForm); this.containers = c(this.settings.errorContainer).add(this.settings.errorLabelContainer); this.submitted = {}; this.valueCache = {}; this.pendingRequest = 0; this.pending = {}; this.invalid = {}; this.reset(); var b = this.groups = {}; c.each(this.settings.groups, function(e, f){c.each(f.split(/\s/), function(g, h){b[h] = e})}); var d = this.settings.rules; c.each(d, function(e, f){d[e] = c.validator.normalizeRule(f)}); c(this.currentForm).validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", a).validateDelegate(":radio, :checkbox, select, option", "click", a); this.settings.invalidHandler && c(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler)}, form:function(){this.checkForm(); c.extend(this.submitted, this.errorMap); this.invalid = c.extend({}, this.errorMap); this.valid() || c(this.currentForm).triggerHandler("invalid-form", [this]); this.showErrors(); return this.valid()}, checkForm:function(){this.prepareForm(); for (var a = 0, b = this.currentElements = this.elements(); b[a]; a++)this.check(b[a]); return this.valid()}, element:function(a){this.lastElement = a = this.clean(a); this.prepareElement(a); this.currentElements = c(a); var b = this.check(a); if (b)delete this.invalid[a.name]; else this.invalid[a.name] = true; if (!this.numberOfInvalids())this.toHide = this.toHide.add(this.containers); this.showErrors(); return b}, showErrors:function(a){if (a){c.extend(this.errorMap, a); this.errorList = []; for (var b in a)this.errorList.push({message:a[b], element:this.findByName(b)[0]}); this.successList = c.grep(this.successList, function(d){return!(d.name in a)})}this.settings.showErrors?this.settings.showErrors.call(this, this.errorMap, this.errorList):this.defaultShowErrors()}, resetForm:function(){c.fn.resetForm && c(this.currentForm).resetForm(); this.submitted = {}; this.prepareForm(); this.hideErrors(); this.elements().removeClass(this.settings.errorClass)}, numberOfInvalids:function(){return this.objectLength(this.invalid)}, objectLength:function(a){var b = 0, d; for (d in a)b++; return b}, hideErrors:function(){this.addWrapper(this.toHide).hide()}, valid:function(){return this.size() == 0}, size:function(){return this.errorList.length}, focusInvalid:function(){if (this.settings.focusInvalid)try{c(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus().trigger("focusin")} catch (a){}}, findLastActive:function(){var a = this.lastActive; return a && c.grep(this.errorList, function(b){return b.element.name == a.name}).length == 1 && a}, elements:function(){var a = this, b = {}; return c(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name && a.settings.debug && window.console && console.error("%o has no name assigned", this); if (this.name in b || !a.objectLength(c(this).rules()))return false; return b[this.name] = true})}, clean:function(a){return c(a)[0]}, errors:function(){return c(this.settings.errorElement + "." + this.settings.errorClass, this.errorContext)}, reset:function(){this.successList = []; this.errorList = []; this.errorMap = {}; this.toShow = c([]); this.toHide = c([]); this.currentElements = c([])}, prepareForm:function(){this.reset(); this.toHide = this.errors().add(this.containers)}, prepareElement:function(a){this.reset(); this.toHide = this.errorsFor(a)}, check:function(a){a = this.clean(a); if (this.checkable(a))a = this.findByName(a.name).not(this.settings.ignore)[0]; var b = c(a).rules(), d = false, e; for (e in b){var f = {method:e, parameters:b[e]}; try{var g = c.validator.methods[e].call(this, a.value.replace(/\r/g, ""), a, f.parameters); if (g == "dependency-mismatch")d = true; else{d = false; if (g == "pending"){this.toHide = this.toHide.not(this.errorsFor(a)); return}if (!g){this.formatAndAdd(a, f); return false}}} catch (h){this.settings.debug && window.console && console.log("exception occured when checking element " + a.id + ", check the '" + f.method + "' method", h); throw h; }}if (!d){this.objectLength(b) && this.successList.push(a); return true}}, customMetaMessage:function(a, b){if (c.metadata){var d = this.settings.meta?c(a).metadata()[this.settings.meta]:c(a).metadata(); return d && d.messages && d.messages[b]}}, customMessage:function(a, b){var d = this.settings.messages[a]; return d && (d.constructor == String?d:d[b])}, findDefined:function(){for (var a = 0; a < arguments.length; a++)if (arguments[a] !== undefined)return arguments[a]}, defaultMessage:function(a, b){return this.findDefined(this.customMessage(a.name, b), this.customMetaMessage(a, b), !this.settings.ignoreTitle && a.title || undefined, c.validator.messages[b], "Warning: No message defined for " + a.name + "")}, formatAndAdd:function(a, b){var d = this.defaultMessage(a, b.method), e = /\$?\{(\d+)\}/g; if (typeof d == "function")d = d.call(this, b.parameters, a); else if (e.test(d))d = jQuery.format(d.replace(e, "{$1}"), b.parameters); this.errorList.push({message:d, element:a}); this.errorMap[a.name] = d; this.submitted[a.name] = d}, addWrapper:function(a){if (this.settings.wrapper)a = a.add(a.parent(this.settings.wrapper)); return a}, defaultShowErrors:function(){for (var a = 0; this.errorList[a]; a++){var b = this.errorList[a]; this.settings.highlight && this.settings.highlight.call(this, b.element, this.settings.errorClass, this.settings.validClass); this.showLabel(b.element, b.message)}if (this.errorList.length)this.toShow = this.toShow.add(this.containers); if (this.settings.success)for (a = 0; this.successList[a]; a++)this.showLabel(this.successList[a]); if (this.settings.unhighlight){a = 0; for (b = this.validElements(); b[a]; a++)this.settings.unhighlight.call(this, b[a], 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 c(this.errorList).map(function(){return this.element})}, showLabel:function(a, b){var d = this.errorsFor(a); if (d.length){d.removeClass().addClass(this.settings.errorClass); d.attr("generated") && d.html(b)} else{d = c("<" + this.settings.errorElement + "/>").attr({"for":this.idOrName(a), generated:true}).addClass(this.settings.errorClass).html(b || ""); if (this.settings.wrapper)d = d.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); this.labelContainer.append(d).length || (this.settings.errorPlacement?this.settings.errorPlacement(d, c(a)):d.insertAfter(a))}if (!b && this.settings.success){d.text(""); typeof this.settings.success == "string"?d.addClass(this.settings.success):this.settings.success(d)}this.toShow = this.toShow.add(d)}, errorsFor:function(a){var b = this.idOrName(a); return this.errors().filter(function(){return c(this).attr("for") == b})}, idOrName:function(a){return this.groups[a.name] || (this.checkable(a)?a.name:a.id || a.name)}, checkable:function(a){return/radio|checkbox/i.test(a.type)}, findByName:function(a){var b = this.currentForm; return c(document.getElementsByName(a)).map(function(d, e){return e.form == b && e.name == a && e || null})}, getLength:function(a, b){switch (b.nodeName.toLowerCase()){case "select":return c("option:selected", b).length; case "input":if (this.checkable(b))return this.findByName(b.name).filter(":checked").length}return a.length}, depend:function(a, b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a, b):true}, dependTypes:{"boolean":function(a){return a}, string:function(a, b){return!!c(a, b.form).length}, "function":function(a, b){return a(b)}}, optional:function(a){return!c.validator.methods.required.call(this, c.trim(a.value), a) && "dependency-mismatch"}, startRequest:function(a){if (!this.pending[a.name]){this.pendingRequest++; this.pending[a.name] = true}}, stopRequest:function(a, b){this.pendingRequest--; if (this.pendingRequest < 0)this.pendingRequest = 0; delete this.pending[a.name]; if (b && this.pendingRequest == 0 && this.formSubmitted && this.form()){c(this.currentForm).submit(); this.formSubmitted = false} else if (!b && this.pendingRequest == 0 && this.formSubmitted){c(this.currentForm).triggerHandler("invalid-form", [this]); this.formSubmitted = false}}, previousValue:function(a){return c.data(a, "previousValue") || c.data(a, "previousValue", {old:null, valid:true, message:this.defaultMessage(a, "remote")})}}, classRuleSettings:{required:{required:true}, email:{email:true}, url:{url:true}, date:{date:true}, dateISO:{dateISO:true}, dateDE:{dateDE:true}, number:{number:true}, numberDE:{numberDE:true}, digits:{digits:true}, creditcard:{creditcard:true}}, addClassRules:function(a, b){a.constructor == String?this.classRuleSettings[a] = b:c.extend(this.classRuleSettings, a)}, classRules:function(a){var b = {}; (a = c(a).attr("class")) && c.each(a.split(" "), function(){this in c.validator.classRuleSettings && c.extend(b, c.validator.classRuleSettings[this])}); return b}, attributeRules:function(a){var b = {}; a = c(a); for (var d in c.validator.methods){var e = a.attr(d); if (e)b[d] = e}b.maxlength && /-1|2147483647|524288/.test(b.maxlength) && delete b.maxlength; return b}, metadataRules:function(a){if (!c.metadata)return{}; var b = c.data(a.form, "validator").settings.meta; return b?c(a).metadata()[b]:c(a).metadata()}, staticRules:function(a){var b = {}, d = c.data(a.form, "validator"); if (d.settings.rules)b = c.validator.normalizeRule(d.settings.rules[a.name]) || {}; return b}, normalizeRules:function(a, b){c.each(a, function(d, e){if (e === false)delete a[d]; else if (e.param || e.depends){var f = true; switch (typeof e.depends){case "string":f = !!c(e.depends, b.form).length; break; case "function":f = e.depends.call(b, b)}if (f)a[d] = e.param !== undefined?e.param:true; else delete a[d]}}); c.each(a, function(d, e){a[d] = c.isFunction(e)?e(b):e}); c.each(["minlength", "maxlength", "min", "max"], function(){if (a[this])a[this] = Number(a[this])}); c.each(["rangelength", "range"], function(){if (a[this])a[this] = [Number(a[this][0]), Number(a[this][1])]}); if (c.validator.autoCreateRanges){if (a.min && a.max){a.range = [a.min, a.max]; delete a.min; delete a.max}if (a.minlength && a.maxlength){a.rangelength = [a.minlength, a.maxlength]; delete a.minlength; delete a.maxlength}}a.messages && delete a.messages; return a}, normalizeRule:function(a){if (typeof a == "string"){var b = {}; c.each(a.split(/\s/), function(){b[this] = true}); a = b}return a}, addMethod:function(a, b, d){c.validator.methods[a] = b; c.validator.messages[a] = d != undefined?d:c.validator.messages[a]; b.length < 3 && c.validator.addClassRules(a, c.validator.normalizeRule(a))}, methods:{required:function(a, b, d){if (!this.depend(d, b))return"dependency-mismatch"; switch (b.nodeName.toLowerCase()){case "select":return(a = c(b).val()) && a.length > 0; case "input":if (this.checkable(b))return this.getLength(a, b) > 0; default:return c.trim(a).length > 0}}, remote:function(a, b, d){if (this.optional(b))return"dependency-mismatch"; var e = this.previousValue(b); this.settings.messages[b.name] || (this.settings.messages[b.name] = {}); e.originalMessage = this.settings.messages[b.name].remote; this.settings.messages[b.name].remote = e.message; d = typeof d == "string" && {url:d} || d; if (this.pending[b.name])return"pending"; if (e.old === a)return e.valid; e.old = a; var f = this; this.startRequest(b); var g = {}; g[b.name] = a; c.ajax(c.extend(true, {url:d, mode:"abort", port:"validate" + b.name, dataType:"json", data:g, success:function(h){f.settings.messages[b.name].remote = e.originalMessage; var j = h === true; if (j){var i = f.formSubmitted; f.prepareElement(b); f.formSubmitted = i; f.successList.push(b); f.showErrors()} else{i = {}; h = h || f.defaultMessage(b, "remote"); i[b.name] = e.message = c.isFunction(h)?h(a):h; f.showErrors(i)}e.valid = j; f.stopRequest(b, j)}}, d)); return"pending"}, minlength:function(a, b, d){return this.optional(b) || this.getLength(c.trim(a), b) >= d}, maxlength:function(a, b, d){return this.optional(b) || this.getLength(c.trim(a), b) <= d}, rangelength:function(a, b, d){a = this.getLength(c.trim(a), b); return this.optional(b) || a >= d[0] && a <= d[1]}, min:function(a, b, d){return this.optional(b) || a >= d}, max:function(a, b, d){return this.optional(b) || a <= d}, range:function(a, b, d){return this.optional(b) || a >= d[0] && a <= d[1]}, email:function(a, b){return this.optional(b) || /^((([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(a)}, url:function(a, b){return this.optional(b) || /^(https?|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(a)}, date:function(a, b){return this.optional(b) || !/Invalid|NaN/.test(new Date(a))}, dateISO:function(a, b){return this.optional(b) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)}, number:function(a, b){return this.optional(b) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)}, digits:function(a, b){return this.optional(b) || /^\d+$/.test(a)}, creditcard:function(a, b){if (this.optional(b))return"dependency-mismatch"; if (/[^0-9-]+/.test(a))return false; var d = 0, e = 0, f = false; a = a.replace(/\D/g, ""); for (var g = a.length - 1; g >= 0; g--){e = a.charAt(g); e = parseInt(e, 10); if (f)if ((e *= 2) > 9)e -= 9; d += e; f = !f}return d % 10 == 0}, accept:function(a, b, d){d = typeof d == "string"?d.replace(/,/g, "|"):"png|jpe?g|gif"; return this.optional(b) || a.match(RegExp(".(" + d + ")$", "i"))}, equalTo:function(a, b, d){d = c(d).unbind(".validate-equalTo").bind("blur.validate-equalTo", function(){c(b).valid()}); return a == d.val()}}}); c.format = c.validator.format})(jQuery); (function(c){var a = {}; if (c.ajaxPrefilter)c.ajaxPrefilter(function(d, e, f){e = d.port; if (d.mode == "abort"){a[e] && a[e].abort(); a[e] = f}}); else{var b = c.ajax; c.ajax = function(d){var e = ("port"in d?d:c.ajaxSettings).port; if (("mode"in d?d:c.ajaxSettings).mode == "abort"){a[e] && a[e].abort(); return a[e] = b.apply(this, arguments)}return b.apply(this, arguments)}}})(jQuery); (function(c){!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener && c.each({focus:"focusin", blur:"focusout"}, function(a, b){function d(e){e = c.event.fix(e); e.type = b; return c.event.handle.call(this, e)}c.event.special[b] = {setup:function(){this.addEventListener(a, d, true)}, teardown:function(){this.removeEventListener(a, d, true)}, handler:function(e){arguments[0] = c.event.fix(e); arguments[0].type = b; return c.event.handle.apply(this, arguments)}}}); c.extend(c.fn, {validateDelegate:function(a, b, d){return this.bind(b, function(e){var f = c(e.target); if (f.is(a))return d.apply(f, arguments)})}})})(jQuery);