Advertisement
Guest User

Untitled

a guest
Jul 29th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 184.54 KB | None | 0 0
  1. ( function( global, factory ) {
  2. "use strict";
  3. if ( typeof module === "object" && typeof module.exports === "object" ) {
  4. module.exports = global.document ?
  5. factory( global, true ) :
  6. function( w ) {
  7. if ( !w.document ) {
  8. throw new Error( "jQuery requires a window with a document" );
  9. }
  10. return factory( w );
  11. };
  12. } else {
  13. factory( global );
  14. }
  15. } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
  16. "use strict";
  17. var arr = [];
  18. var document = window.document;
  19. var getProto = Object.getPrototypeOf;
  20. var slice = arr.slice;
  21. var concat = arr.concat;
  22. var push = arr.push;
  23. var indexOf = arr.indexOf;
  24. var class2type = {};
  25. var toString = class2type.toString;
  26. var hasOwn = class2type.hasOwnProperty;
  27. var fnToString = hasOwn.toString;
  28. var ObjectFunctionString = fnToString.call( Object );
  29. var support = {};
  30. function DOMEval( code, doc ) {
  31. doc = doc || document;
  32. var script = doc.createElement( "script" );
  33. script.text = code;
  34. doc.head.appendChild( script ).parentNode.removeChild( script );
  35. }
  36. var
  37. version = "3.1.0",
  38. jQuery = function( selector, context ) {
  39. return new jQuery.fn.init( selector, context );
  40. },
  41. rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
  42. rmsPrefix = /^-ms-/,
  43. rdashAlpha = /-([a-z])/g,
  44. fcamelCase = function( all, letter ) {
  45. return letter.toUpperCase();
  46. };
  47. jQuery.fn = jQuery.prototype = {
  48. jquery: version,
  49. constructor: jQuery,
  50. length: 0,
  51. toArray: function() {
  52. return slice.call( this );
  53. },
  54. get: function( num ) {
  55. return num != null ?
  56. ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
  57. slice.call( this );
  58. },
  59. pushStack: function( elems ) {
  60. var ret = jQuery.merge( this.constructor(), elems );
  61. ret.prevObject = this;
  62. return ret;
  63. },
  64. each: function( callback ) {
  65. return jQuery.each( this, callback );
  66. },
  67. map: function( callback ) {
  68. return this.pushStack( jQuery.map( this, function( elem, i ) {
  69. return callback.call( elem, i, elem );
  70. } ) );
  71. },
  72. slice: function() {
  73. return this.pushStack( slice.apply( this, arguments ) );
  74. },
  75. first: function() {
  76. return this.eq( 0 );
  77. },
  78. last: function() {
  79. return this.eq( -1 );
  80. },
  81. eq: function( i ) {
  82. var len = this.length,
  83. j = +i + ( i < 0 ? len : 0 );
  84. return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
  85. },
  86. end: function() {
  87. return this.prevObject || this.constructor();
  88. },
  89. push: push,
  90. sort: arr.sort,
  91. splice: arr.splice
  92. };
  93. jQuery.extend = jQuery.fn.extend = function() {
  94. var options, name, src, copy, copyIsArray, clone,
  95. target = arguments[ 0 ] || {},
  96. i = 1,
  97. length = arguments.length,
  98. deep = false;
  99. if ( typeof target === "boolean" ) {
  100. deep = target;
  101. target = arguments[ i ] || {};
  102. i++;
  103. }
  104. if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
  105. target = {};
  106. }
  107. if ( i === length ) {
  108. target = this;
  109. i--;
  110. }
  111. for ( ; i < length; i++ ) {
  112. if ( ( options = arguments[ i ] ) != null ) {
  113. for ( name in options ) {
  114. src = target[ name ];
  115. copy = options[ name ];
  116. if ( target === copy ) {
  117. continue;
  118. }
  119. if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
  120. ( copyIsArray = jQuery.isArray( copy ) ) ) ) {
  121. if ( copyIsArray ) {
  122. copyIsArray = false;
  123. clone = src && jQuery.isArray( src ) ? src : [];
  124. } else {
  125. clone = src && jQuery.isPlainObject( src ) ? src : {};
  126. }
  127. target[ name ] = jQuery.extend( deep, clone, copy );
  128. } else if ( copy !== undefined ) {
  129. target[ name ] = copy;
  130. }
  131. }
  132. }
  133. }
  134. return target;
  135. };
  136. jQuery.extend( {
  137. expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
  138. isReady: true,
  139. error: function( msg ) {
  140. throw new Error( msg );
  141. },
  142. noop: function() {},
  143. isFunction: function( obj ) {
  144. return jQuery.type( obj ) === "function";
  145. },
  146. isArray: Array.isArray,
  147. isWindow: function( obj ) {
  148. return obj != null && obj === obj.window;
  149. },
  150. isNumeric: function( obj ) {
  151. var type = jQuery.type( obj );
  152. return ( type === "number" || type === "string" ) &&
  153. !isNaN( obj - parseFloat( obj ) );
  154. },
  155. isPlainObject: function( obj ) {
  156. var proto, Ctor;
  157. if ( !obj || toString.call( obj ) !== "[object Object]" ) {
  158. return false;
  159. }
  160. proto = getProto( obj );
  161. if ( !proto ) {
  162. return true;
  163. }
  164. Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
  165. return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
  166. },
  167. isEmptyObject: function( obj ) {
  168. var name;
  169. for ( name in obj ) {
  170. return false;
  171. }
  172. return true;
  173. },
  174. type: function( obj ) {
  175. if ( obj == null ) {
  176. return obj + "";
  177. }
  178. return typeof obj === "object" || typeof obj === "function" ?
  179. class2type[ toString.call( obj ) ] || "object" :
  180. typeof obj;
  181. },
  182. globalEval: function( code ) {
  183. DOMEval( code );
  184. },
  185. camelCase: function( string ) {
  186. return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
  187. },
  188. nodeName: function( elem, name ) {
  189. return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
  190. },
  191. each: function( obj, callback ) {
  192. var length, i = 0;
  193. if ( isArrayLike( obj ) ) {
  194. length = obj.length;
  195. for ( ; i < length; i++ ) {
  196. if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
  197. break;
  198. }
  199. }
  200. } else {
  201. for ( i in obj ) {
  202. if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
  203. break;
  204. }
  205. }
  206. }
  207. return obj;
  208. },
  209. trim: function( text ) {
  210. return text == null ?
  211. "" :
  212. ( text + "" ).replace( rtrim, "" );
  213. },
  214. makeArray: function( arr, results ) {
  215. var ret = results || [];
  216. if ( arr != null ) {
  217. if ( isArrayLike( Object( arr ) ) ) {
  218. jQuery.merge( ret,
  219. typeof arr === "string" ?
  220. [ arr ] : arr
  221. );
  222. } else {
  223. push.call( ret, arr );
  224. }
  225. }
  226. return ret;
  227. },
  228. inArray: function( elem, arr, i ) {
  229. return arr == null ? -1 : indexOf.call( arr, elem, i );
  230. },
  231. merge: function( first, second ) {
  232. var len = +second.length,
  233. j = 0,
  234. i = first.length;
  235. for ( ; j < len; j++ ) {
  236. first[ i++ ] = second[ j ];
  237. }
  238. first.length = i;
  239. return first;
  240. },
  241. grep: function( elems, callback, invert ) {
  242. var callbackInverse,
  243. matches = [],
  244. i = 0,
  245. length = elems.length,
  246. callbackExpect = !invert;
  247. for ( ; i < length; i++ ) {
  248. callbackInverse = !callback( elems[ i ], i );
  249. if ( callbackInverse !== callbackExpect ) {
  250. matches.push( elems[ i ] );
  251. }
  252. }
  253. return matches;
  254. },
  255. map: function( elems, callback, arg ) {
  256. var length, value,
  257. i = 0,
  258. ret = [];
  259. if ( isArrayLike( elems ) ) {
  260. length = elems.length;
  261. for ( ; i < length; i++ ) {
  262. value = callback( elems[ i ], i, arg );
  263. if ( value != null ) {
  264. ret.push( value );
  265. }
  266. }
  267. } else {
  268. for ( i in elems ) {
  269. value = callback( elems[ i ], i, arg );
  270. if ( value != null ) {
  271. ret.push( value );
  272. }
  273. }
  274. }
  275. return concat.apply( [], ret );
  276. },
  277. guid: 1,
  278. proxy: function( fn, context ) {
  279. var tmp, args, proxy;
  280. if ( typeof context === "string" ) {
  281. tmp = fn[ context ];
  282. context = fn;
  283. fn = tmp;
  284. }
  285. if ( !jQuery.isFunction( fn ) ) {
  286. return undefined;
  287. }
  288. args = slice.call( arguments, 2 );
  289. proxy = function() {
  290. return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
  291. };
  292. proxy.guid = fn.guid = fn.guid || jQuery.guid++;
  293. return proxy;
  294. },
  295. now: Date.now,
  296. support: support
  297. } );
  298. if ( typeof Symbol === "function" ) {
  299. jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
  300. }
  301. jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
  302. function( i, name ) {
  303. class2type[ "[object " + name + "]" ] = name.toLowerCase();
  304. } );
  305. function isArrayLike( obj ) {
  306. var length = !!obj && "length" in obj && obj.length,
  307. type = jQuery.type( obj );
  308. if ( type === "function" || jQuery.isWindow( obj ) ) {
  309. return false;
  310. }
  311. return type === "array" || length === 0 ||
  312. typeof length === "number" && length > 0 && ( length - 1 ) in obj;
  313. }
  314. var Sizzle =
  315. (function( window ) {
  316. var i,
  317. support,
  318. Expr,
  319. getText,
  320. isXML,
  321. tokenize,
  322. compile,
  323. select,
  324. outermostContext,
  325. sortInput,
  326. hasDuplicate,
  327. setDocument,
  328. document,
  329. docElem,
  330. documentIsHTML,
  331. rbuggyQSA,
  332. rbuggyMatches,
  333. matches,
  334. contains,
  335. expando = "sizzle" + 1 * new Date(),
  336. preferredDoc = window.document,
  337. dirruns = 0,
  338. done = 0,
  339. classCache = createCache(),
  340. tokenCache = createCache(),
  341. compilerCache = createCache(),
  342. sortOrder = function( a, b ) {
  343. if ( a === b ) {
  344. hasDuplicate = true;
  345. }
  346. return 0;
  347. },
  348. hasOwn = ({}).hasOwnProperty,
  349. arr = [],
  350. pop = arr.pop,
  351. push_native = arr.push,
  352. push = arr.push,
  353. slice = arr.slice,
  354. indexOf = function( list, elem ) {
  355. var i = 0,
  356. len = list.length;
  357. for ( ; i < len; i++ ) {
  358. if ( list[i] === elem ) {
  359. return i;
  360. }
  361. }
  362. return -1;
  363. },
  364. booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
  365. whitespace = "[\\x20\\t\\r\\n\\f]",
  366. identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
  367. attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
  368. "*([*^$|!~]?=)" + whitespace +
  369. "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
  370. "*\\]",
  371. pseudos = ":(" + identifier + ")(?:\\((" +
  372. "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
  373. "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
  374. ".*" +
  375. ")\\)|)",
  376. rwhitespace = new RegExp( whitespace + "+", "g" ),
  377. rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
  378. rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
  379. rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
  380. rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
  381. rpseudo = new RegExp( pseudos ),
  382. ridentifier = new RegExp( "^" + identifier + "$" ),
  383. matchExpr = {
  384. "ID": new RegExp( "^#(" + identifier + ")" ),
  385. "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
  386. "TAG": new RegExp( "^(" + identifier + "|[*])" ),
  387. "ATTR": new RegExp( "^" + attributes ),
  388. "PSEUDO": new RegExp( "^" + pseudos ),
  389. "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
  390. "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
  391. "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
  392. "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
  393. "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
  394. whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
  395. },
  396. rinputs = /^(?:input|select|textarea|button)$/i,
  397. rheader = /^h\d$/i,
  398. rnative = /^[^{]+\{\s*\[native \w/,
  399. rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
  400. rsibling = /[+~]/,
  401. runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
  402. funescape = function( _, escaped, escapedWhitespace ) {
  403. var high = "0x" + escaped - 0x10000;
  404. return high !== high || escapedWhitespace ?
  405. escaped :
  406. high < 0 ?
  407. String.fromCharCode( high + 0x10000 ) :
  408. String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
  409. },
  410. rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
  411. fcssescape = function( ch, asCodePoint ) {
  412. if ( asCodePoint ) {
  413. if ( ch === "\0" ) {
  414. return "\uFFFD";
  415. }
  416. return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
  417. }
  418. return "\\" + ch;
  419. },
  420. unloadHandler = function() {
  421. setDocument();
  422. },
  423. disabledAncestor = addCombinator(
  424. function( elem ) {
  425. return elem.disabled === true;
  426. },
  427. { dir: "parentNode", next: "legend" }
  428. );
  429. try {
  430. push.apply(
  431. (arr = slice.call( preferredDoc.childNodes )),
  432. preferredDoc.childNodes
  433. );
  434. arr[ preferredDoc.childNodes.length ].nodeType;
  435. } catch ( e ) {
  436. push = { apply: arr.length ?
  437. function( target, els ) {
  438. push_native.apply( target, slice.call(els) );
  439. } :
  440. function( target, els ) {
  441. var j = target.length,
  442. i = 0;
  443. while ( (target[j++] = els[i++]) ) {}
  444. target.length = j - 1;
  445. }
  446. };
  447. }
  448. function Sizzle( selector, context, results, seed ) {
  449. var m, i, elem, nid, match, groups, newSelector,
  450. newContext = context && context.ownerDocument,
  451. nodeType = context ? context.nodeType : 9;
  452. results = results || [];
  453. if ( typeof selector !== "string" || !selector ||
  454. nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
  455. return results;
  456. }
  457. if ( !seed ) {
  458. if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
  459. setDocument( context );
  460. }
  461. context = context || document;
  462. if ( documentIsHTML ) {
  463. if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
  464. if ( (m = match[1]) ) {
  465. if ( nodeType === 9 ) {
  466. if ( (elem = context.getElementById( m )) ) {
  467. if ( elem.id === m ) {
  468. results.push( elem );
  469. return results;
  470. }
  471. } else {
  472. return results;
  473. }
  474. } else {
  475. if ( newContext && (elem = newContext.getElementById( m )) &&
  476. contains( context, elem ) &&
  477. elem.id === m ) {
  478. results.push( elem );
  479. return results;
  480. }
  481. }
  482. } else if ( match[2] ) {
  483. push.apply( results, context.getElementsByTagName( selector ) );
  484. return results;
  485. } else if ( (m = match[3]) && support.getElementsByClassName &&
  486. context.getElementsByClassName ) {
  487. push.apply( results, context.getElementsByClassName( m ) );
  488. return results;
  489. }
  490. }
  491. if ( support.qsa &&
  492. !compilerCache[ selector + " " ] &&
  493. (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
  494. if ( nodeType !== 1 ) {
  495. newContext = context;
  496. newSelector = selector;
  497. } else if ( context.nodeName.toLowerCase() !== "object" ) {
  498. if ( (nid = context.getAttribute( "id" )) ) {
  499. nid = nid.replace( rcssescape, fcssescape );
  500. } else {
  501. context.setAttribute( "id", (nid = expando) );
  502. }
  503. groups = tokenize( selector );
  504. i = groups.length;
  505. while ( i-- ) {
  506. groups[i] = "#" + nid + " " + toSelector( groups[i] );
  507. }
  508. newSelector = groups.join( "," );
  509. newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
  510. context;
  511. }
  512. if ( newSelector ) {
  513. try {
  514. push.apply( results,
  515. newContext.querySelectorAll( newSelector )
  516. );
  517. return results;
  518. } catch ( qsaError ) {
  519. } finally {
  520. if ( nid === expando ) {
  521. context.removeAttribute( "id" );
  522. }
  523. }
  524. }
  525. }
  526. }
  527. }
  528. return select( selector.replace( rtrim, "$1" ), context, results, seed );
  529. }
  530. function createCache() {
  531. var keys = [];
  532. function cache( key, value ) {
  533. if ( keys.push( key + " " ) > Expr.cacheLength ) {
  534. delete cache[ keys.shift() ];
  535. }
  536. return (cache[ key + " " ] = value);
  537. }
  538. return cache;
  539. }
  540. function markFunction( fn ) {
  541. fn[ expando ] = true;
  542. return fn;
  543. }
  544. function assert( fn ) {
  545. var el = document.createElement("fieldset");
  546. try {
  547. return !!fn( el );
  548. } catch (e) {
  549. return false;
  550. } finally {
  551. if ( el.parentNode ) {
  552. el.parentNode.removeChild( el );
  553. }
  554. el = null;
  555. }
  556. }
  557. function addHandle( attrs, handler ) {
  558. var arr = attrs.split("|"),
  559. i = arr.length;
  560. while ( i-- ) {
  561. Expr.attrHandle[ arr[i] ] = handler;
  562. }
  563. }
  564. function siblingCheck( a, b ) {
  565. var cur = b && a,
  566. diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
  567. a.sourceIndex - b.sourceIndex;
  568. if ( diff ) {
  569. return diff;
  570. }
  571. if ( cur ) {
  572. while ( (cur = cur.nextSibling) ) {
  573. if ( cur === b ) {
  574. return -1;
  575. }
  576. }
  577. }
  578. return a ? 1 : -1;
  579. }
  580. function createInputPseudo( type ) {
  581. return function( elem ) {
  582. var name = elem.nodeName.toLowerCase();
  583. return name === "input" && elem.type === type;
  584. };
  585. }
  586. function createButtonPseudo( type ) {
  587. return function( elem ) {
  588. var name = elem.nodeName.toLowerCase();
  589. return (name === "input" || name === "button") && elem.type === type;
  590. };
  591. }
  592. function createDisabledPseudo( disabled ) {
  593. return function( elem ) {
  594. return "label" in elem && elem.disabled === disabled ||
  595. "form" in elem && elem.disabled === disabled ||
  596. "form" in elem && elem.disabled === false && (
  597. elem.isDisabled === disabled ||
  598. elem.isDisabled !== !disabled &&
  599. ("label" in elem || !disabledAncestor( elem )) !== disabled
  600. );
  601. };
  602. }
  603. function createPositionalPseudo( fn ) {
  604. return markFunction(function( argument ) {
  605. argument = +argument;
  606. return markFunction(function( seed, matches ) {
  607. var j,
  608. matchIndexes = fn( [], seed.length, argument ),
  609. i = matchIndexes.length;
  610. while ( i-- ) {
  611. if ( seed[ (j = matchIndexes[i]) ] ) {
  612. seed[j] = !(matches[j] = seed[j]);
  613. }
  614. }
  615. });
  616. });
  617. }
  618. function testContext( context ) {
  619. return context && typeof context.getElementsByTagName !== "undefined" && context;
  620. }
  621. support = Sizzle.support = {};
  622. isXML = Sizzle.isXML = function( elem ) {
  623. var documentElement = elem && (elem.ownerDocument || elem).documentElement;
  624. return documentElement ? documentElement.nodeName !== "HTML" : false;
  625. };
  626. setDocument = Sizzle.setDocument = function( node ) {
  627. var hasCompare, subWindow,
  628. doc = node ? node.ownerDocument || node : preferredDoc;
  629. if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
  630. return document;
  631. }
  632. document = doc;
  633. docElem = document.documentElement;
  634. documentIsHTML = !isXML( document );
  635. if ( preferredDoc !== document &&
  636. (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
  637. if ( subWindow.addEventListener ) {
  638. subWindow.addEventListener( "unload", unloadHandler, false );
  639. } else if ( subWindow.attachEvent ) {
  640. subWindow.attachEvent( "onunload", unloadHandler );
  641. }
  642. }
  643. /* Attributes
  644. ---------------------------------------------------------------------- */
  645. support.attributes = assert(function( el ) {
  646. el.className = "i";
  647. return !el.getAttribute("className");
  648. });
  649. /* getElement(s)By*
  650. ---------------------------------------------------------------------- */
  651. support.getElementsByTagName = assert(function( el ) {
  652. el.appendChild( document.createComment("") );
  653. return !el.getElementsByTagName("*").length;
  654. });
  655. support.getElementsByClassName = rnative.test( document.getElementsByClassName );
  656. support.getById = assert(function( el ) {
  657. docElem.appendChild( el ).id = expando;
  658. return !document.getElementsByName || !document.getElementsByName( expando ).length;
  659. });
  660. if ( support.getById ) {
  661. Expr.find["ID"] = function( id, context ) {
  662. if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
  663. var m = context.getElementById( id );
  664. return m ? [ m ] : [];
  665. }
  666. };
  667. Expr.filter["ID"] = function( id ) {
  668. var attrId = id.replace( runescape, funescape );
  669. return function( elem ) {
  670. return elem.getAttribute("id") === attrId;
  671. };
  672. };
  673. } else {
  674. delete Expr.find["ID"];
  675. Expr.filter["ID"] = function( id ) {
  676. var attrId = id.replace( runescape, funescape );
  677. return function( elem ) {
  678. var node = typeof elem.getAttributeNode !== "undefined" &&
  679. elem.getAttributeNode("id");
  680. return node && node.value === attrId;
  681. };
  682. };
  683. }
  684. Expr.find["TAG"] = support.getElementsByTagName ?
  685. function( tag, context ) {
  686. if ( typeof context.getElementsByTagName !== "undefined" ) {
  687. return context.getElementsByTagName( tag );
  688. } else if ( support.qsa ) {
  689. return context.querySelectorAll( tag );
  690. }
  691. } :
  692. function( tag, context ) {
  693. var elem,
  694. tmp = [],
  695. i = 0,
  696. results = context.getElementsByTagName( tag );
  697. if ( tag === "*" ) {
  698. while ( (elem = results[i++]) ) {
  699. if ( elem.nodeType === 1 ) {
  700. tmp.push( elem );
  701. }
  702. }
  703. return tmp;
  704. }
  705. return results;
  706. };
  707. Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
  708. if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
  709. return context.getElementsByClassName( className );
  710. }
  711. };
  712. /* QSA/matchesSelector
  713. ---------------------------------------------------------------------- */
  714. rbuggyMatches = [];
  715. rbuggyQSA = [];
  716. if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
  717. assert(function( el ) {
  718. docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
  719. "<select id='" + expando + "-\r\\' msallowcapture=''>" +
  720. "<option selected=''></option></select>";
  721. if ( el.querySelectorAll("[msallowcapture^='']").length ) {
  722. rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
  723. }
  724. if ( !el.querySelectorAll("[selected]").length ) {
  725. rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
  726. }
  727. if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
  728. rbuggyQSA.push("~=");
  729. }
  730. if ( !el.querySelectorAll(":checked").length ) {
  731. rbuggyQSA.push(":checked");
  732. }
  733. if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
  734. rbuggyQSA.push(".#.+[+~]");
  735. }
  736. });
  737. assert(function( el ) {
  738. el.innerHTML = "<a href='' disabled='disabled'></a>" +
  739. "<select disabled='disabled'><option/></select>";
  740. var input = document.createElement("input");
  741. input.setAttribute( "type", "hidden" );
  742. el.appendChild( input ).setAttribute( "name", "D" );
  743. if ( el.querySelectorAll("[name=d]").length ) {
  744. rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
  745. }
  746. if ( el.querySelectorAll(":enabled").length !== 2 ) {
  747. rbuggyQSA.push( ":enabled", ":disabled" );
  748. }
  749. docElem.appendChild( el ).disabled = true;
  750. if ( el.querySelectorAll(":disabled").length !== 2 ) {
  751. rbuggyQSA.push( ":enabled", ":disabled" );
  752. }
  753. el.querySelectorAll("*,:x");
  754. rbuggyQSA.push(",.*:");
  755. });
  756. }
  757. if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
  758. docElem.webkitMatchesSelector ||
  759. docElem.mozMatchesSelector ||
  760. docElem.oMatchesSelector ||
  761. docElem.msMatchesSelector) )) ) {
  762. assert(function( el ) {
  763. support.disconnectedMatch = matches.call( el, "*" );
  764. matches.call( el, "[s!='']:x" );
  765. rbuggyMatches.push( "!=", pseudos );
  766. });
  767. }
  768. rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
  769. rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
  770. /* Contains
  771. ---------------------------------------------------------------------- */
  772. hasCompare = rnative.test( docElem.compareDocumentPosition );
  773. contains = hasCompare || rnative.test( docElem.contains ) ?
  774. function( a, b ) {
  775. var adown = a.nodeType === 9 ? a.documentElement : a,
  776. bup = b && b.parentNode;
  777. return a === bup || !!( bup && bup.nodeType === 1 && (
  778. adown.contains ?
  779. adown.contains( bup ) :
  780. a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
  781. ));
  782. } :
  783. function( a, b ) {
  784. if ( b ) {
  785. while ( (b = b.parentNode) ) {
  786. if ( b === a ) {
  787. return true;
  788. }
  789. }
  790. }
  791. return false;
  792. };
  793. /* Sorting
  794. ---------------------------------------------------------------------- */
  795. sortOrder = hasCompare ?
  796. function( a, b ) {
  797. if ( a === b ) {
  798. hasDuplicate = true;
  799. return 0;
  800. }
  801. var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
  802. if ( compare ) {
  803. return compare;
  804. }
  805. compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
  806. a.compareDocumentPosition( b ) :
  807. 1;
  808. if ( compare & 1 ||
  809. (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
  810. if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
  811. return -1;
  812. }
  813. if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
  814. return 1;
  815. }
  816. return sortInput ?
  817. ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
  818. 0;
  819. }
  820. return compare & 4 ? -1 : 1;
  821. } :
  822. function( a, b ) {
  823. if ( a === b ) {
  824. hasDuplicate = true;
  825. return 0;
  826. }
  827. var cur,
  828. i = 0,
  829. aup = a.parentNode,
  830. bup = b.parentNode,
  831. ap = [ a ],
  832. bp = [ b ];
  833. if ( !aup || !bup ) {
  834. return a === document ? -1 :
  835. b === document ? 1 :
  836. aup ? -1 :
  837. bup ? 1 :
  838. sortInput ?
  839. ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
  840. 0;
  841. } else if ( aup === bup ) {
  842. return siblingCheck( a, b );
  843. }
  844. cur = a;
  845. while ( (cur = cur.parentNode) ) {
  846. ap.unshift( cur );
  847. }
  848. cur = b;
  849. while ( (cur = cur.parentNode) ) {
  850. bp.unshift( cur );
  851. }
  852. while ( ap[i] === bp[i] ) {
  853. i++;
  854. }
  855. return i ?
  856. siblingCheck( ap[i], bp[i] ) :
  857. ap[i] === preferredDoc ? -1 :
  858. bp[i] === preferredDoc ? 1 :
  859. 0;
  860. };
  861. return document;
  862. };
  863. Sizzle.matches = function( expr, elements ) {
  864. return Sizzle( expr, null, null, elements );
  865. };
  866. Sizzle.matchesSelector = function( elem, expr ) {
  867. if ( ( elem.ownerDocument || elem ) !== document ) {
  868. setDocument( elem );
  869. }
  870. expr = expr.replace( rattributeQuotes, "='$1']" );
  871. if ( support.matchesSelector && documentIsHTML &&
  872. !compilerCache[ expr + " " ] &&
  873. ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
  874. ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
  875. try {
  876. var ret = matches.call( elem, expr );
  877. if ( ret || support.disconnectedMatch ||
  878. elem.document && elem.document.nodeType !== 11 ) {
  879. return ret;
  880. }
  881. } catch (e) {}
  882. }
  883. return Sizzle( expr, document, null, [ elem ] ).length > 0;
  884. };
  885. Sizzle.contains = function( context, elem ) {
  886. if ( ( context.ownerDocument || context ) !== document ) {
  887. setDocument( context );
  888. }
  889. return contains( context, elem );
  890. };
  891. Sizzle.attr = function( elem, name ) {
  892. if ( ( elem.ownerDocument || elem ) !== document ) {
  893. setDocument( elem );
  894. }
  895. var fn = Expr.attrHandle[ name.toLowerCase() ],
  896. val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
  897. fn( elem, name, !documentIsHTML ) :
  898. undefined;
  899. return val !== undefined ?
  900. val :
  901. support.attributes || !documentIsHTML ?
  902. elem.getAttribute( name ) :
  903. (val = elem.getAttributeNode(name)) && val.specified ?
  904. val.value :
  905. null;
  906. };
  907. Sizzle.escape = function( sel ) {
  908. return (sel + "").replace( rcssescape, fcssescape );
  909. };
  910. Sizzle.error = function( msg ) {
  911. throw new Error( "Syntax error, unrecognized expression: " + msg );
  912. };
  913. Sizzle.uniqueSort = function( results ) {
  914. var elem,
  915. duplicates = [],
  916. j = 0,
  917. i = 0;
  918. hasDuplicate = !support.detectDuplicates;
  919. sortInput = !support.sortStable && results.slice( 0 );
  920. results.sort( sortOrder );
  921. if ( hasDuplicate ) {
  922. while ( (elem = results[i++]) ) {
  923. if ( elem === results[ i ] ) {
  924. j = duplicates.push( i );
  925. }
  926. }
  927. while ( j-- ) {
  928. results.splice( duplicates[ j ], 1 );
  929. }
  930. }
  931. sortInput = null;
  932. return results;
  933. };
  934. getText = Sizzle.getText = function( elem ) {
  935. var node,
  936. ret = "",
  937. i = 0,
  938. nodeType = elem.nodeType;
  939. if ( !nodeType ) {
  940. while ( (node = elem[i++]) ) {
  941. ret += getText( node );
  942. }
  943. } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
  944. if ( typeof elem.textContent === "string" ) {
  945. return elem.textContent;
  946. } else {
  947. for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
  948. ret += getText( elem );
  949. }
  950. }
  951. } else if ( nodeType === 3 || nodeType === 4 ) {
  952. return elem.nodeValue;
  953. }
  954. return ret;
  955. };
  956. Expr = Sizzle.selectors = {
  957. cacheLength: 50,
  958. createPseudo: markFunction,
  959. match: matchExpr,
  960. attrHandle: {},
  961. find: {},
  962. relative: {
  963. ">": { dir: "parentNode", first: true },
  964. " ": { dir: "parentNode" },
  965. "+": { dir: "previousSibling", first: true },
  966. "~": { dir: "previousSibling" }
  967. },
  968. preFilter: {
  969. "ATTR": function( match ) {
  970. match[1] = match[1].replace( runescape, funescape );
  971. match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
  972. if ( match[2] === "~=" ) {
  973. match[3] = " " + match[3] + " ";
  974. }
  975. return match.slice( 0, 4 );
  976. },
  977. "CHILD": function( match ) {
  978. /* matches from matchExpr["CHILD"]
  979. 1 type (only|nth|...)
  980. 2 what (child|of-type)
  981. 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
  982. 4 xn-component of xn+y argument ([+-]?\d*n|)
  983. 5 sign of xn-component
  984. 6 x of xn-component
  985. 7 sign of y-component
  986. 8 y of y-component
  987. */
  988. match[1] = match[1].toLowerCase();
  989. if ( match[1].slice( 0, 3 ) === "nth" ) {
  990. if ( !match[3] ) {
  991. Sizzle.error( match[0] );
  992. }
  993. match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
  994. match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
  995. } else if ( match[3] ) {
  996. Sizzle.error( match[0] );
  997. }
  998. return match;
  999. },
  1000. "PSEUDO": function( match ) {
  1001. var excess,
  1002. unquoted = !match[6] && match[2];
  1003. if ( matchExpr["CHILD"].test( match[0] ) ) {
  1004. return null;
  1005. }
  1006. if ( match[3] ) {
  1007. match[2] = match[4] || match[5] || "";
  1008. } else if ( unquoted && rpseudo.test( unquoted ) &&
  1009. (excess = tokenize( unquoted, true )) &&
  1010. (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
  1011. match[0] = match[0].slice( 0, excess );
  1012. match[2] = unquoted.slice( 0, excess );
  1013. }
  1014. return match.slice( 0, 3 );
  1015. }
  1016. },
  1017. filter: {
  1018. "TAG": function( nodeNameSelector ) {
  1019. var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
  1020. return nodeNameSelector === "*" ?
  1021. function() { return true; } :
  1022. function( elem ) {
  1023. return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
  1024. };
  1025. },
  1026. "CLASS": function( className ) {
  1027. var pattern = classCache[ className + " " ];
  1028. return pattern ||
  1029. (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
  1030. classCache( className, function( elem ) {
  1031. return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
  1032. });
  1033. },
  1034. "ATTR": function( name, operator, check ) {
  1035. return function( elem ) {
  1036. var result = Sizzle.attr( elem, name );
  1037. if ( result == null ) {
  1038. return operator === "!=";
  1039. }
  1040. if ( !operator ) {
  1041. return true;
  1042. }
  1043. result += "";
  1044. return operator === "=" ? result === check :
  1045. operator === "!=" ? result !== check :
  1046. operator === "^=" ? check && result.indexOf( check ) === 0 :
  1047. operator === "*=" ? check && result.indexOf( check ) > -1 :
  1048. operator === "$=" ? check && result.slice( -check.length ) === check :
  1049. operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
  1050. operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
  1051. false;
  1052. };
  1053. },
  1054. "CHILD": function( type, what, argument, first, last ) {
  1055. var simple = type.slice( 0, 3 ) !== "nth",
  1056. forward = type.slice( -4 ) !== "last",
  1057. ofType = what === "of-type";
  1058. return first === 1 && last === 0 ?
  1059. function( elem ) {
  1060. return !!elem.parentNode;
  1061. } :
  1062. function( elem, context, xml ) {
  1063. var cache, uniqueCache, outerCache, node, nodeIndex, start,
  1064. dir = simple !== forward ? "nextSibling" : "previousSibling",
  1065. parent = elem.parentNode,
  1066. name = ofType && elem.nodeName.toLowerCase(),
  1067. useCache = !xml && !ofType,
  1068. diff = false;
  1069. if ( parent ) {
  1070. if ( simple ) {
  1071. while ( dir ) {
  1072. node = elem;
  1073. while ( (node = node[ dir ]) ) {
  1074. if ( ofType ?
  1075. node.nodeName.toLowerCase() === name :
  1076. node.nodeType === 1 ) {
  1077. return false;
  1078. }
  1079. }
  1080. start = dir = type === "only" && !start && "nextSibling";
  1081. }
  1082. return true;
  1083. }
  1084. start = [ forward ? parent.firstChild : parent.lastChild ];
  1085. if ( forward && useCache ) {
  1086. node = parent;
  1087. outerCache = node[ expando ] || (node[ expando ] = {});
  1088. uniqueCache = outerCache[ node.uniqueID ] ||
  1089. (outerCache[ node.uniqueID ] = {});
  1090. cache = uniqueCache[ type ] || [];
  1091. nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
  1092. diff = nodeIndex && cache[ 2 ];
  1093. node = nodeIndex && parent.childNodes[ nodeIndex ];
  1094. while ( (node = ++nodeIndex && node && node[ dir ] ||
  1095. (diff = nodeIndex = 0) || start.pop()) ) {
  1096. if ( node.nodeType === 1 && ++diff && node === elem ) {
  1097. uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
  1098. break;
  1099. }
  1100. }
  1101. } else {
  1102. if ( useCache ) {
  1103. node = elem;
  1104. outerCache = node[ expando ] || (node[ expando ] = {});
  1105. uniqueCache = outerCache[ node.uniqueID ] ||
  1106. (outerCache[ node.uniqueID ] = {});
  1107. cache = uniqueCache[ type ] || [];
  1108. nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
  1109. diff = nodeIndex;
  1110. }
  1111. if ( diff === false ) {
  1112. while ( (node = ++nodeIndex && node && node[ dir ] ||
  1113. (diff = nodeIndex = 0) || start.pop()) ) {
  1114. if ( ( ofType ?
  1115. node.nodeName.toLowerCase() === name :
  1116. node.nodeType === 1 ) &&
  1117. ++diff ) {
  1118. if ( useCache ) {
  1119. outerCache = node[ expando ] || (node[ expando ] = {});
  1120. uniqueCache = outerCache[ node.uniqueID ] ||
  1121. (outerCache[ node.uniqueID ] = {});
  1122. uniqueCache[ type ] = [ dirruns, diff ];
  1123. }
  1124. if ( node === elem ) {
  1125. break;
  1126. }
  1127. }
  1128. }
  1129. }
  1130. }
  1131. diff -= last;
  1132. return diff === first || ( diff % first === 0 && diff / first >= 0 );
  1133. }
  1134. };
  1135. },
  1136. "PSEUDO": function( pseudo, argument ) {
  1137. var args,
  1138. fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
  1139. Sizzle.error( "unsupported pseudo: " + pseudo );
  1140. if ( fn[ expando ] ) {
  1141. return fn( argument );
  1142. }
  1143. if ( fn.length > 1 ) {
  1144. args = [ pseudo, pseudo, "", argument ];
  1145. return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
  1146. markFunction(function( seed, matches ) {
  1147. var idx,
  1148. matched = fn( seed, argument ),
  1149. i = matched.length;
  1150. while ( i-- ) {
  1151. idx = indexOf( seed, matched[i] );
  1152. seed[ idx ] = !( matches[ idx ] = matched[i] );
  1153. }
  1154. }) :
  1155. function( elem ) {
  1156. return fn( elem, 0, args );
  1157. };
  1158. }
  1159. return fn;
  1160. }
  1161. },
  1162. pseudos: {
  1163. "not": markFunction(function( selector ) {
  1164. var input = [],
  1165. results = [],
  1166. matcher = compile( selector.replace( rtrim, "$1" ) );
  1167. return matcher[ expando ] ?
  1168. markFunction(function( seed, matches, context, xml ) {
  1169. var elem,
  1170. unmatched = matcher( seed, null, xml, [] ),
  1171. i = seed.length;
  1172. while ( i-- ) {
  1173. if ( (elem = unmatched[i]) ) {
  1174. seed[i] = !(matches[i] = elem);
  1175. }
  1176. }
  1177. }) :
  1178. function( elem, context, xml ) {
  1179. input[0] = elem;
  1180. matcher( input, null, xml, results );
  1181. input[0] = null;
  1182. return !results.pop();
  1183. };
  1184. }),
  1185. "has": markFunction(function( selector ) {
  1186. return function( elem ) {
  1187. return Sizzle( selector, elem ).length > 0;
  1188. };
  1189. }),
  1190. "contains": markFunction(function( text ) {
  1191. text = text.replace( runescape, funescape );
  1192. return function( elem ) {
  1193. return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
  1194. };
  1195. }),
  1196. "lang": markFunction( function( lang ) {
  1197. if ( !ridentifier.test(lang || "") ) {
  1198. Sizzle.error( "unsupported lang: " + lang );
  1199. }
  1200. lang = lang.replace( runescape, funescape ).toLowerCase();
  1201. return function( elem ) {
  1202. var elemLang;
  1203. do {
  1204. if ( (elemLang = documentIsHTML ?
  1205. elem.lang :
  1206. elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
  1207. elemLang = elemLang.toLowerCase();
  1208. return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
  1209. }
  1210. } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
  1211. return false;
  1212. };
  1213. }),
  1214. "target": function( elem ) {
  1215. var hash = window.location && window.location.hash;
  1216. return hash && hash.slice( 1 ) === elem.id;
  1217. },
  1218. "root": function( elem ) {
  1219. return elem === docElem;
  1220. },
  1221. "focus": function( elem ) {
  1222. return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
  1223. },
  1224. "enabled": createDisabledPseudo( false ),
  1225. "disabled": createDisabledPseudo( true ),
  1226. "checked": function( elem ) {
  1227. var nodeName = elem.nodeName.toLowerCase();
  1228. return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
  1229. },
  1230. "selected": function( elem ) {
  1231. if ( elem.parentNode ) {
  1232. elem.parentNode.selectedIndex;
  1233. }
  1234. return elem.selected === true;
  1235. },
  1236. "empty": function( elem ) {
  1237. for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
  1238. if ( elem.nodeType < 6 ) {
  1239. return false;
  1240. }
  1241. }
  1242. return true;
  1243. },
  1244. "parent": function( elem ) {
  1245. return !Expr.pseudos["empty"]( elem );
  1246. },
  1247. "header": function( elem ) {
  1248. return rheader.test( elem.nodeName );
  1249. },
  1250. "input": function( elem ) {
  1251. return rinputs.test( elem.nodeName );
  1252. },
  1253. "button": function( elem ) {
  1254. var name = elem.nodeName.toLowerCase();
  1255. return name === "input" && elem.type === "button" || name === "button";
  1256. },
  1257. "text": function( elem ) {
  1258. var attr;
  1259. return elem.nodeName.toLowerCase() === "input" &&
  1260. elem.type === "text" &&
  1261. ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
  1262. },
  1263. "first": createPositionalPseudo(function() {
  1264. return [ 0 ];
  1265. }),
  1266. "last": createPositionalPseudo(function( matchIndexes, length ) {
  1267. return [ length - 1 ];
  1268. }),
  1269. "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
  1270. return [ argument < 0 ? argument + length : argument ];
  1271. }),
  1272. "even": createPositionalPseudo(function( matchIndexes, length ) {
  1273. var i = 0;
  1274. for ( ; i < length; i += 2 ) {
  1275. matchIndexes.push( i );
  1276. }
  1277. return matchIndexes;
  1278. }),
  1279. "odd": createPositionalPseudo(function( matchIndexes, length ) {
  1280. var i = 1;
  1281. for ( ; i < length; i += 2 ) {
  1282. matchIndexes.push( i );
  1283. }
  1284. return matchIndexes;
  1285. }),
  1286. "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
  1287. var i = argument < 0 ? argument + length : argument;
  1288. for ( ; --i >= 0; ) {
  1289. matchIndexes.push( i );
  1290. }
  1291. return matchIndexes;
  1292. }),
  1293. "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
  1294. var i = argument < 0 ? argument + length : argument;
  1295. for ( ; ++i < length; ) {
  1296. matchIndexes.push( i );
  1297. }
  1298. return matchIndexes;
  1299. })
  1300. }
  1301. };
  1302. Expr.pseudos["nth"] = Expr.pseudos["eq"];
  1303. for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
  1304. Expr.pseudos[ i ] = createInputPseudo( i );
  1305. }
  1306. for ( i in { submit: true, reset: true } ) {
  1307. Expr.pseudos[ i ] = createButtonPseudo( i );
  1308. }
  1309. function setFilters() {}
  1310. setFilters.prototype = Expr.filters = Expr.pseudos;
  1311. Expr.setFilters = new setFilters();
  1312. tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
  1313. var matched, match, tokens, type,
  1314. soFar, groups, preFilters,
  1315. cached = tokenCache[ selector + " " ];
  1316. if ( cached ) {
  1317. return parseOnly ? 0 : cached.slice( 0 );
  1318. }
  1319. soFar = selector;
  1320. groups = [];
  1321. preFilters = Expr.preFilter;
  1322. while ( soFar ) {
  1323. if ( !matched || (match = rcomma.exec( soFar )) ) {
  1324. if ( match ) {
  1325. soFar = soFar.slice( match[0].length ) || soFar;
  1326. }
  1327. groups.push( (tokens = []) );
  1328. }
  1329. matched = false;
  1330. if ( (match = rcombinators.exec( soFar )) ) {
  1331. matched = match.shift();
  1332. tokens.push({
  1333. value: matched,
  1334. type: match[0].replace( rtrim, " " )
  1335. });
  1336. soFar = soFar.slice( matched.length );
  1337. }
  1338. for ( type in Expr.filter ) {
  1339. if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
  1340. (match = preFilters[ type ]( match ))) ) {
  1341. matched = match.shift();
  1342. tokens.push({
  1343. value: matched,
  1344. type: type,
  1345. matches: match
  1346. });
  1347. soFar = soFar.slice( matched.length );
  1348. }
  1349. }
  1350. if ( !matched ) {
  1351. break;
  1352. }
  1353. }
  1354. return parseOnly ?
  1355. soFar.length :
  1356. soFar ?
  1357. Sizzle.error( selector ) :
  1358. tokenCache( selector, groups ).slice( 0 );
  1359. };
  1360. function toSelector( tokens ) {
  1361. var i = 0,
  1362. len = tokens.length,
  1363. selector = "";
  1364. for ( ; i < len; i++ ) {
  1365. selector += tokens[i].value;
  1366. }
  1367. return selector;
  1368. }
  1369. function addCombinator( matcher, combinator, base ) {
  1370. var dir = combinator.dir,
  1371. skip = combinator.next,
  1372. key = skip || dir,
  1373. checkNonElements = base && key === "parentNode",
  1374. doneName = done++;
  1375. return combinator.first ?
  1376. function( elem, context, xml ) {
  1377. while ( (elem = elem[ dir ]) ) {
  1378. if ( elem.nodeType === 1 || checkNonElements ) {
  1379. return matcher( elem, context, xml );
  1380. }
  1381. }
  1382. } :
  1383. function( elem, context, xml ) {
  1384. var oldCache, uniqueCache, outerCache,
  1385. newCache = [ dirruns, doneName ];
  1386. if ( xml ) {
  1387. while ( (elem = elem[ dir ]) ) {
  1388. if ( elem.nodeType === 1 || checkNonElements ) {
  1389. if ( matcher( elem, context, xml ) ) {
  1390. return true;
  1391. }
  1392. }
  1393. }
  1394. } else {
  1395. while ( (elem = elem[ dir ]) ) {
  1396. if ( elem.nodeType === 1 || checkNonElements ) {
  1397. outerCache = elem[ expando ] || (elem[ expando ] = {});
  1398. uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
  1399. if ( skip && skip === elem.nodeName.toLowerCase() ) {
  1400. elem = elem[ dir ] || elem;
  1401. } else if ( (oldCache = uniqueCache[ key ]) &&
  1402. oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
  1403. return (newCache[ 2 ] = oldCache[ 2 ]);
  1404. } else {
  1405. uniqueCache[ key ] = newCache;
  1406. if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
  1407. return true;
  1408. }
  1409. }
  1410. }
  1411. }
  1412. }
  1413. };
  1414. }
  1415. function elementMatcher( matchers ) {
  1416. return matchers.length > 1 ?
  1417. function( elem, context, xml ) {
  1418. var i = matchers.length;
  1419. while ( i-- ) {
  1420. if ( !matchers[i]( elem, context, xml ) ) {
  1421. return false;
  1422. }
  1423. }
  1424. return true;
  1425. } :
  1426. matchers[0];
  1427. }
  1428. function multipleContexts( selector, contexts, results ) {
  1429. var i = 0,
  1430. len = contexts.length;
  1431. for ( ; i < len; i++ ) {
  1432. Sizzle( selector, contexts[i], results );
  1433. }
  1434. return results;
  1435. }
  1436. function condense( unmatched, map, filter, context, xml ) {
  1437. var elem,
  1438. newUnmatched = [],
  1439. i = 0,
  1440. len = unmatched.length,
  1441. mapped = map != null;
  1442. for ( ; i < len; i++ ) {
  1443. if ( (elem = unmatched[i]) ) {
  1444. if ( !filter || filter( elem, context, xml ) ) {
  1445. newUnmatched.push( elem );
  1446. if ( mapped ) {
  1447. map.push( i );
  1448. }
  1449. }
  1450. }
  1451. }
  1452. return newUnmatched;
  1453. }
  1454. function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
  1455. if ( postFilter && !postFilter[ expando ] ) {
  1456. postFilter = setMatcher( postFilter );
  1457. }
  1458. if ( postFinder && !postFinder[ expando ] ) {
  1459. postFinder = setMatcher( postFinder, postSelector );
  1460. }
  1461. return markFunction(function( seed, results, context, xml ) {
  1462. var temp, i, elem,
  1463. preMap = [],
  1464. postMap = [],
  1465. preexisting = results.length,
  1466. elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
  1467. matcherIn = preFilter && ( seed || !selector ) ?
  1468. condense( elems, preMap, preFilter, context, xml ) :
  1469. elems,
  1470. matcherOut = matcher ?
  1471. postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
  1472. [] :
  1473. results :
  1474. matcherIn;
  1475. if ( matcher ) {
  1476. matcher( matcherIn, matcherOut, context, xml );
  1477. }
  1478. if ( postFilter ) {
  1479. temp = condense( matcherOut, postMap );
  1480. postFilter( temp, [], context, xml );
  1481. i = temp.length;
  1482. while ( i-- ) {
  1483. if ( (elem = temp[i]) ) {
  1484. matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
  1485. }
  1486. }
  1487. }
  1488. if ( seed ) {
  1489. if ( postFinder || preFilter ) {
  1490. if ( postFinder ) {
  1491. temp = [];
  1492. i = matcherOut.length;
  1493. while ( i-- ) {
  1494. if ( (elem = matcherOut[i]) ) {
  1495. temp.push( (matcherIn[i] = elem) );
  1496. }
  1497. }
  1498. postFinder( null, (matcherOut = []), temp, xml );
  1499. }
  1500. i = matcherOut.length;
  1501. while ( i-- ) {
  1502. if ( (elem = matcherOut[i]) &&
  1503. (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
  1504. seed[temp] = !(results[temp] = elem);
  1505. }
  1506. }
  1507. }
  1508. } else {
  1509. matcherOut = condense(
  1510. matcherOut === results ?
  1511. matcherOut.splice( preexisting, matcherOut.length ) :
  1512. matcherOut
  1513. );
  1514. if ( postFinder ) {
  1515. postFinder( null, results, matcherOut, xml );
  1516. } else {
  1517. push.apply( results, matcherOut );
  1518. }
  1519. }
  1520. });
  1521. }
  1522. function matcherFromTokens( tokens ) {
  1523. var checkContext, matcher, j,
  1524. len = tokens.length,
  1525. leadingRelative = Expr.relative[ tokens[0].type ],
  1526. implicitRelative = leadingRelative || Expr.relative[" "],
  1527. i = leadingRelative ? 1 : 0,
  1528. matchContext = addCombinator( function( elem ) {
  1529. return elem === checkContext;
  1530. }, implicitRelative, true ),
  1531. matchAnyContext = addCombinator( function( elem ) {
  1532. return indexOf( checkContext, elem ) > -1;
  1533. }, implicitRelative, true ),
  1534. matchers = [ function( elem, context, xml ) {
  1535. var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
  1536. (checkContext = context).nodeType ?
  1537. matchContext( elem, context, xml ) :
  1538. matchAnyContext( elem, context, xml ) );
  1539. checkContext = null;
  1540. return ret;
  1541. } ];
  1542. for ( ; i < len; i++ ) {
  1543. if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
  1544. matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
  1545. } else {
  1546. matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
  1547. if ( matcher[ expando ] ) {
  1548. j = ++i;
  1549. for ( ; j < len; j++ ) {
  1550. if ( Expr.relative[ tokens[j].type ] ) {
  1551. break;
  1552. }
  1553. }
  1554. return setMatcher(
  1555. i > 1 && elementMatcher( matchers ),
  1556. i > 1 && toSelector(
  1557. tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
  1558. ).replace( rtrim, "$1" ),
  1559. matcher,
  1560. i < j && matcherFromTokens( tokens.slice( i, j ) ),
  1561. j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
  1562. j < len && toSelector( tokens )
  1563. );
  1564. }
  1565. matchers.push( matcher );
  1566. }
  1567. }
  1568. return elementMatcher( matchers );
  1569. }
  1570. function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
  1571. var bySet = setMatchers.length > 0,
  1572. byElement = elementMatchers.length > 0,
  1573. superMatcher = function( seed, context, xml, results, outermost ) {
  1574. var elem, j, matcher,
  1575. matchedCount = 0,
  1576. i = "0",
  1577. unmatched = seed && [],
  1578. setMatched = [],
  1579. contextBackup = outermostContext,
  1580. elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
  1581. dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
  1582. len = elems.length;
  1583. if ( outermost ) {
  1584. outermostContext = context === document || context || outermost;
  1585. }
  1586. for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
  1587. if ( byElement && elem ) {
  1588. j = 0;
  1589. if ( !context && elem.ownerDocument !== document ) {
  1590. setDocument( elem );
  1591. xml = !documentIsHTML;
  1592. }
  1593. while ( (matcher = elementMatchers[j++]) ) {
  1594. if ( matcher( elem, context || document, xml) ) {
  1595. results.push( elem );
  1596. break;
  1597. }
  1598. }
  1599. if ( outermost ) {
  1600. dirruns = dirrunsUnique;
  1601. }
  1602. }
  1603. if ( bySet ) {
  1604. if ( (elem = !matcher && elem) ) {
  1605. matchedCount--;
  1606. }
  1607. if ( seed ) {
  1608. unmatched.push( elem );
  1609. }
  1610. }
  1611. }
  1612. matchedCount += i;
  1613. if ( bySet && i !== matchedCount ) {
  1614. j = 0;
  1615. while ( (matcher = setMatchers[j++]) ) {
  1616. matcher( unmatched, setMatched, context, xml );
  1617. }
  1618. if ( seed ) {
  1619. if ( matchedCount > 0 ) {
  1620. while ( i-- ) {
  1621. if ( !(unmatched[i] || setMatched[i]) ) {
  1622. setMatched[i] = pop.call( results );
  1623. }
  1624. }
  1625. }
  1626. setMatched = condense( setMatched );
  1627. }
  1628. push.apply( results, setMatched );
  1629. if ( outermost && !seed && setMatched.length > 0 &&
  1630. ( matchedCount + setMatchers.length ) > 1 ) {
  1631. Sizzle.uniqueSort( results );
  1632. }
  1633. }
  1634. if ( outermost ) {
  1635. dirruns = dirrunsUnique;
  1636. outermostContext = contextBackup;
  1637. }
  1638. return unmatched;
  1639. };
  1640. return bySet ?
  1641. markFunction( superMatcher ) :
  1642. superMatcher;
  1643. }
  1644. var i,
  1645. setMatchers = [],
  1646. elementMatchers = [],
  1647. cached = compilerCache[ selector + " " ];
  1648. if ( !cached ) {
  1649. if ( !match ) {
  1650. match = tokenize( selector );
  1651. }
  1652. i = match.length;
  1653. while ( i-- ) {
  1654. cached = matcherFromTokens( match[i] );
  1655. if ( cached[ expando ] ) {
  1656. setMatchers.push( cached );
  1657. } else {
  1658. elementMatchers.push( cached );
  1659. }
  1660. }
  1661. cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
  1662. cached.selector = selector;
  1663. }
  1664. return cached;
  1665. };
  1666. select = Sizzle.select = function( selector, context, results, seed ) {
  1667. var i, tokens, token, type, find,
  1668. compiled = typeof selector === "function" && selector,
  1669. match = !seed && tokenize( (selector = compiled.selector || selector) );
  1670. results = results || [];
  1671. if ( match.length === 1 ) {
  1672. tokens = match[0] = match[0].slice( 0 );
  1673. if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
  1674. support.getById && context.nodeType === 9 && documentIsHTML &&
  1675. Expr.relative[ tokens[1].type ] ) {
  1676. context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
  1677. if ( !context ) {
  1678. return results;
  1679. } else if ( compiled ) {
  1680. context = context.parentNode;
  1681. }
  1682. selector = selector.slice( tokens.shift().value.length );
  1683. }
  1684. i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
  1685. while ( i-- ) {
  1686. token = tokens[i];
  1687. if ( Expr.relative[ (type = token.type) ] ) {
  1688. break;
  1689. }
  1690. if ( (find = Expr.find[ type ]) ) {
  1691. if ( (seed = find(
  1692. token.matches[0].replace( runescape, funescape ),
  1693. rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
  1694. )) ) {
  1695. tokens.splice( i, 1 );
  1696. selector = seed.length && toSelector( tokens );
  1697. if ( !selector ) {
  1698. push.apply( results, seed );
  1699. return results;
  1700. }
  1701. break;
  1702. }
  1703. }
  1704. }
  1705. }
  1706. ( compiled || compile( selector, match ) )(
  1707. seed,
  1708. context,
  1709. !documentIsHTML,
  1710. results,
  1711. !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
  1712. );
  1713. return results;
  1714. };
  1715. support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
  1716. support.detectDuplicates = !!hasDuplicate;
  1717. setDocument();
  1718. support.sortDetached = assert(function( el ) {
  1719. return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
  1720. });
  1721. if ( !assert(function( el ) {
  1722. el.innerHTML = "<a href='#'></a>";
  1723. return el.firstChild.getAttribute("href") === "#" ;
  1724. }) ) {
  1725. addHandle( "type|href|height|width", function( elem, name, isXML ) {
  1726. if ( !isXML ) {
  1727. return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
  1728. }
  1729. });
  1730. }
  1731. if ( !support.attributes || !assert(function( el ) {
  1732. el.innerHTML = "<input/>";
  1733. el.firstChild.setAttribute( "value", "" );
  1734. return el.firstChild.getAttribute( "value" ) === "";
  1735. }) ) {
  1736. addHandle( "value", function( elem, name, isXML ) {
  1737. if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
  1738. return elem.defaultValue;
  1739. }
  1740. });
  1741. }
  1742. if ( !assert(function( el ) {
  1743. return el.getAttribute("disabled") == null;
  1744. }) ) {
  1745. addHandle( booleans, function( elem, name, isXML ) {
  1746. var val;
  1747. if ( !isXML ) {
  1748. return elem[ name ] === true ? name.toLowerCase() :
  1749. (val = elem.getAttributeNode( name )) && val.specified ?
  1750. val.value :
  1751. null;
  1752. }
  1753. });
  1754. }
  1755. return Sizzle;
  1756. })( window );
  1757. jQuery.find = Sizzle;
  1758. jQuery.expr = Sizzle.selectors;
  1759. jQuery.expr[ ":" ] = jQuery.expr.pseudos;
  1760. jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
  1761. jQuery.text = Sizzle.getText;
  1762. jQuery.isXMLDoc = Sizzle.isXML;
  1763. jQuery.contains = Sizzle.contains;
  1764. jQuery.escapeSelector = Sizzle.escape;
  1765. var dir = function( elem, dir, until ) {
  1766. var matched = [],
  1767. truncate = until !== undefined;
  1768. while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
  1769. if ( elem.nodeType === 1 ) {
  1770. if ( truncate && jQuery( elem ).is( until ) ) {
  1771. break;
  1772. }
  1773. matched.push( elem );
  1774. }
  1775. }
  1776. return matched;
  1777. };
  1778. var siblings = function( n, elem ) {
  1779. var matched = [];
  1780. for ( ; n; n = n.nextSibling ) {
  1781. if ( n.nodeType === 1 && n !== elem ) {
  1782. matched.push( n );
  1783. }
  1784. }
  1785. return matched;
  1786. };
  1787. var rneedsContext = jQuery.expr.match.needsContext;
  1788. var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
  1789. var risSimple = /^.[^:#\[\.,]*$/;
  1790. function winnow( elements, qualifier, not ) {
  1791. if ( jQuery.isFunction( qualifier ) ) {
  1792. return jQuery.grep( elements, function( elem, i ) {
  1793. return !!qualifier.call( elem, i, elem ) !== not;
  1794. } );
  1795. }
  1796. if ( qualifier.nodeType ) {
  1797. return jQuery.grep( elements, function( elem ) {
  1798. return ( elem === qualifier ) !== not;
  1799. } );
  1800. }
  1801. if ( typeof qualifier === "string" ) {
  1802. if ( risSimple.test( qualifier ) ) {
  1803. return jQuery.filter( qualifier, elements, not );
  1804. }
  1805. qualifier = jQuery.filter( qualifier, elements );
  1806. }
  1807. return jQuery.grep( elements, function( elem ) {
  1808. return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
  1809. } );
  1810. }
  1811. jQuery.filter = function( expr, elems, not ) {
  1812. var elem = elems[ 0 ];
  1813. if ( not ) {
  1814. expr = ":not(" + expr + ")";
  1815. }
  1816. return elems.length === 1 && elem.nodeType === 1 ?
  1817. jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
  1818. jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
  1819. return elem.nodeType === 1;
  1820. } ) );
  1821. };
  1822. jQuery.fn.extend( {
  1823. find: function( selector ) {
  1824. var i, ret,
  1825. len = this.length,
  1826. self = this;
  1827. if ( typeof selector !== "string" ) {
  1828. return this.pushStack( jQuery( selector ).filter( function() {
  1829. for ( i = 0; i < len; i++ ) {
  1830. if ( jQuery.contains( self[ i ], this ) ) {
  1831. return true;
  1832. }
  1833. }
  1834. } ) );
  1835. }
  1836. ret = this.pushStack( [] );
  1837. for ( i = 0; i < len; i++ ) {
  1838. jQuery.find( selector, self[ i ], ret );
  1839. }
  1840. return len > 1 ? jQuery.uniqueSort( ret ) : ret;
  1841. },
  1842. filter: function( selector ) {
  1843. return this.pushStack( winnow( this, selector || [], false ) );
  1844. },
  1845. not: function( selector ) {
  1846. return this.pushStack( winnow( this, selector || [], true ) );
  1847. },
  1848. is: function( selector ) {
  1849. return !!winnow(
  1850. this,
  1851. typeof selector === "string" && rneedsContext.test( selector ) ?
  1852. jQuery( selector ) :
  1853. selector || [],
  1854. false
  1855. ).length;
  1856. }
  1857. } );
  1858. var rootjQuery,
  1859. rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
  1860. init = jQuery.fn.init = function( selector, context, root ) {
  1861. var match, elem;
  1862. if ( !selector ) {
  1863. return this;
  1864. }
  1865. root = root || rootjQuery;
  1866. if ( typeof selector === "string" ) {
  1867. if ( selector[ 0 ] === "<" &&
  1868. selector[ selector.length - 1 ] === ">" &&
  1869. selector.length >= 3 ) {
  1870. match = [ null, selector, null ];
  1871. } else {
  1872. match = rquickExpr.exec( selector );
  1873. }
  1874. if ( match && ( match[ 1 ] || !context ) ) {
  1875. if ( match[ 1 ] ) {
  1876. context = context instanceof jQuery ? context[ 0 ] : context;
  1877. jQuery.merge( this, jQuery.parseHTML(
  1878. match[ 1 ],
  1879. context && context.nodeType ? context.ownerDocument || context : document,
  1880. true
  1881. ) );
  1882. if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
  1883. for ( match in context ) {
  1884. if ( jQuery.isFunction( this[ match ] ) ) {
  1885. this[ match ]( context[ match ] );
  1886. } else {
  1887. this.attr( match, context[ match ] );
  1888. }
  1889. }
  1890. }
  1891. return this;
  1892. } else {
  1893. elem = document.getElementById( match[ 2 ] );
  1894. if ( elem ) {
  1895. this[ 0 ] = elem;
  1896. this.length = 1;
  1897. }
  1898. return this;
  1899. }
  1900. } else if ( !context || context.jquery ) {
  1901. return ( context || root ).find( selector );
  1902. } else {
  1903. return this.constructor( context ).find( selector );
  1904. }
  1905. } else if ( selector.nodeType ) {
  1906. this[ 0 ] = selector;
  1907. this.length = 1;
  1908. return this;
  1909. } else if ( jQuery.isFunction( selector ) ) {
  1910. return root.ready !== undefined ?
  1911. root.ready( selector ) :
  1912. selector( jQuery );
  1913. }
  1914. return jQuery.makeArray( selector, this );
  1915. };
  1916. init.prototype = jQuery.fn;
  1917. rootjQuery = jQuery( document );
  1918. var rparentsprev = /^(?:parents|prev(?:Until|All))/,
  1919. guaranteedUnique = {
  1920. children: true,
  1921. contents: true,
  1922. next: true,
  1923. prev: true
  1924. };
  1925. jQuery.fn.extend( {
  1926. has: function( target ) {
  1927. var targets = jQuery( target, this ),
  1928. l = targets.length;
  1929. return this.filter( function() {
  1930. var i = 0;
  1931. for ( ; i < l; i++ ) {
  1932. if ( jQuery.contains( this, targets[ i ] ) ) {
  1933. return true;
  1934. }
  1935. }
  1936. } );
  1937. },
  1938. closest: function( selectors, context ) {
  1939. var cur,
  1940. i = 0,
  1941. l = this.length,
  1942. matched = [],
  1943. targets = typeof selectors !== "string" && jQuery( selectors );
  1944. if ( !rneedsContext.test( selectors ) ) {
  1945. for ( ; i < l; i++ ) {
  1946. for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
  1947. if ( cur.nodeType < 11 && ( targets ?
  1948. targets.index( cur ) > -1 :
  1949. cur.nodeType === 1 &&
  1950. jQuery.find.matchesSelector( cur, selectors ) ) ) {
  1951. matched.push( cur );
  1952. break;
  1953. }
  1954. }
  1955. }
  1956. }
  1957. return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
  1958. },
  1959. index: function( elem ) {
  1960. if ( !elem ) {
  1961. return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
  1962. }
  1963. if ( typeof elem === "string" ) {
  1964. return indexOf.call( jQuery( elem ), this[ 0 ] );
  1965. }
  1966. return indexOf.call( this,
  1967. elem.jquery ? elem[ 0 ] : elem
  1968. );
  1969. },
  1970. add: function( selector, context ) {
  1971. return this.pushStack(
  1972. jQuery.uniqueSort(
  1973. jQuery.merge( this.get(), jQuery( selector, context ) )
  1974. )
  1975. );
  1976. },
  1977. addBack: function( selector ) {
  1978. return this.add( selector == null ?
  1979. this.prevObject : this.prevObject.filter( selector )
  1980. );
  1981. }
  1982. } );
  1983. function sibling( cur, dir ) {
  1984. while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
  1985. return cur;
  1986. }
  1987. jQuery.each( {
  1988. parent: function( elem ) {
  1989. var parent = elem.parentNode;
  1990. return parent && parent.nodeType !== 11 ? parent : null;
  1991. },
  1992. parents: function( elem ) {
  1993. return dir( elem, "parentNode" );
  1994. },
  1995. parentsUntil: function( elem, i, until ) {
  1996. return dir( elem, "parentNode", until );
  1997. },
  1998. next: function( elem ) {
  1999. return sibling( elem, "nextSibling" );
  2000. },
  2001. prev: function( elem ) {
  2002. return sibling( elem, "previousSibling" );
  2003. },
  2004. nextAll: function( elem ) {
  2005. return dir( elem, "nextSibling" );
  2006. },
  2007. prevAll: function( elem ) {
  2008. return dir( elem, "previousSibling" );
  2009. },
  2010. nextUntil: function( elem, i, until ) {
  2011. return dir( elem, "nextSibling", until );
  2012. },
  2013. prevUntil: function( elem, i, until ) {
  2014. return dir( elem, "previousSibling", until );
  2015. },
  2016. siblings: function( elem ) {
  2017. return siblings( ( elem.parentNode || {} ).firstChild, elem );
  2018. },
  2019. children: function( elem ) {
  2020. return siblings( elem.firstChild );
  2021. },
  2022. contents: function( elem ) {
  2023. return elem.contentDocument || jQuery.merge( [], elem.childNodes );
  2024. }
  2025. }, function( name, fn ) {
  2026. jQuery.fn[ name ] = function( until, selector ) {
  2027. var matched = jQuery.map( this, fn, until );
  2028. if ( name.slice( -5 ) !== "Until" ) {
  2029. selector = until;
  2030. }
  2031. if ( selector && typeof selector === "string" ) {
  2032. matched = jQuery.filter( selector, matched );
  2033. }
  2034. if ( this.length > 1 ) {
  2035. if ( !guaranteedUnique[ name ] ) {
  2036. jQuery.uniqueSort( matched );
  2037. }
  2038. if ( rparentsprev.test( name ) ) {
  2039. matched.reverse();
  2040. }
  2041. }
  2042. return this.pushStack( matched );
  2043. };
  2044. } );
  2045. var rnotwhite = ( /\S+/g );
  2046. function createOptions( options ) {
  2047. var object = {};
  2048. jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
  2049. object[ flag ] = true;
  2050. } );
  2051. return object;
  2052. }
  2053. jQuery.Callbacks = function( options ) {
  2054. options = typeof options === "string" ?
  2055. createOptions( options ) :
  2056. jQuery.extend( {}, options );
  2057. var
  2058. firing,
  2059. memory,
  2060. fired,
  2061. locked,
  2062. list = [],
  2063. queue = [],
  2064. firingIndex = -1,
  2065. fire = function() {
  2066. locked = options.once;
  2067. fired = firing = true;
  2068. for ( ; queue.length; firingIndex = -1 ) {
  2069. memory = queue.shift();
  2070. while ( ++firingIndex < list.length ) {
  2071. if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
  2072. options.stopOnFalse ) {
  2073. firingIndex = list.length;
  2074. memory = false;
  2075. }
  2076. }
  2077. }
  2078. if ( !options.memory ) {
  2079. memory = false;
  2080. }
  2081. firing = false;
  2082. if ( locked ) {
  2083. if ( memory ) {
  2084. list = [];
  2085. } else {
  2086. list = "";
  2087. }
  2088. }
  2089. },
  2090. self = {
  2091. add: function() {
  2092. if ( list ) {
  2093. if ( memory && !firing ) {
  2094. firingIndex = list.length - 1;
  2095. queue.push( memory );
  2096. }
  2097. ( function add( args ) {
  2098. jQuery.each( args, function( _, arg ) {
  2099. if ( jQuery.isFunction( arg ) ) {
  2100. if ( !options.unique || !self.has( arg ) ) {
  2101. list.push( arg );
  2102. }
  2103. } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
  2104. add( arg );
  2105. }
  2106. } );
  2107. } )( arguments );
  2108. if ( memory && !firing ) {
  2109. fire();
  2110. }
  2111. }
  2112. return this;
  2113. },
  2114. remove: function() {
  2115. jQuery.each( arguments, function( _, arg ) {
  2116. var index;
  2117. while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
  2118. list.splice( index, 1 );
  2119. if ( index <= firingIndex ) {
  2120. firingIndex--;
  2121. }
  2122. }
  2123. } );
  2124. return this;
  2125. },
  2126. has: function( fn ) {
  2127. return fn ?
  2128. jQuery.inArray( fn, list ) > -1 :
  2129. list.length > 0;
  2130. },
  2131. empty: function() {
  2132. if ( list ) {
  2133. list = [];
  2134. }
  2135. return this;
  2136. },
  2137. disable: function() {
  2138. locked = queue = [];
  2139. list = memory = "";
  2140. return this;
  2141. },
  2142. disabled: function() {
  2143. return !list;
  2144. },
  2145. lock: function() {
  2146. locked = queue = [];
  2147. if ( !memory && !firing ) {
  2148. list = memory = "";
  2149. }
  2150. return this;
  2151. },
  2152. locked: function() {
  2153. return !!locked;
  2154. },
  2155. fireWith: function( context, args ) {
  2156. if ( !locked ) {
  2157. args = args || [];
  2158. args = [ context, args.slice ? args.slice() : args ];
  2159. queue.push( args );
  2160. if ( !firing ) {
  2161. fire();
  2162. }
  2163. }
  2164. return this;
  2165. },
  2166. fire: function() {
  2167. self.fireWith( this, arguments );
  2168. return this;
  2169. },
  2170. fired: function() {
  2171. return !!fired;
  2172. }
  2173. };
  2174. return self;
  2175. };
  2176. function Identity( v ) {
  2177. return v;
  2178. }
  2179. function Thrower( ex ) {
  2180. throw ex;
  2181. }
  2182. function adoptValue( value, resolve, reject ) {
  2183. var method;
  2184. try {
  2185. if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
  2186. method.call( value ).done( resolve ).fail( reject );
  2187. } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
  2188. method.call( value, resolve, reject );
  2189. } else {
  2190. resolve.call( undefined, value );
  2191. }
  2192. } catch ( value ) {
  2193. reject.call( undefined, value );
  2194. }
  2195. }
  2196. jQuery.extend( {
  2197. Deferred: function( func ) {
  2198. var tuples = [
  2199. [ "notify", "progress", jQuery.Callbacks( "memory" ),
  2200. jQuery.Callbacks( "memory" ), 2 ],
  2201. [ "resolve", "done", jQuery.Callbacks( "once memory" ),
  2202. jQuery.Callbacks( "once memory" ), 0, "resolved" ],
  2203. [ "reject", "fail", jQuery.Callbacks( "once memory" ),
  2204. jQuery.Callbacks( "once memory" ), 1, "rejected" ]
  2205. ],
  2206. state = "pending",
  2207. promise = {
  2208. state: function() {
  2209. return state;
  2210. },
  2211. always: function() {
  2212. deferred.done( arguments ).fail( arguments );
  2213. return this;
  2214. },
  2215. "catch": function( fn ) {
  2216. return promise.then( null, fn );
  2217. },
  2218. var fns = arguments;
  2219. return jQuery.Deferred( function( newDefer ) {
  2220. jQuery.each( tuples, function( i, tuple ) {
  2221. var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
  2222. deferred[ tuple[ 1 ] ]( function() {
  2223. var returned = fn && fn.apply( this, arguments );
  2224. if ( returned && jQuery.isFunction( returned.promise ) ) {
  2225. returned.promise()
  2226. .progress( newDefer.notify )
  2227. .done( newDefer.resolve )
  2228. .fail( newDefer.reject );
  2229. } else {
  2230. newDefer[ tuple[ 0 ] + "With" ](
  2231. this,
  2232. fn ? [ returned ] : arguments
  2233. );
  2234. }
  2235. } );
  2236. } );
  2237. fns = null;
  2238. } ).promise();
  2239. },
  2240. then: function( onFulfilled, onRejected, onProgress ) {
  2241. var maxDepth = 0;
  2242. function resolve( depth, deferred, handler, special ) {
  2243. return function() {
  2244. var that = this,
  2245. args = arguments,
  2246. mightThrow = function() {
  2247. var returned, then;
  2248. if ( depth < maxDepth ) {
  2249. return;
  2250. }
  2251. returned = handler.apply( that, args );
  2252. if ( returned === deferred.promise() ) {
  2253. throw new TypeError( "Thenable self-resolution" );
  2254. }
  2255. then = returned &&
  2256. ( typeof returned === "object" ||
  2257. typeof returned === "function" ) &&
  2258. returned.then;
  2259. if ( jQuery.isFunction( then ) ) {
  2260. if ( special ) {
  2261. then.call(
  2262. returned,
  2263. resolve( maxDepth, deferred, Identity, special ),
  2264. resolve( maxDepth, deferred, Thrower, special )
  2265. );
  2266. } else {
  2267. maxDepth++;
  2268. then.call(
  2269. returned,
  2270. resolve( maxDepth, deferred, Identity, special ),
  2271. resolve( maxDepth, deferred, Thrower, special ),
  2272. resolve( maxDepth, deferred, Identity,
  2273. deferred.notifyWith )
  2274. );
  2275. }
  2276. } else {
  2277. if ( handler !== Identity ) {
  2278. that = undefined;
  2279. args = [ returned ];
  2280. }
  2281. ( special || deferred.resolveWith )( that, args );
  2282. }
  2283. },
  2284. process = special ?
  2285. mightThrow :
  2286. function() {
  2287. try {
  2288. mightThrow();
  2289. } catch ( e ) {
  2290. if ( jQuery.Deferred.exceptionHook ) {
  2291. jQuery.Deferred.exceptionHook( e,
  2292. process.stackTrace );
  2293. }
  2294. if ( depth + 1 >= maxDepth ) {
  2295. if ( handler !== Thrower ) {
  2296. that = undefined;
  2297. args = [ e ];
  2298. }
  2299. deferred.rejectWith( that, args );
  2300. }
  2301. }
  2302. };
  2303. if ( depth ) {
  2304. process();
  2305. } else {
  2306. if ( jQuery.Deferred.getStackHook ) {
  2307. process.stackTrace = jQuery.Deferred.getStackHook();
  2308. }
  2309. window.setTimeout( process );
  2310. }
  2311. };
  2312. }
  2313. return jQuery.Deferred( function( newDefer ) {
  2314. tuples[ 0 ][ 3 ].add(
  2315. resolve(
  2316. 0,
  2317. newDefer,
  2318. jQuery.isFunction( onProgress ) ?
  2319. onProgress :
  2320. Identity,
  2321. newDefer.notifyWith
  2322. )
  2323. );
  2324. tuples[ 1 ][ 3 ].add(
  2325. resolve(
  2326. 0,
  2327. newDefer,
  2328. jQuery.isFunction( onFulfilled ) ?
  2329. onFulfilled :
  2330. Identity
  2331. )
  2332. );
  2333. tuples[ 2 ][ 3 ].add(
  2334. resolve(
  2335. 0,
  2336. newDefer,
  2337. jQuery.isFunction( onRejected ) ?
  2338. onRejected :
  2339. Thrower
  2340. )
  2341. );
  2342. } ).promise();
  2343. },
  2344. promise: function( obj ) {
  2345. return obj != null ? jQuery.extend( obj, promise ) : promise;
  2346. }
  2347. },
  2348. deferred = {};
  2349. jQuery.each( tuples, function( i, tuple ) {
  2350. var list = tuple[ 2 ],
  2351. stateString = tuple[ 5 ];
  2352. promise[ tuple[ 1 ] ] = list.add;
  2353. if ( stateString ) {
  2354. list.add(
  2355. function() {
  2356. state = stateString;
  2357. },
  2358. tuples[ 3 - i ][ 2 ].disable,
  2359. tuples[ 0 ][ 2 ].lock
  2360. );
  2361. }
  2362. list.add( tuple[ 3 ].fire );
  2363. deferred[ tuple[ 0 ] ] = function() {
  2364. deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
  2365. return this;
  2366. };
  2367. deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
  2368. } );
  2369. promise.promise( deferred );
  2370. if ( func ) {
  2371. func.call( deferred, deferred );
  2372. }
  2373. return deferred;
  2374. },
  2375. when: function( singleValue ) {
  2376. var
  2377. remaining = arguments.length,
  2378. i = remaining,
  2379. resolveContexts = Array( i ),
  2380. resolveValues = slice.call( arguments ),
  2381. master = jQuery.Deferred(),
  2382. updateFunc = function( i ) {
  2383. return function( value ) {
  2384. resolveContexts[ i ] = this;
  2385. resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
  2386. if ( !( --remaining ) ) {
  2387. master.resolveWith( resolveContexts, resolveValues );
  2388. }
  2389. };
  2390. };
  2391. if ( remaining <= 1 ) {
  2392. adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
  2393. if ( master.state() === "pending" ||
  2394. jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
  2395. return master.then();
  2396. }
  2397. }
  2398. while ( i-- ) {
  2399. adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
  2400. }
  2401. return master.promise();
  2402. }
  2403. } );
  2404. var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
  2405. jQuery.Deferred.exceptionHook = function( error, stack ) {
  2406. if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
  2407. window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
  2408. }
  2409. };
  2410. jQuery.readyException = function( error ) {
  2411. window.setTimeout( function() {
  2412. throw error;
  2413. } );
  2414. };
  2415. var readyList = jQuery.Deferred();
  2416. jQuery.fn.ready = function( fn ) {
  2417. readyList
  2418. .then( fn )
  2419. .catch( function( error ) {
  2420. jQuery.readyException( error );
  2421. } );
  2422. return this;
  2423. };
  2424. jQuery.extend( {
  2425. isReady: false,
  2426. readyWait: 1,
  2427. holdReady: function( hold ) {
  2428. if ( hold ) {
  2429. jQuery.readyWait++;
  2430. } else {
  2431. jQuery.ready( true );
  2432. }
  2433. },
  2434. ready: function( wait ) {
  2435. if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
  2436. return;
  2437. }
  2438. jQuery.isReady = true;
  2439. if ( wait !== true && --jQuery.readyWait > 0 ) {
  2440. return;
  2441. }
  2442. readyList.resolveWith( document, [ jQuery ] );
  2443. }
  2444. } );
  2445. jQuery.ready.then = readyList.then;
  2446. function completed() {
  2447. document.removeEventListener( "DOMContentLoaded", completed );
  2448. window.removeEventListener( "load", completed );
  2449. jQuery.ready();
  2450. }
  2451. if ( document.readyState === "complete" ||
  2452. ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
  2453. window.setTimeout( jQuery.ready );
  2454. } else {
  2455. document.addEventListener( "DOMContentLoaded", completed );
  2456. window.addEventListener( "load", completed );
  2457. }
  2458. var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
  2459. var i = 0,
  2460. len = elems.length,
  2461. bulk = key == null;
  2462. if ( jQuery.type( key ) === "object" ) {
  2463. chainable = true;
  2464. for ( i in key ) {
  2465. access( elems, fn, i, key[ i ], true, emptyGet, raw );
  2466. }
  2467. } else if ( value !== undefined ) {
  2468. chainable = true;
  2469. if ( !jQuery.isFunction( value ) ) {
  2470. raw = true;
  2471. }
  2472. if ( bulk ) {
  2473. if ( raw ) {
  2474. fn.call( elems, value );
  2475. fn = null;
  2476. } else {
  2477. bulk = fn;
  2478. fn = function( elem, key, value ) {
  2479. return bulk.call( jQuery( elem ), value );
  2480. };
  2481. }
  2482. }
  2483. if ( fn ) {
  2484. for ( ; i < len; i++ ) {
  2485. fn(
  2486. elems[ i ], key, raw ?
  2487. value :
  2488. value.call( elems[ i ], i, fn( elems[ i ], key ) )
  2489. );
  2490. }
  2491. }
  2492. }
  2493. return chainable ?
  2494. elems :
  2495. bulk ?
  2496. fn.call( elems ) :
  2497. len ? fn( elems[ 0 ], key ) : emptyGet;
  2498. };
  2499. var acceptData = function( owner ) {
  2500. return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
  2501. };
  2502. function Data() {
  2503. this.expando = jQuery.expando + Data.uid++;
  2504. }
  2505. Data.uid = 1;
  2506. Data.prototype = {
  2507. cache: function( owner ) {
  2508. var value = owner[ this.expando ];
  2509. if ( !value ) {
  2510. value = {};
  2511. if ( acceptData( owner ) ) {
  2512. if ( owner.nodeType ) {
  2513. owner[ this.expando ] = value;
  2514. } else {
  2515. Object.defineProperty( owner, this.expando, {
  2516. value: value,
  2517. configurable: true
  2518. } );
  2519. }
  2520. }
  2521. }
  2522. return value;
  2523. },
  2524. set: function( owner, data, value ) {
  2525. var prop,
  2526. cache = this.cache( owner );
  2527. if ( typeof data === "string" ) {
  2528. cache[ jQuery.camelCase( data ) ] = value;
  2529. } else {
  2530. for ( prop in data ) {
  2531. cache[ jQuery.camelCase( prop ) ] = data[ prop ];
  2532. }
  2533. }
  2534. return cache;
  2535. },
  2536. get: function( owner, key ) {
  2537. return key === undefined ?
  2538. this.cache( owner ) :
  2539. owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
  2540. },
  2541. access: function( owner, key, value ) {
  2542. if ( key === undefined ||
  2543. ( ( key && typeof key === "string" ) && value === undefined ) ) {
  2544. return this.get( owner, key );
  2545. }
  2546. this.set( owner, key, value );
  2547. return value !== undefined ? value : key;
  2548. },
  2549. remove: function( owner, key ) {
  2550. var i,
  2551. cache = owner[ this.expando ];
  2552. if ( cache === undefined ) {
  2553. return;
  2554. }
  2555. if ( key !== undefined ) {
  2556. if ( jQuery.isArray( key ) ) {
  2557. key = key.map( jQuery.camelCase );
  2558. } else {
  2559. key = jQuery.camelCase( key );
  2560. key = key in cache ?
  2561. [ key ] :
  2562. ( key.match( rnotwhite ) || [] );
  2563. }
  2564. i = key.length;
  2565. while ( i-- ) {
  2566. delete cache[ key[ i ] ];
  2567. }
  2568. }
  2569. if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
  2570. if ( owner.nodeType ) {
  2571. owner[ this.expando ] = undefined;
  2572. } else {
  2573. delete owner[ this.expando ];
  2574. }
  2575. }
  2576. },
  2577. hasData: function( owner ) {
  2578. var cache = owner[ this.expando ];
  2579. return cache !== undefined && !jQuery.isEmptyObject( cache );
  2580. }
  2581. };
  2582. var dataPriv = new Data();
  2583. var dataUser = new Data();
  2584. var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
  2585. rmultiDash = /[A-Z]/g;
  2586. function dataAttr( elem, key, data ) {
  2587. var name;
  2588. if ( data === undefined && elem.nodeType === 1 ) {
  2589. name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
  2590. data = elem.getAttribute( name );
  2591. if ( typeof data === "string" ) {
  2592. try {
  2593. data = data === "true" ? true :
  2594. data === "false" ? false :
  2595. data === "null" ? null :
  2596. +data + "" === data ? +data :
  2597. rbrace.test( data ) ? JSON.parse( data ) :
  2598. data;
  2599. } catch ( e ) {}
  2600. dataUser.set( elem, key, data );
  2601. } else {
  2602. data = undefined;
  2603. }
  2604. }
  2605. return data;
  2606. }
  2607. jQuery.extend( {
  2608. hasData: function( elem ) {
  2609. return dataUser.hasData( elem ) || dataPriv.hasData( elem );
  2610. },
  2611. data: function( elem, name, data ) {
  2612. return dataUser.access( elem, name, data );
  2613. },
  2614. removeData: function( elem, name ) {
  2615. dataUser.remove( elem, name );
  2616. },
  2617. _data: function( elem, name, data ) {
  2618. return dataPriv.access( elem, name, data );
  2619. },
  2620. _removeData: function( elem, name ) {
  2621. dataPriv.remove( elem, name );
  2622. }
  2623. } );
  2624. jQuery.fn.extend( {
  2625. data: function( key, value ) {
  2626. var i, name, data,
  2627. elem = this[ 0 ],
  2628. attrs = elem && elem.attributes;
  2629. if ( key === undefined ) {
  2630. if ( this.length ) {
  2631. data = dataUser.get( elem );
  2632. if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
  2633. i = attrs.length;
  2634. while ( i-- ) {
  2635. if ( attrs[ i ] ) {
  2636. name = attrs[ i ].name;
  2637. if ( name.indexOf( "data-" ) === 0 ) {
  2638. name = jQuery.camelCase( name.slice( 5 ) );
  2639. dataAttr( elem, name, data[ name ] );
  2640. }
  2641. }
  2642. }
  2643. dataPriv.set( elem, "hasDataAttrs", true );
  2644. }
  2645. }
  2646. return data;
  2647. }
  2648. if ( typeof key === "object" ) {
  2649. return this.each( function() {
  2650. dataUser.set( this, key );
  2651. } );
  2652. }
  2653. return access( this, function( value ) {
  2654. var data;
  2655. if ( elem && value === undefined ) {
  2656. data = dataUser.get( elem, key );
  2657. if ( data !== undefined ) {
  2658. return data;
  2659. }
  2660. data = dataAttr( elem, key );
  2661. if ( data !== undefined ) {
  2662. return data;
  2663. }
  2664. return;
  2665. }
  2666. this.each( function() {
  2667. dataUser.set( this, key, value );
  2668. } );
  2669. }, null, value, arguments.length > 1, null, true );
  2670. },
  2671. removeData: function( key ) {
  2672. return this.each( function() {
  2673. dataUser.remove( this, key );
  2674. } );
  2675. }
  2676. } );
  2677. jQuery.extend( {
  2678. queue: function( elem, type, data ) {
  2679. var queue;
  2680. if ( elem ) {
  2681. type = ( type || "fx" ) + "queue";
  2682. queue = dataPriv.get( elem, type );
  2683. if ( data ) {
  2684. if ( !queue || jQuery.isArray( data ) ) {
  2685. queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
  2686. } else {
  2687. queue.push( data );
  2688. }
  2689. }
  2690. return queue || [];
  2691. }
  2692. },
  2693. dequeue: function( elem, type ) {
  2694. type = type || "fx";
  2695. var queue = jQuery.queue( elem, type ),
  2696. startLength = queue.length,
  2697. fn = queue.shift(),
  2698. hooks = jQuery._queueHooks( elem, type ),
  2699. next = function() {
  2700. jQuery.dequeue( elem, type );
  2701. };
  2702. if ( fn === "inprogress" ) {
  2703. fn = queue.shift();
  2704. startLength--;
  2705. }
  2706. if ( fn ) {
  2707. if ( type === "fx" ) {
  2708. queue.unshift( "inprogress" );
  2709. }
  2710. delete hooks.stop;
  2711. fn.call( elem, next, hooks );
  2712. }
  2713. if ( !startLength && hooks ) {
  2714. hooks.empty.fire();
  2715. }
  2716. },
  2717. _queueHooks: function( elem, type ) {
  2718. var key = type + "queueHooks";
  2719. return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
  2720. empty: jQuery.Callbacks( "once memory" ).add( function() {
  2721. dataPriv.remove( elem, [ type + "queue", key ] );
  2722. } )
  2723. } );
  2724. }
  2725. } );
  2726. jQuery.fn.extend( {
  2727. queue: function( type, data ) {
  2728. var setter = 2;
  2729. if ( typeof type !== "string" ) {
  2730. data = type;
  2731. type = "fx";
  2732. setter--;
  2733. }
  2734. if ( arguments.length < setter ) {
  2735. return jQuery.queue( this[ 0 ], type );
  2736. }
  2737. return data === undefined ?
  2738. this :
  2739. this.each( function() {
  2740. var queue = jQuery.queue( this, type, data );
  2741. jQuery._queueHooks( this, type );
  2742. if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
  2743. jQuery.dequeue( this, type );
  2744. }
  2745. } );
  2746. },
  2747. dequeue: function( type ) {
  2748. return this.each( function() {
  2749. jQuery.dequeue( this, type );
  2750. } );
  2751. },
  2752. clearQueue: function( type ) {
  2753. return this.queue( type || "fx", [] );
  2754. },
  2755. promise: function( type, obj ) {
  2756. var tmp,
  2757. count = 1,
  2758. defer = jQuery.Deferred(),
  2759. elements = this,
  2760. i = this.length,
  2761. resolve = function() {
  2762. if ( !( --count ) ) {
  2763. defer.resolveWith( elements, [ elements ] );
  2764. }
  2765. };
  2766. if ( typeof type !== "string" ) {
  2767. obj = type;
  2768. type = undefined;
  2769. }
  2770. type = type || "fx";
  2771. while ( i-- ) {
  2772. tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
  2773. if ( tmp && tmp.empty ) {
  2774. count++;
  2775. tmp.empty.add( resolve );
  2776. }
  2777. }
  2778. resolve();
  2779. return defer.promise( obj );
  2780. }
  2781. } );
  2782. var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
  2783. var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
  2784. var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
  2785. var isHiddenWithinTree = function( elem, el ) {
  2786. elem = el || elem;
  2787. return elem.style.display === "none" ||
  2788. elem.style.display === "" &&
  2789. jQuery.contains( elem.ownerDocument, elem ) &&
  2790. jQuery.css( elem, "display" ) === "none";
  2791. };
  2792. var swap = function( elem, options, callback, args ) {
  2793. var ret, name,
  2794. old = {};
  2795. for ( name in options ) {
  2796. old[ name ] = elem.style[ name ];
  2797. elem.style[ name ] = options[ name ];
  2798. }
  2799. ret = callback.apply( elem, args || [] );
  2800. for ( name in options ) {
  2801. elem.style[ name ] = old[ name ];
  2802. }
  2803. return ret;
  2804. };
  2805. function adjustCSS( elem, prop, valueParts, tween ) {
  2806. var adjusted,
  2807. scale = 1,
  2808. maxIterations = 20,
  2809. currentValue = tween ?
  2810. function() {
  2811. return tween.cur();
  2812. } :
  2813. function() {
  2814. return jQuery.css( elem, prop, "" );
  2815. },
  2816. initial = currentValue(),
  2817. unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
  2818. initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
  2819. rcssNum.exec( jQuery.css( elem, prop ) );
  2820. if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
  2821. unit = unit || initialInUnit[ 3 ];
  2822. valueParts = valueParts || [];
  2823. initialInUnit = +initial || 1;
  2824. do {
  2825. scale = scale || ".5";
  2826. initialInUnit = initialInUnit / scale;
  2827. jQuery.style( elem, prop, initialInUnit + unit );
  2828. } while (
  2829. scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
  2830. );
  2831. }
  2832. if ( valueParts ) {
  2833. initialInUnit = +initialInUnit || +initial || 0;
  2834. adjusted = valueParts[ 1 ] ?
  2835. initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
  2836. +valueParts[ 2 ];
  2837. if ( tween ) {
  2838. tween.unit = unit;
  2839. tween.start = initialInUnit;
  2840. tween.end = adjusted;
  2841. }
  2842. }
  2843. return adjusted;
  2844. }
  2845. var defaultDisplayMap = {};
  2846. function getDefaultDisplay( elem ) {
  2847. var temp,
  2848. doc = elem.ownerDocument,
  2849. nodeName = elem.nodeName,
  2850. display = defaultDisplayMap[ nodeName ];
  2851. if ( display ) {
  2852. return display;
  2853. }
  2854. temp = doc.body.appendChild( doc.createElement( nodeName ) ),
  2855. display = jQuery.css( temp, "display" );
  2856. temp.parentNode.removeChild( temp );
  2857. if ( display === "none" ) {
  2858. display = "block";
  2859. }
  2860. defaultDisplayMap[ nodeName ] = display;
  2861. return display;
  2862. }
  2863. function showHide( elements, show ) {
  2864. var display, elem,
  2865. values = [],
  2866. index = 0,
  2867. length = elements.length;
  2868. for ( ; index < length; index++ ) {
  2869. elem = elements[ index ];
  2870. if ( !elem.style ) {
  2871. continue;
  2872. }
  2873. display = elem.style.display;
  2874. if ( show ) {
  2875. if ( display === "none" ) {
  2876. values[ index ] = dataPriv.get( elem, "display" ) || null;
  2877. if ( !values[ index ] ) {
  2878. elem.style.display = "";
  2879. }
  2880. }
  2881. if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
  2882. values[ index ] = getDefaultDisplay( elem );
  2883. }
  2884. } else {
  2885. if ( display !== "none" ) {
  2886. values[ index ] = "none";
  2887. dataPriv.set( elem, "display", display );
  2888. }
  2889. }
  2890. }
  2891. for ( index = 0; index < length; index++ ) {
  2892. if ( values[ index ] != null ) {
  2893. elements[ index ].style.display = values[ index ];
  2894. }
  2895. }
  2896. return elements;
  2897. }
  2898. jQuery.fn.extend( {
  2899. show: function() {
  2900. return showHide( this, true );
  2901. },
  2902. hide: function() {
  2903. return showHide( this );
  2904. },
  2905. toggle: function( state ) {
  2906. if ( typeof state === "boolean" ) {
  2907. return state ? this.show() : this.hide();
  2908. }
  2909. return this.each( function() {
  2910. if ( isHiddenWithinTree( this ) ) {
  2911. jQuery( this ).show();
  2912. } else {
  2913. jQuery( this ).hide();
  2914. }
  2915. } );
  2916. }
  2917. } );
  2918. var rcheckableType = ( /^(?:checkbox|radio)$/i );
  2919. var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
  2920. var rscriptType = ( /^$|\/(?:java|ecma)script/i );
  2921. var wrapMap = {
  2922. option: [ 1, "<select multiple='multiple'>", "</select>" ],
  2923. thead: [ 1, "<table>", "</table>" ],
  2924. col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
  2925. tr: [ 2, "<table><tbody>", "</tbody></table>" ],
  2926. td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
  2927. _default: [ 0, "", "" ]
  2928. };
  2929. wrapMap.optgroup = wrapMap.option;
  2930. wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
  2931. wrapMap.th = wrapMap.td;
  2932. function getAll( context, tag ) {
  2933. var ret = typeof context.getElementsByTagName !== "undefined" ?
  2934. context.getElementsByTagName( tag || "*" ) :
  2935. typeof context.querySelectorAll !== "undefined" ?
  2936. context.querySelectorAll( tag || "*" ) :
  2937. [];
  2938. return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
  2939. jQuery.merge( [ context ], ret ) :
  2940. ret;
  2941. }
  2942. function setGlobalEval( elems, refElements ) {
  2943. var i = 0,
  2944. l = elems.length;
  2945. for ( ; i < l; i++ ) {
  2946. dataPriv.set(
  2947. elems[ i ],
  2948. "globalEval",
  2949. !refElements || dataPriv.get( refElements[ i ], "globalEval" )
  2950. );
  2951. }
  2952. }
  2953. var rhtml = /<|&#?\w+;/;
  2954. function buildFragment( elems, context, scripts, selection, ignored ) {
  2955. var elem, tmp, tag, wrap, contains, j,
  2956. fragment = context.createDocumentFragment(),
  2957. nodes = [],
  2958. i = 0,
  2959. l = elems.length;
  2960. for ( ; i < l; i++ ) {
  2961. elem = elems[ i ];
  2962. if ( elem || elem === 0 ) {
  2963. if ( jQuery.type( elem ) === "object" ) {
  2964. jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
  2965. } else if ( !rhtml.test( elem ) ) {
  2966. nodes.push( context.createTextNode( elem ) );
  2967. } else {
  2968. tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
  2969. tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
  2970. wrap = wrapMap[ tag ] || wrapMap._default;
  2971. tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
  2972. j = wrap[ 0 ];
  2973. while ( j-- ) {
  2974. tmp = tmp.lastChild;
  2975. }
  2976. jQuery.merge( nodes, tmp.childNodes );
  2977. tmp = fragment.firstChild;
  2978. tmp.textContent = "";
  2979. }
  2980. }
  2981. }
  2982. fragment.textContent = "";
  2983. i = 0;
  2984. while ( ( elem = nodes[ i++ ] ) ) {
  2985. if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
  2986. if ( ignored ) {
  2987. ignored.push( elem );
  2988. }
  2989. continue;
  2990. }
  2991. contains = jQuery.contains( elem.ownerDocument, elem );
  2992. tmp = getAll( fragment.appendChild( elem ), "script" );
  2993. if ( contains ) {
  2994. setGlobalEval( tmp );
  2995. }
  2996. if ( scripts ) {
  2997. j = 0;
  2998. while ( ( elem = tmp[ j++ ] ) ) {
  2999. if ( rscriptType.test( elem.type || "" ) ) {
  3000. scripts.push( elem );
  3001. }
  3002. }
  3003. }
  3004. }
  3005. return fragment;
  3006. }
  3007. ( function() {
  3008. var fragment = document.createDocumentFragment(),
  3009. div = fragment.appendChild( document.createElement( "div" ) ),
  3010. input = document.createElement( "input" );
  3011. input.setAttribute( "type", "radio" );
  3012. input.setAttribute( "checked", "checked" );
  3013. input.setAttribute( "name", "t" );
  3014. div.appendChild( input );
  3015. support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
  3016. div.innerHTML = "<textarea>x</textarea>";
  3017. support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
  3018. } )();
  3019. var documentElement = document.documentElement;
  3020. var
  3021. rkeyEvent = /^key/,
  3022. rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
  3023. rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
  3024. function returnTrue() {
  3025. return true;
  3026. }
  3027. function returnFalse() {
  3028. return false;
  3029. }
  3030. function safeActiveElement() {
  3031. try {
  3032. return document.activeElement;
  3033. } catch ( err ) { }
  3034. }
  3035. function on( elem, types, selector, data, fn, one ) {
  3036. var origFn, type;
  3037. if ( typeof types === "object" ) {
  3038. if ( typeof selector !== "string" ) {
  3039. data = data || selector;
  3040. selector = undefined;
  3041. }
  3042. for ( type in types ) {
  3043. on( elem, type, selector, data, types[ type ], one );
  3044. }
  3045. return elem;
  3046. }
  3047. if ( data == null && fn == null ) {
  3048. fn = selector;
  3049. data = selector = undefined;
  3050. } else if ( fn == null ) {
  3051. if ( typeof selector === "string" ) {
  3052. fn = data;
  3053. data = undefined;
  3054. } else {
  3055. fn = data;
  3056. data = selector;
  3057. selector = undefined;
  3058. }
  3059. }
  3060. if ( fn === false ) {
  3061. fn = returnFalse;
  3062. } else if ( !fn ) {
  3063. return elem;
  3064. }
  3065. if ( one === 1 ) {
  3066. origFn = fn;
  3067. fn = function( event ) {
  3068. jQuery().off( event );
  3069. return origFn.apply( this, arguments );
  3070. };
  3071. fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
  3072. }
  3073. return elem.each( function() {
  3074. jQuery.event.add( this, types, fn, data, selector );
  3075. } );
  3076. }
  3077. jQuery.event = {
  3078. global: {},
  3079. add: function( elem, types, handler, data, selector ) {
  3080. var handleObjIn, eventHandle, tmp,
  3081. events, t, handleObj,
  3082. special, handlers, type, namespaces, origType,
  3083. elemData = dataPriv.get( elem );
  3084. if ( !elemData ) {
  3085. return;
  3086. }
  3087. if ( handler.handler ) {
  3088. handleObjIn = handler;
  3089. handler = handleObjIn.handler;
  3090. selector = handleObjIn.selector;
  3091. }
  3092. if ( selector ) {
  3093. jQuery.find.matchesSelector( documentElement, selector );
  3094. }
  3095. if ( !handler.guid ) {
  3096. handler.guid = jQuery.guid++;
  3097. }
  3098. if ( !( events = elemData.events ) ) {
  3099. events = elemData.events = {};
  3100. }
  3101. if ( !( eventHandle = elemData.handle ) ) {
  3102. eventHandle = elemData.handle = function( e ) {
  3103. return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
  3104. jQuery.event.dispatch.apply( elem, arguments ) : undefined;
  3105. };
  3106. }
  3107. types = ( types || "" ).match( rnotwhite ) || [ "" ];
  3108. t = types.length;
  3109. while ( t-- ) {
  3110. tmp = rtypenamespace.exec( types[ t ] ) || [];
  3111. type = origType = tmp[ 1 ];
  3112. namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
  3113. if ( !type ) {
  3114. continue;
  3115. }
  3116. special = jQuery.event.special[ type ] || {};
  3117. type = ( selector ? special.delegateType : special.bindType ) || type;
  3118. special = jQuery.event.special[ type ] || {};
  3119. handleObj = jQuery.extend( {
  3120. type: type,
  3121. origType: origType,
  3122. data: data,
  3123. handler: handler,
  3124. guid: handler.guid,
  3125. selector: selector,
  3126. needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
  3127. namespace: namespaces.join( "." )
  3128. }, handleObjIn );
  3129. if ( !( handlers = events[ type ] ) ) {
  3130. handlers = events[ type ] = [];
  3131. handlers.delegateCount = 0;
  3132. if ( !special.setup ||
  3133. special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
  3134. if ( elem.addEventListener ) {
  3135. elem.addEventListener( type, eventHandle );
  3136. }
  3137. }
  3138. }
  3139. if ( special.add ) {
  3140. special.add.call( elem, handleObj );
  3141. if ( !handleObj.handler.guid ) {
  3142. handleObj.handler.guid = handler.guid;
  3143. }
  3144. }
  3145. if ( selector ) {
  3146. handlers.splice( handlers.delegateCount++, 0, handleObj );
  3147. } else {
  3148. handlers.push( handleObj );
  3149. }
  3150. jQuery.event.global[ type ] = true;
  3151. }
  3152. },
  3153. remove: function( elem, types, handler, selector, mappedTypes ) {
  3154. var j, origCount, tmp,
  3155. events, t, handleObj,
  3156. special, handlers, type, namespaces, origType,
  3157. elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
  3158. if ( !elemData || !( events = elemData.events ) ) {
  3159. return;
  3160. }
  3161. types = ( types || "" ).match( rnotwhite ) || [ "" ];
  3162. t = types.length;
  3163. while ( t-- ) {
  3164. tmp = rtypenamespace.exec( types[ t ] ) || [];
  3165. type = origType = tmp[ 1 ];
  3166. namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
  3167. if ( !type ) {
  3168. for ( type in events ) {
  3169. jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
  3170. }
  3171. continue;
  3172. }
  3173. special = jQuery.event.special[ type ] || {};
  3174. type = ( selector ? special.delegateType : special.bindType ) || type;
  3175. handlers = events[ type ] || [];
  3176. tmp = tmp[ 2 ] &&
  3177. new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
  3178. origCount = j = handlers.length;
  3179. while ( j-- ) {
  3180. handleObj = handlers[ j ];
  3181. if ( ( mappedTypes || origType === handleObj.origType ) &&
  3182. ( !handler || handler.guid === handleObj.guid ) &&
  3183. ( !tmp || tmp.test( handleObj.namespace ) ) &&
  3184. ( !selector || selector === handleObj.selector ||
  3185. selector === "**" && handleObj.selector ) ) {
  3186. handlers.splice( j, 1 );
  3187. if ( handleObj.selector ) {
  3188. handlers.delegateCount--;
  3189. }
  3190. if ( special.remove ) {
  3191. special.remove.call( elem, handleObj );
  3192. }
  3193. }
  3194. }
  3195. if ( origCount && !handlers.length ) {
  3196. if ( !special.teardown ||
  3197. special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
  3198. jQuery.removeEvent( elem, type, elemData.handle );
  3199. }
  3200. delete events[ type ];
  3201. }
  3202. }
  3203. if ( jQuery.isEmptyObject( events ) ) {
  3204. dataPriv.remove( elem, "handle events" );
  3205. }
  3206. },
  3207. dispatch: function( nativeEvent ) {
  3208. var event = jQuery.event.fix( nativeEvent );
  3209. var i, j, ret, matched, handleObj, handlerQueue,
  3210. args = new Array( arguments.length ),
  3211. handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
  3212. special = jQuery.event.special[ event.type ] || {};
  3213. args[ 0 ] = event;
  3214. for ( i = 1; i < arguments.length; i++ ) {
  3215. args[ i ] = arguments[ i ];
  3216. }
  3217. event.delegateTarget = this;
  3218. if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
  3219. return;
  3220. }
  3221. handlerQueue = jQuery.event.handlers.call( this, event, handlers );
  3222. i = 0;
  3223. while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
  3224. event.currentTarget = matched.elem;
  3225. j = 0;
  3226. while ( ( handleObj = matched.handlers[ j++ ] ) &&
  3227. !event.isImmediatePropagationStopped() ) {
  3228. if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
  3229. event.handleObj = handleObj;
  3230. event.data = handleObj.data;
  3231. ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
  3232. handleObj.handler ).apply( matched.elem, args );
  3233. if ( ret !== undefined ) {
  3234. if ( ( event.result = ret ) === false ) {
  3235. event.preventDefault();
  3236. event.stopPropagation();
  3237. }
  3238. }
  3239. }
  3240. }
  3241. }
  3242. if ( special.postDispatch ) {
  3243. special.postDispatch.call( this, event );
  3244. }
  3245. return event.result;
  3246. },
  3247. handlers: function( event, handlers ) {
  3248. var i, matches, sel, handleObj,
  3249. handlerQueue = [],
  3250. delegateCount = handlers.delegateCount,
  3251. cur = event.target;
  3252. if ( delegateCount && cur.nodeType &&
  3253. ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
  3254. for ( ; cur !== this; cur = cur.parentNode || this ) {
  3255. if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
  3256. matches = [];
  3257. for ( i = 0; i < delegateCount; i++ ) {
  3258. handleObj = handlers[ i ];
  3259. sel = handleObj.selector + " ";
  3260. if ( matches[ sel ] === undefined ) {
  3261. matches[ sel ] = handleObj.needsContext ?
  3262. jQuery( sel, this ).index( cur ) > -1 :
  3263. jQuery.find( sel, this, null, [ cur ] ).length;
  3264. }
  3265. if ( matches[ sel ] ) {
  3266. matches.push( handleObj );
  3267. }
  3268. }
  3269. if ( matches.length ) {
  3270. handlerQueue.push( { elem: cur, handlers: matches } );
  3271. }
  3272. }
  3273. }
  3274. }
  3275. if ( delegateCount < handlers.length ) {
  3276. handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
  3277. }
  3278. return handlerQueue;
  3279. },
  3280. addProp: function( name, hook ) {
  3281. Object.defineProperty( jQuery.Event.prototype, name, {
  3282. enumerable: true,
  3283. configurable: true,
  3284. get: jQuery.isFunction( hook ) ?
  3285. function() {
  3286. if ( this.originalEvent ) {
  3287. return hook( this.originalEvent );
  3288. }
  3289. } :
  3290. function() {
  3291. if ( this.originalEvent ) {
  3292. return this.originalEvent[ name ];
  3293. }
  3294. },
  3295. set: function( value ) {
  3296. Object.defineProperty( this, name, {
  3297. enumerable: true,
  3298. configurable: true,
  3299. writable: true,
  3300. value: value
  3301. } );
  3302. }
  3303. } );
  3304. },
  3305. fix: function( originalEvent ) {
  3306. return originalEvent[ jQuery.expando ] ?
  3307. originalEvent :
  3308. new jQuery.Event( originalEvent );
  3309. },
  3310. special: {
  3311. load: {
  3312. noBubble: true
  3313. },
  3314. focus: {
  3315. trigger: function() {
  3316. if ( this !== safeActiveElement() && this.focus ) {
  3317. this.focus();
  3318. return false;
  3319. }
  3320. },
  3321. delegateType: "focusin"
  3322. },
  3323. blur: {
  3324. trigger: function() {
  3325. if ( this === safeActiveElement() && this.blur ) {
  3326. this.blur();
  3327. return false;
  3328. }
  3329. },
  3330. delegateType: "focusout"
  3331. },
  3332. click: {
  3333. trigger: function() {
  3334. if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
  3335. this.click();
  3336. return false;
  3337. }
  3338. },
  3339. _default: function( event ) {
  3340. return jQuery.nodeName( event.target, "a" );
  3341. }
  3342. },
  3343. beforeunload: {
  3344. postDispatch: function( event ) {
  3345. if ( event.result !== undefined && event.originalEvent ) {
  3346. event.originalEvent.returnValue = event.result;
  3347. }
  3348. }
  3349. }
  3350. }
  3351. };
  3352. jQuery.removeEvent = function( elem, type, handle ) {
  3353. if ( elem.removeEventListener ) {
  3354. elem.removeEventListener( type, handle );
  3355. }
  3356. };
  3357. jQuery.Event = function( src, props ) {
  3358. if ( !( this instanceof jQuery.Event ) ) {
  3359. return new jQuery.Event( src, props );
  3360. }
  3361. if ( src && src.type ) {
  3362. this.originalEvent = src;
  3363. this.type = src.type;
  3364. this.isDefaultPrevented = src.defaultPrevented ||
  3365. src.defaultPrevented === undefined &&
  3366. src.returnValue === false ?
  3367. returnTrue :
  3368. returnFalse;
  3369. this.target = ( src.target && src.target.nodeType === 3 ) ?
  3370. src.target.parentNode :
  3371. src.target;
  3372. this.currentTarget = src.currentTarget;
  3373. this.relatedTarget = src.relatedTarget;
  3374. } else {
  3375. this.type = src;
  3376. }
  3377. if ( props ) {
  3378. jQuery.extend( this, props );
  3379. }
  3380. this.timeStamp = src && src.timeStamp || jQuery.now();
  3381. this[ jQuery.expando ] = true;
  3382. };
  3383. jQuery.Event.prototype = {
  3384. constructor: jQuery.Event,
  3385. isDefaultPrevented: returnFalse,
  3386. isPropagationStopped: returnFalse,
  3387. isImmediatePropagationStopped: returnFalse,
  3388. isSimulated: false,
  3389. preventDefault: function() {
  3390. var e = this.originalEvent;
  3391. this.isDefaultPrevented = returnTrue;
  3392. if ( e && !this.isSimulated ) {
  3393. e.preventDefault();
  3394. }
  3395. },
  3396. stopPropagation: function() {
  3397. var e = this.originalEvent;
  3398. this.isPropagationStopped = returnTrue;
  3399. if ( e && !this.isSimulated ) {
  3400. e.stopPropagation();
  3401. }
  3402. },
  3403. stopImmediatePropagation: function() {
  3404. var e = this.originalEvent;
  3405. this.isImmediatePropagationStopped = returnTrue;
  3406. if ( e && !this.isSimulated ) {
  3407. e.stopImmediatePropagation();
  3408. }
  3409. this.stopPropagation();
  3410. }
  3411. };
  3412. jQuery.each( {
  3413. altKey: true,
  3414. bubbles: true,
  3415. cancelable: true,
  3416. changedTouches: true,
  3417. ctrlKey: true,
  3418. detail: true,
  3419. eventPhase: true,
  3420. metaKey: true,
  3421. pageX: true,
  3422. pageY: true,
  3423. shiftKey: true,
  3424. view: true,
  3425. "char": true,
  3426. charCode: true,
  3427. key: true,
  3428. keyCode: true,
  3429. button: true,
  3430. buttons: true,
  3431. clientX: true,
  3432. clientY: true,
  3433. offsetX: true,
  3434. offsetY: true,
  3435. pointerId: true,
  3436. pointerType: true,
  3437. screenX: true,
  3438. screenY: true,
  3439. targetTouches: true,
  3440. toElement: true,
  3441. touches: true,
  3442. which: function( event ) {
  3443. var button = event.button;
  3444. if ( event.which == null && rkeyEvent.test( event.type ) ) {
  3445. return event.charCode != null ? event.charCode : event.keyCode;
  3446. }
  3447. if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
  3448. return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
  3449. }
  3450. return event.which;
  3451. }
  3452. }, jQuery.event.addProp );
  3453. jQuery.each( {
  3454. mouseenter: "mouseover",
  3455. mouseleave: "mouseout",
  3456. pointerenter: "pointerover",
  3457. pointerleave: "pointerout"
  3458. }, function( orig, fix ) {
  3459. jQuery.event.special[ orig ] = {
  3460. delegateType: fix,
  3461. bindType: fix,
  3462. handle: function( event ) {
  3463. var ret,
  3464. target = this,
  3465. related = event.relatedTarget,
  3466. handleObj = event.handleObj;
  3467. if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
  3468. event.type = handleObj.origType;
  3469. ret = handleObj.handler.apply( this, arguments );
  3470. event.type = fix;
  3471. }
  3472. return ret;
  3473. }
  3474. };
  3475. } );
  3476. jQuery.fn.extend( {
  3477. on: function( types, selector, data, fn ) {
  3478. return on( this, types, selector, data, fn );
  3479. },
  3480. one: function( types, selector, data, fn ) {
  3481. return on( this, types, selector, data, fn, 1 );
  3482. },
  3483. off: function( types, selector, fn ) {
  3484. var handleObj, type;
  3485. if ( types && types.preventDefault && types.handleObj ) {
  3486. handleObj = types.handleObj;
  3487. jQuery( types.delegateTarget ).off(
  3488. handleObj.namespace ?
  3489. handleObj.origType + "." + handleObj.namespace :
  3490. handleObj.origType,
  3491. handleObj.selector,
  3492. handleObj.handler
  3493. );
  3494. return this;
  3495. }
  3496. if ( typeof types === "object" ) {
  3497. for ( type in types ) {
  3498. this.off( type, selector, types[ type ] );
  3499. }
  3500. return this;
  3501. }
  3502. if ( selector === false || typeof selector === "function" ) {
  3503. fn = selector;
  3504. selector = undefined;
  3505. }
  3506. if ( fn === false ) {
  3507. fn = returnFalse;
  3508. }
  3509. return this.each( function() {
  3510. jQuery.event.remove( this, types, fn, selector );
  3511. } );
  3512. }
  3513. } );
  3514. var
  3515. rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
  3516. rnoInnerhtml = /<script|<style|<link/i,
  3517. rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
  3518. rscriptTypeMasked = /^true\/(.*)/,
  3519. rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
  3520. function manipulationTarget( elem, content ) {
  3521. if ( jQuery.nodeName( elem, "table" ) &&
  3522. jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
  3523. return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
  3524. }
  3525. return elem;
  3526. }
  3527. function disableScript( elem ) {
  3528. elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
  3529. return elem;
  3530. }
  3531. function restoreScript( elem ) {
  3532. var match = rscriptTypeMasked.exec( elem.type );
  3533. if ( match ) {
  3534. elem.type = match[ 1 ];
  3535. } else {
  3536. elem.removeAttribute( "type" );
  3537. }
  3538. return elem;
  3539. }
  3540. function cloneCopyEvent( src, dest ) {
  3541. var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
  3542. if ( dest.nodeType !== 1 ) {
  3543. return;
  3544. }
  3545. if ( dataPriv.hasData( src ) ) {
  3546. pdataOld = dataPriv.access( src );
  3547. pdataCur = dataPriv.set( dest, pdataOld );
  3548. events = pdataOld.events;
  3549. if ( events ) {
  3550. delete pdataCur.handle;
  3551. pdataCur.events = {};
  3552. for ( type in events ) {
  3553. for ( i = 0, l = events[ type ].length; i < l; i++ ) {
  3554. jQuery.event.add( dest, type, events[ type ][ i ] );
  3555. }
  3556. }
  3557. }
  3558. }
  3559. if ( dataUser.hasData( src ) ) {
  3560. udataOld = dataUser.access( src );
  3561. udataCur = jQuery.extend( {}, udataOld );
  3562. dataUser.set( dest, udataCur );
  3563. }
  3564. }
  3565. function fixInput( src, dest ) {
  3566. var nodeName = dest.nodeName.toLowerCase();
  3567. if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
  3568. dest.checked = src.checked;
  3569. } else if ( nodeName === "input" || nodeName === "textarea" ) {
  3570. dest.defaultValue = src.defaultValue;
  3571. }
  3572. }
  3573. function domManip( collection, args, callback, ignored ) {
  3574. args = concat.apply( [], args );
  3575. var fragment, first, scripts, hasScripts, node, doc,
  3576. i = 0,
  3577. l = collection.length,
  3578. iNoClone = l - 1,
  3579. value = args[ 0 ],
  3580. isFunction = jQuery.isFunction( value );
  3581. if ( isFunction ||
  3582. ( l > 1 && typeof value === "string" &&
  3583. !support.checkClone && rchecked.test( value ) ) ) {
  3584. return collection.each( function( index ) {
  3585. var self = collection.eq( index );
  3586. if ( isFunction ) {
  3587. args[ 0 ] = value.call( this, index, self.html() );
  3588. }
  3589. domManip( self, args, callback, ignored );
  3590. } );
  3591. }
  3592. if ( l ) {
  3593. fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
  3594. first = fragment.firstChild;
  3595. if ( fragment.childNodes.length === 1 ) {
  3596. fragment = first;
  3597. }
  3598. if ( first || ignored ) {
  3599. scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
  3600. hasScripts = scripts.length;
  3601. for ( ; i < l; i++ ) {
  3602. node = fragment;
  3603. if ( i !== iNoClone ) {
  3604. node = jQuery.clone( node, true, true );
  3605. if ( hasScripts ) {
  3606. jQuery.merge( scripts, getAll( node, "script" ) );
  3607. }
  3608. }
  3609. callback.call( collection[ i ], node, i );
  3610. }
  3611. if ( hasScripts ) {
  3612. doc = scripts[ scripts.length - 1 ].ownerDocument;
  3613. jQuery.map( scripts, restoreScript );
  3614. for ( i = 0; i < hasScripts; i++ ) {
  3615. node = scripts[ i ];
  3616. if ( rscriptType.test( node.type || "" ) &&
  3617. !dataPriv.access( node, "globalEval" ) &&
  3618. jQuery.contains( doc, node ) ) {
  3619. if ( node.src ) {
  3620. if ( jQuery._evalUrl ) {
  3621. jQuery._evalUrl( node.src );
  3622. }
  3623. } else {
  3624. DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
  3625. }
  3626. }
  3627. }
  3628. }
  3629. }
  3630. }
  3631. return collection;
  3632. }
  3633. function remove( elem, selector, keepData ) {
  3634. var node,
  3635. nodes = selector ? jQuery.filter( selector, elem ) : elem,
  3636. i = 0;
  3637. for ( ; ( node = nodes[ i ] ) != null; i++ ) {
  3638. if ( !keepData && node.nodeType === 1 ) {
  3639. jQuery.cleanData( getAll( node ) );
  3640. }
  3641. if ( node.parentNode ) {
  3642. if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
  3643. setGlobalEval( getAll( node, "script" ) );
  3644. }
  3645. node.parentNode.removeChild( node );
  3646. }
  3647. }
  3648. return elem;
  3649. }
  3650. jQuery.extend( {
  3651. htmlPrefilter: function( html ) {
  3652. return html.replace( rxhtmlTag, "<$1></$2>" );
  3653. },
  3654. clone: function( elem, dataAndEvents, deepDataAndEvents ) {
  3655. var i, l, srcElements, destElements,
  3656. clone = elem.cloneNode( true ),
  3657. inPage = jQuery.contains( elem.ownerDocument, elem );
  3658. if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
  3659. !jQuery.isXMLDoc( elem ) ) {
  3660. destElements = getAll( clone );
  3661. srcElements = getAll( elem );
  3662. for ( i = 0, l = srcElements.length; i < l; i++ ) {
  3663. fixInput( srcElements[ i ], destElements[ i ] );
  3664. }
  3665. }
  3666. if ( dataAndEvents ) {
  3667. if ( deepDataAndEvents ) {
  3668. srcElements = srcElements || getAll( elem );
  3669. destElements = destElements || getAll( clone );
  3670. for ( i = 0, l = srcElements.length; i < l; i++ ) {
  3671. cloneCopyEvent( srcElements[ i ], destElements[ i ] );
  3672. }
  3673. } else {
  3674. cloneCopyEvent( elem, clone );
  3675. }
  3676. }
  3677. destElements = getAll( clone, "script" );
  3678. if ( destElements.length > 0 ) {
  3679. setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
  3680. }
  3681. return clone;
  3682. },
  3683. cleanData: function( elems ) {
  3684. var data, elem, type,
  3685. special = jQuery.event.special,
  3686. i = 0;
  3687. for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
  3688. if ( acceptData( elem ) ) {
  3689. if ( ( data = elem[ dataPriv.expando ] ) ) {
  3690. if ( data.events ) {
  3691. for ( type in data.events ) {
  3692. if ( special[ type ] ) {
  3693. jQuery.event.remove( elem, type );
  3694. } else {
  3695. jQuery.removeEvent( elem, type, data.handle );
  3696. }
  3697. }
  3698. }
  3699. elem[ dataPriv.expando ] = undefined;
  3700. }
  3701. if ( elem[ dataUser.expando ] ) {
  3702. elem[ dataUser.expando ] = undefined;
  3703. }
  3704. }
  3705. }
  3706. }
  3707. } );
  3708. jQuery.fn.extend( {
  3709. detach: function( selector ) {
  3710. return remove( this, selector, true );
  3711. },
  3712. remove: function( selector ) {
  3713. return remove( this, selector );
  3714. },
  3715. text: function( value ) {
  3716. return access( this, function( value ) {
  3717. return value === undefined ?
  3718. jQuery.text( this ) :
  3719. this.empty().each( function() {
  3720. if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  3721. this.textContent = value;
  3722. }
  3723. } );
  3724. }, null, value, arguments.length );
  3725. },
  3726. append: function() {
  3727. return domManip( this, arguments, function( elem ) {
  3728. if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  3729. var target = manipulationTarget( this, elem );
  3730. target.appendChild( elem );
  3731. }
  3732. } );
  3733. },
  3734. prepend: function() {
  3735. return domManip( this, arguments, function( elem ) {
  3736. if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
  3737. var target = manipulationTarget( this, elem );
  3738. target.insertBefore( elem, target.firstChild );
  3739. }
  3740. } );
  3741. },
  3742. before: function() {
  3743. return domManip( this, arguments, function( elem ) {
  3744. if ( this.parentNode ) {
  3745. this.parentNode.insertBefore( elem, this );
  3746. }
  3747. } );
  3748. },
  3749. after: function() {
  3750. return domManip( this, arguments, function( elem ) {
  3751. if ( this.parentNode ) {
  3752. this.parentNode.insertBefore( elem, this.nextSibling );
  3753. }
  3754. } );
  3755. },
  3756. empty: function() {
  3757. var elem,
  3758. i = 0;
  3759. for ( ; ( elem = this[ i ] ) != null; i++ ) {
  3760. if ( elem.nodeType === 1 ) {
  3761. jQuery.cleanData( getAll( elem, false ) );
  3762. elem.textContent = "";
  3763. }
  3764. }
  3765. return this;
  3766. },
  3767. clone: function( dataAndEvents, deepDataAndEvents ) {
  3768. dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
  3769. deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
  3770. return this.map( function() {
  3771. return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
  3772. } );
  3773. },
  3774. html: function( value ) {
  3775. return access( this, function( value ) {
  3776. var elem = this[ 0 ] || {},
  3777. i = 0,
  3778. l = this.length;
  3779. if ( value === undefined && elem.nodeType === 1 ) {
  3780. return elem.innerHTML;
  3781. }
  3782. if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
  3783. !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
  3784. value = jQuery.htmlPrefilter( value );
  3785. try {
  3786. for ( ; i < l; i++ ) {
  3787. elem = this[ i ] || {};
  3788. if ( elem.nodeType === 1 ) {
  3789. jQuery.cleanData( getAll( elem, false ) );
  3790. elem.innerHTML = value;
  3791. }
  3792. }
  3793. elem = 0;
  3794. } catch ( e ) {}
  3795. }
  3796. if ( elem ) {
  3797. this.empty().append( value );
  3798. }
  3799. }, null, value, arguments.length );
  3800. },
  3801. replaceWith: function() {
  3802. var ignored = [];
  3803. return domManip( this, arguments, function( elem ) {
  3804. var parent = this.parentNode;
  3805. if ( jQuery.inArray( this, ignored ) < 0 ) {
  3806. jQuery.cleanData( getAll( this ) );
  3807. if ( parent ) {
  3808. parent.replaceChild( elem, this );
  3809. }
  3810. }
  3811. }, ignored );
  3812. }
  3813. } );
  3814. jQuery.each( {
  3815. appendTo: "append",
  3816. prependTo: "prepend",
  3817. insertBefore: "before",
  3818. insertAfter: "after",
  3819. replaceAll: "replaceWith"
  3820. }, function( name, original ) {
  3821. jQuery.fn[ name ] = function( selector ) {
  3822. var elems,
  3823. ret = [],
  3824. insert = jQuery( selector ),
  3825. last = insert.length - 1,
  3826. i = 0;
  3827. for ( ; i <= last; i++ ) {
  3828. elems = i === last ? this : this.clone( true );
  3829. jQuery( insert[ i ] )[ original ]( elems );
  3830. push.apply( ret, elems.get() );
  3831. }
  3832. return this.pushStack( ret );
  3833. };
  3834. } );
  3835. var rmargin = ( /^margin/ );
  3836. var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
  3837. var getStyles = function( elem ) {
  3838. var view = elem.ownerDocument.defaultView;
  3839. if ( !view || !view.opener ) {
  3840. view = window;
  3841. }
  3842. return view.getComputedStyle( elem );
  3843. };
  3844. ( function() {
  3845. function computeStyleTests() {
  3846. if ( !div ) {
  3847. return;
  3848. }
  3849. div.style.cssText =
  3850. "box-sizing:border-box;" +
  3851. "position:relative;display:block;" +
  3852. "margin:auto;border:1px;padding:1px;" +
  3853. "top:1%;width:50%";
  3854. div.innerHTML = "";
  3855. documentElement.appendChild( container );
  3856. var divStyle = window.getComputedStyle( div );
  3857. pixelPositionVal = divStyle.top !== "1%";
  3858. reliableMarginLeftVal = divStyle.marginLeft === "2px";
  3859. boxSizingReliableVal = divStyle.width === "4px";
  3860. div.style.marginRight = "50%";
  3861. pixelMarginRightVal = divStyle.marginRight === "4px";
  3862. documentElement.removeChild( container );
  3863. div = null;
  3864. }
  3865. var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
  3866. container = document.createElement( "div" ),
  3867. div = document.createElement( "div" );
  3868. if ( !div.style ) {
  3869. return;
  3870. }
  3871. div.style.backgroundClip = "content-box";
  3872. div.cloneNode( true ).style.backgroundClip = "";
  3873. support.clearCloneStyle = div.style.backgroundClip === "content-box";
  3874. container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
  3875. "padding:0;margin-top:1px;position:absolute";
  3876. container.appendChild( div );
  3877. jQuery.extend( support, {
  3878. pixelPosition: function() {
  3879. computeStyleTests();
  3880. return pixelPositionVal;
  3881. },
  3882. boxSizingReliable: function() {
  3883. computeStyleTests();
  3884. return boxSizingReliableVal;
  3885. },
  3886. pixelMarginRight: function() {
  3887. computeStyleTests();
  3888. return pixelMarginRightVal;
  3889. },
  3890. reliableMarginLeft: function() {
  3891. computeStyleTests();
  3892. return reliableMarginLeftVal;
  3893. }
  3894. } );
  3895. } )();
  3896. function curCSS( elem, name, computed ) {
  3897. var width, minWidth, maxWidth, ret,
  3898. style = elem.style;
  3899. computed = computed || getStyles( elem );
  3900. if ( computed ) {
  3901. ret = computed.getPropertyValue( name ) || computed[ name ];
  3902. if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
  3903. ret = jQuery.style( elem, name );
  3904. }
  3905. if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
  3906. width = style.width;
  3907. minWidth = style.minWidth;
  3908. maxWidth = style.maxWidth;
  3909. style.minWidth = style.maxWidth = style.width = ret;
  3910. ret = computed.width;
  3911. style.width = width;
  3912. style.minWidth = minWidth;
  3913. style.maxWidth = maxWidth;
  3914. }
  3915. }
  3916. return ret !== undefined ?
  3917. ret + "" :
  3918. ret;
  3919. }
  3920. function addGetHookIf( conditionFn, hookFn ) {
  3921. return {
  3922. get: function() {
  3923. if ( conditionFn() ) {
  3924. delete this.get;
  3925. return;
  3926. }
  3927. return ( this.get = hookFn ).apply( this, arguments );
  3928. }
  3929. };
  3930. }
  3931. var
  3932. rdisplayswap = /^(none|table(?!-c[ea]).+)/,
  3933. cssShow = { position: "absolute", visibility: "hidden", display: "block" },
  3934. cssNormalTransform = {
  3935. letterSpacing: "0",
  3936. fontWeight: "400"
  3937. },
  3938. cssPrefixes = [ "Webkit", "Moz", "ms" ],
  3939. emptyStyle = document.createElement( "div" ).style;
  3940. function vendorPropName( name ) {
  3941. if ( name in emptyStyle ) {
  3942. return name;
  3943. }
  3944. var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
  3945. i = cssPrefixes.length;
  3946. while ( i-- ) {
  3947. name = cssPrefixes[ i ] + capName;
  3948. if ( name in emptyStyle ) {
  3949. return name;
  3950. }
  3951. }
  3952. }
  3953. function setPositiveNumber( elem, value, subtract ) {
  3954. var matches = rcssNum.exec( value );
  3955. return matches ?
  3956. Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
  3957. value;
  3958. }
  3959. function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
  3960. var i = extra === ( isBorderBox ? "border" : "content" ) ?
  3961. 4 :
  3962. name === "width" ? 1 : 0,
  3963. val = 0;
  3964. for ( ; i < 4; i += 2 ) {
  3965. if ( extra === "margin" ) {
  3966. val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
  3967. }
  3968. if ( isBorderBox ) {
  3969. if ( extra === "content" ) {
  3970. val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
  3971. }
  3972. if ( extra !== "margin" ) {
  3973. val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
  3974. }
  3975. } else {
  3976. val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
  3977. if ( extra !== "padding" ) {
  3978. val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
  3979. }
  3980. }
  3981. }
  3982. return val;
  3983. }
  3984. function getWidthOrHeight( elem, name, extra ) {
  3985. var val,
  3986. valueIsBorderBox = true,
  3987. styles = getStyles( elem ),
  3988. isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
  3989. if ( elem.getClientRects().length ) {
  3990. val = elem.getBoundingClientRect()[ name ];
  3991. }
  3992. if ( val <= 0 || val == null ) {
  3993. val = curCSS( elem, name, styles );
  3994. if ( val < 0 || val == null ) {
  3995. val = elem.style[ name ];
  3996. }
  3997. if ( rnumnonpx.test( val ) ) {
  3998. return val;
  3999. }
  4000. valueIsBorderBox = isBorderBox &&
  4001. ( support.boxSizingReliable() || val === elem.style[ name ] );
  4002. val = parseFloat( val ) || 0;
  4003. }
  4004. return ( val +
  4005. augmentWidthOrHeight(
  4006. elem,
  4007. name,
  4008. extra || ( isBorderBox ? "border" : "content" ),
  4009. valueIsBorderBox,
  4010. styles
  4011. )
  4012. ) + "px";
  4013. }
  4014. jQuery.extend( {
  4015. cssHooks: {
  4016. opacity: {
  4017. get: function( elem, computed ) {
  4018. if ( computed ) {
  4019. var ret = curCSS( elem, "opacity" );
  4020. return ret === "" ? "1" : ret;
  4021. }
  4022. }
  4023. }
  4024. },
  4025. cssNumber: {
  4026. "animationIterationCount": true,
  4027. "columnCount": true,
  4028. "fillOpacity": true,
  4029. "flexGrow": true,
  4030. "flexShrink": true,
  4031. "fontWeight": true,
  4032. "lineHeight": true,
  4033. "opacity": true,
  4034. "order": true,
  4035. "orphans": true,
  4036. "widows": true,
  4037. "zIndex": true,
  4038. "zoom": true
  4039. },
  4040. cssProps: {
  4041. "float": "cssFloat"
  4042. },
  4043. style: function( elem, name, value, extra ) {
  4044. if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
  4045. return;
  4046. }
  4047. var ret, type, hooks,
  4048. origName = jQuery.camelCase( name ),
  4049. style = elem.style;
  4050. name = jQuery.cssProps[ origName ] ||
  4051. ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
  4052. hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
  4053. if ( value !== undefined ) {
  4054. type = typeof value;
  4055. if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
  4056. value = adjustCSS( elem, name, ret );
  4057. type = "number";
  4058. }
  4059. if ( value == null || value !== value ) {
  4060. return;
  4061. }
  4062. if ( type === "number" ) {
  4063. value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
  4064. }
  4065. if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
  4066. style[ name ] = "inherit";
  4067. }
  4068. if ( !hooks || !( "set" in hooks ) ||
  4069. ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
  4070. style[ name ] = value;
  4071. }
  4072. } else {
  4073. if ( hooks && "get" in hooks &&
  4074. ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
  4075. return ret;
  4076. }
  4077. return style[ name ];
  4078. }
  4079. },
  4080. css: function( elem, name, extra, styles ) {
  4081. var val, num, hooks,
  4082. origName = jQuery.camelCase( name );
  4083. name = jQuery.cssProps[ origName ] ||
  4084. ( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
  4085. hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
  4086. if ( hooks && "get" in hooks ) {
  4087. val = hooks.get( elem, true, extra );
  4088. }
  4089. if ( val === undefined ) {
  4090. val = curCSS( elem, name, styles );
  4091. }
  4092. if ( val === "normal" && name in cssNormalTransform ) {
  4093. val = cssNormalTransform[ name ];
  4094. }
  4095. if ( extra === "" || extra ) {
  4096. num = parseFloat( val );
  4097. return extra === true || isFinite( num ) ? num || 0 : val;
  4098. }
  4099. return val;
  4100. }
  4101. } );
  4102. jQuery.each( [ "height", "width" ], function( i, name ) {
  4103. jQuery.cssHooks[ name ] = {
  4104. get: function( elem, computed, extra ) {
  4105. if ( computed ) {
  4106. return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
  4107. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
  4108. swap( elem, cssShow, function() {
  4109. return getWidthOrHeight( elem, name, extra );
  4110. } ) :
  4111. getWidthOrHeight( elem, name, extra );
  4112. }
  4113. },
  4114. set: function( elem, value, extra ) {
  4115. var matches,
  4116. styles = extra && getStyles( elem ),
  4117. subtract = extra && augmentWidthOrHeight(
  4118. elem,
  4119. name,
  4120. extra,
  4121. jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
  4122. styles
  4123. );
  4124. if ( subtract && ( matches = rcssNum.exec( value ) ) &&
  4125. ( matches[ 3 ] || "px" ) !== "px" ) {
  4126. elem.style[ name ] = value;
  4127. value = jQuery.css( elem, name );
  4128. }
  4129. return setPositiveNumber( elem, value, subtract );
  4130. }
  4131. };
  4132. } );
  4133. jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
  4134. function( elem, computed ) {
  4135. if ( computed ) {
  4136. return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
  4137. elem.getBoundingClientRect().left -
  4138. swap( elem, { marginLeft: 0 }, function() {
  4139. return elem.getBoundingClientRect().left;
  4140. } )
  4141. ) + "px";
  4142. }
  4143. }
  4144. );
  4145. jQuery.each( {
  4146. margin: "",
  4147. padding: "",
  4148. border: "Width"
  4149. }, function( prefix, suffix ) {
  4150. jQuery.cssHooks[ prefix + suffix ] = {
  4151. expand: function( value ) {
  4152. var i = 0,
  4153. expanded = {},
  4154. parts = typeof value === "string" ? value.split( " " ) : [ value ];
  4155. for ( ; i < 4; i++ ) {
  4156. expanded[ prefix + cssExpand[ i ] + suffix ] =
  4157. parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
  4158. }
  4159. return expanded;
  4160. }
  4161. };
  4162. if ( !rmargin.test( prefix ) ) {
  4163. jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
  4164. }
  4165. } );
  4166. jQuery.fn.extend( {
  4167. css: function( name, value ) {
  4168. return access( this, function( elem, name, value ) {
  4169. var styles, len,
  4170. map = {},
  4171. i = 0;
  4172. if ( jQuery.isArray( name ) ) {
  4173. styles = getStyles( elem );
  4174. len = name.length;
  4175. for ( ; i < len; i++ ) {
  4176. map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
  4177. }
  4178. return map;
  4179. }
  4180. return value !== undefined ?
  4181. jQuery.style( elem, name, value ) :
  4182. jQuery.css( elem, name );
  4183. }, name, value, arguments.length > 1 );
  4184. }
  4185. } );
  4186. function Tween( elem, options, prop, end, easing ) {
  4187. return new Tween.prototype.init( elem, options, prop, end, easing );
  4188. }
  4189. jQuery.Tween = Tween;
  4190. Tween.prototype = {
  4191. constructor: Tween,
  4192. init: function( elem, options, prop, end, easing, unit ) {
  4193. this.elem = elem;
  4194. this.prop = prop;
  4195. this.easing = easing || jQuery.easing._default;
  4196. this.options = options;
  4197. this.start = this.now = this.cur();
  4198. this.end = end;
  4199. this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
  4200. },
  4201. cur: function() {
  4202. var hooks = Tween.propHooks[ this.prop ];
  4203. return hooks && hooks.get ?
  4204. hooks.get( this ) :
  4205. Tween.propHooks._default.get( this );
  4206. },
  4207. run: function( percent ) {
  4208. var eased,
  4209. hooks = Tween.propHooks[ this.prop ];
  4210. if ( this.options.duration ) {
  4211. this.pos = eased = jQuery.easing[ this.easing ](
  4212. percent, this.options.duration * percent, 0, 1, this.options.duration
  4213. );
  4214. } else {
  4215. this.pos = eased = percent;
  4216. }
  4217. this.now = ( this.end - this.start ) * eased + this.start;
  4218. if ( this.options.step ) {
  4219. this.options.step.call( this.elem, this.now, this );
  4220. }
  4221. if ( hooks && hooks.set ) {
  4222. hooks.set( this );
  4223. } else {
  4224. Tween.propHooks._default.set( this );
  4225. }
  4226. return this;
  4227. }
  4228. };
  4229. Tween.prototype.init.prototype = Tween.prototype;
  4230. Tween.propHooks = {
  4231. _default: {
  4232. get: function( tween ) {
  4233. var result;
  4234. if ( tween.elem.nodeType !== 1 ||
  4235. tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
  4236. return tween.elem[ tween.prop ];
  4237. }
  4238. result = jQuery.css( tween.elem, tween.prop, "" );
  4239. return !result || result === "auto" ? 0 : result;
  4240. },
  4241. set: function( tween ) {
  4242. if ( jQuery.fx.step[ tween.prop ] ) {
  4243. jQuery.fx.step[ tween.prop ]( tween );
  4244. } else if ( tween.elem.nodeType === 1 &&
  4245. ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
  4246. jQuery.cssHooks[ tween.prop ] ) ) {
  4247. jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
  4248. } else {
  4249. tween.elem[ tween.prop ] = tween.now;
  4250. }
  4251. }
  4252. }
  4253. };
  4254. Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
  4255. set: function( tween ) {
  4256. if ( tween.elem.nodeType && tween.elem.parentNode ) {
  4257. tween.elem[ tween.prop ] = tween.now;
  4258. }
  4259. }
  4260. };
  4261. jQuery.easing = {
  4262. linear: function( p ) {
  4263. return p;
  4264. },
  4265. swing: function( p ) {
  4266. return 0.5 - Math.cos( p * Math.PI ) / 2;
  4267. },
  4268. _default: "swing"
  4269. };
  4270. jQuery.fx = Tween.prototype.init;
  4271. jQuery.fx.step = {};
  4272. var
  4273. fxNow, timerId,
  4274. rfxtypes = /^(?:toggle|show|hide)$/,
  4275. rrun = /queueHooks$/;
  4276. function raf() {
  4277. if ( timerId ) {
  4278. window.requestAnimationFrame( raf );
  4279. jQuery.fx.tick();
  4280. }
  4281. }
  4282. function createFxNow() {
  4283. window.setTimeout( function() {
  4284. fxNow = undefined;
  4285. } );
  4286. return ( fxNow = jQuery.now() );
  4287. }
  4288. function genFx( type, includeWidth ) {
  4289. var which,
  4290. i = 0,
  4291. attrs = { height: type };
  4292. includeWidth = includeWidth ? 1 : 0;
  4293. for ( ; i < 4; i += 2 - includeWidth ) {
  4294. which = cssExpand[ i ];
  4295. attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
  4296. }
  4297. if ( includeWidth ) {
  4298. attrs.opacity = attrs.width = type;
  4299. }
  4300. return attrs;
  4301. }
  4302. function createTween( value, prop, animation ) {
  4303. var tween,
  4304. collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
  4305. index = 0,
  4306. length = collection.length;
  4307. for ( ; index < length; index++ ) {
  4308. if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
  4309. return tween;
  4310. }
  4311. }
  4312. }
  4313. function defaultPrefilter( elem, props, opts ) {
  4314. var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
  4315. isBox = "width" in props || "height" in props,
  4316. anim = this,
  4317. orig = {},
  4318. style = elem.style,
  4319. hidden = elem.nodeType && isHiddenWithinTree( elem ),
  4320. dataShow = dataPriv.get( elem, "fxshow" );
  4321. if ( !opts.queue ) {
  4322. hooks = jQuery._queueHooks( elem, "fx" );
  4323. if ( hooks.unqueued == null ) {
  4324. hooks.unqueued = 0;
  4325. oldfire = hooks.empty.fire;
  4326. hooks.empty.fire = function() {
  4327. if ( !hooks.unqueued ) {
  4328. oldfire();
  4329. }
  4330. };
  4331. }
  4332. hooks.unqueued++;
  4333. anim.always( function() {
  4334. anim.always( function() {
  4335. hooks.unqueued--;
  4336. if ( !jQuery.queue( elem, "fx" ).length ) {
  4337. hooks.empty.fire();
  4338. }
  4339. } );
  4340. } );
  4341. }
  4342. for ( prop in props ) {
  4343. value = props[ prop ];
  4344. if ( rfxtypes.test( value ) ) {
  4345. delete props[ prop ];
  4346. toggle = toggle || value === "toggle";
  4347. if ( value === ( hidden ? "hide" : "show" ) ) {
  4348. if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
  4349. hidden = true;
  4350. } else {
  4351. continue;
  4352. }
  4353. }
  4354. orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
  4355. }
  4356. }
  4357. propTween = !jQuery.isEmptyObject( props );
  4358. if ( !propTween && jQuery.isEmptyObject( orig ) ) {
  4359. return;
  4360. }
  4361. if ( isBox && elem.nodeType === 1 ) {
  4362. opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
  4363. restoreDisplay = dataShow && dataShow.display;
  4364. if ( restoreDisplay == null ) {
  4365. restoreDisplay = dataPriv.get( elem, "display" );
  4366. }
  4367. display = jQuery.css( elem, "display" );
  4368. if ( display === "none" ) {
  4369. if ( restoreDisplay ) {
  4370. display = restoreDisplay;
  4371. } else {
  4372. showHide( [ elem ], true );
  4373. restoreDisplay = elem.style.display || restoreDisplay;
  4374. display = jQuery.css( elem, "display" );
  4375. showHide( [ elem ] );
  4376. }
  4377. }
  4378. if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
  4379. if ( jQuery.css( elem, "float" ) === "none" ) {
  4380. if ( !propTween ) {
  4381. anim.done( function() {
  4382. style.display = restoreDisplay;
  4383. } );
  4384. if ( restoreDisplay == null ) {
  4385. display = style.display;
  4386. restoreDisplay = display === "none" ? "" : display;
  4387. }
  4388. }
  4389. style.display = "inline-block";
  4390. }
  4391. }
  4392. }
  4393. if ( opts.overflow ) {
  4394. style.overflow = "hidden";
  4395. anim.always( function() {
  4396. style.overflow = opts.overflow[ 0 ];
  4397. style.overflowX = opts.overflow[ 1 ];
  4398. style.overflowY = opts.overflow[ 2 ];
  4399. } );
  4400. }
  4401. propTween = false;
  4402. for ( prop in orig ) {
  4403. if ( !propTween ) {
  4404. if ( dataShow ) {
  4405. if ( "hidden" in dataShow ) {
  4406. hidden = dataShow.hidden;
  4407. }
  4408. } else {
  4409. dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
  4410. }
  4411. if ( toggle ) {
  4412. dataShow.hidden = !hidden;
  4413. }
  4414. if ( hidden ) {
  4415. showHide( [ elem ], true );
  4416. }
  4417. anim.done( function() {
  4418. if ( !hidden ) {
  4419. showHide( [ elem ] );
  4420. }
  4421. dataPriv.remove( elem, "fxshow" );
  4422. for ( prop in orig ) {
  4423. jQuery.style( elem, prop, orig[ prop ] );
  4424. }
  4425. } );
  4426. }
  4427. propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
  4428. if ( !( prop in dataShow ) ) {
  4429. dataShow[ prop ] = propTween.start;
  4430. if ( hidden ) {
  4431. propTween.end = propTween.start;
  4432. propTween.start = 0;
  4433. }
  4434. }
  4435. }
  4436. }
  4437. function propFilter( props, specialEasing ) {
  4438. var index, name, easing, value, hooks;
  4439. for ( index in props ) {
  4440. name = jQuery.camelCase( index );
  4441. easing = specialEasing[ name ];
  4442. value = props[ index ];
  4443. if ( jQuery.isArray( value ) ) {
  4444. easing = value[ 1 ];
  4445. value = props[ index ] = value[ 0 ];
  4446. }
  4447. if ( index !== name ) {
  4448. props[ name ] = value;
  4449. delete props[ index ];
  4450. }
  4451. hooks = jQuery.cssHooks[ name ];
  4452. if ( hooks && "expand" in hooks ) {
  4453. value = hooks.expand( value );
  4454. delete props[ name ];
  4455. for ( index in value ) {
  4456. if ( !( index in props ) ) {
  4457. props[ index ] = value[ index ];
  4458. specialEasing[ index ] = easing;
  4459. }
  4460. }
  4461. } else {
  4462. specialEasing[ name ] = easing;
  4463. }
  4464. }
  4465. }
  4466. function Animation( elem, properties, options ) {
  4467. var result,
  4468. stopped,
  4469. index = 0,
  4470. length = Animation.prefilters.length,
  4471. deferred = jQuery.Deferred().always( function() {
  4472. delete tick.elem;
  4473. } ),
  4474. tick = function() {
  4475. if ( stopped ) {
  4476. return false;
  4477. }
  4478. var currentTime = fxNow || createFxNow(),
  4479. remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
  4480. temp = remaining / animation.duration || 0,
  4481. percent = 1 - temp,
  4482. index = 0,
  4483. length = animation.tweens.length;
  4484. for ( ; index < length; index++ ) {
  4485. animation.tweens[ index ].run( percent );
  4486. }
  4487. deferred.notifyWith( elem, [ animation, percent, remaining ] );
  4488. if ( percent < 1 && length ) {
  4489. return remaining;
  4490. } else {
  4491. deferred.resolveWith( elem, [ animation ] );
  4492. return false;
  4493. }
  4494. },
  4495. animation = deferred.promise( {
  4496. elem: elem,
  4497. props: jQuery.extend( {}, properties ),
  4498. opts: jQuery.extend( true, {
  4499. specialEasing: {},
  4500. easing: jQuery.easing._default
  4501. }, options ),
  4502. originalProperties: properties,
  4503. originalOptions: options,
  4504. startTime: fxNow || createFxNow(),
  4505. duration: options.duration,
  4506. tweens: [],
  4507. createTween: function( prop, end ) {
  4508. var tween = jQuery.Tween( elem, animation.opts, prop, end,
  4509. animation.opts.specialEasing[ prop ] || animation.opts.easing );
  4510. animation.tweens.push( tween );
  4511. return tween;
  4512. },
  4513. stop: function( gotoEnd ) {
  4514. var index = 0,
  4515. length = gotoEnd ? animation.tweens.length : 0;
  4516. if ( stopped ) {
  4517. return this;
  4518. }
  4519. stopped = true;
  4520. for ( ; index < length; index++ ) {
  4521. animation.tweens[ index ].run( 1 );
  4522. }
  4523. if ( gotoEnd ) {
  4524. deferred.notifyWith( elem, [ animation, 1, 0 ] );
  4525. deferred.resolveWith( elem, [ animation, gotoEnd ] );
  4526. } else {
  4527. deferred.rejectWith( elem, [ animation, gotoEnd ] );
  4528. }
  4529. return this;
  4530. }
  4531. } ),
  4532. props = animation.props;
  4533. propFilter( props, animation.opts.specialEasing );
  4534. for ( ; index < length; index++ ) {
  4535. result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
  4536. if ( result ) {
  4537. if ( jQuery.isFunction( result.stop ) ) {
  4538. jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
  4539. jQuery.proxy( result.stop, result );
  4540. }
  4541. return result;
  4542. }
  4543. }
  4544. jQuery.map( props, createTween, animation );
  4545. if ( jQuery.isFunction( animation.opts.start ) ) {
  4546. animation.opts.start.call( elem, animation );
  4547. }
  4548. jQuery.fx.timer(
  4549. jQuery.extend( tick, {
  4550. elem: elem,
  4551. anim: animation,
  4552. queue: animation.opts.queue
  4553. } )
  4554. );
  4555. return animation.progress( animation.opts.progress )
  4556. .done( animation.opts.done, animation.opts.complete )
  4557. .fail( animation.opts.fail )
  4558. .always( animation.opts.always );
  4559. }
  4560. jQuery.Animation = jQuery.extend( Animation, {
  4561. tweeners: {
  4562. "*": [ function( prop, value ) {
  4563. var tween = this.createTween( prop, value );
  4564. adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
  4565. return tween;
  4566. } ]
  4567. },
  4568. tweener: function( props, callback ) {
  4569. if ( jQuery.isFunction( props ) ) {
  4570. callback = props;
  4571. props = [ "*" ];
  4572. } else {
  4573. props = props.match( rnotwhite );
  4574. }
  4575. var prop,
  4576. index = 0,
  4577. length = props.length;
  4578. for ( ; index < length; index++ ) {
  4579. prop = props[ index ];
  4580. Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
  4581. Animation.tweeners[ prop ].unshift( callback );
  4582. }
  4583. },
  4584. prefilters: [ defaultPrefilter ],
  4585. prefilter: function( callback, prepend ) {
  4586. if ( prepend ) {
  4587. Animation.prefilters.unshift( callback );
  4588. } else {
  4589. Animation.prefilters.push( callback );
  4590. }
  4591. }
  4592. } );
  4593. jQuery.speed = function( speed, easing, fn ) {
  4594. var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
  4595. complete: fn || !fn && easing ||
  4596. jQuery.isFunction( speed ) && speed,
  4597. duration: speed,
  4598. easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
  4599. };
  4600. if ( jQuery.fx.off || document.hidden ) {
  4601. opt.duration = 0;
  4602. } else {
  4603. opt.duration = typeof opt.duration === "number" ?
  4604. opt.duration : opt.duration in jQuery.fx.speeds ?
  4605. jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
  4606. }
  4607. if ( opt.queue == null || opt.queue === true ) {
  4608. opt.queue = "fx";
  4609. }
  4610. opt.old = opt.complete;
  4611. opt.complete = function() {
  4612. if ( jQuery.isFunction( opt.old ) ) {
  4613. opt.old.call( this );
  4614. }
  4615. if ( opt.queue ) {
  4616. jQuery.dequeue( this, opt.queue );
  4617. }
  4618. };
  4619. return opt;
  4620. };
  4621. jQuery.fn.extend( {
  4622. fadeTo: function( speed, to, easing, callback ) {
  4623. return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
  4624. .end().animate( { opacity: to }, speed, easing, callback );
  4625. },
  4626. animate: function( prop, speed, easing, callback ) {
  4627. var empty = jQuery.isEmptyObject( prop ),
  4628. optall = jQuery.speed( speed, easing, callback ),
  4629. doAnimation = function() {
  4630. var anim = Animation( this, jQuery.extend( {}, prop ), optall );
  4631. if ( empty || dataPriv.get( this, "finish" ) ) {
  4632. anim.stop( true );
  4633. }
  4634. };
  4635. doAnimation.finish = doAnimation;
  4636. return empty || optall.queue === false ?
  4637. this.each( doAnimation ) :
  4638. this.queue( optall.queue, doAnimation );
  4639. },
  4640. stop: function( type, clearQueue, gotoEnd ) {
  4641. var stopQueue = function( hooks ) {
  4642. var stop = hooks.stop;
  4643. delete hooks.stop;
  4644. stop( gotoEnd );
  4645. };
  4646. if ( typeof type !== "string" ) {
  4647. gotoEnd = clearQueue;
  4648. clearQueue = type;
  4649. type = undefined;
  4650. }
  4651. if ( clearQueue && type !== false ) {
  4652. this.queue( type || "fx", [] );
  4653. }
  4654. return this.each( function() {
  4655. var dequeue = true,
  4656. index = type != null && type + "queueHooks",
  4657. timers = jQuery.timers,
  4658. data = dataPriv.get( this );
  4659. if ( index ) {
  4660. if ( data[ index ] && data[ index ].stop ) {
  4661. stopQueue( data[ index ] );
  4662. }
  4663. } else {
  4664. for ( index in data ) {
  4665. if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
  4666. stopQueue( data[ index ] );
  4667. }
  4668. }
  4669. }
  4670. for ( index = timers.length; index--; ) {
  4671. if ( timers[ index ].elem === this &&
  4672. ( type == null || timers[ index ].queue === type ) ) {
  4673. timers[ index ].anim.stop( gotoEnd );
  4674. dequeue = false;
  4675. timers.splice( index, 1 );
  4676. }
  4677. }
  4678. if ( dequeue || !gotoEnd ) {
  4679. jQuery.dequeue( this, type );
  4680. }
  4681. } );
  4682. },
  4683. finish: function( type ) {
  4684. if ( type !== false ) {
  4685. type = type || "fx";
  4686. }
  4687. return this.each( function() {
  4688. var index,
  4689. data = dataPriv.get( this ),
  4690. queue = data[ type + "queue" ],
  4691. hooks = data[ type + "queueHooks" ],
  4692. timers = jQuery.timers,
  4693. length = queue ? queue.length : 0;
  4694. data.finish = true;
  4695. jQuery.queue( this, type, [] );
  4696. if ( hooks && hooks.stop ) {
  4697. hooks.stop.call( this, true );
  4698. }
  4699. for ( index = timers.length; index--; ) {
  4700. if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
  4701. timers[ index ].anim.stop( true );
  4702. timers.splice( index, 1 );
  4703. }
  4704. }
  4705. for ( index = 0; index < length; index++ ) {
  4706. if ( queue[ index ] && queue[ index ].finish ) {
  4707. queue[ index ].finish.call( this );
  4708. }
  4709. }
  4710. delete data.finish;
  4711. } );
  4712. }
  4713. } );
  4714. jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
  4715. var cssFn = jQuery.fn[ name ];
  4716. jQuery.fn[ name ] = function( speed, easing, callback ) {
  4717. return speed == null || typeof speed === "boolean" ?
  4718. cssFn.apply( this, arguments ) :
  4719. this.animate( genFx( name, true ), speed, easing, callback );
  4720. };
  4721. } );
  4722. jQuery.each( {
  4723. slideDown: genFx( "show" ),
  4724. slideUp: genFx( "hide" ),
  4725. slideToggle: genFx( "toggle" ),
  4726. fadeIn: { opacity: "show" },
  4727. fadeOut: { opacity: "hide" },
  4728. fadeToggle: { opacity: "toggle" }
  4729. }, function( name, props ) {
  4730. jQuery.fn[ name ] = function( speed, easing, callback ) {
  4731. return this.animate( props, speed, easing, callback );
  4732. };
  4733. } );
  4734. jQuery.timers = [];
  4735. jQuery.fx.tick = function() {
  4736. var timer,
  4737. i = 0,
  4738. timers = jQuery.timers;
  4739. fxNow = jQuery.now();
  4740. for ( ; i < timers.length; i++ ) {
  4741. timer = timers[ i ];
  4742. if ( !timer() && timers[ i ] === timer ) {
  4743. timers.splice( i--, 1 );
  4744. }
  4745. }
  4746. if ( !timers.length ) {
  4747. jQuery.fx.stop();
  4748. }
  4749. fxNow = undefined;
  4750. };
  4751. jQuery.fx.timer = function( timer ) {
  4752. jQuery.timers.push( timer );
  4753. if ( timer() ) {
  4754. jQuery.fx.start();
  4755. } else {
  4756. jQuery.timers.pop();
  4757. }
  4758. };
  4759. jQuery.fx.interval = 13;
  4760. jQuery.fx.start = function() {
  4761. if ( !timerId ) {
  4762. timerId = window.requestAnimationFrame ?
  4763. window.requestAnimationFrame( raf ) :
  4764. window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
  4765. }
  4766. };
  4767. jQuery.fx.stop = function() {
  4768. if ( window.cancelAnimationFrame ) {
  4769. window.cancelAnimationFrame( timerId );
  4770. } else {
  4771. window.clearInterval( timerId );
  4772. }
  4773. timerId = null;
  4774. };
  4775. jQuery.fx.speeds = {
  4776. slow: 600,
  4777. fast: 200,
  4778. _default: 400
  4779. };
  4780. jQuery.fn.delay = function( time, type ) {
  4781. time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
  4782. type = type || "fx";
  4783. return this.queue( type, function( next, hooks ) {
  4784. var timeout = window.setTimeout( next, time );
  4785. hooks.stop = function() {
  4786. window.clearTimeout( timeout );
  4787. };
  4788. } );
  4789. };
  4790. ( function() {
  4791. var input = document.createElement( "input" ),
  4792. select = document.createElement( "select" ),
  4793. opt = select.appendChild( document.createElement( "option" ) );
  4794. input.type = "checkbox";
  4795. support.checkOn = input.value !== "";
  4796. support.optSelected = opt.selected;
  4797. input = document.createElement( "input" );
  4798. input.value = "t";
  4799. input.type = "radio";
  4800. support.radioValue = input.value === "t";
  4801. } )();
  4802. var boolHook,
  4803. attrHandle = jQuery.expr.attrHandle;
  4804. jQuery.fn.extend( {
  4805. attr: function( name, value ) {
  4806. return access( this, jQuery.attr, name, value, arguments.length > 1 );
  4807. },
  4808. removeAttr: function( name ) {
  4809. return this.each( function() {
  4810. jQuery.removeAttr( this, name );
  4811. } );
  4812. }
  4813. } );
  4814. jQuery.extend( {
  4815. attr: function( elem, name, value ) {
  4816. var ret, hooks,
  4817. nType = elem.nodeType;
  4818. if ( nType === 3 || nType === 8 || nType === 2 ) {
  4819. return;
  4820. }
  4821. if ( typeof elem.getAttribute === "undefined" ) {
  4822. return jQuery.prop( elem, name, value );
  4823. }
  4824. if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
  4825. hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
  4826. ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
  4827. }
  4828. if ( value !== undefined ) {
  4829. if ( value === null ) {
  4830. jQuery.removeAttr( elem, name );
  4831. return;
  4832. }
  4833. if ( hooks && "set" in hooks &&
  4834. ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
  4835. return ret;
  4836. }
  4837. elem.setAttribute( name, value + "" );
  4838. return value;
  4839. }
  4840. if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
  4841. return ret;
  4842. }
  4843. ret = jQuery.find.attr( elem, name );
  4844. return ret == null ? undefined : ret;
  4845. },
  4846. attrHooks: {
  4847. type: {
  4848. set: function( elem, value ) {
  4849. if ( !support.radioValue && value === "radio" &&
  4850. jQuery.nodeName( elem, "input" ) ) {
  4851. var val = elem.value;
  4852. elem.setAttribute( "type", value );
  4853. if ( val ) {
  4854. elem.value = val;
  4855. }
  4856. return value;
  4857. }
  4858. }
  4859. }
  4860. },
  4861. removeAttr: function( elem, value ) {
  4862. var name,
  4863. i = 0,
  4864. attrNames = value && value.match( rnotwhite );
  4865. if ( attrNames && elem.nodeType === 1 ) {
  4866. while ( ( name = attrNames[ i++ ] ) ) {
  4867. elem.removeAttribute( name );
  4868. }
  4869. }
  4870. }
  4871. } );
  4872. boolHook = {
  4873. set: function( elem, value, name ) {
  4874. if ( value === false ) {
  4875. jQuery.removeAttr( elem, name );
  4876. } else {
  4877. elem.setAttribute( name, name );
  4878. }
  4879. return name;
  4880. }
  4881. };
  4882. jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
  4883. var getter = attrHandle[ name ] || jQuery.find.attr;
  4884. attrHandle[ name ] = function( elem, name, isXML ) {
  4885. var ret, handle,
  4886. lowercaseName = name.toLowerCase();
  4887. if ( !isXML ) {
  4888. handle = attrHandle[ lowercaseName ];
  4889. attrHandle[ lowercaseName ] = ret;
  4890. ret = getter( elem, name, isXML ) != null ?
  4891. lowercaseName :
  4892. null;
  4893. attrHandle[ lowercaseName ] = handle;
  4894. }
  4895. return ret;
  4896. };
  4897. } );
  4898. var rfocusable = /^(?:input|select|textarea|button)$/i,
  4899. rclickable = /^(?:a|area)$/i;
  4900. jQuery.fn.extend( {
  4901. prop: function( name, value ) {
  4902. return access( this, jQuery.prop, name, value, arguments.length > 1 );
  4903. },
  4904. removeProp: function( name ) {
  4905. return this.each( function() {
  4906. delete this[ jQuery.propFix[ name ] || name ];
  4907. } );
  4908. }
  4909. } );
  4910. jQuery.extend( {
  4911. prop: function( elem, name, value ) {
  4912. var ret, hooks,
  4913. nType = elem.nodeType;
  4914. if ( nType === 3 || nType === 8 || nType === 2 ) {
  4915. return;
  4916. }
  4917. if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
  4918. name = jQuery.propFix[ name ] || name;
  4919. hooks = jQuery.propHooks[ name ];
  4920. }
  4921. if ( value !== undefined ) {
  4922. if ( hooks && "set" in hooks &&
  4923. ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
  4924. return ret;
  4925. }
  4926. return ( elem[ name ] = value );
  4927. }
  4928. if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
  4929. return ret;
  4930. }
  4931. return elem[ name ];
  4932. },
  4933. propHooks: {
  4934. tabIndex: {
  4935. get: function( elem ) {
  4936. var tabindex = jQuery.find.attr( elem, "tabindex" );
  4937. return tabindex ?
  4938. parseInt( tabindex, 10 ) :
  4939. rfocusable.test( elem.nodeName ) ||
  4940. rclickable.test( elem.nodeName ) && elem.href ?
  4941. 0 :
  4942. -1;
  4943. }
  4944. }
  4945. },
  4946. propFix: {
  4947. "for": "htmlFor",
  4948. "class": "className"
  4949. }
  4950. } );
  4951. if ( !support.optSelected ) {
  4952. jQuery.propHooks.selected = {
  4953. get: function( elem ) {
  4954. var parent = elem.parentNode;
  4955. if ( parent && parent.parentNode ) {
  4956. parent.parentNode.selectedIndex;
  4957. }
  4958. return null;
  4959. },
  4960. set: function( elem ) {
  4961. var parent = elem.parentNode;
  4962. if ( parent ) {
  4963. parent.selectedIndex;
  4964. if ( parent.parentNode ) {
  4965. parent.parentNode.selectedIndex;
  4966. }
  4967. }
  4968. }
  4969. };
  4970. }
  4971. jQuery.each( [
  4972. "tabIndex",
  4973. "readOnly",
  4974. "maxLength",
  4975. "cellSpacing",
  4976. "cellPadding",
  4977. "rowSpan",
  4978. "colSpan",
  4979. "useMap",
  4980. "frameBorder",
  4981. "contentEditable"
  4982. ], function() {
  4983. jQuery.propFix[ this.toLowerCase() ] = this;
  4984. } );
  4985. var rclass = /[\t\r\n\f]/g;
  4986. function getClass( elem ) {
  4987. return elem.getAttribute && elem.getAttribute( "class" ) || "";
  4988. }
  4989. jQuery.fn.extend( {
  4990. addClass: function( value ) {
  4991. var classes, elem, cur, curValue, clazz, j, finalValue,
  4992. i = 0;
  4993. if ( jQuery.isFunction( value ) ) {
  4994. return this.each( function( j ) {
  4995. jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
  4996. } );
  4997. }
  4998. if ( typeof value === "string" && value ) {
  4999. classes = value.match( rnotwhite ) || [];
  5000. while ( ( elem = this[ i++ ] ) ) {
  5001. curValue = getClass( elem );
  5002. cur = elem.nodeType === 1 &&
  5003. ( " " + curValue + " " ).replace( rclass, " " );
  5004. if ( cur ) {
  5005. j = 0;
  5006. while ( ( clazz = classes[ j++ ] ) ) {
  5007. if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
  5008. cur += clazz + " ";
  5009. }
  5010. }
  5011. finalValue = jQuery.trim( cur );
  5012. if ( curValue !== finalValue ) {
  5013. elem.setAttribute( "class", finalValue );
  5014. }
  5015. }
  5016. }
  5017. }
  5018. return this;
  5019. },
  5020. removeClass: function( value ) {
  5021. var classes, elem, cur, curValue, clazz, j, finalValue,
  5022. i = 0;
  5023. if ( jQuery.isFunction( value ) ) {
  5024. return this.each( function( j ) {
  5025. jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
  5026. } );
  5027. }
  5028. if ( !arguments.length ) {
  5029. return this.attr( "class", "" );
  5030. }
  5031. if ( typeof value === "string" && value ) {
  5032. classes = value.match( rnotwhite ) || [];
  5033. while ( ( elem = this[ i++ ] ) ) {
  5034. curValue = getClass( elem );
  5035. cur = elem.nodeType === 1 &&
  5036. ( " " + curValue + " " ).replace( rclass, " " );
  5037. if ( cur ) {
  5038. j = 0;
  5039. while ( ( clazz = classes[ j++ ] ) ) {
  5040. while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
  5041. cur = cur.replace( " " + clazz + " ", " " );
  5042. }
  5043. }
  5044. finalValue = jQuery.trim( cur );
  5045. if ( curValue !== finalValue ) {
  5046. elem.setAttribute( "class", finalValue );
  5047. }
  5048. }
  5049. }
  5050. }
  5051. return this;
  5052. },
  5053. toggleClass: function( value, stateVal ) {
  5054. var type = typeof value;
  5055. if ( typeof stateVal === "boolean" && type === "string" ) {
  5056. return stateVal ? this.addClass( value ) : this.removeClass( value );
  5057. }
  5058. if ( jQuery.isFunction( value ) ) {
  5059. return this.each( function( i ) {
  5060. jQuery( this ).toggleClass(
  5061. value.call( this, i, getClass( this ), stateVal ),
  5062. stateVal
  5063. );
  5064. } );
  5065. }
  5066. return this.each( function() {
  5067. var className, i, self, classNames;
  5068. if ( type === "string" ) {
  5069. i = 0;
  5070. self = jQuery( this );
  5071. classNames = value.match( rnotwhite ) || [];
  5072. while ( ( className = classNames[ i++ ] ) ) {
  5073. if ( self.hasClass( className ) ) {
  5074. self.removeClass( className );
  5075. } else {
  5076. self.addClass( className );
  5077. }
  5078. }
  5079. } else if ( value === undefined || type === "boolean" ) {
  5080. className = getClass( this );
  5081. if ( className ) {
  5082. dataPriv.set( this, "__className__", className );
  5083. }
  5084. if ( this.setAttribute ) {
  5085. this.setAttribute( "class",
  5086. className || value === false ?
  5087. "" :
  5088. dataPriv.get( this, "__className__" ) || ""
  5089. );
  5090. }
  5091. }
  5092. } );
  5093. },
  5094. hasClass: function( selector ) {
  5095. var className, elem,
  5096. i = 0;
  5097. className = " " + selector + " ";
  5098. while ( ( elem = this[ i++ ] ) ) {
  5099. if ( elem.nodeType === 1 &&
  5100. ( " " + getClass( elem ) + " " ).replace( rclass, " " )
  5101. .indexOf( className ) > -1
  5102. ) {
  5103. return true;
  5104. }
  5105. }
  5106. return false;
  5107. }
  5108. } );
  5109. var rreturn = /\r/g,
  5110. rspaces = /[\x20\t\r\n\f]+/g;
  5111. jQuery.fn.extend( {
  5112. val: function( value ) {
  5113. var hooks, ret, isFunction,
  5114. elem = this[ 0 ];
  5115. if ( !arguments.length ) {
  5116. if ( elem ) {
  5117. hooks = jQuery.valHooks[ elem.type ] ||
  5118. jQuery.valHooks[ elem.nodeName.toLowerCase() ];
  5119. if ( hooks &&
  5120. "get" in hooks &&
  5121. ( ret = hooks.get( elem, "value" ) ) !== undefined
  5122. ) {
  5123. return ret;
  5124. }
  5125. ret = elem.value;
  5126. return typeof ret === "string" ?
  5127. ret.replace( rreturn, "" ) :
  5128. ret == null ? "" : ret;
  5129. }
  5130. return;
  5131. }
  5132. isFunction = jQuery.isFunction( value );
  5133. return this.each( function( i ) {
  5134. var val;
  5135. if ( this.nodeType !== 1 ) {
  5136. return;
  5137. }
  5138. if ( isFunction ) {
  5139. val = value.call( this, i, jQuery( this ).val() );
  5140. } else {
  5141. val = value;
  5142. }
  5143. if ( val == null ) {
  5144. val = "";
  5145. } else if ( typeof val === "number" ) {
  5146. val += "";
  5147. } else if ( jQuery.isArray( val ) ) {
  5148. val = jQuery.map( val, function( value ) {
  5149. return value == null ? "" : value + "";
  5150. } );
  5151. }
  5152. hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
  5153. if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
  5154. this.value = val;
  5155. }
  5156. } );
  5157. }
  5158. } );
  5159. jQuery.extend( {
  5160. valHooks: {
  5161. option: {
  5162. get: function( elem ) {
  5163. var val = jQuery.find.attr( elem, "value" );
  5164. return val != null ?
  5165. val :
  5166. jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
  5167. }
  5168. },
  5169. select: {
  5170. get: function( elem ) {
  5171. var value, option,
  5172. options = elem.options,
  5173. index = elem.selectedIndex,
  5174. one = elem.type === "select-one",
  5175. values = one ? null : [],
  5176. max = one ? index + 1 : options.length,
  5177. i = index < 0 ?
  5178. max :
  5179. one ? index : 0;
  5180. for ( ; i < max; i++ ) {
  5181. option = options[ i ];
  5182. if ( ( option.selected || i === index ) &&
  5183. !option.disabled &&
  5184. ( !option.parentNode.disabled ||
  5185. !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
  5186. value = jQuery( option ).val();
  5187. if ( one ) {
  5188. return value;
  5189. }
  5190. values.push( value );
  5191. }
  5192. }
  5193. return values;
  5194. },
  5195. set: function( elem, value ) {
  5196. var optionSet, option,
  5197. options = elem.options,
  5198. values = jQuery.makeArray( value ),
  5199. i = options.length;
  5200. while ( i-- ) {
  5201. option = options[ i ];
  5202. if ( option.selected =
  5203. jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
  5204. ) {
  5205. optionSet = true;
  5206. }
  5207. }
  5208. if ( !optionSet ) {
  5209. elem.selectedIndex = -1;
  5210. }
  5211. return values;
  5212. }
  5213. }
  5214. }
  5215. } );
  5216. jQuery.each( [ "radio", "checkbox" ], function() {
  5217. jQuery.valHooks[ this ] = {
  5218. set: function( elem, value ) {
  5219. if ( jQuery.isArray( value ) ) {
  5220. return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
  5221. }
  5222. }
  5223. };
  5224. if ( !support.checkOn ) {
  5225. jQuery.valHooks[ this ].get = function( elem ) {
  5226. return elem.getAttribute( "value" ) === null ? "on" : elem.value;
  5227. };
  5228. }
  5229. } );
  5230. var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
  5231. jQuery.extend( jQuery.event, {
  5232. trigger: function( event, data, elem, onlyHandlers ) {
  5233. var i, cur, tmp, bubbleType, ontype, handle, special,
  5234. eventPath = [ elem || document ],
  5235. type = hasOwn.call( event, "type" ) ? event.type : event,
  5236. namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
  5237. cur = tmp = elem = elem || document;
  5238. if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
  5239. return;
  5240. }
  5241. if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
  5242. return;
  5243. }
  5244. if ( type.indexOf( "." ) > -1 ) {
  5245. namespaces = type.split( "." );
  5246. type = namespaces.shift();
  5247. namespaces.sort();
  5248. }
  5249. ontype = type.indexOf( ":" ) < 0 && "on" + type;
  5250. event = event[ jQuery.expando ] ?
  5251. event :
  5252. new jQuery.Event( type, typeof event === "object" && event );
  5253. event.isTrigger = onlyHandlers ? 2 : 3;
  5254. event.namespace = namespaces.join( "." );
  5255. event.rnamespace = event.namespace ?
  5256. new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
  5257. null;
  5258. event.result = undefined;
  5259. if ( !event.target ) {
  5260. event.target = elem;
  5261. }
  5262. data = data == null ?
  5263. [ event ] :
  5264. jQuery.makeArray( data, [ event ] );
  5265. special = jQuery.event.special[ type ] || {};
  5266. if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
  5267. return;
  5268. }
  5269. if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
  5270. bubbleType = special.delegateType || type;
  5271. if ( !rfocusMorph.test( bubbleType + type ) ) {
  5272. cur = cur.parentNode;
  5273. }
  5274. for ( ; cur; cur = cur.parentNode ) {
  5275. eventPath.push( cur );
  5276. tmp = cur;
  5277. }
  5278. if ( tmp === ( elem.ownerDocument || document ) ) {
  5279. eventPath.push( tmp.defaultView || tmp.parentWindow || window );
  5280. }
  5281. }
  5282. i = 0;
  5283. while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
  5284. event.type = i > 1 ?
  5285. bubbleType :
  5286. special.bindType || type;
  5287. handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
  5288. dataPriv.get( cur, "handle" );
  5289. if ( handle ) {
  5290. handle.apply( cur, data );
  5291. }
  5292. handle = ontype && cur[ ontype ];
  5293. if ( handle && handle.apply && acceptData( cur ) ) {
  5294. event.result = handle.apply( cur, data );
  5295. if ( event.result === false ) {
  5296. event.preventDefault();
  5297. }
  5298. }
  5299. }
  5300. event.type = type;
  5301. if ( !onlyHandlers && !event.isDefaultPrevented() ) {
  5302. if ( ( !special._default ||
  5303. special._default.apply( eventPath.pop(), data ) === false ) &&
  5304. acceptData( elem ) ) {
  5305. if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
  5306. tmp = elem[ ontype ];
  5307. if ( tmp ) {
  5308. elem[ ontype ] = null;
  5309. }
  5310. jQuery.event.triggered = type;
  5311. elem[ type ]();
  5312. jQuery.event.triggered = undefined;
  5313. if ( tmp ) {
  5314. elem[ ontype ] = tmp;
  5315. }
  5316. }
  5317. }
  5318. }
  5319. return event.result;
  5320. },
  5321. simulate: function( type, elem, event ) {
  5322. var e = jQuery.extend(
  5323. new jQuery.Event(),
  5324. event,
  5325. {
  5326. type: type,
  5327. isSimulated: true
  5328. }
  5329. );
  5330. jQuery.event.trigger( e, null, elem );
  5331. }
  5332. } );
  5333. jQuery.fn.extend( {
  5334. trigger: function( type, data ) {
  5335. return this.each( function() {
  5336. jQuery.event.trigger( type, data, this );
  5337. } );
  5338. },
  5339. triggerHandler: function( type, data ) {
  5340. var elem = this[ 0 ];
  5341. if ( elem ) {
  5342. return jQuery.event.trigger( type, data, elem, true );
  5343. }
  5344. }
  5345. } );
  5346. jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
  5347. "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
  5348. "change select submit keydown keypress keyup contextmenu" ).split( " " ),
  5349. function( i, name ) {
  5350. jQuery.fn[ name ] = function( data, fn ) {
  5351. return arguments.length > 0 ?
  5352. this.on( name, null, data, fn ) :
  5353. this.trigger( name );
  5354. };
  5355. } );
  5356. jQuery.fn.extend( {
  5357. hover: function( fnOver, fnOut ) {
  5358. return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
  5359. }
  5360. } );
  5361. support.focusin = "onfocusin" in window;
  5362. if ( !support.focusin ) {
  5363. jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
  5364. var handler = function( event ) {
  5365. jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
  5366. };
  5367. jQuery.event.special[ fix ] = {
  5368. setup: function() {
  5369. var doc = this.ownerDocument || this,
  5370. attaches = dataPriv.access( doc, fix );
  5371. if ( !attaches ) {
  5372. doc.addEventListener( orig, handler, true );
  5373. }
  5374. dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
  5375. },
  5376. teardown: function() {
  5377. var doc = this.ownerDocument || this,
  5378. attaches = dataPriv.access( doc, fix ) - 1;
  5379. if ( !attaches ) {
  5380. doc.removeEventListener( orig, handler, true );
  5381. dataPriv.remove( doc, fix );
  5382. } else {
  5383. dataPriv.access( doc, fix, attaches );
  5384. }
  5385. }
  5386. };
  5387. } );
  5388. }
  5389. var location = window.location;
  5390. var nonce = jQuery.now();
  5391. var rquery = ( /\?/ );
  5392. jQuery.parseXML = function( data ) {
  5393. var xml;
  5394. if ( !data || typeof data !== "string" ) {
  5395. return null;
  5396. }
  5397. try {
  5398. xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
  5399. } catch ( e ) {
  5400. xml = undefined;
  5401. }
  5402. if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
  5403. jQuery.error( "Invalid XML: " + data );
  5404. }
  5405. return xml;
  5406. };
  5407. var
  5408. rbracket = /\[\]$/,
  5409. rCRLF = /\r?\n/g,
  5410. rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
  5411. rsubmittable = /^(?:input|select|textarea|keygen)/i;
  5412. function buildParams( prefix, obj, traditional, add ) {
  5413. var name;
  5414. if ( jQuery.isArray( obj ) ) {
  5415. jQuery.each( obj, function( i, v ) {
  5416. if ( traditional || rbracket.test( prefix ) ) {
  5417. add( prefix, v );
  5418. } else {
  5419. buildParams(
  5420. prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
  5421. v,
  5422. traditional,
  5423. add
  5424. );
  5425. }
  5426. } );
  5427. } else if ( !traditional && jQuery.type( obj ) === "object" ) {
  5428. for ( name in obj ) {
  5429. buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
  5430. }
  5431. } else {
  5432. add( prefix, obj );
  5433. }
  5434. }
  5435. jQuery.param = function( a, traditional ) {
  5436. var prefix,
  5437. s = [],
  5438. add = function( key, valueOrFunction ) {
  5439. var value = jQuery.isFunction( valueOrFunction ) ?
  5440. valueOrFunction() :
  5441. valueOrFunction;
  5442. s[ s.length ] = encodeURIComponent( key ) + "=" +
  5443. encodeURIComponent( value == null ? "" : value );
  5444. };
  5445. if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
  5446. jQuery.each( a, function() {
  5447. add( this.name, this.value );
  5448. } );
  5449. } else {
  5450. for ( prefix in a ) {
  5451. buildParams( prefix, a[ prefix ], traditional, add );
  5452. }
  5453. }
  5454. return s.join( "&" );
  5455. };
  5456. jQuery.fn.extend( {
  5457. serialize: function() {
  5458. return jQuery.param( this.serializeArray() );
  5459. },
  5460. serializeArray: function() {
  5461. return this.map( function() {
  5462. var elements = jQuery.prop( this, "elements" );
  5463. return elements ? jQuery.makeArray( elements ) : this;
  5464. } )
  5465. .filter( function() {
  5466. var type = this.type;
  5467. return this.name && !jQuery( this ).is( ":disabled" ) &&
  5468. rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
  5469. ( this.checked || !rcheckableType.test( type ) );
  5470. } )
  5471. .map( function( i, elem ) {
  5472. var val = jQuery( this ).val();
  5473. return val == null ?
  5474. null :
  5475. jQuery.isArray( val ) ?
  5476. jQuery.map( val, function( val ) {
  5477. return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
  5478. } ) :
  5479. { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
  5480. } ).get();
  5481. }
  5482. } );
  5483. var
  5484. r20 = /%20/g,
  5485. rhash = /#.*$/,
  5486. rts = /([?&])_=[^&]*/,
  5487. rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
  5488. rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
  5489. rnoContent = /^(?:GET|HEAD)$/,
  5490. rprotocol = /^\/\
  5491. /* Prefilters
  5492. * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
  5493. * 2) These are called:
  5494. * - BEFORE asking for a transport
  5495. * - AFTER param serialization (s.data is a string if s.processData is true)
  5496. * 3) key is the dataType
  5497. * 4) the catchall symbol "*" can be used
  5498. * 5) execution will start with transport dataType and THEN continue down to "*" if needed
  5499. */
  5500. prefilters = {},
  5501. /* Transports bindings
  5502. * 1) key is the dataType
  5503. * 2) the catchall symbol "*" can be used
  5504. * 3) selection will start with transport dataType and THEN go to "*" if needed
  5505. */
  5506. transports = {},
  5507. allTypes = "*/".concat( "*" ),
  5508. originAnchor = document.createElement( "a" );
  5509. originAnchor.href = location.href;
  5510. function addToPrefiltersOrTransports( structure ) {
  5511. return function( dataTypeExpression, func ) {
  5512. if ( typeof dataTypeExpression !== "string" ) {
  5513. func = dataTypeExpression;
  5514. dataTypeExpression = "*";
  5515. }
  5516. var dataType,
  5517. i = 0,
  5518. dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
  5519. if ( jQuery.isFunction( func ) ) {
  5520. while ( ( dataType = dataTypes[ i++ ] ) ) {
  5521. if ( dataType[ 0 ] === "+" ) {
  5522. dataType = dataType.slice( 1 ) || "*";
  5523. ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
  5524. } else {
  5525. ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
  5526. }
  5527. }
  5528. }
  5529. };
  5530. }
  5531. function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
  5532. var inspected = {},
  5533. seekingTransport = ( structure === transports );
  5534. function inspect( dataType ) {
  5535. var selected;
  5536. inspected[ dataType ] = true;
  5537. jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
  5538. var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
  5539. if ( typeof dataTypeOrTransport === "string" &&
  5540. !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
  5541. options.dataTypes.unshift( dataTypeOrTransport );
  5542. inspect( dataTypeOrTransport );
  5543. return false;
  5544. } else if ( seekingTransport ) {
  5545. return !( selected = dataTypeOrTransport );
  5546. }
  5547. } );
  5548. return selected;
  5549. }
  5550. return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
  5551. }
  5552. function ajaxExtend( target, src ) {
  5553. var key, deep,
  5554. flatOptions = jQuery.ajaxSettings.flatOptions || {};
  5555. for ( key in src ) {
  5556. if ( src[ key ] !== undefined ) {
  5557. ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
  5558. }
  5559. }
  5560. if ( deep ) {
  5561. jQuery.extend( true, target, deep );
  5562. }
  5563. return target;
  5564. }
  5565. function ajaxHandleResponses( s, jqXHR, responses ) {
  5566. var ct, type, finalDataType, firstDataType,
  5567. contents = s.contents,
  5568. dataTypes = s.dataTypes;
  5569. while ( dataTypes[ 0 ] === "*" ) {
  5570. dataTypes.shift();
  5571. if ( ct === undefined ) {
  5572. ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
  5573. }
  5574. }
  5575. if ( ct ) {
  5576. for ( type in contents ) {
  5577. if ( contents[ type ] && contents[ type ].test( ct ) ) {
  5578. dataTypes.unshift( type );
  5579. break;
  5580. }
  5581. }
  5582. }
  5583. if ( dataTypes[ 0 ] in responses ) {
  5584. finalDataType = dataTypes[ 0 ];
  5585. } else {
  5586. for ( type in responses ) {
  5587. if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
  5588. finalDataType = type;
  5589. break;
  5590. }
  5591. if ( !firstDataType ) {
  5592. firstDataType = type;
  5593. }
  5594. }
  5595. finalDataType = finalDataType || firstDataType;
  5596. }
  5597. if ( finalDataType ) {
  5598. if ( finalDataType !== dataTypes[ 0 ] ) {
  5599. dataTypes.unshift( finalDataType );
  5600. }
  5601. return responses[ finalDataType ];
  5602. }
  5603. }
  5604. function ajaxConvert( s, response, jqXHR, isSuccess ) {
  5605. var conv2, current, conv, tmp, prev,
  5606. converters = {},
  5607. dataTypes = s.dataTypes.slice();
  5608. if ( dataTypes[ 1 ] ) {
  5609. for ( conv in s.converters ) {
  5610. converters[ conv.toLowerCase() ] = s.converters[ conv ];
  5611. }
  5612. }
  5613. current = dataTypes.shift();
  5614. while ( current ) {
  5615. if ( s.responseFields[ current ] ) {
  5616. jqXHR[ s.responseFields[ current ] ] = response;
  5617. }
  5618. if ( !prev && isSuccess && s.dataFilter ) {
  5619. response = s.dataFilter( response, s.dataType );
  5620. }
  5621. prev = current;
  5622. current = dataTypes.shift();
  5623. if ( current ) {
  5624. if ( current === "*" ) {
  5625. current = prev;
  5626. } else if ( prev !== "*" && prev !== current ) {
  5627. conv = converters[ prev + " " + current ] || converters[ "* " + current ];
  5628. if ( !conv ) {
  5629. for ( conv2 in converters ) {
  5630. tmp = conv2.split( " " );
  5631. if ( tmp[ 1 ] === current ) {
  5632. conv = converters[ prev + " " + tmp[ 0 ] ] ||
  5633. converters[ "* " + tmp[ 0 ] ];
  5634. if ( conv ) {
  5635. if ( conv === true ) {
  5636. conv = converters[ conv2 ];
  5637. } else if ( converters[ conv2 ] !== true ) {
  5638. current = tmp[ 0 ];
  5639. dataTypes.unshift( tmp[ 1 ] );
  5640. }
  5641. break;
  5642. }
  5643. }
  5644. }
  5645. }
  5646. if ( conv !== true ) {
  5647. if ( conv && s.throws ) {
  5648. response = conv( response );
  5649. } else {
  5650. try {
  5651. response = conv( response );
  5652. } catch ( e ) {
  5653. return {
  5654. state: "parsererror",
  5655. error: conv ? e : "No conversion from " + prev + " to " + current
  5656. };
  5657. }
  5658. }
  5659. }
  5660. }
  5661. }
  5662. }
  5663. return { state: "success", data: response };
  5664. }
  5665. jQuery.extend( {
  5666. active: 0,
  5667. lastModified: {},
  5668. etag: {},
  5669. ajaxSettings: {
  5670. url: location.href,
  5671. type: "GET",
  5672. isLocal: rlocalProtocol.test( location.protocol ),
  5673. global: true,
  5674. processData: true,
  5675. async: true,
  5676. contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  5677. /*
  5678. timeout: 0,
  5679. data: null,
  5680. dataType: null,
  5681. username: null,
  5682. password: null,
  5683. cache: null,
  5684. throws: false,
  5685. traditional: false,
  5686. headers: {},
  5687. */
  5688. accepts: {
  5689. "*": allTypes,
  5690. text: "text/plain",
  5691. html: "text/html",
  5692. xml: "application/xml, text/xml",
  5693. json: "application/json, text/javascript"
  5694. },
  5695. contents: {
  5696. xml: /\bxml\b/,
  5697. html: /\bhtml/,
  5698. json: /\bjson\b/
  5699. },
  5700. responseFields: {
  5701. xml: "responseXML",
  5702. text: "responseText",
  5703. json: "responseJSON"
  5704. },
  5705. converters: {
  5706. "* text": String,
  5707. "text html": true,
  5708. "text json": JSON.parse,
  5709. "text xml": jQuery.parseXML
  5710. },
  5711. flatOptions: {
  5712. url: true,
  5713. context: true
  5714. }
  5715. },
  5716. ajaxSetup: function( target, settings ) {
  5717. return settings ?
  5718. ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
  5719. ajaxExtend( jQuery.ajaxSettings, target );
  5720. },
  5721. ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
  5722. ajaxTransport: addToPrefiltersOrTransports( transports ),
  5723. ajax: function( url, options ) {
  5724. if ( typeof url === "object" ) {
  5725. options = url;
  5726. url = undefined;
  5727. }
  5728. options = options || {};
  5729. var transport,
  5730. cacheURL,
  5731. responseHeadersString,
  5732. responseHeaders,
  5733. timeoutTimer,
  5734. urlAnchor,
  5735. completed,
  5736. fireGlobals,
  5737. i,
  5738. uncached,
  5739. s = jQuery.ajaxSetup( {}, options ),
  5740. callbackContext = s.context || s,
  5741. globalEventContext = s.context &&
  5742. ( callbackContext.nodeType || callbackContext.jquery ) ?
  5743. jQuery( callbackContext ) :
  5744. jQuery.event,
  5745. deferred = jQuery.Deferred(),
  5746. completeDeferred = jQuery.Callbacks( "once memory" ),
  5747. statusCode = s.statusCode || {},
  5748. requestHeaders = {},
  5749. requestHeadersNames = {},
  5750. strAbort = "canceled",
  5751. jqXHR = {
  5752. readyState: 0,
  5753. getResponseHeader: function( key ) {
  5754. var match;
  5755. if ( completed ) {
  5756. if ( !responseHeaders ) {
  5757. responseHeaders = {};
  5758. while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
  5759. responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
  5760. }
  5761. }
  5762. match = responseHeaders[ key.toLowerCase() ];
  5763. }
  5764. return match == null ? null : match;
  5765. },
  5766. getAllResponseHeaders: function() {
  5767. return completed ? responseHeadersString : null;
  5768. },
  5769. setRequestHeader: function( name, value ) {
  5770. if ( completed == null ) {
  5771. name = requestHeadersNames[ name.toLowerCase() ] =
  5772. requestHeadersNames[ name.toLowerCase() ] || name;
  5773. requestHeaders[ name ] = value;
  5774. }
  5775. return this;
  5776. },
  5777. overrideMimeType: function( type ) {
  5778. if ( completed == null ) {
  5779. s.mimeType = type;
  5780. }
  5781. return this;
  5782. },
  5783. statusCode: function( map ) {
  5784. var code;
  5785. if ( map ) {
  5786. if ( completed ) {
  5787. jqXHR.always( map[ jqXHR.status ] );
  5788. } else {
  5789. for ( code in map ) {
  5790. statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
  5791. }
  5792. }
  5793. }
  5794. return this;
  5795. },
  5796. abort: function( statusText ) {
  5797. var finalText = statusText || strAbort;
  5798. if ( transport ) {
  5799. transport.abort( finalText );
  5800. }
  5801. done( 0, finalText );
  5802. return this;
  5803. }
  5804. };
  5805. deferred.promise( jqXHR );
  5806. s.url = ( ( url || s.url || location.href ) + "" )
  5807. .replace( rprotocol, location.protocol + "
  5808. s.type = options.method || options.type || s.method || s.type;
  5809. s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
  5810. if ( s.crossDomain == null ) {
  5811. urlAnchor = document.createElement( "a" );
  5812. try {
  5813. urlAnchor.href = s.url;
  5814. urlAnchor.href = urlAnchor.href;
  5815. s.crossDomain = originAnchor.protocol + "
  5816. urlAnchor.protocol + "
  5817. } catch ( e ) {
  5818. s.crossDomain = true;
  5819. }
  5820. }
  5821. if ( s.data && s.processData && typeof s.data !== "string" ) {
  5822. s.data = jQuery.param( s.data, s.traditional );
  5823. }
  5824. inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
  5825. if ( completed ) {
  5826. return jqXHR;
  5827. }
  5828. fireGlobals = jQuery.event && s.global;
  5829. if ( fireGlobals && jQuery.active++ === 0 ) {
  5830. jQuery.event.trigger( "ajaxStart" );
  5831. }
  5832. s.type = s.type.toUpperCase();
  5833. s.hasContent = !rnoContent.test( s.type );
  5834. cacheURL = s.url.replace( rhash, "" );
  5835. if ( !s.hasContent ) {
  5836. uncached = s.url.slice( cacheURL.length );
  5837. if ( s.data ) {
  5838. cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
  5839. delete s.data;
  5840. }
  5841. if ( s.cache === false ) {
  5842. cacheURL = cacheURL.replace( rts, "" );
  5843. uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
  5844. }
  5845. s.url = cacheURL + uncached;
  5846. } else if ( s.data && s.processData &&
  5847. ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
  5848. s.data = s.data.replace( r20, "+" );
  5849. }
  5850. if ( s.ifModified ) {
  5851. if ( jQuery.lastModified[ cacheURL ] ) {
  5852. jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
  5853. }
  5854. if ( jQuery.etag[ cacheURL ] ) {
  5855. jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
  5856. }
  5857. }
  5858. if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
  5859. jqXHR.setRequestHeader( "Content-Type", s.contentType );
  5860. }
  5861. jqXHR.setRequestHeader(
  5862. "Accept",
  5863. s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
  5864. s.accepts[ s.dataTypes[ 0 ] ] +
  5865. ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
  5866. s.accepts[ "*" ]
  5867. );
  5868. for ( i in s.headers ) {
  5869. jqXHR.setRequestHeader( i, s.headers[ i ] );
  5870. }
  5871. if ( s.beforeSend &&
  5872. ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
  5873. return jqXHR.abort();
  5874. }
  5875. strAbort = "abort";
  5876. completeDeferred.add( s.complete );
  5877. jqXHR.done( s.success );
  5878. jqXHR.fail( s.error );
  5879. transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
  5880. if ( !transport ) {
  5881. done( -1, "No Transport" );
  5882. } else {
  5883. jqXHR.readyState = 1;
  5884. if ( fireGlobals ) {
  5885. globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
  5886. }
  5887. if ( completed ) {
  5888. return jqXHR;
  5889. }
  5890. if ( s.async && s.timeout > 0 ) {
  5891. timeoutTimer = window.setTimeout( function() {
  5892. jqXHR.abort( "timeout" );
  5893. }, s.timeout );
  5894. }
  5895. try {
  5896. completed = false;
  5897. transport.send( requestHeaders, done );
  5898. } catch ( e ) {
  5899. if ( completed ) {
  5900. throw e;
  5901. }
  5902. done( -1, e );
  5903. }
  5904. }
  5905. function done( status, nativeStatusText, responses, headers ) {
  5906. var isSuccess, success, error, response, modified,
  5907. statusText = nativeStatusText;
  5908. if ( completed ) {
  5909. return;
  5910. }
  5911. completed = true;
  5912. if ( timeoutTimer ) {
  5913. window.clearTimeout( timeoutTimer );
  5914. }
  5915. transport = undefined;
  5916. responseHeadersString = headers || "";
  5917. jqXHR.readyState = status > 0 ? 4 : 0;
  5918. isSuccess = status >= 200 && status < 300 || status === 304;
  5919. if ( responses ) {
  5920. response = ajaxHandleResponses( s, jqXHR, responses );
  5921. }
  5922. response = ajaxConvert( s, response, jqXHR, isSuccess );
  5923. if ( isSuccess ) {
  5924. if ( s.ifModified ) {
  5925. modified = jqXHR.getResponseHeader( "Last-Modified" );
  5926. if ( modified ) {
  5927. jQuery.lastModified[ cacheURL ] = modified;
  5928. }
  5929. modified = jqXHR.getResponseHeader( "etag" );
  5930. if ( modified ) {
  5931. jQuery.etag[ cacheURL ] = modified;
  5932. }
  5933. }
  5934. if ( status === 204 || s.type === "HEAD" ) {
  5935. statusText = "nocontent";
  5936. } else if ( status === 304 ) {
  5937. statusText = "notmodified";
  5938. } else {
  5939. statusText = response.state;
  5940. success = response.data;
  5941. error = response.error;
  5942. isSuccess = !error;
  5943. }
  5944. } else {
  5945. error = statusText;
  5946. if ( status || !statusText ) {
  5947. statusText = "error";
  5948. if ( status < 0 ) {
  5949. status = 0;
  5950. }
  5951. }
  5952. }
  5953. jqXHR.status = status;
  5954. jqXHR.statusText = ( nativeStatusText || statusText ) + "";
  5955. if ( isSuccess ) {
  5956. deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
  5957. } else {
  5958. deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
  5959. }
  5960. jqXHR.statusCode( statusCode );
  5961. statusCode = undefined;
  5962. if ( fireGlobals ) {
  5963. globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
  5964. [ jqXHR, s, isSuccess ? success : error ] );
  5965. }
  5966. completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
  5967. if ( fireGlobals ) {
  5968. globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
  5969. if ( !( --jQuery.active ) ) {
  5970. jQuery.event.trigger( "ajaxStop" );
  5971. }
  5972. }
  5973. }
  5974. return jqXHR;
  5975. },
  5976. getJSON: function( url, data, callback ) {
  5977. return jQuery.get( url, data, callback, "json" );
  5978. },
  5979. getScript: function( url, callback ) {
  5980. return jQuery.get( url, undefined, callback, "script" );
  5981. }
  5982. } );
  5983. jQuery.each( [ "get", "post" ], function( i, method ) {
  5984. jQuery[ method ] = function( url, data, callback, type ) {
  5985. if ( jQuery.isFunction( data ) ) {
  5986. type = type || callback;
  5987. callback = data;
  5988. data = undefined;
  5989. }
  5990. return jQuery.ajax( jQuery.extend( {
  5991. url: url,
  5992. type: method,
  5993. dataType: type,
  5994. data: data,
  5995. success: callback
  5996. }, jQuery.isPlainObject( url ) && url ) );
  5997. };
  5998. } );
  5999. jQuery._evalUrl = function( url ) {
  6000. return jQuery.ajax( {
  6001. url: url,
  6002. type: "GET",
  6003. dataType: "script",
  6004. cache: true,
  6005. async: false,
  6006. global: false,
  6007. "throws": true
  6008. } );
  6009. };
  6010. jQuery.fn.extend( {
  6011. wrapAll: function( html ) {
  6012. var wrap;
  6013. if ( this[ 0 ] ) {
  6014. if ( jQuery.isFunction( html ) ) {
  6015. html = html.call( this[ 0 ] );
  6016. }
  6017. wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
  6018. if ( this[ 0 ].parentNode ) {
  6019. wrap.insertBefore( this[ 0 ] );
  6020. }
  6021. wrap.map( function() {
  6022. var elem = this;
  6023. while ( elem.firstElementChild ) {
  6024. elem = elem.firstElementChild;
  6025. }
  6026. return elem;
  6027. } ).append( this );
  6028. }
  6029. return this;
  6030. },
  6031. wrapInner: function( html ) {
  6032. if ( jQuery.isFunction( html ) ) {
  6033. return this.each( function( i ) {
  6034. jQuery( this ).wrapInner( html.call( this, i ) );
  6035. } );
  6036. }
  6037. return this.each( function() {
  6038. var self = jQuery( this ),
  6039. contents = self.contents();
  6040. if ( contents.length ) {
  6041. contents.wrapAll( html );
  6042. } else {
  6043. self.append( html );
  6044. }
  6045. } );
  6046. },
  6047. wrap: function( html ) {
  6048. var isFunction = jQuery.isFunction( html );
  6049. return this.each( function( i ) {
  6050. jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
  6051. } );
  6052. },
  6053. unwrap: function( selector ) {
  6054. this.parent( selector ).not( "body" ).each( function() {
  6055. jQuery( this ).replaceWith( this.childNodes );
  6056. } );
  6057. return this;
  6058. }
  6059. } );
  6060. jQuery.expr.pseudos.hidden = function( elem ) {
  6061. return !jQuery.expr.pseudos.visible( elem );
  6062. };
  6063. jQuery.expr.pseudos.visible = function( elem ) {
  6064. return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
  6065. };
  6066. jQuery.ajaxSettings.xhr = function() {
  6067. try {
  6068. return new window.XMLHttpRequest();
  6069. } catch ( e ) {}
  6070. };
  6071. var xhrSuccessStatus = {
  6072. 0: 200,
  6073. 1223: 204
  6074. },
  6075. xhrSupported = jQuery.ajaxSettings.xhr();
  6076. support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
  6077. support.ajax = xhrSupported = !!xhrSupported;
  6078. jQuery.ajaxTransport( function( options ) {
  6079. var callback, errorCallback;
  6080. if ( support.cors || xhrSupported && !options.crossDomain ) {
  6081. return {
  6082. send: function( headers, complete ) {
  6083. var i,
  6084. xhr = options.xhr();
  6085. xhr.open(
  6086. options.type,
  6087. options.url,
  6088. options.async,
  6089. options.username,
  6090. options.password
  6091. );
  6092. if ( options.xhrFields ) {
  6093. for ( i in options.xhrFields ) {
  6094. xhr[ i ] = options.xhrFields[ i ];
  6095. }
  6096. }
  6097. if ( options.mimeType && xhr.overrideMimeType ) {
  6098. xhr.overrideMimeType( options.mimeType );
  6099. }
  6100. if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
  6101. headers[ "X-Requested-With" ] = "XMLHttpRequest";
  6102. }
  6103. for ( i in headers ) {
  6104. xhr.setRequestHeader( i, headers[ i ] );
  6105. }
  6106. callback = function( type ) {
  6107. return function() {
  6108. if ( callback ) {
  6109. callback = errorCallback = xhr.onload =
  6110. xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
  6111. if ( type === "abort" ) {
  6112. xhr.abort();
  6113. } else if ( type === "error" ) {
  6114. if ( typeof xhr.status !== "number" ) {
  6115. complete( 0, "error" );
  6116. } else {
  6117. complete(
  6118. xhr.status,
  6119. xhr.statusText
  6120. );
  6121. }
  6122. } else {
  6123. complete(
  6124. xhrSuccessStatus[ xhr.status ] || xhr.status,
  6125. xhr.statusText,
  6126. ( xhr.responseType || "text" ) !== "text" ||
  6127. typeof xhr.responseText !== "string" ?
  6128. { binary: xhr.response } :
  6129. { text: xhr.responseText },
  6130. xhr.getAllResponseHeaders()
  6131. );
  6132. }
  6133. }
  6134. };
  6135. };
  6136. xhr.onload = callback();
  6137. errorCallback = xhr.onerror = callback( "error" );
  6138. if ( xhr.onabort !== undefined ) {
  6139. xhr.onabort = errorCallback;
  6140. } else {
  6141. xhr.onreadystatechange = function() {
  6142. if ( xhr.readyState === 4 ) {
  6143. window.setTimeout( function() {
  6144. if ( callback ) {
  6145. errorCallback();
  6146. }
  6147. } );
  6148. }
  6149. };
  6150. }
  6151. callback = callback( "abort" );
  6152. try {
  6153. xhr.send( options.hasContent && options.data || null );
  6154. } catch ( e ) {
  6155. if ( callback ) {
  6156. throw e;
  6157. }
  6158. }
  6159. },
  6160. abort: function() {
  6161. if ( callback ) {
  6162. callback();
  6163. }
  6164. }
  6165. };
  6166. }
  6167. } );
  6168. jQuery.ajaxPrefilter( function( s ) {
  6169. if ( s.crossDomain ) {
  6170. s.contents.script = false;
  6171. }
  6172. } );
  6173. jQuery.ajaxSetup( {
  6174. accepts: {
  6175. script: "text/javascript, application/javascript, " +
  6176. "application/ecmascript, application/x-ecmascript"
  6177. },
  6178. contents: {
  6179. script: /\b(?:java|ecma)script\b/
  6180. },
  6181. converters: {
  6182. "text script": function( text ) {
  6183. jQuery.globalEval( text );
  6184. return text;
  6185. }
  6186. }
  6187. } );
  6188. jQuery.ajaxPrefilter( "script", function( s ) {
  6189. if ( s.cache === undefined ) {
  6190. s.cache = false;
  6191. }
  6192. if ( s.crossDomain ) {
  6193. s.type = "GET";
  6194. }
  6195. } );
  6196. jQuery.ajaxTransport( "script", function( s ) {
  6197. if ( s.crossDomain ) {
  6198. var script, callback;
  6199. return {
  6200. send: function( _, complete ) {
  6201. script = jQuery( "<script>" ).prop( {
  6202. charset: s.scriptCharset,
  6203. src: s.url
  6204. } ).on(
  6205. "load error",
  6206. callback = function( evt ) {
  6207. script.remove();
  6208. callback = null;
  6209. if ( evt ) {
  6210. complete( evt.type === "error" ? 404 : 200, evt.type );
  6211. }
  6212. }
  6213. );
  6214. document.head.appendChild( script[ 0 ] );
  6215. },
  6216. abort: function() {
  6217. if ( callback ) {
  6218. callback();
  6219. }
  6220. }
  6221. };
  6222. }
  6223. } );
  6224. var oldCallbacks = [],
  6225. rjsonp = /(=)\?(?=&|$)|\?\?/;
  6226. jQuery.ajaxSetup( {
  6227. jsonp: "callback",
  6228. jsonpCallback: function() {
  6229. var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
  6230. this[ callback ] = true;
  6231. return callback;
  6232. }
  6233. } );
  6234. jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
  6235. var callbackName, overwritten, responseContainer,
  6236. jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
  6237. "url" :
  6238. typeof s.data === "string" &&
  6239. ( s.contentType || "" )
  6240. .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
  6241. rjsonp.test( s.data ) && "data"
  6242. );
  6243. if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
  6244. callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
  6245. s.jsonpCallback() :
  6246. s.jsonpCallback;
  6247. if ( jsonProp ) {
  6248. s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
  6249. } else if ( s.jsonp !== false ) {
  6250. s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
  6251. }
  6252. s.converters[ "script json" ] = function() {
  6253. if ( !responseContainer ) {
  6254. jQuery.error( callbackName + " was not called" );
  6255. }
  6256. return responseContainer[ 0 ];
  6257. };
  6258. s.dataTypes[ 0 ] = "json";
  6259. overwritten = window[ callbackName ];
  6260. window[ callbackName ] = function() {
  6261. responseContainer = arguments;
  6262. };
  6263. jqXHR.always( function() {
  6264. if ( overwritten === undefined ) {
  6265. jQuery( window ).removeProp( callbackName );
  6266. } else {
  6267. window[ callbackName ] = overwritten;
  6268. }
  6269. if ( s[ callbackName ] ) {
  6270. s.jsonpCallback = originalSettings.jsonpCallback;
  6271. oldCallbacks.push( callbackName );
  6272. }
  6273. if ( responseContainer && jQuery.isFunction( overwritten ) ) {
  6274. overwritten( responseContainer[ 0 ] );
  6275. }
  6276. responseContainer = overwritten = undefined;
  6277. } );
  6278. return "script";
  6279. }
  6280. } );
  6281. support.createHTMLDocument = ( function() {
  6282. var body = document.implementation.createHTMLDocument( "" ).body;
  6283. body.innerHTML = "<form></form><form></form>";
  6284. return body.childNodes.length === 2;
  6285. } )();
  6286. jQuery.parseHTML = function( data, context, keepScripts ) {
  6287. if ( typeof data !== "string" ) {
  6288. return [];
  6289. }
  6290. if ( typeof context === "boolean" ) {
  6291. keepScripts = context;
  6292. context = false;
  6293. }
  6294. var base, parsed, scripts;
  6295. if ( !context ) {
  6296. if ( support.createHTMLDocument ) {
  6297. context = document.implementation.createHTMLDocument( "" );
  6298. base = context.createElement( "base" );
  6299. base.href = document.location.href;
  6300. context.head.appendChild( base );
  6301. } else {
  6302. context = document;
  6303. }
  6304. }
  6305. parsed = rsingleTag.exec( data );
  6306. scripts = !keepScripts && [];
  6307. if ( parsed ) {
  6308. return [ context.createElement( parsed[ 1 ] ) ];
  6309. }
  6310. parsed = buildFragment( [ data ], context, scripts );
  6311. if ( scripts && scripts.length ) {
  6312. jQuery( scripts ).remove();
  6313. }
  6314. return jQuery.merge( [], parsed.childNodes );
  6315. };
  6316. jQuery.fn.load = function( url, params, callback ) {
  6317. var selector, type, response,
  6318. self = this,
  6319. off = url.indexOf( " " );
  6320. if ( off > -1 ) {
  6321. selector = jQuery.trim( url.slice( off ) );
  6322. url = url.slice( 0, off );
  6323. }
  6324. if ( jQuery.isFunction( params ) ) {
  6325. callback = params;
  6326. params = undefined;
  6327. } else if ( params && typeof params === "object" ) {
  6328. type = "POST";
  6329. }
  6330. if ( self.length > 0 ) {
  6331. jQuery.ajax( {
  6332. url: url,
  6333. type: type || "GET",
  6334. dataType: "html",
  6335. data: params
  6336. } ).done( function( responseText ) {
  6337. response = arguments;
  6338. self.html( selector ?
  6339. jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
  6340. responseText );
  6341. } ).always( callback && function( jqXHR, status ) {
  6342. self.each( function() {
  6343. callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
  6344. } );
  6345. } );
  6346. }
  6347. return this;
  6348. };
  6349. jQuery.each( [
  6350. "ajaxStart",
  6351. "ajaxStop",
  6352. "ajaxComplete",
  6353. "ajaxError",
  6354. "ajaxSuccess",
  6355. "ajaxSend"
  6356. ], function( i, type ) {
  6357. jQuery.fn[ type ] = function( fn ) {
  6358. return this.on( type, fn );
  6359. };
  6360. } );
  6361. jQuery.expr.pseudos.animated = function( elem ) {
  6362. return jQuery.grep( jQuery.timers, function( fn ) {
  6363. return elem === fn.elem;
  6364. } ).length;
  6365. };
  6366. function getWindow( elem ) {
  6367. return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
  6368. }
  6369. jQuery.offset = {
  6370. setOffset: function( elem, options, i ) {
  6371. var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
  6372. position = jQuery.css( elem, "position" ),
  6373. curElem = jQuery( elem ),
  6374. props = {};
  6375. if ( position === "static" ) {
  6376. elem.style.position = "relative";
  6377. }
  6378. curOffset = curElem.offset();
  6379. curCSSTop = jQuery.css( elem, "top" );
  6380. curCSSLeft = jQuery.css( elem, "left" );
  6381. calculatePosition = ( position === "absolute" || position === "fixed" ) &&
  6382. ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
  6383. if ( calculatePosition ) {
  6384. curPosition = curElem.position();
  6385. curTop = curPosition.top;
  6386. curLeft = curPosition.left;
  6387. } else {
  6388. curTop = parseFloat( curCSSTop ) || 0;
  6389. curLeft = parseFloat( curCSSLeft ) || 0;
  6390. }
  6391. if ( jQuery.isFunction( options ) ) {
  6392. options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
  6393. }
  6394. if ( options.top != null ) {
  6395. props.top = ( options.top - curOffset.top ) + curTop;
  6396. }
  6397. if ( options.left != null ) {
  6398. props.left = ( options.left - curOffset.left ) + curLeft;
  6399. }
  6400. if ( "using" in options ) {
  6401. options.using.call( elem, props );
  6402. } else {
  6403. curElem.css( props );
  6404. }
  6405. }
  6406. };
  6407. jQuery.fn.extend( {
  6408. offset: function( options ) {
  6409. if ( arguments.length ) {
  6410. return options === undefined ?
  6411. this :
  6412. this.each( function( i ) {
  6413. jQuery.offset.setOffset( this, options, i );
  6414. } );
  6415. }
  6416. var docElem, win, rect, doc,
  6417. elem = this[ 0 ];
  6418. if ( !elem ) {
  6419. return;
  6420. }
  6421. if ( !elem.getClientRects().length ) {
  6422. return { top: 0, left: 0 };
  6423. }
  6424. rect = elem.getBoundingClientRect();
  6425. if ( rect.width || rect.height ) {
  6426. doc = elem.ownerDocument;
  6427. win = getWindow( doc );
  6428. docElem = doc.documentElement;
  6429. return {
  6430. top: rect.top + win.pageYOffset - docElem.clientTop,
  6431. left: rect.left + win.pageXOffset - docElem.clientLeft
  6432. };
  6433. }
  6434. return rect;
  6435. },
  6436. position: function() {
  6437. if ( !this[ 0 ] ) {
  6438. return;
  6439. }
  6440. var offsetParent, offset,
  6441. elem = this[ 0 ],
  6442. parentOffset = { top: 0, left: 0 };
  6443. if ( jQuery.css( elem, "position" ) === "fixed" ) {
  6444. offset = elem.getBoundingClientRect();
  6445. } else {
  6446. offsetParent = this.offsetParent();
  6447. offset = this.offset();
  6448. if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
  6449. parentOffset = offsetParent.offset();
  6450. }
  6451. parentOffset = {
  6452. top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
  6453. left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
  6454. };
  6455. }
  6456. return {
  6457. top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
  6458. left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
  6459. };
  6460. },
  6461. offsetParent: function() {
  6462. return this.map( function() {
  6463. var offsetParent = this.offsetParent;
  6464. while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
  6465. offsetParent = offsetParent.offsetParent;
  6466. }
  6467. return offsetParent || documentElement;
  6468. } );
  6469. }
  6470. } );
  6471. jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
  6472. var top = "pageYOffset" === prop;
  6473. jQuery.fn[ method ] = function( val ) {
  6474. return access( this, function( elem, method, val ) {
  6475. var win = getWindow( elem );
  6476. if ( val === undefined ) {
  6477. return win ? win[ prop ] : elem[ method ];
  6478. }
  6479. if ( win ) {
  6480. win.scrollTo(
  6481. !top ? val : win.pageXOffset,
  6482. top ? val : win.pageYOffset
  6483. );
  6484. } else {
  6485. elem[ method ] = val;
  6486. }
  6487. }, method, val, arguments.length );
  6488. };
  6489. } );
  6490. jQuery.each( [ "top", "left" ], function( i, prop ) {
  6491. jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
  6492. function( elem, computed ) {
  6493. if ( computed ) {
  6494. computed = curCSS( elem, prop );
  6495. return rnumnonpx.test( computed ) ?
  6496. jQuery( elem ).position()[ prop ] + "px" :
  6497. computed;
  6498. }
  6499. }
  6500. );
  6501. } );
  6502. jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
  6503. jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
  6504. function( defaultExtra, funcName ) {
  6505. jQuery.fn[ funcName ] = function( margin, value ) {
  6506. var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
  6507. extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
  6508. return access( this, function( elem, type, value ) {
  6509. var doc;
  6510. if ( jQuery.isWindow( elem ) ) {
  6511. return funcName.indexOf( "outer" ) === 0 ?
  6512. elem[ "inner" + name ] :
  6513. elem.document.documentElement[ "client" + name ];
  6514. }
  6515. if ( elem.nodeType === 9 ) {
  6516. doc = elem.documentElement;
  6517. return Math.max(
  6518. elem.body[ "scroll" + name ], doc[ "scroll" + name ],
  6519. elem.body[ "offset" + name ], doc[ "offset" + name ],
  6520. doc[ "client" + name ]
  6521. );
  6522. }
  6523. return value === undefined ?
  6524. jQuery.css( elem, type, extra ) :
  6525. jQuery.style( elem, type, value, extra );
  6526. }, type, chainable ? margin : undefined, chainable );
  6527. };
  6528. } );
  6529. } );
  6530. jQuery.fn.extend( {
  6531. bind: function( types, data, fn ) {
  6532. return this.on( types, null, data, fn );
  6533. },
  6534. unbind: function( types, fn ) {
  6535. return this.off( types, null, fn );
  6536. },
  6537. delegate: function( selector, types, data, fn ) {
  6538. return this.on( types, selector, data, fn );
  6539. },
  6540. undelegate: function( selector, types, fn ) {
  6541. return arguments.length === 1 ?
  6542. this.off( selector, "**" ) :
  6543. this.off( types, selector || "**", fn );
  6544. }
  6545. } );
  6546. jQuery.parseJSON = JSON.parse;
  6547. if ( typeof define === "function" && define.amd ) {
  6548. define( "jquery", [], function() {
  6549. return jQuery;
  6550. } );
  6551. }
  6552. var
  6553. _jQuery = window.jQuery,
  6554. _$ = window.$;
  6555. jQuery.noConflict = function( deep ) {
  6556. if ( window.$ === jQuery ) {
  6557. window.$ = _$;
  6558. }
  6559. if ( deep && window.jQuery === jQuery ) {
  6560. window.jQuery = _jQuery;
  6561. }
  6562. return jQuery;
  6563. };
  6564. if ( !noGlobal ) {
  6565. window.jQuery = window.$ = jQuery;
  6566. }
  6567. return jQuery;
  6568. } );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement