UNPKG

268 kBJavaScriptView Raw
1/* Silly noise to be able to load in source code without doing an XMLHttpReq */var jquery164 = "/*!\n\
2 * jQuery JavaScript Library v1.6.4\n\
3 * http://jquery.com/\n\
4 *\n\
5 * Copyright 2011, John Resig\n\
6 * Dual licensed under the MIT or GPL Version 2 licenses.\n\
7 * http://jquery.org/license\n\
8 *\n\
9 * Includes Sizzle.js\n\
10 * http://sizzlejs.com/\n\
11 * Copyright 2011, The Dojo Foundation\n\
12 * Released under the MIT, BSD, and GPL Licenses.\n\
13 *\n\
14 * Date: Mon Sep 12 18:54:48 2011 -0400\n\
15 */\n\
16(function( window, undefined ) {\n\
17\n\
18// Use the correct document accordingly with window argument (sandbox)\n\
19var document = window.document,\n\
20 navigator = window.navigator,\n\
21 location = window.location;\n\
22var jQuery = (function() {\n\
23\n\
24// Define a local copy of jQuery\n\
25var jQuery = function( selector, context ) {\n\
26 // The jQuery object is actually just the init constructor 'enhanced'\n\
27 return new jQuery.fn.init( selector, context, rootjQuery );\n\
28 },\n\
29\n\
30 // Map over jQuery in case of overwrite\n\
31 _jQuery = window.jQuery,\n\
32\n\
33 // Map over the $ in case of overwrite\n\
34 _$ = window.$,\n\
35\n\
36 // A central reference to the root jQuery(document)\n\
37 rootjQuery,\n\
38\n\
39 // A simple way to check for HTML strings or ID strings\n\
40 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\
41 quickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\
42\n\
43 // Check if a string has a non-whitespace character in it\n\
44 rnotwhite = /\\S/,\n\
45\n\
46 // Used for trimming whitespace\n\
47 trimLeft = /^\\s+/,\n\
48 trimRight = /\\s+$/,\n\
49\n\
50 // Check for digits\n\
51 rdigit = /\\d/,\n\
52\n\
53 // Match a standalone tag\n\
54 rsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,\n\
55\n\
56 // JSON RegExp\n\
57 rvalidchars = /^[\\],:{}\\s]*$/,\n\
58 rvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n\
59 rvalidtokens = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\n\
60 rvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\
61\n\
62 // Useragent RegExp\n\
63 rwebkit = /(webkit)[ \\/]([\\w.]+)/,\n\
64 ropera = /(opera)(?:.*version)?[ \\/]([\\w.]+)/,\n\
65 rmsie = /(msie) ([\\w.]+)/,\n\
66 rmozilla = /(mozilla)(?:.*? rv:([\\w.]+))?/,\n\
67\n\
68 // Matches dashed string for camelizing\n\
69 rdashAlpha = /-([a-z]|[0-9])/ig,\n\
70 rmsPrefix = /^-ms-/,\n\
71\n\
72 // Used by jQuery.camelCase as callback to replace()\n\
73 fcamelCase = function( all, letter ) {\n\
74 return ( letter + \"\" ).toUpperCase();\n\
75 },\n\
76\n\
77 // Keep a UserAgent string for use with jQuery.browser\n\
78 userAgent = navigator.userAgent,\n\
79\n\
80 // For matching the engine and version of the browser\n\
81 browserMatch,\n\
82\n\
83 // The deferred used on DOM ready\n\
84 readyList,\n\
85\n\
86 // The ready event handler\n\
87 DOMContentLoaded,\n\
88\n\
89 // Save a reference to some core methods\n\
90 toString = Object.prototype.toString,\n\
91 hasOwn = Object.prototype.hasOwnProperty,\n\
92 push = Array.prototype.push,\n\
93 slice = Array.prototype.slice,\n\
94 trim = String.prototype.trim,\n\
95 indexOf = Array.prototype.indexOf,\n\
96\n\
97 // [[Class]] -> type pairs\n\
98 class2type = {};\n\
99\n\
100jQuery.fn = jQuery.prototype = {\n\
101 constructor: jQuery,\n\
102 init: function( selector, context, rootjQuery ) {\n\
103 var match, elem, ret, doc;\n\
104\n\
105 // Handle $(\"\"), $(null), or $(undefined)\n\
106 if ( !selector ) {\n\
107 return this;\n\
108 }\n\
109\n\
110 // Handle $(DOMElement)\n\
111 if ( selector.nodeType ) {\n\
112 this.context = this[0] = selector;\n\
113 this.length = 1;\n\
114 return this;\n\
115 }\n\
116\n\
117 // The body element only exists once, optimize finding it\n\
118 if ( selector === \"body\" && !context && document.body ) {\n\
119 this.context = document;\n\
120 this[0] = document.body;\n\
121 this.selector = selector;\n\
122 this.length = 1;\n\
123 return this;\n\
124 }\n\
125\n\
126 // Handle HTML strings\n\
127 if ( typeof selector === \"string\" ) {\n\
128 // Are we dealing with HTML string or an ID?\n\
129 if ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\
130 // Assume that strings that start and end with <> are HTML and skip the regex check\n\
131 match = [ null, selector, null ];\n\
132\n\
133 } else {\n\
134 match = quickExpr.exec( selector );\n\
135 }\n\
136\n\
137 // Verify a match, and that no context was specified for #id\n\
138 if ( match && (match[1] || !context) ) {\n\
139\n\
140 // HANDLE: $(html) -> $(array)\n\
141 if ( match[1] ) {\n\
142 context = context instanceof jQuery ? context[0] : context;\n\
143 doc = (context ? context.ownerDocument || context : document);\n\
144\n\
145 // If a single string is passed in and it's a single tag\n\
146 // just do a createElement and skip the rest\n\
147 ret = rsingleTag.exec( selector );\n\
148\n\
149 if ( ret ) {\n\
150 if ( jQuery.isPlainObject( context ) ) {\n\
151 selector = [ document.createElement( ret[1] ) ];\n\
152 jQuery.fn.attr.call( selector, context, true );\n\
153\n\
154 } else {\n\
155 selector = [ doc.createElement( ret[1] ) ];\n\
156 }\n\
157\n\
158 } else {\n\
159 ret = jQuery.buildFragment( [ match[1] ], [ doc ] );\n\
160 selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;\n\
161 }\n\
162\n\
163 return jQuery.merge( this, selector );\n\
164\n\
165 // HANDLE: $(\"#id\")\n\
166 } else {\n\
167 elem = document.getElementById( match[2] );\n\
168\n\
169 // Check parentNode to catch when Blackberry 4.6 returns\n\
170 // nodes that are no longer in the document #6963\n\
171 if ( elem && elem.parentNode ) {\n\
172 // Handle the case where IE and Opera return items\n\
173 // by name instead of ID\n\
174 if ( elem.id !== match[2] ) {\n\
175 return rootjQuery.find( selector );\n\
176 }\n\
177\n\
178 // Otherwise, we inject the element directly into the jQuery object\n\
179 this.length = 1;\n\
180 this[0] = elem;\n\
181 }\n\
182\n\
183 this.context = document;\n\
184 this.selector = selector;\n\
185 return this;\n\
186 }\n\
187\n\
188 // HANDLE: $(expr, $(...))\n\
189 } else if ( !context || context.jquery ) {\n\
190 return (context || rootjQuery).find( selector );\n\
191\n\
192 // HANDLE: $(expr, context)\n\
193 // (which is just equivalent to: $(context).find(expr)\n\
194 } else {\n\
195 return this.constructor( context ).find( selector );\n\
196 }\n\
197\n\
198 // HANDLE: $(function)\n\
199 // Shortcut for document ready\n\
200 } else if ( jQuery.isFunction( selector ) ) {\n\
201 return rootjQuery.ready( selector );\n\
202 }\n\
203\n\
204 if (selector.selector !== undefined) {\n\
205 this.selector = selector.selector;\n\
206 this.context = selector.context;\n\
207 }\n\
208\n\
209 return jQuery.makeArray( selector, this );\n\
210 },\n\
211\n\
212 // Start with an empty selector\n\
213 selector: \"\",\n\
214\n\
215 // The current version of jQuery being used\n\
216 jquery: \"1.6.4\",\n\
217\n\
218 // The default length of a jQuery object is 0\n\
219 length: 0,\n\
220\n\
221 // The number of elements contained in the matched element set\n\
222 size: function() {\n\
223 return this.length;\n\
224 },\n\
225\n\
226 toArray: function() {\n\
227 return slice.call( this, 0 );\n\
228 },\n\
229\n\
230 // Get the Nth element in the matched element set OR\n\
231 // Get the whole matched element set as a clean array\n\
232 get: function( num ) {\n\
233 return num == null ?\n\
234\n\
235 // Return a 'clean' array\n\
236 this.toArray() :\n\
237\n\
238 // Return just the object\n\
239 ( num < 0 ? this[ this.length + num ] : this[ num ] );\n\
240 },\n\
241\n\
242 // Take an array of elements and push it onto the stack\n\
243 // (returning the new matched element set)\n\
244 pushStack: function( elems, name, selector ) {\n\
245 // Build a new jQuery matched element set\n\
246 var ret = this.constructor();\n\
247\n\
248 if ( jQuery.isArray( elems ) ) {\n\
249 push.apply( ret, elems );\n\
250\n\
251 } else {\n\
252 jQuery.merge( ret, elems );\n\
253 }\n\
254\n\
255 // Add the old object onto the stack (as a reference)\n\
256 ret.prevObject = this;\n\
257\n\
258 ret.context = this.context;\n\
259\n\
260 if ( name === \"find\" ) {\n\
261 ret.selector = this.selector + (this.selector ? \" \" : \"\") + selector;\n\
262 } else if ( name ) {\n\
263 ret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\
264 }\n\
265\n\
266 // Return the newly-formed element set\n\
267 return ret;\n\
268 },\n\
269\n\
270 // Execute a callback for every element in the matched set.\n\
271 // (You can seed the arguments with an array of args, but this is\n\
272 // only used internally.)\n\
273 each: function( callback, args ) {\n\
274 return jQuery.each( this, callback, args );\n\
275 },\n\
276\n\
277 ready: function( fn ) {\n\
278 // Attach the listeners\n\
279 jQuery.bindReady();\n\
280\n\
281 // Add the callback\n\
282 readyList.done( fn );\n\
283\n\
284 return this;\n\
285 },\n\
286\n\
287 eq: function( i ) {\n\
288 return i === -1 ?\n\
289 this.slice( i ) :\n\
290 this.slice( i, +i + 1 );\n\
291 },\n\
292\n\
293 first: function() {\n\
294 return this.eq( 0 );\n\
295 },\n\
296\n\
297 last: function() {\n\
298 return this.eq( -1 );\n\
299 },\n\
300\n\
301 slice: function() {\n\
302 return this.pushStack( slice.apply( this, arguments ),\n\
303 \"slice\", slice.call(arguments).join(\",\") );\n\
304 },\n\
305\n\
306 map: function( callback ) {\n\
307 return this.pushStack( jQuery.map(this, function( elem, i ) {\n\
308 return callback.call( elem, i, elem );\n\
309 }));\n\
310 },\n\
311\n\
312 end: function() {\n\
313 return this.prevObject || this.constructor(null);\n\
314 },\n\
315\n\
316 // For internal use only.\n\
317 // Behaves like an Array's method, not like a jQuery method.\n\
318 push: push,\n\
319 sort: [].sort,\n\
320 splice: [].splice\n\
321};\n\
322\n\
323// Give the init function the jQuery prototype for later instantiation\n\
324jQuery.fn.init.prototype = jQuery.fn;\n\
325\n\
326jQuery.extend = jQuery.fn.extend = function() {\n\
327 var options, name, src, copy, copyIsArray, clone,\n\
328 target = arguments[0] || {},\n\
329 i = 1,\n\
330 length = arguments.length,\n\
331 deep = false;\n\
332\n\
333 // Handle a deep copy situation\n\
334 if ( typeof target === \"boolean\" ) {\n\
335 deep = target;\n\
336 target = arguments[1] || {};\n\
337 // skip the boolean and the target\n\
338 i = 2;\n\
339 }\n\
340\n\
341 // Handle case when target is a string or something (possible in deep copy)\n\
342 if ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\
343 target = {};\n\
344 }\n\
345\n\
346 // extend jQuery itself if only one argument is passed\n\
347 if ( length === i ) {\n\
348 target = this;\n\
349 --i;\n\
350 }\n\
351\n\
352 for ( ; i < length; i++ ) {\n\
353 // Only deal with non-null/undefined values\n\
354 if ( (options = arguments[ i ]) != null ) {\n\
355 // Extend the base object\n\
356 for ( name in options ) {\n\
357 src = target[ name ];\n\
358 copy = options[ name ];\n\
359\n\
360 // Prevent never-ending loop\n\
361 if ( target === copy ) {\n\
362 continue;\n\
363 }\n\
364\n\
365 // Recurse if we're merging plain objects or arrays\n\
366 if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\
367 if ( copyIsArray ) {\n\
368 copyIsArray = false;\n\
369 clone = src && jQuery.isArray(src) ? src : [];\n\
370\n\
371 } else {\n\
372 clone = src && jQuery.isPlainObject(src) ? src : {};\n\
373 }\n\
374\n\
375 // Never move original objects, clone them\n\
376 target[ name ] = jQuery.extend( deep, clone, copy );\n\
377\n\
378 // Don't bring in undefined values\n\
379 } else if ( copy !== undefined ) {\n\
380 target[ name ] = copy;\n\
381 }\n\
382 }\n\
383 }\n\
384 }\n\
385\n\
386 // Return the modified object\n\
387 return target;\n\
388};\n\
389\n\
390jQuery.extend({\n\
391 noConflict: function( deep ) {\n\
392 if ( window.$ === jQuery ) {\n\
393 window.$ = _$;\n\
394 }\n\
395\n\
396 if ( deep && window.jQuery === jQuery ) {\n\
397 window.jQuery = _jQuery;\n\
398 }\n\
399\n\
400 return jQuery;\n\
401 },\n\
402\n\
403 // Is the DOM ready to be used? Set to true once it occurs.\n\
404 isReady: false,\n\
405\n\
406 // A counter to track how many items to wait for before\n\
407 // the ready event fires. See #6781\n\
408 readyWait: 1,\n\
409\n\
410 // Hold (or release) the ready event\n\
411 holdReady: function( hold ) {\n\
412 if ( hold ) {\n\
413 jQuery.readyWait++;\n\
414 } else {\n\
415 jQuery.ready( true );\n\
416 }\n\
417 },\n\
418\n\
419 // Handle when the DOM is ready\n\
420 ready: function( wait ) {\n\
421 // Either a released hold or an DOMready/load event and not yet ready\n\
422 if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {\n\
423 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\
424 if ( !document.body ) {\n\
425 return setTimeout( jQuery.ready, 1 );\n\
426 }\n\
427\n\
428 // Remember that the DOM is ready\n\
429 jQuery.isReady = true;\n\
430\n\
431 // If a normal DOM Ready event fired, decrement, and wait if need be\n\
432 if ( wait !== true && --jQuery.readyWait > 0 ) {\n\
433 return;\n\
434 }\n\
435\n\
436 // If there are functions bound, to execute\n\
437 readyList.resolveWith( document, [ jQuery ] );\n\
438\n\
439 // Trigger any bound ready events\n\
440 if ( jQuery.fn.trigger ) {\n\
441 jQuery( document ).trigger( \"ready\" ).unbind( \"ready\" );\n\
442 }\n\
443 }\n\
444 },\n\
445\n\
446 bindReady: function() {\n\
447 if ( readyList ) {\n\
448 return;\n\
449 }\n\
450\n\
451 readyList = jQuery._Deferred();\n\
452\n\
453 // Catch cases where $(document).ready() is called after the\n\
454 // browser event has already occurred.\n\
455 if ( document.readyState === \"complete\" ) {\n\
456 // Handle it asynchronously to allow scripts the opportunity to delay ready\n\
457 return setTimeout( jQuery.ready, 1 );\n\
458 }\n\
459\n\
460 // Mozilla, Opera and webkit nightlies currently support this event\n\
461 if ( document.addEventListener ) {\n\
462 // Use the handy event callback\n\
463 document.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\
464\n\
465 // A fallback to window.onload, that will always work\n\
466 window.addEventListener( \"load\", jQuery.ready, false );\n\
467\n\
468 // If IE event model is used\n\
469 } else if ( document.attachEvent ) {\n\
470 // ensure firing before onload,\n\
471 // maybe late but safe also for iframes\n\
472 document.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\
473\n\
474 // A fallback to window.onload, that will always work\n\
475 window.attachEvent( \"onload\", jQuery.ready );\n\
476\n\
477 // If IE and not a frame\n\
478 // continually check to see if the document is ready\n\
479 var toplevel = false;\n\
480\n\
481 try {\n\
482 toplevel = window.frameElement == null;\n\
483 } catch(e) {}\n\
484\n\
485 if ( document.documentElement.doScroll && toplevel ) {\n\
486 doScrollCheck();\n\
487 }\n\
488 }\n\
489 },\n\
490\n\
491 // See test/unit/core.js for details concerning isFunction.\n\
492 // Since version 1.3, DOM methods and functions like alert\n\
493 // aren't supported. They return false on IE (#2968).\n\
494 isFunction: function( obj ) {\n\
495 return jQuery.type(obj) === \"function\";\n\
496 },\n\
497\n\
498 isArray: Array.isArray || function( obj ) {\n\
499 return jQuery.type(obj) === \"array\";\n\
500 },\n\
501\n\
502 // A crude way of determining if an object is a window\n\
503 isWindow: function( obj ) {\n\
504 return obj && typeof obj === \"object\" && \"setInterval\" in obj;\n\
505 },\n\
506\n\
507 isNaN: function( obj ) {\n\
508 return obj == null || !rdigit.test( obj ) || isNaN( obj );\n\
509 },\n\
510\n\
511 type: function( obj ) {\n\
512 return obj == null ?\n\
513 String( obj ) :\n\
514 class2type[ toString.call(obj) ] || \"object\";\n\
515 },\n\
516\n\
517 isPlainObject: function( obj ) {\n\
518 // Must be an Object.\n\
519 // Because of IE, we also have to check the presence of the constructor property.\n\
520 // Make sure that DOM nodes and window objects don't pass through, as well\n\
521 if ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\
522 return false;\n\
523 }\n\
524\n\
525 try {\n\
526 // Not own constructor property must be Object\n\
527 if ( obj.constructor &&\n\
528 !hasOwn.call(obj, \"constructor\") &&\n\
529 !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\
530 return false;\n\
531 }\n\
532 } catch ( e ) {\n\
533 // IE8,9 Will throw exceptions on certain host objects #9897\n\
534 return false;\n\
535 }\n\
536\n\
537 // Own properties are enumerated firstly, so to speed up,\n\
538 // if last one is own, then all properties are own.\n\
539\n\
540 var key;\n\
541 for ( key in obj ) {}\n\
542\n\
543 return key === undefined || hasOwn.call( obj, key );\n\
544 },\n\
545\n\
546 isEmptyObject: function( obj ) {\n\
547 for ( var name in obj ) {\n\
548 return false;\n\
549 }\n\
550 return true;\n\
551 },\n\
552\n\
553 error: function( msg ) {\n\
554 throw msg;\n\
555 },\n\
556\n\
557 parseJSON: function( data ) {\n\
558 if ( typeof data !== \"string\" || !data ) {\n\
559 return null;\n\
560 }\n\
561\n\
562 // Make sure leading/trailing whitespace is removed (IE can't handle it)\n\
563 data = jQuery.trim( data );\n\
564\n\
565 // Attempt to parse using the native JSON parser first\n\
566 if ( window.JSON && window.JSON.parse ) {\n\
567 return window.JSON.parse( data );\n\
568 }\n\
569\n\
570 // Make sure the incoming data is actual JSON\n\
571 // Logic borrowed from http://json.org/json2.js\n\
572 if ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\
573 .replace( rvalidtokens, \"]\" )\n\
574 .replace( rvalidbraces, \"\")) ) {\n\
575\n\
576 return (new Function( \"return \" + data ))();\n\
577\n\
578 }\n\
579 jQuery.error( \"Invalid JSON: \" + data );\n\
580 },\n\
581\n\
582 // Cross-browser xml parsing\n\
583 parseXML: function( data ) {\n\
584 var xml, tmp;\n\
585 try {\n\
586 if ( window.DOMParser ) { // Standard\n\
587 tmp = new DOMParser();\n\
588 xml = tmp.parseFromString( data , \"text/xml\" );\n\
589 } else { // IE\n\
590 xml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\
591 xml.async = \"false\";\n\
592 xml.loadXML( data );\n\
593 }\n\
594 } catch( e ) {\n\
595 xml = undefined;\n\
596 }\n\
597 if ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\
598 jQuery.error( \"Invalid XML: \" + data );\n\
599 }\n\
600 return xml;\n\
601 },\n\
602\n\
603 noop: function() {},\n\
604\n\
605 // Evaluates a script in a global context\n\
606 // Workarounds based on findings by Jim Driscoll\n\
607 // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\
608 globalEval: function( data ) {\n\
609 if ( data && rnotwhite.test( data ) ) {\n\
610 // We use execScript on Internet Explorer\n\
611 // We use an anonymous function so that context is window\n\
612 // rather than jQuery in Firefox\n\
613 ( window.execScript || function( data ) {\n\
614 window[ \"eval\" ].call( window, data );\n\
615 } )( data );\n\
616 }\n\
617 },\n\
618\n\
619 // Convert dashed to camelCase; used by the css and data modules\n\
620 // Microsoft forgot to hump their vendor prefix (#9572)\n\
621 camelCase: function( string ) {\n\
622 return string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\
623 },\n\
624\n\
625 nodeName: function( elem, name ) {\n\
626 return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();\n\
627 },\n\
628\n\
629 // args is for internal usage only\n\
630 each: function( object, callback, args ) {\n\
631 var name, i = 0,\n\
632 length = object.length,\n\
633 isObj = length === undefined || jQuery.isFunction( object );\n\
634\n\
635 if ( args ) {\n\
636 if ( isObj ) {\n\
637 for ( name in object ) {\n\
638 if ( callback.apply( object[ name ], args ) === false ) {\n\
639 break;\n\
640 }\n\
641 }\n\
642 } else {\n\
643 for ( ; i < length; ) {\n\
644 if ( callback.apply( object[ i++ ], args ) === false ) {\n\
645 break;\n\
646 }\n\
647 }\n\
648 }\n\
649\n\
650 // A special, fast, case for the most common use of each\n\
651 } else {\n\
652 if ( isObj ) {\n\
653 for ( name in object ) {\n\
654 if ( callback.call( object[ name ], name, object[ name ] ) === false ) {\n\
655 break;\n\
656 }\n\
657 }\n\
658 } else {\n\
659 for ( ; i < length; ) {\n\
660 if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {\n\
661 break;\n\
662 }\n\
663 }\n\
664 }\n\
665 }\n\
666\n\
667 return object;\n\
668 },\n\
669\n\
670 // Use native String.trim function wherever possible\n\
671 trim: trim ?\n\
672 function( text ) {\n\
673 return text == null ?\n\
674 \"\" :\n\
675 trim.call( text );\n\
676 } :\n\
677\n\
678 // Otherwise use our own trimming functionality\n\
679 function( text ) {\n\
680 return text == null ?\n\
681 \"\" :\n\
682 text.toString().replace( trimLeft, \"\" ).replace( trimRight, \"\" );\n\
683 },\n\
684\n\
685 // results is for internal usage only\n\
686 makeArray: function( array, results ) {\n\
687 var ret = results || [];\n\
688\n\
689 if ( array != null ) {\n\
690 // The window, strings (and functions) also have 'length'\n\
691 // The extra typeof function check is to prevent crashes\n\
692 // in Safari 2 (See: #3039)\n\
693 // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n\
694 var type = jQuery.type( array );\n\
695\n\
696 if ( array.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( array ) ) {\n\
697 push.call( ret, array );\n\
698 } else {\n\
699 jQuery.merge( ret, array );\n\
700 }\n\
701 }\n\
702\n\
703 return ret;\n\
704 },\n\
705\n\
706 inArray: function( elem, array ) {\n\
707 if ( !array ) {\n\
708 return -1;\n\
709 }\n\
710\n\
711 if ( indexOf ) {\n\
712 return indexOf.call( array, elem );\n\
713 }\n\
714\n\
715 for ( var i = 0, length = array.length; i < length; i++ ) {\n\
716 if ( array[ i ] === elem ) {\n\
717 return i;\n\
718 }\n\
719 }\n\
720\n\
721 return -1;\n\
722 },\n\
723\n\
724 merge: function( first, second ) {\n\
725 var i = first.length,\n\
726 j = 0;\n\
727\n\
728 if ( typeof second.length === \"number\" ) {\n\
729 for ( var l = second.length; j < l; j++ ) {\n\
730 first[ i++ ] = second[ j ];\n\
731 }\n\
732\n\
733 } else {\n\
734 while ( second[j] !== undefined ) {\n\
735 first[ i++ ] = second[ j++ ];\n\
736 }\n\
737 }\n\
738\n\
739 first.length = i;\n\
740\n\
741 return first;\n\
742 },\n\
743\n\
744 grep: function( elems, callback, inv ) {\n\
745 var ret = [], retVal;\n\
746 inv = !!inv;\n\
747\n\
748 // Go through the array, only saving the items\n\
749 // that pass the validator function\n\
750 for ( var i = 0, length = elems.length; i < length; i++ ) {\n\
751 retVal = !!callback( elems[ i ], i );\n\
752 if ( inv !== retVal ) {\n\
753 ret.push( elems[ i ] );\n\
754 }\n\
755 }\n\
756\n\
757 return ret;\n\
758 },\n\
759\n\
760 // arg is for internal usage only\n\
761 map: function( elems, callback, arg ) {\n\
762 var value, key, ret = [],\n\
763 i = 0,\n\
764 length = elems.length,\n\
765 // jquery objects are treated as arrays\n\
766 isArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\
767\n\
768 // Go through the array, translating each of the items to their\n\
769 if ( isArray ) {\n\
770 for ( ; i < length; i++ ) {\n\
771 value = callback( elems[ i ], i, arg );\n\
772\n\
773 if ( value != null ) {\n\
774 ret[ ret.length ] = value;\n\
775 }\n\
776 }\n\
777\n\
778 // Go through every key on the object,\n\
779 } else {\n\
780 for ( key in elems ) {\n\
781 value = callback( elems[ key ], key, arg );\n\
782\n\
783 if ( value != null ) {\n\
784 ret[ ret.length ] = value;\n\
785 }\n\
786 }\n\
787 }\n\
788\n\
789 // Flatten any nested arrays\n\
790 return ret.concat.apply( [], ret );\n\
791 },\n\
792\n\
793 // A global GUID counter for objects\n\
794 guid: 1,\n\
795\n\
796 // Bind a function to a context, optionally partially applying any\n\
797 // arguments.\n\
798 proxy: function( fn, context ) {\n\
799 if ( typeof context === \"string\" ) {\n\
800 var tmp = fn[ context ];\n\
801 context = fn;\n\
802 fn = tmp;\n\
803 }\n\
804\n\
805 // Quick check to determine if target is callable, in the spec\n\
806 // this throws a TypeError, but we will just return undefined.\n\
807 if ( !jQuery.isFunction( fn ) ) {\n\
808 return undefined;\n\
809 }\n\
810\n\
811 // Simulated bind\n\
812 var args = slice.call( arguments, 2 ),\n\
813 proxy = function() {\n\
814 return fn.apply( context, args.concat( slice.call( arguments ) ) );\n\
815 };\n\
816\n\
817 // Set the guid of unique handler to the same of original handler, so it can be removed\n\
818 proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;\n\
819\n\
820 return proxy;\n\
821 },\n\
822\n\
823 // Mutifunctional method to get and set values to a collection\n\
824 // The value/s can optionally be executed if it's a function\n\
825 access: function( elems, key, value, exec, fn, pass ) {\n\
826 var length = elems.length;\n\
827\n\
828 // Setting many attributes\n\
829 if ( typeof key === \"object\" ) {\n\
830 for ( var k in key ) {\n\
831 jQuery.access( elems, k, key[k], exec, fn, value );\n\
832 }\n\
833 return elems;\n\
834 }\n\
835\n\
836 // Setting one attribute\n\
837 if ( value !== undefined ) {\n\
838 // Optionally, function values get executed if exec is true\n\
839 exec = !pass && exec && jQuery.isFunction(value);\n\
840\n\
841 for ( var i = 0; i < length; i++ ) {\n\
842 fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n\
843 }\n\
844\n\
845 return elems;\n\
846 }\n\
847\n\
848 // Getting an attribute\n\
849 return length ? fn( elems[0], key ) : undefined;\n\
850 },\n\
851\n\
852 now: function() {\n\
853 return (new Date()).getTime();\n\
854 },\n\
855\n\
856 // Use of jQuery.browser is frowned upon.\n\
857 // More details: http://docs.jquery.com/Utilities/jQuery.browser\n\
858 uaMatch: function( ua ) {\n\
859 ua = ua.toLowerCase();\n\
860\n\
861 var match = rwebkit.exec( ua ) ||\n\
862 ropera.exec( ua ) ||\n\
863 rmsie.exec( ua ) ||\n\
864 ua.indexOf(\"compatible\") < 0 && rmozilla.exec( ua ) ||\n\
865 [];\n\
866\n\
867 return { browser: match[1] || \"\", version: match[2] || \"0\" };\n\
868 },\n\
869\n\
870 sub: function() {\n\
871 function jQuerySub( selector, context ) {\n\
872 return new jQuerySub.fn.init( selector, context );\n\
873 }\n\
874 jQuery.extend( true, jQuerySub, this );\n\
875 jQuerySub.superclass = this;\n\
876 jQuerySub.fn = jQuerySub.prototype = this();\n\
877 jQuerySub.fn.constructor = jQuerySub;\n\
878 jQuerySub.sub = this.sub;\n\
879 jQuerySub.fn.init = function init( selector, context ) {\n\
880 if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\
881 context = jQuerySub( context );\n\
882 }\n\
883\n\
884 return jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\
885 };\n\
886 jQuerySub.fn.init.prototype = jQuerySub.fn;\n\
887 var rootjQuerySub = jQuerySub(document);\n\
888 return jQuerySub;\n\
889 },\n\
890\n\
891 browser: {}\n\
892});\n\
893\n\
894// Populate the class2type map\n\
895jQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n\
896 class2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\
897});\n\
898\n\
899browserMatch = jQuery.uaMatch( userAgent );\n\
900if ( browserMatch.browser ) {\n\
901 jQuery.browser[ browserMatch.browser ] = true;\n\
902 jQuery.browser.version = browserMatch.version;\n\
903}\n\
904\n\
905// Deprecated, use jQuery.browser.webkit instead\n\
906if ( jQuery.browser.webkit ) {\n\
907 jQuery.browser.safari = true;\n\
908}\n\
909\n\
910// IE doesn't match non-breaking spaces with \\s\n\
911if ( rnotwhite.test( \"\\xA0\" ) ) {\n\
912 trimLeft = /^[\\s\\xA0]+/;\n\
913 trimRight = /[\\s\\xA0]+$/;\n\
914}\n\
915\n\
916// All jQuery objects should point back to these\n\
917rootjQuery = jQuery(document);\n\
918\n\
919// Cleanup functions for the document ready method\n\
920if ( document.addEventListener ) {\n\
921 DOMContentLoaded = function() {\n\
922 document.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\
923 jQuery.ready();\n\
924 };\n\
925\n\
926} else if ( document.attachEvent ) {\n\
927 DOMContentLoaded = function() {\n\
928 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\
929 if ( document.readyState === \"complete\" ) {\n\
930 document.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n\
931 jQuery.ready();\n\
932 }\n\
933 };\n\
934}\n\
935\n\
936// The DOM ready check for Internet Explorer\n\
937function doScrollCheck() {\n\
938 if ( jQuery.isReady ) {\n\
939 return;\n\
940 }\n\
941\n\
942 try {\n\
943 // If IE is used, use the trick by Diego Perini\n\
944 // http://javascript.nwbox.com/IEContentLoaded/\n\
945 document.documentElement.doScroll(\"left\");\n\
946 } catch(e) {\n\
947 setTimeout( doScrollCheck, 1 );\n\
948 return;\n\
949 }\n\
950\n\
951 // and execute any waiting functions\n\
952 jQuery.ready();\n\
953}\n\
954\n\
955return jQuery;\n\
956\n\
957})();\n\
958\n\
959\n\
960var // Promise methods\n\
961 promiseMethods = \"done fail isResolved isRejected promise then always pipe\".split( \" \" ),\n\
962 // Static reference to slice\n\
963 sliceDeferred = [].slice;\n\
964\n\
965jQuery.extend({\n\
966 // Create a simple deferred (one callbacks list)\n\
967 _Deferred: function() {\n\
968 var // callbacks list\n\
969 callbacks = [],\n\
970 // stored [ context , args ]\n\
971 fired,\n\
972 // to avoid firing when already doing so\n\
973 firing,\n\
974 // flag to know if the deferred has been cancelled\n\
975 cancelled,\n\
976 // the deferred itself\n\
977 deferred = {\n\
978\n\
979 // done( f1, f2, ...)\n\
980 done: function() {\n\
981 if ( !cancelled ) {\n\
982 var args = arguments,\n\
983 i,\n\
984 length,\n\
985 elem,\n\
986 type,\n\
987 _fired;\n\
988 if ( fired ) {\n\
989 _fired = fired;\n\
990 fired = 0;\n\
991 }\n\
992 for ( i = 0, length = args.length; i < length; i++ ) {\n\
993 elem = args[ i ];\n\
994 type = jQuery.type( elem );\n\
995 if ( type === \"array\" ) {\n\
996 deferred.done.apply( deferred, elem );\n\
997 } else if ( type === \"function\" ) {\n\
998 callbacks.push( elem );\n\
999 }\n\
1000 }\n\
1001 if ( _fired ) {\n\
1002 deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );\n\
1003 }\n\
1004 }\n\
1005 return this;\n\
1006 },\n\
1007\n\
1008 // resolve with given context and args\n\
1009 resolveWith: function( context, args ) {\n\
1010 if ( !cancelled && !fired && !firing ) {\n\
1011 // make sure args are available (#8421)\n\
1012 args = args || [];\n\
1013 firing = 1;\n\
1014 try {\n\
1015 while( callbacks[ 0 ] ) {\n\
1016 callbacks.shift().apply( context, args );\n\
1017 }\n\
1018 }\n\
1019 finally {\n\
1020 fired = [ context, args ];\n\
1021 firing = 0;\n\
1022 }\n\
1023 }\n\
1024 return this;\n\
1025 },\n\
1026\n\
1027 // resolve with this as context and given arguments\n\
1028 resolve: function() {\n\
1029 deferred.resolveWith( this, arguments );\n\
1030 return this;\n\
1031 },\n\
1032\n\
1033 // Has this deferred been resolved?\n\
1034 isResolved: function() {\n\
1035 return !!( firing || fired );\n\
1036 },\n\
1037\n\
1038 // Cancel\n\
1039 cancel: function() {\n\
1040 cancelled = 1;\n\
1041 callbacks = [];\n\
1042 return this;\n\
1043 }\n\
1044 };\n\
1045\n\
1046 return deferred;\n\
1047 },\n\
1048\n\
1049 // Full fledged deferred (two callbacks list)\n\
1050 Deferred: function( func ) {\n\
1051 var deferred = jQuery._Deferred(),\n\
1052 failDeferred = jQuery._Deferred(),\n\
1053 promise;\n\
1054 // Add errorDeferred methods, then and promise\n\
1055 jQuery.extend( deferred, {\n\
1056 then: function( doneCallbacks, failCallbacks ) {\n\
1057 deferred.done( doneCallbacks ).fail( failCallbacks );\n\
1058 return this;\n\
1059 },\n\
1060 always: function() {\n\
1061 return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );\n\
1062 },\n\
1063 fail: failDeferred.done,\n\
1064 rejectWith: failDeferred.resolveWith,\n\
1065 reject: failDeferred.resolve,\n\
1066 isRejected: failDeferred.isResolved,\n\
1067 pipe: function( fnDone, fnFail ) {\n\
1068 return jQuery.Deferred(function( newDefer ) {\n\
1069 jQuery.each( {\n\
1070 done: [ fnDone, \"resolve\" ],\n\
1071 fail: [ fnFail, \"reject\" ]\n\
1072 }, function( handler, data ) {\n\
1073 var fn = data[ 0 ],\n\
1074 action = data[ 1 ],\n\
1075 returned;\n\
1076 if ( jQuery.isFunction( fn ) ) {\n\
1077 deferred[ handler ](function() {\n\
1078 returned = fn.apply( this, arguments );\n\
1079 if ( returned && jQuery.isFunction( returned.promise ) ) {\n\
1080 returned.promise().then( newDefer.resolve, newDefer.reject );\n\
1081 } else {\n\
1082 newDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n\
1083 }\n\
1084 });\n\
1085 } else {\n\
1086 deferred[ handler ]( newDefer[ action ] );\n\
1087 }\n\
1088 });\n\
1089 }).promise();\n\
1090 },\n\
1091 // Get a promise for this deferred\n\
1092 // If obj is provided, the promise aspect is added to the object\n\
1093 promise: function( obj ) {\n\
1094 if ( obj == null ) {\n\
1095 if ( promise ) {\n\
1096 return promise;\n\
1097 }\n\
1098 promise = obj = {};\n\
1099 }\n\
1100 var i = promiseMethods.length;\n\
1101 while( i-- ) {\n\
1102 obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];\n\
1103 }\n\
1104 return obj;\n\
1105 }\n\
1106 });\n\
1107 // Make sure only one callback list will be used\n\
1108 deferred.done( failDeferred.cancel ).fail( deferred.cancel );\n\
1109 // Unexpose cancel\n\
1110 delete deferred.cancel;\n\
1111 // Call given func if any\n\
1112 if ( func ) {\n\
1113 func.call( deferred, deferred );\n\
1114 }\n\
1115 return deferred;\n\
1116 },\n\
1117\n\
1118 // Deferred helper\n\
1119 when: function( firstParam ) {\n\
1120 var args = arguments,\n\
1121 i = 0,\n\
1122 length = args.length,\n\
1123 count = length,\n\
1124 deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?\n\
1125 firstParam :\n\
1126 jQuery.Deferred();\n\
1127 function resolveFunc( i ) {\n\
1128 return function( value ) {\n\
1129 args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;\n\
1130 if ( !( --count ) ) {\n\
1131 // Strange bug in FF4:\n\
1132 // Values changed onto the arguments object sometimes end up as undefined values\n\
1133 // outside the $.when method. Cloning the object into a fresh array solves the issue\n\
1134 deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );\n\
1135 }\n\
1136 };\n\
1137 }\n\
1138 if ( length > 1 ) {\n\
1139 for( ; i < length; i++ ) {\n\
1140 if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {\n\
1141 args[ i ].promise().then( resolveFunc(i), deferred.reject );\n\
1142 } else {\n\
1143 --count;\n\
1144 }\n\
1145 }\n\
1146 if ( !count ) {\n\
1147 deferred.resolveWith( deferred, args );\n\
1148 }\n\
1149 } else if ( deferred !== firstParam ) {\n\
1150 deferred.resolveWith( deferred, length ? [ firstParam ] : [] );\n\
1151 }\n\
1152 return deferred.promise();\n\
1153 }\n\
1154});\n\
1155\n\
1156\n\
1157\n\
1158jQuery.support = (function() {\n\
1159\n\
1160 var div = document.createElement( \"div\" ),\n\
1161 documentElement = document.documentElement,\n\
1162 all,\n\
1163 a,\n\
1164 select,\n\
1165 opt,\n\
1166 input,\n\
1167 marginDiv,\n\
1168 support,\n\
1169 fragment,\n\
1170 body,\n\
1171 testElementParent,\n\
1172 testElement,\n\
1173 testElementStyle,\n\
1174 tds,\n\
1175 events,\n\
1176 eventName,\n\
1177 i,\n\
1178 isSupported;\n\
1179\n\
1180 // Preliminary tests\n\
1181 div.setAttribute(\"className\", \"t\");\n\
1182 div.innerHTML = \" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";\n\
1183\n\
1184\n\
1185 all = div.getElementsByTagName( \"*\" );\n\
1186 a = div.getElementsByTagName( \"a\" )[ 0 ];\n\
1187\n\
1188 // Can't get basic test support\n\
1189 if ( !all || !all.length || !a ) {\n\
1190 return {};\n\
1191 }\n\
1192\n\
1193 // First batch of supports tests\n\
1194 select = document.createElement( \"select\" );\n\
1195 opt = select.appendChild( document.createElement(\"option\") );\n\
1196 input = div.getElementsByTagName( \"input\" )[ 0 ];\n\
1197\n\
1198 support = {\n\
1199 // IE strips leading whitespace when .innerHTML is used\n\
1200 leadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\
1201\n\
1202 // Make sure that tbody elements aren't automatically inserted\n\
1203 // IE will insert them into empty tables\n\
1204 tbody: !div.getElementsByTagName( \"tbody\" ).length,\n\
1205\n\
1206 // Make sure that link elements get serialized correctly by innerHTML\n\
1207 // This requires a wrapper element in IE\n\
1208 htmlSerialize: !!div.getElementsByTagName( \"link\" ).length,\n\
1209\n\
1210 // Get the style information from getAttribute\n\
1211 // (IE uses .cssText instead)\n\
1212 style: /top/.test( a.getAttribute(\"style\") ),\n\
1213\n\
1214 // Make sure that URLs aren't manipulated\n\
1215 // (IE normalizes it by default)\n\
1216 hrefNormalized: ( a.getAttribute( \"href\" ) === \"/a\" ),\n\
1217\n\
1218 // Make sure that element opacity exists\n\
1219 // (IE uses filter instead)\n\
1220 // Use a regex to work around a WebKit issue. See #5145\n\
1221 opacity: /^0.55$/.test( a.style.opacity ),\n\
1222\n\
1223 // Verify style float existence\n\
1224 // (IE uses styleFloat instead of cssFloat)\n\
1225 cssFloat: !!a.style.cssFloat,\n\
1226\n\
1227 // Make sure that if no value is specified for a checkbox\n\
1228 // that it defaults to \"on\".\n\
1229 // (WebKit defaults to \"\" instead)\n\
1230 checkOn: ( input.value === \"on\" ),\n\
1231\n\
1232 // Make sure that a selected-by-default option has a working selected property.\n\
1233 // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\
1234 optSelected: opt.selected,\n\
1235\n\
1236 // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\
1237 getSetAttribute: div.className !== \"t\",\n\
1238\n\
1239 // Will be defined later\n\
1240 submitBubbles: true,\n\
1241 changeBubbles: true,\n\
1242 focusinBubbles: false,\n\
1243 deleteExpando: true,\n\
1244 noCloneEvent: true,\n\
1245 inlineBlockNeedsLayout: false,\n\
1246 shrinkWrapBlocks: false,\n\
1247 reliableMarginRight: true\n\
1248 };\n\
1249\n\
1250 // Make sure checked status is properly cloned\n\
1251 input.checked = true;\n\
1252 support.noCloneChecked = input.cloneNode( true ).checked;\n\
1253\n\
1254 // Make sure that the options inside disabled selects aren't marked as disabled\n\
1255 // (WebKit marks them as disabled)\n\
1256 select.disabled = true;\n\
1257 support.optDisabled = !opt.disabled;\n\
1258\n\
1259 // Test to see if it's possible to delete an expando from an element\n\
1260 // Fails in Internet Explorer\n\
1261 try {\n\
1262 delete div.test;\n\
1263 } catch( e ) {\n\
1264 support.deleteExpando = false;\n\
1265 }\n\
1266\n\
1267 if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n\
1268 div.attachEvent( \"onclick\", function() {\n\
1269 // Cloning a node shouldn't copy over any\n\
1270 // bound event handlers (IE does this)\n\
1271 support.noCloneEvent = false;\n\
1272 });\n\
1273 div.cloneNode( true ).fireEvent( \"onclick\" );\n\
1274 }\n\
1275\n\
1276 // Check if a radio maintains it's value\n\
1277 // after being appended to the DOM\n\
1278 input = document.createElement(\"input\");\n\
1279 input.value = \"t\";\n\
1280 input.setAttribute(\"type\", \"radio\");\n\
1281 support.radioValue = input.value === \"t\";\n\
1282\n\
1283 input.setAttribute(\"checked\", \"checked\");\n\
1284 div.appendChild( input );\n\
1285 fragment = document.createDocumentFragment();\n\
1286 fragment.appendChild( div.firstChild );\n\
1287\n\
1288 // WebKit doesn't clone checked state correctly in fragments\n\
1289 support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\
1290\n\
1291 div.innerHTML = \"\";\n\
1292\n\
1293 // Figure out if the W3C box model works as expected\n\
1294 div.style.width = div.style.paddingLeft = \"1px\";\n\
1295\n\
1296 body = document.getElementsByTagName( \"body\" )[ 0 ];\n\
1297 // We use our own, invisible, body unless the body is already present\n\
1298 // in which case we use a div (#9239)\n\
1299 testElement = document.createElement( body ? \"div\" : \"body\" );\n\
1300 testElementStyle = {\n\
1301 visibility: \"hidden\",\n\
1302 width: 0,\n\
1303 height: 0,\n\
1304 border: 0,\n\
1305 margin: 0,\n\
1306 background: \"none\"\n\
1307 };\n\
1308 if ( body ) {\n\
1309 jQuery.extend( testElementStyle, {\n\
1310 position: \"absolute\",\n\
1311 left: \"-1000px\",\n\
1312 top: \"-1000px\"\n\
1313 });\n\
1314 }\n\
1315 for ( i in testElementStyle ) {\n\
1316 testElement.style[ i ] = testElementStyle[ i ];\n\
1317 }\n\
1318 testElement.appendChild( div );\n\
1319 testElementParent = body || documentElement;\n\
1320 testElementParent.insertBefore( testElement, testElementParent.firstChild );\n\
1321\n\
1322 // Check if a disconnected checkbox will retain its checked\n\
1323 // value of true after appended to the DOM (IE6/7)\n\
1324 support.appendChecked = input.checked;\n\
1325\n\
1326 support.boxModel = div.offsetWidth === 2;\n\
1327\n\
1328 if ( \"zoom\" in div.style ) {\n\
1329 // Check if natively block-level elements act like inline-block\n\
1330 // elements when setting their display to 'inline' and giving\n\
1331 // them layout\n\
1332 // (IE < 8 does this)\n\
1333 div.style.display = \"inline\";\n\
1334 div.style.zoom = 1;\n\
1335 support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );\n\
1336\n\
1337 // Check if elements with layout shrink-wrap their children\n\
1338 // (IE 6 does this)\n\
1339 div.style.display = \"\";\n\
1340 div.innerHTML = \"<div style='width:4px;'></div>\";\n\
1341 support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );\n\
1342 }\n\
1343\n\
1344 div.innerHTML = \"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";\n\
1345 tds = div.getElementsByTagName( \"td\" );\n\
1346\n\
1347 // Check if table cells still have offsetWidth/Height when they are set\n\
1348 // to display:none and there are still other visible table cells in a\n\
1349 // table row; if so, offsetWidth/Height are not reliable for use when\n\
1350 // determining if an element has been hidden directly using\n\
1351 // display:none (it is still safe to use offsets if a parent element is\n\
1352 // hidden; don safety goggles and see bug #4512 for more information).\n\
1353 // (only IE 8 fails this test)\n\
1354 isSupported = ( tds[ 0 ].offsetHeight === 0 );\n\
1355\n\
1356 tds[ 0 ].style.display = \"\";\n\
1357 tds[ 1 ].style.display = \"none\";\n\
1358\n\
1359 // Check if empty table cells still have offsetWidth/Height\n\
1360 // (IE < 8 fail this test)\n\
1361 support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\
1362 div.innerHTML = \"\";\n\
1363\n\
1364 // Check if div with explicit width and no margin-right incorrectly\n\
1365 // gets computed margin-right based on width of container. For more\n\
1366 // info see bug #3333\n\
1367 // Fails in WebKit before Feb 2011 nightlies\n\
1368 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\
1369 if ( document.defaultView && document.defaultView.getComputedStyle ) {\n\
1370 marginDiv = document.createElement( \"div\" );\n\
1371 marginDiv.style.width = \"0\";\n\
1372 marginDiv.style.marginRight = \"0\";\n\
1373 div.appendChild( marginDiv );\n\
1374 support.reliableMarginRight =\n\
1375 ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;\n\
1376 }\n\
1377\n\
1378 // Remove the body element we added\n\
1379 testElement.innerHTML = \"\";\n\
1380 testElementParent.removeChild( testElement );\n\
1381\n\
1382 // Technique from Juriy Zaytsev\n\
1383 // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/\n\
1384 // We only care about the case where non-standard event systems\n\
1385 // are used, namely in IE. Short-circuiting here helps us to\n\
1386 // avoid an eval call (in setAttribute) which can cause CSP\n\
1387 // to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n\
1388 if ( div.attachEvent ) {\n\
1389 for( i in {\n\
1390 submit: 1,\n\
1391 change: 1,\n\
1392 focusin: 1\n\
1393 } ) {\n\
1394 eventName = \"on\" + i;\n\
1395 isSupported = ( eventName in div );\n\
1396 if ( !isSupported ) {\n\
1397 div.setAttribute( eventName, \"return;\" );\n\
1398 isSupported = ( typeof div[ eventName ] === \"function\" );\n\
1399 }\n\
1400 support[ i + \"Bubbles\" ] = isSupported;\n\
1401 }\n\
1402 }\n\
1403\n\
1404 // Null connected elements to avoid leaks in IE\n\
1405 testElement = fragment = select = opt = body = marginDiv = div = input = null;\n\
1406\n\
1407 return support;\n\
1408})();\n\
1409\n\
1410// Keep track of boxModel\n\
1411jQuery.boxModel = jQuery.support.boxModel;\n\
1412\n\
1413\n\
1414\n\
1415\n\
1416var rbrace = /^(?:\\{.*\\}|\\[.*\\])$/,\n\
1417 rmultiDash = /([A-Z])/g;\n\
1418\n\
1419jQuery.extend({\n\
1420 cache: {},\n\
1421\n\
1422 // Please use with caution\n\
1423 uuid: 0,\n\
1424\n\
1425 // Unique for each copy of jQuery on the page\n\
1426 // Non-digits removed to match rinlinejQuery\n\
1427 expando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\
1428\n\
1429 // The following elements throw uncatchable exceptions if you\n\
1430 // attempt to add expando properties to them.\n\
1431 noData: {\n\
1432 \"embed\": true,\n\
1433 // Ban all objects except for Flash (which handle expandos)\n\
1434 \"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\
1435 \"applet\": true\n\
1436 },\n\
1437\n\
1438 hasData: function( elem ) {\n\
1439 elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\
1440\n\
1441 return !!elem && !isEmptyDataObject( elem );\n\
1442 },\n\
1443\n\
1444 data: function( elem, name, data, pvt /* Internal Use Only */ ) {\n\
1445 if ( !jQuery.acceptData( elem ) ) {\n\
1446 return;\n\
1447 }\n\
1448\n\
1449 var thisCache, ret,\n\
1450 internalKey = jQuery.expando,\n\
1451 getByName = typeof name === \"string\",\n\
1452\n\
1453 // We have to handle DOM nodes and JS objects differently because IE6-7\n\
1454 // can't GC object references properly across the DOM-JS boundary\n\
1455 isNode = elem.nodeType,\n\
1456\n\
1457 // Only DOM nodes need the global jQuery cache; JS object data is\n\
1458 // attached directly to the object so GC can occur automatically\n\
1459 cache = isNode ? jQuery.cache : elem,\n\
1460\n\
1461 // Only defining an ID for JS objects if its cache already exists allows\n\
1462 // the code to shortcut on the same path as a DOM node with no cache\n\
1463 id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;\n\
1464\n\
1465 // Avoid doing any more work than we need to when trying to get data on an\n\
1466 // object that has no data at all\n\
1467 if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {\n\
1468 return;\n\
1469 }\n\
1470\n\
1471 if ( !id ) {\n\
1472 // Only DOM nodes need a new unique ID for each element since their data\n\
1473 // ends up in the global cache\n\
1474 if ( isNode ) {\n\
1475 elem[ jQuery.expando ] = id = ++jQuery.uuid;\n\
1476 } else {\n\
1477 id = jQuery.expando;\n\
1478 }\n\
1479 }\n\
1480\n\
1481 if ( !cache[ id ] ) {\n\
1482 cache[ id ] = {};\n\
1483\n\
1484 // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery\n\
1485 // metadata on plain JS objects when the object is serialized using\n\
1486 // JSON.stringify\n\
1487 if ( !isNode ) {\n\
1488 cache[ id ].toJSON = jQuery.noop;\n\
1489 }\n\
1490 }\n\
1491\n\
1492 // An object can be passed to jQuery.data instead of a key/value pair; this gets\n\
1493 // shallow copied over onto the existing cache\n\
1494 if ( typeof name === \"object\" || typeof name === \"function\" ) {\n\
1495 if ( pvt ) {\n\
1496 cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);\n\
1497 } else {\n\
1498 cache[ id ] = jQuery.extend(cache[ id ], name);\n\
1499 }\n\
1500 }\n\
1501\n\
1502 thisCache = cache[ id ];\n\
1503\n\
1504 // Internal jQuery data is stored in a separate object inside the object's data\n\
1505 // cache in order to avoid key collisions between internal data and user-defined\n\
1506 // data\n\
1507 if ( pvt ) {\n\
1508 if ( !thisCache[ internalKey ] ) {\n\
1509 thisCache[ internalKey ] = {};\n\
1510 }\n\
1511\n\
1512 thisCache = thisCache[ internalKey ];\n\
1513 }\n\
1514\n\
1515 if ( data !== undefined ) {\n\
1516 thisCache[ jQuery.camelCase( name ) ] = data;\n\
1517 }\n\
1518\n\
1519 // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should\n\
1520 // not attempt to inspect the internal events object using jQuery.data, as this\n\
1521 // internal data object is undocumented and subject to change.\n\
1522 if ( name === \"events\" && !thisCache[name] ) {\n\
1523 return thisCache[ internalKey ] && thisCache[ internalKey ].events;\n\
1524 }\n\
1525\n\
1526 // Check for both converted-to-camel and non-converted data property names\n\
1527 // If a data property was specified\n\
1528 if ( getByName ) {\n\
1529\n\
1530 // First Try to find as-is property data\n\
1531 ret = thisCache[ name ];\n\
1532\n\
1533 // Test for null|undefined property data\n\
1534 if ( ret == null ) {\n\
1535\n\
1536 // Try to find the camelCased property\n\
1537 ret = thisCache[ jQuery.camelCase( name ) ];\n\
1538 }\n\
1539 } else {\n\
1540 ret = thisCache;\n\
1541 }\n\
1542\n\
1543 return ret;\n\
1544 },\n\
1545\n\
1546 removeData: function( elem, name, pvt /* Internal Use Only */ ) {\n\
1547 if ( !jQuery.acceptData( elem ) ) {\n\
1548 return;\n\
1549 }\n\
1550\n\
1551 var thisCache,\n\
1552\n\
1553 // Reference to internal data cache key\n\
1554 internalKey = jQuery.expando,\n\
1555\n\
1556 isNode = elem.nodeType,\n\
1557\n\
1558 // See jQuery.data for more information\n\
1559 cache = isNode ? jQuery.cache : elem,\n\
1560\n\
1561 // See jQuery.data for more information\n\
1562 id = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\
1563\n\
1564 // If there is already no cache entry for this object, there is no\n\
1565 // purpose in continuing\n\
1566 if ( !cache[ id ] ) {\n\
1567 return;\n\
1568 }\n\
1569\n\
1570 if ( name ) {\n\
1571\n\
1572 thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];\n\
1573\n\
1574 if ( thisCache ) {\n\
1575\n\
1576 // Support interoperable removal of hyphenated or camelcased keys\n\
1577 if ( !thisCache[ name ] ) {\n\
1578 name = jQuery.camelCase( name );\n\
1579 }\n\
1580\n\
1581 delete thisCache[ name ];\n\
1582\n\
1583 // If there is no data left in the cache, we want to continue\n\
1584 // and let the cache object itself get destroyed\n\
1585 if ( !isEmptyDataObject(thisCache) ) {\n\
1586 return;\n\
1587 }\n\
1588 }\n\
1589 }\n\
1590\n\
1591 // See jQuery.data for more information\n\
1592 if ( pvt ) {\n\
1593 delete cache[ id ][ internalKey ];\n\
1594\n\
1595 // Don't destroy the parent cache unless the internal data object\n\
1596 // had been the only thing left in it\n\
1597 if ( !isEmptyDataObject(cache[ id ]) ) {\n\
1598 return;\n\
1599 }\n\
1600 }\n\
1601\n\
1602 var internalCache = cache[ id ][ internalKey ];\n\
1603\n\
1604 // Browsers that fail expando deletion also refuse to delete expandos on\n\
1605 // the window, but it will allow it on all other JS objects; other browsers\n\
1606 // don't care\n\
1607 // Ensure that `cache` is not a window object #10080\n\
1608 if ( jQuery.support.deleteExpando || !cache.setInterval ) {\n\
1609 delete cache[ id ];\n\
1610 } else {\n\
1611 cache[ id ] = null;\n\
1612 }\n\
1613\n\
1614 // We destroyed the entire user cache at once because it's faster than\n\
1615 // iterating through each key, but we need to continue to persist internal\n\
1616 // data if it existed\n\
1617 if ( internalCache ) {\n\
1618 cache[ id ] = {};\n\
1619 // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery\n\
1620 // metadata on plain JS objects when the object is serialized using\n\
1621 // JSON.stringify\n\
1622 if ( !isNode ) {\n\
1623 cache[ id ].toJSON = jQuery.noop;\n\
1624 }\n\
1625\n\
1626 cache[ id ][ internalKey ] = internalCache;\n\
1627\n\
1628 // Otherwise, we need to eliminate the expando on the node to avoid\n\
1629 // false lookups in the cache for entries that no longer exist\n\
1630 } else if ( isNode ) {\n\
1631 // IE does not allow us to delete expando properties from nodes,\n\
1632 // nor does it have a removeAttribute function on Document nodes;\n\
1633 // we must handle all of these cases\n\
1634 if ( jQuery.support.deleteExpando ) {\n\
1635 delete elem[ jQuery.expando ];\n\
1636 } else if ( elem.removeAttribute ) {\n\
1637 elem.removeAttribute( jQuery.expando );\n\
1638 } else {\n\
1639 elem[ jQuery.expando ] = null;\n\
1640 }\n\
1641 }\n\
1642 },\n\
1643\n\
1644 // For internal use only.\n\
1645 _data: function( elem, name, data ) {\n\
1646 return jQuery.data( elem, name, data, true );\n\
1647 },\n\
1648\n\
1649 // A method for determining if a DOM node can handle the data expando\n\
1650 acceptData: function( elem ) {\n\
1651 if ( elem.nodeName ) {\n\
1652 var match = jQuery.noData[ elem.nodeName.toLowerCase() ];\n\
1653\n\
1654 if ( match ) {\n\
1655 return !(match === true || elem.getAttribute(\"classid\") !== match);\n\
1656 }\n\
1657 }\n\
1658\n\
1659 return true;\n\
1660 }\n\
1661});\n\
1662\n\
1663jQuery.fn.extend({\n\
1664 data: function( key, value ) {\n\
1665 var data = null;\n\
1666\n\
1667 if ( typeof key === \"undefined\" ) {\n\
1668 if ( this.length ) {\n\
1669 data = jQuery.data( this[0] );\n\
1670\n\
1671 if ( this[0].nodeType === 1 ) {\n\
1672 var attr = this[0].attributes, name;\n\
1673 for ( var i = 0, l = attr.length; i < l; i++ ) {\n\
1674 name = attr[i].name;\n\
1675\n\
1676 if ( name.indexOf( \"data-\" ) === 0 ) {\n\
1677 name = jQuery.camelCase( name.substring(5) );\n\
1678\n\
1679 dataAttr( this[0], name, data[ name ] );\n\
1680 }\n\
1681 }\n\
1682 }\n\
1683 }\n\
1684\n\
1685 return data;\n\
1686\n\
1687 } else if ( typeof key === \"object\" ) {\n\
1688 return this.each(function() {\n\
1689 jQuery.data( this, key );\n\
1690 });\n\
1691 }\n\
1692\n\
1693 var parts = key.split(\".\");\n\
1694 parts[1] = parts[1] ? \".\" + parts[1] : \"\";\n\
1695\n\
1696 if ( value === undefined ) {\n\
1697 data = this.triggerHandler(\"getData\" + parts[1] + \"!\", [parts[0]]);\n\
1698\n\
1699 // Try to fetch any internally stored data first\n\
1700 if ( data === undefined && this.length ) {\n\
1701 data = jQuery.data( this[0], key );\n\
1702 data = dataAttr( this[0], key, data );\n\
1703 }\n\
1704\n\
1705 return data === undefined && parts[1] ?\n\
1706 this.data( parts[0] ) :\n\
1707 data;\n\
1708\n\
1709 } else {\n\
1710 return this.each(function() {\n\
1711 var $this = jQuery( this ),\n\
1712 args = [ parts[0], value ];\n\
1713\n\
1714 $this.triggerHandler( \"setData\" + parts[1] + \"!\", args );\n\
1715 jQuery.data( this, key, value );\n\
1716 $this.triggerHandler( \"changeData\" + parts[1] + \"!\", args );\n\
1717 });\n\
1718 }\n\
1719 },\n\
1720\n\
1721 removeData: function( key ) {\n\
1722 return this.each(function() {\n\
1723 jQuery.removeData( this, key );\n\
1724 });\n\
1725 }\n\
1726});\n\
1727\n\
1728function dataAttr( elem, key, data ) {\n\
1729 // If nothing was found internally, try to fetch any\n\
1730 // data from the HTML5 data-* attribute\n\
1731 if ( data === undefined && elem.nodeType === 1 ) {\n\
1732\n\
1733 var name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\
1734\n\
1735 data = elem.getAttribute( name );\n\
1736\n\
1737 if ( typeof data === \"string\" ) {\n\
1738 try {\n\
1739 data = data === \"true\" ? true :\n\
1740 data === \"false\" ? false :\n\
1741 data === \"null\" ? null :\n\
1742 !jQuery.isNaN( data ) ? parseFloat( data ) :\n\
1743 rbrace.test( data ) ? jQuery.parseJSON( data ) :\n\
1744 data;\n\
1745 } catch( e ) {}\n\
1746\n\
1747 // Make sure we set the data so it isn't changed later\n\
1748 jQuery.data( elem, key, data );\n\
1749\n\
1750 } else {\n\
1751 data = undefined;\n\
1752 }\n\
1753 }\n\
1754\n\
1755 return data;\n\
1756}\n\
1757\n\
1758// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON\n\
1759// property to be considered empty objects; this property always exists in\n\
1760// order to make sure JSON.stringify does not expose internal metadata\n\
1761function isEmptyDataObject( obj ) {\n\
1762 for ( var name in obj ) {\n\
1763 if ( name !== \"toJSON\" ) {\n\
1764 return false;\n\
1765 }\n\
1766 }\n\
1767\n\
1768 return true;\n\
1769}\n\
1770\n\
1771\n\
1772\n\
1773\n\
1774function handleQueueMarkDefer( elem, type, src ) {\n\
1775 var deferDataKey = type + \"defer\",\n\
1776 queueDataKey = type + \"queue\",\n\
1777 markDataKey = type + \"mark\",\n\
1778 defer = jQuery.data( elem, deferDataKey, undefined, true );\n\
1779 if ( defer &&\n\
1780 ( src === \"queue\" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&\n\
1781 ( src === \"mark\" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {\n\
1782 // Give room for hard-coded callbacks to fire first\n\
1783 // and eventually mark/queue something else on the element\n\
1784 setTimeout( function() {\n\
1785 if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&\n\
1786 !jQuery.data( elem, markDataKey, undefined, true ) ) {\n\
1787 jQuery.removeData( elem, deferDataKey, true );\n\
1788 defer.resolve();\n\
1789 }\n\
1790 }, 0 );\n\
1791 }\n\
1792}\n\
1793\n\
1794jQuery.extend({\n\
1795\n\
1796 _mark: function( elem, type ) {\n\
1797 if ( elem ) {\n\
1798 type = (type || \"fx\") + \"mark\";\n\
1799 jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );\n\
1800 }\n\
1801 },\n\
1802\n\
1803 _unmark: function( force, elem, type ) {\n\
1804 if ( force !== true ) {\n\
1805 type = elem;\n\
1806 elem = force;\n\
1807 force = false;\n\
1808 }\n\
1809 if ( elem ) {\n\
1810 type = type || \"fx\";\n\
1811 var key = type + \"mark\",\n\
1812 count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );\n\
1813 if ( count ) {\n\
1814 jQuery.data( elem, key, count, true );\n\
1815 } else {\n\
1816 jQuery.removeData( elem, key, true );\n\
1817 handleQueueMarkDefer( elem, type, \"mark\" );\n\
1818 }\n\
1819 }\n\
1820 },\n\
1821\n\
1822 queue: function( elem, type, data ) {\n\
1823 if ( elem ) {\n\
1824 type = (type || \"fx\") + \"queue\";\n\
1825 var q = jQuery.data( elem, type, undefined, true );\n\
1826 // Speed up dequeue by getting out quickly if this is just a lookup\n\
1827 if ( data ) {\n\
1828 if ( !q || jQuery.isArray(data) ) {\n\
1829 q = jQuery.data( elem, type, jQuery.makeArray(data), true );\n\
1830 } else {\n\
1831 q.push( data );\n\
1832 }\n\
1833 }\n\
1834 return q || [];\n\
1835 }\n\
1836 },\n\
1837\n\
1838 dequeue: function( elem, type ) {\n\
1839 type = type || \"fx\";\n\
1840\n\
1841 var queue = jQuery.queue( elem, type ),\n\
1842 fn = queue.shift(),\n\
1843 defer;\n\
1844\n\
1845 // If the fx queue is dequeued, always remove the progress sentinel\n\
1846 if ( fn === \"inprogress\" ) {\n\
1847 fn = queue.shift();\n\
1848 }\n\
1849\n\
1850 if ( fn ) {\n\
1851 // Add a progress sentinel to prevent the fx queue from being\n\
1852 // automatically dequeued\n\
1853 if ( type === \"fx\" ) {\n\
1854 queue.unshift(\"inprogress\");\n\
1855 }\n\
1856\n\
1857 fn.call(elem, function() {\n\
1858 jQuery.dequeue(elem, type);\n\
1859 });\n\
1860 }\n\
1861\n\
1862 if ( !queue.length ) {\n\
1863 jQuery.removeData( elem, type + \"queue\", true );\n\
1864 handleQueueMarkDefer( elem, type, \"queue\" );\n\
1865 }\n\
1866 }\n\
1867});\n\
1868\n\
1869jQuery.fn.extend({\n\
1870 queue: function( type, data ) {\n\
1871 if ( typeof type !== \"string\" ) {\n\
1872 data = type;\n\
1873 type = \"fx\";\n\
1874 }\n\
1875\n\
1876 if ( data === undefined ) {\n\
1877 return jQuery.queue( this[0], type );\n\
1878 }\n\
1879 return this.each(function() {\n\
1880 var queue = jQuery.queue( this, type, data );\n\
1881\n\
1882 if ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\
1883 jQuery.dequeue( this, type );\n\
1884 }\n\
1885 });\n\
1886 },\n\
1887 dequeue: function( type ) {\n\
1888 return this.each(function() {\n\
1889 jQuery.dequeue( this, type );\n\
1890 });\n\
1891 },\n\
1892 // Based off of the plugin by Clint Helfers, with permission.\n\
1893 // http://blindsignals.com/index.php/2009/07/jquery-delay/\n\
1894 delay: function( time, type ) {\n\
1895 time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\
1896 type = type || \"fx\";\n\
1897\n\
1898 return this.queue( type, function() {\n\
1899 var elem = this;\n\
1900 setTimeout(function() {\n\
1901 jQuery.dequeue( elem, type );\n\
1902 }, time );\n\
1903 });\n\
1904 },\n\
1905 clearQueue: function( type ) {\n\
1906 return this.queue( type || \"fx\", [] );\n\
1907 },\n\
1908 // Get a promise resolved when queues of a certain type\n\
1909 // are emptied (fx is the type by default)\n\
1910 promise: function( type, object ) {\n\
1911 if ( typeof type !== \"string\" ) {\n\
1912 object = type;\n\
1913 type = undefined;\n\
1914 }\n\
1915 type = type || \"fx\";\n\
1916 var defer = jQuery.Deferred(),\n\
1917 elements = this,\n\
1918 i = elements.length,\n\
1919 count = 1,\n\
1920 deferDataKey = type + \"defer\",\n\
1921 queueDataKey = type + \"queue\",\n\
1922 markDataKey = type + \"mark\",\n\
1923 tmp;\n\
1924 function resolve() {\n\
1925 if ( !( --count ) ) {\n\
1926 defer.resolveWith( elements, [ elements ] );\n\
1927 }\n\
1928 }\n\
1929 while( i-- ) {\n\
1930 if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||\n\
1931 ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||\n\
1932 jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&\n\
1933 jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {\n\
1934 count++;\n\
1935 tmp.done( resolve );\n\
1936 }\n\
1937 }\n\
1938 resolve();\n\
1939 return defer.promise();\n\
1940 }\n\
1941});\n\
1942\n\
1943\n\
1944\n\
1945\n\
1946var rclass = /[\\n\\t\\r]/g,\n\
1947 rspace = /\\s+/,\n\
1948 rreturn = /\\r/g,\n\
1949 rtype = /^(?:button|input)$/i,\n\
1950 rfocusable = /^(?:button|input|object|select|textarea)$/i,\n\
1951 rclickable = /^a(?:rea)?$/i,\n\
1952 rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\
1953 nodeHook, boolHook;\n\
1954\n\
1955jQuery.fn.extend({\n\
1956 attr: function( name, value ) {\n\
1957 return jQuery.access( this, name, value, true, jQuery.attr );\n\
1958 },\n\
1959\n\
1960 removeAttr: function( name ) {\n\
1961 return this.each(function() {\n\
1962 jQuery.removeAttr( this, name );\n\
1963 });\n\
1964 },\n\
1965 \n\
1966 prop: function( name, value ) {\n\
1967 return jQuery.access( this, name, value, true, jQuery.prop );\n\
1968 },\n\
1969 \n\
1970 removeProp: function( name ) {\n\
1971 name = jQuery.propFix[ name ] || name;\n\
1972 return this.each(function() {\n\
1973 // try/catch handles cases where IE balks (such as removing a property on window)\n\
1974 try {\n\
1975 this[ name ] = undefined;\n\
1976 delete this[ name ];\n\
1977 } catch( e ) {}\n\
1978 });\n\
1979 },\n\
1980\n\
1981 addClass: function( value ) {\n\
1982 var classNames, i, l, elem,\n\
1983 setClass, c, cl;\n\
1984\n\
1985 if ( jQuery.isFunction( value ) ) {\n\
1986 return this.each(function( j ) {\n\
1987 jQuery( this ).addClass( value.call(this, j, this.className) );\n\
1988 });\n\
1989 }\n\
1990\n\
1991 if ( value && typeof value === \"string\" ) {\n\
1992 classNames = value.split( rspace );\n\
1993\n\
1994 for ( i = 0, l = this.length; i < l; i++ ) {\n\
1995 elem = this[ i ];\n\
1996\n\
1997 if ( elem.nodeType === 1 ) {\n\
1998 if ( !elem.className && classNames.length === 1 ) {\n\
1999 elem.className = value;\n\
2000\n\
2001 } else {\n\
2002 setClass = \" \" + elem.className + \" \";\n\
2003\n\
2004 for ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\
2005 if ( !~setClass.indexOf( \" \" + classNames[ c ] + \" \" ) ) {\n\
2006 setClass += classNames[ c ] + \" \";\n\
2007 }\n\
2008 }\n\
2009 elem.className = jQuery.trim( setClass );\n\
2010 }\n\
2011 }\n\
2012 }\n\
2013 }\n\
2014\n\
2015 return this;\n\
2016 },\n\
2017\n\
2018 removeClass: function( value ) {\n\
2019 var classNames, i, l, elem, className, c, cl;\n\
2020\n\
2021 if ( jQuery.isFunction( value ) ) {\n\
2022 return this.each(function( j ) {\n\
2023 jQuery( this ).removeClass( value.call(this, j, this.className) );\n\
2024 });\n\
2025 }\n\
2026\n\
2027 if ( (value && typeof value === \"string\") || value === undefined ) {\n\
2028 classNames = (value || \"\").split( rspace );\n\
2029\n\
2030 for ( i = 0, l = this.length; i < l; i++ ) {\n\
2031 elem = this[ i ];\n\
2032\n\
2033 if ( elem.nodeType === 1 && elem.className ) {\n\
2034 if ( value ) {\n\
2035 className = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\
2036 for ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\
2037 className = className.replace(\" \" + classNames[ c ] + \" \", \" \");\n\
2038 }\n\
2039 elem.className = jQuery.trim( className );\n\
2040\n\
2041 } else {\n\
2042 elem.className = \"\";\n\
2043 }\n\
2044 }\n\
2045 }\n\
2046 }\n\
2047\n\
2048 return this;\n\
2049 },\n\
2050\n\
2051 toggleClass: function( value, stateVal ) {\n\
2052 var type = typeof value,\n\
2053 isBool = typeof stateVal === \"boolean\";\n\
2054\n\
2055 if ( jQuery.isFunction( value ) ) {\n\
2056 return this.each(function( i ) {\n\
2057 jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\
2058 });\n\
2059 }\n\
2060\n\
2061 return this.each(function() {\n\
2062 if ( type === \"string\" ) {\n\
2063 // toggle individual class names\n\
2064 var className,\n\
2065 i = 0,\n\
2066 self = jQuery( this ),\n\
2067 state = stateVal,\n\
2068 classNames = value.split( rspace );\n\
2069\n\
2070 while ( (className = classNames[ i++ ]) ) {\n\
2071 // check each className given, space seperated list\n\
2072 state = isBool ? state : !self.hasClass( className );\n\
2073 self[ state ? \"addClass\" : \"removeClass\" ]( className );\n\
2074 }\n\
2075\n\
2076 } else if ( type === \"undefined\" || type === \"boolean\" ) {\n\
2077 if ( this.className ) {\n\
2078 // store className if set\n\
2079 jQuery._data( this, \"__className__\", this.className );\n\
2080 }\n\
2081\n\
2082 // toggle whole className\n\
2083 this.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\
2084 }\n\
2085 });\n\
2086 },\n\
2087\n\
2088 hasClass: function( selector ) {\n\
2089 var className = \" \" + selector + \" \";\n\
2090 for ( var i = 0, l = this.length; i < l; i++ ) {\n\
2091 if ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) > -1 ) {\n\
2092 return true;\n\
2093 }\n\
2094 }\n\
2095\n\
2096 return false;\n\
2097 },\n\
2098\n\
2099 val: function( value ) {\n\
2100 var hooks, ret,\n\
2101 elem = this[0];\n\
2102 \n\
2103 if ( !arguments.length ) {\n\
2104 if ( elem ) {\n\
2105 hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];\n\
2106\n\
2107 if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\
2108 return ret;\n\
2109 }\n\
2110\n\
2111 ret = elem.value;\n\
2112\n\
2113 return typeof ret === \"string\" ? \n\
2114 // handle most common string cases\n\
2115 ret.replace(rreturn, \"\") : \n\
2116 // handle cases where value is null/undef or number\n\
2117 ret == null ? \"\" : ret;\n\
2118 }\n\
2119\n\
2120 return undefined;\n\
2121 }\n\
2122\n\
2123 var isFunction = jQuery.isFunction( value );\n\
2124\n\
2125 return this.each(function( i ) {\n\
2126 var self = jQuery(this), val;\n\
2127\n\
2128 if ( this.nodeType !== 1 ) {\n\
2129 return;\n\
2130 }\n\
2131\n\
2132 if ( isFunction ) {\n\
2133 val = value.call( this, i, self.val() );\n\
2134 } else {\n\
2135 val = value;\n\
2136 }\n\
2137\n\
2138 // Treat null/undefined as \"\"; convert numbers to string\n\
2139 if ( val == null ) {\n\
2140 val = \"\";\n\
2141 } else if ( typeof val === \"number\" ) {\n\
2142 val += \"\";\n\
2143 } else if ( jQuery.isArray( val ) ) {\n\
2144 val = jQuery.map(val, function ( value ) {\n\
2145 return value == null ? \"\" : value + \"\";\n\
2146 });\n\
2147 }\n\
2148\n\
2149 hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];\n\
2150\n\
2151 // If set returns undefined, fall back to normal setting\n\
2152 if ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\
2153 this.value = val;\n\
2154 }\n\
2155 });\n\
2156 }\n\
2157});\n\
2158\n\
2159jQuery.extend({\n\
2160 valHooks: {\n\
2161 option: {\n\
2162 get: function( elem ) {\n\
2163 // attributes.value is undefined in Blackberry 4.7 but\n\
2164 // uses .value. See #6932\n\
2165 var val = elem.attributes.value;\n\
2166 return !val || val.specified ? elem.value : elem.text;\n\
2167 }\n\
2168 },\n\
2169 select: {\n\
2170 get: function( elem ) {\n\
2171 var value,\n\
2172 index = elem.selectedIndex,\n\
2173 values = [],\n\
2174 options = elem.options,\n\
2175 one = elem.type === \"select-one\";\n\
2176\n\
2177 // Nothing was selected\n\
2178 if ( index < 0 ) {\n\
2179 return null;\n\
2180 }\n\
2181\n\
2182 // Loop through all the selected options\n\
2183 for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {\n\
2184 var option = options[ i ];\n\
2185\n\
2186 // Don't return options that are disabled or in a disabled optgroup\n\
2187 if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null) &&\n\
2188 (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" )) ) {\n\
2189\n\
2190 // Get the specific value for the option\n\
2191 value = jQuery( option ).val();\n\
2192\n\
2193 // We don't need an array for one selects\n\
2194 if ( one ) {\n\
2195 return value;\n\
2196 }\n\
2197\n\
2198 // Multi-Selects return an array\n\
2199 values.push( value );\n\
2200 }\n\
2201 }\n\
2202\n\
2203 // Fixes Bug #2551 -- select.val() broken in IE after form.reset()\n\
2204 if ( one && !values.length && options.length ) {\n\
2205 return jQuery( options[ index ] ).val();\n\
2206 }\n\
2207\n\
2208 return values;\n\
2209 },\n\
2210\n\
2211 set: function( elem, value ) {\n\
2212 var values = jQuery.makeArray( value );\n\
2213\n\
2214 jQuery(elem).find(\"option\").each(function() {\n\
2215 this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\
2216 });\n\
2217\n\
2218 if ( !values.length ) {\n\
2219 elem.selectedIndex = -1;\n\
2220 }\n\
2221 return values;\n\
2222 }\n\
2223 }\n\
2224 },\n\
2225\n\
2226 attrFn: {\n\
2227 val: true,\n\
2228 css: true,\n\
2229 html: true,\n\
2230 text: true,\n\
2231 data: true,\n\
2232 width: true,\n\
2233 height: true,\n\
2234 offset: true\n\
2235 },\n\
2236 \n\
2237 attrFix: {\n\
2238 // Always normalize to ensure hook usage\n\
2239 tabindex: \"tabIndex\"\n\
2240 },\n\
2241 \n\
2242 attr: function( elem, name, value, pass ) {\n\
2243 var nType = elem.nodeType;\n\
2244 \n\
2245 // don't get/set attributes on text, comment and attribute nodes\n\
2246 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\
2247 return undefined;\n\
2248 }\n\
2249\n\
2250 if ( pass && name in jQuery.attrFn ) {\n\
2251 return jQuery( elem )[ name ]( value );\n\
2252 }\n\
2253\n\
2254 // Fallback to prop when attributes are not supported\n\
2255 if ( !(\"getAttribute\" in elem) ) {\n\
2256 return jQuery.prop( elem, name, value );\n\
2257 }\n\
2258\n\
2259 var ret, hooks,\n\
2260 notxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\
2261\n\
2262 // Normalize the name if needed\n\
2263 if ( notxml ) {\n\
2264 name = jQuery.attrFix[ name ] || name;\n\
2265\n\
2266 hooks = jQuery.attrHooks[ name ];\n\
2267\n\
2268 if ( !hooks ) {\n\
2269 // Use boolHook for boolean attributes\n\
2270 if ( rboolean.test( name ) ) {\n\
2271 hooks = boolHook;\n\
2272\n\
2273 // Use nodeHook if available( IE6/7 )\n\
2274 } else if ( nodeHook ) {\n\
2275 hooks = nodeHook;\n\
2276 }\n\
2277 }\n\
2278 }\n\
2279\n\
2280 if ( value !== undefined ) {\n\
2281\n\
2282 if ( value === null ) {\n\
2283 jQuery.removeAttr( elem, name );\n\
2284 return undefined;\n\
2285\n\
2286 } else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\
2287 return ret;\n\
2288\n\
2289 } else {\n\
2290 elem.setAttribute( name, \"\" + value );\n\
2291 return value;\n\
2292 }\n\
2293\n\
2294 } else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n\
2295 return ret;\n\
2296\n\
2297 } else {\n\
2298\n\
2299 ret = elem.getAttribute( name );\n\
2300\n\
2301 // Non-existent attributes return null, we normalize to undefined\n\
2302 return ret === null ?\n\
2303 undefined :\n\
2304 ret;\n\
2305 }\n\
2306 },\n\
2307\n\
2308 removeAttr: function( elem, name ) {\n\
2309 var propName;\n\
2310 if ( elem.nodeType === 1 ) {\n\
2311 name = jQuery.attrFix[ name ] || name;\n\
2312\n\
2313 jQuery.attr( elem, name, \"\" );\n\
2314 elem.removeAttribute( name );\n\
2315\n\
2316 // Set corresponding property to false for boolean attributes\n\
2317 if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {\n\
2318 elem[ propName ] = false;\n\
2319 }\n\
2320 }\n\
2321 },\n\
2322\n\
2323 attrHooks: {\n\
2324 type: {\n\
2325 set: function( elem, value ) {\n\
2326 // We can't allow the type property to be changed (since it causes problems in IE)\n\
2327 if ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n\
2328 jQuery.error( \"type property can't be changed\" );\n\
2329 } else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\
2330 // Setting the type on a radio button after the value resets the value in IE6-9\n\
2331 // Reset value to it's default in case type is set after value\n\
2332 // This is for element creation\n\
2333 var val = elem.value;\n\
2334 elem.setAttribute( \"type\", value );\n\
2335 if ( val ) {\n\
2336 elem.value = val;\n\
2337 }\n\
2338 return value;\n\
2339 }\n\
2340 }\n\
2341 },\n\
2342 // Use the value property for back compat\n\
2343 // Use the nodeHook for button elements in IE6/7 (#1954)\n\
2344 value: {\n\
2345 get: function( elem, name ) {\n\
2346 if ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\
2347 return nodeHook.get( elem, name );\n\
2348 }\n\
2349 return name in elem ?\n\
2350 elem.value :\n\
2351 null;\n\
2352 },\n\
2353 set: function( elem, value, name ) {\n\
2354 if ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\
2355 return nodeHook.set( elem, value, name );\n\
2356 }\n\
2357 // Does not return so that setAttribute is also used\n\
2358 elem.value = value;\n\
2359 }\n\
2360 }\n\
2361 },\n\
2362\n\
2363 propFix: {\n\
2364 tabindex: \"tabIndex\",\n\
2365 readonly: \"readOnly\",\n\
2366 \"for\": \"htmlFor\",\n\
2367 \"class\": \"className\",\n\
2368 maxlength: \"maxLength\",\n\
2369 cellspacing: \"cellSpacing\",\n\
2370 cellpadding: \"cellPadding\",\n\
2371 rowspan: \"rowSpan\",\n\
2372 colspan: \"colSpan\",\n\
2373 usemap: \"useMap\",\n\
2374 frameborder: \"frameBorder\",\n\
2375 contenteditable: \"contentEditable\"\n\
2376 },\n\
2377 \n\
2378 prop: function( elem, name, value ) {\n\
2379 var nType = elem.nodeType;\n\
2380\n\
2381 // don't get/set properties on text, comment and attribute nodes\n\
2382 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\
2383 return undefined;\n\
2384 }\n\
2385\n\
2386 var ret, hooks,\n\
2387 notxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\
2388\n\
2389 if ( notxml ) {\n\
2390 // Fix name and attach hooks\n\
2391 name = jQuery.propFix[ name ] || name;\n\
2392 hooks = jQuery.propHooks[ name ];\n\
2393 }\n\
2394\n\
2395 if ( value !== undefined ) {\n\
2396 if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\
2397 return ret;\n\
2398\n\
2399 } else {\n\
2400 return (elem[ name ] = value);\n\
2401 }\n\
2402\n\
2403 } else {\n\
2404 if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\
2405 return ret;\n\
2406\n\
2407 } else {\n\
2408 return elem[ name ];\n\
2409 }\n\
2410 }\n\
2411 },\n\
2412 \n\
2413 propHooks: {\n\
2414 tabIndex: {\n\
2415 get: function( elem ) {\n\
2416 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\
2417 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\
2418 var attributeNode = elem.getAttributeNode(\"tabindex\");\n\
2419\n\
2420 return attributeNode && attributeNode.specified ?\n\
2421 parseInt( attributeNode.value, 10 ) :\n\
2422 rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\
2423 0 :\n\
2424 undefined;\n\
2425 }\n\
2426 }\n\
2427 }\n\
2428});\n\
2429\n\
2430// Add the tabindex propHook to attrHooks for back-compat\n\
2431jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;\n\
2432\n\
2433// Hook for boolean attributes\n\
2434boolHook = {\n\
2435 get: function( elem, name ) {\n\
2436 // Align boolean attributes with corresponding properties\n\
2437 // Fall back to attribute presence where some booleans are not supported\n\
2438 var attrNode;\n\
2439 return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?\n\
2440 name.toLowerCase() :\n\
2441 undefined;\n\
2442 },\n\
2443 set: function( elem, value, name ) {\n\
2444 var propName;\n\
2445 if ( value === false ) {\n\
2446 // Remove boolean attributes when set to false\n\
2447 jQuery.removeAttr( elem, name );\n\
2448 } else {\n\
2449 // value is true since we know at this point it's type boolean and not false\n\
2450 // Set boolean attributes to the same name and set the DOM property\n\
2451 propName = jQuery.propFix[ name ] || name;\n\
2452 if ( propName in elem ) {\n\
2453 // Only set the IDL specifically if it already exists on the element\n\
2454 elem[ propName ] = true;\n\
2455 }\n\
2456\n\
2457 elem.setAttribute( name, name.toLowerCase() );\n\
2458 }\n\
2459 return name;\n\
2460 }\n\
2461};\n\
2462\n\
2463// IE6/7 do not support getting/setting some attributes with get/setAttribute\n\
2464if ( !jQuery.support.getSetAttribute ) {\n\
2465 \n\
2466 // Use this for any attribute in IE6/7\n\
2467 // This fixes almost every IE6/7 issue\n\
2468 nodeHook = jQuery.valHooks.button = {\n\
2469 get: function( elem, name ) {\n\
2470 var ret;\n\
2471 ret = elem.getAttributeNode( name );\n\
2472 // Return undefined if nodeValue is empty string\n\
2473 return ret && ret.nodeValue !== \"\" ?\n\
2474 ret.nodeValue :\n\
2475 undefined;\n\
2476 },\n\
2477 set: function( elem, value, name ) {\n\
2478 // Set the existing or create a new attribute node\n\
2479 var ret = elem.getAttributeNode( name );\n\
2480 if ( !ret ) {\n\
2481 ret = document.createAttribute( name );\n\
2482 elem.setAttributeNode( ret );\n\
2483 }\n\
2484 return (ret.nodeValue = value + \"\");\n\
2485 }\n\
2486 };\n\
2487\n\
2488 // Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\
2489 // This is for removals\n\
2490 jQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\
2491 jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\
2492 set: function( elem, value ) {\n\
2493 if ( value === \"\" ) {\n\
2494 elem.setAttribute( name, \"auto\" );\n\
2495 return value;\n\
2496 }\n\
2497 }\n\
2498 });\n\
2499 });\n\
2500}\n\
2501\n\
2502\n\
2503// Some attributes require a special call on IE\n\
2504if ( !jQuery.support.hrefNormalized ) {\n\
2505 jQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\
2506 jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\
2507 get: function( elem ) {\n\
2508 var ret = elem.getAttribute( name, 2 );\n\
2509 return ret === null ? undefined : ret;\n\
2510 }\n\
2511 });\n\
2512 });\n\
2513}\n\
2514\n\
2515if ( !jQuery.support.style ) {\n\
2516 jQuery.attrHooks.style = {\n\
2517 get: function( elem ) {\n\
2518 // Return undefined in the case of empty string\n\
2519 // Normalize to lowercase since IE uppercases css property names\n\
2520 return elem.style.cssText.toLowerCase() || undefined;\n\
2521 },\n\
2522 set: function( elem, value ) {\n\
2523 return (elem.style.cssText = \"\" + value);\n\
2524 }\n\
2525 };\n\
2526}\n\
2527\n\
2528// Safari mis-reports the default selected property of an option\n\
2529// Accessing the parent's selectedIndex property fixes it\n\
2530if ( !jQuery.support.optSelected ) {\n\
2531 jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\
2532 get: function( elem ) {\n\
2533 var parent = elem.parentNode;\n\
2534\n\
2535 if ( parent ) {\n\
2536 parent.selectedIndex;\n\
2537\n\
2538 // Make sure that it also works with optgroups, see #5701\n\
2539 if ( parent.parentNode ) {\n\
2540 parent.parentNode.selectedIndex;\n\
2541 }\n\
2542 }\n\
2543 return null;\n\
2544 }\n\
2545 });\n\
2546}\n\
2547\n\
2548// Radios and checkboxes getter/setter\n\
2549if ( !jQuery.support.checkOn ) {\n\
2550 jQuery.each([ \"radio\", \"checkbox\" ], function() {\n\
2551 jQuery.valHooks[ this ] = {\n\
2552 get: function( elem ) {\n\
2553 // Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\
2554 return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\
2555 }\n\
2556 };\n\
2557 });\n\
2558}\n\
2559jQuery.each([ \"radio\", \"checkbox\" ], function() {\n\
2560 jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\
2561 set: function( elem, value ) {\n\
2562 if ( jQuery.isArray( value ) ) {\n\
2563 return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);\n\
2564 }\n\
2565 }\n\
2566 });\n\
2567});\n\
2568\n\
2569\n\
2570\n\
2571\n\
2572var rnamespaces = /\\.(.*)$/,\n\
2573 rformElems = /^(?:textarea|input|select)$/i,\n\
2574 rperiod = /\\./g,\n\
2575 rspaces = / /g,\n\
2576 rescape = /[^\\w\\s.|`]/g,\n\
2577 fcleanup = function( nm ) {\n\
2578 return nm.replace(rescape, \"\\\\$&\");\n\
2579 };\n\
2580\n\
2581/*\n\
2582 * A number of helper functions used for managing events.\n\
2583 * Many of the ideas behind this code originated from\n\
2584 * Dean Edwards' addEvent library.\n\
2585 */\n\
2586jQuery.event = {\n\
2587\n\
2588 // Bind an event to an element\n\
2589 // Original by Dean Edwards\n\
2590 add: function( elem, types, handler, data ) {\n\
2591 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\
2592 return;\n\
2593 }\n\
2594\n\
2595 if ( handler === false ) {\n\
2596 handler = returnFalse;\n\
2597 } else if ( !handler ) {\n\
2598 // Fixes bug #7229. Fix recommended by jdalton\n\
2599 return;\n\
2600 }\n\
2601\n\
2602 var handleObjIn, handleObj;\n\
2603\n\
2604 if ( handler.handler ) {\n\
2605 handleObjIn = handler;\n\
2606 handler = handleObjIn.handler;\n\
2607 }\n\
2608\n\
2609 // Make sure that the function being executed has a unique ID\n\
2610 if ( !handler.guid ) {\n\
2611 handler.guid = jQuery.guid++;\n\
2612 }\n\
2613\n\
2614 // Init the element's event structure\n\
2615 var elemData = jQuery._data( elem );\n\
2616\n\
2617 // If no elemData is found then we must be trying to bind to one of the\n\
2618 // banned noData elements\n\
2619 if ( !elemData ) {\n\
2620 return;\n\
2621 }\n\
2622\n\
2623 var events = elemData.events,\n\
2624 eventHandle = elemData.handle;\n\
2625\n\
2626 if ( !events ) {\n\
2627 elemData.events = events = {};\n\
2628 }\n\
2629\n\
2630 if ( !eventHandle ) {\n\
2631 elemData.handle = eventHandle = function( e ) {\n\
2632 // Discard the second event of a jQuery.event.trigger() and\n\
2633 // when an event is called after a page has unloaded\n\
2634 return typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n\
2635 jQuery.event.handle.apply( eventHandle.elem, arguments ) :\n\
2636 undefined;\n\
2637 };\n\
2638 }\n\
2639\n\
2640 // Add elem as a property of the handle function\n\
2641 // This is to prevent a memory leak with non-native events in IE.\n\
2642 eventHandle.elem = elem;\n\
2643\n\
2644 // Handle multiple events separated by a space\n\
2645 // jQuery(...).bind(\"mouseover mouseout\", fn);\n\
2646 types = types.split(\" \");\n\
2647\n\
2648 var type, i = 0, namespaces;\n\
2649\n\
2650 while ( (type = types[ i++ ]) ) {\n\
2651 handleObj = handleObjIn ?\n\
2652 jQuery.extend({}, handleObjIn) :\n\
2653 { handler: handler, data: data };\n\
2654\n\
2655 // Namespaced event handlers\n\
2656 if ( type.indexOf(\".\") > -1 ) {\n\
2657 namespaces = type.split(\".\");\n\
2658 type = namespaces.shift();\n\
2659 handleObj.namespace = namespaces.slice(0).sort().join(\".\");\n\
2660\n\
2661 } else {\n\
2662 namespaces = [];\n\
2663 handleObj.namespace = \"\";\n\
2664 }\n\
2665\n\
2666 handleObj.type = type;\n\
2667 if ( !handleObj.guid ) {\n\
2668 handleObj.guid = handler.guid;\n\
2669 }\n\
2670\n\
2671 // Get the current list of functions bound to this event\n\
2672 var handlers = events[ type ],\n\
2673 special = jQuery.event.special[ type ] || {};\n\
2674\n\
2675 // Init the event handler queue\n\
2676 if ( !handlers ) {\n\
2677 handlers = events[ type ] = [];\n\
2678\n\
2679 // Check for a special event handler\n\
2680 // Only use addEventListener/attachEvent if the special\n\
2681 // events handler returns false\n\
2682 if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\
2683 // Bind the global event handler to the element\n\
2684 if ( elem.addEventListener ) {\n\
2685 elem.addEventListener( type, eventHandle, false );\n\
2686\n\
2687 } else if ( elem.attachEvent ) {\n\
2688 elem.attachEvent( \"on\" + type, eventHandle );\n\
2689 }\n\
2690 }\n\
2691 }\n\
2692\n\
2693 if ( special.add ) {\n\
2694 special.add.call( elem, handleObj );\n\
2695\n\
2696 if ( !handleObj.handler.guid ) {\n\
2697 handleObj.handler.guid = handler.guid;\n\
2698 }\n\
2699 }\n\
2700\n\
2701 // Add the function to the element's handler list\n\
2702 handlers.push( handleObj );\n\
2703\n\
2704 // Keep track of which events have been used, for event optimization\n\
2705 jQuery.event.global[ type ] = true;\n\
2706 }\n\
2707\n\
2708 // Nullify elem to prevent memory leaks in IE\n\
2709 elem = null;\n\
2710 },\n\
2711\n\
2712 global: {},\n\
2713\n\
2714 // Detach an event or set of events from an element\n\
2715 remove: function( elem, types, handler, pos ) {\n\
2716 // don't do events on text and comment nodes\n\
2717 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\
2718 return;\n\
2719 }\n\
2720\n\
2721 if ( handler === false ) {\n\
2722 handler = returnFalse;\n\
2723 }\n\
2724\n\
2725 var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,\n\
2726 elemData = jQuery.hasData( elem ) && jQuery._data( elem ),\n\
2727 events = elemData && elemData.events;\n\
2728\n\
2729 if ( !elemData || !events ) {\n\
2730 return;\n\
2731 }\n\
2732\n\
2733 // types is actually an event object here\n\
2734 if ( types && types.type ) {\n\
2735 handler = types.handler;\n\
2736 types = types.type;\n\
2737 }\n\
2738\n\
2739 // Unbind all events for the element\n\
2740 if ( !types || typeof types === \"string\" && types.charAt(0) === \".\" ) {\n\
2741 types = types || \"\";\n\
2742\n\
2743 for ( type in events ) {\n\
2744 jQuery.event.remove( elem, type + types );\n\
2745 }\n\
2746\n\
2747 return;\n\
2748 }\n\
2749\n\
2750 // Handle multiple events separated by a space\n\
2751 // jQuery(...).unbind(\"mouseover mouseout\", fn);\n\
2752 types = types.split(\" \");\n\
2753\n\
2754 while ( (type = types[ i++ ]) ) {\n\
2755 origType = type;\n\
2756 handleObj = null;\n\
2757 all = type.indexOf(\".\") < 0;\n\
2758 namespaces = [];\n\
2759\n\
2760 if ( !all ) {\n\
2761 // Namespaced event handlers\n\
2762 namespaces = type.split(\".\");\n\
2763 type = namespaces.shift();\n\
2764\n\
2765 namespace = new RegExp(\"(^|\\\\.)\" +\n\
2766 jQuery.map( namespaces.slice(0).sort(), fcleanup ).join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\");\n\
2767 }\n\
2768\n\
2769 eventType = events[ type ];\n\
2770\n\
2771 if ( !eventType ) {\n\
2772 continue;\n\
2773 }\n\
2774\n\
2775 if ( !handler ) {\n\
2776 for ( j = 0; j < eventType.length; j++ ) {\n\
2777 handleObj = eventType[ j ];\n\
2778\n\
2779 if ( all || namespace.test( handleObj.namespace ) ) {\n\
2780 jQuery.event.remove( elem, origType, handleObj.handler, j );\n\
2781 eventType.splice( j--, 1 );\n\
2782 }\n\
2783 }\n\
2784\n\
2785 continue;\n\
2786 }\n\
2787\n\
2788 special = jQuery.event.special[ type ] || {};\n\
2789\n\
2790 for ( j = pos || 0; j < eventType.length; j++ ) {\n\
2791 handleObj = eventType[ j ];\n\
2792\n\
2793 if ( handler.guid === handleObj.guid ) {\n\
2794 // remove the given handler for the given type\n\
2795 if ( all || namespace.test( handleObj.namespace ) ) {\n\
2796 if ( pos == null ) {\n\
2797 eventType.splice( j--, 1 );\n\
2798 }\n\
2799\n\
2800 if ( special.remove ) {\n\
2801 special.remove.call( elem, handleObj );\n\
2802 }\n\
2803 }\n\
2804\n\
2805 if ( pos != null ) {\n\
2806 break;\n\
2807 }\n\
2808 }\n\
2809 }\n\
2810\n\
2811 // remove generic event handler if no more handlers exist\n\
2812 if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {\n\
2813 if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {\n\
2814 jQuery.removeEvent( elem, type, elemData.handle );\n\
2815 }\n\
2816\n\
2817 ret = null;\n\
2818 delete events[ type ];\n\
2819 }\n\
2820 }\n\
2821\n\
2822 // Remove the expando if it's no longer used\n\
2823 if ( jQuery.isEmptyObject( events ) ) {\n\
2824 var handle = elemData.handle;\n\
2825 if ( handle ) {\n\
2826 handle.elem = null;\n\
2827 }\n\
2828\n\
2829 delete elemData.events;\n\
2830 delete elemData.handle;\n\
2831\n\
2832 if ( jQuery.isEmptyObject( elemData ) ) {\n\
2833 jQuery.removeData( elem, undefined, true );\n\
2834 }\n\
2835 }\n\
2836 },\n\
2837 \n\
2838 // Events that are safe to short-circuit if no handlers are attached.\n\
2839 // Native DOM events should not be added, they may have inline handlers.\n\
2840 customEvent: {\n\
2841 \"getData\": true,\n\
2842 \"setData\": true,\n\
2843 \"changeData\": true\n\
2844 },\n\
2845\n\
2846 trigger: function( event, data, elem, onlyHandlers ) {\n\
2847 // Event object or event type\n\
2848 var type = event.type || event,\n\
2849 namespaces = [],\n\
2850 exclusive;\n\
2851\n\
2852 if ( type.indexOf(\"!\") >= 0 ) {\n\
2853 // Exclusive events trigger only for the exact event (no namespaces)\n\
2854 type = type.slice(0, -1);\n\
2855 exclusive = true;\n\
2856 }\n\
2857\n\
2858 if ( type.indexOf(\".\") >= 0 ) {\n\
2859 // Namespaced trigger; create a regexp to match event type in handle()\n\
2860 namespaces = type.split(\".\");\n\
2861 type = namespaces.shift();\n\
2862 namespaces.sort();\n\
2863 }\n\
2864\n\
2865 if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n\
2866 // No jQuery handlers for this event type, and it can't have inline handlers\n\
2867 return;\n\
2868 }\n\
2869\n\
2870 // Caller can pass in an Event, Object, or just an event type string\n\
2871 event = typeof event === \"object\" ?\n\
2872 // jQuery.Event object\n\
2873 event[ jQuery.expando ] ? event :\n\
2874 // Object literal\n\
2875 new jQuery.Event( type, event ) :\n\
2876 // Just the event type (string)\n\
2877 new jQuery.Event( type );\n\
2878\n\
2879 event.type = type;\n\
2880 event.exclusive = exclusive;\n\
2881 event.namespace = namespaces.join(\".\");\n\
2882 event.namespace_re = new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\");\n\
2883 \n\
2884 // triggerHandler() and global events don't bubble or run the default action\n\
2885 if ( onlyHandlers || !elem ) {\n\
2886 event.preventDefault();\n\
2887 event.stopPropagation();\n\
2888 }\n\
2889\n\
2890 // Handle a global trigger\n\
2891 if ( !elem ) {\n\
2892 // TODO: Stop taunting the data cache; remove global events and always attach to document\n\
2893 jQuery.each( jQuery.cache, function() {\n\
2894 // internalKey variable is just used to make it easier to find\n\
2895 // and potentially change this stuff later; currently it just\n\
2896 // points to jQuery.expando\n\
2897 var internalKey = jQuery.expando,\n\
2898 internalCache = this[ internalKey ];\n\
2899 if ( internalCache && internalCache.events && internalCache.events[ type ] ) {\n\
2900 jQuery.event.trigger( event, data, internalCache.handle.elem );\n\
2901 }\n\
2902 });\n\
2903 return;\n\
2904 }\n\
2905\n\
2906 // Don't do events on text and comment nodes\n\
2907 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\
2908 return;\n\
2909 }\n\
2910\n\
2911 // Clean up the event in case it is being reused\n\
2912 event.result = undefined;\n\
2913 event.target = elem;\n\
2914\n\
2915 // Clone any incoming data and prepend the event, creating the handler arg list\n\
2916 data = data != null ? jQuery.makeArray( data ) : [];\n\
2917 data.unshift( event );\n\
2918\n\
2919 var cur = elem,\n\
2920 // IE doesn't like method names with a colon (#3533, #8272)\n\
2921 ontype = type.indexOf(\":\") < 0 ? \"on\" + type : \"\";\n\
2922\n\
2923 // Fire event on the current element, then bubble up the DOM tree\n\
2924 do {\n\
2925 var handle = jQuery._data( cur, \"handle\" );\n\
2926\n\
2927 event.currentTarget = cur;\n\
2928 if ( handle ) {\n\
2929 handle.apply( cur, data );\n\
2930 }\n\
2931\n\
2932 // Trigger an inline bound script\n\
2933 if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {\n\
2934 event.result = false;\n\
2935 event.preventDefault();\n\
2936 }\n\
2937\n\
2938 // Bubble up to document, then to window\n\
2939 cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;\n\
2940 } while ( cur && !event.isPropagationStopped() );\n\
2941\n\
2942 // If nobody prevented the default action, do it now\n\
2943 if ( !event.isDefaultPrevented() ) {\n\
2944 var old,\n\
2945 special = jQuery.event.special[ type ] || {};\n\
2946\n\
2947 if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&\n\
2948 !(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\
2949\n\
2950 // Call a native DOM method on the target with the same name name as the event.\n\
2951 // Can't use an .isFunction)() check here because IE6/7 fails that test.\n\
2952 // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.\n\
2953 try {\n\
2954 if ( ontype && elem[ type ] ) {\n\
2955 // Don't re-trigger an onFOO event when we call its FOO() method\n\
2956 old = elem[ ontype ];\n\
2957\n\
2958 if ( old ) {\n\
2959 elem[ ontype ] = null;\n\
2960 }\n\
2961\n\
2962 jQuery.event.triggered = type;\n\
2963 elem[ type ]();\n\
2964 }\n\
2965 } catch ( ieError ) {}\n\
2966\n\
2967 if ( old ) {\n\
2968 elem[ ontype ] = old;\n\
2969 }\n\
2970\n\
2971 jQuery.event.triggered = undefined;\n\
2972 }\n\
2973 }\n\
2974 \n\
2975 return event.result;\n\
2976 },\n\
2977\n\
2978 handle: function( event ) {\n\
2979 event = jQuery.event.fix( event || window.event );\n\
2980 // Snapshot the handlers list since a called handler may add/remove events.\n\
2981 var handlers = ((jQuery._data( this, \"events\" ) || {})[ event.type ] || []).slice(0),\n\
2982 run_all = !event.exclusive && !event.namespace,\n\
2983 args = Array.prototype.slice.call( arguments, 0 );\n\
2984\n\
2985 // Use the fix-ed Event rather than the (read-only) native event\n\
2986 args[0] = event;\n\
2987 event.currentTarget = this;\n\
2988\n\
2989 for ( var j = 0, l = handlers.length; j < l; j++ ) {\n\
2990 var handleObj = handlers[ j ];\n\
2991\n\
2992 // Triggered event must 1) be non-exclusive and have no namespace, or\n\
2993 // 2) have namespace(s) a subset or equal to those in the bound event.\n\
2994 if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {\n\
2995 // Pass in a reference to the handler function itself\n\
2996 // So that we can later remove it\n\
2997 event.handler = handleObj.handler;\n\
2998 event.data = handleObj.data;\n\
2999 event.handleObj = handleObj;\n\
3000\n\
3001 var ret = handleObj.handler.apply( this, args );\n\
3002\n\
3003 if ( ret !== undefined ) {\n\
3004 event.result = ret;\n\
3005 if ( ret === false ) {\n\
3006 event.preventDefault();\n\
3007 event.stopPropagation();\n\
3008 }\n\
3009 }\n\
3010\n\
3011 if ( event.isImmediatePropagationStopped() ) {\n\
3012 break;\n\
3013 }\n\
3014 }\n\
3015 }\n\
3016 return event.result;\n\
3017 },\n\
3018\n\
3019 props: \"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which\".split(\" \"),\n\
3020\n\
3021 fix: function( event ) {\n\
3022 if ( event[ jQuery.expando ] ) {\n\
3023 return event;\n\
3024 }\n\
3025\n\
3026 // store a copy of the original event object\n\
3027 // and \"clone\" to set read-only properties\n\
3028 var originalEvent = event;\n\
3029 event = jQuery.Event( originalEvent );\n\
3030\n\
3031 for ( var i = this.props.length, prop; i; ) {\n\
3032 prop = this.props[ --i ];\n\
3033 event[ prop ] = originalEvent[ prop ];\n\
3034 }\n\
3035\n\
3036 // Fix target property, if necessary\n\
3037 if ( !event.target ) {\n\
3038 // Fixes #1925 where srcElement might not be defined either\n\
3039 event.target = event.srcElement || document;\n\
3040 }\n\
3041\n\
3042 // check if target is a textnode (safari)\n\
3043 if ( event.target.nodeType === 3 ) {\n\
3044 event.target = event.target.parentNode;\n\
3045 }\n\
3046\n\
3047 // Add relatedTarget, if necessary\n\
3048 if ( !event.relatedTarget && event.fromElement ) {\n\
3049 event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;\n\
3050 }\n\
3051\n\
3052 // Calculate pageX/Y if missing and clientX/Y available\n\
3053 if ( event.pageX == null && event.clientX != null ) {\n\
3054 var eventDocument = event.target.ownerDocument || document,\n\
3055 doc = eventDocument.documentElement,\n\
3056 body = eventDocument.body;\n\
3057\n\
3058 event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n\
3059 event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n\
3060 }\n\
3061\n\
3062 // Add which for key events\n\
3063 if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {\n\
3064 event.which = event.charCode != null ? event.charCode : event.keyCode;\n\
3065 }\n\
3066\n\
3067 // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)\n\
3068 if ( !event.metaKey && event.ctrlKey ) {\n\
3069 event.metaKey = event.ctrlKey;\n\
3070 }\n\
3071\n\
3072 // Add which for click: 1 === left; 2 === middle; 3 === right\n\
3073 // Note: button is not normalized, so don't use it\n\
3074 if ( !event.which && event.button !== undefined ) {\n\
3075 event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));\n\
3076 }\n\
3077\n\
3078 return event;\n\
3079 },\n\
3080\n\
3081 // Deprecated, use jQuery.guid instead\n\
3082 guid: 1E8,\n\
3083\n\
3084 // Deprecated, use jQuery.proxy instead\n\
3085 proxy: jQuery.proxy,\n\
3086\n\
3087 special: {\n\
3088 ready: {\n\
3089 // Make sure the ready event is setup\n\
3090 setup: jQuery.bindReady,\n\
3091 teardown: jQuery.noop\n\
3092 },\n\
3093\n\
3094 live: {\n\
3095 add: function( handleObj ) {\n\
3096 jQuery.event.add( this,\n\
3097 liveConvert( handleObj.origType, handleObj.selector ),\n\
3098 jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );\n\
3099 },\n\
3100\n\
3101 remove: function( handleObj ) {\n\
3102 jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );\n\
3103 }\n\
3104 },\n\
3105\n\
3106 beforeunload: {\n\
3107 setup: function( data, namespaces, eventHandle ) {\n\
3108 // We only want to do this special case on windows\n\
3109 if ( jQuery.isWindow( this ) ) {\n\
3110 this.onbeforeunload = eventHandle;\n\
3111 }\n\
3112 },\n\
3113\n\
3114 teardown: function( namespaces, eventHandle ) {\n\
3115 if ( this.onbeforeunload === eventHandle ) {\n\
3116 this.onbeforeunload = null;\n\
3117 }\n\
3118 }\n\
3119 }\n\
3120 }\n\
3121};\n\
3122\n\
3123jQuery.removeEvent = document.removeEventListener ?\n\
3124 function( elem, type, handle ) {\n\
3125 if ( elem.removeEventListener ) {\n\
3126 elem.removeEventListener( type, handle, false );\n\
3127 }\n\
3128 } :\n\
3129 function( elem, type, handle ) {\n\
3130 if ( elem.detachEvent ) {\n\
3131 elem.detachEvent( \"on\" + type, handle );\n\
3132 }\n\
3133 };\n\
3134\n\
3135jQuery.Event = function( src, props ) {\n\
3136 // Allow instantiation without the 'new' keyword\n\
3137 if ( !this.preventDefault ) {\n\
3138 return new jQuery.Event( src, props );\n\
3139 }\n\
3140\n\
3141 // Event object\n\
3142 if ( src && src.type ) {\n\
3143 this.originalEvent = src;\n\
3144 this.type = src.type;\n\
3145\n\
3146 // Events bubbling up the document may have been marked as prevented\n\
3147 // by a handler lower down the tree; reflect the correct value.\n\
3148 this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||\n\
3149 src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;\n\
3150\n\
3151 // Event type\n\
3152 } else {\n\
3153 this.type = src;\n\
3154 }\n\
3155\n\
3156 // Put explicitly provided properties onto the event object\n\
3157 if ( props ) {\n\
3158 jQuery.extend( this, props );\n\
3159 }\n\
3160\n\
3161 // timeStamp is buggy for some events on Firefox(#3843)\n\
3162 // So we won't rely on the native value\n\
3163 this.timeStamp = jQuery.now();\n\
3164\n\
3165 // Mark it as fixed\n\
3166 this[ jQuery.expando ] = true;\n\
3167};\n\
3168\n\
3169function returnFalse() {\n\
3170 return false;\n\
3171}\n\
3172function returnTrue() {\n\
3173 return true;\n\
3174}\n\
3175\n\
3176// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\
3177// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\
3178jQuery.Event.prototype = {\n\
3179 preventDefault: function() {\n\
3180 this.isDefaultPrevented = returnTrue;\n\
3181\n\
3182 var e = this.originalEvent;\n\
3183 if ( !e ) {\n\
3184 return;\n\
3185 }\n\
3186\n\
3187 // if preventDefault exists run it on the original event\n\
3188 if ( e.preventDefault ) {\n\
3189 e.preventDefault();\n\
3190\n\
3191 // otherwise set the returnValue property of the original event to false (IE)\n\
3192 } else {\n\
3193 e.returnValue = false;\n\
3194 }\n\
3195 },\n\
3196 stopPropagation: function() {\n\
3197 this.isPropagationStopped = returnTrue;\n\
3198\n\
3199 var e = this.originalEvent;\n\
3200 if ( !e ) {\n\
3201 return;\n\
3202 }\n\
3203 // if stopPropagation exists run it on the original event\n\
3204 if ( e.stopPropagation ) {\n\
3205 e.stopPropagation();\n\
3206 }\n\
3207 // otherwise set the cancelBubble property of the original event to true (IE)\n\
3208 e.cancelBubble = true;\n\
3209 },\n\
3210 stopImmediatePropagation: function() {\n\
3211 this.isImmediatePropagationStopped = returnTrue;\n\
3212 this.stopPropagation();\n\
3213 },\n\
3214 isDefaultPrevented: returnFalse,\n\
3215 isPropagationStopped: returnFalse,\n\
3216 isImmediatePropagationStopped: returnFalse\n\
3217};\n\
3218\n\
3219// Checks if an event happened on an element within another element\n\
3220// Used in jQuery.event.special.mouseenter and mouseleave handlers\n\
3221var withinElement = function( event ) {\n\
3222\n\
3223 // Check if mouse(over|out) are still within the same parent element\n\
3224 var related = event.relatedTarget,\n\
3225 inside = false,\n\
3226 eventType = event.type;\n\
3227\n\
3228 event.type = event.data;\n\
3229\n\
3230 if ( related !== this ) {\n\
3231\n\
3232 if ( related ) {\n\
3233 inside = jQuery.contains( this, related );\n\
3234 }\n\
3235\n\
3236 if ( !inside ) {\n\
3237\n\
3238 jQuery.event.handle.apply( this, arguments );\n\
3239\n\
3240 event.type = eventType;\n\
3241 }\n\
3242 }\n\
3243},\n\
3244\n\
3245// In case of event delegation, we only need to rename the event.type,\n\
3246// liveHandler will take care of the rest.\n\
3247delegate = function( event ) {\n\
3248 event.type = event.data;\n\
3249 jQuery.event.handle.apply( this, arguments );\n\
3250};\n\
3251\n\
3252// Create mouseenter and mouseleave events\n\
3253jQuery.each({\n\
3254 mouseenter: \"mouseover\",\n\
3255 mouseleave: \"mouseout\"\n\
3256}, function( orig, fix ) {\n\
3257 jQuery.event.special[ orig ] = {\n\
3258 setup: function( data ) {\n\
3259 jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );\n\
3260 },\n\
3261 teardown: function( data ) {\n\
3262 jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );\n\
3263 }\n\
3264 };\n\
3265});\n\
3266\n\
3267// submit delegation\n\
3268if ( !jQuery.support.submitBubbles ) {\n\
3269\n\
3270 jQuery.event.special.submit = {\n\
3271 setup: function( data, namespaces ) {\n\
3272 if ( !jQuery.nodeName( this, \"form\" ) ) {\n\
3273 jQuery.event.add(this, \"click.specialSubmit\", function( e ) {\n\
3274 // Avoid triggering error on non-existent type attribute in IE VML (#7071)\n\
3275 var elem = e.target,\n\
3276 type = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.type : \"\";\n\
3277\n\
3278 if ( (type === \"submit\" || type === \"image\") && jQuery( elem ).closest(\"form\").length ) {\n\
3279 trigger( \"submit\", this, arguments );\n\
3280 }\n\
3281 });\n\
3282\n\
3283 jQuery.event.add(this, \"keypress.specialSubmit\", function( e ) {\n\
3284 var elem = e.target,\n\
3285 type = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.type : \"\";\n\
3286\n\
3287 if ( (type === \"text\" || type === \"password\") && jQuery( elem ).closest(\"form\").length && e.keyCode === 13 ) {\n\
3288 trigger( \"submit\", this, arguments );\n\
3289 }\n\
3290 });\n\
3291\n\
3292 } else {\n\
3293 return false;\n\
3294 }\n\
3295 },\n\
3296\n\
3297 teardown: function( namespaces ) {\n\
3298 jQuery.event.remove( this, \".specialSubmit\" );\n\
3299 }\n\
3300 };\n\
3301\n\
3302}\n\
3303\n\
3304// change delegation, happens here so we have bind.\n\
3305if ( !jQuery.support.changeBubbles ) {\n\
3306\n\
3307 var changeFilters,\n\
3308\n\
3309 getVal = function( elem ) {\n\
3310 var type = jQuery.nodeName( elem, \"input\" ) ? elem.type : \"\",\n\
3311 val = elem.value;\n\
3312\n\
3313 if ( type === \"radio\" || type === \"checkbox\" ) {\n\
3314 val = elem.checked;\n\
3315\n\
3316 } else if ( type === \"select-multiple\" ) {\n\
3317 val = elem.selectedIndex > -1 ?\n\
3318 jQuery.map( elem.options, function( elem ) {\n\
3319 return elem.selected;\n\
3320 }).join(\"-\") :\n\
3321 \"\";\n\
3322\n\
3323 } else if ( jQuery.nodeName( elem, \"select\" ) ) {\n\
3324 val = elem.selectedIndex;\n\
3325 }\n\
3326\n\
3327 return val;\n\
3328 },\n\
3329\n\
3330 testChange = function testChange( e ) {\n\
3331 var elem = e.target, data, val;\n\
3332\n\
3333 if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {\n\
3334 return;\n\
3335 }\n\
3336\n\
3337 data = jQuery._data( elem, \"_change_data\" );\n\
3338 val = getVal(elem);\n\
3339\n\
3340 // the current data will be also retrieved by beforeactivate\n\
3341 if ( e.type !== \"focusout\" || elem.type !== \"radio\" ) {\n\
3342 jQuery._data( elem, \"_change_data\", val );\n\
3343 }\n\
3344\n\
3345 if ( data === undefined || val === data ) {\n\
3346 return;\n\
3347 }\n\
3348\n\
3349 if ( data != null || val ) {\n\
3350 e.type = \"change\";\n\
3351 e.liveFired = undefined;\n\
3352 jQuery.event.trigger( e, arguments[1], elem );\n\
3353 }\n\
3354 };\n\
3355\n\
3356 jQuery.event.special.change = {\n\
3357 filters: {\n\
3358 focusout: testChange,\n\
3359\n\
3360 beforedeactivate: testChange,\n\
3361\n\
3362 click: function( e ) {\n\
3363 var elem = e.target, type = jQuery.nodeName( elem, \"input\" ) ? elem.type : \"\";\n\
3364\n\
3365 if ( type === \"radio\" || type === \"checkbox\" || jQuery.nodeName( elem, \"select\" ) ) {\n\
3366 testChange.call( this, e );\n\
3367 }\n\
3368 },\n\
3369\n\
3370 // Change has to be called before submit\n\
3371 // Keydown will be called before keypress, which is used in submit-event delegation\n\
3372 keydown: function( e ) {\n\
3373 var elem = e.target, type = jQuery.nodeName( elem, \"input\" ) ? elem.type : \"\";\n\
3374\n\
3375 if ( (e.keyCode === 13 && !jQuery.nodeName( elem, \"textarea\" ) ) ||\n\
3376 (e.keyCode === 32 && (type === \"checkbox\" || type === \"radio\")) ||\n\
3377 type === \"select-multiple\" ) {\n\
3378 testChange.call( this, e );\n\
3379 }\n\
3380 },\n\
3381\n\
3382 // Beforeactivate happens also before the previous element is blurred\n\
3383 // with this event you can't trigger a change event, but you can store\n\
3384 // information\n\
3385 beforeactivate: function( e ) {\n\
3386 var elem = e.target;\n\
3387 jQuery._data( elem, \"_change_data\", getVal(elem) );\n\
3388 }\n\
3389 },\n\
3390\n\
3391 setup: function( data, namespaces ) {\n\
3392 if ( this.type === \"file\" ) {\n\
3393 return false;\n\
3394 }\n\
3395\n\
3396 for ( var type in changeFilters ) {\n\
3397 jQuery.event.add( this, type + \".specialChange\", changeFilters[type] );\n\
3398 }\n\
3399\n\
3400 return rformElems.test( this.nodeName );\n\
3401 },\n\
3402\n\
3403 teardown: function( namespaces ) {\n\
3404 jQuery.event.remove( this, \".specialChange\" );\n\
3405\n\
3406 return rformElems.test( this.nodeName );\n\
3407 }\n\
3408 };\n\
3409\n\
3410 changeFilters = jQuery.event.special.change.filters;\n\
3411\n\
3412 // Handle when the input is .focus()'d\n\
3413 changeFilters.focus = changeFilters.beforeactivate;\n\
3414}\n\
3415\n\
3416function trigger( type, elem, args ) {\n\
3417 // Piggyback on a donor event to simulate a different one.\n\
3418 // Fake originalEvent to avoid donor's stopPropagation, but if the\n\
3419 // simulated event prevents default then we do the same on the donor.\n\
3420 // Don't pass args or remember liveFired; they apply to the donor event.\n\
3421 var event = jQuery.extend( {}, args[ 0 ] );\n\
3422 event.type = type;\n\
3423 event.originalEvent = {};\n\
3424 event.liveFired = undefined;\n\
3425 jQuery.event.handle.call( elem, event );\n\
3426 if ( event.isDefaultPrevented() ) {\n\
3427 args[ 0 ].preventDefault();\n\
3428 }\n\
3429}\n\
3430\n\
3431// Create \"bubbling\" focus and blur events\n\
3432if ( !jQuery.support.focusinBubbles ) {\n\
3433 jQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\
3434\n\
3435 // Attach a single capturing handler while someone wants focusin/focusout\n\
3436 var attaches = 0;\n\
3437\n\
3438 jQuery.event.special[ fix ] = {\n\
3439 setup: function() {\n\
3440 if ( attaches++ === 0 ) {\n\
3441 document.addEventListener( orig, handler, true );\n\
3442 }\n\
3443 },\n\
3444 teardown: function() {\n\
3445 if ( --attaches === 0 ) {\n\
3446 document.removeEventListener( orig, handler, true );\n\
3447 }\n\
3448 }\n\
3449 };\n\
3450\n\
3451 function handler( donor ) {\n\
3452 // Donor event is always a native one; fix it and switch its type.\n\
3453 // Let focusin/out handler cancel the donor focus/blur event.\n\
3454 var e = jQuery.event.fix( donor );\n\
3455 e.type = fix;\n\
3456 e.originalEvent = {};\n\
3457 jQuery.event.trigger( e, null, e.target );\n\
3458 if ( e.isDefaultPrevented() ) {\n\
3459 donor.preventDefault();\n\
3460 }\n\
3461 }\n\
3462 });\n\
3463}\n\
3464\n\
3465jQuery.each([\"bind\", \"one\"], function( i, name ) {\n\
3466 jQuery.fn[ name ] = function( type, data, fn ) {\n\
3467 var handler;\n\
3468\n\
3469 // Handle object literals\n\
3470 if ( typeof type === \"object\" ) {\n\
3471 for ( var key in type ) {\n\
3472 this[ name ](key, data, type[key], fn);\n\
3473 }\n\
3474 return this;\n\
3475 }\n\
3476\n\
3477 if ( arguments.length === 2 || data === false ) {\n\
3478 fn = data;\n\
3479 data = undefined;\n\
3480 }\n\
3481\n\
3482 if ( name === \"one\" ) {\n\
3483 handler = function( event ) {\n\
3484 jQuery( this ).unbind( event, handler );\n\
3485 return fn.apply( this, arguments );\n\
3486 };\n\
3487 handler.guid = fn.guid || jQuery.guid++;\n\
3488 } else {\n\
3489 handler = fn;\n\
3490 }\n\
3491\n\
3492 if ( type === \"unload\" && name !== \"one\" ) {\n\
3493 this.one( type, data, fn );\n\
3494\n\
3495 } else {\n\
3496 for ( var i = 0, l = this.length; i < l; i++ ) {\n\
3497 jQuery.event.add( this[i], type, handler, data );\n\
3498 }\n\
3499 }\n\
3500\n\
3501 return this;\n\
3502 };\n\
3503});\n\
3504\n\
3505jQuery.fn.extend({\n\
3506 unbind: function( type, fn ) {\n\
3507 // Handle object literals\n\
3508 if ( typeof type === \"object\" && !type.preventDefault ) {\n\
3509 for ( var key in type ) {\n\
3510 this.unbind(key, type[key]);\n\
3511 }\n\
3512\n\
3513 } else {\n\
3514 for ( var i = 0, l = this.length; i < l; i++ ) {\n\
3515 jQuery.event.remove( this[i], type, fn );\n\
3516 }\n\
3517 }\n\
3518\n\
3519 return this;\n\
3520 },\n\
3521\n\
3522 delegate: function( selector, types, data, fn ) {\n\
3523 return this.live( types, data, fn, selector );\n\
3524 },\n\
3525\n\
3526 undelegate: function( selector, types, fn ) {\n\
3527 if ( arguments.length === 0 ) {\n\
3528 return this.unbind( \"live\" );\n\
3529\n\
3530 } else {\n\
3531 return this.die( types, null, fn, selector );\n\
3532 }\n\
3533 },\n\
3534\n\
3535 trigger: function( type, data ) {\n\
3536 return this.each(function() {\n\
3537 jQuery.event.trigger( type, data, this );\n\
3538 });\n\
3539 },\n\
3540\n\
3541 triggerHandler: function( type, data ) {\n\
3542 if ( this[0] ) {\n\
3543 return jQuery.event.trigger( type, data, this[0], true );\n\
3544 }\n\
3545 },\n\
3546\n\
3547 toggle: function( fn ) {\n\
3548 // Save reference to arguments for access in closure\n\
3549 var args = arguments,\n\
3550 guid = fn.guid || jQuery.guid++,\n\
3551 i = 0,\n\
3552 toggler = function( event ) {\n\
3553 // Figure out which function to execute\n\
3554 var lastToggle = ( jQuery.data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\
3555 jQuery.data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\
3556\n\
3557 // Make sure that clicks stop\n\
3558 event.preventDefault();\n\
3559\n\
3560 // and execute the function\n\
3561 return args[ lastToggle ].apply( this, arguments ) || false;\n\
3562 };\n\
3563\n\
3564 // link all the functions, so any of them can unbind this click handler\n\
3565 toggler.guid = guid;\n\
3566 while ( i < args.length ) {\n\
3567 args[ i++ ].guid = guid;\n\
3568 }\n\
3569\n\
3570 return this.click( toggler );\n\
3571 },\n\
3572\n\
3573 hover: function( fnOver, fnOut ) {\n\
3574 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\
3575 }\n\
3576});\n\
3577\n\
3578var liveMap = {\n\
3579 focus: \"focusin\",\n\
3580 blur: \"focusout\",\n\
3581 mouseenter: \"mouseover\",\n\
3582 mouseleave: \"mouseout\"\n\
3583};\n\
3584\n\
3585jQuery.each([\"live\", \"die\"], function( i, name ) {\n\
3586 jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {\n\
3587 var type, i = 0, match, namespaces, preType,\n\
3588 selector = origSelector || this.selector,\n\
3589 context = origSelector ? this : jQuery( this.context );\n\
3590\n\
3591 if ( typeof types === \"object\" && !types.preventDefault ) {\n\
3592 for ( var key in types ) {\n\
3593 context[ name ]( key, data, types[key], selector );\n\
3594 }\n\
3595\n\
3596 return this;\n\
3597 }\n\
3598\n\
3599 if ( name === \"die\" && !types &&\n\
3600 origSelector && origSelector.charAt(0) === \".\" ) {\n\
3601\n\
3602 context.unbind( origSelector );\n\
3603\n\
3604 return this;\n\
3605 }\n\
3606\n\
3607 if ( data === false || jQuery.isFunction( data ) ) {\n\
3608 fn = data || returnFalse;\n\
3609 data = undefined;\n\
3610 }\n\
3611\n\
3612 types = (types || \"\").split(\" \");\n\
3613\n\
3614 while ( (type = types[ i++ ]) != null ) {\n\
3615 match = rnamespaces.exec( type );\n\
3616 namespaces = \"\";\n\
3617\n\
3618 if ( match ) {\n\
3619 namespaces = match[0];\n\
3620 type = type.replace( rnamespaces, \"\" );\n\
3621 }\n\
3622\n\
3623 if ( type === \"hover\" ) {\n\
3624 types.push( \"mouseenter\" + namespaces, \"mouseleave\" + namespaces );\n\
3625 continue;\n\
3626 }\n\
3627\n\
3628 preType = type;\n\
3629\n\
3630 if ( liveMap[ type ] ) {\n\
3631 types.push( liveMap[ type ] + namespaces );\n\
3632 type = type + namespaces;\n\
3633\n\
3634 } else {\n\
3635 type = (liveMap[ type ] || type) + namespaces;\n\
3636 }\n\
3637\n\
3638 if ( name === \"live\" ) {\n\
3639 // bind live handler\n\
3640 for ( var j = 0, l = context.length; j < l; j++ ) {\n\
3641 jQuery.event.add( context[j], \"live.\" + liveConvert( type, selector ),\n\
3642 { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );\n\
3643 }\n\
3644\n\
3645 } else {\n\
3646 // unbind live handler\n\
3647 context.unbind( \"live.\" + liveConvert( type, selector ), fn );\n\
3648 }\n\
3649 }\n\
3650\n\
3651 return this;\n\
3652 };\n\
3653});\n\
3654\n\
3655function liveHandler( event ) {\n\
3656 var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,\n\
3657 elems = [],\n\
3658 selectors = [],\n\
3659 events = jQuery._data( this, \"events\" );\n\
3660\n\
3661 // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)\n\
3662 if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === \"click\" ) {\n\
3663 return;\n\
3664 }\n\
3665\n\
3666 if ( event.namespace ) {\n\
3667 namespace = new RegExp(\"(^|\\\\.)\" + event.namespace.split(\".\").join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\");\n\
3668 }\n\
3669\n\
3670 event.liveFired = this;\n\
3671\n\
3672 var live = events.live.slice(0);\n\
3673\n\
3674 for ( j = 0; j < live.length; j++ ) {\n\
3675 handleObj = live[j];\n\
3676\n\
3677 if ( handleObj.origType.replace( rnamespaces, \"\" ) === event.type ) {\n\
3678 selectors.push( handleObj.selector );\n\
3679\n\
3680 } else {\n\
3681 live.splice( j--, 1 );\n\
3682 }\n\
3683 }\n\
3684\n\
3685 match = jQuery( event.target ).closest( selectors, event.currentTarget );\n\
3686\n\
3687 for ( i = 0, l = match.length; i < l; i++ ) {\n\
3688 close = match[i];\n\
3689\n\
3690 for ( j = 0; j < live.length; j++ ) {\n\
3691 handleObj = live[j];\n\
3692\n\
3693 if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {\n\
3694 elem = close.elem;\n\
3695 related = null;\n\
3696\n\
3697 // Those two events require additional checking\n\
3698 if ( handleObj.preType === \"mouseenter\" || handleObj.preType === \"mouseleave\" ) {\n\
3699 event.type = handleObj.preType;\n\
3700 related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];\n\
3701\n\
3702 // Make sure not to accidentally match a child element with the same selector\n\
3703 if ( related && jQuery.contains( elem, related ) ) {\n\
3704 related = elem;\n\
3705 }\n\
3706 }\n\
3707\n\
3708 if ( !related || related !== elem ) {\n\
3709 elems.push({ elem: elem, handleObj: handleObj, level: close.level });\n\
3710 }\n\
3711 }\n\
3712 }\n\
3713 }\n\
3714\n\
3715 for ( i = 0, l = elems.length; i < l; i++ ) {\n\
3716 match = elems[i];\n\
3717\n\
3718 if ( maxLevel && match.level > maxLevel ) {\n\
3719 break;\n\
3720 }\n\
3721\n\
3722 event.currentTarget = match.elem;\n\
3723 event.data = match.handleObj.data;\n\
3724 event.handleObj = match.handleObj;\n\
3725\n\
3726 ret = match.handleObj.origHandler.apply( match.elem, arguments );\n\
3727\n\
3728 if ( ret === false || event.isPropagationStopped() ) {\n\
3729 maxLevel = match.level;\n\
3730\n\
3731 if ( ret === false ) {\n\
3732 stop = false;\n\
3733 }\n\
3734 if ( event.isImmediatePropagationStopped() ) {\n\
3735 break;\n\
3736 }\n\
3737 }\n\
3738 }\n\
3739\n\
3740 return stop;\n\
3741}\n\
3742\n\
3743function liveConvert( type, selector ) {\n\
3744 return (type && type !== \"*\" ? type + \".\" : \"\") + selector.replace(rperiod, \"`\").replace(rspaces, \"&\");\n\
3745}\n\
3746\n\
3747jQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\
3748 \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\
3749 \"change select submit keydown keypress keyup error\").split(\" \"), function( i, name ) {\n\
3750\n\
3751 // Handle event binding\n\
3752 jQuery.fn[ name ] = function( data, fn ) {\n\
3753 if ( fn == null ) {\n\
3754 fn = data;\n\
3755 data = null;\n\
3756 }\n\
3757\n\
3758 return arguments.length > 0 ?\n\
3759 this.bind( name, data, fn ) :\n\
3760 this.trigger( name );\n\
3761 };\n\
3762\n\
3763 if ( jQuery.attrFn ) {\n\
3764 jQuery.attrFn[ name ] = true;\n\
3765 }\n\
3766});\n\
3767\n\
3768\n\
3769\n\
3770/*!\n\
3771 * Sizzle CSS Selector Engine\n\
3772 * Copyright 2011, The Dojo Foundation\n\
3773 * Released under the MIT, BSD, and GPL Licenses.\n\
3774 * More information: http://sizzlejs.com/\n\
3775 */\n\
3776(function(){\n\
3777\n\
3778var chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,\n\
3779 done = 0,\n\
3780 toString = Object.prototype.toString,\n\
3781 hasDuplicate = false,\n\
3782 baseHasDuplicate = true,\n\
3783 rBackslash = /\\\\/g,\n\
3784 rNonWord = /\\W/;\n\
3785\n\
3786// Here we check if the JavaScript engine is using some sort of\n\
3787// optimization where it does not always call our comparision\n\
3788// function. If that is the case, discard the hasDuplicate value.\n\
3789// Thus far that includes Google Chrome.\n\
3790[0, 0].sort(function() {\n\
3791 baseHasDuplicate = false;\n\
3792 return 0;\n\
3793});\n\
3794\n\
3795var Sizzle = function( selector, context, results, seed ) {\n\
3796 results = results || [];\n\
3797 context = context || document;\n\
3798\n\
3799 var origContext = context;\n\
3800\n\
3801 if ( context.nodeType !== 1 && context.nodeType !== 9 ) {\n\
3802 return [];\n\
3803 }\n\
3804 \n\
3805 if ( !selector || typeof selector !== \"string\" ) {\n\
3806 return results;\n\
3807 }\n\
3808\n\
3809 var m, set, checkSet, extra, ret, cur, pop, i,\n\
3810 prune = true,\n\
3811 contextXML = Sizzle.isXML( context ),\n\
3812 parts = [],\n\
3813 soFar = selector;\n\
3814 \n\
3815 // Reset the position of the chunker regexp (start from head)\n\
3816 do {\n\
3817 chunker.exec( \"\" );\n\
3818 m = chunker.exec( soFar );\n\
3819\n\
3820 if ( m ) {\n\
3821 soFar = m[3];\n\
3822 \n\
3823 parts.push( m[1] );\n\
3824 \n\
3825 if ( m[2] ) {\n\
3826 extra = m[3];\n\
3827 break;\n\
3828 }\n\
3829 }\n\
3830 } while ( m );\n\
3831\n\
3832 if ( parts.length > 1 && origPOS.exec( selector ) ) {\n\
3833\n\
3834 if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\n\
3835 set = posProcess( parts[0] + parts[1], context );\n\
3836\n\
3837 } else {\n\
3838 set = Expr.relative[ parts[0] ] ?\n\
3839 [ context ] :\n\
3840 Sizzle( parts.shift(), context );\n\
3841\n\
3842 while ( parts.length ) {\n\
3843 selector = parts.shift();\n\
3844\n\
3845 if ( Expr.relative[ selector ] ) {\n\
3846 selector += parts.shift();\n\
3847 }\n\
3848 \n\
3849 set = posProcess( selector, set );\n\
3850 }\n\
3851 }\n\
3852\n\
3853 } else {\n\
3854 // Take a shortcut and set the context if the root selector is an ID\n\
3855 // (but not if it'll be faster if the inner selector is an ID)\n\
3856 if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\n\
3857 Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\n\
3858\n\
3859 ret = Sizzle.find( parts.shift(), context, contextXML );\n\
3860 context = ret.expr ?\n\
3861 Sizzle.filter( ret.expr, ret.set )[0] :\n\
3862 ret.set[0];\n\
3863 }\n\
3864\n\
3865 if ( context ) {\n\
3866 ret = seed ?\n\
3867 { expr: parts.pop(), set: makeArray(seed) } :\n\
3868 Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === \"~\" || parts[0] === \"+\") && context.parentNode ? context.parentNode : context, contextXML );\n\
3869\n\
3870 set = ret.expr ?\n\
3871 Sizzle.filter( ret.expr, ret.set ) :\n\
3872 ret.set;\n\
3873\n\
3874 if ( parts.length > 0 ) {\n\
3875 checkSet = makeArray( set );\n\
3876\n\
3877 } else {\n\
3878 prune = false;\n\
3879 }\n\
3880\n\
3881 while ( parts.length ) {\n\
3882 cur = parts.pop();\n\
3883 pop = cur;\n\
3884\n\
3885 if ( !Expr.relative[ cur ] ) {\n\
3886 cur = \"\";\n\
3887 } else {\n\
3888 pop = parts.pop();\n\
3889 }\n\
3890\n\
3891 if ( pop == null ) {\n\
3892 pop = context;\n\
3893 }\n\
3894\n\
3895 Expr.relative[ cur ]( checkSet, pop, contextXML );\n\
3896 }\n\
3897\n\
3898 } else {\n\
3899 checkSet = parts = [];\n\
3900 }\n\
3901 }\n\
3902\n\
3903 if ( !checkSet ) {\n\
3904 checkSet = set;\n\
3905 }\n\
3906\n\
3907 if ( !checkSet ) {\n\
3908 Sizzle.error( cur || selector );\n\
3909 }\n\
3910\n\
3911 if ( toString.call(checkSet) === \"[object Array]\" ) {\n\
3912 if ( !prune ) {\n\
3913 results.push.apply( results, checkSet );\n\
3914\n\
3915 } else if ( context && context.nodeType === 1 ) {\n\
3916 for ( i = 0; checkSet[i] != null; i++ ) {\n\
3917 if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {\n\
3918 results.push( set[i] );\n\
3919 }\n\
3920 }\n\
3921\n\
3922 } else {\n\
3923 for ( i = 0; checkSet[i] != null; i++ ) {\n\
3924 if ( checkSet[i] && checkSet[i].nodeType === 1 ) {\n\
3925 results.push( set[i] );\n\
3926 }\n\
3927 }\n\
3928 }\n\
3929\n\
3930 } else {\n\
3931 makeArray( checkSet, results );\n\
3932 }\n\
3933\n\
3934 if ( extra ) {\n\
3935 Sizzle( extra, origContext, results, seed );\n\
3936 Sizzle.uniqueSort( results );\n\
3937 }\n\
3938\n\
3939 return results;\n\
3940};\n\
3941\n\
3942Sizzle.uniqueSort = function( results ) {\n\
3943 if ( sortOrder ) {\n\
3944 hasDuplicate = baseHasDuplicate;\n\
3945 results.sort( sortOrder );\n\
3946\n\
3947 if ( hasDuplicate ) {\n\
3948 for ( var i = 1; i < results.length; i++ ) {\n\
3949 if ( results[i] === results[ i - 1 ] ) {\n\
3950 results.splice( i--, 1 );\n\
3951 }\n\
3952 }\n\
3953 }\n\
3954 }\n\
3955\n\
3956 return results;\n\
3957};\n\
3958\n\
3959Sizzle.matches = function( expr, set ) {\n\
3960 return Sizzle( expr, null, null, set );\n\
3961};\n\
3962\n\
3963Sizzle.matchesSelector = function( node, expr ) {\n\
3964 return Sizzle( expr, null, null, [node] ).length > 0;\n\
3965};\n\
3966\n\
3967Sizzle.find = function( expr, context, isXML ) {\n\
3968 var set;\n\
3969\n\
3970 if ( !expr ) {\n\
3971 return [];\n\
3972 }\n\
3973\n\
3974 for ( var i = 0, l = Expr.order.length; i < l; i++ ) {\n\
3975 var match,\n\
3976 type = Expr.order[i];\n\
3977 \n\
3978 if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\n\
3979 var left = match[1];\n\
3980 match.splice( 1, 1 );\n\
3981\n\
3982 if ( left.substr( left.length - 1 ) !== \"\\\\\" ) {\n\
3983 match[1] = (match[1] || \"\").replace( rBackslash, \"\" );\n\
3984 set = Expr.find[ type ]( match, context, isXML );\n\
3985\n\
3986 if ( set != null ) {\n\
3987 expr = expr.replace( Expr.match[ type ], \"\" );\n\
3988 break;\n\
3989 }\n\
3990 }\n\
3991 }\n\
3992 }\n\
3993\n\
3994 if ( !set ) {\n\
3995 set = typeof context.getElementsByTagName !== \"undefined\" ?\n\
3996 context.getElementsByTagName( \"*\" ) :\n\
3997 [];\n\
3998 }\n\
3999\n\
4000 return { set: set, expr: expr };\n\
4001};\n\
4002\n\
4003Sizzle.filter = function( expr, set, inplace, not ) {\n\
4004 var match, anyFound,\n\
4005 old = expr,\n\
4006 result = [],\n\
4007 curLoop = set,\n\
4008 isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );\n\
4009\n\
4010 while ( expr && set.length ) {\n\
4011 for ( var type in Expr.filter ) {\n\
4012 if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {\n\
4013 var found, item,\n\
4014 filter = Expr.filter[ type ],\n\
4015 left = match[1];\n\
4016\n\
4017 anyFound = false;\n\
4018\n\
4019 match.splice(1,1);\n\
4020\n\
4021 if ( left.substr( left.length - 1 ) === \"\\\\\" ) {\n\
4022 continue;\n\
4023 }\n\
4024\n\
4025 if ( curLoop === result ) {\n\
4026 result = [];\n\
4027 }\n\
4028\n\
4029 if ( Expr.preFilter[ type ] ) {\n\
4030 match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\n\
4031\n\
4032 if ( !match ) {\n\
4033 anyFound = found = true;\n\
4034\n\
4035 } else if ( match === true ) {\n\
4036 continue;\n\
4037 }\n\
4038 }\n\
4039\n\
4040 if ( match ) {\n\
4041 for ( var i = 0; (item = curLoop[i]) != null; i++ ) {\n\
4042 if ( item ) {\n\
4043 found = filter( item, match, i, curLoop );\n\
4044 var pass = not ^ !!found;\n\
4045\n\
4046 if ( inplace && found != null ) {\n\
4047 if ( pass ) {\n\
4048 anyFound = true;\n\
4049\n\
4050 } else {\n\
4051 curLoop[i] = false;\n\
4052 }\n\
4053\n\
4054 } else if ( pass ) {\n\
4055 result.push( item );\n\
4056 anyFound = true;\n\
4057 }\n\
4058 }\n\
4059 }\n\
4060 }\n\
4061\n\
4062 if ( found !== undefined ) {\n\
4063 if ( !inplace ) {\n\
4064 curLoop = result;\n\
4065 }\n\
4066\n\
4067 expr = expr.replace( Expr.match[ type ], \"\" );\n\
4068\n\
4069 if ( !anyFound ) {\n\
4070 return [];\n\
4071 }\n\
4072\n\
4073 break;\n\
4074 }\n\
4075 }\n\
4076 }\n\
4077\n\
4078 // Improper expression\n\
4079 if ( expr === old ) {\n\
4080 if ( anyFound == null ) {\n\
4081 Sizzle.error( expr );\n\
4082\n\
4083 } else {\n\
4084 break;\n\
4085 }\n\
4086 }\n\
4087\n\
4088 old = expr;\n\
4089 }\n\
4090\n\
4091 return curLoop;\n\
4092};\n\
4093\n\
4094Sizzle.error = function( msg ) {\n\
4095 throw \"Syntax error, unrecognized expression: \" + msg;\n\
4096};\n\
4097\n\
4098var Expr = Sizzle.selectors = {\n\
4099 order: [ \"ID\", \"NAME\", \"TAG\" ],\n\
4100\n\
4101 match: {\n\
4102 ID: /#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\
4103 CLASS: /\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\
4104 NAME: /\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,\n\
4105 ATTR: /\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,\n\
4106 TAG: /^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,\n\
4107 CHILD: /:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,\n\
4108 POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,\n\
4109 PSEUDO: /:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/\n\
4110 },\n\
4111\n\
4112 leftMatch: {},\n\
4113\n\
4114 attrMap: {\n\
4115 \"class\": \"className\",\n\
4116 \"for\": \"htmlFor\"\n\
4117 },\n\
4118\n\
4119 attrHandle: {\n\
4120 href: function( elem ) {\n\
4121 return elem.getAttribute( \"href\" );\n\
4122 },\n\
4123 type: function( elem ) {\n\
4124 return elem.getAttribute( \"type\" );\n\
4125 }\n\
4126 },\n\
4127\n\
4128 relative: {\n\
4129 \"+\": function(checkSet, part){\n\
4130 var isPartStr = typeof part === \"string\",\n\
4131 isTag = isPartStr && !rNonWord.test( part ),\n\
4132 isPartStrNotTag = isPartStr && !isTag;\n\
4133\n\
4134 if ( isTag ) {\n\
4135 part = part.toLowerCase();\n\
4136 }\n\
4137\n\
4138 for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\n\
4139 if ( (elem = checkSet[i]) ) {\n\
4140 while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\n\
4141\n\
4142 checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?\n\
4143 elem || false :\n\
4144 elem === part;\n\
4145 }\n\
4146 }\n\
4147\n\
4148 if ( isPartStrNotTag ) {\n\
4149 Sizzle.filter( part, checkSet, true );\n\
4150 }\n\
4151 },\n\
4152\n\
4153 \">\": function( checkSet, part ) {\n\
4154 var elem,\n\
4155 isPartStr = typeof part === \"string\",\n\
4156 i = 0,\n\
4157 l = checkSet.length;\n\
4158\n\
4159 if ( isPartStr && !rNonWord.test( part ) ) {\n\
4160 part = part.toLowerCase();\n\
4161\n\
4162 for ( ; i < l; i++ ) {\n\
4163 elem = checkSet[i];\n\
4164\n\
4165 if ( elem ) {\n\
4166 var parent = elem.parentNode;\n\
4167 checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;\n\
4168 }\n\
4169 }\n\
4170\n\
4171 } else {\n\
4172 for ( ; i < l; i++ ) {\n\
4173 elem = checkSet[i];\n\
4174\n\
4175 if ( elem ) {\n\
4176 checkSet[i] = isPartStr ?\n\
4177 elem.parentNode :\n\
4178 elem.parentNode === part;\n\
4179 }\n\
4180 }\n\
4181\n\
4182 if ( isPartStr ) {\n\
4183 Sizzle.filter( part, checkSet, true );\n\
4184 }\n\
4185 }\n\
4186 },\n\
4187\n\
4188 \"\": function(checkSet, part, isXML){\n\
4189 var nodeCheck,\n\
4190 doneName = done++,\n\
4191 checkFn = dirCheck;\n\
4192\n\
4193 if ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\
4194 part = part.toLowerCase();\n\
4195 nodeCheck = part;\n\
4196 checkFn = dirNodeCheck;\n\
4197 }\n\
4198\n\
4199 checkFn( \"parentNode\", part, doneName, checkSet, nodeCheck, isXML );\n\
4200 },\n\
4201\n\
4202 \"~\": function( checkSet, part, isXML ) {\n\
4203 var nodeCheck,\n\
4204 doneName = done++,\n\
4205 checkFn = dirCheck;\n\
4206\n\
4207 if ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\
4208 part = part.toLowerCase();\n\
4209 nodeCheck = part;\n\
4210 checkFn = dirNodeCheck;\n\
4211 }\n\
4212\n\
4213 checkFn( \"previousSibling\", part, doneName, checkSet, nodeCheck, isXML );\n\
4214 }\n\
4215 },\n\
4216\n\
4217 find: {\n\
4218 ID: function( match, context, isXML ) {\n\
4219 if ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\
4220 var m = context.getElementById(match[1]);\n\
4221 // Check parentNode to catch when Blackberry 4.6 returns\n\
4222 // nodes that are no longer in the document #6963\n\
4223 return m && m.parentNode ? [m] : [];\n\
4224 }\n\
4225 },\n\
4226\n\
4227 NAME: function( match, context ) {\n\
4228 if ( typeof context.getElementsByName !== \"undefined\" ) {\n\
4229 var ret = [],\n\
4230 results = context.getElementsByName( match[1] );\n\
4231\n\
4232 for ( var i = 0, l = results.length; i < l; i++ ) {\n\
4233 if ( results[i].getAttribute(\"name\") === match[1] ) {\n\
4234 ret.push( results[i] );\n\
4235 }\n\
4236 }\n\
4237\n\
4238 return ret.length === 0 ? null : ret;\n\
4239 }\n\
4240 },\n\
4241\n\
4242 TAG: function( match, context ) {\n\
4243 if ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\
4244 return context.getElementsByTagName( match[1] );\n\
4245 }\n\
4246 }\n\
4247 },\n\
4248 preFilter: {\n\
4249 CLASS: function( match, curLoop, inplace, result, not, isXML ) {\n\
4250 match = \" \" + match[1].replace( rBackslash, \"\" ) + \" \";\n\
4251\n\
4252 if ( isXML ) {\n\
4253 return match;\n\
4254 }\n\
4255\n\
4256 for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\n\
4257 if ( elem ) {\n\
4258 if ( not ^ (elem.className && (\" \" + elem.className + \" \").replace(/[\\t\\n\\r]/g, \" \").indexOf(match) >= 0) ) {\n\
4259 if ( !inplace ) {\n\
4260 result.push( elem );\n\
4261 }\n\
4262\n\
4263 } else if ( inplace ) {\n\
4264 curLoop[i] = false;\n\
4265 }\n\
4266 }\n\
4267 }\n\
4268\n\
4269 return false;\n\
4270 },\n\
4271\n\
4272 ID: function( match ) {\n\
4273 return match[1].replace( rBackslash, \"\" );\n\
4274 },\n\
4275\n\
4276 TAG: function( match, curLoop ) {\n\
4277 return match[1].replace( rBackslash, \"\" ).toLowerCase();\n\
4278 },\n\
4279\n\
4280 CHILD: function( match ) {\n\
4281 if ( match[1] === \"nth\" ) {\n\
4282 if ( !match[2] ) {\n\
4283 Sizzle.error( match[0] );\n\
4284 }\n\
4285\n\
4286 match[2] = match[2].replace(/^\\+|\\s*/g, '');\n\
4287\n\
4288 // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'\n\
4289 var test = /(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(\n\
4290 match[2] === \"even\" && \"2n\" || match[2] === \"odd\" && \"2n+1\" ||\n\
4291 !/\\D/.test( match[2] ) && \"0n+\" + match[2] || match[2]);\n\
4292\n\
4293 // calculate the numbers (first)n+(last) including if they are negative\n\
4294 match[2] = (test[1] + (test[2] || 1)) - 0;\n\
4295 match[3] = test[3] - 0;\n\
4296 }\n\
4297 else if ( match[2] ) {\n\
4298 Sizzle.error( match[0] );\n\
4299 }\n\
4300\n\
4301 // TODO: Move to normal caching system\n\
4302 match[0] = done++;\n\
4303\n\
4304 return match;\n\
4305 },\n\
4306\n\
4307 ATTR: function( match, curLoop, inplace, result, not, isXML ) {\n\
4308 var name = match[1] = match[1].replace( rBackslash, \"\" );\n\
4309 \n\
4310 if ( !isXML && Expr.attrMap[name] ) {\n\
4311 match[1] = Expr.attrMap[name];\n\
4312 }\n\
4313\n\
4314 // Handle if an un-quoted value was used\n\
4315 match[4] = ( match[4] || match[5] || \"\" ).replace( rBackslash, \"\" );\n\
4316\n\
4317 if ( match[2] === \"~=\" ) {\n\
4318 match[4] = \" \" + match[4] + \" \";\n\
4319 }\n\
4320\n\
4321 return match;\n\
4322 },\n\
4323\n\
4324 PSEUDO: function( match, curLoop, inplace, result, not ) {\n\
4325 if ( match[1] === \"not\" ) {\n\
4326 // If we're dealing with a complex expression, or a simple one\n\
4327 if ( ( chunker.exec(match[3]) || \"\" ).length > 1 || /^\\w/.test(match[3]) ) {\n\
4328 match[3] = Sizzle(match[3], null, null, curLoop);\n\
4329\n\
4330 } else {\n\
4331 var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\n\
4332\n\
4333 if ( !inplace ) {\n\
4334 result.push.apply( result, ret );\n\
4335 }\n\
4336\n\
4337 return false;\n\
4338 }\n\
4339\n\
4340 } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\n\
4341 return true;\n\
4342 }\n\
4343 \n\
4344 return match;\n\
4345 },\n\
4346\n\
4347 POS: function( match ) {\n\
4348 match.unshift( true );\n\
4349\n\
4350 return match;\n\
4351 }\n\
4352 },\n\
4353 \n\
4354 filters: {\n\
4355 enabled: function( elem ) {\n\
4356 return elem.disabled === false && elem.type !== \"hidden\";\n\
4357 },\n\
4358\n\
4359 disabled: function( elem ) {\n\
4360 return elem.disabled === true;\n\
4361 },\n\
4362\n\
4363 checked: function( elem ) {\n\
4364 return elem.checked === true;\n\
4365 },\n\
4366 \n\
4367 selected: function( elem ) {\n\
4368 // Accessing this property makes selected-by-default\n\
4369 // options in Safari work properly\n\
4370 if ( elem.parentNode ) {\n\
4371 elem.parentNode.selectedIndex;\n\
4372 }\n\
4373 \n\
4374 return elem.selected === true;\n\
4375 },\n\
4376\n\
4377 parent: function( elem ) {\n\
4378 return !!elem.firstChild;\n\
4379 },\n\
4380\n\
4381 empty: function( elem ) {\n\
4382 return !elem.firstChild;\n\
4383 },\n\
4384\n\
4385 has: function( elem, i, match ) {\n\
4386 return !!Sizzle( match[3], elem ).length;\n\
4387 },\n\
4388\n\
4389 header: function( elem ) {\n\
4390 return (/h\\d/i).test( elem.nodeName );\n\
4391 },\n\
4392\n\
4393 text: function( elem ) {\n\
4394 var attr = elem.getAttribute( \"type\" ), type = elem.type;\n\
4395 // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) \n\
4396 // use getAttribute instead to test this case\n\
4397 return elem.nodeName.toLowerCase() === \"input\" && \"text\" === type && ( attr === type || attr === null );\n\
4398 },\n\
4399\n\
4400 radio: function( elem ) {\n\
4401 return elem.nodeName.toLowerCase() === \"input\" && \"radio\" === elem.type;\n\
4402 },\n\
4403\n\
4404 checkbox: function( elem ) {\n\
4405 return elem.nodeName.toLowerCase() === \"input\" && \"checkbox\" === elem.type;\n\
4406 },\n\
4407\n\
4408 file: function( elem ) {\n\
4409 return elem.nodeName.toLowerCase() === \"input\" && \"file\" === elem.type;\n\
4410 },\n\
4411\n\
4412 password: function( elem ) {\n\
4413 return elem.nodeName.toLowerCase() === \"input\" && \"password\" === elem.type;\n\
4414 },\n\
4415\n\
4416 submit: function( elem ) {\n\
4417 var name = elem.nodeName.toLowerCase();\n\
4418 return (name === \"input\" || name === \"button\") && \"submit\" === elem.type;\n\
4419 },\n\
4420\n\
4421 image: function( elem ) {\n\
4422 return elem.nodeName.toLowerCase() === \"input\" && \"image\" === elem.type;\n\
4423 },\n\
4424\n\
4425 reset: function( elem ) {\n\
4426 var name = elem.nodeName.toLowerCase();\n\
4427 return (name === \"input\" || name === \"button\") && \"reset\" === elem.type;\n\
4428 },\n\
4429\n\
4430 button: function( elem ) {\n\
4431 var name = elem.nodeName.toLowerCase();\n\
4432 return name === \"input\" && \"button\" === elem.type || name === \"button\";\n\
4433 },\n\
4434\n\
4435 input: function( elem ) {\n\
4436 return (/input|select|textarea|button/i).test( elem.nodeName );\n\
4437 },\n\
4438\n\
4439 focus: function( elem ) {\n\
4440 return elem === elem.ownerDocument.activeElement;\n\
4441 }\n\
4442 },\n\
4443 setFilters: {\n\
4444 first: function( elem, i ) {\n\
4445 return i === 0;\n\
4446 },\n\
4447\n\
4448 last: function( elem, i, match, array ) {\n\
4449 return i === array.length - 1;\n\
4450 },\n\
4451\n\
4452 even: function( elem, i ) {\n\
4453 return i % 2 === 0;\n\
4454 },\n\
4455\n\
4456 odd: function( elem, i ) {\n\
4457 return i % 2 === 1;\n\
4458 },\n\
4459\n\
4460 lt: function( elem, i, match ) {\n\
4461 return i < match[3] - 0;\n\
4462 },\n\
4463\n\
4464 gt: function( elem, i, match ) {\n\
4465 return i > match[3] - 0;\n\
4466 },\n\
4467\n\
4468 nth: function( elem, i, match ) {\n\
4469 return match[3] - 0 === i;\n\
4470 },\n\
4471\n\
4472 eq: function( elem, i, match ) {\n\
4473 return match[3] - 0 === i;\n\
4474 }\n\
4475 },\n\
4476 filter: {\n\
4477 PSEUDO: function( elem, match, i, array ) {\n\
4478 var name = match[1],\n\
4479 filter = Expr.filters[ name ];\n\
4480\n\
4481 if ( filter ) {\n\
4482 return filter( elem, i, match, array );\n\
4483\n\
4484 } else if ( name === \"contains\" ) {\n\
4485 return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || \"\").indexOf(match[3]) >= 0;\n\
4486\n\
4487 } else if ( name === \"not\" ) {\n\
4488 var not = match[3];\n\
4489\n\
4490 for ( var j = 0, l = not.length; j < l; j++ ) {\n\
4491 if ( not[j] === elem ) {\n\
4492 return false;\n\
4493 }\n\
4494 }\n\
4495\n\
4496 return true;\n\
4497\n\
4498 } else {\n\
4499 Sizzle.error( name );\n\
4500 }\n\
4501 },\n\
4502\n\
4503 CHILD: function( elem, match ) {\n\
4504 var type = match[1],\n\
4505 node = elem;\n\
4506\n\
4507 switch ( type ) {\n\
4508 case \"only\":\n\
4509 case \"first\":\n\
4510 while ( (node = node.previousSibling) ) {\n\
4511 if ( node.nodeType === 1 ) { \n\
4512 return false; \n\
4513 }\n\
4514 }\n\
4515\n\
4516 if ( type === \"first\" ) { \n\
4517 return true; \n\
4518 }\n\
4519\n\
4520 node = elem;\n\
4521\n\
4522 case \"last\":\n\
4523 while ( (node = node.nextSibling) ) {\n\
4524 if ( node.nodeType === 1 ) { \n\
4525 return false; \n\
4526 }\n\
4527 }\n\
4528\n\
4529 return true;\n\
4530\n\
4531 case \"nth\":\n\
4532 var first = match[2],\n\
4533 last = match[3];\n\
4534\n\
4535 if ( first === 1 && last === 0 ) {\n\
4536 return true;\n\
4537 }\n\
4538 \n\
4539 var doneName = match[0],\n\
4540 parent = elem.parentNode;\n\
4541 \n\
4542 if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {\n\
4543 var count = 0;\n\
4544 \n\
4545 for ( node = parent.firstChild; node; node = node.nextSibling ) {\n\
4546 if ( node.nodeType === 1 ) {\n\
4547 node.nodeIndex = ++count;\n\
4548 }\n\
4549 } \n\
4550\n\
4551 parent.sizcache = doneName;\n\
4552 }\n\
4553 \n\
4554 var diff = elem.nodeIndex - last;\n\
4555\n\
4556 if ( first === 0 ) {\n\
4557 return diff === 0;\n\
4558\n\
4559 } else {\n\
4560 return ( diff % first === 0 && diff / first >= 0 );\n\
4561 }\n\
4562 }\n\
4563 },\n\
4564\n\
4565 ID: function( elem, match ) {\n\
4566 return elem.nodeType === 1 && elem.getAttribute(\"id\") === match;\n\
4567 },\n\
4568\n\
4569 TAG: function( elem, match ) {\n\
4570 return (match === \"*\" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;\n\
4571 },\n\
4572 \n\
4573 CLASS: function( elem, match ) {\n\
4574 return (\" \" + (elem.className || elem.getAttribute(\"class\")) + \" \")\n\
4575 .indexOf( match ) > -1;\n\
4576 },\n\
4577\n\
4578 ATTR: function( elem, match ) {\n\
4579 var name = match[1],\n\
4580 result = Expr.attrHandle[ name ] ?\n\
4581 Expr.attrHandle[ name ]( elem ) :\n\
4582 elem[ name ] != null ?\n\
4583 elem[ name ] :\n\
4584 elem.getAttribute( name ),\n\
4585 value = result + \"\",\n\
4586 type = match[2],\n\
4587 check = match[4];\n\
4588\n\
4589 return result == null ?\n\
4590 type === \"!=\" :\n\
4591 type === \"=\" ?\n\
4592 value === check :\n\
4593 type === \"*=\" ?\n\
4594 value.indexOf(check) >= 0 :\n\
4595 type === \"~=\" ?\n\
4596 (\" \" + value + \" \").indexOf(check) >= 0 :\n\
4597 !check ?\n\
4598 value && result !== false :\n\
4599 type === \"!=\" ?\n\
4600 value !== check :\n\
4601 type === \"^=\" ?\n\
4602 value.indexOf(check) === 0 :\n\
4603 type === \"$=\" ?\n\
4604 value.substr(value.length - check.length) === check :\n\
4605 type === \"|=\" ?\n\
4606 value === check || value.substr(0, check.length + 1) === check + \"-\" :\n\
4607 false;\n\
4608 },\n\
4609\n\
4610 POS: function( elem, match, i, array ) {\n\
4611 var name = match[2],\n\
4612 filter = Expr.setFilters[ name ];\n\
4613\n\
4614 if ( filter ) {\n\
4615 return filter( elem, i, match, array );\n\
4616 }\n\
4617 }\n\
4618 }\n\
4619};\n\
4620\n\
4621var origPOS = Expr.match.POS,\n\
4622 fescape = function(all, num){\n\
4623 return \"\\\\\" + (num - 0 + 1);\n\
4624 };\n\
4625\n\
4626for ( var type in Expr.match ) {\n\
4627 Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\\[]*\\])(?![^\\(]*\\))/.source) );\n\
4628 Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\\r|\\n)*?)/.source + Expr.match[ type ].source.replace(/\\\\(\\d+)/g, fescape) );\n\
4629}\n\
4630\n\
4631var makeArray = function( array, results ) {\n\
4632 array = Array.prototype.slice.call( array, 0 );\n\
4633\n\
4634 if ( results ) {\n\
4635 results.push.apply( results, array );\n\
4636 return results;\n\
4637 }\n\
4638 \n\
4639 return array;\n\
4640};\n\
4641\n\
4642// Perform a simple check to determine if the browser is capable of\n\
4643// converting a NodeList to an array using builtin methods.\n\
4644// Also verifies that the returned array holds DOM nodes\n\
4645// (which is not the case in the Blackberry browser)\n\
4646try {\n\
4647 Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;\n\
4648\n\
4649// Provide a fallback method if it does not work\n\
4650} catch( e ) {\n\
4651 makeArray = function( array, results ) {\n\
4652 var i = 0,\n\
4653 ret = results || [];\n\
4654\n\
4655 if ( toString.call(array) === \"[object Array]\" ) {\n\
4656 Array.prototype.push.apply( ret, array );\n\
4657\n\
4658 } else {\n\
4659 if ( typeof array.length === \"number\" ) {\n\
4660 for ( var l = array.length; i < l; i++ ) {\n\
4661 ret.push( array[i] );\n\
4662 }\n\
4663\n\
4664 } else {\n\
4665 for ( ; array[i]; i++ ) {\n\
4666 ret.push( array[i] );\n\
4667 }\n\
4668 }\n\
4669 }\n\
4670\n\
4671 return ret;\n\
4672 };\n\
4673}\n\
4674\n\
4675var sortOrder, siblingCheck;\n\
4676\n\
4677if ( document.documentElement.compareDocumentPosition ) {\n\
4678 sortOrder = function( a, b ) {\n\
4679 if ( a === b ) {\n\
4680 hasDuplicate = true;\n\
4681 return 0;\n\
4682 }\n\
4683\n\
4684 if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\n\
4685 return a.compareDocumentPosition ? -1 : 1;\n\
4686 }\n\
4687\n\
4688 return a.compareDocumentPosition(b) & 4 ? -1 : 1;\n\
4689 };\n\
4690\n\
4691} else {\n\
4692 sortOrder = function( a, b ) {\n\
4693 // The nodes are identical, we can exit early\n\
4694 if ( a === b ) {\n\
4695 hasDuplicate = true;\n\
4696 return 0;\n\
4697\n\
4698 // Fallback to using sourceIndex (in IE) if it's available on both nodes\n\
4699 } else if ( a.sourceIndex && b.sourceIndex ) {\n\
4700 return a.sourceIndex - b.sourceIndex;\n\
4701 }\n\
4702\n\
4703 var al, bl,\n\
4704 ap = [],\n\
4705 bp = [],\n\
4706 aup = a.parentNode,\n\
4707 bup = b.parentNode,\n\
4708 cur = aup;\n\
4709\n\
4710 // If the nodes are siblings (or identical) we can do a quick check\n\
4711 if ( aup === bup ) {\n\
4712 return siblingCheck( a, b );\n\
4713\n\
4714 // If no parents were found then the nodes are disconnected\n\
4715 } else if ( !aup ) {\n\
4716 return -1;\n\
4717\n\
4718 } else if ( !bup ) {\n\
4719 return 1;\n\
4720 }\n\
4721\n\
4722 // Otherwise they're somewhere else in the tree so we need\n\
4723 // to build up a full list of the parentNodes for comparison\n\
4724 while ( cur ) {\n\
4725 ap.unshift( cur );\n\
4726 cur = cur.parentNode;\n\
4727 }\n\
4728\n\
4729 cur = bup;\n\
4730\n\
4731 while ( cur ) {\n\
4732 bp.unshift( cur );\n\
4733 cur = cur.parentNode;\n\
4734 }\n\
4735\n\
4736 al = ap.length;\n\
4737 bl = bp.length;\n\
4738\n\
4739 // Start walking down the tree looking for a discrepancy\n\
4740 for ( var i = 0; i < al && i < bl; i++ ) {\n\
4741 if ( ap[i] !== bp[i] ) {\n\
4742 return siblingCheck( ap[i], bp[i] );\n\
4743 }\n\
4744 }\n\
4745\n\
4746 // We ended someplace up the tree so do a sibling check\n\
4747 return i === al ?\n\
4748 siblingCheck( a, bp[i], -1 ) :\n\
4749 siblingCheck( ap[i], b, 1 );\n\
4750 };\n\
4751\n\
4752 siblingCheck = function( a, b, ret ) {\n\
4753 if ( a === b ) {\n\
4754 return ret;\n\
4755 }\n\
4756\n\
4757 var cur = a.nextSibling;\n\
4758\n\
4759 while ( cur ) {\n\
4760 if ( cur === b ) {\n\
4761 return -1;\n\
4762 }\n\
4763\n\
4764 cur = cur.nextSibling;\n\
4765 }\n\
4766\n\
4767 return 1;\n\
4768 };\n\
4769}\n\
4770\n\
4771// Utility function for retreiving the text value of an array of DOM nodes\n\
4772Sizzle.getText = function( elems ) {\n\
4773 var ret = \"\", elem;\n\
4774\n\
4775 for ( var i = 0; elems[i]; i++ ) {\n\
4776 elem = elems[i];\n\
4777\n\
4778 // Get the text from text nodes and CDATA nodes\n\
4779 if ( elem.nodeType === 3 || elem.nodeType === 4 ) {\n\
4780 ret += elem.nodeValue;\n\
4781\n\
4782 // Traverse everything else, except comment nodes\n\
4783 } else if ( elem.nodeType !== 8 ) {\n\
4784 ret += Sizzle.getText( elem.childNodes );\n\
4785 }\n\
4786 }\n\
4787\n\
4788 return ret;\n\
4789};\n\
4790\n\
4791// Check to see if the browser returns elements by name when\n\
4792// querying by getElementById (and provide a workaround)\n\
4793(function(){\n\
4794 // We're going to inject a fake input element with a specified name\n\
4795 var form = document.createElement(\"div\"),\n\
4796 id = \"script\" + (new Date()).getTime(),\n\
4797 root = document.documentElement;\n\
4798\n\
4799 form.innerHTML = \"<a name='\" + id + \"'/>\";\n\
4800\n\
4801 // Inject it into the root element, check its status, and remove it quickly\n\
4802 root.insertBefore( form, root.firstChild );\n\
4803\n\
4804 // The workaround has to do additional checks after a getElementById\n\
4805 // Which slows things down for other browsers (hence the branching)\n\
4806 if ( document.getElementById( id ) ) {\n\
4807 Expr.find.ID = function( match, context, isXML ) {\n\
4808 if ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\
4809 var m = context.getElementById(match[1]);\n\
4810\n\
4811 return m ?\n\
4812 m.id === match[1] || typeof m.getAttributeNode !== \"undefined\" && m.getAttributeNode(\"id\").nodeValue === match[1] ?\n\
4813 [m] :\n\
4814 undefined :\n\
4815 [];\n\
4816 }\n\
4817 };\n\
4818\n\
4819 Expr.filter.ID = function( elem, match ) {\n\
4820 var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\
4821\n\
4822 return elem.nodeType === 1 && node && node.nodeValue === match;\n\
4823 };\n\
4824 }\n\
4825\n\
4826 root.removeChild( form );\n\
4827\n\
4828 // release memory in IE\n\
4829 root = form = null;\n\
4830})();\n\
4831\n\
4832(function(){\n\
4833 // Check to see if the browser returns only elements\n\
4834 // when doing getElementsByTagName(\"*\")\n\
4835\n\
4836 // Create a fake element\n\
4837 var div = document.createElement(\"div\");\n\
4838 div.appendChild( document.createComment(\"\") );\n\
4839\n\
4840 // Make sure no comments are found\n\
4841 if ( div.getElementsByTagName(\"*\").length > 0 ) {\n\
4842 Expr.find.TAG = function( match, context ) {\n\
4843 var results = context.getElementsByTagName( match[1] );\n\
4844\n\
4845 // Filter out possible comments\n\
4846 if ( match[1] === \"*\" ) {\n\
4847 var tmp = [];\n\
4848\n\
4849 for ( var i = 0; results[i]; i++ ) {\n\
4850 if ( results[i].nodeType === 1 ) {\n\
4851 tmp.push( results[i] );\n\
4852 }\n\
4853 }\n\
4854\n\
4855 results = tmp;\n\
4856 }\n\
4857\n\
4858 return results;\n\
4859 };\n\
4860 }\n\
4861\n\
4862 // Check to see if an attribute returns normalized href attributes\n\
4863 div.innerHTML = \"<a href='#'></a>\";\n\
4864\n\
4865 if ( div.firstChild && typeof div.firstChild.getAttribute !== \"undefined\" &&\n\
4866 div.firstChild.getAttribute(\"href\") !== \"#\" ) {\n\
4867\n\
4868 Expr.attrHandle.href = function( elem ) {\n\
4869 return elem.getAttribute( \"href\", 2 );\n\
4870 };\n\
4871 }\n\
4872\n\
4873 // release memory in IE\n\
4874 div = null;\n\
4875})();\n\
4876\n\
4877if ( document.querySelectorAll ) {\n\
4878 (function(){\n\
4879 var oldSizzle = Sizzle,\n\
4880 div = document.createElement(\"div\"),\n\
4881 id = \"__sizzle__\";\n\
4882\n\
4883 div.innerHTML = \"<p class='TEST'></p>\";\n\
4884\n\
4885 // Safari can't handle uppercase or unicode characters when\n\
4886 // in quirks mode.\n\
4887 if ( div.querySelectorAll && div.querySelectorAll(\".TEST\").length === 0 ) {\n\
4888 return;\n\
4889 }\n\
4890 \n\
4891 Sizzle = function( query, context, extra, seed ) {\n\
4892 context = context || document;\n\
4893\n\
4894 // Only use querySelectorAll on non-XML documents\n\
4895 // (ID selectors don't work in non-HTML documents)\n\
4896 if ( !seed && !Sizzle.isXML(context) ) {\n\
4897 // See if we find a selector to speed up\n\
4898 var match = /^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec( query );\n\
4899 \n\
4900 if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {\n\
4901 // Speed-up: Sizzle(\"TAG\")\n\
4902 if ( match[1] ) {\n\
4903 return makeArray( context.getElementsByTagName( query ), extra );\n\
4904 \n\
4905 // Speed-up: Sizzle(\".CLASS\")\n\
4906 } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {\n\
4907 return makeArray( context.getElementsByClassName( match[2] ), extra );\n\
4908 }\n\
4909 }\n\
4910 \n\
4911 if ( context.nodeType === 9 ) {\n\
4912 // Speed-up: Sizzle(\"body\")\n\
4913 // The body element only exists once, optimize finding it\n\
4914 if ( query === \"body\" && context.body ) {\n\
4915 return makeArray( [ context.body ], extra );\n\
4916 \n\
4917 // Speed-up: Sizzle(\"#ID\")\n\
4918 } else if ( match && match[3] ) {\n\
4919 var elem = context.getElementById( match[3] );\n\
4920\n\
4921 // Check parentNode to catch when Blackberry 4.6 returns\n\
4922 // nodes that are no longer in the document #6963\n\
4923 if ( elem && elem.parentNode ) {\n\
4924 // Handle the case where IE and Opera return items\n\
4925 // by name instead of ID\n\
4926 if ( elem.id === match[3] ) {\n\
4927 return makeArray( [ elem ], extra );\n\
4928 }\n\
4929 \n\
4930 } else {\n\
4931 return makeArray( [], extra );\n\
4932 }\n\
4933 }\n\
4934 \n\
4935 try {\n\
4936 return makeArray( context.querySelectorAll(query), extra );\n\
4937 } catch(qsaError) {}\n\
4938\n\
4939 // qSA works strangely on Element-rooted queries\n\
4940 // We can work around this by specifying an extra ID on the root\n\
4941 // and working up from there (Thanks to Andrew Dupont for the technique)\n\
4942 // IE 8 doesn't work on object elements\n\
4943 } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\
4944 var oldContext = context,\n\
4945 old = context.getAttribute( \"id\" ),\n\
4946 nid = old || id,\n\
4947 hasParent = context.parentNode,\n\
4948 relativeHierarchySelector = /^\\s*[+~]/.test( query );\n\
4949\n\
4950 if ( !old ) {\n\
4951 context.setAttribute( \"id\", nid );\n\
4952 } else {\n\
4953 nid = nid.replace( /'/g, \"\\\\$&\" );\n\
4954 }\n\
4955 if ( relativeHierarchySelector && hasParent ) {\n\
4956 context = context.parentNode;\n\
4957 }\n\
4958\n\
4959 try {\n\
4960 if ( !relativeHierarchySelector || hasParent ) {\n\
4961 return makeArray( context.querySelectorAll( \"[id='\" + nid + \"'] \" + query ), extra );\n\
4962 }\n\
4963\n\
4964 } catch(pseudoError) {\n\
4965 } finally {\n\
4966 if ( !old ) {\n\
4967 oldContext.removeAttribute( \"id\" );\n\
4968 }\n\
4969 }\n\
4970 }\n\
4971 }\n\
4972 \n\
4973 return oldSizzle(query, context, extra, seed);\n\
4974 };\n\
4975\n\
4976 for ( var prop in oldSizzle ) {\n\
4977 Sizzle[ prop ] = oldSizzle[ prop ];\n\
4978 }\n\
4979\n\
4980 // release memory in IE\n\
4981 div = null;\n\
4982 })();\n\
4983}\n\
4984\n\
4985(function(){\n\
4986 var html = document.documentElement,\n\
4987 matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;\n\
4988\n\
4989 if ( matches ) {\n\
4990 // Check to see if it's possible to do matchesSelector\n\
4991 // on a disconnected node (IE 9 fails this)\n\
4992 var disconnectedMatch = !matches.call( document.createElement( \"div\" ), \"div\" ),\n\
4993 pseudoWorks = false;\n\
4994\n\
4995 try {\n\
4996 // This should fail with an exception\n\
4997 // Gecko does not error, returns false instead\n\
4998 matches.call( document.documentElement, \"[test!='']:sizzle\" );\n\
4999 \n\
5000 } catch( pseudoError ) {\n\
5001 pseudoWorks = true;\n\
5002 }\n\
5003\n\
5004 Sizzle.matchesSelector = function( node, expr ) {\n\
5005 // Make sure that attribute selectors are quoted\n\
5006 expr = expr.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g, \"='$1']\");\n\
5007\n\
5008 if ( !Sizzle.isXML( node ) ) {\n\
5009 try { \n\
5010 if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {\n\
5011 var ret = matches.call( node, expr );\n\
5012\n\
5013 // IE 9's matchesSelector returns false on disconnected nodes\n\
5014 if ( ret || !disconnectedMatch ||\n\
5015 // As well, disconnected nodes are said to be in a document\n\
5016 // fragment in IE 9, so check for that\n\
5017 node.document && node.document.nodeType !== 11 ) {\n\
5018 return ret;\n\
5019 }\n\
5020 }\n\
5021 } catch(e) {}\n\
5022 }\n\
5023\n\
5024 return Sizzle(expr, null, null, [node]).length > 0;\n\
5025 };\n\
5026 }\n\
5027})();\n\
5028\n\
5029(function(){\n\
5030 var div = document.createElement(\"div\");\n\
5031\n\
5032 div.innerHTML = \"<div class='test e'></div><div class='test'></div>\";\n\
5033\n\
5034 // Opera can't find a second classname (in 9.6)\n\
5035 // Also, make sure that getElementsByClassName actually exists\n\
5036 if ( !div.getElementsByClassName || div.getElementsByClassName(\"e\").length === 0 ) {\n\
5037 return;\n\
5038 }\n\
5039\n\
5040 // Safari caches class attributes, doesn't catch changes (in 3.2)\n\
5041 div.lastChild.className = \"e\";\n\
5042\n\
5043 if ( div.getElementsByClassName(\"e\").length === 1 ) {\n\
5044 return;\n\
5045 }\n\
5046 \n\
5047 Expr.order.splice(1, 0, \"CLASS\");\n\
5048 Expr.find.CLASS = function( match, context, isXML ) {\n\
5049 if ( typeof context.getElementsByClassName !== \"undefined\" && !isXML ) {\n\
5050 return context.getElementsByClassName(match[1]);\n\
5051 }\n\
5052 };\n\
5053\n\
5054 // release memory in IE\n\
5055 div = null;\n\
5056})();\n\
5057\n\
5058function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\
5059 for ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\
5060 var elem = checkSet[i];\n\
5061\n\
5062 if ( elem ) {\n\
5063 var match = false;\n\
5064\n\
5065 elem = elem[dir];\n\
5066\n\
5067 while ( elem ) {\n\
5068 if ( elem.sizcache === doneName ) {\n\
5069 match = checkSet[elem.sizset];\n\
5070 break;\n\
5071 }\n\
5072\n\
5073 if ( elem.nodeType === 1 && !isXML ){\n\
5074 elem.sizcache = doneName;\n\
5075 elem.sizset = i;\n\
5076 }\n\
5077\n\
5078 if ( elem.nodeName.toLowerCase() === cur ) {\n\
5079 match = elem;\n\
5080 break;\n\
5081 }\n\
5082\n\
5083 elem = elem[dir];\n\
5084 }\n\
5085\n\
5086 checkSet[i] = match;\n\
5087 }\n\
5088 }\n\
5089}\n\
5090\n\
5091function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\
5092 for ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\
5093 var elem = checkSet[i];\n\
5094\n\
5095 if ( elem ) {\n\
5096 var match = false;\n\
5097 \n\
5098 elem = elem[dir];\n\
5099\n\
5100 while ( elem ) {\n\
5101 if ( elem.sizcache === doneName ) {\n\
5102 match = checkSet[elem.sizset];\n\
5103 break;\n\
5104 }\n\
5105\n\
5106 if ( elem.nodeType === 1 ) {\n\
5107 if ( !isXML ) {\n\
5108 elem.sizcache = doneName;\n\
5109 elem.sizset = i;\n\
5110 }\n\
5111\n\
5112 if ( typeof cur !== \"string\" ) {\n\
5113 if ( elem === cur ) {\n\
5114 match = true;\n\
5115 break;\n\
5116 }\n\
5117\n\
5118 } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\n\
5119 match = elem;\n\
5120 break;\n\
5121 }\n\
5122 }\n\
5123\n\
5124 elem = elem[dir];\n\
5125 }\n\
5126\n\
5127 checkSet[i] = match;\n\
5128 }\n\
5129 }\n\
5130}\n\
5131\n\
5132if ( document.documentElement.contains ) {\n\
5133 Sizzle.contains = function( a, b ) {\n\
5134 return a !== b && (a.contains ? a.contains(b) : true);\n\
5135 };\n\
5136\n\
5137} else if ( document.documentElement.compareDocumentPosition ) {\n\
5138 Sizzle.contains = function( a, b ) {\n\
5139 return !!(a.compareDocumentPosition(b) & 16);\n\
5140 };\n\
5141\n\
5142} else {\n\
5143 Sizzle.contains = function() {\n\
5144 return false;\n\
5145 };\n\
5146}\n\
5147\n\
5148Sizzle.isXML = function( elem ) {\n\
5149 // documentElement is verified for cases where it doesn't yet exist\n\
5150 // (such as loading iframes in IE - #4833) \n\
5151 var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;\n\
5152\n\
5153 return documentElement ? documentElement.nodeName !== \"HTML\" : false;\n\
5154};\n\
5155\n\
5156var posProcess = function( selector, context ) {\n\
5157 var match,\n\
5158 tmpSet = [],\n\
5159 later = \"\",\n\
5160 root = context.nodeType ? [context] : context;\n\
5161\n\
5162 // Position selectors must be done after the filter\n\
5163 // And so must :not(positional) so we move all PSEUDOs to the end\n\
5164 while ( (match = Expr.match.PSEUDO.exec( selector )) ) {\n\
5165 later += match[0];\n\
5166 selector = selector.replace( Expr.match.PSEUDO, \"\" );\n\
5167 }\n\
5168\n\
5169 selector = Expr.relative[selector] ? selector + \"*\" : selector;\n\
5170\n\
5171 for ( var i = 0, l = root.length; i < l; i++ ) {\n\
5172 Sizzle( selector, root[i], tmpSet );\n\
5173 }\n\
5174\n\
5175 return Sizzle.filter( later, tmpSet );\n\
5176};\n\
5177\n\
5178// EXPOSE\n\
5179jQuery.find = Sizzle;\n\
5180jQuery.expr = Sizzle.selectors;\n\
5181jQuery.expr[\":\"] = jQuery.expr.filters;\n\
5182jQuery.unique = Sizzle.uniqueSort;\n\
5183jQuery.text = Sizzle.getText;\n\
5184jQuery.isXMLDoc = Sizzle.isXML;\n\
5185jQuery.contains = Sizzle.contains;\n\
5186\n\
5187\n\
5188})();\n\
5189\n\
5190\n\
5191var runtil = /Until$/,\n\
5192 rparentsprev = /^(?:parents|prevUntil|prevAll)/,\n\
5193 // Note: This RegExp should be improved, or likely pulled from Sizzle\n\
5194 rmultiselector = /,/,\n\
5195 isSimple = /^.[^:#\\[\\.,]*$/,\n\
5196 slice = Array.prototype.slice,\n\
5197 POS = jQuery.expr.match.POS,\n\
5198 // methods guaranteed to produce a unique set when starting from a unique set\n\
5199 guaranteedUnique = {\n\
5200 children: true,\n\
5201 contents: true,\n\
5202 next: true,\n\
5203 prev: true\n\
5204 };\n\
5205\n\
5206jQuery.fn.extend({\n\
5207 find: function( selector ) {\n\
5208 var self = this,\n\
5209 i, l;\n\
5210\n\
5211 if ( typeof selector !== \"string\" ) {\n\
5212 return jQuery( selector ).filter(function() {\n\
5213 for ( i = 0, l = self.length; i < l; i++ ) {\n\
5214 if ( jQuery.contains( self[ i ], this ) ) {\n\
5215 return true;\n\
5216 }\n\
5217 }\n\
5218 });\n\
5219 }\n\
5220\n\
5221 var ret = this.pushStack( \"\", \"find\", selector ),\n\
5222 length, n, r;\n\
5223\n\
5224 for ( i = 0, l = this.length; i < l; i++ ) {\n\
5225 length = ret.length;\n\
5226 jQuery.find( selector, this[i], ret );\n\
5227\n\
5228 if ( i > 0 ) {\n\
5229 // Make sure that the results are unique\n\
5230 for ( n = length; n < ret.length; n++ ) {\n\
5231 for ( r = 0; r < length; r++ ) {\n\
5232 if ( ret[r] === ret[n] ) {\n\
5233 ret.splice(n--, 1);\n\
5234 break;\n\
5235 }\n\
5236 }\n\
5237 }\n\
5238 }\n\
5239 }\n\
5240\n\
5241 return ret;\n\
5242 },\n\
5243\n\
5244 has: function( target ) {\n\
5245 var targets = jQuery( target );\n\
5246 return this.filter(function() {\n\
5247 for ( var i = 0, l = targets.length; i < l; i++ ) {\n\
5248 if ( jQuery.contains( this, targets[i] ) ) {\n\
5249 return true;\n\
5250 }\n\
5251 }\n\
5252 });\n\
5253 },\n\
5254\n\
5255 not: function( selector ) {\n\
5256 return this.pushStack( winnow(this, selector, false), \"not\", selector);\n\
5257 },\n\
5258\n\
5259 filter: function( selector ) {\n\
5260 return this.pushStack( winnow(this, selector, true), \"filter\", selector );\n\
5261 },\n\
5262\n\
5263 is: function( selector ) {\n\
5264 return !!selector && ( typeof selector === \"string\" ?\n\
5265 jQuery.filter( selector, this ).length > 0 :\n\
5266 this.filter( selector ).length > 0 );\n\
5267 },\n\
5268\n\
5269 closest: function( selectors, context ) {\n\
5270 var ret = [], i, l, cur = this[0];\n\
5271 \n\
5272 // Array\n\
5273 if ( jQuery.isArray( selectors ) ) {\n\
5274 var match, selector,\n\
5275 matches = {},\n\
5276 level = 1;\n\
5277\n\
5278 if ( cur && selectors.length ) {\n\
5279 for ( i = 0, l = selectors.length; i < l; i++ ) {\n\
5280 selector = selectors[i];\n\
5281\n\
5282 if ( !matches[ selector ] ) {\n\
5283 matches[ selector ] = POS.test( selector ) ?\n\
5284 jQuery( selector, context || this.context ) :\n\
5285 selector;\n\
5286 }\n\
5287 }\n\
5288\n\
5289 while ( cur && cur.ownerDocument && cur !== context ) {\n\
5290 for ( selector in matches ) {\n\
5291 match = matches[ selector ];\n\
5292\n\
5293 if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {\n\
5294 ret.push({ selector: selector, elem: cur, level: level });\n\
5295 }\n\
5296 }\n\
5297\n\
5298 cur = cur.parentNode;\n\
5299 level++;\n\
5300 }\n\
5301 }\n\
5302\n\
5303 return ret;\n\
5304 }\n\
5305\n\
5306 // String\n\
5307 var pos = POS.test( selectors ) || typeof selectors !== \"string\" ?\n\
5308 jQuery( selectors, context || this.context ) :\n\
5309 0;\n\
5310\n\
5311 for ( i = 0, l = this.length; i < l; i++ ) {\n\
5312 cur = this[i];\n\
5313\n\
5314 while ( cur ) {\n\
5315 if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\
5316 ret.push( cur );\n\
5317 break;\n\
5318\n\
5319 } else {\n\
5320 cur = cur.parentNode;\n\
5321 if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {\n\
5322 break;\n\
5323 }\n\
5324 }\n\
5325 }\n\
5326 }\n\
5327\n\
5328 ret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\
5329\n\
5330 return this.pushStack( ret, \"closest\", selectors );\n\
5331 },\n\
5332\n\
5333 // Determine the position of an element within\n\
5334 // the matched set of elements\n\
5335 index: function( elem ) {\n\
5336\n\
5337 // No argument, return index in parent\n\
5338 if ( !elem ) {\n\
5339 return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n\
5340 }\n\
5341\n\
5342 // index in selector\n\
5343 if ( typeof elem === \"string\" ) {\n\
5344 return jQuery.inArray( this[0], jQuery( elem ) );\n\
5345 }\n\
5346\n\
5347 // Locate the position of the desired element\n\
5348 return jQuery.inArray(\n\
5349 // If it receives a jQuery object, the first element is used\n\
5350 elem.jquery ? elem[0] : elem, this );\n\
5351 },\n\
5352\n\
5353 add: function( selector, context ) {\n\
5354 var set = typeof selector === \"string\" ?\n\
5355 jQuery( selector, context ) :\n\
5356 jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\
5357 all = jQuery.merge( this.get(), set );\n\
5358\n\
5359 return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n\
5360 all :\n\
5361 jQuery.unique( all ) );\n\
5362 },\n\
5363\n\
5364 andSelf: function() {\n\
5365 return this.add( this.prevObject );\n\
5366 }\n\
5367});\n\
5368\n\
5369// A painfully simple check to see if an element is disconnected\n\
5370// from a document (should be improved, where feasible).\n\
5371function isDisconnected( node ) {\n\
5372 return !node || !node.parentNode || node.parentNode.nodeType === 11;\n\
5373}\n\
5374\n\
5375jQuery.each({\n\
5376 parent: function( elem ) {\n\
5377 var parent = elem.parentNode;\n\
5378 return parent && parent.nodeType !== 11 ? parent : null;\n\
5379 },\n\
5380 parents: function( elem ) {\n\
5381 return jQuery.dir( elem, \"parentNode\" );\n\
5382 },\n\
5383 parentsUntil: function( elem, i, until ) {\n\
5384 return jQuery.dir( elem, \"parentNode\", until );\n\
5385 },\n\
5386 next: function( elem ) {\n\
5387 return jQuery.nth( elem, 2, \"nextSibling\" );\n\
5388 },\n\
5389 prev: function( elem ) {\n\
5390 return jQuery.nth( elem, 2, \"previousSibling\" );\n\
5391 },\n\
5392 nextAll: function( elem ) {\n\
5393 return jQuery.dir( elem, \"nextSibling\" );\n\
5394 },\n\
5395 prevAll: function( elem ) {\n\
5396 return jQuery.dir( elem, \"previousSibling\" );\n\
5397 },\n\
5398 nextUntil: function( elem, i, until ) {\n\
5399 return jQuery.dir( elem, \"nextSibling\", until );\n\
5400 },\n\
5401 prevUntil: function( elem, i, until ) {\n\
5402 return jQuery.dir( elem, \"previousSibling\", until );\n\
5403 },\n\
5404 siblings: function( elem ) {\n\
5405 return jQuery.sibling( elem.parentNode.firstChild, elem );\n\
5406 },\n\
5407 children: function( elem ) {\n\
5408 return jQuery.sibling( elem.firstChild );\n\
5409 },\n\
5410 contents: function( elem ) {\n\
5411 return jQuery.nodeName( elem, \"iframe\" ) ?\n\
5412 elem.contentDocument || elem.contentWindow.document :\n\
5413 jQuery.makeArray( elem.childNodes );\n\
5414 }\n\
5415}, function( name, fn ) {\n\
5416 jQuery.fn[ name ] = function( until, selector ) {\n\
5417 var ret = jQuery.map( this, fn, until ),\n\
5418 // The variable 'args' was introduced in\n\
5419 // https://github.com/jquery/jquery/commit/52a0238\n\
5420 // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.\n\
5421 // http://code.google.com/p/v8/issues/detail?id=1050\n\
5422 args = slice.call(arguments);\n\
5423\n\
5424 if ( !runtil.test( name ) ) {\n\
5425 selector = until;\n\
5426 }\n\
5427\n\
5428 if ( selector && typeof selector === \"string\" ) {\n\
5429 ret = jQuery.filter( selector, ret );\n\
5430 }\n\
5431\n\
5432 ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\
5433\n\
5434 if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {\n\
5435 ret = ret.reverse();\n\
5436 }\n\
5437\n\
5438 return this.pushStack( ret, name, args.join(\",\") );\n\
5439 };\n\
5440});\n\
5441\n\
5442jQuery.extend({\n\
5443 filter: function( expr, elems, not ) {\n\
5444 if ( not ) {\n\
5445 expr = \":not(\" + expr + \")\";\n\
5446 }\n\
5447\n\
5448 return elems.length === 1 ?\n\
5449 jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\
5450 jQuery.find.matches(expr, elems);\n\
5451 },\n\
5452\n\
5453 dir: function( elem, dir, until ) {\n\
5454 var matched = [],\n\
5455 cur = elem[ dir ];\n\
5456\n\
5457 while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\
5458 if ( cur.nodeType === 1 ) {\n\
5459 matched.push( cur );\n\
5460 }\n\
5461 cur = cur[dir];\n\
5462 }\n\
5463 return matched;\n\
5464 },\n\
5465\n\
5466 nth: function( cur, result, dir, elem ) {\n\
5467 result = result || 1;\n\
5468 var num = 0;\n\
5469\n\
5470 for ( ; cur; cur = cur[dir] ) {\n\
5471 if ( cur.nodeType === 1 && ++num === result ) {\n\
5472 break;\n\
5473 }\n\
5474 }\n\
5475\n\
5476 return cur;\n\
5477 },\n\
5478\n\
5479 sibling: function( n, elem ) {\n\
5480 var r = [];\n\
5481\n\
5482 for ( ; n; n = n.nextSibling ) {\n\
5483 if ( n.nodeType === 1 && n !== elem ) {\n\
5484 r.push( n );\n\
5485 }\n\
5486 }\n\
5487\n\
5488 return r;\n\
5489 }\n\
5490});\n\
5491\n\
5492// Implement the identical functionality for filter and not\n\
5493function winnow( elements, qualifier, keep ) {\n\
5494\n\
5495 // Can't pass null or undefined to indexOf in Firefox 4\n\
5496 // Set to 0 to skip string check\n\
5497 qualifier = qualifier || 0;\n\
5498\n\
5499 if ( jQuery.isFunction( qualifier ) ) {\n\
5500 return jQuery.grep(elements, function( elem, i ) {\n\
5501 var retVal = !!qualifier.call( elem, i, elem );\n\
5502 return retVal === keep;\n\
5503 });\n\
5504\n\
5505 } else if ( qualifier.nodeType ) {\n\
5506 return jQuery.grep(elements, function( elem, i ) {\n\
5507 return (elem === qualifier) === keep;\n\
5508 });\n\
5509\n\
5510 } else if ( typeof qualifier === \"string\" ) {\n\
5511 var filtered = jQuery.grep(elements, function( elem ) {\n\
5512 return elem.nodeType === 1;\n\
5513 });\n\
5514\n\
5515 if ( isSimple.test( qualifier ) ) {\n\
5516 return jQuery.filter(qualifier, filtered, !keep);\n\
5517 } else {\n\
5518 qualifier = jQuery.filter( qualifier, filtered );\n\
5519 }\n\
5520 }\n\
5521\n\
5522 return jQuery.grep(elements, function( elem, i ) {\n\
5523 return (jQuery.inArray( elem, qualifier ) >= 0) === keep;\n\
5524 });\n\
5525}\n\
5526\n\
5527\n\
5528\n\
5529\n\
5530var rinlinejQuery = / jQuery\\d+=\"(?:\\d+|null)\"/g,\n\
5531 rleadingWhitespace = /^\\s+/,\n\
5532 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n\
5533 rtagName = /<([\\w:]+)/,\n\
5534 rtbody = /<tbody/i,\n\
5535 rhtml = /<|&#?\\w+;/,\n\
5536 rnocache = /<(?:script|object|embed|option|style)/i,\n\
5537 // checked=\"checked\" or checked\n\
5538 rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\
5539 rscriptType = /\\/(java|ecma)script/i,\n\
5540 rcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,\n\
5541 wrapMap = {\n\
5542 option: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\
5543 legend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\
5544 thead: [ 1, \"<table>\", \"</table>\" ],\n\
5545 tr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\
5546 td: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\
5547 col: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\
5548 area: [ 1, \"<map>\", \"</map>\" ],\n\
5549 _default: [ 0, \"\", \"\" ]\n\
5550 };\n\
5551\n\
5552wrapMap.optgroup = wrapMap.option;\n\
5553wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\
5554wrapMap.th = wrapMap.td;\n\
5555\n\
5556// IE can't serialize <link> and <script> tags normally\n\
5557if ( !jQuery.support.htmlSerialize ) {\n\
5558 wrapMap._default = [ 1, \"div<div>\", \"</div>\" ];\n\
5559}\n\
5560\n\
5561jQuery.fn.extend({\n\
5562 text: function( text ) {\n\
5563 if ( jQuery.isFunction(text) ) {\n\
5564 return this.each(function(i) {\n\
5565 var self = jQuery( this );\n\
5566\n\
5567 self.text( text.call(this, i, self.text()) );\n\
5568 });\n\
5569 }\n\
5570\n\
5571 if ( typeof text !== \"object\" && text !== undefined ) {\n\
5572 return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );\n\
5573 }\n\
5574\n\
5575 return jQuery.text( this );\n\
5576 },\n\
5577\n\
5578 wrapAll: function( html ) {\n\
5579 if ( jQuery.isFunction( html ) ) {\n\
5580 return this.each(function(i) {\n\
5581 jQuery(this).wrapAll( html.call(this, i) );\n\
5582 });\n\
5583 }\n\
5584\n\
5585 if ( this[0] ) {\n\
5586 // The elements to wrap the target around\n\
5587 var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\
5588\n\
5589 if ( this[0].parentNode ) {\n\
5590 wrap.insertBefore( this[0] );\n\
5591 }\n\
5592\n\
5593 wrap.map(function() {\n\
5594 var elem = this;\n\
5595\n\
5596 while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\
5597 elem = elem.firstChild;\n\
5598 }\n\
5599\n\
5600 return elem;\n\
5601 }).append( this );\n\
5602 }\n\
5603\n\
5604 return this;\n\
5605 },\n\
5606\n\
5607 wrapInner: function( html ) {\n\
5608 if ( jQuery.isFunction( html ) ) {\n\
5609 return this.each(function(i) {\n\
5610 jQuery(this).wrapInner( html.call(this, i) );\n\
5611 });\n\
5612 }\n\
5613\n\
5614 return this.each(function() {\n\
5615 var self = jQuery( this ),\n\
5616 contents = self.contents();\n\
5617\n\
5618 if ( contents.length ) {\n\
5619 contents.wrapAll( html );\n\
5620\n\
5621 } else {\n\
5622 self.append( html );\n\
5623 }\n\
5624 });\n\
5625 },\n\
5626\n\
5627 wrap: function( html ) {\n\
5628 return this.each(function() {\n\
5629 jQuery( this ).wrapAll( html );\n\
5630 });\n\
5631 },\n\
5632\n\
5633 unwrap: function() {\n\
5634 return this.parent().each(function() {\n\
5635 if ( !jQuery.nodeName( this, \"body\" ) ) {\n\
5636 jQuery( this ).replaceWith( this.childNodes );\n\
5637 }\n\
5638 }).end();\n\
5639 },\n\
5640\n\
5641 append: function() {\n\
5642 return this.domManip(arguments, true, function( elem ) {\n\
5643 if ( this.nodeType === 1 ) {\n\
5644 this.appendChild( elem );\n\
5645 }\n\
5646 });\n\
5647 },\n\
5648\n\
5649 prepend: function() {\n\
5650 return this.domManip(arguments, true, function( elem ) {\n\
5651 if ( this.nodeType === 1 ) {\n\
5652 this.insertBefore( elem, this.firstChild );\n\
5653 }\n\
5654 });\n\
5655 },\n\
5656\n\
5657 before: function() {\n\
5658 if ( this[0] && this[0].parentNode ) {\n\
5659 return this.domManip(arguments, false, function( elem ) {\n\
5660 this.parentNode.insertBefore( elem, this );\n\
5661 });\n\
5662 } else if ( arguments.length ) {\n\
5663 var set = jQuery(arguments[0]);\n\
5664 set.push.apply( set, this.toArray() );\n\
5665 return this.pushStack( set, \"before\", arguments );\n\
5666 }\n\
5667 },\n\
5668\n\
5669 after: function() {\n\
5670 if ( this[0] && this[0].parentNode ) {\n\
5671 return this.domManip(arguments, false, function( elem ) {\n\
5672 this.parentNode.insertBefore( elem, this.nextSibling );\n\
5673 });\n\
5674 } else if ( arguments.length ) {\n\
5675 var set = this.pushStack( this, \"after\", arguments );\n\
5676 set.push.apply( set, jQuery(arguments[0]).toArray() );\n\
5677 return set;\n\
5678 }\n\
5679 },\n\
5680\n\
5681 // keepData is for internal use only--do not document\n\
5682 remove: function( selector, keepData ) {\n\
5683 for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\
5684 if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n\
5685 if ( !keepData && elem.nodeType === 1 ) {\n\
5686 jQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\
5687 jQuery.cleanData( [ elem ] );\n\
5688 }\n\
5689\n\
5690 if ( elem.parentNode ) {\n\
5691 elem.parentNode.removeChild( elem );\n\
5692 }\n\
5693 }\n\
5694 }\n\
5695\n\
5696 return this;\n\
5697 },\n\
5698\n\
5699 empty: function() {\n\
5700 for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\
5701 // Remove element nodes and prevent memory leaks\n\
5702 if ( elem.nodeType === 1 ) {\n\
5703 jQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\
5704 }\n\
5705\n\
5706 // Remove any remaining nodes\n\
5707 while ( elem.firstChild ) {\n\
5708 elem.removeChild( elem.firstChild );\n\
5709 }\n\
5710 }\n\
5711\n\
5712 return this;\n\
5713 },\n\
5714\n\
5715 clone: function( dataAndEvents, deepDataAndEvents ) {\n\
5716 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\
5717 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\
5718\n\
5719 return this.map( function () {\n\
5720 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\
5721 });\n\
5722 },\n\
5723\n\
5724 html: function( value ) {\n\
5725 if ( value === undefined ) {\n\
5726 return this[0] && this[0].nodeType === 1 ?\n\
5727 this[0].innerHTML.replace(rinlinejQuery, \"\") :\n\
5728 null;\n\
5729\n\
5730 // See if we can take a shortcut and just use innerHTML\n\
5731 } else if ( typeof value === \"string\" && !rnocache.test( value ) &&\n\
5732 (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&\n\
5733 !wrapMap[ (rtagName.exec( value ) || [\"\", \"\"])[1].toLowerCase() ] ) {\n\
5734\n\
5735 value = value.replace(rxhtmlTag, \"<$1></$2>\");\n\
5736\n\
5737 try {\n\
5738 for ( var i = 0, l = this.length; i < l; i++ ) {\n\
5739 // Remove element nodes and prevent memory leaks\n\
5740 if ( this[i].nodeType === 1 ) {\n\
5741 jQuery.cleanData( this[i].getElementsByTagName(\"*\") );\n\
5742 this[i].innerHTML = value;\n\
5743 }\n\
5744 }\n\
5745\n\
5746 // If using innerHTML throws an exception, use the fallback method\n\
5747 } catch(e) {\n\
5748 this.empty().append( value );\n\
5749 }\n\
5750\n\
5751 } else if ( jQuery.isFunction( value ) ) {\n\
5752 this.each(function(i){\n\
5753 var self = jQuery( this );\n\
5754\n\
5755 self.html( value.call(this, i, self.html()) );\n\
5756 });\n\
5757\n\
5758 } else {\n\
5759 this.empty().append( value );\n\
5760 }\n\
5761\n\
5762 return this;\n\
5763 },\n\
5764\n\
5765 replaceWith: function( value ) {\n\
5766 if ( this[0] && this[0].parentNode ) {\n\
5767 // Make sure that the elements are removed from the DOM before they are inserted\n\
5768 // this can help fix replacing a parent with child elements\n\
5769 if ( jQuery.isFunction( value ) ) {\n\
5770 return this.each(function(i) {\n\
5771 var self = jQuery(this), old = self.html();\n\
5772 self.replaceWith( value.call( this, i, old ) );\n\
5773 });\n\
5774 }\n\
5775\n\
5776 if ( typeof value !== \"string\" ) {\n\
5777 value = jQuery( value ).detach();\n\
5778 }\n\
5779\n\
5780 return this.each(function() {\n\
5781 var next = this.nextSibling,\n\
5782 parent = this.parentNode;\n\
5783\n\
5784 jQuery( this ).remove();\n\
5785\n\
5786 if ( next ) {\n\
5787 jQuery(next).before( value );\n\
5788 } else {\n\
5789 jQuery(parent).append( value );\n\
5790 }\n\
5791 });\n\
5792 } else {\n\
5793 return this.length ?\n\
5794 this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n\
5795 this;\n\
5796 }\n\
5797 },\n\
5798\n\
5799 detach: function( selector ) {\n\
5800 return this.remove( selector, true );\n\
5801 },\n\
5802\n\
5803 domManip: function( args, table, callback ) {\n\
5804 var results, first, fragment, parent,\n\
5805 value = args[0],\n\
5806 scripts = [];\n\
5807\n\
5808 // We can't cloneNode fragments that contain checked, in WebKit\n\
5809 if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === \"string\" && rchecked.test( value ) ) {\n\
5810 return this.each(function() {\n\
5811 jQuery(this).domManip( args, table, callback, true );\n\
5812 });\n\
5813 }\n\
5814\n\
5815 if ( jQuery.isFunction(value) ) {\n\
5816 return this.each(function(i) {\n\
5817 var self = jQuery(this);\n\
5818 args[0] = value.call(this, i, table ? self.html() : undefined);\n\
5819 self.domManip( args, table, callback );\n\
5820 });\n\
5821 }\n\
5822\n\
5823 if ( this[0] ) {\n\
5824 parent = value && value.parentNode;\n\
5825\n\
5826 // If we're in a fragment, just use that instead of building a new one\n\
5827 if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {\n\
5828 results = { fragment: parent };\n\
5829\n\
5830 } else {\n\
5831 results = jQuery.buildFragment( args, this, scripts );\n\
5832 }\n\
5833\n\
5834 fragment = results.fragment;\n\
5835\n\
5836 if ( fragment.childNodes.length === 1 ) {\n\
5837 first = fragment = fragment.firstChild;\n\
5838 } else {\n\
5839 first = fragment.firstChild;\n\
5840 }\n\
5841\n\
5842 if ( first ) {\n\
5843 table = table && jQuery.nodeName( first, \"tr\" );\n\
5844\n\
5845 for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {\n\
5846 callback.call(\n\
5847 table ?\n\
5848 root(this[i], first) :\n\
5849 this[i],\n\
5850 // Make sure that we do not leak memory by inadvertently discarding\n\
5851 // the original fragment (which might have attached data) instead of\n\
5852 // using it; in addition, use the original fragment object for the last\n\
5853 // item instead of first because it can end up being emptied incorrectly\n\
5854 // in certain situations (Bug #8070).\n\
5855 // Fragments from the fragment cache must always be cloned and never used\n\
5856 // in place.\n\
5857 results.cacheable || (l > 1 && i < lastIndex) ?\n\
5858 jQuery.clone( fragment, true, true ) :\n\
5859 fragment\n\
5860 );\n\
5861 }\n\
5862 }\n\
5863\n\
5864 if ( scripts.length ) {\n\
5865 jQuery.each( scripts, evalScript );\n\
5866 }\n\
5867 }\n\
5868\n\
5869 return this;\n\
5870 }\n\
5871});\n\
5872\n\
5873function root( elem, cur ) {\n\
5874 return jQuery.nodeName(elem, \"table\") ?\n\
5875 (elem.getElementsByTagName(\"tbody\")[0] ||\n\
5876 elem.appendChild(elem.ownerDocument.createElement(\"tbody\"))) :\n\
5877 elem;\n\
5878}\n\
5879\n\
5880function cloneCopyEvent( src, dest ) {\n\
5881\n\
5882 if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\
5883 return;\n\
5884 }\n\
5885\n\
5886 var internalKey = jQuery.expando,\n\
5887 oldData = jQuery.data( src ),\n\
5888 curData = jQuery.data( dest, oldData );\n\
5889\n\
5890 // Switch to use the internal data object, if it exists, for the next\n\
5891 // stage of data copying\n\
5892 if ( (oldData = oldData[ internalKey ]) ) {\n\
5893 var events = oldData.events;\n\
5894 curData = curData[ internalKey ] = jQuery.extend({}, oldData);\n\
5895\n\
5896 if ( events ) {\n\
5897 delete curData.handle;\n\
5898 curData.events = {};\n\
5899\n\
5900 for ( var type in events ) {\n\
5901 for ( var i = 0, l = events[ type ].length; i < l; i++ ) {\n\
5902 jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? \".\" : \"\" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );\n\
5903 }\n\
5904 }\n\
5905 }\n\
5906 }\n\
5907}\n\
5908\n\
5909function cloneFixAttributes( src, dest ) {\n\
5910 var nodeName;\n\
5911\n\
5912 // We do not need to do anything for non-Elements\n\
5913 if ( dest.nodeType !== 1 ) {\n\
5914 return;\n\
5915 }\n\
5916\n\
5917 // clearAttributes removes the attributes, which we don't want,\n\
5918 // but also removes the attachEvent events, which we *do* want\n\
5919 if ( dest.clearAttributes ) {\n\
5920 dest.clearAttributes();\n\
5921 }\n\
5922\n\
5923 // mergeAttributes, in contrast, only merges back on the\n\
5924 // original attributes, not the events\n\
5925 if ( dest.mergeAttributes ) {\n\
5926 dest.mergeAttributes( src );\n\
5927 }\n\
5928\n\
5929 nodeName = dest.nodeName.toLowerCase();\n\
5930\n\
5931 // IE6-8 fail to clone children inside object elements that use\n\
5932 // the proprietary classid attribute value (rather than the type\n\
5933 // attribute) to identify the type of content to display\n\
5934 if ( nodeName === \"object\" ) {\n\
5935 dest.outerHTML = src.outerHTML;\n\
5936\n\
5937 } else if ( nodeName === \"input\" && (src.type === \"checkbox\" || src.type === \"radio\") ) {\n\
5938 // IE6-8 fails to persist the checked state of a cloned checkbox\n\
5939 // or radio button. Worse, IE6-7 fail to give the cloned element\n\
5940 // a checked appearance if the defaultChecked value isn't also set\n\
5941 if ( src.checked ) {\n\
5942 dest.defaultChecked = dest.checked = src.checked;\n\
5943 }\n\
5944\n\
5945 // IE6-7 get confused and end up setting the value of a cloned\n\
5946 // checkbox/radio button to an empty string instead of \"on\"\n\
5947 if ( dest.value !== src.value ) {\n\
5948 dest.value = src.value;\n\
5949 }\n\
5950\n\
5951 // IE6-8 fails to return the selected option to the default selected\n\
5952 // state when cloning options\n\
5953 } else if ( nodeName === \"option\" ) {\n\
5954 dest.selected = src.defaultSelected;\n\
5955\n\
5956 // IE6-8 fails to set the defaultValue to the correct value when\n\
5957 // cloning other types of input fields\n\
5958 } else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\
5959 dest.defaultValue = src.defaultValue;\n\
5960 }\n\
5961\n\
5962 // Event data gets referenced instead of copied if the expando\n\
5963 // gets copied too\n\
5964 dest.removeAttribute( jQuery.expando );\n\
5965}\n\
5966\n\
5967jQuery.buildFragment = function( args, nodes, scripts ) {\n\
5968 var fragment, cacheable, cacheresults, doc;\n\
5969\n\
5970 // nodes may contain either an explicit document object,\n\
5971 // a jQuery collection or context object.\n\
5972 // If nodes[0] contains a valid object to assign to doc\n\
5973 if ( nodes && nodes[0] ) {\n\
5974 doc = nodes[0].ownerDocument || nodes[0];\n\
5975 }\n\
5976\n\
5977 // Ensure that an attr object doesn't incorrectly stand in as a document object\n\
5978 // Chrome and Firefox seem to allow this to occur and will throw exception\n\
5979 // Fixes #8950\n\
5980 if ( !doc.createDocumentFragment ) {\n\
5981 doc = document;\n\
5982 }\n\
5983\n\
5984 // Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n\
5985 // Cloning options loses the selected state, so don't cache them\n\
5986 // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n\
5987 // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n\
5988 if ( args.length === 1 && typeof args[0] === \"string\" && args[0].length < 512 && doc === document &&\n\
5989 args[0].charAt(0) === \"<\" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {\n\
5990\n\
5991 cacheable = true;\n\
5992\n\
5993 cacheresults = jQuery.fragments[ args[0] ];\n\
5994 if ( cacheresults && cacheresults !== 1 ) {\n\
5995 fragment = cacheresults;\n\
5996 }\n\
5997 }\n\
5998\n\
5999 if ( !fragment ) {\n\
6000 fragment = doc.createDocumentFragment();\n\
6001 jQuery.clean( args, doc, fragment, scripts );\n\
6002 }\n\
6003\n\
6004 if ( cacheable ) {\n\
6005 jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;\n\
6006 }\n\
6007\n\
6008 return { fragment: fragment, cacheable: cacheable };\n\
6009};\n\
6010\n\
6011jQuery.fragments = {};\n\
6012\n\
6013jQuery.each({\n\
6014 appendTo: \"append\",\n\
6015 prependTo: \"prepend\",\n\
6016 insertBefore: \"before\",\n\
6017 insertAfter: \"after\",\n\
6018 replaceAll: \"replaceWith\"\n\
6019}, function( name, original ) {\n\
6020 jQuery.fn[ name ] = function( selector ) {\n\
6021 var ret = [],\n\
6022 insert = jQuery( selector ),\n\
6023 parent = this.length === 1 && this[0].parentNode;\n\
6024\n\
6025 if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\n\
6026 insert[ original ]( this[0] );\n\
6027 return this;\n\
6028\n\
6029 } else {\n\
6030 for ( var i = 0, l = insert.length; i < l; i++ ) {\n\
6031 var elems = (i > 0 ? this.clone(true) : this).get();\n\
6032 jQuery( insert[i] )[ original ]( elems );\n\
6033 ret = ret.concat( elems );\n\
6034 }\n\
6035\n\
6036 return this.pushStack( ret, name, insert.selector );\n\
6037 }\n\
6038 };\n\
6039});\n\
6040\n\
6041function getAll( elem ) {\n\
6042 if ( \"getElementsByTagName\" in elem ) {\n\
6043 return elem.getElementsByTagName( \"*\" );\n\
6044\n\
6045 } else if ( \"querySelectorAll\" in elem ) {\n\
6046 return elem.querySelectorAll( \"*\" );\n\
6047\n\
6048 } else {\n\
6049 return [];\n\
6050 }\n\
6051}\n\
6052\n\
6053// Used in clean, fixes the defaultChecked property\n\
6054function fixDefaultChecked( elem ) {\n\
6055 if ( elem.type === \"checkbox\" || elem.type === \"radio\" ) {\n\
6056 elem.defaultChecked = elem.checked;\n\
6057 }\n\
6058}\n\
6059// Finds all inputs and passes them to fixDefaultChecked\n\
6060function findInputs( elem ) {\n\
6061 if ( jQuery.nodeName( elem, \"input\" ) ) {\n\
6062 fixDefaultChecked( elem );\n\
6063 } else if ( \"getElementsByTagName\" in elem ) {\n\
6064 jQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n\
6065 }\n\
6066}\n\
6067\n\
6068jQuery.extend({\n\
6069 clone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\
6070 var clone = elem.cloneNode(true),\n\
6071 srcElements,\n\
6072 destElements,\n\
6073 i;\n\
6074\n\
6075 if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\
6076 (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\
6077 // IE copies events bound via attachEvent when using cloneNode.\n\
6078 // Calling detachEvent on the clone will also remove the events\n\
6079 // from the original. In order to get around this, we use some\n\
6080 // proprietary methods to clear the events. Thanks to MooTools\n\
6081 // guys for this hotness.\n\
6082\n\
6083 cloneFixAttributes( elem, clone );\n\
6084\n\
6085 // Using Sizzle here is crazy slow, so we use getElementsByTagName\n\
6086 // instead\n\
6087 srcElements = getAll( elem );\n\
6088 destElements = getAll( clone );\n\
6089\n\
6090 // Weird iteration because IE will replace the length property\n\
6091 // with an element if you are cloning the body and one of the\n\
6092 // elements on the page has a name or id of \"length\"\n\
6093 for ( i = 0; srcElements[i]; ++i ) {\n\
6094 // Ensure that the destination node is not null; Fixes #9587\n\
6095 if ( destElements[i] ) {\n\
6096 cloneFixAttributes( srcElements[i], destElements[i] );\n\
6097 }\n\
6098 }\n\
6099 }\n\
6100\n\
6101 // Copy the events from the original to the clone\n\
6102 if ( dataAndEvents ) {\n\
6103 cloneCopyEvent( elem, clone );\n\
6104\n\
6105 if ( deepDataAndEvents ) {\n\
6106 srcElements = getAll( elem );\n\
6107 destElements = getAll( clone );\n\
6108\n\
6109 for ( i = 0; srcElements[i]; ++i ) {\n\
6110 cloneCopyEvent( srcElements[i], destElements[i] );\n\
6111 }\n\
6112 }\n\
6113 }\n\
6114\n\
6115 srcElements = destElements = null;\n\
6116\n\
6117 // Return the cloned set\n\
6118 return clone;\n\
6119 },\n\
6120\n\
6121 clean: function( elems, context, fragment, scripts ) {\n\
6122 var checkScriptType;\n\
6123\n\
6124 context = context || document;\n\
6125\n\
6126 // !context.createElement fails in IE with an error but returns typeof 'object'\n\
6127 if ( typeof context.createElement === \"undefined\" ) {\n\
6128 context = context.ownerDocument || context[0] && context[0].ownerDocument || document;\n\
6129 }\n\
6130\n\
6131 var ret = [], j;\n\
6132\n\
6133 for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\
6134 if ( typeof elem === \"number\" ) {\n\
6135 elem += \"\";\n\
6136 }\n\
6137\n\
6138 if ( !elem ) {\n\
6139 continue;\n\
6140 }\n\
6141\n\
6142 // Convert html string into DOM nodes\n\
6143 if ( typeof elem === \"string\" ) {\n\
6144 if ( !rhtml.test( elem ) ) {\n\
6145 elem = context.createTextNode( elem );\n\
6146 } else {\n\
6147 // Fix \"XHTML\"-style tags in all browsers\n\
6148 elem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\
6149\n\
6150 // Trim whitespace, otherwise indexOf won't work as expected\n\
6151 var tag = (rtagName.exec( elem ) || [\"\", \"\"])[1].toLowerCase(),\n\
6152 wrap = wrapMap[ tag ] || wrapMap._default,\n\
6153 depth = wrap[0],\n\
6154 div = context.createElement(\"div\");\n\
6155\n\
6156 // Go to html and back, then peel off extra wrappers\n\
6157 div.innerHTML = wrap[1] + elem + wrap[2];\n\
6158\n\
6159 // Move to the right depth\n\
6160 while ( depth-- ) {\n\
6161 div = div.lastChild;\n\
6162 }\n\
6163\n\
6164 // Remove IE's autoinserted <tbody> from table fragments\n\
6165 if ( !jQuery.support.tbody ) {\n\
6166\n\
6167 // String was a <table>, *may* have spurious <tbody>\n\
6168 var hasBody = rtbody.test(elem),\n\
6169 tbody = tag === \"table\" && !hasBody ?\n\
6170 div.firstChild && div.firstChild.childNodes :\n\
6171\n\
6172 // String was a bare <thead> or <tfoot>\n\
6173 wrap[1] === \"<table>\" && !hasBody ?\n\
6174 div.childNodes :\n\
6175 [];\n\
6176\n\
6177 for ( j = tbody.length - 1; j >= 0 ; --j ) {\n\
6178 if ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n\
6179 tbody[ j ].parentNode.removeChild( tbody[ j ] );\n\
6180 }\n\
6181 }\n\
6182 }\n\
6183\n\
6184 // IE completely kills leading whitespace when innerHTML is used\n\
6185 if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\
6186 div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n\
6187 }\n\
6188\n\
6189 elem = div.childNodes;\n\
6190 }\n\
6191 }\n\
6192\n\
6193 // Resets defaultChecked for any radios and checkboxes\n\
6194 // about to be appended to the DOM in IE 6/7 (#8060)\n\
6195 var len;\n\
6196 if ( !jQuery.support.appendChecked ) {\n\
6197 if ( elem[0] && typeof (len = elem.length) === \"number\" ) {\n\
6198 for ( j = 0; j < len; j++ ) {\n\
6199 findInputs( elem[j] );\n\
6200 }\n\
6201 } else {\n\
6202 findInputs( elem );\n\
6203 }\n\
6204 }\n\
6205\n\
6206 if ( elem.nodeType ) {\n\
6207 ret.push( elem );\n\
6208 } else {\n\
6209 ret = jQuery.merge( ret, elem );\n\
6210 }\n\
6211 }\n\
6212\n\
6213 if ( fragment ) {\n\
6214 checkScriptType = function( elem ) {\n\
6215 return !elem.type || rscriptType.test( elem.type );\n\
6216 };\n\
6217 for ( i = 0; ret[i]; i++ ) {\n\
6218 if ( scripts && jQuery.nodeName( ret[i], \"script\" ) && (!ret[i].type || ret[i].type.toLowerCase() === \"text/javascript\") ) {\n\
6219 scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );\n\
6220\n\
6221 } else {\n\
6222 if ( ret[i].nodeType === 1 ) {\n\
6223 var jsTags = jQuery.grep( ret[i].getElementsByTagName( \"script\" ), checkScriptType );\n\
6224\n\
6225 ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\
6226 }\n\
6227 fragment.appendChild( ret[i] );\n\
6228 }\n\
6229 }\n\
6230 }\n\
6231\n\
6232 return ret;\n\
6233 },\n\
6234\n\
6235 cleanData: function( elems ) {\n\
6236 var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,\n\
6237 deleteExpando = jQuery.support.deleteExpando;\n\
6238\n\
6239 for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\
6240 if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {\n\
6241 continue;\n\
6242 }\n\
6243\n\
6244 id = elem[ jQuery.expando ];\n\
6245\n\
6246 if ( id ) {\n\
6247 data = cache[ id ] && cache[ id ][ internalKey ];\n\
6248\n\
6249 if ( data && data.events ) {\n\
6250 for ( var type in data.events ) {\n\
6251 if ( special[ type ] ) {\n\
6252 jQuery.event.remove( elem, type );\n\
6253\n\
6254 // This is a shortcut to avoid jQuery.event.remove's overhead\n\
6255 } else {\n\
6256 jQuery.removeEvent( elem, type, data.handle );\n\
6257 }\n\
6258 }\n\
6259\n\
6260 // Null the DOM reference to avoid IE6/7/8 leak (#7054)\n\
6261 if ( data.handle ) {\n\
6262 data.handle.elem = null;\n\
6263 }\n\
6264 }\n\
6265\n\
6266 if ( deleteExpando ) {\n\
6267 delete elem[ jQuery.expando ];\n\
6268\n\
6269 } else if ( elem.removeAttribute ) {\n\
6270 elem.removeAttribute( jQuery.expando );\n\
6271 }\n\
6272\n\
6273 delete cache[ id ];\n\
6274 }\n\
6275 }\n\
6276 }\n\
6277});\n\
6278\n\
6279function evalScript( i, elem ) {\n\
6280 if ( elem.src ) {\n\
6281 jQuery.ajax({\n\
6282 url: elem.src,\n\
6283 async: false,\n\
6284 dataType: \"script\"\n\
6285 });\n\
6286 } else {\n\
6287 jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"/*$0*/\" ) );\n\
6288 }\n\
6289\n\
6290 if ( elem.parentNode ) {\n\
6291 elem.parentNode.removeChild( elem );\n\
6292 }\n\
6293}\n\
6294\n\
6295\n\
6296\n\
6297\n\
6298var ralpha = /alpha\\([^)]*\\)/i,\n\
6299 ropacity = /opacity=([^)]*)/,\n\
6300 // fixed for IE9, see #8346\n\
6301 rupper = /([A-Z]|^ms)/g,\n\
6302 rnumpx = /^-?\\d+(?:px)?$/i,\n\
6303 rnum = /^-?\\d/,\n\
6304 rrelNum = /^([\\-+])=([\\-+.\\de]+)/,\n\
6305\n\
6306 cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\
6307 cssWidth = [ \"Left\", \"Right\" ],\n\
6308 cssHeight = [ \"Top\", \"Bottom\" ],\n\
6309 curCSS,\n\
6310\n\
6311 getComputedStyle,\n\
6312 currentStyle;\n\
6313\n\
6314jQuery.fn.css = function( name, value ) {\n\
6315 // Setting 'undefined' is a no-op\n\
6316 if ( arguments.length === 2 && value === undefined ) {\n\
6317 return this;\n\
6318 }\n\
6319\n\
6320 return jQuery.access( this, name, value, true, function( elem, name, value ) {\n\
6321 return value !== undefined ?\n\
6322 jQuery.style( elem, name, value ) :\n\
6323 jQuery.css( elem, name );\n\
6324 });\n\
6325};\n\
6326\n\
6327jQuery.extend({\n\
6328 // Add in style property hooks for overriding the default\n\
6329 // behavior of getting and setting a style property\n\
6330 cssHooks: {\n\
6331 opacity: {\n\
6332 get: function( elem, computed ) {\n\
6333 if ( computed ) {\n\
6334 // We should always get a number back from opacity\n\
6335 var ret = curCSS( elem, \"opacity\", \"opacity\" );\n\
6336 return ret === \"\" ? \"1\" : ret;\n\
6337\n\
6338 } else {\n\
6339 return elem.style.opacity;\n\
6340 }\n\
6341 }\n\
6342 }\n\
6343 },\n\
6344\n\
6345 // Exclude the following css properties to add px\n\
6346 cssNumber: {\n\
6347 \"fillOpacity\": true,\n\
6348 \"fontWeight\": true,\n\
6349 \"lineHeight\": true,\n\
6350 \"opacity\": true,\n\
6351 \"orphans\": true,\n\
6352 \"widows\": true,\n\
6353 \"zIndex\": true,\n\
6354 \"zoom\": true\n\
6355 },\n\
6356\n\
6357 // Add in properties whose names you wish to fix before\n\
6358 // setting or getting the value\n\
6359 cssProps: {\n\
6360 // normalize float css property\n\
6361 \"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\
6362 },\n\
6363\n\
6364 // Get and set the style property on a DOM Node\n\
6365 style: function( elem, name, value, extra ) {\n\
6366 // Don't set styles on text and comment nodes\n\
6367 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\
6368 return;\n\
6369 }\n\
6370\n\
6371 // Make sure that we're working with the right name\n\
6372 var ret, type, origName = jQuery.camelCase( name ),\n\
6373 style = elem.style, hooks = jQuery.cssHooks[ origName ];\n\
6374\n\
6375 name = jQuery.cssProps[ origName ] || origName;\n\
6376\n\
6377 // Check if we're setting a value\n\
6378 if ( value !== undefined ) {\n\
6379 type = typeof value;\n\
6380\n\
6381 // convert relative number strings (+= or -=) to relative numbers. #7345\n\
6382 if ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\
6383 value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );\n\
6384 // Fixes bug #9237\n\
6385 type = \"number\";\n\
6386 }\n\
6387\n\
6388 // Make sure that NaN and null values aren't set. See: #7116\n\
6389 if ( value == null || type === \"number\" && isNaN( value ) ) {\n\
6390 return;\n\
6391 }\n\
6392\n\
6393 // If a number was passed in, add 'px' to the (except for certain CSS properties)\n\
6394 if ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\
6395 value += \"px\";\n\
6396 }\n\
6397\n\
6398 // If a hook was provided, use that value, otherwise just set the specified value\n\
6399 if ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {\n\
6400 // Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\
6401 // Fixes bug #5509\n\
6402 try {\n\
6403 style[ name ] = value;\n\
6404 } catch(e) {}\n\
6405 }\n\
6406\n\
6407 } else {\n\
6408 // If a hook was provided get the non-computed value from there\n\
6409 if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\
6410 return ret;\n\
6411 }\n\
6412\n\
6413 // Otherwise just get the value from the style object\n\
6414 return style[ name ];\n\
6415 }\n\
6416 },\n\
6417\n\
6418 css: function( elem, name, extra ) {\n\
6419 var ret, hooks;\n\
6420\n\
6421 // Make sure that we're working with the right name\n\
6422 name = jQuery.camelCase( name );\n\
6423 hooks = jQuery.cssHooks[ name ];\n\
6424 name = jQuery.cssProps[ name ] || name;\n\
6425\n\
6426 // cssFloat needs a special treatment\n\
6427 if ( name === \"cssFloat\" ) {\n\
6428 name = \"float\";\n\
6429 }\n\
6430\n\
6431 // If a hook was provided get the computed value from there\n\
6432 if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {\n\
6433 return ret;\n\
6434\n\
6435 // Otherwise, if a way to get the computed value exists, use that\n\
6436 } else if ( curCSS ) {\n\
6437 return curCSS( elem, name );\n\
6438 }\n\
6439 },\n\
6440\n\
6441 // A method for quickly swapping in/out CSS properties to get correct calculations\n\
6442 swap: function( elem, options, callback ) {\n\
6443 var old = {};\n\
6444\n\
6445 // Remember the old values, and insert the new ones\n\
6446 for ( var name in options ) {\n\
6447 old[ name ] = elem.style[ name ];\n\
6448 elem.style[ name ] = options[ name ];\n\
6449 }\n\
6450\n\
6451 callback.call( elem );\n\
6452\n\
6453 // Revert the old values\n\
6454 for ( name in options ) {\n\
6455 elem.style[ name ] = old[ name ];\n\
6456 }\n\
6457 }\n\
6458});\n\
6459\n\
6460// DEPRECATED, Use jQuery.css() instead\n\
6461jQuery.curCSS = jQuery.css;\n\
6462\n\
6463jQuery.each([\"height\", \"width\"], function( i, name ) {\n\
6464 jQuery.cssHooks[ name ] = {\n\
6465 get: function( elem, computed, extra ) {\n\
6466 var val;\n\
6467\n\
6468 if ( computed ) {\n\
6469 if ( elem.offsetWidth !== 0 ) {\n\
6470 return getWH( elem, name, extra );\n\
6471 } else {\n\
6472 jQuery.swap( elem, cssShow, function() {\n\
6473 val = getWH( elem, name, extra );\n\
6474 });\n\
6475 }\n\
6476\n\
6477 return val;\n\
6478 }\n\
6479 },\n\
6480\n\
6481 set: function( elem, value ) {\n\
6482 if ( rnumpx.test( value ) ) {\n\
6483 // ignore negative width and height values #1599\n\
6484 value = parseFloat( value );\n\
6485\n\
6486 if ( value >= 0 ) {\n\
6487 return value + \"px\";\n\
6488 }\n\
6489\n\
6490 } else {\n\
6491 return value;\n\
6492 }\n\
6493 }\n\
6494 };\n\
6495});\n\
6496\n\
6497if ( !jQuery.support.opacity ) {\n\
6498 jQuery.cssHooks.opacity = {\n\
6499 get: function( elem, computed ) {\n\
6500 // IE uses filters for opacity\n\
6501 return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\
6502 ( parseFloat( RegExp.$1 ) / 100 ) + \"\" :\n\
6503 computed ? \"1\" : \"\";\n\
6504 },\n\
6505\n\
6506 set: function( elem, value ) {\n\
6507 var style = elem.style,\n\
6508 currentStyle = elem.currentStyle,\n\
6509 opacity = jQuery.isNaN( value ) ? \"\" : \"alpha(opacity=\" + value * 100 + \")\",\n\
6510 filter = currentStyle && currentStyle.filter || style.filter || \"\";\n\
6511\n\
6512 // IE has trouble with opacity if it does not have layout\n\
6513 // Force it by setting the zoom level\n\
6514 style.zoom = 1;\n\
6515\n\
6516 // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\
6517 if ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" ) {\n\
6518\n\
6519 // Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\
6520 // if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\
6521 // style.removeAttribute is IE Only, but so apparently is this code path...\n\
6522 style.removeAttribute( \"filter\" );\n\
6523\n\
6524 // if there there is no filter style applied in a css rule, we are done\n\
6525 if ( currentStyle && !currentStyle.filter ) {\n\
6526 return;\n\
6527 }\n\
6528 }\n\
6529\n\
6530 // otherwise, set new filter values\n\
6531 style.filter = ralpha.test( filter ) ?\n\
6532 filter.replace( ralpha, opacity ) :\n\
6533 filter + \" \" + opacity;\n\
6534 }\n\
6535 };\n\
6536}\n\
6537\n\
6538jQuery(function() {\n\
6539 // This hook cannot be added until DOM ready because the support test\n\
6540 // for it is not run until after DOM ready\n\
6541 if ( !jQuery.support.reliableMarginRight ) {\n\
6542 jQuery.cssHooks.marginRight = {\n\
6543 get: function( elem, computed ) {\n\
6544 // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\
6545 // Work around by temporarily setting element display to inline-block\n\
6546 var ret;\n\
6547 jQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n\
6548 if ( computed ) {\n\
6549 ret = curCSS( elem, \"margin-right\", \"marginRight\" );\n\
6550 } else {\n\
6551 ret = elem.style.marginRight;\n\
6552 }\n\
6553 });\n\
6554 return ret;\n\
6555 }\n\
6556 };\n\
6557 }\n\
6558});\n\
6559\n\
6560if ( document.defaultView && document.defaultView.getComputedStyle ) {\n\
6561 getComputedStyle = function( elem, name ) {\n\
6562 var ret, defaultView, computedStyle;\n\
6563\n\
6564 name = name.replace( rupper, \"-$1\" ).toLowerCase();\n\
6565\n\
6566 if ( !(defaultView = elem.ownerDocument.defaultView) ) {\n\
6567 return undefined;\n\
6568 }\n\
6569\n\
6570 if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {\n\
6571 ret = computedStyle.getPropertyValue( name );\n\
6572 if ( ret === \"\" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {\n\
6573 ret = jQuery.style( elem, name );\n\
6574 }\n\
6575 }\n\
6576\n\
6577 return ret;\n\
6578 };\n\
6579}\n\
6580\n\
6581if ( document.documentElement.currentStyle ) {\n\
6582 currentStyle = function( elem, name ) {\n\
6583 var left,\n\
6584 ret = elem.currentStyle && elem.currentStyle[ name ],\n\
6585 rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],\n\
6586 style = elem.style;\n\
6587\n\
6588 // From the awesome hack by Dean Edwards\n\
6589 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\
6590\n\
6591 // If we're not dealing with a regular pixel number\n\
6592 // but a number that has a weird ending, we need to convert it to pixels\n\
6593 if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {\n\
6594 // Remember the original values\n\
6595 left = style.left;\n\
6596\n\
6597 // Put in the new values to get a computed value out\n\
6598 if ( rsLeft ) {\n\
6599 elem.runtimeStyle.left = elem.currentStyle.left;\n\
6600 }\n\
6601 style.left = name === \"fontSize\" ? \"1em\" : (ret || 0);\n\
6602 ret = style.pixelLeft + \"px\";\n\
6603\n\
6604 // Revert the changed values\n\
6605 style.left = left;\n\
6606 if ( rsLeft ) {\n\
6607 elem.runtimeStyle.left = rsLeft;\n\
6608 }\n\
6609 }\n\
6610\n\
6611 return ret === \"\" ? \"auto\" : ret;\n\
6612 };\n\
6613}\n\
6614\n\
6615curCSS = getComputedStyle || currentStyle;\n\
6616\n\
6617function getWH( elem, name, extra ) {\n\
6618\n\
6619 // Start with offset property\n\
6620 var val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\
6621 which = name === \"width\" ? cssWidth : cssHeight;\n\
6622\n\
6623 if ( val > 0 ) {\n\
6624 if ( extra !== \"border\" ) {\n\
6625 jQuery.each( which, function() {\n\
6626 if ( !extra ) {\n\
6627 val -= parseFloat( jQuery.css( elem, \"padding\" + this ) ) || 0;\n\
6628 }\n\
6629 if ( extra === \"margin\" ) {\n\
6630 val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;\n\
6631 } else {\n\
6632 val -= parseFloat( jQuery.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\
6633 }\n\
6634 });\n\
6635 }\n\
6636\n\
6637 return val + \"px\";\n\
6638 }\n\
6639\n\
6640 // Fall back to computed then uncomputed css if necessary\n\
6641 val = curCSS( elem, name, name );\n\
6642 if ( val < 0 || val == null ) {\n\
6643 val = elem.style[ name ] || 0;\n\
6644 }\n\
6645 // Normalize \"\", auto, and prepare for extra\n\
6646 val = parseFloat( val ) || 0;\n\
6647\n\
6648 // Add padding, border, margin\n\
6649 if ( extra ) {\n\
6650 jQuery.each( which, function() {\n\
6651 val += parseFloat( jQuery.css( elem, \"padding\" + this ) ) || 0;\n\
6652 if ( extra !== \"padding\" ) {\n\
6653 val += parseFloat( jQuery.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\
6654 }\n\
6655 if ( extra === \"margin\" ) {\n\
6656 val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;\n\
6657 }\n\
6658 });\n\
6659 }\n\
6660\n\
6661 return val + \"px\";\n\
6662}\n\
6663\n\
6664if ( jQuery.expr && jQuery.expr.filters ) {\n\
6665 jQuery.expr.filters.hidden = function( elem ) {\n\
6666 var width = elem.offsetWidth,\n\
6667 height = elem.offsetHeight;\n\
6668\n\
6669 return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, \"display\" )) === \"none\");\n\
6670 };\n\
6671\n\
6672 jQuery.expr.filters.visible = function( elem ) {\n\
6673 return !jQuery.expr.filters.hidden( elem );\n\
6674 };\n\
6675}\n\
6676\n\
6677\n\
6678\n\
6679\n\
6680var r20 = /%20/g,\n\
6681 rbracket = /\\[\\]$/,\n\
6682 rCRLF = /\\r?\\n/g,\n\
6683 rhash = /#.*$/,\n\
6684 rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\
6685 rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n\
6686 // #7653, #8125, #8152: local protocol detection\n\
6687 rlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n\
6688 rnoContent = /^(?:GET|HEAD)$/,\n\
6689 rprotocol = /^\\/\\//,\n\
6690 rquery = /\\?/,\n\
6691 rscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\
6692 rselectTextarea = /^(?:select|textarea)/i,\n\
6693 rspacesAjax = /\\s+/,\n\
6694 rts = /([?&])_=[^&]*/,\n\
6695 rurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,\n\
6696\n\
6697 // Keep a copy of the old load method\n\
6698 _load = jQuery.fn.load,\n\
6699\n\
6700 /* Prefilters\n\
6701 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\
6702 * 2) These are called:\n\
6703 * - BEFORE asking for a transport\n\
6704 * - AFTER param serialization (s.data is a string if s.processData is true)\n\
6705 * 3) key is the dataType\n\
6706 * 4) the catchall symbol \"*\" can be used\n\
6707 * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\
6708 */\n\
6709 prefilters = {},\n\
6710\n\
6711 /* Transports bindings\n\
6712 * 1) key is the dataType\n\
6713 * 2) the catchall symbol \"*\" can be used\n\
6714 * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\
6715 */\n\
6716 transports = {},\n\
6717\n\
6718 // Document location\n\
6719 ajaxLocation,\n\
6720\n\
6721 // Document location segments\n\
6722 ajaxLocParts,\n\
6723 \n\
6724 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\
6725 allTypes = [\"*/\"] + [\"*\"];\n\
6726\n\
6727// #8138, IE may throw an exception when accessing\n\
6728// a field from window.location if document.domain has been set\n\
6729try {\n\
6730 ajaxLocation = location.href;\n\
6731} catch( e ) {\n\
6732 // Use the href attribute of an A element\n\
6733 // since IE will modify it given document.location\n\
6734 ajaxLocation = document.createElement( \"a\" );\n\
6735 ajaxLocation.href = \"\";\n\
6736 ajaxLocation = ajaxLocation.href;\n\
6737}\n\
6738\n\
6739// Segment location into parts\n\
6740ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\
6741\n\
6742// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\
6743function addToPrefiltersOrTransports( structure ) {\n\
6744\n\
6745 // dataTypeExpression is optional and defaults to \"*\"\n\
6746 return function( dataTypeExpression, func ) {\n\
6747\n\
6748 if ( typeof dataTypeExpression !== \"string\" ) {\n\
6749 func = dataTypeExpression;\n\
6750 dataTypeExpression = \"*\";\n\
6751 }\n\
6752\n\
6753 if ( jQuery.isFunction( func ) ) {\n\
6754 var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),\n\
6755 i = 0,\n\
6756 length = dataTypes.length,\n\
6757 dataType,\n\
6758 list,\n\
6759 placeBefore;\n\
6760\n\
6761 // For each dataType in the dataTypeExpression\n\
6762 for(; i < length; i++ ) {\n\
6763 dataType = dataTypes[ i ];\n\
6764 // We control if we're asked to add before\n\
6765 // any existing element\n\
6766 placeBefore = /^\\+/.test( dataType );\n\
6767 if ( placeBefore ) {\n\
6768 dataType = dataType.substr( 1 ) || \"*\";\n\
6769 }\n\
6770 list = structure[ dataType ] = structure[ dataType ] || [];\n\
6771 // then we add to the structure accordingly\n\
6772 list[ placeBefore ? \"unshift\" : \"push\" ]( func );\n\
6773 }\n\
6774 }\n\
6775 };\n\
6776}\n\
6777\n\
6778// Base inspection function for prefilters and transports\n\
6779function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n\
6780 dataType /* internal */, inspected /* internal */ ) {\n\
6781\n\
6782 dataType = dataType || options.dataTypes[ 0 ];\n\
6783 inspected = inspected || {};\n\
6784\n\
6785 inspected[ dataType ] = true;\n\
6786\n\
6787 var list = structure[ dataType ],\n\
6788 i = 0,\n\
6789 length = list ? list.length : 0,\n\
6790 executeOnly = ( structure === prefilters ),\n\
6791 selection;\n\
6792\n\
6793 for(; i < length && ( executeOnly || !selection ); i++ ) {\n\
6794 selection = list[ i ]( options, originalOptions, jqXHR );\n\
6795 // If we got redirected to another dataType\n\
6796 // we try there if executing only and not done already\n\
6797 if ( typeof selection === \"string\" ) {\n\
6798 if ( !executeOnly || inspected[ selection ] ) {\n\
6799 selection = undefined;\n\
6800 } else {\n\
6801 options.dataTypes.unshift( selection );\n\
6802 selection = inspectPrefiltersOrTransports(\n\
6803 structure, options, originalOptions, jqXHR, selection, inspected );\n\
6804 }\n\
6805 }\n\
6806 }\n\
6807 // If we're only executing or nothing was selected\n\
6808 // we try the catchall dataType if not done already\n\
6809 if ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n\
6810 selection = inspectPrefiltersOrTransports(\n\
6811 structure, options, originalOptions, jqXHR, \"*\", inspected );\n\
6812 }\n\
6813 // unnecessary when only executing (prefilters)\n\
6814 // but it'll be ignored by the caller in that case\n\
6815 return selection;\n\
6816}\n\
6817\n\
6818// A special extend for ajax options\n\
6819// that takes \"flat\" options (not to be deep extended)\n\
6820// Fixes #9887\n\
6821function ajaxExtend( target, src ) {\n\
6822 var key, deep,\n\
6823 flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\
6824 for( key in src ) {\n\
6825 if ( src[ key ] !== undefined ) {\n\
6826 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\
6827 }\n\
6828 }\n\
6829 if ( deep ) {\n\
6830 jQuery.extend( true, target, deep );\n\
6831 }\n\
6832}\n\
6833\n\
6834jQuery.fn.extend({\n\
6835 load: function( url, params, callback ) {\n\
6836 if ( typeof url !== \"string\" && _load ) {\n\
6837 return _load.apply( this, arguments );\n\
6838\n\
6839 // Don't do a request if no elements are being requested\n\
6840 } else if ( !this.length ) {\n\
6841 return this;\n\
6842 }\n\
6843\n\
6844 var off = url.indexOf( \" \" );\n\
6845 if ( off >= 0 ) {\n\
6846 var selector = url.slice( off, url.length );\n\
6847 url = url.slice( 0, off );\n\
6848 }\n\
6849\n\
6850 // Default to a GET request\n\
6851 var type = \"GET\";\n\
6852\n\
6853 // If the second parameter was provided\n\
6854 if ( params ) {\n\
6855 // If it's a function\n\
6856 if ( jQuery.isFunction( params ) ) {\n\
6857 // We assume that it's the callback\n\
6858 callback = params;\n\
6859 params = undefined;\n\
6860\n\
6861 // Otherwise, build a param string\n\
6862 } else if ( typeof params === \"object\" ) {\n\
6863 params = jQuery.param( params, jQuery.ajaxSettings.traditional );\n\
6864 type = \"POST\";\n\
6865 }\n\
6866 }\n\
6867\n\
6868 var self = this;\n\
6869\n\
6870 // Request the remote document\n\
6871 jQuery.ajax({\n\
6872 url: url,\n\
6873 type: type,\n\
6874 dataType: \"html\",\n\
6875 data: params,\n\
6876 // Complete callback (responseText is used internally)\n\
6877 complete: function( jqXHR, status, responseText ) {\n\
6878 // Store the response as specified by the jqXHR object\n\
6879 responseText = jqXHR.responseText;\n\
6880 // If successful, inject the HTML into all the matched elements\n\
6881 if ( jqXHR.isResolved() ) {\n\
6882 // #4825: Get the actual response in case\n\
6883 // a dataFilter is present in ajaxSettings\n\
6884 jqXHR.done(function( r ) {\n\
6885 responseText = r;\n\
6886 });\n\
6887 // See if a selector was specified\n\
6888 self.html( selector ?\n\
6889 // Create a dummy div to hold the results\n\
6890 jQuery(\"<div>\")\n\
6891 // inject the contents of the document in, removing the scripts\n\
6892 // to avoid any 'Permission Denied' errors in IE\n\
6893 .append(responseText.replace(rscript, \"\"))\n\
6894\n\
6895 // Locate the specified elements\n\
6896 .find(selector) :\n\
6897\n\
6898 // If not, just inject the full result\n\
6899 responseText );\n\
6900 }\n\
6901\n\
6902 if ( callback ) {\n\
6903 self.each( callback, [ responseText, status, jqXHR ] );\n\
6904 }\n\
6905 }\n\
6906 });\n\
6907\n\
6908 return this;\n\
6909 },\n\
6910\n\
6911 serialize: function() {\n\
6912 return jQuery.param( this.serializeArray() );\n\
6913 },\n\
6914\n\
6915 serializeArray: function() {\n\
6916 return this.map(function(){\n\
6917 return this.elements ? jQuery.makeArray( this.elements ) : this;\n\
6918 })\n\
6919 .filter(function(){\n\
6920 return this.name && !this.disabled &&\n\
6921 ( this.checked || rselectTextarea.test( this.nodeName ) ||\n\
6922 rinput.test( this.type ) );\n\
6923 })\n\
6924 .map(function( i, elem ){\n\
6925 var val = jQuery( this ).val();\n\
6926\n\
6927 return val == null ?\n\
6928 null :\n\
6929 jQuery.isArray( val ) ?\n\
6930 jQuery.map( val, function( val, i ){\n\
6931 return { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\
6932 }) :\n\
6933 { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\
6934 }).get();\n\
6935 }\n\
6936});\n\
6937\n\
6938// Attach a bunch of functions for handling common AJAX events\n\
6939jQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n\
6940 jQuery.fn[ o ] = function( f ){\n\
6941 return this.bind( o, f );\n\
6942 };\n\
6943});\n\
6944\n\
6945jQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\
6946 jQuery[ method ] = function( url, data, callback, type ) {\n\
6947 // shift arguments if data argument was omitted\n\
6948 if ( jQuery.isFunction( data ) ) {\n\
6949 type = type || callback;\n\
6950 callback = data;\n\
6951 data = undefined;\n\
6952 }\n\
6953\n\
6954 return jQuery.ajax({\n\
6955 type: method,\n\
6956 url: url,\n\
6957 data: data,\n\
6958 success: callback,\n\
6959 dataType: type\n\
6960 });\n\
6961 };\n\
6962});\n\
6963\n\
6964jQuery.extend({\n\
6965\n\
6966 getScript: function( url, callback ) {\n\
6967 return jQuery.get( url, undefined, callback, \"script\" );\n\
6968 },\n\
6969\n\
6970 getJSON: function( url, data, callback ) {\n\
6971 return jQuery.get( url, data, callback, \"json\" );\n\
6972 },\n\
6973\n\
6974 // Creates a full fledged settings object into target\n\
6975 // with both ajaxSettings and settings fields.\n\
6976 // If target is omitted, writes into ajaxSettings.\n\
6977 ajaxSetup: function( target, settings ) {\n\
6978 if ( settings ) {\n\
6979 // Building a settings object\n\
6980 ajaxExtend( target, jQuery.ajaxSettings );\n\
6981 } else {\n\
6982 // Extending ajaxSettings\n\
6983 settings = target;\n\
6984 target = jQuery.ajaxSettings;\n\
6985 }\n\
6986 ajaxExtend( target, settings );\n\
6987 return target;\n\
6988 },\n\
6989\n\
6990 ajaxSettings: {\n\
6991 url: ajaxLocation,\n\
6992 isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\
6993 global: true,\n\
6994 type: \"GET\",\n\
6995 contentType: \"application/x-www-form-urlencoded\",\n\
6996 processData: true,\n\
6997 async: true,\n\
6998 /*\n\
6999 timeout: 0,\n\
7000 data: null,\n\
7001 dataType: null,\n\
7002 username: null,\n\
7003 password: null,\n\
7004 cache: null,\n\
7005 traditional: false,\n\
7006 headers: {},\n\
7007 */\n\
7008\n\
7009 accepts: {\n\
7010 xml: \"application/xml, text/xml\",\n\
7011 html: \"text/html\",\n\
7012 text: \"text/plain\",\n\
7013 json: \"application/json, text/javascript\",\n\
7014 \"*\": allTypes\n\
7015 },\n\
7016\n\
7017 contents: {\n\
7018 xml: /xml/,\n\
7019 html: /html/,\n\
7020 json: /json/\n\
7021 },\n\
7022\n\
7023 responseFields: {\n\
7024 xml: \"responseXML\",\n\
7025 text: \"responseText\"\n\
7026 },\n\
7027\n\
7028 // List of data converters\n\
7029 // 1) key format is \"source_type destination_type\" (a single space in-between)\n\
7030 // 2) the catchall symbol \"*\" can be used for source_type\n\
7031 converters: {\n\
7032\n\
7033 // Convert anything to text\n\
7034 \"* text\": window.String,\n\
7035\n\
7036 // Text to html (true = no transformation)\n\
7037 \"text html\": true,\n\
7038\n\
7039 // Evaluate text as a json expression\n\
7040 \"text json\": jQuery.parseJSON,\n\
7041\n\
7042 // Parse text as xml\n\
7043 \"text xml\": jQuery.parseXML\n\
7044 },\n\
7045\n\
7046 // For options that shouldn't be deep extended:\n\
7047 // you can add your own custom options here if\n\
7048 // and when you create one that shouldn't be\n\
7049 // deep extended (see ajaxExtend)\n\
7050 flatOptions: {\n\
7051 context: true,\n\
7052 url: true\n\
7053 }\n\
7054 },\n\
7055\n\
7056 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\
7057 ajaxTransport: addToPrefiltersOrTransports( transports ),\n\
7058\n\
7059 // Main method\n\
7060 ajax: function( url, options ) {\n\
7061\n\
7062 // If url is an object, simulate pre-1.5 signature\n\
7063 if ( typeof url === \"object\" ) {\n\
7064 options = url;\n\
7065 url = undefined;\n\
7066 }\n\
7067\n\
7068 // Force options to be an object\n\
7069 options = options || {};\n\
7070\n\
7071 var // Create the final options object\n\
7072 s = jQuery.ajaxSetup( {}, options ),\n\
7073 // Callbacks context\n\
7074 callbackContext = s.context || s,\n\
7075 // Context for global events\n\
7076 // It's the callbackContext if one was provided in the options\n\
7077 // and if it's a DOM node or a jQuery collection\n\
7078 globalEventContext = callbackContext !== s &&\n\
7079 ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n\
7080 jQuery( callbackContext ) : jQuery.event,\n\
7081 // Deferreds\n\
7082 deferred = jQuery.Deferred(),\n\
7083 completeDeferred = jQuery._Deferred(),\n\
7084 // Status-dependent callbacks\n\
7085 statusCode = s.statusCode || {},\n\
7086 // ifModified key\n\
7087 ifModifiedKey,\n\
7088 // Headers (they are sent all at once)\n\
7089 requestHeaders = {},\n\
7090 requestHeadersNames = {},\n\
7091 // Response headers\n\
7092 responseHeadersString,\n\
7093 responseHeaders,\n\
7094 // transport\n\
7095 transport,\n\
7096 // timeout handle\n\
7097 timeoutTimer,\n\
7098 // Cross-domain detection vars\n\
7099 parts,\n\
7100 // The jqXHR state\n\
7101 state = 0,\n\
7102 // To know if global events are to be dispatched\n\
7103 fireGlobals,\n\
7104 // Loop variable\n\
7105 i,\n\
7106 // Fake xhr\n\
7107 jqXHR = {\n\
7108\n\
7109 readyState: 0,\n\
7110\n\
7111 // Caches the header\n\
7112 setRequestHeader: function( name, value ) {\n\
7113 if ( !state ) {\n\
7114 var lname = name.toLowerCase();\n\
7115 name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\
7116 requestHeaders[ name ] = value;\n\
7117 }\n\
7118 return this;\n\
7119 },\n\
7120\n\
7121 // Raw string\n\
7122 getAllResponseHeaders: function() {\n\
7123 return state === 2 ? responseHeadersString : null;\n\
7124 },\n\
7125\n\
7126 // Builds headers hashtable if needed\n\
7127 getResponseHeader: function( key ) {\n\
7128 var match;\n\
7129 if ( state === 2 ) {\n\
7130 if ( !responseHeaders ) {\n\
7131 responseHeaders = {};\n\
7132 while( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\
7133 responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\
7134 }\n\
7135 }\n\
7136 match = responseHeaders[ key.toLowerCase() ];\n\
7137 }\n\
7138 return match === undefined ? null : match;\n\
7139 },\n\
7140\n\
7141 // Overrides response content-type header\n\
7142 overrideMimeType: function( type ) {\n\
7143 if ( !state ) {\n\
7144 s.mimeType = type;\n\
7145 }\n\
7146 return this;\n\
7147 },\n\
7148\n\
7149 // Cancel the request\n\
7150 abort: function( statusText ) {\n\
7151 statusText = statusText || \"abort\";\n\
7152 if ( transport ) {\n\
7153 transport.abort( statusText );\n\
7154 }\n\
7155 done( 0, statusText );\n\
7156 return this;\n\
7157 }\n\
7158 };\n\
7159\n\
7160 // Callback for when everything is done\n\
7161 // It is defined here because jslint complains if it is declared\n\
7162 // at the end of the function (which would be more logical and readable)\n\
7163 function done( status, nativeStatusText, responses, headers ) {\n\
7164\n\
7165 // Called once\n\
7166 if ( state === 2 ) {\n\
7167 return;\n\
7168 }\n\
7169\n\
7170 // State is \"done\" now\n\
7171 state = 2;\n\
7172\n\
7173 // Clear timeout if it exists\n\
7174 if ( timeoutTimer ) {\n\
7175 clearTimeout( timeoutTimer );\n\
7176 }\n\
7177\n\
7178 // Dereference transport for early garbage collection\n\
7179 // (no matter how long the jqXHR object will be used)\n\
7180 transport = undefined;\n\
7181\n\
7182 // Cache response headers\n\
7183 responseHeadersString = headers || \"\";\n\
7184\n\
7185 // Set readyState\n\
7186 jqXHR.readyState = status > 0 ? 4 : 0;\n\
7187\n\
7188 var isSuccess,\n\
7189 success,\n\
7190 error,\n\
7191 statusText = nativeStatusText,\n\
7192 response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,\n\
7193 lastModified,\n\
7194 etag;\n\
7195\n\
7196 // If successful, handle type chaining\n\
7197 if ( status >= 200 && status < 300 || status === 304 ) {\n\
7198\n\
7199 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\
7200 if ( s.ifModified ) {\n\
7201\n\
7202 if ( ( lastModified = jqXHR.getResponseHeader( \"Last-Modified\" ) ) ) {\n\
7203 jQuery.lastModified[ ifModifiedKey ] = lastModified;\n\
7204 }\n\
7205 if ( ( etag = jqXHR.getResponseHeader( \"Etag\" ) ) ) {\n\
7206 jQuery.etag[ ifModifiedKey ] = etag;\n\
7207 }\n\
7208 }\n\
7209\n\
7210 // If not modified\n\
7211 if ( status === 304 ) {\n\
7212\n\
7213 statusText = \"notmodified\";\n\
7214 isSuccess = true;\n\
7215\n\
7216 // If we have data\n\
7217 } else {\n\
7218\n\
7219 try {\n\
7220 success = ajaxConvert( s, response );\n\
7221 statusText = \"success\";\n\
7222 isSuccess = true;\n\
7223 } catch(e) {\n\
7224 // We have a parsererror\n\
7225 statusText = \"parsererror\";\n\
7226 error = e;\n\
7227 }\n\
7228 }\n\
7229 } else {\n\
7230 // We extract error from statusText\n\
7231 // then normalize statusText and status for non-aborts\n\
7232 error = statusText;\n\
7233 if( !statusText || status ) {\n\
7234 statusText = \"error\";\n\
7235 if ( status < 0 ) {\n\
7236 status = 0;\n\
7237 }\n\
7238 }\n\
7239 }\n\
7240\n\
7241 // Set data for the fake xhr object\n\
7242 jqXHR.status = status;\n\
7243 jqXHR.statusText = \"\" + ( nativeStatusText || statusText );\n\
7244\n\
7245 // Success/Error\n\
7246 if ( isSuccess ) {\n\
7247 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\
7248 } else {\n\
7249 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\
7250 }\n\
7251\n\
7252 // Status-dependent callbacks\n\
7253 jqXHR.statusCode( statusCode );\n\
7254 statusCode = undefined;\n\
7255\n\
7256 if ( fireGlobals ) {\n\
7257 globalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n\
7258 [ jqXHR, s, isSuccess ? success : error ] );\n\
7259 }\n\
7260\n\
7261 // Complete\n\
7262 completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );\n\
7263\n\
7264 if ( fireGlobals ) {\n\
7265 globalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\
7266 // Handle the global AJAX counter\n\
7267 if ( !( --jQuery.active ) ) {\n\
7268 jQuery.event.trigger( \"ajaxStop\" );\n\
7269 }\n\
7270 }\n\
7271 }\n\
7272\n\
7273 // Attach deferreds\n\
7274 deferred.promise( jqXHR );\n\
7275 jqXHR.success = jqXHR.done;\n\
7276 jqXHR.error = jqXHR.fail;\n\
7277 jqXHR.complete = completeDeferred.done;\n\
7278\n\
7279 // Status-dependent callbacks\n\
7280 jqXHR.statusCode = function( map ) {\n\
7281 if ( map ) {\n\
7282 var tmp;\n\
7283 if ( state < 2 ) {\n\
7284 for( tmp in map ) {\n\
7285 statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n\
7286 }\n\
7287 } else {\n\
7288 tmp = map[ jqXHR.status ];\n\
7289 jqXHR.then( tmp, tmp );\n\
7290 }\n\
7291 }\n\
7292 return this;\n\
7293 };\n\
7294\n\
7295 // Remove hash character (#7531: and string promotion)\n\
7296 // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\
7297 // We also use the url parameter if available\n\
7298 s.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\
7299\n\
7300 // Extract dataTypes list\n\
7301 s.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( rspacesAjax );\n\
7302\n\
7303 // Determine if a cross-domain request is in order\n\
7304 if ( s.crossDomain == null ) {\n\
7305 parts = rurl.exec( s.url.toLowerCase() );\n\
7306 s.crossDomain = !!( parts &&\n\
7307 ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||\n\
7308 ( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !=\n\
7309 ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) ) )\n\
7310 );\n\
7311 }\n\
7312\n\
7313 // Convert data if not already a string\n\
7314 if ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\
7315 s.data = jQuery.param( s.data, s.traditional );\n\
7316 }\n\
7317\n\
7318 // Apply prefilters\n\
7319 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\
7320\n\
7321 // If request was aborted inside a prefiler, stop there\n\
7322 if ( state === 2 ) {\n\
7323 return false;\n\
7324 }\n\
7325\n\
7326 // We can fire global events as of now if asked to\n\
7327 fireGlobals = s.global;\n\
7328\n\
7329 // Uppercase the type\n\
7330 s.type = s.type.toUpperCase();\n\
7331\n\
7332 // Determine if request has content\n\
7333 s.hasContent = !rnoContent.test( s.type );\n\
7334\n\
7335 // Watch for a new set of requests\n\
7336 if ( fireGlobals && jQuery.active++ === 0 ) {\n\
7337 jQuery.event.trigger( \"ajaxStart\" );\n\
7338 }\n\
7339\n\
7340 // More options handling for requests with no content\n\
7341 if ( !s.hasContent ) {\n\
7342\n\
7343 // If data is available, append data to url\n\
7344 if ( s.data ) {\n\
7345 s.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n\
7346 // #9682: remove data so that it's not used in an eventual retry\n\
7347 delete s.data;\n\
7348 }\n\
7349\n\
7350 // Get ifModifiedKey before adding the anti-cache parameter\n\
7351 ifModifiedKey = s.url;\n\
7352\n\
7353 // Add anti-cache in url if needed\n\
7354 if ( s.cache === false ) {\n\
7355\n\
7356 var ts = jQuery.now(),\n\
7357 // try replacing _= if it is there\n\
7358 ret = s.url.replace( rts, \"$1_=\" + ts );\n\
7359\n\
7360 // if nothing was replaced, add timestamp to the end\n\
7361 s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n\
7362 }\n\
7363 }\n\
7364\n\
7365 // Set the correct header, if data is being sent\n\
7366 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\
7367 jqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\
7368 }\n\
7369\n\
7370 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\
7371 if ( s.ifModified ) {\n\
7372 ifModifiedKey = ifModifiedKey || s.url;\n\
7373 if ( jQuery.lastModified[ ifModifiedKey ] ) {\n\
7374 jqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n\
7375 }\n\
7376 if ( jQuery.etag[ ifModifiedKey ] ) {\n\
7377 jqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n\
7378 }\n\
7379 }\n\
7380\n\
7381 // Set the Accepts header for the server, depending on the dataType\n\
7382 jqXHR.setRequestHeader(\n\
7383 \"Accept\",\n\
7384 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\
7385 s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\
7386 s.accepts[ \"*\" ]\n\
7387 );\n\
7388\n\
7389 // Check for headers option\n\
7390 for ( i in s.headers ) {\n\
7391 jqXHR.setRequestHeader( i, s.headers[ i ] );\n\
7392 }\n\
7393\n\
7394 // Allow custom headers/mimetypes and early abort\n\
7395 if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\
7396 // Abort if not done already\n\
7397 jqXHR.abort();\n\
7398 return false;\n\
7399\n\
7400 }\n\
7401\n\
7402 // Install callbacks on deferreds\n\
7403 for ( i in { success: 1, error: 1, complete: 1 } ) {\n\
7404 jqXHR[ i ]( s[ i ] );\n\
7405 }\n\
7406\n\
7407 // Get transport\n\
7408 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\
7409\n\
7410 // If no transport, we auto-abort\n\
7411 if ( !transport ) {\n\
7412 done( -1, \"No Transport\" );\n\
7413 } else {\n\
7414 jqXHR.readyState = 1;\n\
7415 // Send global event\n\
7416 if ( fireGlobals ) {\n\
7417 globalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\
7418 }\n\
7419 // Timeout\n\
7420 if ( s.async && s.timeout > 0 ) {\n\
7421 timeoutTimer = setTimeout( function(){\n\
7422 jqXHR.abort( \"timeout\" );\n\
7423 }, s.timeout );\n\
7424 }\n\
7425\n\
7426 try {\n\
7427 state = 1;\n\
7428 transport.send( requestHeaders, done );\n\
7429 } catch (e) {\n\
7430 // Propagate exception as error if not done\n\
7431 if ( state < 2 ) {\n\
7432 done( -1, e );\n\
7433 // Simply rethrow otherwise\n\
7434 } else {\n\
7435 jQuery.error( e );\n\
7436 }\n\
7437 }\n\
7438 }\n\
7439\n\
7440 return jqXHR;\n\
7441 },\n\
7442\n\
7443 // Serialize an array of form elements or a set of\n\
7444 // key/values into a query string\n\
7445 param: function( a, traditional ) {\n\
7446 var s = [],\n\
7447 add = function( key, value ) {\n\
7448 // If value is a function, invoke it and return its value\n\
7449 value = jQuery.isFunction( value ) ? value() : value;\n\
7450 s[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\
7451 };\n\
7452\n\
7453 // Set traditional to true for jQuery <= 1.3.2 behavior.\n\
7454 if ( traditional === undefined ) {\n\
7455 traditional = jQuery.ajaxSettings.traditional;\n\
7456 }\n\
7457\n\
7458 // If an array was passed in, assume that it is an array of form elements.\n\
7459 if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\
7460 // Serialize the form elements\n\
7461 jQuery.each( a, function() {\n\
7462 add( this.name, this.value );\n\
7463 });\n\
7464\n\
7465 } else {\n\
7466 // If traditional, encode the \"old\" way (the way 1.3.2 or older\n\
7467 // did it), otherwise encode params recursively.\n\
7468 for ( var prefix in a ) {\n\
7469 buildParams( prefix, a[ prefix ], traditional, add );\n\
7470 }\n\
7471 }\n\
7472\n\
7473 // Return the resulting serialization\n\
7474 return s.join( \"&\" ).replace( r20, \"+\" );\n\
7475 }\n\
7476});\n\
7477\n\
7478function buildParams( prefix, obj, traditional, add ) {\n\
7479 if ( jQuery.isArray( obj ) ) {\n\
7480 // Serialize array item.\n\
7481 jQuery.each( obj, function( i, v ) {\n\
7482 if ( traditional || rbracket.test( prefix ) ) {\n\
7483 // Treat each array item as a scalar.\n\
7484 add( prefix, v );\n\
7485\n\
7486 } else {\n\
7487 // If array item is non-scalar (array or object), encode its\n\
7488 // numeric index to resolve deserialization ambiguity issues.\n\
7489 // Note that rack (as of 1.0.0) can't currently deserialize\n\
7490 // nested arrays properly, and attempting to do so may cause\n\
7491 // a server error. Possible fixes are to modify rack's\n\
7492 // deserialization algorithm or to provide an option or flag\n\
7493 // to force array serialization to be shallow.\n\
7494 buildParams( prefix + \"[\" + ( typeof v === \"object\" || jQuery.isArray(v) ? i : \"\" ) + \"]\", v, traditional, add );\n\
7495 }\n\
7496 });\n\
7497\n\
7498 } else if ( !traditional && obj != null && typeof obj === \"object\" ) {\n\
7499 // Serialize object item.\n\
7500 for ( var name in obj ) {\n\
7501 buildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\
7502 }\n\
7503\n\
7504 } else {\n\
7505 // Serialize scalar item.\n\
7506 add( prefix, obj );\n\
7507 }\n\
7508}\n\
7509\n\
7510// This is still on the jQuery object... for now\n\
7511// Want to move this to jQuery.ajax some day\n\
7512jQuery.extend({\n\
7513\n\
7514 // Counter for holding the number of active queries\n\
7515 active: 0,\n\
7516\n\
7517 // Last-Modified header cache for next request\n\
7518 lastModified: {},\n\
7519 etag: {}\n\
7520\n\
7521});\n\
7522\n\
7523/* Handles responses to an ajax request:\n\
7524 * - sets all responseXXX fields accordingly\n\
7525 * - finds the right dataType (mediates between content-type and expected dataType)\n\
7526 * - returns the corresponding response\n\
7527 */\n\
7528function ajaxHandleResponses( s, jqXHR, responses ) {\n\
7529\n\
7530 var contents = s.contents,\n\
7531 dataTypes = s.dataTypes,\n\
7532 responseFields = s.responseFields,\n\
7533 ct,\n\
7534 type,\n\
7535 finalDataType,\n\
7536 firstDataType;\n\
7537\n\
7538 // Fill responseXXX fields\n\
7539 for( type in responseFields ) {\n\
7540 if ( type in responses ) {\n\
7541 jqXHR[ responseFields[type] ] = responses[ type ];\n\
7542 }\n\
7543 }\n\
7544\n\
7545 // Remove auto dataType and get content-type in the process\n\
7546 while( dataTypes[ 0 ] === \"*\" ) {\n\
7547 dataTypes.shift();\n\
7548 if ( ct === undefined ) {\n\
7549 ct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n\
7550 }\n\
7551 }\n\
7552\n\
7553 // Check if we're dealing with a known content-type\n\
7554 if ( ct ) {\n\
7555 for ( type in contents ) {\n\
7556 if ( contents[ type ] && contents[ type ].test( ct ) ) {\n\
7557 dataTypes.unshift( type );\n\
7558 break;\n\
7559 }\n\
7560 }\n\
7561 }\n\
7562\n\
7563 // Check to see if we have a response for the expected dataType\n\
7564 if ( dataTypes[ 0 ] in responses ) {\n\
7565 finalDataType = dataTypes[ 0 ];\n\
7566 } else {\n\
7567 // Try convertible dataTypes\n\
7568 for ( type in responses ) {\n\
7569 if ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\
7570 finalDataType = type;\n\
7571 break;\n\
7572 }\n\
7573 if ( !firstDataType ) {\n\
7574 firstDataType = type;\n\
7575 }\n\
7576 }\n\
7577 // Or just use first one\n\
7578 finalDataType = finalDataType || firstDataType;\n\
7579 }\n\
7580\n\
7581 // If we found a dataType\n\
7582 // We add the dataType to the list if needed\n\
7583 // and return the corresponding response\n\
7584 if ( finalDataType ) {\n\
7585 if ( finalDataType !== dataTypes[ 0 ] ) {\n\
7586 dataTypes.unshift( finalDataType );\n\
7587 }\n\
7588 return responses[ finalDataType ];\n\
7589 }\n\
7590}\n\
7591\n\
7592// Chain conversions given the request and the original response\n\
7593function ajaxConvert( s, response ) {\n\
7594\n\
7595 // Apply the dataFilter if provided\n\
7596 if ( s.dataFilter ) {\n\
7597 response = s.dataFilter( response, s.dataType );\n\
7598 }\n\
7599\n\
7600 var dataTypes = s.dataTypes,\n\
7601 converters = {},\n\
7602 i,\n\
7603 key,\n\
7604 length = dataTypes.length,\n\
7605 tmp,\n\
7606 // Current and previous dataTypes\n\
7607 current = dataTypes[ 0 ],\n\
7608 prev,\n\
7609 // Conversion expression\n\
7610 conversion,\n\
7611 // Conversion function\n\
7612 conv,\n\
7613 // Conversion functions (transitive conversion)\n\
7614 conv1,\n\
7615 conv2;\n\
7616\n\
7617 // For each dataType in the chain\n\
7618 for( i = 1; i < length; i++ ) {\n\
7619\n\
7620 // Create converters map\n\
7621 // with lowercased keys\n\
7622 if ( i === 1 ) {\n\
7623 for( key in s.converters ) {\n\
7624 if( typeof key === \"string\" ) {\n\
7625 converters[ key.toLowerCase() ] = s.converters[ key ];\n\
7626 }\n\
7627 }\n\
7628 }\n\
7629\n\
7630 // Get the dataTypes\n\
7631 prev = current;\n\
7632 current = dataTypes[ i ];\n\
7633\n\
7634 // If current is auto dataType, update it to prev\n\
7635 if( current === \"*\" ) {\n\
7636 current = prev;\n\
7637 // If no auto and dataTypes are actually different\n\
7638 } else if ( prev !== \"*\" && prev !== current ) {\n\
7639\n\
7640 // Get the converter\n\
7641 conversion = prev + \" \" + current;\n\
7642 conv = converters[ conversion ] || converters[ \"* \" + current ];\n\
7643\n\
7644 // If there is no direct converter, search transitively\n\
7645 if ( !conv ) {\n\
7646 conv2 = undefined;\n\
7647 for( conv1 in converters ) {\n\
7648 tmp = conv1.split( \" \" );\n\
7649 if ( tmp[ 0 ] === prev || tmp[ 0 ] === \"*\" ) {\n\
7650 conv2 = converters[ tmp[1] + \" \" + current ];\n\
7651 if ( conv2 ) {\n\
7652 conv1 = converters[ conv1 ];\n\
7653 if ( conv1 === true ) {\n\
7654 conv = conv2;\n\
7655 } else if ( conv2 === true ) {\n\
7656 conv = conv1;\n\
7657 }\n\
7658 break;\n\
7659 }\n\
7660 }\n\
7661 }\n\
7662 }\n\
7663 // If we found no converter, dispatch an error\n\
7664 if ( !( conv || conv2 ) ) {\n\
7665 jQuery.error( \"No conversion from \" + conversion.replace(\" \",\" to \") );\n\
7666 }\n\
7667 // If found converter is not an equivalence\n\
7668 if ( conv !== true ) {\n\
7669 // Convert with 1 or 2 converters accordingly\n\
7670 response = conv ? conv( response ) : conv2( conv1(response) );\n\
7671 }\n\
7672 }\n\
7673 }\n\
7674 return response;\n\
7675}\n\
7676\n\
7677\n\
7678\n\
7679\n\
7680var jsc = jQuery.now(),\n\
7681 jsre = /(\\=)\\?(&|$)|\\?\\?/i;\n\
7682\n\
7683// Default jsonp settings\n\
7684jQuery.ajaxSetup({\n\
7685 jsonp: \"callback\",\n\
7686 jsonpCallback: function() {\n\
7687 return jQuery.expando + \"_\" + ( jsc++ );\n\
7688 }\n\
7689});\n\
7690\n\
7691// Detect, normalize options and install callbacks for jsonp requests\n\
7692jQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\
7693\n\
7694 var inspectData = s.contentType === \"application/x-www-form-urlencoded\" &&\n\
7695 ( typeof s.data === \"string\" );\n\
7696\n\
7697 if ( s.dataTypes[ 0 ] === \"jsonp\" ||\n\
7698 s.jsonp !== false && ( jsre.test( s.url ) ||\n\
7699 inspectData && jsre.test( s.data ) ) ) {\n\
7700\n\
7701 var responseContainer,\n\
7702 jsonpCallback = s.jsonpCallback =\n\
7703 jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,\n\
7704 previous = window[ jsonpCallback ],\n\
7705 url = s.url,\n\
7706 data = s.data,\n\
7707 replace = \"$1\" + jsonpCallback + \"$2\";\n\
7708\n\
7709 if ( s.jsonp !== false ) {\n\
7710 url = url.replace( jsre, replace );\n\
7711 if ( s.url === url ) {\n\
7712 if ( inspectData ) {\n\
7713 data = data.replace( jsre, replace );\n\
7714 }\n\
7715 if ( s.data === data ) {\n\
7716 // Add callback manually\n\
7717 url += (/\\?/.test( url ) ? \"&\" : \"?\") + s.jsonp + \"=\" + jsonpCallback;\n\
7718 }\n\
7719 }\n\
7720 }\n\
7721\n\
7722 s.url = url;\n\
7723 s.data = data;\n\
7724\n\
7725 // Install callback\n\
7726 window[ jsonpCallback ] = function( response ) {\n\
7727 responseContainer = [ response ];\n\
7728 };\n\
7729\n\
7730 // Clean-up function\n\
7731 jqXHR.always(function() {\n\
7732 // Set callback back to previous value\n\
7733 window[ jsonpCallback ] = previous;\n\
7734 // Call if it was a function and we have a response\n\
7735 if ( responseContainer && jQuery.isFunction( previous ) ) {\n\
7736 window[ jsonpCallback ]( responseContainer[ 0 ] );\n\
7737 }\n\
7738 });\n\
7739\n\
7740 // Use data converter to retrieve json after script execution\n\
7741 s.converters[\"script json\"] = function() {\n\
7742 if ( !responseContainer ) {\n\
7743 jQuery.error( jsonpCallback + \" was not called\" );\n\
7744 }\n\
7745 return responseContainer[ 0 ];\n\
7746 };\n\
7747\n\
7748 // force json dataType\n\
7749 s.dataTypes[ 0 ] = \"json\";\n\
7750\n\
7751 // Delegate to script\n\
7752 return \"script\";\n\
7753 }\n\
7754});\n\
7755\n\
7756\n\
7757\n\
7758\n\
7759// Install script dataType\n\
7760jQuery.ajaxSetup({\n\
7761 accepts: {\n\
7762 script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\
7763 },\n\
7764 contents: {\n\
7765 script: /javascript|ecmascript/\n\
7766 },\n\
7767 converters: {\n\
7768 \"text script\": function( text ) {\n\
7769 jQuery.globalEval( text );\n\
7770 return text;\n\
7771 }\n\
7772 }\n\
7773});\n\
7774\n\
7775// Handle cache's special case and global\n\
7776jQuery.ajaxPrefilter( \"script\", function( s ) {\n\
7777 if ( s.cache === undefined ) {\n\
7778 s.cache = false;\n\
7779 }\n\
7780 if ( s.crossDomain ) {\n\
7781 s.type = \"GET\";\n\
7782 s.global = false;\n\
7783 }\n\
7784});\n\
7785\n\
7786// Bind script tag hack transport\n\
7787jQuery.ajaxTransport( \"script\", function(s) {\n\
7788\n\
7789 // This transport only deals with cross domain requests\n\
7790 if ( s.crossDomain ) {\n\
7791\n\
7792 var script,\n\
7793 head = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\
7794\n\
7795 return {\n\
7796\n\
7797 send: function( _, callback ) {\n\
7798\n\
7799 script = document.createElement( \"script\" );\n\
7800\n\
7801 script.async = \"async\";\n\
7802\n\
7803 if ( s.scriptCharset ) {\n\
7804 script.charset = s.scriptCharset;\n\
7805 }\n\
7806\n\
7807 script.src = s.url;\n\
7808\n\
7809 // Attach handlers for all browsers\n\
7810 script.onload = script.onreadystatechange = function( _, isAbort ) {\n\
7811\n\
7812 if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\
7813\n\
7814 // Handle memory leak in IE\n\
7815 script.onload = script.onreadystatechange = null;\n\
7816\n\
7817 // Remove the script\n\
7818 if ( head && script.parentNode ) {\n\
7819 head.removeChild( script );\n\
7820 }\n\
7821\n\
7822 // Dereference the script\n\
7823 script = undefined;\n\
7824\n\
7825 // Callback if not abort\n\
7826 if ( !isAbort ) {\n\
7827 callback( 200, \"success\" );\n\
7828 }\n\
7829 }\n\
7830 };\n\
7831 // Use insertBefore instead of appendChild to circumvent an IE6 bug.\n\
7832 // This arises when a base node is used (#2709 and #4378).\n\
7833 head.insertBefore( script, head.firstChild );\n\
7834 },\n\
7835\n\
7836 abort: function() {\n\
7837 if ( script ) {\n\
7838 script.onload( 0, 1 );\n\
7839 }\n\
7840 }\n\
7841 };\n\
7842 }\n\
7843});\n\
7844\n\
7845\n\
7846\n\
7847\n\
7848var // #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\
7849 xhrOnUnloadAbort = window.ActiveXObject ? function() {\n\
7850 // Abort all pending requests\n\
7851 for ( var key in xhrCallbacks ) {\n\
7852 xhrCallbacks[ key ]( 0, 1 );\n\
7853 }\n\
7854 } : false,\n\
7855 xhrId = 0,\n\
7856 xhrCallbacks;\n\
7857\n\
7858// Functions to create xhrs\n\
7859function createStandardXHR() {\n\
7860 try {\n\
7861 return new window.XMLHttpRequest();\n\
7862 } catch( e ) {}\n\
7863}\n\
7864\n\
7865function createActiveXHR() {\n\
7866 try {\n\
7867 return new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\
7868 } catch( e ) {}\n\
7869}\n\
7870\n\
7871// Create the request object\n\
7872// (This is still attached to ajaxSettings for backward compatibility)\n\
7873jQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\
7874 /* Microsoft failed to properly\n\
7875 * implement the XMLHttpRequest in IE7 (can't request local files),\n\
7876 * so we use the ActiveXObject when it is available\n\
7877 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\
7878 * we need a fallback.\n\
7879 */\n\
7880 function() {\n\
7881 return !this.isLocal && createStandardXHR() || createActiveXHR();\n\
7882 } :\n\
7883 // For all other browsers, use the standard XMLHttpRequest object\n\
7884 createStandardXHR;\n\
7885\n\
7886// Determine support properties\n\
7887(function( xhr ) {\n\
7888 jQuery.extend( jQuery.support, {\n\
7889 ajax: !!xhr,\n\
7890 cors: !!xhr && ( \"withCredentials\" in xhr )\n\
7891 });\n\
7892})( jQuery.ajaxSettings.xhr() );\n\
7893\n\
7894// Create transport if the browser can provide an xhr\n\
7895if ( jQuery.support.ajax ) {\n\
7896\n\
7897 jQuery.ajaxTransport(function( s ) {\n\
7898 // Cross domain only allowed if supported through XMLHttpRequest\n\
7899 if ( !s.crossDomain || jQuery.support.cors ) {\n\
7900\n\
7901 var callback;\n\
7902\n\
7903 return {\n\
7904 send: function( headers, complete ) {\n\
7905\n\
7906 // Get a new xhr\n\
7907 var xhr = s.xhr(),\n\
7908 handle,\n\
7909 i;\n\
7910\n\
7911 // Open the socket\n\
7912 // Passing null username, generates a login popup on Opera (#2865)\n\
7913 if ( s.username ) {\n\
7914 xhr.open( s.type, s.url, s.async, s.username, s.password );\n\
7915 } else {\n\
7916 xhr.open( s.type, s.url, s.async );\n\
7917 }\n\
7918\n\
7919 // Apply custom fields if provided\n\
7920 if ( s.xhrFields ) {\n\
7921 for ( i in s.xhrFields ) {\n\
7922 xhr[ i ] = s.xhrFields[ i ];\n\
7923 }\n\
7924 }\n\
7925\n\
7926 // Override mime type if needed\n\
7927 if ( s.mimeType && xhr.overrideMimeType ) {\n\
7928 xhr.overrideMimeType( s.mimeType );\n\
7929 }\n\
7930\n\
7931 // X-Requested-With header\n\
7932 // For cross-domain requests, seeing as conditions for a preflight are\n\
7933 // akin to a jigsaw puzzle, we simply never set it to be sure.\n\
7934 // (it can always be set on a per-request basis or even using ajaxSetup)\n\
7935 // For same-domain requests, won't change header if already provided.\n\
7936 if ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\
7937 headers[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\
7938 }\n\
7939\n\
7940 // Need an extra try/catch for cross domain requests in Firefox 3\n\
7941 try {\n\
7942 for ( i in headers ) {\n\
7943 xhr.setRequestHeader( i, headers[ i ] );\n\
7944 }\n\
7945 } catch( _ ) {}\n\
7946\n\
7947 // Do send the request\n\
7948 // This may raise an exception which is actually\n\
7949 // handled in jQuery.ajax (so no try/catch here)\n\
7950 xhr.send( ( s.hasContent && s.data ) || null );\n\
7951\n\
7952 // Listener\n\
7953 callback = function( _, isAbort ) {\n\
7954\n\
7955 var status,\n\
7956 statusText,\n\
7957 responseHeaders,\n\
7958 responses,\n\
7959 xml;\n\
7960\n\
7961 // Firefox throws exceptions when accessing properties\n\
7962 // of an xhr when a network error occured\n\
7963 // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\
7964 try {\n\
7965\n\
7966 // Was never called and is aborted or complete\n\
7967 if ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\
7968\n\
7969 // Only called once\n\
7970 callback = undefined;\n\
7971\n\
7972 // Do not keep as active anymore\n\
7973 if ( handle ) {\n\
7974 xhr.onreadystatechange = jQuery.noop;\n\
7975 if ( xhrOnUnloadAbort ) {\n\
7976 delete xhrCallbacks[ handle ];\n\
7977 }\n\
7978 }\n\
7979\n\
7980 // If it's an abort\n\
7981 if ( isAbort ) {\n\
7982 // Abort it manually if needed\n\
7983 if ( xhr.readyState !== 4 ) {\n\
7984 xhr.abort();\n\
7985 }\n\
7986 } else {\n\
7987 status = xhr.status;\n\
7988 responseHeaders = xhr.getAllResponseHeaders();\n\
7989 responses = {};\n\
7990 xml = xhr.responseXML;\n\
7991\n\
7992 // Construct response list\n\
7993 if ( xml && xml.documentElement /* #4958 */ ) {\n\
7994 responses.xml = xml;\n\
7995 }\n\
7996 responses.text = xhr.responseText;\n\
7997\n\
7998 // Firefox throws an exception when accessing\n\
7999 // statusText for faulty cross-domain requests\n\
8000 try {\n\
8001 statusText = xhr.statusText;\n\
8002 } catch( e ) {\n\
8003 // We normalize with Webkit giving an empty statusText\n\
8004 statusText = \"\";\n\
8005 }\n\
8006\n\
8007 // Filter status for non standard behaviors\n\
8008\n\
8009 // If the request is local and we have data: assume a success\n\
8010 // (success with no data won't get notified, that's the best we\n\
8011 // can do given current implementations)\n\
8012 if ( !status && s.isLocal && !s.crossDomain ) {\n\
8013 status = responses.text ? 200 : 404;\n\
8014 // IE - #1450: sometimes returns 1223 when it should be 204\n\
8015 } else if ( status === 1223 ) {\n\
8016 status = 204;\n\
8017 }\n\
8018 }\n\
8019 }\n\
8020 } catch( firefoxAccessException ) {\n\
8021 if ( !isAbort ) {\n\
8022 complete( -1, firefoxAccessException );\n\
8023 }\n\
8024 }\n\
8025\n\
8026 // Call complete if needed\n\
8027 if ( responses ) {\n\
8028 complete( status, statusText, responses, responseHeaders );\n\
8029 }\n\
8030 };\n\
8031\n\
8032 // if we're in sync mode or it's in cache\n\
8033 // and has been retrieved directly (IE6 & IE7)\n\
8034 // we need to manually fire the callback\n\
8035 if ( !s.async || xhr.readyState === 4 ) {\n\
8036 callback();\n\
8037 } else {\n\
8038 handle = ++xhrId;\n\
8039 if ( xhrOnUnloadAbort ) {\n\
8040 // Create the active xhrs callbacks list if needed\n\
8041 // and attach the unload handler\n\
8042 if ( !xhrCallbacks ) {\n\
8043 xhrCallbacks = {};\n\
8044 jQuery( window ).unload( xhrOnUnloadAbort );\n\
8045 }\n\
8046 // Add to list of active xhrs callbacks\n\
8047 xhrCallbacks[ handle ] = callback;\n\
8048 }\n\
8049 xhr.onreadystatechange = callback;\n\
8050 }\n\
8051 },\n\
8052\n\
8053 abort: function() {\n\
8054 if ( callback ) {\n\
8055 callback(0,1);\n\
8056 }\n\
8057 }\n\
8058 };\n\
8059 }\n\
8060 });\n\
8061}\n\
8062\n\
8063\n\
8064\n\
8065\n\
8066var elemdisplay = {},\n\
8067 iframe, iframeDoc,\n\
8068 rfxtypes = /^(?:toggle|show|hide)$/,\n\
8069 rfxnum = /^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,\n\
8070 timerId,\n\
8071 fxAttrs = [\n\
8072 // height animations\n\
8073 [ \"height\", \"marginTop\", \"marginBottom\", \"paddingTop\", \"paddingBottom\" ],\n\
8074 // width animations\n\
8075 [ \"width\", \"marginLeft\", \"marginRight\", \"paddingLeft\", \"paddingRight\" ],\n\
8076 // opacity animations\n\
8077 [ \"opacity\" ]\n\
8078 ],\n\
8079 fxNow;\n\
8080\n\
8081jQuery.fn.extend({\n\
8082 show: function( speed, easing, callback ) {\n\
8083 var elem, display;\n\
8084\n\
8085 if ( speed || speed === 0 ) {\n\
8086 return this.animate( genFx(\"show\", 3), speed, easing, callback);\n\
8087\n\
8088 } else {\n\
8089 for ( var i = 0, j = this.length; i < j; i++ ) {\n\
8090 elem = this[i];\n\
8091\n\
8092 if ( elem.style ) {\n\
8093 display = elem.style.display;\n\
8094\n\
8095 // Reset the inline display of this element to learn if it is\n\
8096 // being hidden by cascaded rules or not\n\
8097 if ( !jQuery._data(elem, \"olddisplay\") && display === \"none\" ) {\n\
8098 display = elem.style.display = \"\";\n\
8099 }\n\
8100\n\
8101 // Set elements which have been overridden with display: none\n\
8102 // in a stylesheet to whatever the default browser style is\n\
8103 // for such an element\n\
8104 if ( display === \"\" && jQuery.css( elem, \"display\" ) === \"none\" ) {\n\
8105 jQuery._data(elem, \"olddisplay\", defaultDisplay(elem.nodeName));\n\
8106 }\n\
8107 }\n\
8108 }\n\
8109\n\
8110 // Set the display of most of the elements in a second loop\n\
8111 // to avoid the constant reflow\n\
8112 for ( i = 0; i < j; i++ ) {\n\
8113 elem = this[i];\n\
8114\n\
8115 if ( elem.style ) {\n\
8116 display = elem.style.display;\n\
8117\n\
8118 if ( display === \"\" || display === \"none\" ) {\n\
8119 elem.style.display = jQuery._data(elem, \"olddisplay\") || \"\";\n\
8120 }\n\
8121 }\n\
8122 }\n\
8123\n\
8124 return this;\n\
8125 }\n\
8126 },\n\
8127\n\
8128 hide: function( speed, easing, callback ) {\n\
8129 if ( speed || speed === 0 ) {\n\
8130 return this.animate( genFx(\"hide\", 3), speed, easing, callback);\n\
8131\n\
8132 } else {\n\
8133 for ( var i = 0, j = this.length; i < j; i++ ) {\n\
8134 if ( this[i].style ) {\n\
8135 var display = jQuery.css( this[i], \"display\" );\n\
8136\n\
8137 if ( display !== \"none\" && !jQuery._data( this[i], \"olddisplay\" ) ) {\n\
8138 jQuery._data( this[i], \"olddisplay\", display );\n\
8139 }\n\
8140 }\n\
8141 }\n\
8142\n\
8143 // Set the display of the elements in a second loop\n\
8144 // to avoid the constant reflow\n\
8145 for ( i = 0; i < j; i++ ) {\n\
8146 if ( this[i].style ) {\n\
8147 this[i].style.display = \"none\";\n\
8148 }\n\
8149 }\n\
8150\n\
8151 return this;\n\
8152 }\n\
8153 },\n\
8154\n\
8155 // Save the old toggle function\n\
8156 _toggle: jQuery.fn.toggle,\n\
8157\n\
8158 toggle: function( fn, fn2, callback ) {\n\
8159 var bool = typeof fn === \"boolean\";\n\
8160\n\
8161 if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {\n\
8162 this._toggle.apply( this, arguments );\n\
8163\n\
8164 } else if ( fn == null || bool ) {\n\
8165 this.each(function() {\n\
8166 var state = bool ? fn : jQuery(this).is(\":hidden\");\n\
8167 jQuery(this)[ state ? \"show\" : \"hide\" ]();\n\
8168 });\n\
8169\n\
8170 } else {\n\
8171 this.animate(genFx(\"toggle\", 3), fn, fn2, callback);\n\
8172 }\n\
8173\n\
8174 return this;\n\
8175 },\n\
8176\n\
8177 fadeTo: function( speed, to, easing, callback ) {\n\
8178 return this.filter(\":hidden\").css(\"opacity\", 0).show().end()\n\
8179 .animate({opacity: to}, speed, easing, callback);\n\
8180 },\n\
8181\n\
8182 animate: function( prop, speed, easing, callback ) {\n\
8183 var optall = jQuery.speed(speed, easing, callback);\n\
8184\n\
8185 if ( jQuery.isEmptyObject( prop ) ) {\n\
8186 return this.each( optall.complete, [ false ] );\n\
8187 }\n\
8188\n\
8189 // Do not change referenced properties as per-property easing will be lost\n\
8190 prop = jQuery.extend( {}, prop );\n\
8191\n\
8192 return this[ optall.queue === false ? \"each\" : \"queue\" ](function() {\n\
8193 // XXX 'this' does not always have a nodeName when running the\n\
8194 // test suite\n\
8195\n\
8196 if ( optall.queue === false ) {\n\
8197 jQuery._mark( this );\n\
8198 }\n\
8199\n\
8200 var opt = jQuery.extend( {}, optall ),\n\
8201 isElement = this.nodeType === 1,\n\
8202 hidden = isElement && jQuery(this).is(\":hidden\"),\n\
8203 name, val, p,\n\
8204 display, e,\n\
8205 parts, start, end, unit;\n\
8206\n\
8207 // will store per property easing and be used to determine when an animation is complete\n\
8208 opt.animatedProperties = {};\n\
8209\n\
8210 for ( p in prop ) {\n\
8211\n\
8212 // property name normalization\n\
8213 name = jQuery.camelCase( p );\n\
8214 if ( p !== name ) {\n\
8215 prop[ name ] = prop[ p ];\n\
8216 delete prop[ p ];\n\
8217 }\n\
8218\n\
8219 val = prop[ name ];\n\
8220\n\
8221 // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)\n\
8222 if ( jQuery.isArray( val ) ) {\n\
8223 opt.animatedProperties[ name ] = val[ 1 ];\n\
8224 val = prop[ name ] = val[ 0 ];\n\
8225 } else {\n\
8226 opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';\n\
8227 }\n\
8228\n\
8229 if ( val === \"hide\" && hidden || val === \"show\" && !hidden ) {\n\
8230 return opt.complete.call( this );\n\
8231 }\n\
8232\n\
8233 if ( isElement && ( name === \"height\" || name === \"width\" ) ) {\n\
8234 // Make sure that nothing sneaks out\n\
8235 // Record all 3 overflow attributes because IE does not\n\
8236 // change the overflow attribute when overflowX and\n\
8237 // overflowY are set to the same value\n\
8238 opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];\n\
8239\n\
8240 // Set display property to inline-block for height/width\n\
8241 // animations on inline elements that are having width/height\n\
8242 // animated\n\
8243 if ( jQuery.css( this, \"display\" ) === \"inline\" &&\n\
8244 jQuery.css( this, \"float\" ) === \"none\" ) {\n\
8245 if ( !jQuery.support.inlineBlockNeedsLayout ) {\n\
8246 this.style.display = \"inline-block\";\n\
8247\n\
8248 } else {\n\
8249 display = defaultDisplay( this.nodeName );\n\
8250\n\
8251 // inline-level elements accept inline-block;\n\
8252 // block-level elements need to be inline with layout\n\
8253 if ( display === \"inline\" ) {\n\
8254 this.style.display = \"inline-block\";\n\
8255\n\
8256 } else {\n\
8257 this.style.display = \"inline\";\n\
8258 this.style.zoom = 1;\n\
8259 }\n\
8260 }\n\
8261 }\n\
8262 }\n\
8263 }\n\
8264\n\
8265 if ( opt.overflow != null ) {\n\
8266 this.style.overflow = \"hidden\";\n\
8267 }\n\
8268\n\
8269 for ( p in prop ) {\n\
8270 e = new jQuery.fx( this, opt, p );\n\
8271 val = prop[ p ];\n\
8272\n\
8273 if ( rfxtypes.test(val) ) {\n\
8274 e[ val === \"toggle\" ? hidden ? \"show\" : \"hide\" : val ]();\n\
8275\n\
8276 } else {\n\
8277 parts = rfxnum.exec( val );\n\
8278 start = e.cur();\n\
8279\n\
8280 if ( parts ) {\n\
8281 end = parseFloat( parts[2] );\n\
8282 unit = parts[3] || ( jQuery.cssNumber[ p ] ? \"\" : \"px\" );\n\
8283\n\
8284 // We need to compute starting value\n\
8285 if ( unit !== \"px\" ) {\n\
8286 jQuery.style( this, p, (end || 1) + unit);\n\
8287 start = ((end || 1) / e.cur()) * start;\n\
8288 jQuery.style( this, p, start + unit);\n\
8289 }\n\
8290\n\
8291 // If a +=/-= token was provided, we're doing a relative animation\n\
8292 if ( parts[1] ) {\n\
8293 end = ( (parts[ 1 ] === \"-=\" ? -1 : 1) * end ) + start;\n\
8294 }\n\
8295\n\
8296 e.custom( start, end, unit );\n\
8297\n\
8298 } else {\n\
8299 e.custom( start, val, \"\" );\n\
8300 }\n\
8301 }\n\
8302 }\n\
8303\n\
8304 // For JS strict compliance\n\
8305 return true;\n\
8306 });\n\
8307 },\n\
8308\n\
8309 stop: function( clearQueue, gotoEnd ) {\n\
8310 if ( clearQueue ) {\n\
8311 this.queue([]);\n\
8312 }\n\
8313\n\
8314 this.each(function() {\n\
8315 var timers = jQuery.timers,\n\
8316 i = timers.length;\n\
8317 // clear marker counters if we know they won't be\n\
8318 if ( !gotoEnd ) {\n\
8319 jQuery._unmark( true, this );\n\
8320 }\n\
8321 while ( i-- ) {\n\
8322 if ( timers[i].elem === this ) {\n\
8323 if (gotoEnd) {\n\
8324 // force the next step to be the last\n\
8325 timers[i](true);\n\
8326 }\n\
8327\n\
8328 timers.splice(i, 1);\n\
8329 }\n\
8330 }\n\
8331 });\n\
8332\n\
8333 // start the next in the queue if the last step wasn't forced\n\
8334 if ( !gotoEnd ) {\n\
8335 this.dequeue();\n\
8336 }\n\
8337\n\
8338 return this;\n\
8339 }\n\
8340\n\
8341});\n\
8342\n\
8343// Animations created synchronously will run synchronously\n\
8344function createFxNow() {\n\
8345 setTimeout( clearFxNow, 0 );\n\
8346 return ( fxNow = jQuery.now() );\n\
8347}\n\
8348\n\
8349function clearFxNow() {\n\
8350 fxNow = undefined;\n\
8351}\n\
8352\n\
8353// Generate parameters to create a standard animation\n\
8354function genFx( type, num ) {\n\
8355 var obj = {};\n\
8356\n\
8357 jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {\n\
8358 obj[ this ] = type;\n\
8359 });\n\
8360\n\
8361 return obj;\n\
8362}\n\
8363\n\
8364// Generate shortcuts for custom animations\n\
8365jQuery.each({\n\
8366 slideDown: genFx(\"show\", 1),\n\
8367 slideUp: genFx(\"hide\", 1),\n\
8368 slideToggle: genFx(\"toggle\", 1),\n\
8369 fadeIn: { opacity: \"show\" },\n\
8370 fadeOut: { opacity: \"hide\" },\n\
8371 fadeToggle: { opacity: \"toggle\" }\n\
8372}, function( name, props ) {\n\
8373 jQuery.fn[ name ] = function( speed, easing, callback ) {\n\
8374 return this.animate( props, speed, easing, callback );\n\
8375 };\n\
8376});\n\
8377\n\
8378jQuery.extend({\n\
8379 speed: function( speed, easing, fn ) {\n\
8380 var opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\
8381 complete: fn || !fn && easing ||\n\
8382 jQuery.isFunction( speed ) && speed,\n\
8383 duration: speed,\n\
8384 easing: fn && easing || easing && !jQuery.isFunction(easing) && easing\n\
8385 };\n\
8386\n\
8387 opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\
8388 opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;\n\
8389\n\
8390 // Queueing\n\
8391 opt.old = opt.complete;\n\
8392 opt.complete = function( noUnmark ) {\n\
8393 if ( jQuery.isFunction( opt.old ) ) {\n\
8394 opt.old.call( this );\n\
8395 }\n\
8396\n\
8397 if ( opt.queue !== false ) {\n\
8398 jQuery.dequeue( this );\n\
8399 } else if ( noUnmark !== false ) {\n\
8400 jQuery._unmark( this );\n\
8401 }\n\
8402 };\n\
8403\n\
8404 return opt;\n\
8405 },\n\
8406\n\
8407 easing: {\n\
8408 linear: function( p, n, firstNum, diff ) {\n\
8409 return firstNum + diff * p;\n\
8410 },\n\
8411 swing: function( p, n, firstNum, diff ) {\n\
8412 return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;\n\
8413 }\n\
8414 },\n\
8415\n\
8416 timers: [],\n\
8417\n\
8418 fx: function( elem, options, prop ) {\n\
8419 this.options = options;\n\
8420 this.elem = elem;\n\
8421 this.prop = prop;\n\
8422\n\
8423 options.orig = options.orig || {};\n\
8424 }\n\
8425\n\
8426});\n\
8427\n\
8428jQuery.fx.prototype = {\n\
8429 // Simple function for setting a style value\n\
8430 update: function() {\n\
8431 if ( this.options.step ) {\n\
8432 this.options.step.call( this.elem, this.now, this );\n\
8433 }\n\
8434\n\
8435 (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );\n\
8436 },\n\
8437\n\
8438 // Get the current size\n\
8439 cur: function() {\n\
8440 if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {\n\
8441 return this.elem[ this.prop ];\n\
8442 }\n\
8443\n\
8444 var parsed,\n\
8445 r = jQuery.css( this.elem, this.prop );\n\
8446 // Empty strings, null, undefined and \"auto\" are converted to 0,\n\
8447 // complex values such as \"rotate(1rad)\" are returned as is,\n\
8448 // simple values such as \"10px\" are parsed to Float.\n\
8449 return isNaN( parsed = parseFloat( r ) ) ? !r || r === \"auto\" ? 0 : r : parsed;\n\
8450 },\n\
8451\n\
8452 // Start an animation from one number to another\n\
8453 custom: function( from, to, unit ) {\n\
8454 var self = this,\n\
8455 fx = jQuery.fx;\n\
8456\n\
8457 this.startTime = fxNow || createFxNow();\n\
8458 this.start = from;\n\
8459 this.end = to;\n\
8460 this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? \"\" : \"px\" );\n\
8461 this.now = this.start;\n\
8462 this.pos = this.state = 0;\n\
8463\n\
8464 function t( gotoEnd ) {\n\
8465 return self.step(gotoEnd);\n\
8466 }\n\
8467\n\
8468 t.elem = this.elem;\n\
8469\n\
8470 if ( t() && jQuery.timers.push(t) && !timerId ) {\n\
8471 timerId = setInterval( fx.tick, fx.interval );\n\
8472 }\n\
8473 },\n\
8474\n\
8475 // Simple 'show' function\n\
8476 show: function() {\n\
8477 // Remember where we started, so that we can go back to it later\n\
8478 this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );\n\
8479 this.options.show = true;\n\
8480\n\
8481 // Begin the animation\n\
8482 // Make sure that we start at a small width/height to avoid any\n\
8483 // flash of content\n\
8484 this.custom(this.prop === \"width\" || this.prop === \"height\" ? 1 : 0, this.cur());\n\
8485\n\
8486 // Start by showing the element\n\
8487 jQuery( this.elem ).show();\n\
8488 },\n\
8489\n\
8490 // Simple 'hide' function\n\
8491 hide: function() {\n\
8492 // Remember where we started, so that we can go back to it later\n\
8493 this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );\n\
8494 this.options.hide = true;\n\
8495\n\
8496 // Begin the animation\n\
8497 this.custom(this.cur(), 0);\n\
8498 },\n\
8499\n\
8500 // Each step of an animation\n\
8501 step: function( gotoEnd ) {\n\
8502 var t = fxNow || createFxNow(),\n\
8503 done = true,\n\
8504 elem = this.elem,\n\
8505 options = this.options,\n\
8506 i, n;\n\
8507\n\
8508 if ( gotoEnd || t >= options.duration + this.startTime ) {\n\
8509 this.now = this.end;\n\
8510 this.pos = this.state = 1;\n\
8511 this.update();\n\
8512\n\
8513 options.animatedProperties[ this.prop ] = true;\n\
8514\n\
8515 for ( i in options.animatedProperties ) {\n\
8516 if ( options.animatedProperties[i] !== true ) {\n\
8517 done = false;\n\
8518 }\n\
8519 }\n\
8520\n\
8521 if ( done ) {\n\
8522 // Reset the overflow\n\
8523 if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {\n\
8524\n\
8525 jQuery.each( [ \"\", \"X\", \"Y\" ], function (index, value) {\n\
8526 elem.style[ \"overflow\" + value ] = options.overflow[index];\n\
8527 });\n\
8528 }\n\
8529\n\
8530 // Hide the element if the \"hide\" operation was done\n\
8531 if ( options.hide ) {\n\
8532 jQuery(elem).hide();\n\
8533 }\n\
8534\n\
8535 // Reset the properties, if the item has been hidden or shown\n\
8536 if ( options.hide || options.show ) {\n\
8537 for ( var p in options.animatedProperties ) {\n\
8538 jQuery.style( elem, p, options.orig[p] );\n\
8539 }\n\
8540 }\n\
8541\n\
8542 // Execute the complete function\n\
8543 options.complete.call( elem );\n\
8544 }\n\
8545\n\
8546 return false;\n\
8547\n\
8548 } else {\n\
8549 // classical easing cannot be used with an Infinity duration\n\
8550 if ( options.duration == Infinity ) {\n\
8551 this.now = t;\n\
8552 } else {\n\
8553 n = t - this.startTime;\n\
8554 this.state = n / options.duration;\n\
8555\n\
8556 // Perform the easing function, defaults to swing\n\
8557 this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );\n\
8558 this.now = this.start + ((this.end - this.start) * this.pos);\n\
8559 }\n\
8560 // Perform the next step of the animation\n\
8561 this.update();\n\
8562 }\n\
8563\n\
8564 return true;\n\
8565 }\n\
8566};\n\
8567\n\
8568jQuery.extend( jQuery.fx, {\n\
8569 tick: function() {\n\
8570 for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {\n\
8571 if ( !timers[i]() ) {\n\
8572 timers.splice(i--, 1);\n\
8573 }\n\
8574 }\n\
8575\n\
8576 if ( !timers.length ) {\n\
8577 jQuery.fx.stop();\n\
8578 }\n\
8579 },\n\
8580\n\
8581 interval: 13,\n\
8582\n\
8583 stop: function() {\n\
8584 clearInterval( timerId );\n\
8585 timerId = null;\n\
8586 },\n\
8587\n\
8588 speeds: {\n\
8589 slow: 600,\n\
8590 fast: 200,\n\
8591 // Default speed\n\
8592 _default: 400\n\
8593 },\n\
8594\n\
8595 step: {\n\
8596 opacity: function( fx ) {\n\
8597 jQuery.style( fx.elem, \"opacity\", fx.now );\n\
8598 },\n\
8599\n\
8600 _default: function( fx ) {\n\
8601 if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {\n\
8602 fx.elem.style[ fx.prop ] = (fx.prop === \"width\" || fx.prop === \"height\" ? Math.max(0, fx.now) : fx.now) + fx.unit;\n\
8603 } else {\n\
8604 fx.elem[ fx.prop ] = fx.now;\n\
8605 }\n\
8606 }\n\
8607 }\n\
8608});\n\
8609\n\
8610if ( jQuery.expr && jQuery.expr.filters ) {\n\
8611 jQuery.expr.filters.animated = function( elem ) {\n\
8612 return jQuery.grep(jQuery.timers, function( fn ) {\n\
8613 return elem === fn.elem;\n\
8614 }).length;\n\
8615 };\n\
8616}\n\
8617\n\
8618// Try to restore the default display value of an element\n\
8619function defaultDisplay( nodeName ) {\n\
8620\n\
8621 if ( !elemdisplay[ nodeName ] ) {\n\
8622\n\
8623 var body = document.body,\n\
8624 elem = jQuery( \"<\" + nodeName + \">\" ).appendTo( body ),\n\
8625 display = elem.css( \"display\" );\n\
8626\n\
8627 elem.remove();\n\
8628\n\
8629 // If the simple way fails,\n\
8630 // get element's real default display by attaching it to a temp iframe\n\
8631 if ( display === \"none\" || display === \"\" ) {\n\
8632 // No iframe to use yet, so create it\n\
8633 if ( !iframe ) {\n\
8634 iframe = document.createElement( \"iframe\" );\n\
8635 iframe.frameBorder = iframe.width = iframe.height = 0;\n\
8636 }\n\
8637\n\
8638 body.appendChild( iframe );\n\
8639\n\
8640 // Create a cacheable copy of the iframe document on first call.\n\
8641 // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n\
8642 // document to it; WebKit & Firefox won't allow reusing the iframe document.\n\
8643 if ( !iframeDoc || !iframe.createElement ) {\n\
8644 iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n\
8645 iframeDoc.write( ( document.compatMode === \"CSS1Compat\" ? \"<!doctype html>\" : \"\" ) + \"<html><body>\" );\n\
8646 iframeDoc.close();\n\
8647 }\n\
8648\n\
8649 elem = iframeDoc.createElement( nodeName );\n\
8650\n\
8651 iframeDoc.body.appendChild( elem );\n\
8652\n\
8653 display = jQuery.css( elem, \"display\" );\n\
8654\n\
8655 body.removeChild( iframe );\n\
8656 }\n\
8657\n\
8658 // Store the correct default display\n\
8659 elemdisplay[ nodeName ] = display;\n\
8660 }\n\
8661\n\
8662 return elemdisplay[ nodeName ];\n\
8663}\n\
8664\n\
8665\n\
8666\n\
8667\n\
8668var rtable = /^t(?:able|d|h)$/i,\n\
8669 rroot = /^(?:body|html)$/i;\n\
8670\n\
8671if ( \"getBoundingClientRect\" in document.documentElement ) {\n\
8672 jQuery.fn.offset = function( options ) {\n\
8673 var elem = this[0], box;\n\
8674\n\
8675 if ( options ) {\n\
8676 return this.each(function( i ) {\n\
8677 jQuery.offset.setOffset( this, options, i );\n\
8678 });\n\
8679 }\n\
8680\n\
8681 if ( !elem || !elem.ownerDocument ) {\n\
8682 return null;\n\
8683 }\n\
8684\n\
8685 if ( elem === elem.ownerDocument.body ) {\n\
8686 return jQuery.offset.bodyOffset( elem );\n\
8687 }\n\
8688\n\
8689 try {\n\
8690 box = elem.getBoundingClientRect();\n\
8691 } catch(e) {}\n\
8692\n\
8693 var doc = elem.ownerDocument,\n\
8694 docElem = doc.documentElement;\n\
8695\n\
8696 // Make sure we're not dealing with a disconnected DOM node\n\
8697 if ( !box || !jQuery.contains( docElem, elem ) ) {\n\
8698 return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };\n\
8699 }\n\
8700\n\
8701 var body = doc.body,\n\
8702 win = getWindow(doc),\n\
8703 clientTop = docElem.clientTop || body.clientTop || 0,\n\
8704 clientLeft = docElem.clientLeft || body.clientLeft || 0,\n\
8705 scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,\n\
8706 scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,\n\
8707 top = box.top + scrollTop - clientTop,\n\
8708 left = box.left + scrollLeft - clientLeft;\n\
8709\n\
8710 return { top: top, left: left };\n\
8711 };\n\
8712\n\
8713} else {\n\
8714 jQuery.fn.offset = function( options ) {\n\
8715 var elem = this[0];\n\
8716\n\
8717 if ( options ) {\n\
8718 return this.each(function( i ) {\n\
8719 jQuery.offset.setOffset( this, options, i );\n\
8720 });\n\
8721 }\n\
8722\n\
8723 if ( !elem || !elem.ownerDocument ) {\n\
8724 return null;\n\
8725 }\n\
8726\n\
8727 if ( elem === elem.ownerDocument.body ) {\n\
8728 return jQuery.offset.bodyOffset( elem );\n\
8729 }\n\
8730\n\
8731 jQuery.offset.initialize();\n\
8732\n\
8733 var computedStyle,\n\
8734 offsetParent = elem.offsetParent,\n\
8735 prevOffsetParent = elem,\n\
8736 doc = elem.ownerDocument,\n\
8737 docElem = doc.documentElement,\n\
8738 body = doc.body,\n\
8739 defaultView = doc.defaultView,\n\
8740 prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,\n\
8741 top = elem.offsetTop,\n\
8742 left = elem.offsetLeft;\n\
8743\n\
8744 while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {\n\
8745 if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\
8746 break;\n\
8747 }\n\
8748\n\
8749 computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;\n\
8750 top -= elem.scrollTop;\n\
8751 left -= elem.scrollLeft;\n\
8752\n\
8753 if ( elem === offsetParent ) {\n\
8754 top += elem.offsetTop;\n\
8755 left += elem.offsetLeft;\n\
8756\n\
8757 if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {\n\
8758 top += parseFloat( computedStyle.borderTopWidth ) || 0;\n\
8759 left += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\
8760 }\n\
8761\n\
8762 prevOffsetParent = offsetParent;\n\
8763 offsetParent = elem.offsetParent;\n\
8764 }\n\
8765\n\
8766 if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== \"visible\" ) {\n\
8767 top += parseFloat( computedStyle.borderTopWidth ) || 0;\n\
8768 left += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\
8769 }\n\
8770\n\
8771 prevComputedStyle = computedStyle;\n\
8772 }\n\
8773\n\
8774 if ( prevComputedStyle.position === \"relative\" || prevComputedStyle.position === \"static\" ) {\n\
8775 top += body.offsetTop;\n\
8776 left += body.offsetLeft;\n\
8777 }\n\
8778\n\
8779 if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\
8780 top += Math.max( docElem.scrollTop, body.scrollTop );\n\
8781 left += Math.max( docElem.scrollLeft, body.scrollLeft );\n\
8782 }\n\
8783\n\
8784 return { top: top, left: left };\n\
8785 };\n\
8786}\n\
8787\n\
8788jQuery.offset = {\n\
8789 initialize: function() {\n\
8790 var body = document.body, container = document.createElement(\"div\"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, \"marginTop\") ) || 0,\n\
8791 html = \"<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";\n\
8792\n\
8793 jQuery.extend( container.style, { position: \"absolute\", top: 0, left: 0, margin: 0, border: 0, width: \"1px\", height: \"1px\", visibility: \"hidden\" } );\n\
8794\n\
8795 container.innerHTML = html;\n\
8796 body.insertBefore( container, body.firstChild );\n\
8797 innerDiv = container.firstChild;\n\
8798 checkDiv = innerDiv.firstChild;\n\
8799 td = innerDiv.nextSibling.firstChild.firstChild;\n\
8800\n\
8801 this.doesNotAddBorder = (checkDiv.offsetTop !== 5);\n\
8802 this.doesAddBorderForTableAndCells = (td.offsetTop === 5);\n\
8803\n\
8804 checkDiv.style.position = \"fixed\";\n\
8805 checkDiv.style.top = \"20px\";\n\
8806\n\
8807 // safari subtracts parent border width here which is 5px\n\
8808 this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);\n\
8809 checkDiv.style.position = checkDiv.style.top = \"\";\n\
8810\n\
8811 innerDiv.style.overflow = \"hidden\";\n\
8812 innerDiv.style.position = \"relative\";\n\
8813\n\
8814 this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);\n\
8815\n\
8816 this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);\n\
8817\n\
8818 body.removeChild( container );\n\
8819 jQuery.offset.initialize = jQuery.noop;\n\
8820 },\n\
8821\n\
8822 bodyOffset: function( body ) {\n\
8823 var top = body.offsetTop,\n\
8824 left = body.offsetLeft;\n\
8825\n\
8826 jQuery.offset.initialize();\n\
8827\n\
8828 if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {\n\
8829 top += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n\
8830 left += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n\
8831 }\n\
8832\n\
8833 return { top: top, left: left };\n\
8834 },\n\
8835\n\
8836 setOffset: function( elem, options, i ) {\n\
8837 var position = jQuery.css( elem, \"position\" );\n\
8838\n\
8839 // set position first, in-case top/left are set even on static elem\n\
8840 if ( position === \"static\" ) {\n\
8841 elem.style.position = \"relative\";\n\
8842 }\n\
8843\n\
8844 var curElem = jQuery( elem ),\n\
8845 curOffset = curElem.offset(),\n\
8846 curCSSTop = jQuery.css( elem, \"top\" ),\n\
8847 curCSSLeft = jQuery.css( elem, \"left\" ),\n\
8848 calculatePosition = (position === \"absolute\" || position === \"fixed\") && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\
8849 props = {}, curPosition = {}, curTop, curLeft;\n\
8850\n\
8851 // need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\
8852 if ( calculatePosition ) {\n\
8853 curPosition = curElem.position();\n\
8854 curTop = curPosition.top;\n\
8855 curLeft = curPosition.left;\n\
8856 } else {\n\
8857 curTop = parseFloat( curCSSTop ) || 0;\n\
8858 curLeft = parseFloat( curCSSLeft ) || 0;\n\
8859 }\n\
8860\n\
8861 if ( jQuery.isFunction( options ) ) {\n\
8862 options = options.call( elem, i, curOffset );\n\
8863 }\n\
8864\n\
8865 if (options.top != null) {\n\
8866 props.top = (options.top - curOffset.top) + curTop;\n\
8867 }\n\
8868 if (options.left != null) {\n\
8869 props.left = (options.left - curOffset.left) + curLeft;\n\
8870 }\n\
8871\n\
8872 if ( \"using\" in options ) {\n\
8873 options.using.call( elem, props );\n\
8874 } else {\n\
8875 curElem.css( props );\n\
8876 }\n\
8877 }\n\
8878};\n\
8879\n\
8880\n\
8881jQuery.fn.extend({\n\
8882 position: function() {\n\
8883 if ( !this[0] ) {\n\
8884 return null;\n\
8885 }\n\
8886\n\
8887 var elem = this[0],\n\
8888\n\
8889 // Get *real* offsetParent\n\
8890 offsetParent = this.offsetParent(),\n\
8891\n\
8892 // Get correct offsets\n\
8893 offset = this.offset(),\n\
8894 parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\
8895\n\
8896 // Subtract element margins\n\
8897 // note: when an element has margin: auto the offsetLeft and marginLeft\n\
8898 // are the same in Safari causing offset.left to incorrectly be 0\n\
8899 offset.top -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n\
8900 offset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\
8901\n\
8902 // Add offsetParent borders\n\
8903 parentOffset.top += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n\
8904 parentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\
8905\n\
8906 // Subtract the two offsets\n\
8907 return {\n\
8908 top: offset.top - parentOffset.top,\n\
8909 left: offset.left - parentOffset.left\n\
8910 };\n\
8911 },\n\
8912\n\
8913 offsetParent: function() {\n\
8914 return this.map(function() {\n\
8915 var offsetParent = this.offsetParent || document.body;\n\
8916 while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n\
8917 offsetParent = offsetParent.offsetParent;\n\
8918 }\n\
8919 return offsetParent;\n\
8920 });\n\
8921 }\n\
8922});\n\
8923\n\
8924\n\
8925// Create scrollLeft and scrollTop methods\n\
8926jQuery.each( [\"Left\", \"Top\"], function( i, name ) {\n\
8927 var method = \"scroll\" + name;\n\
8928\n\
8929 jQuery.fn[ method ] = function( val ) {\n\
8930 var elem, win;\n\
8931\n\
8932 if ( val === undefined ) {\n\
8933 elem = this[ 0 ];\n\
8934\n\
8935 if ( !elem ) {\n\
8936 return null;\n\
8937 }\n\
8938\n\
8939 win = getWindow( elem );\n\
8940\n\
8941 // Return the scroll offset\n\
8942 return win ? (\"pageXOffset\" in win) ? win[ i ? \"pageYOffset\" : \"pageXOffset\" ] :\n\
8943 jQuery.support.boxModel && win.document.documentElement[ method ] ||\n\
8944 win.document.body[ method ] :\n\
8945 elem[ method ];\n\
8946 }\n\
8947\n\
8948 // Set the scroll offset\n\
8949 return this.each(function() {\n\
8950 win = getWindow( this );\n\
8951\n\
8952 if ( win ) {\n\
8953 win.scrollTo(\n\
8954 !i ? val : jQuery( win ).scrollLeft(),\n\
8955 i ? val : jQuery( win ).scrollTop()\n\
8956 );\n\
8957\n\
8958 } else {\n\
8959 this[ method ] = val;\n\
8960 }\n\
8961 });\n\
8962 };\n\
8963});\n\
8964\n\
8965function getWindow( elem ) {\n\
8966 return jQuery.isWindow( elem ) ?\n\
8967 elem :\n\
8968 elem.nodeType === 9 ?\n\
8969 elem.defaultView || elem.parentWindow :\n\
8970 false;\n\
8971}\n\
8972\n\
8973\n\
8974\n\
8975\n\
8976// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods\n\
8977jQuery.each([ \"Height\", \"Width\" ], function( i, name ) {\n\
8978\n\
8979 var type = name.toLowerCase();\n\
8980\n\
8981 // innerHeight and innerWidth\n\
8982 jQuery.fn[ \"inner\" + name ] = function() {\n\
8983 var elem = this[0];\n\
8984 return elem && elem.style ?\n\
8985 parseFloat( jQuery.css( elem, type, \"padding\" ) ) :\n\
8986 null;\n\
8987 };\n\
8988\n\
8989 // outerHeight and outerWidth\n\
8990 jQuery.fn[ \"outer\" + name ] = function( margin ) {\n\
8991 var elem = this[0];\n\
8992 return elem && elem.style ?\n\
8993 parseFloat( jQuery.css( elem, type, margin ? \"margin\" : \"border\" ) ) :\n\
8994 null;\n\
8995 };\n\
8996\n\
8997 jQuery.fn[ type ] = function( size ) {\n\
8998 // Get window width or height\n\
8999 var elem = this[0];\n\
9000 if ( !elem ) {\n\
9001 return size == null ? null : this;\n\
9002 }\n\
9003\n\
9004 if ( jQuery.isFunction( size ) ) {\n\
9005 return this.each(function( i ) {\n\
9006 var self = jQuery( this );\n\
9007 self[ type ]( size.call( this, i, self[ type ]() ) );\n\
9008 });\n\
9009 }\n\
9010\n\
9011 if ( jQuery.isWindow( elem ) ) {\n\
9012 // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode\n\
9013 // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat\n\
9014 var docElemProp = elem.document.documentElement[ \"client\" + name ],\n\
9015 body = elem.document.body;\n\
9016 return elem.document.compatMode === \"CSS1Compat\" && docElemProp ||\n\
9017 body && body[ \"client\" + name ] || docElemProp;\n\
9018\n\
9019 // Get document width or height\n\
9020 } else if ( elem.nodeType === 9 ) {\n\
9021 // Either scroll[Width/Height] or offset[Width/Height], whichever is greater\n\
9022 return Math.max(\n\
9023 elem.documentElement[\"client\" + name],\n\
9024 elem.body[\"scroll\" + name], elem.documentElement[\"scroll\" + name],\n\
9025 elem.body[\"offset\" + name], elem.documentElement[\"offset\" + name]\n\
9026 );\n\
9027\n\
9028 // Get or set width or height on the element\n\
9029 } else if ( size === undefined ) {\n\
9030 var orig = jQuery.css( elem, type ),\n\
9031 ret = parseFloat( orig );\n\
9032\n\
9033 return jQuery.isNaN( ret ) ? orig : ret;\n\
9034\n\
9035 // Set the width or height on the element (default to pixels if value is unitless)\n\
9036 } else {\n\
9037 return this.css( type, typeof size === \"string\" ? size : size + \"px\" );\n\
9038 }\n\
9039 };\n\
9040\n\
9041});\n\
9042\n\
9043\n\
9044// Expose jQuery to the global object\n\
9045window.jQuery = window.$ = jQuery;\n\
9046})(window);\n\
9047";