web/ldt/media/js/jquery.validate.js
author ymh <ymh.work@gmail.com>
Tue, 08 Jun 2010 01:16:35 +0200
changeset 0 ecdfc63274bf
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * jQuery validation plug-in 1.5.5
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 *
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * http://docs.jquery.com/Plugins/Validation
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * Copyright (c) 2006 - 2008 Jörn Zaefferer
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 *
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * Dual licensed under the MIT and GPL licenses:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *   http://www.opensource.org/licenses/mit-license.php
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *   http://www.gnu.org/licenses/gpl.html
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 */
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
(function($) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
$.extend($.fn, {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
	// http://docs.jquery.com/Plugins/Validation/validate
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
	validate: function( options ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
		// if nothing is selected, return nothing; can't chain anyway
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		if (!this.length) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
			return;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		// check if a validator for this form was already created
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		var validator = $.data(this[0], 'validator');
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		if ( validator ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			return validator;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		validator = new $.validator( options, this[0] );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		$.data(this[0], 'validator', validator); 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		if ( validator.settings.onsubmit ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			// allow suppresing validation by adding a cancel class to the submit button
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
			this.find("input, button").filter(".cancel").click(function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
				validator.cancelSubmit = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			// when a submitHandler is used, capture the submitting button
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
			if (validator.settings.submitHandler) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
				this.find("input, button").filter(":submit").click(function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
					validator.submitButton = this;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
				});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			// validate the form on submit
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			this.submit( function( event ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
				if ( validator.settings.debug )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
					// prevent form submit to be able to see console output
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
					event.preventDefault();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
					
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
				function handle() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
					if ( validator.settings.submitHandler ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
						if (validator.submitButton) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
							// insert a hidden input as a replacement for the missing submit button
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
						}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
						validator.settings.submitHandler.call( validator, validator.currentForm );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
						if (validator.submitButton) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
							hidden.remove();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
						}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
						return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
					}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
					return true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
					
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				// prevent submit for invalid forms or custom submit handlers
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				if ( validator.cancelSubmit ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
					validator.cancelSubmit = false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
					return handle();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
				if ( validator.form() ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
					if ( validator.pendingRequest ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
						validator.formSubmitted = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
						return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
					}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
					return handle();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
				} else {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
					validator.focusInvalid();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
					return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
		return validator;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	// http://docs.jquery.com/Plugins/Validation/valid
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
	valid: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        if ( $(this[0]).is('form')) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
            return this.validate().form();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        } else {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
            var valid = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
            var validator = $(this[0].form).validate();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
            this.each(function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
				valid &= validator.element(this);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
            });
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
            return valid;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        }
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    },
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
	// attributes: space seperated list of attributes to retrieve and remove
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
	removeAttrs: function(attributes) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		var result = {},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
			$element = this;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		$.each(attributes.split(/\s/), function(index, value) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
			result[value] = $element.attr(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
			$element.removeAttr(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		return result;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
	// http://docs.jquery.com/Plugins/Validation/rules
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
	rules: function(command, argument) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		var element = this[0];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		if (command) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			var settings = $.data(element.form, 'validator').settings;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			var staticRules = settings.rules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			var existingRules = $.validator.staticRules(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			switch(command) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			case "add":
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
				$.extend(existingRules, $.validator.normalizeRule(argument));
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
				staticRules[element.name] = existingRules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
				if (argument.messages)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
				break;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
			case "remove":
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
				if (!argument) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
					delete staticRules[element.name];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
					return existingRules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
				var filtered = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
				$.each(argument.split(/\s/), function(index, method) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
					filtered[method] = existingRules[method];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
					delete existingRules[method];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
				});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
				return filtered;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		var data = $.validator.normalizeRules(
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
		$.extend(
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			{},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			$.validator.metadataRules(element),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			$.validator.classRules(element),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			$.validator.attributeRules(element),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			$.validator.staticRules(element)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		), element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
		// make sure required is at front
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		if (data.required) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			var param = data.required;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			delete data.required;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			data = $.extend({required: param}, data);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		return data;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
	}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
// Custom selectors
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
$.extend($.expr[":"], {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
	// http://docs.jquery.com/Plugins/Validation/blank
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
	blank: function(a) {return !$.trim(a.value);},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
	// http://docs.jquery.com/Plugins/Validation/filled
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	filled: function(a) {return !!$.trim(a.value);},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
	// http://docs.jquery.com/Plugins/Validation/unchecked
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
	unchecked: function(a) {return !a.checked;}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
// constructor for validator
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
$.validator = function( options, form ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
	this.settings = $.extend( {}, $.validator.defaults, options );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
	this.currentForm = form;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
	this.init();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
$.validator.format = function(source, params) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
	if ( arguments.length == 1 ) 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		return function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			var args = $.makeArray(arguments);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			args.unshift(source);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			return $.validator.format.apply( this, args );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	if ( arguments.length > 2 && params.constructor != Array  ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		params = $.makeArray(arguments).slice(1);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
	}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
	if ( params.constructor != Array ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
		params = [ params ];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
	}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
	$.each(params, function(i, n) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
	});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
	return source;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
$.extend($.validator, {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
	defaults: {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		messages: {},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		groups: {},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		rules: {},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
		errorClass: "error",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		validClass: "valid",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
		errorElement: "label",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		focusInvalid: true,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		errorContainer: $( [] ),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		errorLabelContainer: $( [] ),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
		onsubmit: true,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
		ignore: [],
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
		ignoreTitle: false,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
		onfocusin: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
			this.lastActive = element;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
				
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			// hide error label and remove error class on focus if enabled
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
				this.errorsFor(element).hide();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
		onfocusout: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
				this.element(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		onkeyup: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
			if ( element.name in this.submitted || element == this.lastElement ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
				this.element(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
		onclick: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
			if ( element.name in this.submitted )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
				this.element(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
		highlight: function( element, errorClass, validClass ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
			$(element).addClass(errorClass).removeClass(validClass);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
		unhighlight: function( element, errorClass, validClass ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
			$(element).removeClass(errorClass).addClass(validClass);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
	setDefaults: function(settings) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
		$.extend( $.validator.defaults, settings );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
	messages: {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
		required: "This field is required.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
		remote: "Please fix this field.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
		email: "Please enter a valid email address.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
		url: "Please enter a valid URL.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		date: "Please enter a valid date.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
		dateISO: "Please enter a valid date (ISO).",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		dateDE: "Bitte geben Sie ein gültiges Datum ein.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		number: "Please enter a valid number.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
		numberDE: "Bitte geben Sie eine Nummer ein.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		digits: "Please enter only digits",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		creditcard: "Please enter a valid credit card number.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
		equalTo: "Please enter the same value again.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		accept: "Please enter a value with a valid extension.",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		maxlength: $.validator.format("Please enter no more than {0} characters."),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		minlength: $.validator.format("Please enter at least {0} characters."),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		range: $.validator.format("Please enter a value between {0} and {1}."),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
		max: $.validator.format("Please enter a value less than or equal to {0}."),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		min: $.validator.format("Please enter a value greater than or equal to {0}.")
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
	autoCreateRanges: false,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
	prototype: {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		init: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			this.labelContainer = $(this.settings.errorLabelContainer);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
			this.submitted = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
			this.valueCache = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			this.pendingRequest = 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
			this.pending = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
			this.invalid = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
			this.reset();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			var groups = (this.groups = {});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
			$.each(this.settings.groups, function(key, value) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
				$.each(value.split(/\s/), function(index, name) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
					groups[name] = key;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
				});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
			var rules = this.settings.rules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
			$.each(rules, function(key, value) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
				rules[key] = $.validator.normalizeRule(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
			function delegate(event) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
				var validator = $.data(this[0].form, "validator");
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
			$(this.currentForm)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
				.delegate("click", ":radio, :checkbox", delegate);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
			if (this.settings.invalidHandler)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
		// http://docs.jquery.com/Plugins/Validation/Validator/form
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		form: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
			this.checkForm();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
			$.extend(this.submitted, this.errorMap);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
			this.invalid = $.extend({}, this.errorMap);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
			if (!this.valid())
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
				$(this.currentForm).triggerHandler("invalid-form", [this]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
			this.showErrors();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
			return this.valid();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
		checkForm: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
			this.prepareForm();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
				this.check( elements[i] );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
			return this.valid(); 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
		// http://docs.jquery.com/Plugins/Validation/Validator/element
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
		element: function( element ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
			element = this.clean( element );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
			this.lastElement = element;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
			this.prepareElement( element );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
			this.currentElements = $(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			var result = this.check( element );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
			if ( result ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
				delete this.invalid[element.name];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
			} else {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
				this.invalid[element.name] = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
			if ( !this.numberOfInvalids() ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
				// Hide error containers on last error
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
				this.toHide = this.toHide.add( this.containers );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
			this.showErrors();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
			return result;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
		showErrors: function(errors) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
			if(errors) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
				// add items to error list and map
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
				$.extend( this.errorMap, errors );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
				this.errorList = [];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
				for ( var name in errors ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
					this.errorList.push({
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
						message: errors[name],
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
						element: this.findByName(name)[0]
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
					});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
				// remove items from success list
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
				this.successList = $.grep( this.successList, function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
					return !(element.name in errors);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
				});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			this.settings.showErrors
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
				? this.settings.showErrors.call( this, this.errorMap, this.errorList )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
				: this.defaultShowErrors();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
		resetForm: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
			if ( $.fn.resetForm )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
				$( this.currentForm ).resetForm();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			this.submitted = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
			this.prepareForm();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			this.hideErrors();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			this.elements().removeClass( this.settings.errorClass );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
		numberOfInvalids: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			return this.objectLength(this.invalid);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
		objectLength: function( obj ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
			var count = 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
			for ( var i in obj )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
				count++;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
			return count;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
		hideErrors: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
			this.addWrapper( this.toHide ).hide();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
		valid: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
			return this.size() == 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
		size: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
			return this.errorList.length;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
		focusInvalid: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
			if( this.settings.focusInvalid ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
				try {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
				} catch(e) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
					// ignore IE throwing errors when focusing hidden elements
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
		findLastActive: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
			var lastActive = this.lastActive;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
			return lastActive && $.grep(this.errorList, function(n) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
				return n.element.name == lastActive.name;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
			}).length == 1 && lastActive;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
		elements: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
			var validator = this,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				rulesCache = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			// select all valid inputs inside the form (no submit or reset buttons)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
			return $([]).add(this.currentForm.elements)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
			.filter(":input")
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
			.not(":submit, :reset, :image, [disabled]")
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
			.not( this.settings.ignore )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
			.filter(function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
				// select only the first element for each name, and only those with rules specified
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
					return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
				
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
				rulesCache[this.name] = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
				return true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
		clean: function( selector ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
			return $( selector )[0];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
		errors: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
		reset: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			this.successList = [];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
			this.errorList = [];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
			this.errorMap = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
			this.toShow = $([]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
			this.toHide = $([]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
			this.formSubmitted = false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
			this.currentElements = $([]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
		prepareForm: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
			this.reset();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			this.toHide = this.errors().add( this.containers );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
		prepareElement: function( element ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
			this.reset();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
			this.toHide = this.errorsFor(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
		check: function( element ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
			element = this.clean( element );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
			// if radio/checkbox, validate first element in group instead
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
			if (this.checkable(element)) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
				element = this.findByName( element.name )[0];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			var rules = $(element).rules();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
			var dependencyMismatch = false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
			for( method in rules ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
				var rule = { method: method, parameters: rules[method] };
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
				try {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
					
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
					// if a method indicates that the field is optional and therefore valid,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
					// don't mark it as valid when there are no other rules
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
					if ( result == "dependency-mismatch" ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
						dependencyMismatch = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
						continue;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
					}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					dependencyMismatch = false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
					
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
					if ( result == "pending" ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
						this.toHide = this.toHide.not( this.errorsFor(element) );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
						return;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
					}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
					
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
					if( !result ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
						this.formatAndAdd( element, rule );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
						return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
					}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
				} catch(e) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
						 + ", check the '" + rule.method + "' method");
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
					throw e;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
			if (dependencyMismatch)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
				return;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
			if ( this.objectLength(rules) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
				this.successList.push(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
			return true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
		// return the custom message for the given element and validation method
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
		// specified in the element's "messages" metadata
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
		customMetaMessage: function(element, method) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
			if (!$.metadata)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
				return;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
			var meta = this.settings.meta
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
				? $(element).metadata()[this.settings.meta]
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
				: $(element).metadata();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
			return meta && meta.messages && meta.messages[method];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
		// return the custom message for the given element name and validation method
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
		customMessage: function( name, method ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			var m = this.settings.messages[name];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			return m && (m.constructor == String
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
				? m
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
				: m[method]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
		// return the first defined argument, allowing empty strings
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
		findDefined: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
			for(var i = 0; i < arguments.length; i++) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
				if (arguments[i] !== undefined)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
					return arguments[i];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
			return undefined;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
		defaultMessage: function( element, method) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
			return this.findDefined(
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
				this.customMessage( element.name, method ),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
				this.customMetaMessage( element, method ),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				// title is never undefined, so handle empty string as undefined
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
				!this.settings.ignoreTitle && element.title || undefined,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
				$.validator.messages[method],
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
				"<strong>Warning: No message defined for " + element.name + "</strong>"
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
			);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
		formatAndAdd: function( element, rule ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
			var message = this.defaultMessage( element, rule.method );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
			if ( typeof message == "function" ) 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
				message = message.call(this, rule.parameters, element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
			this.errorList.push({
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
				message: message,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
				element: element
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
			this.errorMap[element.name] = message;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
			this.submitted[element.name] = message;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
		addWrapper: function(toToggle) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
			if ( this.settings.wrapper )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
			return toToggle;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
		defaultShowErrors: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
			for ( var i = 0; this.errorList[i]; i++ ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
				var error = this.errorList[i];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
				this.showLabel( error.element, error.message );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
			if( this.errorList.length ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
				this.toShow = this.toShow.add( this.containers );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			if (this.settings.success) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
				for ( var i = 0; this.successList[i]; i++ ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
					this.showLabel( this.successList[i] );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
			if (this.settings.unhighlight) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			this.toHide = this.toHide.not( this.toShow );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
			this.hideErrors();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
			this.addWrapper( this.toShow ).show();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
		validElements: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
			return this.currentElements.not(this.invalidElements());
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
		invalidElements: function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
			return $(this.errorList).map(function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
				return this.element;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
		showLabel: function(element, message) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
			var label = this.errorsFor( element );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
			if ( label.length ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
				// refresh error/success class
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
				label.removeClass().addClass( this.settings.errorClass );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
				// check if we have a generated label, replace the message then
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
				label.attr("generated") && label.html(message);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
			} else {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
				// create label
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
				label = $("<" + this.settings.errorElement + "/>")
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
					.attr({"for":  this.idOrName(element), generated: true})
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
					.addClass(this.settings.errorClass)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
					.html(message || "");
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
				if ( this.settings.wrapper ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
					// make sure the element is visible, even in IE
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
					// actually showing the wrapped element is handled elsewhere
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
				if ( !this.labelContainer.append(label).length )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
					this.settings.errorPlacement
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
						? this.settings.errorPlacement(label, $(element) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
						: label.insertAfter(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
			if ( !message && this.settings.success ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
				label.text("");
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
				typeof this.settings.success == "string"
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
					? label.addClass( this.settings.success )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
					: this.settings.success( label );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
			this.toShow = this.toShow.add(label);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
		errorsFor: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
			return this.errors().filter("[for='" + this.idOrName(element) + "']");
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
		idOrName: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
		checkable: function( element ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
			return /radio|checkbox/i.test(element.type);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
		findByName: function( name ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
			// select by name and filter by form for performance over form.find("[name=...]")
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
			var form = this.currentForm;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
			return $(document.getElementsByName(name)).map(function(index, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
				return element.form == form && element.name == name && element  || null;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
		getLength: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
			switch( element.nodeName.toLowerCase() ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
			case 'select':
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
				return $("option:selected", element).length;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
			case 'input':
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
				if( this.checkable( element) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
					return this.findByName(element.name).filter(':checked').length;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
			return value.length;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
		depend: function(param, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
			return this.dependTypes[typeof param]
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
				? this.dependTypes[typeof param](param, element)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
				: true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
		dependTypes: {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
			"boolean": function(param, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
				return param;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
			},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
			"string": function(param, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
				return !!$(param, element.form).length;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
			},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
			"function": function(param, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
				return param(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
		optional: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
		startRequest: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
			if (!this.pending[element.name]) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
				this.pendingRequest++;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
				this.pending[element.name] = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
		stopRequest: function(element, valid) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
			this.pendingRequest--;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
			// sometimes synchronization fails, make sure pendingRequest is never < 0
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
			if (this.pendingRequest < 0)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
				this.pendingRequest = 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
			delete this.pending[element.name];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
				$(this.currentForm).submit();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
				$(this.currentForm).triggerHandler("invalid-form", [this]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		previousValue: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
			return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
				old: null,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
				valid: true,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
				message: this.defaultMessage( element, "remote" )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
	classRuleSettings: {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
		required: {required: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
		email: {email: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
		url: {url: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
		date: {date: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
		dateISO: {dateISO: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
		dateDE: {dateDE: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
		number: {number: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
		numberDE: {numberDE: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
		digits: {digits: true},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
		creditcard: {creditcard: true}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
	addClassRules: function(className, rules) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
		className.constructor == String ?
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
			this.classRuleSettings[className] = rules :
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
			$.extend(this.classRuleSettings, className);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
	classRules: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
		var rules = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
		var classes = $(element).attr('class');
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
		classes && $.each(classes.split(' '), function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
			if (this in $.validator.classRuleSettings) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
				$.extend(rules, $.validator.classRuleSettings[this]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
		});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
		return rules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
	attributeRules: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
		var rules = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
		var $element = $(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
		for (method in $.validator.methods) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
			var value = $element.attr(method);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
			if (value) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
				rules[method] = value;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
			delete rules.maxlength;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
		return rules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
	metadataRules: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
		if (!$.metadata) return {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
		var meta = $.data(element.form, 'validator').settings.meta;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
		return meta ?
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
			$(element).metadata()[meta] :
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
			$(element).metadata();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
	staticRules: function(element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
		var rules = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
		var validator = $.data(element.form, 'validator');
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
		if (validator.settings.rules) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
		return rules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
	normalizeRules: function(rules, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
		// handle dependency check
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
		$.each(rules, function(prop, val) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
			// ignore rule when param is explicitly false, eg. required:false
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
			if (val === false) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
				delete rules[prop];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
				return;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
			if (val.param || val.depends) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
				var keepRule = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
				switch (typeof val.depends) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
					case "string":
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
						keepRule = !!$(val.depends, element.form).length;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
						break;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
					case "function":
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
						keepRule = val.depends.call(element, element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
						break;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
				if (keepRule) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
					rules[prop] = val.param !== undefined ? val.param : true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
				} else {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
					delete rules[prop];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
		});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
		// evaluate parameters
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
		$.each(rules, function(rule, parameter) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
		});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
		// clean number parameters
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
		$.each(['minlength', 'maxlength', 'min', 'max'], function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
			if (rules[this]) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
				rules[this] = Number(rules[this]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
		});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
		$.each(['rangelength', 'range'], function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
			if (rules[this]) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
		});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
		if ($.validator.autoCreateRanges) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
			// auto-create ranges
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
			if (rules.min && rules.max) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
				rules.range = [rules.min, rules.max];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
				delete rules.min;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
				delete rules.max;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
			if (rules.minlength && rules.maxlength) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
				rules.rangelength = [rules.minlength, rules.maxlength];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
				delete rules.minlength;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
				delete rules.maxlength;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
		// To support custom messages in metadata ignore rule methods titled "messages"
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
		if (rules.messages) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
			delete rules.messages
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
		return rules;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
	normalizeRule: function(data) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
		if( typeof data == "string" ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
			var transformed = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
			$.each(data.split(/\s/), function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
				transformed[this] = true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
			data = transformed;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
		return data;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
	addMethod: function(name, method, message) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
		$.validator.methods[name] = method;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
		$.validator.messages[name] = message || $.validator.messages[name];
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
		if (method.length < 3) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
			$.validator.addClassRules(name, $.validator.normalizeRule(name));
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
	},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
	methods: {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
		// http://docs.jquery.com/Plugins/Validation/Methods/required
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
		required: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
			// check if dependency is met
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
			if ( !this.depend(param, element) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
				return "dependency-mismatch";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
			switch( element.nodeName.toLowerCase() ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
			case 'select':
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
				var options = $("option:selected", element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
				return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
			case 'input':
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
				if ( this.checkable(element) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
					return this.getLength(value, element) > 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
			default:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
				return $.trim(value).length > 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
		// http://docs.jquery.com/Plugins/Validation/Methods/remote
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
		remote: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
			if ( this.optional(element) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
				return "dependency-mismatch";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
			var previous = this.previousValue(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
			if (!this.settings.messages[element.name] )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
				this.settings.messages[element.name] = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
			this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
			param = typeof param == "string" && {url:param} || param; 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
			
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
			if ( previous.old !== value ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
				previous.old = value;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
				var validator = this;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
				this.startRequest(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
				var data = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
				data[element.name] = value;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
				$.ajax($.extend(true, {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
					url: param,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
					mode: "abort",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
					port: "validate" + element.name,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
					dataType: "json",
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
					data: data,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
					success: function(response) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
						var valid = response === true;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
						if ( valid ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
							var submitted = validator.formSubmitted;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
							validator.prepareElement(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
							validator.formSubmitted = submitted;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
							validator.successList.push(element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
							validator.showErrors();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
						} else {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
							var errors = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
							errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
							validator.showErrors(errors);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
						}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
						previous.valid = valid;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
						validator.stopRequest(element, valid);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
					}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
				}, param));
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
				return "pending";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
			} else if( this.pending[element.name] ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
				return "pending";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
			return previous.valid;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
		// http://docs.jquery.com/Plugins/Validation/Methods/minlength
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
		minlength: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
			return this.optional(element) || this.getLength($.trim(value), element) >= param;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
		maxlength: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
			return this.optional(element) || this.getLength($.trim(value), element) <= param;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
		rangelength: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
			var length = this.getLength($.trim(value), element);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
			return this.optional(element) || ( length >= param[0] && length <= param[1] );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
		// http://docs.jquery.com/Plugins/Validation/Methods/min
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
		min: function( value, element, param ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
			return this.optional(element) || value >= param;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
		// http://docs.jquery.com/Plugins/Validation/Methods/max
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
		max: function( value, element, param ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
			return this.optional(element) || value <= param;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
		// http://docs.jquery.com/Plugins/Validation/Methods/range
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
		range: function( value, element, param ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			return this.optional(element) || ( value >= param[0] && value <= param[1] );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
		// http://docs.jquery.com/Plugins/Validation/Methods/email
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
		email: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
			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);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
		// http://docs.jquery.com/Plugins/Validation/Methods/url
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
		url: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
			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);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
		// http://docs.jquery.com/Plugins/Validation/Methods/date
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
		date: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
		dateISO: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
		// http://docs.jquery.com/Plugins/Validation/Methods/dateDE
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
		dateDE: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
			return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
		// http://docs.jquery.com/Plugins/Validation/Methods/number
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
		number: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
		// http://docs.jquery.com/Plugins/Validation/Methods/numberDE
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
		numberDE: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
		// http://docs.jquery.com/Plugins/Validation/Methods/digits
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
		digits: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
			return this.optional(element) || /^\d+$/.test(value);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
		// based on http://en.wikipedia.org/wiki/Luhn
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
		creditcard: function(value, element) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
			if ( this.optional(element) )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
				return "dependency-mismatch";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
			// accept only digits and dashes
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
			if (/[^0-9-]+/.test(value))
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
				return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
			var nCheck = 0,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
				nDigit = 0,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
				bEven = false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
			value = value.replace(/\D/g, "");
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
			for (n = value.length - 1; n >= 0; n--) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
				var cDigit = value.charAt(n);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
				var nDigit = parseInt(cDigit, 10);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
				if (bEven) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
					if ((nDigit *= 2) > 9)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
						nDigit -= 9;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
				nCheck += nDigit;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
				bEven = !bEven;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
			return (nCheck % 10) == 0;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
		// http://docs.jquery.com/Plugins/Validation/Methods/accept
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
		accept: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
		equalTo: function(value, element, param) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
			return value == $(param).val();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
		
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
	}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
// deprecated, use $.validator.format instead
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
$.format = $.validator.format;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
})(jQuery);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
// ajax mode: abort
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
;(function($) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
	var ajax = $.ajax;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
	var pendingRequests = {};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
	$.ajax = function(settings) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
		// create settings for compatibility with ajaxSetup
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
		var port = settings.port;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
		if (settings.mode == "abort") {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
			if ( pendingRequests[port] ) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
				pendingRequests[port].abort();
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
			return (pendingRequests[port] = ajax.apply(this, arguments));
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
		return ajax.apply(this, arguments);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
	};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
})(jQuery);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
// provides cross-browser focusin and focusout events
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
// IE has native support, in other browsers, use event caputuring (neither bubbles)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
// provides triggerEvent(type: String, target: Element) to trigger delegated events
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
;(function($) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
	$.each({
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
		focus: 'focusin',
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
		blur: 'focusout'	
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
	}, function( original, fix ){
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
		$.event.special[fix] = {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
			setup:function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
				if ( $.browser.msie ) return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
				this.addEventListener( original, $.event.special[fix].handler, true );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
			},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
			teardown:function() {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
				if ( $.browser.msie ) return false;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
				this.removeEventListener( original,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
				$.event.special[fix].handler, true );
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
			},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
			handler: function(e) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
				arguments[0] = $.event.fix(e);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
				arguments[0].type = fix;
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
				return $.event.handle.apply(this, arguments);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
			}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
		};
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
	});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
	$.extend($.fn, {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
		delegate: function(type, delegate, handler) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
			return this.bind(type, function(event) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
				var target = $(event.target);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
				if (target.is(delegate)) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
					return handler.apply(target, arguments);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
				}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
			});
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
		},
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
		triggerEvent: function(type, target) {
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
		}
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
	})
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
})(jQuery);