jquery-source 1.4.3 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  module Jquery
2
2
  module Source
3
- VERSION = "1.4.3"
3
+ VERSION = "1.4.4"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * jQuery JavaScript Library v1.4.3
2
+ * jQuery JavaScript Library v1.4.4
3
3
  * http://jquery.com/
4
4
  *
5
5
  * Copyright 2010, John Resig
@@ -11,7 +11,7 @@
11
11
  * Copyright 2010, The Dojo Foundation
12
12
  * Released under the MIT, BSD, and GPL Licenses.
13
13
  *
14
- * Date: Thu Oct 14 23:10:06 2010 -0400
14
+ * Date: Thu Nov 11 19:04:53 2010 -0500
15
15
  */
16
16
  (function( window, undefined ) {
17
17
 
@@ -211,7 +211,7 @@ jQuery.fn = jQuery.prototype = {
211
211
  selector: "",
212
212
 
213
213
  // The current version of jQuery being used
214
- jquery: "1.4.3",
214
+ jquery: "1.4.4",
215
215
 
216
216
  // The default length of a jQuery object is 0
217
217
  length: 0,
@@ -330,8 +330,11 @@ jQuery.fn = jQuery.prototype = {
330
330
  jQuery.fn.init.prototype = jQuery.fn;
331
331
 
332
332
  jQuery.extend = jQuery.fn.extend = function() {
333
- // copy reference to target object
334
- var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy, copyIsArray;
333
+ var options, name, src, copy, copyIsArray, clone,
334
+ target = arguments[0] || {},
335
+ i = 1,
336
+ length = arguments.length,
337
+ deep = false;
335
338
 
336
339
  // Handle a deep copy situation
337
340
  if ( typeof target === "boolean" ) {
@@ -433,18 +436,21 @@ jQuery.extend({
433
436
  // If there are functions bound, to execute
434
437
  if ( readyList ) {
435
438
  // Execute all of them
436
- var fn, i = 0;
437
- while ( (fn = readyList[ i++ ]) ) {
438
- fn.call( document, jQuery );
439
- }
439
+ var fn,
440
+ i = 0,
441
+ ready = readyList;
440
442
 
441
443
  // Reset the list of functions
442
444
  readyList = null;
443
- }
444
445
 
445
- // Trigger any bound ready events
446
- if ( jQuery.fn.triggerHandler ) {
447
- jQuery( document ).triggerHandler( "ready" );
446
+ while ( (fn = ready[ i++ ]) ) {
447
+ fn.call( document, jQuery );
448
+ }
449
+
450
+ // Trigger any bound ready events
451
+ if ( jQuery.fn.trigger ) {
452
+ jQuery( document ).trigger( "ready" ).unbind( "ready" );
453
+ }
448
454
  }
449
455
  }
450
456
  },
@@ -697,7 +703,8 @@ jQuery.extend({
697
703
  },
698
704
 
699
705
  merge: function( first, second ) {
700
- var i = first.length, j = 0;
706
+ var i = first.length,
707
+ j = 0;
701
708
 
702
709
  if ( typeof second.length === "number" ) {
703
710
  for ( var l = second.length; j < l; j++ ) {
@@ -964,6 +971,7 @@ return (window.jQuery = window.$ = jQuery);
964
971
  optSelected: opt.selected,
965
972
 
966
973
  // Will be defined later
974
+ deleteExpando: true,
967
975
  optDisabled: false,
968
976
  checkClone: false,
969
977
  scriptEval: false,
@@ -994,6 +1002,15 @@ return (window.jQuery = window.$ = jQuery);
994
1002
  delete window[ id ];
995
1003
  }
996
1004
 
1005
+ // Test to see if it's possible to delete an expando from an element
1006
+ // Fails in Internet Explorer
1007
+ try {
1008
+ delete script.test;
1009
+
1010
+ } catch(e) {
1011
+ jQuery.support.deleteExpando = false;
1012
+ }
1013
+
997
1014
  root.removeChild( script );
998
1015
 
999
1016
  if ( div.attachEvent && div.fireEvent ) {
@@ -1087,20 +1104,6 @@ return (window.jQuery = window.$ = jQuery);
1087
1104
  root = script = div = all = a = null;
1088
1105
  })();
1089
1106
 
1090
- jQuery.props = {
1091
- "for": "htmlFor",
1092
- "class": "className",
1093
- readonly: "readOnly",
1094
- maxlength: "maxLength",
1095
- cellspacing: "cellSpacing",
1096
- rowspan: "rowSpan",
1097
- colspan: "colSpan",
1098
- tabindex: "tabIndex",
1099
- usemap: "useMap",
1100
- frameborder: "frameBorder"
1101
- };
1102
-
1103
-
1104
1107
 
1105
1108
 
1106
1109
  var windowData = {},
@@ -1237,8 +1240,24 @@ jQuery.extend({
1237
1240
 
1238
1241
  jQuery.fn.extend({
1239
1242
  data: function( key, value ) {
1243
+ var data = null;
1244
+
1240
1245
  if ( typeof key === "undefined" ) {
1241
- return this.length ? jQuery.data( this[0] ) : null;
1246
+ if ( this.length ) {
1247
+ var attr = this[0].attributes, name;
1248
+ data = jQuery.data( this[0] );
1249
+
1250
+ for ( var i = 0, l = attr.length; i < l; i++ ) {
1251
+ name = attr[i].name;
1252
+
1253
+ if ( name.indexOf( "data-" ) === 0 ) {
1254
+ name = name.substr( 5 );
1255
+ dataAttr( this[0], name, data[ name ] );
1256
+ }
1257
+ }
1258
+ }
1259
+
1260
+ return data;
1242
1261
 
1243
1262
  } else if ( typeof key === "object" ) {
1244
1263
  return this.each(function() {
@@ -1250,31 +1269,12 @@ jQuery.fn.extend({
1250
1269
  parts[1] = parts[1] ? "." + parts[1] : "";
1251
1270
 
1252
1271
  if ( value === undefined ) {
1253
- var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
1272
+ data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
1254
1273
 
1255
1274
  // Try to fetch any internally stored data first
1256
1275
  if ( data === undefined && this.length ) {
1257
1276
  data = jQuery.data( this[0], key );
1258
-
1259
- // If nothing was found internally, try to fetch any
1260
- // data from the HTML5 data-* attribute
1261
- if ( data === undefined && this[0].nodeType === 1 ) {
1262
- data = this[0].getAttribute( "data-" + key );
1263
-
1264
- if ( typeof data === "string" ) {
1265
- try {
1266
- data = data === "true" ? true :
1267
- data === "false" ? false :
1268
- data === "null" ? null :
1269
- !jQuery.isNaN( data ) ? parseFloat( data ) :
1270
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
1271
- data;
1272
- } catch( e ) {}
1273
-
1274
- } else {
1275
- data = undefined;
1276
- }
1277
- }
1277
+ data = dataAttr( this[0], key, data );
1278
1278
  }
1279
1279
 
1280
1280
  return data === undefined && parts[1] ?
@@ -1283,7 +1283,8 @@ jQuery.fn.extend({
1283
1283
 
1284
1284
  } else {
1285
1285
  return this.each(function() {
1286
- var $this = jQuery( this ), args = [ parts[0], value ];
1286
+ var $this = jQuery( this ),
1287
+ args = [ parts[0], value ];
1287
1288
 
1288
1289
  $this.triggerHandler( "setData" + parts[1] + "!", args );
1289
1290
  jQuery.data( this, key, value );
@@ -1299,6 +1300,33 @@ jQuery.fn.extend({
1299
1300
  }
1300
1301
  });
1301
1302
 
1303
+ function dataAttr( elem, key, data ) {
1304
+ // If nothing was found internally, try to fetch any
1305
+ // data from the HTML5 data-* attribute
1306
+ if ( data === undefined && elem.nodeType === 1 ) {
1307
+ data = elem.getAttribute( "data-" + key );
1308
+
1309
+ if ( typeof data === "string" ) {
1310
+ try {
1311
+ data = data === "true" ? true :
1312
+ data === "false" ? false :
1313
+ data === "null" ? null :
1314
+ !jQuery.isNaN( data ) ? parseFloat( data ) :
1315
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
1316
+ data;
1317
+ } catch( e ) {}
1318
+
1319
+ // Make sure we set the data so it isn't changed later
1320
+ jQuery.data( elem, key, data );
1321
+
1322
+ } else {
1323
+ data = undefined;
1324
+ }
1325
+ }
1326
+
1327
+ return data;
1328
+ }
1329
+
1302
1330
 
1303
1331
 
1304
1332
 
@@ -1329,7 +1357,8 @@ jQuery.extend({
1329
1357
  dequeue: function( elem, type ) {
1330
1358
  type = type || "fx";
1331
1359
 
1332
- var queue = jQuery.queue( elem, type ), fn = queue.shift();
1360
+ var queue = jQuery.queue( elem, type ),
1361
+ fn = queue.shift();
1333
1362
 
1334
1363
  // If the fx queue is dequeued, always remove the progress sentinel
1335
1364
  if ( fn === "inprogress" ) {
@@ -1405,6 +1434,19 @@ var rclass = /[\n\t]/g,
1405
1434
  rclickable = /^a(?:rea)?$/i,
1406
1435
  rradiocheck = /^(?:radio|checkbox)$/i;
1407
1436
 
1437
+ jQuery.props = {
1438
+ "for": "htmlFor",
1439
+ "class": "className",
1440
+ readonly: "readOnly",
1441
+ maxlength: "maxLength",
1442
+ cellspacing: "cellSpacing",
1443
+ rowspan: "rowSpan",
1444
+ colspan: "colSpan",
1445
+ tabindex: "tabIndex",
1446
+ usemap: "useMap",
1447
+ frameborder: "frameBorder"
1448
+ };
1449
+
1408
1450
  jQuery.fn.extend({
1409
1451
  attr: function( name, value ) {
1410
1452
  return jQuery.access( this, name, value, true, jQuery.attr );
@@ -1438,7 +1480,9 @@ jQuery.fn.extend({
1438
1480
  elem.className = value;
1439
1481
 
1440
1482
  } else {
1441
- var className = " " + elem.className + " ", setClass = elem.className;
1483
+ var className = " " + elem.className + " ",
1484
+ setClass = elem.className;
1485
+
1442
1486
  for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
1443
1487
  if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
1444
1488
  setClass += " " + classNames[c];
@@ -1486,7 +1530,8 @@ jQuery.fn.extend({
1486
1530
  },
1487
1531
 
1488
1532
  toggleClass: function( value, stateVal ) {
1489
- var type = typeof value, isBool = typeof stateVal === "boolean";
1533
+ var type = typeof value,
1534
+ isBool = typeof stateVal === "boolean";
1490
1535
 
1491
1536
  if ( jQuery.isFunction( value ) ) {
1492
1537
  return this.each(function(i) {
@@ -1498,7 +1543,9 @@ jQuery.fn.extend({
1498
1543
  return this.each(function() {
1499
1544
  if ( type === "string" ) {
1500
1545
  // toggle individual class names
1501
- var className, i = 0, self = jQuery(this),
1546
+ var className,
1547
+ i = 0,
1548
+ self = jQuery( this ),
1502
1549
  state = stateVal,
1503
1550
  classNames = value.split( rspaces );
1504
1551
 
@@ -1667,91 +1714,88 @@ jQuery.extend({
1667
1714
  // Try to normalize/fix the name
1668
1715
  name = notxml && jQuery.props[ name ] || name;
1669
1716
 
1670
- // Only do all the following if this is a node (faster for style)
1671
- if ( elem.nodeType === 1 ) {
1672
- // These attributes require special treatment
1673
- var special = rspecialurl.test( name );
1674
-
1675
- // Safari mis-reports the default selected property of an option
1676
- // Accessing the parent's selectedIndex property fixes it
1677
- if ( name === "selected" && !jQuery.support.optSelected ) {
1678
- var parent = elem.parentNode;
1679
- if ( parent ) {
1680
- parent.selectedIndex;
1681
-
1682
- // Make sure that it also works with optgroups, see #5701
1683
- if ( parent.parentNode ) {
1684
- parent.parentNode.selectedIndex;
1685
- }
1686
- }
1687
- }
1717
+ // These attributes require special treatment
1718
+ var special = rspecialurl.test( name );
1688
1719
 
1689
- // If applicable, access the attribute via the DOM 0 way
1690
- // 'in' checks fail in Blackberry 4.7 #6931
1691
- if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
1692
- if ( set ) {
1693
- // We can't allow the type property to be changed (since it causes problems in IE)
1694
- if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
1695
- jQuery.error( "type property can't be changed" );
1696
- }
1720
+ // Safari mis-reports the default selected property of an option
1721
+ // Accessing the parent's selectedIndex property fixes it
1722
+ if ( name === "selected" && !jQuery.support.optSelected ) {
1723
+ var parent = elem.parentNode;
1724
+ if ( parent ) {
1725
+ parent.selectedIndex;
1697
1726
 
1698
- if ( value === null ) {
1699
- if ( elem.nodeType === 1 ) {
1700
- elem.removeAttribute( name );
1701
- }
1702
-
1703
- } else {
1704
- elem[ name ] = value;
1705
- }
1727
+ // Make sure that it also works with optgroups, see #5701
1728
+ if ( parent.parentNode ) {
1729
+ parent.parentNode.selectedIndex;
1706
1730
  }
1731
+ }
1732
+ }
1707
1733
 
1708
- // browsers index elements by id/name on forms, give priority to attributes.
1709
- if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
1710
- return elem.getAttributeNode( name ).nodeValue;
1734
+ // If applicable, access the attribute via the DOM 0 way
1735
+ // 'in' checks fail in Blackberry 4.7 #6931
1736
+ if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
1737
+ if ( set ) {
1738
+ // We can't allow the type property to be changed (since it causes problems in IE)
1739
+ if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
1740
+ jQuery.error( "type property can't be changed" );
1711
1741
  }
1712
1742
 
1713
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
1714
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
1715
- if ( name === "tabIndex" ) {
1716
- var attributeNode = elem.getAttributeNode( "tabIndex" );
1743
+ if ( value === null ) {
1744
+ if ( elem.nodeType === 1 ) {
1745
+ elem.removeAttribute( name );
1746
+ }
1717
1747
 
1718
- return attributeNode && attributeNode.specified ?
1719
- attributeNode.value :
1720
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
1721
- 0 :
1722
- undefined;
1748
+ } else {
1749
+ elem[ name ] = value;
1723
1750
  }
1751
+ }
1724
1752
 
1725
- return elem[ name ];
1753
+ // browsers index elements by id/name on forms, give priority to attributes.
1754
+ if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
1755
+ return elem.getAttributeNode( name ).nodeValue;
1726
1756
  }
1727
1757
 
1728
- if ( !jQuery.support.style && notxml && name === "style" ) {
1729
- if ( set ) {
1730
- elem.style.cssText = "" + value;
1731
- }
1758
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
1759
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
1760
+ if ( name === "tabIndex" ) {
1761
+ var attributeNode = elem.getAttributeNode( "tabIndex" );
1732
1762
 
1733
- return elem.style.cssText;
1763
+ return attributeNode && attributeNode.specified ?
1764
+ attributeNode.value :
1765
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
1766
+ 0 :
1767
+ undefined;
1734
1768
  }
1735
1769
 
1770
+ return elem[ name ];
1771
+ }
1772
+
1773
+ if ( !jQuery.support.style && notxml && name === "style" ) {
1736
1774
  if ( set ) {
1737
- // convert the value to a string (all browsers do this but IE) see #1070
1738
- elem.setAttribute( name, "" + value );
1775
+ elem.style.cssText = "" + value;
1739
1776
  }
1740
1777
 
1741
- // Ensure that missing attributes return undefined
1742
- // Blackberry 4.7 returns "" from getAttribute #6938
1743
- if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
1744
- return undefined;
1745
- }
1778
+ return elem.style.cssText;
1779
+ }
1746
1780
 
1747
- var attr = !jQuery.support.hrefNormalized && notxml && special ?
1748
- // Some attributes require a special call on IE
1749
- elem.getAttribute( name, 2 ) :
1750
- elem.getAttribute( name );
1781
+ if ( set ) {
1782
+ // convert the value to a string (all browsers do this but IE) see #1070
1783
+ elem.setAttribute( name, "" + value );
1784
+ }
1751
1785
 
1752
- // Non-existent attributes return null, we normalize to undefined
1753
- return attr === null ? undefined : attr;
1786
+ // Ensure that missing attributes return undefined
1787
+ // Blackberry 4.7 returns "" from getAttribute #6938
1788
+ if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
1789
+ return undefined;
1754
1790
  }
1791
+
1792
+ var attr = !jQuery.support.hrefNormalized && notxml && special ?
1793
+ // Some attributes require a special call on IE
1794
+ elem.getAttribute( name, 2 ) :
1795
+ elem.getAttribute( name );
1796
+
1797
+ // Non-existent attributes return null, we normalize to undefined
1798
+ return attr === null ? undefined : attr;
1755
1799
  }
1756
1800
  });
1757
1801
 
@@ -1790,6 +1834,9 @@ jQuery.event = {
1790
1834
 
1791
1835
  if ( handler === false ) {
1792
1836
  handler = returnFalse;
1837
+ } else if ( !handler ) {
1838
+ // Fixes bug #7229. Fix recommended by jdalton
1839
+ return;
1793
1840
  }
1794
1841
 
1795
1842
  var handleObjIn, handleObj;
@@ -2133,8 +2180,10 @@ jQuery.event = {
2133
2180
  jQuery.event.trigger( event, data, parent, true );
2134
2181
 
2135
2182
  } else if ( !event.isDefaultPrevented() ) {
2136
- var target = event.target, old, targetType = type.replace(rnamespaces, ""),
2137
- isClick = jQuery.nodeName(target, "a") && targetType === "click",
2183
+ var old,
2184
+ target = event.target,
2185
+ targetType = type.replace( rnamespaces, "" ),
2186
+ isClick = jQuery.nodeName( target, "a" ) && targetType === "click",
2138
2187
  special = jQuery.event.special[ targetType ] || {};
2139
2188
 
2140
2189
  if ( (!special._default || special._default.call( elem, event ) === false) &&
@@ -2166,7 +2215,9 @@ jQuery.event = {
2166
2215
  },
2167
2216
 
2168
2217
  handle: function( event ) {
2169
- var all, handlers, namespaces, namespace_sort = [], namespace_re, events, args = jQuery.makeArray( arguments );
2218
+ var all, handlers, namespaces, namespace_re, events,
2219
+ namespace_sort = [],
2220
+ args = jQuery.makeArray( arguments );
2170
2221
 
2171
2222
  event = args[0] = jQuery.event.fix( event || window.event );
2172
2223
  event.currentTarget = this;
@@ -2245,7 +2296,8 @@ jQuery.event = {
2245
2296
 
2246
2297
  // Fix target property, if necessary
2247
2298
  if ( !event.target ) {
2248
- event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
2299
+ // Fixes #1925 where srcElement might not be defined either
2300
+ event.target = event.srcElement || document;
2249
2301
  }
2250
2302
 
2251
2303
  // check if target is a textnode (safari)
@@ -2260,7 +2312,9 @@ jQuery.event = {
2260
2312
 
2261
2313
  // Calculate pageX/Y if missing and clientX/Y available
2262
2314
  if ( event.pageX == null && event.clientX != null ) {
2263
- var doc = document.documentElement, body = document.body;
2315
+ var doc = document.documentElement,
2316
+ body = document.body;
2317
+
2264
2318
  event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
2265
2319
  event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
2266
2320
  }
@@ -2466,7 +2520,8 @@ if ( !jQuery.support.submitBubbles ) {
2466
2520
  setup: function( data, namespaces ) {
2467
2521
  if ( this.nodeName.toLowerCase() !== "form" ) {
2468
2522
  jQuery.event.add(this, "click.specialSubmit", function( e ) {
2469
- var elem = e.target, type = elem.type;
2523
+ var elem = e.target,
2524
+ type = elem.type;
2470
2525
 
2471
2526
  if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
2472
2527
  e.liveFired = undefined;
@@ -2475,7 +2530,8 @@ if ( !jQuery.support.submitBubbles ) {
2475
2530
  });
2476
2531
 
2477
2532
  jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
2478
- var elem = e.target, type = elem.type;
2533
+ var elem = e.target,
2534
+ type = elem.type;
2479
2535
 
2480
2536
  if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
2481
2537
  e.liveFired = undefined;
@@ -2716,7 +2772,8 @@ jQuery.fn.extend({
2716
2772
 
2717
2773
  toggle: function( fn ) {
2718
2774
  // Save reference to arguments for access in closure
2719
- var args = arguments, i = 1;
2775
+ var args = arguments,
2776
+ i = 1;
2720
2777
 
2721
2778
  // link all the functions, so any of them can unbind this click handler
2722
2779
  while ( i < args.length ) {
@@ -2811,8 +2868,9 @@ jQuery.each(["live", "die"], function( i, name ) {
2811
2868
  });
2812
2869
 
2813
2870
  function liveHandler( event ) {
2814
- var stop, maxLevel, elems = [], selectors = [],
2815
- related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
2871
+ var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
2872
+ elems = [],
2873
+ selectors = [],
2816
2874
  events = jQuery.data( this, this.nodeType ? "events" : "__events__" );
2817
2875
 
2818
2876
  if ( typeof events === "function" ) {
@@ -2823,7 +2881,7 @@ function liveHandler( event ) {
2823
2881
  if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
2824
2882
  return;
2825
2883
  }
2826
-
2884
+
2827
2885
  if ( event.namespace ) {
2828
2886
  namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
2829
2887
  }
@@ -2887,6 +2945,9 @@ function liveHandler( event ) {
2887
2945
  if ( ret === false ) {
2888
2946
  stop = false;
2889
2947
  }
2948
+ if ( event.isImmediatePropagationStopped() ) {
2949
+ break;
2950
+ }
2890
2951
  }
2891
2952
  }
2892
2953
 
@@ -2954,12 +3015,12 @@ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[
2954
3015
  // optimization where it does not always call our comparision
2955
3016
  // function. If that is the case, discard the hasDuplicate value.
2956
3017
  // Thus far that includes Google Chrome.
2957
- [0, 0].sort(function(){
3018
+ [0, 0].sort(function() {
2958
3019
  baseHasDuplicate = false;
2959
3020
  return 0;
2960
3021
  });
2961
3022
 
2962
- var Sizzle = function(selector, context, results, seed) {
3023
+ var Sizzle = function( selector, context, results, seed ) {
2963
3024
  results = results || [];
2964
3025
  context = context || document;
2965
3026
 
@@ -2973,13 +3034,16 @@ var Sizzle = function(selector, context, results, seed) {
2973
3034
  return results;
2974
3035
  }
2975
3036
 
2976
- var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),
2977
- soFar = selector, ret, cur, pop, i;
3037
+ var m, set, checkSet, extra, ret, cur, pop, i,
3038
+ prune = true,
3039
+ contextXML = Sizzle.isXML( context ),
3040
+ parts = [],
3041
+ soFar = selector;
2978
3042
 
2979
3043
  // Reset the position of the chunker regexp (start from head)
2980
3044
  do {
2981
- chunker.exec("");
2982
- m = chunker.exec(soFar);
3045
+ chunker.exec( "" );
3046
+ m = chunker.exec( soFar );
2983
3047
 
2984
3048
  if ( m ) {
2985
3049
  soFar = m[3];
@@ -2994,8 +3058,10 @@ var Sizzle = function(selector, context, results, seed) {
2994
3058
  } while ( m );
2995
3059
 
2996
3060
  if ( parts.length > 1 && origPOS.exec( selector ) ) {
3061
+
2997
3062
  if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
2998
3063
  set = posProcess( parts[0] + parts[1], context );
3064
+
2999
3065
  } else {
3000
3066
  set = Expr.relative[ parts[0] ] ?
3001
3067
  [ context ] :
@@ -3011,23 +3077,31 @@ var Sizzle = function(selector, context, results, seed) {
3011
3077
  set = posProcess( selector, set );
3012
3078
  }
3013
3079
  }
3080
+
3014
3081
  } else {
3015
3082
  // Take a shortcut and set the context if the root selector is an ID
3016
3083
  // (but not if it'll be faster if the inner selector is an ID)
3017
3084
  if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
3018
3085
  Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
3086
+
3019
3087
  ret = Sizzle.find( parts.shift(), context, contextXML );
3020
- context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
3088
+ context = ret.expr ?
3089
+ Sizzle.filter( ret.expr, ret.set )[0] :
3090
+ ret.set[0];
3021
3091
  }
3022
3092
 
3023
3093
  if ( context ) {
3024
3094
  ret = seed ?
3025
3095
  { expr: parts.pop(), set: makeArray(seed) } :
3026
3096
  Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
3027
- set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
3097
+
3098
+ set = ret.expr ?
3099
+ Sizzle.filter( ret.expr, ret.set ) :
3100
+ ret.set;
3028
3101
 
3029
3102
  if ( parts.length > 0 ) {
3030
- checkSet = makeArray(set);
3103
+ checkSet = makeArray( set );
3104
+
3031
3105
  } else {
3032
3106
  prune = false;
3033
3107
  }
@@ -3048,6 +3122,7 @@ var Sizzle = function(selector, context, results, seed) {
3048
3122
 
3049
3123
  Expr.relative[ cur ]( checkSet, pop, contextXML );
3050
3124
  }
3125
+
3051
3126
  } else {
3052
3127
  checkSet = parts = [];
3053
3128
  }
@@ -3064,12 +3139,14 @@ var Sizzle = function(selector, context, results, seed) {
3064
3139
  if ( toString.call(checkSet) === "[object Array]" ) {
3065
3140
  if ( !prune ) {
3066
3141
  results.push.apply( results, checkSet );
3142
+
3067
3143
  } else if ( context && context.nodeType === 1 ) {
3068
3144
  for ( i = 0; checkSet[i] != null; i++ ) {
3069
3145
  if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
3070
3146
  results.push( set[i] );
3071
3147
  }
3072
3148
  }
3149
+
3073
3150
  } else {
3074
3151
  for ( i = 0; checkSet[i] != null; i++ ) {
3075
3152
  if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
@@ -3077,6 +3154,7 @@ var Sizzle = function(selector, context, results, seed) {
3077
3154
  }
3078
3155
  }
3079
3156
  }
3157
+
3080
3158
  } else {
3081
3159
  makeArray( checkSet, results );
3082
3160
  }
@@ -3089,15 +3167,15 @@ var Sizzle = function(selector, context, results, seed) {
3089
3167
  return results;
3090
3168
  };
3091
3169
 
3092
- Sizzle.uniqueSort = function(results){
3170
+ Sizzle.uniqueSort = function( results ) {
3093
3171
  if ( sortOrder ) {
3094
3172
  hasDuplicate = baseHasDuplicate;
3095
- results.sort(sortOrder);
3173
+ results.sort( sortOrder );
3096
3174
 
3097
3175
  if ( hasDuplicate ) {
3098
3176
  for ( var i = 1; i < results.length; i++ ) {
3099
- if ( results[i] === results[i-1] ) {
3100
- results.splice(i--, 1);
3177
+ if ( results[i] === results[ i - 1 ] ) {
3178
+ results.splice( i--, 1 );
3101
3179
  }
3102
3180
  }
3103
3181
  }
@@ -3106,15 +3184,15 @@ Sizzle.uniqueSort = function(results){
3106
3184
  return results;
3107
3185
  };
3108
3186
 
3109
- Sizzle.matches = function(expr, set){
3110
- return Sizzle(expr, null, null, set);
3187
+ Sizzle.matches = function( expr, set ) {
3188
+ return Sizzle( expr, null, null, set );
3111
3189
  };
3112
3190
 
3113
- Sizzle.matchesSelector = function(node, expr){
3114
- return Sizzle(expr, null, null, [node]).length > 0;
3191
+ Sizzle.matchesSelector = function( node, expr ) {
3192
+ return Sizzle( expr, null, null, [node] ).length > 0;
3115
3193
  };
3116
3194
 
3117
- Sizzle.find = function(expr, context, isXML){
3195
+ Sizzle.find = function( expr, context, isXML ) {
3118
3196
  var set;
3119
3197
 
3120
3198
  if ( !expr ) {
@@ -3122,15 +3200,17 @@ Sizzle.find = function(expr, context, isXML){
3122
3200
  }
3123
3201
 
3124
3202
  for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
3125
- var type = Expr.order[i], match;
3203
+ var match,
3204
+ type = Expr.order[i];
3126
3205
 
3127
3206
  if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
3128
3207
  var left = match[1];
3129
- match.splice(1,1);
3208
+ match.splice( 1, 1 );
3130
3209
 
3131
3210
  if ( left.substr( left.length - 1 ) !== "\\" ) {
3132
3211
  match[1] = (match[1] || "").replace(/\\/g, "");
3133
3212
  set = Expr.find[ type ]( match, context, isXML );
3213
+
3134
3214
  if ( set != null ) {
3135
3215
  expr = expr.replace( Expr.match[ type ], "" );
3136
3216
  break;
@@ -3140,20 +3220,26 @@ Sizzle.find = function(expr, context, isXML){
3140
3220
  }
3141
3221
 
3142
3222
  if ( !set ) {
3143
- set = context.getElementsByTagName("*");
3223
+ set = context.getElementsByTagName( "*" );
3144
3224
  }
3145
3225
 
3146
- return {set: set, expr: expr};
3226
+ return { set: set, expr: expr };
3147
3227
  };
3148
3228
 
3149
- Sizzle.filter = function(expr, set, inplace, not){
3150
- var old = expr, result = [], curLoop = set, match, anyFound,
3151
- isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);
3229
+ Sizzle.filter = function( expr, set, inplace, not ) {
3230
+ var match, anyFound,
3231
+ old = expr,
3232
+ result = [],
3233
+ curLoop = set,
3234
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
3152
3235
 
3153
3236
  while ( expr && set.length ) {
3154
3237
  for ( var type in Expr.filter ) {
3155
3238
  if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
3156
- var filter = Expr.filter[ type ], found, item, left = match[1];
3239
+ var found, item,
3240
+ filter = Expr.filter[ type ],
3241
+ left = match[1];
3242
+
3157
3243
  anyFound = false;
3158
3244
 
3159
3245
  match.splice(1,1);
@@ -3171,6 +3257,7 @@ Sizzle.filter = function(expr, set, inplace, not){
3171
3257
 
3172
3258
  if ( !match ) {
3173
3259
  anyFound = found = true;
3260
+
3174
3261
  } else if ( match === true ) {
3175
3262
  continue;
3176
3263
  }
@@ -3185,9 +3272,11 @@ Sizzle.filter = function(expr, set, inplace, not){
3185
3272
  if ( inplace && found != null ) {
3186
3273
  if ( pass ) {
3187
3274
  anyFound = true;
3275
+
3188
3276
  } else {
3189
3277
  curLoop[i] = false;
3190
3278
  }
3279
+
3191
3280
  } else if ( pass ) {
3192
3281
  result.push( item );
3193
3282
  anyFound = true;
@@ -3216,6 +3305,7 @@ Sizzle.filter = function(expr, set, inplace, not){
3216
3305
  if ( expr === old ) {
3217
3306
  if ( anyFound == null ) {
3218
3307
  Sizzle.error( expr );
3308
+
3219
3309
  } else {
3220
3310
  break;
3221
3311
  }
@@ -3233,6 +3323,7 @@ Sizzle.error = function( msg ) {
3233
3323
 
3234
3324
  var Expr = Sizzle.selectors = {
3235
3325
  order: [ "ID", "NAME", "TAG" ],
3326
+
3236
3327
  match: {
3237
3328
  ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
3238
3329
  CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
@@ -3243,20 +3334,24 @@ var Expr = Sizzle.selectors = {
3243
3334
  POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
3244
3335
  PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
3245
3336
  },
3337
+
3246
3338
  leftMatch: {},
3339
+
3247
3340
  attrMap: {
3248
3341
  "class": "className",
3249
3342
  "for": "htmlFor"
3250
3343
  },
3344
+
3251
3345
  attrHandle: {
3252
- href: function(elem){
3253
- return elem.getAttribute("href");
3346
+ href: function( elem ) {
3347
+ return elem.getAttribute( "href" );
3254
3348
  }
3255
3349
  },
3350
+
3256
3351
  relative: {
3257
3352
  "+": function(checkSet, part){
3258
3353
  var isPartStr = typeof part === "string",
3259
- isTag = isPartStr && !/\W/.test(part),
3354
+ isTag = isPartStr && !/\W/.test( part ),
3260
3355
  isPartStrNotTag = isPartStr && !isTag;
3261
3356
 
3262
3357
  if ( isTag ) {
@@ -3277,23 +3372,29 @@ var Expr = Sizzle.selectors = {
3277
3372
  Sizzle.filter( part, checkSet, true );
3278
3373
  }
3279
3374
  },
3280
- ">": function(checkSet, part){
3281
- var isPartStr = typeof part === "string",
3282
- elem, i = 0, l = checkSet.length;
3283
3375
 
3284
- if ( isPartStr && !/\W/.test(part) ) {
3376
+ ">": function( checkSet, part ) {
3377
+ var elem,
3378
+ isPartStr = typeof part === "string",
3379
+ i = 0,
3380
+ l = checkSet.length;
3381
+
3382
+ if ( isPartStr && !/\W/.test( part ) ) {
3285
3383
  part = part.toLowerCase();
3286
3384
 
3287
3385
  for ( ; i < l; i++ ) {
3288
3386
  elem = checkSet[i];
3387
+
3289
3388
  if ( elem ) {
3290
3389
  var parent = elem.parentNode;
3291
3390
  checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
3292
3391
  }
3293
3392
  }
3393
+
3294
3394
  } else {
3295
3395
  for ( ; i < l; i++ ) {
3296
3396
  elem = checkSet[i];
3397
+
3297
3398
  if ( elem ) {
3298
3399
  checkSet[i] = isPartStr ?
3299
3400
  elem.parentNode :
@@ -3306,8 +3407,11 @@ var Expr = Sizzle.selectors = {
3306
3407
  }
3307
3408
  }
3308
3409
  },
3410
+
3309
3411
  "": function(checkSet, part, isXML){
3310
- var doneName = done++, checkFn = dirCheck, nodeCheck;
3412
+ var nodeCheck,
3413
+ doneName = done++,
3414
+ checkFn = dirCheck;
3311
3415
 
3312
3416
  if ( typeof part === "string" && !/\W/.test(part) ) {
3313
3417
  part = part.toLowerCase();
@@ -3315,22 +3419,26 @@ var Expr = Sizzle.selectors = {
3315
3419
  checkFn = dirNodeCheck;
3316
3420
  }
3317
3421
 
3318
- checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
3422
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
3319
3423
  },
3320
- "~": function(checkSet, part, isXML){
3321
- var doneName = done++, checkFn = dirCheck, nodeCheck;
3322
3424
 
3323
- if ( typeof part === "string" && !/\W/.test(part) ) {
3425
+ "~": function( checkSet, part, isXML ) {
3426
+ var nodeCheck,
3427
+ doneName = done++,
3428
+ checkFn = dirCheck;
3429
+
3430
+ if ( typeof part === "string" && !/\W/.test( part ) ) {
3324
3431
  part = part.toLowerCase();
3325
3432
  nodeCheck = part;
3326
3433
  checkFn = dirNodeCheck;
3327
3434
  }
3328
3435
 
3329
- checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
3436
+ checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
3330
3437
  }
3331
3438
  },
3439
+
3332
3440
  find: {
3333
- ID: function(match, context, isXML){
3441
+ ID: function( match, context, isXML ) {
3334
3442
  if ( typeof context.getElementById !== "undefined" && !isXML ) {
3335
3443
  var m = context.getElementById(match[1]);
3336
3444
  // Check parentNode to catch when Blackberry 4.6 returns
@@ -3338,9 +3446,11 @@ var Expr = Sizzle.selectors = {
3338
3446
  return m && m.parentNode ? [m] : [];
3339
3447
  }
3340
3448
  },
3341
- NAME: function(match, context){
3449
+
3450
+ NAME: function( match, context ) {
3342
3451
  if ( typeof context.getElementsByName !== "undefined" ) {
3343
- var ret = [], results = context.getElementsByName(match[1]);
3452
+ var ret = [],
3453
+ results = context.getElementsByName( match[1] );
3344
3454
 
3345
3455
  for ( var i = 0, l = results.length; i < l; i++ ) {
3346
3456
  if ( results[i].getAttribute("name") === match[1] ) {
@@ -3351,12 +3461,13 @@ var Expr = Sizzle.selectors = {
3351
3461
  return ret.length === 0 ? null : ret;
3352
3462
  }
3353
3463
  },
3354
- TAG: function(match, context){
3355
- return context.getElementsByTagName(match[1]);
3464
+
3465
+ TAG: function( match, context ) {
3466
+ return context.getElementsByTagName( match[1] );
3356
3467
  }
3357
3468
  },
3358
3469
  preFilter: {
3359
- CLASS: function(match, curLoop, inplace, result, not, isXML){
3470
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
3360
3471
  match = " " + match[1].replace(/\\/g, "") + " ";
3361
3472
 
3362
3473
  if ( isXML ) {
@@ -3369,6 +3480,7 @@ var Expr = Sizzle.selectors = {
3369
3480
  if ( !inplace ) {
3370
3481
  result.push( elem );
3371
3482
  }
3483
+
3372
3484
  } else if ( inplace ) {
3373
3485
  curLoop[i] = false;
3374
3486
  }
@@ -3377,13 +3489,16 @@ var Expr = Sizzle.selectors = {
3377
3489
 
3378
3490
  return false;
3379
3491
  },
3380
- ID: function(match){
3492
+
3493
+ ID: function( match ) {
3381
3494
  return match[1].replace(/\\/g, "");
3382
3495
  },
3383
- TAG: function(match, curLoop){
3496
+
3497
+ TAG: function( match, curLoop ) {
3384
3498
  return match[1].toLowerCase();
3385
3499
  },
3386
- CHILD: function(match){
3500
+
3501
+ CHILD: function( match ) {
3387
3502
  if ( match[1] === "nth" ) {
3388
3503
  // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
3389
3504
  var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
@@ -3400,7 +3515,8 @@ var Expr = Sizzle.selectors = {
3400
3515
 
3401
3516
  return match;
3402
3517
  },
3403
- ATTR: function(match, curLoop, inplace, result, not, isXML){
3518
+
3519
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
3404
3520
  var name = match[1].replace(/\\/g, "");
3405
3521
 
3406
3522
  if ( !isXML && Expr.attrMap[name] ) {
@@ -3413,122 +3529,156 @@ var Expr = Sizzle.selectors = {
3413
3529
 
3414
3530
  return match;
3415
3531
  },
3416
- PSEUDO: function(match, curLoop, inplace, result, not){
3532
+
3533
+ PSEUDO: function( match, curLoop, inplace, result, not ) {
3417
3534
  if ( match[1] === "not" ) {
3418
3535
  // If we're dealing with a complex expression, or a simple one
3419
3536
  if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
3420
3537
  match[3] = Sizzle(match[3], null, null, curLoop);
3538
+
3421
3539
  } else {
3422
3540
  var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
3541
+
3423
3542
  if ( !inplace ) {
3424
3543
  result.push.apply( result, ret );
3425
3544
  }
3545
+
3426
3546
  return false;
3427
3547
  }
3548
+
3428
3549
  } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
3429
3550
  return true;
3430
3551
  }
3431
3552
 
3432
3553
  return match;
3433
3554
  },
3434
- POS: function(match){
3555
+
3556
+ POS: function( match ) {
3435
3557
  match.unshift( true );
3558
+
3436
3559
  return match;
3437
3560
  }
3438
3561
  },
3562
+
3439
3563
  filters: {
3440
- enabled: function(elem){
3564
+ enabled: function( elem ) {
3441
3565
  return elem.disabled === false && elem.type !== "hidden";
3442
3566
  },
3443
- disabled: function(elem){
3567
+
3568
+ disabled: function( elem ) {
3444
3569
  return elem.disabled === true;
3445
3570
  },
3446
- checked: function(elem){
3571
+
3572
+ checked: function( elem ) {
3447
3573
  return elem.checked === true;
3448
3574
  },
3449
- selected: function(elem){
3575
+
3576
+ selected: function( elem ) {
3450
3577
  // Accessing this property makes selected-by-default
3451
3578
  // options in Safari work properly
3452
3579
  elem.parentNode.selectedIndex;
3580
+
3453
3581
  return elem.selected === true;
3454
3582
  },
3455
- parent: function(elem){
3583
+
3584
+ parent: function( elem ) {
3456
3585
  return !!elem.firstChild;
3457
3586
  },
3458
- empty: function(elem){
3587
+
3588
+ empty: function( elem ) {
3459
3589
  return !elem.firstChild;
3460
3590
  },
3461
- has: function(elem, i, match){
3591
+
3592
+ has: function( elem, i, match ) {
3462
3593
  return !!Sizzle( match[3], elem ).length;
3463
3594
  },
3464
- header: function(elem){
3595
+
3596
+ header: function( elem ) {
3465
3597
  return (/h\d/i).test( elem.nodeName );
3466
3598
  },
3467
- text: function(elem){
3599
+
3600
+ text: function( elem ) {
3468
3601
  return "text" === elem.type;
3469
3602
  },
3470
- radio: function(elem){
3603
+ radio: function( elem ) {
3471
3604
  return "radio" === elem.type;
3472
3605
  },
3473
- checkbox: function(elem){
3606
+
3607
+ checkbox: function( elem ) {
3474
3608
  return "checkbox" === elem.type;
3475
3609
  },
3476
- file: function(elem){
3610
+
3611
+ file: function( elem ) {
3477
3612
  return "file" === elem.type;
3478
3613
  },
3479
- password: function(elem){
3614
+ password: function( elem ) {
3480
3615
  return "password" === elem.type;
3481
3616
  },
3482
- submit: function(elem){
3617
+
3618
+ submit: function( elem ) {
3483
3619
  return "submit" === elem.type;
3484
3620
  },
3485
- image: function(elem){
3621
+
3622
+ image: function( elem ) {
3486
3623
  return "image" === elem.type;
3487
3624
  },
3488
- reset: function(elem){
3625
+
3626
+ reset: function( elem ) {
3489
3627
  return "reset" === elem.type;
3490
3628
  },
3491
- button: function(elem){
3629
+
3630
+ button: function( elem ) {
3492
3631
  return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
3493
3632
  },
3494
- input: function(elem){
3495
- return (/input|select|textarea|button/i).test(elem.nodeName);
3633
+
3634
+ input: function( elem ) {
3635
+ return (/input|select|textarea|button/i).test( elem.nodeName );
3496
3636
  }
3497
3637
  },
3498
3638
  setFilters: {
3499
- first: function(elem, i){
3639
+ first: function( elem, i ) {
3500
3640
  return i === 0;
3501
3641
  },
3502
- last: function(elem, i, match, array){
3642
+
3643
+ last: function( elem, i, match, array ) {
3503
3644
  return i === array.length - 1;
3504
3645
  },
3505
- even: function(elem, i){
3646
+
3647
+ even: function( elem, i ) {
3506
3648
  return i % 2 === 0;
3507
3649
  },
3508
- odd: function(elem, i){
3650
+
3651
+ odd: function( elem, i ) {
3509
3652
  return i % 2 === 1;
3510
3653
  },
3511
- lt: function(elem, i, match){
3654
+
3655
+ lt: function( elem, i, match ) {
3512
3656
  return i < match[3] - 0;
3513
3657
  },
3514
- gt: function(elem, i, match){
3658
+
3659
+ gt: function( elem, i, match ) {
3515
3660
  return i > match[3] - 0;
3516
3661
  },
3517
- nth: function(elem, i, match){
3662
+
3663
+ nth: function( elem, i, match ) {
3518
3664
  return match[3] - 0 === i;
3519
3665
  },
3520
- eq: function(elem, i, match){
3666
+
3667
+ eq: function( elem, i, match ) {
3521
3668
  return match[3] - 0 === i;
3522
3669
  }
3523
3670
  },
3524
3671
  filter: {
3525
- PSEUDO: function(elem, match, i, array){
3526
- var name = match[1], filter = Expr.filters[ name ];
3672
+ PSEUDO: function( elem, match, i, array ) {
3673
+ var name = match[1],
3674
+ filter = Expr.filters[ name ];
3527
3675
 
3528
3676
  if ( filter ) {
3529
3677
  return filter( elem, i, match, array );
3678
+
3530
3679
  } else if ( name === "contains" ) {
3531
3680
  return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
3681
+
3532
3682
  } else if ( name === "not" ) {
3533
3683
  var not = match[3];
3534
3684
 
@@ -3539,33 +3689,43 @@ var Expr = Sizzle.selectors = {
3539
3689
  }
3540
3690
 
3541
3691
  return true;
3692
+
3542
3693
  } else {
3543
3694
  Sizzle.error( "Syntax error, unrecognized expression: " + name );
3544
3695
  }
3545
3696
  },
3546
- CHILD: function(elem, match){
3547
- var type = match[1], node = elem;
3548
- switch (type) {
3549
- case 'only':
3550
- case 'first':
3697
+
3698
+ CHILD: function( elem, match ) {
3699
+ var type = match[1],
3700
+ node = elem;
3701
+
3702
+ switch ( type ) {
3703
+ case "only":
3704
+ case "first":
3551
3705
  while ( (node = node.previousSibling) ) {
3552
3706
  if ( node.nodeType === 1 ) {
3553
3707
  return false;
3554
3708
  }
3555
3709
  }
3710
+
3556
3711
  if ( type === "first" ) {
3557
3712
  return true;
3558
3713
  }
3714
+
3559
3715
  node = elem;
3560
- case 'last':
3716
+
3717
+ case "last":
3561
3718
  while ( (node = node.nextSibling) ) {
3562
3719
  if ( node.nodeType === 1 ) {
3563
3720
  return false;
3564
3721
  }
3565
3722
  }
3723
+
3566
3724
  return true;
3567
- case 'nth':
3568
- var first = match[2], last = match[3];
3725
+
3726
+ case "nth":
3727
+ var first = match[2],
3728
+ last = match[3];
3569
3729
 
3570
3730
  if ( first === 1 && last === 0 ) {
3571
3731
  return true;
@@ -3576,33 +3736,41 @@ var Expr = Sizzle.selectors = {
3576
3736
 
3577
3737
  if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
3578
3738
  var count = 0;
3739
+
3579
3740
  for ( node = parent.firstChild; node; node = node.nextSibling ) {
3580
3741
  if ( node.nodeType === 1 ) {
3581
3742
  node.nodeIndex = ++count;
3582
3743
  }
3583
3744
  }
3745
+
3584
3746
  parent.sizcache = doneName;
3585
3747
  }
3586
3748
 
3587
3749
  var diff = elem.nodeIndex - last;
3750
+
3588
3751
  if ( first === 0 ) {
3589
3752
  return diff === 0;
3753
+
3590
3754
  } else {
3591
3755
  return ( diff % first === 0 && diff / first >= 0 );
3592
3756
  }
3593
3757
  }
3594
3758
  },
3595
- ID: function(elem, match){
3759
+
3760
+ ID: function( elem, match ) {
3596
3761
  return elem.nodeType === 1 && elem.getAttribute("id") === match;
3597
3762
  },
3598
- TAG: function(elem, match){
3763
+
3764
+ TAG: function( elem, match ) {
3599
3765
  return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
3600
3766
  },
3601
- CLASS: function(elem, match){
3767
+
3768
+ CLASS: function( elem, match ) {
3602
3769
  return (" " + (elem.className || elem.getAttribute("class")) + " ")
3603
3770
  .indexOf( match ) > -1;
3604
3771
  },
3605
- ATTR: function(elem, match){
3772
+
3773
+ ATTR: function( elem, match ) {
3606
3774
  var name = match[1],
3607
3775
  result = Expr.attrHandle[ name ] ?
3608
3776
  Expr.attrHandle[ name ]( elem ) :
@@ -3633,8 +3801,10 @@ var Expr = Sizzle.selectors = {
3633
3801
  value === check || value.substr(0, check.length + 1) === check + "-" :
3634
3802
  false;
3635
3803
  },
3636
- POS: function(elem, match, i, array){
3637
- var name = match[2], filter = Expr.setFilters[ name ];
3804
+
3805
+ POS: function( elem, match, i, array ) {
3806
+ var name = match[2],
3807
+ filter = Expr.setFilters[ name ];
3638
3808
 
3639
3809
  if ( filter ) {
3640
3810
  return filter( elem, i, match, array );
@@ -3653,7 +3823,7 @@ for ( var type in Expr.match ) {
3653
3823
  Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
3654
3824
  }
3655
3825
 
3656
- var makeArray = function(array, results) {
3826
+ var makeArray = function( array, results ) {
3657
3827
  array = Array.prototype.slice.call( array, 0 );
3658
3828
 
3659
3829
  if ( results ) {
@@ -3672,17 +3842,20 @@ try {
3672
3842
  Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
3673
3843
 
3674
3844
  // Provide a fallback method if it does not work
3675
- } catch(e){
3676
- makeArray = function(array, results) {
3677
- var ret = results || [], i = 0;
3845
+ } catch( e ) {
3846
+ makeArray = function( array, results ) {
3847
+ var i = 0,
3848
+ ret = results || [];
3678
3849
 
3679
3850
  if ( toString.call(array) === "[object Array]" ) {
3680
3851
  Array.prototype.push.apply( ret, array );
3852
+
3681
3853
  } else {
3682
3854
  if ( typeof array.length === "number" ) {
3683
3855
  for ( var l = array.length; i < l; i++ ) {
3684
3856
  ret.push( array[i] );
3685
3857
  }
3858
+
3686
3859
  } else {
3687
3860
  for ( ; array[i]; i++ ) {
3688
3861
  ret.push( array[i] );
@@ -3709,10 +3882,15 @@ if ( document.documentElement.compareDocumentPosition ) {
3709
3882
 
3710
3883
  return a.compareDocumentPosition(b) & 4 ? -1 : 1;
3711
3884
  };
3885
+
3712
3886
  } else {
3713
3887
  sortOrder = function( a, b ) {
3714
- var ap = [], bp = [], aup = a.parentNode, bup = b.parentNode,
3715
- cur = aup, al, bl;
3888
+ var al, bl,
3889
+ ap = [],
3890
+ bp = [],
3891
+ aup = a.parentNode,
3892
+ bup = b.parentNode,
3893
+ cur = aup;
3716
3894
 
3717
3895
  // The nodes are identical, we can exit early
3718
3896
  if ( a === b ) {
@@ -3805,31 +3983,40 @@ Sizzle.getText = function( elems ) {
3805
3983
  (function(){
3806
3984
  // We're going to inject a fake input element with a specified name
3807
3985
  var form = document.createElement("div"),
3808
- id = "script" + (new Date()).getTime();
3986
+ id = "script" + (new Date()).getTime(),
3987
+ root = document.documentElement;
3988
+
3809
3989
  form.innerHTML = "<a name='" + id + "'/>";
3810
3990
 
3811
3991
  // Inject it into the root element, check its status, and remove it quickly
3812
- var root = document.documentElement;
3813
3992
  root.insertBefore( form, root.firstChild );
3814
3993
 
3815
3994
  // The workaround has to do additional checks after a getElementById
3816
3995
  // Which slows things down for other browsers (hence the branching)
3817
3996
  if ( document.getElementById( id ) ) {
3818
- Expr.find.ID = function(match, context, isXML){
3997
+ Expr.find.ID = function( match, context, isXML ) {
3819
3998
  if ( typeof context.getElementById !== "undefined" && !isXML ) {
3820
3999
  var m = context.getElementById(match[1]);
3821
- return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
4000
+
4001
+ return m ?
4002
+ m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
4003
+ [m] :
4004
+ undefined :
4005
+ [];
3822
4006
  }
3823
4007
  };
3824
4008
 
3825
- Expr.filter.ID = function(elem, match){
4009
+ Expr.filter.ID = function( elem, match ) {
3826
4010
  var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
4011
+
3827
4012
  return elem.nodeType === 1 && node && node.nodeValue === match;
3828
4013
  };
3829
4014
  }
3830
4015
 
3831
4016
  root.removeChild( form );
3832
- root = form = null; // release memory in IE
4017
+
4018
+ // release memory in IE
4019
+ root = form = null;
3833
4020
  })();
3834
4021
 
3835
4022
  (function(){
@@ -3842,8 +4029,8 @@ Sizzle.getText = function( elems ) {
3842
4029
 
3843
4030
  // Make sure no comments are found
3844
4031
  if ( div.getElementsByTagName("*").length > 0 ) {
3845
- Expr.find.TAG = function(match, context){
3846
- var results = context.getElementsByTagName(match[1]);
4032
+ Expr.find.TAG = function( match, context ) {
4033
+ var results = context.getElementsByTagName( match[1] );
3847
4034
 
3848
4035
  // Filter out possible comments
3849
4036
  if ( match[1] === "*" ) {
@@ -3864,19 +4051,25 @@ Sizzle.getText = function( elems ) {
3864
4051
 
3865
4052
  // Check to see if an attribute returns normalized href attributes
3866
4053
  div.innerHTML = "<a href='#'></a>";
4054
+
3867
4055
  if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
3868
4056
  div.firstChild.getAttribute("href") !== "#" ) {
3869
- Expr.attrHandle.href = function(elem){
3870
- return elem.getAttribute("href", 2);
4057
+
4058
+ Expr.attrHandle.href = function( elem ) {
4059
+ return elem.getAttribute( "href", 2 );
3871
4060
  };
3872
4061
  }
3873
4062
 
3874
- div = null; // release memory in IE
4063
+ // release memory in IE
4064
+ div = null;
3875
4065
  })();
3876
4066
 
3877
4067
  if ( document.querySelectorAll ) {
3878
4068
  (function(){
3879
- var oldSizzle = Sizzle, div = document.createElement("div");
4069
+ var oldSizzle = Sizzle,
4070
+ div = document.createElement("div"),
4071
+ id = "__sizzle__";
4072
+
3880
4073
  div.innerHTML = "<p class='TEST'></p>";
3881
4074
 
3882
4075
  // Safari can't handle uppercase or unicode characters when
@@ -3885,9 +4078,12 @@ if ( document.querySelectorAll ) {
3885
4078
  return;
3886
4079
  }
3887
4080
 
3888
- Sizzle = function(query, context, extra, seed){
4081
+ Sizzle = function( query, context, extra, seed ) {
3889
4082
  context = context || document;
3890
4083
 
4084
+ // Make sure that attribute selectors are quoted
4085
+ query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
4086
+
3891
4087
  // Only use querySelectorAll on non-XML documents
3892
4088
  // (ID selectors don't work in non-HTML documents)
3893
4089
  if ( !seed && !Sizzle.isXML(context) ) {
@@ -3901,17 +4097,19 @@ if ( document.querySelectorAll ) {
3901
4097
  // and working up from there (Thanks to Andrew Dupont for the technique)
3902
4098
  // IE 8 doesn't work on object elements
3903
4099
  } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
3904
- var old = context.id, id = context.id = "__sizzle__";
4100
+ var old = context.getAttribute( "id" ),
4101
+ nid = old || id;
4102
+
4103
+ if ( !old ) {
4104
+ context.setAttribute( "id", nid );
4105
+ }
3905
4106
 
3906
4107
  try {
3907
- return makeArray( context.querySelectorAll( "#" + id + " " + query ), extra );
4108
+ return makeArray( context.querySelectorAll( "#" + nid + " " + query ), extra );
3908
4109
 
3909
4110
  } catch(pseudoError) {
3910
4111
  } finally {
3911
- if ( old ) {
3912
- context.id = old;
3913
-
3914
- } else {
4112
+ if ( !old ) {
3915
4113
  context.removeAttribute( "id" );
3916
4114
  }
3917
4115
  }
@@ -3925,7 +4123,8 @@ if ( document.querySelectorAll ) {
3925
4123
  Sizzle[ prop ] = oldSizzle[ prop ];
3926
4124
  }
3927
4125
 
3928
- div = null; // release memory in IE
4126
+ // release memory in IE
4127
+ div = null;
3929
4128
  })();
3930
4129
  }
3931
4130
 
@@ -3937,7 +4136,7 @@ if ( document.querySelectorAll ) {
3937
4136
  try {
3938
4137
  // This should fail with an exception
3939
4138
  // Gecko does not error, returns false instead
3940
- matches.call( document.documentElement, ":sizzle" );
4139
+ matches.call( document.documentElement, "[test!='']:sizzle" );
3941
4140
 
3942
4141
  } catch( pseudoError ) {
3943
4142
  pseudoWorks = true;
@@ -3945,13 +4144,18 @@ if ( document.querySelectorAll ) {
3945
4144
 
3946
4145
  if ( matches ) {
3947
4146
  Sizzle.matchesSelector = function( node, expr ) {
4147
+ // Make sure that attribute selectors are quoted
4148
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
4149
+
4150
+ if ( !Sizzle.isXML( node ) ) {
3948
4151
  try {
3949
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) ) {
4152
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
3950
4153
  return matches.call( node, expr );
3951
4154
  }
3952
4155
  } catch(e) {}
4156
+ }
3953
4157
 
3954
- return Sizzle(expr, null, null, [node]).length > 0;
4158
+ return Sizzle(expr, null, null, [node]).length > 0;
3955
4159
  };
3956
4160
  }
3957
4161
  })();
@@ -3975,22 +4179,25 @@ if ( document.querySelectorAll ) {
3975
4179
  }
3976
4180
 
3977
4181
  Expr.order.splice(1, 0, "CLASS");
3978
- Expr.find.CLASS = function(match, context, isXML) {
4182
+ Expr.find.CLASS = function( match, context, isXML ) {
3979
4183
  if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
3980
4184
  return context.getElementsByClassName(match[1]);
3981
4185
  }
3982
4186
  };
3983
4187
 
3984
- div = null; // release memory in IE
4188
+ // release memory in IE
4189
+ div = null;
3985
4190
  })();
3986
4191
 
3987
4192
  function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
3988
4193
  for ( var i = 0, l = checkSet.length; i < l; i++ ) {
3989
4194
  var elem = checkSet[i];
4195
+
3990
4196
  if ( elem ) {
3991
- elem = elem[dir];
3992
4197
  var match = false;
3993
4198
 
4199
+ elem = elem[dir];
4200
+
3994
4201
  while ( elem ) {
3995
4202
  if ( elem.sizcache === doneName ) {
3996
4203
  match = checkSet[elem.sizset];
@@ -4018,9 +4225,11 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
4018
4225
  function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
4019
4226
  for ( var i = 0, l = checkSet.length; i < l; i++ ) {
4020
4227
  var elem = checkSet[i];
4228
+
4021
4229
  if ( elem ) {
4022
- elem = elem[dir];
4023
4230
  var match = false;
4231
+
4232
+ elem = elem[dir];
4024
4233
 
4025
4234
  while ( elem ) {
4026
4235
  if ( elem.sizcache === doneName ) {
@@ -4033,6 +4242,7 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
4033
4242
  elem.sizcache = doneName;
4034
4243
  elem.sizset = i;
4035
4244
  }
4245
+
4036
4246
  if ( typeof cur !== "string" ) {
4037
4247
  if ( elem === cur ) {
4038
4248
  match = true;
@@ -4053,21 +4263,34 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
4053
4263
  }
4054
4264
  }
4055
4265
 
4056
- Sizzle.contains = document.documentElement.contains ? function(a, b){
4057
- return a !== b && (a.contains ? a.contains(b) : true);
4058
- } : function(a, b){
4059
- return !!(a.compareDocumentPosition(b) & 16);
4060
- };
4266
+ if ( document.documentElement.contains ) {
4267
+ Sizzle.contains = function( a, b ) {
4268
+ return a !== b && (a.contains ? a.contains(b) : true);
4269
+ };
4061
4270
 
4062
- Sizzle.isXML = function(elem){
4271
+ } else if ( document.documentElement.compareDocumentPosition ) {
4272
+ Sizzle.contains = function( a, b ) {
4273
+ return !!(a.compareDocumentPosition(b) & 16);
4274
+ };
4275
+
4276
+ } else {
4277
+ Sizzle.contains = function() {
4278
+ return false;
4279
+ };
4280
+ }
4281
+
4282
+ Sizzle.isXML = function( elem ) {
4063
4283
  // documentElement is verified for cases where it doesn't yet exist
4064
4284
  // (such as loading iframes in IE - #4833)
4065
4285
  var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
4286
+
4066
4287
  return documentElement ? documentElement.nodeName !== "HTML" : false;
4067
4288
  };
4068
4289
 
4069
- var posProcess = function(selector, context){
4070
- var tmpSet = [], later = "", match,
4290
+ var posProcess = function( selector, context ) {
4291
+ var match,
4292
+ tmpSet = [],
4293
+ later = "",
4071
4294
  root = context.nodeType ? [context] : context;
4072
4295
 
4073
4296
  // Position selectors must be done after the filter
@@ -4109,7 +4332,8 @@ var runtil = /Until$/,
4109
4332
 
4110
4333
  jQuery.fn.extend({
4111
4334
  find: function( selector ) {
4112
- var ret = this.pushStack( "", "find", selector ), length = 0;
4335
+ var ret = this.pushStack( "", "find", selector ),
4336
+ length = 0;
4113
4337
 
4114
4338
  for ( var i = 0, l = this.length; i < l; i++ ) {
4115
4339
  length = ret.length;
@@ -4158,7 +4382,9 @@ jQuery.fn.extend({
4158
4382
  var ret = [], i, l, cur = this[0];
4159
4383
 
4160
4384
  if ( jQuery.isArray( selectors ) ) {
4161
- var match, matches = {}, selector, level = 1;
4385
+ var match, selector,
4386
+ matches = {},
4387
+ level = 1;
4162
4388
 
4163
4389
  if ( cur && selectors.length ) {
4164
4390
  for ( i = 0, l = selectors.length; i < l; i++ ) {
@@ -4324,7 +4550,9 @@ jQuery.extend({
4324
4550
  },
4325
4551
 
4326
4552
  dir: function( elem, dir, until ) {
4327
- var matched = [], cur = elem[dir];
4553
+ var matched = [],
4554
+ cur = elem[ dir ];
4555
+
4328
4556
  while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
4329
4557
  if ( cur.nodeType === 1 ) {
4330
4558
  matched.push( cur );
@@ -4400,7 +4628,8 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
4400
4628
  rtbody = /<tbody/i,
4401
4629
  rhtml = /<|&#?\w+;/,
4402
4630
  rnocache = /<(?:script|object|embed|option|style)/i,
4403
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, // checked="checked" or checked (html5)
4631
+ // checked="checked" or checked (html5)
4632
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
4404
4633
  raction = /\=([^="'>\s]+\/)>/g,
4405
4634
  wrapMap = {
4406
4635
  option: [ 1, "<select multiple='multiple'>", "</select>" ],
@@ -4426,7 +4655,8 @@ jQuery.fn.extend({
4426
4655
  text: function( text ) {
4427
4656
  if ( jQuery.isFunction(text) ) {
4428
4657
  return this.each(function(i) {
4429
- var self = jQuery(this);
4658
+ var self = jQuery( this );
4659
+
4430
4660
  self.text( text.call(this, i, self.text()) );
4431
4661
  });
4432
4662
  }
@@ -4475,7 +4705,8 @@ jQuery.fn.extend({
4475
4705
  }
4476
4706
 
4477
4707
  return this.each(function() {
4478
- var self = jQuery( this ), contents = self.contents();
4708
+ var self = jQuery( this ),
4709
+ contents = self.contents();
4479
4710
 
4480
4711
  if ( contents.length ) {
4481
4712
  contents.wrapAll( html );
@@ -4586,7 +4817,9 @@ jQuery.fn.extend({
4586
4817
  // attributes in IE that are actually only stored
4587
4818
  // as properties will not be copied (such as the
4588
4819
  // the name attribute on an input).
4589
- var html = this.outerHTML, ownerDocument = this.ownerDocument;
4820
+ var html = this.outerHTML,
4821
+ ownerDocument = this.ownerDocument;
4822
+
4590
4823
  if ( !html ) {
4591
4824
  var div = ownerDocument.createElement("div");
4592
4825
  div.appendChild( this.cloneNode(true) );
@@ -4641,7 +4874,8 @@ jQuery.fn.extend({
4641
4874
 
4642
4875
  } else if ( jQuery.isFunction( value ) ) {
4643
4876
  this.each(function(i){
4644
- var self = jQuery(this);
4877
+ var self = jQuery( this );
4878
+
4645
4879
  self.html( value.call(this, i, self.html()) );
4646
4880
  });
4647
4881
 
@@ -4664,13 +4898,14 @@ jQuery.fn.extend({
4664
4898
  }
4665
4899
 
4666
4900
  if ( typeof value !== "string" ) {
4667
- value = jQuery(value).detach();
4901
+ value = jQuery( value ).detach();
4668
4902
  }
4669
4903
 
4670
4904
  return this.each(function() {
4671
- var next = this.nextSibling, parent = this.parentNode;
4905
+ var next = this.nextSibling,
4906
+ parent = this.parentNode;
4672
4907
 
4673
- jQuery(this).remove();
4908
+ jQuery( this ).remove();
4674
4909
 
4675
4910
  if ( next ) {
4676
4911
  jQuery(next).before( value );
@@ -4688,7 +4923,9 @@ jQuery.fn.extend({
4688
4923
  },
4689
4924
 
4690
4925
  domManip: function( args, table, callback ) {
4691
- var results, first, value = args[0], scripts = [], fragment, parent;
4926
+ var results, first, fragment, parent,
4927
+ value = args[0],
4928
+ scripts = [];
4692
4929
 
4693
4930
  // We can't cloneNode fragments that contain checked, in WebKit
4694
4931
  if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
@@ -4763,7 +5000,9 @@ function cloneCopyEvent(orig, ret) {
4763
5000
  return;
4764
5001
  }
4765
5002
 
4766
- var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
5003
+ var oldData = jQuery.data( orig[i++] ),
5004
+ curData = jQuery.data( this, oldData ),
5005
+ events = oldData && oldData.events;
4767
5006
 
4768
5007
  if ( events ) {
4769
5008
  delete curData.handle;
@@ -4820,7 +5059,8 @@ jQuery.each({
4820
5059
  replaceAll: "replaceWith"
4821
5060
  }, function( name, original ) {
4822
5061
  jQuery.fn[ name ] = function( selector ) {
4823
- var ret = [], insert = jQuery( selector ),
5062
+ var ret = [],
5063
+ insert = jQuery( selector ),
4824
5064
  parent = this.length === 1 && this[0].parentNode;
4825
5065
 
4826
5066
  if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
@@ -5004,8 +5244,8 @@ var ralpha = /alpha\([^)]*\)/i,
5004
5244
  cssHeight = [ "Top", "Bottom" ],
5005
5245
  curCSS,
5006
5246
 
5007
- // cache check for defaultView.getComputedStyle
5008
- getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
5247
+ getComputedStyle,
5248
+ currentStyle,
5009
5249
 
5010
5250
  fcamelCase = function( all, letter ) {
5011
5251
  return letter.toUpperCase();
@@ -5161,7 +5401,29 @@ jQuery.each(["height", "width"], function( i, name ) {
5161
5401
  });
5162
5402
  }
5163
5403
 
5164
- return val + "px";
5404
+ if ( val <= 0 ) {
5405
+ val = curCSS( elem, name, name );
5406
+
5407
+ if ( val === "0px" && currentStyle ) {
5408
+ val = currentStyle( elem, name, name );
5409
+ }
5410
+
5411
+ if ( val != null ) {
5412
+ // Should return "auto" instead of 0, use 0 for
5413
+ // temporary backwards-compat
5414
+ return val === "" || val === "auto" ? "0px" : val;
5415
+ }
5416
+ }
5417
+
5418
+ if ( val < 0 || val == null ) {
5419
+ val = elem.style[ name ];
5420
+
5421
+ // Should return "auto" instead of 0, use 0 for
5422
+ // temporary backwards-compat
5423
+ return val === "" || val === "auto" ? "0px" : val;
5424
+ }
5425
+
5426
+ return typeof val === "string" ? val : val + "px";
5165
5427
  }
5166
5428
  },
5167
5429
 
@@ -5210,8 +5472,8 @@ if ( !jQuery.support.opacity ) {
5210
5472
  };
5211
5473
  }
5212
5474
 
5213
- if ( getComputedStyle ) {
5214
- curCSS = function( elem, newName, name ) {
5475
+ if ( document.defaultView && document.defaultView.getComputedStyle ) {
5476
+ getComputedStyle = function( elem, newName, name ) {
5215
5477
  var ret, defaultView, computedStyle;
5216
5478
 
5217
5479
  name = name.replace( rupper, "-$1" ).toLowerCase();
@@ -5229,10 +5491,13 @@ if ( getComputedStyle ) {
5229
5491
 
5230
5492
  return ret;
5231
5493
  };
5494
+ }
5232
5495
 
5233
- } else if ( document.documentElement.currentStyle ) {
5234
- curCSS = function( elem, name ) {
5235
- var left, rsLeft, ret = elem.currentStyle && elem.currentStyle[ name ], style = elem.style;
5496
+ if ( document.documentElement.currentStyle ) {
5497
+ currentStyle = function( elem, name ) {
5498
+ var left, rsLeft,
5499
+ ret = elem.currentStyle && elem.currentStyle[ name ],
5500
+ style = elem.style;
5236
5501
 
5237
5502
  // From the awesome hack by Dean Edwards
5238
5503
  // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
@@ -5254,10 +5519,12 @@ if ( getComputedStyle ) {
5254
5519
  elem.runtimeStyle.left = rsLeft;
5255
5520
  }
5256
5521
 
5257
- return ret;
5522
+ return ret === "" ? "auto" : ret;
5258
5523
  };
5259
5524
  }
5260
5525
 
5526
+ curCSS = getComputedStyle || currentStyle;
5527
+
5261
5528
  function getWH( elem, name, extra ) {
5262
5529
  var which = name === "width" ? cssWidth : cssHeight,
5263
5530
  val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
@@ -5284,7 +5551,8 @@ function getWH( elem, name, extra ) {
5284
5551
 
5285
5552
  if ( jQuery.expr && jQuery.expr.filters ) {
5286
5553
  jQuery.expr.filters.hidden = function( elem ) {
5287
- var width = elem.offsetWidth, height = elem.offsetHeight;
5554
+ var width = elem.offsetWidth,
5555
+ height = elem.offsetHeight;
5288
5556
 
5289
5557
  return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
5290
5558
  };
@@ -5301,7 +5569,7 @@ var jsc = jQuery.now(),
5301
5569
  rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
5302
5570
  rselectTextarea = /^(?:select|textarea)/i,
5303
5571
  rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
5304
- rnoContent = /^(?:GET|HEAD|DELETE)$/,
5572
+ rnoContent = /^(?:GET|HEAD)$/,
5305
5573
  rbracket = /\[\]$/,
5306
5574
  jsre = /\=\?(&|$)/,
5307
5575
  rquery = /\?/,
@@ -5536,10 +5804,6 @@ jQuery.extend({
5536
5804
  var customJsonp = window[ jsonp ];
5537
5805
 
5538
5806
  window[ jsonp ] = function( tmp ) {
5539
- data = tmp;
5540
- jQuery.handleSuccess( s, xhr, status, data );
5541
- jQuery.handleComplete( s, xhr, status, data );
5542
-
5543
5807
  if ( jQuery.isFunction( customJsonp ) ) {
5544
5808
  customJsonp( tmp );
5545
5809
 
@@ -5551,6 +5815,10 @@ jQuery.extend({
5551
5815
  delete window[ jsonp ];
5552
5816
  } catch( jsonpError ) {}
5553
5817
  }
5818
+
5819
+ data = tmp;
5820
+ jQuery.handleSuccess( s, xhr, status, data );
5821
+ jQuery.handleComplete( s, xhr, status, data );
5554
5822
 
5555
5823
  if ( head ) {
5556
5824
  head.removeChild( script );
@@ -5562,7 +5830,7 @@ jQuery.extend({
5562
5830
  s.cache = false;
5563
5831
  }
5564
5832
 
5565
- if ( s.cache === false && type === "GET" ) {
5833
+ if ( s.cache === false && noContent ) {
5566
5834
  var ts = jQuery.now();
5567
5835
 
5568
5836
  // try replacing _= if it is there
@@ -5572,8 +5840,8 @@ jQuery.extend({
5572
5840
  s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
5573
5841
  }
5574
5842
 
5575
- // If data is available, append data to url for get requests
5576
- if ( s.data && type === "GET" ) {
5843
+ // If data is available, append data to url for GET/HEAD requests
5844
+ if ( s.data && noContent ) {
5577
5845
  s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
5578
5846
  }
5579
5847
 
@@ -5584,7 +5852,7 @@ jQuery.extend({
5584
5852
 
5585
5853
  // Matches an absolute URL, and saves the domain
5586
5854
  var parts = rurl.exec( s.url ),
5587
- remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
5855
+ remote = parts && (parts[1] && parts[1].toLowerCase() !== location.protocol || parts[2].toLowerCase() !== location.host);
5588
5856
 
5589
5857
  // If we're requesting a remote document
5590
5858
  // and trying to load JSON or Script with a GET
@@ -5760,10 +6028,11 @@ jQuery.extend({
5760
6028
  try {
5761
6029
  var oldAbort = xhr.abort;
5762
6030
  xhr.abort = function() {
5763
- // xhr.abort in IE7 is not a native JS function
5764
- // and does not have a call property
5765
- if ( xhr && oldAbort.call ) {
5766
- oldAbort.call( xhr );
6031
+ if ( xhr ) {
6032
+ // oldAbort has no call property in IE7 so
6033
+ // just do it this way, which works in all
6034
+ // browsers
6035
+ Function.prototype.call.call( oldAbort, xhr );
5767
6036
  }
5768
6037
 
5769
6038
  onreadystatechange( "abort" );
@@ -5803,11 +6072,12 @@ jQuery.extend({
5803
6072
  // Serialize an array of form elements or a set of
5804
6073
  // key/values into a query string
5805
6074
  param: function( a, traditional ) {
5806
- var s = [], add = function( key, value ) {
5807
- // If value is a function, invoke it and return its value
5808
- value = jQuery.isFunction(value) ? value() : value;
5809
- s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
5810
- };
6075
+ var s = [],
6076
+ add = function( key, value ) {
6077
+ // If value is a function, invoke it and return its value
6078
+ value = jQuery.isFunction(value) ? value() : value;
6079
+ s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
6080
+ };
5811
6081
 
5812
6082
  // Set traditional to true for jQuery <= 1.3.2 behavior.
5813
6083
  if ( traditional === undefined ) {
@@ -6029,28 +6299,39 @@ var elemdisplay = {},
6029
6299
 
6030
6300
  jQuery.fn.extend({
6031
6301
  show: function( speed, easing, callback ) {
6302
+ var elem, display;
6303
+
6032
6304
  if ( speed || speed === 0 ) {
6033
6305
  return this.animate( genFx("show", 3), speed, easing, callback);
6306
+
6034
6307
  } else {
6035
6308
  for ( var i = 0, j = this.length; i < j; i++ ) {
6309
+ elem = this[i];
6310
+ display = elem.style.display;
6311
+
6036
6312
  // Reset the inline display of this element to learn if it is
6037
6313
  // being hidden by cascaded rules or not
6038
- if ( !jQuery.data(this[i], "olddisplay") && this[i].style.display === "none" ) {
6039
- this[i].style.display = "";
6314
+ if ( !jQuery.data(elem, "olddisplay") && display === "none" ) {
6315
+ display = elem.style.display = "";
6040
6316
  }
6041
6317
 
6042
6318
  // Set elements which have been overridden with display: none
6043
6319
  // in a stylesheet to whatever the default browser style is
6044
6320
  // for such an element
6045
- if ( this[i].style.display === "" && jQuery.css( this[i], "display" ) === "none" ) {
6046
- jQuery.data(this[i], "olddisplay", defaultDisplay(this[i].nodeName));
6321
+ if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
6322
+ jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));
6047
6323
  }
6048
6324
  }
6049
6325
 
6050
6326
  // Set the display of most of the elements in a second loop
6051
6327
  // to avoid the constant reflow
6052
6328
  for ( i = 0; i < j; i++ ) {
6053
- this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
6329
+ elem = this[i];
6330
+ display = elem.style.display;
6331
+
6332
+ if ( display === "" || display === "none" ) {
6333
+ elem.style.display = jQuery.data(elem, "olddisplay") || "";
6334
+ }
6054
6335
  }
6055
6336
 
6056
6337
  return this;
@@ -6115,7 +6396,7 @@ jQuery.fn.extend({
6115
6396
  }
6116
6397
 
6117
6398
  return this[ optall.queue === false ? "each" : "queue" ](function() {
6118
- // XXX this does not always have a nodeName when running the
6399
+ // XXX 'this' does not always have a nodeName when running the
6119
6400
  // test suite
6120
6401
 
6121
6402
  var opt = jQuery.extend({}, optall), p,
@@ -6188,7 +6469,7 @@ jQuery.fn.extend({
6188
6469
 
6189
6470
  } else {
6190
6471
  var parts = rfxnum.exec(val),
6191
- start = e.cur(true) || 0;
6472
+ start = e.cur() || 0;
6192
6473
 
6193
6474
  if ( parts ) {
6194
6475
  var end = parseFloat( parts[2] ),
@@ -6197,7 +6478,7 @@ jQuery.fn.extend({
6197
6478
  // We need to compute starting value
6198
6479
  if ( unit !== "px" ) {
6199
6480
  jQuery.style( self, name, (end || 1) + unit);
6200
- start = ((end || 1) / e.cur(true)) * start;
6481
+ start = ((end || 1) / e.cur()) * start;
6201
6482
  jQuery.style( self, name, start + unit);
6202
6483
  }
6203
6484
 
@@ -6266,7 +6547,8 @@ jQuery.each({
6266
6547
  slideUp: genFx("hide", 1),
6267
6548
  slideToggle: genFx("toggle", 1),
6268
6549
  fadeIn: { opacity: "show" },
6269
- fadeOut: { opacity: "hide" }
6550
+ fadeOut: { opacity: "hide" },
6551
+ fadeToggle: { opacity: "toggle" }
6270
6552
  }, function( name, props ) {
6271
6553
  jQuery.fn[ name ] = function( speed, easing, callback ) {
6272
6554
  return this.animate( props, speed, easing, callback );
@@ -6344,6 +6626,9 @@ jQuery.fx.prototype = {
6344
6626
 
6345
6627
  // Start an animation from one number to another
6346
6628
  custom: function( from, to, unit ) {
6629
+ var self = this,
6630
+ fx = jQuery.fx;
6631
+
6347
6632
  this.startTime = jQuery.now();
6348
6633
  this.start = from;
6349
6634
  this.end = to;
@@ -6351,7 +6636,6 @@ jQuery.fx.prototype = {
6351
6636
  this.now = this.start;
6352
6637
  this.pos = this.state = 0;
6353
6638
 
6354
- var self = this, fx = jQuery.fx;
6355
6639
  function t( gotoEnd ) {
6356
6640
  return self.step(gotoEnd);
6357
6641
  }
@@ -6408,7 +6692,9 @@ jQuery.fx.prototype = {
6408
6692
  if ( done ) {
6409
6693
  // Reset the overflow
6410
6694
  if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
6411
- var elem = this.elem, options = this.options;
6695
+ var elem = this.elem,
6696
+ options = this.options;
6697
+
6412
6698
  jQuery.each( [ "", "X", "Y" ], function (index, value) {
6413
6699
  elem.style[ "overflow" + value ] = options.overflow[index];
6414
6700
  } );
@@ -6587,11 +6873,16 @@ if ( "getBoundingClientRect" in document.documentElement ) {
6587
6873
 
6588
6874
  jQuery.offset.initialize();
6589
6875
 
6590
- var offsetParent = elem.offsetParent, prevOffsetParent = elem,
6591
- doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
6592
- body = doc.body, defaultView = doc.defaultView,
6876
+ var computedStyle,
6877
+ offsetParent = elem.offsetParent,
6878
+ prevOffsetParent = elem,
6879
+ doc = elem.ownerDocument,
6880
+ docElem = doc.documentElement,
6881
+ body = doc.body,
6882
+ defaultView = doc.defaultView,
6593
6883
  prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
6594
- top = elem.offsetTop, left = elem.offsetLeft;
6884
+ top = elem.offsetTop,
6885
+ left = elem.offsetLeft;
6595
6886
 
6596
6887
  while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
6597
6888
  if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
@@ -6673,7 +6964,8 @@ jQuery.offset = {
6673
6964
  },
6674
6965
 
6675
6966
  bodyOffset: function( body ) {
6676
- var top = body.offsetTop, left = body.offsetLeft;
6967
+ var top = body.offsetTop,
6968
+ left = body.offsetLeft;
6677
6969
 
6678
6970
  jQuery.offset.initialize();
6679
6971
 
@@ -6854,27 +7146,31 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
6854
7146
  });
6855
7147
  }
6856
7148
 
6857
- return jQuery.isWindow( elem ) ?
7149
+ if ( jQuery.isWindow( elem ) ) {
6858
7150
  // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
6859
- elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
6860
- elem.document.body[ "client" + name ] :
6861
-
6862
- // Get document width or height
6863
- (elem.nodeType === 9) ? // is it a document
6864
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
6865
- Math.max(
6866
- elem.documentElement["client" + name],
6867
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
6868
- elem.body["offset" + name], elem.documentElement["offset" + name]
6869
- ) :
6870
-
6871
- // Get or set width or height on the element
6872
- size === undefined ?
6873
- // Get width or height on the element
6874
- parseFloat( jQuery.css( elem, type ) ) :
6875
-
6876
- // Set the width or height on the element (default to pixels if value is unitless)
6877
- this.css( type, typeof size === "string" ? size : size + "px" );
7151
+ return elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
7152
+ elem.document.body[ "client" + name ];
7153
+
7154
+ // Get document width or height
7155
+ } else if ( elem.nodeType === 9 ) {
7156
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
7157
+ return Math.max(
7158
+ elem.documentElement["client" + name],
7159
+ elem.body["scroll" + name], elem.documentElement["scroll" + name],
7160
+ elem.body["offset" + name], elem.documentElement["offset" + name]
7161
+ );
7162
+
7163
+ // Get or set width or height on the element
7164
+ } else if ( size === undefined ) {
7165
+ var orig = jQuery.css( elem, type ),
7166
+ ret = parseFloat( orig );
7167
+
7168
+ return jQuery.isNaN( ret ) ? orig : ret;
7169
+
7170
+ // Set the width or height on the element (default to pixels if value is unitless)
7171
+ } else {
7172
+ return this.css( type, typeof size === "string" ? size : size + "px" );
7173
+ }
6878
7174
  };
6879
7175
 
6880
7176
  });