From 4da7e5372f1cdbf382d8685b35c58a37752bb4cb Mon Sep 17 00:00:00 2001 From: Noel King Date: Fri, 13 Nov 2015 21:08:16 +0000 Subject: [PATCH] Week 5 code introduction to javascript --- www/css/style.css | 1 + www/img/ninjas-green.png | Bin 0 -> 68614 bytes www/img/ninjas-red.png | Bin 0 -> 92505 bytes www/index.html | 9 +- www/js/jquery.js | 10351 +++++++++++++++++++++++++++++++++++++ www/js/jumpy.js | 13 + 6 files changed, 10370 insertions(+), 4 deletions(-) create mode 100644 www/img/ninjas-green.png create mode 100644 www/img/ninjas-red.png create mode 100644 www/js/jquery.js diff --git a/www/css/style.css b/www/css/style.css index 5d419c9..d20ece4 100755 --- a/www/css/style.css +++ b/www/css/style.css @@ -84,6 +84,7 @@ div.cylinder { z-index: 100; height: 320px; bottom: 20%; + margin-left: 50%; } div.cylinder .middle { diff --git a/www/img/ninjas-green.png b/www/img/ninjas-green.png new file mode 100644 index 0000000000000000000000000000000000000000..019251fef201cf05bbc9ecd547c650cc434c89a7 GIT binary patch literal 68614 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 A0ssI2 literal 0 HcmV?d00001 diff --git a/www/img/ninjas-red.png b/www/img/ninjas-red.png new file mode 100644 index 0000000000000000000000000000000000000000..71ac0f4f50810537b8ac097d4b5e22ca62d645fa GIT binary patch literal 92505 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 Coolest Projects Mobile Game - Jumpy - +

@@ -17,16 +17,17 @@
-
+
-
- + + diff --git a/www/js/jquery.js b/www/js/jquery.js new file mode 100644 index 0000000..ed9241d --- /dev/null +++ b/www/js/jquery.js @@ -0,0 +1,10351 @@ +/*! + * jQuery JavaScript Library v1.11.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-04-28T16:19Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper window is present, + // execute the factory and get jQuery + // For environments that do not inherently posses a window with a document + // (such as Node.js), expose a jQuery-making factory as module.exports + // This accentuates the need for the creation of a real window + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +// + +var deletedIds = []; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.11.3", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( support.ownLast ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call(obj) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.0-pre + * http://sizzlejs.com/ + * + * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2014-12-16 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + characterEncoding + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + nodeType = context.nodeType; + + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + if ( !seed && documentIsHTML ) { + + // Try to shortcut find operations when possible (e.g., not under DocumentFragment) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document (jQuery #6963) + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType !== 1 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + parent = doc.defaultView; + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent !== parent.top ) { + // IE11 does not have attachEvent, so all must suffer + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Support tests + ---------------------------------------------------------------------- */ + documentIsHTML = !isXML( doc ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (oldCache = outerCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + outerCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context !== document && context; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is no seed and only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); +}; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +}); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return typeof rootjQuery.ready !== "undefined" ? + rootjQuery.ready( selector ) : + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.extend({ + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +jQuery.fn.extend({ + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.unique( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); +var rnotwhite = (/\S+/g); + + + +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !(--remaining) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend({ + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +}); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + + +var strundefined = typeof undefined; + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in jQuery( support ) ) { + break; +} +support.ownLast = i !== "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +jQuery(function() { + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +}); + + + + +(function() { + var div = document.createElement( "div" ); + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +/** + * Determines whether an object can have data + */ +jQuery.acceptData = function( elem ) { + var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute("classid") === noData; +}; + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var i, name, data, + elem = this[0], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + + +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; +}; +var rcheckableType = (/^(?:checkbox|radio)$/i); + + + +(function() { + // Minified: var a,b,c + var input = document.createElement( "input" ), + div = document.createElement( "div" ), + fragment = document.createDocumentFragment(); + + // Setup + div.innerHTML = "
a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + div.innerHTML = ""; + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + support.noCloneEvent = true; + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Execute the test only if not already executed in another module. + if (support.deleteExpando == null) { + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + } +})(); + + +(function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) + for ( i in { submit: true, change: true, focusin: true }) { + eventName = "on" + i; + + if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +})(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + 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( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = jQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + jQuery._removeData( doc, fix ); + } else { + jQuery._data( doc, fix, attaches ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!support.noCloneEvent || !support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + deletedIds.push( id ); + } + } + } + } + } +}); + +jQuery.fn.extend({ + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + remove: function( selector, keepData /* Internal Use Only */ ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var arg = arguments[ 0 ]; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + arg = this.parentNode; + + jQuery.cleanData( getAll( this ) ); + + if ( arg ) { + arg.replaceChild( elem, this ); + } + }); + + // Force removal if there was no new content (e.g., from empty arguments) + return arg && (arg.length || arg.nodeType) ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + + +var iframe, + elemdisplay = {}; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var style, + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + // getDefaultComputedStyle might be reliably used only on attached element + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + + // Use of this method is a temporary fix (more like optmization) until something better comes along, + // since it was removed from specification and supported only in FF + style.display : jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = (iframe || jQuery( "