/*! jquery validation plugin - v1.11.0 - 2/4/2013
* https://github.com/jzaefferer/jquery-validation
* copyright (c) 2013 jörn zaefferer; licensed mit */
(function(e) {
e.extend(e.fn, {
validate: function(t) {
if(!this.length) {
t && t.debug && window.console && console.warn("nothing selected, can't validate, returning nothing.");
return
}
var n = e.data(this[0], "validator");
return n ? n : (this.attr("novalidate", "novalidate"), n = new e.validator(t, this[0]), e.data(this[0], "validator", n), n.settings.onsubmit && (this.validatedelegate(":submit", "click", function(t) {
n.settings.submithandler && (n.submitbutton = t.target), e(t.target).hasclass("cancel") && (n.cancelsubmit = !0)
}), this.submit(function(t) {
function r() {
var r;
return n.settings.submithandler ? (n.submitbutton && (r = e("").attr("name", n.submitbutton.name).val(n.submitbutton.value).appendto(n.currentform)), n.settings.submithandler.call(n, n.currentform, t), n.submitbutton && r.remove(), !1) : !0
}
return n.settings.debug && t.preventdefault(), n.cancelsubmit ? (n.cancelsubmit = !1, r()) : n.form() ? n.pendingrequest ? (n.formsubmitted = !0, !1) : r() : (n.focusinvalid(), !1)
})), n)
},
valid: function() {
if(e(this[0]).is("form")) return this.validate().form();
var t = !0,
n = e(this[0].form).validate();
return this.each(function() {
t &= n.element(this)
}), t
},
removeattrs: function(t) {
var n = {},
r = this;
return e.each(t.split(/\s/), function(e, t) {
n[t] = r.attr(t), r.removeattr(t)
}), n
},
rules: function(t, n) {
var r = this[0];
if(t) {
var i = e.data(r.form, "validator").settings,
s = i.rules,
o = e.validator.staticrules(r);
switch(t) {
case "add":
e.extend(o, e.validator.normalizerule(n)), s[r.name] = o, n.messages && (i.messages[r.name] = e.extend(i.messages[r.name], n.messages));
break;
case "remove":
if(!n) return delete s[r.name], o;
var u = {};
return e.each(n.split(/\s/), function(e, t) {
u[t] = o[t], delete o[t]
}), u
}
}
var a = e.validator.normalizerules(e.extend({}, e.validator.classrules(r), e.validator.attributerules(r), e.validator.datarules(r), e.validator.staticrules(r)), r);
if(a.required) {
var f = a.required;
delete a.required, a = e.extend({
required: f
}, a)
}
return a
}
}), e.extend(e.expr[":"], {
blank: function(t) {
return !e.trim("" + t.value)
},
filled: function(t) {
return !!e.trim("" + t.value)
},
unchecked: function(e) {
return !e.checked
}
}), e.validator = function(t, n) {
this.settings = e.extend(!0, {}, e.validator.defaults, t), this.currentform = n, this.init()
}, e.validator.format = function(t, n) {
return arguments.length === 1 ? function() {
var n = e.makearray(arguments);
return n.unshift(t), e.validator.format.apply(this, n)
} : (arguments.length > 2 && n.constructor !== array && (n = e.makearray(arguments).slice(1)), n.constructor !== array && (n = [n]), e.each(n, function(e, n) {
t = t.replace(new regexp("\\{" + e + "\\}", "g"), function() {
return n
})
}), t)
}, e.extend(e.validator, {
defaults: {
messages: {},
groups: {},
rules: {},
errorclass: "error",
validclass: "valid",
errorelement: "label",
focusinvalid: !0,
errorcontainer: e([]),
errorlabelcontainer: e([]),
onsubmit: !0,
ignore: ":hidden",
ignoretitle: !1,
onfocusin: function(e, t) {
this.lastactive = e, this.settings.focuscleanup && !this.blockfocuscleanup && (this.settings.unhighlight && this.settings.unhighlight.call(this, e, this.settings.errorclass, this.settings.validclass), this.addwrapper(this.errorsfor(e)).hide())
},
onfocusout: function(e, t) {
!this.checkable(e) && (e.name in this.submitted || !this.optional(e)) && this.element(e)
},
onkeyup: function(e, t) {
if(t.which === 9 && this.elementvalue(e) === "") return;
(e.name in this.submitted || e === this.lastelement) && this.element(e)
},
onclick: function(e, t) {
e.name in this.submitted ? this.element(e) : e.parentnode.name in this.submitted && this.element(e.parentnode)
},
highlight: function(t, n, r) {
t.type === "radio" ? this.findbyname(t.name).addclass(n).removeclass(r) : e(t).addclass(n).removeclass(r)
},
unhighlight: function(t, n, r) {
t.type === "radio" ? this.findbyname(t.name).removeclass(n).addclass(r) : e(t).removeclass(n).addclass(r)
}
},
setdefaults: function(t) {
e.extend(e.validator.defaults, t)
},
messages: {
required: "该项为必填项",
remote: "please fix this field.",
email: "please enter a valid email address.",
url: "请输入正确的网址,如:http://www.chinastar.com",
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: e.validator.format("输入不超过 {0} 个字"),
minlength: e.validator.format("输入不少于 {0} 个字"),
rangelength: e.validator.format("please enter a value between {0} and {1} characters long."),
range: e.validator.format("please enter a value between {0} and {1}."),
max: e.validator.format("please enter a value less than or equal to {0}."),
min: e.validator.format("please enter a value greater than or equal to {0}.")
},
autocreateranges: !1,
prototype: {
init: function() {
function r(t) {
var n = e.data(this[0].form, "validator"),
r = "on" + t.type.replace(/^validate/, "");
n.settings[r] && n.settings[r].call(n, this[0], t)
}
this.labelcontainer = e(this.settings.errorlabelcontainer), this.errorcontext = this.labelcontainer.length && this.labelcontainer || e(this.currentform), this.containers = e(this.settings.errorcontainer).add(this.settings.errorlabelcontainer), this.submitted = {}, this.valuecache = {}, this.pendingrequest = 0, this.pending = {}, this.invalid = {}, this.reset();
var t = this.groups = {};
e.each(this.settings.groups, function(n, r) {
typeof r == "string" && (r = r.split(/\s/)), e.each(r, function(e, r) {
t[r] = n
})
});
var n = this.settings.rules;
e.each(n, function(t, r) {
n[t] = e.validator.normalizerule(r)
}), e(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", r).validatedelegate("[type='radio'], [type='checkbox'], select, option", "click", r), this.settings.invalidhandler && e(this.currentform).bind("invalid-form.validate", this.settings.invalidhandler)
},
form: function() {
return this.checkform(), e.extend(this.submitted, this.errormap), this.invalid = e.extend({}, this.errormap), this.valid() || e(this.currentform).triggerhandler("invalid-form", [this]), this.showerrors(), this.valid()
},
checkform: function() {
this.prepareform();
for(var e = 0, t = this.currentelements = this.elements(); t[e]; e++) this.check(t[e]);
return this.valid()
},
element: function(t) {
t = this.validationtargetfor(this.clean(t)), this.lastelement = t, this.prepareelement(t), this.currentelements = e(t);
var n = this.check(t) !== !1;
return n ? delete this.invalid[t.name] : this.invalid[t.name] = !0, this.numberofinvalids() || (this.tohide = this.tohide.add(this.containers)), this.showerrors(), n
},
showerrors: function(t) {
if(t) {
e.extend(this.errormap, t), this.errorlist = [];
for(var n in t) this.errorlist.push({
message: t[n],
element: this.findbyname(n)[0]
});
this.successlist = e.grep(this.successlist, function(e) {
return !(e.name in t)
})
}
this.settings.showerrors ? this.settings.showerrors.call(this, this.errormap, this.errorlist) : this.defaultshowerrors()
},
resetform: function() {
e.fn.resetform && e(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(e) {
var t = 0;
for(var n in e) t++;
return t
},
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 {
e(this.findlastactive() || this.errorlist.length && this.errorlist[0].element || []).filter(":visible").focus().trigger("focusin")
} catch(t) {}
},
findlastactive: function() {
var t = this.lastactive;
return t && e.grep(this.errorlist, function(e) {
return e.element.name === t.name
}).length === 1 && t
},
elements: function() {
var t = this,
n = {};
return e(this.currentform).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function() {
return !this.name && t.settings.debug && window.console && console.error("%o has no name assigned", this), this.name in n || !t.objectlength(e(this).rules()) ? !1 : (n[this.name] = !0, !0)
})
},
clean: function(t) {
return e(t)[0]
},
errors: function() {
var t = this.settings.errorclass.replace(" ", ".");
return e(this.settings.errorelement + "." + t, this.errorcontext)
},
reset: function() {
this.successlist = [], this.errorlist = [], this.errormap = {}, this.toshow = e([]), this.tohide = e([]), this.currentelements = e([])
},
prepareform: function() {
this.reset(), this.tohide = this.errors().add(this.containers)
},
prepareelement: function(e) {
this.reset(), this.tohide = this.errorsfor(e)
},
elementvalue: function(t) {
var n = e(t).attr("type"),
r = e(t).val();
return n === "radio" || n === "checkbox" ? e("input[name='" + e(t).attr("name") + "']:checked").val() : typeof r == "string" ? r.replace(/\r/g, "") : r
},
check: function(t) {
t = this.validationtargetfor(this.clean(t));
var n = e(t).rules(),
r = !1,
i = this.elementvalue(t),
s;
for(var o in n) {
var u = {
method: o,
parameters: n[o]
};
try {
s = e.validator.methods[o].call(this, i, t, u.parameters);
if(s === "dependency-mismatch") {
r = !0;
continue
}
r = !1;
if(s === "pending") {
this.tohide = this.tohide.not(this.errorsfor(t));
return
}
if(!s) return this.formatandadd(t, u), !1
} catch(a) {
throw this.settings.debug && window.console && console.log("exception occured when checking element " + t.id + ", check the '" + u.method + "' method.", a), a
}
}
if(r) return;
return this.objectlength(n) && this.successlist.push(t), !0
},
customdatamessage: function(t, n) {
return e(t).data("msg-" + n.tolowercase()) || t.attributes && e(t).attr("data-msg-" + n.tolowercase())
},
custommessage: function(e, t) {
var n = this.settings.messages[e];
return n && (n.constructor === string ? n : n[t])
},
finddefined: function() {
for(var e = 0; e < arguments.length; e++)
if(arguments[e] !== undefined) return arguments[e];
return undefined
},
defaultmessage: function(t, n) {
return this.finddefined(this.custommessage(t.name, n), this.customdatamessage(t, n), !this.settings.ignoretitle && t.title || undefined, e.validator.messages[n], "warning: no message defined for " + t.name + "")
},
formatandadd: function(t, n) {
var r = this.defaultmessage(t, n.method),
i = /\$?\{(\d+)\}/g;
typeof r == "function" ? r = r.call(this, n.parameters, t) : i.test(r) && (r = e.validator.format(r.replace(i, "{$1}"), n.parameters)), this.errorlist.push({
message: r,
element: t
}), this.errormap[t.name] = r, this.submitted[t.name] = r
},
addwrapper: function(e) {
return this.settings.wrapper && (e = e.add(e.parent(this.settings.wrapper))), e
},
defaultshowerrors: function() {
var e, t;
for(e = 0; this.errorlist[e]; e++) {
var n = this.errorlist[e];
this.settings.highlight && this.settings.highlight.call(this, n.element, this.settings.errorclass, this.settings.validclass), this.showlabel(n.element, n.message)
}
this.errorlist.length && (this.toshow = this.toshow.add(this.containers));
if(this.settings.success)
for(e = 0; this.successlist[e]; e++) this.showlabel(this.successlist[e]);
if(this.settings.unhighlight)
for(e = 0, t = this.validelements(); t[e]; e++) this.settings.unhighlight.call(this, t[e], 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 e(this.errorlist).map(function() {
return this.element
})
},
showlabel: function(t, n) {
var r = this.errorsfor(t);
r.length ? (r.removeclass(this.settings.validclass).addclass(this.settings.errorclass), r.html(n)) : (r = e("<" + this.settings.errorelement + ">").attr("for", this.idorname(t)).addclass(this.settings.errorclass).html(n || ""), this.settings.wrapper && (r = r.hide().show().wrap("<" + this.settings.wrapper + "/>").parent()), this.labelcontainer.append(r).length || (this.settings.errorplacement ? this.settings.errorplacement(r, e(t)) : r.insertafter(t))), !n && this.settings.success && (r.text(""), typeof this.settings.success == "string" ? r.addclass(this.settings.success) : this.settings.success(r, t)), this.toshow = this.toshow.add(r)
},
errorsfor: function(t) {
var n = this.idorname(t);
return this.errors().filter(function() {
return e(this).attr("for") === n
})
},
idorname: function(e) {
return this.groups[e.name] || (this.checkable(e) ? e.name : e.id || e.name)
},
validationtargetfor: function(e) {
return this.checkable(e) && (e = this.findbyname(e.name).not(this.settings.ignore)[0]), e
},
checkable: function(e) {
return /radio|checkbox/i.test(e.type)
},
findbyname: function(t) {
return e(this.currentform).find("[name='" + t + "']")
},
getlength: function(t, n) {
switch(n.nodename.tolowercase()) {
case "select":
return e("option:selected", n).length;
case "input":
if(this.checkable(n)) return this.findbyname(n.name).filter(":checked").length
}
return t.length
},
depend: function(e, t) {
return this.dependtypes[typeof e] ? this.dependtypes[typeof e](e, t) : !0
},
dependtypes: {
"boolean": function(e, t) {
return e
},
string: function(t, n) {
return !!e(t, n.form).length
},
"function": function(e, t) {
return e(t)
}
},
optional: function(t) {
var n = this.elementvalue(t);
return !e.validator.methods.required.call(this, n, t) && "dependency-mismatch"
},
startrequest: function(e) {
this.pending[e.name] || (this.pendingrequest++, this.pending[e.name] = !0)
},
stoprequest: function(t, n) {
this.pendingrequest--, this.pendingrequest < 0 && (this.pendingrequest = 0), delete this.pending[t.name], n && this.pendingrequest === 0 && this.formsubmitted && this.form() ? (e(this.currentform).submit(), this.formsubmitted = !1) : !n && this.pendingrequest === 0 && this.formsubmitted && (e(this.currentform).triggerhandler("invalid-form", [this]), this.formsubmitted = !1)
},
previousvalue: function(t) {
return e.data(t, "previousvalue") || e.data(t, "previousvalue", {
old: null,
valid: !0,
message: this.defaultmessage(t, "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(t, n) {
t.constructor === string ? this.classrulesettings[t] = n : e.extend(this.classrulesettings, t)
},
classrules: function(t) {
var n = {},
r = e(t).attr("class");
return r && e.each(r.split(" "), function() {
this in e.validator.classrulesettings && e.extend(n, e.validator.classrulesettings[this])
}), n
},
attributerules: function(t) {
var n = {},
r = e(t);
for(var i in e.validator.methods) {
var s;
i === "required" ? (s = r.get(0).getattribute(i), s === "" && (s = !0), s = !!s) : s = r.attr(i), s ? n[i] = s : r[0].getattribute("type") === i && (n[i] = !0)
}
return n.maxlength && /-1|2147483647|524288/.test(n.maxlength) && delete n.maxlength, n
},
datarules: function(t) {
var n, r, i = {},
s = e(t);
for(n in e.validator.methods) r = s.data("rule-" + n.tolowercase()), r !== undefined && (i[n] = r);
return i
},
staticrules: function(t) {
var n = {},
r = e.data(t.form, "validator");
return r.settings.rules && (n = e.validator.normalizerule(r.settings.rules[t.name]) || {}), n
},
normalizerules: function(t, n) {
return e.each(t, function(r, i) {
if(i === !1) {
delete t[r];
return
}
if(i.param || i.depends) {
var s = !0;
switch(typeof i.depends) {
case "string":
s = !!e(i.depends, n.form).length;
break;
case "function":
s = i.depends.call(n, n)
}
s ? t[r] = i.param !== undefined ? i.param : !0 : delete t[r]
}
}), e.each(t, function(r, i) {
t[r] = e.isfunction(i) ? i(n) : i
}), e.each(["minlength", "maxlength"], function() {
t[this] && (t[this] = number(t[this]))
}), e.each(["rangelength"], function() {
var n;
t[this] && (e.isarray(t[this]) ? t[this] = [number(t[this][0]), number(t[this][1])] : typeof t[this] == "string" && (n = t[this].split(/[\s,]+/), t[this] = [number(n[0]), number(n[1])]))
}), e.validator.autocreateranges && (t.min && t.max && (t.range = [t.min, t.max], delete t.min, delete t.max), t.minlength && t.maxlength && (t.rangelength = [t.minlength, t.maxlength], delete t.minlength, delete t.maxlength)), t
},
normalizerule: function(t) {
if(typeof t == "string") {
var n = {};
e.each(t.split(/\s/), function() {
n[this] = !0
}), t = n
}
return t
},
addmethod: function(t, n, r) {
e.validator.methods[t] = n, e.validator.messages[t] = r !== undefined ? r : e.validator.messages[t], n.length < 3 && e.validator.addclassrules(t, e.validator.normalizerule(t))
},
methods: {
required: function(t, n, r) {
if(!this.depend(r, n)) return "dependency-mismatch";
if(n.nodename.tolowercase() === "select") {
var i = e(n).val();
return i && i.length > 0
}
return this.checkable(n) ? this.getlength(t, n) > 0 : e.trim(t).length > 0
},
remote: function(t, n, r) {
if(this.optional(n)) return "dependency-mismatch";
var i = this.previousvalue(n);
this.settings.messages[n.name] || (this.settings.messages[n.name] = {}), i.originalmessage = this.settings.messages[n.name].remote, this.settings.messages[n.name].remote = i.message, r = typeof r == "string" && {
url: r
} || r;
if(i.old === t) return i.valid;
i.old = t;
var s = this;
this.startrequest(n);
var o = {};
return o[n.name] = t, e.ajax(e.extend(!0, {
url: r,
mode: "abort",
port: "validate" + n.name,
datatype: "json",
data: o,
success: function(r) {
s.settings.messages[n.name].remote = i.originalmessage;
var o = r === !0 || r === "true";
if(o) {
var u = s.formsubmitted;
s.prepareelement(n), s.formsubmitted = u, s.successlist.push(n), delete s.invalid[n.name], s.showerrors()
} else {
var a = {},
f = r || s.defaultmessage(n, "remote");
a[n.name] = i.message = e.isfunction(f) ? f(t) : f, s.invalid[n.name] = !0, s.showerrors(a)
}
i.valid = o, s.stoprequest(n, o)
}
}, r)), "pending"
},
minlength: function(t, n, r) {
var i = e.isarray(t) ? t.length : this.getlength(e.trim(t), n);
return this.optional(n) || i >= r
},
maxlength: function(t, n, r) {
var i = e.isarray(t) ? t.length : this.getlength(e.trim(t), n);
return this.optional(n) || i <= r
},
rangelength: function(t, n, r) {
var i = e.isarray(t) ? t.length : this.getlength(e.trim(t), n);
return this.optional(n) || i >= r[0] && i <= r[1]
},
min: function(e, t, n) {
return this.optional(t) || e >= n
},
max: function(e, t, n) {
return this.optional(t) || e <= n
},
range: function(e, t, n) {
return this.optional(t) || e >= n[0] && e <= n[1]
},
email: function(e, t) {
return this.optional(t) || /^((([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(e)
},
url: function(e, t) {
return this.optional(t) || /^(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(e)
},
date: function(e, t) {
return this.optional(t) || !/invalid|nan/.test((new date(e)).tostring())
},
dateiso: function(e, t) {
return this.optional(t) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(e)
},
number: function(e, t) {
return this.optional(t) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(e)
},
digits: function(e, t) {
return this.optional(t) || /^\d+$/.test(e)
},
creditcard: function(e, t) {
if(this.optional(t)) return "dependency-mismatch";
if(/[^0-9 \-]+/.test(e)) return !1;
var n = 0,
r = 0,
i = !1;
e = e.replace(/\d/g, "");
for(var s = e.length - 1; s >= 0; s--) {
var o = e.charat(s);
r = parseint(o, 10), i && (r *= 2) > 9 && (r -= 9), n += r, i = !i
}
return n % 10 === 0
},
equalto: function(t, n, r) {
var i = e(r);
return this.settings.onfocusout && i.unbind(".validate-equalto").bind("blur.validate-equalto", function() {
e(n).valid()
}), t === i.val()
}
}
}), e.format = e.validator.format
})(jquery),
function(e) {
var t = {};
if(e.ajaxprefilter) e.ajaxprefilter(function(e, n, r) {
var i = e.port;
e.mode === "abort" && (t[i] && t[i].abort(), t[i] = r)
});
else {
var n = e.ajax;
e.ajax = function(r) {
var i = ("mode" in r ? r : e.ajaxsettings).mode,
s = ("port" in r ? r : e.ajaxsettings).port;
return i === "abort" ? (t[s] && t[s].abort(), t[s] = n.apply(this, arguments)) : n.apply(this, arguments)
}
}
}(jquery),
function(e) {
e.extend(e.fn, {
validatedelegate: function(t, n, r) {
return this.bind(n, function(n) {
var i = e(n.target);
if(i.is(t)) return r.apply(i, arguments)
})
}
})
}(jquery);