Changeset 27372


Ignore:
Timestamp:
Feb 13, 2014, 11:57:07 PM (11 years ago)
Author:
rvelices
Message:

upgrade jquery from 1.10.2 to 1.11.0

Location:
trunk/themes/default/js
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/themes/default/js/jquery.js

    r25383 r27372  
    11/*!
    2  * jQuery JavaScript Library v1.10.2
     2 * jQuery JavaScript Library v1.11.0
    33 * http://jquery.com/
    44 *
     
    66 * http://sizzlejs.com/
    77 *
    8  * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
     8 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
    99 * Released under the MIT license
    1010 * http://jquery.org/license
    1111 *
    12  * Date: 2013-07-03T13:48Z
     12 * Date: 2014-01-23T21:02Z
    1313 */
    14 (function( window, undefined ) {
     14
     15(function( global, factory ) {
     16
     17        if ( typeof module === "object" && typeof module.exports === "object" ) {
     18                // For CommonJS and CommonJS-like environments where a proper window is present,
     19                // execute the factory and get jQuery
     20                // For environments that do not inherently posses a window with a document
     21                // (such as Node.js), expose a jQuery-making factory as module.exports
     22                // This accentuates the need for the creation of a real window
     23                // e.g. var jQuery = require("jquery")(window);
     24                // See ticket #14549 for more info
     25                module.exports = global.document ?
     26                        factory( global, true ) :
     27                        function( w ) {
     28                                if ( !w.document ) {
     29                                        throw new Error( "jQuery requires a window with a document" );
     30                                }
     31                                return factory( w );
     32                        };
     33        } else {
     34                factory( global );
     35        }
     36
     37// Pass this if window is not defined yet
     38}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
    1539
    1640// Can't do this because several apps including ASP.NET trace
     
    1842// you try to trace through "use strict" call chains. (#13335)
    1943// Support: Firefox 18+
    20 //"use strict";
     44//
     45
     46var deletedIds = [];
     47
     48var slice = deletedIds.slice;
     49
     50var concat = deletedIds.concat;
     51
     52var push = deletedIds.push;
     53
     54var indexOf = deletedIds.indexOf;
     55
     56var class2type = {};
     57
     58var toString = class2type.toString;
     59
     60var hasOwn = class2type.hasOwnProperty;
     61
     62var trim = "".trim;
     63
     64var support = {};
     65
     66
     67
    2168var
    22         // The deferred used on DOM ready
    23         readyList,
    24 
    25         // A central reference to the root jQuery(document)
    26         rootjQuery,
    27 
    28         // Support: IE<10
    29         // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
    30         core_strundefined = typeof undefined,
    31 
    32         // Use the correct document accordingly with window argument (sandbox)
    33         location = window.location,
    34         document = window.document,
    35         docElem = document.documentElement,
    36 
    37         // Map over jQuery in case of overwrite
    38         _jQuery = window.jQuery,
    39 
    40         // Map over the $ in case of overwrite
    41         _$ = window.$,
    42 
    43         // [[Class]] -> type pairs
    44         class2type = {},
    45 
    46         // List of deleted data cache ids, so we can reuse them
    47         core_deletedIds = [],
    48 
    49         core_version = "1.10.2",
    50 
    51         // Save a reference to some core methods
    52         core_concat = core_deletedIds.concat,
    53         core_push = core_deletedIds.push,
    54         core_slice = core_deletedIds.slice,
    55         core_indexOf = core_deletedIds.indexOf,
    56         core_toString = class2type.toString,
    57         core_hasOwn = class2type.hasOwnProperty,
    58         core_trim = core_version.trim,
     69        version = "1.11.0",
    5970
    6071        // Define a local copy of jQuery
    6172        jQuery = function( selector, context ) {
    6273                // The jQuery object is actually just the init constructor 'enhanced'
    63                 return new jQuery.fn.init( selector, context, rootjQuery );
    64         },
    65 
    66         // Used for matching numbers
    67         core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
    68 
    69         // Used for splitting on whitespace
    70         core_rnotwhite = /\S+/g,
     74                // Need init if jQuery is called (just allow error to be thrown if not included)
     75                return new jQuery.fn.init( selector, context );
     76        },
    7177
    7278        // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
    7379        rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
    74 
    75         // A simple way to check for HTML strings
    76         // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
    77         // Strict HTML recognition (#11290: must start with <)
    78         rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
    79 
    80         // Match a standalone tag
    81         rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
    82 
    83         // JSON RegExp
    84         rvalidchars = /^[\],:{}\s]*$/,
    85         rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
    86         rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
    87         rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
    8880
    8981        // Matches dashed string for camelizing
     
    9486        fcamelCase = function( all, letter ) {
    9587                return letter.toUpperCase();
    96         },
    97 
    98         // The ready event handler
    99         completed = function( event ) {
    100 
    101                 // readyState === "complete" is good enough for us to call the dom ready in oldIE
    102                 if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
    103                         detach();
    104                         jQuery.ready();
    105                 }
    106         },
    107         // Clean-up method for dom ready events
    108         detach = function() {
    109                 if ( document.addEventListener ) {
    110                         document.removeEventListener( "DOMContentLoaded", completed, false );
    111                         window.removeEventListener( "load", completed, false );
    112 
    113                 } else {
    114                         document.detachEvent( "onreadystatechange", completed );
    115                         window.detachEvent( "onload", completed );
    116                 }
    11788        };
    11889
    11990jQuery.fn = jQuery.prototype = {
    12091        // The current version of jQuery being used
    121         jquery: core_version,
     92        jquery: version,
    12293
    12394        constructor: jQuery,
    124         init: function( selector, context, rootjQuery ) {
    125                 var match, elem;
    126 
    127                 // HANDLE: $(""), $(null), $(undefined), $(false)
    128                 if ( !selector ) {
    129                         return this;
    130                 }
    131 
    132                 // Handle HTML strings
    133                 if ( typeof selector === "string" ) {
    134                         if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
    135                                 // Assume that strings that start and end with <> are HTML and skip the regex check
    136                                 match = [ null, selector, null ];
    137 
    138                         } else {
    139                                 match = rquickExpr.exec( selector );
    140                         }
    141 
    142                         // Match html or make sure no context is specified for #id
    143                         if ( match && (match[1] || !context) ) {
    144 
    145                                 // HANDLE: $(html) -> $(array)
    146                                 if ( match[1] ) {
    147                                         context = context instanceof jQuery ? context[0] : context;
    148 
    149                                         // scripts is true for back-compat
    150                                         jQuery.merge( this, jQuery.parseHTML(
    151                                                 match[1],
    152                                                 context && context.nodeType ? context.ownerDocument || context : document,
    153                                                 true
    154                                         ) );
    155 
    156                                         // HANDLE: $(html, props)
    157                                         if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
    158                                                 for ( match in context ) {
    159                                                         // Properties of context are called as methods if possible
    160                                                         if ( jQuery.isFunction( this[ match ] ) ) {
    161                                                                 this[ match ]( context[ match ] );
    162 
    163                                                         // ...and otherwise set as attributes
    164                                                         } else {
    165                                                                 this.attr( match, context[ match ] );
    166                                                         }
    167                                                 }
    168                                         }
    169 
    170                                         return this;
    171 
    172                                 // HANDLE: $(#id)
    173                                 } else {
    174                                         elem = document.getElementById( match[2] );
    175 
    176                                         // Check parentNode to catch when Blackberry 4.6 returns
    177                                         // nodes that are no longer in the document #6963
    178                                         if ( elem && elem.parentNode ) {
    179                                                 // Handle the case where IE and Opera return items
    180                                                 // by name instead of ID
    181                                                 if ( elem.id !== match[2] ) {
    182                                                         return rootjQuery.find( selector );
    183                                                 }
    184 
    185                                                 // Otherwise, we inject the element directly into the jQuery object
    186                                                 this.length = 1;
    187                                                 this[0] = elem;
    188                                         }
    189 
    190                                         this.context = document;
    191                                         this.selector = selector;
    192                                         return this;
    193                                 }
    194 
    195                         // HANDLE: $(expr, $(...))
    196                         } else if ( !context || context.jquery ) {
    197                                 return ( context || rootjQuery ).find( selector );
    198 
    199                         // HANDLE: $(expr, context)
    200                         // (which is just equivalent to: $(context).find(expr)
    201                         } else {
    202                                 return this.constructor( context ).find( selector );
    203                         }
    204 
    205                 // HANDLE: $(DOMElement)
    206                 } else if ( selector.nodeType ) {
    207                         this.context = this[0] = selector;
    208                         this.length = 1;
    209                         return this;
    210 
    211                 // HANDLE: $(function)
    212                 // Shortcut for document ready
    213                 } else if ( jQuery.isFunction( selector ) ) {
    214                         return rootjQuery.ready( selector );
    215                 }
    216 
    217                 if ( selector.selector !== undefined ) {
    218                         this.selector = selector.selector;
    219                         this.context = selector.context;
    220                 }
    221 
    222                 return jQuery.makeArray( selector, this );
    223         },
    22495
    22596        // Start with an empty selector
     
    230101
    231102        toArray: function() {
    232                 return core_slice.call( this );
     103                return slice.call( this );
    233104        },
    234105
     
    236107        // Get the whole matched element set as a clean array
    237108        get: function( num ) {
    238                 return num == null ?
     109                return num != null ?
    239110
    240111                        // Return a 'clean' array
    241                         this.toArray() :
     112                        ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
    242113
    243114                        // Return just the object
    244                         ( num < 0 ? this[ this.length + num ] : this[ num ] );
     115                        slice.call( this );
    245116        },
    246117
     
    267138        },
    268139
    269         ready: function( fn ) {
    270                 // Add the callback
    271                 jQuery.ready.promise().done( fn );
    272 
    273                 return this;
     140        map: function( callback ) {
     141                return this.pushStack( jQuery.map(this, function( elem, i ) {
     142                        return callback.call( elem, i, elem );
     143                }));
    274144        },
    275145
    276146        slice: function() {
    277                 return this.pushStack( core_slice.apply( this, arguments ) );
     147                return this.pushStack( slice.apply( this, arguments ) );
    278148        },
    279149
     
    292162        },
    293163
    294         map: function( callback ) {
    295                 return this.pushStack( jQuery.map(this, function( elem, i ) {
    296                         return callback.call( elem, i, elem );
    297                 }));
    298         },
    299 
    300164        end: function() {
    301165                return this.prevObject || this.constructor(null);
     
    304168        // For internal use only.
    305169        // Behaves like an Array's method, not like a jQuery method.
    306         push: core_push,
    307         sort: [].sort,
    308         splice: [].splice
     170        push: push,
     171        sort: deletedIds.sort,
     172        splice: deletedIds.splice
    309173};
    310 
    311 // Give the init function the jQuery prototype for later instantiation
    312 jQuery.fn.init.prototype = jQuery.fn;
    313174
    314175jQuery.extend = jQuery.fn.extend = function() {
     
    322183        if ( typeof target === "boolean" ) {
    323184                deep = target;
    324                 target = arguments[1] || {};
     185
    325186                // skip the boolean and the target
    326                 i = 2;
     187                target = arguments[ i ] || {};
     188                i++;
    327189        }
    328190
     
    333195
    334196        // extend jQuery itself if only one argument is passed
    335         if ( length === i ) {
     197        if ( i === length ) {
    336198                target = this;
    337                 --i;
     199                i--;
    338200        }
    339201
     
    378240jQuery.extend({
    379241        // Unique for each copy of jQuery on the page
    380         // Non-digits removed to match rinlinejQuery
    381         expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
    382 
    383         noConflict: function( deep ) {
    384                 if ( window.$ === jQuery ) {
    385                         window.$ = _$;
    386                 }
    387 
    388                 if ( deep && window.jQuery === jQuery ) {
    389                         window.jQuery = _jQuery;
    390                 }
    391 
    392                 return jQuery;
    393         },
    394 
    395         // Is the DOM ready to be used? Set to true once it occurs.
    396         isReady: false,
    397 
    398         // A counter to track how many items to wait for before
    399         // the ready event fires. See #6781
    400         readyWait: 1,
    401 
    402         // Hold (or release) the ready event
    403         holdReady: function( hold ) {
    404                 if ( hold ) {
    405                         jQuery.readyWait++;
    406                 } else {
    407                         jQuery.ready( true );
    408                 }
    409         },
    410 
    411         // Handle when the DOM is ready
    412         ready: function( wait ) {
    413 
    414                 // Abort if there are pending holds or we're already ready
    415                 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
    416                         return;
    417                 }
    418 
    419                 // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
    420                 if ( !document.body ) {
    421                         return setTimeout( jQuery.ready );
    422                 }
    423 
    424                 // Remember that the DOM is ready
    425                 jQuery.isReady = true;
    426 
    427                 // If a normal DOM Ready event fired, decrement, and wait if need be
    428                 if ( wait !== true && --jQuery.readyWait > 0 ) {
    429                         return;
    430                 }
    431 
    432                 // If there are functions bound, to execute
    433                 readyList.resolveWith( document, [ jQuery ] );
    434 
    435                 // Trigger any bound ready events
    436                 if ( jQuery.fn.trigger ) {
    437                         jQuery( document ).trigger("ready").off("ready");
    438                 }
    439         },
     242        expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
     243
     244        // Assume jQuery is ready without the ready module
     245        isReady: true,
     246
     247        error: function( msg ) {
     248                throw new Error( msg );
     249        },
     250
     251        noop: function() {},
    440252
    441253        // See test/unit/core.js for details concerning isFunction.
     
    456268
    457269        isNumeric: function( obj ) {
    458                 return !isNaN( parseFloat(obj) ) && isFinite( obj );
    459         },
    460 
    461         type: function( obj ) {
    462                 if ( obj == null ) {
    463                         return String( obj );
    464                 }
    465                 return typeof obj === "object" || typeof obj === "function" ?
    466                         class2type[ core_toString.call(obj) ] || "object" :
    467                         typeof obj;
     270                // parseFloat NaNs numeric-cast false positives (null|true|false|"")
     271                // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
     272                // subtraction forces infinities to NaN
     273                return obj - parseFloat( obj ) >= 0;
     274        },
     275
     276        isEmptyObject: function( obj ) {
     277                var name;
     278                for ( name in obj ) {
     279                        return false;
     280                }
     281                return true;
    468282        },
    469283
     
    481295                        // Not own constructor property must be Object
    482296                        if ( obj.constructor &&
    483                                 !core_hasOwn.call(obj, "constructor") &&
    484                                 !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
     297                                !hasOwn.call(obj, "constructor") &&
     298                                !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
    485299                                return false;
    486300                        }
     
    492306                // Support: IE<9
    493307                // Handle iteration over inherited properties before own properties.
    494                 if ( jQuery.support.ownLast ) {
     308                if ( support.ownLast ) {
    495309                        for ( key in obj ) {
    496                                 return core_hasOwn.call( obj, key );
     310                                return hasOwn.call( obj, key );
    497311                        }
    498312                }
     
    502316                for ( key in obj ) {}
    503317
    504                 return key === undefined || core_hasOwn.call( obj, key );
    505         },
    506 
    507         isEmptyObject: function( obj ) {
    508                 var name;
    509                 for ( name in obj ) {
    510                         return false;
    511                 }
    512                 return true;
    513         },
    514 
    515         error: function( msg ) {
    516                 throw new Error( msg );
    517         },
    518 
    519         // data: string of html
    520         // context (optional): If specified, the fragment will be created in this context, defaults to document
    521         // keepScripts (optional): If true, will include scripts passed in the html string
    522         parseHTML: function( data, context, keepScripts ) {
    523                 if ( !data || typeof data !== "string" ) {
    524                         return null;
    525                 }
    526                 if ( typeof context === "boolean" ) {
    527                         keepScripts = context;
    528                         context = false;
    529                 }
    530                 context = context || document;
    531 
    532                 var parsed = rsingleTag.exec( data ),
    533                         scripts = !keepScripts && [];
    534 
    535                 // Single tag
    536                 if ( parsed ) {
    537                         return [ context.createElement( parsed[1] ) ];
    538                 }
    539 
    540                 parsed = jQuery.buildFragment( [ data ], context, scripts );
    541                 if ( scripts ) {
    542                         jQuery( scripts ).remove();
    543                 }
    544                 return jQuery.merge( [], parsed.childNodes );
    545         },
    546 
    547         parseJSON: function( data ) {
    548                 // Attempt to parse using the native JSON parser first
    549                 if ( window.JSON && window.JSON.parse ) {
    550                         return window.JSON.parse( data );
    551                 }
    552 
    553                 if ( data === null ) {
    554                         return data;
    555                 }
    556 
    557                 if ( typeof data === "string" ) {
    558 
    559                         // Make sure leading/trailing whitespace is removed (IE can't handle it)
    560                         data = jQuery.trim( data );
    561 
    562                         if ( data ) {
    563                                 // Make sure the incoming data is actual JSON
    564                                 // Logic borrowed from http://json.org/json2.js
    565                                 if ( rvalidchars.test( data.replace( rvalidescape, "@" )
    566                                         .replace( rvalidtokens, "]" )
    567                                         .replace( rvalidbraces, "")) ) {
    568 
    569                                         return ( new Function( "return " + data ) )();
    570                                 }
    571                         }
    572                 }
    573 
    574                 jQuery.error( "Invalid JSON: " + data );
    575         },
    576 
    577         // Cross-browser xml parsing
    578         parseXML: function( data ) {
    579                 var xml, tmp;
    580                 if ( !data || typeof data !== "string" ) {
    581                         return null;
    582                 }
    583                 try {
    584                         if ( window.DOMParser ) { // Standard
    585                                 tmp = new DOMParser();
    586                                 xml = tmp.parseFromString( data , "text/xml" );
    587                         } else { // IE
    588                                 xml = new ActiveXObject( "Microsoft.XMLDOM" );
    589                                 xml.async = "false";
    590                                 xml.loadXML( data );
    591                         }
    592                 } catch( e ) {
    593                         xml = undefined;
    594                 }
    595                 if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
    596                         jQuery.error( "Invalid XML: " + data );
    597                 }
    598                 return xml;
    599         },
    600 
    601         noop: function() {},
     318                return key === undefined || hasOwn.call( obj, key );
     319        },
     320
     321        type: function( obj ) {
     322                if ( obj == null ) {
     323                        return obj + "";
     324                }
     325                return typeof obj === "object" || typeof obj === "function" ?
     326                        class2type[ toString.call(obj) ] || "object" :
     327                        typeof obj;
     328        },
    602329
    603330        // Evaluates a script in a global context
     
    676403
    677404        // Use native String.trim function wherever possible
    678         trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
     405        trim: trim && !trim.call("\uFEFF\xA0") ?
    679406                function( text ) {
    680407                        return text == null ?
    681408                                "" :
    682                                 core_trim.call( text );
     409                                trim.call( text );
    683410                } :
    684411
     
    701428                                );
    702429                        } else {
    703                                 core_push.call( ret, arr );
     430                                push.call( ret, arr );
    704431                        }
    705432                }
     
    712439
    713440                if ( arr ) {
    714                         if ( core_indexOf ) {
    715                                 return core_indexOf.call( arr, elem, i );
     441                        if ( indexOf ) {
     442                                return indexOf.call( arr, elem, i );
    716443                        }
    717444
     
    731458
    732459        merge: function( first, second ) {
    733                 var l = second.length,
    734                         i = first.length,
    735                         j = 0;
    736 
    737                 if ( typeof l === "number" ) {
    738                         for ( ; j < l; j++ ) {
    739                                 first[ i++ ] = second[ j ];
    740                         }
    741                 } else {
     460                var len = +second.length,
     461                        j = 0,
     462                        i = first.length;
     463
     464                while ( j < len ) {
     465                        first[ i++ ] = second[ j++ ];
     466                }
     467
     468                // Support: IE<9
     469                // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
     470                if ( len !== len ) {
    742471                        while ( second[j] !== undefined ) {
    743472                                first[ i++ ] = second[ j++ ];
     
    750479        },
    751480
    752         grep: function( elems, callback, inv ) {
    753                 var retVal,
    754                         ret = [],
     481        grep: function( elems, callback, invert ) {
     482                var callbackInverse,
     483                        matches = [],
    755484                        i = 0,
    756                         length = elems.length;
    757                 inv = !!inv;
     485                        length = elems.length,
     486                        callbackExpect = !invert;
    758487
    759488                // Go through the array, only saving the items
    760489                // that pass the validator function
    761490                for ( ; i < length; i++ ) {
    762                         retVal = !!callback( elems[ i ], i );
    763                         if ( inv !== retVal ) {
    764                                 ret.push( elems[ i ] );
    765                         }
    766                 }
    767 
    768                 return ret;
     491                        callbackInverse = !callback( elems[ i ], i );
     492                        if ( callbackInverse !== callbackExpect ) {
     493                                matches.push( elems[ i ] );
     494                        }
     495                }
     496
     497                return matches;
    769498        },
    770499
     
    777506                        ret = [];
    778507
    779                 // Go through the array, translating each of the items to their
     508                // Go through the array, translating each of the items to their new values
    780509                if ( isArray ) {
    781510                        for ( ; i < length; i++ ) {
     
    783512
    784513                                if ( value != null ) {
    785                                         ret[ ret.length ] = value;
     514                                        ret.push( value );
    786515                                }
    787516                        }
     
    793522
    794523                                if ( value != null ) {
    795                                         ret[ ret.length ] = value;
     524                                        ret.push( value );
    796525                                }
    797526                        }
     
    799528
    800529                // Flatten any nested arrays
    801                 return core_concat.apply( [], ret );
     530                return concat.apply( [], ret );
    802531        },
    803532
     
    823552
    824553                // Simulated bind
    825                 args = core_slice.call( arguments, 2 );
     554                args = slice.call( arguments, 2 );
    826555                proxy = function() {
    827                         return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
     556                        return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
    828557                };
    829558
     
    834563        },
    835564
    836         // Multifunctional method to get and set values of a collection
    837         // The value/s can optionally be executed if it's a function
    838         access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
    839                 var i = 0,
    840                         length = elems.length,
    841                         bulk = key == null;
    842 
    843                 // Sets many values
    844                 if ( jQuery.type( key ) === "object" ) {
    845                         chainable = true;
    846                         for ( i in key ) {
    847                                 jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
    848                         }
    849 
    850                 // Sets one value
    851                 } else if ( value !== undefined ) {
    852                         chainable = true;
    853 
    854                         if ( !jQuery.isFunction( value ) ) {
    855                                 raw = true;
    856                         }
    857 
    858                         if ( bulk ) {
    859                                 // Bulk operations run against the entire set
    860                                 if ( raw ) {
    861                                         fn.call( elems, value );
    862                                         fn = null;
    863 
    864                                 // ...except when executing function values
    865                                 } else {
    866                                         bulk = fn;
    867                                         fn = function( elem, key, value ) {
    868                                                 return bulk.call( jQuery( elem ), value );
    869                                         };
    870                                 }
    871                         }
    872 
    873                         if ( fn ) {
    874                                 for ( ; i < length; i++ ) {
    875                                         fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
    876                                 }
    877                         }
    878                 }
    879 
    880                 return chainable ?
    881                         elems :
    882 
    883                         // Gets
    884                         bulk ?
    885                                 fn.call( elems ) :
    886                                 length ? fn( elems[0], key ) : emptyGet;
    887         },
    888 
    889565        now: function() {
    890                 return ( new Date() ).getTime();
    891         },
    892 
    893         // A method for quickly swapping in/out CSS properties to get correct calculations.
    894         // Note: this method belongs to the css module but it's needed here for the support module.
    895         // If support gets modularized, this method should be moved back to the css module.
    896         swap: function( elem, options, callback, args ) {
    897                 var ret, name,
    898                         old = {};
    899 
    900                 // Remember the old values, and insert the new ones
    901                 for ( name in options ) {
    902                         old[ name ] = elem.style[ name ];
    903                         elem.style[ name ] = options[ name ];
    904                 }
    905 
    906                 ret = callback.apply( elem, args || [] );
    907 
    908                 // Revert the old values
    909                 for ( name in options ) {
    910                         elem.style[ name ] = old[ name ];
    911                 }
    912 
    913                 return ret;
    914         }
     566                return +( new Date() );
     567        },
     568
     569        // jQuery.support is not used in Core but other projects attach their
     570        // properties to it so it needs to exist.
     571        support: support
    915572});
    916 
    917 jQuery.ready.promise = function( obj ) {
    918         if ( !readyList ) {
    919 
    920                 readyList = jQuery.Deferred();
    921 
    922                 // Catch cases where $(document).ready() is called after the browser event has already occurred.
    923                 // we once tried to use readyState "interactive" here, but it caused issues like the one
    924                 // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
    925                 if ( document.readyState === "complete" ) {
    926                         // Handle it asynchronously to allow scripts the opportunity to delay ready
    927                         setTimeout( jQuery.ready );
    928 
    929                 // Standards-based browsers support DOMContentLoaded
    930                 } else if ( document.addEventListener ) {
    931                         // Use the handy event callback
    932                         document.addEventListener( "DOMContentLoaded", completed, false );
    933 
    934                         // A fallback to window.onload, that will always work
    935                         window.addEventListener( "load", completed, false );
    936 
    937                 // If IE event model is used
    938                 } else {
    939                         // Ensure firing before onload, maybe late but safe also for iframes
    940                         document.attachEvent( "onreadystatechange", completed );
    941 
    942                         // A fallback to window.onload, that will always work
    943                         window.attachEvent( "onload", completed );
    944 
    945                         // If IE and not a frame
    946                         // continually check to see if the document is ready
    947                         var top = false;
    948 
    949                         try {
    950                                 top = window.frameElement == null && document.documentElement;
    951                         } catch(e) {}
    952 
    953                         if ( top && top.doScroll ) {
    954                                 (function doScrollCheck() {
    955                                         if ( !jQuery.isReady ) {
    956 
    957                                                 try {
    958                                                         // Use the trick by Diego Perini
    959                                                         // http://javascript.nwbox.com/IEContentLoaded/
    960                                                         top.doScroll("left");
    961                                                 } catch(e) {
    962                                                         return setTimeout( doScrollCheck, 50 );
    963                                                 }
    964 
    965                                                 // detach all dom ready events
    966                                                 detach();
    967 
    968                                                 // and execute any waiting functions
    969                                                 jQuery.ready();
    970                                         }
    971                                 })();
    972                         }
    973                 }
    974         }
    975         return readyList.promise( obj );
    976 };
    977573
    978574// Populate the class2type map
     
    985581                type = jQuery.type( obj );
    986582
    987         if ( jQuery.isWindow( obj ) ) {
     583        if ( type === "function" || jQuery.isWindow( obj ) ) {
    988584                return false;
    989585        }
     
    993589        }
    994590
    995         return type === "array" || type !== "function" &&
    996                 ( length === 0 ||
    997                 typeof length === "number" && length > 0 && ( length - 1 ) in obj );
     591        return type === "array" || length === 0 ||
     592                typeof length === "number" && length > 0 && ( length - 1 ) in obj;
    998593}
    999 
    1000 // All jQuery objects should point back to these
    1001 rootjQuery = jQuery(document);
     594var Sizzle =
    1002595/*!
    1003  * Sizzle CSS Selector Engine v1.10.2
     596 * Sizzle CSS Selector Engine v1.10.16
    1004597 * http://sizzlejs.com/
    1005598 *
     
    1008601 * http://jquery.org/license
    1009602 *
    1010  * Date: 2013-07-03
     603 * Date: 2014-01-13
    1011604 */
    1012 (function( window, undefined ) {
     605(function( window ) {
    1013606
    1014607var i,
    1015608        support,
    1016         cachedruns,
    1017609        Expr,
    1018610        getText,
     
    1021613        outermostContext,
    1022614        sortInput,
     615        hasDuplicate,
    1023616
    1024617        // Local document vars
     
    1040633        tokenCache = createCache(),
    1041634        compilerCache = createCache(),
    1042         hasDuplicate = false,
    1043635        sortOrder = function( a, b ) {
    1044636                if ( a === b ) {
    1045637                        hasDuplicate = true;
    1046                         return 0;
    1047638                }
    1048639                return 0;
     
    1104695        rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
    1105696
    1106         rsibling = new RegExp( whitespace + "*[+~]" ),
    1107         rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
     697        rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
    1108698
    1109699        rpseudo = new RegExp( pseudos ),
     
    1126716        },
    1127717
     718        rinputs = /^(?:input|select|textarea|button)$/i,
     719        rheader = /^h\d$/i,
     720
    1128721        rnative = /^[^{]+\{\s*\[native \w/,
    1129722
     
    1131724        rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
    1132725
    1133         rinputs = /^(?:input|select|textarea|button)$/i,
    1134         rheader = /^h\d$/i,
    1135 
     726        rsibling = /[+~]/,
    1136727        rescape = /'|\\/g,
    1137728
     
    1145736                return high !== high || escapedWhitespace ?
    1146737                        escaped :
    1147                         // BMP codepoint
    1148738                        high < 0 ?
     739                                // BMP codepoint
    1149740                                String.fromCharCode( high + 0x10000 ) :
    1150741                                // Supplemental Plane codepoint (surrogate pair)
     
    1210801                                        elem = context.getElementById( m );
    1211802                                        // Check parentNode to catch when Blackberry 4.6 returns
    1212                                         // nodes that are no longer in the document #6963
     803                                        // nodes that are no longer in the document (jQuery #6963)
    1213804                                        if ( elem && elem.parentNode ) {
    1214805                                                // Handle the case where IE, Opera, and Webkit return items
     
    1266857                                        groups[i] = nid + toSelector( groups[i] );
    1267858                                }
    1268                                 newContext = rsibling.test( selector ) && context.parentNode || context;
     859                                newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
    1269860                                newSelector = groups.join(",");
    1270861                        }
     
    1301892        function cache( key, value ) {
    1302893                // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
    1303                 if ( keys.push( key += " " ) > Expr.cacheLength ) {
     894                if ( keys.push( key + " " ) > Expr.cacheLength ) {
    1304895                        // Only keep the most recent entries
    1305896                        delete cache[ keys.shift() ];
    1306897                }
    1307                 return (cache[ key ] = value);
     898                return (cache[ key + " " ] = value);
    1308899        }
    1309900        return cache;
     
    14281019
    14291020/**
    1430  * Detect xml
     1021 * Checks a node for validity as a Sizzle context
     1022 * @param {Element|Object=} context
     1023 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
     1024 */
     1025function testContext( context ) {
     1026        return context && typeof context.getElementsByTagName !== strundefined && context;
     1027}
     1028
     1029// Expose support vars for convenience
     1030support = Sizzle.support = {};
     1031
     1032/**
     1033 * Detects XML nodes
    14311034 * @param {Element|Object} elem An element or a document
     1035 * @returns {Boolean} True iff elem is a non-HTML XML node
    14321036 */
    14331037isXML = Sizzle.isXML = function( elem ) {
     
    14381042};
    14391043
    1440 // Expose support vars for convenience
    1441 support = Sizzle.support = {};
    1442 
    14431044/**
    14441045 * Sets document-related variables once based on the current document
     
    14471048 */
    14481049setDocument = Sizzle.setDocument = function( node ) {
    1449         var doc = node ? node.ownerDocument || node : preferredDoc,
     1050        var hasCompare,
     1051                doc = node ? node.ownerDocument || node : preferredDoc,
    14501052                parent = doc.defaultView;
    14511053
     
    14661068        // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
    14671069        // IE6-8 do not support the defaultView property so parent will be undefined
    1468         if ( parent && parent.attachEvent && parent !== parent.top ) {
    1469                 parent.attachEvent( "onbeforeunload", function() {
    1470                         setDocument();
    1471                 });
     1070        if ( parent && parent !== parent.top ) {
     1071                // IE11 does not have attachEvent, so all must suffer
     1072                if ( parent.addEventListener ) {
     1073                        parent.addEventListener( "unload", function() {
     1074                                setDocument();
     1075                        }, false );
     1076                } else if ( parent.attachEvent ) {
     1077                        parent.attachEvent( "onunload", function() {
     1078                                setDocument();
     1079                        });
     1080                }
    14721081        }
    14731082
     
    14921101
    14931102        // Check if getElementsByClassName can be trusted
    1494         support.getElementsByClassName = assert(function( div ) {
     1103        support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
    14951104                div.innerHTML = "<div class='a'></div><div class='a i'></div>";
    14961105
     
    15991208                        // since its presence should be enough
    16001209                        // http://bugs.jquery.com/ticket/12359
    1601                         div.innerHTML = "<select><option selected=''></option></select>";
     1210                        div.innerHTML = "<select t=''><option selected=''></option></select>";
     1211
     1212                        // Support: IE8, Opera 10-12
     1213                        // Nothing should be selected when empty strings follow ^= or $= or *=
     1214                        if ( div.querySelectorAll("[t^='']").length ) {
     1215                                rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
     1216                        }
    16021217
    16031218                        // Support: IE8
     
    16161231
    16171232                assert(function( div ) {
    1618 
    1619                         // Support: Opera 10-12/IE8
    1620                         // ^= $= *= and empty values
    1621                         // Should not select anything
    16221233                        // Support: Windows 8 Native Apps
    1623                         // The type attribute is restricted during .innerHTML assignment
     1234                        // The type and name attributes are restricted during .innerHTML assignment
    16241235                        var input = doc.createElement("input");
    16251236                        input.setAttribute( "type", "hidden" );
    1626                         div.appendChild( input ).setAttribute( "t", "" );
    1627 
    1628                         if ( div.querySelectorAll("[t^='']").length ) {
    1629                                 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
     1237                        div.appendChild( input ).setAttribute( "name", "D" );
     1238
     1239                        // Support: IE8
     1240                        // Enforce case-sensitivity of name attribute
     1241                        if ( div.querySelectorAll("[name=d]").length ) {
     1242                                rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
    16301243                        }
    16311244
     
    16641277        /* Contains
    16651278        ---------------------------------------------------------------------- */
     1279        hasCompare = rnative.test( docElem.compareDocumentPosition );
    16661280
    16671281        // Element contains another
    16681282        // Purposefully does not implement inclusive descendent
    16691283        // As in, an element does not contain itself
    1670         contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?
     1284        contains = hasCompare || rnative.test( docElem.contains ) ?
    16711285                function( a, b ) {
    16721286                        var adown = a.nodeType === 9 ? a.documentElement : a,
     
    16931307
    16941308        // Document order sorting
    1695         sortOrder = docElem.compareDocumentPosition ?
     1309        sortOrder = hasCompare ?
    16961310        function( a, b ) {
    16971311
     
    17021316                }
    17031317
    1704                 var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
    1705 
     1318                // Sort on method existence if only one input has compareDocumentPosition
     1319                var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
    17061320                if ( compare ) {
    1707                         // Disconnected nodes
    1708                         if ( compare & 1 ||
    1709                                 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
    1710 
    1711                                 // Choose the first element that is related to our preferred document
    1712                                 if ( a === doc || contains(preferredDoc, a) ) {
    1713                                         return -1;
    1714                                 }
    1715                                 if ( b === doc || contains(preferredDoc, b) ) {
    1716                                         return 1;
    1717                                 }
    1718 
    1719                                 // Maintain original order
    1720                                 return sortInput ?
    1721                                         ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
    1722                                         0;
    1723                         }
    1724 
    1725                         return compare & 4 ? -1 : 1;
    1726                 }
    1727 
    1728                 // Not directly comparable, sort on existence of method
    1729                 return a.compareDocumentPosition ? -1 : 1;
     1321                        return compare;
     1322                }
     1323
     1324                // Calculate position if both inputs belong to the same document
     1325                compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
     1326                        a.compareDocumentPosition( b ) :
     1327
     1328                        // Otherwise we know they are disconnected
     1329                        1;
     1330
     1331                // Disconnected nodes
     1332                if ( compare & 1 ||
     1333                        (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
     1334
     1335                        // Choose the first element that is related to our preferred document
     1336                        if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
     1337                                return -1;
     1338                        }
     1339                        if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
     1340                                return 1;
     1341                        }
     1342
     1343                        // Maintain original order
     1344                        return sortInput ?
     1345                                ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
     1346                                0;
     1347                }
     1348
     1349                return compare & 4 ? -1 : 1;
    17301350        } :
    17311351        function( a, b ) {
     1352                // Exit early if the nodes are identical
     1353                if ( a === b ) {
     1354                        hasDuplicate = true;
     1355                        return 0;
     1356                }
     1357
    17321358                var cur,
    17331359                        i = 0,
     
    17371363                        bp = [ b ];
    17381364
    1739                 // Exit early if the nodes are identical
    1740                 if ( a === b ) {
    1741                         hasDuplicate = true;
    1742                         return 0;
    1743 
    17441365                // Parentless nodes are either documents or disconnected
    1745                 } else if ( !aup || !bup ) {
     1366                if ( !aup || !bup ) {
    17461367                        return a === doc ? -1 :
    17471368                                b === doc ? 1 :
     
    18381459                        undefined;
    18391460
    1840         return val === undefined ?
     1461        return val !== undefined ?
     1462                val :
    18411463                support.attributes || !documentIsHTML ?
    18421464                        elem.getAttribute( name ) :
    18431465                        (val = elem.getAttributeNode(name)) && val.specified ?
    18441466                                val.value :
    1845                                 null :
    1846                 val;
     1467                                null;
    18471468};
    18481469
     
    18771498        }
    18781499
     1500        // Clear input after sorting to release objects
     1501        // See https://github.com/jquery/sizzle/pull/225
     1502        sortInput = null;
     1503
    18791504        return results;
    18801505};
     
    18921517        if ( !nodeType ) {
    18931518                // If no nodeType, this is expected to be an array
    1894                 for ( ; (node = elem[i]); i++ ) {
     1519                while ( (node = elem[i++]) ) {
    18951520                        // Do not traverse comment nodes
    18961521                        ret += getText( node );
     
    18981523        } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
    18991524                // Use textContent for elements
    1900                 // innerText usage removed for consistency of new lines (see #11153)
     1525                // innerText usage removed for consistency of new lines (jQuery #11153)
    19011526                if ( typeof elem.textContent === "string" ) {
    19021527                        return elem.textContent;
     
    22951920                "empty": function( elem ) {
    22961921                        // http://www.w3.org/TR/selectors/#empty-pseudo
    2297                         // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
    2298                         //   not comment, processing instructions, or others
    2299                         // Thanks to Diego Perini for the nodeName shortcut
    2300                         //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
     1922                        // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
     1923                        //   but not by others (comment: 8; processing instruction: 7; etc.)
     1924                        // nodeType < 6 works because attributes (2) do not appear as children
    23011925                        for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
    2302                                 if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
     1926                                if ( elem.nodeType < 6 ) {
    23031927                                        return false;
    23041928                                }
     
    23271951                "text": function( elem ) {
    23281952                        var attr;
    2329                         // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
    2330                         // use getAttribute instead to test this case
    23311953                        return elem.nodeName.toLowerCase() === "input" &&
    23321954                                elem.type === "text" &&
    2333                                 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
     1955
     1956                                // Support: IE<8
     1957                                // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
     1958                                ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
    23341959                },
    23351960
     
    24172042                                soFar = soFar.slice( match[0].length ) || soFar;
    24182043                        }
    2419                         groups.push( tokens = [] );
     2044                        groups.push( (tokens = []) );
    24202045                }
    24212046
     
    24902115                // Check against all ancestor/preceding elements
    24912116                function( elem, context, xml ) {
    2492                         var data, cache, outerCache,
    2493                                 dirkey = dirruns + " " + doneName;
     2117                        var oldCache, outerCache,
     2118                                newCache = [ dirruns, doneName ];
    24942119
    24952120                        // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
     
    25062131                                        if ( elem.nodeType === 1 || checkNonElements ) {
    25072132                                                outerCache = elem[ expando ] || (elem[ expando ] = {});
    2508                                                 if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
    2509                                                         if ( (data = cache[1]) === true || data === cachedruns ) {
    2510                                                                 return data === true;
    2511                                                         }
     2133                                                if ( (oldCache = outerCache[ dir ]) &&
     2134                                                        oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
     2135
     2136                                                        // Assign to newCache so results back-propagate to previous elements
     2137                                                        return (newCache[ 2 ] = oldCache[ 2 ]);
    25122138                                                } else {
    2513                                                         cache = outerCache[ dir ] = [ dirkey ];
    2514                                                         cache[1] = matcher( elem, context, xml ) || cachedruns;
    2515                                                         if ( cache[1] === true ) {
     2139                                                        // Reuse newcache so results back-propagate to previous elements
     2140                                                        outerCache[ dir ] = newCache;
     2141
     2142                                                        // A match means we're done; a fail means we have to keep checking
     2143                                                        if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
    25162144                                                                return true;
    25172145                                                        }
     
    27072335
    27082336function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
    2709         // A counter to specify which element is currently being matched
    2710         var matcherCachedRuns = 0,
    2711                 bySet = setMatchers.length > 0,
     2337        var bySet = setMatchers.length > 0,
    27122338                byElement = elementMatchers.length > 0,
    2713                 superMatcher = function( seed, context, xml, results, expandContext ) {
     2339                superMatcher = function( seed, context, xml, results, outermost ) {
    27142340                        var elem, j, matcher,
    2715                                 setMatched = [],
    27162341                                matchedCount = 0,
    27172342                                i = "0",
    27182343                                unmatched = seed && [],
    2719                                 outermost = expandContext != null,
     2344                                setMatched = [],
    27202345                                contextBackup = outermostContext,
    2721                                 // We must always have either seed elements or context
    2722                                 elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
     2346                                // We must always have either seed elements or outermost context
     2347                                elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
    27232348                                // Use integer dirruns iff this is the outermost matcher
    2724                                 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
     2349                                dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
     2350                                len = elems.length;
    27252351
    27262352                        if ( outermost ) {
    27272353                                outermostContext = context !== document && context;
    2728                                 cachedruns = matcherCachedRuns;
    27292354                        }
    27302355
    27312356                        // Add elements passing elementMatchers directly to results
    27322357                        // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
    2733                         for ( ; (elem = elems[i]) != null; i++ ) {
     2358                        // Support: IE<9, Safari
     2359                        // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
     2360                        for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
    27342361                                if ( byElement && elem ) {
    27352362                                        j = 0;
     
    27422369                                        if ( outermost ) {
    27432370                                                dirruns = dirrunsUnique;
    2744                                                 cachedruns = ++matcherCachedRuns;
    27452371                                        }
    27462372                                }
     
    28772503                                        if ( (seed = find(
    28782504                                                token.matches[0].replace( runescape, funescape ),
    2879                                                 rsibling.test( tokens[0].type ) && context.parentNode || context
     2505                                                rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
    28802506                                        )) ) {
    28812507
     
    29022528                !documentIsHTML,
    29032529                results,
    2904                 rsibling.test( selector )
     2530                rsibling.test( selector ) && testContext( context.parentNode ) || context
    29052531        );
    29062532        return results;
     
    29142540// Support: Chrome<14
    29152541// Always assume duplicates if they aren't passed to the comparison function
    2916 support.detectDuplicates = hasDuplicate;
     2542support.detectDuplicates = !!hasDuplicate;
    29172543
    29182544// Initialize against the default document
     
    29622588                var val;
    29632589                if ( !isXML ) {
    2964                         return (val = elem.getAttributeNode( name )) && val.specified ?
    2965                                 val.value :
    2966                                 elem[ name ] === true ? name.toLowerCase() : null;
     2590                        return elem[ name ] === true ? name.toLowerCase() :
     2591                                        (val = elem.getAttributeNode( name )) && val.specified ?
     2592                                        val.value :
     2593                                null;
    29672594                }
    29682595        });
    29692596}
     2597
     2598return Sizzle;
     2599
     2600})( window );
     2601
     2602
    29702603
    29712604jQuery.find = Sizzle;
     
    29782611
    29792612
    2980 })( window );
     2613
     2614var rneedsContext = jQuery.expr.match.needsContext;
     2615
     2616var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
     2617
     2618
     2619
     2620var risSimple = /^.[^:#\[\.,]*$/;
     2621
     2622// Implement the identical functionality for filter and not
     2623function winnow( elements, qualifier, not ) {
     2624        if ( jQuery.isFunction( qualifier ) ) {
     2625                return jQuery.grep( elements, function( elem, i ) {
     2626                        /* jshint -W018 */
     2627                        return !!qualifier.call( elem, i, elem ) !== not;
     2628                });
     2629
     2630        }
     2631
     2632        if ( qualifier.nodeType ) {
     2633                return jQuery.grep( elements, function( elem ) {
     2634                        return ( elem === qualifier ) !== not;
     2635                });
     2636
     2637        }
     2638
     2639        if ( typeof qualifier === "string" ) {
     2640                if ( risSimple.test( qualifier ) ) {
     2641                        return jQuery.filter( qualifier, elements, not );
     2642                }
     2643
     2644                qualifier = jQuery.filter( qualifier, elements );
     2645        }
     2646
     2647        return jQuery.grep( elements, function( elem ) {
     2648                return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
     2649        });
     2650}
     2651
     2652jQuery.filter = function( expr, elems, not ) {
     2653        var elem = elems[ 0 ];
     2654
     2655        if ( not ) {
     2656                expr = ":not(" + expr + ")";
     2657        }
     2658
     2659        return elems.length === 1 && elem.nodeType === 1 ?
     2660                jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
     2661                jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
     2662                        return elem.nodeType === 1;
     2663                }));
     2664};
     2665
     2666jQuery.fn.extend({
     2667        find: function( selector ) {
     2668                var i,
     2669                        ret = [],
     2670                        self = this,
     2671                        len = self.length;
     2672
     2673                if ( typeof selector !== "string" ) {
     2674                        return this.pushStack( jQuery( selector ).filter(function() {
     2675                                for ( i = 0; i < len; i++ ) {
     2676                                        if ( jQuery.contains( self[ i ], this ) ) {
     2677                                                return true;
     2678                                        }
     2679                                }
     2680                        }) );
     2681                }
     2682
     2683                for ( i = 0; i < len; i++ ) {
     2684                        jQuery.find( selector, self[ i ], ret );
     2685                }
     2686
     2687                // Needed because $( selector, context ) becomes $( context ).find( selector )
     2688                ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
     2689                ret.selector = this.selector ? this.selector + " " + selector : selector;
     2690                return ret;
     2691        },
     2692        filter: function( selector ) {
     2693                return this.pushStack( winnow(this, selector || [], false) );
     2694        },
     2695        not: function( selector ) {
     2696                return this.pushStack( winnow(this, selector || [], true) );
     2697        },
     2698        is: function( selector ) {
     2699                return !!winnow(
     2700                        this,
     2701
     2702                        // If this is a positional/relative selector, check membership in the returned set
     2703                        // so $("p:first").is("p:last") won't return true for a doc with two "p".
     2704                        typeof selector === "string" && rneedsContext.test( selector ) ?
     2705                                jQuery( selector ) :
     2706                                selector || [],
     2707                        false
     2708                ).length;
     2709        }
     2710});
     2711
     2712
     2713// Initialize a jQuery object
     2714
     2715
     2716// A central reference to the root jQuery(document)
     2717var rootjQuery,
     2718
     2719        // Use the correct document accordingly with window argument (sandbox)
     2720        document = window.document,
     2721
     2722        // A simple way to check for HTML strings
     2723        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
     2724        // Strict HTML recognition (#11290: must start with <)
     2725        rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
     2726
     2727        init = jQuery.fn.init = function( selector, context ) {
     2728                var match, elem;
     2729
     2730                // HANDLE: $(""), $(null), $(undefined), $(false)
     2731                if ( !selector ) {
     2732                        return this;
     2733                }
     2734
     2735                // Handle HTML strings
     2736                if ( typeof selector === "string" ) {
     2737                        if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
     2738                                // Assume that strings that start and end with <> are HTML and skip the regex check
     2739                                match = [ null, selector, null ];
     2740
     2741                        } else {
     2742                                match = rquickExpr.exec( selector );
     2743                        }
     2744
     2745                        // Match html or make sure no context is specified for #id
     2746                        if ( match && (match[1] || !context) ) {
     2747
     2748                                // HANDLE: $(html) -> $(array)
     2749                                if ( match[1] ) {
     2750                                        context = context instanceof jQuery ? context[0] : context;
     2751
     2752                                        // scripts is true for back-compat
     2753                                        // Intentionally let the error be thrown if parseHTML is not present
     2754                                        jQuery.merge( this, jQuery.parseHTML(
     2755                                                match[1],
     2756                                                context && context.nodeType ? context.ownerDocument || context : document,
     2757                                                true
     2758                                        ) );
     2759
     2760                                        // HANDLE: $(html, props)
     2761                                        if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
     2762                                                for ( match in context ) {
     2763                                                        // Properties of context are called as methods if possible
     2764                                                        if ( jQuery.isFunction( this[ match ] ) ) {
     2765                                                                this[ match ]( context[ match ] );
     2766
     2767                                                        // ...and otherwise set as attributes
     2768                                                        } else {
     2769                                                                this.attr( match, context[ match ] );
     2770                                                        }
     2771                                                }
     2772                                        }
     2773
     2774                                        return this;
     2775
     2776                                // HANDLE: $(#id)
     2777                                } else {
     2778                                        elem = document.getElementById( match[2] );
     2779
     2780                                        // Check parentNode to catch when Blackberry 4.6 returns
     2781                                        // nodes that are no longer in the document #6963
     2782                                        if ( elem && elem.parentNode ) {
     2783                                                // Handle the case where IE and Opera return items
     2784                                                // by name instead of ID
     2785                                                if ( elem.id !== match[2] ) {
     2786                                                        return rootjQuery.find( selector );
     2787                                                }
     2788
     2789                                                // Otherwise, we inject the element directly into the jQuery object
     2790                                                this.length = 1;
     2791                                                this[0] = elem;
     2792                                        }
     2793
     2794                                        this.context = document;
     2795                                        this.selector = selector;
     2796                                        return this;
     2797                                }
     2798
     2799                        // HANDLE: $(expr, $(...))
     2800                        } else if ( !context || context.jquery ) {
     2801                                return ( context || rootjQuery ).find( selector );
     2802
     2803                        // HANDLE: $(expr, context)
     2804                        // (which is just equivalent to: $(context).find(expr)
     2805                        } else {
     2806                                return this.constructor( context ).find( selector );
     2807                        }
     2808
     2809                // HANDLE: $(DOMElement)
     2810                } else if ( selector.nodeType ) {
     2811                        this.context = this[0] = selector;
     2812                        this.length = 1;
     2813                        return this;
     2814
     2815                // HANDLE: $(function)
     2816                // Shortcut for document ready
     2817                } else if ( jQuery.isFunction( selector ) ) {
     2818                        return typeof rootjQuery.ready !== "undefined" ?
     2819                                rootjQuery.ready( selector ) :
     2820                                // Execute immediately if ready is not present
     2821                                selector( jQuery );
     2822                }
     2823
     2824                if ( selector.selector !== undefined ) {
     2825                        this.selector = selector.selector;
     2826                        this.context = selector.context;
     2827                }
     2828
     2829                return jQuery.makeArray( selector, this );
     2830        };
     2831
     2832// Give the init function the jQuery prototype for later instantiation
     2833init.prototype = jQuery.fn;
     2834
     2835// Initialize central reference
     2836rootjQuery = jQuery( document );
     2837
     2838
     2839var rparentsprev = /^(?:parents|prev(?:Until|All))/,
     2840        // methods guaranteed to produce a unique set when starting from a unique set
     2841        guaranteedUnique = {
     2842                children: true,
     2843                contents: true,
     2844                next: true,
     2845                prev: true
     2846        };
     2847
     2848jQuery.extend({
     2849        dir: function( elem, dir, until ) {
     2850                var matched = [],
     2851                        cur = elem[ dir ];
     2852
     2853                while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
     2854                        if ( cur.nodeType === 1 ) {
     2855                                matched.push( cur );
     2856                        }
     2857                        cur = cur[dir];
     2858                }
     2859                return matched;
     2860        },
     2861
     2862        sibling: function( n, elem ) {
     2863                var r = [];
     2864
     2865                for ( ; n; n = n.nextSibling ) {
     2866                        if ( n.nodeType === 1 && n !== elem ) {
     2867                                r.push( n );
     2868                        }
     2869                }
     2870
     2871                return r;
     2872        }
     2873});
     2874
     2875jQuery.fn.extend({
     2876        has: function( target ) {
     2877                var i,
     2878                        targets = jQuery( target, this ),
     2879                        len = targets.length;
     2880
     2881                return this.filter(function() {
     2882                        for ( i = 0; i < len; i++ ) {
     2883                                if ( jQuery.contains( this, targets[i] ) ) {
     2884                                        return true;
     2885                                }
     2886                        }
     2887                });
     2888        },
     2889
     2890        closest: function( selectors, context ) {
     2891                var cur,
     2892                        i = 0,
     2893                        l = this.length,
     2894                        matched = [],
     2895                        pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
     2896                                jQuery( selectors, context || this.context ) :
     2897                                0;
     2898
     2899                for ( ; i < l; i++ ) {
     2900                        for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
     2901                                // Always skip document fragments
     2902                                if ( cur.nodeType < 11 && (pos ?
     2903                                        pos.index(cur) > -1 :
     2904
     2905                                        // Don't pass non-elements to Sizzle
     2906                                        cur.nodeType === 1 &&
     2907                                                jQuery.find.matchesSelector(cur, selectors)) ) {
     2908
     2909                                        matched.push( cur );
     2910                                        break;
     2911                                }
     2912                        }
     2913                }
     2914
     2915                return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
     2916        },
     2917
     2918        // Determine the position of an element within
     2919        // the matched set of elements
     2920        index: function( elem ) {
     2921
     2922                // No argument, return index in parent
     2923                if ( !elem ) {
     2924                        return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
     2925                }
     2926
     2927                // index in selector
     2928                if ( typeof elem === "string" ) {
     2929                        return jQuery.inArray( this[0], jQuery( elem ) );
     2930                }
     2931
     2932                // Locate the position of the desired element
     2933                return jQuery.inArray(
     2934                        // If it receives a jQuery object, the first element is used
     2935                        elem.jquery ? elem[0] : elem, this );
     2936        },
     2937
     2938        add: function( selector, context ) {
     2939                return this.pushStack(
     2940                        jQuery.unique(
     2941                                jQuery.merge( this.get(), jQuery( selector, context ) )
     2942                        )
     2943                );
     2944        },
     2945
     2946        addBack: function( selector ) {
     2947                return this.add( selector == null ?
     2948                        this.prevObject : this.prevObject.filter(selector)
     2949                );
     2950        }
     2951});
     2952
     2953function sibling( cur, dir ) {
     2954        do {
     2955                cur = cur[ dir ];
     2956        } while ( cur && cur.nodeType !== 1 );
     2957
     2958        return cur;
     2959}
     2960
     2961jQuery.each({
     2962        parent: function( elem ) {
     2963                var parent = elem.parentNode;
     2964                return parent && parent.nodeType !== 11 ? parent : null;
     2965        },
     2966        parents: function( elem ) {
     2967                return jQuery.dir( elem, "parentNode" );
     2968        },
     2969        parentsUntil: function( elem, i, until ) {
     2970                return jQuery.dir( elem, "parentNode", until );
     2971        },
     2972        next: function( elem ) {
     2973                return sibling( elem, "nextSibling" );
     2974        },
     2975        prev: function( elem ) {
     2976                return sibling( elem, "previousSibling" );
     2977        },
     2978        nextAll: function( elem ) {
     2979                return jQuery.dir( elem, "nextSibling" );
     2980        },
     2981        prevAll: function( elem ) {
     2982                return jQuery.dir( elem, "previousSibling" );
     2983        },
     2984        nextUntil: function( elem, i, until ) {
     2985                return jQuery.dir( elem, "nextSibling", until );
     2986        },
     2987        prevUntil: function( elem, i, until ) {
     2988                return jQuery.dir( elem, "previousSibling", until );
     2989        },
     2990        siblings: function( elem ) {
     2991                return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
     2992        },
     2993        children: function( elem ) {
     2994                return jQuery.sibling( elem.firstChild );
     2995        },
     2996        contents: function( elem ) {
     2997                return jQuery.nodeName( elem, "iframe" ) ?
     2998                        elem.contentDocument || elem.contentWindow.document :
     2999                        jQuery.merge( [], elem.childNodes );
     3000        }
     3001}, function( name, fn ) {
     3002        jQuery.fn[ name ] = function( until, selector ) {
     3003                var ret = jQuery.map( this, fn, until );
     3004
     3005                if ( name.slice( -5 ) !== "Until" ) {
     3006                        selector = until;
     3007                }
     3008
     3009                if ( selector && typeof selector === "string" ) {
     3010                        ret = jQuery.filter( selector, ret );
     3011                }
     3012
     3013                if ( this.length > 1 ) {
     3014                        // Remove duplicates
     3015                        if ( !guaranteedUnique[ name ] ) {
     3016                                ret = jQuery.unique( ret );
     3017                        }
     3018
     3019                        // Reverse order for parents* and prev-derivatives
     3020                        if ( rparentsprev.test( name ) ) {
     3021                                ret = ret.reverse();
     3022                        }
     3023                }
     3024
     3025                return this.pushStack( ret );
     3026        };
     3027});
     3028var rnotwhite = (/\S+/g);
     3029
     3030
     3031
    29813032// String to Object options format cache
    29823033var optionsCache = {};
     
    29853036function createOptions( options ) {
    29863037        var object = optionsCache[ options ] = {};
    2987         jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
     3038        jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
    29883039                object[ flag ] = true;
    29893040        });
     
    31023153                                        jQuery.each( arguments, function( _, arg ) {
    31033154                                                var index;
    3104                                                 while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
     3155                                                while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
    31053156                                                        list.splice( index, 1 );
    31063157                                                        // Handle firing indexes
     
    31763227        return self;
    31773228};
     3229
     3230
    31783231jQuery.extend({
    31793232
     
    31983251                                        return jQuery.Deferred(function( newDefer ) {
    31993252                                                jQuery.each( tuples, function( i, tuple ) {
    3200                                                         var action = tuple[ 0 ],
    3201                                                                 fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
     3253                                                        var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
    32023254                                                        // deferred[ done | fail | progress ] for forwarding actions to newDefer
    32033255                                                        deferred[ tuple[1] ](function() {
     
    32093261                                                                                .progress( newDefer.notify );
    32103262                                                                } else {
    3211                                                                         newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
     3263                                                                        newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
    32123264                                                                }
    32133265                                                        });
     
    32683320        when: function( subordinate /* , ..., subordinateN */ ) {
    32693321                var i = 0,
    3270                         resolveValues = core_slice.call( arguments ),
     3322                        resolveValues = slice.call( arguments ),
    32713323                        length = resolveValues.length,
    32723324
     
    32813333                                return function( value ) {
    32823334                                        contexts[ i ] = this;
    3283                                         values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
    3284                                         if( values === progressValues ) {
     3335                                        values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
     3336                                        if ( values === progressValues ) {
    32853337                                                deferred.notifyWith( contexts, values );
    3286                                         } else if ( !( --remaining ) ) {
     3338
     3339                                        } else if ( !(--remaining) ) {
    32873340                                                deferred.resolveWith( contexts, values );
    32883341                                        }
     
    33173370        }
    33183371});
    3319 jQuery.support = (function( support ) {
    3320 
    3321         var all, a, input, select, fragment, opt, eventName, isSupported, i,
    3322                 div = document.createElement("div");
     3372
     3373
     3374// The deferred used on DOM ready
     3375var readyList;
     3376
     3377jQuery.fn.ready = function( fn ) {
     3378        // Add the callback
     3379        jQuery.ready.promise().done( fn );
     3380
     3381        return this;
     3382};
     3383
     3384jQuery.extend({
     3385        // Is the DOM ready to be used? Set to true once it occurs.
     3386        isReady: false,
     3387
     3388        // A counter to track how many items to wait for before
     3389        // the ready event fires. See #6781
     3390        readyWait: 1,
     3391
     3392        // Hold (or release) the ready event
     3393        holdReady: function( hold ) {
     3394                if ( hold ) {
     3395                        jQuery.readyWait++;
     3396                } else {
     3397                        jQuery.ready( true );
     3398                }
     3399        },
     3400
     3401        // Handle when the DOM is ready
     3402        ready: function( wait ) {
     3403
     3404                // Abort if there are pending holds or we're already ready
     3405                if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
     3406                        return;
     3407                }
     3408
     3409                // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
     3410                if ( !document.body ) {
     3411                        return setTimeout( jQuery.ready );
     3412                }
     3413
     3414                // Remember that the DOM is ready
     3415                jQuery.isReady = true;
     3416
     3417                // If a normal DOM Ready event fired, decrement, and wait if need be
     3418                if ( wait !== true && --jQuery.readyWait > 0 ) {
     3419                        return;
     3420                }
     3421
     3422                // If there are functions bound, to execute
     3423                readyList.resolveWith( document, [ jQuery ] );
     3424
     3425                // Trigger any bound ready events
     3426                if ( jQuery.fn.trigger ) {
     3427                        jQuery( document ).trigger("ready").off("ready");
     3428                }
     3429        }
     3430});
     3431
     3432/**
     3433 * Clean-up method for dom ready events
     3434 */
     3435function detach() {
     3436        if ( document.addEventListener ) {
     3437                document.removeEventListener( "DOMContentLoaded", completed, false );
     3438                window.removeEventListener( "load", completed, false );
     3439
     3440        } else {
     3441                document.detachEvent( "onreadystatechange", completed );
     3442                window.detachEvent( "onload", completed );
     3443        }
     3444}
     3445
     3446/**
     3447 * The ready event handler and self cleanup method
     3448 */
     3449function completed() {
     3450        // readyState === "complete" is good enough for us to call the dom ready in oldIE
     3451        if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
     3452                detach();
     3453                jQuery.ready();
     3454        }
     3455}
     3456
     3457jQuery.ready.promise = function( obj ) {
     3458        if ( !readyList ) {
     3459
     3460                readyList = jQuery.Deferred();
     3461
     3462                // Catch cases where $(document).ready() is called after the browser event has already occurred.
     3463                // we once tried to use readyState "interactive" here, but it caused issues like the one
     3464                // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
     3465                if ( document.readyState === "complete" ) {
     3466                        // Handle it asynchronously to allow scripts the opportunity to delay ready
     3467                        setTimeout( jQuery.ready );
     3468
     3469                // Standards-based browsers support DOMContentLoaded
     3470                } else if ( document.addEventListener ) {
     3471                        // Use the handy event callback
     3472                        document.addEventListener( "DOMContentLoaded", completed, false );
     3473
     3474                        // A fallback to window.onload, that will always work
     3475                        window.addEventListener( "load", completed, false );
     3476
     3477                // If IE event model is used
     3478                } else {
     3479                        // Ensure firing before onload, maybe late but safe also for iframes
     3480                        document.attachEvent( "onreadystatechange", completed );
     3481
     3482                        // A fallback to window.onload, that will always work
     3483                        window.attachEvent( "onload", completed );
     3484
     3485                        // If IE and not a frame
     3486                        // continually check to see if the document is ready
     3487                        var top = false;
     3488
     3489                        try {
     3490                                top = window.frameElement == null && document.documentElement;
     3491                        } catch(e) {}
     3492
     3493                        if ( top && top.doScroll ) {
     3494                                (function doScrollCheck() {
     3495                                        if ( !jQuery.isReady ) {
     3496
     3497                                                try {
     3498                                                        // Use the trick by Diego Perini
     3499                                                        // http://javascript.nwbox.com/IEContentLoaded/
     3500                                                        top.doScroll("left");
     3501                                                } catch(e) {
     3502                                                        return setTimeout( doScrollCheck, 50 );
     3503                                                }
     3504
     3505                                                // detach all dom ready events
     3506                                                detach();
     3507
     3508                                                // and execute any waiting functions
     3509                                                jQuery.ready();
     3510                                        }
     3511                                })();
     3512                        }
     3513                }
     3514        }
     3515        return readyList.promise( obj );
     3516};
     3517
     3518
     3519var strundefined = typeof undefined;
     3520
     3521
     3522
     3523// Support: IE<9
     3524// Iteration over object's inherited properties before its own
     3525var i;
     3526for ( i in jQuery( support ) ) {
     3527        break;
     3528}
     3529support.ownLast = i !== "0";
     3530
     3531// Note: most support tests are defined in their respective modules.
     3532// false until the test is run
     3533support.inlineBlockNeedsLayout = false;
     3534
     3535jQuery(function() {
     3536        // We need to execute this one support test ASAP because we need to know
     3537        // if body.style.zoom needs to be set.
     3538
     3539        var container, div,
     3540                body = document.getElementsByTagName("body")[0];
     3541
     3542        if ( !body ) {
     3543                // Return for frameset docs that don't have a body
     3544                return;
     3545        }
    33233546
    33243547        // Setup
    3325         div.setAttribute( "className", "t" );
    3326         div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
    3327 
    3328         // Finish early in limited (non-browser) environments
    3329         all = div.getElementsByTagName("*") || [];
    3330         a = div.getElementsByTagName("a")[ 0 ];
    3331         if ( !a || !a.style || !all.length ) {
    3332                 return support;
    3333         }
    3334 
    3335         // First batch of tests
    3336         select = document.createElement("select");
    3337         opt = select.appendChild( document.createElement("option") );
    3338         input = div.getElementsByTagName("input")[ 0 ];
    3339 
    3340         a.style.cssText = "top:1px;float:left;opacity:.5";
    3341 
    3342         // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
    3343         support.getSetAttribute = div.className !== "t";
    3344 
    3345         // IE strips leading whitespace when .innerHTML is used
    3346         support.leadingWhitespace = div.firstChild.nodeType === 3;
    3347 
    3348         // Make sure that tbody elements aren't automatically inserted
    3349         // IE will insert them into empty tables
    3350         support.tbody = !div.getElementsByTagName("tbody").length;
    3351 
    3352         // Make sure that link elements get serialized correctly by innerHTML
    3353         // This requires a wrapper element in IE
    3354         support.htmlSerialize = !!div.getElementsByTagName("link").length;
    3355 
    3356         // Get the style information from getAttribute
    3357         // (IE uses .cssText instead)
    3358         support.style = /top/.test( a.getAttribute("style") );
    3359 
    3360         // Make sure that URLs aren't manipulated
    3361         // (IE normalizes it by default)
    3362         support.hrefNormalized = a.getAttribute("href") === "/a";
    3363 
    3364         // Make sure that element opacity exists
    3365         // (IE uses filter instead)
    3366         // Use a regex to work around a WebKit issue. See #5145
    3367         support.opacity = /^0.5/.test( a.style.opacity );
    3368 
    3369         // Verify style float existence
    3370         // (IE uses styleFloat instead of cssFloat)
    3371         support.cssFloat = !!a.style.cssFloat;
    3372 
    3373         // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
    3374         support.checkOn = !!input.value;
    3375 
    3376         // Make sure that a selected-by-default option has a working selected property.
    3377         // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
    3378         support.optSelected = opt.selected;
    3379 
    3380         // Tests for enctype support on a form (#6743)
    3381         support.enctype = !!document.createElement("form").enctype;
    3382 
    3383         // Makes sure cloning an html5 element does not cause problems
    3384         // Where outerHTML is undefined, this still works
    3385         support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>";
    3386 
    3387         // Will be defined later
    3388         support.inlineBlockNeedsLayout = false;
    3389         support.shrinkWrapBlocks = false;
    3390         support.pixelPosition = false;
    3391         support.deleteExpando = true;
    3392         support.noCloneEvent = true;
    3393         support.reliableMarginRight = true;
    3394         support.boxSizingReliable = true;
    3395 
    3396         // Make sure checked status is properly cloned
    3397         input.checked = true;
    3398         support.noCloneChecked = input.cloneNode( true ).checked;
    3399 
    3400         // Make sure that the options inside disabled selects aren't marked as disabled
    3401         // (WebKit marks them as disabled)
    3402         select.disabled = true;
    3403         support.optDisabled = !opt.disabled;
    3404 
    3405         // Support: IE<9
    3406         try {
    3407                 delete div.test;
    3408         } catch( e ) {
    3409                 support.deleteExpando = false;
    3410         }
    3411 
    3412         // Check if we can trust getAttribute("value")
    3413         input = document.createElement("input");
    3414         input.setAttribute( "value", "" );
    3415         support.input = input.getAttribute( "value" ) === "";
    3416 
    3417         // Check if an input maintains its value after becoming a radio
    3418         input.value = "t";
    3419         input.setAttribute( "type", "radio" );
    3420         support.radioValue = input.value === "t";
    3421 
    3422         // #11217 - WebKit loses check when the name is after the checked attribute
    3423         input.setAttribute( "checked", "t" );
    3424         input.setAttribute( "name", "t" );
    3425 
    3426         fragment = document.createDocumentFragment();
    3427         fragment.appendChild( input );
    3428 
    3429         // Check if a disconnected checkbox will retain its checked
    3430         // value of true after appended to the DOM (IE6/7)
    3431         support.appendChecked = input.checked;
    3432 
    3433         // WebKit doesn't clone checked state correctly in fragments
    3434         support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
    3435 
    3436         // Support: IE<9
    3437         // Opera does not clone events (and typeof div.attachEvent === undefined).
    3438         // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
    3439         if ( div.attachEvent ) {
    3440                 div.attachEvent( "onclick", function() {
    3441                         support.noCloneEvent = false;
    3442                 });
    3443 
    3444                 div.cloneNode( true ).click();
    3445         }
    3446 
    3447         // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
    3448         // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
    3449         for ( i in { submit: true, change: true, focusin: true }) {
    3450                 div.setAttribute( eventName = "on" + i, "t" );
    3451 
    3452                 support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
    3453         }
    3454 
    3455         div.style.backgroundClip = "content-box";
    3456         div.cloneNode( true ).style.backgroundClip = "";
    3457         support.clearCloneStyle = div.style.backgroundClip === "content-box";
    3458 
    3459         // Support: IE<9
    3460         // Iteration over object's inherited properties before its own.
    3461         for ( i in jQuery( support ) ) {
    3462                 break;
    3463         }
    3464         support.ownLast = i !== "0";
    3465 
    3466         // Run tests that need a body at doc ready
    3467         jQuery(function() {
    3468                 var container, marginDiv, tds,
    3469                         divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
    3470                         body = document.getElementsByTagName("body")[0];
    3471 
    3472                 if ( !body ) {
    3473                         // Return for frameset docs that don't have a body
    3474                         return;
    3475                 }
    3476 
    3477                 container = document.createElement("div");
    3478                 container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
    3479 
    3480                 body.appendChild( container ).appendChild( div );
    3481 
    3482                 // Support: IE8
    3483                 // Check if table cells still have offsetWidth/Height when they are set
    3484                 // to display:none and there are still other visible table cells in a
    3485                 // table row; if so, offsetWidth/Height are not reliable for use when
    3486                 // determining if an element has been hidden directly using
    3487                 // display:none (it is still safe to use offsets if a parent element is
    3488                 // hidden; don safety goggles and see bug #4512 for more information).
    3489                 div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
    3490                 tds = div.getElementsByTagName("td");
    3491                 tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
    3492                 isSupported = ( tds[ 0 ].offsetHeight === 0 );
    3493 
    3494                 tds[ 0 ].style.display = "";
    3495                 tds[ 1 ].style.display = "none";
    3496 
    3497                 // Support: IE8
    3498                 // Check if empty table cells still have offsetWidth/Height
    3499                 support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
    3500 
    3501                 // Check box-sizing and margin behavior.
    3502                 div.innerHTML = "";
    3503                 div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
    3504 
    3505                 // Workaround failing boxSizing test due to offsetWidth returning wrong value
    3506                 // with some non-1 values of body zoom, ticket #13543
    3507                 jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
    3508                         support.boxSizing = div.offsetWidth === 4;
    3509                 });
    3510 
    3511                 // Use window.getComputedStyle because jsdom on node.js will break without it.
    3512                 if ( window.getComputedStyle ) {
    3513                         support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
    3514                         support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
    3515 
    3516                         // Check if div with explicit width and no margin-right incorrectly
    3517                         // gets computed margin-right based on width of container. (#3333)
    3518                         // Fails in WebKit before Feb 2011 nightlies
    3519                         // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
    3520                         marginDiv = div.appendChild( document.createElement("div") );
    3521                         marginDiv.style.cssText = div.style.cssText = divReset;
    3522                         marginDiv.style.marginRight = marginDiv.style.width = "0";
    3523                         div.style.width = "1px";
    3524 
    3525                         support.reliableMarginRight =
    3526                                 !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
    3527                 }
    3528 
    3529                 if ( typeof div.style.zoom !== core_strundefined ) {
     3548        container = document.createElement( "div" );
     3549        container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
     3550
     3551        div = document.createElement( "div" );
     3552        body.appendChild( container ).appendChild( div );
     3553
     3554        if ( typeof div.style.zoom !== strundefined ) {
     3555                // Support: IE<8
     3556                // Check if natively block-level elements act like inline-block
     3557                // elements when setting their display to 'inline' and giving
     3558                // them layout
     3559                div.style.cssText = "border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1";
     3560
     3561                if ( (support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 )) ) {
     3562                        // Prevent IE 6 from affecting layout for positioned elements #11048
     3563                        // Prevent IE from shrinking the body in IE 7 mode #12869
    35303564                        // Support: IE<8
    3531                         // Check if natively block-level elements act like inline-block
    3532                         // elements when setting their display to 'inline' and giving
    3533                         // them layout
    3534                         div.innerHTML = "";
    3535                         div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
    3536                         support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
    3537 
    3538                         // Support: IE6
    3539                         // Check if elements with layout shrink-wrap their children
    3540                         div.style.display = "block";
    3541                         div.innerHTML = "<div></div>";
    3542                         div.firstChild.style.width = "5px";
    3543                         support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
    3544 
    3545                         if ( support.inlineBlockNeedsLayout ) {
    3546                                 // Prevent IE 6 from affecting layout for positioned elements #11048
    3547                                 // Prevent IE from shrinking the body in IE 7 mode #12869
    3548                                 // Support: IE<8
    3549                                 body.style.zoom = 1;
    3550                         }
    3551                 }
    3552 
    3553                 body.removeChild( container );
    3554 
    3555                 // Null elements to avoid leaks in IE
    3556                 container = div = tds = marginDiv = null;
    3557         });
     3565                        body.style.zoom = 1;
     3566                }
     3567        }
     3568
     3569        body.removeChild( container );
    35583570
    35593571        // Null elements to avoid leaks in IE
    3560         all = select = fragment = opt = a = input = null;
    3561 
    3562         return support;
    3563 })({});
    3564 
    3565 var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
     3572        container = div = null;
     3573});
     3574
     3575
     3576
     3577
     3578(function() {
     3579        var div = document.createElement( "div" );
     3580
     3581        // Execute the test only if not already executed in another module.
     3582        if (support.deleteExpando == null) {
     3583                // Support: IE<9
     3584                support.deleteExpando = true;
     3585                try {
     3586                        delete div.test;
     3587                } catch( e ) {
     3588                        support.deleteExpando = false;
     3589                }
     3590        }
     3591
     3592        // Null elements to avoid leaks in IE.
     3593        div = null;
     3594})();
     3595
     3596
     3597/**
     3598 * Determines whether an object can have data
     3599 */
     3600jQuery.acceptData = function( elem ) {
     3601        var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
     3602                nodeType = +elem.nodeType || 1;
     3603
     3604        // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
     3605        return nodeType !== 1 && nodeType !== 9 ?
     3606                false :
     3607
     3608                // Nodes accept data unless otherwise specified; rejection can be conditional
     3609                !noData || noData !== true && elem.getAttribute("classid") === noData;
     3610};
     3611
     3612
     3613var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
    35663614        rmultiDash = /([A-Z])/g;
    35673615
    3568 function internalData( elem, name, data, pvt /* Internal Use Only */ ){
     3616function dataAttr( elem, key, data ) {
     3617        // If nothing was found internally, try to fetch any
     3618        // data from the HTML5 data-* attribute
     3619        if ( data === undefined && elem.nodeType === 1 ) {
     3620
     3621                var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
     3622
     3623                data = elem.getAttribute( name );
     3624
     3625                if ( typeof data === "string" ) {
     3626                        try {
     3627                                data = data === "true" ? true :
     3628                                        data === "false" ? false :
     3629                                        data === "null" ? null :
     3630                                        // Only convert to a number if it doesn't change the string
     3631                                        +data + "" === data ? +data :
     3632                                        rbrace.test( data ) ? jQuery.parseJSON( data ) :
     3633                                        data;
     3634                        } catch( e ) {}
     3635
     3636                        // Make sure we set the data so it isn't changed later
     3637                        jQuery.data( elem, key, data );
     3638
     3639                } else {
     3640                        data = undefined;
     3641                }
     3642        }
     3643
     3644        return data;
     3645}
     3646
     3647// checks a cache object for emptiness
     3648function isEmptyDataObject( obj ) {
     3649        var name;
     3650        for ( name in obj ) {
     3651
     3652                // if the public data object is empty, the private is still empty
     3653                if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
     3654                        continue;
     3655                }
     3656                if ( name !== "toJSON" ) {
     3657                        return false;
     3658                }
     3659        }
     3660
     3661        return true;
     3662}
     3663
     3664function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
    35693665        if ( !jQuery.acceptData( elem ) ) {
    35703666                return;
     
    35963692                // ends up in the global cache
    35973693                if ( isNode ) {
    3598                         id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;
     3694                        id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
    35993695                } else {
    36003696                        id = internalKey;
     
    37353831        // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
    37363832        /* jshint eqeqeq: false */
    3737         } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
     3833        } else if ( support.deleteExpando || cache != cache.window ) {
    37383834                /* jshint eqeqeq: true */
    37393835                delete cache[ id ];
     
    37483844        cache: {},
    37493845
    3750         // The following elements throw uncatchable exceptions if you
    3751         // attempt to add expando properties to them.
     3846        // The following elements (space-suffixed to avoid Object.prototype collisions)
     3847        // throw uncatchable exceptions if you attempt to set expando properties
    37523848        noData: {
    3753                 "applet": true,
    3754                 "embed": true,
    3755                 // Ban all objects except for Flash (which handle expandos)
    3756                 "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
     3849                "applet ": true,
     3850                "embed ": true,
     3851                // ...but Flash objects (which have this classid) *can* handle expandos
     3852                "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
    37573853        },
    37583854
     
    37773873        _removeData: function( elem, name ) {
    37783874                return internalRemoveData( elem, name, true );
    3779         },
    3780 
    3781         // A method for determining if a DOM node can handle the data expando
    3782         acceptData: function( elem ) {
    3783                 // Do not set data on non-element because it will not be cleared (#8335).
    3784                 if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
    3785                         return false;
    3786                 }
    3787 
    3788                 var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
    3789 
    3790                 // nodes accept data unless otherwise specified; rejection can be conditional
    3791                 return !noData || noData !== true && elem.getAttribute("classid") === noData;
    37923875        }
    37933876});
     
    37953878jQuery.fn.extend({
    37963879        data: function( key, value ) {
    3797                 var attrs, name,
    3798                         data = null,
    3799                         i = 0,
    3800                         elem = this[0];
     3880                var i, name, data,
     3881                        elem = this[0],
     3882                        attrs = elem && elem.attributes;
    38013883
    38023884                // Special expections of .data basically thwart jQuery.access,
     
    38093891
    38103892                                if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
    3811                                         attrs = elem.attributes;
    3812                                         for ( ; i < attrs.length; i++ ) {
     3893                                        i = attrs.length;
     3894                                        while ( i-- ) {
    38133895                                                name = attrs[i].name;
    38143896
     
    38423924                        // Gets one value
    38433925                        // Try to fetch any internally stored data first
    3844                         elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
     3926                        elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
    38453927        },
    38463928
     
    38523934});
    38533935
    3854 function dataAttr( elem, key, data ) {
    3855         // If nothing was found internally, try to fetch any
    3856         // data from the HTML5 data-* attribute
    3857         if ( data === undefined && elem.nodeType === 1 ) {
    3858 
    3859                 var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
    3860 
    3861                 data = elem.getAttribute( name );
    3862 
    3863                 if ( typeof data === "string" ) {
    3864                         try {
    3865                                 data = data === "true" ? true :
    3866                                         data === "false" ? false :
    3867                                         data === "null" ? null :
    3868                                         // Only convert to a number if it doesn't change the string
    3869                                         +data + "" === data ? +data :
    3870                                         rbrace.test( data ) ? jQuery.parseJSON( data ) :
    3871                                                 data;
    3872                         } catch( e ) {}
    3873 
    3874                         // Make sure we set the data so it isn't changed later
    3875                         jQuery.data( elem, key, data );
    3876 
    3877                 } else {
    3878                         data = undefined;
    3879                 }
    3880         }
    3881 
    3882         return data;
    3883 }
    3884 
    3885 // checks a cache object for emptiness
    3886 function isEmptyDataObject( obj ) {
    3887         var name;
    3888         for ( name in obj ) {
    3889 
    3890                 // if the public data object is empty, the private is still empty
    3891                 if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
    3892                         continue;
    3893                 }
    3894                 if ( name !== "toJSON" ) {
    3895                         return false;
    3896                 }
    3897         }
    3898 
    3899         return true;
    3900 }
     3936
    39013937jQuery.extend({
    39023938        queue: function( elem, type, data ) {
     
    39964032                return this.each(function() {
    39974033                        jQuery.dequeue( this, type );
    3998                 });
    3999         },
    4000         // Based off of the plugin by Clint Helfers, with permission.
    4001         // http://blindsignals.com/index.php/2009/07/jquery-delay/
    4002         delay: function( time, type ) {
    4003                 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
    4004                 type = type || "fx";
    4005 
    4006                 return this.queue( type, function( next, hooks ) {
    4007                         var timeout = setTimeout( next, time );
    4008                         hooks.stop = function() {
    4009                                 clearTimeout( timeout );
    4010                         };
    40114034                });
    40124035        },
     
    40344057                type = type || "fx";
    40354058
    4036                 while( i-- ) {
     4059                while ( i-- ) {
    40374060                        tmp = jQuery._data( elements[ i ], type + "queueHooks" );
    40384061                        if ( tmp && tmp.empty ) {
     
    40454068        }
    40464069});
    4047 var nodeHook, boolHook,
    4048         rclass = /[\t\r\n\f]/g,
    4049         rreturn = /\r/g,
    4050         rfocusable = /^(?:input|select|textarea|button|object)$/i,
    4051         rclickable = /^(?:a|area)$/i,
    4052         ruseDefault = /^(?:checked|selected)$/i,
    4053         getSetAttribute = jQuery.support.getSetAttribute,
    4054         getSetInput = jQuery.support.input;
    4055 
    4056 jQuery.fn.extend({
    4057         attr: function( name, value ) {
    4058                 return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
    4059         },
    4060 
    4061         removeAttr: function( name ) {
    4062                 return this.each(function() {
    4063                         jQuery.removeAttr( this, name );
     4070var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
     4071
     4072var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
     4073
     4074var isHidden = function( elem, el ) {
     4075                // isHidden might be called from jQuery#filter function;
     4076                // in that case, element will be second argument
     4077                elem = el || elem;
     4078                return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
     4079        };
     4080
     4081
     4082
     4083// Multifunctional method to get and set values of a collection
     4084// The value/s can optionally be executed if it's a function
     4085var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
     4086        var i = 0,
     4087                length = elems.length,
     4088                bulk = key == null;
     4089
     4090        // Sets many values
     4091        if ( jQuery.type( key ) === "object" ) {
     4092                chainable = true;
     4093                for ( i in key ) {
     4094                        jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
     4095                }
     4096
     4097        // Sets one value
     4098        } else if ( value !== undefined ) {
     4099                chainable = true;
     4100
     4101                if ( !jQuery.isFunction( value ) ) {
     4102                        raw = true;
     4103                }
     4104
     4105                if ( bulk ) {
     4106                        // Bulk operations run against the entire set
     4107                        if ( raw ) {
     4108                                fn.call( elems, value );
     4109                                fn = null;
     4110
     4111                        // ...except when executing function values
     4112                        } else {
     4113                                bulk = fn;
     4114                                fn = function( elem, key, value ) {
     4115                                        return bulk.call( jQuery( elem ), value );
     4116                                };
     4117                        }
     4118                }
     4119
     4120                if ( fn ) {
     4121                        for ( ; i < length; i++ ) {
     4122                                fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
     4123                        }
     4124                }
     4125        }
     4126
     4127        return chainable ?
     4128                elems :
     4129
     4130                // Gets
     4131                bulk ?
     4132                        fn.call( elems ) :
     4133                        length ? fn( elems[0], key ) : emptyGet;
     4134};
     4135var rcheckableType = (/^(?:checkbox|radio)$/i);
     4136
     4137
     4138
     4139(function() {
     4140        var fragment = document.createDocumentFragment(),
     4141                div = document.createElement("div"),
     4142                input = document.createElement("input");
     4143
     4144        // Setup
     4145        div.setAttribute( "className", "t" );
     4146        div.innerHTML = "  <link/><table></table><a href='/a'>a</a>";
     4147
     4148        // IE strips leading whitespace when .innerHTML is used
     4149        support.leadingWhitespace = div.firstChild.nodeType === 3;
     4150
     4151        // Make sure that tbody elements aren't automatically inserted
     4152        // IE will insert them into empty tables
     4153        support.tbody = !div.getElementsByTagName( "tbody" ).length;
     4154
     4155        // Make sure that link elements get serialized correctly by innerHTML
     4156        // This requires a wrapper element in IE
     4157        support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
     4158
     4159        // Makes sure cloning an html5 element does not cause problems
     4160        // Where outerHTML is undefined, this still works
     4161        support.html5Clone =
     4162                document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
     4163
     4164        // Check if a disconnected checkbox will retain its checked
     4165        // value of true after appended to the DOM (IE6/7)
     4166        input.type = "checkbox";
     4167        input.checked = true;
     4168        fragment.appendChild( input );
     4169        support.appendChecked = input.checked;
     4170
     4171        // Make sure textarea (and checkbox) defaultValue is properly cloned
     4172        // Support: IE6-IE11+
     4173        div.innerHTML = "<textarea>x</textarea>";
     4174        support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
     4175
     4176        // #11217 - WebKit loses check when the name is after the checked attribute
     4177        fragment.appendChild( div );
     4178        div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
     4179
     4180        // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
     4181        // old WebKit doesn't clone checked state correctly in fragments
     4182        support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
     4183
     4184        // Support: IE<9
     4185        // Opera does not clone events (and typeof div.attachEvent === undefined).
     4186        // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
     4187        support.noCloneEvent = true;
     4188        if ( div.attachEvent ) {
     4189                div.attachEvent( "onclick", function() {
     4190                        support.noCloneEvent = false;
    40644191                });
    4065         },
    4066 
    4067         prop: function( name, value ) {
    4068                 return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
    4069         },
    4070 
    4071         removeProp: function( name ) {
    4072                 name = jQuery.propFix[ name ] || name;
    4073                 return this.each(function() {
    4074                         // try/catch handles cases where IE balks (such as removing a property on window)
    4075                         try {
    4076                                 this[ name ] = undefined;
    4077                                 delete this[ name ];
    4078                         } catch( e ) {}
    4079                 });
    4080         },
    4081 
    4082         addClass: function( value ) {
    4083                 var classes, elem, cur, clazz, j,
    4084                         i = 0,
    4085                         len = this.length,
    4086                         proceed = typeof value === "string" && value;
    4087 
    4088                 if ( jQuery.isFunction( value ) ) {
    4089                         return this.each(function( j ) {
    4090                                 jQuery( this ).addClass( value.call( this, j, this.className ) );
    4091                         });
    4092                 }
    4093 
    4094                 if ( proceed ) {
    4095                         // The disjunction here is for better compressibility (see removeClass)
    4096                         classes = ( value || "" ).match( core_rnotwhite ) || [];
    4097 
    4098                         for ( ; i < len; i++ ) {
    4099                                 elem = this[ i ];
    4100                                 cur = elem.nodeType === 1 && ( elem.className ?
    4101                                         ( " " + elem.className + " " ).replace( rclass, " " ) :
    4102                                         " "
    4103                                 );
    4104 
    4105                                 if ( cur ) {
    4106                                         j = 0;
    4107                                         while ( (clazz = classes[j++]) ) {
    4108                                                 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
    4109                                                         cur += clazz + " ";
    4110                                                 }
    4111                                         }
    4112                                         elem.className = jQuery.trim( cur );
    4113 
    4114                                 }
    4115                         }
    4116                 }
    4117 
    4118                 return this;
    4119         },
    4120 
    4121         removeClass: function( value ) {
    4122                 var classes, elem, cur, clazz, j,
    4123                         i = 0,
    4124                         len = this.length,
    4125                         proceed = arguments.length === 0 || typeof value === "string" && value;
    4126 
    4127                 if ( jQuery.isFunction( value ) ) {
    4128                         return this.each(function( j ) {
    4129                                 jQuery( this ).removeClass( value.call( this, j, this.className ) );
    4130                         });
    4131                 }
    4132                 if ( proceed ) {
    4133                         classes = ( value || "" ).match( core_rnotwhite ) || [];
    4134 
    4135                         for ( ; i < len; i++ ) {
    4136                                 elem = this[ i ];
    4137                                 // This expression is here for better compressibility (see addClass)
    4138                                 cur = elem.nodeType === 1 && ( elem.className ?
    4139                                         ( " " + elem.className + " " ).replace( rclass, " " ) :
    4140                                         ""
    4141                                 );
    4142 
    4143                                 if ( cur ) {
    4144                                         j = 0;
    4145                                         while ( (clazz = classes[j++]) ) {
    4146                                                 // Remove *all* instances
    4147                                                 while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
    4148                                                         cur = cur.replace( " " + clazz + " ", " " );
    4149                                                 }
    4150                                         }
    4151                                         elem.className = value ? jQuery.trim( cur ) : "";
    4152                                 }
    4153                         }
    4154                 }
    4155 
    4156                 return this;
    4157         },
    4158 
    4159         toggleClass: function( value, stateVal ) {
    4160                 var type = typeof value;
    4161 
    4162                 if ( typeof stateVal === "boolean" && type === "string" ) {
    4163                         return stateVal ? this.addClass( value ) : this.removeClass( value );
    4164                 }
    4165 
    4166                 if ( jQuery.isFunction( value ) ) {
    4167                         return this.each(function( i ) {
    4168                                 jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
    4169                         });
    4170                 }
    4171 
    4172                 return this.each(function() {
    4173                         if ( type === "string" ) {
    4174                                 // toggle individual class names
    4175                                 var className,
    4176                                         i = 0,
    4177                                         self = jQuery( this ),
    4178                                         classNames = value.match( core_rnotwhite ) || [];
    4179 
    4180                                 while ( (className = classNames[ i++ ]) ) {
    4181                                         // check each className given, space separated list
    4182                                         if ( self.hasClass( className ) ) {
    4183                                                 self.removeClass( className );
    4184                                         } else {
    4185                                                 self.addClass( className );
    4186                                         }
    4187                                 }
    4188 
    4189                         // Toggle whole class name
    4190                         } else if ( type === core_strundefined || type === "boolean" ) {
    4191                                 if ( this.className ) {
    4192                                         // store className if set
    4193                                         jQuery._data( this, "__className__", this.className );
    4194                                 }
    4195 
    4196                                 // If the element has a class name or if we're passed "false",
    4197                                 // then remove the whole classname (if there was one, the above saved it).
    4198                                 // Otherwise bring back whatever was previously saved (if anything),
    4199                                 // falling back to the empty string if nothing was stored.
    4200                                 this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
    4201                         }
    4202                 });
    4203         },
    4204 
    4205         hasClass: function( selector ) {
    4206                 var className = " " + selector + " ",
    4207                         i = 0,
    4208                         l = this.length;
    4209                 for ( ; i < l; i++ ) {
    4210                         if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
    4211                                 return true;
    4212                         }
    4213                 }
    4214 
    4215                 return false;
    4216         },
    4217 
    4218         val: function( value ) {
    4219                 var ret, hooks, isFunction,
    4220                         elem = this[0];
    4221 
    4222                 if ( !arguments.length ) {
    4223                         if ( elem ) {
    4224                                 hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
    4225 
    4226                                 if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
    4227                                         return ret;
    4228                                 }
    4229 
    4230                                 ret = elem.value;
    4231 
    4232                                 return typeof ret === "string" ?
    4233                                         // handle most common string cases
    4234                                         ret.replace(rreturn, "") :
    4235                                         // handle cases where value is null/undef or number
    4236                                         ret == null ? "" : ret;
    4237                         }
    4238 
    4239                         return;
    4240                 }
    4241 
    4242                 isFunction = jQuery.isFunction( value );
    4243 
    4244                 return this.each(function( i ) {
    4245                         var val;
    4246 
    4247                         if ( this.nodeType !== 1 ) {
    4248                                 return;
    4249                         }
    4250 
    4251                         if ( isFunction ) {
    4252                                 val = value.call( this, i, jQuery( this ).val() );
    4253                         } else {
    4254                                 val = value;
    4255                         }
    4256 
    4257                         // Treat null/undefined as ""; convert numbers to string
    4258                         if ( val == null ) {
    4259                                 val = "";
    4260                         } else if ( typeof val === "number" ) {
    4261                                 val += "";
    4262                         } else if ( jQuery.isArray( val ) ) {
    4263                                 val = jQuery.map(val, function ( value ) {
    4264                                         return value == null ? "" : value + "";
    4265                                 });
    4266                         }
    4267 
    4268                         hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
    4269 
    4270                         // If set returns undefined, fall back to normal setting
    4271                         if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
    4272                                 this.value = val;
    4273                         }
    4274                 });
    4275         }
    4276 });
    4277 
    4278 jQuery.extend({
    4279         valHooks: {
    4280                 option: {
    4281                         get: function( elem ) {
    4282                                 // Use proper attribute retrieval(#6932, #12072)
    4283                                 var val = jQuery.find.attr( elem, "value" );
    4284                                 return val != null ?
    4285                                         val :
    4286                                         elem.text;
    4287                         }
    4288                 },
    4289                 select: {
    4290                         get: function( elem ) {
    4291                                 var value, option,
    4292                                         options = elem.options,
    4293                                         index = elem.selectedIndex,
    4294                                         one = elem.type === "select-one" || index < 0,
    4295                                         values = one ? null : [],
    4296                                         max = one ? index + 1 : options.length,
    4297                                         i = index < 0 ?
    4298                                                 max :
    4299                                                 one ? index : 0;
    4300 
    4301                                 // Loop through all the selected options
    4302                                 for ( ; i < max; i++ ) {
    4303                                         option = options[ i ];
    4304 
    4305                                         // oldIE doesn't update selected after form reset (#2551)
    4306                                         if ( ( option.selected || i === index ) &&
    4307                                                         // Don't return options that are disabled or in a disabled optgroup
    4308                                                         ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
    4309                                                         ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
    4310 
    4311                                                 // Get the specific value for the option
    4312                                                 value = jQuery( option ).val();
    4313 
    4314                                                 // We don't need an array for one selects
    4315                                                 if ( one ) {
    4316                                                         return value;
    4317                                                 }
    4318 
    4319                                                 // Multi-Selects return an array
    4320                                                 values.push( value );
    4321                                         }
    4322                                 }
    4323 
    4324                                 return values;
    4325                         },
    4326 
    4327                         set: function( elem, value ) {
    4328                                 var optionSet, option,
    4329                                         options = elem.options,
    4330                                         values = jQuery.makeArray( value ),
    4331                                         i = options.length;
    4332 
    4333                                 while ( i-- ) {
    4334                                         option = options[ i ];
    4335                                         if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
    4336                                                 optionSet = true;
    4337                                         }
    4338                                 }
    4339 
    4340                                 // force browsers to behave consistently when non-matching value is set
    4341                                 if ( !optionSet ) {
    4342                                         elem.selectedIndex = -1;
    4343                                 }
    4344                                 return values;
    4345                         }
    4346                 }
    4347         },
    4348 
    4349         attr: function( elem, name, value ) {
    4350                 var hooks, ret,
    4351                         nType = elem.nodeType;
    4352 
    4353                 // don't get/set attributes on text, comment and attribute nodes
    4354                 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
    4355                         return;
    4356                 }
    4357 
    4358                 // Fallback to prop when attributes are not supported
    4359                 if ( typeof elem.getAttribute === core_strundefined ) {
    4360                         return jQuery.prop( elem, name, value );
    4361                 }
    4362 
    4363                 // All attributes are lowercase
    4364                 // Grab necessary hook if one is defined
    4365                 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
    4366                         name = name.toLowerCase();
    4367                         hooks = jQuery.attrHooks[ name ] ||
    4368                                 ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
    4369                 }
    4370 
    4371                 if ( value !== undefined ) {
    4372 
    4373                         if ( value === null ) {
    4374                                 jQuery.removeAttr( elem, name );
    4375 
    4376                         } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
    4377                                 return ret;
    4378 
    4379                         } else {
    4380                                 elem.setAttribute( name, value + "" );
    4381                                 return value;
    4382                         }
    4383 
    4384                 } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
    4385                         return ret;
    4386 
    4387                 } else {
    4388                         ret = jQuery.find.attr( elem, name );
    4389 
    4390                         // Non-existent attributes return null, we normalize to undefined
    4391                         return ret == null ?
    4392                                 undefined :
    4393                                 ret;
    4394                 }
    4395         },
    4396 
    4397         removeAttr: function( elem, value ) {
    4398                 var name, propName,
    4399                         i = 0,
    4400                         attrNames = value && value.match( core_rnotwhite );
    4401 
    4402                 if ( attrNames && elem.nodeType === 1 ) {
    4403                         while ( (name = attrNames[i++]) ) {
    4404                                 propName = jQuery.propFix[ name ] || name;
    4405 
    4406                                 // Boolean attributes get special treatment (#10870)
    4407                                 if ( jQuery.expr.match.bool.test( name ) ) {
    4408                                         // Set corresponding property to false
    4409                                         if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
    4410                                                 elem[ propName ] = false;
    4411                                         // Support: IE<9
    4412                                         // Also clear defaultChecked/defaultSelected (if appropriate)
    4413                                         } else {
    4414                                                 elem[ jQuery.camelCase( "default-" + name ) ] =
    4415                                                         elem[ propName ] = false;
    4416                                         }
    4417 
    4418                                 // See #9699 for explanation of this approach (setting first, then removal)
    4419                                 } else {
    4420                                         jQuery.attr( elem, name, "" );
    4421                                 }
    4422 
    4423                                 elem.removeAttribute( getSetAttribute ? name : propName );
    4424                         }
    4425                 }
    4426         },
    4427 
    4428         attrHooks: {
    4429                 type: {
    4430                         set: function( elem, value ) {
    4431                                 if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
    4432                                         // Setting the type on a radio button after the value resets the value in IE6-9
    4433                                         // Reset value to default in case type is set after value during creation
    4434                                         var val = elem.value;
    4435                                         elem.setAttribute( "type", value );
    4436                                         if ( val ) {
    4437                                                 elem.value = val;
    4438                                         }
    4439                                         return value;
    4440                                 }
    4441                         }
    4442                 }
    4443         },
    4444 
    4445         propFix: {
    4446                 "for": "htmlFor",
    4447                 "class": "className"
    4448         },
    4449 
    4450         prop: function( elem, name, value ) {
    4451                 var ret, hooks, notxml,
    4452                         nType = elem.nodeType;
    4453 
    4454                 // don't get/set properties on text, comment and attribute nodes
    4455                 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
    4456                         return;
    4457                 }
    4458 
    4459                 notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
    4460 
    4461                 if ( notxml ) {
    4462                         // Fix name and attach hooks
    4463                         name = jQuery.propFix[ name ] || name;
    4464                         hooks = jQuery.propHooks[ name ];
    4465                 }
    4466 
    4467                 if ( value !== undefined ) {
    4468                         return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
    4469                                 ret :
    4470                                 ( elem[ name ] = value );
    4471 
    4472                 } else {
    4473                         return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
    4474                                 ret :
    4475                                 elem[ name ];
    4476                 }
    4477         },
    4478 
    4479         propHooks: {
    4480                 tabIndex: {
    4481                         get: function( elem ) {
    4482                                 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
    4483                                 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
    4484                                 // Use proper attribute retrieval(#12072)
    4485                                 var tabindex = jQuery.find.attr( elem, "tabindex" );
    4486 
    4487                                 return tabindex ?
    4488                                         parseInt( tabindex, 10 ) :
    4489                                         rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
    4490                                                 0 :
    4491                                                 -1;
    4492                         }
    4493                 }
    4494         }
    4495 });
    4496 
    4497 // Hooks for boolean attributes
    4498 boolHook = {
    4499         set: function( elem, value, name ) {
    4500                 if ( value === false ) {
    4501                         // Remove boolean attributes when set to false
    4502                         jQuery.removeAttr( elem, name );
    4503                 } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
    4504                         // IE<8 needs the *property* name
    4505                         elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
    4506 
    4507                 // Use defaultChecked and defaultSelected for oldIE
    4508                 } else {
    4509                         elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
    4510                 }
    4511 
    4512                 return name;
    4513         }
    4514 };
    4515 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
    4516         var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
    4517 
    4518         jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
    4519                 function( elem, name, isXML ) {
    4520                         var fn = jQuery.expr.attrHandle[ name ],
    4521                                 ret = isXML ?
    4522                                         undefined :
    4523                                         /* jshint eqeqeq: false */
    4524                                         (jQuery.expr.attrHandle[ name ] = undefined) !=
    4525                                                 getter( elem, name, isXML ) ?
    4526 
    4527                                                 name.toLowerCase() :
    4528                                                 null;
    4529                         jQuery.expr.attrHandle[ name ] = fn;
    4530                         return ret;
    4531                 } :
    4532                 function( elem, name, isXML ) {
    4533                         return isXML ?
    4534                                 undefined :
    4535                                 elem[ jQuery.camelCase( "default-" + name ) ] ?
    4536                                         name.toLowerCase() :
    4537                                         null;
    4538                 };
    4539 });
    4540 
    4541 // fix oldIE attroperties
    4542 if ( !getSetInput || !getSetAttribute ) {
    4543         jQuery.attrHooks.value = {
    4544                 set: function( elem, value, name ) {
    4545                         if ( jQuery.nodeName( elem, "input" ) ) {
    4546                                 // Does not return so that setAttribute is also used
    4547                                 elem.defaultValue = value;
    4548                         } else {
    4549                                 // Use nodeHook if defined (#1954); otherwise setAttribute is fine
    4550                                 return nodeHook && nodeHook.set( elem, value, name );
    4551                         }
    4552                 }
    4553         };
    4554 }
    4555 
    4556 // IE6/7 do not support getting/setting some attributes with get/setAttribute
    4557 if ( !getSetAttribute ) {
    4558 
    4559         // Use this for any attribute in IE6/7
    4560         // This fixes almost every IE6/7 issue
    4561         nodeHook = {
    4562                 set: function( elem, value, name ) {
    4563                         // Set the existing or create a new attribute node
    4564                         var ret = elem.getAttributeNode( name );
    4565                         if ( !ret ) {
    4566                                 elem.setAttributeNode(
    4567                                         (ret = elem.ownerDocument.createAttribute( name ))
    4568                                 );
    4569                         }
    4570 
    4571                         ret.value = value += "";
    4572 
    4573                         // Break association with cloned elements by also using setAttribute (#9646)
    4574                         return name === "value" || value === elem.getAttribute( name ) ?
    4575                                 value :
    4576                                 undefined;
    4577                 }
    4578         };
    4579         jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
    4580                 // Some attributes are constructed with empty-string values when not defined
    4581                 function( elem, name, isXML ) {
    4582                         var ret;
    4583                         return isXML ?
    4584                                 undefined :
    4585                                 (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
    4586                                         ret.value :
    4587                                         null;
    4588                 };
    4589         jQuery.valHooks.button = {
    4590                 get: function( elem, name ) {
    4591                         var ret = elem.getAttributeNode( name );
    4592                         return ret && ret.specified ?
    4593                                 ret.value :
    4594                                 undefined;
    4595                 },
    4596                 set: nodeHook.set
    4597         };
    4598 
    4599         // Set contenteditable to false on removals(#10429)
    4600         // Setting to empty string throws an error as an invalid value
    4601         jQuery.attrHooks.contenteditable = {
    4602                 set: function( elem, value, name ) {
    4603                         nodeHook.set( elem, value === "" ? false : value, name );
    4604                 }
    4605         };
    4606 
    4607         // Set width and height to auto instead of 0 on empty string( Bug #8150 )
    4608         // This is for removals
    4609         jQuery.each([ "width", "height" ], function( i, name ) {
    4610                 jQuery.attrHooks[ name ] = {
    4611                         set: function( elem, value ) {
    4612                                 if ( value === "" ) {
    4613                                         elem.setAttribute( name, "auto" );
    4614                                         return value;
    4615                                 }
    4616                         }
    4617                 };
    4618         });
    4619 }
    4620 
    4621 
    4622 // Some attributes require a special call on IE
    4623 // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
    4624 if ( !jQuery.support.hrefNormalized ) {
    4625         // href/src property should get the full normalized URL (#10299/#12915)
    4626         jQuery.each([ "href", "src" ], function( i, name ) {
    4627                 jQuery.propHooks[ name ] = {
    4628                         get: function( elem ) {
    4629                                 return elem.getAttribute( name, 4 );
    4630                         }
    4631                 };
    4632         });
    4633 }
    4634 
    4635 if ( !jQuery.support.style ) {
    4636         jQuery.attrHooks.style = {
    4637                 get: function( elem ) {
    4638                         // Return undefined in the case of empty string
    4639                         // Note: IE uppercases css property names, but if we were to .toLowerCase()
    4640                         // .cssText, that would destroy case senstitivity in URL's, like in "background"
    4641                         return elem.style.cssText || undefined;
    4642                 },
    4643                 set: function( elem, value ) {
    4644                         return ( elem.style.cssText = value + "" );
    4645                 }
    4646         };
    4647 }
    4648 
    4649 // Safari mis-reports the default selected property of an option
    4650 // Accessing the parent's selectedIndex property fixes it
    4651 if ( !jQuery.support.optSelected ) {
    4652         jQuery.propHooks.selected = {
    4653                 get: function( elem ) {
    4654                         var parent = elem.parentNode;
    4655 
    4656                         if ( parent ) {
    4657                                 parent.selectedIndex;
    4658 
    4659                                 // Make sure that it also works with optgroups, see #5701
    4660                                 if ( parent.parentNode ) {
    4661                                         parent.parentNode.selectedIndex;
    4662                                 }
    4663                         }
    4664                         return null;
    4665                 }
    4666         };
    4667 }
    4668 
    4669 jQuery.each([
    4670         "tabIndex",
    4671         "readOnly",
    4672         "maxLength",
    4673         "cellSpacing",
    4674         "cellPadding",
    4675         "rowSpan",
    4676         "colSpan",
    4677         "useMap",
    4678         "frameBorder",
    4679         "contentEditable"
    4680 ], function() {
    4681         jQuery.propFix[ this.toLowerCase() ] = this;
    4682 });
    4683 
    4684 // IE6/7 call enctype encoding
    4685 if ( !jQuery.support.enctype ) {
    4686         jQuery.propFix.enctype = "encoding";
    4687 }
    4688 
    4689 // Radios and checkboxes getter/setter
    4690 jQuery.each([ "radio", "checkbox" ], function() {
    4691         jQuery.valHooks[ this ] = {
    4692                 set: function( elem, value ) {
    4693                         if ( jQuery.isArray( value ) ) {
    4694                                 return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
    4695                         }
    4696                 }
    4697         };
    4698         if ( !jQuery.support.checkOn ) {
    4699                 jQuery.valHooks[ this ].get = function( elem ) {
    4700                         // Support: Webkit
    4701                         // "" is returned instead of "on" if a value isn't specified
    4702                         return elem.getAttribute("value") === null ? "on" : elem.value;
    4703                 };
    4704         }
    4705 });
     4192
     4193                div.cloneNode( true ).click();
     4194        }
     4195
     4196        // Execute the test only if not already executed in another module.
     4197        if (support.deleteExpando == null) {
     4198                // Support: IE<9
     4199                support.deleteExpando = true;
     4200                try {
     4201                        delete div.test;
     4202                } catch( e ) {
     4203                        support.deleteExpando = false;
     4204                }
     4205        }
     4206
     4207        // Null elements to avoid leaks in IE.
     4208        fragment = div = input = null;
     4209})();
     4210
     4211
     4212(function() {
     4213        var i, eventName,
     4214                div = document.createElement( "div" );
     4215
     4216        // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
     4217        for ( i in { submit: true, change: true, focusin: true }) {
     4218                eventName = "on" + i;
     4219
     4220                if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
     4221                        // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
     4222                        div.setAttribute( eventName, "t" );
     4223                        support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
     4224                }
     4225        }
     4226
     4227        // Null elements to avoid leaks in IE.
     4228        div = null;
     4229})();
     4230
     4231
    47064232var rformElems = /^(?:input|select|textarea)$/i,
    47074233        rkeyEvent = /^key/,
     
    47634289                                // Discard the second event of a jQuery.event.trigger() and
    47644290                                // when an event is called after a page has unloaded
    4765                                 return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
     4291                                return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
    47664292                                        jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
    47674293                                        undefined;
     
    47724298
    47734299                // Handle multiple events separated by a space
    4774                 types = ( types || "" ).match( core_rnotwhite ) || [""];
     4300                types = ( types || "" ).match( rnotwhite ) || [ "" ];
    47754301                t = types.length;
    47764302                while ( t-- ) {
     
    48584384
    48594385                // Once for each type.namespace in types; type may be omitted
    4860                 types = ( types || "" ).match( core_rnotwhite ) || [""];
     4386                types = ( types || "" ).match( rnotwhite ) || [ "" ];
    48614387                t = types.length;
    48624388                while ( t-- ) {
     
    49234449                        bubbleType, special, tmp, i,
    49244450                        eventPath = [ elem || document ],
    4925                         type = core_hasOwn.call( event, "type" ) ? event.type : event,
    4926                         namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
     4451                        type = hasOwn.call( event, "type" ) ? event.type : event,
     4452                        namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
    49274453
    49284454                cur = tmp = elem = elem || document;
     
    50104536                        // Native handler
    50114537                        handle = ontype && cur[ ontype ];
    5012                         if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
    5013                                 event.preventDefault();
     4538                        if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
     4539                                event.result = handle.apply( cur, data );
     4540                                if ( event.result === false ) {
     4541                                        event.preventDefault();
     4542                                }
    50144543                        }
    50154544                }
     
    50614590                var i, ret, handleObj, matched, j,
    50624591                        handlerQueue = [],
    5063                         args = core_slice.call( arguments ),
     4592                        args = slice.call( arguments ),
    50644593                        handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
    50654594                        special = jQuery.event.special[ event.type ] || {};
     
    53514880                        // #8545, #7054, preventing memory leaks for custom events in IE6-8
    53524881                        // detachEvent needed property on element, by name of that event, to properly expose it to GC
    5353                         if ( typeof elem[ name ] === core_strundefined ) {
     4882                        if ( typeof elem[ name ] === strundefined ) {
    53544883                                elem[ name ] = null;
    53554884                        }
     
    53724901                // Events bubbling up the document may have been marked as prevented
    53734902                // by a handler lower down the tree; reflect the correct value.
    5374                 this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
    5375                         src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
     4903                this.isDefaultPrevented = src.defaultPrevented ||
     4904                                src.defaultPrevented === undefined && (
     4905                                // Support: IE < 9
     4906                                src.returnValue === false ||
     4907                                // Support: Android < 4.0
     4908                                src.getPreventDefault && src.getPreventDefault() ) ?
     4909                        returnTrue :
     4910                        returnFalse;
    53764911
    53774912        // Event type
     
    54675002
    54685003// IE submit delegation
    5469 if ( !jQuery.support.submitBubbles ) {
     5004if ( !support.submitBubbles ) {
    54705005
    54715006        jQuery.event.special.submit = {
     
    55145049
    55155050// IE change delegation and checkbox/radio fix
    5516 if ( !jQuery.support.changeBubbles ) {
     5051if ( !support.changeBubbles ) {
    55175052
    55185053        jQuery.event.special.change = {
     
    55735108
    55745109// Create "bubbling" focus and blur events
    5575 if ( !jQuery.support.focusinBubbles ) {
     5110if ( !support.focusinBubbles ) {
    55765111        jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
    55775112
    5578                 // Attach a single capturing handler while someone wants focusin/focusout
    5579                 var attaches = 0,
    5580                         handler = function( event ) {
     5113                // Attach a single capturing handler on the document while someone wants focusin/focusout
     5114                var handler = function( event ) {
    55815115                                jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
    55825116                        };
     
    55845118                jQuery.event.special[ fix ] = {
    55855119                        setup: function() {
    5586                                 if ( attaches++ === 0 ) {
    5587                                         document.addEventListener( orig, handler, true );
    5588                                 }
     5120                                var doc = this.ownerDocument || this,
     5121                                        attaches = jQuery._data( doc, fix );
     5122
     5123                                if ( !attaches ) {
     5124                                        doc.addEventListener( orig, handler, true );
     5125                                }
     5126                                jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
    55895127                        },
    55905128                        teardown: function() {
    5591                                 if ( --attaches === 0 ) {
    5592                                         document.removeEventListener( orig, handler, true );
     5129                                var doc = this.ownerDocument || this,
     5130                                        attaches = jQuery._data( doc, fix ) - 1;
     5131
     5132                                if ( !attaches ) {
     5133                                        doc.removeEventListener( orig, handler, true );
     5134                                        jQuery._removeData( doc, fix );
     5135                                } else {
     5136                                        jQuery._data( doc, fix, attaches );
    55935137                                }
    55945138                        }
     
    56995243        }
    57005244});
    5701 var isSimple = /^.[^:#\[\.,]*$/,
    5702         rparentsprev = /^(?:parents|prev(?:Until|All))/,
    5703         rneedsContext = jQuery.expr.match.needsContext,
    5704         // methods guaranteed to produce a unique set when starting from a unique set
    5705         guaranteedUnique = {
    5706                 children: true,
    5707                 contents: true,
    5708                 next: true,
    5709                 prev: true
    5710         };
    5711 
    5712 jQuery.fn.extend({
    5713         find: function( selector ) {
    5714                 var i,
    5715                         ret = [],
    5716                         self = this,
    5717                         len = self.length;
    5718 
    5719                 if ( typeof selector !== "string" ) {
    5720                         return this.pushStack( jQuery( selector ).filter(function() {
    5721                                 for ( i = 0; i < len; i++ ) {
    5722                                         if ( jQuery.contains( self[ i ], this ) ) {
    5723                                                 return true;
    5724                                         }
    5725                                 }
    5726                         }) );
    5727                 }
    5728 
    5729                 for ( i = 0; i < len; i++ ) {
    5730                         jQuery.find( selector, self[ i ], ret );
    5731                 }
    5732 
    5733                 // Needed because $( selector, context ) becomes $( context ).find( selector )
    5734                 ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
    5735                 ret.selector = this.selector ? this.selector + " " + selector : selector;
    5736                 return ret;
    5737         },
    5738 
    5739         has: function( target ) {
    5740                 var i,
    5741                         targets = jQuery( target, this ),
    5742                         len = targets.length;
    5743 
    5744                 return this.filter(function() {
    5745                         for ( i = 0; i < len; i++ ) {
    5746                                 if ( jQuery.contains( this, targets[i] ) ) {
    5747                                         return true;
    5748                                 }
    5749                         }
    5750                 });
    5751         },
    5752 
    5753         not: function( selector ) {
    5754                 return this.pushStack( winnow(this, selector || [], true) );
    5755         },
    5756 
    5757         filter: function( selector ) {
    5758                 return this.pushStack( winnow(this, selector || [], false) );
    5759         },
    5760 
    5761         is: function( selector ) {
    5762                 return !!winnow(
    5763                         this,
    5764 
    5765                         // If this is a positional/relative selector, check membership in the returned set
    5766                         // so $("p:first").is("p:last") won't return true for a doc with two "p".
    5767                         typeof selector === "string" && rneedsContext.test( selector ) ?
    5768                                 jQuery( selector ) :
    5769                                 selector || [],
    5770                         false
    5771                 ).length;
    5772         },
    5773 
    5774         closest: function( selectors, context ) {
    5775                 var cur,
    5776                         i = 0,
    5777                         l = this.length,
    5778                         ret = [],
    5779                         pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
    5780                                 jQuery( selectors, context || this.context ) :
    5781                                 0;
    5782 
    5783                 for ( ; i < l; i++ ) {
    5784                         for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
    5785                                 // Always skip document fragments
    5786                                 if ( cur.nodeType < 11 && (pos ?
    5787                                         pos.index(cur) > -1 :
    5788 
    5789                                         // Don't pass non-elements to Sizzle
    5790                                         cur.nodeType === 1 &&
    5791                                                 jQuery.find.matchesSelector(cur, selectors)) ) {
    5792 
    5793                                         cur = ret.push( cur );
    5794                                         break;
    5795                                 }
    5796                         }
    5797                 }
    5798 
    5799                 return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
    5800         },
    5801 
    5802         // Determine the position of an element within
    5803         // the matched set of elements
    5804         index: function( elem ) {
    5805 
    5806                 // No argument, return index in parent
    5807                 if ( !elem ) {
    5808                         return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
    5809                 }
    5810 
    5811                 // index in selector
    5812                 if ( typeof elem === "string" ) {
    5813                         return jQuery.inArray( this[0], jQuery( elem ) );
    5814                 }
    5815 
    5816                 // Locate the position of the desired element
    5817                 return jQuery.inArray(
    5818                         // If it receives a jQuery object, the first element is used
    5819                         elem.jquery ? elem[0] : elem, this );
    5820         },
    5821 
    5822         add: function( selector, context ) {
    5823                 var set = typeof selector === "string" ?
    5824                                 jQuery( selector, context ) :
    5825                                 jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
    5826                         all = jQuery.merge( this.get(), set );
    5827 
    5828                 return this.pushStack( jQuery.unique(all) );
    5829         },
    5830 
    5831         addBack: function( selector ) {
    5832                 return this.add( selector == null ?
    5833                         this.prevObject : this.prevObject.filter(selector)
    5834                 );
    5835         }
    5836 });
    5837 
    5838 function sibling( cur, dir ) {
    5839         do {
    5840                 cur = cur[ dir ];
    5841         } while ( cur && cur.nodeType !== 1 );
    5842 
    5843         return cur;
    5844 }
    5845 
    5846 jQuery.each({
    5847         parent: function( elem ) {
    5848                 var parent = elem.parentNode;
    5849                 return parent && parent.nodeType !== 11 ? parent : null;
    5850         },
    5851         parents: function( elem ) {
    5852                 return jQuery.dir( elem, "parentNode" );
    5853         },
    5854         parentsUntil: function( elem, i, until ) {
    5855                 return jQuery.dir( elem, "parentNode", until );
    5856         },
    5857         next: function( elem ) {
    5858                 return sibling( elem, "nextSibling" );
    5859         },
    5860         prev: function( elem ) {
    5861                 return sibling( elem, "previousSibling" );
    5862         },
    5863         nextAll: function( elem ) {
    5864                 return jQuery.dir( elem, "nextSibling" );
    5865         },
    5866         prevAll: function( elem ) {
    5867                 return jQuery.dir( elem, "previousSibling" );
    5868         },
    5869         nextUntil: function( elem, i, until ) {
    5870                 return jQuery.dir( elem, "nextSibling", until );
    5871         },
    5872         prevUntil: function( elem, i, until ) {
    5873                 return jQuery.dir( elem, "previousSibling", until );
    5874         },
    5875         siblings: function( elem ) {
    5876                 return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
    5877         },
    5878         children: function( elem ) {
    5879                 return jQuery.sibling( elem.firstChild );
    5880         },
    5881         contents: function( elem ) {
    5882                 return jQuery.nodeName( elem, "iframe" ) ?
    5883                         elem.contentDocument || elem.contentWindow.document :
    5884                         jQuery.merge( [], elem.childNodes );
    5885         }
    5886 }, function( name, fn ) {
    5887         jQuery.fn[ name ] = function( until, selector ) {
    5888                 var ret = jQuery.map( this, fn, until );
    5889 
    5890                 if ( name.slice( -5 ) !== "Until" ) {
    5891                         selector = until;
    5892                 }
    5893 
    5894                 if ( selector && typeof selector === "string" ) {
    5895                         ret = jQuery.filter( selector, ret );
    5896                 }
    5897 
    5898                 if ( this.length > 1 ) {
    5899                         // Remove duplicates
    5900                         if ( !guaranteedUnique[ name ] ) {
    5901                                 ret = jQuery.unique( ret );
    5902                         }
    5903 
    5904                         // Reverse order for parents* and prev-derivatives
    5905                         if ( rparentsprev.test( name ) ) {
    5906                                 ret = ret.reverse();
    5907                         }
    5908                 }
    5909 
    5910                 return this.pushStack( ret );
    5911         };
    5912 });
    5913 
    5914 jQuery.extend({
    5915         filter: function( expr, elems, not ) {
    5916                 var elem = elems[ 0 ];
    5917 
    5918                 if ( not ) {
    5919                         expr = ":not(" + expr + ")";
    5920                 }
    5921 
    5922                 return elems.length === 1 && elem.nodeType === 1 ?
    5923                         jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
    5924                         jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
    5925                                 return elem.nodeType === 1;
    5926                         }));
    5927         },
    5928 
    5929         dir: function( elem, dir, until ) {
    5930                 var matched = [],
    5931                         cur = elem[ dir ];
    5932 
    5933                 while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
    5934                         if ( cur.nodeType === 1 ) {
    5935                                 matched.push( cur );
    5936                         }
    5937                         cur = cur[dir];
    5938                 }
    5939                 return matched;
    5940         },
    5941 
    5942         sibling: function( n, elem ) {
    5943                 var r = [];
    5944 
    5945                 for ( ; n; n = n.nextSibling ) {
    5946                         if ( n.nodeType === 1 && n !== elem ) {
    5947                                 r.push( n );
    5948                         }
    5949                 }
    5950 
    5951                 return r;
    5952         }
    5953 });
    5954 
    5955 // Implement the identical functionality for filter and not
    5956 function winnow( elements, qualifier, not ) {
    5957         if ( jQuery.isFunction( qualifier ) ) {
    5958                 return jQuery.grep( elements, function( elem, i ) {
    5959                         /* jshint -W018 */
    5960                         return !!qualifier.call( elem, i, elem ) !== not;
    5961                 });
    5962 
    5963         }
    5964 
    5965         if ( qualifier.nodeType ) {
    5966                 return jQuery.grep( elements, function( elem ) {
    5967                         return ( elem === qualifier ) !== not;
    5968                 });
    5969 
    5970         }
    5971 
    5972         if ( typeof qualifier === "string" ) {
    5973                 if ( isSimple.test( qualifier ) ) {
    5974                         return jQuery.filter( qualifier, elements, not );
    5975                 }
    5976 
    5977                 qualifier = jQuery.filter( qualifier, elements );
    5978         }
    5979 
    5980         return jQuery.grep( elements, function( elem ) {
    5981                 return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
    5982         });
    5983 }
     5245
     5246
    59845247function createSafeFragment( document ) {
    59855248        var list = nodeNames.split( "|" ),
     
    60065269        rhtml = /<|&#?\w+;/,
    60075270        rnoInnerhtml = /<(?:script|style|link)/i,
    6008         manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
    60095271        // checked="checked" or checked
    60105272        rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
     
    60265288                // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
    60275289                // unless wrapped in a div with non-breaking characters in front of it.
    6028                 _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
     5290                _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
    60295291        },
    60305292        safeFragment = createSafeFragment( document ),
     
    60355297wrapMap.th = wrapMap.td;
    60365298
    6037 jQuery.fn.extend({
    6038         text: function( value ) {
    6039                 return jQuery.access( this, function( value ) {
    6040                         return value === undefined ?
    6041                                 jQuery.text( this ) :
    6042                                 this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
    6043                 }, null, value, arguments.length );
    6044         },
    6045 
    6046         append: function() {
    6047                 return this.domManip( arguments, function( elem ) {
    6048                         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    6049                                 var target = manipulationTarget( this, elem );
    6050                                 target.appendChild( elem );
    6051                         }
    6052                 });
    6053         },
    6054 
    6055         prepend: function() {
    6056                 return this.domManip( arguments, function( elem ) {
    6057                         if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
    6058                                 var target = manipulationTarget( this, elem );
    6059                                 target.insertBefore( elem, target.firstChild );
    6060                         }
    6061                 });
    6062         },
    6063 
    6064         before: function() {
    6065                 return this.domManip( arguments, function( elem ) {
    6066                         if ( this.parentNode ) {
    6067                                 this.parentNode.insertBefore( elem, this );
    6068                         }
    6069                 });
    6070         },
    6071 
    6072         after: function() {
    6073                 return this.domManip( arguments, function( elem ) {
    6074                         if ( this.parentNode ) {
    6075                                 this.parentNode.insertBefore( elem, this.nextSibling );
    6076                         }
    6077                 });
    6078         },
    6079 
    6080         // keepData is for internal use only--do not document
    6081         remove: function( selector, keepData ) {
    6082                 var elem,
    6083                         elems = selector ? jQuery.filter( selector, this ) : this,
    6084                         i = 0;
    6085 
    6086                 for ( ; (elem = elems[i]) != null; i++ ) {
    6087 
    6088                         if ( !keepData && elem.nodeType === 1 ) {
    6089                                 jQuery.cleanData( getAll( elem ) );
    6090                         }
    6091 
    6092                         if ( elem.parentNode ) {
    6093                                 if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
    6094                                         setGlobalEval( getAll( elem, "script" ) );
    6095                                 }
    6096                                 elem.parentNode.removeChild( elem );
    6097                         }
    6098                 }
    6099 
    6100                 return this;
    6101         },
    6102 
    6103         empty: function() {
    6104                 var elem,
    6105                         i = 0;
    6106 
    6107                 for ( ; (elem = this[i]) != null; i++ ) {
    6108                         // Remove element nodes and prevent memory leaks
    6109                         if ( elem.nodeType === 1 ) {
    6110                                 jQuery.cleanData( getAll( elem, false ) );
    6111                         }
    6112 
    6113                         // Remove any remaining nodes
    6114                         while ( elem.firstChild ) {
    6115                                 elem.removeChild( elem.firstChild );
    6116                         }
    6117 
    6118                         // If this is a select, ensure that it displays empty (#12336)
    6119                         // Support: IE<9
    6120                         if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
    6121                                 elem.options.length = 0;
    6122                         }
    6123                 }
    6124 
    6125                 return this;
    6126         },
    6127 
    6128         clone: function( dataAndEvents, deepDataAndEvents ) {
    6129                 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
    6130                 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
    6131 
    6132                 return this.map( function () {
    6133                         return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
    6134                 });
    6135         },
    6136 
    6137         html: function( value ) {
    6138                 return jQuery.access( this, function( value ) {
    6139                         var elem = this[0] || {},
    6140                                 i = 0,
    6141                                 l = this.length;
    6142 
    6143                         if ( value === undefined ) {
    6144                                 return elem.nodeType === 1 ?
    6145                                         elem.innerHTML.replace( rinlinejQuery, "" ) :
    6146                                         undefined;
    6147                         }
    6148 
    6149                         // See if we can take a shortcut and just use innerHTML
    6150                         if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
    6151                                 ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
    6152                                 ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
    6153                                 !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
    6154 
    6155                                 value = value.replace( rxhtmlTag, "<$1></$2>" );
    6156 
    6157                                 try {
    6158                                         for (; i < l; i++ ) {
    6159                                                 // Remove element nodes and prevent memory leaks
    6160                                                 elem = this[i] || {};
    6161                                                 if ( elem.nodeType === 1 ) {
    6162                                                         jQuery.cleanData( getAll( elem, false ) );
    6163                                                         elem.innerHTML = value;
    6164                                                 }
    6165                                         }
    6166 
    6167                                         elem = 0;
    6168 
    6169                                 // If using innerHTML throws an exception, use the fallback method
    6170                                 } catch(e) {}
    6171                         }
    6172 
    6173                         if ( elem ) {
    6174                                 this.empty().append( value );
    6175                         }
    6176                 }, null, value, arguments.length );
    6177         },
    6178 
    6179         replaceWith: function() {
    6180                 var
    6181                         // Snapshot the DOM in case .domManip sweeps something relevant into its fragment
    6182                         args = jQuery.map( this, function( elem ) {
    6183                                 return [ elem.nextSibling, elem.parentNode ];
    6184                         }),
    6185                         i = 0;
    6186 
    6187                 // Make the changes, replacing each context element with the new content
    6188                 this.domManip( arguments, function( elem ) {
    6189                         var next = args[ i++ ],
    6190                                 parent = args[ i++ ];
    6191 
    6192                         if ( parent ) {
    6193                                 // Don't use the snapshot next if it has moved (#13810)
    6194                                 if ( next && next.parentNode !== parent ) {
    6195                                         next = this.nextSibling;
    6196                                 }
    6197                                 jQuery( this ).remove();
    6198                                 parent.insertBefore( elem, next );
    6199                         }
    6200                 // Allow new content to include elements from the context set
    6201                 }, true );
    6202 
    6203                 // Force removal if there was no new content (e.g., from empty arguments)
    6204                 return i ? this : this.remove();
    6205         },
    6206 
    6207         detach: function( selector ) {
    6208                 return this.remove( selector, true );
    6209         },
    6210 
    6211         domManip: function( args, callback, allowIntersection ) {
    6212 
    6213                 // Flatten any nested arrays
    6214                 args = core_concat.apply( [], args );
    6215 
    6216                 var first, node, hasScripts,
    6217                         scripts, doc, fragment,
    6218                         i = 0,
    6219                         l = this.length,
    6220                         set = this,
    6221                         iNoClone = l - 1,
    6222                         value = args[0],
    6223                         isFunction = jQuery.isFunction( value );
    6224 
    6225                 // We can't cloneNode fragments that contain checked, in WebKit
    6226                 if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
    6227                         return this.each(function( index ) {
    6228                                 var self = set.eq( index );
    6229                                 if ( isFunction ) {
    6230                                         args[0] = value.call( this, index, self.html() );
    6231                                 }
    6232                                 self.domManip( args, callback, allowIntersection );
    6233                         });
    6234                 }
    6235 
    6236                 if ( l ) {
    6237                         fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );
    6238                         first = fragment.firstChild;
    6239 
    6240                         if ( fragment.childNodes.length === 1 ) {
    6241                                 fragment = first;
    6242                         }
    6243 
    6244                         if ( first ) {
    6245                                 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
    6246                                 hasScripts = scripts.length;
    6247 
    6248                                 // Use the original fragment for the last item instead of the first because it can end up
    6249                                 // being emptied incorrectly in certain situations (#8070).
    6250                                 for ( ; i < l; i++ ) {
    6251                                         node = fragment;
    6252 
    6253                                         if ( i !== iNoClone ) {
    6254                                                 node = jQuery.clone( node, true, true );
    6255 
    6256                                                 // Keep references to cloned scripts for later restoration
    6257                                                 if ( hasScripts ) {
    6258                                                         jQuery.merge( scripts, getAll( node, "script" ) );
    6259                                                 }
    6260                                         }
    6261 
    6262                                         callback.call( this[i], node, i );
    6263                                 }
    6264 
    6265                                 if ( hasScripts ) {
    6266                                         doc = scripts[ scripts.length - 1 ].ownerDocument;
    6267 
    6268                                         // Reenable scripts
    6269                                         jQuery.map( scripts, restoreScript );
    6270 
    6271                                         // Evaluate executable scripts on first document insertion
    6272                                         for ( i = 0; i < hasScripts; i++ ) {
    6273                                                 node = scripts[ i ];
    6274                                                 if ( rscriptType.test( node.type || "" ) &&
    6275                                                         !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
    6276 
    6277                                                         if ( node.src ) {
    6278                                                                 // Hope ajax is available...
    6279                                                                 jQuery._evalUrl( node.src );
    6280                                                         } else {
    6281                                                                 jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
    6282                                                         }
    6283                                                 }
    6284                                         }
    6285                                 }
    6286 
    6287                                 // Fix #11809: Avoid leaking memory
    6288                                 fragment = first = null;
    6289                         }
    6290                 }
    6291 
    6292                 return this;
    6293         }
    6294 });
     5299function getAll( context, tag ) {
     5300        var elems, elem,
     5301                i = 0,
     5302                found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
     5303                        typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
     5304                        undefined;
     5305
     5306        if ( !found ) {
     5307                for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
     5308                        if ( !tag || jQuery.nodeName( elem, tag ) ) {
     5309                                found.push( elem );
     5310                        } else {
     5311                                jQuery.merge( found, getAll( elem, tag ) );
     5312                        }
     5313                }
     5314        }
     5315
     5316        return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
     5317                jQuery.merge( [ context ], found ) :
     5318                found;
     5319}
     5320
     5321// Used in buildFragment, fixes the defaultChecked property
     5322function fixDefaultChecked( elem ) {
     5323        if ( rcheckableType.test( elem.type ) ) {
     5324                elem.defaultChecked = elem.checked;
     5325        }
     5326}
    62955327
    62965328// Support: IE<8
     
    62985330function manipulationTarget( elem, content ) {
    62995331        return jQuery.nodeName( elem, "table" ) &&
    6300                 jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?
     5332                jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
    63015333
    63025334                elem.getElementsByTagName("tbody")[0] ||
     
    63685400
    63695401        // IE6-8 copies events bound via attachEvent when using cloneNode.
    6370         if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
     5402        if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
    63715403                data = jQuery._data( dest );
    63725404
     
    63955427                // If the src has innerHTML and the destination does not,
    63965428                // copy the src.innerHTML into the dest.innerHTML. #10324
    6397                 if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
     5429                if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
    63985430                        dest.innerHTML = src.innerHTML;
    63995431                }
    64005432
    6401         } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
     5433        } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
    64025434                // IE6-8 fails to persist the checked state of a cloned checkbox
    64035435                // or radio button. Worse, IE6-7 fail to give the cloned element
     
    64235455        }
    64245456}
     5457
     5458jQuery.extend({
     5459        clone: function( elem, dataAndEvents, deepDataAndEvents ) {
     5460                var destElements, node, clone, i, srcElements,
     5461                        inPage = jQuery.contains( elem.ownerDocument, elem );
     5462
     5463                if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
     5464                        clone = elem.cloneNode( true );
     5465
     5466                // IE<=8 does not properly clone detached, unknown element nodes
     5467                } else {
     5468                        fragmentDiv.innerHTML = elem.outerHTML;
     5469                        fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
     5470                }
     5471
     5472                if ( (!support.noCloneEvent || !support.noCloneChecked) &&
     5473                                (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
     5474
     5475                        // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
     5476                        destElements = getAll( clone );
     5477                        srcElements = getAll( elem );
     5478
     5479                        // Fix all IE cloning issues
     5480                        for ( i = 0; (node = srcElements[i]) != null; ++i ) {
     5481                                // Ensure that the destination node is not null; Fixes #9587
     5482                                if ( destElements[i] ) {
     5483                                        fixCloneNodeIssues( node, destElements[i] );
     5484                                }
     5485                        }
     5486                }
     5487
     5488                // Copy the events from the original to the clone
     5489                if ( dataAndEvents ) {
     5490                        if ( deepDataAndEvents ) {
     5491                                srcElements = srcElements || getAll( elem );
     5492                                destElements = destElements || getAll( clone );
     5493
     5494                                for ( i = 0; (node = srcElements[i]) != null; i++ ) {
     5495                                        cloneCopyEvent( node, destElements[i] );
     5496                                }
     5497                        } else {
     5498                                cloneCopyEvent( elem, clone );
     5499                        }
     5500                }
     5501
     5502                // Preserve script evaluation history
     5503                destElements = getAll( clone, "script" );
     5504                if ( destElements.length > 0 ) {
     5505                        setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
     5506                }
     5507
     5508                destElements = srcElements = node = null;
     5509
     5510                // Return the cloned set
     5511                return clone;
     5512        },
     5513
     5514        buildFragment: function( elems, context, scripts, selection ) {
     5515                var j, elem, contains,
     5516                        tmp, tag, tbody, wrap,
     5517                        l = elems.length,
     5518
     5519                        // Ensure a safe fragment
     5520                        safe = createSafeFragment( context ),
     5521
     5522                        nodes = [],
     5523                        i = 0;
     5524
     5525                for ( ; i < l; i++ ) {
     5526                        elem = elems[ i ];
     5527
     5528                        if ( elem || elem === 0 ) {
     5529
     5530                                // Add nodes directly
     5531                                if ( jQuery.type( elem ) === "object" ) {
     5532                                        jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
     5533
     5534                                // Convert non-html into a text node
     5535                                } else if ( !rhtml.test( elem ) ) {
     5536                                        nodes.push( context.createTextNode( elem ) );
     5537
     5538                                // Convert html into DOM nodes
     5539                                } else {
     5540                                        tmp = tmp || safe.appendChild( context.createElement("div") );
     5541
     5542                                        // Deserialize a standard representation
     5543                                        tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
     5544                                        wrap = wrapMap[ tag ] || wrapMap._default;
     5545
     5546                                        tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
     5547
     5548                                        // Descend through wrappers to the right content
     5549                                        j = wrap[0];
     5550                                        while ( j-- ) {
     5551                                                tmp = tmp.lastChild;
     5552                                        }
     5553
     5554                                        // Manually add leading whitespace removed by IE
     5555                                        if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
     5556                                                nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
     5557                                        }
     5558
     5559                                        // Remove IE's autoinserted <tbody> from table fragments
     5560                                        if ( !support.tbody ) {
     5561
     5562                                                // String was a <table>, *may* have spurious <tbody>
     5563                                                elem = tag === "table" && !rtbody.test( elem ) ?
     5564                                                        tmp.firstChild :
     5565
     5566                                                        // String was a bare <thead> or <tfoot>
     5567                                                        wrap[1] === "<table>" && !rtbody.test( elem ) ?
     5568                                                                tmp :
     5569                                                                0;
     5570
     5571                                                j = elem && elem.childNodes.length;
     5572                                                while ( j-- ) {
     5573                                                        if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
     5574                                                                elem.removeChild( tbody );
     5575                                                        }
     5576                                                }
     5577                                        }
     5578
     5579                                        jQuery.merge( nodes, tmp.childNodes );
     5580
     5581                                        // Fix #12392 for WebKit and IE > 9
     5582                                        tmp.textContent = "";
     5583
     5584                                        // Fix #12392 for oldIE
     5585                                        while ( tmp.firstChild ) {
     5586                                                tmp.removeChild( tmp.firstChild );
     5587                                        }
     5588
     5589                                        // Remember the top-level container for proper cleanup
     5590                                        tmp = safe.lastChild;
     5591                                }
     5592                        }
     5593                }
     5594
     5595                // Fix #11356: Clear elements from fragment
     5596                if ( tmp ) {
     5597                        safe.removeChild( tmp );
     5598                }
     5599
     5600                // Reset defaultChecked for any radios and checkboxes
     5601                // about to be appended to the DOM in IE 6/7 (#8060)
     5602                if ( !support.appendChecked ) {
     5603                        jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
     5604                }
     5605
     5606                i = 0;
     5607                while ( (elem = nodes[ i++ ]) ) {
     5608
     5609                        // #4087 - If origin and destination elements are the same, and this is
     5610                        // that element, do not do anything
     5611                        if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
     5612                                continue;
     5613                        }
     5614
     5615                        contains = jQuery.contains( elem.ownerDocument, elem );
     5616
     5617                        // Append to fragment
     5618                        tmp = getAll( safe.appendChild( elem ), "script" );
     5619
     5620                        // Preserve script evaluation history
     5621                        if ( contains ) {
     5622                                setGlobalEval( tmp );
     5623                        }
     5624
     5625                        // Capture executables
     5626                        if ( scripts ) {
     5627                                j = 0;
     5628                                while ( (elem = tmp[ j++ ]) ) {
     5629                                        if ( rscriptType.test( elem.type || "" ) ) {
     5630                                                scripts.push( elem );
     5631                                        }
     5632                                }
     5633                        }
     5634                }
     5635
     5636                tmp = null;
     5637
     5638                return safe;
     5639        },
     5640
     5641        cleanData: function( elems, /* internal */ acceptData ) {
     5642                var elem, type, id, data,
     5643                        i = 0,
     5644                        internalKey = jQuery.expando,
     5645                        cache = jQuery.cache,
     5646                        deleteExpando = support.deleteExpando,
     5647                        special = jQuery.event.special;
     5648
     5649                for ( ; (elem = elems[i]) != null; i++ ) {
     5650                        if ( acceptData || jQuery.acceptData( elem ) ) {
     5651
     5652                                id = elem[ internalKey ];
     5653                                data = id && cache[ id ];
     5654
     5655                                if ( data ) {
     5656                                        if ( data.events ) {
     5657                                                for ( type in data.events ) {
     5658                                                        if ( special[ type ] ) {
     5659                                                                jQuery.event.remove( elem, type );
     5660
     5661                                                        // This is a shortcut to avoid jQuery.event.remove's overhead
     5662                                                        } else {
     5663                                                                jQuery.removeEvent( elem, type, data.handle );
     5664                                                        }
     5665                                                }
     5666                                        }
     5667
     5668                                        // Remove cache only if it was not already removed by jQuery.event.remove
     5669                                        if ( cache[ id ] ) {
     5670
     5671                                                delete cache[ id ];
     5672
     5673                                                // IE does not allow us to delete expando properties from nodes,
     5674                                                // nor does it have a removeAttribute function on Document nodes;
     5675                                                // we must handle all of these cases
     5676                                                if ( deleteExpando ) {
     5677                                                        delete elem[ internalKey ];
     5678
     5679                                                } else if ( typeof elem.removeAttribute !== strundefined ) {
     5680                                                        elem.removeAttribute( internalKey );
     5681
     5682                                                } else {
     5683                                                        elem[ internalKey ] = null;
     5684                                                }
     5685
     5686                                                deletedIds.push( id );
     5687                                        }
     5688                                }
     5689                        }
     5690                }
     5691        }
     5692});
     5693
     5694jQuery.fn.extend({
     5695        text: function( value ) {
     5696                return access( this, function( value ) {
     5697                        return value === undefined ?
     5698                                jQuery.text( this ) :
     5699                                this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
     5700                }, null, value, arguments.length );
     5701        },
     5702
     5703        append: function() {
     5704                return this.domManip( arguments, function( elem ) {
     5705                        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
     5706                                var target = manipulationTarget( this, elem );
     5707                                target.appendChild( elem );
     5708                        }
     5709                });
     5710        },
     5711
     5712        prepend: function() {
     5713                return this.domManip( arguments, function( elem ) {
     5714                        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
     5715                                var target = manipulationTarget( this, elem );
     5716                                target.insertBefore( elem, target.firstChild );
     5717                        }
     5718                });
     5719        },
     5720
     5721        before: function() {
     5722                return this.domManip( arguments, function( elem ) {
     5723                        if ( this.parentNode ) {
     5724                                this.parentNode.insertBefore( elem, this );
     5725                        }
     5726                });
     5727        },
     5728
     5729        after: function() {
     5730                return this.domManip( arguments, function( elem ) {
     5731                        if ( this.parentNode ) {
     5732                                this.parentNode.insertBefore( elem, this.nextSibling );
     5733                        }
     5734                });
     5735        },
     5736
     5737        remove: function( selector, keepData /* Internal Use Only */ ) {
     5738                var elem,
     5739                        elems = selector ? jQuery.filter( selector, this ) : this,
     5740                        i = 0;
     5741
     5742                for ( ; (elem = elems[i]) != null; i++ ) {
     5743
     5744                        if ( !keepData && elem.nodeType === 1 ) {
     5745                                jQuery.cleanData( getAll( elem ) );
     5746                        }
     5747
     5748                        if ( elem.parentNode ) {
     5749                                if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
     5750                                        setGlobalEval( getAll( elem, "script" ) );
     5751                                }
     5752                                elem.parentNode.removeChild( elem );
     5753                        }
     5754                }
     5755
     5756                return this;
     5757        },
     5758
     5759        empty: function() {
     5760                var elem,
     5761                        i = 0;
     5762
     5763                for ( ; (elem = this[i]) != null; i++ ) {
     5764                        // Remove element nodes and prevent memory leaks
     5765                        if ( elem.nodeType === 1 ) {
     5766                                jQuery.cleanData( getAll( elem, false ) );
     5767                        }
     5768
     5769                        // Remove any remaining nodes
     5770                        while ( elem.firstChild ) {
     5771                                elem.removeChild( elem.firstChild );
     5772                        }
     5773
     5774                        // If this is a select, ensure that it displays empty (#12336)
     5775                        // Support: IE<9
     5776                        if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
     5777                                elem.options.length = 0;
     5778                        }
     5779                }
     5780
     5781                return this;
     5782        },
     5783
     5784        clone: function( dataAndEvents, deepDataAndEvents ) {
     5785                dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
     5786                deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
     5787
     5788                return this.map(function() {
     5789                        return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
     5790                });
     5791        },
     5792
     5793        html: function( value ) {
     5794                return access( this, function( value ) {
     5795                        var elem = this[ 0 ] || {},
     5796                                i = 0,
     5797                                l = this.length;
     5798
     5799                        if ( value === undefined ) {
     5800                                return elem.nodeType === 1 ?
     5801                                        elem.innerHTML.replace( rinlinejQuery, "" ) :
     5802                                        undefined;
     5803                        }
     5804
     5805                        // See if we can take a shortcut and just use innerHTML
     5806                        if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
     5807                                ( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
     5808                                ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
     5809                                !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
     5810
     5811                                value = value.replace( rxhtmlTag, "<$1></$2>" );
     5812
     5813                                try {
     5814                                        for (; i < l; i++ ) {
     5815                                                // Remove element nodes and prevent memory leaks
     5816                                                elem = this[i] || {};
     5817                                                if ( elem.nodeType === 1 ) {
     5818                                                        jQuery.cleanData( getAll( elem, false ) );
     5819                                                        elem.innerHTML = value;
     5820                                                }
     5821                                        }
     5822
     5823                                        elem = 0;
     5824
     5825                                // If using innerHTML throws an exception, use the fallback method
     5826                                } catch(e) {}
     5827                        }
     5828
     5829                        if ( elem ) {
     5830                                this.empty().append( value );
     5831                        }
     5832                }, null, value, arguments.length );
     5833        },
     5834
     5835        replaceWith: function() {
     5836                var arg = arguments[ 0 ];
     5837
     5838                // Make the changes, replacing each context element with the new content
     5839                this.domManip( arguments, function( elem ) {
     5840                        arg = this.parentNode;
     5841
     5842                        jQuery.cleanData( getAll( this ) );
     5843
     5844                        if ( arg ) {
     5845                                arg.replaceChild( elem, this );
     5846                        }
     5847                });
     5848
     5849                // Force removal if there was no new content (e.g., from empty arguments)
     5850                return arg && (arg.length || arg.nodeType) ? this : this.remove();
     5851        },
     5852
     5853        detach: function( selector ) {
     5854                return this.remove( selector, true );
     5855        },
     5856
     5857        domManip: function( args, callback ) {
     5858
     5859                // Flatten any nested arrays
     5860                args = concat.apply( [], args );
     5861
     5862                var first, node, hasScripts,
     5863                        scripts, doc, fragment,
     5864                        i = 0,
     5865                        l = this.length,
     5866                        set = this,
     5867                        iNoClone = l - 1,
     5868                        value = args[0],
     5869                        isFunction = jQuery.isFunction( value );
     5870
     5871                // We can't cloneNode fragments that contain checked, in WebKit
     5872                if ( isFunction ||
     5873                                ( l > 1 && typeof value === "string" &&
     5874                                        !support.checkClone && rchecked.test( value ) ) ) {
     5875                        return this.each(function( index ) {
     5876                                var self = set.eq( index );
     5877                                if ( isFunction ) {
     5878                                        args[0] = value.call( this, index, self.html() );
     5879                                }
     5880                                self.domManip( args, callback );
     5881                        });
     5882                }
     5883
     5884                if ( l ) {
     5885                        fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
     5886                        first = fragment.firstChild;
     5887
     5888                        if ( fragment.childNodes.length === 1 ) {
     5889                                fragment = first;
     5890                        }
     5891
     5892                        if ( first ) {
     5893                                scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
     5894                                hasScripts = scripts.length;
     5895
     5896                                // Use the original fragment for the last item instead of the first because it can end up
     5897                                // being emptied incorrectly in certain situations (#8070).
     5898                                for ( ; i < l; i++ ) {
     5899                                        node = fragment;
     5900
     5901                                        if ( i !== iNoClone ) {
     5902                                                node = jQuery.clone( node, true, true );
     5903
     5904                                                // Keep references to cloned scripts for later restoration
     5905                                                if ( hasScripts ) {
     5906                                                        jQuery.merge( scripts, getAll( node, "script" ) );
     5907                                                }
     5908                                        }
     5909
     5910                                        callback.call( this[i], node, i );
     5911                                }
     5912
     5913                                if ( hasScripts ) {
     5914                                        doc = scripts[ scripts.length - 1 ].ownerDocument;
     5915
     5916                                        // Reenable scripts
     5917                                        jQuery.map( scripts, restoreScript );
     5918
     5919                                        // Evaluate executable scripts on first document insertion
     5920                                        for ( i = 0; i < hasScripts; i++ ) {
     5921                                                node = scripts[ i ];
     5922                                                if ( rscriptType.test( node.type || "" ) &&
     5923                                                        !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
     5924
     5925                                                        if ( node.src ) {
     5926                                                                // Optional AJAX dependency, but won't run scripts if not present
     5927                                                                if ( jQuery._evalUrl ) {
     5928                                                                        jQuery._evalUrl( node.src );
     5929                                                                }
     5930                                                        } else {
     5931                                                                jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
     5932                                                        }
     5933                                                }
     5934                                        }
     5935                                }
     5936
     5937                                // Fix #11809: Avoid leaking memory
     5938                                fragment = first = null;
     5939                        }
     5940                }
     5941
     5942                return this;
     5943        }
     5944});
    64255945
    64265946jQuery.each({
     
    64435963
    64445964                        // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
    6445                         core_push.apply( ret, elems.get() );
     5965                        push.apply( ret, elems.get() );
    64465966                }
    64475967
     
    64505970});
    64515971
    6452 function getAll( context, tag ) {
    6453         var elems, elem,
    6454                 i = 0,
    6455                 found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
    6456                         typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
    6457                         undefined;
    6458 
    6459         if ( !found ) {
    6460                 for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
    6461                         if ( !tag || jQuery.nodeName( elem, tag ) ) {
    6462                                 found.push( elem );
    6463                         } else {
    6464                                 jQuery.merge( found, getAll( elem, tag ) );
    6465                         }
    6466                 }
    6467         }
    6468 
    6469         return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
    6470                 jQuery.merge( [ context ], found ) :
    6471                 found;
     5972
     5973var iframe,
     5974        elemdisplay = {};
     5975
     5976/**
     5977 * Retrieve the actual display of a element
     5978 * @param {String} name nodeName of the element
     5979 * @param {Object} doc Document object
     5980 */
     5981// Called only from within defaultDisplay
     5982function actualDisplay( name, doc ) {
     5983        var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
     5984
     5985                // getDefaultComputedStyle might be reliably used only on attached element
     5986                display = window.getDefaultComputedStyle ?
     5987
     5988                        // Use of this method is a temporary fix (more like optmization) until something better comes along,
     5989                        // since it was removed from specification and supported only in FF
     5990                        window.getDefaultComputedStyle( elem[ 0 ] ).display : jQuery.css( elem[ 0 ], "display" );
     5991
     5992        // We don't have any data stored on the element,
     5993        // so use "detach" method as fast way to get rid of the element
     5994        elem.detach();
     5995
     5996        return display;
    64725997}
    64735998
    6474 // Used in buildFragment, fixes the defaultChecked property
    6475 function fixDefaultChecked( elem ) {
    6476         if ( manipulation_rcheckableType.test( elem.type ) ) {
    6477                 elem.defaultChecked = elem.checked;
    6478         }
     5999/**
     6000 * Try to determine the default display value of an element
     6001 * @param {String} nodeName
     6002 */
     6003function defaultDisplay( nodeName ) {
     6004        var doc = document,
     6005                display = elemdisplay[ nodeName ];
     6006
     6007        if ( !display ) {
     6008                display = actualDisplay( nodeName, doc );
     6009
     6010                // If the simple way fails, read from inside an iframe
     6011                if ( display === "none" || !display ) {
     6012
     6013                        // Use the already-created iframe if possible
     6014                        iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
     6015
     6016                        // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
     6017                        doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
     6018
     6019                        // Support: IE
     6020                        doc.write();
     6021                        doc.close();
     6022
     6023                        display = actualDisplay( nodeName, doc );
     6024                        iframe.detach();
     6025                }
     6026
     6027                // Store the correct default display
     6028                elemdisplay[ nodeName ] = display;
     6029        }
     6030
     6031        return display;
    64796032}
    64806033
    6481 jQuery.extend({
    6482         clone: function( elem, dataAndEvents, deepDataAndEvents ) {
    6483                 var destElements, node, clone, i, srcElements,
    6484                         inPage = jQuery.contains( elem.ownerDocument, elem );
    6485 
    6486                 if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
    6487                         clone = elem.cloneNode( true );
    6488 
    6489                 // IE<=8 does not properly clone detached, unknown element nodes
    6490                 } else {
    6491                         fragmentDiv.innerHTML = elem.outerHTML;
    6492                         fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
    6493                 }
    6494 
    6495                 if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
    6496                                 (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
    6497 
    6498                         // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
    6499                         destElements = getAll( clone );
    6500                         srcElements = getAll( elem );
    6501 
    6502                         // Fix all IE cloning issues
    6503                         for ( i = 0; (node = srcElements[i]) != null; ++i ) {
    6504                                 // Ensure that the destination node is not null; Fixes #9587
    6505                                 if ( destElements[i] ) {
    6506                                         fixCloneNodeIssues( node, destElements[i] );
    6507                                 }
    6508                         }
    6509                 }
    6510 
    6511                 // Copy the events from the original to the clone
    6512                 if ( dataAndEvents ) {
    6513                         if ( deepDataAndEvents ) {
    6514                                 srcElements = srcElements || getAll( elem );
    6515                                 destElements = destElements || getAll( clone );
    6516 
    6517                                 for ( i = 0; (node = srcElements[i]) != null; i++ ) {
    6518                                         cloneCopyEvent( node, destElements[i] );
    6519                                 }
    6520                         } else {
    6521                                 cloneCopyEvent( elem, clone );
    6522                         }
    6523                 }
    6524 
    6525                 // Preserve script evaluation history
    6526                 destElements = getAll( clone, "script" );
    6527                 if ( destElements.length > 0 ) {
    6528                         setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
    6529                 }
    6530 
    6531                 destElements = srcElements = node = null;
    6532 
    6533                 // Return the cloned set
    6534                 return clone;
    6535         },
    6536 
    6537         buildFragment: function( elems, context, scripts, selection ) {
    6538                 var j, elem, contains,
    6539                         tmp, tag, tbody, wrap,
    6540                         l = elems.length,
    6541 
    6542                         // Ensure a safe fragment
    6543                         safe = createSafeFragment( context ),
    6544 
    6545                         nodes = [],
    6546                         i = 0;
    6547 
    6548                 for ( ; i < l; i++ ) {
    6549                         elem = elems[ i ];
    6550 
    6551                         if ( elem || elem === 0 ) {
    6552 
    6553                                 // Add nodes directly
    6554                                 if ( jQuery.type( elem ) === "object" ) {
    6555                                         jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
    6556 
    6557                                 // Convert non-html into a text node
    6558                                 } else if ( !rhtml.test( elem ) ) {
    6559                                         nodes.push( context.createTextNode( elem ) );
    6560 
    6561                                 // Convert html into DOM nodes
    6562                                 } else {
    6563                                         tmp = tmp || safe.appendChild( context.createElement("div") );
    6564 
    6565                                         // Deserialize a standard representation
    6566                                         tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
    6567                                         wrap = wrapMap[ tag ] || wrapMap._default;
    6568 
    6569                                         tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
    6570 
    6571                                         // Descend through wrappers to the right content
    6572                                         j = wrap[0];
    6573                                         while ( j-- ) {
    6574                                                 tmp = tmp.lastChild;
    6575                                         }
    6576 
    6577                                         // Manually add leading whitespace removed by IE
    6578                                         if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
    6579                                                 nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
    6580                                         }
    6581 
    6582                                         // Remove IE's autoinserted <tbody> from table fragments
    6583                                         if ( !jQuery.support.tbody ) {
    6584 
    6585                                                 // String was a <table>, *may* have spurious <tbody>
    6586                                                 elem = tag === "table" && !rtbody.test( elem ) ?
    6587                                                         tmp.firstChild :
    6588 
    6589                                                         // String was a bare <thead> or <tfoot>
    6590                                                         wrap[1] === "<table>" && !rtbody.test( elem ) ?
    6591                                                                 tmp :
    6592                                                                 0;
    6593 
    6594                                                 j = elem && elem.childNodes.length;
    6595                                                 while ( j-- ) {
    6596                                                         if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
    6597                                                                 elem.removeChild( tbody );
    6598                                                         }
    6599                                                 }
    6600                                         }
    6601 
    6602                                         jQuery.merge( nodes, tmp.childNodes );
    6603 
    6604                                         // Fix #12392 for WebKit and IE > 9
    6605                                         tmp.textContent = "";
    6606 
    6607                                         // Fix #12392 for oldIE
    6608                                         while ( tmp.firstChild ) {
    6609                                                 tmp.removeChild( tmp.firstChild );
    6610                                         }
    6611 
    6612                                         // Remember the top-level container for proper cleanup
    6613                                         tmp = safe.lastChild;
    6614                                 }
    6615                         }
    6616                 }
    6617 
    6618                 // Fix #11356: Clear elements from fragment
    6619                 if ( tmp ) {
    6620                         safe.removeChild( tmp );
    6621                 }
    6622 
    6623                 // Reset defaultChecked for any radios and checkboxes
    6624                 // about to be appended to the DOM in IE 6/7 (#8060)
    6625                 if ( !jQuery.support.appendChecked ) {
    6626                         jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
    6627                 }
    6628 
    6629                 i = 0;
    6630                 while ( (elem = nodes[ i++ ]) ) {
    6631 
    6632                         // #4087 - If origin and destination elements are the same, and this is
    6633                         // that element, do not do anything
    6634                         if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
    6635                                 continue;
    6636                         }
    6637 
    6638                         contains = jQuery.contains( elem.ownerDocument, elem );
    6639 
    6640                         // Append to fragment
    6641                         tmp = getAll( safe.appendChild( elem ), "script" );
    6642 
    6643                         // Preserve script evaluation history
    6644                         if ( contains ) {
    6645                                 setGlobalEval( tmp );
    6646                         }
    6647 
    6648                         // Capture executables
    6649                         if ( scripts ) {
    6650                                 j = 0;
    6651                                 while ( (elem = tmp[ j++ ]) ) {
    6652                                         if ( rscriptType.test( elem.type || "" ) ) {
    6653                                                 scripts.push( elem );
    6654                                         }
    6655                                 }
    6656                         }
    6657                 }
    6658 
    6659                 tmp = null;
    6660 
    6661                 return safe;
    6662         },
    6663 
    6664         cleanData: function( elems, /* internal */ acceptData ) {
    6665                 var elem, type, id, data,
    6666                         i = 0,
    6667                         internalKey = jQuery.expando,
    6668                         cache = jQuery.cache,
    6669                         deleteExpando = jQuery.support.deleteExpando,
    6670                         special = jQuery.event.special;
    6671 
    6672                 for ( ; (elem = elems[i]) != null; i++ ) {
    6673 
    6674                         if ( acceptData || jQuery.acceptData( elem ) ) {
    6675 
    6676                                 id = elem[ internalKey ];
    6677                                 data = id && cache[ id ];
    6678 
    6679                                 if ( data ) {
    6680                                         if ( data.events ) {
    6681                                                 for ( type in data.events ) {
    6682                                                         if ( special[ type ] ) {
    6683                                                                 jQuery.event.remove( elem, type );
    6684 
    6685                                                         // This is a shortcut to avoid jQuery.event.remove's overhead
    6686                                                         } else {
    6687                                                                 jQuery.removeEvent( elem, type, data.handle );
    6688                                                         }
    6689                                                 }
    6690                                         }
    6691 
    6692                                         // Remove cache only if it was not already removed by jQuery.event.remove
    6693                                         if ( cache[ id ] ) {
    6694 
    6695                                                 delete cache[ id ];
    6696 
    6697                                                 // IE does not allow us to delete expando properties from nodes,
    6698                                                 // nor does it have a removeAttribute function on Document nodes;
    6699                                                 // we must handle all of these cases
    6700                                                 if ( deleteExpando ) {
    6701                                                         delete elem[ internalKey ];
    6702 
    6703                                                 } else if ( typeof elem.removeAttribute !== core_strundefined ) {
    6704                                                         elem.removeAttribute( internalKey );
    6705 
    6706                                                 } else {
    6707                                                         elem[ internalKey ] = null;
    6708                                                 }
    6709 
    6710                                                 core_deletedIds.push( id );
    6711                                         }
    6712                                 }
    6713                         }
    6714                 }
    6715         },
    6716 
    6717         _evalUrl: function( url ) {
    6718                 return jQuery.ajax({
    6719                         url: url,
    6720                         type: "GET",
    6721                         dataType: "script",
    6722                         async: false,
    6723                         global: false,
    6724                         "throws": true
     6034
     6035(function() {
     6036        var a, shrinkWrapBlocksVal,
     6037                div = document.createElement( "div" ),
     6038                divReset =
     6039                        "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;" +
     6040                        "display:block;padding:0;margin:0;border:0";
     6041
     6042        // Setup
     6043        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     6044        a = div.getElementsByTagName( "a" )[ 0 ];
     6045
     6046        a.style.cssText = "float:left;opacity:.5";
     6047
     6048        // Make sure that element opacity exists
     6049        // (IE uses filter instead)
     6050        // Use a regex to work around a WebKit issue. See #5145
     6051        support.opacity = /^0.5/.test( a.style.opacity );
     6052
     6053        // Verify style float existence
     6054        // (IE uses styleFloat instead of cssFloat)
     6055        support.cssFloat = !!a.style.cssFloat;
     6056
     6057        div.style.backgroundClip = "content-box";
     6058        div.cloneNode( true ).style.backgroundClip = "";
     6059        support.clearCloneStyle = div.style.backgroundClip === "content-box";
     6060
     6061        // Null elements to avoid leaks in IE.
     6062        a = div = null;
     6063
     6064        support.shrinkWrapBlocks = function() {
     6065                var body, container, div, containerStyles;
     6066
     6067                if ( shrinkWrapBlocksVal == null ) {
     6068                        body = document.getElementsByTagName( "body" )[ 0 ];
     6069                        if ( !body ) {
     6070                                // Test fired too early or in an unsupported environment, exit.
     6071                                return;
     6072                        }
     6073
     6074                        containerStyles = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px";
     6075                        container = document.createElement( "div" );
     6076                        div = document.createElement( "div" );
     6077
     6078                        body.appendChild( container ).appendChild( div );
     6079
     6080                        // Will be changed later if needed.
     6081                        shrinkWrapBlocksVal = false;
     6082
     6083                        if ( typeof div.style.zoom !== strundefined ) {
     6084                                // Support: IE6
     6085                                // Check if elements with layout shrink-wrap their children
     6086                                div.style.cssText = divReset + ";width:1px;padding:1px;zoom:1";
     6087                                div.innerHTML = "<div></div>";
     6088                                div.firstChild.style.width = "5px";
     6089                                shrinkWrapBlocksVal = div.offsetWidth !== 3;
     6090                        }
     6091
     6092                        body.removeChild( container );
     6093
     6094                        // Null elements to avoid leaks in IE.
     6095                        body = container = div = null;
     6096                }
     6097
     6098                return shrinkWrapBlocksVal;
     6099        };
     6100
     6101})();
     6102var rmargin = (/^margin/);
     6103
     6104var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
     6105
     6106
     6107
     6108var getStyles, curCSS,
     6109        rposition = /^(top|right|bottom|left)$/;
     6110
     6111if ( window.getComputedStyle ) {
     6112        getStyles = function( elem ) {
     6113                return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
     6114        };
     6115
     6116        curCSS = function( elem, name, computed ) {
     6117                var width, minWidth, maxWidth, ret,
     6118                        style = elem.style;
     6119
     6120                computed = computed || getStyles( elem );
     6121
     6122                // getPropertyValue is only needed for .css('filter') in IE9, see #12537
     6123                ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
     6124
     6125                if ( computed ) {
     6126
     6127                        if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
     6128                                ret = jQuery.style( elem, name );
     6129                        }
     6130
     6131                        // A tribute to the "awesome hack by Dean Edwards"
     6132                        // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
     6133                        // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
     6134                        // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
     6135                        if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
     6136
     6137                                // Remember the original values
     6138                                width = style.width;
     6139                                minWidth = style.minWidth;
     6140                                maxWidth = style.maxWidth;
     6141
     6142                                // Put in the new values to get a computed value out
     6143                                style.minWidth = style.maxWidth = style.width = ret;
     6144                                ret = computed.width;
     6145
     6146                                // Revert the changed values
     6147                                style.width = width;
     6148                                style.minWidth = minWidth;
     6149                                style.maxWidth = maxWidth;
     6150                        }
     6151                }
     6152
     6153                // Support: IE
     6154                // IE returns zIndex value as an integer.
     6155                return ret === undefined ?
     6156                        ret :
     6157                        ret + "";
     6158        };
     6159} else if ( document.documentElement.currentStyle ) {
     6160        getStyles = function( elem ) {
     6161                return elem.currentStyle;
     6162        };
     6163
     6164        curCSS = function( elem, name, computed ) {
     6165                var left, rs, rsLeft, ret,
     6166                        style = elem.style;
     6167
     6168                computed = computed || getStyles( elem );
     6169                ret = computed ? computed[ name ] : undefined;
     6170
     6171                // Avoid setting ret to empty string here
     6172                // so we don't default to auto
     6173                if ( ret == null && style && style[ name ] ) {
     6174                        ret = style[ name ];
     6175                }
     6176
     6177                // From the awesome hack by Dean Edwards
     6178                // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
     6179
     6180                // If we're not dealing with a regular pixel number
     6181                // but a number that has a weird ending, we need to convert it to pixels
     6182                // but not position css attributes, as those are proportional to the parent element instead
     6183                // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
     6184                if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
     6185
     6186                        // Remember the original values
     6187                        left = style.left;
     6188                        rs = elem.runtimeStyle;
     6189                        rsLeft = rs && rs.left;
     6190
     6191                        // Put in the new values to get a computed value out
     6192                        if ( rsLeft ) {
     6193                                rs.left = elem.currentStyle.left;
     6194                        }
     6195                        style.left = name === "fontSize" ? "1em" : ret;
     6196                        ret = style.pixelLeft + "px";
     6197
     6198                        // Revert the changed values
     6199                        style.left = left;
     6200                        if ( rsLeft ) {
     6201                                rs.left = rsLeft;
     6202                        }
     6203                }
     6204
     6205                // Support: IE
     6206                // IE returns zIndex value as an integer.
     6207                return ret === undefined ?
     6208                        ret :
     6209                        ret + "" || "auto";
     6210        };
     6211}
     6212
     6213
     6214
     6215
     6216function addGetHookIf( conditionFn, hookFn ) {
     6217        // Define the hook, we'll check on the first run if it's really needed.
     6218        return {
     6219                get: function() {
     6220                        var condition = conditionFn();
     6221
     6222                        if ( condition == null ) {
     6223                                // The test was not ready at this point; screw the hook this time
     6224                                // but check again when needed next time.
     6225                                return;
     6226                        }
     6227
     6228                        if ( condition ) {
     6229                                // Hook not needed (or it's not possible to use it due to missing dependency),
     6230                                // remove it.
     6231                                // Since there are no other hooks for marginRight, remove the whole object.
     6232                                delete this.get;
     6233                                return;
     6234                        }
     6235
     6236                        // Hook needed; redefine it so that the support test is not executed again.
     6237
     6238                        return (this.get = hookFn).apply( this, arguments );
     6239                }
     6240        };
     6241}
     6242
     6243
     6244(function() {
     6245        var a, reliableHiddenOffsetsVal, boxSizingVal, boxSizingReliableVal,
     6246                pixelPositionVal, reliableMarginRightVal,
     6247                div = document.createElement( "div" ),
     6248                containerStyles = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px",
     6249                divReset =
     6250                        "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;" +
     6251                        "display:block;padding:0;margin:0;border:0";
     6252
     6253        // Setup
     6254        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     6255        a = div.getElementsByTagName( "a" )[ 0 ];
     6256
     6257        a.style.cssText = "float:left;opacity:.5";
     6258
     6259        // Make sure that element opacity exists
     6260        // (IE uses filter instead)
     6261        // Use a regex to work around a WebKit issue. See #5145
     6262        support.opacity = /^0.5/.test( a.style.opacity );
     6263
     6264        // Verify style float existence
     6265        // (IE uses styleFloat instead of cssFloat)
     6266        support.cssFloat = !!a.style.cssFloat;
     6267
     6268        div.style.backgroundClip = "content-box";
     6269        div.cloneNode( true ).style.backgroundClip = "";
     6270        support.clearCloneStyle = div.style.backgroundClip === "content-box";
     6271
     6272        // Null elements to avoid leaks in IE.
     6273        a = div = null;
     6274
     6275        jQuery.extend(support, {
     6276                reliableHiddenOffsets: function() {
     6277                        if ( reliableHiddenOffsetsVal != null ) {
     6278                                return reliableHiddenOffsetsVal;
     6279                        }
     6280
     6281                        var container, tds, isSupported,
     6282                                div = document.createElement( "div" ),
     6283                                body = document.getElementsByTagName( "body" )[ 0 ];
     6284
     6285                        if ( !body ) {
     6286                                // Return for frameset docs that don't have a body
     6287                                return;
     6288                        }
     6289
     6290                        // Setup
     6291                        div.setAttribute( "className", "t" );
     6292                        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     6293
     6294                        container = document.createElement( "div" );
     6295                        container.style.cssText = containerStyles;
     6296
     6297                        body.appendChild( container ).appendChild( div );
     6298
     6299                        // Support: IE8
     6300                        // Check if table cells still have offsetWidth/Height when they are set
     6301                        // to display:none and there are still other visible table cells in a
     6302                        // table row; if so, offsetWidth/Height are not reliable for use when
     6303                        // determining if an element has been hidden directly using
     6304                        // display:none (it is still safe to use offsets if a parent element is
     6305                        // hidden; don safety goggles and see bug #4512 for more information).
     6306                        div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
     6307                        tds = div.getElementsByTagName( "td" );
     6308                        tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
     6309                        isSupported = ( tds[ 0 ].offsetHeight === 0 );
     6310
     6311                        tds[ 0 ].style.display = "";
     6312                        tds[ 1 ].style.display = "none";
     6313
     6314                        // Support: IE8
     6315                        // Check if empty table cells still have offsetWidth/Height
     6316                        reliableHiddenOffsetsVal = isSupported && ( tds[ 0 ].offsetHeight === 0 );
     6317
     6318                        body.removeChild( container );
     6319
     6320                        // Null elements to avoid leaks in IE.
     6321                        div = body = null;
     6322
     6323                        return reliableHiddenOffsetsVal;
     6324                },
     6325
     6326                boxSizing: function() {
     6327                        if ( boxSizingVal == null ) {
     6328                                computeStyleTests();
     6329                        }
     6330                        return boxSizingVal;
     6331                },
     6332
     6333                boxSizingReliable: function() {
     6334                        if ( boxSizingReliableVal == null ) {
     6335                                computeStyleTests();
     6336                        }
     6337                        return boxSizingReliableVal;
     6338                },
     6339
     6340                pixelPosition: function() {
     6341                        if ( pixelPositionVal == null ) {
     6342                                computeStyleTests();
     6343                        }
     6344                        return pixelPositionVal;
     6345                },
     6346
     6347                reliableMarginRight: function() {
     6348                        var body, container, div, marginDiv;
     6349
     6350                        // Use window.getComputedStyle because jsdom on node.js will break without it.
     6351                        if ( reliableMarginRightVal == null && window.getComputedStyle ) {
     6352                                body = document.getElementsByTagName( "body" )[ 0 ];
     6353                                if ( !body ) {
     6354                                        // Test fired too early or in an unsupported environment, exit.
     6355                                        return;
     6356                                }
     6357
     6358                                container = document.createElement( "div" );
     6359                                div = document.createElement( "div" );
     6360                                container.style.cssText = containerStyles;
     6361
     6362                                body.appendChild( container ).appendChild( div );
     6363
     6364                                // Check if div with explicit width and no margin-right incorrectly
     6365                                // gets computed margin-right based on width of container. (#3333)
     6366                                // Fails in WebKit before Feb 2011 nightlies
     6367                                // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
     6368                                marginDiv = div.appendChild( document.createElement( "div" ) );
     6369                                marginDiv.style.cssText = div.style.cssText = divReset;
     6370                                marginDiv.style.marginRight = marginDiv.style.width = "0";
     6371                                div.style.width = "1px";
     6372
     6373                                reliableMarginRightVal =
     6374                                        !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
     6375
     6376                                body.removeChild( container );
     6377                        }
     6378
     6379                        return reliableMarginRightVal;
     6380                }
     6381        });
     6382
     6383        function computeStyleTests() {
     6384                var container, div,
     6385                        body = document.getElementsByTagName( "body" )[ 0 ];
     6386
     6387                if ( !body ) {
     6388                        // Test fired too early or in an unsupported environment, exit.
     6389                        return;
     6390                }
     6391
     6392                container = document.createElement( "div" );
     6393                div = document.createElement( "div" );
     6394                container.style.cssText = containerStyles;
     6395
     6396                body.appendChild( container ).appendChild( div );
     6397
     6398                div.style.cssText =
     6399                        "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" +
     6400                                "position:absolute;display:block;padding:1px;border:1px;width:4px;" +
     6401                                "margin-top:1%;top:1%";
     6402
     6403                // Workaround failing boxSizing test due to offsetWidth returning wrong value
     6404                // with some non-1 values of body zoom, ticket #13543
     6405                jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
     6406                        boxSizingVal = div.offsetWidth === 4;
    67256407                });
    6726         }
    6727 });
    6728 jQuery.fn.extend({
    6729         wrapAll: function( html ) {
    6730                 if ( jQuery.isFunction( html ) ) {
    6731                         return this.each(function(i) {
    6732                                 jQuery(this).wrapAll( html.call(this, i) );
    6733                         });
    6734                 }
    6735 
    6736                 if ( this[0] ) {
    6737                         // The elements to wrap the target around
    6738                         var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
    6739 
    6740                         if ( this[0].parentNode ) {
    6741                                 wrap.insertBefore( this[0] );
    6742                         }
    6743 
    6744                         wrap.map(function() {
    6745                                 var elem = this;
    6746 
    6747                                 while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
    6748                                         elem = elem.firstChild;
    6749                                 }
    6750 
    6751                                 return elem;
    6752                         }).append( this );
    6753                 }
    6754 
    6755                 return this;
    6756         },
    6757 
    6758         wrapInner: function( html ) {
    6759                 if ( jQuery.isFunction( html ) ) {
    6760                         return this.each(function(i) {
    6761                                 jQuery(this).wrapInner( html.call(this, i) );
    6762                         });
    6763                 }
    6764 
    6765                 return this.each(function() {
    6766                         var self = jQuery( this ),
    6767                                 contents = self.contents();
    6768 
    6769                         if ( contents.length ) {
    6770                                 contents.wrapAll( html );
    6771 
    6772                         } else {
    6773                                 self.append( html );
    6774                         }
    6775                 });
    6776         },
    6777 
    6778         wrap: function( html ) {
    6779                 var isFunction = jQuery.isFunction( html );
    6780 
    6781                 return this.each(function(i) {
    6782                         jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
    6783                 });
    6784         },
    6785 
    6786         unwrap: function() {
    6787                 return this.parent().each(function() {
    6788                         if ( !jQuery.nodeName( this, "body" ) ) {
    6789                                 jQuery( this ).replaceWith( this.childNodes );
    6790                         }
    6791                 }).end();
    6792         }
    6793 });
    6794 var iframe, getStyles, curCSS,
    6795         ralpha = /alpha\([^)]*\)/i,
     6408
     6409                // Will be changed later if needed.
     6410                boxSizingReliableVal = true;
     6411                pixelPositionVal = false;
     6412                reliableMarginRightVal = true;
     6413
     6414                // Use window.getComputedStyle because jsdom on node.js will break without it.
     6415                if ( window.getComputedStyle ) {
     6416                        pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
     6417                        boxSizingReliableVal =
     6418                                ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
     6419                }
     6420
     6421                body.removeChild( container );
     6422
     6423                // Null elements to avoid leaks in IE.
     6424                div = body = null;
     6425        }
     6426
     6427})();
     6428
     6429
     6430// A method for quickly swapping in/out CSS properties to get correct calculations.
     6431jQuery.swap = function( elem, options, callback, args ) {
     6432        var ret, name,
     6433                old = {};
     6434
     6435        // Remember the old values, and insert the new ones
     6436        for ( name in options ) {
     6437                old[ name ] = elem.style[ name ];
     6438                elem.style[ name ] = options[ name ];
     6439        }
     6440
     6441        ret = callback.apply( elem, args || [] );
     6442
     6443        // Revert the old values
     6444        for ( name in options ) {
     6445                elem.style[ name ] = old[ name ];
     6446        }
     6447
     6448        return ret;
     6449};
     6450
     6451
     6452var
     6453                ralpha = /alpha\([^)]*\)/i,
    67966454        ropacity = /opacity\s*=\s*([^)]*)/,
    6797         rposition = /^(top|right|bottom|left)$/,
     6455
    67986456        // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
    67996457        // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
    68006458        rdisplayswap = /^(none|table(?!-c[ea]).+)/,
    6801         rmargin = /^margin/,
    6802         rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
    6803         rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
    6804         rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
    6805         elemdisplay = { BODY: "block" },
     6459        rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
     6460        rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
    68066461
    68076462        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
     
    68116466        },
    68126467
    6813         cssExpand = [ "Top", "Right", "Bottom", "Left" ],
    68146468        cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
     6469
    68156470
    68166471// return a css property mapped to a potentially vendor prefixed property
     
    68356490
    68366491        return origName;
    6837 }
    6838 
    6839 function isHidden( elem, el ) {
    6840         // isHidden might be called from jQuery#filter function;
    6841         // in that case, element will be second argument
    6842         elem = el || elem;
    6843         return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
    68446492}
    68456493
     
    68696517                        // for such an element
    68706518                        if ( elem.style.display === "" && isHidden( elem ) ) {
    6871                                 values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
     6519                                values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
    68726520                        }
    68736521                } else {
     
    68986546}
    68996547
    6900 jQuery.fn.extend({
    6901         css: function( name, value ) {
    6902                 return jQuery.access( this, function( elem, name, value ) {
    6903                         var len, styles,
    6904                                 map = {},
    6905                                 i = 0;
    6906 
    6907                         if ( jQuery.isArray( name ) ) {
    6908                                 styles = getStyles( elem );
    6909                                 len = name.length;
    6910 
    6911                                 for ( ; i < len; i++ ) {
    6912                                         map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
    6913                                 }
    6914 
    6915                                 return map;
    6916                         }
    6917 
    6918                         return value !== undefined ?
    6919                                 jQuery.style( elem, name, value ) :
    6920                                 jQuery.css( elem, name );
    6921                 }, name, value, arguments.length > 1 );
    6922         },
    6923         show: function() {
    6924                 return showHide( this, true );
    6925         },
    6926         hide: function() {
    6927                 return showHide( this );
    6928         },
    6929         toggle: function( state ) {
    6930                 if ( typeof state === "boolean" ) {
    6931                         return state ? this.show() : this.hide();
    6932                 }
    6933 
    6934                 return this.each(function() {
    6935                         if ( isHidden( this ) ) {
    6936                                 jQuery( this ).show();
    6937                         } else {
    6938                                 jQuery( this ).hide();
    6939                         }
    6940                 });
    6941         }
    6942 });
     6548function setPositiveNumber( elem, value, subtract ) {
     6549        var matches = rnumsplit.exec( value );
     6550        return matches ?
     6551                // Guard against undefined "subtract", e.g., when used as in cssHooks
     6552                Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
     6553                value;
     6554}
     6555
     6556function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
     6557        var i = extra === ( isBorderBox ? "border" : "content" ) ?
     6558                // If we already have the right measurement, avoid augmentation
     6559                4 :
     6560                // Otherwise initialize for horizontal or vertical properties
     6561                name === "width" ? 1 : 0,
     6562
     6563                val = 0;
     6564
     6565        for ( ; i < 4; i += 2 ) {
     6566                // both box models exclude margin, so add it if we want it
     6567                if ( extra === "margin" ) {
     6568                        val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
     6569                }
     6570
     6571                if ( isBorderBox ) {
     6572                        // border-box includes padding, so remove it if we want content
     6573                        if ( extra === "content" ) {
     6574                                val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
     6575                        }
     6576
     6577                        // at this point, extra isn't border nor margin, so remove border
     6578                        if ( extra !== "margin" ) {
     6579                                val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
     6580                        }
     6581                } else {
     6582                        // at this point, extra isn't content, so add padding
     6583                        val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
     6584
     6585                        // at this point, extra isn't content nor padding, so add border
     6586                        if ( extra !== "padding" ) {
     6587                                val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
     6588                        }
     6589                }
     6590        }
     6591
     6592        return val;
     6593}
     6594
     6595function getWidthOrHeight( elem, name, extra ) {
     6596
     6597        // Start with offset property, which is equivalent to the border-box value
     6598        var valueIsBorderBox = true,
     6599                val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
     6600                styles = getStyles( elem ),
     6601                isBorderBox = support.boxSizing() && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
     6602
     6603        // some non-html elements return undefined for offsetWidth, so check for null/undefined
     6604        // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
     6605        // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
     6606        if ( val <= 0 || val == null ) {
     6607                // Fall back to computed then uncomputed css if necessary
     6608                val = curCSS( elem, name, styles );
     6609                if ( val < 0 || val == null ) {
     6610                        val = elem.style[ name ];
     6611                }
     6612
     6613                // Computed unit is not pixels. Stop here and return.
     6614                if ( rnumnonpx.test(val) ) {
     6615                        return val;
     6616                }
     6617
     6618                // we need the check for style in case a browser which returns unreliable values
     6619                // for getComputedStyle silently falls back to the reliable elem.style
     6620                valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
     6621
     6622                // Normalize "", auto, and prepare for extra
     6623                val = parseFloat( val ) || 0;
     6624        }
     6625
     6626        // use the active box-sizing model to add/subtract irrelevant styles
     6627        return ( val +
     6628                augmentWidthOrHeight(
     6629                        elem,
     6630                        name,
     6631                        extra || ( isBorderBox ? "border" : "content" ),
     6632                        valueIsBorderBox,
     6633                        styles
     6634                )
     6635        ) + "px";
     6636}
    69436637
    69446638jQuery.extend({
     
    69756669        cssProps: {
    69766670                // normalize float css property
    6977                 "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
     6671                "float": support.cssFloat ? "cssFloat" : "styleFloat"
    69786672        },
    69796673
     
    70076701                        }
    70086702
    7009                         // Make sure that NaN and null values aren't set. See: #7116
    7010                         if ( value == null || type === "number" && isNaN( value ) ) {
     6703                        // Make sure that null and NaN values aren't set. See: #7116
     6704                        if ( value == null || value !== value ) {
    70116705                                return;
    70126706                        }
     
    70196713                        // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
    70206714                        // but it would mean to define eight (for every problematic property) identical functions
    7021                         if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
     6715                        if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
    70226716                                style[ name ] = "inherit";
    70236717                        }
     
    70266720                        if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
    70276721
    7028                                 // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
    7029                                 // Fixes bug #5509
     6722                                // Support: IE
     6723                                // Swallow errors from 'invalid' CSS values (#5509)
    70306724                                try {
     6725                                        // Support: Chrome, Safari
     6726                                        // Setting style to blank string required to delete "style: x !important;"
     6727                                        style[ name ] = "";
    70316728                                        style[ name ] = value;
    70326729                                } catch(e) {}
     
    70786775        }
    70796776});
    7080 
    7081 // NOTE: we've included the "window" in window.getComputedStyle
    7082 // because jsdom on node.js will break without it.
    7083 if ( window.getComputedStyle ) {
    7084         getStyles = function( elem ) {
    7085                 return window.getComputedStyle( elem, null );
    7086         };
    7087 
    7088         curCSS = function( elem, name, _computed ) {
    7089                 var width, minWidth, maxWidth,
    7090                         computed = _computed || getStyles( elem ),
    7091 
    7092                         // getPropertyValue is only needed for .css('filter') in IE9, see #12537
    7093                         ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
    7094                         style = elem.style;
    7095 
    7096                 if ( computed ) {
    7097 
    7098                         if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
    7099                                 ret = jQuery.style( elem, name );
    7100                         }
    7101 
    7102                         // A tribute to the "awesome hack by Dean Edwards"
    7103                         // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
    7104                         // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
    7105                         // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
    7106                         if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
    7107 
    7108                                 // Remember the original values
    7109                                 width = style.width;
    7110                                 minWidth = style.minWidth;
    7111                                 maxWidth = style.maxWidth;
    7112 
    7113                                 // Put in the new values to get a computed value out
    7114                                 style.minWidth = style.maxWidth = style.width = ret;
    7115                                 ret = computed.width;
    7116 
    7117                                 // Revert the changed values
    7118                                 style.width = width;
    7119                                 style.minWidth = minWidth;
    7120                                 style.maxWidth = maxWidth;
    7121                         }
    7122                 }
    7123 
    7124                 return ret;
    7125         };
    7126 } else if ( document.documentElement.currentStyle ) {
    7127         getStyles = function( elem ) {
    7128                 return elem.currentStyle;
    7129         };
    7130 
    7131         curCSS = function( elem, name, _computed ) {
    7132                 var left, rs, rsLeft,
    7133                         computed = _computed || getStyles( elem ),
    7134                         ret = computed ? computed[ name ] : undefined,
    7135                         style = elem.style;
    7136 
    7137                 // Avoid setting ret to empty string here
    7138                 // so we don't default to auto
    7139                 if ( ret == null && style && style[ name ] ) {
    7140                         ret = style[ name ];
    7141                 }
    7142 
    7143                 // From the awesome hack by Dean Edwards
    7144                 // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
    7145 
    7146                 // If we're not dealing with a regular pixel number
    7147                 // but a number that has a weird ending, we need to convert it to pixels
    7148                 // but not position css attributes, as those are proportional to the parent element instead
    7149                 // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
    7150                 if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
    7151 
    7152                         // Remember the original values
    7153                         left = style.left;
    7154                         rs = elem.runtimeStyle;
    7155                         rsLeft = rs && rs.left;
    7156 
    7157                         // Put in the new values to get a computed value out
    7158                         if ( rsLeft ) {
    7159                                 rs.left = elem.currentStyle.left;
    7160                         }
    7161                         style.left = name === "fontSize" ? "1em" : ret;
    7162                         ret = style.pixelLeft + "px";
    7163 
    7164                         // Revert the changed values
    7165                         style.left = left;
    7166                         if ( rsLeft ) {
    7167                                 rs.left = rsLeft;
    7168                         }
    7169                 }
    7170 
    7171                 return ret === "" ? "auto" : ret;
    7172         };
    7173 }
    7174 
    7175 function setPositiveNumber( elem, value, subtract ) {
    7176         var matches = rnumsplit.exec( value );
    7177         return matches ?
    7178                 // Guard against undefined "subtract", e.g., when used as in cssHooks
    7179                 Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
    7180                 value;
    7181 }
    7182 
    7183 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
    7184         var i = extra === ( isBorderBox ? "border" : "content" ) ?
    7185                 // If we already have the right measurement, avoid augmentation
    7186                 4 :
    7187                 // Otherwise initialize for horizontal or vertical properties
    7188                 name === "width" ? 1 : 0,
    7189 
    7190                 val = 0;
    7191 
    7192         for ( ; i < 4; i += 2 ) {
    7193                 // both box models exclude margin, so add it if we want it
    7194                 if ( extra === "margin" ) {
    7195                         val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
    7196                 }
    7197 
    7198                 if ( isBorderBox ) {
    7199                         // border-box includes padding, so remove it if we want content
    7200                         if ( extra === "content" ) {
    7201                                 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
    7202                         }
    7203 
    7204                         // at this point, extra isn't border nor margin, so remove border
    7205                         if ( extra !== "margin" ) {
    7206                                 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    7207                         }
    7208                 } else {
    7209                         // at this point, extra isn't content, so add padding
    7210                         val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
    7211 
    7212                         // at this point, extra isn't content nor padding, so add border
    7213                         if ( extra !== "padding" ) {
    7214                                 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
    7215                         }
    7216                 }
    7217         }
    7218 
    7219         return val;
    7220 }
    7221 
    7222 function getWidthOrHeight( elem, name, extra ) {
    7223 
    7224         // Start with offset property, which is equivalent to the border-box value
    7225         var valueIsBorderBox = true,
    7226                 val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
    7227                 styles = getStyles( elem ),
    7228                 isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
    7229 
    7230         // some non-html elements return undefined for offsetWidth, so check for null/undefined
    7231         // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
    7232         // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
    7233         if ( val <= 0 || val == null ) {
    7234                 // Fall back to computed then uncomputed css if necessary
    7235                 val = curCSS( elem, name, styles );
    7236                 if ( val < 0 || val == null ) {
    7237                         val = elem.style[ name ];
    7238                 }
    7239 
    7240                 // Computed unit is not pixels. Stop here and return.
    7241                 if ( rnumnonpx.test(val) ) {
    7242                         return val;
    7243                 }
    7244 
    7245                 // we need the check for style in case a browser which returns unreliable values
    7246                 // for getComputedStyle silently falls back to the reliable elem.style
    7247                 valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
    7248 
    7249                 // Normalize "", auto, and prepare for extra
    7250                 val = parseFloat( val ) || 0;
    7251         }
    7252 
    7253         // use the active box-sizing model to add/subtract irrelevant styles
    7254         return ( val +
    7255                 augmentWidthOrHeight(
    7256                         elem,
    7257                         name,
    7258                         extra || ( isBorderBox ? "border" : "content" ),
    7259                         valueIsBorderBox,
    7260                         styles
    7261                 )
    7262         ) + "px";
    7263 }
    7264 
    7265 // Try to determine the default display value of an element
    7266 function css_defaultDisplay( nodeName ) {
    7267         var doc = document,
    7268                 display = elemdisplay[ nodeName ];
    7269 
    7270         if ( !display ) {
    7271                 display = actualDisplay( nodeName, doc );
    7272 
    7273                 // If the simple way fails, read from inside an iframe
    7274                 if ( display === "none" || !display ) {
    7275                         // Use the already-created iframe if possible
    7276                         iframe = ( iframe ||
    7277                                 jQuery("<iframe frameborder='0' width='0' height='0'/>")
    7278                                 .css( "cssText", "display:block !important" )
    7279                         ).appendTo( doc.documentElement );
    7280 
    7281                         // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
    7282                         doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
    7283                         doc.write("<!doctype html><html><body>");
    7284                         doc.close();
    7285 
    7286                         display = actualDisplay( nodeName, doc );
    7287                         iframe.detach();
    7288                 }
    7289 
    7290                 // Store the correct default display
    7291                 elemdisplay[ nodeName ] = display;
    7292         }
    7293 
    7294         return display;
    7295 }
    7296 
    7297 // Called ONLY from within css_defaultDisplay
    7298 function actualDisplay( name, doc ) {
    7299         var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
    7300                 display = jQuery.css( elem[0], "display" );
    7301         elem.remove();
    7302         return display;
    7303 }
    73046777
    73056778jQuery.each([ "height", "width" ], function( i, name ) {
     
    73246797                                        name,
    73256798                                        extra,
    7326                                         jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
     6799                                        support.boxSizing() && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
    73276800                                        styles
    73286801                                ) : 0
     
    73326805});
    73336806
    7334 if ( !jQuery.support.opacity ) {
     6807if ( !support.opacity ) {
    73356808        jQuery.cssHooks.opacity = {
    73366809                get: function( elem, computed ) {
     
    73766849}
    73776850
    7378 // These hooks cannot be added until DOM ready because the support test
    7379 // for it is not run until after DOM ready
    7380 jQuery(function() {
    7381         if ( !jQuery.support.reliableMarginRight ) {
    7382                 jQuery.cssHooks.marginRight = {
    7383                         get: function( elem, computed ) {
    7384                                 if ( computed ) {
    7385                                         // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
    7386                                         // Work around by temporarily setting element display to inline-block
    7387                                         return jQuery.swap( elem, { "display": "inline-block" },
    7388                                                 curCSS, [ elem, "marginRight" ] );
    7389                                 }
    7390                         }
    7391                 };
    7392         }
    7393 
    7394         // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
    7395         // getComputedStyle returns percent when specified for top/left/bottom/right
    7396         // rather than make the css module depend on the offset module, we just check for it here
    7397         if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
    7398                 jQuery.each( [ "top", "left" ], function( i, prop ) {
    7399                         jQuery.cssHooks[ prop ] = {
    7400                                 get: function( elem, computed ) {
    7401                                         if ( computed ) {
    7402                                                 computed = curCSS( elem, prop );
    7403                                                 // if curCSS returns percentage, fallback to offset
    7404                                                 return rnumnonpx.test( computed ) ?
    7405                                                         jQuery( elem ).position()[ prop ] + "px" :
    7406                                                         computed;
    7407                                         }
    7408                                 }
    7409                         };
    7410                 });
    7411         }
    7412 
    7413 });
    7414 
    7415 if ( jQuery.expr && jQuery.expr.filters ) {
    7416         jQuery.expr.filters.hidden = function( elem ) {
    7417                 // Support: Opera <= 12.12
    7418                 // Opera reports offsetWidths and offsetHeights less than zero on some elements
    7419                 return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
    7420                         (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
    7421         };
    7422 
    7423         jQuery.expr.filters.visible = function( elem ) {
    7424                 return !jQuery.expr.filters.hidden( elem );
    7425         };
    7426 }
     6851jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
     6852        function( elem, computed ) {
     6853                if ( computed ) {
     6854                        // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
     6855                        // Work around by temporarily setting element display to inline-block
     6856                        return jQuery.swap( elem, { "display": "inline-block" },
     6857                                curCSS, [ elem, "marginRight" ] );
     6858                }
     6859        }
     6860);
    74276861
    74286862// These hooks are used by animate to expand properties
     
    74536887        }
    74546888});
    7455 var r20 = /%20/g,
    7456         rbracket = /\[\]$/,
    7457         rCRLF = /\r?\n/g,
    7458         rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
    7459         rsubmittable = /^(?:input|select|textarea|keygen)/i;
    74606889
    74616890jQuery.fn.extend({
    7462         serialize: function() {
    7463                 return jQuery.param( this.serializeArray() );
    7464         },
    7465         serializeArray: function() {
    7466                 return this.map(function(){
    7467                         // Can add propHook for "elements" to filter or add form elements
    7468                         var elements = jQuery.prop( this, "elements" );
    7469                         return elements ? jQuery.makeArray( elements ) : this;
     6891        css: function( name, value ) {
     6892                return access( this, function( elem, name, value ) {
     6893                        var styles, len,
     6894                                map = {},
     6895                                i = 0;
     6896
     6897                        if ( jQuery.isArray( name ) ) {
     6898                                styles = getStyles( elem );
     6899                                len = name.length;
     6900
     6901                                for ( ; i < len; i++ ) {
     6902                                        map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
     6903                                }
     6904
     6905                                return map;
     6906                        }
     6907
     6908                        return value !== undefined ?
     6909                                jQuery.style( elem, name, value ) :
     6910                                jQuery.css( elem, name );
     6911                }, name, value, arguments.length > 1 );
     6912        },
     6913        show: function() {
     6914                return showHide( this, true );
     6915        },
     6916        hide: function() {
     6917                return showHide( this );
     6918        },
     6919        toggle: function( state ) {
     6920                if ( typeof state === "boolean" ) {
     6921                        return state ? this.show() : this.hide();
     6922                }
     6923
     6924                return this.each(function() {
     6925                        if ( isHidden( this ) ) {
     6926                                jQuery( this ).show();
     6927                        } else {
     6928                                jQuery( this ).hide();
     6929                        }
     6930                });
     6931        }
     6932});
     6933
     6934
     6935function Tween( elem, options, prop, end, easing ) {
     6936        return new Tween.prototype.init( elem, options, prop, end, easing );
     6937}
     6938jQuery.Tween = Tween;
     6939
     6940Tween.prototype = {
     6941        constructor: Tween,
     6942        init: function( elem, options, prop, end, easing, unit ) {
     6943                this.elem = elem;
     6944                this.prop = prop;
     6945                this.easing = easing || "swing";
     6946                this.options = options;
     6947                this.start = this.now = this.cur();
     6948                this.end = end;
     6949                this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
     6950        },
     6951        cur: function() {
     6952                var hooks = Tween.propHooks[ this.prop ];
     6953
     6954                return hooks && hooks.get ?
     6955                        hooks.get( this ) :
     6956                        Tween.propHooks._default.get( this );
     6957        },
     6958        run: function( percent ) {
     6959                var eased,
     6960                        hooks = Tween.propHooks[ this.prop ];
     6961
     6962                if ( this.options.duration ) {
     6963                        this.pos = eased = jQuery.easing[ this.easing ](
     6964                                percent, this.options.duration * percent, 0, 1, this.options.duration
     6965                        );
     6966                } else {
     6967                        this.pos = eased = percent;
     6968                }
     6969                this.now = ( this.end - this.start ) * eased + this.start;
     6970
     6971                if ( this.options.step ) {
     6972                        this.options.step.call( this.elem, this.now, this );
     6973                }
     6974
     6975                if ( hooks && hooks.set ) {
     6976                        hooks.set( this );
     6977                } else {
     6978                        Tween.propHooks._default.set( this );
     6979                }
     6980                return this;
     6981        }
     6982};
     6983
     6984Tween.prototype.init.prototype = Tween.prototype;
     6985
     6986Tween.propHooks = {
     6987        _default: {
     6988                get: function( tween ) {
     6989                        var result;
     6990
     6991                        if ( tween.elem[ tween.prop ] != null &&
     6992                                (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
     6993                                return tween.elem[ tween.prop ];
     6994                        }
     6995
     6996                        // passing an empty string as a 3rd parameter to .css will automatically
     6997                        // attempt a parseFloat and fallback to a string if the parse fails
     6998                        // so, simple values such as "10px" are parsed to Float.
     6999                        // complex values such as "rotate(1rad)" are returned as is.
     7000                        result = jQuery.css( tween.elem, tween.prop, "" );
     7001                        // Empty strings, null, undefined and "auto" are converted to 0.
     7002                        return !result || result === "auto" ? 0 : result;
     7003                },
     7004                set: function( tween ) {
     7005                        // use step hook for back compat - use cssHook if its there - use .style if its
     7006                        // available and use plain properties where available
     7007                        if ( jQuery.fx.step[ tween.prop ] ) {
     7008                                jQuery.fx.step[ tween.prop ]( tween );
     7009                        } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
     7010                                jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
     7011                        } else {
     7012                                tween.elem[ tween.prop ] = tween.now;
     7013                        }
     7014                }
     7015        }
     7016};
     7017
     7018// Support: IE <=9
     7019// Panic based approach to setting things on disconnected nodes
     7020
     7021Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
     7022        set: function( tween ) {
     7023                if ( tween.elem.nodeType && tween.elem.parentNode ) {
     7024                        tween.elem[ tween.prop ] = tween.now;
     7025                }
     7026        }
     7027};
     7028
     7029jQuery.easing = {
     7030        linear: function( p ) {
     7031                return p;
     7032        },
     7033        swing: function( p ) {
     7034                return 0.5 - Math.cos( p * Math.PI ) / 2;
     7035        }
     7036};
     7037
     7038jQuery.fx = Tween.prototype.init;
     7039
     7040// Back Compat <1.8 extension point
     7041jQuery.fx.step = {};
     7042
     7043
     7044
     7045
     7046var
     7047        fxNow, timerId,
     7048        rfxtypes = /^(?:toggle|show|hide)$/,
     7049        rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
     7050        rrun = /queueHooks$/,
     7051        animationPrefilters = [ defaultPrefilter ],
     7052        tweeners = {
     7053                "*": [ function( prop, value ) {
     7054                        var tween = this.createTween( prop, value ),
     7055                                target = tween.cur(),
     7056                                parts = rfxnum.exec( value ),
     7057                                unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
     7058
     7059                                // Starting value computation is required for potential unit mismatches
     7060                                start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
     7061                                        rfxnum.exec( jQuery.css( tween.elem, prop ) ),
     7062                                scale = 1,
     7063                                maxIterations = 20;
     7064
     7065                        if ( start && start[ 3 ] !== unit ) {
     7066                                // Trust units reported by jQuery.css
     7067                                unit = unit || start[ 3 ];
     7068
     7069                                // Make sure we update the tween properties later on
     7070                                parts = parts || [];
     7071
     7072                                // Iteratively approximate from a nonzero starting point
     7073                                start = +target || 1;
     7074
     7075                                do {
     7076                                        // If previous iteration zeroed out, double until we get *something*
     7077                                        // Use a string for doubling factor so we don't accidentally see scale as unchanged below
     7078                                        scale = scale || ".5";
     7079
     7080                                        // Adjust and apply
     7081                                        start = start / scale;
     7082                                        jQuery.style( tween.elem, prop, start + unit );
     7083
     7084                                // Update scale, tolerating zero or NaN from tween.cur()
     7085                                // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
     7086                                } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
     7087                        }
     7088
     7089                        // Update tween properties
     7090                        if ( parts ) {
     7091                                start = tween.start = +start || +target || 0;
     7092                                tween.unit = unit;
     7093                                // If a +=/-= token was provided, we're doing a relative animation
     7094                                tween.end = parts[ 1 ] ?
     7095                                        start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
     7096                                        +parts[ 2 ];
     7097                        }
     7098
     7099                        return tween;
     7100                } ]
     7101        };
     7102
     7103// Animations created synchronously will run synchronously
     7104function createFxNow() {
     7105        setTimeout(function() {
     7106                fxNow = undefined;
     7107        });
     7108        return ( fxNow = jQuery.now() );
     7109}
     7110
     7111// Generate parameters to create a standard animation
     7112function genFx( type, includeWidth ) {
     7113        var which,
     7114                attrs = { height: type },
     7115                i = 0;
     7116
     7117        // if we include width, step value is 1 to do all cssExpand values,
     7118        // if we don't include width, step value is 2 to skip over Left and Right
     7119        includeWidth = includeWidth ? 1 : 0;
     7120        for ( ; i < 4 ; i += 2 - includeWidth ) {
     7121                which = cssExpand[ i ];
     7122                attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
     7123        }
     7124
     7125        if ( includeWidth ) {
     7126                attrs.opacity = attrs.width = type;
     7127        }
     7128
     7129        return attrs;
     7130}
     7131
     7132function createTween( value, prop, animation ) {
     7133        var tween,
     7134                collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
     7135                index = 0,
     7136                length = collection.length;
     7137        for ( ; index < length; index++ ) {
     7138                if ( (tween = collection[ index ].call( animation, prop, value )) ) {
     7139
     7140                        // we're done with this property
     7141                        return tween;
     7142                }
     7143        }
     7144}
     7145
     7146function defaultPrefilter( elem, props, opts ) {
     7147        /* jshint validthis: true */
     7148        var prop, value, toggle, tween, hooks, oldfire, display, dDisplay,
     7149                anim = this,
     7150                orig = {},
     7151                style = elem.style,
     7152                hidden = elem.nodeType && isHidden( elem ),
     7153                dataShow = jQuery._data( elem, "fxshow" );
     7154
     7155        // handle queue: false promises
     7156        if ( !opts.queue ) {
     7157                hooks = jQuery._queueHooks( elem, "fx" );
     7158                if ( hooks.unqueued == null ) {
     7159                        hooks.unqueued = 0;
     7160                        oldfire = hooks.empty.fire;
     7161                        hooks.empty.fire = function() {
     7162                                if ( !hooks.unqueued ) {
     7163                                        oldfire();
     7164                                }
     7165                        };
     7166                }
     7167                hooks.unqueued++;
     7168
     7169                anim.always(function() {
     7170                        // doing this makes sure that the complete handler will be called
     7171                        // before this completes
     7172                        anim.always(function() {
     7173                                hooks.unqueued--;
     7174                                if ( !jQuery.queue( elem, "fx" ).length ) {
     7175                                        hooks.empty.fire();
     7176                                }
     7177                        });
     7178                });
     7179        }
     7180
     7181        // height/width overflow pass
     7182        if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
     7183                // Make sure that nothing sneaks out
     7184                // Record all 3 overflow attributes because IE does not
     7185                // change the overflow attribute when overflowX and
     7186                // overflowY are set to the same value
     7187                opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
     7188
     7189                // Set display property to inline-block for height/width
     7190                // animations on inline elements that are having width/height animated
     7191                display = jQuery.css( elem, "display" );
     7192                dDisplay = defaultDisplay( elem.nodeName );
     7193                if ( display === "none" ) {
     7194                        display = dDisplay;
     7195                }
     7196                if ( display === "inline" &&
     7197                                jQuery.css( elem, "float" ) === "none" ) {
     7198
     7199                        // inline-level elements accept inline-block;
     7200                        // block-level elements need to be inline with layout
     7201                        if ( !support.inlineBlockNeedsLayout || dDisplay === "inline" ) {
     7202                                style.display = "inline-block";
     7203                        } else {
     7204                                style.zoom = 1;
     7205                        }
     7206                }
     7207        }
     7208
     7209        if ( opts.overflow ) {
     7210                style.overflow = "hidden";
     7211                if ( !support.shrinkWrapBlocks() ) {
     7212                        anim.always(function() {
     7213                                style.overflow = opts.overflow[ 0 ];
     7214                                style.overflowX = opts.overflow[ 1 ];
     7215                                style.overflowY = opts.overflow[ 2 ];
     7216                        });
     7217                }
     7218        }
     7219
     7220        // show/hide pass
     7221        for ( prop in props ) {
     7222                value = props[ prop ];
     7223                if ( rfxtypes.exec( value ) ) {
     7224                        delete props[ prop ];
     7225                        toggle = toggle || value === "toggle";
     7226                        if ( value === ( hidden ? "hide" : "show" ) ) {
     7227
     7228                                // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
     7229                                if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
     7230                                        hidden = true;
     7231                                } else {
     7232                                        continue;
     7233                                }
     7234                        }
     7235                        orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
     7236                }
     7237        }
     7238
     7239        if ( !jQuery.isEmptyObject( orig ) ) {
     7240                if ( dataShow ) {
     7241                        if ( "hidden" in dataShow ) {
     7242                                hidden = dataShow.hidden;
     7243                        }
     7244                } else {
     7245                        dataShow = jQuery._data( elem, "fxshow", {} );
     7246                }
     7247
     7248                // store state if its toggle - enables .stop().toggle() to "reverse"
     7249                if ( toggle ) {
     7250                        dataShow.hidden = !hidden;
     7251                }
     7252                if ( hidden ) {
     7253                        jQuery( elem ).show();
     7254                } else {
     7255                        anim.done(function() {
     7256                                jQuery( elem ).hide();
     7257                        });
     7258                }
     7259                anim.done(function() {
     7260                        var prop;
     7261                        jQuery._removeData( elem, "fxshow" );
     7262                        for ( prop in orig ) {
     7263                                jQuery.style( elem, prop, orig[ prop ] );
     7264                        }
     7265                });
     7266                for ( prop in orig ) {
     7267                        tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
     7268
     7269                        if ( !( prop in dataShow ) ) {
     7270                                dataShow[ prop ] = tween.start;
     7271                                if ( hidden ) {
     7272                                        tween.end = tween.start;
     7273                                        tween.start = prop === "width" || prop === "height" ? 1 : 0;
     7274                                }
     7275                        }
     7276                }
     7277        }
     7278}
     7279
     7280function propFilter( props, specialEasing ) {
     7281        var index, name, easing, value, hooks;
     7282
     7283        // camelCase, specialEasing and expand cssHook pass
     7284        for ( index in props ) {
     7285                name = jQuery.camelCase( index );
     7286                easing = specialEasing[ name ];
     7287                value = props[ index ];
     7288                if ( jQuery.isArray( value ) ) {
     7289                        easing = value[ 1 ];
     7290                        value = props[ index ] = value[ 0 ];
     7291                }
     7292
     7293                if ( index !== name ) {
     7294                        props[ name ] = value;
     7295                        delete props[ index ];
     7296                }
     7297
     7298                hooks = jQuery.cssHooks[ name ];
     7299                if ( hooks && "expand" in hooks ) {
     7300                        value = hooks.expand( value );
     7301                        delete props[ name ];
     7302
     7303                        // not quite $.extend, this wont overwrite keys already present.
     7304                        // also - reusing 'index' from above because we have the correct "name"
     7305                        for ( index in value ) {
     7306                                if ( !( index in props ) ) {
     7307                                        props[ index ] = value[ index ];
     7308                                        specialEasing[ index ] = easing;
     7309                                }
     7310                        }
     7311                } else {
     7312                        specialEasing[ name ] = easing;
     7313                }
     7314        }
     7315}
     7316
     7317function Animation( elem, properties, options ) {
     7318        var result,
     7319                stopped,
     7320                index = 0,
     7321                length = animationPrefilters.length,
     7322                deferred = jQuery.Deferred().always( function() {
     7323                        // don't match elem in the :animated selector
     7324                        delete tick.elem;
     7325                }),
     7326                tick = function() {
     7327                        if ( stopped ) {
     7328                                return false;
     7329                        }
     7330                        var currentTime = fxNow || createFxNow(),
     7331                                remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
     7332                                // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
     7333                                temp = remaining / animation.duration || 0,
     7334                                percent = 1 - temp,
     7335                                index = 0,
     7336                                length = animation.tweens.length;
     7337
     7338                        for ( ; index < length ; index++ ) {
     7339                                animation.tweens[ index ].run( percent );
     7340                        }
     7341
     7342                        deferred.notifyWith( elem, [ animation, percent, remaining ]);
     7343
     7344                        if ( percent < 1 && length ) {
     7345                                return remaining;
     7346                        } else {
     7347                                deferred.resolveWith( elem, [ animation ] );
     7348                                return false;
     7349                        }
     7350                },
     7351                animation = deferred.promise({
     7352                        elem: elem,
     7353                        props: jQuery.extend( {}, properties ),
     7354                        opts: jQuery.extend( true, { specialEasing: {} }, options ),
     7355                        originalProperties: properties,
     7356                        originalOptions: options,
     7357                        startTime: fxNow || createFxNow(),
     7358                        duration: options.duration,
     7359                        tweens: [],
     7360                        createTween: function( prop, end ) {
     7361                                var tween = jQuery.Tween( elem, animation.opts, prop, end,
     7362                                                animation.opts.specialEasing[ prop ] || animation.opts.easing );
     7363                                animation.tweens.push( tween );
     7364                                return tween;
     7365                        },
     7366                        stop: function( gotoEnd ) {
     7367                                var index = 0,
     7368                                        // if we are going to the end, we want to run all the tweens
     7369                                        // otherwise we skip this part
     7370                                        length = gotoEnd ? animation.tweens.length : 0;
     7371                                if ( stopped ) {
     7372                                        return this;
     7373                                }
     7374                                stopped = true;
     7375                                for ( ; index < length ; index++ ) {
     7376                                        animation.tweens[ index ].run( 1 );
     7377                                }
     7378
     7379                                // resolve when we played the last frame
     7380                                // otherwise, reject
     7381                                if ( gotoEnd ) {
     7382                                        deferred.resolveWith( elem, [ animation, gotoEnd ] );
     7383                                } else {
     7384                                        deferred.rejectWith( elem, [ animation, gotoEnd ] );
     7385                                }
     7386                                return this;
     7387                        }
     7388                }),
     7389                props = animation.props;
     7390
     7391        propFilter( props, animation.opts.specialEasing );
     7392
     7393        for ( ; index < length ; index++ ) {
     7394                result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
     7395                if ( result ) {
     7396                        return result;
     7397                }
     7398        }
     7399
     7400        jQuery.map( props, createTween, animation );
     7401
     7402        if ( jQuery.isFunction( animation.opts.start ) ) {
     7403                animation.opts.start.call( elem, animation );
     7404        }
     7405
     7406        jQuery.fx.timer(
     7407                jQuery.extend( tick, {
     7408                        elem: elem,
     7409                        anim: animation,
     7410                        queue: animation.opts.queue
    74707411                })
    7471                 .filter(function(){
    7472                         var type = this.type;
    7473                         // Use .is(":disabled") so that fieldset[disabled] works
    7474                         return this.name && !jQuery( this ).is( ":disabled" ) &&
    7475                                 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
    7476                                 ( this.checked || !manipulation_rcheckableType.test( type ) );
    7477                 })
    7478                 .map(function( i, elem ){
    7479                         var val = jQuery( this ).val();
    7480 
    7481                         return val == null ?
    7482                                 null :
    7483                                 jQuery.isArray( val ) ?
    7484                                         jQuery.map( val, function( val ){
    7485                                                 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
    7486                                         }) :
    7487                                         { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
    7488                 }).get();
     7412        );
     7413
     7414        // attach callbacks from options
     7415        return animation.progress( animation.opts.progress )
     7416                .done( animation.opts.done, animation.opts.complete )
     7417                .fail( animation.opts.fail )
     7418                .always( animation.opts.always );
     7419}
     7420
     7421jQuery.Animation = jQuery.extend( Animation, {
     7422        tweener: function( props, callback ) {
     7423                if ( jQuery.isFunction( props ) ) {
     7424                        callback = props;
     7425                        props = [ "*" ];
     7426                } else {
     7427                        props = props.split(" ");
     7428                }
     7429
     7430                var prop,
     7431                        index = 0,
     7432                        length = props.length;
     7433
     7434                for ( ; index < length ; index++ ) {
     7435                        prop = props[ index ];
     7436                        tweeners[ prop ] = tweeners[ prop ] || [];
     7437                        tweeners[ prop ].unshift( callback );
     7438                }
     7439        },
     7440
     7441        prefilter: function( callback, prepend ) {
     7442                if ( prepend ) {
     7443                        animationPrefilters.unshift( callback );
     7444                } else {
     7445                        animationPrefilters.push( callback );
     7446                }
    74897447        }
    74907448});
    74917449
    7492 //Serialize an array of form elements or a set of
    7493 //key/values into a query string
    7494 jQuery.param = function( a, traditional ) {
    7495         var prefix,
    7496                 s = [],
    7497                 add = function( key, value ) {
    7498                         // If value is a function, invoke it and return its value
    7499                         value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
    7500                         s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
     7450jQuery.speed = function( speed, easing, fn ) {
     7451        var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
     7452                complete: fn || !fn && easing ||
     7453                        jQuery.isFunction( speed ) && speed,
     7454                duration: speed,
     7455                easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
     7456        };
     7457
     7458        opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
     7459                opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
     7460
     7461        // normalize opt.queue - true/undefined/null -> "fx"
     7462        if ( opt.queue == null || opt.queue === true ) {
     7463                opt.queue = "fx";
     7464        }
     7465
     7466        // Queueing
     7467        opt.old = opt.complete;
     7468
     7469        opt.complete = function() {
     7470                if ( jQuery.isFunction( opt.old ) ) {
     7471                        opt.old.call( this );
     7472                }
     7473
     7474                if ( opt.queue ) {
     7475                        jQuery.dequeue( this, opt.queue );
     7476                }
     7477        };
     7478
     7479        return opt;
     7480};
     7481
     7482jQuery.fn.extend({
     7483        fadeTo: function( speed, to, easing, callback ) {
     7484
     7485                // show any hidden elements after setting opacity to 0
     7486                return this.filter( isHidden ).css( "opacity", 0 ).show()
     7487
     7488                        // animate to the value specified
     7489                        .end().animate({ opacity: to }, speed, easing, callback );
     7490        },
     7491        animate: function( prop, speed, easing, callback ) {
     7492                var empty = jQuery.isEmptyObject( prop ),
     7493                        optall = jQuery.speed( speed, easing, callback ),
     7494                        doAnimation = function() {
     7495                                // Operate on a copy of prop so per-property easing won't be lost
     7496                                var anim = Animation( this, jQuery.extend( {}, prop ), optall );
     7497
     7498                                // Empty animations, or finishing resolves immediately
     7499                                if ( empty || jQuery._data( this, "finish" ) ) {
     7500                                        anim.stop( true );
     7501                                }
     7502                        };
     7503                        doAnimation.finish = doAnimation;
     7504
     7505                return empty || optall.queue === false ?
     7506                        this.each( doAnimation ) :
     7507                        this.queue( optall.queue, doAnimation );
     7508        },
     7509        stop: function( type, clearQueue, gotoEnd ) {
     7510                var stopQueue = function( hooks ) {
     7511                        var stop = hooks.stop;
     7512                        delete hooks.stop;
     7513                        stop( gotoEnd );
    75017514                };
    75027515
    7503         // Set traditional to true for jQuery <= 1.3.2 behavior.
    7504         if ( traditional === undefined ) {
    7505                 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
    7506         }
    7507 
    7508         // If an array was passed in, assume that it is an array of form elements.
    7509         if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
    7510                 // Serialize the form elements
    7511                 jQuery.each( a, function() {
    7512                         add( this.name, this.value );
     7516                if ( typeof type !== "string" ) {
     7517                        gotoEnd = clearQueue;
     7518                        clearQueue = type;
     7519                        type = undefined;
     7520                }
     7521                if ( clearQueue && type !== false ) {
     7522                        this.queue( type || "fx", [] );
     7523                }
     7524
     7525                return this.each(function() {
     7526                        var dequeue = true,
     7527                                index = type != null && type + "queueHooks",
     7528                                timers = jQuery.timers,
     7529                                data = jQuery._data( this );
     7530
     7531                        if ( index ) {
     7532                                if ( data[ index ] && data[ index ].stop ) {
     7533                                        stopQueue( data[ index ] );
     7534                                }
     7535                        } else {
     7536                                for ( index in data ) {
     7537                                        if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
     7538                                                stopQueue( data[ index ] );
     7539                                        }
     7540                                }
     7541                        }
     7542
     7543                        for ( index = timers.length; index--; ) {
     7544                                if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
     7545                                        timers[ index ].anim.stop( gotoEnd );
     7546                                        dequeue = false;
     7547                                        timers.splice( index, 1 );
     7548                                }
     7549                        }
     7550
     7551                        // start the next in the queue if the last step wasn't forced
     7552                        // timers currently will call their complete callbacks, which will dequeue
     7553                        // but only if they were gotoEnd
     7554                        if ( dequeue || !gotoEnd ) {
     7555                                jQuery.dequeue( this, type );
     7556                        }
    75137557                });
    7514 
     7558        },
     7559        finish: function( type ) {
     7560                if ( type !== false ) {
     7561                        type = type || "fx";
     7562                }
     7563                return this.each(function() {
     7564                        var index,
     7565                                data = jQuery._data( this ),
     7566                                queue = data[ type + "queue" ],
     7567                                hooks = data[ type + "queueHooks" ],
     7568                                timers = jQuery.timers,
     7569                                length = queue ? queue.length : 0;
     7570
     7571                        // enable finishing flag on private data
     7572                        data.finish = true;
     7573
     7574                        // empty the queue first
     7575                        jQuery.queue( this, type, [] );
     7576
     7577                        if ( hooks && hooks.stop ) {
     7578                                hooks.stop.call( this, true );
     7579                        }
     7580
     7581                        // look for any active animations, and finish them
     7582                        for ( index = timers.length; index--; ) {
     7583                                if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
     7584                                        timers[ index ].anim.stop( true );
     7585                                        timers.splice( index, 1 );
     7586                                }
     7587                        }
     7588
     7589                        // look for any animations in the old queue and finish them
     7590                        for ( index = 0; index < length; index++ ) {
     7591                                if ( queue[ index ] && queue[ index ].finish ) {
     7592                                        queue[ index ].finish.call( this );
     7593                                }
     7594                        }
     7595
     7596                        // turn off finishing flag
     7597                        delete data.finish;
     7598                });
     7599        }
     7600});
     7601
     7602jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
     7603        var cssFn = jQuery.fn[ name ];
     7604        jQuery.fn[ name ] = function( speed, easing, callback ) {
     7605                return speed == null || typeof speed === "boolean" ?
     7606                        cssFn.apply( this, arguments ) :
     7607                        this.animate( genFx( name, true ), speed, easing, callback );
     7608        };
     7609});
     7610
     7611// Generate shortcuts for custom animations
     7612jQuery.each({
     7613        slideDown: genFx("show"),
     7614        slideUp: genFx("hide"),
     7615        slideToggle: genFx("toggle"),
     7616        fadeIn: { opacity: "show" },
     7617        fadeOut: { opacity: "hide" },
     7618        fadeToggle: { opacity: "toggle" }
     7619}, function( name, props ) {
     7620        jQuery.fn[ name ] = function( speed, easing, callback ) {
     7621                return this.animate( props, speed, easing, callback );
     7622        };
     7623});
     7624
     7625jQuery.timers = [];
     7626jQuery.fx.tick = function() {
     7627        var timer,
     7628                timers = jQuery.timers,
     7629                i = 0;
     7630
     7631        fxNow = jQuery.now();
     7632
     7633        for ( ; i < timers.length; i++ ) {
     7634                timer = timers[ i ];
     7635                // Checks the timer has not already been removed
     7636                if ( !timer() && timers[ i ] === timer ) {
     7637                        timers.splice( i--, 1 );
     7638                }
     7639        }
     7640
     7641        if ( !timers.length ) {
     7642                jQuery.fx.stop();
     7643        }
     7644        fxNow = undefined;
     7645};
     7646
     7647jQuery.fx.timer = function( timer ) {
     7648        jQuery.timers.push( timer );
     7649        if ( timer() ) {
     7650                jQuery.fx.start();
    75157651        } else {
    7516                 // If traditional, encode the "old" way (the way 1.3.2 or older
    7517                 // did it), otherwise encode params recursively.
    7518                 for ( prefix in a ) {
    7519                         buildParams( prefix, a[ prefix ], traditional, add );
    7520                 }
    7521         }
    7522 
    7523         // Return the resulting serialization
    7524         return s.join( "&" ).replace( r20, "+" );
     7652                jQuery.timers.pop();
     7653        }
    75257654};
    75267655
    7527 function buildParams( prefix, obj, traditional, add ) {
    7528         var name;
    7529 
    7530         if ( jQuery.isArray( obj ) ) {
    7531                 // Serialize array item.
    7532                 jQuery.each( obj, function( i, v ) {
    7533                         if ( traditional || rbracket.test( prefix ) ) {
    7534                                 // Treat each array item as a scalar.
    7535                                 add( prefix, v );
    7536 
     7656jQuery.fx.interval = 13;
     7657
     7658jQuery.fx.start = function() {
     7659        if ( !timerId ) {
     7660                timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
     7661        }
     7662};
     7663
     7664jQuery.fx.stop = function() {
     7665        clearInterval( timerId );
     7666        timerId = null;
     7667};
     7668
     7669jQuery.fx.speeds = {
     7670        slow: 600,
     7671        fast: 200,
     7672        // Default speed
     7673        _default: 400
     7674};
     7675
     7676
     7677// Based off of the plugin by Clint Helfers, with permission.
     7678// http://blindsignals.com/index.php/2009/07/jquery-delay/
     7679jQuery.fn.delay = function( time, type ) {
     7680        time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
     7681        type = type || "fx";
     7682
     7683        return this.queue( type, function( next, hooks ) {
     7684                var timeout = setTimeout( next, time );
     7685                hooks.stop = function() {
     7686                        clearTimeout( timeout );
     7687                };
     7688        });
     7689};
     7690
     7691
     7692(function() {
     7693        var a, input, select, opt,
     7694                div = document.createElement("div" );
     7695
     7696        // Setup
     7697        div.setAttribute( "className", "t" );
     7698        div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
     7699        a = div.getElementsByTagName("a")[ 0 ];
     7700
     7701        // First batch of tests.
     7702        select = document.createElement("select");
     7703        opt = select.appendChild( document.createElement("option") );
     7704        input = div.getElementsByTagName("input")[ 0 ];
     7705
     7706        a.style.cssText = "top:1px";
     7707
     7708        // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
     7709        support.getSetAttribute = div.className !== "t";
     7710
     7711        // Get the style information from getAttribute
     7712        // (IE uses .cssText instead)
     7713        support.style = /top/.test( a.getAttribute("style") );
     7714
     7715        // Make sure that URLs aren't manipulated
     7716        // (IE normalizes it by default)
     7717        support.hrefNormalized = a.getAttribute("href") === "/a";
     7718
     7719        // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
     7720        support.checkOn = !!input.value;
     7721
     7722        // Make sure that a selected-by-default option has a working selected property.
     7723        // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
     7724        support.optSelected = opt.selected;
     7725
     7726        // Tests for enctype support on a form (#6743)
     7727        support.enctype = !!document.createElement("form").enctype;
     7728
     7729        // Make sure that the options inside disabled selects aren't marked as disabled
     7730        // (WebKit marks them as disabled)
     7731        select.disabled = true;
     7732        support.optDisabled = !opt.disabled;
     7733
     7734        // Support: IE8 only
     7735        // Check if we can trust getAttribute("value")
     7736        input = document.createElement( "input" );
     7737        input.setAttribute( "value", "" );
     7738        support.input = input.getAttribute( "value" ) === "";
     7739
     7740        // Check if an input maintains its value after becoming a radio
     7741        input.value = "t";
     7742        input.setAttribute( "type", "radio" );
     7743        support.radioValue = input.value === "t";
     7744
     7745        // Null elements to avoid leaks in IE.
     7746        a = input = select = opt = div = null;
     7747})();
     7748
     7749
     7750var rreturn = /\r/g;
     7751
     7752jQuery.fn.extend({
     7753        val: function( value ) {
     7754                var hooks, ret, isFunction,
     7755                        elem = this[0];
     7756
     7757                if ( !arguments.length ) {
     7758                        if ( elem ) {
     7759                                hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
     7760
     7761                                if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
     7762                                        return ret;
     7763                                }
     7764
     7765                                ret = elem.value;
     7766
     7767                                return typeof ret === "string" ?
     7768                                        // handle most common string cases
     7769                                        ret.replace(rreturn, "") :
     7770                                        // handle cases where value is null/undef or number
     7771                                        ret == null ? "" : ret;
     7772                        }
     7773
     7774                        return;
     7775                }
     7776
     7777                isFunction = jQuery.isFunction( value );
     7778
     7779                return this.each(function( i ) {
     7780                        var val;
     7781
     7782                        if ( this.nodeType !== 1 ) {
     7783                                return;
     7784                        }
     7785
     7786                        if ( isFunction ) {
     7787                                val = value.call( this, i, jQuery( this ).val() );
    75377788                        } else {
    7538                                 // Item is non-scalar (array or object), encode its numeric index.
    7539                                 buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
     7789                                val = value;
     7790                        }
     7791
     7792                        // Treat null/undefined as ""; convert numbers to string
     7793                        if ( val == null ) {
     7794                                val = "";
     7795                        } else if ( typeof val === "number" ) {
     7796                                val += "";
     7797                        } else if ( jQuery.isArray( val ) ) {
     7798                                val = jQuery.map( val, function( value ) {
     7799                                        return value == null ? "" : value + "";
     7800                                });
     7801                        }
     7802
     7803                        hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
     7804
     7805                        // If set returns undefined, fall back to normal setting
     7806                        if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
     7807                                this.value = val;
    75407808                        }
    75417809                });
    7542 
    7543         } else if ( !traditional && jQuery.type( obj ) === "object" ) {
    7544                 // Serialize object item.
    7545                 for ( name in obj ) {
    7546                         buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
    7547                 }
    7548 
    7549         } else {
    7550                 // Serialize scalar item.
    7551                 add( prefix, obj );
    7552         }
     7810        }
     7811});
     7812
     7813jQuery.extend({
     7814        valHooks: {
     7815                option: {
     7816                        get: function( elem ) {
     7817                                var val = jQuery.find.attr( elem, "value" );
     7818                                return val != null ?
     7819                                        val :
     7820                                        jQuery.text( elem );
     7821                        }
     7822                },
     7823                select: {
     7824                        get: function( elem ) {
     7825                                var value, option,
     7826                                        options = elem.options,
     7827                                        index = elem.selectedIndex,
     7828                                        one = elem.type === "select-one" || index < 0,
     7829                                        values = one ? null : [],
     7830                                        max = one ? index + 1 : options.length,
     7831                                        i = index < 0 ?
     7832                                                max :
     7833                                                one ? index : 0;
     7834
     7835                                // Loop through all the selected options
     7836                                for ( ; i < max; i++ ) {
     7837                                        option = options[ i ];
     7838
     7839                                        // oldIE doesn't update selected after form reset (#2551)
     7840                                        if ( ( option.selected || i === index ) &&
     7841                                                        // Don't return options that are disabled or in a disabled optgroup
     7842                                                        ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
     7843                                                        ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
     7844
     7845                                                // Get the specific value for the option
     7846                                                value = jQuery( option ).val();
     7847
     7848                                                // We don't need an array for one selects
     7849                                                if ( one ) {
     7850                                                        return value;
     7851                                                }
     7852
     7853                                                // Multi-Selects return an array
     7854                                                values.push( value );
     7855                                        }
     7856                                }
     7857
     7858                                return values;
     7859                        },
     7860
     7861                        set: function( elem, value ) {
     7862                                var optionSet, option,
     7863                                        options = elem.options,
     7864                                        values = jQuery.makeArray( value ),
     7865                                        i = options.length;
     7866
     7867                                while ( i-- ) {
     7868                                        option = options[ i ];
     7869
     7870                                        if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
     7871
     7872                                                // Support: IE6
     7873                                                // When new option element is added to select box we need to
     7874                                                // force reflow of newly added node in order to workaround delay
     7875                                                // of initialization properties
     7876                                                try {
     7877                                                        option.selected = optionSet = true;
     7878
     7879                                                } catch ( _ ) {
     7880
     7881                                                        // Will be executed only in IE6
     7882                                                        option.scrollHeight;
     7883                                                }
     7884
     7885                                        } else {
     7886                                                option.selected = false;
     7887                                        }
     7888                                }
     7889
     7890                                // Force browsers to behave consistently when non-matching value is set
     7891                                if ( !optionSet ) {
     7892                                        elem.selectedIndex = -1;
     7893                                }
     7894
     7895                                return options;
     7896                        }
     7897                }
     7898        }
     7899});
     7900
     7901// Radios and checkboxes getter/setter
     7902jQuery.each([ "radio", "checkbox" ], function() {
     7903        jQuery.valHooks[ this ] = {
     7904                set: function( elem, value ) {
     7905                        if ( jQuery.isArray( value ) ) {
     7906                                return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
     7907                        }
     7908                }
     7909        };
     7910        if ( !support.checkOn ) {
     7911                jQuery.valHooks[ this ].get = function( elem ) {
     7912                        // Support: Webkit
     7913                        // "" is returned instead of "on" if a value isn't specified
     7914                        return elem.getAttribute("value") === null ? "on" : elem.value;
     7915                };
     7916        }
     7917});
     7918
     7919
     7920
     7921
     7922var nodeHook, boolHook,
     7923        attrHandle = jQuery.expr.attrHandle,
     7924        ruseDefault = /^(?:checked|selected)$/i,
     7925        getSetAttribute = support.getSetAttribute,
     7926        getSetInput = support.input;
     7927
     7928jQuery.fn.extend({
     7929        attr: function( name, value ) {
     7930                return access( this, jQuery.attr, name, value, arguments.length > 1 );
     7931        },
     7932
     7933        removeAttr: function( name ) {
     7934                return this.each(function() {
     7935                        jQuery.removeAttr( this, name );
     7936                });
     7937        }
     7938});
     7939
     7940jQuery.extend({
     7941        attr: function( elem, name, value ) {
     7942                var hooks, ret,
     7943                        nType = elem.nodeType;
     7944
     7945                // don't get/set attributes on text, comment and attribute nodes
     7946                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
     7947                        return;
     7948                }
     7949
     7950                // Fallback to prop when attributes are not supported
     7951                if ( typeof elem.getAttribute === strundefined ) {
     7952                        return jQuery.prop( elem, name, value );
     7953                }
     7954
     7955                // All attributes are lowercase
     7956                // Grab necessary hook if one is defined
     7957                if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
     7958                        name = name.toLowerCase();
     7959                        hooks = jQuery.attrHooks[ name ] ||
     7960                                ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
     7961                }
     7962
     7963                if ( value !== undefined ) {
     7964
     7965                        if ( value === null ) {
     7966                                jQuery.removeAttr( elem, name );
     7967
     7968                        } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
     7969                                return ret;
     7970
     7971                        } else {
     7972                                elem.setAttribute( name, value + "" );
     7973                                return value;
     7974                        }
     7975
     7976                } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
     7977                        return ret;
     7978
     7979                } else {
     7980                        ret = jQuery.find.attr( elem, name );
     7981
     7982                        // Non-existent attributes return null, we normalize to undefined
     7983                        return ret == null ?
     7984                                undefined :
     7985                                ret;
     7986                }
     7987        },
     7988
     7989        removeAttr: function( elem, value ) {
     7990                var name, propName,
     7991                        i = 0,
     7992                        attrNames = value && value.match( rnotwhite );
     7993
     7994                if ( attrNames && elem.nodeType === 1 ) {
     7995                        while ( (name = attrNames[i++]) ) {
     7996                                propName = jQuery.propFix[ name ] || name;
     7997
     7998                                // Boolean attributes get special treatment (#10870)
     7999                                if ( jQuery.expr.match.bool.test( name ) ) {
     8000                                        // Set corresponding property to false
     8001                                        if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
     8002                                                elem[ propName ] = false;
     8003                                        // Support: IE<9
     8004                                        // Also clear defaultChecked/defaultSelected (if appropriate)
     8005                                        } else {
     8006                                                elem[ jQuery.camelCase( "default-" + name ) ] =
     8007                                                        elem[ propName ] = false;
     8008                                        }
     8009
     8010                                // See #9699 for explanation of this approach (setting first, then removal)
     8011                                } else {
     8012                                        jQuery.attr( elem, name, "" );
     8013                                }
     8014
     8015                                elem.removeAttribute( getSetAttribute ? name : propName );
     8016                        }
     8017                }
     8018        },
     8019
     8020        attrHooks: {
     8021                type: {
     8022                        set: function( elem, value ) {
     8023                                if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
     8024                                        // Setting the type on a radio button after the value resets the value in IE6-9
     8025                                        // Reset value to default in case type is set after value during creation
     8026                                        var val = elem.value;
     8027                                        elem.setAttribute( "type", value );
     8028                                        if ( val ) {
     8029                                                elem.value = val;
     8030                                        }
     8031                                        return value;
     8032                                }
     8033                        }
     8034                }
     8035        }
     8036});
     8037
     8038// Hook for boolean attributes
     8039boolHook = {
     8040        set: function( elem, value, name ) {
     8041                if ( value === false ) {
     8042                        // Remove boolean attributes when set to false
     8043                        jQuery.removeAttr( elem, name );
     8044                } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
     8045                        // IE<8 needs the *property* name
     8046                        elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
     8047
     8048                // Use defaultChecked and defaultSelected for oldIE
     8049                } else {
     8050                        elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
     8051                }
     8052
     8053                return name;
     8054        }
     8055};
     8056
     8057// Retrieve booleans specially
     8058jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
     8059
     8060        var getter = attrHandle[ name ] || jQuery.find.attr;
     8061
     8062        attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
     8063                function( elem, name, isXML ) {
     8064                        var ret, handle;
     8065                        if ( !isXML ) {
     8066                                // Avoid an infinite loop by temporarily removing this function from the getter
     8067                                handle = attrHandle[ name ];
     8068                                attrHandle[ name ] = ret;
     8069                                ret = getter( elem, name, isXML ) != null ?
     8070                                        name.toLowerCase() :
     8071                                        null;
     8072                                attrHandle[ name ] = handle;
     8073                        }
     8074                        return ret;
     8075                } :
     8076                function( elem, name, isXML ) {
     8077                        if ( !isXML ) {
     8078                                return elem[ jQuery.camelCase( "default-" + name ) ] ?
     8079                                        name.toLowerCase() :
     8080                                        null;
     8081                        }
     8082                };
     8083});
     8084
     8085// fix oldIE attroperties
     8086if ( !getSetInput || !getSetAttribute ) {
     8087        jQuery.attrHooks.value = {
     8088                set: function( elem, value, name ) {
     8089                        if ( jQuery.nodeName( elem, "input" ) ) {
     8090                                // Does not return so that setAttribute is also used
     8091                                elem.defaultValue = value;
     8092                        } else {
     8093                                // Use nodeHook if defined (#1954); otherwise setAttribute is fine
     8094                                return nodeHook && nodeHook.set( elem, value, name );
     8095                        }
     8096                }
     8097        };
    75538098}
     8099
     8100// IE6/7 do not support getting/setting some attributes with get/setAttribute
     8101if ( !getSetAttribute ) {
     8102
     8103        // Use this for any attribute in IE6/7
     8104        // This fixes almost every IE6/7 issue
     8105        nodeHook = {
     8106                set: function( elem, value, name ) {
     8107                        // Set the existing or create a new attribute node
     8108                        var ret = elem.getAttributeNode( name );
     8109                        if ( !ret ) {
     8110                                elem.setAttributeNode(
     8111                                        (ret = elem.ownerDocument.createAttribute( name ))
     8112                                );
     8113                        }
     8114
     8115                        ret.value = value += "";
     8116
     8117                        // Break association with cloned elements by also using setAttribute (#9646)
     8118                        if ( name === "value" || value === elem.getAttribute( name ) ) {
     8119                                return value;
     8120                        }
     8121                }
     8122        };
     8123
     8124        // Some attributes are constructed with empty-string values when not defined
     8125        attrHandle.id = attrHandle.name = attrHandle.coords =
     8126                function( elem, name, isXML ) {
     8127                        var ret;
     8128                        if ( !isXML ) {
     8129                                return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
     8130                                        ret.value :
     8131                                        null;
     8132                        }
     8133                };
     8134
     8135        // Fixing value retrieval on a button requires this module
     8136        jQuery.valHooks.button = {
     8137                get: function( elem, name ) {
     8138                        var ret = elem.getAttributeNode( name );
     8139                        if ( ret && ret.specified ) {
     8140                                return ret.value;
     8141                        }
     8142                },
     8143                set: nodeHook.set
     8144        };
     8145
     8146        // Set contenteditable to false on removals(#10429)
     8147        // Setting to empty string throws an error as an invalid value
     8148        jQuery.attrHooks.contenteditable = {
     8149                set: function( elem, value, name ) {
     8150                        nodeHook.set( elem, value === "" ? false : value, name );
     8151                }
     8152        };
     8153
     8154        // Set width and height to auto instead of 0 on empty string( Bug #8150 )
     8155        // This is for removals
     8156        jQuery.each([ "width", "height" ], function( i, name ) {
     8157                jQuery.attrHooks[ name ] = {
     8158                        set: function( elem, value ) {
     8159                                if ( value === "" ) {
     8160                                        elem.setAttribute( name, "auto" );
     8161                                        return value;
     8162                                }
     8163                        }
     8164                };
     8165        });
     8166}
     8167
     8168if ( !support.style ) {
     8169        jQuery.attrHooks.style = {
     8170                get: function( elem ) {
     8171                        // Return undefined in the case of empty string
     8172                        // Note: IE uppercases css property names, but if we were to .toLowerCase()
     8173                        // .cssText, that would destroy case senstitivity in URL's, like in "background"
     8174                        return elem.style.cssText || undefined;
     8175                },
     8176                set: function( elem, value ) {
     8177                        return ( elem.style.cssText = value + "" );
     8178                }
     8179        };
     8180}
     8181
     8182
     8183
     8184
     8185var rfocusable = /^(?:input|select|textarea|button|object)$/i,
     8186        rclickable = /^(?:a|area)$/i;
     8187
     8188jQuery.fn.extend({
     8189        prop: function( name, value ) {
     8190                return access( this, jQuery.prop, name, value, arguments.length > 1 );
     8191        },
     8192
     8193        removeProp: function( name ) {
     8194                name = jQuery.propFix[ name ] || name;
     8195                return this.each(function() {
     8196                        // try/catch handles cases where IE balks (such as removing a property on window)
     8197                        try {
     8198                                this[ name ] = undefined;
     8199                                delete this[ name ];
     8200                        } catch( e ) {}
     8201                });
     8202        }
     8203});
     8204
     8205jQuery.extend({
     8206        propFix: {
     8207                "for": "htmlFor",
     8208                "class": "className"
     8209        },
     8210
     8211        prop: function( elem, name, value ) {
     8212                var ret, hooks, notxml,
     8213                        nType = elem.nodeType;
     8214
     8215                // don't get/set properties on text, comment and attribute nodes
     8216                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
     8217                        return;
     8218                }
     8219
     8220                notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
     8221
     8222                if ( notxml ) {
     8223                        // Fix name and attach hooks
     8224                        name = jQuery.propFix[ name ] || name;
     8225                        hooks = jQuery.propHooks[ name ];
     8226                }
     8227
     8228                if ( value !== undefined ) {
     8229                        return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
     8230                                ret :
     8231                                ( elem[ name ] = value );
     8232
     8233                } else {
     8234                        return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
     8235                                ret :
     8236                                elem[ name ];
     8237                }
     8238        },
     8239
     8240        propHooks: {
     8241                tabIndex: {
     8242                        get: function( elem ) {
     8243                                // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
     8244                                // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
     8245                                // Use proper attribute retrieval(#12072)
     8246                                var tabindex = jQuery.find.attr( elem, "tabindex" );
     8247
     8248                                return tabindex ?
     8249                                        parseInt( tabindex, 10 ) :
     8250                                        rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
     8251                                                0 :
     8252                                                -1;
     8253                        }
     8254                }
     8255        }
     8256});
     8257
     8258// Some attributes require a special call on IE
     8259// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
     8260if ( !support.hrefNormalized ) {
     8261        // href/src property should get the full normalized URL (#10299/#12915)
     8262        jQuery.each([ "href", "src" ], function( i, name ) {
     8263                jQuery.propHooks[ name ] = {
     8264                        get: function( elem ) {
     8265                                return elem.getAttribute( name, 4 );
     8266                        }
     8267                };
     8268        });
     8269}
     8270
     8271// Support: Safari, IE9+
     8272// mis-reports the default selected property of an option
     8273// Accessing the parent's selectedIndex property fixes it
     8274if ( !support.optSelected ) {
     8275        jQuery.propHooks.selected = {
     8276                get: function( elem ) {
     8277                        var parent = elem.parentNode;
     8278
     8279                        if ( parent ) {
     8280                                parent.selectedIndex;
     8281
     8282                                // Make sure that it also works with optgroups, see #5701
     8283                                if ( parent.parentNode ) {
     8284                                        parent.parentNode.selectedIndex;
     8285                                }
     8286                        }
     8287                        return null;
     8288                }
     8289        };
     8290}
     8291
     8292jQuery.each([
     8293        "tabIndex",
     8294        "readOnly",
     8295        "maxLength",
     8296        "cellSpacing",
     8297        "cellPadding",
     8298        "rowSpan",
     8299        "colSpan",
     8300        "useMap",
     8301        "frameBorder",
     8302        "contentEditable"
     8303], function() {
     8304        jQuery.propFix[ this.toLowerCase() ] = this;
     8305});
     8306
     8307// IE6/7 call enctype encoding
     8308if ( !support.enctype ) {
     8309        jQuery.propFix.enctype = "encoding";
     8310}
     8311
     8312
     8313
     8314
     8315var rclass = /[\t\r\n\f]/g;
     8316
     8317jQuery.fn.extend({
     8318        addClass: function( value ) {
     8319                var classes, elem, cur, clazz, j, finalValue,
     8320                        i = 0,
     8321                        len = this.length,
     8322                        proceed = typeof value === "string" && value;
     8323
     8324                if ( jQuery.isFunction( value ) ) {
     8325                        return this.each(function( j ) {
     8326                                jQuery( this ).addClass( value.call( this, j, this.className ) );
     8327                        });
     8328                }
     8329
     8330                if ( proceed ) {
     8331                        // The disjunction here is for better compressibility (see removeClass)
     8332                        classes = ( value || "" ).match( rnotwhite ) || [];
     8333
     8334                        for ( ; i < len; i++ ) {
     8335                                elem = this[ i ];
     8336                                cur = elem.nodeType === 1 && ( elem.className ?
     8337                                        ( " " + elem.className + " " ).replace( rclass, " " ) :
     8338                                        " "
     8339                                );
     8340
     8341                                if ( cur ) {
     8342                                        j = 0;
     8343                                        while ( (clazz = classes[j++]) ) {
     8344                                                if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
     8345                                                        cur += clazz + " ";
     8346                                                }
     8347                                        }
     8348
     8349                                        // only assign if different to avoid unneeded rendering.
     8350                                        finalValue = jQuery.trim( cur );
     8351                                        if ( elem.className !== finalValue ) {
     8352                                                elem.className = finalValue;
     8353                                        }
     8354                                }
     8355                        }
     8356                }
     8357
     8358                return this;
     8359        },
     8360
     8361        removeClass: function( value ) {
     8362                var classes, elem, cur, clazz, j, finalValue,
     8363                        i = 0,
     8364                        len = this.length,
     8365                        proceed = arguments.length === 0 || typeof value === "string" && value;
     8366
     8367                if ( jQuery.isFunction( value ) ) {
     8368                        return this.each(function( j ) {
     8369                                jQuery( this ).removeClass( value.call( this, j, this.className ) );
     8370                        });
     8371                }
     8372                if ( proceed ) {
     8373                        classes = ( value || "" ).match( rnotwhite ) || [];
     8374
     8375                        for ( ; i < len; i++ ) {
     8376                                elem = this[ i ];
     8377                                // This expression is here for better compressibility (see addClass)
     8378                                cur = elem.nodeType === 1 && ( elem.className ?
     8379                                        ( " " + elem.className + " " ).replace( rclass, " " ) :
     8380                                        ""
     8381                                );
     8382
     8383                                if ( cur ) {
     8384                                        j = 0;
     8385                                        while ( (clazz = classes[j++]) ) {
     8386                                                // Remove *all* instances
     8387                                                while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
     8388                                                        cur = cur.replace( " " + clazz + " ", " " );
     8389                                                }
     8390                                        }
     8391
     8392                                        // only assign if different to avoid unneeded rendering.
     8393                                        finalValue = value ? jQuery.trim( cur ) : "";
     8394                                        if ( elem.className !== finalValue ) {
     8395                                                elem.className = finalValue;
     8396                                        }
     8397                                }
     8398                        }
     8399                }
     8400
     8401                return this;
     8402        },
     8403
     8404        toggleClass: function( value, stateVal ) {
     8405                var type = typeof value;
     8406
     8407                if ( typeof stateVal === "boolean" && type === "string" ) {
     8408                        return stateVal ? this.addClass( value ) : this.removeClass( value );
     8409                }
     8410
     8411                if ( jQuery.isFunction( value ) ) {
     8412                        return this.each(function( i ) {
     8413                                jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
     8414                        });
     8415                }
     8416
     8417                return this.each(function() {
     8418                        if ( type === "string" ) {
     8419                                // toggle individual class names
     8420                                var className,
     8421                                        i = 0,
     8422                                        self = jQuery( this ),
     8423                                        classNames = value.match( rnotwhite ) || [];
     8424
     8425                                while ( (className = classNames[ i++ ]) ) {
     8426                                        // check each className given, space separated list
     8427                                        if ( self.hasClass( className ) ) {
     8428                                                self.removeClass( className );
     8429                                        } else {
     8430                                                self.addClass( className );
     8431                                        }
     8432                                }
     8433
     8434                        // Toggle whole class name
     8435                        } else if ( type === strundefined || type === "boolean" ) {
     8436                                if ( this.className ) {
     8437                                        // store className if set
     8438                                        jQuery._data( this, "__className__", this.className );
     8439                                }
     8440
     8441                                // If the element has a class name or if we're passed "false",
     8442                                // then remove the whole classname (if there was one, the above saved it).
     8443                                // Otherwise bring back whatever was previously saved (if anything),
     8444                                // falling back to the empty string if nothing was stored.
     8445                                this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
     8446                        }
     8447                });
     8448        },
     8449
     8450        hasClass: function( selector ) {
     8451                var className = " " + selector + " ",
     8452                        i = 0,
     8453                        l = this.length;
     8454                for ( ; i < l; i++ ) {
     8455                        if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
     8456                                return true;
     8457                        }
     8458                }
     8459
     8460                return false;
     8461        }
     8462});
     8463
     8464
     8465
     8466
     8467// Return jQuery for attributes-only inclusion
     8468
     8469
    75548470jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    75558471        "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
     
    75848500        }
    75858501});
     8502
     8503
     8504var nonce = jQuery.now();
     8505
     8506var rquery = (/\?/);
     8507
     8508
     8509
     8510var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
     8511
     8512jQuery.parseJSON = function( data ) {
     8513        // Attempt to parse using the native JSON parser first
     8514        if ( window.JSON && window.JSON.parse ) {
     8515                // Support: Android 2.3
     8516                // Workaround failure to string-cast null input
     8517                return window.JSON.parse( data + "" );
     8518        }
     8519
     8520        var requireNonComma,
     8521                depth = null,
     8522                str = jQuery.trim( data + "" );
     8523
     8524        // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
     8525        // after removing valid tokens
     8526        return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
     8527
     8528                // Force termination if we see a misplaced comma
     8529                if ( requireNonComma && comma ) {
     8530                        depth = 0;
     8531                }
     8532
     8533                // Perform no more replacements after returning to outermost depth
     8534                if ( depth === 0 ) {
     8535                        return token;
     8536                }
     8537
     8538                // Commas must not follow "[", "{", or ","
     8539                requireNonComma = open || comma;
     8540
     8541                // Determine new depth
     8542                // array/object open ("[" or "{"): depth += true - false (increment)
     8543                // array/object close ("]" or "}"): depth += false - true (decrement)
     8544                // other cases ("," or primitive): depth += true - true (numeric cast)
     8545                depth += !close - !open;
     8546
     8547                // Remove this token
     8548                return "";
     8549        }) ) ?
     8550                ( Function( "return " + str ) )() :
     8551                jQuery.error( "Invalid JSON: " + data );
     8552};
     8553
     8554
     8555// Cross-browser xml parsing
     8556jQuery.parseXML = function( data ) {
     8557        var xml, tmp;
     8558        if ( !data || typeof data !== "string" ) {
     8559                return null;
     8560        }
     8561        try {
     8562                if ( window.DOMParser ) { // Standard
     8563                        tmp = new DOMParser();
     8564                        xml = tmp.parseFromString( data, "text/xml" );
     8565                } else { // IE
     8566                        xml = new ActiveXObject( "Microsoft.XMLDOM" );
     8567                        xml.async = "false";
     8568                        xml.loadXML( data );
     8569                }
     8570        } catch( e ) {
     8571                xml = undefined;
     8572        }
     8573        if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
     8574                jQuery.error( "Invalid XML: " + data );
     8575        }
     8576        return xml;
     8577};
     8578
     8579
    75868580var
    75878581        // Document location
    75888582        ajaxLocParts,
    75898583        ajaxLocation,
    7590         ajax_nonce = jQuery.now(),
    7591 
    7592         ajax_rquery = /\?/,
     8584
    75938585        rhash = /#.*$/,
    75948586        rts = /([?&])_=[^&]*/,
     
    75988590        rnoContent = /^(?:GET|HEAD)$/,
    75998591        rprotocol = /^\/\//,
    7600         rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
    7601 
    7602         // Keep a copy of the old load method
    7603         _load = jQuery.fn.load,
     8592        rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
    76048593
    76058594        /* Prefilters
     
    76528641                var dataType,
    76538642                        i = 0,
    7654                         dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
     8643                        dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
    76558644
    76568645                if ( jQuery.isFunction( func ) ) {
     
    76588647                        while ( (dataType = dataTypes[i++]) ) {
    76598648                                // Prepend if requested
    7660                                 if ( dataType[0] === "+" ) {
     8649                                if ( dataType.charAt( 0 ) === "+" ) {
    76618650                                        dataType = dataType.slice( 1 ) || "*";
    76628651                                        (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
     
    76828671                jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
    76838672                        var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
    7684                         if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
     8673                        if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
    76858674                                options.dataTypes.unshift( dataTypeOrTransport );
    76868675                                inspect( dataTypeOrTransport );
     
    77158704}
    77168705
    7717 jQuery.fn.load = function( url, params, callback ) {
    7718         if ( typeof url !== "string" && _load ) {
    7719                 return _load.apply( this, arguments );
    7720         }
    7721 
    7722         var selector, response, type,
    7723                 self = this,
    7724                 off = url.indexOf(" ");
    7725 
    7726         if ( off >= 0 ) {
    7727                 selector = url.slice( off, url.length );
    7728                 url = url.slice( 0, off );
    7729         }
    7730 
    7731         // If it's a function
    7732         if ( jQuery.isFunction( params ) ) {
    7733 
    7734                 // We assume that it's the callback
    7735                 callback = params;
    7736                 params = undefined;
    7737 
    7738         // Otherwise, build a param string
    7739         } else if ( params && typeof params === "object" ) {
    7740                 type = "POST";
    7741         }
    7742 
    7743         // If we have elements to modify, make the request
    7744         if ( self.length > 0 ) {
    7745                 jQuery.ajax({
    7746                         url: url,
    7747 
    7748                         // if "type" variable is undefined, then "GET" method will be used
    7749                         type: type,
    7750                         dataType: "html",
    7751                         data: params
    7752                 }).done(function( responseText ) {
    7753 
    7754                         // Save response for use in complete callback
    7755                         response = arguments;
    7756 
    7757                         self.html( selector ?
    7758 
    7759                                 // If a selector was specified, locate the right elements in a dummy div
    7760                                 // Exclude scripts to avoid IE 'Permission Denied' errors
    7761                                 jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
    7762 
    7763                                 // Otherwise use the full result
    7764                                 responseText );
    7765 
    7766                 }).complete( callback && function( jqXHR, status ) {
    7767                         self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
    7768                 });
    7769         }
    7770 
    7771         return this;
    7772 };
    7773 
    7774 // Attach a bunch of functions for handling common AJAX events
    7775 jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
    7776         jQuery.fn[ type ] = function( fn ){
    7777                 return this.on( type, fn );
    7778         };
    7779 });
     8706/* Handles responses to an ajax request:
     8707 * - finds the right dataType (mediates between content-type and expected dataType)
     8708 * - returns the corresponding response
     8709 */
     8710function ajaxHandleResponses( s, jqXHR, responses ) {
     8711        var firstDataType, ct, finalDataType, type,
     8712                contents = s.contents,
     8713                dataTypes = s.dataTypes;
     8714
     8715        // Remove auto dataType and get content-type in the process
     8716        while ( dataTypes[ 0 ] === "*" ) {
     8717                dataTypes.shift();
     8718                if ( ct === undefined ) {
     8719                        ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
     8720                }
     8721        }
     8722
     8723        // Check if we're dealing with a known content-type
     8724        if ( ct ) {
     8725                for ( type in contents ) {
     8726                        if ( contents[ type ] && contents[ type ].test( ct ) ) {
     8727                                dataTypes.unshift( type );
     8728                                break;
     8729                        }
     8730                }
     8731        }
     8732
     8733        // Check to see if we have a response for the expected dataType
     8734        if ( dataTypes[ 0 ] in responses ) {
     8735                finalDataType = dataTypes[ 0 ];
     8736        } else {
     8737                // Try convertible dataTypes
     8738                for ( type in responses ) {
     8739                        if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
     8740                                finalDataType = type;
     8741                                break;
     8742                        }
     8743                        if ( !firstDataType ) {
     8744                                firstDataType = type;
     8745                        }
     8746                }
     8747                // Or just use first one
     8748                finalDataType = finalDataType || firstDataType;
     8749        }
     8750
     8751        // If we found a dataType
     8752        // We add the dataType to the list if needed
     8753        // and return the corresponding response
     8754        if ( finalDataType ) {
     8755                if ( finalDataType !== dataTypes[ 0 ] ) {
     8756                        dataTypes.unshift( finalDataType );
     8757                }
     8758                return responses[ finalDataType ];
     8759        }
     8760}
     8761
     8762/* Chain conversions given the request and the original response
     8763 * Also sets the responseXXX fields on the jqXHR instance
     8764 */
     8765function ajaxConvert( s, response, jqXHR, isSuccess ) {
     8766        var conv2, current, conv, tmp, prev,
     8767                converters = {},
     8768                // Work with a copy of dataTypes in case we need to modify it for conversion
     8769                dataTypes = s.dataTypes.slice();
     8770
     8771        // Create converters map with lowercased keys
     8772        if ( dataTypes[ 1 ] ) {
     8773                for ( conv in s.converters ) {
     8774                        converters[ conv.toLowerCase() ] = s.converters[ conv ];
     8775                }
     8776        }
     8777
     8778        current = dataTypes.shift();
     8779
     8780        // Convert to each sequential dataType
     8781        while ( current ) {
     8782
     8783                if ( s.responseFields[ current ] ) {
     8784                        jqXHR[ s.responseFields[ current ] ] = response;
     8785                }
     8786
     8787                // Apply the dataFilter if provided
     8788                if ( !prev && isSuccess && s.dataFilter ) {
     8789                        response = s.dataFilter( response, s.dataType );
     8790                }
     8791
     8792                prev = current;
     8793                current = dataTypes.shift();
     8794
     8795                if ( current ) {
     8796
     8797                        // There's only work to do if current dataType is non-auto
     8798                        if ( current === "*" ) {
     8799
     8800                                current = prev;
     8801
     8802                        // Convert response if prev dataType is non-auto and differs from current
     8803                        } else if ( prev !== "*" && prev !== current ) {
     8804
     8805                                // Seek a direct converter
     8806                                conv = converters[ prev + " " + current ] || converters[ "* " + current ];
     8807
     8808                                // If none found, seek a pair
     8809                                if ( !conv ) {
     8810                                        for ( conv2 in converters ) {
     8811
     8812                                                // If conv2 outputs current
     8813                                                tmp = conv2.split( " " );
     8814                                                if ( tmp[ 1 ] === current ) {
     8815
     8816                                                        // If prev can be converted to accepted input
     8817                                                        conv = converters[ prev + " " + tmp[ 0 ] ] ||
     8818                                                                converters[ "* " + tmp[ 0 ] ];
     8819                                                        if ( conv ) {
     8820                                                                // Condense equivalence converters
     8821                                                                if ( conv === true ) {
     8822                                                                        conv = converters[ conv2 ];
     8823
     8824                                                                // Otherwise, insert the intermediate dataType
     8825                                                                } else if ( converters[ conv2 ] !== true ) {
     8826                                                                        current = tmp[ 0 ];
     8827                                                                        dataTypes.unshift( tmp[ 1 ] );
     8828                                                                }
     8829                                                                break;
     8830                                                        }
     8831                                                }
     8832                                        }
     8833                                }
     8834
     8835                                // Apply converter (if not an equivalence)
     8836                                if ( conv !== true ) {
     8837
     8838                                        // Unless errors are allowed to bubble, catch and return them
     8839                                        if ( conv && s[ "throws" ] ) {
     8840                                                response = conv( response );
     8841                                        } else {
     8842                                                try {
     8843                                                        response = conv( response );
     8844                                                } catch ( e ) {
     8845                                                        return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
     8846                                                }
     8847                                        }
     8848                                }
     8849                        }
     8850                }
     8851        }
     8852
     8853        return { state: "success", data: response };
     8854}
    77808855
    77818856jQuery.extend({
     
    80059080
    80069081                // Extract dataTypes list
    8007                 s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
     9082                s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
    80089083
    80099084                // A cross-domain request is in order when we have a protocol:host:port mismatch
     
    80539128                        // If data is available, append data to url
    80549129                        if ( s.data ) {
    8055                                 cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
     9130                                cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
    80569131                                // #9682: remove data so that it's not used in an eventual retry
    80579132                                delete s.data;
     
    80639138
    80649139                                        // If there is already a '_' parameter, set its value
    8065                                         cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
     9140                                        cacheURL.replace( rts, "$1_=" + nonce++ ) :
    80669141
    80679142                                        // Otherwise add one to the end
    8068                                         cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
     9143                                        cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
    80699144                        }
    80709145                }
     
    82909365});
    82919366
    8292 /* Handles responses to an ajax request:
    8293  * - finds the right dataType (mediates between content-type and expected dataType)
    8294  * - returns the corresponding response
    8295  */
    8296 function ajaxHandleResponses( s, jqXHR, responses ) {
    8297         var firstDataType, ct, finalDataType, type,
    8298                 contents = s.contents,
    8299                 dataTypes = s.dataTypes;
    8300 
    8301         // Remove auto dataType and get content-type in the process
    8302         while( dataTypes[ 0 ] === "*" ) {
    8303                 dataTypes.shift();
    8304                 if ( ct === undefined ) {
    8305                         ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
    8306                 }
    8307         }
    8308 
    8309         // Check if we're dealing with a known content-type
    8310         if ( ct ) {
    8311                 for ( type in contents ) {
    8312                         if ( contents[ type ] && contents[ type ].test( ct ) ) {
    8313                                 dataTypes.unshift( type );
    8314                                 break;
    8315                         }
    8316                 }
    8317         }
    8318 
    8319         // Check to see if we have a response for the expected dataType
    8320         if ( dataTypes[ 0 ] in responses ) {
    8321                 finalDataType = dataTypes[ 0 ];
     9367// Attach a bunch of functions for handling common AJAX events
     9368jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
     9369        jQuery.fn[ type ] = function( fn ) {
     9370                return this.on( type, fn );
     9371        };
     9372});
     9373
     9374
     9375jQuery._evalUrl = function( url ) {
     9376        return jQuery.ajax({
     9377                url: url,
     9378                type: "GET",
     9379                dataType: "script",
     9380                async: false,
     9381                global: false,
     9382                "throws": true
     9383        });
     9384};
     9385
     9386
     9387jQuery.fn.extend({
     9388        wrapAll: function( html ) {
     9389                if ( jQuery.isFunction( html ) ) {
     9390                        return this.each(function(i) {
     9391                                jQuery(this).wrapAll( html.call(this, i) );
     9392                        });
     9393                }
     9394
     9395                if ( this[0] ) {
     9396                        // The elements to wrap the target around
     9397                        var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
     9398
     9399                        if ( this[0].parentNode ) {
     9400                                wrap.insertBefore( this[0] );
     9401                        }
     9402
     9403                        wrap.map(function() {
     9404                                var elem = this;
     9405
     9406                                while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
     9407                                        elem = elem.firstChild;
     9408                                }
     9409
     9410                                return elem;
     9411                        }).append( this );
     9412                }
     9413
     9414                return this;
     9415        },
     9416
     9417        wrapInner: function( html ) {
     9418                if ( jQuery.isFunction( html ) ) {
     9419                        return this.each(function(i) {
     9420                                jQuery(this).wrapInner( html.call(this, i) );
     9421                        });
     9422                }
     9423
     9424                return this.each(function() {
     9425                        var self = jQuery( this ),
     9426                                contents = self.contents();
     9427
     9428                        if ( contents.length ) {
     9429                                contents.wrapAll( html );
     9430
     9431                        } else {
     9432                                self.append( html );
     9433                        }
     9434                });
     9435        },
     9436
     9437        wrap: function( html ) {
     9438                var isFunction = jQuery.isFunction( html );
     9439
     9440                return this.each(function(i) {
     9441                        jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
     9442                });
     9443        },
     9444
     9445        unwrap: function() {
     9446                return this.parent().each(function() {
     9447                        if ( !jQuery.nodeName( this, "body" ) ) {
     9448                                jQuery( this ).replaceWith( this.childNodes );
     9449                        }
     9450                }).end();
     9451        }
     9452});
     9453
     9454
     9455jQuery.expr.filters.hidden = function( elem ) {
     9456        // Support: Opera <= 12.12
     9457        // Opera reports offsetWidths and offsetHeights less than zero on some elements
     9458        return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
     9459                (!support.reliableHiddenOffsets() &&
     9460                        ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
     9461};
     9462
     9463jQuery.expr.filters.visible = function( elem ) {
     9464        return !jQuery.expr.filters.hidden( elem );
     9465};
     9466
     9467
     9468
     9469
     9470var r20 = /%20/g,
     9471        rbracket = /\[\]$/,
     9472        rCRLF = /\r?\n/g,
     9473        rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
     9474        rsubmittable = /^(?:input|select|textarea|keygen)/i;
     9475
     9476function buildParams( prefix, obj, traditional, add ) {
     9477        var name;
     9478
     9479        if ( jQuery.isArray( obj ) ) {
     9480                // Serialize array item.
     9481                jQuery.each( obj, function( i, v ) {
     9482                        if ( traditional || rbracket.test( prefix ) ) {
     9483                                // Treat each array item as a scalar.
     9484                                add( prefix, v );
     9485
     9486                        } else {
     9487                                // Item is non-scalar (array or object), encode its numeric index.
     9488                                buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
     9489                        }
     9490                });
     9491
     9492        } else if ( !traditional && jQuery.type( obj ) === "object" ) {
     9493                // Serialize object item.
     9494                for ( name in obj ) {
     9495                        buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
     9496                }
     9497
    83229498        } else {
    8323                 // Try convertible dataTypes
    8324                 for ( type in responses ) {
    8325                         if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
    8326                                 finalDataType = type;
    8327                                 break;
    8328                         }
    8329                         if ( !firstDataType ) {
    8330                                 firstDataType = type;
    8331                         }
    8332                 }
    8333                 // Or just use first one
    8334                 finalDataType = finalDataType || firstDataType;
    8335         }
    8336 
    8337         // If we found a dataType
    8338         // We add the dataType to the list if needed
    8339         // and return the corresponding response
    8340         if ( finalDataType ) {
    8341                 if ( finalDataType !== dataTypes[ 0 ] ) {
    8342                         dataTypes.unshift( finalDataType );
    8343                 }
    8344                 return responses[ finalDataType ];
     9499                // Serialize scalar item.
     9500                add( prefix, obj );
    83459501        }
    83469502}
    83479503
    8348 /* Chain conversions given the request and the original response
    8349  * Also sets the responseXXX fields on the jqXHR instance
    8350  */
    8351 function ajaxConvert( s, response, jqXHR, isSuccess ) {
    8352         var conv2, current, conv, tmp, prev,
    8353                 converters = {},
    8354                 // Work with a copy of dataTypes in case we need to modify it for conversion
    8355                 dataTypes = s.dataTypes.slice();
    8356 
    8357         // Create converters map with lowercased keys
    8358         if ( dataTypes[ 1 ] ) {
    8359                 for ( conv in s.converters ) {
    8360                         converters[ conv.toLowerCase() ] = s.converters[ conv ];
    8361                 }
    8362         }
    8363 
    8364         current = dataTypes.shift();
    8365 
    8366         // Convert to each sequential dataType
    8367         while ( current ) {
    8368 
    8369                 if ( s.responseFields[ current ] ) {
    8370                         jqXHR[ s.responseFields[ current ] ] = response;
    8371                 }
    8372 
    8373                 // Apply the dataFilter if provided
    8374                 if ( !prev && isSuccess && s.dataFilter ) {
    8375                         response = s.dataFilter( response, s.dataType );
    8376                 }
    8377 
    8378                 prev = current;
    8379                 current = dataTypes.shift();
    8380 
    8381                 if ( current ) {
    8382 
    8383                         // There's only work to do if current dataType is non-auto
    8384                         if ( current === "*" ) {
    8385 
    8386                                 current = prev;
    8387 
    8388                         // Convert response if prev dataType is non-auto and differs from current
    8389                         } else if ( prev !== "*" && prev !== current ) {
    8390 
    8391                                 // Seek a direct converter
    8392                                 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
    8393 
    8394                                 // If none found, seek a pair
    8395                                 if ( !conv ) {
    8396                                         for ( conv2 in converters ) {
    8397 
    8398                                                 // If conv2 outputs current
    8399                                                 tmp = conv2.split( " " );
    8400                                                 if ( tmp[ 1 ] === current ) {
    8401 
    8402                                                         // If prev can be converted to accepted input
    8403                                                         conv = converters[ prev + " " + tmp[ 0 ] ] ||
    8404                                                                 converters[ "* " + tmp[ 0 ] ];
    8405                                                         if ( conv ) {
    8406                                                                 // Condense equivalence converters
    8407                                                                 if ( conv === true ) {
    8408                                                                         conv = converters[ conv2 ];
    8409 
    8410                                                                 // Otherwise, insert the intermediate dataType
    8411                                                                 } else if ( converters[ conv2 ] !== true ) {
    8412                                                                         current = tmp[ 0 ];
    8413                                                                         dataTypes.unshift( tmp[ 1 ] );
    8414                                                                 }
    8415                                                                 break;
    8416                                                         }
    8417                                                 }
    8418                                         }
    8419                                 }
    8420 
    8421                                 // Apply converter (if not an equivalence)
    8422                                 if ( conv !== true ) {
    8423 
    8424                                         // Unless errors are allowed to bubble, catch and return them
    8425                                         if ( conv && s[ "throws" ] ) {
    8426                                                 response = conv( response );
    8427                                         } else {
    8428                                                 try {
    8429                                                         response = conv( response );
    8430                                                 } catch ( e ) {
    8431                                                         return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
    8432                                                 }
    8433                                         }
    8434                                 }
    8435                         }
    8436                 }
    8437         }
    8438 
    8439         return { state: "success", data: response };
    8440 }
    8441 // Install script dataType
    8442 jQuery.ajaxSetup({
    8443         accepts: {
    8444                 script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
    8445         },
    8446         contents: {
    8447                 script: /(?:java|ecma)script/
    8448         },
    8449         converters: {
    8450                 "text script": function( text ) {
    8451                         jQuery.globalEval( text );
    8452                         return text;
    8453                 }
     9504// Serialize an array of form elements or a set of
     9505// key/values into a query string
     9506jQuery.param = function( a, traditional ) {
     9507        var prefix,
     9508                s = [],
     9509                add = function( key, value ) {
     9510                        // If value is a function, invoke it and return its value
     9511                        value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
     9512                        s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
     9513                };
     9514
     9515        // Set traditional to true for jQuery <= 1.3.2 behavior.
     9516        if ( traditional === undefined ) {
     9517                traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
     9518        }
     9519
     9520        // If an array was passed in, assume that it is an array of form elements.
     9521        if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
     9522                // Serialize the form elements
     9523                jQuery.each( a, function() {
     9524                        add( this.name, this.value );
     9525                });
     9526
     9527        } else {
     9528                // If traditional, encode the "old" way (the way 1.3.2 or older
     9529                // did it), otherwise encode params recursively.
     9530                for ( prefix in a ) {
     9531                        buildParams( prefix, a[ prefix ], traditional, add );
     9532                }
     9533        }
     9534
     9535        // Return the resulting serialization
     9536        return s.join( "&" ).replace( r20, "+" );
     9537};
     9538
     9539jQuery.fn.extend({
     9540        serialize: function() {
     9541                return jQuery.param( this.serializeArray() );
     9542        },
     9543        serializeArray: function() {
     9544                return this.map(function() {
     9545                        // Can add propHook for "elements" to filter or add form elements
     9546                        var elements = jQuery.prop( this, "elements" );
     9547                        return elements ? jQuery.makeArray( elements ) : this;
     9548                })
     9549                .filter(function() {
     9550                        var type = this.type;
     9551                        // Use .is(":disabled") so that fieldset[disabled] works
     9552                        return this.name && !jQuery( this ).is( ":disabled" ) &&
     9553                                rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
     9554                                ( this.checked || !rcheckableType.test( type ) );
     9555                })
     9556                .map(function( i, elem ) {
     9557                        var val = jQuery( this ).val();
     9558
     9559                        return val == null ?
     9560                                null :
     9561                                jQuery.isArray( val ) ?
     9562                                        jQuery.map( val, function( val ) {
     9563                                                return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
     9564                                        }) :
     9565                                        { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
     9566                }).get();
    84549567        }
    84559568});
    84569569
    8457 // Handle cache's special case and global
    8458 jQuery.ajaxPrefilter( "script", function( s ) {
    8459         if ( s.cache === undefined ) {
    8460                 s.cache = false;
    8461         }
    8462         if ( s.crossDomain ) {
    8463                 s.type = "GET";
    8464                 s.global = false;
    8465         }
    8466 });
    8467 
    8468 // Bind script tag hack transport
    8469 jQuery.ajaxTransport( "script", function(s) {
    8470 
    8471         // This transport only deals with cross domain requests
    8472         if ( s.crossDomain ) {
    8473 
    8474                 var script,
    8475                         head = document.head || jQuery("head")[0] || document.documentElement;
    8476 
    8477                 return {
    8478 
    8479                         send: function( _, callback ) {
    8480 
    8481                                 script = document.createElement("script");
    8482 
    8483                                 script.async = true;
    8484 
    8485                                 if ( s.scriptCharset ) {
    8486                                         script.charset = s.scriptCharset;
    8487                                 }
    8488 
    8489                                 script.src = s.url;
    8490 
    8491                                 // Attach handlers for all browsers
    8492                                 script.onload = script.onreadystatechange = function( _, isAbort ) {
    8493 
    8494                                         if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
    8495 
    8496                                                 // Handle memory leak in IE
    8497                                                 script.onload = script.onreadystatechange = null;
    8498 
    8499                                                 // Remove the script
    8500                                                 if ( script.parentNode ) {
    8501                                                         script.parentNode.removeChild( script );
    8502                                                 }
    8503 
    8504                                                 // Dereference the script
    8505                                                 script = null;
    8506 
    8507                                                 // Callback if not abort
    8508                                                 if ( !isAbort ) {
    8509                                                         callback( 200, "success" );
    8510                                                 }
    8511                                         }
    8512                                 };
    8513 
    8514                                 // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
    8515                                 // Use native DOM manipulation to avoid our domManip AJAX trickery
    8516                                 head.insertBefore( script, head.firstChild );
    8517                         },
    8518 
    8519                         abort: function() {
    8520                                 if ( script ) {
    8521                                         script.onload( undefined, true );
    8522                                 }
    8523                         }
    8524                 };
    8525         }
    8526 });
    8527 var oldCallbacks = [],
    8528         rjsonp = /(=)\?(?=&|$)|\?\?/;
    8529 
    8530 // Default jsonp settings
    8531 jQuery.ajaxSetup({
    8532         jsonp: "callback",
    8533         jsonpCallback: function() {
    8534                 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
    8535                 this[ callback ] = true;
    8536                 return callback;
    8537         }
    8538 });
    8539 
    8540 // Detect, normalize options and install callbacks for jsonp requests
    8541 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
    8542 
    8543         var callbackName, overwritten, responseContainer,
    8544                 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
    8545                         "url" :
    8546                         typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
    8547                 );
    8548 
    8549         // Handle iff the expected data type is "jsonp" or we have a parameter to set
    8550         if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
    8551 
    8552                 // Get callback name, remembering preexisting value associated with it
    8553                 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
    8554                         s.jsonpCallback() :
    8555                         s.jsonpCallback;
    8556 
    8557                 // Insert callback into url or form data
    8558                 if ( jsonProp ) {
    8559                         s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
    8560                 } else if ( s.jsonp !== false ) {
    8561                         s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
    8562                 }
    8563 
    8564                 // Use data converter to retrieve json after script execution
    8565                 s.converters["script json"] = function() {
    8566                         if ( !responseContainer ) {
    8567                                 jQuery.error( callbackName + " was not called" );
    8568                         }
    8569                         return responseContainer[ 0 ];
    8570                 };
    8571 
    8572                 // force json dataType
    8573                 s.dataTypes[ 0 ] = "json";
    8574 
    8575                 // Install callback
    8576                 overwritten = window[ callbackName ];
    8577                 window[ callbackName ] = function() {
    8578                         responseContainer = arguments;
    8579                 };
    8580 
    8581                 // Clean-up function (fires after converters)
    8582                 jqXHR.always(function() {
    8583                         // Restore preexisting value
    8584                         window[ callbackName ] = overwritten;
    8585 
    8586                         // Save back as free
    8587                         if ( s[ callbackName ] ) {
    8588                                 // make sure that re-using the options doesn't screw things around
    8589                                 s.jsonpCallback = originalSettings.jsonpCallback;
    8590 
    8591                                 // save the callback name for future use
    8592                                 oldCallbacks.push( callbackName );
    8593                         }
    8594 
    8595                         // Call if it was a function and we have a response
    8596                         if ( responseContainer && jQuery.isFunction( overwritten ) ) {
    8597                                 overwritten( responseContainer[ 0 ] );
    8598                         }
    8599 
    8600                         responseContainer = overwritten = undefined;
    8601                 });
    8602 
    8603                 // Delegate to script
    8604                 return "script";
    8605         }
    8606 });
    8607 var xhrCallbacks, xhrSupported,
    8608         xhrId = 0,
    8609         // #5280: Internet Explorer will keep connections alive if we don't abort on unload
    8610         xhrOnUnloadAbort = window.ActiveXObject && function() {
    8611                 // Abort all pending requests
    8612                 var key;
    8613                 for ( key in xhrCallbacks ) {
    8614                         xhrCallbacks[ key ]( undefined, true );
    8615                 }
    8616         };
    8617 
    8618 // Functions to create xhrs
    8619 function createStandardXHR() {
    8620         try {
    8621                 return new window.XMLHttpRequest();
    8622         } catch( e ) {}
    8623 }
    8624 
    8625 function createActiveXHR() {
    8626         try {
    8627                 return new window.ActiveXObject("Microsoft.XMLHTTP");
    8628         } catch( e ) {}
    8629 }
    86309570
    86319571// Create the request object
    86329572// (This is still attached to ajaxSettings for backward compatibility)
    8633 jQuery.ajaxSettings.xhr = window.ActiveXObject ?
    8634         /* Microsoft failed to properly
    8635          * implement the XMLHttpRequest in IE7 (can't request local files),
    8636          * so we use the ActiveXObject when it is available
    8637          * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
    8638          * we need a fallback.
    8639          */
     9573jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
     9574        // Support: IE6+
    86409575        function() {
    8641                 return !this.isLocal && createStandardXHR() || createActiveXHR();
     9576
     9577                // XHR cannot access local files, always use ActiveX for that case
     9578                return !this.isLocal &&
     9579
     9580                        // Support: IE7-8
     9581                        // oldIE XHR does not support non-RFC2616 methods (#13240)
     9582                        // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
     9583                        // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
     9584                        // Although this check for six methods instead of eight
     9585                        // since IE also does not support "trace" and "connect"
     9586                        /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
     9587
     9588                        createStandardXHR() || createActiveXHR();
    86429589        } :
    86439590        // For all other browsers, use the standard XMLHttpRequest object
    86449591        createStandardXHR;
    86459592
     9593var xhrId = 0,
     9594        xhrCallbacks = {},
     9595        xhrSupported = jQuery.ajaxSettings.xhr();
     9596
     9597// Support: IE<10
     9598// Open requests must be manually aborted on unload (#5280)
     9599if ( window.ActiveXObject ) {
     9600        jQuery( window ).on( "unload", function() {
     9601                for ( var key in xhrCallbacks ) {
     9602                        xhrCallbacks[ key ]( undefined, true );
     9603                }
     9604        });
     9605}
     9606
    86469607// Determine support properties
    8647 xhrSupported = jQuery.ajaxSettings.xhr();
    8648 jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
    8649 xhrSupported = jQuery.support.ajax = !!xhrSupported;
     9608support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
     9609xhrSupported = support.ajax = !!xhrSupported;
    86509610
    86519611// Create transport if the browser can provide an xhr
    86529612if ( xhrSupported ) {
    86539613
    8654         jQuery.ajaxTransport(function( s ) {
     9614        jQuery.ajaxTransport(function( options ) {
    86559615                // Cross domain only allowed if supported through XMLHttpRequest
    8656                 if ( !s.crossDomain || jQuery.support.cors ) {
     9616                if ( !options.crossDomain || support.cors ) {
    86579617
    86589618                        var callback;
     
    86609620                        return {
    86619621                                send: function( headers, complete ) {
    8662 
    8663                                         // Get a new xhr
    8664                                         var handle, i,
    8665                                                 xhr = s.xhr();
     9622                                        var i,
     9623                                                xhr = options.xhr(),
     9624                                                id = ++xhrId;
    86669625
    86679626                                        // Open the socket
    8668                                         // Passing null username, generates a login popup on Opera (#2865)
    8669                                         if ( s.username ) {
    8670                                                 xhr.open( s.type, s.url, s.async, s.username, s.password );
    8671                                         } else {
    8672                                                 xhr.open( s.type, s.url, s.async );
    8673                                         }
     9627                                        xhr.open( options.type, options.url, options.async, options.username, options.password );
    86749628
    86759629                                        // Apply custom fields if provided
    8676                                         if ( s.xhrFields ) {
    8677                                                 for ( i in s.xhrFields ) {
    8678                                                         xhr[ i ] = s.xhrFields[ i ];
     9630                                        if ( options.xhrFields ) {
     9631                                                for ( i in options.xhrFields ) {
     9632                                                        xhr[ i ] = options.xhrFields[ i ];
    86799633                                                }
    86809634                                        }
    86819635
    86829636                                        // Override mime type if needed
    8683                                         if ( s.mimeType && xhr.overrideMimeType ) {
    8684                                                 xhr.overrideMimeType( s.mimeType );
     9637                                        if ( options.mimeType && xhr.overrideMimeType ) {
     9638                                                xhr.overrideMimeType( options.mimeType );
    86859639                                        }
    86869640
     
    86909644                                        // (it can always be set on a per-request basis or even using ajaxSetup)
    86919645                                        // For same-domain requests, won't change header if already provided.
    8692                                         if ( !s.crossDomain && !headers["X-Requested-With"] ) {
     9646                                        if ( !options.crossDomain && !headers["X-Requested-With"] ) {
    86939647                                                headers["X-Requested-With"] = "XMLHttpRequest";
    86949648                                        }
    86959649
    8696                                         // Need an extra try/catch for cross domain requests in Firefox 3
    8697                                         try {
    8698                                                 for ( i in headers ) {
    8699                                                         xhr.setRequestHeader( i, headers[ i ] );
     9650                                        // Set headers
     9651                                        for ( i in headers ) {
     9652                                                // Support: IE<9
     9653                                                // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
     9654                                                // request header to a null-value.
     9655                                                //
     9656                                                // To keep consistent with other XHR implementations, cast the value
     9657                                                // to string and ignore `undefined`.
     9658                                                if ( headers[ i ] !== undefined ) {
     9659                                                        xhr.setRequestHeader( i, headers[ i ] + "" );
    87009660                                                }
    8701                                         } catch( err ) {}
     9661                                        }
    87029662
    87039663                                        // Do send the request
    87049664                                        // This may raise an exception which is actually
    87059665                                        // handled in jQuery.ajax (so no try/catch here)
    8706                                         xhr.send( ( s.hasContent && s.data ) || null );
     9666                                        xhr.send( ( options.hasContent && options.data ) || null );
    87079667
    87089668                                        // Listener
    87099669                                        callback = function( _, isAbort ) {
    8710                                                 var status, responseHeaders, statusText, responses;
    8711 
    8712                                                 // Firefox throws exceptions when accessing properties
    8713                                                 // of an xhr when a network error occurred
    8714                                                 // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
    8715                                                 try {
    8716 
    8717                                                         // Was never called and is aborted or complete
    8718                                                         if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
    8719 
    8720                                                                 // Only called once
    8721                                                                 callback = undefined;
    8722 
    8723                                                                 // Do not keep as active anymore
    8724                                                                 if ( handle ) {
    8725                                                                         xhr.onreadystatechange = jQuery.noop;
    8726                                                                         if ( xhrOnUnloadAbort ) {
    8727                                                                                 delete xhrCallbacks[ handle ];
    8728                                                                         }
     9670                                                var status, statusText, responses;
     9671
     9672                                                // Was never called and is aborted or complete
     9673                                                if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
     9674                                                        // Clean up
     9675                                                        delete xhrCallbacks[ id ];
     9676                                                        callback = undefined;
     9677                                                        xhr.onreadystatechange = jQuery.noop;
     9678
     9679                                                        // Abort manually if needed
     9680                                                        if ( isAbort ) {
     9681                                                                if ( xhr.readyState !== 4 ) {
     9682                                                                        xhr.abort();
    87299683                                                                }
    8730 
    8731                                                                 // If it's an abort
    8732                                                                 if ( isAbort ) {
    8733                                                                         // Abort it manually if needed
    8734                                                                         if ( xhr.readyState !== 4 ) {
    8735                                                                                 xhr.abort();
    8736                                                                         }
    8737                                                                 } else {
    8738                                                                         responses = {};
    8739                                                                         status = xhr.status;
    8740                                                                         responseHeaders = xhr.getAllResponseHeaders();
    8741 
    8742                                                                         // When requesting binary data, IE6-9 will throw an exception
    8743                                                                         // on any attempt to access responseText (#11426)
    8744                                                                         if ( typeof xhr.responseText === "string" ) {
    8745                                                                                 responses.text = xhr.responseText;
    8746                                                                         }
    8747 
    8748                                                                         // Firefox throws an exception when accessing
    8749                                                                         // statusText for faulty cross-domain requests
    8750                                                                         try {
    8751                                                                                 statusText = xhr.statusText;
    8752                                                                         } catch( e ) {
    8753                                                                                 // We normalize with Webkit giving an empty statusText
    8754                                                                                 statusText = "";
    8755                                                                         }
    8756 
    8757                                                                         // Filter status for non standard behaviors
    8758 
    8759                                                                         // If the request is local and we have data: assume a success
    8760                                                                         // (success with no data won't get notified, that's the best we
    8761                                                                         // can do given current implementations)
    8762                                                                         if ( !status && s.isLocal && !s.crossDomain ) {
    8763                                                                                 status = responses.text ? 200 : 404;
    8764                                                                         // IE - #1450: sometimes returns 1223 when it should be 204
    8765                                                                         } else if ( status === 1223 ) {
    8766                                                                                 status = 204;
    8767                                                                         }
     9684                                                        } else {
     9685                                                                responses = {};
     9686                                                                status = xhr.status;
     9687
     9688                                                                // Support: IE<10
     9689                                                                // Accessing binary-data responseText throws an exception
     9690                                                                // (#11426)
     9691                                                                if ( typeof xhr.responseText === "string" ) {
     9692                                                                        responses.text = xhr.responseText;
     9693                                                                }
     9694
     9695                                                                // Firefox throws an exception when accessing
     9696                                                                // statusText for faulty cross-domain requests
     9697                                                                try {
     9698                                                                        statusText = xhr.statusText;
     9699                                                                } catch( e ) {
     9700                                                                        // We normalize with Webkit giving an empty statusText
     9701                                                                        statusText = "";
     9702                                                                }
     9703
     9704                                                                // Filter status for non standard behaviors
     9705
     9706                                                                // If the request is local and we have data: assume a success
     9707                                                                // (success with no data won't get notified, that's the best we
     9708                                                                // can do given current implementations)
     9709                                                                if ( !status && options.isLocal && !options.crossDomain ) {
     9710                                                                        status = responses.text ? 200 : 404;
     9711                                                                // IE - #1450: sometimes returns 1223 when it should be 204
     9712                                                                } else if ( status === 1223 ) {
     9713                                                                        status = 204;
    87689714                                                                }
    87699715                                                        }
    8770                                                 } catch( firefoxAccessException ) {
    8771                                                         if ( !isAbort ) {
    8772                                                                 complete( -1, firefoxAccessException );
    8773                                                         }
    87749716                                                }
    87759717
    87769718                                                // Call complete if needed
    87779719                                                if ( responses ) {
    8778                                                         complete( status, statusText, responses, responseHeaders );
     9720                                                        complete( status, statusText, responses, xhr.getAllResponseHeaders() );
    87799721                                                }
    87809722                                        };
    87819723
    8782                                         if ( !s.async ) {
     9724                                        if ( !options.async ) {
    87839725                                                // if we're in sync mode we fire the callback
    87849726                                                callback();
     
    87889730                                                setTimeout( callback );
    87899731                                        } else {
    8790                                                 handle = ++xhrId;
    8791                                                 if ( xhrOnUnloadAbort ) {
    8792                                                         // Create the active xhrs callbacks list if needed
    8793                                                         // and attach the unload handler
    8794                                                         if ( !xhrCallbacks ) {
    8795                                                                 xhrCallbacks = {};
    8796                                                                 jQuery( window ).unload( xhrOnUnloadAbort );
    8797                                                         }
    8798                                                         // Add to list of active xhrs callbacks
    8799                                                         xhrCallbacks[ handle ] = callback;
    8800                                                 }
    8801                                                 xhr.onreadystatechange = callback;
     9732                                                // Add to the list of active xhr callbacks
     9733                                                xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
    88029734                                        }
    88039735                                },
     
    88129744        });
    88139745}
    8814 var fxNow, timerId,
    8815         rfxtypes = /^(?:toggle|show|hide)$/,
    8816         rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
    8817         rrun = /queueHooks$/,
    8818         animationPrefilters = [ defaultPrefilter ],
    8819         tweeners = {
    8820                 "*": [function( prop, value ) {
    8821                         var tween = this.createTween( prop, value ),
    8822                                 target = tween.cur(),
    8823                                 parts = rfxnum.exec( value ),
    8824                                 unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
    8825 
    8826                                 // Starting value computation is required for potential unit mismatches
    8827                                 start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
    8828                                         rfxnum.exec( jQuery.css( tween.elem, prop ) ),
    8829                                 scale = 1,
    8830                                 maxIterations = 20;
    8831 
    8832                         if ( start && start[ 3 ] !== unit ) {
    8833                                 // Trust units reported by jQuery.css
    8834                                 unit = unit || start[ 3 ];
    8835 
    8836                                 // Make sure we update the tween properties later on
    8837                                 parts = parts || [];
    8838 
    8839                                 // Iteratively approximate from a nonzero starting point
    8840                                 start = +target || 1;
    8841 
    8842                                 do {
    8843                                         // If previous iteration zeroed out, double until we get *something*
    8844                                         // Use a string for doubling factor so we don't accidentally see scale as unchanged below
    8845                                         scale = scale || ".5";
    8846 
    8847                                         // Adjust and apply
    8848                                         start = start / scale;
    8849                                         jQuery.style( tween.elem, prop, start + unit );
    8850 
    8851                                 // Update scale, tolerating zero or NaN from tween.cur()
    8852                                 // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
    8853                                 } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
    8854                         }
    8855 
    8856                         // Update tween properties
    8857                         if ( parts ) {
    8858                                 start = tween.start = +start || +target || 0;
    8859                                 tween.unit = unit;
    8860                                 // If a +=/-= token was provided, we're doing a relative animation
    8861                                 tween.end = parts[ 1 ] ?
    8862                                         start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
    8863                                         +parts[ 2 ];
    8864                         }
    8865 
    8866                         return tween;
    8867                 }]
    8868         };
    8869 
    8870 // Animations created synchronously will run synchronously
    8871 function createFxNow() {
    8872         setTimeout(function() {
    8873                 fxNow = undefined;
    8874         });
    8875         return ( fxNow = jQuery.now() );
     9746
     9747// Functions to create xhrs
     9748function createStandardXHR() {
     9749        try {
     9750                return new window.XMLHttpRequest();
     9751        } catch( e ) {}
    88769752}
    88779753
    8878 function createTween( value, prop, animation ) {
    8879         var tween,
    8880                 collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
    8881                 index = 0,
    8882                 length = collection.length;
    8883         for ( ; index < length; index++ ) {
    8884                 if ( (tween = collection[ index ].call( animation, prop, value )) ) {
    8885 
    8886                         // we're done with this property
    8887                         return tween;
    8888                 }
    8889         }
     9754function createActiveXHR() {
     9755        try {
     9756                return new window.ActiveXObject( "Microsoft.XMLHTTP" );
     9757        } catch( e ) {}
    88909758}
    88919759
    8892 function Animation( elem, properties, options ) {
    8893         var result,
    8894                 stopped,
    8895                 index = 0,
    8896                 length = animationPrefilters.length,
    8897                 deferred = jQuery.Deferred().always( function() {
    8898                         // don't match elem in the :animated selector
    8899                         delete tick.elem;
    8900                 }),
    8901                 tick = function() {
    8902                         if ( stopped ) {
    8903                                 return false;
    8904                         }
    8905                         var currentTime = fxNow || createFxNow(),
    8906                                 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
    8907                                 // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
    8908                                 temp = remaining / animation.duration || 0,
    8909                                 percent = 1 - temp,
    8910                                 index = 0,
    8911                                 length = animation.tweens.length;
    8912 
    8913                         for ( ; index < length ; index++ ) {
    8914                                 animation.tweens[ index ].run( percent );
    8915                         }
    8916 
    8917                         deferred.notifyWith( elem, [ animation, percent, remaining ]);
    8918 
    8919                         if ( percent < 1 && length ) {
    8920                                 return remaining;
    8921                         } else {
    8922                                 deferred.resolveWith( elem, [ animation ] );
    8923                                 return false;
    8924                         }
    8925                 },
    8926                 animation = deferred.promise({
    8927                         elem: elem,
    8928                         props: jQuery.extend( {}, properties ),
    8929                         opts: jQuery.extend( true, { specialEasing: {} }, options ),
    8930                         originalProperties: properties,
    8931                         originalOptions: options,
    8932                         startTime: fxNow || createFxNow(),
    8933                         duration: options.duration,
    8934                         tweens: [],
    8935                         createTween: function( prop, end ) {
    8936                                 var tween = jQuery.Tween( elem, animation.opts, prop, end,
    8937                                                 animation.opts.specialEasing[ prop ] || animation.opts.easing );
    8938                                 animation.tweens.push( tween );
    8939                                 return tween;
     9760
     9761
     9762
     9763// Install script dataType
     9764jQuery.ajaxSetup({
     9765        accepts: {
     9766                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
     9767        },
     9768        contents: {
     9769                script: /(?:java|ecma)script/
     9770        },
     9771        converters: {
     9772                "text script": function( text ) {
     9773                        jQuery.globalEval( text );
     9774                        return text;
     9775                }
     9776        }
     9777});
     9778
     9779// Handle cache's special case and global
     9780jQuery.ajaxPrefilter( "script", function( s ) {
     9781        if ( s.cache === undefined ) {
     9782                s.cache = false;
     9783        }
     9784        if ( s.crossDomain ) {
     9785                s.type = "GET";
     9786                s.global = false;
     9787        }
     9788});
     9789
     9790// Bind script tag hack transport
     9791jQuery.ajaxTransport( "script", function(s) {
     9792
     9793        // This transport only deals with cross domain requests
     9794        if ( s.crossDomain ) {
     9795
     9796                var script,
     9797                        head = document.head || jQuery("head")[0] || document.documentElement;
     9798
     9799                return {
     9800
     9801                        send: function( _, callback ) {
     9802
     9803                                script = document.createElement("script");
     9804
     9805                                script.async = true;
     9806
     9807                                if ( s.scriptCharset ) {
     9808                                        script.charset = s.scriptCharset;
     9809                                }
     9810
     9811                                script.src = s.url;
     9812
     9813                                // Attach handlers for all browsers
     9814                                script.onload = script.onreadystatechange = function( _, isAbort ) {
     9815
     9816                                        if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
     9817
     9818                                                // Handle memory leak in IE
     9819                                                script.onload = script.onreadystatechange = null;
     9820
     9821                                                // Remove the script
     9822                                                if ( script.parentNode ) {
     9823                                                        script.parentNode.removeChild( script );
     9824                                                }
     9825
     9826                                                // Dereference the script
     9827                                                script = null;
     9828
     9829                                                // Callback if not abort
     9830                                                if ( !isAbort ) {
     9831                                                        callback( 200, "success" );
     9832                                                }
     9833                                        }
     9834                                };
     9835
     9836                                // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
     9837                                // Use native DOM manipulation to avoid our domManip AJAX trickery
     9838                                head.insertBefore( script, head.firstChild );
    89409839                        },
    8941                         stop: function( gotoEnd ) {
    8942                                 var index = 0,
    8943                                         // if we are going to the end, we want to run all the tweens
    8944                                         // otherwise we skip this part
    8945                                         length = gotoEnd ? animation.tweens.length : 0;
    8946                                 if ( stopped ) {
    8947                                         return this;
    8948                                 }
    8949                                 stopped = true;
    8950                                 for ( ; index < length ; index++ ) {
    8951                                         animation.tweens[ index ].run( 1 );
    8952                                 }
    8953 
    8954                                 // resolve when we played the last frame
    8955                                 // otherwise, reject
    8956                                 if ( gotoEnd ) {
    8957                                         deferred.resolveWith( elem, [ animation, gotoEnd ] );
    8958                                 } else {
    8959                                         deferred.rejectWith( elem, [ animation, gotoEnd ] );
    8960                                 }
    8961                                 return this;
    8962                         }
    8963                 }),
    8964                 props = animation.props;
    8965 
    8966         propFilter( props, animation.opts.specialEasing );
    8967 
    8968         for ( ; index < length ; index++ ) {
    8969                 result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
    8970                 if ( result ) {
    8971                         return result;
    8972                 }
    8973         }
    8974 
    8975         jQuery.map( props, createTween, animation );
    8976 
    8977         if ( jQuery.isFunction( animation.opts.start ) ) {
    8978                 animation.opts.start.call( elem, animation );
    8979         }
    8980 
    8981         jQuery.fx.timer(
    8982                 jQuery.extend( tick, {
    8983                         elem: elem,
    8984                         anim: animation,
    8985                         queue: animation.opts.queue
    8986                 })
    8987         );
    8988 
    8989         // attach callbacks from options
    8990         return animation.progress( animation.opts.progress )
    8991                 .done( animation.opts.done, animation.opts.complete )
    8992                 .fail( animation.opts.fail )
    8993                 .always( animation.opts.always );
     9840
     9841                        abort: function() {
     9842                                if ( script ) {
     9843                                        script.onload( undefined, true );
     9844                                }
     9845                        }
     9846                };
     9847        }
     9848});
     9849
     9850
     9851
     9852
     9853var oldCallbacks = [],
     9854        rjsonp = /(=)\?(?=&|$)|\?\?/;
     9855
     9856// Default jsonp settings
     9857jQuery.ajaxSetup({
     9858        jsonp: "callback",
     9859        jsonpCallback: function() {
     9860                var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
     9861                this[ callback ] = true;
     9862                return callback;
     9863        }
     9864});
     9865
     9866// Detect, normalize options and install callbacks for jsonp requests
     9867jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
     9868
     9869        var callbackName, overwritten, responseContainer,
     9870                jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
     9871                        "url" :
     9872                        typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
     9873                );
     9874
     9875        // Handle iff the expected data type is "jsonp" or we have a parameter to set
     9876        if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
     9877
     9878                // Get callback name, remembering preexisting value associated with it
     9879                callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
     9880                        s.jsonpCallback() :
     9881                        s.jsonpCallback;
     9882
     9883                // Insert callback into url or form data
     9884                if ( jsonProp ) {
     9885                        s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
     9886                } else if ( s.jsonp !== false ) {
     9887                        s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
     9888                }
     9889
     9890                // Use data converter to retrieve json after script execution
     9891                s.converters["script json"] = function() {
     9892                        if ( !responseContainer ) {
     9893                                jQuery.error( callbackName + " was not called" );
     9894                        }
     9895                        return responseContainer[ 0 ];
     9896                };
     9897
     9898                // force json dataType
     9899                s.dataTypes[ 0 ] = "json";
     9900
     9901                // Install callback
     9902                overwritten = window[ callbackName ];
     9903                window[ callbackName ] = function() {
     9904                        responseContainer = arguments;
     9905                };
     9906
     9907                // Clean-up function (fires after converters)
     9908                jqXHR.always(function() {
     9909                        // Restore preexisting value
     9910                        window[ callbackName ] = overwritten;
     9911
     9912                        // Save back as free
     9913                        if ( s[ callbackName ] ) {
     9914                                // make sure that re-using the options doesn't screw things around
     9915                                s.jsonpCallback = originalSettings.jsonpCallback;
     9916
     9917                                // save the callback name for future use
     9918                                oldCallbacks.push( callbackName );
     9919                        }
     9920
     9921                        // Call if it was a function and we have a response
     9922                        if ( responseContainer && jQuery.isFunction( overwritten ) ) {
     9923                                overwritten( responseContainer[ 0 ] );
     9924                        }
     9925
     9926                        responseContainer = overwritten = undefined;
     9927                });
     9928
     9929                // Delegate to script
     9930                return "script";
     9931        }
     9932});
     9933
     9934
     9935
     9936
     9937// data: string of html
     9938// context (optional): If specified, the fragment will be created in this context, defaults to document
     9939// keepScripts (optional): If true, will include scripts passed in the html string
     9940jQuery.parseHTML = function( data, context, keepScripts ) {
     9941        if ( !data || typeof data !== "string" ) {
     9942                return null;
     9943        }
     9944        if ( typeof context === "boolean" ) {
     9945                keepScripts = context;
     9946                context = false;
     9947        }
     9948        context = context || document;
     9949
     9950        var parsed = rsingleTag.exec( data ),
     9951                scripts = !keepScripts && [];
     9952
     9953        // Single tag
     9954        if ( parsed ) {
     9955                return [ context.createElement( parsed[1] ) ];
     9956        }
     9957
     9958        parsed = jQuery.buildFragment( [ data ], context, scripts );
     9959
     9960        if ( scripts && scripts.length ) {
     9961                jQuery( scripts ).remove();
     9962        }
     9963
     9964        return jQuery.merge( [], parsed.childNodes );
     9965};
     9966
     9967
     9968// Keep a copy of the old load method
     9969var _load = jQuery.fn.load;
     9970
     9971/**
     9972 * Load a url into a page
     9973 */
     9974jQuery.fn.load = function( url, params, callback ) {
     9975        if ( typeof url !== "string" && _load ) {
     9976                return _load.apply( this, arguments );
     9977        }
     9978
     9979        var selector, response, type,
     9980                self = this,
     9981                off = url.indexOf(" ");
     9982
     9983        if ( off >= 0 ) {
     9984                selector = url.slice( off, url.length );
     9985                url = url.slice( 0, off );
     9986        }
     9987
     9988        // If it's a function
     9989        if ( jQuery.isFunction( params ) ) {
     9990
     9991                // We assume that it's the callback
     9992                callback = params;
     9993                params = undefined;
     9994
     9995        // Otherwise, build a param string
     9996        } else if ( params && typeof params === "object" ) {
     9997                type = "POST";
     9998        }
     9999
     10000        // If we have elements to modify, make the request
     10001        if ( self.length > 0 ) {
     10002                jQuery.ajax({
     10003                        url: url,
     10004
     10005                        // if "type" variable is undefined, then "GET" method will be used
     10006                        type: type,
     10007                        dataType: "html",
     10008                        data: params
     10009                }).done(function( responseText ) {
     10010
     10011                        // Save response for use in complete callback
     10012                        response = arguments;
     10013
     10014                        self.html( selector ?
     10015
     10016                                // If a selector was specified, locate the right elements in a dummy div
     10017                                // Exclude scripts to avoid IE 'Permission Denied' errors
     10018                                jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
     10019
     10020                                // Otherwise use the full result
     10021                                responseText );
     10022
     10023                }).complete( callback && function( jqXHR, status ) {
     10024                        self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
     10025                });
     10026        }
     10027
     10028        return this;
     10029};
     10030
     10031
     10032
     10033
     10034jQuery.expr.filters.animated = function( elem ) {
     10035        return jQuery.grep(jQuery.timers, function( fn ) {
     10036                return elem === fn.elem;
     10037        }).length;
     10038};
     10039
     10040
     10041
     10042
     10043
     10044var docElem = window.document.documentElement;
     10045
     10046/**
     10047 * Gets a window from an element
     10048 */
     10049function getWindow( elem ) {
     10050        return jQuery.isWindow( elem ) ?
     10051                elem :
     10052                elem.nodeType === 9 ?
     10053                        elem.defaultView || elem.parentWindow :
     10054                        false;
    899410055}
    899510056
    8996 function propFilter( props, specialEasing ) {
    8997         var index, name, easing, value, hooks;
    8998 
    8999         // camelCase, specialEasing and expand cssHook pass
    9000         for ( index in props ) {
    9001                 name = jQuery.camelCase( index );
    9002                 easing = specialEasing[ name ];
    9003                 value = props[ index ];
    9004                 if ( jQuery.isArray( value ) ) {
    9005                         easing = value[ 1 ];
    9006                         value = props[ index ] = value[ 0 ];
    9007                 }
    9008 
    9009                 if ( index !== name ) {
    9010                         props[ name ] = value;
    9011                         delete props[ index ];
    9012                 }
    9013 
    9014                 hooks = jQuery.cssHooks[ name ];
    9015                 if ( hooks && "expand" in hooks ) {
    9016                         value = hooks.expand( value );
    9017                         delete props[ name ];
    9018 
    9019                         // not quite $.extend, this wont overwrite keys already present.
    9020                         // also - reusing 'index' from above because we have the correct "name"
    9021                         for ( index in value ) {
    9022                                 if ( !( index in props ) ) {
    9023                                         props[ index ] = value[ index ];
    9024                                         specialEasing[ index ] = easing;
    9025                                 }
    9026                         }
    9027                 } else {
    9028                         specialEasing[ name ] = easing;
    9029                 }
    9030         }
    9031 }
    9032 
    9033 jQuery.Animation = jQuery.extend( Animation, {
    9034 
    9035         tweener: function( props, callback ) {
    9036                 if ( jQuery.isFunction( props ) ) {
    9037                         callback = props;
    9038                         props = [ "*" ];
    9039                 } else {
    9040                         props = props.split(" ");
    9041                 }
    9042 
    9043                 var prop,
    9044                         index = 0,
    9045                         length = props.length;
    9046 
    9047                 for ( ; index < length ; index++ ) {
    9048                         prop = props[ index ];
    9049                         tweeners[ prop ] = tweeners[ prop ] || [];
    9050                         tweeners[ prop ].unshift( callback );
    9051                 }
    9052         },
    9053 
    9054         prefilter: function( callback, prepend ) {
    9055                 if ( prepend ) {
    9056                         animationPrefilters.unshift( callback );
    9057                 } else {
    9058                         animationPrefilters.push( callback );
    9059                 }
    9060         }
    9061 });
    9062 
    9063 function defaultPrefilter( elem, props, opts ) {
    9064         /* jshint validthis: true */
    9065         var prop, value, toggle, tween, hooks, oldfire,
    9066                 anim = this,
    9067                 orig = {},
    9068                 style = elem.style,
    9069                 hidden = elem.nodeType && isHidden( elem ),
    9070                 dataShow = jQuery._data( elem, "fxshow" );
    9071 
    9072         // handle queue: false promises
    9073         if ( !opts.queue ) {
    9074                 hooks = jQuery._queueHooks( elem, "fx" );
    9075                 if ( hooks.unqueued == null ) {
    9076                         hooks.unqueued = 0;
    9077                         oldfire = hooks.empty.fire;
    9078                         hooks.empty.fire = function() {
    9079                                 if ( !hooks.unqueued ) {
    9080                                         oldfire();
    9081                                 }
    9082                         };
    9083                 }
    9084                 hooks.unqueued++;
    9085 
    9086                 anim.always(function() {
    9087                         // doing this makes sure that the complete handler will be called
    9088                         // before this completes
    9089                         anim.always(function() {
    9090                                 hooks.unqueued--;
    9091                                 if ( !jQuery.queue( elem, "fx" ).length ) {
    9092                                         hooks.empty.fire();
    9093                                 }
    9094                         });
    9095                 });
    9096         }
    9097 
    9098         // height/width overflow pass
    9099         if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
    9100                 // Make sure that nothing sneaks out
    9101                 // Record all 3 overflow attributes because IE does not
    9102                 // change the overflow attribute when overflowX and
    9103                 // overflowY are set to the same value
    9104                 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
    9105 
    9106                 // Set display property to inline-block for height/width
    9107                 // animations on inline elements that are having width/height animated
    9108                 if ( jQuery.css( elem, "display" ) === "inline" &&
    9109                                 jQuery.css( elem, "float" ) === "none" ) {
    9110 
    9111                         // inline-level elements accept inline-block;
    9112                         // block-level elements need to be inline with layout
    9113                         if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
    9114                                 style.display = "inline-block";
    9115 
    9116                         } else {
    9117                                 style.zoom = 1;
    9118                         }
    9119                 }
    9120         }
    9121 
    9122         if ( opts.overflow ) {
    9123                 style.overflow = "hidden";
    9124                 if ( !jQuery.support.shrinkWrapBlocks ) {
    9125                         anim.always(function() {
    9126                                 style.overflow = opts.overflow[ 0 ];
    9127                                 style.overflowX = opts.overflow[ 1 ];
    9128                                 style.overflowY = opts.overflow[ 2 ];
    9129                         });
    9130                 }
    9131         }
    9132 
    9133 
    9134         // show/hide pass
    9135         for ( prop in props ) {
    9136                 value = props[ prop ];
    9137                 if ( rfxtypes.exec( value ) ) {
    9138                         delete props[ prop ];
    9139                         toggle = toggle || value === "toggle";
    9140                         if ( value === ( hidden ? "hide" : "show" ) ) {
    9141                                 continue;
    9142                         }
    9143                         orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
    9144                 }
    9145         }
    9146 
    9147         if ( !jQuery.isEmptyObject( orig ) ) {
    9148                 if ( dataShow ) {
    9149                         if ( "hidden" in dataShow ) {
    9150                                 hidden = dataShow.hidden;
    9151                         }
    9152                 } else {
    9153                         dataShow = jQuery._data( elem, "fxshow", {} );
    9154                 }
    9155 
    9156                 // store state if its toggle - enables .stop().toggle() to "reverse"
    9157                 if ( toggle ) {
    9158                         dataShow.hidden = !hidden;
    9159                 }
    9160                 if ( hidden ) {
    9161                         jQuery( elem ).show();
    9162                 } else {
    9163                         anim.done(function() {
    9164                                 jQuery( elem ).hide();
    9165                         });
    9166                 }
    9167                 anim.done(function() {
    9168                         var prop;
    9169                         jQuery._removeData( elem, "fxshow" );
    9170                         for ( prop in orig ) {
    9171                                 jQuery.style( elem, prop, orig[ prop ] );
    9172                         }
    9173                 });
    9174                 for ( prop in orig ) {
    9175                         tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
    9176 
    9177                         if ( !( prop in dataShow ) ) {
    9178                                 dataShow[ prop ] = tween.start;
    9179                                 if ( hidden ) {
    9180                                         tween.end = tween.start;
    9181                                         tween.start = prop === "width" || prop === "height" ? 1 : 0;
    9182                                 }
    9183                         }
    9184                 }
    9185         }
    9186 }
    9187 
    9188 function Tween( elem, options, prop, end, easing ) {
    9189         return new Tween.prototype.init( elem, options, prop, end, easing );
    9190 }
    9191 jQuery.Tween = Tween;
    9192 
    9193 Tween.prototype = {
    9194         constructor: Tween,
    9195         init: function( elem, options, prop, end, easing, unit ) {
    9196                 this.elem = elem;
    9197                 this.prop = prop;
    9198                 this.easing = easing || "swing";
    9199                 this.options = options;
    9200                 this.start = this.now = this.cur();
    9201                 this.end = end;
    9202                 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
    9203         },
    9204         cur: function() {
    9205                 var hooks = Tween.propHooks[ this.prop ];
    9206 
    9207                 return hooks && hooks.get ?
    9208                         hooks.get( this ) :
    9209                         Tween.propHooks._default.get( this );
    9210         },
    9211         run: function( percent ) {
    9212                 var eased,
    9213                         hooks = Tween.propHooks[ this.prop ];
    9214 
    9215                 if ( this.options.duration ) {
    9216                         this.pos = eased = jQuery.easing[ this.easing ](
    9217                                 percent, this.options.duration * percent, 0, 1, this.options.duration
    9218                         );
    9219                 } else {
    9220                         this.pos = eased = percent;
    9221                 }
    9222                 this.now = ( this.end - this.start ) * eased + this.start;
    9223 
    9224                 if ( this.options.step ) {
    9225                         this.options.step.call( this.elem, this.now, this );
    9226                 }
    9227 
    9228                 if ( hooks && hooks.set ) {
    9229                         hooks.set( this );
    9230                 } else {
    9231                         Tween.propHooks._default.set( this );
    9232                 }
    9233                 return this;
    9234         }
    9235 };
    9236 
    9237 Tween.prototype.init.prototype = Tween.prototype;
    9238 
    9239 Tween.propHooks = {
    9240         _default: {
    9241                 get: function( tween ) {
    9242                         var result;
    9243 
    9244                         if ( tween.elem[ tween.prop ] != null &&
    9245                                 (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
    9246                                 return tween.elem[ tween.prop ];
    9247                         }
    9248 
    9249                         // passing an empty string as a 3rd parameter to .css will automatically
    9250                         // attempt a parseFloat and fallback to a string if the parse fails
    9251                         // so, simple values such as "10px" are parsed to Float.
    9252                         // complex values such as "rotate(1rad)" are returned as is.
    9253                         result = jQuery.css( tween.elem, tween.prop, "" );
    9254                         // Empty strings, null, undefined and "auto" are converted to 0.
    9255                         return !result || result === "auto" ? 0 : result;
    9256                 },
    9257                 set: function( tween ) {
    9258                         // use step hook for back compat - use cssHook if its there - use .style if its
    9259                         // available and use plain properties where available
    9260                         if ( jQuery.fx.step[ tween.prop ] ) {
    9261                                 jQuery.fx.step[ tween.prop ]( tween );
    9262                         } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
    9263                                 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
    9264                         } else {
    9265                                 tween.elem[ tween.prop ] = tween.now;
    9266                         }
    9267                 }
    9268         }
    9269 };
    9270 
    9271 // Support: IE <=9
    9272 // Panic based approach to setting things on disconnected nodes
    9273 
    9274 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
    9275         set: function( tween ) {
    9276                 if ( tween.elem.nodeType && tween.elem.parentNode ) {
    9277                         tween.elem[ tween.prop ] = tween.now;
    9278                 }
    9279         }
    9280 };
    9281 
    9282 jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
    9283         var cssFn = jQuery.fn[ name ];
    9284         jQuery.fn[ name ] = function( speed, easing, callback ) {
    9285                 return speed == null || typeof speed === "boolean" ?
    9286                         cssFn.apply( this, arguments ) :
    9287                         this.animate( genFx( name, true ), speed, easing, callback );
    9288         };
    9289 });
    9290 
    9291 jQuery.fn.extend({
    9292         fadeTo: function( speed, to, easing, callback ) {
    9293 
    9294                 // show any hidden elements after setting opacity to 0
    9295                 return this.filter( isHidden ).css( "opacity", 0 ).show()
    9296 
    9297                         // animate to the value specified
    9298                         .end().animate({ opacity: to }, speed, easing, callback );
    9299         },
    9300         animate: function( prop, speed, easing, callback ) {
    9301                 var empty = jQuery.isEmptyObject( prop ),
    9302                         optall = jQuery.speed( speed, easing, callback ),
    9303                         doAnimation = function() {
    9304                                 // Operate on a copy of prop so per-property easing won't be lost
    9305                                 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
    9306 
    9307                                 // Empty animations, or finishing resolves immediately
    9308                                 if ( empty || jQuery._data( this, "finish" ) ) {
    9309                                         anim.stop( true );
    9310                                 }
    9311                         };
    9312                         doAnimation.finish = doAnimation;
    9313 
    9314                 return empty || optall.queue === false ?
    9315                         this.each( doAnimation ) :
    9316                         this.queue( optall.queue, doAnimation );
    9317         },
    9318         stop: function( type, clearQueue, gotoEnd ) {
    9319                 var stopQueue = function( hooks ) {
    9320                         var stop = hooks.stop;
    9321                         delete hooks.stop;
    9322                         stop( gotoEnd );
    9323                 };
    9324 
    9325                 if ( typeof type !== "string" ) {
    9326                         gotoEnd = clearQueue;
    9327                         clearQueue = type;
    9328                         type = undefined;
    9329                 }
    9330                 if ( clearQueue && type !== false ) {
    9331                         this.queue( type || "fx", [] );
    9332                 }
    9333 
    9334                 return this.each(function() {
    9335                         var dequeue = true,
    9336                                 index = type != null && type + "queueHooks",
    9337                                 timers = jQuery.timers,
    9338                                 data = jQuery._data( this );
    9339 
    9340                         if ( index ) {
    9341                                 if ( data[ index ] && data[ index ].stop ) {
    9342                                         stopQueue( data[ index ] );
    9343                                 }
    9344                         } else {
    9345                                 for ( index in data ) {
    9346                                         if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
    9347                                                 stopQueue( data[ index ] );
    9348                                         }
    9349                                 }
    9350                         }
    9351 
    9352                         for ( index = timers.length; index--; ) {
    9353                                 if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
    9354                                         timers[ index ].anim.stop( gotoEnd );
    9355                                         dequeue = false;
    9356                                         timers.splice( index, 1 );
    9357                                 }
    9358                         }
    9359 
    9360                         // start the next in the queue if the last step wasn't forced
    9361                         // timers currently will call their complete callbacks, which will dequeue
    9362                         // but only if they were gotoEnd
    9363                         if ( dequeue || !gotoEnd ) {
    9364                                 jQuery.dequeue( this, type );
    9365                         }
    9366                 });
    9367         },
    9368         finish: function( type ) {
    9369                 if ( type !== false ) {
    9370                         type = type || "fx";
    9371                 }
    9372                 return this.each(function() {
    9373                         var index,
    9374                                 data = jQuery._data( this ),
    9375                                 queue = data[ type + "queue" ],
    9376                                 hooks = data[ type + "queueHooks" ],
    9377                                 timers = jQuery.timers,
    9378                                 length = queue ? queue.length : 0;
    9379 
    9380                         // enable finishing flag on private data
    9381                         data.finish = true;
    9382 
    9383                         // empty the queue first
    9384                         jQuery.queue( this, type, [] );
    9385 
    9386                         if ( hooks && hooks.stop ) {
    9387                                 hooks.stop.call( this, true );
    9388                         }
    9389 
    9390                         // look for any active animations, and finish them
    9391                         for ( index = timers.length; index--; ) {
    9392                                 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
    9393                                         timers[ index ].anim.stop( true );
    9394                                         timers.splice( index, 1 );
    9395                                 }
    9396                         }
    9397 
    9398                         // look for any animations in the old queue and finish them
    9399                         for ( index = 0; index < length; index++ ) {
    9400                                 if ( queue[ index ] && queue[ index ].finish ) {
    9401                                         queue[ index ].finish.call( this );
    9402                                 }
    9403                         }
    9404 
    9405                         // turn off finishing flag
    9406                         delete data.finish;
    9407                 });
    9408         }
    9409 });
    9410 
    9411 // Generate parameters to create a standard animation
    9412 function genFx( type, includeWidth ) {
    9413         var which,
    9414                 attrs = { height: type },
    9415                 i = 0;
    9416 
    9417         // if we include width, step value is 1 to do all cssExpand values,
    9418         // if we don't include width, step value is 2 to skip over Left and Right
    9419         includeWidth = includeWidth? 1 : 0;
    9420         for( ; i < 4 ; i += 2 - includeWidth ) {
    9421                 which = cssExpand[ i ];
    9422                 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
    9423         }
    9424 
    9425         if ( includeWidth ) {
    9426                 attrs.opacity = attrs.width = type;
    9427         }
    9428 
    9429         return attrs;
    9430 }
    9431 
    9432 // Generate shortcuts for custom animations
    9433 jQuery.each({
    9434         slideDown: genFx("show"),
    9435         slideUp: genFx("hide"),
    9436         slideToggle: genFx("toggle"),
    9437         fadeIn: { opacity: "show" },
    9438         fadeOut: { opacity: "hide" },
    9439         fadeToggle: { opacity: "toggle" }
    9440 }, function( name, props ) {
    9441         jQuery.fn[ name ] = function( speed, easing, callback ) {
    9442                 return this.animate( props, speed, easing, callback );
    9443         };
    9444 });
    9445 
    9446 jQuery.speed = function( speed, easing, fn ) {
    9447         var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
    9448                 complete: fn || !fn && easing ||
    9449                         jQuery.isFunction( speed ) && speed,
    9450                 duration: speed,
    9451                 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
    9452         };
    9453 
    9454         opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
    9455                 opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
    9456 
    9457         // normalize opt.queue - true/undefined/null -> "fx"
    9458         if ( opt.queue == null || opt.queue === true ) {
    9459                 opt.queue = "fx";
    9460         }
    9461 
    9462         // Queueing
    9463         opt.old = opt.complete;
    9464 
    9465         opt.complete = function() {
    9466                 if ( jQuery.isFunction( opt.old ) ) {
    9467                         opt.old.call( this );
    9468                 }
    9469 
    9470                 if ( opt.queue ) {
    9471                         jQuery.dequeue( this, opt.queue );
    9472                 }
    9473         };
    9474 
    9475         return opt;
    9476 };
    9477 
    9478 jQuery.easing = {
    9479         linear: function( p ) {
    9480                 return p;
    9481         },
    9482         swing: function( p ) {
    9483                 return 0.5 - Math.cos( p*Math.PI ) / 2;
    9484         }
    9485 };
    9486 
    9487 jQuery.timers = [];
    9488 jQuery.fx = Tween.prototype.init;
    9489 jQuery.fx.tick = function() {
    9490         var timer,
    9491                 timers = jQuery.timers,
    9492                 i = 0;
    9493 
    9494         fxNow = jQuery.now();
    9495 
    9496         for ( ; i < timers.length; i++ ) {
    9497                 timer = timers[ i ];
    9498                 // Checks the timer has not already been removed
    9499                 if ( !timer() && timers[ i ] === timer ) {
    9500                         timers.splice( i--, 1 );
    9501                 }
    9502         }
    9503 
    9504         if ( !timers.length ) {
    9505                 jQuery.fx.stop();
    9506         }
    9507         fxNow = undefined;
    9508 };
    9509 
    9510 jQuery.fx.timer = function( timer ) {
    9511         if ( timer() && jQuery.timers.push( timer ) ) {
    9512                 jQuery.fx.start();
    9513         }
    9514 };
    9515 
    9516 jQuery.fx.interval = 13;
    9517 
    9518 jQuery.fx.start = function() {
    9519         if ( !timerId ) {
    9520                 timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
    9521         }
    9522 };
    9523 
    9524 jQuery.fx.stop = function() {
    9525         clearInterval( timerId );
    9526         timerId = null;
    9527 };
    9528 
    9529 jQuery.fx.speeds = {
    9530         slow: 600,
    9531         fast: 200,
    9532         // Default speed
    9533         _default: 400
    9534 };
    9535 
    9536 // Back Compat <1.8 extension point
    9537 jQuery.fx.step = {};
    9538 
    9539 if ( jQuery.expr && jQuery.expr.filters ) {
    9540         jQuery.expr.filters.animated = function( elem ) {
    9541                 return jQuery.grep(jQuery.timers, function( fn ) {
    9542                         return elem === fn.elem;
    9543                 }).length;
    9544         };
    9545 }
    9546 jQuery.fn.offset = function( options ) {
    9547         if ( arguments.length ) {
    9548                 return options === undefined ?
    9549                         this :
    9550                         this.each(function( i ) {
    9551                                 jQuery.offset.setOffset( this, options, i );
    9552                         });
    9553         }
    9554 
    9555         var docElem, win,
    9556                 box = { top: 0, left: 0 },
    9557                 elem = this[ 0 ],
    9558                 doc = elem && elem.ownerDocument;
    9559 
    9560         if ( !doc ) {
    9561                 return;
    9562         }
    9563 
    9564         docElem = doc.documentElement;
    9565 
    9566         // Make sure it's not a disconnected DOM node
    9567         if ( !jQuery.contains( docElem, elem ) ) {
    9568                 return box;
    9569         }
    9570 
    9571         // If we don't have gBCR, just use 0,0 rather than error
    9572         // BlackBerry 5, iOS 3 (original iPhone)
    9573         if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
    9574                 box = elem.getBoundingClientRect();
    9575         }
    9576         win = getWindow( doc );
    9577         return {
    9578                 top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
    9579                 left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
    9580         };
    9581 };
    9582 
    958310057jQuery.offset = {
    9584 
    958510058        setOffset: function( elem, options, i ) {
    9586                 var position = jQuery.css( elem, "position" );
     10059                var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
     10060                        position = jQuery.css( elem, "position" ),
     10061                        curElem = jQuery( elem ),
     10062                        props = {};
    958710063
    958810064                // set position first, in-case top/left are set even on static elem
     
    959110067                }
    959210068
    9593                 var curElem = jQuery( elem ),
    9594                         curOffset = curElem.offset(),
    9595                         curCSSTop = jQuery.css( elem, "top" ),
    9596                         curCSSLeft = jQuery.css( elem, "left" ),
    9597                         calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
    9598                         props = {}, curPosition = {}, curTop, curLeft;
     10069                curOffset = curElem.offset();
     10070                curCSSTop = jQuery.css( elem, "top" );
     10071                curCSSLeft = jQuery.css( elem, "left" );
     10072                calculatePosition = ( position === "absolute" || position === "fixed" ) &&
     10073                        jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
    959910074
    960010075                // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
     
    962710102};
    962810103
    9629 
    963010104jQuery.fn.extend({
     10105        offset: function( options ) {
     10106                if ( arguments.length ) {
     10107                        return options === undefined ?
     10108                                this :
     10109                                this.each(function( i ) {
     10110                                        jQuery.offset.setOffset( this, options, i );
     10111                                });
     10112                }
     10113
     10114                var docElem, win,
     10115                        box = { top: 0, left: 0 },
     10116                        elem = this[ 0 ],
     10117                        doc = elem && elem.ownerDocument;
     10118
     10119                if ( !doc ) {
     10120                        return;
     10121                }
     10122
     10123                docElem = doc.documentElement;
     10124
     10125                // Make sure it's not a disconnected DOM node
     10126                if ( !jQuery.contains( docElem, elem ) ) {
     10127                        return box;
     10128                }
     10129
     10130                // If we don't have gBCR, just use 0,0 rather than error
     10131                // BlackBerry 5, iOS 3 (original iPhone)
     10132                if ( typeof elem.getBoundingClientRect !== strundefined ) {
     10133                        box = elem.getBoundingClientRect();
     10134                }
     10135                win = getWindow( doc );
     10136                return {
     10137                        top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
     10138                        left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
     10139                };
     10140        },
    963110141
    963210142        position: function() {
     
    963910149                        elem = this[ 0 ];
    964010150
    9641                 // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
     10151                // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
    964210152                if ( jQuery.css( elem, "position" ) === "fixed" ) {
    964310153                        // we assume that getBoundingClientRect is available when computed position is fixed
     
    967010180                return this.map(function() {
    967110181                        var offsetParent = this.offsetParent || docElem;
    9672                         while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
     10182
     10183                        while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
    967310184                                offsetParent = offsetParent.offsetParent;
    967410185                        }
     
    967810189});
    967910190
    9680 
    968110191// Create scrollLeft and scrollTop methods
    9682 jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
     10192jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
    968310193        var top = /Y/.test( prop );
    968410194
    968510195        jQuery.fn[ method ] = function( val ) {
    9686                 return jQuery.access( this, function( elem, method, val ) {
     10196                return access( this, function( elem, method, val ) {
    968710197                        var win = getWindow( elem );
    968810198
     
    970610216});
    970710217
    9708 function getWindow( elem ) {
    9709         return jQuery.isWindow( elem ) ?
    9710                 elem :
    9711                 elem.nodeType === 9 ?
    9712                         elem.defaultView || elem.parentWindow :
    9713                         false;
    9714 }
     10218// Add the top/left cssHooks using jQuery.fn.position
     10219// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
     10220// getComputedStyle returns percent when specified for top/left/bottom/right
     10221// rather than make the css module depend on the offset module, we just check for it here
     10222jQuery.each( [ "top", "left" ], function( i, prop ) {
     10223        jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
     10224                function( elem, computed ) {
     10225                        if ( computed ) {
     10226                                computed = curCSS( elem, prop );
     10227                                // if curCSS returns percentage, fallback to offset
     10228                                return rnumnonpx.test( computed ) ?
     10229                                        jQuery( elem ).position()[ prop ] + "px" :
     10230                                        computed;
     10231                        }
     10232                }
     10233        );
     10234});
     10235
     10236
    971510237// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
    971610238jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
     
    972110243                                extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
    972210244
    9723                         return jQuery.access( this, function( elem, type, value ) {
     10245                        return access( this, function( elem, type, value ) {
    972410246                                var doc;
    972510247
     
    975410276        });
    975510277});
    9756 // Limit scope pollution from any deprecated API
    9757 // (function() {
     10278
    975810279
    975910280// The number of elements contained in the matched element set
     
    976410285jQuery.fn.andSelf = jQuery.fn.addBack;
    976510286
    9766 // })();
    9767 if ( typeof module === "object" && module && typeof module.exports === "object" ) {
    9768         // Expose jQuery as module.exports in loaders that implement the Node
    9769         // module pattern (including browserify). Do not create the global, since
    9770         // the user will be storing it themselves locally, and globals are frowned
    9771         // upon in the Node module world.
    9772         module.exports = jQuery;
    9773 } else {
    9774         // Otherwise expose jQuery to the global object as usual
     10287
     10288
     10289
     10290// Register as a named AMD module, since jQuery can be concatenated with other
     10291// files that may use define, but not via a proper concatenation script that
     10292// understands anonymous AMD modules. A named AMD is safest and most robust
     10293// way to register. Lowercase jquery is used because AMD module names are
     10294// derived from file names, and jQuery is normally delivered in a lowercase
     10295// file name. Do this after creating the global so that if an AMD module wants
     10296// to call noConflict to hide this version of jQuery, it will work.
     10297if ( typeof define === "function" && define.amd ) {
     10298        define( "jquery", [], function() {
     10299                return jQuery;
     10300        });
     10301}
     10302
     10303
     10304
     10305
     10306var
     10307        // Map over jQuery in case of overwrite
     10308        _jQuery = window.jQuery,
     10309
     10310        // Map over the $ in case of overwrite
     10311        _$ = window.$;
     10312
     10313jQuery.noConflict = function( deep ) {
     10314        if ( window.$ === jQuery ) {
     10315                window.$ = _$;
     10316        }
     10317
     10318        if ( deep && window.jQuery === jQuery ) {
     10319                window.jQuery = _jQuery;
     10320        }
     10321
     10322        return jQuery;
     10323};
     10324
     10325// Expose jQuery and $ identifiers, even in
     10326// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
     10327// and CommonJS for browser emulators (#13566)
     10328if ( typeof noGlobal === strundefined ) {
    977510329        window.jQuery = window.$ = jQuery;
    9776 
    9777         // Register as a named AMD module, since jQuery can be concatenated with other
    9778         // files that may use define, but not via a proper concatenation script that
    9779         // understands anonymous AMD modules. A named AMD is safest and most robust
    9780         // way to register. Lowercase jquery is used because AMD module names are
    9781         // derived from file names, and jQuery is normally delivered in a lowercase
    9782         // file name. Do this after creating the global so that if an AMD module wants
    9783         // to call noConflict to hide this version of jQuery, it will work.
    9784         if ( typeof define === "function" && define.amd ) {
    9785                 define( "jquery", [], function () { return jQuery; } );
    9786         }
    978710330}
    978810331
    9789 })( window );
     10332
     10333
     10334
     10335return jQuery;
     10336
     10337}));
  • trunk/themes/default/js/jquery.min.js

    r25383 r27372  
    1 /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
    2 //@ sourceMappingURL=jquery-1.10.2.min.map
    3 */
    4 (function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
    5 }({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
    6 u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
     1/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
     2!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
     3}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
     4},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
Note: See TracChangeset for help on using the changeset viewer.