fixed layout of list item for the faq
[psensor.git] / www / jquery.js
index f3201aa..11e6d06 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * jQuery JavaScript Library v1.6.2
+ * jQuery JavaScript Library v1.6.4
  * http://jquery.com/
  *
  * Copyright 2011, John Resig
@@ -11,7 +11,7 @@
  * Copyright 2011, The Dojo Foundation
  * Released under the MIT, BSD, and GPL Licenses.
  *
- * Date: Thu Jun 30 14:16:56 2011 -0400
+ * Date: Mon Sep 12 18:54:48 2011 -0400
  */
 (function( window, undefined ) {
 
@@ -37,8 +37,8 @@ var jQuery = function( selector, context ) {
        rootjQuery,
 
        // A simple way to check for HTML strings or ID strings
-       // (both of which we optimize for)
-       quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
 
        // Check if a string has a non-whitespace character in it
        rnotwhite = /\S/,
@@ -66,11 +66,12 @@ var jQuery = function( selector, context ) {
        rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
 
        // Matches dashed string for camelizing
-       rdashAlpha = /-([a-z])/ig,
+       rdashAlpha = /-([a-z]|[0-9])/ig,
+       rmsPrefix = /^-ms-/,
 
        // Used by jQuery.camelCase as callback to replace()
        fcamelCase = function( all, letter ) {
-               return letter.toUpperCase();
+               return ( letter + "" ).toUpperCase();
        },
 
        // Keep a UserAgent string for use with jQuery.browser
@@ -212,7 +213,7 @@ jQuery.fn = jQuery.prototype = {
        selector: "",
 
        // The current version of jQuery being used
-       jquery: "1.6.2",
+       jquery: "1.6.4",
 
        // The default length of a jQuery object is 0
        length: 0,
@@ -521,10 +522,15 @@ jQuery.extend({
                        return false;
                }
 
-               // Not own constructor property must be Object
-               if ( obj.constructor &&
-                       !hasOwn.call(obj, "constructor") &&
-                       !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+               try {
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !hasOwn.call(obj, "constructor") &&
+                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               return false;
+                       }
+               } catch ( e ) {
+                       // IE8,9 Will throw exceptions on certain host objects #9897
                        return false;
                }
 
@@ -574,24 +580,23 @@ jQuery.extend({
        },
 
        // Cross-browser xml parsing
-       // (xml & tmp used internally)
-       parseXML: function( data , xml , tmp ) {
-
-               if ( window.DOMParser ) { // Standard
-                       tmp = new DOMParser();
-                       xml = tmp.parseFromString( data , "text/xml" );
-               } else { // IE
-                       xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                       xml.async = "false";
-                       xml.loadXML( data );
-               }
-
-               tmp = xml.documentElement;
-
-               if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
+       parseXML: function( data ) {
+               var xml, tmp;
+               try {
+                       if ( window.DOMParser ) { // Standard
+                               tmp = new DOMParser();
+                               xml = tmp.parseFromString( data , "text/xml" );
+                       } else { // IE
+                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                               xml.async = "false";
+                               xml.loadXML( data );
+                       }
+               } catch( e ) {
+                       xml = undefined;
+               }
+               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
                        jQuery.error( "Invalid XML: " + data );
                }
-
                return xml;
        },
 
@@ -611,10 +616,10 @@ jQuery.extend({
                }
        },
 
-       // Converts a dashed string to camelCased string;
-       // Used by both the css and data modules
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
        camelCase: function( string ) {
-               return string.replace( rdashAlpha, fcamelCase );
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
        },
 
        nodeName: function( elem, name ) {
@@ -699,6 +704,9 @@ jQuery.extend({
        },
 
        inArray: function( elem, array ) {
+               if ( !array ) {
+                       return -1;
+               }
 
                if ( indexOf ) {
                        return indexOf.call( array, elem );
@@ -1071,7 +1079,7 @@ jQuery.extend({
                                                                if ( returned && jQuery.isFunction( returned.promise ) ) {
                                                                        returned.promise().then( newDefer.resolve, newDefer.reject );
                                                                } else {
-                                                                       newDefer[ action ]( returned );
+                                                                       newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
                                                                }
                                                        });
                                                } else {
@@ -1173,6 +1181,7 @@ jQuery.support = (function() {
        div.setAttribute("className", "t");
        div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
 
+
        all = div.getElementsByTagName( "*" );
        a = div.getElementsByTagName( "a" )[ 0 ];
 
@@ -1293,13 +1302,14 @@ jQuery.support = (function() {
                width: 0,
                height: 0,
                border: 0,
-               margin: 0
+               margin: 0,
+               background: "none"
        };
        if ( body ) {
                jQuery.extend( testElementStyle, {
                        position: "absolute",
-                       left: -1000,
-                       top: -1000
+                       left: "-1000px",
+                       top: "-1000px"
                });
        }
        for ( i in testElementStyle ) {
@@ -1404,7 +1414,7 @@ jQuery.boxModel = jQuery.support.boxModel;
 
 
 var rbrace = /^(?:\{.*\}|\[.*\])$/,
-       rmultiDash = /([a-z])([A-Z])/g;
+       rmultiDash = /([A-Z])/g;
 
 jQuery.extend({
        cache: {},
@@ -1436,7 +1446,9 @@ jQuery.extend({
                        return;
                }
 
-               var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
+               var thisCache, ret,
+                       internalKey = jQuery.expando,
+                       getByName = typeof name === "string",
 
                        // We have to handle DOM nodes and JS objects differently because IE6-7
                        // can't GC object references properly across the DOM-JS boundary
@@ -1452,7 +1464,7 @@ jQuery.extend({
 
                // Avoid doing any more work than we need to when trying to get data on an
                // object that has no data at all
-               if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
+               if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {
                        return;
                }
 
@@ -1511,10 +1523,24 @@ jQuery.extend({
                        return thisCache[ internalKey ] && thisCache[ internalKey ].events;
                }
 
-               return getByName ? 
-                       // Check for both converted-to-camel and non-converted data property names
-                       thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
-                       thisCache;
+               // Check for both converted-to-camel and non-converted data property names
+               // If a data property was specified
+               if ( getByName ) {
+
+                       // First Try to find as-is property data
+                       ret = thisCache[ name ];
+
+                       // Test for null|undefined property data
+                       if ( ret == null ) {
+
+                               // Try to find the camelCased property
+                               ret = thisCache[ jQuery.camelCase( name ) ];
+                       }
+               } else {
+                       ret = thisCache;
+               }
+
+               return ret;
        },
 
        removeData: function( elem, name, pvt /* Internal Use Only */ ) {
@@ -1522,7 +1548,12 @@ jQuery.extend({
                        return;
                }
 
-               var internalKey = jQuery.expando, isNode = elem.nodeType,
+               var thisCache,
+
+                       // Reference to internal data cache key
+                       internalKey = jQuery.expando,
+
+                       isNode = elem.nodeType,
 
                        // See jQuery.data for more information
                        cache = isNode ? jQuery.cache : elem,
@@ -1537,9 +1568,16 @@ jQuery.extend({
                }
 
                if ( name ) {
-                       var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
+
+                       thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
 
                        if ( thisCache ) {
+
+                               // Support interoperable removal of hyphenated or camelcased keys
+                               if ( !thisCache[ name ] ) {
+                                       name = jQuery.camelCase( name );
+                               }
+
                                delete thisCache[ name ];
 
                                // If there is no data left in the cache, we want to continue
@@ -1566,7 +1604,8 @@ jQuery.extend({
                // Browsers that fail expando deletion also refuse to delete expandos on
                // the window, but it will allow it on all other JS objects; other browsers
                // don't care
-               if ( jQuery.support.deleteExpando || cache != window ) {
+               // Ensure that `cache` is not a window object #10080
+               if ( jQuery.support.deleteExpando || !cache.setInterval ) {
                        delete cache[ id ];
                } else {
                        cache[ id ] = null;
@@ -1690,7 +1729,8 @@ function dataAttr( elem, key, data ) {
        // If nothing was found internally, try to fetch any
        // data from the HTML5 data-* attribute
        if ( data === undefined && elem.nodeType === 1 ) {
-               var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
+
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
 
                data = elem.getAttribute( name );
 
@@ -1910,8 +1950,7 @@ var rclass = /[\n\t\r]/g,
        rfocusable = /^(?:button|input|object|select|textarea)$/i,
        rclickable = /^a(?:rea)?$/i,
        rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-       rinvalidChar = /\:|^on/,
-       formHook, boolHook;
+       nodeHook, boolHook;
 
 jQuery.fn.extend({
        attr: function( name, value ) {
@@ -2049,7 +2088,7 @@ jQuery.fn.extend({
        hasClass: function( selector ) {
                var className = " " + selector + " ";
                for ( var i = 0, l = this.length; i < l; i++ ) {
-                       if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
                                return true;
                        }
                }
@@ -2229,14 +2268,11 @@ jQuery.extend({
                        if ( !hooks ) {
                                // Use boolHook for boolean attributes
                                if ( rboolean.test( name ) ) {
-
                                        hooks = boolHook;
 
-                               // Use formHook for forms and if the name contains certain characters
-                               } else if ( formHook && name !== "className" &&
-                                       (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
-
-                                       hooks = formHook;
+                               // Use nodeHook if available( IE6/7 )
+                               } else if ( nodeHook ) {
+                                       hooks = nodeHook;
                                }
                        }
                }
@@ -2273,14 +2309,9 @@ jQuery.extend({
                var propName;
                if ( elem.nodeType === 1 ) {
                        name = jQuery.attrFix[ name ] || name;
-               
-                       if ( jQuery.support.getSetAttribute ) {
-                               // Use removeAttribute in browsers that support it
-                               elem.removeAttribute( name );
-                       } else {
-                               jQuery.attr( elem, name, "" );
-                               elem.removeAttributeNode( elem.getAttributeNode( name ) );
-                       }
+
+                       jQuery.attr( elem, name, "" );
+                       elem.removeAttribute( name );
 
                        // Set corresponding property to false for boolean attributes
                        if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
@@ -2308,33 +2339,20 @@ jQuery.extend({
                                }
                        }
                },
-               tabIndex: {
-                       get: function( elem ) {
-                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                               var attributeNode = elem.getAttributeNode("tabIndex");
-
-                               return attributeNode && attributeNode.specified ?
-                                       parseInt( attributeNode.value, 10 ) :
-                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                               0 :
-                                               undefined;
-                       }
-               },
                // Use the value property for back compat
-               // Use the formHook for button elements in IE6/7 (#1954)
+               // Use the nodeHook for button elements in IE6/7 (#1954)
                value: {
                        get: function( elem, name ) {
-                               if ( formHook && jQuery.nodeName( elem, "button" ) ) {
-                                       return formHook.get( elem, name );
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.get( elem, name );
                                }
                                return name in elem ?
                                        elem.value :
                                        null;
                        },
                        set: function( elem, value, name ) {
-                               if ( formHook && jQuery.nodeName( elem, "button" ) ) {
-                                       return formHook.set( elem, value, name );
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.set( elem, value, name );
                                }
                                // Does not return so that setAttribute is also used
                                elem.value = value;
@@ -2383,7 +2401,7 @@ jQuery.extend({
                        }
 
                } else {
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
                                return ret;
 
                        } else {
@@ -2392,14 +2410,33 @@ jQuery.extend({
                }
        },
        
-       propHooks: {}
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               var attributeNode = elem.getAttributeNode("tabindex");
+
+                               return attributeNode && attributeNode.specified ?
+                                       parseInt( attributeNode.value, 10 ) :
+                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                               0 :
+                                               undefined;
+                       }
+               }
+       }
 });
 
+// Add the tabindex propHook to attrHooks for back-compat
+jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;
+
 // Hook for boolean attributes
 boolHook = {
        get: function( elem, name ) {
                // Align boolean attributes with corresponding properties
-               return jQuery.prop( elem, name ) ?
+               // Fall back to attribute presence where some booleans are not supported
+               var attrNode;
+               return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
                        name.toLowerCase() :
                        undefined;
        },
@@ -2425,12 +2462,10 @@ boolHook = {
 
 // IE6/7 do not support getting/setting some attributes with get/setAttribute
 if ( !jQuery.support.getSetAttribute ) {
-
-       // propFix is more comprehensive and contains all fixes
-       jQuery.attrFix = jQuery.propFix;
        
-       // Use this for any attribute on a form in IE6/7
-       formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = jQuery.valHooks.button = {
                get: function( elem, name ) {
                        var ret;
                        ret = elem.getAttributeNode( name );
@@ -2440,13 +2475,13 @@ if ( !jQuery.support.getSetAttribute ) {
                                undefined;
                },
                set: function( elem, value, name ) {
-                       // Check form objects in IE (multiple bugs related)
-                       // Only use nodeValue if the attribute node exists on the form
+                       // Set the existing or create a new attribute node
                        var ret = elem.getAttributeNode( name );
-                       if ( ret ) {
-                               ret.nodeValue = value;
-                               return value;
+                       if ( !ret ) {
+                               ret = document.createAttribute( name );
+                               elem.setAttributeNode( ret );
                        }
+                       return (ret.nodeValue = value + "");
                }
        };
 
@@ -2505,6 +2540,7 @@ if ( !jQuery.support.optSelected ) {
                                        parent.parentNode.selectedIndex;
                                }
                        }
+                       return null;
                }
        });
 }
@@ -3235,8 +3271,9 @@ if ( !jQuery.support.submitBubbles ) {
                setup: function( data, namespaces ) {
                        if ( !jQuery.nodeName( this, "form" ) ) {
                                jQuery.event.add(this, "click.specialSubmit", function( e ) {
+                                       // Avoid triggering error on non-existent type attribute in IE VML (#7071)
                                        var elem = e.target,
-                                               type = elem.type;
+                                               type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
 
                                        if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
                                                trigger( "submit", this, arguments );
@@ -3245,7 +3282,7 @@ if ( !jQuery.support.submitBubbles ) {
 
                                jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
                                        var elem = e.target,
-                                               type = elem.type;
+                                               type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
 
                                        if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
                                                trigger( "submit", this, arguments );
@@ -3270,7 +3307,8 @@ if ( !jQuery.support.changeBubbles ) {
        var changeFilters,
 
        getVal = function( elem ) {
-               var type = elem.type, val = elem.value;
+               var type = jQuery.nodeName( elem, "input" ) ? elem.type : "",
+                       val = elem.value;
 
                if ( type === "radio" || type === "checkbox" ) {
                        val = elem.checked;
@@ -5295,12 +5333,17 @@ jQuery.fn.extend({
        // Determine the position of an element within
        // the matched set of elements
        index: function( elem ) {
-               if ( !elem || typeof elem === "string" ) {
-                       return jQuery.inArray( this[0],
-                               // If it receives a string, the selector is used
-                               // If it receives nothing, the siblings are used
-                               elem ? jQuery( elem ) : this.parent().children() );
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
                }
+
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
+               }
+
                // Locate the position of the desired element
                return jQuery.inArray(
                        // If it receives a jQuery object, the first element is used
@@ -6048,7 +6091,10 @@ jQuery.extend({
                        // with an element if you are cloning the body and one of the
                        // elements on the page has a name or id of "length"
                        for ( i = 0; srcElements[i]; ++i ) {
-                               cloneFixAttributes( srcElements[i], destElements[i] );
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[i] ) {
+                                       cloneFixAttributes( srcElements[i], destElements[i] );
+                               }
                        }
                }
 
@@ -6248,14 +6294,14 @@ function evalScript( i, elem ) {
 
 
 
+
 var ralpha = /alpha\([^)]*\)/i,
        ropacity = /opacity=([^)]*)/,
        // fixed for IE9, see #8346
        rupper = /([A-Z]|^ms)/g,
        rnumpx = /^-?\d+(?:px)?$/i,
        rnum = /^-?\d/,
-       rrelNum = /^[+\-]=/,
-       rrelNumFilter = /[^+\-\.\de]+/g,
+       rrelNum = /^([\-+])=([\-+.\de]+)/,
 
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
        cssWidth = [ "Left", "Right" ],
@@ -6332,18 +6378,18 @@ jQuery.extend({
                if ( value !== undefined ) {
                        type = typeof value;
 
-                       // Make sure that NaN and null values aren't set. See: #7116
-                       if ( type === "number" && isNaN( value ) || value == null ) {
-                               return;
-                       }
-
                        // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && rrelNum.test( value ) ) {
-                               value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
                                // Fixes bug #9237
                                type = "number";
                        }
 
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( value == null || type === "number" && isNaN( value ) ) {
+                               return;
+                       }
+
                        // If a number was passed in, add 'px' to the (except for certain CSS properties)
                        if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
                                value += "px";
@@ -6459,18 +6505,29 @@ if ( !jQuery.support.opacity ) {
 
                set: function( elem, value ) {
                        var style = elem.style,
-                               currentStyle = elem.currentStyle;
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
 
                        // IE has trouble with opacity if it does not have layout
                        // Force it by setting the zoom level
                        style.zoom = 1;
 
-                       // Set the alpha filter to set the opacity
-                       var opacity = jQuery.isNaN( value ) ?
-                               "" :
-                               "alpha(opacity=" + value * 100 + ")",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
 
+                               // if there there is no filter style applied in a css rule, we are done
+                               if ( currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
+
+                       // otherwise, set new filter values
                        style.filter = ralpha.test( filter ) ?
                                filter.replace( ralpha, opacity ) :
                                filter + " " + opacity;
@@ -6625,9 +6682,9 @@ var r20 = /%20/g,
        rCRLF = /\r?\n/g,
        rhash = /#.*$/,
        rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-       rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
        // #7653, #8125, #8152: local protocol detection
-       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
+       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
        rnoContent = /^(?:GET|HEAD)$/,
        rprotocol = /^\/\//,
        rquery = /\?/,
@@ -6662,7 +6719,10 @@ var r20 = /%20/g,
        ajaxLocation,
 
        // Document location segments
-       ajaxLocParts;
+       ajaxLocParts,
+       
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = ["*/"] + ["*"];
 
 // #8138, IE may throw an exception when accessing
 // a field from window.location if document.domain has been set
@@ -6755,6 +6815,22 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
        return selection;
 }
 
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+       for( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+}
+
 jQuery.fn.extend({
        load: function( url, params, callback ) {
                if ( typeof url !== "string" && _load ) {
@@ -6898,23 +6974,16 @@ jQuery.extend({
        // Creates a full fledged settings object into target
        // with both ajaxSettings and settings fields.
        // If target is omitted, writes into ajaxSettings.
-       ajaxSetup: function ( target, settings ) {
-               if ( !settings ) {
-                       // Only one parameter, we extend ajaxSettings
-                       settings = target;
-                       target = jQuery.extend( true, jQuery.ajaxSettings, settings );
+       ajaxSetup: function( target, settings ) {
+               if ( settings ) {
+                       // Building a settings object
+                       ajaxExtend( target, jQuery.ajaxSettings );
                } else {
-                       // target was provided, we extend into it
-                       jQuery.extend( true, target, jQuery.ajaxSettings, settings );
-               }
-               // Flatten fields we don't want deep extended
-               for( var field in { context: 1, url: 1 } ) {
-                       if ( field in settings ) {
-                               target[ field ] = settings[ field ];
-                       } else if( field in jQuery.ajaxSettings ) {
-                               target[ field ] = jQuery.ajaxSettings[ field ];
-                       }
+                       // Extending ajaxSettings
+                       settings = target;
+                       target = jQuery.ajaxSettings;
                }
+               ajaxExtend( target, settings );
                return target;
        },
 
@@ -6942,7 +7011,7 @@ jQuery.extend({
                        html: "text/html",
                        text: "text/plain",
                        json: "application/json, text/javascript",
-                       "*": "*/*"
+                       "*": allTypes
                },
 
                contents: {
@@ -6972,6 +7041,15 @@ jQuery.extend({
 
                        // Parse text as xml
                        "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       context: true,
+                       url: true
                }
        },
 
@@ -7082,7 +7160,7 @@ jQuery.extend({
                // Callback for when everything is done
                // It is defined here because jslint complains if it is declared
                // at the end of the function (which would be more logical and readable)
-               function done( status, statusText, responses, headers ) {
+               function done( status, nativeStatusText, responses, headers ) {
 
                        // Called once
                        if ( state === 2 ) {
@@ -7105,11 +7183,12 @@ jQuery.extend({
                        responseHeadersString = headers || "";
 
                        // Set readyState
-                       jqXHR.readyState = status ? 4 : 0;
+                       jqXHR.readyState = status > 0 ? 4 : 0;
 
                        var isSuccess,
                                success,
                                error,
+                               statusText = nativeStatusText,
                                response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
                                lastModified,
                                etag;
@@ -7161,7 +7240,7 @@ jQuery.extend({
 
                        // Set data for the fake xhr object
                        jqXHR.status = status;
-                       jqXHR.statusText = statusText;
+                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
 
                        // Success/Error
                        if ( isSuccess ) {
@@ -7183,7 +7262,7 @@ jQuery.extend({
                        completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
 
                        if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
                                // Handle the global AJAX counter
                                if ( !( --jQuery.active ) ) {
                                        jQuery.event.trigger( "ajaxStop" );
@@ -7264,6 +7343,8 @@ jQuery.extend({
                        // If data is available, append data to url
                        if ( s.data ) {
                                s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
                        }
 
                        // Get ifModifiedKey before adding the anti-cache parameter
@@ -7301,7 +7382,7 @@ jQuery.extend({
                jqXHR.setRequestHeader(
                        "Accept",
                        s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
+                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
                                s.accepts[ "*" ]
                );
 
@@ -7347,7 +7428,7 @@ jQuery.extend({
                                transport.send( requestHeaders, done );
                        } catch (e) {
                                // Propagate exception as error if not done
-                               if ( status < 2 ) {
+                               if ( state < 2 ) {
                                        done( -1, e );
                                // Simply rethrow otherwise
                                } else {
@@ -7995,10 +8076,7 @@ var elemdisplay = {},
                // opacity animations
                [ "opacity" ]
        ],
-       fxNow,
-       requestAnimationFrame = window.webkitRequestAnimationFrame ||
-               window.mozRequestAnimationFrame ||
-               window.oRequestAnimationFrame;
+       fxNow;
 
 jQuery.fn.extend({
        show: function( speed, easing, callback ) {
@@ -8374,8 +8452,7 @@ jQuery.fx.prototype = {
        // Start an animation from one number to another
        custom: function( from, to, unit ) {
                var self = this,
-                       fx = jQuery.fx,
-                       raf;
+                       fx = jQuery.fx;
 
                this.startTime = fxNow || createFxNow();
                this.start = from;
@@ -8391,20 +8468,7 @@ jQuery.fx.prototype = {
                t.elem = this.elem;
 
                if ( t() && jQuery.timers.push(t) && !timerId ) {
-                       // Use requestAnimationFrame instead of setInterval if available
-                       if ( requestAnimationFrame ) {
-                               timerId = true;
-                               raf = function() {
-                                       // When timerId gets set to null at any point, this stops
-                                       if ( timerId ) {
-                                               requestAnimationFrame( raf );
-                                               fx.tick();
-                                       }
-                               };
-                               requestAnimationFrame( raf );
-                       } else {
-                               timerId = setInterval( fx.tick, fx.interval );
-                       }
+                       timerId = setInterval( fx.tick, fx.interval );
                }
        },
 
@@ -8947,9 +9011,10 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
                if ( jQuery.isWindow( elem ) ) {
                        // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
                        // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-                       var docElemProp = elem.document.documentElement[ "client" + name ];
+                       var docElemProp = elem.document.documentElement[ "client" + name ],
+                               body = elem.document.body;
                        return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-                               elem.document.body[ "client" + name ] || docElemProp;
+                               body && body[ "client" + name ] || docElemProp;
 
                // Get document width or height
                } else if ( elem.nodeType === 9 ) {