PageSourceSearch

https://www.jokaiat.com/wp-content/themes/photome/js/jquery.validate.js

js jokaiat.com collected 2026-10-08 01:17:16 UTC 41,335 bytes, 890 lines download raw bytes

1/*
2 * jQuery validation plug-in 1.7
3 *
4 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
5 * http://docs.jquery.com/Plugins/Validation
6 *
7 * Copyright (c) 2006 - 2008 Jรถrn Zaefferer
8 *
9 * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
10 *
11 * Dual licensed under the MIT and GPL licenses:
12 *   http://www.opensource.org/licenses/mit-license.php
13 *   http://www.gnu.org/licenses/gpl.html
14 */
15(function($) {
16    $.extend($.fn, {
17        validate: function(options) {
18            if (!this.length) {
19                options && options.debug && window.console && console.warn("nothing selected, can't validate, returning nothing");
20                return;
21            }
22            var validator = $.data(this[0], 'validator');
23            if (validator) {
24                return validator;
25            }
26            validator = new $.validator(options, this[0]);
27            $.data(this[0], 'validator', validator);
28            if (validator.settings.onsubmit) {
29                this.find("input, button").filter(".cancel").click(function() {
30                    validator.cancelSubmit = true;
31                });
32                if (validator.settings.submitHandler) {
33                    this.find("input, button").filter(":submit").click(function() {
34                        validator.submitButton = this;
35                    });
36                }
37                this.submit(function(event) {
38                    if (validator.settings.debug) event.preventDefault();
39
40                    function handle() {
41                        if (validator.settings.submitHandler) {
42                            if (validator.submitButton) {
43                                var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
44                            }
45                            validator.settings.submitHandler.call(validator, validator.currentForm);
46                            if (validator.submitButton) {
47                                hidden.remove();
48                            }
49                            return false;
50                        }
51                        return true;
52                    }
53                    if (validator.cancelSubmit) {
54                        validator.cancelSubmit = false;
55                        return handle();
56                    }
57                    if (validator.form()) {
58                        if (validator.pendingRequest) {
59                            validator.formSubmitted = true;
60                            return false;
61                        }
62                        return handle();
63                    } else {
64                        validator.focusInvalid();
65                        return false;
66                    }
67                });
68            }
69            return validator;
70        },
71        valid: function() {
72            if ($(this[0]).is('form')) {
73                return this.validate().form();
74            } else {
75                var valid = true;
76                var validator = $(this[0].form).validate();
77                this.each(function() {
78                    valid &= validator.element(this);
79                });
80                return valid;
81            }
82        },
83        removeAttrs: function(attributes) {
84            var result = {},
85                $element = this;
86            $.each(attributes.split(/\s/), function(index, value) {
87                result[value] = $element.attr(value);
88                $element.removeAttr(value);
89            });
90            return result;
91        },
92        rules: function(command, argument) {
93            var element = this[0];
94            if (command) {
95                var settings = $.data(element.form, 'validator').settings;
96                var staticRules = settings.rules;
97                var existingRules = $.validator.staticRules(element);
98                switch (command) {
99                    case "add":
100                        $.extend(existingRules, $.validator.normalizeRule(argument));
101                        staticRules[element.name] = existingRules;
102                        if (argument.messages) settings.messages[element.name] = $.extend(settings.messages[element.name], argument.messages);
103                        break;
104                    case "remove":
105                        if (!argument) {
106                            delete staticRules[element.name];
107                            return existingRules;
108                        }
109                        var filtered = {};
110                        $.each(argument.split(/\s/), function(index, method) {
111                            filtered[method] = existingRules[method];
112                            delete existingRules[method];
113                        });
114                        return filtered;
115                }
116            }
117            var data = $.validator.normalizeRules($.extend({}, $.validator.metadataRules(element), $.validator.classRules(element), $.validator.attributeRules(element), $.validator.staticRules(element)), element);
118            if (data.required) {
119                var param = data.required;
120                delete data.required;
121                data = $.extend({
122                    required: param
123                }, data);
124            }
125            return data;
126        }
127    });
128    $.extend($.expr[":"], {
129        blank: function(a) {
130            return !$.trim("" + a.value);
131        },
132        filled: function(a) {
133            return !!$.trim("" + a.value);
134        },
135        unchecked: function(a) {
136            return !a.checked;
137        }
138    });
139    $.validator = function(options, form) {
140        this.settings = $.extend(true, {}, $.validator.defaults, options);
141        this.currentForm = form;
142        this.init();
143    };
144    $.validator.format = function(source, params) {
145        if (arguments.length == 1) return function() {
146            var args = $.makeArray(arguments);
147            args.unshift(source);
148            return $.validator.format.apply(this, args);
149        };
150        if (arguments.length > 2 && params.constructor != Array) {
151            params = $.makeArray(arguments).slice(1);
152        }
153        if (params.constructor != Array) {
154            params = [params];
155        }
156        $.each(params, function(i, n) {
157            source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
158        });
159        return source;
160    };
161    $.extend($.validator, {
162        defaults: {
163            messages: {},
164            groups: {},
165            rules: {},
166            errorClass: "error",
167            validClass: "valid",
168            errorElement: "label",
169            focusInvalid: true,
170            errorContainer: $([]),
171            errorLabelContainer: $([]),
172            onsubmit: true,
173            ignore: [],
174            ignoreTitle: false,
175            onfocusin: function(element) {
176                this.lastActive = element;
177                if (this.settings.focusCleanup && !this.blockFocusCleanup) {
178                    this.settings.unhighlight && this.settings.unhighlight.call(this, element, this.settings.errorClass, this.settings.validClass);
179                    this.errorsFor(element).hide();
180                }
181            },
182            onfocusout: function(element) {
183                if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) {
184                    this.element(element);
185                }
186            },
187            onkeyup: function(element) {
188                if (element.name in this.submitted || element == this.lastElement) {
189                    this.element(element);
190                }
191            },
192            onclick: function(element) {
193                if (element.name in this.submitted) this.element(element);
194                else if (element.parentNode.name in this.submitted) this.element(element.parentNode);
195            },
196            highlight: function(element, errorClass, validClass) {
197                $(element).addClass(errorClass).removeClass(validClass);
198            },
199            unhighlight: function(element, errorClass, validClass) {
200                $(element).removeClass(errorClass).addClass(validClass);
201            }
202        },
203        setDefaults: function(settings) {
204            $.extend($.validator.defaults, settings);
205        },
206        messages: {
207            required: "This field is required.",
208            remote: "Please fix this field.",
209            email: "Please enter a valid email address.",
210            url: "Please enter a valid URL.",
211            date: "Please enter a valid date.",
212            dateISO: "Please enter a valid date (ISO).",
213            number: "Please enter a valid number.",
214            digits: "Please enter only digits.",
215            creditcard: "Please enter a valid credit card number.",
216            equalTo: "Please enter the same value again.",
217            accept: "Please enter a value with a valid extension.",
218            maxlength: $.validator.format("Please enter no more than {0} characters."),
219            minlength: $.validator.format("Please enter at least {0} characters."),
220            rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
221            range: $.validator.format("Please enter a value between {0} and {1}."),
222            max: $.validator.format("Please enter a value less than or equal to {0}."),
223            min: $.validator.format("Please enter a value greater than or equal to {0}.")
224        },
225        autoCreateRanges: false,
226        prototype: {
227            init: function() {
228                this.labelContainer = $(this.settings.errorLabelContainer);
229                this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
230                this.containers = $(this.settings.errorContainer).add(this.settings.errorLabelContainer);
231                this.submitted = {};
232                this.valueCache = {};
233                this.pendingRequest = 0;
234                this.pending = {};
235                this.invalid = {};
236                this.reset();
237                var groups = (this.groups = {});
238                $.each(this.settings.groups, function(key, value) {
239                    $.each(value.split(/\s/), function(index, name) {
240                        groups[name] = key;
241                    });
242                });
243                var rules = this.settings.rules;
244                $.each(rules, function(key, value) {
245                    rules[key] = $.validator.normalizeRule(value);
246                });
247
248                function delegate(event) {
249                    var validator = $.data(this[0].form, "validator"),
250                        eventType = "on" + event.type.replace(/^validate/, "");
251                    validator.settings[eventType] && validator.settings[eventType].call(validator, this[0]);
252                }
253                $(this.currentForm).validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate).validateDelegate(":radio, :checkbox, select, option", "click", delegate);
254                if (this.settings.invalidHandler) $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
255            },
256            form: function() {
257                this.checkForm();
258                $.extend(this.submitted, this.errorMap);
259                this.invalid = $.extend({}, this.errorMap);
260                if (!this.valid()) $(this.currentForm).triggerHandler("invalid-form", [this]);
261                this.showErrors();
262                return this.valid();
263            },
264            checkForm: function() {
265                this.prepareForm();
266                for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) {
267                    this.check(elements[i]);
268                }
269                return this.valid();
270            },
271            element: function(element) {
272                element = this.clean(element);
273                this.lastElement = element;
274                this.prepareElement(element);
275                this.currentElements = $(element);
276                var result = this.check(element);
277                if (result) {
278                    delete this.invalid[element.name];
279                } else {
280                    this.invalid[element.name] = true;
281                }
282                if (!this.numberOfInvalids()) {
283                    this.toHide = this.toHide.add(this.containers);
284                }
285                this.showErrors();
286                return result;
287            },
288            showErrors: function(errors) {
289                if (errors) {
290                    $.extend(this.errorMap, errors);
291                    this.errorList = [];
292                    for (var name in errors) {
293                        this.errorList.push({
294                            message: errors[name],
295                            element: this.findByName(name)[0]
296                        });
297                    }
298                    this.successList = $.grep(this.successList, function(element) {
299                        return !(element.name in errors);
300                    });
301                }
302                this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors();
303            },
304            resetForm: function() {
305                if ($.fn.resetForm) $(this.currentForm).resetForm();
306                this.submitted = {};
307                this.prepareForm();
308                this.hideErrors();
309                this.elements().removeClass(this.settings.errorClass);
310            },
311            numberOfInvalids: function() {
312                return this.objectLength(this.invalid);
313            },
314            objectLength: function(obj) {
315                var count = 0;
316                for (var i in obj) count++;
317                return count;
318            },
319            hideErrors: function() {
320                this.addWrapper(this.toHide).hide();
321            },
322            valid: function() {
323                return this.size() == 0;
324            },
325            size: function() {
326                return this.errorList.length;
327            },
328            focusInvalid: function() {
329                if (this.settings.focusInvalid) {
330                    try {
331                        $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus().trigger("focusin");
332                    } catch (e) {}
333                }
334            },
335            findLastActive: function() {
336                var lastActive = this.lastActive;
337                return lastActive && $.grep(this.errorList, function(n) {
338                    return n.element.name == lastActive.name;
339                }).length == 1 && lastActive;
340            },
341            elements: function() {
342                var validator = this,
343                    rulesCache = {};
344                return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function() {
345                    !this.name && validator.settings.debug && window.console && console.error("%o has no name assigned", this);
346                    if (this.name in rulesCache || !validator.objectLength($(this).rules())) return false;
347                    rulesCache[this.name] = true;
348                    return true;
349                });
350            },
351            clean: function(selector) {
352                return $(selector)[0];
353            },
354            errors: function() {
355                return $(this.settings.errorElement + "." + this.settings.errorClass, this.errorContext);
356            },
357            reset: function() {
358                this.successList = [];
359                this.errorList = [];
360                this.errorMap = {};
361                this.toShow = $([]);
362                this.toHide = $([]);
363                this.currentElements = $([]);
364            },
365            prepareForm: function() {
366                this.reset();
367                this.toHide = this.errors().add(this.containers);
368            },
369            prepareElement: function(element) {
370                this.reset();
371                this.toHide = this.errorsFor(element);
372            },
373            check: function(element) {
374                element = this.clean(element);
375                if (this.checkable(element)) {
376                    element = this.findByName(element.name)[0];
377                }
378                var rules = $(element).rules();
379                var dependencyMismatch = false;
380                for (method in rules) {
381                    var rule = {
382                        method: method,
383                        parameters: rules[method]
384                    };
385                    try {
386                        var result = $.validator.methods[method].call(this, element.value.replace(/\r/g, ""), element, rule.parameters);
387                        if (result == "dependency-mismatch") {
388                            dependencyMismatch = true;
389                            continue;
390                        }
391                        dependencyMismatch = false;
392                        if (result == "pending") {
393                            this.toHide = this.toHide.not(this.errorsFor(element));
394                            return;
395                        }
396                        if (!result) {
397                            this.formatAndAdd(element, rule);
398                            return false;
399                        }
400                    } catch (e) {
401                        this.settings.debug && window.console && console.log("exception occured when checking element " + element.id + ", check the '" + rule.method + "' method", e);
402                        throw e;
403                    }
404                }
405                if (dependencyMismatch) return;
406                if (this.objectLength(rules)) this.successList.push(element);
407                return true;
408            },
409            customMetaMessage: function(element, method) {
410                if (!$.metadata) return;
411                var meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata();
412                return meta && meta.messages && meta.messages[method];
413            },
414            customMessage: function(name, method) {
415                var m = this.settings.messages[name];
416                return m && (m.constructor == String ? m : m[method]);
417            },
418            findDefined: function() {
419                for (var i = 0; i < arguments.length; i++) {
420                    if (arguments[i] !== undefined) return arguments[i];
421                }
422                return undefined;
423            },
424            defaultMessage: function(element, method) {
425                return this.findDefined(this.customMessage(element.name, method), this.customMetaMessage(element, method), !this.settings.ignoreTitle && element.title || undefined, $.validator.messages[method], "<strong>Warning: No message defined for " + element.name + "</strong>");
426            },
427            formatAndAdd: function(element, rule) {
428                var message = this.defaultMessage(element, rule.method),
429                    theregex = /\$?\{(\d+)\}/g;
430                if (typeof message == "function") {
431                    message = message.call(this, rule.parameters, element);
432                } else if (theregex.test(message)) {
433                    message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);
434                }
435                this.errorList.push({
436                    message: message,
437                    element: element
438                });
439                this.errorMap[element.name] = message;
440                this.submitted[element.name] = message;
441            },
442            addWrapper: function(toToggle) {
443                if (this.settings.wrapper) toToggle = toToggle.add(toToggle.parent(this.settings.wrapper));
444                return toToggle;
445            },
446            defaultShowErrors: function() {
447                for (var i = 0; this.errorList[i]; i++) {
448                    var error = this.errorList[i];
449                    this.settings.highlight && this.settings.highlight.call(this, error.element, this.settings.errorClass, this.settings.val
449idClass);
450                    this.showLabel(error.element, error.message);
451                }
452                if (this.errorList.length) {
453                    this.toShow = this.toShow.add(this.containers);
454                }
455                if (this.settings.success) {
456                    for (var i = 0; this.successList[i]; i++) {
457                        this.showLabel(this.successList[i]);
458                    }
459                }
460                if (this.settings.unhighlight) {
461                    for (var i = 0, elements = this.validElements(); elements[i]; i++) {
462                        this.settings.unhighlight.call(this, elements[i], this.settings.errorClass, this.settings.validClass);
463                    }
464                }
465                this.toHide = this.toHide.not(this.toShow);
466                this.hideErrors();
467                this.addWrapper(this.toShow).show();
468            },
469            validElements: function() {
470                return this.currentElements.not(this.invalidElements());
471            },
472            invalidElements: function() {
473                return $(this.errorList).map(function() {
474                    return this.element;
475                });
476            },
477            showLabel: function(element, message) {
478                var label = this.errorsFor(element);
479                if (label.length) {
480                    label.removeClass().addClass(this.settings.errorClass);
481                    label.attr("generated") && label.html(message);
482                } else {
483                    label = $("<" + this.settings.errorElement + "/>").attr({
484                        "for": this.idOrName(element),
485                        generated: true
486                    }).addClass(this.settings.errorClass).html(message || "");
487                    if (this.settings.wrapper) {
488                        label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
489                    }
490                    if (!this.labelContainer.append(label).length) this.settings.errorPlacement ? this.settings.errorPlacement(label, $(element)) : label.insertAfter(element);
491                }
492                if (!message && this.settings.success) {
493                    label.text("");
494                    typeof this.settings.success == "string" ? label.addClass(this.settings.success) : this.settings.success(label);
495                }
496                this.toShow = this.toShow.add(label);
497            },
498            errorsFor: function(element) {
499                var name = this.idOrName(element);
500                return this.errors().filter(function() {
501                    return $(this).attr('for') == name;
502                });
503            },
504            idOrName: function(element) {
505                return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
506            },
507            checkable: function(element) {
508                return /radio|checkbox/i.test(element.type);
509            },
510            findByName: function(name) {
511                var form = this.currentForm;
512                return $(document.getElementsByName(name)).map(function(index, element) {
513                    return element.form == form && element.name == name && element || null;
514                });
515            },
516            getLength: function(value, element) {
517                switch (element.nodeName.toLowerCase()) {
518                    case 'select':
519                        return $("option:selected", element).length;
520                    case 'input':
521                        if (this.checkable(element)) return this.findByName(element.name).filter(':checked').length;
522                }
523                return value.length;
524            },
525            depend: function(param, element) {
526                return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;
527            },
528            dependTypes: {
529                "boolean": function(param, element) {
530                    return param;
531                },
532                "string": function(param, element) {
533                    return !!$(param, element.form).length;
534                },
535                "function": function(param, element) {
536                    return param(element);
537                }
538            },
539            optional: function(element) {
540                return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
541            },
542            startRequest: function(element) {
543                if (!this.pending[element.name]) {
544                    this.pendingRequest++;
545                    this.pending[element.name] = true;
546                }
547            },
548            stopRequest: function(element, valid) {
549                this.pendingRequest--;
550                if (this.pendingRequest < 0) this.pendingRequest = 0;
551                delete this.pending[element.name];
552                if (valid && this.pendingRequest == 0 && this.formSubmitted && this.form()) {
553                    $(this.currentForm).submit();
554                    this.formSubmitted = false;
555                } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
556                    $(this.currentForm).triggerHandler("invalid-form", [this]);
557                    this.formSubmitted = false;
558                }
559            },
560            previousValue: function(element) {
561                return $.data(element, "previousValue") || $.data(element, "previousValue", {
562                    old: null,
563                    valid: true,
564                    message: this.defaultMessage(element, "remote")
565                });
566            }
567        },
568        classRuleSettings: {
569            required: {
570                required: true
571            },
572            email: {
573                email: true
574            },
575            url: {
576                url: true
577            },
578            date: {
579                date: true
580            },
581            dateISO: {
582                dateISO: true
583            },
584            dateDE: {
585                dateDE: true
586            },
587            number: {
588                number: true
589            },
590            numberDE: {
591                numberDE: true
592            },
593            digits: {
594                digits: true
595            },
596            creditcard: {
597                creditcard: true
598            }
599        },
600        addClassRules: function(className, rules) {
601            className.constructor == String ? this.classRuleSettings[className] = rules : $.extend(this.classRuleSettings, className);
602        },
603        classRules: function(element) {
604            var rules = {};
605            var classes = $(element).attr('class');
606            classes && $.each(classes.split(' '), function() {
607                if (this in $.validator.classRuleSettings) {
608                    $.extend(rules, $.validator.classRuleSettings[this]);
609                }
610            });
611            return rules;
612        },
613        attributeRules: function(element) {
614            var rules = {};
615            var $element = $(element);
616            for (method in $.validator.methods) {
617                var value = $element.attr(method);
618                if (value) {
619                    rules[method] = value;
620                }
621            }
622            if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
623                delete rules.maxlength;
624            }
625            return rules;
626        },
627        metadataRules: function(element) {
628            if (!$.metadata) return {};
629            var meta = $.data(element.form, 'validator').settings.meta;
630            return meta ? $(element).metadata()[meta] : $(element).metadata();
631        },
632        staticRules: function(element) {
633            var rules = {};
634            var validator = $.data(element.form, 'validator');
635            if (validator.settings.rules) {
636                rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
637            }
638            return rules;
639        },
640        normalizeRules: function(rules, element) {
641            $.each(rules, function(prop, val) {
642                if (val === false) {
643                    delete rules[prop];
644                    return;
645                }
646                if (val.param || val.depends) {
647                    var keepRule = true;
648                    switch (typeof val.depends) {
649                        case "string":
650                            keepRule = !!$(val.depends, element.form).length;
651                            break;
652                        case "function":
653                            keepRule = val.depends.call(element, element);
654                            break;
655                    }
656                    if (keepRule) {
657                        rules[prop] = val.param !== undefined ? val.param : true;
658                    } else {
659                        delete rules[prop];
660                    }
661                }
662            });
663            $.each(rules, function(rule, parameter) {
664                rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
665            });
666            $.each(['minlength', 'maxlength', 'min', 'max'], function() {
667                if (rules[this]) {
668                    rules[this] = Number(rules[this]);
669                }
670            });
671            $.each(['rangelength', 'range'], function() {
672                if (rules[this]) {
673                    rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
674                }
675            });
676            if ($.validator.autoCreateRanges) {
677                if (rules.min && rules.max) {
678                    rules.range = [rules.min, rules.max];
679                    delete rules.min;
680                    delete rules.max;
681                }
682                if (rules.minlength && rules.maxlength) {
683                    rules.rangelength = [rules.minlength, rules.maxlength];
684                    delete rules.minlength;
685                    delete rules.maxlength;
686                }
687            }
688            if (rules.messages) {
689                delete rules.messages;
690            }
691            return rules;
692        },
693        normalizeRule: function(data) {
694            if (typeof data == "string") {
695                var transformed = {};
696                $.each(data.split(/\s/), function() {
697                    transformed[this] = true;
698                });
699                data = transformed;
700            }
701            return data;
702        },
703        addMethod: function(name, method, message) {
704            $.validator.methods[name] = method;
705            $.validator.messages[name] = message != undefined ? message : $.validator.messages[name];
706            if (method.length < 3) {
707                $.validator.addClassRules(name, $.validator.normalizeRule(name));
708            }
709        },
710        methods: {
711            required: function(value, element, param) {
712                if (!this.depend(param, element)) return "dependency-mismatch";
713                switch (element.nodeName.toLowerCase()) {
714                    case 'select':
715                        var val = $(element).val();
716                        return val && val.length > 0;
717                    case 'input':
718                        if (this.checkable(element)) return this.getLength(value, element) > 0;
719                    default:
720                        return $.trim(value).length > 0;
721                }
722            },
723            remote: function(value, element, param) {
724                if (this.optional(element)) return "dependency-mismatch";
725                var previous = this.previousValue(element);
726                if (!this.settings.messages[element.name]) this.settings.messages[element.name] = {};
727                previous.originalMessage = this.settings.messages[element.name].remote;
728                this.settings.messages[element.name].remote = previous.message;
729                param = typeof param == "string" && {
730                    url: param
731                } || param;
732                if (previous.old !== value) {
733                    previous.old = value;
734                    var validator = this;
735                    this.startRequest(element);
736                    var data = {};
737                    data[element.name] = value;
738                    $.ajax($.extend(true, {
739                        url: param,
740                        mode: "abort",
741                        port: "validate" + element.name,
742                        dataType: "json",
743                        data: data,
744                        success: function(response) {
745                            validator.settings.messages[element.name].remote = previous.originalMessage;
746                            var valid = response === true;
747                            if (valid) {
748                                var submitted = validator.formSubmitted;
749                                validator.prepareElement(element);
750                                validator.formSubmitted = submitted;
751                                validator.successList.push(element);
752                                validator.showErrors();
753                            } else {
754                                var errors = {};
755                                var message = (previous.message = response || validator.defaultMessage(element, "remote"));
756                                errors[element.name] = $.isFunction(message) ? message(value) : message;
757                                validator.showErrors(errors);
758                            }
759                            previous.valid = valid;
760                            validator.stopRequest(element, valid);
761                        }
762                    }, param));
763                    return "pending";
764                } else if (this.pending[element.name]) {
765                    return "pending";
766                }
767                return previous.valid;
768            },
769            minlength: function(value, element, param) {
770                return this.optional(element) || this.getLength($.trim(value), element) >= param;
771            },
772            maxlength: function(value, element, param) {
773                return this.optional(element) || this.getLength($.trim(value), element) <= param;
774            },
775            rangelength: function(value, element, param) {
776                var length = this.getLength($.trim(value), element);
777                return this.optional(element) || (length >= param[0] && length <= param[1]);
778            },
779            min: function(value, element, param) {
780                return this.optional(element) || value >= param;
781            },
782            max: function(value, element, param) {
783                return this.optional(element) || value <= param;
784            },
785            range: function(value, element, param) {
786                return this.optional(element) || (value >= param[0] && value <= param[1]);
787            },
788            email: function(value, element) {
789                return this.optional(element) || /^((([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(value);
790            },
791            url: function(value, element) {
792                return this.optional(element) || /^(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(value);
793            },
794            date: function(value, element) {
795                return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
796            },
797            dateISO: function(value, element) {
798                return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
799            },
800            number: function(value, element) {
801                return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
802            },
803            digits: function(value, element) {
804                return this.optional(element) || /^\d+$/.test(value);
805            },
806            creditcard: function(value, element) {
807                if (this.optional(element)) return "dependency-mismatch";
808                if (/[^0-9-]+/.test(value)) return false;
809                var nCheck = 0,
810                    nDigit = 0,
811                    bEven = false;
812                value = value.replace(/\D/g, "");
813                for (var n = value.length - 1; n >= 0; n--) {
814                    var cDigit = value.charAt(n);
815                    var nDigit = parseInt(cDigit, 10);
816                    if (bEven) {
817                        if ((nDigit *= 2) > 9) nDigit -= 9;
818                    }
819                    nCheck += nDigit;
820                    bEven = !bEven;
821                }
822                return (nCheck % 10) == 0;
823            },
824            accept: function(value, element, param) {
825                param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
826                return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
827            },
828            equalTo: function(value, element, param) {
829                var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
830                    $(element).valid();
831                });
832                return value == target.val();
833            }
834        }
835    });
836    $.format = $.validator.format;
837})(jQuery);;
838(function($) {
839    var ajax = $.ajax;
840    var pendingRequests = {};
841    $.ajax = function(settings) {
842        settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
843        var port = settings.port;
844        if (settings.mode == "abort") {
845            if (pendingRequests[port]) {
846                pendingRequests[port].abort();
847            }
848            return (pendingRequests[port] = ajax.apply(this, arguments));
849        }
850        return ajax.apply(this, arguments);
851    };
852})(jQuery);;
853(function($) {
854    if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
855        $.each({
856            focus: 'focusin',
857            blur: 'focusout'
858        }, function(original, fix) {
859            $.event.special[fix] = {
860                setup: function() {
861                    this.addEventListener(original, handler, true);
862                },
863                teardown: function() {
864                    this.removeEventListener(original, handler, true);
865                },
866                handler: function(e) {
867                    arguments[0] = $.event.fix(e);
868                    arguments[0].type = fix;
869                    return $.event.handle.apply(this, arguments);
870                }
871            };
872
873            function handler(e) {
874                e = $.event.fix(e);
875                e.type = fix;
876                return $.event.handle.call(this, e);
877            }
878        });
879    };
880    $.extend($.fn, {
881        validateDelegate: function(delegate, type, handler) {
882            return this.bind(type, function(event) {
883                var target = $(event.target);
884                if (target.is(delegate)) {
885                    return handler.apply(target, arguments);
886                }
887            });
888        }
889    });
890})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.