Blame view

bower_components/jquery/dist/jquery.js 242 KB
74249687   Luigi Serra   Cross browser con...
1
  /*!
c5169e0e   Renato De Donato   a new hope
2
   * jQuery JavaScript Library v2.1.4
74249687   Luigi Serra   Cross browser con...
3
4
5
6
7
   * http://jquery.com/
   *
   * Includes Sizzle.js
   * http://sizzlejs.com/
   *
c5169e0e   Renato De Donato   a new hope
8
   * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
74249687   Luigi Serra   Cross browser con...
9
10
11
   * Released under the MIT license
   * http://jquery.org/license
   *
c5169e0e   Renato De Donato   a new hope
12
   * Date: 2015-04-28T16:01Z
74249687   Luigi Serra   Cross browser con...
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
   */
  
  (function( global, factory ) {
  
  	if ( typeof module === "object" && typeof module.exports === "object" ) {
  		// For CommonJS and CommonJS-like environments where a proper `window`
  		// is present, execute the factory and get jQuery.
  		// For environments that do not have a `window` with a `document`
  		// (such as Node.js), expose a factory as module.exports.
  		// This accentuates the need for the creation of a real `window`.
  		// e.g. var jQuery = require("jquery")(window);
  		// See ticket #14549 for more info.
  		module.exports = global.document ?
  			factory( global, true ) :
  			function( w ) {
  				if ( !w.document ) {
  					throw new Error( "jQuery requires a window with a document" );
  				}
  				return factory( w );
  			};
  	} else {
  		factory( global );
  	}
  
  // Pass this if window is not defined yet
  }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
  
  // Support: Firefox 18+
  // Can't be in strict mode, several libs including ASP.NET trace
  // the stack via arguments.caller.callee and Firefox dies if
  // you try to trace through "use strict" call chains. (#13335)
c5169e0e   Renato De Donato   a new hope
44
  //
74249687   Luigi Serra   Cross browser con...
45
  
c5169e0e   Renato De Donato   a new hope
46
  var arr = [];
a1a3bc73   Luigi Serra   graphs updates
47
  
74249687   Luigi Serra   Cross browser con...
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  var slice = arr.slice;
  
  var concat = arr.concat;
  
  var push = arr.push;
  
  var indexOf = arr.indexOf;
  
  var class2type = {};
  
  var toString = class2type.toString;
  
  var hasOwn = class2type.hasOwnProperty;
  
  var support = {};
  
  
  
  var
c5169e0e   Renato De Donato   a new hope
67
68
69
70
  	// Use the correct document accordingly with window argument (sandbox)
  	document = window.document,
  
  	version = "2.1.4",
74249687   Luigi Serra   Cross browser con...
71
72
73
  
  	// Define a local copy of jQuery
  	jQuery = function( selector, context ) {
74249687   Luigi Serra   Cross browser con...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  		// The jQuery object is actually just the init constructor 'enhanced'
  		// Need init if jQuery is called (just allow error to be thrown if not included)
  		return new jQuery.fn.init( selector, context );
  	},
  
  	// Support: Android<4.1
  	// Make sure we trim BOM and NBSP
  	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
  
  	// Matches dashed string for camelizing
  	rmsPrefix = /^-ms-/,
  	rdashAlpha = /-([\da-z])/gi,
  
  	// Used by jQuery.camelCase as callback to replace()
  	fcamelCase = function( all, letter ) {
  		return letter.toUpperCase();
  	};
  
  jQuery.fn = jQuery.prototype = {
74249687   Luigi Serra   Cross browser con...
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
  	// The current version of jQuery being used
  	jquery: version,
  
  	constructor: jQuery,
  
  	// Start with an empty selector
  	selector: "",
  
  	// The default length of a jQuery object is 0
  	length: 0,
  
  	toArray: function() {
  		return slice.call( this );
  	},
  
  	// Get the Nth element in the matched element set OR
  	// Get the whole matched element set as a clean array
  	get: function( num ) {
  		return num != null ?
  
  			// Return just the one element from the set
  			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
  
  			// Return all the elements in a clean array
  			slice.call( this );
  	},
  
  	// Take an array of elements and push it onto the stack
  	// (returning the new matched element set)
  	pushStack: function( elems ) {
  
  		// Build a new jQuery matched element set
  		var ret = jQuery.merge( this.constructor(), elems );
  
  		// Add the old object onto the stack (as a reference)
  		ret.prevObject = this;
  		ret.context = this.context;
  
  		// Return the newly-formed element set
  		return ret;
  	},
  
  	// Execute a callback for every element in the matched set.
c5169e0e   Renato De Donato   a new hope
136
137
138
139
  	// (You can seed the arguments with an array of args, but this is
  	// only used internally.)
  	each: function( callback, args ) {
  		return jQuery.each( this, callback, args );
74249687   Luigi Serra   Cross browser con...
140
141
142
  	},
  
  	map: function( callback ) {
c5169e0e   Renato De Donato   a new hope
143
  		return this.pushStack( jQuery.map(this, function( elem, i ) {
74249687   Luigi Serra   Cross browser con...
144
  			return callback.call( elem, i, elem );
c5169e0e   Renato De Donato   a new hope
145
  		}));
74249687   Luigi Serra   Cross browser con...
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
  	},
  
  	slice: function() {
  		return this.pushStack( slice.apply( this, arguments ) );
  	},
  
  	first: function() {
  		return this.eq( 0 );
  	},
  
  	last: function() {
  		return this.eq( -1 );
  	},
  
  	eq: function( i ) {
  		var len = this.length,
  			j = +i + ( i < 0 ? len : 0 );
c5169e0e   Renato De Donato   a new hope
163
  		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
74249687   Luigi Serra   Cross browser con...
164
165
166
  	},
  
  	end: function() {
c5169e0e   Renato De Donato   a new hope
167
  		return this.prevObject || this.constructor(null);
74249687   Luigi Serra   Cross browser con...
168
169
170
171
172
173
174
175
176
177
178
  	},
  
  	// For internal use only.
  	// Behaves like an Array's method, not like a jQuery method.
  	push: push,
  	sort: arr.sort,
  	splice: arr.splice
  };
  
  jQuery.extend = jQuery.fn.extend = function() {
  	var options, name, src, copy, copyIsArray, clone,
c5169e0e   Renato De Donato   a new hope
179
  		target = arguments[0] || {},
74249687   Luigi Serra   Cross browser con...
180
181
182
183
184
185
186
187
188
189
190
191
192
193
  		i = 1,
  		length = arguments.length,
  		deep = false;
  
  	// Handle a deep copy situation
  	if ( typeof target === "boolean" ) {
  		deep = target;
  
  		// Skip the boolean and the target
  		target = arguments[ i ] || {};
  		i++;
  	}
  
  	// Handle case when target is a string or something (possible in deep copy)
c5169e0e   Renato De Donato   a new hope
194
  	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
74249687   Luigi Serra   Cross browser con...
195
196
197
198
199
200
201
202
203
204
  		target = {};
  	}
  
  	// Extend jQuery itself if only one argument is passed
  	if ( i === length ) {
  		target = this;
  		i--;
  	}
  
  	for ( ; i < length; i++ ) {
74249687   Luigi Serra   Cross browser con...
205
  		// Only deal with non-null/undefined values
c5169e0e   Renato De Donato   a new hope
206
  		if ( (options = arguments[ i ]) != null ) {
74249687   Luigi Serra   Cross browser con...
207
208
209
210
211
212
213
214
215
216
217
  			// Extend the base object
  			for ( name in options ) {
  				src = target[ name ];
  				copy = options[ name ];
  
  				// Prevent never-ending loop
  				if ( target === copy ) {
  					continue;
  				}
  
  				// Recurse if we're merging plain objects or arrays
c5169e0e   Renato De Donato   a new hope
218
  				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
74249687   Luigi Serra   Cross browser con...
219
220
  					if ( copyIsArray ) {
  						copyIsArray = false;
c5169e0e   Renato De Donato   a new hope
221
  						clone = src && jQuery.isArray(src) ? src : [];
74249687   Luigi Serra   Cross browser con...
222
223
  
  					} else {
c5169e0e   Renato De Donato   a new hope
224
  						clone = src && jQuery.isPlainObject(src) ? src : {};
74249687   Luigi Serra   Cross browser con...
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
  					}
  
  					// Never move original objects, clone them
  					target[ name ] = jQuery.extend( deep, clone, copy );
  
  				// Don't bring in undefined values
  				} else if ( copy !== undefined ) {
  					target[ name ] = copy;
  				}
  			}
  		}
  	}
  
  	// Return the modified object
  	return target;
  };
  
c5169e0e   Renato De Donato   a new hope
242
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
243
244
245
246
247
248
249
250
251
252
253
254
255
  	// Unique for each copy of jQuery on the page
  	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
  
  	// Assume jQuery is ready without the ready module
  	isReady: true,
  
  	error: function( msg ) {
  		throw new Error( msg );
  	},
  
  	noop: function() {},
  
  	isFunction: function( obj ) {
c5169e0e   Renato De Donato   a new hope
256
  		return jQuery.type(obj) === "function";
74249687   Luigi Serra   Cross browser con...
257
258
259
260
261
262
263
264
265
  	},
  
  	isArray: Array.isArray,
  
  	isWindow: function( obj ) {
  		return obj != null && obj === obj.window;
  	},
  
  	isNumeric: function( obj ) {
74249687   Luigi Serra   Cross browser con...
266
267
268
269
  		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
  		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
  		// subtraction forces infinities to NaN
  		// adding 1 corrects loss of precision from parseFloat (#15100)
c5169e0e   Renato De Donato   a new hope
270
  		return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
74249687   Luigi Serra   Cross browser con...
271
272
273
  	},
  
  	isPlainObject: function( obj ) {
74249687   Luigi Serra   Cross browser con...
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
  		// Not plain objects:
  		// - Any object or value whose internal [[Class]] property is not "[object Object]"
  		// - DOM nodes
  		// - window
  		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
  			return false;
  		}
  
  		if ( obj.constructor &&
  				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
  			return false;
  		}
  
  		// If the function hasn't returned already, we're confident that
  		// |obj| is a plain object, created by {} or constructed with new Object
  		return true;
  	},
  
  	isEmptyObject: function( obj ) {
  		var name;
  		for ( name in obj ) {
  			return false;
  		}
  		return true;
  	},
  
  	type: function( obj ) {
  		if ( obj == null ) {
  			return obj + "";
  		}
74249687   Luigi Serra   Cross browser con...
304
305
  		// Support: Android<4.0, iOS<6 (functionish RegExp)
  		return typeof obj === "object" || typeof obj === "function" ?
c5169e0e   Renato De Donato   a new hope
306
  			class2type[ toString.call(obj) ] || "object" :
74249687   Luigi Serra   Cross browser con...
307
308
309
310
311
312
313
314
315
316
317
  			typeof obj;
  	},
  
  	// Evaluates a script in a global context
  	globalEval: function( code ) {
  		var script,
  			indirect = eval;
  
  		code = jQuery.trim( code );
  
  		if ( code ) {
74249687   Luigi Serra   Cross browser con...
318
319
320
  			// If the code includes a valid, prologue position
  			// strict mode pragma, execute code by injecting a
  			// script tag into the document.
c5169e0e   Renato De Donato   a new hope
321
322
  			if ( code.indexOf("use strict") === 1 ) {
  				script = document.createElement("script");
74249687   Luigi Serra   Cross browser con...
323
324
325
  				script.text = code;
  				document.head.appendChild( script ).parentNode.removeChild( script );
  			} else {
c5169e0e   Renato De Donato   a new hope
326
327
  			// Otherwise, avoid the DOM node creation, insertion
  			// and removal by using an indirect global eval
74249687   Luigi Serra   Cross browser con...
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
  				indirect( code );
  			}
  		}
  	},
  
  	// Convert dashed to camelCase; used by the css and data modules
  	// Support: IE9-11+
  	// Microsoft forgot to hump their vendor prefix (#9572)
  	camelCase: function( string ) {
  		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
  	},
  
  	nodeName: function( elem, name ) {
  		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
  	},
  
c5169e0e   Renato De Donato   a new hope
344
345
346
347
348
349
  	// args is for internal usage only
  	each: function( obj, callback, args ) {
  		var value,
  			i = 0,
  			length = obj.length,
  			isArray = isArraylike( obj );
74249687   Luigi Serra   Cross browser con...
350
  
c5169e0e   Renato De Donato   a new hope
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
  		if ( args ) {
  			if ( isArray ) {
  				for ( ; i < length; i++ ) {
  					value = callback.apply( obj[ i ], args );
  
  					if ( value === false ) {
  						break;
  					}
  				}
  			} else {
  				for ( i in obj ) {
  					value = callback.apply( obj[ i ], args );
  
  					if ( value === false ) {
  						break;
  					}
74249687   Luigi Serra   Cross browser con...
367
368
  				}
  			}
c5169e0e   Renato De Donato   a new hope
369
370
  
  		// A special, fast, case for the most common use of each
74249687   Luigi Serra   Cross browser con...
371
  		} else {
c5169e0e   Renato De Donato   a new hope
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
  			if ( isArray ) {
  				for ( ; i < length; i++ ) {
  					value = callback.call( obj[ i ], i, obj[ i ] );
  
  					if ( value === false ) {
  						break;
  					}
  				}
  			} else {
  				for ( i in obj ) {
  					value = callback.call( obj[ i ], i, obj[ i ] );
  
  					if ( value === false ) {
  						break;
  					}
74249687   Luigi Serra   Cross browser con...
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
  				}
  			}
  		}
  
  		return obj;
  	},
  
  	// Support: Android<4.1
  	trim: function( text ) {
  		return text == null ?
  			"" :
  			( text + "" ).replace( rtrim, "" );
  	},
  
  	// results is for internal usage only
  	makeArray: function( arr, results ) {
  		var ret = results || [];
  
  		if ( arr != null ) {
c5169e0e   Renato De Donato   a new hope
406
  			if ( isArraylike( Object(arr) ) ) {
74249687   Luigi Serra   Cross browser con...
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
  				jQuery.merge( ret,
  					typeof arr === "string" ?
  					[ arr ] : arr
  				);
  			} else {
  				push.call( ret, arr );
  			}
  		}
  
  		return ret;
  	},
  
  	inArray: function( elem, arr, i ) {
  		return arr == null ? -1 : indexOf.call( arr, elem, i );
  	},
  
  	merge: function( first, second ) {
  		var len = +second.length,
  			j = 0,
  			i = first.length;
  
  		for ( ; j < len; j++ ) {
  			first[ i++ ] = second[ j ];
  		}
  
  		first.length = i;
  
  		return first;
  	},
  
  	grep: function( elems, callback, invert ) {
  		var callbackInverse,
  			matches = [],
  			i = 0,
  			length = elems.length,
  			callbackExpect = !invert;
  
  		// Go through the array, only saving the items
  		// that pass the validator function
  		for ( ; i < length; i++ ) {
  			callbackInverse = !callback( elems[ i ], i );
  			if ( callbackInverse !== callbackExpect ) {
  				matches.push( elems[ i ] );
  			}
  		}
  
  		return matches;
  	},
  
  	// arg is for internal usage only
  	map: function( elems, callback, arg ) {
c5169e0e   Renato De Donato   a new hope
458
  		var value,
74249687   Luigi Serra   Cross browser con...
459
  			i = 0,
c5169e0e   Renato De Donato   a new hope
460
461
  			length = elems.length,
  			isArray = isArraylike( elems ),
74249687   Luigi Serra   Cross browser con...
462
463
464
  			ret = [];
  
  		// Go through the array, translating each of the items to their new values
c5169e0e   Renato De Donato   a new hope
465
  		if ( isArray ) {
74249687   Luigi Serra   Cross browser con...
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
  			for ( ; i < length; i++ ) {
  				value = callback( elems[ i ], i, arg );
  
  				if ( value != null ) {
  					ret.push( value );
  				}
  			}
  
  		// Go through every key on the object,
  		} else {
  			for ( i in elems ) {
  				value = callback( elems[ i ], i, arg );
  
  				if ( value != null ) {
  					ret.push( value );
  				}
  			}
  		}
  
  		// Flatten any nested arrays
  		return concat.apply( [], ret );
  	},
  
  	// A global GUID counter for objects
  	guid: 1,
  
  	// Bind a function to a context, optionally partially applying any
  	// arguments.
  	proxy: function( fn, context ) {
  		var tmp, args, proxy;
  
  		if ( typeof context === "string" ) {
  			tmp = fn[ context ];
  			context = fn;
  			fn = tmp;
  		}
  
  		// Quick check to determine if target is callable, in the spec
  		// this throws a TypeError, but we will just return undefined.
  		if ( !jQuery.isFunction( fn ) ) {
  			return undefined;
  		}
  
  		// Simulated bind
  		args = slice.call( arguments, 2 );
  		proxy = function() {
  			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
  		};
  
  		// Set the guid of unique handler to the same of original handler, so it can be removed
  		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
  
  		return proxy;
  	},
  
  	now: Date.now,
  
  	// jQuery.support is not used in Core but other projects attach their
  	// properties to it so it needs to exist.
  	support: support
c5169e0e   Renato De Donato   a new hope
526
  });
74249687   Luigi Serra   Cross browser con...
527
528
  
  // Populate the class2type map
c5169e0e   Renato De Donato   a new hope
529
  jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
74249687   Luigi Serra   Cross browser con...
530
  	class2type[ "[object " + name + "]" ] = name.toLowerCase();
c5169e0e   Renato De Donato   a new hope
531
  });
74249687   Luigi Serra   Cross browser con...
532
  
c5169e0e   Renato De Donato   a new hope
533
  function isArraylike( obj ) {
74249687   Luigi Serra   Cross browser con...
534
535
536
537
538
  
  	// Support: iOS 8.2 (not reproducible in simulator)
  	// `in` check used to prevent JIT error (gh-2145)
  	// hasOwn isn't used here due to false negatives
  	// regarding Nodelist length in IE
c5169e0e   Renato De Donato   a new hope
539
  	var length = "length" in obj && obj.length,
74249687   Luigi Serra   Cross browser con...
540
541
542
543
544
545
  		type = jQuery.type( obj );
  
  	if ( type === "function" || jQuery.isWindow( obj ) ) {
  		return false;
  	}
  
c5169e0e   Renato De Donato   a new hope
546
547
548
549
  	if ( obj.nodeType === 1 && length ) {
  		return true;
  	}
  
74249687   Luigi Serra   Cross browser con...
550
551
552
553
554
  	return type === "array" || length === 0 ||
  		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
  }
  var Sizzle =
  /*!
c5169e0e   Renato De Donato   a new hope
555
   * Sizzle CSS Selector Engine v2.2.0-pre
74249687   Luigi Serra   Cross browser con...
556
557
   * http://sizzlejs.com/
   *
c5169e0e   Renato De Donato   a new hope
558
   * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
74249687   Luigi Serra   Cross browser con...
559
560
561
   * Released under the MIT license
   * http://jquery.org/license
   *
c5169e0e   Renato De Donato   a new hope
562
   * Date: 2014-12-16
74249687   Luigi Serra   Cross browser con...
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
   */
  (function( window ) {
  
  var i,
  	support,
  	Expr,
  	getText,
  	isXML,
  	tokenize,
  	compile,
  	select,
  	outermostContext,
  	sortInput,
  	hasDuplicate,
  
  	// Local document vars
  	setDocument,
  	document,
  	docElem,
  	documentIsHTML,
  	rbuggyQSA,
  	rbuggyMatches,
  	matches,
  	contains,
  
  	// Instance-specific data
  	expando = "sizzle" + 1 * new Date(),
  	preferredDoc = window.document,
  	dirruns = 0,
  	done = 0,
  	classCache = createCache(),
  	tokenCache = createCache(),
  	compilerCache = createCache(),
  	sortOrder = function( a, b ) {
  		if ( a === b ) {
  			hasDuplicate = true;
  		}
  		return 0;
  	},
  
  	// General-purpose constants
  	MAX_NEGATIVE = 1 << 31,
  
  	// Instance methods
  	hasOwn = ({}).hasOwnProperty,
  	arr = [],
  	pop = arr.pop,
  	push_native = arr.push,
  	push = arr.push,
  	slice = arr.slice,
  	// Use a stripped-down indexOf as it's faster than native
  	// http://jsperf.com/thor-indexof-vs-for/5
  	indexOf = function( list, elem ) {
  		var i = 0,
  			len = list.length;
  		for ( ; i < len; i++ ) {
  			if ( list[i] === elem ) {
  				return i;
  			}
  		}
  		return -1;
  	},
  
  	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
  
  	// Regular expressions
  
c5169e0e   Renato De Donato   a new hope
630
  	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
74249687   Luigi Serra   Cross browser con...
631
  	whitespace = "[\\x20\\t\\r\\n\\f]",
c5169e0e   Renato De Donato   a new hope
632
633
  	// http://www.w3.org/TR/css3-syntax/#characters
  	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
74249687   Luigi Serra   Cross browser con...
634
  
c5169e0e   Renato De Donato   a new hope
635
636
637
638
  	// Loosely modeled on CSS identifier characters
  	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
  	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
  	identifier = characterEncoding.replace( "w", "w#" ),
74249687   Luigi Serra   Cross browser con...
639
640
  
  	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
c5169e0e   Renato De Donato   a new hope
641
  	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
74249687   Luigi Serra   Cross browser con...
642
643
644
645
646
647
  		// Operator (capture 2)
  		"*([*^$|!~]?=)" + whitespace +
  		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
  		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
  		"*\\]",
  
c5169e0e   Renato De Donato   a new hope
648
  	pseudos = ":(" + characterEncoding + ")(?:\\((" +
74249687   Luigi Serra   Cross browser con...
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
  		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
  		// 1. quoted (capture 3; capture 4 or capture 5)
  		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
  		// 2. simple (capture 6)
  		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
  		// 3. anything else (capture 2)
  		".*" +
  		")\\)|)",
  
  	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
  	rwhitespace = new RegExp( whitespace + "+", "g" ),
  	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
  
  	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
  	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
  
  	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
  
  	rpseudo = new RegExp( pseudos ),
  	ridentifier = new RegExp( "^" + identifier + "$" ),
  
  	matchExpr = {
c5169e0e   Renato De Donato   a new hope
671
672
673
  		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
  		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
  		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
74249687   Luigi Serra   Cross browser con...
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
  		"ATTR": new RegExp( "^" + attributes ),
  		"PSEUDO": new RegExp( "^" + pseudos ),
  		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
  			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
  			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
  		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
  		// For use in libraries implementing .is()
  		// We use this for POS matching in `select`
  		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
  			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
  	},
  
  	rinputs = /^(?:input|select|textarea|button)$/i,
  	rheader = /^h\d$/i,
  
  	rnative = /^[^{]+\{\s*\[native \w/,
  
  	// Easily-parseable/retrievable ID or TAG or CLASS selectors
  	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
  
  	rsibling = /[+~]/,
  	rescape = /'|\\/g,
  
  	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
  	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
  	funescape = function( _, escaped, escapedWhitespace ) {
  		var high = "0x" + escaped - 0x10000;
  		// NaN means non-codepoint
  		// Support: Firefox<24
  		// Workaround erroneous numeric interpretation of +"0x"
  		return high !== high || escapedWhitespace ?
  			escaped :
  			high < 0 ?
  				// BMP codepoint
  				String.fromCharCode( high + 0x10000 ) :
  				// Supplemental Plane codepoint (surrogate pair)
  				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
  	},
  
  	// Used for iframes
  	// See setDocument()
  	// Removing the function wrapper causes a "Permission Denied"
  	// error in IE
  	unloadHandler = function() {
  		setDocument();
  	};
  
  // Optimize for push.apply( _, NodeList )
  try {
  	push.apply(
  		(arr = slice.call( preferredDoc.childNodes )),
  		preferredDoc.childNodes
  	);
  	// Support: Android<4.0
  	// Detect silently failing push.apply
  	arr[ preferredDoc.childNodes.length ].nodeType;
  } catch ( e ) {
  	push = { apply: arr.length ?
  
  		// Leverage slice if possible
  		function( target, els ) {
  			push_native.apply( target, slice.call(els) );
  		} :
  
  		// Support: IE<9
  		// Otherwise append directly
  		function( target, els ) {
  			var j = target.length,
  				i = 0;
  			// Can't trust NodeList.length
  			while ( (target[j++] = els[i++]) ) {}
  			target.length = j - 1;
  		}
  	};
  }
  
  function Sizzle( selector, context, results, seed ) {
c5169e0e   Renato De Donato   a new hope
751
752
753
  	var match, elem, m, nodeType,
  		// QSA vars
  		i, groups, old, nid, newContext, newSelector;
74249687   Luigi Serra   Cross browser con...
754
  
c5169e0e   Renato De Donato   a new hope
755
756
757
  	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
  		setDocument( context );
  	}
74249687   Luigi Serra   Cross browser con...
758
  
c5169e0e   Renato De Donato   a new hope
759
  	context = context || document;
74249687   Luigi Serra   Cross browser con...
760
  	results = results || [];
c5169e0e   Renato De Donato   a new hope
761
  	nodeType = context.nodeType;
74249687   Luigi Serra   Cross browser con...
762
  
74249687   Luigi Serra   Cross browser con...
763
764
765
766
767
768
  	if ( typeof selector !== "string" || !selector ||
  		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
  
  		return results;
  	}
  
c5169e0e   Renato De Donato   a new hope
769
  	if ( !seed && documentIsHTML ) {
a1a3bc73   Luigi Serra   graphs updates
770
  
c5169e0e   Renato De Donato   a new hope
771
772
773
774
775
776
777
778
779
780
781
782
  		// Try to shortcut find operations when possible (e.g., not under DocumentFragment)
  		if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
  			// Speed-up: Sizzle("#ID")
  			if ( (m = match[1]) ) {
  				if ( nodeType === 9 ) {
  					elem = context.getElementById( m );
  					// Check parentNode to catch when Blackberry 4.6 returns
  					// nodes that are no longer in the document (jQuery #6963)
  					if ( elem && elem.parentNode ) {
  						// Handle the case where IE, Opera, and Webkit return items
  						// by name instead of ID
  						if ( elem.id === m ) {
a1a3bc73   Luigi Serra   graphs updates
783
784
785
  							results.push( elem );
  							return results;
  						}
c5169e0e   Renato De Donato   a new hope
786
787
788
789
790
791
792
793
794
  					} else {
  						return results;
  					}
  				} else {
  					// Context is not a document
  					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
  						contains( context, elem ) && elem.id === m ) {
  						results.push( elem );
  						return results;
74249687   Luigi Serra   Cross browser con...
795
  					}
a1a3bc73   Luigi Serra   graphs updates
796
  				}
74249687   Luigi Serra   Cross browser con...
797
  
c5169e0e   Renato De Donato   a new hope
798
799
800
801
  			// Speed-up: Sizzle("TAG")
  			} else if ( match[2] ) {
  				push.apply( results, context.getElementsByTagName( selector ) );
  				return results;
74249687   Luigi Serra   Cross browser con...
802
  
c5169e0e   Renato De Donato   a new hope
803
804
805
806
807
808
  			// Speed-up: Sizzle(".CLASS")
  			} else if ( (m = match[3]) && support.getElementsByClassName ) {
  				push.apply( results, context.getElementsByClassName( m ) );
  				return results;
  			}
  		}
74249687   Luigi Serra   Cross browser con...
809
  
c5169e0e   Renato De Donato   a new hope
810
811
812
813
814
  		// QSA path
  		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
  			nid = old = expando;
  			newContext = context;
  			newSelector = nodeType !== 1 && selector;
74249687   Luigi Serra   Cross browser con...
815
  
c5169e0e   Renato De Donato   a new hope
816
817
818
819
820
821
  			// qSA works strangely on Element-rooted queries
  			// We can work around this by specifying an extra ID on the root
  			// and working up from there (Thanks to Andrew Dupont for the technique)
  			// IE 8 doesn't work on object elements
  			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
  				groups = tokenize( selector );
a1a3bc73   Luigi Serra   graphs updates
822
  
c5169e0e   Renato De Donato   a new hope
823
824
825
826
827
828
  				if ( (old = context.getAttribute("id")) ) {
  					nid = old.replace( rescape, "\\$&" );
  				} else {
  					context.setAttribute( "id", nid );
  				}
  				nid = "[id='" + nid + "'] ";
a1a3bc73   Luigi Serra   graphs updates
829
  
c5169e0e   Renato De Donato   a new hope
830
831
832
  				i = groups.length;
  				while ( i-- ) {
  					groups[i] = nid + toSelector( groups[i] );
74249687   Luigi Serra   Cross browser con...
833
  				}
c5169e0e   Renato De Donato   a new hope
834
835
836
  				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
  				newSelector = groups.join(",");
  			}
74249687   Luigi Serra   Cross browser con...
837
  
c5169e0e   Renato De Donato   a new hope
838
839
840
841
842
843
844
845
846
847
  			if ( newSelector ) {
  				try {
  					push.apply( results,
  						newContext.querySelectorAll( newSelector )
  					);
  					return results;
  				} catch(qsaError) {
  				} finally {
  					if ( !old ) {
  						context.removeAttribute("id");
74249687   Luigi Serra   Cross browser con...
848
849
850
851
852
853
854
855
856
857
858
859
  					}
  				}
  			}
  		}
  	}
  
  	// All others
  	return select( selector.replace( rtrim, "$1" ), context, results, seed );
  }
  
  /**
   * Create key-value caches of limited size
c5169e0e   Renato De Donato   a new hope
860
   * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
74249687   Luigi Serra   Cross browser con...
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
   *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
   *	deleting the oldest entry
   */
  function createCache() {
  	var keys = [];
  
  	function cache( key, value ) {
  		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
  		if ( keys.push( key + " " ) > Expr.cacheLength ) {
  			// Only keep the most recent entries
  			delete cache[ keys.shift() ];
  		}
  		return (cache[ key + " " ] = value);
  	}
  	return cache;
  }
  
  /**
   * Mark a function for special use by Sizzle
   * @param {Function} fn The function to mark
   */
  function markFunction( fn ) {
  	fn[ expando ] = true;
  	return fn;
  }
  
  /**
   * Support testing using an element
   * @param {Function} fn Passed the created div and expects a boolean result
   */
  function assert( fn ) {
  	var div = document.createElement("div");
  
  	try {
  		return !!fn( div );
  	} catch (e) {
  		return false;
  	} finally {
  		// Remove from its parent by default
  		if ( div.parentNode ) {
  			div.parentNode.removeChild( div );
  		}
  		// release memory in IE
  		div = null;
  	}
  }
  
  /**
   * Adds the same handler for all of the specified attrs
   * @param {String} attrs Pipe-separated list of attributes
   * @param {Function} handler The method that will be applied
   */
  function addHandle( attrs, handler ) {
  	var arr = attrs.split("|"),
c5169e0e   Renato De Donato   a new hope
915
  		i = attrs.length;
74249687   Luigi Serra   Cross browser con...
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
  
  	while ( i-- ) {
  		Expr.attrHandle[ arr[i] ] = handler;
  	}
  }
  
  /**
   * Checks document order of two siblings
   * @param {Element} a
   * @param {Element} b
   * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
   */
  function siblingCheck( a, b ) {
  	var cur = b && a,
  		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
  			( ~b.sourceIndex || MAX_NEGATIVE ) -
  			( ~a.sourceIndex || MAX_NEGATIVE );
  
  	// Use IE sourceIndex if available on both nodes
  	if ( diff ) {
  		return diff;
  	}
  
  	// Check if b follows a
  	if ( cur ) {
  		while ( (cur = cur.nextSibling) ) {
  			if ( cur === b ) {
  				return -1;
  			}
  		}
  	}
  
  	return a ? 1 : -1;
  }
  
  /**
   * Returns a function to use in pseudos for input types
   * @param {String} type
   */
  function createInputPseudo( type ) {
  	return function( elem ) {
  		var name = elem.nodeName.toLowerCase();
  		return name === "input" && elem.type === type;
  	};
  }
  
  /**
   * Returns a function to use in pseudos for buttons
   * @param {String} type
   */
  function createButtonPseudo( type ) {
  	return function( elem ) {
  		var name = elem.nodeName.toLowerCase();
  		return (name === "input" || name === "button") && elem.type === type;
  	};
  }
  
  /**
   * Returns a function to use in pseudos for positionals
   * @param {Function} fn
   */
  function createPositionalPseudo( fn ) {
  	return markFunction(function( argument ) {
  		argument = +argument;
  		return markFunction(function( seed, matches ) {
  			var j,
  				matchIndexes = fn( [], seed.length, argument ),
  				i = matchIndexes.length;
  
  			// Match elements found at the specified indexes
  			while ( i-- ) {
  				if ( seed[ (j = matchIndexes[i]) ] ) {
  					seed[j] = !(matches[j] = seed[j]);
  				}
  			}
  		});
  	});
  }
  
  /**
   * Checks a node for validity as a Sizzle context
   * @param {Element|Object=} context
   * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
   */
  function testContext( context ) {
  	return context && typeof context.getElementsByTagName !== "undefined" && context;
  }
  
  // Expose support vars for convenience
  support = Sizzle.support = {};
  
  /**
   * Detects XML nodes
   * @param {Element|Object} elem An element or a document
   * @returns {Boolean} True iff elem is a non-HTML XML node
   */
  isXML = Sizzle.isXML = function( elem ) {
  	// documentElement is verified for cases where it doesn't yet exist
  	// (such as loading iframes in IE - #4833)
  	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
  	return documentElement ? documentElement.nodeName !== "HTML" : false;
  };
  
  /**
   * Sets document-related variables once based on the current document
   * @param {Element|Object} [doc] An element or document object to use to set the document
   * @returns {Object} Returns the current document
   */
  setDocument = Sizzle.setDocument = function( node ) {
  	var hasCompare, parent,
  		doc = node ? node.ownerDocument || node : preferredDoc;
  
c5169e0e   Renato De Donato   a new hope
1028
  	// If no document and documentElement is available, return
74249687   Luigi Serra   Cross browser con...
1029
1030
1031
1032
  	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
  		return document;
  	}
  
c5169e0e   Renato De Donato   a new hope
1033
  	// Set our document
74249687   Luigi Serra   Cross browser con...
1034
  	document = doc;
c5169e0e   Renato De Donato   a new hope
1035
1036
1037
1038
1039
1040
1041
1042
1043
  	docElem = doc.documentElement;
  	parent = doc.defaultView;
  
  	// Support: IE>8
  	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
  	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
  	// IE6-8 do not support the defaultView property so parent will be undefined
  	if ( parent && parent !== parent.top ) {
  		// IE11 does not have attachEvent, so all must suffer
74249687   Luigi Serra   Cross browser con...
1044
1045
  		if ( parent.addEventListener ) {
  			parent.addEventListener( "unload", unloadHandler, false );
74249687   Luigi Serra   Cross browser con...
1046
1047
1048
1049
1050
  		} else if ( parent.attachEvent ) {
  			parent.attachEvent( "onunload", unloadHandler );
  		}
  	}
  
c5169e0e   Renato De Donato   a new hope
1051
1052
1053
1054
  	/* Support tests
  	---------------------------------------------------------------------- */
  	documentIsHTML = !isXML( doc );
  
74249687   Luigi Serra   Cross browser con...
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
  	/* Attributes
  	---------------------------------------------------------------------- */
  
  	// Support: IE<8
  	// Verify that getAttribute really returns attributes and not properties
  	// (excepting IE8 booleans)
  	support.attributes = assert(function( div ) {
  		div.className = "i";
  		return !div.getAttribute("className");
  	});
  
  	/* getElement(s)By*
  	---------------------------------------------------------------------- */
  
  	// Check if getElementsByTagName("*") returns only elements
  	support.getElementsByTagName = assert(function( div ) {
c5169e0e   Renato De Donato   a new hope
1071
  		div.appendChild( doc.createComment("") );
74249687   Luigi Serra   Cross browser con...
1072
1073
1074
1075
  		return !div.getElementsByTagName("*").length;
  	});
  
  	// Support: IE<9
c5169e0e   Renato De Donato   a new hope
1076
  	support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
74249687   Luigi Serra   Cross browser con...
1077
1078
1079
1080
1081
1082
1083
  
  	// Support: IE<10
  	// Check if getElementById returns elements by name
  	// The broken getElementById methods don't pick up programatically-set names,
  	// so use a roundabout getElementsByName test
  	support.getById = assert(function( div ) {
  		docElem.appendChild( div ).id = expando;
c5169e0e   Renato De Donato   a new hope
1084
  		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
74249687   Luigi Serra   Cross browser con...
1085
1086
1087
1088
1089
1090
1091
  	});
  
  	// ID find and filter
  	if ( support.getById ) {
  		Expr.find["ID"] = function( id, context ) {
  			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
  				var m = context.getElementById( id );
c5169e0e   Renato De Donato   a new hope
1092
1093
1094
  				// Check parentNode to catch when Blackberry 4.6 returns
  				// nodes that are no longer in the document #6963
  				return m && m.parentNode ? [ m ] : [];
74249687   Luigi Serra   Cross browser con...
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
  			}
  		};
  		Expr.filter["ID"] = function( id ) {
  			var attrId = id.replace( runescape, funescape );
  			return function( elem ) {
  				return elem.getAttribute("id") === attrId;
  			};
  		};
  	} else {
  		// Support: IE6/7
  		// getElementById is not reliable as a find shortcut
  		delete Expr.find["ID"];
  
  		Expr.filter["ID"] =  function( id ) {
  			var attrId = id.replace( runescape, funescape );
  			return function( elem ) {
c5169e0e   Renato De Donato   a new hope
1111
  				var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
74249687   Luigi Serra   Cross browser con...
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
  				return node && node.value === attrId;
  			};
  		};
  	}
  
  	// Tag
  	Expr.find["TAG"] = support.getElementsByTagName ?
  		function( tag, context ) {
  			if ( typeof context.getElementsByTagName !== "undefined" ) {
  				return context.getElementsByTagName( tag );
  
  			// DocumentFragment nodes don't have gEBTN
  			} else if ( support.qsa ) {
  				return context.querySelectorAll( tag );
  			}
  		} :
  
  		function( tag, context ) {
  			var elem,
  				tmp = [],
  				i = 0,
  				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
  				results = context.getElementsByTagName( tag );
  
  			// Filter out possible comments
  			if ( tag === "*" ) {
  				while ( (elem = results[i++]) ) {
  					if ( elem.nodeType === 1 ) {
  						tmp.push( elem );
  					}
  				}
  
  				return tmp;
  			}
  			return results;
  		};
  
  	// Class
  	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
c5169e0e   Renato De Donato   a new hope
1151
  		if ( documentIsHTML ) {
74249687   Luigi Serra   Cross browser con...
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
  			return context.getElementsByClassName( className );
  		}
  	};
  
  	/* QSA/matchesSelector
  	---------------------------------------------------------------------- */
  
  	// QSA and matchesSelector support
  
  	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
  	rbuggyMatches = [];
  
  	// qSa(:focus) reports false when true (Chrome 21)
  	// We allow this because of a bug in IE8/9 that throws an error
  	// whenever `document.activeElement` is accessed on an iframe
  	// So, we allow :focus to pass through QSA all the time to avoid the IE error
  	// See http://bugs.jquery.com/ticket/13378
  	rbuggyQSA = [];
  
c5169e0e   Renato De Donato   a new hope
1171
  	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
74249687   Luigi Serra   Cross browser con...
1172
1173
1174
1175
1176
1177
1178
1179
1180
  		// Build QSA regex
  		// Regex strategy adopted from Diego Perini
  		assert(function( div ) {
  			// Select is set to empty string on purpose
  			// This is to test IE's treatment of not explicitly
  			// setting a boolean content attribute,
  			// since its presence should be enough
  			// http://bugs.jquery.com/ticket/12359
  			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
c5169e0e   Renato De Donato   a new hope
1181
  				"<select id='" + expando + "-\f]' msallowcapture=''>" +
74249687   Luigi Serra   Cross browser con...
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
  				"<option selected=''></option></select>";
  
  			// Support: IE8, Opera 11-12.16
  			// Nothing should be selected when empty strings follow ^= or $= or *=
  			// The test attribute must be unknown in Opera but "safe" for WinRT
  			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
  			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
  				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
  			}
  
  			// Support: IE8
  			// Boolean attributes and "value" are not treated correctly
  			if ( !div.querySelectorAll("[selected]").length ) {
  				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
  			}
  
c5169e0e   Renato De Donato   a new hope
1198
  			// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
74249687   Luigi Serra   Cross browser con...
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
  			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
  				rbuggyQSA.push("~=");
  			}
  
  			// Webkit/Opera - :checked should return selected option elements
  			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
  			// IE8 throws error here and will not see later tests
  			if ( !div.querySelectorAll(":checked").length ) {
  				rbuggyQSA.push(":checked");
  			}
  
  			// Support: Safari 8+, iOS 8+
  			// https://bugs.webkit.org/show_bug.cgi?id=136851
  			// In-page `selector#id sibing-combinator selector` fails
  			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
  				rbuggyQSA.push(".#.+[+~]");
  			}
  		});
  
  		assert(function( div ) {
  			// Support: Windows 8 Native Apps
  			// The type and name attributes are restricted during .innerHTML assignment
c5169e0e   Renato De Donato   a new hope
1221
  			var input = doc.createElement("input");
74249687   Luigi Serra   Cross browser con...
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
  			input.setAttribute( "type", "hidden" );
  			div.appendChild( input ).setAttribute( "name", "D" );
  
  			// Support: IE8
  			// Enforce case-sensitivity of name attribute
  			if ( div.querySelectorAll("[name=d]").length ) {
  				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
  			}
  
  			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
  			// IE8 throws error here and will not see later tests
  			if ( !div.querySelectorAll(":enabled").length ) {
  				rbuggyQSA.push( ":enabled", ":disabled" );
  			}
  
  			// Opera 10-11 does not throw on post-comma invalid pseudos
  			div.querySelectorAll("*,:x");
  			rbuggyQSA.push(",.*:");
  		});
  	}
  
  	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
  		docElem.webkitMatchesSelector ||
  		docElem.mozMatchesSelector ||
  		docElem.oMatchesSelector ||
  		docElem.msMatchesSelector) )) ) {
  
  		assert(function( div ) {
  			// Check to see if it's possible to do matchesSelector
  			// on a disconnected node (IE 9)
  			support.disconnectedMatch = matches.call( div, "div" );
  
  			// This should fail with an exception
  			// Gecko does not error, returns false instead
  			matches.call( div, "[s!='']:x" );
  			rbuggyMatches.push( "!=", pseudos );
  		});
  	}
  
  	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
  	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
  
  	/* Contains
  	---------------------------------------------------------------------- */
  	hasCompare = rnative.test( docElem.compareDocumentPosition );
  
  	// Element contains another
c5169e0e   Renato De Donato   a new hope
1269
  	// Purposefully does not implement inclusive descendent
74249687   Luigi Serra   Cross browser con...
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
  	// As in, an element does not contain itself
  	contains = hasCompare || rnative.test( docElem.contains ) ?
  		function( a, b ) {
  			var adown = a.nodeType === 9 ? a.documentElement : a,
  				bup = b && b.parentNode;
  			return a === bup || !!( bup && bup.nodeType === 1 && (
  				adown.contains ?
  					adown.contains( bup ) :
  					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
  			));
  		} :
  		function( a, b ) {
  			if ( b ) {
  				while ( (b = b.parentNode) ) {
  					if ( b === a ) {
  						return true;
  					}
  				}
  			}
  			return false;
  		};
  
  	/* Sorting
  	---------------------------------------------------------------------- */
  
  	// Document order sorting
  	sortOrder = hasCompare ?
  	function( a, b ) {
  
  		// Flag for duplicate removal
  		if ( a === b ) {
  			hasDuplicate = true;
  			return 0;
  		}
  
  		// Sort on method existence if only one input has compareDocumentPosition
  		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
  		if ( compare ) {
  			return compare;
  		}
  
  		// Calculate position if both inputs belong to the same document
  		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
  			a.compareDocumentPosition( b ) :
  
  			// Otherwise we know they are disconnected
  			1;
  
  		// Disconnected nodes
  		if ( compare & 1 ||
  			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
  
  			// Choose the first element that is related to our preferred document
c5169e0e   Renato De Donato   a new hope
1323
  			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
74249687   Luigi Serra   Cross browser con...
1324
1325
  				return -1;
  			}
c5169e0e   Renato De Donato   a new hope
1326
  			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
74249687   Luigi Serra   Cross browser con...
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
  				return 1;
  			}
  
  			// Maintain original order
  			return sortInput ?
  				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
  				0;
  		}
  
  		return compare & 4 ? -1 : 1;
  	} :
  	function( a, b ) {
  		// Exit early if the nodes are identical
  		if ( a === b ) {
  			hasDuplicate = true;
  			return 0;
  		}
  
  		var cur,
  			i = 0,
  			aup = a.parentNode,
  			bup = b.parentNode,
  			ap = [ a ],
  			bp = [ b ];
  
  		// Parentless nodes are either documents or disconnected
  		if ( !aup || !bup ) {
c5169e0e   Renato De Donato   a new hope
1354
1355
  			return a === doc ? -1 :
  				b === doc ? 1 :
74249687   Luigi Serra   Cross browser con...
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
  				aup ? -1 :
  				bup ? 1 :
  				sortInput ?
  				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
  				0;
  
  		// If the nodes are siblings, we can do a quick check
  		} else if ( aup === bup ) {
  			return siblingCheck( a, b );
  		}
  
  		// Otherwise we need full lists of their ancestors for comparison
  		cur = a;
  		while ( (cur = cur.parentNode) ) {
  			ap.unshift( cur );
  		}
  		cur = b;
  		while ( (cur = cur.parentNode) ) {
  			bp.unshift( cur );
  		}
  
  		// Walk down the tree looking for a discrepancy
  		while ( ap[i] === bp[i] ) {
  			i++;
  		}
  
  		return i ?
  			// Do a sibling check if the nodes have a common ancestor
  			siblingCheck( ap[i], bp[i] ) :
  
  			// Otherwise nodes in our document sort first
  			ap[i] === preferredDoc ? -1 :
  			bp[i] === preferredDoc ? 1 :
  			0;
  	};
  
c5169e0e   Renato De Donato   a new hope
1392
  	return doc;
74249687   Luigi Serra   Cross browser con...
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
  };
  
  Sizzle.matches = function( expr, elements ) {
  	return Sizzle( expr, null, null, elements );
  };
  
  Sizzle.matchesSelector = function( elem, expr ) {
  	// Set document vars if needed
  	if ( ( elem.ownerDocument || elem ) !== document ) {
  		setDocument( elem );
  	}
  
  	// Make sure that attribute selectors are quoted
  	expr = expr.replace( rattributeQuotes, "='$1']" );
  
  	if ( support.matchesSelector && documentIsHTML &&
74249687   Luigi Serra   Cross browser con...
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
  		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
  		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
  
  		try {
  			var ret = matches.call( elem, expr );
  
  			// IE 9's matchesSelector returns false on disconnected nodes
  			if ( ret || support.disconnectedMatch ||
  					// As well, disconnected nodes are said to be in a document
  					// fragment in IE 9
  					elem.document && elem.document.nodeType !== 11 ) {
  				return ret;
  			}
  		} catch (e) {}
  	}
  
  	return Sizzle( expr, document, null, [ elem ] ).length > 0;
  };
  
  Sizzle.contains = function( context, elem ) {
  	// Set document vars if needed
  	if ( ( context.ownerDocument || context ) !== document ) {
  		setDocument( context );
  	}
  	return contains( context, elem );
  };
  
  Sizzle.attr = function( elem, name ) {
  	// Set document vars if needed
  	if ( ( elem.ownerDocument || elem ) !== document ) {
  		setDocument( elem );
  	}
  
  	var fn = Expr.attrHandle[ name.toLowerCase() ],
  		// Don't get fooled by Object.prototype properties (jQuery #13807)
  		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
  			fn( elem, name, !documentIsHTML ) :
  			undefined;
  
  	return val !== undefined ?
  		val :
  		support.attributes || !documentIsHTML ?
  			elem.getAttribute( name ) :
  			(val = elem.getAttributeNode(name)) && val.specified ?
  				val.value :
  				null;
  };
  
  Sizzle.error = function( msg ) {
  	throw new Error( "Syntax error, unrecognized expression: " + msg );
  };
  
  /**
   * Document sorting and removing duplicates
   * @param {ArrayLike} results
   */
  Sizzle.uniqueSort = function( results ) {
  	var elem,
  		duplicates = [],
  		j = 0,
  		i = 0;
  
  	// Unless we *know* we can detect duplicates, assume their presence
  	hasDuplicate = !support.detectDuplicates;
  	sortInput = !support.sortStable && results.slice( 0 );
  	results.sort( sortOrder );
  
  	if ( hasDuplicate ) {
  		while ( (elem = results[i++]) ) {
  			if ( elem === results[ i ] ) {
  				j = duplicates.push( i );
  			}
  		}
  		while ( j-- ) {
  			results.splice( duplicates[ j ], 1 );
  		}
  	}
  
  	// Clear input after sorting to release objects
  	// See https://github.com/jquery/sizzle/pull/225
  	sortInput = null;
  
  	return results;
  };
  
  /**
   * Utility function for retrieving the text value of an array of DOM nodes
   * @param {Array|Element} elem
   */
  getText = Sizzle.getText = function( elem ) {
  	var node,
  		ret = "",
  		i = 0,
  		nodeType = elem.nodeType;
  
  	if ( !nodeType ) {
  		// If no nodeType, this is expected to be an array
  		while ( (node = elem[i++]) ) {
  			// Do not traverse comment nodes
  			ret += getText( node );
  		}
  	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
  		// Use textContent for elements
  		// innerText usage removed for consistency of new lines (jQuery #11153)
  		if ( typeof elem.textContent === "string" ) {
  			return elem.textContent;
  		} else {
  			// Traverse its children
  			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
  				ret += getText( elem );
  			}
  		}
  	} else if ( nodeType === 3 || nodeType === 4 ) {
  		return elem.nodeValue;
  	}
  	// Do not include comment or processing instruction nodes
  
  	return ret;
  };
  
  Expr = Sizzle.selectors = {
  
  	// Can be adjusted by the user
  	cacheLength: 50,
  
  	createPseudo: markFunction,
  
  	match: matchExpr,
  
  	attrHandle: {},
  
  	find: {},
  
  	relative: {
  		">": { dir: "parentNode", first: true },
  		" ": { dir: "parentNode" },
  		"+": { dir: "previousSibling", first: true },
  		"~": { dir: "previousSibling" }
  	},
  
  	preFilter: {
  		"ATTR": function( match ) {
  			match[1] = match[1].replace( runescape, funescape );
  
  			// Move the given value to match[3] whether quoted or unquoted
  			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
  
  			if ( match[2] === "~=" ) {
  				match[3] = " " + match[3] + " ";
  			}
  
  			return match.slice( 0, 4 );
  		},
  
  		"CHILD": function( match ) {
  			/* matches from matchExpr["CHILD"]
  				1 type (only|nth|...)
  				2 what (child|of-type)
  				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
  				4 xn-component of xn+y argument ([+-]?\d*n|)
  				5 sign of xn-component
  				6 x of xn-component
  				7 sign of y-component
  				8 y of y-component
  			*/
  			match[1] = match[1].toLowerCase();
  
  			if ( match[1].slice( 0, 3 ) === "nth" ) {
  				// nth-* requires argument
  				if ( !match[3] ) {
  					Sizzle.error( match[0] );
  				}
  
  				// numeric x and y parameters for Expr.filter.CHILD
  				// remember that false/true cast respectively to 0/1
  				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
  				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
  
  			// other types prohibit arguments
  			} else if ( match[3] ) {
  				Sizzle.error( match[0] );
  			}
  
  			return match;
  		},
  
  		"PSEUDO": function( match ) {
  			var excess,
  				unquoted = !match[6] && match[2];
  
  			if ( matchExpr["CHILD"].test( match[0] ) ) {
  				return null;
  			}
  
  			// Accept quoted arguments as-is
  			if ( match[3] ) {
  				match[2] = match[4] || match[5] || "";
  
  			// Strip excess characters from unquoted arguments
  			} else if ( unquoted && rpseudo.test( unquoted ) &&
  				// Get excess from tokenize (recursively)
  				(excess = tokenize( unquoted, true )) &&
  				// advance to the next closing parenthesis
  				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
  
  				// excess is a negative index
  				match[0] = match[0].slice( 0, excess );
  				match[2] = unquoted.slice( 0, excess );
  			}
  
  			// Return only captures needed by the pseudo filter method (type and argument)
  			return match.slice( 0, 3 );
  		}
  	},
  
  	filter: {
  
  		"TAG": function( nodeNameSelector ) {
  			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
  			return nodeNameSelector === "*" ?
  				function() { return true; } :
  				function( elem ) {
  					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
  				};
  		},
  
  		"CLASS": function( className ) {
  			var pattern = classCache[ className + " " ];
  
  			return pattern ||
  				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
  				classCache( className, function( elem ) {
  					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
  				});
  		},
  
  		"ATTR": function( name, operator, check ) {
  			return function( elem ) {
  				var result = Sizzle.attr( elem, name );
  
  				if ( result == null ) {
  					return operator === "!=";
  				}
  				if ( !operator ) {
  					return true;
  				}
  
  				result += "";
  
  				return operator === "=" ? result === check :
  					operator === "!=" ? result !== check :
  					operator === "^=" ? check && result.indexOf( check ) === 0 :
  					operator === "*=" ? check && result.indexOf( check ) > -1 :
  					operator === "$=" ? check && result.slice( -check.length ) === check :
  					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
  					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
  					false;
  			};
  		},
  
  		"CHILD": function( type, what, argument, first, last ) {
  			var simple = type.slice( 0, 3 ) !== "nth",
  				forward = type.slice( -4 ) !== "last",
  				ofType = what === "of-type";
  
  			return first === 1 && last === 0 ?
  
  				// Shortcut for :nth-*(n)
  				function( elem ) {
  					return !!elem.parentNode;
  				} :
  
  				function( elem, context, xml ) {
c5169e0e   Renato De Donato   a new hope
1682
  					var cache, outerCache, node, diff, nodeIndex, start,
74249687   Luigi Serra   Cross browser con...
1683
1684
1685
  						dir = simple !== forward ? "nextSibling" : "previousSibling",
  						parent = elem.parentNode,
  						name = ofType && elem.nodeName.toLowerCase(),
c5169e0e   Renato De Donato   a new hope
1686
  						useCache = !xml && !ofType;
74249687   Luigi Serra   Cross browser con...
1687
1688
1689
1690
1691
1692
1693
1694
  
  					if ( parent ) {
  
  						// :(first|last|only)-(child|of-type)
  						if ( simple ) {
  							while ( dir ) {
  								node = elem;
  								while ( (node = node[ dir ]) ) {
c5169e0e   Renato De Donato   a new hope
1695
  									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
74249687   Luigi Serra   Cross browser con...
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
  										return false;
  									}
  								}
  								// Reverse direction for :only-* (if we haven't yet done so)
  								start = dir = type === "only" && !start && "nextSibling";
  							}
  							return true;
  						}
  
  						start = [ forward ? parent.firstChild : parent.lastChild ];
  
  						// non-xml :nth-child(...) stores cache data on `parent`
  						if ( forward && useCache ) {
74249687   Luigi Serra   Cross browser con...
1709
  							// Seek `elem` from a previously-cached index
c5169e0e   Renato De Donato   a new hope
1710
1711
1712
1713
  							outerCache = parent[ expando ] || (parent[ expando ] = {});
  							cache = outerCache[ type ] || [];
  							nodeIndex = cache[0] === dirruns && cache[1];
  							diff = cache[0] === dirruns && cache[2];
74249687   Luigi Serra   Cross browser con...
1714
1715
1716
1717
1718
1719
1720
1721
1722
  							node = nodeIndex && parent.childNodes[ nodeIndex ];
  
  							while ( (node = ++nodeIndex && node && node[ dir ] ||
  
  								// Fallback to seeking `elem` from the start
  								(diff = nodeIndex = 0) || start.pop()) ) {
  
  								// When found, cache indexes on `parent` and break
  								if ( node.nodeType === 1 && ++diff && node === elem ) {
c5169e0e   Renato De Donato   a new hope
1723
  									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
74249687   Luigi Serra   Cross browser con...
1724
1725
1726
1727
  									break;
  								}
  							}
  
c5169e0e   Renato De Donato   a new hope
1728
1729
1730
  						// Use previously-cached element index if available
  						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
  							diff = cache[1];
74249687   Luigi Serra   Cross browser con...
1731
  
c5169e0e   Renato De Donato   a new hope
1732
1733
1734
1735
1736
  						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
  						} else {
  							// Use the same loop as above to seek `elem` from the start
  							while ( (node = ++nodeIndex && node && node[ dir ] ||
  								(diff = nodeIndex = 0) || start.pop()) ) {
a1a3bc73   Luigi Serra   graphs updates
1737
  
c5169e0e   Renato De Donato   a new hope
1738
1739
1740
1741
1742
  								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
  									// Cache the index of each encountered element
  									if ( useCache ) {
  										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
  									}
74249687   Luigi Serra   Cross browser con...
1743
  
c5169e0e   Renato De Donato   a new hope
1744
1745
  									if ( node === elem ) {
  										break;
74249687   Luigi Serra   Cross browser con...
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
  									}
  								}
  							}
  						}
  
  						// Incorporate the offset, then check against cycle size
  						diff -= last;
  						return diff === first || ( diff % first === 0 && diff / first >= 0 );
  					}
  				};
  		},
  
  		"PSEUDO": function( pseudo, argument ) {
  			// pseudo-class names are case-insensitive
  			// http://www.w3.org/TR/selectors/#pseudo-classes
  			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
  			// Remember that setFilters inherits from pseudos
  			var args,
  				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
  					Sizzle.error( "unsupported pseudo: " + pseudo );
  
  			// The user may use createPseudo to indicate that
  			// arguments are needed to create the filter function
  			// just as Sizzle does
  			if ( fn[ expando ] ) {
  				return fn( argument );
  			}
  
  			// But maintain support for old signatures
  			if ( fn.length > 1 ) {
  				args = [ pseudo, pseudo, "", argument ];
  				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
  					markFunction(function( seed, matches ) {
  						var idx,
  							matched = fn( seed, argument ),
  							i = matched.length;
  						while ( i-- ) {
  							idx = indexOf( seed, matched[i] );
  							seed[ idx ] = !( matches[ idx ] = matched[i] );
  						}
  					}) :
  					function( elem ) {
  						return fn( elem, 0, args );
  					};
  			}
  
  			return fn;
  		}
  	},
  
  	pseudos: {
  		// Potentially complex pseudos
  		"not": markFunction(function( selector ) {
  			// Trim the selector passed to compile
  			// to avoid treating leading and trailing
  			// spaces as combinators
  			var input = [],
  				results = [],
  				matcher = compile( selector.replace( rtrim, "$1" ) );
  
  			return matcher[ expando ] ?
  				markFunction(function( seed, matches, context, xml ) {
  					var elem,
  						unmatched = matcher( seed, null, xml, [] ),
  						i = seed.length;
  
  					// Match elements unmatched by `matcher`
  					while ( i-- ) {
  						if ( (elem = unmatched[i]) ) {
  							seed[i] = !(matches[i] = elem);
  						}
  					}
  				}) :
  				function( elem, context, xml ) {
  					input[0] = elem;
  					matcher( input, null, xml, results );
  					// Don't keep the element (issue #299)
  					input[0] = null;
  					return !results.pop();
  				};
  		}),
  
  		"has": markFunction(function( selector ) {
  			return function( elem ) {
  				return Sizzle( selector, elem ).length > 0;
  			};
  		}),
  
  		"contains": markFunction(function( text ) {
  			text = text.replace( runescape, funescape );
  			return function( elem ) {
  				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
  			};
  		}),
  
  		// "Whether an element is represented by a :lang() selector
  		// is based solely on the element's language value
  		// being equal to the identifier C,
  		// or beginning with the identifier C immediately followed by "-".
  		// The matching of C against the element's language value is performed case-insensitively.
  		// The identifier C does not have to be a valid language name."
  		// http://www.w3.org/TR/selectors/#lang-pseudo
  		"lang": markFunction( function( lang ) {
  			// lang value must be a valid identifier
  			if ( !ridentifier.test(lang || "") ) {
  				Sizzle.error( "unsupported lang: " + lang );
  			}
  			lang = lang.replace( runescape, funescape ).toLowerCase();
  			return function( elem ) {
  				var elemLang;
  				do {
  					if ( (elemLang = documentIsHTML ?
  						elem.lang :
  						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
  
  						elemLang = elemLang.toLowerCase();
  						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
  					}
  				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
  				return false;
  			};
  		}),
  
  		// Miscellaneous
  		"target": function( elem ) {
  			var hash = window.location && window.location.hash;
  			return hash && hash.slice( 1 ) === elem.id;
  		},
  
  		"root": function( elem ) {
  			return elem === docElem;
  		},
  
  		"focus": function( elem ) {
  			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
  		},
  
  		// Boolean properties
  		"enabled": function( elem ) {
  			return elem.disabled === false;
  		},
  
  		"disabled": function( elem ) {
  			return elem.disabled === true;
  		},
  
  		"checked": function( elem ) {
  			// In CSS3, :checked should return both checked and selected elements
  			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
  			var nodeName = elem.nodeName.toLowerCase();
  			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
  		},
  
  		"selected": function( elem ) {
  			// Accessing this property makes selected-by-default
  			// options in Safari work properly
  			if ( elem.parentNode ) {
  				elem.parentNode.selectedIndex;
  			}
  
  			return elem.selected === true;
  		},
  
  		// Contents
  		"empty": function( elem ) {
  			// http://www.w3.org/TR/selectors/#empty-pseudo
  			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
  			//   but not by others (comment: 8; processing instruction: 7; etc.)
  			// nodeType < 6 works because attributes (2) do not appear as children
  			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
  				if ( elem.nodeType < 6 ) {
  					return false;
  				}
  			}
  			return true;
  		},
  
  		"parent": function( elem ) {
  			return !Expr.pseudos["empty"]( elem );
  		},
  
  		// Element/input types
  		"header": function( elem ) {
  			return rheader.test( elem.nodeName );
  		},
  
  		"input": function( elem ) {
  			return rinputs.test( elem.nodeName );
  		},
  
  		"button": function( elem ) {
  			var name = elem.nodeName.toLowerCase();
  			return name === "input" && elem.type === "button" || name === "button";
  		},
  
  		"text": function( elem ) {
  			var attr;
  			return elem.nodeName.toLowerCase() === "input" &&
  				elem.type === "text" &&
  
  				// Support: IE<8
  				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
  				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
  		},
  
  		// Position-in-collection
  		"first": createPositionalPseudo(function() {
  			return [ 0 ];
  		}),
  
  		"last": createPositionalPseudo(function( matchIndexes, length ) {
  			return [ length - 1 ];
  		}),
  
  		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
  			return [ argument < 0 ? argument + length : argument ];
  		}),
  
  		"even": createPositionalPseudo(function( matchIndexes, length ) {
  			var i = 0;
  			for ( ; i < length; i += 2 ) {
  				matchIndexes.push( i );
  			}
  			return matchIndexes;
  		}),
  
  		"odd": createPositionalPseudo(function( matchIndexes, length ) {
  			var i = 1;
  			for ( ; i < length; i += 2 ) {
  				matchIndexes.push( i );
  			}
  			return matchIndexes;
  		}),
  
  		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
  			var i = argument < 0 ? argument + length : argument;
  			for ( ; --i >= 0; ) {
  				matchIndexes.push( i );
  			}
  			return matchIndexes;
  		}),
  
  		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
  			var i = argument < 0 ? argument + length : argument;
  			for ( ; ++i < length; ) {
  				matchIndexes.push( i );
  			}
  			return matchIndexes;
  		})
  	}
  };
  
  Expr.pseudos["nth"] = Expr.pseudos["eq"];
  
  // Add button/input type pseudos
  for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
  	Expr.pseudos[ i ] = createInputPseudo( i );
  }
  for ( i in { submit: true, reset: true } ) {
  	Expr.pseudos[ i ] = createButtonPseudo( i );
  }
  
  // Easy API for creating new setFilters
  function setFilters() {}
  setFilters.prototype = Expr.filters = Expr.pseudos;
  Expr.setFilters = new setFilters();
  
  tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
  	var matched, match, tokens, type,
  		soFar, groups, preFilters,
  		cached = tokenCache[ selector + " " ];
  
  	if ( cached ) {
  		return parseOnly ? 0 : cached.slice( 0 );
  	}
  
  	soFar = selector;
  	groups = [];
  	preFilters = Expr.preFilter;
  
  	while ( soFar ) {
  
  		// Comma and first run
  		if ( !matched || (match = rcomma.exec( soFar )) ) {
  			if ( match ) {
  				// Don't consume trailing commas as valid
  				soFar = soFar.slice( match[0].length ) || soFar;
  			}
  			groups.push( (tokens = []) );
  		}
  
  		matched = false;
  
  		// Combinators
  		if ( (match = rcombinators.exec( soFar )) ) {
  			matched = match.shift();
  			tokens.push({
  				value: matched,
  				// Cast descendant combinators to space
  				type: match[0].replace( rtrim, " " )
  			});
  			soFar = soFar.slice( matched.length );
  		}
  
  		// Filters
  		for ( type in Expr.filter ) {
  			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
  				(match = preFilters[ type ]( match ))) ) {
  				matched = match.shift();
  				tokens.push({
  					value: matched,
  					type: type,
  					matches: match
  				});
  				soFar = soFar.slice( matched.length );
  			}
  		}
  
  		if ( !matched ) {
  			break;
  		}
  	}
  
  	// Return the length of the invalid excess
  	// if we're just parsing
  	// Otherwise, throw an error or return tokens
  	return parseOnly ?
  		soFar.length :
  		soFar ?
  			Sizzle.error( selector ) :
  			// Cache the tokens
  			tokenCache( selector, groups ).slice( 0 );
  };
  
  function toSelector( tokens ) {
  	var i = 0,
  		len = tokens.length,
  		selector = "";
  	for ( ; i < len; i++ ) {
  		selector += tokens[i].value;
  	}
  	return selector;
  }
  
  function addCombinator( matcher, combinator, base ) {
  	var dir = combinator.dir,
  		checkNonElements = base && dir === "parentNode",
  		doneName = done++;
  
  	return combinator.first ?
  		// Check against closest ancestor/preceding element
  		function( elem, context, xml ) {
  			while ( (elem = elem[ dir ]) ) {
  				if ( elem.nodeType === 1 || checkNonElements ) {
  					return matcher( elem, context, xml );
  				}
  			}
  		} :
  
  		// Check against all ancestor/preceding elements
  		function( elem, context, xml ) {
c5169e0e   Renato De Donato   a new hope
2107
  			var oldCache, outerCache,
74249687   Luigi Serra   Cross browser con...
2108
2109
  				newCache = [ dirruns, doneName ];
  
c5169e0e   Renato De Donato   a new hope
2110
  			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
74249687   Luigi Serra   Cross browser con...
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
  			if ( xml ) {
  				while ( (elem = elem[ dir ]) ) {
  					if ( elem.nodeType === 1 || checkNonElements ) {
  						if ( matcher( elem, context, xml ) ) {
  							return true;
  						}
  					}
  				}
  			} else {
  				while ( (elem = elem[ dir ]) ) {
  					if ( elem.nodeType === 1 || checkNonElements ) {
  						outerCache = elem[ expando ] || (elem[ expando ] = {});
c5169e0e   Renato De Donato   a new hope
2123
  						if ( (oldCache = outerCache[ dir ]) &&
74249687   Luigi Serra   Cross browser con...
2124
2125
2126
2127
2128
2129
  							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
  
  							// Assign to newCache so results back-propagate to previous elements
  							return (newCache[ 2 ] = oldCache[ 2 ]);
  						} else {
  							// Reuse newcache so results back-propagate to previous elements
c5169e0e   Renato De Donato   a new hope
2130
  							outerCache[ dir ] = newCache;
74249687   Luigi Serra   Cross browser con...
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
  
  							// A match means we're done; a fail means we have to keep checking
  							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
  								return true;
  							}
  						}
  					}
  				}
  			}
  		};
  }
  
  function elementMatcher( matchers ) {
  	return matchers.length > 1 ?
  		function( elem, context, xml ) {
  			var i = matchers.length;
  			while ( i-- ) {
  				if ( !matchers[i]( elem, context, xml ) ) {
  					return false;
  				}
  			}
  			return true;
  		} :
  		matchers[0];
  }
  
  function multipleContexts( selector, contexts, results ) {
  	var i = 0,
  		len = contexts.length;
  	for ( ; i < len; i++ ) {
  		Sizzle( selector, contexts[i], results );
  	}
  	return results;
  }
  
  function condense( unmatched, map, filter, context, xml ) {
  	var elem,
  		newUnmatched = [],
  		i = 0,
  		len = unmatched.length,
  		mapped = map != null;
  
  	for ( ; i < len; i++ ) {
  		if ( (elem = unmatched[i]) ) {
  			if ( !filter || filter( elem, context, xml ) ) {
  				newUnmatched.push( elem );
  				if ( mapped ) {
  					map.push( i );
  				}
  			}
  		}
  	}
  
  	return newUnmatched;
  }
  
  function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
  	if ( postFilter && !postFilter[ expando ] ) {
  		postFilter = setMatcher( postFilter );
  	}
  	if ( postFinder && !postFinder[ expando ] ) {
  		postFinder = setMatcher( postFinder, postSelector );
  	}
  	return markFunction(function( seed, results, context, xml ) {
  		var temp, i, elem,
  			preMap = [],
  			postMap = [],
  			preexisting = results.length,
  
  			// Get initial elements from seed or context
  			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
  
  			// Prefilter to get matcher input, preserving a map for seed-results synchronization
  			matcherIn = preFilter && ( seed || !selector ) ?
  				condense( elems, preMap, preFilter, context, xml ) :
  				elems,
  
  			matcherOut = matcher ?
  				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
  				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
  
  					// ...intermediate processing is necessary
  					[] :
  
  					// ...otherwise use results directly
  					results :
  				matcherIn;
  
  		// Find primary matches
  		if ( matcher ) {
  			matcher( matcherIn, matcherOut, context, xml );
  		}
  
  		// Apply postFilter
  		if ( postFilter ) {
  			temp = condense( matcherOut, postMap );
  			postFilter( temp, [], context, xml );
  
  			// Un-match failing elements by moving them back to matcherIn
  			i = temp.length;
  			while ( i-- ) {
  				if ( (elem = temp[i]) ) {
  					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
  				}
  			}
  		}
  
  		if ( seed ) {
  			if ( postFinder || preFilter ) {
  				if ( postFinder ) {
  					// Get the final matcherOut by condensing this intermediate into postFinder contexts
  					temp = [];
  					i = matcherOut.length;
  					while ( i-- ) {
  						if ( (elem = matcherOut[i]) ) {
  							// Restore matcherIn since elem is not yet a final match
  							temp.push( (matcherIn[i] = elem) );
  						}
  					}
  					postFinder( null, (matcherOut = []), temp, xml );
  				}
  
  				// Move matched elements from seed to results to keep them synchronized
  				i = matcherOut.length;
  				while ( i-- ) {
  					if ( (elem = matcherOut[i]) &&
  						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
  
  						seed[temp] = !(results[temp] = elem);
  					}
  				}
  			}
  
  		// Add elements to results, through postFinder if defined
  		} else {
  			matcherOut = condense(
  				matcherOut === results ?
  					matcherOut.splice( preexisting, matcherOut.length ) :
  					matcherOut
  			);
  			if ( postFinder ) {
  				postFinder( null, results, matcherOut, xml );
  			} else {
  				push.apply( results, matcherOut );
  			}
  		}
  	});
  }
  
  function matcherFromTokens( tokens ) {
  	var checkContext, matcher, j,
  		len = tokens.length,
  		leadingRelative = Expr.relative[ tokens[0].type ],
  		implicitRelative = leadingRelative || Expr.relative[" "],
  		i = leadingRelative ? 1 : 0,
  
  		// The foundational matcher ensures that elements are reachable from top-level context(s)
  		matchContext = addCombinator( function( elem ) {
  			return elem === checkContext;
  		}, implicitRelative, true ),
  		matchAnyContext = addCombinator( function( elem ) {
  			return indexOf( checkContext, elem ) > -1;
  		}, implicitRelative, true ),
  		matchers = [ function( elem, context, xml ) {
  			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
  				(checkContext = context).nodeType ?
  					matchContext( elem, context, xml ) :
  					matchAnyContext( elem, context, xml ) );
  			// Avoid hanging onto element (issue #299)
  			checkContext = null;
  			return ret;
  		} ];
  
  	for ( ; i < len; i++ ) {
  		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
  			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
  		} else {
  			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
  
  			// Return special upon seeing a positional matcher
  			if ( matcher[ expando ] ) {
  				// Find the next relative operator (if any) for proper handling
  				j = ++i;
  				for ( ; j < len; j++ ) {
  					if ( Expr.relative[ tokens[j].type ] ) {
  						break;
  					}
  				}
  				return setMatcher(
  					i > 1 && elementMatcher( matchers ),
  					i > 1 && toSelector(
  						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
  						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
  					).replace( rtrim, "$1" ),
  					matcher,
  					i < j && matcherFromTokens( tokens.slice( i, j ) ),
  					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
  					j < len && toSelector( tokens )
  				);
  			}
  			matchers.push( matcher );
  		}
  	}
  
  	return elementMatcher( matchers );
  }
  
  function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  	var bySet = setMatchers.length > 0,
  		byElement = elementMatchers.length > 0,
  		superMatcher = function( seed, context, xml, results, outermost ) {
  			var elem, j, matcher,
  				matchedCount = 0,
  				i = "0",
  				unmatched = seed && [],
  				setMatched = [],
  				contextBackup = outermostContext,
  				// We must always have either seed elements or outermost context
  				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
  				// Use integer dirruns iff this is the outermost matcher
  				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
  				len = elems.length;
  
  			if ( outermost ) {
c5169e0e   Renato De Donato   a new hope
2355
  				outermostContext = context !== document && context;
74249687   Luigi Serra   Cross browser con...
2356
2357
2358
  			}
  
  			// Add elements passing elementMatchers directly to results
c5169e0e   Renato De Donato   a new hope
2359
  			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
74249687   Luigi Serra   Cross browser con...
2360
2361
2362
2363
2364
  			// Support: IE<9, Safari
  			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
  			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
  				if ( byElement && elem ) {
  					j = 0;
74249687   Luigi Serra   Cross browser con...
2365
  					while ( (matcher = elementMatchers[j++]) ) {
c5169e0e   Renato De Donato   a new hope
2366
  						if ( matcher( elem, context, xml ) ) {
74249687   Luigi Serra   Cross browser con...
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
  							results.push( elem );
  							break;
  						}
  					}
  					if ( outermost ) {
  						dirruns = dirrunsUnique;
  					}
  				}
  
  				// Track unmatched elements for set filters
  				if ( bySet ) {
  					// They will have gone through all possible matchers
  					if ( (elem = !matcher && elem) ) {
  						matchedCount--;
  					}
  
  					// Lengthen the array for every element, matched or not
  					if ( seed ) {
  						unmatched.push( elem );
  					}
  				}
  			}
  
a1a3bc73   Luigi Serra   graphs updates
2390
  			// Apply set filters to unmatched elements
c5169e0e   Renato De Donato   a new hope
2391
  			matchedCount += i;
74249687   Luigi Serra   Cross browser con...
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
  			if ( bySet && i !== matchedCount ) {
  				j = 0;
  				while ( (matcher = setMatchers[j++]) ) {
  					matcher( unmatched, setMatched, context, xml );
  				}
  
  				if ( seed ) {
  					// Reintegrate element matches to eliminate the need for sorting
  					if ( matchedCount > 0 ) {
  						while ( i-- ) {
  							if ( !(unmatched[i] || setMatched[i]) ) {
  								setMatched[i] = pop.call( results );
  							}
  						}
  					}
  
  					// Discard index placeholder values to get only actual matches
  					setMatched = condense( setMatched );
  				}
  
  				// Add matches to results
  				push.apply( results, setMatched );
  
  				// Seedless set matches succeeding multiple successful matchers stipulate sorting
  				if ( outermost && !seed && setMatched.length > 0 &&
  					( matchedCount + setMatchers.length ) > 1 ) {
  
  					Sizzle.uniqueSort( results );
  				}
  			}
  
  			// Override manipulation of globals by nested matchers
  			if ( outermost ) {
  				dirruns = dirrunsUnique;
  				outermostContext = contextBackup;
  			}
  
  			return unmatched;
  		};
  
  	return bySet ?
  		markFunction( superMatcher ) :
  		superMatcher;
  }
  
  compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
  	var i,
  		setMatchers = [],
  		elementMatchers = [],
  		cached = compilerCache[ selector + " " ];
  
  	if ( !cached ) {
  		// Generate a function of recursive functions that can be used to check each element
  		if ( !match ) {
  			match = tokenize( selector );
  		}
  		i = match.length;
  		while ( i-- ) {
  			cached = matcherFromTokens( match[i] );
  			if ( cached[ expando ] ) {
  				setMatchers.push( cached );
  			} else {
  				elementMatchers.push( cached );
  			}
  		}
  
  		// Cache the compiled function
  		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
  
  		// Save selector and tokenization
  		cached.selector = selector;
  	}
  	return cached;
  };
  
  /**
   * A low-level selection function that works with Sizzle's compiled
   *  selector functions
   * @param {String|Function} selector A selector or a pre-compiled
   *  selector function built with Sizzle.compile
   * @param {Element} context
   * @param {Array} [results]
   * @param {Array} [seed] A set of elements to match against
   */
  select = Sizzle.select = function( selector, context, results, seed ) {
  	var i, tokens, token, type, find,
  		compiled = typeof selector === "function" && selector,
  		match = !seed && tokenize( (selector = compiled.selector || selector) );
  
  	results = results || [];
  
c5169e0e   Renato De Donato   a new hope
2483
  	// Try to minimize operations if there is no seed and only one group
74249687   Luigi Serra   Cross browser con...
2484
2485
  	if ( match.length === 1 ) {
  
c5169e0e   Renato De Donato   a new hope
2486
  		// Take a shortcut and set the context if the root selector is an ID
74249687   Luigi Serra   Cross browser con...
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
  		tokens = match[0] = match[0].slice( 0 );
  		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
  				support.getById && context.nodeType === 9 && documentIsHTML &&
  				Expr.relative[ tokens[1].type ] ) {
  
  			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
  			if ( !context ) {
  				return results;
  
  			// Precompiled matchers will still verify ancestry, so step up a level
  			} else if ( compiled ) {
  				context = context.parentNode;
  			}
  
  			selector = selector.slice( tokens.shift().value.length );
  		}
  
  		// Fetch a seed set for right-to-left matching
  		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
  		while ( i-- ) {
  			token = tokens[i];
  
  			// Abort if we hit a combinator
  			if ( Expr.relative[ (type = token.type) ] ) {
  				break;
  			}
  			if ( (find = Expr.find[ type ]) ) {
  				// Search, expanding context for leading sibling combinators
  				if ( (seed = find(
  					token.matches[0].replace( runescape, funescape ),
  					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
  				)) ) {
  
  					// If seed is empty or no tokens remain, we can return early
  					tokens.splice( i, 1 );
  					selector = seed.length && toSelector( tokens );
  					if ( !selector ) {
  						push.apply( results, seed );
  						return results;
  					}
  
  					break;
  				}
  			}
  		}
  	}
  
  	// Compile and execute a filtering function if one is not provided
  	// Provide `match` to avoid retokenization if we modified the selector above
  	( compiled || compile( selector, match ) )(
  		seed,
  		context,
  		!documentIsHTML,
  		results,
c5169e0e   Renato De Donato   a new hope
2541
  		rsibling.test( selector ) && testContext( context.parentNode ) || context
74249687   Luigi Serra   Cross browser con...
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
  	);
  	return results;
  };
  
  // One-time assignments
  
  // Sort stability
  support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
  
  // Support: Chrome 14-35+
  // Always assume duplicates if they aren't passed to the comparison function
  support.detectDuplicates = !!hasDuplicate;
  
  // Initialize against the default document
  setDocument();
  
  // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
  // Detached nodes confoundingly follow *each other*
  support.sortDetached = assert(function( div1 ) {
  	// Should return 1, but returns 4 (following)
  	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
  });
  
  // Support: IE<8
  // Prevent attribute/property "interpolation"
  // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
  if ( !assert(function( div ) {
  	div.innerHTML = "<a href='#'></a>";
  	return div.firstChild.getAttribute("href") === "#" ;
  }) ) {
  	addHandle( "type|href|height|width", function( elem, name, isXML ) {
  		if ( !isXML ) {
  			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
  		}
  	});
  }
  
  // Support: IE<9
  // Use defaultValue in place of getAttribute("value")
  if ( !support.attributes || !assert(function( div ) {
  	div.innerHTML = "<input/>";
  	div.firstChild.setAttribute( "value", "" );
  	return div.firstChild.getAttribute( "value" ) === "";
  }) ) {
  	addHandle( "value", function( elem, name, isXML ) {
  		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
  			return elem.defaultValue;
  		}
  	});
  }
  
  // Support: IE<9
  // Use getAttributeNode to fetch booleans when getAttribute lies
  if ( !assert(function( div ) {
  	return div.getAttribute("disabled") == null;
  }) ) {
  	addHandle( booleans, function( elem, name, isXML ) {
  		var val;
  		if ( !isXML ) {
  			return elem[ name ] === true ? name.toLowerCase() :
  					(val = elem.getAttributeNode( name )) && val.specified ?
  					val.value :
  				null;
  		}
  	});
  }
  
  return Sizzle;
  
  })( window );
  
  
  
  jQuery.find = Sizzle;
  jQuery.expr = Sizzle.selectors;
c5169e0e   Renato De Donato   a new hope
2617
2618
  jQuery.expr[":"] = jQuery.expr.pseudos;
  jQuery.unique = Sizzle.uniqueSort;
74249687   Luigi Serra   Cross browser con...
2619
2620
2621
2622
2623
2624
  jQuery.text = Sizzle.getText;
  jQuery.isXMLDoc = Sizzle.isXML;
  jQuery.contains = Sizzle.contains;
  
  
  
74249687   Luigi Serra   Cross browser con...
2625
2626
  var rneedsContext = jQuery.expr.match.needsContext;
  
c5169e0e   Renato De Donato   a new hope
2627
  var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
74249687   Luigi Serra   Cross browser con...
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
  
  
  
  var risSimple = /^.[^:#\[\.,]*$/;
  
  // Implement the identical functionality for filter and not
  function winnow( elements, qualifier, not ) {
  	if ( jQuery.isFunction( qualifier ) ) {
  		return jQuery.grep( elements, function( elem, i ) {
  			/* jshint -W018 */
  			return !!qualifier.call( elem, i, elem ) !== not;
c5169e0e   Renato De Donato   a new hope
2639
  		});
74249687   Luigi Serra   Cross browser con...
2640
2641
2642
2643
2644
2645
  
  	}
  
  	if ( qualifier.nodeType ) {
  		return jQuery.grep( elements, function( elem ) {
  			return ( elem === qualifier ) !== not;
c5169e0e   Renato De Donato   a new hope
2646
  		});
74249687   Luigi Serra   Cross browser con...
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
  
  	}
  
  	if ( typeof qualifier === "string" ) {
  		if ( risSimple.test( qualifier ) ) {
  			return jQuery.filter( qualifier, elements, not );
  		}
  
  		qualifier = jQuery.filter( qualifier, elements );
  	}
  
  	return jQuery.grep( elements, function( elem ) {
c5169e0e   Renato De Donato   a new hope
2659
2660
  		return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
  	});
74249687   Luigi Serra   Cross browser con...
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
  }
  
  jQuery.filter = function( expr, elems, not ) {
  	var elem = elems[ 0 ];
  
  	if ( not ) {
  		expr = ":not(" + expr + ")";
  	}
  
  	return elems.length === 1 && elem.nodeType === 1 ?
  		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
  		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
  			return elem.nodeType === 1;
c5169e0e   Renato De Donato   a new hope
2674
  		}));
74249687   Luigi Serra   Cross browser con...
2675
2676
  };
  
c5169e0e   Renato De Donato   a new hope
2677
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
2678
2679
2680
2681
2682
2683
2684
  	find: function( selector ) {
  		var i,
  			len = this.length,
  			ret = [],
  			self = this;
  
  		if ( typeof selector !== "string" ) {
c5169e0e   Renato De Donato   a new hope
2685
  			return this.pushStack( jQuery( selector ).filter(function() {
74249687   Luigi Serra   Cross browser con...
2686
2687
2688
2689
2690
  				for ( i = 0; i < len; i++ ) {
  					if ( jQuery.contains( self[ i ], this ) ) {
  						return true;
  					}
  				}
c5169e0e   Renato De Donato   a new hope
2691
  			}) );
74249687   Luigi Serra   Cross browser con...
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
  		}
  
  		for ( i = 0; i < len; i++ ) {
  			jQuery.find( selector, self[ i ], ret );
  		}
  
  		// Needed because $( selector, context ) becomes $( context ).find( selector )
  		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
  		ret.selector = this.selector ? this.selector + " " + selector : selector;
  		return ret;
  	},
  	filter: function( selector ) {
c5169e0e   Renato De Donato   a new hope
2704
  		return this.pushStack( winnow(this, selector || [], false) );
74249687   Luigi Serra   Cross browser con...
2705
2706
  	},
  	not: function( selector ) {
c5169e0e   Renato De Donato   a new hope
2707
  		return this.pushStack( winnow(this, selector || [], true) );
74249687   Luigi Serra   Cross browser con...
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
  	},
  	is: function( selector ) {
  		return !!winnow(
  			this,
  
  			// If this is a positional/relative selector, check membership in the returned set
  			// so $("p:first").is("p:last") won't return true for a doc with two "p".
  			typeof selector === "string" && rneedsContext.test( selector ) ?
  				jQuery( selector ) :
  				selector || [],
  			false
  		).length;
  	}
c5169e0e   Renato De Donato   a new hope
2721
  });
74249687   Luigi Serra   Cross browser con...
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
  
  
  // Initialize a jQuery object
  
  
  // A central reference to the root jQuery(document)
  var rootjQuery,
  
  	// A simple way to check for HTML strings
  	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
  	// Strict HTML recognition (#11290: must start with <)
  	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
  
c5169e0e   Renato De Donato   a new hope
2735
  	init = jQuery.fn.init = function( selector, context ) {
74249687   Luigi Serra   Cross browser con...
2736
2737
2738
2739
2740
2741
2742
  		var match, elem;
  
  		// HANDLE: $(""), $(null), $(undefined), $(false)
  		if ( !selector ) {
  			return this;
  		}
  
74249687   Luigi Serra   Cross browser con...
2743
2744
  		// Handle HTML strings
  		if ( typeof selector === "string" ) {
c5169e0e   Renato De Donato   a new hope
2745
  			if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
74249687   Luigi Serra   Cross browser con...
2746
2747
2748
2749
2750
2751
2752
2753
  				// Assume that strings that start and end with <> are HTML and skip the regex check
  				match = [ null, selector, null ];
  
  			} else {
  				match = rquickExpr.exec( selector );
  			}
  
  			// Match html or make sure no context is specified for #id
c5169e0e   Renato De Donato   a new hope
2754
  			if ( match && (match[1] || !context) ) {
74249687   Luigi Serra   Cross browser con...
2755
2756
  
  				// HANDLE: $(html) -> $(array)
c5169e0e   Renato De Donato   a new hope
2757
2758
  				if ( match[1] ) {
  					context = context instanceof jQuery ? context[0] : context;
74249687   Luigi Serra   Cross browser con...
2759
2760
2761
2762
  
  					// Option to run scripts is true for back-compat
  					// Intentionally let the error be thrown if parseHTML is not present
  					jQuery.merge( this, jQuery.parseHTML(
c5169e0e   Renato De Donato   a new hope
2763
  						match[1],
74249687   Luigi Serra   Cross browser con...
2764
2765
2766
2767
2768
  						context && context.nodeType ? context.ownerDocument || context : document,
  						true
  					) );
  
  					// HANDLE: $(html, props)
c5169e0e   Renato De Donato   a new hope
2769
  					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
74249687   Luigi Serra   Cross browser con...
2770
  						for ( match in context ) {
74249687   Luigi Serra   Cross browser con...
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
  							// Properties of context are called as methods if possible
  							if ( jQuery.isFunction( this[ match ] ) ) {
  								this[ match ]( context[ match ] );
  
  							// ...and otherwise set as attributes
  							} else {
  								this.attr( match, context[ match ] );
  							}
  						}
  					}
  
  					return this;
  
  				// HANDLE: $(#id)
  				} else {
c5169e0e   Renato De Donato   a new hope
2786
  					elem = document.getElementById( match[2] );
74249687   Luigi Serra   Cross browser con...
2787
2788
2789
2790
  
  					// Support: Blackberry 4.6
  					// gEBID returns nodes no longer in the document (#6963)
  					if ( elem && elem.parentNode ) {
74249687   Luigi Serra   Cross browser con...
2791
2792
  						// Inject the element directly into the jQuery object
  						this.length = 1;
c5169e0e   Renato De Donato   a new hope
2793
  						this[0] = elem;
74249687   Luigi Serra   Cross browser con...
2794
2795
2796
2797
2798
2799
2800
2801
2802
  					}
  
  					this.context = document;
  					this.selector = selector;
  					return this;
  				}
  
  			// HANDLE: $(expr, $(...))
  			} else if ( !context || context.jquery ) {
c5169e0e   Renato De Donato   a new hope
2803
  				return ( context || rootjQuery ).find( selector );
74249687   Luigi Serra   Cross browser con...
2804
2805
2806
2807
2808
2809
2810
2811
2812
  
  			// HANDLE: $(expr, context)
  			// (which is just equivalent to: $(context).find(expr)
  			} else {
  				return this.constructor( context ).find( selector );
  			}
  
  		// HANDLE: $(DOMElement)
  		} else if ( selector.nodeType ) {
c5169e0e   Renato De Donato   a new hope
2813
  			this.context = this[0] = selector;
74249687   Luigi Serra   Cross browser con...
2814
2815
2816
2817
2818
2819
  			this.length = 1;
  			return this;
  
  		// HANDLE: $(function)
  		// Shortcut for document ready
  		} else if ( jQuery.isFunction( selector ) ) {
c5169e0e   Renato De Donato   a new hope
2820
2821
  			return typeof rootjQuery.ready !== "undefined" ?
  				rootjQuery.ready( selector ) :
74249687   Luigi Serra   Cross browser con...
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
  				// Execute immediately if ready is not present
  				selector( jQuery );
  		}
  
  		if ( selector.selector !== undefined ) {
  			this.selector = selector.selector;
  			this.context = selector.context;
  		}
  
  		return jQuery.makeArray( selector, this );
  	};
  
  // Give the init function the jQuery prototype for later instantiation
  init.prototype = jQuery.fn;
  
  // Initialize central reference
  rootjQuery = jQuery( document );
  
  
  var rparentsprev = /^(?:parents|prev(?:Until|All))/,
74249687   Luigi Serra   Cross browser con...
2842
2843
2844
2845
2846
2847
2848
2849
  	// Methods guaranteed to produce a unique set when starting from a unique set
  	guaranteedUnique = {
  		children: true,
  		contents: true,
  		next: true,
  		prev: true
  	};
  
c5169e0e   Renato De Donato   a new hope
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
  jQuery.extend({
  	dir: function( elem, dir, until ) {
  		var matched = [],
  			truncate = until !== undefined;
  
  		while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
  			if ( elem.nodeType === 1 ) {
  				if ( truncate && jQuery( elem ).is( until ) ) {
  					break;
  				}
  				matched.push( elem );
  			}
  		}
  		return matched;
  	},
  
  	sibling: function( n, elem ) {
  		var matched = [];
  
  		for ( ; n; n = n.nextSibling ) {
  			if ( n.nodeType === 1 && n !== elem ) {
  				matched.push( n );
  			}
  		}
  
  		return matched;
  	}
  });
  
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
2880
2881
2882
2883
  	has: function( target ) {
  		var targets = jQuery( target, this ),
  			l = targets.length;
  
c5169e0e   Renato De Donato   a new hope
2884
  		return this.filter(function() {
74249687   Luigi Serra   Cross browser con...
2885
2886
  			var i = 0;
  			for ( ; i < l; i++ ) {
c5169e0e   Renato De Donato   a new hope
2887
  				if ( jQuery.contains( this, targets[i] ) ) {
74249687   Luigi Serra   Cross browser con...
2888
2889
2890
  					return true;
  				}
  			}
c5169e0e   Renato De Donato   a new hope
2891
  		});
74249687   Luigi Serra   Cross browser con...
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
  	},
  
  	closest: function( selectors, context ) {
  		var cur,
  			i = 0,
  			l = this.length,
  			matched = [],
  			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
  				jQuery( selectors, context || this.context ) :
  				0;
  
  		for ( ; i < l; i++ ) {
c5169e0e   Renato De Donato   a new hope
2904
  			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
74249687   Luigi Serra   Cross browser con...
2905
  				// Always skip document fragments
c5169e0e   Renato De Donato   a new hope
2906
2907
  				if ( cur.nodeType < 11 && (pos ?
  					pos.index(cur) > -1 :
74249687   Luigi Serra   Cross browser con...
2908
2909
2910
  
  					// Don't pass non-elements to Sizzle
  					cur.nodeType === 1 &&
c5169e0e   Renato De Donato   a new hope
2911
  						jQuery.find.matchesSelector(cur, selectors)) ) {
74249687   Luigi Serra   Cross browser con...
2912
2913
2914
2915
2916
2917
2918
  
  					matched.push( cur );
  					break;
  				}
  			}
  		}
  
c5169e0e   Renato De Donato   a new hope
2919
  		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
74249687   Luigi Serra   Cross browser con...
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
  	},
  
  	// Determine the position of an element within the set
  	index: function( elem ) {
  
  		// No argument, return index in parent
  		if ( !elem ) {
  			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
  		}
  
  		// Index in selector
  		if ( typeof elem === "string" ) {
  			return indexOf.call( jQuery( elem ), this[ 0 ] );
  		}
  
  		// Locate the position of the desired element
  		return indexOf.call( this,
  
  			// If it receives a jQuery object, the first element is used
  			elem.jquery ? elem[ 0 ] : elem
  		);
  	},
  
  	add: function( selector, context ) {
  		return this.pushStack(
c5169e0e   Renato De Donato   a new hope
2945
  			jQuery.unique(
74249687   Luigi Serra   Cross browser con...
2946
2947
2948
2949
2950
2951
2952
  				jQuery.merge( this.get(), jQuery( selector, context ) )
  			)
  		);
  	},
  
  	addBack: function( selector ) {
  		return this.add( selector == null ?
c5169e0e   Renato De Donato   a new hope
2953
  			this.prevObject : this.prevObject.filter(selector)
74249687   Luigi Serra   Cross browser con...
2954
2955
  		);
  	}
c5169e0e   Renato De Donato   a new hope
2956
  });
74249687   Luigi Serra   Cross browser con...
2957
2958
  
  function sibling( cur, dir ) {
c5169e0e   Renato De Donato   a new hope
2959
  	while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
74249687   Luigi Serra   Cross browser con...
2960
2961
2962
  	return cur;
  }
  
c5169e0e   Renato De Donato   a new hope
2963
  jQuery.each({
74249687   Luigi Serra   Cross browser con...
2964
2965
2966
2967
2968
  	parent: function( elem ) {
  		var parent = elem.parentNode;
  		return parent && parent.nodeType !== 11 ? parent : null;
  	},
  	parents: function( elem ) {
c5169e0e   Renato De Donato   a new hope
2969
  		return jQuery.dir( elem, "parentNode" );
74249687   Luigi Serra   Cross browser con...
2970
2971
  	},
  	parentsUntil: function( elem, i, until ) {
c5169e0e   Renato De Donato   a new hope
2972
  		return jQuery.dir( elem, "parentNode", until );
74249687   Luigi Serra   Cross browser con...
2973
2974
2975
2976
2977
2978
2979
2980
  	},
  	next: function( elem ) {
  		return sibling( elem, "nextSibling" );
  	},
  	prev: function( elem ) {
  		return sibling( elem, "previousSibling" );
  	},
  	nextAll: function( elem ) {
c5169e0e   Renato De Donato   a new hope
2981
  		return jQuery.dir( elem, "nextSibling" );
74249687   Luigi Serra   Cross browser con...
2982
2983
  	},
  	prevAll: function( elem ) {
c5169e0e   Renato De Donato   a new hope
2984
  		return jQuery.dir( elem, "previousSibling" );
74249687   Luigi Serra   Cross browser con...
2985
2986
  	},
  	nextUntil: function( elem, i, until ) {
c5169e0e   Renato De Donato   a new hope
2987
  		return jQuery.dir( elem, "nextSibling", until );
74249687   Luigi Serra   Cross browser con...
2988
2989
  	},
  	prevUntil: function( elem, i, until ) {
c5169e0e   Renato De Donato   a new hope
2990
  		return jQuery.dir( elem, "previousSibling", until );
74249687   Luigi Serra   Cross browser con...
2991
2992
  	},
  	siblings: function( elem ) {
c5169e0e   Renato De Donato   a new hope
2993
  		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
74249687   Luigi Serra   Cross browser con...
2994
2995
  	},
  	children: function( elem ) {
c5169e0e   Renato De Donato   a new hope
2996
  		return jQuery.sibling( elem.firstChild );
74249687   Luigi Serra   Cross browser con...
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
  	},
  	contents: function( elem ) {
  		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
  	}
  }, function( name, fn ) {
  	jQuery.fn[ name ] = function( until, selector ) {
  		var matched = jQuery.map( this, fn, until );
  
  		if ( name.slice( -5 ) !== "Until" ) {
  			selector = until;
  		}
  
  		if ( selector && typeof selector === "string" ) {
  			matched = jQuery.filter( selector, matched );
  		}
  
  		if ( this.length > 1 ) {
74249687   Luigi Serra   Cross browser con...
3014
3015
  			// Remove duplicates
  			if ( !guaranteedUnique[ name ] ) {
c5169e0e   Renato De Donato   a new hope
3016
  				jQuery.unique( matched );
74249687   Luigi Serra   Cross browser con...
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
  			}
  
  			// Reverse order for parents* and prev-derivatives
  			if ( rparentsprev.test( name ) ) {
  				matched.reverse();
  			}
  		}
  
  		return this.pushStack( matched );
  	};
c5169e0e   Renato De Donato   a new hope
3027
3028
3029
  });
  var rnotwhite = (/\S+/g);
  
74249687   Luigi Serra   Cross browser con...
3030
3031
  
  
c5169e0e   Renato De Donato   a new hope
3032
3033
  // String to Object options format cache
  var optionsCache = {};
74249687   Luigi Serra   Cross browser con...
3034
  
c5169e0e   Renato De Donato   a new hope
3035
  // Convert String-formatted options into Object-formatted ones and store in cache
74249687   Luigi Serra   Cross browser con...
3036
  function createOptions( options ) {
c5169e0e   Renato De Donato   a new hope
3037
  	var object = optionsCache[ options ] = {};
74249687   Luigi Serra   Cross browser con...
3038
3039
  	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
  		object[ flag ] = true;
c5169e0e   Renato De Donato   a new hope
3040
  	});
74249687   Luigi Serra   Cross browser con...
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
  	return object;
  }
  
  /*
   * Create a callback list using the following parameters:
   *
   *	options: an optional list of space-separated options that will change how
   *			the callback list behaves or a more traditional option object
   *
   * By default a callback list will act like an event callback list and can be
   * "fired" multiple times.
   *
   * Possible options:
   *
   *	once:			will ensure the callback list can only be fired once (like a Deferred)
   *
   *	memory:			will keep track of previous values and will call any callback added
   *					after the list has been fired right away with the latest "memorized"
   *					values (like a Deferred)
   *
   *	unique:			will ensure a callback can only be added once (no duplicate in the list)
   *
   *	stopOnFalse:	interrupt callings when a callback returns false
   *
   */
  jQuery.Callbacks = function( options ) {
  
  	// Convert options from String-formatted to Object-formatted if needed
  	// (we check in cache first)
  	options = typeof options === "string" ?
c5169e0e   Renato De Donato   a new hope
3071
  		( optionsCache[ options ] || createOptions( options ) ) :
74249687   Luigi Serra   Cross browser con...
3072
3073
  		jQuery.extend( {}, options );
  
c5169e0e   Renato De Donato   a new hope
3074
  	var // Last fire value (for non-forgettable lists)
74249687   Luigi Serra   Cross browser con...
3075
  		memory,
74249687   Luigi Serra   Cross browser con...
3076
3077
  		// Flag to know if list was already fired
  		fired,
c5169e0e   Renato De Donato   a new hope
3078
3079
3080
3081
3082
3083
3084
3085
  		// Flag to know if list is currently firing
  		firing,
  		// First callback to fire (used internally by add and fireWith)
  		firingStart,
  		// End of the loop when firing
  		firingLength,
  		// Index of currently firing callback (modified by remove if needed)
  		firingIndex,
74249687   Luigi Serra   Cross browser con...
3086
3087
  		// Actual callback list
  		list = [],
c5169e0e   Renato De Donato   a new hope
3088
3089
  		// Stack of fire calls for repeatable lists
  		stack = !options.once && [],
74249687   Luigi Serra   Cross browser con...
3090
  		// Fire callbacks
c5169e0e   Renato De Donato   a new hope
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
  		fire = function( data ) {
  			memory = options.memory && data;
  			fired = true;
  			firingIndex = firingStart || 0;
  			firingStart = 0;
  			firingLength = list.length;
  			firing = true;
  			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
  				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
  					memory = false; // To prevent further calls using add
  					break;
74249687   Luigi Serra   Cross browser con...
3102
3103
  				}
  			}
74249687   Luigi Serra   Cross browser con...
3104
  			firing = false;
c5169e0e   Renato De Donato   a new hope
3105
3106
3107
3108
3109
3110
  			if ( list ) {
  				if ( stack ) {
  					if ( stack.length ) {
  						fire( stack.shift() );
  					}
  				} else if ( memory ) {
74249687   Luigi Serra   Cross browser con...
3111
  					list = [];
74249687   Luigi Serra   Cross browser con...
3112
  				} else {
c5169e0e   Renato De Donato   a new hope
3113
  					self.disable();
74249687   Luigi Serra   Cross browser con...
3114
3115
3116
  				}
  			}
  		},
74249687   Luigi Serra   Cross browser con...
3117
3118
  		// Actual Callbacks object
  		self = {
74249687   Luigi Serra   Cross browser con...
3119
3120
3121
  			// Add a callback or a collection of callbacks to the list
  			add: function() {
  				if ( list ) {
c5169e0e   Renato De Donato   a new hope
3122
3123
3124
  					// First, we save the current length
  					var start = list.length;
  					(function add( args ) {
74249687   Luigi Serra   Cross browser con...
3125
  						jQuery.each( args, function( _, arg ) {
c5169e0e   Renato De Donato   a new hope
3126
3127
  							var type = jQuery.type( arg );
  							if ( type === "function" ) {
74249687   Luigi Serra   Cross browser con...
3128
3129
3130
  								if ( !options.unique || !self.has( arg ) ) {
  									list.push( arg );
  								}
c5169e0e   Renato De Donato   a new hope
3131
  							} else if ( arg && arg.length && type !== "string" ) {
74249687   Luigi Serra   Cross browser con...
3132
3133
3134
  								// Inspect recursively
  								add( arg );
  							}
c5169e0e   Renato De Donato   a new hope
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
  						});
  					})( arguments );
  					// Do we need to add the callbacks to the
  					// current firing batch?
  					if ( firing ) {
  						firingLength = list.length;
  					// With memory, if we're not firing then
  					// we should call right away
  					} else if ( memory ) {
  						firingStart = start;
  						fire( memory );
74249687   Luigi Serra   Cross browser con...
3146
3147
3148
3149
  					}
  				}
  				return this;
  			},
74249687   Luigi Serra   Cross browser con...
3150
3151
  			// Remove a callback from the list
  			remove: function() {
c5169e0e   Renato De Donato   a new hope
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
  				if ( list ) {
  					jQuery.each( arguments, function( _, arg ) {
  						var index;
  						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
  							list.splice( index, 1 );
  							// Handle firing indexes
  							if ( firing ) {
  								if ( index <= firingLength ) {
  									firingLength--;
  								}
  								if ( index <= firingIndex ) {
  									firingIndex--;
  								}
  							}
74249687   Luigi Serra   Cross browser con...
3166
  						}
c5169e0e   Renato De Donato   a new hope
3167
3168
  					});
  				}
74249687   Luigi Serra   Cross browser con...
3169
3170
  				return this;
  			},
74249687   Luigi Serra   Cross browser con...
3171
3172
3173
  			// Check if a given callback is in the list.
  			// If no argument is given, return whether or not list has callbacks attached.
  			has: function( fn ) {
c5169e0e   Renato De Donato   a new hope
3174
  				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
74249687   Luigi Serra   Cross browser con...
3175
  			},
74249687   Luigi Serra   Cross browser con...
3176
3177
  			// Remove all callbacks from the list
  			empty: function() {
c5169e0e   Renato De Donato   a new hope
3178
3179
  				list = [];
  				firingLength = 0;
74249687   Luigi Serra   Cross browser con...
3180
3181
  				return this;
  			},
c5169e0e   Renato De Donato   a new hope
3182
  			// Have the list do nothing anymore
74249687   Luigi Serra   Cross browser con...
3183
  			disable: function() {
c5169e0e   Renato De Donato   a new hope
3184
  				list = stack = memory = undefined;
74249687   Luigi Serra   Cross browser con...
3185
3186
  				return this;
  			},
c5169e0e   Renato De Donato   a new hope
3187
  			// Is it disabled?
74249687   Luigi Serra   Cross browser con...
3188
3189
3190
  			disabled: function() {
  				return !list;
  			},
c5169e0e   Renato De Donato   a new hope
3191
  			// Lock the list in its current state
74249687   Luigi Serra   Cross browser con...
3192
  			lock: function() {
c5169e0e   Renato De Donato   a new hope
3193
  				stack = undefined;
74249687   Luigi Serra   Cross browser con...
3194
  				if ( !memory ) {
c5169e0e   Renato De Donato   a new hope
3195
  					self.disable();
74249687   Luigi Serra   Cross browser con...
3196
3197
3198
  				}
  				return this;
  			},
c5169e0e   Renato De Donato   a new hope
3199
  			// Is it locked?
74249687   Luigi Serra   Cross browser con...
3200
  			locked: function() {
c5169e0e   Renato De Donato   a new hope
3201
  				return !stack;
74249687   Luigi Serra   Cross browser con...
3202
  			},
74249687   Luigi Serra   Cross browser con...
3203
3204
  			// Call all callbacks with the given context and arguments
  			fireWith: function( context, args ) {
c5169e0e   Renato De Donato   a new hope
3205
  				if ( list && ( !fired || stack ) ) {
74249687   Luigi Serra   Cross browser con...
3206
3207
  					args = args || [];
  					args = [ context, args.slice ? args.slice() : args ];
c5169e0e   Renato De Donato   a new hope
3208
3209
3210
3211
  					if ( firing ) {
  						stack.push( args );
  					} else {
  						fire( args );
74249687   Luigi Serra   Cross browser con...
3212
3213
3214
3215
  					}
  				}
  				return this;
  			},
74249687   Luigi Serra   Cross browser con...
3216
3217
3218
3219
3220
  			// Call all the callbacks with the given arguments
  			fire: function() {
  				self.fireWith( this, arguments );
  				return this;
  			},
74249687   Luigi Serra   Cross browser con...
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
  			// To know if the callbacks have already been called at least once
  			fired: function() {
  				return !!fired;
  			}
  		};
  
  	return self;
  };
  
  
c5169e0e   Renato De Donato   a new hope
3231
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
3232
3233
3234
  
  	Deferred: function( func ) {
  		var tuples = [
74249687   Luigi Serra   Cross browser con...
3235
  				// action, add listener, listener list, final state
c5169e0e   Renato De Donato   a new hope
3236
3237
3238
  				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
  				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
  				[ "notify", "progress", jQuery.Callbacks("memory") ]
74249687   Luigi Serra   Cross browser con...
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
  			],
  			state = "pending",
  			promise = {
  				state: function() {
  					return state;
  				},
  				always: function() {
  					deferred.done( arguments ).fail( arguments );
  					return this;
  				},
  				then: function( /* fnDone, fnFail, fnProgress */ ) {
  					var fns = arguments;
c5169e0e   Renato De Donato   a new hope
3251
  					return jQuery.Deferred(function( newDefer ) {
74249687   Luigi Serra   Cross browser con...
3252
3253
  						jQuery.each( tuples, function( i, tuple ) {
  							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
74249687   Luigi Serra   Cross browser con...
3254
  							// deferred[ done | fail | progress ] for forwarding actions to newDefer
c5169e0e   Renato De Donato   a new hope
3255
  							deferred[ tuple[1] ](function() {
74249687   Luigi Serra   Cross browser con...
3256
3257
3258
  								var returned = fn && fn.apply( this, arguments );
  								if ( returned && jQuery.isFunction( returned.promise ) ) {
  									returned.promise()
74249687   Luigi Serra   Cross browser con...
3259
  										.done( newDefer.resolve )
c5169e0e   Renato De Donato   a new hope
3260
3261
  										.fail( newDefer.reject )
  										.progress( newDefer.notify );
74249687   Luigi Serra   Cross browser con...
3262
  								} else {
c5169e0e   Renato De Donato   a new hope
3263
  									newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
74249687   Luigi Serra   Cross browser con...
3264
  								}
c5169e0e   Renato De Donato   a new hope
3265
3266
  							});
  						});
74249687   Luigi Serra   Cross browser con...
3267
  						fns = null;
c5169e0e   Renato De Donato   a new hope
3268
  					}).promise();
74249687   Luigi Serra   Cross browser con...
3269
  				},
74249687   Luigi Serra   Cross browser con...
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
  				// Get a promise for this deferred
  				// If obj is provided, the promise aspect is added to the object
  				promise: function( obj ) {
  					return obj != null ? jQuery.extend( obj, promise ) : promise;
  				}
  			},
  			deferred = {};
  
  		// Keep pipe for back-compat
  		promise.pipe = promise.then;
  
  		// Add list-specific methods
  		jQuery.each( tuples, function( i, tuple ) {
  			var list = tuple[ 2 ],
  				stateString = tuple[ 3 ];
  
  			// promise[ done | fail | progress ] = list.add
c5169e0e   Renato De Donato   a new hope
3287
  			promise[ tuple[1] ] = list.add;
74249687   Luigi Serra   Cross browser con...
3288
3289
3290
  
  			// Handle state
  			if ( stateString ) {
c5169e0e   Renato De Donato   a new hope
3291
  				list.add(function() {
74249687   Luigi Serra   Cross browser con...
3292
3293
3294
3295
3296
3297
3298
3299
  					// state = [ resolved | rejected ]
  					state = stateString;
  
  				// [ reject_list | resolve_list ].disable; progress_list.lock
  				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
  			}
  
  			// deferred[ resolve | reject | notify ]
c5169e0e   Renato De Donato   a new hope
3300
3301
  			deferred[ tuple[0] ] = function() {
  				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
74249687   Luigi Serra   Cross browser con...
3302
3303
  				return this;
  			};
c5169e0e   Renato De Donato   a new hope
3304
3305
  			deferred[ tuple[0] + "With" ] = list.fireWith;
  		});
74249687   Luigi Serra   Cross browser con...
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
  
  		// Make the deferred a promise
  		promise.promise( deferred );
  
  		// Call given func if any
  		if ( func ) {
  			func.call( deferred, deferred );
  		}
  
  		// All done!
  		return deferred;
  	},
  
  	// Deferred helper
  	when: function( subordinate /* , ..., subordinateN */ ) {
  		var i = 0,
  			resolveValues = slice.call( arguments ),
  			length = resolveValues.length,
  
  			// the count of uncompleted subordinates
c5169e0e   Renato De Donato   a new hope
3326
  			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
74249687   Luigi Serra   Cross browser con...
3327
  
c5169e0e   Renato De Donato   a new hope
3328
  			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
74249687   Luigi Serra   Cross browser con...
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
  			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
  
  			// Update function for both resolve and progress values
  			updateFunc = function( i, contexts, values ) {
  				return function( value ) {
  					contexts[ i ] = this;
  					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
  					if ( values === progressValues ) {
  						deferred.notifyWith( contexts, values );
  					} else if ( !( --remaining ) ) {
  						deferred.resolveWith( contexts, values );
  					}
  				};
  			},
  
  			progressValues, progressContexts, resolveContexts;
  
  		// Add listeners to Deferred subordinates; treat others as resolved
  		if ( length > 1 ) {
  			progressValues = new Array( length );
  			progressContexts = new Array( length );
  			resolveContexts = new Array( length );
  			for ( ; i < length; i++ ) {
  				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
  					resolveValues[ i ].promise()
74249687   Luigi Serra   Cross browser con...
3354
  						.done( updateFunc( i, resolveContexts, resolveValues ) )
c5169e0e   Renato De Donato   a new hope
3355
3356
  						.fail( deferred.reject )
  						.progress( updateFunc( i, progressContexts, progressValues ) );
74249687   Luigi Serra   Cross browser con...
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
  				} else {
  					--remaining;
  				}
  			}
  		}
  
  		// If we're not waiting on anything, resolve the master
  		if ( !remaining ) {
  			deferred.resolveWith( resolveContexts, resolveValues );
  		}
  
  		return deferred.promise();
  	}
c5169e0e   Renato De Donato   a new hope
3370
  });
74249687   Luigi Serra   Cross browser con...
3371
3372
3373
3374
3375
3376
  
  
  // The deferred used on DOM ready
  var readyList;
  
  jQuery.fn.ready = function( fn ) {
74249687   Luigi Serra   Cross browser con...
3377
3378
3379
3380
3381
3382
  	// Add the callback
  	jQuery.ready.promise().done( fn );
  
  	return this;
  };
  
c5169e0e   Renato De Donato   a new hope
3383
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
  	// Is the DOM ready to be used? Set to true once it occurs.
  	isReady: false,
  
  	// A counter to track how many items to wait for before
  	// the ready event fires. See #6781
  	readyWait: 1,
  
  	// Hold (or release) the ready event
  	holdReady: function( hold ) {
  		if ( hold ) {
  			jQuery.readyWait++;
  		} else {
  			jQuery.ready( true );
  		}
  	},
  
  	// Handle when the DOM is ready
  	ready: function( wait ) {
  
  		// Abort if there are pending holds or we're already ready
  		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
  			return;
  		}
  
  		// Remember that the DOM is ready
  		jQuery.isReady = true;
  
  		// If a normal DOM Ready event fired, decrement, and wait if need be
  		if ( wait !== true && --jQuery.readyWait > 0 ) {
  			return;
  		}
  
  		// If there are functions bound, to execute
  		readyList.resolveWith( document, [ jQuery ] );
  
  		// Trigger any bound ready events
  		if ( jQuery.fn.triggerHandler ) {
  			jQuery( document ).triggerHandler( "ready" );
  			jQuery( document ).off( "ready" );
  		}
  	}
c5169e0e   Renato De Donato   a new hope
3425
  });
74249687   Luigi Serra   Cross browser con...
3426
3427
3428
3429
3430
  
  /**
   * The ready event handler and self cleanup method
   */
  function completed() {
c5169e0e   Renato De Donato   a new hope
3431
3432
  	document.removeEventListener( "DOMContentLoaded", completed, false );
  	window.removeEventListener( "load", completed, false );
74249687   Luigi Serra   Cross browser con...
3433
3434
3435
3436
3437
3438
3439
3440
  	jQuery.ready();
  }
  
  jQuery.ready.promise = function( obj ) {
  	if ( !readyList ) {
  
  		readyList = jQuery.Deferred();
  
c5169e0e   Renato De Donato   a new hope
3441
3442
3443
3444
  		// Catch cases where $(document).ready() is called after the browser event has already occurred.
  		// We once tried to use readyState "interactive" here, but it caused issues like the one
  		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
  		if ( document.readyState === "complete" ) {
74249687   Luigi Serra   Cross browser con...
3445
  			// Handle it asynchronously to allow scripts the opportunity to delay ready
c5169e0e   Renato De Donato   a new hope
3446
  			setTimeout( jQuery.ready );
74249687   Luigi Serra   Cross browser con...
3447
3448
3449
3450
  
  		} else {
  
  			// Use the handy event callback
c5169e0e   Renato De Donato   a new hope
3451
  			document.addEventListener( "DOMContentLoaded", completed, false );
74249687   Luigi Serra   Cross browser con...
3452
3453
  
  			// A fallback to window.onload, that will always work
c5169e0e   Renato De Donato   a new hope
3454
  			window.addEventListener( "load", completed, false );
74249687   Luigi Serra   Cross browser con...
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
  		}
  	}
  	return readyList.promise( obj );
  };
  
  // Kick off the DOM ready check even if the user does not
  jQuery.ready.promise();
  
  
  
  
  // Multifunctional method to get and set values of a collection
  // The value/s can optionally be executed if it's a function
c5169e0e   Renato De Donato   a new hope
3468
  var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
74249687   Luigi Serra   Cross browser con...
3469
3470
3471
3472
3473
3474
3475
3476
  	var i = 0,
  		len = elems.length,
  		bulk = key == null;
  
  	// Sets many values
  	if ( jQuery.type( key ) === "object" ) {
  		chainable = true;
  		for ( i in key ) {
c5169e0e   Renato De Donato   a new hope
3477
  			jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
74249687   Luigi Serra   Cross browser con...
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
  		}
  
  	// Sets one value
  	} else if ( value !== undefined ) {
  		chainable = true;
  
  		if ( !jQuery.isFunction( value ) ) {
  			raw = true;
  		}
  
  		if ( bulk ) {
74249687   Luigi Serra   Cross browser con...
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
  			// Bulk operations run against the entire set
  			if ( raw ) {
  				fn.call( elems, value );
  				fn = null;
  
  			// ...except when executing function values
  			} else {
  				bulk = fn;
  				fn = function( elem, key, value ) {
  					return bulk.call( jQuery( elem ), value );
  				};
  			}
  		}
  
  		if ( fn ) {
  			for ( ; i < len; i++ ) {
c5169e0e   Renato De Donato   a new hope
3505
  				fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
74249687   Luigi Serra   Cross browser con...
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
  			}
  		}
  	}
  
  	return chainable ?
  		elems :
  
  		// Gets
  		bulk ?
  			fn.call( elems ) :
c5169e0e   Renato De Donato   a new hope
3516
  			len ? fn( elems[0], key ) : emptyGet;
74249687   Luigi Serra   Cross browser con...
3517
  };
74249687   Luigi Serra   Cross browser con...
3518
  
c5169e0e   Renato De Donato   a new hope
3519
3520
3521
3522
3523
  
  /**
   * Determines whether an object can have data
   */
  jQuery.acceptData = function( owner ) {
74249687   Luigi Serra   Cross browser con...
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
  	// Accepts only:
  	//  - Node
  	//    - Node.ELEMENT_NODE
  	//    - Node.DOCUMENT_NODE
  	//  - Object
  	//    - Any
  	/* jshint -W018 */
  	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
  };
  
  
a1a3bc73   Luigi Serra   graphs updates
3535
  function Data() {
c5169e0e   Renato De Donato   a new hope
3536
3537
3538
3539
3540
3541
3542
3543
3544
  	// Support: Android<4,
  	// Old WebKit does not have Object.preventExtensions/freeze method,
  	// return new empty object instead with no [[set]] accessor
  	Object.defineProperty( this.cache = {}, 0, {
  		get: function() {
  			return {};
  		}
  	});
  
74249687   Luigi Serra   Cross browser con...
3545
3546
3547
3548
  	this.expando = jQuery.expando + Data.uid++;
  }
  
  Data.uid = 1;
c5169e0e   Renato De Donato   a new hope
3549
  Data.accepts = jQuery.acceptData;
74249687   Luigi Serra   Cross browser con...
3550
3551
  
  Data.prototype = {
c5169e0e   Renato De Donato   a new hope
3552
  	key: function( owner ) {
74249687   Luigi Serra   Cross browser con...
3553
3554
  		// We can accept data for non-element nodes in modern browsers,
  		// but we should not, see #8335.
c5169e0e   Renato De Donato   a new hope
3555
3556
3557
  		// Always return the key for a frozen object.
  		if ( !Data.accepts( owner ) ) {
  			return 0;
74249687   Luigi Serra   Cross browser con...
3558
3559
  		}
  
c5169e0e   Renato De Donato   a new hope
3560
3561
3562
  		var descriptor = {},
  			// Check if the owner object already has a cache key
  			unlock = owner[ this.expando ];
74249687   Luigi Serra   Cross browser con...
3563
3564
  
  		// If not, create one
c5169e0e   Renato De Donato   a new hope
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
  		if ( !unlock ) {
  			unlock = Data.uid++;
  
  			// Secure it in a non-enumerable, non-writable property
  			try {
  				descriptor[ this.expando ] = { value: unlock };
  				Object.defineProperties( owner, descriptor );
  
  			// Support: Android<4
  			// Fallback to a less secure definition
  			} catch ( e ) {
  				descriptor[ this.expando ] = unlock;
  				jQuery.extend( owner, descriptor );
74249687   Luigi Serra   Cross browser con...
3578
3579
3580
  			}
  		}
  
c5169e0e   Renato De Donato   a new hope
3581
3582
3583
3584
3585
3586
  		// Ensure the cache object
  		if ( !this.cache[ unlock ] ) {
  			this.cache[ unlock ] = {};
  		}
  
  		return unlock;
74249687   Luigi Serra   Cross browser con...
3587
3588
3589
  	},
  	set: function( owner, data, value ) {
  		var prop,
c5169e0e   Renato De Donato   a new hope
3590
3591
3592
3593
3594
  			// There may be an unlock assigned to this node,
  			// if there is no entry for this "owner", create one inline
  			// and set the unlock as though an owner entry had always existed
  			unlock = this.key( owner ),
  			cache = this.cache[ unlock ];
74249687   Luigi Serra   Cross browser con...
3595
3596
3597
3598
3599
3600
3601
  
  		// Handle: [ owner, key, value ] args
  		if ( typeof data === "string" ) {
  			cache[ data ] = value;
  
  		// Handle: [ owner, { properties } ] args
  		} else {
c5169e0e   Renato De Donato   a new hope
3602
3603
3604
3605
3606
3607
3608
3609
  			// Fresh assignments by object are shallow copied
  			if ( jQuery.isEmptyObject( cache ) ) {
  				jQuery.extend( this.cache[ unlock ], data );
  			// Otherwise, copy the properties one-by-one to the cache object
  			} else {
  				for ( prop in data ) {
  					cache[ prop ] = data[ prop ];
  				}
74249687   Luigi Serra   Cross browser con...
3610
3611
3612
3613
3614
  			}
  		}
  		return cache;
  	},
  	get: function( owner, key ) {
c5169e0e   Renato De Donato   a new hope
3615
3616
3617
3618
3619
3620
  		// Either a valid cache is found, or will be created.
  		// New caches will be created and the unlock returned,
  		// allowing direct access to the newly created
  		// empty data object. A valid owner object must be provided.
  		var cache = this.cache[ this.key( owner ) ];
  
74249687   Luigi Serra   Cross browser con...
3621
  		return key === undefined ?
c5169e0e   Renato De Donato   a new hope
3622
  			cache : cache[ key ];
74249687   Luigi Serra   Cross browser con...
3623
3624
3625
  	},
  	access: function( owner, key, value ) {
  		var stored;
74249687   Luigi Serra   Cross browser con...
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
  		// In cases where either:
  		//
  		//   1. No key was specified
  		//   2. A string key was specified, but no value provided
  		//
  		// Take the "read" path and allow the get method to determine
  		// which value to return, respectively either:
  		//
  		//   1. The entire cache object
  		//   2. The data stored at the key
  		//
  		if ( key === undefined ||
c5169e0e   Renato De Donato   a new hope
3638
  				((key && typeof key === "string") && value === undefined) ) {
74249687   Luigi Serra   Cross browser con...
3639
3640
3641
3642
  
  			stored = this.get( owner, key );
  
  			return stored !== undefined ?
c5169e0e   Renato De Donato   a new hope
3643
  				stored : this.get( owner, jQuery.camelCase(key) );
74249687   Luigi Serra   Cross browser con...
3644
3645
  		}
  
c5169e0e   Renato De Donato   a new hope
3646
  		// [*]When the key is not a string, or both a key and value
74249687   Luigi Serra   Cross browser con...
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
  		// are specified, set or extend (existing objects) with either:
  		//
  		//   1. An object of properties
  		//   2. A key and value
  		//
  		this.set( owner, key, value );
  
  		// Since the "set" path can have two possible entry points
  		// return the expected data based on which path was taken[*]
  		return value !== undefined ? value : key;
  	},
  	remove: function( owner, key ) {
  		var i, name, camel,
c5169e0e   Renato De Donato   a new hope
3660
3661
  			unlock = this.key( owner ),
  			cache = this.cache[ unlock ];
74249687   Luigi Serra   Cross browser con...
3662
3663
  
  		if ( key === undefined ) {
c5169e0e   Renato De Donato   a new hope
3664
  			this.cache[ unlock ] = {};
74249687   Luigi Serra   Cross browser con...
3665
3666
  
  		} else {
74249687   Luigi Serra   Cross browser con...
3667
3668
  			// Support array or space separated string of keys
  			if ( jQuery.isArray( key ) ) {
74249687   Luigi Serra   Cross browser con...
3669
3670
3671
3672
3673
3674
3675
3676
3677
  				// If "name" is an array of keys...
  				// When data is initially created, via ("key", "val") signature,
  				// keys will be converted to camelCase.
  				// Since there is no way to tell _how_ a key was added, remove
  				// both plain key and camelCase key. #12786
  				// This will only penalize the array argument path.
  				name = key.concat( key.map( jQuery.camelCase ) );
  			} else {
  				camel = jQuery.camelCase( key );
74249687   Luigi Serra   Cross browser con...
3678
3679
3680
3681
  				// Try the string as a key before any manipulation
  				if ( key in cache ) {
  					name = [ key, camel ];
  				} else {
74249687   Luigi Serra   Cross browser con...
3682
3683
3684
3685
3686
3687
3688
3689
3690
  					// If a key with the spaces exists, use it.
  					// Otherwise, create an array by matching non-whitespace
  					name = camel;
  					name = name in cache ?
  						[ name ] : ( name.match( rnotwhite ) || [] );
  				}
  			}
  
  			i = name.length;
74249687   Luigi Serra   Cross browser con...
3691
3692
3693
3694
  			while ( i-- ) {
  				delete cache[ name[ i ] ];
  			}
  		}
74249687   Luigi Serra   Cross browser con...
3695
3696
  	},
  	hasData: function( owner ) {
c5169e0e   Renato De Donato   a new hope
3697
3698
3699
3700
3701
3702
3703
3704
  		return !jQuery.isEmptyObject(
  			this.cache[ owner[ this.expando ] ] || {}
  		);
  	},
  	discard: function( owner ) {
  		if ( owner[ this.expando ] ) {
  			delete this.cache[ owner[ this.expando ] ];
  		}
74249687   Luigi Serra   Cross browser con...
3705
3706
  	}
  };
c5169e0e   Renato De Donato   a new hope
3707
  var data_priv = new Data();
74249687   Luigi Serra   Cross browser con...
3708
  
c5169e0e   Renato De Donato   a new hope
3709
  var data_user = new Data();
74249687   Luigi Serra   Cross browser con...
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
  
  
  
  //	Implementation Summary
  //
  //	1. Enforce API surface and semantic compatibility with 1.9.x branch
  //	2. Improve the module's maintainability by reducing the storage
  //		paths to a single mechanism.
  //	3. Use the same single mechanism to support "private" and "user" data.
  //	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
  //	5. Avoid exposing implementation details on user objects (eg. expando properties)
  //	6. Provide a clear path for implementation upgrade to WeakMap in 2014
  
  var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
c5169e0e   Renato De Donato   a new hope
3724
  	rmultiDash = /([A-Z])/g;
74249687   Luigi Serra   Cross browser con...
3725
3726
3727
3728
3729
3730
3731
  
  function dataAttr( elem, key, data ) {
  	var name;
  
  	// If nothing was found internally, try to fetch any
  	// data from the HTML5 data-* attribute
  	if ( data === undefined && elem.nodeType === 1 ) {
c5169e0e   Renato De Donato   a new hope
3732
  		name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
74249687   Luigi Serra   Cross browser con...
3733
3734
3735
3736
3737
3738
3739
  		data = elem.getAttribute( name );
  
  		if ( typeof data === "string" ) {
  			try {
  				data = data === "true" ? true :
  					data === "false" ? false :
  					data === "null" ? null :
74249687   Luigi Serra   Cross browser con...
3740
3741
3742
3743
  					// Only convert to a number if it doesn't change the string
  					+data + "" === data ? +data :
  					rbrace.test( data ) ? jQuery.parseJSON( data ) :
  					data;
c5169e0e   Renato De Donato   a new hope
3744
  			} catch( e ) {}
74249687   Luigi Serra   Cross browser con...
3745
3746
  
  			// Make sure we set the data so it isn't changed later
c5169e0e   Renato De Donato   a new hope
3747
  			data_user.set( elem, key, data );
74249687   Luigi Serra   Cross browser con...
3748
3749
3750
3751
3752
3753
3754
  		} else {
  			data = undefined;
  		}
  	}
  	return data;
  }
  
c5169e0e   Renato De Donato   a new hope
3755
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
3756
  	hasData: function( elem ) {
c5169e0e   Renato De Donato   a new hope
3757
  		return data_user.hasData( elem ) || data_priv.hasData( elem );
74249687   Luigi Serra   Cross browser con...
3758
3759
3760
  	},
  
  	data: function( elem, name, data ) {
c5169e0e   Renato De Donato   a new hope
3761
  		return data_user.access( elem, name, data );
74249687   Luigi Serra   Cross browser con...
3762
3763
3764
  	},
  
  	removeData: function( elem, name ) {
c5169e0e   Renato De Donato   a new hope
3765
  		data_user.remove( elem, name );
74249687   Luigi Serra   Cross browser con...
3766
3767
3768
  	},
  
  	// TODO: Now that all calls to _data and _removeData have been replaced
c5169e0e   Renato De Donato   a new hope
3769
  	// with direct calls to data_priv methods, these can be deprecated.
74249687   Luigi Serra   Cross browser con...
3770
  	_data: function( elem, name, data ) {
c5169e0e   Renato De Donato   a new hope
3771
  		return data_priv.access( elem, name, data );
74249687   Luigi Serra   Cross browser con...
3772
3773
3774
  	},
  
  	_removeData: function( elem, name ) {
c5169e0e   Renato De Donato   a new hope
3775
  		data_priv.remove( elem, name );
74249687   Luigi Serra   Cross browser con...
3776
  	}
c5169e0e   Renato De Donato   a new hope
3777
  });
74249687   Luigi Serra   Cross browser con...
3778
  
c5169e0e   Renato De Donato   a new hope
3779
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
3780
3781
3782
3783
3784
3785
3786
3787
  	data: function( key, value ) {
  		var i, name, data,
  			elem = this[ 0 ],
  			attrs = elem && elem.attributes;
  
  		// Gets all values
  		if ( key === undefined ) {
  			if ( this.length ) {
c5169e0e   Renato De Donato   a new hope
3788
  				data = data_user.get( elem );
74249687   Luigi Serra   Cross browser con...
3789
  
c5169e0e   Renato De Donato   a new hope
3790
  				if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
74249687   Luigi Serra   Cross browser con...
3791
3792
3793
3794
3795
3796
3797
3798
  					i = attrs.length;
  					while ( i-- ) {
  
  						// Support: IE11+
  						// The attrs elements can be null (#14894)
  						if ( attrs[ i ] ) {
  							name = attrs[ i ].name;
  							if ( name.indexOf( "data-" ) === 0 ) {
c5169e0e   Renato De Donato   a new hope
3799
  								name = jQuery.camelCase( name.slice(5) );
74249687   Luigi Serra   Cross browser con...
3800
3801
3802
3803
  								dataAttr( elem, name, data[ name ] );
  							}
  						}
  					}
c5169e0e   Renato De Donato   a new hope
3804
  					data_priv.set( elem, "hasDataAttrs", true );
74249687   Luigi Serra   Cross browser con...
3805
3806
3807
3808
3809
3810
3811
3812
  				}
  			}
  
  			return data;
  		}
  
  		// Sets multiple values
  		if ( typeof key === "object" ) {
c5169e0e   Renato De Donato   a new hope
3813
3814
3815
  			return this.each(function() {
  				data_user.set( this, key );
  			});
74249687   Luigi Serra   Cross browser con...
3816
3817
3818
  		}
  
  		return access( this, function( value ) {
c5169e0e   Renato De Donato   a new hope
3819
3820
  			var data,
  				camelKey = jQuery.camelCase( key );
74249687   Luigi Serra   Cross browser con...
3821
3822
3823
3824
3825
3826
3827
  
  			// The calling jQuery object (element matches) is not empty
  			// (and therefore has an element appears at this[ 0 ]) and the
  			// `value` parameter was not undefined. An empty jQuery object
  			// will result in `undefined` for elem = this[ 0 ] which will
  			// throw an exception if an attempt to read a data cache is made.
  			if ( elem && value === undefined ) {
74249687   Luigi Serra   Cross browser con...
3828
3829
  				// Attempt to get data from the cache
  				// with the key as-is
c5169e0e   Renato De Donato   a new hope
3830
  				data = data_user.get( elem, key );
74249687   Luigi Serra   Cross browser con...
3831
3832
3833
3834
  				if ( data !== undefined ) {
  					return data;
  				}
  
74249687   Luigi Serra   Cross browser con...
3835
3836
  				// Attempt to get data from the cache
  				// with the key camelized
c5169e0e   Renato De Donato   a new hope
3837
  				data = data_user.get( elem, camelKey );
74249687   Luigi Serra   Cross browser con...
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
  				if ( data !== undefined ) {
  					return data;
  				}
  
  				// Attempt to "discover" the data in
  				// HTML5 custom data-* attrs
  				data = dataAttr( elem, camelKey, undefined );
  				if ( data !== undefined ) {
  					return data;
  				}
  
  				// We tried really hard, but the data doesn't exist.
  				return;
  			}
  
  			// Set the data...
c5169e0e   Renato De Donato   a new hope
3854
  			this.each(function() {
74249687   Luigi Serra   Cross browser con...
3855
3856
  				// First, attempt to store a copy or reference of any
  				// data that might've been store with a camelCased key.
c5169e0e   Renato De Donato   a new hope
3857
  				var data = data_user.get( this, camelKey );
74249687   Luigi Serra   Cross browser con...
3858
3859
3860
3861
  
  				// For HTML5 data-* attribute interop, we have to
  				// store property names with dashes in a camelCase form.
  				// This might not apply to all properties...*
c5169e0e   Renato De Donato   a new hope
3862
  				data_user.set( this, camelKey, value );
74249687   Luigi Serra   Cross browser con...
3863
3864
3865
3866
  
  				// *... In the case of properties that might _actually_
  				// have dashes, we need to also store a copy of that
  				// unchanged property.
c5169e0e   Renato De Donato   a new hope
3867
3868
  				if ( key.indexOf("-") !== -1 && data !== undefined ) {
  					data_user.set( this, key, value );
74249687   Luigi Serra   Cross browser con...
3869
  				}
c5169e0e   Renato De Donato   a new hope
3870
  			});
74249687   Luigi Serra   Cross browser con...
3871
3872
3873
3874
  		}, null, value, arguments.length > 1, null, true );
  	},
  
  	removeData: function( key ) {
c5169e0e   Renato De Donato   a new hope
3875
3876
3877
  		return this.each(function() {
  			data_user.remove( this, key );
  		});
74249687   Luigi Serra   Cross browser con...
3878
  	}
c5169e0e   Renato De Donato   a new hope
3879
  });
74249687   Luigi Serra   Cross browser con...
3880
3881
  
  
c5169e0e   Renato De Donato   a new hope
3882
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
3883
3884
3885
3886
3887
  	queue: function( elem, type, data ) {
  		var queue;
  
  		if ( elem ) {
  			type = ( type || "fx" ) + "queue";
c5169e0e   Renato De Donato   a new hope
3888
  			queue = data_priv.get( elem, type );
74249687   Luigi Serra   Cross browser con...
3889
3890
3891
3892
  
  			// Speed up dequeue by getting out quickly if this is just a lookup
  			if ( data ) {
  				if ( !queue || jQuery.isArray( data ) ) {
c5169e0e   Renato De Donato   a new hope
3893
  					queue = data_priv.access( elem, type, jQuery.makeArray(data) );
74249687   Luigi Serra   Cross browser con...
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
  				} else {
  					queue.push( data );
  				}
  			}
  			return queue || [];
  		}
  	},
  
  	dequeue: function( elem, type ) {
  		type = type || "fx";
  
  		var queue = jQuery.queue( elem, type ),
  			startLength = queue.length,
  			fn = queue.shift(),
  			hooks = jQuery._queueHooks( elem, type ),
  			next = function() {
  				jQuery.dequeue( elem, type );
  			};
  
  		// If the fx queue is dequeued, always remove the progress sentinel
  		if ( fn === "inprogress" ) {
  			fn = queue.shift();
  			startLength--;
  		}
  
  		if ( fn ) {
  
  			// Add a progress sentinel to prevent the fx queue from being
  			// automatically dequeued
  			if ( type === "fx" ) {
  				queue.unshift( "inprogress" );
  			}
  
  			// Clear up the last queue stop function
  			delete hooks.stop;
  			fn.call( elem, next, hooks );
  		}
  
  		if ( !startLength && hooks ) {
  			hooks.empty.fire();
  		}
  	},
  
  	// Not public - generate a queueHooks object, or return the current one
  	_queueHooks: function( elem, type ) {
  		var key = type + "queueHooks";
c5169e0e   Renato De Donato   a new hope
3940
3941
3942
3943
3944
  		return data_priv.get( elem, key ) || data_priv.access( elem, key, {
  			empty: jQuery.Callbacks("once memory").add(function() {
  				data_priv.remove( elem, [ type + "queue", key ] );
  			})
  		});
74249687   Luigi Serra   Cross browser con...
3945
  	}
c5169e0e   Renato De Donato   a new hope
3946
  });
74249687   Luigi Serra   Cross browser con...
3947
  
c5169e0e   Renato De Donato   a new hope
3948
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
  	queue: function( type, data ) {
  		var setter = 2;
  
  		if ( typeof type !== "string" ) {
  			data = type;
  			type = "fx";
  			setter--;
  		}
  
  		if ( arguments.length < setter ) {
c5169e0e   Renato De Donato   a new hope
3959
  			return jQuery.queue( this[0], type );
74249687   Luigi Serra   Cross browser con...
3960
3961
3962
3963
  		}
  
  		return data === undefined ?
  			this :
c5169e0e   Renato De Donato   a new hope
3964
  			this.each(function() {
74249687   Luigi Serra   Cross browser con...
3965
3966
3967
3968
3969
  				var queue = jQuery.queue( this, type, data );
  
  				// Ensure a hooks for this queue
  				jQuery._queueHooks( this, type );
  
c5169e0e   Renato De Donato   a new hope
3970
  				if ( type === "fx" && queue[0] !== "inprogress" ) {
74249687   Luigi Serra   Cross browser con...
3971
3972
  					jQuery.dequeue( this, type );
  				}
c5169e0e   Renato De Donato   a new hope
3973
  			});
74249687   Luigi Serra   Cross browser con...
3974
3975
  	},
  	dequeue: function( type ) {
c5169e0e   Renato De Donato   a new hope
3976
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
3977
  			jQuery.dequeue( this, type );
c5169e0e   Renato De Donato   a new hope
3978
  		});
74249687   Luigi Serra   Cross browser con...
3979
3980
3981
3982
  	},
  	clearQueue: function( type ) {
  		return this.queue( type || "fx", [] );
  	},
74249687   Luigi Serra   Cross browser con...
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
  	// Get a promise resolved when queues of a certain type
  	// are emptied (fx is the type by default)
  	promise: function( type, obj ) {
  		var tmp,
  			count = 1,
  			defer = jQuery.Deferred(),
  			elements = this,
  			i = this.length,
  			resolve = function() {
  				if ( !( --count ) ) {
  					defer.resolveWith( elements, [ elements ] );
  				}
  			};
  
  		if ( typeof type !== "string" ) {
  			obj = type;
  			type = undefined;
  		}
  		type = type || "fx";
  
  		while ( i-- ) {
c5169e0e   Renato De Donato   a new hope
4004
  			tmp = data_priv.get( elements[ i ], type + "queueHooks" );
74249687   Luigi Serra   Cross browser con...
4005
4006
4007
4008
4009
4010
4011
4012
  			if ( tmp && tmp.empty ) {
  				count++;
  				tmp.empty.add( resolve );
  			}
  		}
  		resolve();
  		return defer.promise( obj );
  	}
c5169e0e   Renato De Donato   a new hope
4013
4014
  });
  var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
74249687   Luigi Serra   Cross browser con...
4015
4016
4017
4018
  
  var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
  
  var isHidden = function( elem, el ) {
74249687   Luigi Serra   Cross browser con...
4019
4020
4021
  		// isHidden might be called from jQuery#filter function;
  		// in that case, element will be second argument
  		elem = el || elem;
c5169e0e   Renato De Donato   a new hope
4022
  		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
74249687   Luigi Serra   Cross browser con...
4023
4024
  	};
  
c5169e0e   Renato De Donato   a new hope
4025
  var rcheckableType = (/^(?:checkbox|radio)$/i);
74249687   Luigi Serra   Cross browser con...
4026
4027
  
  
74249687   Luigi Serra   Cross browser con...
4028
  
c5169e0e   Renato De Donato   a new hope
4029
  (function() {
74249687   Luigi Serra   Cross browser con...
4030
4031
4032
4033
  	var fragment = document.createDocumentFragment(),
  		div = fragment.appendChild( document.createElement( "div" ) ),
  		input = document.createElement( "input" );
  
c5169e0e   Renato De Donato   a new hope
4034
  	// Support: Safari<=5.1
74249687   Luigi Serra   Cross browser con...
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
  	// Check state lost if the name is set (#11217)
  	// Support: Windows Web Apps (WWA)
  	// `name` and `type` must use .setAttribute for WWA (#14901)
  	input.setAttribute( "type", "radio" );
  	input.setAttribute( "checked", "checked" );
  	input.setAttribute( "name", "t" );
  
  	div.appendChild( input );
  
  	// Support: Safari<=5.1, Android<4.2
  	// Older WebKit doesn't clone checked state correctly in fragments
  	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
  
  	// Support: IE<=11+
  	// Make sure textarea (and checkbox) defaultValue is properly cloned
  	div.innerHTML = "<textarea>x</textarea>";
  	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
c5169e0e   Renato De Donato   a new hope
4052
4053
4054
4055
4056
4057
  })();
  var strundefined = typeof undefined;
  
  
  
  support.focusinBubbles = "onfocusin" in window;
74249687   Luigi Serra   Cross browser con...
4058
4059
4060
4061
  
  
  var
  	rkeyEvent = /^key/,
c5169e0e   Renato De Donato   a new hope
4062
4063
4064
  	rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
  	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
  	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
74249687   Luigi Serra   Cross browser con...
4065
4066
4067
4068
4069
4070
4071
4072
4073
  
  function returnTrue() {
  	return true;
  }
  
  function returnFalse() {
  	return false;
  }
  
74249687   Luigi Serra   Cross browser con...
4074
4075
4076
4077
4078
4079
  function safeActiveElement() {
  	try {
  		return document.activeElement;
  	} catch ( err ) { }
  }
  
74249687   Luigi Serra   Cross browser con...
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
  /*
   * Helper functions for managing events -- not part of the public interface.
   * Props to Dean Edwards' addEvent library for many of the ideas.
   */
  jQuery.event = {
  
  	global: {},
  
  	add: function( elem, types, handler, data, selector ) {
  
  		var handleObjIn, eventHandle, tmp,
  			events, t, handleObj,
  			special, handlers, type, namespaces, origType,
c5169e0e   Renato De Donato   a new hope
4093
  			elemData = data_priv.get( elem );
74249687   Luigi Serra   Cross browser con...
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
  
  		// Don't attach events to noData or text/comment nodes (but allow plain objects)
  		if ( !elemData ) {
  			return;
  		}
  
  		// Caller can pass in an object of custom data in lieu of the handler
  		if ( handler.handler ) {
  			handleObjIn = handler;
  			handler = handleObjIn.handler;
  			selector = handleObjIn.selector;
  		}
  
  		// Make sure that the handler has a unique ID, used to find/remove it later
  		if ( !handler.guid ) {
  			handler.guid = jQuery.guid++;
  		}
  
  		// Init the element's event structure and main handler, if this is the first
c5169e0e   Renato De Donato   a new hope
4113
  		if ( !(events = elemData.events) ) {
74249687   Luigi Serra   Cross browser con...
4114
4115
  			events = elemData.events = {};
  		}
c5169e0e   Renato De Donato   a new hope
4116
  		if ( !(eventHandle = elemData.handle) ) {
74249687   Luigi Serra   Cross browser con...
4117
  			eventHandle = elemData.handle = function( e ) {
74249687   Luigi Serra   Cross browser con...
4118
4119
  				// Discard the second event of a jQuery.event.trigger() and
  				// when an event is called after a page has unloaded
c5169e0e   Renato De Donato   a new hope
4120
  				return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
74249687   Luigi Serra   Cross browser con...
4121
4122
4123
4124
4125
4126
4127
4128
  					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
  			};
  		}
  
  		// Handle multiple events separated by a space
  		types = ( types || "" ).match( rnotwhite ) || [ "" ];
  		t = types.length;
  		while ( t-- ) {
c5169e0e   Renato De Donato   a new hope
4129
4130
4131
  			tmp = rtypenamespace.exec( types[t] ) || [];
  			type = origType = tmp[1];
  			namespaces = ( tmp[2] || "" ).split( "." ).sort();
74249687   Luigi Serra   Cross browser con...
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
  
  			// There *must* be a type, no attaching namespace-only handlers
  			if ( !type ) {
  				continue;
  			}
  
  			// If event changes its type, use the special event handlers for the changed type
  			special = jQuery.event.special[ type ] || {};
  
  			// If selector defined, determine special event api type, otherwise given type
  			type = ( selector ? special.delegateType : special.bindType ) || type;
  
  			// Update special based on newly reset type
  			special = jQuery.event.special[ type ] || {};
  
  			// handleObj is passed to all event handlers
c5169e0e   Renato De Donato   a new hope
4148
  			handleObj = jQuery.extend({
74249687   Luigi Serra   Cross browser con...
4149
4150
4151
4152
4153
4154
4155
  				type: type,
  				origType: origType,
  				data: data,
  				handler: handler,
  				guid: handler.guid,
  				selector: selector,
  				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
c5169e0e   Renato De Donato   a new hope
4156
  				namespace: namespaces.join(".")
74249687   Luigi Serra   Cross browser con...
4157
4158
4159
  			}, handleObjIn );
  
  			// Init the event handler queue if we're the first
c5169e0e   Renato De Donato   a new hope
4160
  			if ( !(handlers = events[ type ]) ) {
74249687   Luigi Serra   Cross browser con...
4161
4162
4163
4164
  				handlers = events[ type ] = [];
  				handlers.delegateCount = 0;
  
  				// Only use addEventListener if the special events handler returns false
c5169e0e   Renato De Donato   a new hope
4165
  				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
74249687   Luigi Serra   Cross browser con...
4166
  					if ( elem.addEventListener ) {
c5169e0e   Renato De Donato   a new hope
4167
  						elem.addEventListener( type, eventHandle, false );
74249687   Luigi Serra   Cross browser con...
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
  					}
  				}
  			}
  
  			if ( special.add ) {
  				special.add.call( elem, handleObj );
  
  				if ( !handleObj.handler.guid ) {
  					handleObj.handler.guid = handler.guid;
  				}
  			}
  
  			// Add to the element's handler list, delegates in front
  			if ( selector ) {
  				handlers.splice( handlers.delegateCount++, 0, handleObj );
  			} else {
  				handlers.push( handleObj );
  			}
  
  			// Keep track of which events have ever been used, for event optimization
  			jQuery.event.global[ type ] = true;
  		}
  
  	},
  
  	// Detach an event or set of events from an element
  	remove: function( elem, types, handler, selector, mappedTypes ) {
  
  		var j, origCount, tmp,
  			events, t, handleObj,
  			special, handlers, type, namespaces, origType,
c5169e0e   Renato De Donato   a new hope
4199
  			elemData = data_priv.hasData( elem ) && data_priv.get( elem );
74249687   Luigi Serra   Cross browser con...
4200
  
c5169e0e   Renato De Donato   a new hope
4201
  		if ( !elemData || !(events = elemData.events) ) {
74249687   Luigi Serra   Cross browser con...
4202
4203
4204
4205
4206
4207
4208
  			return;
  		}
  
  		// Once for each type.namespace in types; type may be omitted
  		types = ( types || "" ).match( rnotwhite ) || [ "" ];
  		t = types.length;
  		while ( t-- ) {
c5169e0e   Renato De Donato   a new hope
4209
4210
4211
  			tmp = rtypenamespace.exec( types[t] ) || [];
  			type = origType = tmp[1];
  			namespaces = ( tmp[2] || "" ).split( "." ).sort();
74249687   Luigi Serra   Cross browser con...
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
  
  			// Unbind all events (on this namespace, if provided) for the element
  			if ( !type ) {
  				for ( type in events ) {
  					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
  				}
  				continue;
  			}
  
  			special = jQuery.event.special[ type ] || {};
  			type = ( selector ? special.delegateType : special.bindType ) || type;
  			handlers = events[ type ] || [];
c5169e0e   Renato De Donato   a new hope
4224
  			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
74249687   Luigi Serra   Cross browser con...
4225
4226
4227
4228
4229
4230
4231
4232
4233
  
  			// Remove matching events
  			origCount = j = handlers.length;
  			while ( j-- ) {
  				handleObj = handlers[ j ];
  
  				if ( ( mappedTypes || origType === handleObj.origType ) &&
  					( !handler || handler.guid === handleObj.guid ) &&
  					( !tmp || tmp.test( handleObj.namespace ) ) &&
c5169e0e   Renato De Donato   a new hope
4234
  					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
74249687   Luigi Serra   Cross browser con...
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
  					handlers.splice( j, 1 );
  
  					if ( handleObj.selector ) {
  						handlers.delegateCount--;
  					}
  					if ( special.remove ) {
  						special.remove.call( elem, handleObj );
  					}
  				}
  			}
  
  			// Remove generic event handler if we removed something and no more handlers exist
  			// (avoids potential for endless recursion during removal of special event handlers)
  			if ( origCount && !handlers.length ) {
c5169e0e   Renato De Donato   a new hope
4249
  				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
74249687   Luigi Serra   Cross browser con...
4250
4251
4252
4253
4254
4255
4256
  					jQuery.removeEvent( elem, type, elemData.handle );
  				}
  
  				delete events[ type ];
  			}
  		}
  
c5169e0e   Renato De Donato   a new hope
4257
  		// Remove the expando if it's no longer used
74249687   Luigi Serra   Cross browser con...
4258
  		if ( jQuery.isEmptyObject( events ) ) {
c5169e0e   Renato De Donato   a new hope
4259
4260
  			delete elemData.handle;
  			data_priv.remove( elem, "events" );
74249687   Luigi Serra   Cross browser con...
4261
4262
4263
  		}
  	},
  
c5169e0e   Renato De Donato   a new hope
4264
  	trigger: function( event, data, elem, onlyHandlers ) {
74249687   Luigi Serra   Cross browser con...
4265
  
c5169e0e   Renato De Donato   a new hope
4266
4267
4268
4269
  		var i, cur, tmp, bubbleType, ontype, handle, special,
  			eventPath = [ elem || document ],
  			type = hasOwn.call( event, "type" ) ? event.type : event,
  			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
74249687   Luigi Serra   Cross browser con...
4270
  
c5169e0e   Renato De Donato   a new hope
4271
  		cur = tmp = elem = elem || document;
74249687   Luigi Serra   Cross browser con...
4272
  
c5169e0e   Renato De Donato   a new hope
4273
4274
4275
4276
  		// Don't do events on text and comment nodes
  		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
  			return;
  		}
74249687   Luigi Serra   Cross browser con...
4277
  
c5169e0e   Renato De Donato   a new hope
4278
4279
  		// focus/blur morphs to focusin/out; ensure we're not firing them right now
  		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
74249687   Luigi Serra   Cross browser con...
4280
4281
4282
  			return;
  		}
  
c5169e0e   Renato De Donato   a new hope
4283
4284
4285
4286
4287
4288
4289
  		if ( type.indexOf(".") >= 0 ) {
  			// Namespaced trigger; create a regexp to match event type in handle()
  			namespaces = type.split(".");
  			type = namespaces.shift();
  			namespaces.sort();
  		}
  		ontype = type.indexOf(":") < 0 && "on" + type;
74249687   Luigi Serra   Cross browser con...
4290
  
c5169e0e   Renato De Donato   a new hope
4291
4292
4293
4294
  		// Caller can pass in a jQuery.Event object, Object, or just an event type string
  		event = event[ jQuery.expando ] ?
  			event :
  			new jQuery.Event( type, typeof event === "object" && event );
74249687   Luigi Serra   Cross browser con...
4295
  
c5169e0e   Renato De Donato   a new hope
4296
4297
4298
4299
4300
4301
  		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
  		event.isTrigger = onlyHandlers ? 2 : 3;
  		event.namespace = namespaces.join(".");
  		event.namespace_re = event.namespace ?
  			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
  			null;
74249687   Luigi Serra   Cross browser con...
4302
  
c5169e0e   Renato De Donato   a new hope
4303
4304
4305
4306
4307
  		// Clean up the event in case it is being reused
  		event.result = undefined;
  		if ( !event.target ) {
  			event.target = elem;
  		}
74249687   Luigi Serra   Cross browser con...
4308
  
c5169e0e   Renato De Donato   a new hope
4309
4310
4311
4312
  		// Clone any incoming data and prepend the event, creating the handler arg list
  		data = data == null ?
  			[ event ] :
  			jQuery.makeArray( data, [ event ] );
74249687   Luigi Serra   Cross browser con...
4313
  
c5169e0e   Renato De Donato   a new hope
4314
4315
4316
4317
4318
  		// Allow special events to draw outside the lines
  		special = jQuery.event.special[ type ] || {};
  		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
  			return;
  		}
74249687   Luigi Serra   Cross browser con...
4319
  
c5169e0e   Renato De Donato   a new hope
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
  		// Determine event propagation path in advance, per W3C events spec (#9951)
  		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
  		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
  
  			bubbleType = special.delegateType || type;
  			if ( !rfocusMorph.test( bubbleType + type ) ) {
  				cur = cur.parentNode;
  			}
  			for ( ; cur; cur = cur.parentNode ) {
  				eventPath.push( cur );
  				tmp = cur;
74249687   Luigi Serra   Cross browser con...
4331
  			}
74249687   Luigi Serra   Cross browser con...
4332
  
c5169e0e   Renato De Donato   a new hope
4333
4334
4335
4336
  			// Only add window if we got to document (e.g., not plain obj or detached DOM)
  			if ( tmp === (elem.ownerDocument || document) ) {
  				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
  			}
a1a3bc73   Luigi Serra   graphs updates
4337
  		}
74249687   Luigi Serra   Cross browser con...
4338
  
c5169e0e   Renato De Donato   a new hope
4339
4340
4341
  		// Fire handlers on the event path
  		i = 0;
  		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
74249687   Luigi Serra   Cross browser con...
4342
  
c5169e0e   Renato De Donato   a new hope
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
  			event.type = i > 1 ?
  				bubbleType :
  				special.bindType || type;
  
  			// jQuery handler
  			handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
  			if ( handle ) {
  				handle.apply( cur, data );
  			}
  
  			// Native handler
  			handle = ontype && cur[ ontype ];
  			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
  				event.result = handle.apply( cur, data );
  				if ( event.result === false ) {
  					event.preventDefault();
  				}
  			}
  		}
  		event.type = type;
  
  		// If nobody prevented the default action, do it now
  		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
  
  			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
  				jQuery.acceptData( elem ) ) {
  
  				// Call a native DOM method on the target with the same name name as the event.
  				// Don't do default actions on window, that's where global variables be (#6170)
  				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
  
  					// Don't re-trigger an onFOO event when we call its FOO() method
  					tmp = elem[ ontype ];
  
  					if ( tmp ) {
  						elem[ ontype ] = null;
  					}
  
  					// Prevent re-triggering of the same event, since we already bubbled it above
  					jQuery.event.triggered = type;
  					elem[ type ]();
  					jQuery.event.triggered = undefined;
  
  					if ( tmp ) {
  						elem[ ontype ] = tmp;
  					}
  				}
  			}
  		}
  
  		return event.result;
  	},
  
  	dispatch: function( event ) {
  
  		// Make a writable jQuery.Event from the native event object
  		event = jQuery.event.fix( event );
  
  		var i, j, ret, matched, handleObj,
  			handlerQueue = [],
  			args = slice.call( arguments ),
  			handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
  			special = jQuery.event.special[ event.type ] || {};
  
  		// Use the fix-ed jQuery.Event rather than the (read-only) native event
  		args[0] = event;
  		event.delegateTarget = this;
  
  		// Call the preDispatch hook for the mapped type, and let it bail if desired
  		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
  			return;
  		}
  
  		// Determine handlers
  		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
  
  		// Run delegates first; they may want to stop propagation beneath us
  		i = 0;
  		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
  			event.currentTarget = matched.elem;
  
  			j = 0;
  			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
  
  				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
  				// a subset or equal to those in the bound event (both can have no namespace).
  				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
  
  					event.handleObj = handleObj;
  					event.data = handleObj.data;
  
  					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
  							.apply( matched.elem, args );
  
  					if ( ret !== undefined ) {
  						if ( (event.result = ret) === false ) {
  							event.preventDefault();
  							event.stopPropagation();
  						}
  					}
  				}
  			}
  		}
  
  		// Call the postDispatch hook for the mapped type
  		if ( special.postDispatch ) {
  			special.postDispatch.call( this, event );
  		}
  
  		return event.result;
  	},
  
  	handlers: function( event, handlers ) {
  		var i, matches, sel, handleObj,
  			handlerQueue = [],
  			delegateCount = handlers.delegateCount,
  			cur = event.target;
74249687   Luigi Serra   Cross browser con...
4460
  
74249687   Luigi Serra   Cross browser con...
4461
4462
  		// Find delegate handlers
  		// Black-hole SVG <use> instance trees (#13180)
c5169e0e   Renato De Donato   a new hope
4463
4464
  		// Avoid non-left-click bubbling in Firefox (#3861)
  		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
74249687   Luigi Serra   Cross browser con...
4465
4466
4467
  
  			for ( ; cur !== this; cur = cur.parentNode || this ) {
  
74249687   Luigi Serra   Cross browser con...
4468
  				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
c5169e0e   Renato De Donato   a new hope
4469
  				if ( cur.disabled !== true || event.type !== "click" ) {
74249687   Luigi Serra   Cross browser con...
4470
4471
4472
4473
4474
4475
4476
4477
4478
  					matches = [];
  					for ( i = 0; i < delegateCount; i++ ) {
  						handleObj = handlers[ i ];
  
  						// Don't conflict with Object.prototype properties (#13203)
  						sel = handleObj.selector + " ";
  
  						if ( matches[ sel ] === undefined ) {
  							matches[ sel ] = handleObj.needsContext ?
c5169e0e   Renato De Donato   a new hope
4479
  								jQuery( sel, this ).index( cur ) >= 0 :
74249687   Luigi Serra   Cross browser con...
4480
4481
4482
4483
4484
4485
4486
  								jQuery.find( sel, this, null, [ cur ] ).length;
  						}
  						if ( matches[ sel ] ) {
  							matches.push( handleObj );
  						}
  					}
  					if ( matches.length ) {
c5169e0e   Renato De Donato   a new hope
4487
  						handlerQueue.push({ elem: cur, handlers: matches });
74249687   Luigi Serra   Cross browser con...
4488
4489
4490
4491
4492
4493
4494
  					}
  				}
  			}
  		}
  
  		// Add the remaining (directly-bound) handlers
  		if ( delegateCount < handlers.length ) {
c5169e0e   Renato De Donato   a new hope
4495
  			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
74249687   Luigi Serra   Cross browser con...
4496
4497
4498
4499
4500
4501
  		}
  
  		return handlerQueue;
  	},
  
  	// Includes some event props shared by KeyEvent and MouseEvent
c5169e0e   Renato De Donato   a new hope
4502
  	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
74249687   Luigi Serra   Cross browser con...
4503
4504
4505
4506
  
  	fixHooks: {},
  
  	keyHooks: {
c5169e0e   Renato De Donato   a new hope
4507
  		props: "char charCode key keyCode".split(" "),
74249687   Luigi Serra   Cross browser con...
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
  		filter: function( event, original ) {
  
  			// Add which for key events
  			if ( event.which == null ) {
  				event.which = original.charCode != null ? original.charCode : original.keyCode;
  			}
  
  			return event;
  		}
  	},
  
  	mouseHooks: {
c5169e0e   Renato De Donato   a new hope
4520
  		props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
74249687   Luigi Serra   Cross browser con...
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
  		filter: function( event, original ) {
  			var eventDoc, doc, body,
  				button = original.button;
  
  			// Calculate pageX/Y if missing and clientX/Y available
  			if ( event.pageX == null && original.clientX != null ) {
  				eventDoc = event.target.ownerDocument || document;
  				doc = eventDoc.documentElement;
  				body = eventDoc.body;
  
c5169e0e   Renato De Donato   a new hope
4531
4532
  				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
  				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
74249687   Luigi Serra   Cross browser con...
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
  			}
  
  			// Add which for click: 1 === left; 2 === middle; 3 === right
  			// Note: button is not normalized, so don't use it
  			if ( !event.which && button !== undefined ) {
  				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
  			}
  
  			return event;
  		}
  	},
  
  	fix: function( event ) {
  		if ( event[ jQuery.expando ] ) {
  			return event;
  		}
  
  		// Create a writable copy of the event object and normalize some properties
  		var i, prop, copy,
  			type = event.type,
  			originalEvent = event,
  			fixHook = this.fixHooks[ type ];
  
  		if ( !fixHook ) {
  			this.fixHooks[ type ] = fixHook =
  				rmouseEvent.test( type ) ? this.mouseHooks :
  				rkeyEvent.test( type ) ? this.keyHooks :
  				{};
  		}
  		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
  
  		event = new jQuery.Event( originalEvent );
  
  		i = copy.length;
  		while ( i-- ) {
  			prop = copy[ i ];
  			event[ prop ] = originalEvent[ prop ];
  		}
  
  		// Support: Cordova 2.5 (WebKit) (#13255)
  		// All events should have a target; Cordova deviceready doesn't
  		if ( !event.target ) {
  			event.target = document;
  		}
  
  		// Support: Safari 6.0+, Chrome<28
  		// Target should not be a text node (#504, #13143)
  		if ( event.target.nodeType === 3 ) {
  			event.target = event.target.parentNode;
  		}
  
  		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
  	},
  
  	special: {
  		load: {
74249687   Luigi Serra   Cross browser con...
4589
4590
4591
4592
  			// Prevent triggered image.load events from bubbling to window.load
  			noBubble: true
  		},
  		focus: {
74249687   Luigi Serra   Cross browser con...
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
  			// Fire native event if possible so blur/focus sequence is correct
  			trigger: function() {
  				if ( this !== safeActiveElement() && this.focus ) {
  					this.focus();
  					return false;
  				}
  			},
  			delegateType: "focusin"
  		},
  		blur: {
  			trigger: function() {
  				if ( this === safeActiveElement() && this.blur ) {
  					this.blur();
  					return false;
  				}
  			},
  			delegateType: "focusout"
  		},
  		click: {
74249687   Luigi Serra   Cross browser con...
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
  			// For checkbox, fire native event so checked state will be right
  			trigger: function() {
  				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
  					this.click();
  					return false;
  				}
  			},
  
  			// For cross-browser consistency, don't fire native .click() on links
  			_default: function( event ) {
  				return jQuery.nodeName( event.target, "a" );
  			}
  		},
  
  		beforeunload: {
  			postDispatch: function( event ) {
  
  				// Support: Firefox 20+
  				// Firefox doesn't alert if the returnValue field is not set.
  				if ( event.result !== undefined && event.originalEvent ) {
  					event.originalEvent.returnValue = event.result;
  				}
  			}
  		}
c5169e0e   Renato De Donato   a new hope
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
  	},
  
  	simulate: function( type, elem, event, bubble ) {
  		// Piggyback on a donor event to simulate a different one.
  		// Fake originalEvent to avoid donor's stopPropagation, but if the
  		// simulated event prevents default then we do the same on the donor.
  		var e = jQuery.extend(
  			new jQuery.Event(),
  			event,
  			{
  				type: type,
  				isSimulated: true,
  				originalEvent: {}
  			}
  		);
  		if ( bubble ) {
  			jQuery.event.trigger( e, null, elem );
  		} else {
  			jQuery.event.dispatch.call( elem, e );
  		}
  		if ( e.isDefaultPrevented() ) {
  			event.preventDefault();
  		}
74249687   Luigi Serra   Cross browser con...
4659
4660
4661
4662
  	}
  };
  
  jQuery.removeEvent = function( elem, type, handle ) {
74249687   Luigi Serra   Cross browser con...
4663
  	if ( elem.removeEventListener ) {
c5169e0e   Renato De Donato   a new hope
4664
  		elem.removeEventListener( type, handle, false );
74249687   Luigi Serra   Cross browser con...
4665
4666
4667
4668
  	}
  };
  
  jQuery.Event = function( src, props ) {
74249687   Luigi Serra   Cross browser con...
4669
  	// Allow instantiation without the 'new' keyword
c5169e0e   Renato De Donato   a new hope
4670
  	if ( !(this instanceof jQuery.Event) ) {
74249687   Luigi Serra   Cross browser con...
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
  		return new jQuery.Event( src, props );
  	}
  
  	// Event object
  	if ( src && src.type ) {
  		this.originalEvent = src;
  		this.type = src.type;
  
  		// Events bubbling up the document may have been marked as prevented
  		// by a handler lower down the tree; reflect the correct value.
  		this.isDefaultPrevented = src.defaultPrevented ||
  				src.defaultPrevented === undefined &&
74249687   Luigi Serra   Cross browser con...
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
  				// Support: Android<4.0
  				src.returnValue === false ?
  			returnTrue :
  			returnFalse;
  
  	// Event type
  	} else {
  		this.type = src;
  	}
  
  	// Put explicitly provided properties onto the event object
  	if ( props ) {
  		jQuery.extend( this, props );
  	}
  
  	// Create a timestamp if incoming event doesn't have one
  	this.timeStamp = src && src.timeStamp || jQuery.now();
  
  	// Mark it as fixed
  	this[ jQuery.expando ] = true;
  };
  
  // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
  // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
  jQuery.Event.prototype = {
74249687   Luigi Serra   Cross browser con...
4708
4709
4710
4711
4712
4713
4714
4715
4716
  	isDefaultPrevented: returnFalse,
  	isPropagationStopped: returnFalse,
  	isImmediatePropagationStopped: returnFalse,
  
  	preventDefault: function() {
  		var e = this.originalEvent;
  
  		this.isDefaultPrevented = returnTrue;
  
c5169e0e   Renato De Donato   a new hope
4717
  		if ( e && e.preventDefault ) {
74249687   Luigi Serra   Cross browser con...
4718
4719
4720
4721
4722
4723
4724
4725
  			e.preventDefault();
  		}
  	},
  	stopPropagation: function() {
  		var e = this.originalEvent;
  
  		this.isPropagationStopped = returnTrue;
  
c5169e0e   Renato De Donato   a new hope
4726
  		if ( e && e.stopPropagation ) {
74249687   Luigi Serra   Cross browser con...
4727
4728
4729
4730
4731
4732
4733
4734
  			e.stopPropagation();
  		}
  	},
  	stopImmediatePropagation: function() {
  		var e = this.originalEvent;
  
  		this.isImmediatePropagationStopped = returnTrue;
  
c5169e0e   Renato De Donato   a new hope
4735
  		if ( e && e.stopImmediatePropagation ) {
74249687   Luigi Serra   Cross browser con...
4736
4737
4738
4739
4740
4741
4742
4743
  			e.stopImmediatePropagation();
  		}
  
  		this.stopPropagation();
  	}
  };
  
  // Create mouseenter/leave events using mouseover/out and event-time checks
c5169e0e   Renato De Donato   a new hope
4744
4745
  // Support: Chrome 15+
  jQuery.each({
74249687   Luigi Serra   Cross browser con...
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
  	mouseenter: "mouseover",
  	mouseleave: "mouseout",
  	pointerenter: "pointerover",
  	pointerleave: "pointerout"
  }, function( orig, fix ) {
  	jQuery.event.special[ orig ] = {
  		delegateType: fix,
  		bindType: fix,
  
  		handle: function( event ) {
  			var ret,
  				target = this,
  				related = event.relatedTarget,
  				handleObj = event.handleObj;
  
c5169e0e   Renato De Donato   a new hope
4761
  			// For mousenter/leave call the handler if related is outside the target.
74249687   Luigi Serra   Cross browser con...
4762
  			// NB: No relatedTarget if the mouse left/entered the browser window
c5169e0e   Renato De Donato   a new hope
4763
  			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
74249687   Luigi Serra   Cross browser con...
4764
4765
4766
4767
4768
4769
4770
  				event.type = handleObj.origType;
  				ret = handleObj.handler.apply( this, arguments );
  				event.type = fix;
  			}
  			return ret;
  		}
  	};
c5169e0e   Renato De Donato   a new hope
4771
  });
74249687   Luigi Serra   Cross browser con...
4772
  
c5169e0e   Renato De Donato   a new hope
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
  // Support: Firefox, Chrome, Safari
  // Create "bubbling" focus and blur events
  if ( !support.focusinBubbles ) {
  	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
  
  		// Attach a single capturing handler on the document while someone wants focusin/focusout
  		var handler = function( event ) {
  				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
  			};
  
  		jQuery.event.special[ fix ] = {
  			setup: function() {
  				var doc = this.ownerDocument || this,
  					attaches = data_priv.access( doc, fix );
  
  				if ( !attaches ) {
  					doc.addEventListener( orig, handler, true );
  				}
  				data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
  			},
  			teardown: function() {
  				var doc = this.ownerDocument || this,
  					attaches = data_priv.access( doc, fix ) - 1;
  
  				if ( !attaches ) {
  					doc.removeEventListener( orig, handler, true );
  					data_priv.remove( doc, fix );
  
  				} else {
  					data_priv.access( doc, fix, attaches );
  				}
  			}
  		};
  	});
  }
  
  jQuery.fn.extend({
  
  	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
  		var origFn, type;
  
  		// Types can be a map of types/handlers
  		if ( typeof types === "object" ) {
  			// ( types-Object, selector, data )
  			if ( typeof selector !== "string" ) {
  				// ( types-Object, data )
  				data = data || selector;
  				selector = undefined;
  			}
  			for ( type in types ) {
  				this.on( type, selector, data, types[ type ], one );
  			}
  			return this;
  		}
  
  		if ( data == null && fn == null ) {
  			// ( types, fn )
  			fn = selector;
  			data = selector = undefined;
  		} else if ( fn == null ) {
  			if ( typeof selector === "string" ) {
  				// ( types, selector, fn )
  				fn = data;
  				data = undefined;
  			} else {
  				// ( types, data, fn )
  				fn = data;
  				data = selector;
  				selector = undefined;
  			}
  		}
  		if ( fn === false ) {
  			fn = returnFalse;
  		} else if ( !fn ) {
  			return this;
  		}
  
  		if ( one === 1 ) {
  			origFn = fn;
  			fn = function( event ) {
  				// Can use an empty set, since event contains the info
  				jQuery().off( event );
  				return origFn.apply( this, arguments );
  			};
  			// Use same guid so caller can remove using origFn
  			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
  		}
  		return this.each( function() {
  			jQuery.event.add( this, types, fn, data, selector );
  		});
74249687   Luigi Serra   Cross browser con...
4863
4864
  	},
  	one: function( types, selector, data, fn ) {
c5169e0e   Renato De Donato   a new hope
4865
  		return this.on( types, selector, data, fn, 1 );
74249687   Luigi Serra   Cross browser con...
4866
4867
4868
4869
  	},
  	off: function( types, selector, fn ) {
  		var handleObj, type;
  		if ( types && types.preventDefault && types.handleObj ) {
74249687   Luigi Serra   Cross browser con...
4870
4871
4872
  			// ( event )  dispatched jQuery.Event
  			handleObj = types.handleObj;
  			jQuery( types.delegateTarget ).off(
c5169e0e   Renato De Donato   a new hope
4873
  				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
74249687   Luigi Serra   Cross browser con...
4874
4875
4876
4877
4878
4879
  				handleObj.selector,
  				handleObj.handler
  			);
  			return this;
  		}
  		if ( typeof types === "object" ) {
74249687   Luigi Serra   Cross browser con...
4880
4881
4882
4883
4884
4885
4886
  			// ( types-object [, selector] )
  			for ( type in types ) {
  				this.off( type, selector, types[ type ] );
  			}
  			return this;
  		}
  		if ( selector === false || typeof selector === "function" ) {
74249687   Luigi Serra   Cross browser con...
4887
4888
4889
4890
4891
4892
4893
  			// ( types [, fn] )
  			fn = selector;
  			selector = undefined;
  		}
  		if ( fn === false ) {
  			fn = returnFalse;
  		}
c5169e0e   Renato De Donato   a new hope
4894
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
4895
  			jQuery.event.remove( this, types, fn, selector );
c5169e0e   Renato De Donato   a new hope
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
  		});
  	},
  
  	trigger: function( type, data ) {
  		return this.each(function() {
  			jQuery.event.trigger( type, data, this );
  		});
  	},
  	triggerHandler: function( type, data ) {
  		var elem = this[0];
  		if ( elem ) {
  			return jQuery.event.trigger( type, data, elem, true );
  		}
74249687   Luigi Serra   Cross browser con...
4909
  	}
c5169e0e   Renato De Donato   a new hope
4910
  });
74249687   Luigi Serra   Cross browser con...
4911
4912
4913
  
  
  var
c5169e0e   Renato De Donato   a new hope
4914
4915
4916
4917
  	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
  	rtagName = /<([\w:]+)/,
  	rhtml = /<|&#?\w+;/,
  	rnoInnerhtml = /<(?:script|style|link)/i,
74249687   Luigi Serra   Cross browser con...
4918
4919
  	// checked="checked" or checked
  	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
c5169e0e   Renato De Donato   a new hope
4920
  	rscriptType = /^$|\/(?:java|ecma)script/i,
74249687   Luigi Serra   Cross browser con...
4921
  	rscriptTypeMasked = /^true\/(.*)/,
c5169e0e   Renato De Donato   a new hope
4922
  	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
74249687   Luigi Serra   Cross browser con...
4923
  
c5169e0e   Renato De Donato   a new hope
4924
4925
  	// We have to close these tags to support XHTML (#13200)
  	wrapMap = {
a1a3bc73   Luigi Serra   graphs updates
4926
  
c5169e0e   Renato De Donato   a new hope
4927
4928
  		// Support: IE9
  		option: [ 1, "<select multiple='multiple'>", "</select>" ],
74249687   Luigi Serra   Cross browser con...
4929
  
c5169e0e   Renato De Donato   a new hope
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
  		thead: [ 1, "<table>", "</table>" ],
  		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
  		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
  		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
  
  		_default: [ 0, "", "" ]
  	};
  
  // Support: IE9
  wrapMap.optgroup = wrapMap.option;
  
  wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
  wrapMap.th = wrapMap.td;
  
  // Support: 1.x compatibility
  // Manipulating tables requires a tbody
  function manipulationTarget( elem, content ) {
  	return jQuery.nodeName( elem, "table" ) &&
  		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
  
  		elem.getElementsByTagName("tbody")[0] ||
  			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
  		elem;
74249687   Luigi Serra   Cross browser con...
4953
4954
4955
4956
  }
  
  // Replace/restore the type attribute of script elements for safe DOM manipulation
  function disableScript( elem ) {
c5169e0e   Renato De Donato   a new hope
4957
  	elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
74249687   Luigi Serra   Cross browser con...
4958
4959
4960
4961
4962
4963
4964
4965
  	return elem;
  }
  function restoreScript( elem ) {
  	var match = rscriptTypeMasked.exec( elem.type );
  
  	if ( match ) {
  		elem.type = match[ 1 ];
  	} else {
c5169e0e   Renato De Donato   a new hope
4966
  		elem.removeAttribute("type");
74249687   Luigi Serra   Cross browser con...
4967
4968
4969
4970
4971
  	}
  
  	return elem;
  }
  
c5169e0e   Renato De Donato   a new hope
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
  // Mark scripts as having already been evaluated
  function setGlobalEval( elems, refElements ) {
  	var i = 0,
  		l = elems.length;
  
  	for ( ; i < l; i++ ) {
  		data_priv.set(
  			elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
  		);
  	}
  }
  
74249687   Luigi Serra   Cross browser con...
4984
4985
4986
4987
4988
4989
4990
4991
  function cloneCopyEvent( src, dest ) {
  	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
  
  	if ( dest.nodeType !== 1 ) {
  		return;
  	}
  
  	// 1. Copy private data: events, handlers, etc.
c5169e0e   Renato De Donato   a new hope
4992
4993
4994
  	if ( data_priv.hasData( src ) ) {
  		pdataOld = data_priv.access( src );
  		pdataCur = data_priv.set( dest, pdataOld );
74249687   Luigi Serra   Cross browser con...
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
  		events = pdataOld.events;
  
  		if ( events ) {
  			delete pdataCur.handle;
  			pdataCur.events = {};
  
  			for ( type in events ) {
  				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
  					jQuery.event.add( dest, type, events[ type ][ i ] );
  				}
  			}
  		}
  	}
  
  	// 2. Copy user data
c5169e0e   Renato De Donato   a new hope
5010
5011
  	if ( data_user.hasData( src ) ) {
  		udataOld = data_user.access( src );
74249687   Luigi Serra   Cross browser con...
5012
5013
  		udataCur = jQuery.extend( {}, udataOld );
  
c5169e0e   Renato De Donato   a new hope
5014
  		data_user.set( dest, udataCur );
74249687   Luigi Serra   Cross browser con...
5015
5016
5017
  	}
  }
  
c5169e0e   Renato De Donato   a new hope
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
  function getAll( context, tag ) {
  	var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
  			context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
  			[];
  
  	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
  		jQuery.merge( [ context ], ret ) :
  		ret;
  }
  
74249687   Luigi Serra   Cross browser con...
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
  // Fix IE bugs, see support tests
  function fixInput( src, dest ) {
  	var nodeName = dest.nodeName.toLowerCase();
  
  	// Fails to persist the checked state of a cloned checkbox or radio button.
  	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
  		dest.checked = src.checked;
  
  	// Fails to return the selected option to the default selected state when cloning options
  	} else if ( nodeName === "input" || nodeName === "textarea" ) {
  		dest.defaultValue = src.defaultValue;
  	}
  }
  
c5169e0e   Renato De Donato   a new hope
5042
5043
5044
5045
5046
  jQuery.extend({
  	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
  		var i, l, srcElements, destElements,
  			clone = elem.cloneNode( true ),
  			inPage = jQuery.contains( elem.ownerDocument, elem );
a1a3bc73   Luigi Serra   graphs updates
5047
  
c5169e0e   Renato De Donato   a new hope
5048
5049
5050
  		// Fix IE cloning issues
  		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
  				!jQuery.isXMLDoc( elem ) ) {
a1a3bc73   Luigi Serra   graphs updates
5051
  
c5169e0e   Renato De Donato   a new hope
5052
5053
5054
  			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
  			destElements = getAll( clone );
  			srcElements = getAll( elem );
a1a3bc73   Luigi Serra   graphs updates
5055
  
c5169e0e   Renato De Donato   a new hope
5056
5057
  			for ( i = 0, l = srcElements.length; i < l; i++ ) {
  				fixInput( srcElements[ i ], destElements[ i ] );
a1a3bc73   Luigi Serra   graphs updates
5058
  			}
c5169e0e   Renato De Donato   a new hope
5059
  		}
a1a3bc73   Luigi Serra   graphs updates
5060
  
c5169e0e   Renato De Donato   a new hope
5061
5062
5063
5064
5065
  		// Copy the events from the original to the clone
  		if ( dataAndEvents ) {
  			if ( deepDataAndEvents ) {
  				srcElements = srcElements || getAll( elem );
  				destElements = destElements || getAll( clone );
a1a3bc73   Luigi Serra   graphs updates
5066
  
c5169e0e   Renato De Donato   a new hope
5067
5068
5069
5070
5071
5072
  				for ( i = 0, l = srcElements.length; i < l; i++ ) {
  					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
  				}
  			} else {
  				cloneCopyEvent( elem, clone );
  			}
a1a3bc73   Luigi Serra   graphs updates
5073
5074
  		}
  
c5169e0e   Renato De Donato   a new hope
5075
5076
5077
5078
5079
  		// Preserve script evaluation history
  		destElements = getAll( clone, "script" );
  		if ( destElements.length > 0 ) {
  			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
  		}
a1a3bc73   Luigi Serra   graphs updates
5080
  
c5169e0e   Renato De Donato   a new hope
5081
5082
5083
  		// Return the cloned set
  		return clone;
  	},
a1a3bc73   Luigi Serra   graphs updates
5084
  
c5169e0e   Renato De Donato   a new hope
5085
5086
5087
5088
5089
5090
  	buildFragment: function( elems, context, scripts, selection ) {
  		var elem, tmp, tag, wrap, contains, j,
  			fragment = context.createDocumentFragment(),
  			nodes = [],
  			i = 0,
  			l = elems.length;
a1a3bc73   Luigi Serra   graphs updates
5091
  
c5169e0e   Renato De Donato   a new hope
5092
5093
  		for ( ; i < l; i++ ) {
  			elem = elems[ i ];
a1a3bc73   Luigi Serra   graphs updates
5094
  
c5169e0e   Renato De Donato   a new hope
5095
  			if ( elem || elem === 0 ) {
a1a3bc73   Luigi Serra   graphs updates
5096
  
c5169e0e   Renato De Donato   a new hope
5097
5098
5099
5100
5101
  				// Add nodes directly
  				if ( jQuery.type( elem ) === "object" ) {
  					// Support: QtWebKit, PhantomJS
  					// push.apply(_, arraylike) throws on ancient WebKit
  					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
a1a3bc73   Luigi Serra   graphs updates
5102
  
c5169e0e   Renato De Donato   a new hope
5103
5104
5105
  				// Convert non-html into a text node
  				} else if ( !rhtml.test( elem ) ) {
  					nodes.push( context.createTextNode( elem ) );
a1a3bc73   Luigi Serra   graphs updates
5106
  
c5169e0e   Renato De Donato   a new hope
5107
5108
5109
  				// Convert html into DOM nodes
  				} else {
  					tmp = tmp || fragment.appendChild( context.createElement("div") );
a1a3bc73   Luigi Serra   graphs updates
5110
  
c5169e0e   Renato De Donato   a new hope
5111
5112
5113
5114
  					// Deserialize a standard representation
  					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
  					wrap = wrapMap[ tag ] || wrapMap._default;
  					tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
a1a3bc73   Luigi Serra   graphs updates
5115
  
c5169e0e   Renato De Donato   a new hope
5116
5117
5118
5119
  					// Descend through wrappers to the right content
  					j = wrap[ 0 ];
  					while ( j-- ) {
  						tmp = tmp.lastChild;
a1a3bc73   Luigi Serra   graphs updates
5120
  					}
a1a3bc73   Luigi Serra   graphs updates
5121
  
c5169e0e   Renato De Donato   a new hope
5122
5123
5124
  					// Support: QtWebKit, PhantomJS
  					// push.apply(_, arraylike) throws on ancient WebKit
  					jQuery.merge( nodes, tmp.childNodes );
a1a3bc73   Luigi Serra   graphs updates
5125
  
c5169e0e   Renato De Donato   a new hope
5126
5127
  					// Remember the top-level container
  					tmp = fragment.firstChild;
a1a3bc73   Luigi Serra   graphs updates
5128
  
c5169e0e   Renato De Donato   a new hope
5129
5130
5131
  					// Ensure the created nodes are orphaned (#12392)
  					tmp.textContent = "";
  				}
a1a3bc73   Luigi Serra   graphs updates
5132
  			}
a1a3bc73   Luigi Serra   graphs updates
5133
  		}
a1a3bc73   Luigi Serra   graphs updates
5134
  
c5169e0e   Renato De Donato   a new hope
5135
5136
  		// Remove wrapper from fragment
  		fragment.textContent = "";
a1a3bc73   Luigi Serra   graphs updates
5137
  
c5169e0e   Renato De Donato   a new hope
5138
5139
  		i = 0;
  		while ( (elem = nodes[ i++ ]) ) {
a1a3bc73   Luigi Serra   graphs updates
5140
  
c5169e0e   Renato De Donato   a new hope
5141
5142
5143
5144
5145
  			// #4087 - If origin and destination elements are the same, and this is
  			// that element, do not do anything
  			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
  				continue;
  			}
74249687   Luigi Serra   Cross browser con...
5146
  
c5169e0e   Renato De Donato   a new hope
5147
  			contains = jQuery.contains( elem.ownerDocument, elem );
74249687   Luigi Serra   Cross browser con...
5148
  
c5169e0e   Renato De Donato   a new hope
5149
5150
  			// Append to fragment
  			tmp = getAll( fragment.appendChild( elem ), "script" );
74249687   Luigi Serra   Cross browser con...
5151
  
c5169e0e   Renato De Donato   a new hope
5152
5153
5154
  			// Preserve script evaluation history
  			if ( contains ) {
  				setGlobalEval( tmp );
74249687   Luigi Serra   Cross browser con...
5155
  			}
74249687   Luigi Serra   Cross browser con...
5156
  
c5169e0e   Renato De Donato   a new hope
5157
5158
5159
5160
5161
5162
5163
  			// Capture executables
  			if ( scripts ) {
  				j = 0;
  				while ( (elem = tmp[ j++ ]) ) {
  					if ( rscriptType.test( elem.type || "" ) ) {
  						scripts.push( elem );
  					}
74249687   Luigi Serra   Cross browser con...
5164
  				}
74249687   Luigi Serra   Cross browser con...
5165
5166
5167
  			}
  		}
  
c5169e0e   Renato De Donato   a new hope
5168
  		return fragment;
74249687   Luigi Serra   Cross browser con...
5169
5170
  	},
  
74249687   Luigi Serra   Cross browser con...
5171
  	cleanData: function( elems ) {
c5169e0e   Renato De Donato   a new hope
5172
  		var data, elem, type, key,
74249687   Luigi Serra   Cross browser con...
5173
5174
5175
  			special = jQuery.event.special,
  			i = 0;
  
c5169e0e   Renato De Donato   a new hope
5176
5177
5178
5179
5180
  		for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
  			if ( jQuery.acceptData( elem ) ) {
  				key = elem[ data_priv.expando ];
  
  				if ( key && (data = data_priv.cache[ key ]) ) {
74249687   Luigi Serra   Cross browser con...
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
  					if ( data.events ) {
  						for ( type in data.events ) {
  							if ( special[ type ] ) {
  								jQuery.event.remove( elem, type );
  
  							// This is a shortcut to avoid jQuery.event.remove's overhead
  							} else {
  								jQuery.removeEvent( elem, type, data.handle );
  							}
  						}
  					}
c5169e0e   Renato De Donato   a new hope
5192
5193
5194
5195
  					if ( data_priv.cache[ key ] ) {
  						// Discard any remaining `private` data
  						delete data_priv.cache[ key ];
  					}
74249687   Luigi Serra   Cross browser con...
5196
5197
  				}
  			}
c5169e0e   Renato De Donato   a new hope
5198
5199
  			// Discard any remaining `user` data
  			delete data_user.cache[ elem[ data_user.expando ] ];
74249687   Luigi Serra   Cross browser con...
5200
5201
  		}
  	}
c5169e0e   Renato De Donato   a new hope
5202
  });
74249687   Luigi Serra   Cross browser con...
5203
  
c5169e0e   Renato De Donato   a new hope
5204
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
5205
5206
5207
5208
  	text: function( value ) {
  		return access( this, function( value ) {
  			return value === undefined ?
  				jQuery.text( this ) :
c5169e0e   Renato De Donato   a new hope
5209
  				this.empty().each(function() {
74249687   Luigi Serra   Cross browser con...
5210
5211
5212
  					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  						this.textContent = value;
  					}
c5169e0e   Renato De Donato   a new hope
5213
  				});
74249687   Luigi Serra   Cross browser con...
5214
5215
5216
5217
  		}, null, value, arguments.length );
  	},
  
  	append: function() {
c5169e0e   Renato De Donato   a new hope
5218
  		return this.domManip( arguments, function( elem ) {
74249687   Luigi Serra   Cross browser con...
5219
5220
5221
5222
  			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  				var target = manipulationTarget( this, elem );
  				target.appendChild( elem );
  			}
c5169e0e   Renato De Donato   a new hope
5223
  		});
74249687   Luigi Serra   Cross browser con...
5224
5225
5226
  	},
  
  	prepend: function() {
c5169e0e   Renato De Donato   a new hope
5227
  		return this.domManip( arguments, function( elem ) {
74249687   Luigi Serra   Cross browser con...
5228
5229
5230
5231
  			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  				var target = manipulationTarget( this, elem );
  				target.insertBefore( elem, target.firstChild );
  			}
c5169e0e   Renato De Donato   a new hope
5232
  		});
74249687   Luigi Serra   Cross browser con...
5233
5234
5235
  	},
  
  	before: function() {
c5169e0e   Renato De Donato   a new hope
5236
  		return this.domManip( arguments, function( elem ) {
74249687   Luigi Serra   Cross browser con...
5237
5238
5239
  			if ( this.parentNode ) {
  				this.parentNode.insertBefore( elem, this );
  			}
c5169e0e   Renato De Donato   a new hope
5240
  		});
74249687   Luigi Serra   Cross browser con...
5241
5242
5243
  	},
  
  	after: function() {
c5169e0e   Renato De Donato   a new hope
5244
  		return this.domManip( arguments, function( elem ) {
74249687   Luigi Serra   Cross browser con...
5245
5246
5247
  			if ( this.parentNode ) {
  				this.parentNode.insertBefore( elem, this.nextSibling );
  			}
c5169e0e   Renato De Donato   a new hope
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
  		});
  	},
  
  	remove: function( selector, keepData /* Internal Use Only */ ) {
  		var elem,
  			elems = selector ? jQuery.filter( selector, this ) : this,
  			i = 0;
  
  		for ( ; (elem = elems[i]) != null; i++ ) {
  			if ( !keepData && elem.nodeType === 1 ) {
  				jQuery.cleanData( getAll( elem ) );
  			}
  
  			if ( elem.parentNode ) {
  				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
  					setGlobalEval( getAll( elem, "script" ) );
  				}
  				elem.parentNode.removeChild( elem );
  			}
  		}
  
  		return this;
74249687   Luigi Serra   Cross browser con...
5270
5271
5272
5273
5274
5275
  	},
  
  	empty: function() {
  		var elem,
  			i = 0;
  
c5169e0e   Renato De Donato   a new hope
5276
  		for ( ; (elem = this[i]) != null; i++ ) {
74249687   Luigi Serra   Cross browser con...
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
  			if ( elem.nodeType === 1 ) {
  
  				// Prevent memory leaks
  				jQuery.cleanData( getAll( elem, false ) );
  
  				// Remove any remaining nodes
  				elem.textContent = "";
  			}
  		}
  
  		return this;
  	},
  
  	clone: function( dataAndEvents, deepDataAndEvents ) {
  		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
  		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
  
c5169e0e   Renato De Donato   a new hope
5294
  		return this.map(function() {
74249687   Luigi Serra   Cross browser con...
5295
  			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
c5169e0e   Renato De Donato   a new hope
5296
  		});
74249687   Luigi Serra   Cross browser con...
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
  	},
  
  	html: function( value ) {
  		return access( this, function( value ) {
  			var elem = this[ 0 ] || {},
  				i = 0,
  				l = this.length;
  
  			if ( value === undefined && elem.nodeType === 1 ) {
  				return elem.innerHTML;
  			}
  
  			// See if we can take a shortcut and just use innerHTML
  			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
  				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
  
c5169e0e   Renato De Donato   a new hope
5313
  				value = value.replace( rxhtmlTag, "<$1></$2>" );
74249687   Luigi Serra   Cross browser con...
5314
5315
5316
5317
5318
  
  				try {
  					for ( ; i < l; i++ ) {
  						elem = this[ i ] || {};
  
a1a3bc73   Luigi Serra   graphs updates
5319
5320
5321
5322
  						// Remove element nodes and prevent memory leaks
  						if ( elem.nodeType === 1 ) {
  							jQuery.cleanData( getAll( elem, false ) );
  							elem.innerHTML = value;
74249687   Luigi Serra   Cross browser con...
5323
5324
5325
  						}
  					}
  
a1a3bc73   Luigi Serra   graphs updates
5326
  					elem = 0;
74249687   Luigi Serra   Cross browser con...
5327
  
a1a3bc73   Luigi Serra   graphs updates
5328
  				// If using innerHTML throws an exception, use the fallback method
c5169e0e   Renato De Donato   a new hope
5329
  				} catch( e ) {}
a1a3bc73   Luigi Serra   graphs updates
5330
  			}
74249687   Luigi Serra   Cross browser con...
5331
  
a1a3bc73   Luigi Serra   graphs updates
5332
5333
5334
5335
5336
  			if ( elem ) {
  				this.empty().append( value );
  			}
  		}, null, value, arguments.length );
  	},
74249687   Luigi Serra   Cross browser con...
5337
  
a1a3bc73   Luigi Serra   graphs updates
5338
  	replaceWith: function() {
c5169e0e   Renato De Donato   a new hope
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
  		var arg = arguments[ 0 ];
  
  		// Make the changes, replacing each context element with the new content
  		this.domManip( arguments, function( elem ) {
  			arg = this.parentNode;
  
  			jQuery.cleanData( getAll( this ) );
  
  			if ( arg ) {
  				arg.replaceChild( elem, this );
  			}
  		});
  
  		// Force removal if there was no new content (e.g., from empty arguments)
  		return arg && (arg.length || arg.nodeType) ? this : this.remove();
  	},
  
  	detach: function( selector ) {
  		return this.remove( selector, true );
  	},
  
  	domManip: function( args, callback ) {
  
  		// Flatten any nested arrays
  		args = concat.apply( [], args );
  
  		var fragment, first, scripts, hasScripts, node, doc,
  			i = 0,
  			l = this.length,
  			set = this,
  			iNoClone = l - 1,
  			value = args[ 0 ],
  			isFunction = jQuery.isFunction( value );
  
  		// We can't cloneNode fragments that contain checked, in WebKit
  		if ( isFunction ||
  				( l > 1 && typeof value === "string" &&
  					!support.checkClone && rchecked.test( value ) ) ) {
  			return this.each(function( index ) {
  				var self = set.eq( index );
  				if ( isFunction ) {
  					args[ 0 ] = value.call( this, index, self.html() );
  				}
  				self.domManip( args, callback );
  			});
  		}
  
  		if ( l ) {
  			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
  			first = fragment.firstChild;
  
  			if ( fragment.childNodes.length === 1 ) {
  				fragment = first;
  			}
  
  			if ( first ) {
  				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
  				hasScripts = scripts.length;
  
  				// Use the original fragment for the last item instead of the first because it can end up
  				// being emptied incorrectly in certain situations (#8070).
  				for ( ; i < l; i++ ) {
  					node = fragment;
  
  					if ( i !== iNoClone ) {
  						node = jQuery.clone( node, true, true );
  
  						// Keep references to cloned scripts for later restoration
  						if ( hasScripts ) {
  							// Support: QtWebKit
  							// jQuery.merge because push.apply(_, arraylike) throws
  							jQuery.merge( scripts, getAll( node, "script" ) );
  						}
  					}
74249687   Luigi Serra   Cross browser con...
5413
  
c5169e0e   Renato De Donato   a new hope
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
  					callback.call( this[ i ], node, i );
  				}
  
  				if ( hasScripts ) {
  					doc = scripts[ scripts.length - 1 ].ownerDocument;
  
  					// Reenable scripts
  					jQuery.map( scripts, restoreScript );
  
  					// Evaluate executable scripts on first document insertion
  					for ( i = 0; i < hasScripts; i++ ) {
  						node = scripts[ i ];
  						if ( rscriptType.test( node.type || "" ) &&
  							!data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
a1a3bc73   Luigi Serra   graphs updates
5428
  
c5169e0e   Renato De Donato   a new hope
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
  							if ( node.src ) {
  								// Optional AJAX dependency, but won't run scripts if not present
  								if ( jQuery._evalUrl ) {
  									jQuery._evalUrl( node.src );
  								}
  							} else {
  								jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
  							}
  						}
  					}
74249687   Luigi Serra   Cross browser con...
5439
5440
  				}
  			}
c5169e0e   Renato De Donato   a new hope
5441
  		}
74249687   Luigi Serra   Cross browser con...
5442
  
c5169e0e   Renato De Donato   a new hope
5443
  		return this;
74249687   Luigi Serra   Cross browser con...
5444
  	}
c5169e0e   Renato De Donato   a new hope
5445
  });
74249687   Luigi Serra   Cross browser con...
5446
  
c5169e0e   Renato De Donato   a new hope
5447
  jQuery.each({
74249687   Luigi Serra   Cross browser con...
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
  	appendTo: "append",
  	prependTo: "prepend",
  	insertBefore: "before",
  	insertAfter: "after",
  	replaceAll: "replaceWith"
  }, function( name, original ) {
  	jQuery.fn[ name ] = function( selector ) {
  		var elems,
  			ret = [],
  			insert = jQuery( selector ),
  			last = insert.length - 1,
  			i = 0;
  
  		for ( ; i <= last; i++ ) {
  			elems = i === last ? this : this.clone( true );
  			jQuery( insert[ i ] )[ original ]( elems );
  
  			// Support: QtWebKit
  			// .get() because push.apply(_, arraylike) throws
  			push.apply( ret, elems.get() );
  		}
  
  		return this.pushStack( ret );
  	};
c5169e0e   Renato De Donato   a new hope
5472
  });
74249687   Luigi Serra   Cross browser con...
5473
5474
5475
  
  
  var iframe,
c5169e0e   Renato De Donato   a new hope
5476
  	elemdisplay = {};
74249687   Luigi Serra   Cross browser con...
5477
5478
5479
5480
5481
5482
  
  /**
   * Retrieve the actual display of a element
   * @param {String} name nodeName of the element
   * @param {Object} doc Document object
   */
74249687   Luigi Serra   Cross browser con...
5483
5484
  // Called only from within defaultDisplay
  function actualDisplay( name, doc ) {
c5169e0e   Renato De Donato   a new hope
5485
5486
  	var style,
  		elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
74249687   Luigi Serra   Cross browser con...
5487
  
c5169e0e   Renato De Donato   a new hope
5488
5489
5490
5491
5492
5493
  		// getDefaultComputedStyle might be reliably used only on attached element
  		display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
  
  			// Use of this method is a temporary fix (more like optimization) until something better comes along,
  			// since it was removed from specification and supported only in FF
  			style.display : jQuery.css( elem[ 0 ], "display" );
74249687   Luigi Serra   Cross browser con...
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
  
  	// We don't have any data stored on the element,
  	// so use "detach" method as fast way to get rid of the element
  	elem.detach();
  
  	return display;
  }
  
  /**
   * Try to determine the default display value of an element
   * @param {String} nodeName
   */
  function defaultDisplay( nodeName ) {
  	var doc = document,
  		display = elemdisplay[ nodeName ];
  
  	if ( !display ) {
  		display = actualDisplay( nodeName, doc );
  
  		// If the simple way fails, read from inside an iframe
  		if ( display === "none" || !display ) {
  
  			// Use the already-created iframe if possible
c5169e0e   Renato De Donato   a new hope
5517
  			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
74249687   Luigi Serra   Cross browser con...
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
  
  			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
  			doc = iframe[ 0 ].contentDocument;
  
  			// Support: IE
  			doc.write();
  			doc.close();
  
  			display = actualDisplay( nodeName, doc );
  			iframe.detach();
  		}
  
  		// Store the correct default display
  		elemdisplay[ nodeName ] = display;
  	}
  
  	return display;
  }
c5169e0e   Renato De Donato   a new hope
5536
  var rmargin = (/^margin/);
74249687   Luigi Serra   Cross browser con...
5537
5538
5539
5540
  
  var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
  
  var getStyles = function( elem ) {
74249687   Luigi Serra   Cross browser con...
5541
5542
5543
  		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
  		// IE throws on elements created in popups
  		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
c5169e0e   Renato De Donato   a new hope
5544
5545
  		if ( elem.ownerDocument.defaultView.opener ) {
  			return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
74249687   Luigi Serra   Cross browser con...
5546
5547
  		}
  
c5169e0e   Renato De Donato   a new hope
5548
  		return window.getComputedStyle( elem, null );
74249687   Luigi Serra   Cross browser con...
5549
5550
  	};
  
74249687   Luigi Serra   Cross browser con...
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
  
  
  function curCSS( elem, name, computed ) {
  	var width, minWidth, maxWidth, ret,
  		style = elem.style;
  
  	computed = computed || getStyles( elem );
  
  	// Support: IE9
  	// getPropertyValue is only needed for .css('filter') (#12537)
  	if ( computed ) {
  		ret = computed.getPropertyValue( name ) || computed[ name ];
c5169e0e   Renato De Donato   a new hope
5563
5564
5565
  	}
  
  	if ( computed ) {
74249687   Luigi Serra   Cross browser con...
5566
5567
5568
5569
5570
  
  		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
  			ret = jQuery.style( elem, name );
  		}
  
c5169e0e   Renato De Donato   a new hope
5571
  		// Support: iOS < 6
74249687   Luigi Serra   Cross browser con...
5572
  		// A tribute to the "awesome hack by Dean Edwards"
c5169e0e   Renato De Donato   a new hope
5573
5574
5575
  		// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
  		// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
  		if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
74249687   Luigi Serra   Cross browser con...
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
  
  			// Remember the original values
  			width = style.width;
  			minWidth = style.minWidth;
  			maxWidth = style.maxWidth;
  
  			// Put in the new values to get a computed value out
  			style.minWidth = style.maxWidth = style.width = ret;
  			ret = computed.width;
  
  			// Revert the changed values
  			style.width = width;
  			style.minWidth = minWidth;
  			style.maxWidth = maxWidth;
  		}
  	}
  
  	return ret !== undefined ?
c5169e0e   Renato De Donato   a new hope
5594
  		// Support: IE
74249687   Luigi Serra   Cross browser con...
5595
5596
5597
5598
5599
5600
5601
  		// IE returns zIndex value as an integer.
  		ret + "" :
  		ret;
  }
  
  
  function addGetHookIf( conditionFn, hookFn ) {
74249687   Luigi Serra   Cross browser con...
5602
5603
5604
5605
  	// Define the hook, we'll check on the first run if it's really needed.
  	return {
  		get: function() {
  			if ( conditionFn() ) {
74249687   Luigi Serra   Cross browser con...
5606
5607
5608
5609
5610
5611
5612
  				// Hook not needed (or it's not possible to use it due
  				// to missing dependency), remove it.
  				delete this.get;
  				return;
  			}
  
  			// Hook needed; redefine it so that the support test is not executed again.
c5169e0e   Renato De Donato   a new hope
5613
  			return (this.get = hookFn).apply( this, arguments );
74249687   Luigi Serra   Cross browser con...
5614
5615
5616
5617
5618
  		}
  	};
  }
  
  
c5169e0e   Renato De Donato   a new hope
5619
5620
5621
5622
5623
  (function() {
  	var pixelPositionVal, boxSizingReliableVal,
  		docElem = document.documentElement,
  		container = document.createElement( "div" ),
  		div = document.createElement( "div" );
a1a3bc73   Luigi Serra   graphs updates
5624
  
c5169e0e   Renato De Donato   a new hope
5625
5626
5627
  	if ( !div.style ) {
  		return;
  	}
74249687   Luigi Serra   Cross browser con...
5628
  
c5169e0e   Renato De Donato   a new hope
5629
5630
5631
5632
5633
  	// Support: IE9-11+
  	// Style of cloned element affects source element cloned (#8908)
  	div.style.backgroundClip = "content-box";
  	div.cloneNode( true ).style.backgroundClip = "";
  	support.clearCloneStyle = div.style.backgroundClip === "content-box";
74249687   Luigi Serra   Cross browser con...
5634
  
c5169e0e   Renato De Donato   a new hope
5635
5636
5637
  	container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
  		"position:absolute";
  	container.appendChild( div );
74249687   Luigi Serra   Cross browser con...
5638
  
c5169e0e   Renato De Donato   a new hope
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
  	// Executing both pixelPosition & boxSizingReliable tests require only one layout
  	// so they're executed at the same time to save the second computation.
  	function computePixelPositionAndBoxSizingReliable() {
  		div.style.cssText =
  			// Support: Firefox<29, Android 2.3
  			// Vendor-prefix box-sizing
  			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
  			"box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
  			"border:1px;padding:1px;width:4px;position:absolute";
  		div.innerHTML = "";
  		docElem.appendChild( container );
74249687   Luigi Serra   Cross browser con...
5650
  
c5169e0e   Renato De Donato   a new hope
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
  		var divStyle = window.getComputedStyle( div, null );
  		pixelPositionVal = divStyle.top !== "1%";
  		boxSizingReliableVal = divStyle.width === "4px";
  
  		docElem.removeChild( container );
  	}
  
  	// Support: node.js jsdom
  	// Don't assume that getComputedStyle is a property of the global object
  	if ( window.getComputedStyle ) {
  		jQuery.extend( support, {
  			pixelPosition: function() {
  
  				// This test is executed only once but we still do memoizing
  				// since we can use the boxSizingReliable pre-computing.
  				// No need to check if the test was already performed, though.
  				computePixelPositionAndBoxSizingReliable();
  				return pixelPositionVal;
  			},
  			boxSizingReliable: function() {
  				if ( boxSizingReliableVal == null ) {
  					computePixelPositionAndBoxSizingReliable();
  				}
  				return boxSizingReliableVal;
  			},
  			reliableMarginRight: function() {
  
  				// Support: Android 2.3
  				// Check if div with explicit width and no margin-right incorrectly
  				// gets computed margin-right based on width of container. (#3333)
  				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
  				// This support function is only executed once so no memoizing is needed.
  				var ret,
  					marginDiv = div.appendChild( document.createElement( "div" ) );
  
  				// Reset CSS: box-sizing; display; margin; border; padding
  				marginDiv.style.cssText = div.style.cssText =
  					// Support: Firefox<29, Android 2.3
  					// Vendor-prefix box-sizing
  					"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
  					"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
  				marginDiv.style.marginRight = marginDiv.style.width = "0";
  				div.style.width = "1px";
  				docElem.appendChild( container );
  
  				ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
  
  				docElem.removeChild( container );
  				div.removeChild( marginDiv );
  
  				return ret;
  			}
  		});
  	}
  })();
  
  
  // A method for quickly swapping in/out CSS properties to get correct calculations.
  jQuery.swap = function( elem, options, callback, args ) {
  	var ret, name,
  		old = {};
  
  	// Remember the old values, and insert the new ones
  	for ( name in options ) {
  		old[ name ] = elem.style[ name ];
  		elem.style[ name ] = options[ name ];
  	}
  
  	ret = callback.apply( elem, args || [] );
  
  	// Revert the old values
  	for ( name in options ) {
  		elem.style[ name ] = old[ name ];
  	}
  
  	return ret;
  };
  
  
  var
  	// Swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
  	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
  	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
  	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
  	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
  
  	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
  	cssNormalTransform = {
  		letterSpacing: "0",
  		fontWeight: "400"
  	},
  
  	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
  
  // Return a css property mapped to a potentially vendor prefixed property
  function vendorPropName( style, name ) {
  
  	// Shortcut for names that are not vendor prefixed
  	if ( name in style ) {
  		return name;
74249687   Luigi Serra   Cross browser con...
5751
5752
5753
  	}
  
  	// Check for vendor prefixed names
c5169e0e   Renato De Donato   a new hope
5754
5755
  	var capName = name[0].toUpperCase() + name.slice(1),
  		origName = name,
74249687   Luigi Serra   Cross browser con...
5756
5757
5758
5759
  		i = cssPrefixes.length;
  
  	while ( i-- ) {
  		name = cssPrefixes[ i ] + capName;
c5169e0e   Renato De Donato   a new hope
5760
  		if ( name in style ) {
74249687   Luigi Serra   Cross browser con...
5761
5762
5763
  			return name;
  		}
  	}
c5169e0e   Renato De Donato   a new hope
5764
5765
  
  	return origName;
74249687   Luigi Serra   Cross browser con...
5766
5767
5768
  }
  
  function setPositiveNumber( elem, value, subtract ) {
c5169e0e   Renato De Donato   a new hope
5769
  	var matches = rnumsplit.exec( value );
74249687   Luigi Serra   Cross browser con...
5770
  	return matches ?
74249687   Luigi Serra   Cross browser con...
5771
  		// Guard against undefined "subtract", e.g., when used as in cssHooks
c5169e0e   Renato De Donato   a new hope
5772
  		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
74249687   Luigi Serra   Cross browser con...
5773
5774
5775
5776
5777
  		value;
  }
  
  function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  	var i = extra === ( isBorderBox ? "border" : "content" ) ?
74249687   Luigi Serra   Cross browser con...
5778
5779
  		// If we already have the right measurement, avoid augmentation
  		4 :
74249687   Luigi Serra   Cross browser con...
5780
5781
5782
5783
5784
5785
  		// Otherwise initialize for horizontal or vertical properties
  		name === "width" ? 1 : 0,
  
  		val = 0;
  
  	for ( ; i < 4; i += 2 ) {
74249687   Luigi Serra   Cross browser con...
5786
5787
5788
5789
5790
5791
  		// Both box models exclude margin, so add it if we want it
  		if ( extra === "margin" ) {
  			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
  		}
  
  		if ( isBorderBox ) {
74249687   Luigi Serra   Cross browser con...
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
  			// border-box includes padding, so remove it if we want content
  			if ( extra === "content" ) {
  				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
  			}
  
  			// At this point, extra isn't border nor margin, so remove border
  			if ( extra !== "margin" ) {
  				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
  			}
  		} else {
74249687   Luigi Serra   Cross browser con...
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
  			// At this point, extra isn't content, so add padding
  			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
  
  			// At this point, extra isn't content nor padding, so add border
  			if ( extra !== "padding" ) {
  				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
  			}
  		}
  	}
  
  	return val;
  }
  
  function getWidthOrHeight( elem, name, extra ) {
  
  	// Start with offset property, which is equivalent to the border-box value
  	var valueIsBorderBox = true,
  		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
  		styles = getStyles( elem ),
  		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
  
74249687   Luigi Serra   Cross browser con...
5823
5824
5825
5826
  	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
  	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
  	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
  	if ( val <= 0 || val == null ) {
74249687   Luigi Serra   Cross browser con...
5827
5828
5829
5830
5831
5832
5833
  		// Fall back to computed then uncomputed css if necessary
  		val = curCSS( elem, name, styles );
  		if ( val < 0 || val == null ) {
  			val = elem.style[ name ];
  		}
  
  		// Computed unit is not pixels. Stop here and return.
c5169e0e   Renato De Donato   a new hope
5834
  		if ( rnumnonpx.test(val) ) {
74249687   Luigi Serra   Cross browser con...
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
  			return val;
  		}
  
  		// Check for style in case a browser which returns unreliable values
  		// for getComputedStyle silently falls back to the reliable elem.style
  		valueIsBorderBox = isBorderBox &&
  			( support.boxSizingReliable() || val === elem.style[ name ] );
  
  		// Normalize "", auto, and prepare for extra
  		val = parseFloat( val ) || 0;
  	}
  
  	// Use the active box-sizing model to add/subtract irrelevant styles
  	return ( val +
  		augmentWidthOrHeight(
  			elem,
  			name,
  			extra || ( isBorderBox ? "border" : "content" ),
  			valueIsBorderBox,
  			styles
  		)
  	) + "px";
  }
  
  function showHide( elements, show ) {
  	var display, elem, hidden,
  		values = [],
  		index = 0,
  		length = elements.length;
  
  	for ( ; index < length; index++ ) {
  		elem = elements[ index ];
  		if ( !elem.style ) {
  			continue;
  		}
  
c5169e0e   Renato De Donato   a new hope
5871
  		values[ index ] = data_priv.get( elem, "olddisplay" );
74249687   Luigi Serra   Cross browser con...
5872
5873
  		display = elem.style.display;
  		if ( show ) {
74249687   Luigi Serra   Cross browser con...
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
  			// Reset the inline display of this element to learn if it is
  			// being hidden by cascaded rules or not
  			if ( !values[ index ] && display === "none" ) {
  				elem.style.display = "";
  			}
  
  			// Set elements which have been overridden with display: none
  			// in a stylesheet to whatever the default browser style is
  			// for such an element
  			if ( elem.style.display === "" && isHidden( elem ) ) {
c5169e0e   Renato De Donato   a new hope
5884
  				values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
74249687   Luigi Serra   Cross browser con...
5885
5886
5887
5888
5889
  			}
  		} else {
  			hidden = isHidden( elem );
  
  			if ( display !== "none" || !hidden ) {
c5169e0e   Renato De Donato   a new hope
5890
  				data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
74249687   Luigi Serra   Cross browser con...
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
  			}
  		}
  	}
  
  	// Set the display of most of the elements in a second loop
  	// to avoid the constant reflow
  	for ( index = 0; index < length; index++ ) {
  		elem = elements[ index ];
  		if ( !elem.style ) {
  			continue;
  		}
  		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
  			elem.style.display = show ? values[ index ] || "" : "none";
  		}
  	}
  
  	return elements;
  }
  
c5169e0e   Renato De Donato   a new hope
5910
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
  
  	// Add in style property hooks for overriding the default
  	// behavior of getting and setting a style property
  	cssHooks: {
  		opacity: {
  			get: function( elem, computed ) {
  				if ( computed ) {
  
  					// We should always get a number back from opacity
  					var ret = curCSS( elem, "opacity" );
  					return ret === "" ? "1" : ret;
  				}
  			}
  		}
  	},
  
  	// Don't automatically add "px" to these possibly-unitless properties
  	cssNumber: {
74249687   Luigi Serra   Cross browser con...
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
  		"columnCount": true,
  		"fillOpacity": true,
  		"flexGrow": true,
  		"flexShrink": true,
  		"fontWeight": true,
  		"lineHeight": true,
  		"opacity": true,
  		"order": true,
  		"orphans": true,
  		"widows": true,
  		"zIndex": true,
  		"zoom": true
  	},
  
  	// Add in properties whose names you wish to fix before
  	// setting or getting the value
  	cssProps: {
  		"float": "cssFloat"
  	},
  
  	// Get and set the style property on a DOM Node
  	style: function( elem, name, value, extra ) {
  
  		// Don't set styles on text and comment nodes
  		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
  			return;
  		}
  
  		// Make sure that we're working with the right name
  		var ret, type, hooks,
  			origName = jQuery.camelCase( name ),
  			style = elem.style;
  
c5169e0e   Renato De Donato   a new hope
5962
  		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
74249687   Luigi Serra   Cross browser con...
5963
5964
5965
5966
5967
5968
5969
5970
5971
  
  		// Gets hook for the prefixed version, then unprefixed version
  		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
  
  		// Check if we're setting a value
  		if ( value !== undefined ) {
  			type = typeof value;
  
  			// Convert "+=" or "-=" to relative numbers (#7345)
c5169e0e   Renato De Donato   a new hope
5972
5973
  			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
  				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
74249687   Luigi Serra   Cross browser con...
5974
5975
5976
5977
5978
5979
5980
5981
5982
  				// Fixes bug #9237
  				type = "number";
  			}
  
  			// Make sure that null and NaN values aren't set (#7116)
  			if ( value == null || value !== value ) {
  				return;
  			}
  
c5169e0e   Renato De Donato   a new hope
5983
5984
5985
  			// If a number, add 'px' to the (except for certain CSS properties)
  			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
  				value += "px";
74249687   Luigi Serra   Cross browser con...
5986
5987
5988
5989
5990
5991
5992
5993
5994
  			}
  
  			// Support: IE9-11+
  			// background-* props affect original clone's values
  			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
  				style[ name ] = "inherit";
  			}
  
  			// If a hook was provided, use that value, otherwise just set the specified value
c5169e0e   Renato De Donato   a new hope
5995
  			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
74249687   Luigi Serra   Cross browser con...
5996
5997
5998
5999
  				style[ name ] = value;
  			}
  
  		} else {
74249687   Luigi Serra   Cross browser con...
6000
  			// If a hook was provided get the non-computed value from there
c5169e0e   Renato De Donato   a new hope
6001
  			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
74249687   Luigi Serra   Cross browser con...
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
  				return ret;
  			}
  
  			// Otherwise just get the value from the style object
  			return style[ name ];
  		}
  	},
  
  	css: function( elem, name, extra, styles ) {
  		var val, num, hooks,
  			origName = jQuery.camelCase( name );
  
  		// Make sure that we're working with the right name
c5169e0e   Renato De Donato   a new hope
6015
  		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
74249687   Luigi Serra   Cross browser con...
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
  
  		// Try prefixed name followed by the unprefixed name
  		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
  
  		// If a hook was provided get the computed value from there
  		if ( hooks && "get" in hooks ) {
  			val = hooks.get( elem, true, extra );
  		}
  
  		// Otherwise, if a way to get the computed value exists, use that
  		if ( val === undefined ) {
  			val = curCSS( elem, name, styles );
  		}
  
  		// Convert "normal" to computed value
  		if ( val === "normal" && name in cssNormalTransform ) {
  			val = cssNormalTransform[ name ];
  		}
  
  		// Make numeric if forced or a qualifier was provided and val looks numeric
  		if ( extra === "" || extra ) {
  			num = parseFloat( val );
c5169e0e   Renato De Donato   a new hope
6038
  			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
74249687   Luigi Serra   Cross browser con...
6039
6040
6041
  		}
  		return val;
  	}
c5169e0e   Renato De Donato   a new hope
6042
  });
74249687   Luigi Serra   Cross browser con...
6043
  
c5169e0e   Renato De Donato   a new hope
6044
  jQuery.each([ "height", "width" ], function( i, name ) {
74249687   Luigi Serra   Cross browser con...
6045
6046
6047
6048
6049
6050
  	jQuery.cssHooks[ name ] = {
  		get: function( elem, computed, extra ) {
  			if ( computed ) {
  
  				// Certain elements can have dimension info if we invisibly show them
  				// but it must have a current display style that would benefit
c5169e0e   Renato De Donato   a new hope
6051
6052
6053
6054
6055
  				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
  					jQuery.swap( elem, cssShow, function() {
  						return getWidthOrHeight( elem, name, extra );
  					}) :
  					getWidthOrHeight( elem, name, extra );
74249687   Luigi Serra   Cross browser con...
6056
6057
6058
6059
  			}
  		},
  
  		set: function( elem, value, extra ) {
c5169e0e   Renato De Donato   a new hope
6060
6061
6062
  			var styles = extra && getStyles( elem );
  			return setPositiveNumber( elem, value, extra ?
  				augmentWidthOrHeight(
74249687   Luigi Serra   Cross browser con...
6063
6064
6065
6066
6067
  					elem,
  					name,
  					extra,
  					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
  					styles
c5169e0e   Renato De Donato   a new hope
6068
6069
  				) : 0
  			);
74249687   Luigi Serra   Cross browser con...
6070
6071
  		}
  	};
c5169e0e   Renato De Donato   a new hope
6072
  });
74249687   Luigi Serra   Cross browser con...
6073
6074
6075
6076
6077
  
  // Support: Android 2.3
  jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
  	function( elem, computed ) {
  		if ( computed ) {
c5169e0e   Renato De Donato   a new hope
6078
  			return jQuery.swap( elem, { "display": "inline-block" },
74249687   Luigi Serra   Cross browser con...
6079
6080
6081
6082
6083
6084
  				curCSS, [ elem, "marginRight" ] );
  		}
  	}
  );
  
  // These hooks are used by animate to expand properties
c5169e0e   Renato De Donato   a new hope
6085
  jQuery.each({
74249687   Luigi Serra   Cross browser con...
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
  	margin: "",
  	padding: "",
  	border: "Width"
  }, function( prefix, suffix ) {
  	jQuery.cssHooks[ prefix + suffix ] = {
  		expand: function( value ) {
  			var i = 0,
  				expanded = {},
  
  				// Assumes a single number if not a string
c5169e0e   Renato De Donato   a new hope
6096
  				parts = typeof value === "string" ? value.split(" ") : [ value ];
74249687   Luigi Serra   Cross browser con...
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
  
  			for ( ; i < 4; i++ ) {
  				expanded[ prefix + cssExpand[ i ] + suffix ] =
  					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
  			}
  
  			return expanded;
  		}
  	};
  
  	if ( !rmargin.test( prefix ) ) {
  		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
  	}
c5169e0e   Renato De Donato   a new hope
6110
  });
74249687   Luigi Serra   Cross browser con...
6111
  
c5169e0e   Renato De Donato   a new hope
6112
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
  	css: function( name, value ) {
  		return access( this, function( elem, name, value ) {
  			var styles, len,
  				map = {},
  				i = 0;
  
  			if ( jQuery.isArray( name ) ) {
  				styles = getStyles( elem );
  				len = name.length;
  
  				for ( ; i < len; i++ ) {
  					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
  				}
  
  				return map;
  			}
  
  			return value !== undefined ?
  				jQuery.style( elem, name, value ) :
  				jQuery.css( elem, name );
  		}, name, value, arguments.length > 1 );
  	},
  	show: function() {
  		return showHide( this, true );
  	},
  	hide: function() {
  		return showHide( this );
  	},
  	toggle: function( state ) {
  		if ( typeof state === "boolean" ) {
  			return state ? this.show() : this.hide();
  		}
  
c5169e0e   Renato De Donato   a new hope
6146
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
6147
6148
6149
6150
6151
  			if ( isHidden( this ) ) {
  				jQuery( this ).show();
  			} else {
  				jQuery( this ).hide();
  			}
c5169e0e   Renato De Donato   a new hope
6152
  		});
74249687   Luigi Serra   Cross browser con...
6153
  	}
c5169e0e   Renato De Donato   a new hope
6154
  });
74249687   Luigi Serra   Cross browser con...
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
  
  
  function Tween( elem, options, prop, end, easing ) {
  	return new Tween.prototype.init( elem, options, prop, end, easing );
  }
  jQuery.Tween = Tween;
  
  Tween.prototype = {
  	constructor: Tween,
  	init: function( elem, options, prop, end, easing, unit ) {
  		this.elem = elem;
  		this.prop = prop;
c5169e0e   Renato De Donato   a new hope
6167
  		this.easing = easing || "swing";
74249687   Luigi Serra   Cross browser con...
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
  		this.options = options;
  		this.start = this.now = this.cur();
  		this.end = end;
  		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
  	},
  	cur: function() {
  		var hooks = Tween.propHooks[ this.prop ];
  
  		return hooks && hooks.get ?
  			hooks.get( this ) :
  			Tween.propHooks._default.get( this );
  	},
  	run: function( percent ) {
  		var eased,
  			hooks = Tween.propHooks[ this.prop ];
  
  		if ( this.options.duration ) {
  			this.pos = eased = jQuery.easing[ this.easing ](
  				percent, this.options.duration * percent, 0, 1, this.options.duration
  			);
  		} else {
  			this.pos = eased = percent;
  		}
  		this.now = ( this.end - this.start ) * eased + this.start;
  
  		if ( this.options.step ) {
  			this.options.step.call( this.elem, this.now, this );
  		}
  
  		if ( hooks && hooks.set ) {
  			hooks.set( this );
  		} else {
  			Tween.propHooks._default.set( this );
  		}
  		return this;
  	}
  };
  
  Tween.prototype.init.prototype = Tween.prototype;
  
  Tween.propHooks = {
  	_default: {
  		get: function( tween ) {
  			var result;
  
c5169e0e   Renato De Donato   a new hope
6213
6214
  			if ( tween.elem[ tween.prop ] != null &&
  				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
74249687   Luigi Serra   Cross browser con...
6215
6216
6217
6218
6219
6220
6221
6222
  				return tween.elem[ tween.prop ];
  			}
  
  			// Passing an empty string as a 3rd parameter to .css will automatically
  			// attempt a parseFloat and fallback to a string if the parse fails.
  			// Simple values such as "10px" are parsed to Float;
  			// complex values such as "rotate(1rad)" are returned as-is.
  			result = jQuery.css( tween.elem, tween.prop, "" );
74249687   Luigi Serra   Cross browser con...
6223
6224
6225
6226
  			// Empty strings, null, undefined and "auto" are converted to 0.
  			return !result || result === "auto" ? 0 : result;
  		},
  		set: function( tween ) {
74249687   Luigi Serra   Cross browser con...
6227
6228
6229
6230
6231
  			// Use step hook for back compat.
  			// Use cssHook if its there.
  			// Use .style if available and use plain properties where available.
  			if ( jQuery.fx.step[ tween.prop ] ) {
  				jQuery.fx.step[ tween.prop ]( tween );
c5169e0e   Renato De Donato   a new hope
6232
  			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
74249687   Luigi Serra   Cross browser con...
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
  				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
  			} else {
  				tween.elem[ tween.prop ] = tween.now;
  			}
  		}
  	}
  };
  
  // Support: IE9
  // Panic based approach to setting things on disconnected nodes
  Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
  	set: function( tween ) {
  		if ( tween.elem.nodeType && tween.elem.parentNode ) {
  			tween.elem[ tween.prop ] = tween.now;
  		}
  	}
  };
  
  jQuery.easing = {
  	linear: function( p ) {
  		return p;
  	},
  	swing: function( p ) {
  		return 0.5 - Math.cos( p * Math.PI ) / 2;
c5169e0e   Renato De Donato   a new hope
6257
  	}
74249687   Luigi Serra   Cross browser con...
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
  };
  
  jQuery.fx = Tween.prototype.init;
  
  // Back Compat <1.8 extension point
  jQuery.fx.step = {};
  
  
  
  
  var
  	fxNow, timerId,
  	rfxtypes = /^(?:toggle|show|hide)$/,
c5169e0e   Renato De Donato   a new hope
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
  	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
  	rrun = /queueHooks$/,
  	animationPrefilters = [ defaultPrefilter ],
  	tweeners = {
  		"*": [ function( prop, value ) {
  			var tween = this.createTween( prop, value ),
  				target = tween.cur(),
  				parts = rfxnum.exec( value ),
  				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
  
  				// Starting value computation is required for potential unit mismatches
  				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
  					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
  				scale = 1,
  				maxIterations = 20;
  
  			if ( start && start[ 3 ] !== unit ) {
  				// Trust units reported by jQuery.css
  				unit = unit || start[ 3 ];
  
  				// Make sure we update the tween properties later on
  				parts = parts || [];
  
  				// Iteratively approximate from a nonzero starting point
  				start = +target || 1;
  
  				do {
  					// If previous iteration zeroed out, double until we get *something*.
  					// Use string for doubling so we don't accidentally see scale as unchanged below
  					scale = scale || ".5";
  
  					// Adjust and apply
  					start = start / scale;
  					jQuery.style( tween.elem, prop, start + unit );
  
  				// Update scale, tolerating zero or NaN from tween.cur(),
  				// break the loop if scale is unchanged or perfect, or if we've just had enough
  				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
  			}
  
  			// Update tween properties
  			if ( parts ) {
  				start = tween.start = +start || +target || 0;
  				tween.unit = unit;
  				// If a +=/-= token was provided, we're doing a relative animation
  				tween.end = parts[ 1 ] ?
  					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
  					+parts[ 2 ];
  			}
  
  			return tween;
  		} ]
  	};
74249687   Luigi Serra   Cross browser con...
6324
6325
6326
  
  // Animations created synchronously will run synchronously
  function createFxNow() {
c5169e0e   Renato De Donato   a new hope
6327
  	setTimeout(function() {
74249687   Luigi Serra   Cross browser con...
6328
  		fxNow = undefined;
c5169e0e   Renato De Donato   a new hope
6329
  	});
74249687   Luigi Serra   Cross browser con...
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
  	return ( fxNow = jQuery.now() );
  }
  
  // Generate parameters to create a standard animation
  function genFx( type, includeWidth ) {
  	var which,
  		i = 0,
  		attrs = { height: type };
  
  	// If we include width, step value is 1 to do all cssExpand values,
  	// otherwise step value is 2 to skip over Left and Right
  	includeWidth = includeWidth ? 1 : 0;
  	for ( ; i < 4 ; i += 2 - includeWidth ) {
  		which = cssExpand[ i ];
  		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
  	}
  
  	if ( includeWidth ) {
  		attrs.opacity = attrs.width = type;
  	}
  
  	return attrs;
  }
  
  function createTween( value, prop, animation ) {
  	var tween,
c5169e0e   Renato De Donato   a new hope
6356
  		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
74249687   Luigi Serra   Cross browser con...
6357
6358
6359
  		index = 0,
  		length = collection.length;
  	for ( ; index < length; index++ ) {
c5169e0e   Renato De Donato   a new hope
6360
  		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
74249687   Luigi Serra   Cross browser con...
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
  
  			// We're done with this property
  			return tween;
  		}
  	}
  }
  
  function defaultPrefilter( elem, props, opts ) {
  	/* jshint validthis: true */
  	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
  		anim = this,
  		orig = {},
  		style = elem.style,
  		hidden = elem.nodeType && isHidden( elem ),
c5169e0e   Renato De Donato   a new hope
6375
  		dataShow = data_priv.get( elem, "fxshow" );
74249687   Luigi Serra   Cross browser con...
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
  
  	// Handle queue: false promises
  	if ( !opts.queue ) {
  		hooks = jQuery._queueHooks( elem, "fx" );
  		if ( hooks.unqueued == null ) {
  			hooks.unqueued = 0;
  			oldfire = hooks.empty.fire;
  			hooks.empty.fire = function() {
  				if ( !hooks.unqueued ) {
  					oldfire();
  				}
  			};
  		}
  		hooks.unqueued++;
  
c5169e0e   Renato De Donato   a new hope
6391
  		anim.always(function() {
74249687   Luigi Serra   Cross browser con...
6392
  			// Ensure the complete handler is called before this completes
c5169e0e   Renato De Donato   a new hope
6393
  			anim.always(function() {
74249687   Luigi Serra   Cross browser con...
6394
6395
6396
6397
  				hooks.unqueued--;
  				if ( !jQuery.queue( elem, "fx" ).length ) {
  					hooks.empty.fire();
  				}
c5169e0e   Renato De Donato   a new hope
6398
6399
  			});
  		});
74249687   Luigi Serra   Cross browser con...
6400
6401
6402
6403
  	}
  
  	// Height/width overflow pass
  	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
74249687   Luigi Serra   Cross browser con...
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
  		// Make sure that nothing sneaks out
  		// Record all 3 overflow attributes because IE9-10 do not
  		// change the overflow attribute when overflowX and
  		// overflowY are set to the same value
  		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
  
  		// Set display property to inline-block for height/width
  		// animations on inline elements that are having width/height animated
  		display = jQuery.css( elem, "display" );
  
  		// Test default display if display is currently "none"
  		checkDisplay = display === "none" ?
c5169e0e   Renato De Donato   a new hope
6416
  			data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
74249687   Luigi Serra   Cross browser con...
6417
6418
6419
6420
6421
6422
6423
6424
  
  		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
  			style.display = "inline-block";
  		}
  	}
  
  	if ( opts.overflow ) {
  		style.overflow = "hidden";
c5169e0e   Renato De Donato   a new hope
6425
  		anim.always(function() {
74249687   Luigi Serra   Cross browser con...
6426
6427
6428
  			style.overflow = opts.overflow[ 0 ];
  			style.overflowX = opts.overflow[ 1 ];
  			style.overflowY = opts.overflow[ 2 ];
c5169e0e   Renato De Donato   a new hope
6429
  		});
74249687   Luigi Serra   Cross browser con...
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
  	}
  
  	// show/hide pass
  	for ( prop in props ) {
  		value = props[ prop ];
  		if ( rfxtypes.exec( value ) ) {
  			delete props[ prop ];
  			toggle = toggle || value === "toggle";
  			if ( value === ( hidden ? "hide" : "show" ) ) {
  
c5169e0e   Renato De Donato   a new hope
6440
  				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
74249687   Luigi Serra   Cross browser con...
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
  				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
  					hidden = true;
  				} else {
  					continue;
  				}
  			}
  			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
  
  		// Any non-fx value stops us from restoring the original display value
  		} else {
  			display = undefined;
  		}
  	}
  
  	if ( !jQuery.isEmptyObject( orig ) ) {
  		if ( dataShow ) {
  			if ( "hidden" in dataShow ) {
  				hidden = dataShow.hidden;
  			}
  		} else {
c5169e0e   Renato De Donato   a new hope
6461
  			dataShow = data_priv.access( elem, "fxshow", {} );
74249687   Luigi Serra   Cross browser con...
6462
6463
6464
6465
6466
6467
6468
6469
6470
  		}
  
  		// Store state if its toggle - enables .stop().toggle() to "reverse"
  		if ( toggle ) {
  			dataShow.hidden = !hidden;
  		}
  		if ( hidden ) {
  			jQuery( elem ).show();
  		} else {
c5169e0e   Renato De Donato   a new hope
6471
  			anim.done(function() {
74249687   Luigi Serra   Cross browser con...
6472
  				jQuery( elem ).hide();
c5169e0e   Renato De Donato   a new hope
6473
  			});
74249687   Luigi Serra   Cross browser con...
6474
  		}
c5169e0e   Renato De Donato   a new hope
6475
  		anim.done(function() {
74249687   Luigi Serra   Cross browser con...
6476
6477
  			var prop;
  
c5169e0e   Renato De Donato   a new hope
6478
  			data_priv.remove( elem, "fxshow" );
74249687   Luigi Serra   Cross browser con...
6479
6480
6481
  			for ( prop in orig ) {
  				jQuery.style( elem, prop, orig[ prop ] );
  			}
c5169e0e   Renato De Donato   a new hope
6482
  		});
74249687   Luigi Serra   Cross browser con...
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
  		for ( prop in orig ) {
  			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
  
  			if ( !( prop in dataShow ) ) {
  				dataShow[ prop ] = tween.start;
  				if ( hidden ) {
  					tween.end = tween.start;
  					tween.start = prop === "width" || prop === "height" ? 1 : 0;
  				}
  			}
  		}
  
  	// If this is a noop like .hide().hide(), restore an overwritten display value
c5169e0e   Renato De Donato   a new hope
6496
  	} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
74249687   Luigi Serra   Cross browser con...
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
  		style.display = display;
  	}
  }
  
  function propFilter( props, specialEasing ) {
  	var index, name, easing, value, hooks;
  
  	// camelCase, specialEasing and expand cssHook pass
  	for ( index in props ) {
  		name = jQuery.camelCase( index );
  		easing = specialEasing[ name ];
  		value = props[ index ];
  		if ( jQuery.isArray( value ) ) {
  			easing = value[ 1 ];
  			value = props[ index ] = value[ 0 ];
  		}
  
  		if ( index !== name ) {
  			props[ name ] = value;
  			delete props[ index ];
  		}
  
  		hooks = jQuery.cssHooks[ name ];
  		if ( hooks && "expand" in hooks ) {
  			value = hooks.expand( value );
  			delete props[ name ];
  
  			// Not quite $.extend, this won't overwrite existing keys.
  			// Reusing 'index' because we have the correct "name"
  			for ( index in value ) {
  				if ( !( index in props ) ) {
  					props[ index ] = value[ index ];
  					specialEasing[ index ] = easing;
  				}
  			}
  		} else {
  			specialEasing[ name ] = easing;
  		}
  	}
  }
  
  function Animation( elem, properties, options ) {
  	var result,
  		stopped,
  		index = 0,
c5169e0e   Renato De Donato   a new hope
6542
  		length = animationPrefilters.length,
74249687   Luigi Serra   Cross browser con...
6543
  		deferred = jQuery.Deferred().always( function() {
74249687   Luigi Serra   Cross browser con...
6544
6545
  			// Don't match elem in the :animated selector
  			delete tick.elem;
c5169e0e   Renato De Donato   a new hope
6546
  		}),
74249687   Luigi Serra   Cross browser con...
6547
6548
6549
6550
6551
6552
  		tick = function() {
  			if ( stopped ) {
  				return false;
  			}
  			var currentTime = fxNow || createFxNow(),
  				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
74249687   Luigi Serra   Cross browser con...
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
  				// Support: Android 2.3
  				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
  				temp = remaining / animation.duration || 0,
  				percent = 1 - temp,
  				index = 0,
  				length = animation.tweens.length;
  
  			for ( ; index < length ; index++ ) {
  				animation.tweens[ index ].run( percent );
  			}
  
c5169e0e   Renato De Donato   a new hope
6564
  			deferred.notifyWith( elem, [ animation, percent, remaining ]);
74249687   Luigi Serra   Cross browser con...
6565
6566
6567
6568
6569
6570
6571
6572
  
  			if ( percent < 1 && length ) {
  				return remaining;
  			} else {
  				deferred.resolveWith( elem, [ animation ] );
  				return false;
  			}
  		},
c5169e0e   Renato De Donato   a new hope
6573
  		animation = deferred.promise({
74249687   Luigi Serra   Cross browser con...
6574
6575
  			elem: elem,
  			props: jQuery.extend( {}, properties ),
c5169e0e   Renato De Donato   a new hope
6576
  			opts: jQuery.extend( true, { specialEasing: {} }, options ),
74249687   Luigi Serra   Cross browser con...
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
  			originalProperties: properties,
  			originalOptions: options,
  			startTime: fxNow || createFxNow(),
  			duration: options.duration,
  			tweens: [],
  			createTween: function( prop, end ) {
  				var tween = jQuery.Tween( elem, animation.opts, prop, end,
  						animation.opts.specialEasing[ prop ] || animation.opts.easing );
  				animation.tweens.push( tween );
  				return tween;
  			},
  			stop: function( gotoEnd ) {
  				var index = 0,
74249687   Luigi Serra   Cross browser con...
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
  					// If we are going to the end, we want to run all the tweens
  					// otherwise we skip this part
  					length = gotoEnd ? animation.tweens.length : 0;
  				if ( stopped ) {
  					return this;
  				}
  				stopped = true;
  				for ( ; index < length ; index++ ) {
  					animation.tweens[ index ].run( 1 );
  				}
  
  				// Resolve when we played the last frame; otherwise, reject
  				if ( gotoEnd ) {
74249687   Luigi Serra   Cross browser con...
6603
6604
6605
6606
6607
6608
  					deferred.resolveWith( elem, [ animation, gotoEnd ] );
  				} else {
  					deferred.rejectWith( elem, [ animation, gotoEnd ] );
  				}
  				return this;
  			}
c5169e0e   Renato De Donato   a new hope
6609
  		}),
74249687   Luigi Serra   Cross browser con...
6610
6611
6612
6613
6614
  		props = animation.props;
  
  	propFilter( props, animation.opts.specialEasing );
  
  	for ( ; index < length ; index++ ) {
c5169e0e   Renato De Donato   a new hope
6615
  		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
74249687   Luigi Serra   Cross browser con...
6616
  		if ( result ) {
74249687   Luigi Serra   Cross browser con...
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
  			return result;
  		}
  	}
  
  	jQuery.map( props, createTween, animation );
  
  	if ( jQuery.isFunction( animation.opts.start ) ) {
  		animation.opts.start.call( elem, animation );
  	}
  
  	jQuery.fx.timer(
  		jQuery.extend( tick, {
  			elem: elem,
  			anim: animation,
  			queue: animation.opts.queue
c5169e0e   Renato De Donato   a new hope
6632
  		})
74249687   Luigi Serra   Cross browser con...
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
  	);
  
  	// attach callbacks from options
  	return animation.progress( animation.opts.progress )
  		.done( animation.opts.done, animation.opts.complete )
  		.fail( animation.opts.fail )
  		.always( animation.opts.always );
  }
  
  jQuery.Animation = jQuery.extend( Animation, {
74249687   Luigi Serra   Cross browser con...
6643
6644
6645
6646
6647
6648
  
  	tweener: function( props, callback ) {
  		if ( jQuery.isFunction( props ) ) {
  			callback = props;
  			props = [ "*" ];
  		} else {
c5169e0e   Renato De Donato   a new hope
6649
  			props = props.split(" ");
74249687   Luigi Serra   Cross browser con...
6650
6651
6652
6653
6654
6655
6656
6657
  		}
  
  		var prop,
  			index = 0,
  			length = props.length;
  
  		for ( ; index < length ; index++ ) {
  			prop = props[ index ];
c5169e0e   Renato De Donato   a new hope
6658
6659
  			tweeners[ prop ] = tweeners[ prop ] || [];
  			tweeners[ prop ].unshift( callback );
74249687   Luigi Serra   Cross browser con...
6660
6661
6662
  		}
  	},
  
74249687   Luigi Serra   Cross browser con...
6663
6664
  	prefilter: function( callback, prepend ) {
  		if ( prepend ) {
c5169e0e   Renato De Donato   a new hope
6665
  			animationPrefilters.unshift( callback );
74249687   Luigi Serra   Cross browser con...
6666
  		} else {
c5169e0e   Renato De Donato   a new hope
6667
  			animationPrefilters.push( callback );
74249687   Luigi Serra   Cross browser con...
6668
6669
  		}
  	}
c5169e0e   Renato De Donato   a new hope
6670
  });
74249687   Luigi Serra   Cross browser con...
6671
6672
6673
6674
6675
6676
6677
6678
6679
  
  jQuery.speed = function( speed, easing, fn ) {
  	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
  		complete: fn || !fn && easing ||
  			jQuery.isFunction( speed ) && speed,
  		duration: speed,
  		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
  	};
  
c5169e0e   Renato De Donato   a new hope
6680
6681
  	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
  		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
74249687   Luigi Serra   Cross browser con...
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
  
  	// Normalize opt.queue - true/undefined/null -> "fx"
  	if ( opt.queue == null || opt.queue === true ) {
  		opt.queue = "fx";
  	}
  
  	// Queueing
  	opt.old = opt.complete;
  
  	opt.complete = function() {
  		if ( jQuery.isFunction( opt.old ) ) {
  			opt.old.call( this );
  		}
  
  		if ( opt.queue ) {
  			jQuery.dequeue( this, opt.queue );
  		}
  	};
  
  	return opt;
  };
  
c5169e0e   Renato De Donato   a new hope
6704
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
6705
6706
6707
6708
6709
6710
  	fadeTo: function( speed, to, easing, callback ) {
  
  		// Show any hidden elements after setting opacity to 0
  		return this.filter( isHidden ).css( "opacity", 0 ).show()
  
  			// Animate to the value specified
c5169e0e   Renato De Donato   a new hope
6711
  			.end().animate({ opacity: to }, speed, easing, callback );
74249687   Luigi Serra   Cross browser con...
6712
6713
6714
6715
6716
  	},
  	animate: function( prop, speed, easing, callback ) {
  		var empty = jQuery.isEmptyObject( prop ),
  			optall = jQuery.speed( speed, easing, callback ),
  			doAnimation = function() {
74249687   Luigi Serra   Cross browser con...
6717
6718
6719
6720
  				// Operate on a copy of prop so per-property easing won't be lost
  				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
  
  				// Empty animations, or finishing resolves immediately
c5169e0e   Renato De Donato   a new hope
6721
  				if ( empty || data_priv.get( this, "finish" ) ) {
74249687   Luigi Serra   Cross browser con...
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
  					anim.stop( true );
  				}
  			};
  			doAnimation.finish = doAnimation;
  
  		return empty || optall.queue === false ?
  			this.each( doAnimation ) :
  			this.queue( optall.queue, doAnimation );
  	},
  	stop: function( type, clearQueue, gotoEnd ) {
  		var stopQueue = function( hooks ) {
  			var stop = hooks.stop;
  			delete hooks.stop;
  			stop( gotoEnd );
  		};
  
  		if ( typeof type !== "string" ) {
  			gotoEnd = clearQueue;
  			clearQueue = type;
  			type = undefined;
  		}
  		if ( clearQueue && type !== false ) {
  			this.queue( type || "fx", [] );
  		}
  
c5169e0e   Renato De Donato   a new hope
6747
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
6748
6749
6750
  			var dequeue = true,
  				index = type != null && type + "queueHooks",
  				timers = jQuery.timers,
c5169e0e   Renato De Donato   a new hope
6751
  				data = data_priv.get( this );
74249687   Luigi Serra   Cross browser con...
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
  
  			if ( index ) {
  				if ( data[ index ] && data[ index ].stop ) {
  					stopQueue( data[ index ] );
  				}
  			} else {
  				for ( index in data ) {
  					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
  						stopQueue( data[ index ] );
  					}
  				}
  			}
  
  			for ( index = timers.length; index--; ) {
c5169e0e   Renato De Donato   a new hope
6766
  				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
74249687   Luigi Serra   Cross browser con...
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
  					timers[ index ].anim.stop( gotoEnd );
  					dequeue = false;
  					timers.splice( index, 1 );
  				}
  			}
  
  			// Start the next in the queue if the last step wasn't forced.
  			// Timers currently will call their complete callbacks, which
  			// will dequeue but only if they were gotoEnd.
  			if ( dequeue || !gotoEnd ) {
  				jQuery.dequeue( this, type );
  			}
c5169e0e   Renato De Donato   a new hope
6779
  		});
74249687   Luigi Serra   Cross browser con...
6780
6781
6782
6783
6784
  	},
  	finish: function( type ) {
  		if ( type !== false ) {
  			type = type || "fx";
  		}
c5169e0e   Renato De Donato   a new hope
6785
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
6786
  			var index,
c5169e0e   Renato De Donato   a new hope
6787
  				data = data_priv.get( this ),
74249687   Luigi Serra   Cross browser con...
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
  				queue = data[ type + "queue" ],
  				hooks = data[ type + "queueHooks" ],
  				timers = jQuery.timers,
  				length = queue ? queue.length : 0;
  
  			// Enable finishing flag on private data
  			data.finish = true;
  
  			// Empty the queue first
  			jQuery.queue( this, type, [] );
  
  			if ( hooks && hooks.stop ) {
  				hooks.stop.call( this, true );
  			}
  
  			// Look for any active animations, and finish them
  			for ( index = timers.length; index--; ) {
  				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
  					timers[ index ].anim.stop( true );
  					timers.splice( index, 1 );
  				}
  			}
  
  			// Look for any animations in the old queue and finish them
  			for ( index = 0; index < length; index++ ) {
  				if ( queue[ index ] && queue[ index ].finish ) {
  					queue[ index ].finish.call( this );
  				}
  			}
  
  			// Turn off finishing flag
  			delete data.finish;
c5169e0e   Renato De Donato   a new hope
6820
  		});
74249687   Luigi Serra   Cross browser con...
6821
  	}
c5169e0e   Renato De Donato   a new hope
6822
  });
74249687   Luigi Serra   Cross browser con...
6823
  
c5169e0e   Renato De Donato   a new hope
6824
  jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
74249687   Luigi Serra   Cross browser con...
6825
6826
6827
6828
6829
6830
  	var cssFn = jQuery.fn[ name ];
  	jQuery.fn[ name ] = function( speed, easing, callback ) {
  		return speed == null || typeof speed === "boolean" ?
  			cssFn.apply( this, arguments ) :
  			this.animate( genFx( name, true ), speed, easing, callback );
  	};
c5169e0e   Renato De Donato   a new hope
6831
  });
74249687   Luigi Serra   Cross browser con...
6832
6833
  
  // Generate shortcuts for custom animations
c5169e0e   Renato De Donato   a new hope
6834
6835
6836
6837
  jQuery.each({
  	slideDown: genFx("show"),
  	slideUp: genFx("hide"),
  	slideToggle: genFx("toggle"),
74249687   Luigi Serra   Cross browser con...
6838
6839
6840
6841
6842
6843
6844
  	fadeIn: { opacity: "show" },
  	fadeOut: { opacity: "hide" },
  	fadeToggle: { opacity: "toggle" }
  }, function( name, props ) {
  	jQuery.fn[ name ] = function( speed, easing, callback ) {
  		return this.animate( props, speed, easing, callback );
  	};
c5169e0e   Renato De Donato   a new hope
6845
  });
74249687   Luigi Serra   Cross browser con...
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
  
  jQuery.timers = [];
  jQuery.fx.tick = function() {
  	var timer,
  		i = 0,
  		timers = jQuery.timers;
  
  	fxNow = jQuery.now();
  
  	for ( ; i < timers.length; i++ ) {
  		timer = timers[ i ];
74249687   Luigi Serra   Cross browser con...
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
  		// Checks the timer has not already been removed
  		if ( !timer() && timers[ i ] === timer ) {
  			timers.splice( i--, 1 );
  		}
  	}
  
  	if ( !timers.length ) {
  		jQuery.fx.stop();
  	}
  	fxNow = undefined;
  };
  
  jQuery.fx.timer = function( timer ) {
  	jQuery.timers.push( timer );
  	if ( timer() ) {
  		jQuery.fx.start();
  	} else {
  		jQuery.timers.pop();
  	}
  };
  
  jQuery.fx.interval = 13;
c5169e0e   Renato De Donato   a new hope
6879
  
74249687   Luigi Serra   Cross browser con...
6880
6881
  jQuery.fx.start = function() {
  	if ( !timerId ) {
c5169e0e   Renato De Donato   a new hope
6882
  		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
74249687   Luigi Serra   Cross browser con...
6883
6884
6885
6886
  	}
  };
  
  jQuery.fx.stop = function() {
c5169e0e   Renato De Donato   a new hope
6887
  	clearInterval( timerId );
74249687   Luigi Serra   Cross browser con...
6888
6889
6890
6891
6892
6893
  	timerId = null;
  };
  
  jQuery.fx.speeds = {
  	slow: 600,
  	fast: 200,
74249687   Luigi Serra   Cross browser con...
6894
6895
6896
6897
6898
6899
  	// Default speed
  	_default: 400
  };
  
  
  // Based off of the plugin by Clint Helfers, with permission.
c5169e0e   Renato De Donato   a new hope
6900
  // http://blindsignals.com/index.php/2009/07/jquery-delay/
74249687   Luigi Serra   Cross browser con...
6901
6902
6903
6904
6905
  jQuery.fn.delay = function( time, type ) {
  	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
  	type = type || "fx";
  
  	return this.queue( type, function( next, hooks ) {
c5169e0e   Renato De Donato   a new hope
6906
  		var timeout = setTimeout( next, time );
74249687   Luigi Serra   Cross browser con...
6907
  		hooks.stop = function() {
c5169e0e   Renato De Donato   a new hope
6908
  			clearTimeout( timeout );
74249687   Luigi Serra   Cross browser con...
6909
  		};
c5169e0e   Renato De Donato   a new hope
6910
  	});
74249687   Luigi Serra   Cross browser con...
6911
6912
6913
  };
  
  
c5169e0e   Renato De Donato   a new hope
6914
  (function() {
74249687   Luigi Serra   Cross browser con...
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
  	var input = document.createElement( "input" ),
  		select = document.createElement( "select" ),
  		opt = select.appendChild( document.createElement( "option" ) );
  
  	input.type = "checkbox";
  
  	// Support: iOS<=5.1, Android<=4.2+
  	// Default value for a checkbox should be "on"
  	support.checkOn = input.value !== "";
  
  	// Support: IE<=11+
  	// Must access selectedIndex to make default options select
  	support.optSelected = opt.selected;
  
  	// Support: Android<=2.3
  	// Options inside disabled selects are incorrectly marked as disabled
  	select.disabled = true;
  	support.optDisabled = !opt.disabled;
  
  	// Support: IE<=11+
  	// An input loses its value after becoming a radio
  	input = document.createElement( "input" );
  	input.value = "t";
  	input.type = "radio";
  	support.radioValue = input.value === "t";
c5169e0e   Renato De Donato   a new hope
6940
  })();
74249687   Luigi Serra   Cross browser con...
6941
6942
  
  
c5169e0e   Renato De Donato   a new hope
6943
  var nodeHook, boolHook,
74249687   Luigi Serra   Cross browser con...
6944
6945
  	attrHandle = jQuery.expr.attrHandle;
  
c5169e0e   Renato De Donato   a new hope
6946
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
6947
6948
6949
6950
6951
  	attr: function( name, value ) {
  		return access( this, jQuery.attr, name, value, arguments.length > 1 );
  	},
  
  	removeAttr: function( name ) {
c5169e0e   Renato De Donato   a new hope
6952
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
6953
  			jQuery.removeAttr( this, name );
c5169e0e   Renato De Donato   a new hope
6954
  		});
74249687   Luigi Serra   Cross browser con...
6955
  	}
c5169e0e   Renato De Donato   a new hope
6956
  });
74249687   Luigi Serra   Cross browser con...
6957
  
c5169e0e   Renato De Donato   a new hope
6958
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
6959
  	attr: function( elem, name, value ) {
c5169e0e   Renato De Donato   a new hope
6960
  		var hooks, ret,
74249687   Luigi Serra   Cross browser con...
6961
6962
  			nType = elem.nodeType;
  
c5169e0e   Renato De Donato   a new hope
6963
6964
  		// don't get/set attributes on text, comment and attribute nodes
  		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
74249687   Luigi Serra   Cross browser con...
6965
6966
6967
6968
  			return;
  		}
  
  		// Fallback to prop when attributes are not supported
c5169e0e   Renato De Donato   a new hope
6969
  		if ( typeof elem.getAttribute === strundefined ) {
74249687   Luigi Serra   Cross browser con...
6970
6971
6972
6973
6974
6975
6976
6977
  			return jQuery.prop( elem, name, value );
  		}
  
  		// All attributes are lowercase
  		// Grab necessary hook if one is defined
  		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
  			name = name.toLowerCase();
  			hooks = jQuery.attrHooks[ name ] ||
c5169e0e   Renato De Donato   a new hope
6978
  				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
74249687   Luigi Serra   Cross browser con...
6979
6980
6981
  		}
  
  		if ( value !== undefined ) {
c5169e0e   Renato De Donato   a new hope
6982
  
74249687   Luigi Serra   Cross browser con...
6983
6984
  			if ( value === null ) {
  				jQuery.removeAttr( elem, name );
74249687   Luigi Serra   Cross browser con...
6985
  
c5169e0e   Renato De Donato   a new hope
6986
  			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
74249687   Luigi Serra   Cross browser con...
6987
  				return ret;
74249687   Luigi Serra   Cross browser con...
6988
  
c5169e0e   Renato De Donato   a new hope
6989
6990
6991
6992
  			} else {
  				elem.setAttribute( name, value + "" );
  				return value;
  			}
a1a3bc73   Luigi Serra   graphs updates
6993
  
c5169e0e   Renato De Donato   a new hope
6994
  		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
74249687   Luigi Serra   Cross browser con...
6995
  			return ret;
a1a3bc73   Luigi Serra   graphs updates
6996
  
c5169e0e   Renato De Donato   a new hope
6997
6998
  		} else {
  			ret = jQuery.find.attr( elem, name );
74249687   Luigi Serra   Cross browser con...
6999
  
c5169e0e   Renato De Donato   a new hope
7000
7001
7002
7003
  			// Non-existent attributes return null, we normalize to undefined
  			return ret == null ?
  				undefined :
  				ret;
74249687   Luigi Serra   Cross browser con...
7004
7005
7006
7007
7008
7009
7010
7011
7012
  		}
  	},
  
  	removeAttr: function( elem, value ) {
  		var name, propName,
  			i = 0,
  			attrNames = value && value.match( rnotwhite );
  
  		if ( attrNames && elem.nodeType === 1 ) {
c5169e0e   Renato De Donato   a new hope
7013
  			while ( (name = attrNames[i++]) ) {
74249687   Luigi Serra   Cross browser con...
7014
7015
7016
7017
  				propName = jQuery.propFix[ name ] || name;
  
  				// Boolean attributes get special treatment (#10870)
  				if ( jQuery.expr.match.bool.test( name ) ) {
74249687   Luigi Serra   Cross browser con...
7018
7019
7020
7021
7022
7023
7024
  					// Set corresponding property to false
  					elem[ propName ] = false;
  				}
  
  				elem.removeAttribute( name );
  			}
  		}
c5169e0e   Renato De Donato   a new hope
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
  	},
  
  	attrHooks: {
  		type: {
  			set: function( elem, value ) {
  				if ( !support.radioValue && value === "radio" &&
  					jQuery.nodeName( elem, "input" ) ) {
  					var val = elem.value;
  					elem.setAttribute( "type", value );
  					if ( val ) {
  						elem.value = val;
  					}
  					return value;
  				}
  			}
  		}
74249687   Luigi Serra   Cross browser con...
7041
  	}
c5169e0e   Renato De Donato   a new hope
7042
  });
74249687   Luigi Serra   Cross browser con...
7043
7044
7045
7046
7047
  
  // Hooks for boolean attributes
  boolHook = {
  	set: function( elem, value, name ) {
  		if ( value === false ) {
74249687   Luigi Serra   Cross browser con...
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
  			// Remove boolean attributes when set to false
  			jQuery.removeAttr( elem, name );
  		} else {
  			elem.setAttribute( name, name );
  		}
  		return name;
  	}
  };
  jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
  	var getter = attrHandle[ name ] || jQuery.find.attr;
  
  	attrHandle[ name ] = function( elem, name, isXML ) {
  		var ret, handle;
  		if ( !isXML ) {
74249687   Luigi Serra   Cross browser con...
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
  			// Avoid an infinite loop by temporarily removing this function from the getter
  			handle = attrHandle[ name ];
  			attrHandle[ name ] = ret;
  			ret = getter( elem, name, isXML ) != null ?
  				name.toLowerCase() :
  				null;
  			attrHandle[ name ] = handle;
  		}
  		return ret;
  	};
c5169e0e   Renato De Donato   a new hope
7072
  });
74249687   Luigi Serra   Cross browser con...
7073
7074
7075
7076
  
  
  
  
c5169e0e   Renato De Donato   a new hope
7077
  var rfocusable = /^(?:input|select|textarea|button)$/i;
74249687   Luigi Serra   Cross browser con...
7078
  
c5169e0e   Renato De Donato   a new hope
7079
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
7080
7081
7082
7083
7084
  	prop: function( name, value ) {
  		return access( this, jQuery.prop, name, value, arguments.length > 1 );
  	},
  
  	removeProp: function( name ) {
c5169e0e   Renato De Donato   a new hope
7085
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
7086
  			delete this[ jQuery.propFix[ name ] || name ];
c5169e0e   Renato De Donato   a new hope
7087
  		});
74249687   Luigi Serra   Cross browser con...
7088
  	}
c5169e0e   Renato De Donato   a new hope
7089
7090
7091
7092
7093
7094
7095
  });
  
  jQuery.extend({
  	propFix: {
  		"for": "htmlFor",
  		"class": "className"
  	},
74249687   Luigi Serra   Cross browser con...
7096
  
74249687   Luigi Serra   Cross browser con...
7097
  	prop: function( elem, name, value ) {
c5169e0e   Renato De Donato   a new hope
7098
  		var ret, hooks, notxml,
74249687   Luigi Serra   Cross browser con...
7099
7100
7101
  			nType = elem.nodeType;
  
  		// Don't get/set properties on text, comment and attribute nodes
c5169e0e   Renato De Donato   a new hope
7102
  		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
74249687   Luigi Serra   Cross browser con...
7103
7104
7105
  			return;
  		}
  
c5169e0e   Renato De Donato   a new hope
7106
  		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
74249687   Luigi Serra   Cross browser con...
7107
  
c5169e0e   Renato De Donato   a new hope
7108
  		if ( notxml ) {
74249687   Luigi Serra   Cross browser con...
7109
7110
7111
7112
7113
7114
  			// Fix name and attach hooks
  			name = jQuery.propFix[ name ] || name;
  			hooks = jQuery.propHooks[ name ];
  		}
  
  		if ( value !== undefined ) {
c5169e0e   Renato De Donato   a new hope
7115
7116
7117
  			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
  				ret :
  				( elem[ name ] = value );
a1a3bc73   Luigi Serra   graphs updates
7118
  
c5169e0e   Renato De Donato   a new hope
7119
7120
7121
7122
  		} else {
  			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
  				ret :
  				elem[ name ];
74249687   Luigi Serra   Cross browser con...
7123
  		}
74249687   Luigi Serra   Cross browser con...
7124
7125
7126
7127
7128
  	},
  
  	propHooks: {
  		tabIndex: {
  			get: function( elem ) {
c5169e0e   Renato De Donato   a new hope
7129
7130
7131
  				return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
  					elem.tabIndex :
  					-1;
74249687   Luigi Serra   Cross browser con...
7132
7133
  			}
  		}
74249687   Luigi Serra   Cross browser con...
7134
  	}
c5169e0e   Renato De Donato   a new hope
7135
  });
74249687   Luigi Serra   Cross browser con...
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
  
  if ( !support.optSelected ) {
  	jQuery.propHooks.selected = {
  		get: function( elem ) {
  			var parent = elem.parentNode;
  			if ( parent && parent.parentNode ) {
  				parent.parentNode.selectedIndex;
  			}
  			return null;
  		}
  	};
  }
  
c5169e0e   Renato De Donato   a new hope
7149
  jQuery.each([
74249687   Luigi Serra   Cross browser con...
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
  	"tabIndex",
  	"readOnly",
  	"maxLength",
  	"cellSpacing",
  	"cellPadding",
  	"rowSpan",
  	"colSpan",
  	"useMap",
  	"frameBorder",
  	"contentEditable"
  ], function() {
  	jQuery.propFix[ this.toLowerCase() ] = this;
c5169e0e   Renato De Donato   a new hope
7162
  });
74249687   Luigi Serra   Cross browser con...
7163
7164
7165
7166
7167
7168
  
  
  
  
  var rclass = /[\t\r\n\f]/g;
  
c5169e0e   Renato De Donato   a new hope
7169
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
7170
  	addClass: function( value ) {
c5169e0e   Renato De Donato   a new hope
7171
7172
7173
7174
  		var classes, elem, cur, clazz, j, finalValue,
  			proceed = typeof value === "string" && value,
  			i = 0,
  			len = this.length;
74249687   Luigi Serra   Cross browser con...
7175
7176
  
  		if ( jQuery.isFunction( value ) ) {
c5169e0e   Renato De Donato   a new hope
7177
7178
7179
  			return this.each(function( j ) {
  				jQuery( this ).addClass( value.call( this, j, this.className ) );
  			});
74249687   Luigi Serra   Cross browser con...
7180
7181
  		}
  
c5169e0e   Renato De Donato   a new hope
7182
7183
7184
  		if ( proceed ) {
  			// The disjunction here is for better compressibility (see removeClass)
  			classes = ( value || "" ).match( rnotwhite ) || [];
74249687   Luigi Serra   Cross browser con...
7185
  
c5169e0e   Renato De Donato   a new hope
7186
7187
7188
7189
7190
7191
  			for ( ; i < len; i++ ) {
  				elem = this[ i ];
  				cur = elem.nodeType === 1 && ( elem.className ?
  					( " " + elem.className + " " ).replace( rclass, " " ) :
  					" "
  				);
74249687   Luigi Serra   Cross browser con...
7192
7193
7194
  
  				if ( cur ) {
  					j = 0;
c5169e0e   Renato De Donato   a new hope
7195
  					while ( (clazz = classes[j++]) ) {
74249687   Luigi Serra   Cross browser con...
7196
7197
7198
7199
7200
  						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
  							cur += clazz + " ";
  						}
  					}
  
c5169e0e   Renato De Donato   a new hope
7201
  					// only assign if different to avoid unneeded rendering.
74249687   Luigi Serra   Cross browser con...
7202
  					finalValue = jQuery.trim( cur );
c5169e0e   Renato De Donato   a new hope
7203
7204
  					if ( elem.className !== finalValue ) {
  						elem.className = finalValue;
74249687   Luigi Serra   Cross browser con...
7205
7206
7207
7208
7209
7210
7211
7212
7213
  					}
  				}
  			}
  		}
  
  		return this;
  	},
  
  	removeClass: function( value ) {
c5169e0e   Renato De Donato   a new hope
7214
7215
7216
7217
  		var classes, elem, cur, clazz, j, finalValue,
  			proceed = arguments.length === 0 || typeof value === "string" && value,
  			i = 0,
  			len = this.length;
74249687   Luigi Serra   Cross browser con...
7218
7219
  
  		if ( jQuery.isFunction( value ) ) {
c5169e0e   Renato De Donato   a new hope
7220
7221
7222
  			return this.each(function( j ) {
  				jQuery( this ).removeClass( value.call( this, j, this.className ) );
  			});
a1a3bc73   Luigi Serra   graphs updates
7223
  		}
c5169e0e   Renato De Donato   a new hope
7224
7225
  		if ( proceed ) {
  			classes = ( value || "" ).match( rnotwhite ) || [];
a1a3bc73   Luigi Serra   graphs updates
7226
  
c5169e0e   Renato De Donato   a new hope
7227
7228
  			for ( ; i < len; i++ ) {
  				elem = this[ i ];
74249687   Luigi Serra   Cross browser con...
7229
  				// This expression is here for better compressibility (see addClass)
c5169e0e   Renato De Donato   a new hope
7230
7231
7232
7233
  				cur = elem.nodeType === 1 && ( elem.className ?
  					( " " + elem.className + " " ).replace( rclass, " " ) :
  					""
  				);
74249687   Luigi Serra   Cross browser con...
7234
7235
7236
  
  				if ( cur ) {
  					j = 0;
c5169e0e   Renato De Donato   a new hope
7237
  					while ( (clazz = classes[j++]) ) {
74249687   Luigi Serra   Cross browser con...
7238
  						// Remove *all* instances
c5169e0e   Renato De Donato   a new hope
7239
  						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
74249687   Luigi Serra   Cross browser con...
7240
7241
7242
7243
7244
  							cur = cur.replace( " " + clazz + " ", " " );
  						}
  					}
  
  					// Only assign if different to avoid unneeded rendering.
c5169e0e   Renato De Donato   a new hope
7245
7246
7247
  					finalValue = value ? jQuery.trim( cur ) : "";
  					if ( elem.className !== finalValue ) {
  						elem.className = finalValue;
74249687   Luigi Serra   Cross browser con...
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
  					}
  				}
  			}
  		}
  
  		return this;
  	},
  
  	toggleClass: function( value, stateVal ) {
  		var type = typeof value;
  
  		if ( typeof stateVal === "boolean" && type === "string" ) {
  			return stateVal ? this.addClass( value ) : this.removeClass( value );
  		}
  
  		if ( jQuery.isFunction( value ) ) {
c5169e0e   Renato De Donato   a new hope
7264
7265
7266
  			return this.each(function( i ) {
  				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
  			});
74249687   Luigi Serra   Cross browser con...
7267
7268
  		}
  
c5169e0e   Renato De Donato   a new hope
7269
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
7270
  			if ( type === "string" ) {
74249687   Luigi Serra   Cross browser con...
7271
  				// Toggle individual class names
c5169e0e   Renato De Donato   a new hope
7272
7273
7274
7275
  				var className,
  					i = 0,
  					self = jQuery( this ),
  					classNames = value.match( rnotwhite ) || [];
74249687   Luigi Serra   Cross browser con...
7276
  
c5169e0e   Renato De Donato   a new hope
7277
  				while ( (className = classNames[ i++ ]) ) {
74249687   Luigi Serra   Cross browser con...
7278
7279
7280
7281
7282
7283
7284
7285
7286
  					// Check each className given, space separated list
  					if ( self.hasClass( className ) ) {
  						self.removeClass( className );
  					} else {
  						self.addClass( className );
  					}
  				}
  
  			// Toggle whole class name
c5169e0e   Renato De Donato   a new hope
7287
7288
7289
7290
  			} else if ( type === strundefined || type === "boolean" ) {
  				if ( this.className ) {
  					// store className if set
  					data_priv.set( this, "__className__", this.className );
74249687   Luigi Serra   Cross browser con...
7291
7292
7293
7294
7295
7296
  				}
  
  				// If the element has a class name or if we're passed `false`,
  				// then remove the whole classname (if there was one, the above saved it).
  				// Otherwise bring back whatever was previously saved (if anything),
  				// falling back to the empty string if nothing was stored.
c5169e0e   Renato De Donato   a new hope
7297
  				this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
74249687   Luigi Serra   Cross browser con...
7298
  			}
c5169e0e   Renato De Donato   a new hope
7299
  		});
74249687   Luigi Serra   Cross browser con...
7300
7301
7302
  	},
  
  	hasClass: function( selector ) {
c5169e0e   Renato De Donato   a new hope
7303
7304
7305
7306
7307
  		var className = " " + selector + " ",
  			i = 0,
  			l = this.length;
  		for ( ; i < l; i++ ) {
  			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
74249687   Luigi Serra   Cross browser con...
7308
7309
7310
7311
7312
7313
  				return true;
  			}
  		}
  
  		return false;
  	}
c5169e0e   Renato De Donato   a new hope
7314
  });
74249687   Luigi Serra   Cross browser con...
7315
7316
7317
7318
7319
7320
  
  
  
  
  var rreturn = /\r/g;
  
c5169e0e   Renato De Donato   a new hope
7321
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
7322
7323
  	val: function( value ) {
  		var hooks, ret, isFunction,
c5169e0e   Renato De Donato   a new hope
7324
  			elem = this[0];
74249687   Luigi Serra   Cross browser con...
7325
7326
7327
  
  		if ( !arguments.length ) {
  			if ( elem ) {
c5169e0e   Renato De Donato   a new hope
7328
  				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
74249687   Luigi Serra   Cross browser con...
7329
  
c5169e0e   Renato De Donato   a new hope
7330
  				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
74249687   Luigi Serra   Cross browser con...
7331
7332
7333
7334
7335
7336
  					return ret;
  				}
  
  				ret = elem.value;
  
  				return typeof ret === "string" ?
74249687   Luigi Serra   Cross browser con...
7337
  					// Handle most common string cases
c5169e0e   Renato De Donato   a new hope
7338
  					ret.replace(rreturn, "") :
74249687   Luigi Serra   Cross browser con...
7339
7340
7341
7342
7343
7344
7345
7346
7347
  					// Handle cases where value is null/undef or number
  					ret == null ? "" : ret;
  			}
  
  			return;
  		}
  
  		isFunction = jQuery.isFunction( value );
  
c5169e0e   Renato De Donato   a new hope
7348
  		return this.each(function( i ) {
74249687   Luigi Serra   Cross browser con...
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
  			var val;
  
  			if ( this.nodeType !== 1 ) {
  				return;
  			}
  
  			if ( isFunction ) {
  				val = value.call( this, i, jQuery( this ).val() );
  			} else {
  				val = value;
  			}
  
  			// Treat null/undefined as ""; convert numbers to string
  			if ( val == null ) {
  				val = "";
  
  			} else if ( typeof val === "number" ) {
  				val += "";
  
  			} else if ( jQuery.isArray( val ) ) {
  				val = jQuery.map( val, function( value ) {
  					return value == null ? "" : value + "";
c5169e0e   Renato De Donato   a new hope
7371
  				});
74249687   Luigi Serra   Cross browser con...
7372
7373
7374
7375
7376
  			}
  
  			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
  
  			// If set returns undefined, fall back to normal setting
c5169e0e   Renato De Donato   a new hope
7377
  			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
74249687   Luigi Serra   Cross browser con...
7378
7379
  				this.value = val;
  			}
c5169e0e   Renato De Donato   a new hope
7380
  		});
74249687   Luigi Serra   Cross browser con...
7381
  	}
c5169e0e   Renato De Donato   a new hope
7382
  });
74249687   Luigi Serra   Cross browser con...
7383
  
c5169e0e   Renato De Donato   a new hope
7384
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
7385
7386
7387
  	valHooks: {
  		option: {
  			get: function( elem ) {
c5169e0e   Renato De Donato   a new hope
7388
7389
7390
7391
7392
7393
  				var val = jQuery.find.attr( elem, "value" );
  				return val != null ?
  					val :
  					// Support: IE10-11+
  					// option.text throws exceptions (#14686, #14858)
  					jQuery.trim( jQuery.text( elem ) );
74249687   Luigi Serra   Cross browser con...
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
  			}
  		},
  		select: {
  			get: function( elem ) {
  				var value, option,
  					options = elem.options,
  					index = elem.selectedIndex,
  					one = elem.type === "select-one" || index < 0,
  					values = one ? null : [],
  					max = one ? index + 1 : options.length,
  					i = index < 0 ?
  						max :
  						one ? index : 0;
  
  				// Loop through all the selected options
  				for ( ; i < max; i++ ) {
  					option = options[ i ];
  
c5169e0e   Renato De Donato   a new hope
7412
  					// IE6-9 doesn't update selected after form reset (#2551)
74249687   Luigi Serra   Cross browser con...
7413
  					if ( ( option.selected || i === index ) &&
74249687   Luigi Serra   Cross browser con...
7414
  							// Don't return options that are disabled or in a disabled optgroup
c5169e0e   Renato De Donato   a new hope
7415
7416
  							( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
  							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
74249687   Luigi Serra   Cross browser con...
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
  
  						// Get the specific value for the option
  						value = jQuery( option ).val();
  
  						// We don't need an array for one selects
  						if ( one ) {
  							return value;
  						}
  
  						// Multi-Selects return an array
  						values.push( value );
  					}
  				}
  
  				return values;
  			},
  
c5169e0e   Renato De Donato   a new hope
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
  			set: function( elem, value ) {
  				var optionSet, option,
  					options = elem.options,
  					values = jQuery.makeArray( value ),
  					i = options.length;
  
  				while ( i-- ) {
  					option = options[ i ];
  					if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
  						optionSet = true;
a1a3bc73   Luigi Serra   graphs updates
7444
  					}
74249687   Luigi Serra   Cross browser con...
7445
  				}
c5169e0e   Renato De Donato   a new hope
7446
7447
7448
7449
7450
7451
  
  				// Force browsers to behave consistently when non-matching value is set
  				if ( !optionSet ) {
  					elem.selectedIndex = -1;
  				}
  				return values;
74249687   Luigi Serra   Cross browser con...
7452
7453
  			}
  		}
c5169e0e   Renato De Donato   a new hope
7454
7455
  	}
  });
74249687   Luigi Serra   Cross browser con...
7456
  
c5169e0e   Renato De Donato   a new hope
7457
7458
7459
7460
7461
7462
  // Radios and checkboxes getter/setter
  jQuery.each([ "radio", "checkbox" ], function() {
  	jQuery.valHooks[ this ] = {
  		set: function( elem, value ) {
  			if ( jQuery.isArray( value ) ) {
  				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
74249687   Luigi Serra   Cross browser con...
7463
  			}
74249687   Luigi Serra   Cross browser con...
7464
  		}
c5169e0e   Renato De Donato   a new hope
7465
7466
7467
7468
7469
  	};
  	if ( !support.checkOn ) {
  		jQuery.valHooks[ this ].get = function( elem ) {
  			return elem.getAttribute("value") === null ? "on" : elem.value;
  		};
74249687   Luigi Serra   Cross browser con...
7470
  	}
c5169e0e   Renato De Donato   a new hope
7471
  });
74249687   Luigi Serra   Cross browser con...
7472
  
74249687   Luigi Serra   Cross browser con...
7473
  
74249687   Luigi Serra   Cross browser con...
7474
  
c5169e0e   Renato De Donato   a new hope
7475
7476
  
  // Return jQuery for attributes-only inclusion
74249687   Luigi Serra   Cross browser con...
7477
7478
  
  
c5169e0e   Renato De Donato   a new hope
7479
  jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
74249687   Luigi Serra   Cross browser con...
7480
  	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
c5169e0e   Renato De Donato   a new hope
7481
  	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
74249687   Luigi Serra   Cross browser con...
7482
7483
7484
7485
7486
7487
7488
  
  	// Handle event binding
  	jQuery.fn[ name ] = function( data, fn ) {
  		return arguments.length > 0 ?
  			this.on( name, null, data, fn ) :
  			this.trigger( name );
  	};
c5169e0e   Renato De Donato   a new hope
7489
  });
74249687   Luigi Serra   Cross browser con...
7490
  
c5169e0e   Renato De Donato   a new hope
7491
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
7492
7493
  	hover: function( fnOver, fnOut ) {
  		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
c5169e0e   Renato De Donato   a new hope
7494
  	},
a1a3bc73   Luigi Serra   graphs updates
7495
  
c5169e0e   Renato De Donato   a new hope
7496
7497
7498
7499
7500
7501
  	bind: function( types, data, fn ) {
  		return this.on( types, null, data, fn );
  	},
  	unbind: function( types, fn ) {
  		return this.off( types, null, fn );
  	},
a1a3bc73   Luigi Serra   graphs updates
7502
  
c5169e0e   Renato De Donato   a new hope
7503
7504
7505
7506
7507
7508
7509
7510
  	delegate: function( selector, types, data, fn ) {
  		return this.on( types, selector, data, fn );
  	},
  	undelegate: function( selector, types, fn ) {
  		// ( namespace ) or ( selector, types [, fn] )
  		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
  	}
  });
a1a3bc73   Luigi Serra   graphs updates
7511
  
a1a3bc73   Luigi Serra   graphs updates
7512
  
74249687   Luigi Serra   Cross browser con...
7513
7514
  var nonce = jQuery.now();
  
c5169e0e   Renato De Donato   a new hope
7515
  var rquery = (/\?/);
74249687   Luigi Serra   Cross browser con...
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
  
  
  
  // Support: Android 2.3
  // Workaround failure to string-cast null input
  jQuery.parseJSON = function( data ) {
  	return JSON.parse( data + "" );
  };
  
  
  // Cross-browser xml parsing
  jQuery.parseXML = function( data ) {
c5169e0e   Renato De Donato   a new hope
7528
  	var xml, tmp;
74249687   Luigi Serra   Cross browser con...
7529
7530
7531
7532
7533
7534
  	if ( !data || typeof data !== "string" ) {
  		return null;
  	}
  
  	// Support: IE9
  	try {
c5169e0e   Renato De Donato   a new hope
7535
7536
  		tmp = new DOMParser();
  		xml = tmp.parseFromString( data, "text/xml" );
74249687   Luigi Serra   Cross browser con...
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
  	} catch ( e ) {
  		xml = undefined;
  	}
  
  	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
  		jQuery.error( "Invalid XML: " + data );
  	}
  	return xml;
  };
  
  
  var
  	rhash = /#.*$/,
  	rts = /([?&])_=[^&]*/,
  	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
74249687   Luigi Serra   Cross browser con...
7552
7553
7554
7555
  	// #7653, #8125, #8152: local protocol detection
  	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
  	rnoContent = /^(?:GET|HEAD)$/,
  	rprotocol = /^\/\//,
c5169e0e   Renato De Donato   a new hope
7556
  	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
74249687   Luigi Serra   Cross browser con...
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
  
  	/* Prefilters
  	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
  	 * 2) These are called:
  	 *    - BEFORE asking for a transport
  	 *    - AFTER param serialization (s.data is a string if s.processData is true)
  	 * 3) key is the dataType
  	 * 4) the catchall symbol "*" can be used
  	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
  	 */
  	prefilters = {},
  
  	/* Transports bindings
  	 * 1) key is the dataType
  	 * 2) the catchall symbol "*" can be used
  	 * 3) selection will start with transport dataType and THEN go to "*" if needed
  	 */
  	transports = {},
  
  	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
  	allTypes = "*/".concat( "*" ),
  
c5169e0e   Renato De Donato   a new hope
7579
7580
7581
7582
7583
  	// Document location
  	ajaxLocation = window.location.href,
  
  	// Segment location into parts
  	ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
74249687   Luigi Serra   Cross browser con...
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
  
  // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
  function addToPrefiltersOrTransports( structure ) {
  
  	// dataTypeExpression is optional and defaults to "*"
  	return function( dataTypeExpression, func ) {
  
  		if ( typeof dataTypeExpression !== "string" ) {
  			func = dataTypeExpression;
  			dataTypeExpression = "*";
  		}
  
  		var dataType,
  			i = 0,
  			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
  
  		if ( jQuery.isFunction( func ) ) {
74249687   Luigi Serra   Cross browser con...
7601
  			// For each dataType in the dataTypeExpression
c5169e0e   Renato De Donato   a new hope
7602
  			while ( (dataType = dataTypes[i++]) ) {
74249687   Luigi Serra   Cross browser con...
7603
  				// Prepend if requested
c5169e0e   Renato De Donato   a new hope
7604
  				if ( dataType[0] === "+" ) {
74249687   Luigi Serra   Cross browser con...
7605
  					dataType = dataType.slice( 1 ) || "*";
c5169e0e   Renato De Donato   a new hope
7606
  					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
74249687   Luigi Serra   Cross browser con...
7607
7608
7609
  
  				// Otherwise append
  				} else {
c5169e0e   Renato De Donato   a new hope
7610
  					(structure[ dataType ] = structure[ dataType ] || []).push( func );
74249687   Luigi Serra   Cross browser con...
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
  				}
  			}
  		}
  	};
  }
  
  // Base inspection function for prefilters and transports
  function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
  
  	var inspected = {},
  		seekingTransport = ( structure === transports );
  
  	function inspect( dataType ) {
  		var selected;
  		inspected[ dataType ] = true;
  		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
  			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
c5169e0e   Renato De Donato   a new hope
7628
  			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
74249687   Luigi Serra   Cross browser con...
7629
7630
7631
7632
7633
7634
  				options.dataTypes.unshift( dataTypeOrTransport );
  				inspect( dataTypeOrTransport );
  				return false;
  			} else if ( seekingTransport ) {
  				return !( selected = dataTypeOrTransport );
  			}
c5169e0e   Renato De Donato   a new hope
7635
  		});
74249687   Luigi Serra   Cross browser con...
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
  		return selected;
  	}
  
  	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
  }
  
  // A special extend for ajax options
  // that takes "flat" options (not to be deep extended)
  // Fixes #9887
  function ajaxExtend( target, src ) {
  	var key, deep,
  		flatOptions = jQuery.ajaxSettings.flatOptions || {};
  
  	for ( key in src ) {
  		if ( src[ key ] !== undefined ) {
c5169e0e   Renato De Donato   a new hope
7651
  			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
74249687   Luigi Serra   Cross browser con...
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
  		}
  	}
  	if ( deep ) {
  		jQuery.extend( true, target, deep );
  	}
  
  	return target;
  }
  
  /* Handles responses to an ajax request:
   * - finds the right dataType (mediates between content-type and expected dataType)
   * - returns the corresponding response
   */
  function ajaxHandleResponses( s, jqXHR, responses ) {
  
  	var ct, type, finalDataType, firstDataType,
  		contents = s.contents,
  		dataTypes = s.dataTypes;
  
  	// Remove auto dataType and get content-type in the process
  	while ( dataTypes[ 0 ] === "*" ) {
  		dataTypes.shift();
  		if ( ct === undefined ) {
c5169e0e   Renato De Donato   a new hope
7675
  			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
74249687   Luigi Serra   Cross browser con...
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
  		}
  	}
  
  	// Check if we're dealing with a known content-type
  	if ( ct ) {
  		for ( type in contents ) {
  			if ( contents[ type ] && contents[ type ].test( ct ) ) {
  				dataTypes.unshift( type );
  				break;
  			}
  		}
  	}
  
  	// Check to see if we have a response for the expected dataType
  	if ( dataTypes[ 0 ] in responses ) {
  		finalDataType = dataTypes[ 0 ];
  	} else {
74249687   Luigi Serra   Cross browser con...
7693
7694
  		// Try convertible dataTypes
  		for ( type in responses ) {
c5169e0e   Renato De Donato   a new hope
7695
  			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
74249687   Luigi Serra   Cross browser con...
7696
7697
7698
7699
7700
7701
7702
  				finalDataType = type;
  				break;
  			}
  			if ( !firstDataType ) {
  				firstDataType = type;
  			}
  		}
74249687   Luigi Serra   Cross browser con...
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
  		// Or just use first one
  		finalDataType = finalDataType || firstDataType;
  	}
  
  	// If we found a dataType
  	// We add the dataType to the list if needed
  	// and return the corresponding response
  	if ( finalDataType ) {
  		if ( finalDataType !== dataTypes[ 0 ] ) {
  			dataTypes.unshift( finalDataType );
  		}
  		return responses[ finalDataType ];
  	}
  }
  
  /* Chain conversions given the request and the original response
   * Also sets the responseXXX fields on the jqXHR instance
   */
  function ajaxConvert( s, response, jqXHR, isSuccess ) {
  	var conv2, current, conv, tmp, prev,
  		converters = {},
74249687   Luigi Serra   Cross browser con...
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
  		// Work with a copy of dataTypes in case we need to modify it for conversion
  		dataTypes = s.dataTypes.slice();
  
  	// Create converters map with lowercased keys
  	if ( dataTypes[ 1 ] ) {
  		for ( conv in s.converters ) {
  			converters[ conv.toLowerCase() ] = s.converters[ conv ];
  		}
  	}
  
  	current = dataTypes.shift();
  
  	// Convert to each sequential dataType
  	while ( current ) {
  
  		if ( s.responseFields[ current ] ) {
  			jqXHR[ s.responseFields[ current ] ] = response;
  		}
  
  		// Apply the dataFilter if provided
  		if ( !prev && isSuccess && s.dataFilter ) {
  			response = s.dataFilter( response, s.dataType );
  		}
  
  		prev = current;
  		current = dataTypes.shift();
  
  		if ( current ) {
  
  		// There's only work to do if current dataType is non-auto
  			if ( current === "*" ) {
  
  				current = prev;
  
  			// Convert response if prev dataType is non-auto and differs from current
  			} else if ( prev !== "*" && prev !== current ) {
  
  				// Seek a direct converter
  				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
  
  				// If none found, seek a pair
  				if ( !conv ) {
  					for ( conv2 in converters ) {
  
  						// If conv2 outputs current
  						tmp = conv2.split( " " );
  						if ( tmp[ 1 ] === current ) {
  
  							// If prev can be converted to accepted input
  							conv = converters[ prev + " " + tmp[ 0 ] ] ||
  								converters[ "* " + tmp[ 0 ] ];
  							if ( conv ) {
74249687   Luigi Serra   Cross browser con...
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
  								// Condense equivalence converters
  								if ( conv === true ) {
  									conv = converters[ conv2 ];
  
  								// Otherwise, insert the intermediate dataType
  								} else if ( converters[ conv2 ] !== true ) {
  									current = tmp[ 0 ];
  									dataTypes.unshift( tmp[ 1 ] );
  								}
  								break;
  							}
  						}
  					}
  				}
  
  				// Apply converter (if not an equivalence)
  				if ( conv !== true ) {
  
  					// Unless errors are allowed to bubble, catch and return them
c5169e0e   Renato De Donato   a new hope
7795
  					if ( conv && s[ "throws" ] ) {
74249687   Luigi Serra   Cross browser con...
7796
7797
7798
7799
7800
  						response = conv( response );
  					} else {
  						try {
  							response = conv( response );
  						} catch ( e ) {
c5169e0e   Renato De Donato   a new hope
7801
  							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
74249687   Luigi Serra   Cross browser con...
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
  						}
  					}
  				}
  			}
  		}
  	}
  
  	return { state: "success", data: response };
  }
  
c5169e0e   Renato De Donato   a new hope
7812
  jQuery.extend({
74249687   Luigi Serra   Cross browser con...
7813
7814
7815
7816
7817
7818
7819
7820
7821
  
  	// Counter for holding the number of active queries
  	active: 0,
  
  	// Last-Modified header cache for next request
  	lastModified: {},
  	etag: {},
  
  	ajaxSettings: {
c5169e0e   Renato De Donato   a new hope
7822
  		url: ajaxLocation,
74249687   Luigi Serra   Cross browser con...
7823
  		type: "GET",
c5169e0e   Renato De Donato   a new hope
7824
  		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
74249687   Luigi Serra   Cross browser con...
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
  		global: true,
  		processData: true,
  		async: true,
  		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  		/*
  		timeout: 0,
  		data: null,
  		dataType: null,
  		username: null,
  		password: null,
  		cache: null,
  		throws: false,
  		traditional: false,
  		headers: {},
  		*/
  
  		accepts: {
  			"*": allTypes,
  			text: "text/plain",
  			html: "text/html",
  			xml: "application/xml, text/xml",
  			json: "application/json, text/javascript"
  		},
  
  		contents: {
c5169e0e   Renato De Donato   a new hope
7850
7851
7852
  			xml: /xml/,
  			html: /html/,
  			json: /json/
74249687   Luigi Serra   Cross browser con...
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
  		},
  
  		responseFields: {
  			xml: "responseXML",
  			text: "responseText",
  			json: "responseJSON"
  		},
  
  		// Data converters
  		// Keys separate source (or catchall "*") and destination types with a single space
  		converters: {
  
  			// Convert anything to text
  			"* text": String,
  
  			// Text to html (true = no transformation)
  			"text html": true,
  
  			// Evaluate text as a json expression
  			"text json": jQuery.parseJSON,
  
  			// Parse text as xml
  			"text xml": jQuery.parseXML
  		},
  
  		// For options that shouldn't be deep extended:
  		// you can add your own custom options here if
  		// and when you create one that shouldn't be
  		// deep extended (see ajaxExtend)
  		flatOptions: {
  			url: true,
  			context: true
  		}
  	},
  
  	// Creates a full fledged settings object into target
  	// with both ajaxSettings and settings fields.
  	// If target is omitted, writes into ajaxSettings.
  	ajaxSetup: function( target, settings ) {
  		return settings ?
  
  			// Building a settings object
  			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
  
  			// Extending ajaxSettings
  			ajaxExtend( jQuery.ajaxSettings, target );
  	},
  
  	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
  	ajaxTransport: addToPrefiltersOrTransports( transports ),
  
  	// Main method
  	ajax: function( url, options ) {
  
  		// If url is an object, simulate pre-1.5 signature
  		if ( typeof url === "object" ) {
  			options = url;
  			url = undefined;
  		}
  
  		// Force options to be an object
  		options = options || {};
  
  		var transport,
74249687   Luigi Serra   Cross browser con...
7917
7918
  			// URL without anti-cache param
  			cacheURL,
74249687   Luigi Serra   Cross browser con...
7919
7920
7921
  			// Response headers
  			responseHeadersString,
  			responseHeaders,
74249687   Luigi Serra   Cross browser con...
7922
7923
  			// timeout handle
  			timeoutTimer,
c5169e0e   Renato De Donato   a new hope
7924
7925
  			// Cross-domain detection vars
  			parts,
74249687   Luigi Serra   Cross browser con...
7926
7927
  			// To know if global events are to be dispatched
  			fireGlobals,
74249687   Luigi Serra   Cross browser con...
7928
7929
  			// Loop variable
  			i,
74249687   Luigi Serra   Cross browser con...
7930
7931
  			// Create the final options object
  			s = jQuery.ajaxSetup( {}, options ),
74249687   Luigi Serra   Cross browser con...
7932
7933
  			// Callbacks context
  			callbackContext = s.context || s,
74249687   Luigi Serra   Cross browser con...
7934
  			// Context for global events is callbackContext if it is a DOM node or jQuery collection
c5169e0e   Renato De Donato   a new hope
7935
7936
7937
  			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
  				jQuery( callbackContext ) :
  				jQuery.event,
74249687   Luigi Serra   Cross browser con...
7938
7939
  			// Deferreds
  			deferred = jQuery.Deferred(),
c5169e0e   Renato De Donato   a new hope
7940
  			completeDeferred = jQuery.Callbacks("once memory"),
74249687   Luigi Serra   Cross browser con...
7941
7942
  			// Status-dependent callbacks
  			statusCode = s.statusCode || {},
74249687   Luigi Serra   Cross browser con...
7943
7944
7945
  			// Headers (they are sent all at once)
  			requestHeaders = {},
  			requestHeadersNames = {},
74249687   Luigi Serra   Cross browser con...
7946
7947
  			// The jqXHR state
  			state = 0,
74249687   Luigi Serra   Cross browser con...
7948
7949
  			// Default abort message
  			strAbort = "canceled",
74249687   Luigi Serra   Cross browser con...
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
  			// Fake xhr
  			jqXHR = {
  				readyState: 0,
  
  				// Builds headers hashtable if needed
  				getResponseHeader: function( key ) {
  					var match;
  					if ( state === 2 ) {
  						if ( !responseHeaders ) {
  							responseHeaders = {};
c5169e0e   Renato De Donato   a new hope
7960
7961
  							while ( (match = rheaders.exec( responseHeadersString )) ) {
  								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
74249687   Luigi Serra   Cross browser con...
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
  							}
  						}
  						match = responseHeaders[ key.toLowerCase() ];
  					}
  					return match == null ? null : match;
  				},
  
  				// Raw string
  				getAllResponseHeaders: function() {
  					return state === 2 ? responseHeadersString : null;
  				},
  
  				// Caches the header
  				setRequestHeader: function( name, value ) {
  					var lname = name.toLowerCase();
  					if ( !state ) {
  						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
  						requestHeaders[ name ] = value;
  					}
  					return this;
  				},
  
  				// Overrides response content-type header
  				overrideMimeType: function( type ) {
  					if ( !state ) {
  						s.mimeType = type;
  					}
  					return this;
  				},
  
  				// Status-dependent callbacks
  				statusCode: function( map ) {
  					var code;
  					if ( map ) {
  						if ( state < 2 ) {
  							for ( code in map ) {
74249687   Luigi Serra   Cross browser con...
7998
7999
8000
8001
  								// Lazy-add the new callback in a way that preserves old ones
  								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
  							}
  						} else {
74249687   Luigi Serra   Cross browser con...
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
  							// Execute the appropriate callbacks
  							jqXHR.always( map[ jqXHR.status ] );
  						}
  					}
  					return this;
  				},
  
  				// Cancel the request
  				abort: function( statusText ) {
  					var finalText = statusText || strAbort;
  					if ( transport ) {
  						transport.abort( finalText );
  					}
  					done( 0, finalText );
  					return this;
  				}
  			};
  
  		// Attach deferreds
  		deferred.promise( jqXHR ).complete = completeDeferred.add;
  		jqXHR.success = jqXHR.done;
  		jqXHR.error = jqXHR.fail;
  
  		// Remove hash character (#7531: and string promotion)
  		// Add protocol if not provided (prefilters might expect it)
  		// Handle falsy url in the settings object (#10093: consistency with old signature)
  		// We also use the url parameter if available
c5169e0e   Renato De Donato   a new hope
8029
8030
  		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
  			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
74249687   Luigi Serra   Cross browser con...
8031
8032
8033
8034
8035
8036
8037
  
  		// Alias method option to type as per ticket #12004
  		s.type = options.method || options.type || s.method || s.type;
  
  		// Extract dataTypes list
  		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
  
c5169e0e   Renato De Donato   a new hope
8038
  		// A cross-domain request is in order when we have a protocol:host:port mismatch
74249687   Luigi Serra   Cross browser con...
8039
  		if ( s.crossDomain == null ) {
c5169e0e   Renato De Donato   a new hope
8040
8041
8042
8043
8044
8045
  			parts = rurl.exec( s.url.toLowerCase() );
  			s.crossDomain = !!( parts &&
  				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
  					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
  						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
  			);
74249687   Luigi Serra   Cross browser con...
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
  		}
  
  		// Convert data if not already a string
  		if ( s.data && s.processData && typeof s.data !== "string" ) {
  			s.data = jQuery.param( s.data, s.traditional );
  		}
  
  		// Apply prefilters
  		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
  
  		// If request was aborted inside a prefilter, stop there
  		if ( state === 2 ) {
  			return jqXHR;
  		}
  
  		// We can fire global events as of now if asked to
  		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
  		fireGlobals = jQuery.event && s.global;
  
  		// Watch for a new set of requests
  		if ( fireGlobals && jQuery.active++ === 0 ) {
c5169e0e   Renato De Donato   a new hope
8067
  			jQuery.event.trigger("ajaxStart");
74249687   Luigi Serra   Cross browser con...
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
  		}
  
  		// Uppercase the type
  		s.type = s.type.toUpperCase();
  
  		// Determine if request has content
  		s.hasContent = !rnoContent.test( s.type );
  
  		// Save the URL in case we're toying with the If-Modified-Since
  		// and/or If-None-Match header later on
  		cacheURL = s.url;
  
  		// More options handling for requests with no content
  		if ( !s.hasContent ) {
  
  			// If data is available, append data to url
  			if ( s.data ) {
  				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
74249687   Luigi Serra   Cross browser con...
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
  				// #9682: remove data so that it's not used in an eventual retry
  				delete s.data;
  			}
  
  			// Add anti-cache in url if needed
  			if ( s.cache === false ) {
  				s.url = rts.test( cacheURL ) ?
  
  					// If there is already a '_' parameter, set its value
  					cacheURL.replace( rts, "$1_=" + nonce++ ) :
  
  					// Otherwise add one to the end
  					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
  			}
  		}
  
  		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
  		if ( s.ifModified ) {
  			if ( jQuery.lastModified[ cacheURL ] ) {
  				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
  			}
  			if ( jQuery.etag[ cacheURL ] ) {
  				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
  			}
  		}
  
  		// Set the correct header, if data is being sent
  		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
  			jqXHR.setRequestHeader( "Content-Type", s.contentType );
  		}
  
  		// Set the Accepts header for the server, depending on the dataType
  		jqXHR.setRequestHeader(
  			"Accept",
c5169e0e   Renato De Donato   a new hope
8120
8121
  			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
  				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
74249687   Luigi Serra   Cross browser con...
8122
8123
8124
8125
8126
8127
8128
8129
8130
  				s.accepts[ "*" ]
  		);
  
  		// Check for headers option
  		for ( i in s.headers ) {
  			jqXHR.setRequestHeader( i, s.headers[ i ] );
  		}
  
  		// Allow custom headers/mimetypes and early abort
c5169e0e   Renato De Donato   a new hope
8131
  		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
74249687   Luigi Serra   Cross browser con...
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
  			// Abort if not done already and return
  			return jqXHR.abort();
  		}
  
  		// Aborting is no longer a cancellation
  		strAbort = "abort";
  
  		// Install callbacks on deferreds
  		for ( i in { success: 1, error: 1, complete: 1 } ) {
  			jqXHR[ i ]( s[ i ] );
  		}
  
  		// Get transport
  		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
  
  		// If no transport, we auto-abort
  		if ( !transport ) {
  			done( -1, "No Transport" );
  		} else {
  			jqXHR.readyState = 1;
  
  			// Send global event
  			if ( fireGlobals ) {
  				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
  			}
74249687   Luigi Serra   Cross browser con...
8157
8158
  			// Timeout
  			if ( s.async && s.timeout > 0 ) {
c5169e0e   Renato De Donato   a new hope
8159
8160
  				timeoutTimer = setTimeout(function() {
  					jqXHR.abort("timeout");
74249687   Luigi Serra   Cross browser con...
8161
8162
8163
8164
8165
8166
8167
  				}, s.timeout );
  			}
  
  			try {
  				state = 1;
  				transport.send( requestHeaders, done );
  			} catch ( e ) {
74249687   Luigi Serra   Cross browser con...
8168
8169
8170
  				// Propagate exception as error if not done
  				if ( state < 2 ) {
  					done( -1, e );
74249687   Luigi Serra   Cross browser con...
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
  				// Simply rethrow otherwise
  				} else {
  					throw e;
  				}
  			}
  		}
  
  		// Callback for when everything is done
  		function done( status, nativeStatusText, responses, headers ) {
  			var isSuccess, success, error, response, modified,
  				statusText = nativeStatusText;
  
  			// Called once
  			if ( state === 2 ) {
  				return;
  			}
  
  			// State is "done" now
  			state = 2;
  
  			// Clear timeout if it exists
  			if ( timeoutTimer ) {
c5169e0e   Renato De Donato   a new hope
8193
  				clearTimeout( timeoutTimer );
74249687   Luigi Serra   Cross browser con...
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
  			}
  
  			// Dereference transport for early garbage collection
  			// (no matter how long the jqXHR object will be used)
  			transport = undefined;
  
  			// Cache response headers
  			responseHeadersString = headers || "";
  
  			// Set readyState
  			jqXHR.readyState = status > 0 ? 4 : 0;
  
  			// Determine if successful
  			isSuccess = status >= 200 && status < 300 || status === 304;
  
  			// Get response data
  			if ( responses ) {
  				response = ajaxHandleResponses( s, jqXHR, responses );
  			}
  
  			// Convert no matter what (that way responseXXX fields are always set)
  			response = ajaxConvert( s, response, jqXHR, isSuccess );
  
  			// If successful, handle type chaining
  			if ( isSuccess ) {
  
  				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
  				if ( s.ifModified ) {
c5169e0e   Renato De Donato   a new hope
8222
  					modified = jqXHR.getResponseHeader("Last-Modified");
74249687   Luigi Serra   Cross browser con...
8223
8224
8225
  					if ( modified ) {
  						jQuery.lastModified[ cacheURL ] = modified;
  					}
c5169e0e   Renato De Donato   a new hope
8226
  					modified = jqXHR.getResponseHeader("etag");
74249687   Luigi Serra   Cross browser con...
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
  					if ( modified ) {
  						jQuery.etag[ cacheURL ] = modified;
  					}
  				}
  
  				// if no content
  				if ( status === 204 || s.type === "HEAD" ) {
  					statusText = "nocontent";
  
  				// if not modified
  				} else if ( status === 304 ) {
  					statusText = "notmodified";
  
  				// If we have data, let's convert it
  				} else {
  					statusText = response.state;
  					success = response.data;
  					error = response.error;
  					isSuccess = !error;
  				}
  			} else {
74249687   Luigi Serra   Cross browser con...
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
  				// Extract error from statusText and normalize for non-aborts
  				error = statusText;
  				if ( status || !statusText ) {
  					statusText = "error";
  					if ( status < 0 ) {
  						status = 0;
  					}
  				}
  			}
  
  			// Set data for the fake xhr object
  			jqXHR.status = status;
  			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
  
  			// Success/Error
  			if ( isSuccess ) {
  				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
  			} else {
  				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
  			}
  
  			// Status-dependent callbacks
  			jqXHR.statusCode( statusCode );
  			statusCode = undefined;
  
  			if ( fireGlobals ) {
  				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
  					[ jqXHR, s, isSuccess ? success : error ] );
  			}
  
  			// Complete
  			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
  
  			if ( fireGlobals ) {
  				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
74249687   Luigi Serra   Cross browser con...
8283
8284
  				// Handle the global AJAX counter
  				if ( !( --jQuery.active ) ) {
c5169e0e   Renato De Donato   a new hope
8285
  					jQuery.event.trigger("ajaxStop");
74249687   Luigi Serra   Cross browser con...
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
  				}
  			}
  		}
  
  		return jqXHR;
  	},
  
  	getJSON: function( url, data, callback ) {
  		return jQuery.get( url, data, callback, "json" );
  	},
  
  	getScript: function( url, callback ) {
  		return jQuery.get( url, undefined, callback, "script" );
  	}
c5169e0e   Renato De Donato   a new hope
8300
  });
74249687   Luigi Serra   Cross browser con...
8301
8302
8303
  
  jQuery.each( [ "get", "post" ], function( i, method ) {
  	jQuery[ method ] = function( url, data, callback, type ) {
74249687   Luigi Serra   Cross browser con...
8304
8305
8306
8307
8308
8309
8310
  		// Shift arguments if data argument was omitted
  		if ( jQuery.isFunction( data ) ) {
  			type = type || callback;
  			callback = data;
  			data = undefined;
  		}
  
c5169e0e   Renato De Donato   a new hope
8311
  		return jQuery.ajax({
74249687   Luigi Serra   Cross browser con...
8312
8313
8314
8315
8316
  			url: url,
  			type: method,
  			dataType: type,
  			data: data,
  			success: callback
c5169e0e   Renato De Donato   a new hope
8317
  		});
74249687   Luigi Serra   Cross browser con...
8318
  	};
c5169e0e   Renato De Donato   a new hope
8319
  });
74249687   Luigi Serra   Cross browser con...
8320
8321
8322
  
  
  jQuery._evalUrl = function( url ) {
c5169e0e   Renato De Donato   a new hope
8323
  	return jQuery.ajax({
74249687   Luigi Serra   Cross browser con...
8324
  		url: url,
74249687   Luigi Serra   Cross browser con...
8325
8326
8327
8328
8329
  		type: "GET",
  		dataType: "script",
  		async: false,
  		global: false,
  		"throws": true
c5169e0e   Renato De Donato   a new hope
8330
  	});
74249687   Luigi Serra   Cross browser con...
8331
8332
8333
  };
  
  
c5169e0e   Renato De Donato   a new hope
8334
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
8335
8336
8337
8338
  	wrapAll: function( html ) {
  		var wrap;
  
  		if ( jQuery.isFunction( html ) ) {
c5169e0e   Renato De Donato   a new hope
8339
8340
8341
  			return this.each(function( i ) {
  				jQuery( this ).wrapAll( html.call(this, i) );
  			});
74249687   Luigi Serra   Cross browser con...
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
  		}
  
  		if ( this[ 0 ] ) {
  
  			// The elements to wrap the target around
  			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
  
  			if ( this[ 0 ].parentNode ) {
  				wrap.insertBefore( this[ 0 ] );
  			}
  
c5169e0e   Renato De Donato   a new hope
8353
  			wrap.map(function() {
74249687   Luigi Serra   Cross browser con...
8354
8355
8356
8357
8358
8359
8360
  				var elem = this;
  
  				while ( elem.firstElementChild ) {
  					elem = elem.firstElementChild;
  				}
  
  				return elem;
c5169e0e   Renato De Donato   a new hope
8361
  			}).append( this );
74249687   Luigi Serra   Cross browser con...
8362
8363
8364
8365
8366
8367
8368
  		}
  
  		return this;
  	},
  
  	wrapInner: function( html ) {
  		if ( jQuery.isFunction( html ) ) {
c5169e0e   Renato De Donato   a new hope
8369
8370
8371
  			return this.each(function( i ) {
  				jQuery( this ).wrapInner( html.call(this, i) );
  			});
74249687   Luigi Serra   Cross browser con...
8372
8373
  		}
  
c5169e0e   Renato De Donato   a new hope
8374
  		return this.each(function() {
74249687   Luigi Serra   Cross browser con...
8375
8376
8377
8378
8379
8380
8381
8382
8383
  			var self = jQuery( this ),
  				contents = self.contents();
  
  			if ( contents.length ) {
  				contents.wrapAll( html );
  
  			} else {
  				self.append( html );
  			}
c5169e0e   Renato De Donato   a new hope
8384
  		});
74249687   Luigi Serra   Cross browser con...
8385
8386
8387
8388
8389
  	},
  
  	wrap: function( html ) {
  		var isFunction = jQuery.isFunction( html );
  
c5169e0e   Renato De Donato   a new hope
8390
8391
8392
  		return this.each(function( i ) {
  			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
  		});
74249687   Luigi Serra   Cross browser con...
8393
8394
8395
  	},
  
  	unwrap: function() {
c5169e0e   Renato De Donato   a new hope
8396
  		return this.parent().each(function() {
74249687   Luigi Serra   Cross browser con...
8397
8398
8399
  			if ( !jQuery.nodeName( this, "body" ) ) {
  				jQuery( this ).replaceWith( this.childNodes );
  			}
c5169e0e   Renato De Donato   a new hope
8400
  		}).end();
74249687   Luigi Serra   Cross browser con...
8401
  	}
c5169e0e   Renato De Donato   a new hope
8402
  });
74249687   Luigi Serra   Cross browser con...
8403
8404
8405
  
  
  jQuery.expr.filters.hidden = function( elem ) {
a1a3bc73   Luigi Serra   graphs updates
8406
8407
  	// Support: Opera <= 12.12
  	// Opera reports offsetWidths and offsetHeights less than zero on some elements
c5169e0e   Renato De Donato   a new hope
8408
8409
8410
8411
  	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
  };
  jQuery.expr.filters.visible = function( elem ) {
  	return !jQuery.expr.filters.hidden( elem );
74249687   Luigi Serra   Cross browser con...
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
  };
  
  
  
  
  var r20 = /%20/g,
  	rbracket = /\[\]$/,
  	rCRLF = /\r?\n/g,
  	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
  	rsubmittable = /^(?:input|select|textarea|keygen)/i;
  
  function buildParams( prefix, obj, traditional, add ) {
  	var name;
  
  	if ( jQuery.isArray( obj ) ) {
74249687   Luigi Serra   Cross browser con...
8427
8428
8429
  		// Serialize array item.
  		jQuery.each( obj, function( i, v ) {
  			if ( traditional || rbracket.test( prefix ) ) {
74249687   Luigi Serra   Cross browser con...
8430
8431
8432
8433
  				// Treat each array item as a scalar.
  				add( prefix, v );
  
  			} else {
74249687   Luigi Serra   Cross browser con...
8434
  				// Item is non-scalar (array or object), encode its numeric index.
c5169e0e   Renato De Donato   a new hope
8435
  				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
74249687   Luigi Serra   Cross browser con...
8436
  			}
c5169e0e   Renato De Donato   a new hope
8437
  		});
74249687   Luigi Serra   Cross browser con...
8438
8439
  
  	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
74249687   Luigi Serra   Cross browser con...
8440
8441
8442
8443
8444
8445
  		// Serialize object item.
  		for ( name in obj ) {
  			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
  		}
  
  	} else {
74249687   Luigi Serra   Cross browser con...
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
  		// Serialize scalar item.
  		add( prefix, obj );
  	}
  }
  
  // Serialize an array of form elements or a set of
  // key/values into a query string
  jQuery.param = function( a, traditional ) {
  	var prefix,
  		s = [],
  		add = function( key, value ) {
74249687   Luigi Serra   Cross browser con...
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
  			// If value is a function, invoke it and return its value
  			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
  			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
  		};
  
  	// Set traditional to true for jQuery <= 1.3.2 behavior.
  	if ( traditional === undefined ) {
  		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
  	}
  
  	// If an array was passed in, assume that it is an array of form elements.
  	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
74249687   Luigi Serra   Cross browser con...
8469
8470
8471
  		// Serialize the form elements
  		jQuery.each( a, function() {
  			add( this.name, this.value );
c5169e0e   Renato De Donato   a new hope
8472
  		});
74249687   Luigi Serra   Cross browser con...
8473
8474
  
  	} else {
74249687   Luigi Serra   Cross browser con...
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
  		// If traditional, encode the "old" way (the way 1.3.2 or older
  		// did it), otherwise encode params recursively.
  		for ( prefix in a ) {
  			buildParams( prefix, a[ prefix ], traditional, add );
  		}
  	}
  
  	// Return the resulting serialization
  	return s.join( "&" ).replace( r20, "+" );
  };
  
c5169e0e   Renato De Donato   a new hope
8486
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
8487
8488
8489
8490
  	serialize: function() {
  		return jQuery.param( this.serializeArray() );
  	},
  	serializeArray: function() {
c5169e0e   Renato De Donato   a new hope
8491
  		return this.map(function() {
74249687   Luigi Serra   Cross browser con...
8492
8493
8494
  			// Can add propHook for "elements" to filter or add form elements
  			var elements = jQuery.prop( this, "elements" );
  			return elements ? jQuery.makeArray( elements ) : this;
c5169e0e   Renato De Donato   a new hope
8495
8496
  		})
  		.filter(function() {
74249687   Luigi Serra   Cross browser con...
8497
8498
8499
8500
8501
8502
  			var type = this.type;
  
  			// Use .is( ":disabled" ) so that fieldset[disabled] works
  			return this.name && !jQuery( this ).is( ":disabled" ) &&
  				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
  				( this.checked || !rcheckableType.test( type ) );
c5169e0e   Renato De Donato   a new hope
8503
8504
  		})
  		.map(function( i, elem ) {
74249687   Luigi Serra   Cross browser con...
8505
8506
8507
8508
8509
8510
8511
  			var val = jQuery( this ).val();
  
  			return val == null ?
  				null :
  				jQuery.isArray( val ) ?
  					jQuery.map( val, function( val ) {
  						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
c5169e0e   Renato De Donato   a new hope
8512
  					}) :
74249687   Luigi Serra   Cross browser con...
8513
  					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
c5169e0e   Renato De Donato   a new hope
8514
  		}).get();
74249687   Luigi Serra   Cross browser con...
8515
  	}
c5169e0e   Renato De Donato   a new hope
8516
  });
74249687   Luigi Serra   Cross browser con...
8517
8518
8519
8520
  
  
  jQuery.ajaxSettings.xhr = function() {
  	try {
c5169e0e   Renato De Donato   a new hope
8521
8522
  		return new XMLHttpRequest();
  	} catch( e ) {}
74249687   Luigi Serra   Cross browser con...
8523
8524
  };
  
c5169e0e   Renato De Donato   a new hope
8525
8526
8527
8528
  var xhrId = 0,
  	xhrCallbacks = {},
  	xhrSuccessStatus = {
  		// file protocol always yields status code 0, assume 200
74249687   Luigi Serra   Cross browser con...
8529
  		0: 200,
74249687   Luigi Serra   Cross browser con...
8530
8531
8532
8533
8534
8535
  		// Support: IE9
  		// #1450: sometimes IE returns 1223 when it should be 204
  		1223: 204
  	},
  	xhrSupported = jQuery.ajaxSettings.xhr();
  
c5169e0e   Renato De Donato   a new hope
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
  // Support: IE9
  // Open requests must be manually aborted on unload (#5280)
  // See https://support.microsoft.com/kb/2856746 for more info
  if ( window.attachEvent ) {
  	window.attachEvent( "onunload", function() {
  		for ( var key in xhrCallbacks ) {
  			xhrCallbacks[ key ]();
  		}
  	});
  }
  
74249687   Luigi Serra   Cross browser con...
8547
8548
8549
  support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
  support.ajax = xhrSupported = !!xhrSupported;
  
c5169e0e   Renato De Donato   a new hope
8550
8551
  jQuery.ajaxTransport(function( options ) {
  	var callback;
74249687   Luigi Serra   Cross browser con...
8552
8553
8554
8555
8556
8557
  
  	// Cross domain only allowed if supported through XMLHttpRequest
  	if ( support.cors || xhrSupported && !options.crossDomain ) {
  		return {
  			send: function( headers, complete ) {
  				var i,
c5169e0e   Renato De Donato   a new hope
8558
8559
8560
8561
  					xhr = options.xhr(),
  					id = ++xhrId;
  
  				xhr.open( options.type, options.url, options.async, options.username, options.password );
74249687   Luigi Serra   Cross browser con...
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
  
  				// Apply custom fields if provided
  				if ( options.xhrFields ) {
  					for ( i in options.xhrFields ) {
  						xhr[ i ] = options.xhrFields[ i ];
  					}
  				}
  
  				// Override mime type if needed
  				if ( options.mimeType && xhr.overrideMimeType ) {
  					xhr.overrideMimeType( options.mimeType );
  				}
  
  				// X-Requested-With header
  				// For cross-domain requests, seeing as conditions for a preflight are
  				// akin to a jigsaw puzzle, we simply never set it to be sure.
  				// (it can always be set on a per-request basis or even using ajaxSetup)
  				// For same-domain requests, won't change header if already provided.
c5169e0e   Renato De Donato   a new hope
8580
8581
  				if ( !options.crossDomain && !headers["X-Requested-With"] ) {
  					headers["X-Requested-With"] = "XMLHttpRequest";
74249687   Luigi Serra   Cross browser con...
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
  				}
  
  				// Set headers
  				for ( i in headers ) {
  					xhr.setRequestHeader( i, headers[ i ] );
  				}
  
  				// Callback
  				callback = function( type ) {
  					return function() {
  						if ( callback ) {
c5169e0e   Renato De Donato   a new hope
8593
8594
  							delete xhrCallbacks[ id ];
  							callback = xhr.onload = xhr.onerror = null;
74249687   Luigi Serra   Cross browser con...
8595
8596
8597
8598
  
  							if ( type === "abort" ) {
  								xhr.abort();
  							} else if ( type === "error" ) {
c5169e0e   Renato De Donato   a new hope
8599
8600
8601
8602
8603
  								complete(
  									// file: protocol always yields status 0; see #8605, #14207
  									xhr.status,
  									xhr.statusText
  								);
74249687   Luigi Serra   Cross browser con...
8604
8605
8606
8607
  							} else {
  								complete(
  									xhrSuccessStatus[ xhr.status ] || xhr.status,
  									xhr.statusText,
c5169e0e   Renato De Donato   a new hope
8608
8609
8610
8611
8612
8613
  									// Support: IE9
  									// Accessing binary-data responseText throws an exception
  									// (#11426)
  									typeof xhr.responseText === "string" ? {
  										text: xhr.responseText
  									} : undefined,
74249687   Luigi Serra   Cross browser con...
8614
8615
8616
8617
8618
8619
8620
8621
8622
  									xhr.getAllResponseHeaders()
  								);
  							}
  						}
  					};
  				};
  
  				// Listen to events
  				xhr.onload = callback();
c5169e0e   Renato De Donato   a new hope
8623
  				xhr.onerror = callback("error");
74249687   Luigi Serra   Cross browser con...
8624
8625
  
  				// Create the abort callback
c5169e0e   Renato De Donato   a new hope
8626
  				callback = xhrCallbacks[ id ] = callback("abort");
74249687   Luigi Serra   Cross browser con...
8627
8628
  
  				try {
74249687   Luigi Serra   Cross browser con...
8629
8630
8631
  					// Do send the request (this may raise an exception)
  					xhr.send( options.hasContent && options.data || null );
  				} catch ( e ) {
74249687   Luigi Serra   Cross browser con...
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
  					// #14683: Only rethrow if this hasn't been notified as an error yet
  					if ( callback ) {
  						throw e;
  					}
  				}
  			},
  
  			abort: function() {
  				if ( callback ) {
  					callback();
  				}
  			}
  		};
  	}
c5169e0e   Renato De Donato   a new hope
8646
  });
74249687   Luigi Serra   Cross browser con...
8647
8648
8649
8650
8651
  
  
  
  
  // Install script dataType
c5169e0e   Renato De Donato   a new hope
8652
  jQuery.ajaxSetup({
74249687   Luigi Serra   Cross browser con...
8653
  	accepts: {
c5169e0e   Renato De Donato   a new hope
8654
  		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
74249687   Luigi Serra   Cross browser con...
8655
8656
  	},
  	contents: {
c5169e0e   Renato De Donato   a new hope
8657
  		script: /(?:java|ecma)script/
74249687   Luigi Serra   Cross browser con...
8658
8659
8660
8661
8662
8663
8664
  	},
  	converters: {
  		"text script": function( text ) {
  			jQuery.globalEval( text );
  			return text;
  		}
  	}
c5169e0e   Renato De Donato   a new hope
8665
  });
74249687   Luigi Serra   Cross browser con...
8666
8667
8668
8669
8670
8671
8672
8673
8674
  
  // Handle cache's special case and crossDomain
  jQuery.ajaxPrefilter( "script", function( s ) {
  	if ( s.cache === undefined ) {
  		s.cache = false;
  	}
  	if ( s.crossDomain ) {
  		s.type = "GET";
  	}
c5169e0e   Renato De Donato   a new hope
8675
  });
74249687   Luigi Serra   Cross browser con...
8676
8677
8678
  
  // Bind script tag hack transport
  jQuery.ajaxTransport( "script", function( s ) {
74249687   Luigi Serra   Cross browser con...
8679
8680
8681
8682
8683
  	// This transport only deals with cross domain requests
  	if ( s.crossDomain ) {
  		var script, callback;
  		return {
  			send: function( _, complete ) {
c5169e0e   Renato De Donato   a new hope
8684
8685
  				script = jQuery("<script>").prop({
  					async: true,
74249687   Luigi Serra   Cross browser con...
8686
8687
  					charset: s.scriptCharset,
  					src: s.url
c5169e0e   Renato De Donato   a new hope
8688
  				}).on(
74249687   Luigi Serra   Cross browser con...
8689
8690
8691
8692
8693
8694
8695
8696
8697
  					"load error",
  					callback = function( evt ) {
  						script.remove();
  						callback = null;
  						if ( evt ) {
  							complete( evt.type === "error" ? 404 : 200, evt.type );
  						}
  					}
  				);
74249687   Luigi Serra   Cross browser con...
8698
8699
8700
8701
8702
8703
8704
8705
8706
  				document.head.appendChild( script[ 0 ] );
  			},
  			abort: function() {
  				if ( callback ) {
  					callback();
  				}
  			}
  		};
  	}
c5169e0e   Renato De Donato   a new hope
8707
  });
74249687   Luigi Serra   Cross browser con...
8708
8709
8710
8711
8712
8713
8714
8715
  
  
  
  
  var oldCallbacks = [],
  	rjsonp = /(=)\?(?=&|$)|\?\?/;
  
  // Default jsonp settings
c5169e0e   Renato De Donato   a new hope
8716
  jQuery.ajaxSetup({
74249687   Luigi Serra   Cross browser con...
8717
8718
8719
8720
8721
8722
  	jsonp: "callback",
  	jsonpCallback: function() {
  		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
  		this[ callback ] = true;
  		return callback;
  	}
c5169e0e   Renato De Donato   a new hope
8723
  });
74249687   Luigi Serra   Cross browser con...
8724
8725
8726
8727
8728
8729
8730
  
  // Detect, normalize options and install callbacks for jsonp requests
  jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
  
  	var callbackName, overwritten, responseContainer,
  		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
  			"url" :
c5169e0e   Renato De Donato   a new hope
8731
  			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
74249687   Luigi Serra   Cross browser con...
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
  		);
  
  	// Handle iff the expected data type is "jsonp" or we have a parameter to set
  	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
  
  		// Get callback name, remembering preexisting value associated with it
  		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
  			s.jsonpCallback() :
  			s.jsonpCallback;
  
  		// Insert callback into url or form data
  		if ( jsonProp ) {
  			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
  		} else if ( s.jsonp !== false ) {
  			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
  		}
  
  		// Use data converter to retrieve json after script execution
c5169e0e   Renato De Donato   a new hope
8750
  		s.converters["script json"] = function() {
74249687   Luigi Serra   Cross browser con...
8751
8752
8753
8754
8755
8756
  			if ( !responseContainer ) {
  				jQuery.error( callbackName + " was not called" );
  			}
  			return responseContainer[ 0 ];
  		};
  
c5169e0e   Renato De Donato   a new hope
8757
  		// force json dataType
74249687   Luigi Serra   Cross browser con...
8758
8759
8760
8761
8762
8763
8764
8765
8766
  		s.dataTypes[ 0 ] = "json";
  
  		// Install callback
  		overwritten = window[ callbackName ];
  		window[ callbackName ] = function() {
  			responseContainer = arguments;
  		};
  
  		// Clean-up function (fires after converters)
c5169e0e   Renato De Donato   a new hope
8767
8768
8769
  		jqXHR.always(function() {
  			// Restore preexisting value
  			window[ callbackName ] = overwritten;
74249687   Luigi Serra   Cross browser con...
8770
8771
8772
  
  			// Save back as free
  			if ( s[ callbackName ] ) {
c5169e0e   Renato De Donato   a new hope
8773
  				// make sure that re-using the options doesn't screw things around
74249687   Luigi Serra   Cross browser con...
8774
8775
  				s.jsonpCallback = originalSettings.jsonpCallback;
  
c5169e0e   Renato De Donato   a new hope
8776
  				// save the callback name for future use
74249687   Luigi Serra   Cross browser con...
8777
8778
8779
8780
8781
8782
8783
8784
8785
  				oldCallbacks.push( callbackName );
  			}
  
  			// Call if it was a function and we have a response
  			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
  				overwritten( responseContainer[ 0 ] );
  			}
  
  			responseContainer = overwritten = undefined;
c5169e0e   Renato De Donato   a new hope
8786
  		});
74249687   Luigi Serra   Cross browser con...
8787
8788
8789
8790
  
  		// Delegate to script
  		return "script";
  	}
c5169e0e   Renato De Donato   a new hope
8791
  });
74249687   Luigi Serra   Cross browser con...
8792
8793
  
  
74249687   Luigi Serra   Cross browser con...
8794
  
a1a3bc73   Luigi Serra   graphs updates
8795
  
c5169e0e   Renato De Donato   a new hope
8796
8797
  // data: string of html
  // context (optional): If specified, the fragment will be created in this context, defaults to document
74249687   Luigi Serra   Cross browser con...
8798
8799
8800
8801
8802
8803
8804
8805
8806
  // keepScripts (optional): If true, will include scripts passed in the html string
  jQuery.parseHTML = function( data, context, keepScripts ) {
  	if ( !data || typeof data !== "string" ) {
  		return null;
  	}
  	if ( typeof context === "boolean" ) {
  		keepScripts = context;
  		context = false;
  	}
c5169e0e   Renato De Donato   a new hope
8807
  	context = context || document;
74249687   Luigi Serra   Cross browser con...
8808
8809
8810
8811
8812
8813
  
  	var parsed = rsingleTag.exec( data ),
  		scripts = !keepScripts && [];
  
  	// Single tag
  	if ( parsed ) {
c5169e0e   Renato De Donato   a new hope
8814
  		return [ context.createElement( parsed[1] ) ];
74249687   Luigi Serra   Cross browser con...
8815
8816
  	}
  
c5169e0e   Renato De Donato   a new hope
8817
  	parsed = jQuery.buildFragment( [ data ], context, scripts );
74249687   Luigi Serra   Cross browser con...
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
  
  	if ( scripts && scripts.length ) {
  		jQuery( scripts ).remove();
  	}
  
  	return jQuery.merge( [], parsed.childNodes );
  };
  
  
  // Keep a copy of the old load method
  var _load = jQuery.fn.load;
  
  /**
   * Load a url into a page
   */
  jQuery.fn.load = function( url, params, callback ) {
  	if ( typeof url !== "string" && _load ) {
  		return _load.apply( this, arguments );
  	}
  
  	var selector, type, response,
  		self = this,
c5169e0e   Renato De Donato   a new hope
8840
  		off = url.indexOf(" ");
74249687   Luigi Serra   Cross browser con...
8841
  
c5169e0e   Renato De Donato   a new hope
8842
  	if ( off >= 0 ) {
74249687   Luigi Serra   Cross browser con...
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
  		selector = jQuery.trim( url.slice( off ) );
  		url = url.slice( 0, off );
  	}
  
  	// If it's a function
  	if ( jQuery.isFunction( params ) ) {
  
  		// We assume that it's the callback
  		callback = params;
  		params = undefined;
  
  	// Otherwise, build a param string
  	} else if ( params && typeof params === "object" ) {
  		type = "POST";
  	}
  
  	// If we have elements to modify, make the request
  	if ( self.length > 0 ) {
c5169e0e   Renato De Donato   a new hope
8861
  		jQuery.ajax({
74249687   Luigi Serra   Cross browser con...
8862
8863
  			url: url,
  
c5169e0e   Renato De Donato   a new hope
8864
8865
  			// if "type" variable is undefined, then "GET" method will be used
  			type: type,
74249687   Luigi Serra   Cross browser con...
8866
8867
  			dataType: "html",
  			data: params
c5169e0e   Renato De Donato   a new hope
8868
  		}).done(function( responseText ) {
74249687   Luigi Serra   Cross browser con...
8869
8870
8871
8872
8873
8874
8875
8876
  
  			// Save response for use in complete callback
  			response = arguments;
  
  			self.html( selector ?
  
  				// If a selector was specified, locate the right elements in a dummy div
  				// Exclude scripts to avoid IE 'Permission Denied' errors
c5169e0e   Renato De Donato   a new hope
8877
  				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
74249687   Luigi Serra   Cross browser con...
8878
8879
8880
8881
  
  				// Otherwise use the full result
  				responseText );
  
c5169e0e   Renato De Donato   a new hope
8882
8883
8884
  		}).complete( callback && function( jqXHR, status ) {
  			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
  		});
74249687   Luigi Serra   Cross browser con...
8885
8886
8887
8888
8889
8890
8891
8892
8893
  	}
  
  	return this;
  };
  
  
  
  
  // Attach a bunch of functions for handling common AJAX events
c5169e0e   Renato De Donato   a new hope
8894
  jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
74249687   Luigi Serra   Cross browser con...
8895
8896
8897
  	jQuery.fn[ type ] = function( fn ) {
  		return this.on( type, fn );
  	};
c5169e0e   Renato De Donato   a new hope
8898
  });
74249687   Luigi Serra   Cross browser con...
8899
8900
8901
8902
8903
  
  
  
  
  jQuery.expr.filters.animated = function( elem ) {
c5169e0e   Renato De Donato   a new hope
8904
  	return jQuery.grep(jQuery.timers, function( fn ) {
74249687   Luigi Serra   Cross browser con...
8905
  		return elem === fn.elem;
c5169e0e   Renato De Donato   a new hope
8906
  	}).length;
74249687   Luigi Serra   Cross browser con...
8907
8908
8909
8910
8911
  };
  
  
  
  
c5169e0e   Renato De Donato   a new hope
8912
8913
  var docElem = window.document.documentElement;
  
74249687   Luigi Serra   Cross browser con...
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
  /**
   * Gets a window from an element
   */
  function getWindow( elem ) {
  	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
  }
  
  jQuery.offset = {
  	setOffset: function( elem, options, i ) {
  		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
  			position = jQuery.css( elem, "position" ),
  			curElem = jQuery( elem ),
  			props = {};
  
  		// Set position first, in-case top/left are set even on static elem
  		if ( position === "static" ) {
  			elem.style.position = "relative";
  		}
  
  		curOffset = curElem.offset();
  		curCSSTop = jQuery.css( elem, "top" );
  		curCSSLeft = jQuery.css( elem, "left" );
  		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
c5169e0e   Renato De Donato   a new hope
8937
  			( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
74249687   Luigi Serra   Cross browser con...
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
  
  		// Need to be able to calculate position if either
  		// top or left is auto and position is either absolute or fixed
  		if ( calculatePosition ) {
  			curPosition = curElem.position();
  			curTop = curPosition.top;
  			curLeft = curPosition.left;
  
  		} else {
  			curTop = parseFloat( curCSSTop ) || 0;
  			curLeft = parseFloat( curCSSLeft ) || 0;
  		}
  
  		if ( jQuery.isFunction( options ) ) {
c5169e0e   Renato De Donato   a new hope
8952
  			options = options.call( elem, i, curOffset );
74249687   Luigi Serra   Cross browser con...
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
  		}
  
  		if ( options.top != null ) {
  			props.top = ( options.top - curOffset.top ) + curTop;
  		}
  		if ( options.left != null ) {
  			props.left = ( options.left - curOffset.left ) + curLeft;
  		}
  
  		if ( "using" in options ) {
  			options.using.call( elem, props );
  
  		} else {
  			curElem.css( props );
  		}
  	}
  };
  
c5169e0e   Renato De Donato   a new hope
8971
  jQuery.fn.extend({
74249687   Luigi Serra   Cross browser con...
8972
8973
8974
8975
  	offset: function( options ) {
  		if ( arguments.length ) {
  			return options === undefined ?
  				this :
c5169e0e   Renato De Donato   a new hope
8976
  				this.each(function( i ) {
74249687   Luigi Serra   Cross browser con...
8977
  					jQuery.offset.setOffset( this, options, i );
c5169e0e   Renato De Donato   a new hope
8978
  				});
74249687   Luigi Serra   Cross browser con...
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
  		}
  
  		var docElem, win,
  			elem = this[ 0 ],
  			box = { top: 0, left: 0 },
  			doc = elem && elem.ownerDocument;
  
  		if ( !doc ) {
  			return;
  		}
  
  		docElem = doc.documentElement;
  
  		// Make sure it's not a disconnected DOM node
  		if ( !jQuery.contains( docElem, elem ) ) {
  			return box;
  		}
  
c5169e0e   Renato De Donato   a new hope
8997
8998
8999
9000
9001
  		// Support: BlackBerry 5, iOS 3 (original iPhone)
  		// If we don't have gBCR, just use 0,0 rather than error
  		if ( typeof elem.getBoundingClientRect !== strundefined ) {
  			box = elem.getBoundingClientRect();
  		}
74249687   Luigi Serra   Cross browser con...
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
  		win = getWindow( doc );
  		return {
  			top: box.top + win.pageYOffset - docElem.clientTop,
  			left: box.left + win.pageXOffset - docElem.clientLeft
  		};
  	},
  
  	position: function() {
  		if ( !this[ 0 ] ) {
  			return;
  		}
  
  		var offsetParent, offset,
  			elem = this[ 0 ],
  			parentOffset = { top: 0, left: 0 };
  
c5169e0e   Renato De Donato   a new hope
9018
  		// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
74249687   Luigi Serra   Cross browser con...
9019
  		if ( jQuery.css( elem, "position" ) === "fixed" ) {
74249687   Luigi Serra   Cross browser con...
9020
9021
9022
9023
  			// Assume getBoundingClientRect is there when computed position is fixed
  			offset = elem.getBoundingClientRect();
  
  		} else {
74249687   Luigi Serra   Cross browser con...
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
  			// Get *real* offsetParent
  			offsetParent = this.offsetParent();
  
  			// Get correct offsets
  			offset = this.offset();
  			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
  				parentOffset = offsetParent.offset();
  			}
  
  			// Add offsetParent borders
c5169e0e   Renato De Donato   a new hope
9034
9035
  			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
  			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
74249687   Luigi Serra   Cross browser con...
9036
9037
9038
9039
9040
9041
9042
9043
9044
  		}
  
  		// Subtract parent offsets and element margins
  		return {
  			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
  			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
  		};
  	},
  
74249687   Luigi Serra   Cross browser con...
9045
  	offsetParent: function() {
c5169e0e   Renato De Donato   a new hope
9046
9047
  		return this.map(function() {
  			var offsetParent = this.offsetParent || docElem;
74249687   Luigi Serra   Cross browser con...
9048
  
c5169e0e   Renato De Donato   a new hope
9049
  			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
74249687   Luigi Serra   Cross browser con...
9050
9051
9052
  				offsetParent = offsetParent.offsetParent;
  			}
  
c5169e0e   Renato De Donato   a new hope
9053
9054
  			return offsetParent || docElem;
  		});
74249687   Luigi Serra   Cross browser con...
9055
  	}
c5169e0e   Renato De Donato   a new hope
9056
  });
74249687   Luigi Serra   Cross browser con...
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
  
  // Create scrollLeft and scrollTop methods
  jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
  	var top = "pageYOffset" === prop;
  
  	jQuery.fn[ method ] = function( val ) {
  		return access( this, function( elem, method, val ) {
  			var win = getWindow( elem );
  
  			if ( val === undefined ) {
  				return win ? win[ prop ] : elem[ method ];
  			}
  
  			if ( win ) {
  				win.scrollTo(
c5169e0e   Renato De Donato   a new hope
9072
9073
  					!top ? val : window.pageXOffset,
  					top ? val : window.pageYOffset
74249687   Luigi Serra   Cross browser con...
9074
9075
9076
9077
9078
  				);
  
  			} else {
  				elem[ method ] = val;
  			}
c5169e0e   Renato De Donato   a new hope
9079
  		}, method, val, arguments.length, null );
74249687   Luigi Serra   Cross browser con...
9080
  	};
c5169e0e   Renato De Donato   a new hope
9081
  });
74249687   Luigi Serra   Cross browser con...
9082
  
c5169e0e   Renato De Donato   a new hope
9083
  // Support: Safari<7+, Chrome<37+
74249687   Luigi Serra   Cross browser con...
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
  // Add the top/left cssHooks using jQuery.fn.position
  // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
  // Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
  // getComputedStyle returns percent when specified for top/left/bottom/right;
  // rather than make the css module depend on the offset module, just check for it here
  jQuery.each( [ "top", "left" ], function( i, prop ) {
  	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
  		function( elem, computed ) {
  			if ( computed ) {
  				computed = curCSS( elem, prop );
74249687   Luigi Serra   Cross browser con...
9094
9095
9096
9097
9098
9099
9100
  				// If curCSS returns percentage, fallback to offset
  				return rnumnonpx.test( computed ) ?
  					jQuery( elem ).position()[ prop ] + "px" :
  					computed;
  			}
  		}
  	);
c5169e0e   Renato De Donato   a new hope
9101
  });
74249687   Luigi Serra   Cross browser con...
9102
9103
9104
9105
  
  
  // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
  jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
c5169e0e   Renato De Donato   a new hope
9106
  	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
74249687   Luigi Serra   Cross browser con...
9107
9108
9109
9110
9111
9112
9113
9114
9115
  		// Margin is only for outerHeight, outerWidth
  		jQuery.fn[ funcName ] = function( margin, value ) {
  			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
  				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
  
  			return access( this, function( elem, type, value ) {
  				var doc;
  
  				if ( jQuery.isWindow( elem ) ) {
74249687   Luigi Serra   Cross browser con...
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
  					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
  					// isn't a whole lot we can do. See pull request at this URL for discussion:
  					// https://github.com/jquery/jquery/pull/764
  					return elem.document.documentElement[ "client" + name ];
  				}
  
  				// Get document width or height
  				if ( elem.nodeType === 9 ) {
  					doc = elem.documentElement;
  
  					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
  					// whichever is greatest
  					return Math.max(
  						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
  						elem.body[ "offset" + name ], doc[ "offset" + name ],
  						doc[ "client" + name ]
  					);
  				}
  
  				return value === undefined ?
74249687   Luigi Serra   Cross browser con...
9136
9137
9138
9139
9140
9141
9142
  					// Get width or height on the element, requesting but not forcing parseFloat
  					jQuery.css( elem, type, extra ) :
  
  					// Set width or height on the element
  					jQuery.style( elem, type, value, extra );
  			}, type, chainable ? margin : undefined, chainable, null );
  		};
c5169e0e   Renato De Donato   a new hope
9143
9144
  	});
  });
a1a3bc73   Luigi Serra   graphs updates
9145
  
a1a3bc73   Luigi Serra   graphs updates
9146
  
c5169e0e   Renato De Donato   a new hope
9147
9148
9149
9150
  // The number of elements contained in the matched element set
  jQuery.fn.size = function() {
  	return this.length;
  };
74249687   Luigi Serra   Cross browser con...
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
  
  jQuery.fn.andSelf = jQuery.fn.addBack;
  
  
  
  
  // Register as a named AMD module, since jQuery can be concatenated with other
  // files that may use define, but not via a proper concatenation script that
  // understands anonymous AMD modules. A named AMD is safest and most robust
  // way to register. Lowercase jquery is used because AMD module names are
  // derived from file names, and jQuery is normally delivered in a lowercase
  // file name. Do this after creating the global so that if an AMD module wants
  // to call noConflict to hide this version of jQuery, it will work.
  
  // Note that for maximum portability, libraries that are not jQuery should
  // declare themselves as anonymous modules, and avoid setting a global if an
  // AMD loader is present. jQuery is a special case. For more information, see
  // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
  
  if ( typeof define === "function" && define.amd ) {
  	define( "jquery", [], function() {
  		return jQuery;
c5169e0e   Renato De Donato   a new hope
9173
  	});
74249687   Luigi Serra   Cross browser con...
9174
9175
9176
9177
  }
  
  
  
a1a3bc73   Luigi Serra   graphs updates
9178
  
c5169e0e   Renato De Donato   a new hope
9179
  var
74249687   Luigi Serra   Cross browser con...
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
  	// Map over jQuery in case of overwrite
  	_jQuery = window.jQuery,
  
  	// Map over the $ in case of overwrite
  	_$ = window.$;
  
  jQuery.noConflict = function( deep ) {
  	if ( window.$ === jQuery ) {
  		window.$ = _$;
  	}
  
  	if ( deep && window.jQuery === jQuery ) {
  		window.jQuery = _jQuery;
  	}
  
  	return jQuery;
  };
  
  // Expose jQuery and $ identifiers, even in AMD
  // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
  // and CommonJS for browser emulators (#13566)
c5169e0e   Renato De Donato   a new hope
9201
  if ( typeof noGlobal === strundefined ) {
74249687   Luigi Serra   Cross browser con...
9202
9203
9204
  	window.jQuery = window.$ = jQuery;
  }
  
c5169e0e   Renato De Donato   a new hope
9205
9206
9207
  
  
  
74249687   Luigi Serra   Cross browser con...
9208
  return jQuery;
c5169e0e   Renato De Donato   a new hope
9209
  
74249687   Luigi Serra   Cross browser con...
9210
  }));