{"version":3,"sources":["jsdelivr-header.js","/npm/jQuery@1.7.4/tmp/jquery.js"],"names":[],"mappings":"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","file":"/npm/jQuery@1.7.4/tmp/jquery.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/jQuery@1.7.4/tmp/jquery.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*!\n * jQuery JavaScript Library v1.7.2\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Wed Mar 21 12:46:34 2012 -0700\n */\n(function( window, undefined ) {\n\n// Use the correct document accordingly with window argument (sandbox)\nvar document = window.document,\n\tnavigator = window.navigator,\n\tlocation = window.location;\nvar jQuery = (function() {\n\n// Define a local copy of jQuery\nvar jQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// A simple way to check for HTML strings or ID strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\tquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\n\t// Check if a string has a non-whitespace character in it\n\trnotwhite = /\\S/,\n\n\t// Used for trimming whitespace\n\ttrimLeft = /^\\s+/,\n\ttrimRight = /\\s+$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\n\t// Useragent RegExp\n\trwebkit = /(webkit)[ \\/]([\\w.]+)/,\n\tropera = /(opera)(?:.*version)?[ \\/]([\\w.]+)/,\n\trmsie = /(msie) ([\\w.]+)/,\n\trmozilla = /(mozilla)(?:.*? rv:([\\w.]+))?/,\n\n\t// Matches dashed string for camelizing\n\trdashAlpha = /-([a-z]|[0-9])/ig,\n\trmsPrefix = /^-ms-/,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn ( letter + \"\" ).toUpperCase();\n\t},\n\n\t// Keep a UserAgent string for use with jQuery.browser\n\tuserAgent = navigator.userAgent,\n\n\t// For matching the engine and version of the browser\n\tbrowserMatch,\n\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// The ready event handler\n\tDOMContentLoaded,\n\n\t// Save a reference to some core methods\n\ttoString = Object.prototype.toString,\n\thasOwn = Object.prototype.hasOwnProperty,\n\tpush = Array.prototype.push,\n\tslice = Array.prototype.slice,\n\ttrim = String.prototype.trim,\n\tindexOf = Array.prototype.indexOf,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {};\n\njQuery.fn = jQuery.prototype = {\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem, ret, doc;\n\n\t\t// Handle $(\"\"), $(null), or $(undefined)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// The body element only exists once, optimize finding it\n\t\tif ( selector === \"body\" && !context && document.body ) {\n\t\t\tthis.context = document;\n\t\t\tthis[0] = document.body;\n\t\t\tthis.selector = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\t// Are we dealing with HTML string or an ID?\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = quickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Verify a match, and that no context was specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\t\t\t\t\tdoc = ( context ? context.ownerDocument || context : document );\n\n\t\t\t\t\t// If a single string is passed in and it's a single tag\n\t\t\t\t\t// just do a createElement and skip the rest\n\t\t\t\t\tret = rsingleTag.exec( selector );\n\n\t\t\t\t\tif ( ret ) {\n\t\t\t\t\t\tif ( jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\t\tselector = [ document.createElement( ret[1] ) ];\n\t\t\t\t\t\t\tjQuery.fn.attr.call( selector, context, true );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tselector = [ doc.createElement( ret[1] ) ];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tret = jQuery.buildFragment( [ match[1] ], [ doc ] );\n\t\t\t\t\t\tselector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.merge( this, selector );\n\n\t\t\t\t// HANDLE: $(\"#id\")\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The current version of jQuery being used\n\tjquery: \"1.7.2\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn slice.call( this, 0 );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems, name, selector ) {\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = this.constructor();\n\n\t\tif ( jQuery.isArray( elems ) ) {\n\t\t\tpush.apply( ret, elems );\n\n\t\t} else {\n\t\t\tjQuery.merge( ret, elems );\n\t\t}\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\tret.context = this.context;\n\n\t\tif ( name === \"find\" ) {\n\t\t\tret.selector = this.selector + ( this.selector ? \" \" : \"\" ) + selector;\n\t\t} else if ( name ) {\n\t\t\tret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\t\t}\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Attach the listeners\n\t\tjQuery.bindReady();\n\n\t\t// Add the callback\n\t\treadyList.add( fn );\n\n\t\treturn this;\n\t},\n\n\teq: function( i ) {\n\t\ti = +i;\n\t\treturn i === -1 ?\n\t\t\tthis.slice( i ) :\n\t\t\tthis.slice( i, i + 1 );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ),\n\t\t\t\"slice\", slice.call(arguments).join(\",\") );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\t\t// Either a released hold or an DOMready/load event and not yet ready\n\t\tif ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {\n\t\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\t\tif ( !document.body ) {\n\t\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.fireWith( document, [ jQuery ] );\n\n\t\t\t// Trigger any bound ready events\n\t\t\tif ( jQuery.fn.trigger ) {\n\t\t\t\tjQuery( document ).trigger( \"ready\" ).off( \"ready\" );\n\t\t\t}\n\t\t}\n\t},\n\n\tbindReady: function() {\n\t\tif ( readyList ) {\n\t\t\treturn;\n\t\t}\n\n\t\treadyList = jQuery.Callbacks( \"once memory\" );\n\n\t\t// Catch cases where $(document).ready() is called after the\n\t\t// browser event has already occurred.\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t}\n\n\t\t// Mozilla, Opera and webkit nightlies currently support this event\n\t\tif ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", jQuery.ready, false );\n\n\t\t// If IE event model is used\n\t\t} else if ( document.attachEvent ) {\n\t\t\t// ensure firing before onload,\n\t\t\t// maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", jQuery.ready );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar toplevel = false;\n\n\t\t\ttry {\n\t\t\t\ttoplevel = window.frameElement == null;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( document.documentElement.doScroll && toplevel ) {\n\t\t\t\tdoScrollCheck();\n\t\t\t}\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\treturn obj == null ?\n\t\t\tString( obj ) :\n\t\t\tclass2type[ toString.call(obj) ] || \"object\";\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tfor ( var name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tparseJSON: function( data ) {\n\t\tif ( typeof data !== \"string\" || !data ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\tdata = jQuery.trim( data );\n\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\t// Make sure the incoming data is actual JSON\n\t\t// Logic borrowed from http://json.org/json2.js\n\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\treturn ( new Function( \"return \" + data ) )();\n\n\t\t}\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tif ( typeof data !== \"string\" || !data ) {\n\t\t\treturn null;\n\t\t}\n\t\tvar xml, tmp;\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && rnotwhite.test( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( object, callback, args ) {\n\t\tvar name, i = 0,\n\t\t\tlength = object.length,\n\t\t\tisObj = length === undefined || jQuery.isFunction( object );\n\n\t\tif ( args ) {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in object ) {\n\t\t\t\t\tif ( callback.apply( object[ name ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.apply( object[ i++ ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in object ) {\n\t\t\t\t\tif ( callback.call( object[ name ], name, object[ name ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn object;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: trim ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\ttrim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\ttext.toString().replace( trimLeft, \"\" ).replace( trimRight, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( array, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( array != null ) {\n\t\t\t// The window, strings (and functions) also have 'length'\n\t\t\t// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n\t\t\tvar type = jQuery.type( array );\n\n\t\t\tif ( array.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( array ) ) {\n\t\t\t\tpush.call( ret, array );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, array );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, array, i ) {\n\t\tvar len;\n\n\t\tif ( array ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( array, elem, i );\n\t\t\t}\n\n\t\t\tlen = array.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in array && array[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar i = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof second.length === \"number\" ) {\n\t\t\tfor ( var l = second.length; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar ret = [], retVal;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( var i = 0, length = elems.length; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value, key, ret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\t// jquery objects are treated as arrays\n\t\t\tisArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( key in elems ) {\n\t\t\t\tvalue = callback( elems[ key ], key, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn ret.concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tif ( typeof context === \"string\" ) {\n\t\t\tvar tmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\tvar args = slice.call( arguments, 2 ),\n\t\t\tproxy = function() {\n\t\t\t\treturn fn.apply( context, args.concat( slice.call( arguments ) ) );\n\t\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Mutifunctional method to get and set values to a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, pass ) {\n\t\tvar exec,\n\t\t\tbulk = key == null,\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\n\t\t// Sets many values\n\t\tif ( key && typeof key === \"object\" ) {\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], 1, emptyGet, value );\n\t\t\t}\n\t\t\tchainable = 1;\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\t// Optionally, function values get executed if exec is true\n\t\t\texec = pass === undefined && jQuery.isFunction( value );\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations only iterate when executing function values\n\t\t\t\tif ( exec ) {\n\t\t\t\t\texec = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn exec.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\n\t\t\t\t// Otherwise they run against the entire set\n\t\t\t\t} else {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor (; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchainable = 1;\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// Use of jQuery.browser is frowned upon.\n\t// More details: http://docs.jquery.com/Utilities/jQuery.browser\n\tuaMatch: function( ua ) {\n\t\tua = ua.toLowerCase();\n\n\t\tvar match = rwebkit.exec( ua ) ||\n\t\t\tropera.exec( ua ) ||\n\t\t\trmsie.exec( ua ) ||\n\t\t\tua.indexOf(\"compatible\") < 0 && rmozilla.exec( ua ) ||\n\t\t\t[];\n\n\t\treturn { browser: match[1] || \"\", version: match[2] || \"0\" };\n\t},\n\n\tsub: function() {\n\t\tfunction jQuerySub( selector, context ) {\n\t\t\treturn new jQuerySub.fn.init( selector, context );\n\t\t}\n\t\tjQuery.extend( true, jQuerySub, this );\n\t\tjQuerySub.superclass = this;\n\t\tjQuerySub.fn = jQuerySub.prototype = this();\n\t\tjQuerySub.fn.constructor = jQuerySub;\n\t\tjQuerySub.sub = this.sub;\n\t\tjQuerySub.fn.init = function init( selector, context ) {\n\t\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\t\tcontext = jQuerySub( context );\n\t\t\t}\n\n\t\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t\t};\n\t\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\t\tvar rootjQuerySub = jQuerySub(document);\n\t\treturn jQuerySub;\n\t},\n\n\tbrowser: {}\n});\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nbrowserMatch = jQuery.uaMatch( userAgent );\nif ( browserMatch.browser ) {\n\tjQuery.browser[ browserMatch.browser ] = true;\n\tjQuery.browser.version = browserMatch.version;\n}\n\n// Deprecated, use jQuery.browser.webkit instead\nif ( jQuery.browser.webkit ) {\n\tjQuery.browser.safari = true;\n}\n\n// IE doesn't match non-breaking spaces with \\s\nif ( rnotwhite.test( \"\\xA0\" ) ) {\n\ttrimLeft = /^[\\s\\xA0]+/;\n\ttrimRight = /[\\s\\xA0]+$/;\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n\n// Cleanup functions for the document ready method\nif ( document.addEventListener ) {\n\tDOMContentLoaded = function() {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\t\tjQuery.ready();\n\t};\n\n} else if ( document.attachEvent ) {\n\tDOMContentLoaded = function() {\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n\t\t\tjQuery.ready();\n\t\t}\n\t};\n}\n\n// The DOM ready check for Internet Explorer\nfunction doScrollCheck() {\n\tif ( jQuery.isReady ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\t// If IE is used, use the trick by Diego Perini\n\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\tdocument.documentElement.doScroll(\"left\");\n\t} catch(e) {\n\t\tsetTimeout( doScrollCheck, 1 );\n\t\treturn;\n\t}\n\n\t// and execute any waiting functions\n\tjQuery.ready();\n}\n\nreturn jQuery;\n\n})();\n\n\n// String to Object flags format cache\nvar flagsCache = {};\n\n// Convert String-formatted flags into Object-formatted ones and store in cache\nfunction createFlags( flags ) {\n\tvar object = flagsCache[ flags ] = {},\n\t\ti, length;\n\tflags = flags.split( /\\s+/ );\n\tfor ( i = 0, length = flags.length; i < length; i++ ) {\n\t\tobject[ flags[i] ] = true;\n\t}\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\tflags:\tan optional list of space-separated flags that will change how\n *\t\t\tthe callback list behaves\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible flags:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( flags ) {\n\n\t// Convert flags from String-formatted to Object-formatted\n\t// (we check in cache first)\n\tflags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};\n\n\tvar // Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = [],\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Add one or several callbacks to the list\n\t\tadd = function( args ) {\n\t\t\tvar i,\n\t\t\t\tlength,\n\t\t\t\telem,\n\t\t\t\ttype,\n\t\t\t\tactual;\n\t\t\tfor ( i = 0, length = args.length; i < length; i++ ) {\n\t\t\t\telem = args[ i ];\n\t\t\t\ttype = jQuery.type( elem );\n\t\t\t\tif ( type === \"array\" ) {\n\t\t\t\t\t// Inspect recursively\n\t\t\t\t\tadd( elem );\n\t\t\t\t} else if ( type === \"function\" ) {\n\t\t\t\t\t// Add if not in unique mode and callback is not in\n\t\t\t\t\tif ( !flags.unique || !self.has( elem ) ) {\n\t\t\t\t\t\tlist.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Fire callbacks\n\t\tfire = function( context, args ) {\n\t\t\targs = args || [];\n\t\t\tmemory = !flags.memory || [ context, args ];\n\t\t\tfired = true;\n\t\t\tfiring = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {\n\t\t\t\t\tmemory = true; // Mark as halted\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( !flags.once ) {\n\t\t\t\t\tif ( stack && stack.length ) {\n\t\t\t\t\t\tmemory = stack.shift();\n\t\t\t\t\t\tself.fireWith( memory[ 0 ], memory[ 1 ] );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory === true ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t} else {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tvar length = list.length;\n\t\t\t\t\tadd( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away, unless previous\n\t\t\t\t\t// firing was halted (stopOnFalse)\n\t\t\t\t\t} else if ( memory && memory !== true ) {\n\t\t\t\t\t\tfiringStart = length;\n\t\t\t\t\t\tfire( memory[ 0 ], memory[ 1 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tvar args = arguments,\n\t\t\t\t\t\targIndex = 0,\n\t\t\t\t\t\targLength = args.length;\n\t\t\t\t\tfor ( ; argIndex < argLength ; argIndex++ ) {\n\t\t\t\t\t\tfor ( var i = 0; i < list.length; i++ ) {\n\t\t\t\t\t\t\tif ( args[ argIndex ] === list[ i ] ) {\n\t\t\t\t\t\t\t\t// Handle firingIndex and firingLength\n\t\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\t\tif ( i <= firingLength ) {\n\t\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t\t\tif ( i <= firingIndex ) {\n\t\t\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Remove the element\n\t\t\t\t\t\t\t\tlist.splice( i--, 1 );\n\t\t\t\t\t\t\t\t// If we have some unicity property then\n\t\t\t\t\t\t\t\t// we only need to do this once\n\t\t\t\t\t\t\t\tif ( flags.unique ) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Control if a given callback is in the list\n\t\t\thas: function( fn ) {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tvar i = 0,\n\t\t\t\t\t\tlength = list.length;\n\t\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\t\tif ( fn === list[ i ] ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory || memory === true ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tif ( !flags.once ) {\n\t\t\t\t\t\t\tstack.push( [ context, args ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( !( flags.once && memory ) ) {\n\t\t\t\t\t\tfire( context, args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\n\n\nvar // Static reference to slice\n\tsliceDeferred = [].slice;\n\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar doneList = jQuery.Callbacks( \"once memory\" ),\n\t\t\tfailList = jQuery.Callbacks( \"once memory\" ),\n\t\t\tprogressList = jQuery.Callbacks( \"memory\" ),\n\t\t\tstate = \"pending\",\n\t\t\tlists = {\n\t\t\t\tresolve: doneList,\n\t\t\t\treject: failList,\n\t\t\t\tnotify: progressList\n\t\t\t},\n\t\t\tpromise = {\n\t\t\t\tdone: doneList.add,\n\t\t\t\tfail: failList.add,\n\t\t\t\tprogress: progressList.add,\n\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\n\t\t\t\t// Deprecated\n\t\t\t\tisResolved: doneList.fired,\n\t\t\t\tisRejected: failList.fired,\n\n\t\t\t\tthen: function( doneCallbacks, failCallbacks, progressCallbacks ) {\n\t\t\t\t\tdeferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tpipe: function( fnDone, fnFail, fnProgress ) {\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( {\n\t\t\t\t\t\t\tdone: [ fnDone, \"resolve\" ],\n\t\t\t\t\t\t\tfail: [ fnFail, \"reject\" ],\n\t\t\t\t\t\t\tprogress: [ fnProgress, \"notify\" ]\n\t\t\t\t\t\t}, function( handler, data ) {\n\t\t\t\t\t\t\tvar fn = data[ 0 ],\n\t\t\t\t\t\t\t\taction = data[ 1 ],\n\t\t\t\t\t\t\t\treturned;\n\t\t\t\t\t\t\tif ( jQuery.isFunction( fn ) ) {\n\t\t\t\t\t\t\t\tdeferred[ handler ](function() {\n\t\t\t\t\t\t\t\t\treturned = fn.apply( this, arguments );\n\t\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\t\treturned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdeferred[ handler ]( newDefer[ action ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\tif ( obj == null ) {\n\t\t\t\t\t\tobj = promise;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor ( var key in promise ) {\n\t\t\t\t\t\t\tobj[ key ] = promise[ key ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn obj;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = promise.promise({}),\n\t\t\tkey;\n\n\t\tfor ( key in lists ) {\n\t\t\tdeferred[ key ] = lists[ key ].fire;\n\t\t\tdeferred[ key + \"With\" ] = lists[ key ].fireWith;\n\t\t}\n\n\t\t// Handle state\n\t\tdeferred.done( function() {\n\t\t\tstate = \"resolved\";\n\t\t}, failList.disable, progressList.lock ).fail( function() {\n\t\t\tstate = \"rejected\";\n\t\t}, doneList.disable, progressList.lock );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( firstParam ) {\n\t\tvar args = sliceDeferred.call( arguments, 0 ),\n\t\t\ti = 0,\n\t\t\tlength = args.length,\n\t\t\tpValues = new Array( length ),\n\t\t\tcount = length,\n\t\t\tpCount = length,\n\t\t\tdeferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?\n\t\t\t\tfirstParam :\n\t\t\t\tjQuery.Deferred(),\n\t\t\tpromise = deferred.promise();\n\t\tfunction resolveFunc( i ) {\n\t\t\treturn function( value ) {\n\t\t\t\targs[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdeferred.resolveWith( deferred, args );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tfunction progressFunc( i ) {\n\t\t\treturn function( value ) {\n\t\t\t\tpValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;\n\t\t\t\tdeferred.notifyWith( promise, pValues );\n\t\t\t};\n\t\t}\n\t\tif ( length > 1 ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {\n\t\t\t\t\targs[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );\n\t\t\t\t} else {\n\t\t\t\t\t--count;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( !count ) {\n\t\t\t\tdeferred.resolveWith( deferred, args );\n\t\t\t}\n\t\t} else if ( deferred !== firstParam ) {\n\t\t\tdeferred.resolveWith( deferred, length ? [ firstParam ] : [] );\n\t\t}\n\t\treturn promise;\n\t}\n});\n\n\n\n\njQuery.support = (function() {\n\n\tvar support,\n\t\tall,\n\t\ta,\n\t\tselect,\n\t\topt,\n\t\tinput,\n\t\tfragment,\n\t\ttds,\n\t\tevents,\n\t\teventName,\n\t\ti,\n\t\tisSupported,\n\t\tdiv = document.createElement( \"div\" ),\n\t\tdocumentElement = document.documentElement;\n\n\t// Preliminary tests\n\tdiv.setAttribute(\"className\", \"t\");\n\tdiv.innerHTML = \"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";\n\n\tall = div.getElementsByTagName( \"*\" );\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Can't get basic test support\n\tif ( !all || !all.length || !a ) {\n\t\treturn {};\n\t}\n\n\t// First batch of supports tests\n\tselect = document.createElement( \"select\" );\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName( \"input\" )[ 0 ];\n\n\tsupport = {\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName(\"tbody\").length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: ( a.getAttribute(\"href\") === \"/a\" ),\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.55/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Make sure that if no value is specified for a checkbox\n\t\t// that it defaults to \"on\".\n\t\t// (WebKit defaults to \"\" instead)\n\t\tcheckOn: ( input.value === \"on\" ),\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// Tests for enctype support on a form(#6743)\n\t\tenctype: !!document.createElement(\"form\").enctype,\n\n\t\t// Makes sure cloning an html5 element does not cause problems\n\t\t// Where outerHTML is undefined, this still works\n\t\thtml5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\",\n\n\t\t// Will be defined later\n\t\tsubmitBubbles: true,\n\t\tchangeBubbles: true,\n\t\tfocusinBubbles: false,\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true,\n\t\tpixelMargin: true\n\t};\n\n\t// jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead\n\tjQuery.boxModel = support.boxModel = (document.compatMode === \"CSS1Compat\");\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Test to see if it's possible to delete an expando from an element\n\t// Fails in Internet Explorer\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\tif ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\t// Cloning a node shouldn't copy over any\n\t\t\t// bound event handlers (IE does this)\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\t\tdiv.cloneNode( true ).fireEvent( \"onclick\" );\n\t}\n\n\t// Check if a radio maintains its value\n\t// after being appended to the DOM\n\tinput = document.createElement(\"input\");\n\tinput.value = \"t\";\n\tinput.setAttribute(\"type\", \"radio\");\n\tsupport.radioValue = input.value === \"t\";\n\n\tinput.setAttribute(\"checked\", \"checked\");\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( div.lastChild );\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\tfragment.removeChild( input );\n\tfragment.appendChild( div );\n\n\t// Technique from Juriy Zaytsev\n\t// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n\t// We only care about the case where non-standard event systems\n\t// are used, namely in IE. Short-circuiting here helps us to\n\t// avoid an eval call (in setAttribute) which can cause CSP\n\t// to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n\tif ( div.attachEvent ) {\n\t\tfor ( i in {\n\t\t\tsubmit: 1,\n\t\t\tchange: 1,\n\t\t\tfocusin: 1\n\t\t}) {\n\t\t\teventName = \"on\" + i;\n\t\t\tisSupported = ( eventName in div );\n\t\t\tif ( !isSupported ) {\n\t\t\t\tdiv.setAttribute( eventName, \"return;\" );\n\t\t\t\tisSupported = ( typeof div[ eventName ] === \"function\" );\n\t\t\t}\n\t\t\tsupport[ i + \"Bubbles\" ] = isSupported;\n\t\t}\n\t}\n\n\tfragment.removeChild( div );\n\n\t// Null elements to avoid leaks in IE\n\tfragment = select = opt = div = input = null;\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, outer, inner, table, td, offsetSupport,\n\t\t\tmarginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,\n\t\t\tpaddingMarginBorderVisibility, paddingMarginBorder,\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tconMarginTop = 1;\n\t\tpaddingMarginBorder = \"padding:0;margin:0;border:\";\n\t\tpositionTopLeftWidthHeight = \"position:absolute;top:0;left:0;width:1px;height:1px;\";\n\t\tpaddingMarginBorderVisibility = paddingMarginBorder + \"0;visibility:hidden;\";\n\t\tstyle = \"style='\" + positionTopLeftWidthHeight + paddingMarginBorder + \"5px solid #000;\";\n\t\thtml = \"<div \" + style + \"display:block;'><div style='\" + paddingMarginBorder + \"0;display:block;overflow:hidden;'></div></div>\" +\n\t\t\t\"<table \" + style + \"' cellpadding='0' cellspacing='0'>\" +\n\t\t\t\"<tr><td></td></tr></table>\";\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = paddingMarginBorderVisibility + \"width:0;height:0;position:static;top:0;margin-top:\" + conMarginTop + \"px\";\n\t\tbody.insertBefore( container, body.firstChild );\n\n\t\t// Construct the test element\n\t\tdiv = document.createElement(\"div\");\n\t\tcontainer.appendChild( div );\n\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\t// (only IE 8 fails this test)\n\t\tdiv.innerHTML = \"<table><tr><td style='\" + paddingMarginBorder + \"0;display:none'></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName( \"td\" );\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\t// (IE <= 8 fail this test)\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t// gets computed margin-right based on width of container. For more\n\t\t// info see bug #3333\n\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\tif ( window.getComputedStyle ) {\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tmarginDiv = document.createElement( \"div\" );\n\t\t\tmarginDiv.style.width = \"0\";\n\t\t\tmarginDiv.style.marginRight = \"0\";\n\t\t\tdiv.style.width = \"2px\";\n\t\t\tdiv.appendChild( marginDiv );\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\t// (IE < 8 does this)\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.width = div.style.padding = \"1px\";\n\t\t\tdiv.style.border = 0;\n\t\t\tdiv.style.overflow = \"hidden\";\n\t\t\tdiv.style.display = \"inline\";\n\t\t\tdiv.style.zoom = 1;\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\t// (IE 6 does this)\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.style.overflow = \"visible\";\n\t\t\tdiv.innerHTML = \"<div style='width:5px;'></div>\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\t\t}\n\n\t\tdiv.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;\n\t\tdiv.innerHTML = html;\n\n\t\touter = div.firstChild;\n\t\tinner = outer.firstChild;\n\t\ttd = outer.nextSibling.firstChild.firstChild;\n\n\t\toffsetSupport = {\n\t\t\tdoesNotAddBorder: ( inner.offsetTop !== 5 ),\n\t\t\tdoesAddBorderForTableAndCells: ( td.offsetTop === 5 )\n\t\t};\n\n\t\tinner.style.position = \"fixed\";\n\t\tinner.style.top = \"20px\";\n\n\t\t// safari subtracts parent border width here which is 5px\n\t\toffsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );\n\t\tinner.style.position = inner.style.top = \"\";\n\n\t\touter.style.overflow = \"hidden\";\n\t\touter.style.position = \"relative\";\n\n\t\toffsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );\n\t\toffsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );\n\n\t\tif ( window.getComputedStyle ) {\n\t\t\tdiv.style.marginTop = \"1%\";\n\t\t\tsupport.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== \"1%\";\n\t\t}\n\n\t\tif ( typeof container.style.zoom !== \"undefined\" ) {\n\t\t\tcontainer.style.zoom = 1;\n\t\t}\n\n\t\tbody.removeChild( container );\n\t\tmarginDiv = div = container = null;\n\n\t\tjQuery.extend( support, offsetSupport );\n\t});\n\n\treturn support;\n})();\n\n\n\n\nvar rbrace = /^(?:\\{.*\\}|\\[.*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\njQuery.extend({\n\tcache: {},\n\n\t// Please use with caution\n\tuuid: 0,\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar privateCache, thisCache, ret,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tgetByName = typeof name === \"string\",\n\n\t\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t\t// can't GC object references properly across the DOM-JS boundary\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t\t// attached directly to the object so GC can occur automatically\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,\n\t\t\tisEvents = name === \"events\";\n\n\t\t// Avoid doing any more work than we need to when trying to get data on an\n\t\t// object that has no data at all\n\t\tif ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !id ) {\n\t\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t\t// ends up in the global cache\n\t\t\tif ( isNode ) {\n\t\t\t\telem[ internalKey ] = id = ++jQuery.uuid;\n\t\t\t} else {\n\t\t\t\tid = internalKey;\n\t\t\t}\n\t\t}\n\n\t\tif ( !cache[ id ] ) {\n\t\t\tcache[ id ] = {};\n\n\t\t\t// Avoids exposing jQuery metadata on plain JS objects when the object\n\t\t\t// is serialized using JSON.stringify\n\t\t\tif ( !isNode ) {\n\t\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t\t}\n\t\t}\n\n\t\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t\t// shallow copied over onto the existing cache\n\t\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\t\tif ( pvt ) {\n\t\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t\t} else {\n\t\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t\t}\n\t\t}\n\n\t\tprivateCache = thisCache = cache[ id ];\n\n\t\t// jQuery data() is stored in a separate object inside the object's internal data\n\t\t// cache in order to avoid key collisions between internal data and user-defined\n\t\t// data.\n\t\tif ( !pvt ) {\n\t\t\tif ( !thisCache.data ) {\n\t\t\t\tthisCache.data = {};\n\t\t\t}\n\n\t\t\tthisCache = thisCache.data;\n\t\t}\n\n\t\tif ( data !== undefined ) {\n\t\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t\t}\n\n\t\t// Users should not attempt to inspect the internal events object using jQuery.data,\n\t\t// it is undocumented and subject to change. But does anyone listen? No.\n\t\tif ( isEvents && !thisCache[ name ] ) {\n\t\t\treturn privateCache.events;\n\t\t}\n\n\t\t// Check for both converted-to-camel and non-converted data property names\n\t\t// If a data property was specified\n\t\tif ( getByName ) {\n\n\t\t\t// First Try to find as-is property data\n\t\t\tret = thisCache[ name ];\n\n\t\t\t// Test for null|undefined property data\n\t\t\tif ( ret == null ) {\n\n\t\t\t\t// Try to find the camelCased property\n\t\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t\t}\n\t\t} else {\n\t\t\tret = thisCache;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tremoveData: function( elem, name, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, i, l,\n\n\t\t\t// Reference to internal data cache key\n\t\t\tinternalKey = jQuery.expando,\n\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tid = isNode ? elem[ internalKey ] : internalKey;\n\n\t\t// If there is already no cache entry for this object, there is no\n\t\t// purpose in continuing\n\t\tif ( !cache[ id ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( name ) {\n\n\t\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\t\tif ( thisCache ) {\n\n\t\t\t\t// Support array or space separated string names for data keys\n\t\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0, l = name.length; i < l; i++ ) {\n\t\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t\t}\n\n\t\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t\t// and let the cache object itself get destroyed\n\t\t\t\tif ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// See jQuery.data for more information\n\t\tif ( !pvt ) {\n\t\t\tdelete cache[ id ].data;\n\n\t\t\t// Don't destroy the parent cache unless the internal data object\n\t\t\t// had been the only thing left in it\n\t\t\tif ( !isEmptyDataObject(cache[ id ]) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Browsers that fail expando deletion also refuse to delete expandos on\n\t\t// the window, but it will allow it on all other JS objects; other browsers\n\t\t// don't care\n\t\t// Ensure that `cache` is not a window object #10080\n\t\tif ( jQuery.support.deleteExpando || !cache.setInterval ) {\n\t\t\tdelete cache[ id ];\n\t\t} else {\n\t\t\tcache[ id ] = null;\n\t\t}\n\n\t\t// We destroyed the cache and need to eliminate the expando on the node to avoid\n\t\t// false lookups in the cache for entries that no longer exist\n\t\tif ( isNode ) {\n\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t// we must handle all of these cases\n\t\t\tif ( jQuery.support.deleteExpando ) {\n\t\t\t\tdelete elem[ internalKey ];\n\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\telem.removeAttribute( internalKey );\n\t\t\t} else {\n\t\t\t\telem[ internalKey ] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn jQuery.data( elem, name, data, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\tif ( elem.nodeName ) {\n\t\t\tvar match = jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t\tif ( match ) {\n\t\t\t\treturn !(match === true || elem.getAttribute(\"classid\") !== match);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar parts, part, attr, name, l,\n\t\t\telem = this[0],\n\t\t\ti = 0,\n\t\t\tdata = null;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattr = elem.attributes;\n\t\t\t\t\tfor ( l = attr.length; i < l; i++ ) {\n\t\t\t\t\t\tname = attr[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.substring(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\tparts = key.split( \".\", 2 );\n\t\tparts[1] = parts[1] ? \".\" + parts[1] : \"\";\n\t\tpart = parts[1] + \"!\";\n\n\t\treturn jQuery.access( this, function( value ) {\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\tdata = this.triggerHandler( \"getData\" + part, [ parts[0] ] );\n\n\t\t\t\t// Try to fetch any internally stored data first\n\t\t\t\tif ( data === undefined && elem ) {\n\t\t\t\t\tdata = jQuery.data( elem, key );\n\t\t\t\t\tdata = dataAttr( elem, key, data );\n\t\t\t\t}\n\n\t\t\t\treturn data === undefined && parts[1] ?\n\t\t\t\t\tthis.data( parts[0] ) :\n\t\t\t\t\tdata;\n\t\t\t}\n\n\t\t\tparts[1] = value;\n\t\t\tthis.each(function() {\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.triggerHandler( \"setData\" + part, parts );\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t\tself.triggerHandler( \"changeData\" + part, parts );\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, false );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\tdata === \"false\" ? false :\n\t\t\t\tdata === \"null\" ? null :\n\t\t\t\tjQuery.isNumeric( data ) ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tfor ( var name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\n\n\nfunction handleQueueMarkDefer( elem, type, src ) {\n\tvar deferDataKey = type + \"defer\",\n\t\tqueueDataKey = type + \"queue\",\n\t\tmarkDataKey = type + \"mark\",\n\t\tdefer = jQuery._data( elem, deferDataKey );\n\tif ( defer &&\n\t\t( src === \"queue\" || !jQuery._data(elem, queueDataKey) ) &&\n\t\t( src === \"mark\" || !jQuery._data(elem, markDataKey) ) ) {\n\t\t// Give room for hard-coded callbacks to fire first\n\t\t// and eventually mark/queue something else on the element\n\t\tsetTimeout( function() {\n\t\t\tif ( !jQuery._data( elem, queueDataKey ) &&\n\t\t\t\t!jQuery._data( elem, markDataKey ) ) {\n\t\t\t\tjQuery.removeData( elem, deferDataKey, true );\n\t\t\t\tdefer.fire();\n\t\t\t}\n\t\t}, 0 );\n\t}\n}\n\njQuery.extend({\n\n\t_mark: function( elem, type ) {\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"mark\";\n\t\t\tjQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );\n\t\t}\n\t},\n\n\t_unmark: function( force, elem, type ) {\n\t\tif ( force !== true ) {\n\t\t\ttype = elem;\n\t\t\telem = force;\n\t\t\tforce = false;\n\t\t}\n\t\tif ( elem ) {\n\t\t\ttype = type || \"fx\";\n\t\t\tvar key = type + \"mark\",\n\t\t\t\tcount = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );\n\t\t\tif ( count ) {\n\t\t\t\tjQuery._data( elem, key, count );\n\t\t\t} else {\n\t\t\t\tjQuery.removeData( elem, key, true );\n\t\t\t\thandleQueueMarkDefer( elem, type, \"mark\" );\n\t\t\t}\n\t\t}\n\t},\n\n\tqueue: function( elem, type, data ) {\n\t\tvar q;\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tq = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !q || jQuery.isArray(data) ) {\n\t\t\t\t\tq = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tq.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn q || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tfn = queue.shift(),\n\t\t\thooks = {};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\tjQuery._data( elem, type + \".run\", hooks );\n\t\t\tfn.call( elem, function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t}, hooks );\n\t\t}\n\n\t\tif ( !queue.length ) {\n\t\t\tjQuery.removeData( elem, type + \"queue \" + type + \".run\", true );\n\t\t\thandleQueueMarkDefer( elem, type, \"queue\" );\n\t\t}\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, object ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobject = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\t\tvar defer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = elements.length,\n\t\t\tcount = 1,\n\t\t\tdeferDataKey = type + \"defer\",\n\t\t\tqueueDataKey = type + \"queue\",\n\t\t\tmarkDataKey = type + \"mark\",\n\t\t\ttmp;\n\t\tfunction resolve() {\n\t\t\tif ( !( --count ) ) {\n\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t}\n\t\t}\n\t\twhile( i-- ) {\n\t\t\tif (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||\n\t\t\t\t\t( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||\n\t\t\t\t\t\tjQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&\n\t\t\t\t\tjQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( \"once memory\" ), true ) )) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( object );\n\t}\n});\n\n\n\n\nvar rclass = /[\\n\\t\\r]/g,\n\trspace = /\\s+/,\n\trreturn = /\\r/g,\n\trtype = /^(?:button|input)$/i,\n\trfocusable = /^(?:button|input|object|select|textarea)$/i,\n\trclickable = /^a(?:rea)?$/i,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tnodeHook, boolHook, fixSpecified;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classNames, i, l, elem,\n\t\t\tsetClass, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( value && typeof value === \"string\" ) {\n\t\t\tclassNames = value.split( rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !elem.className && classNames.length === 1 ) {\n\t\t\t\t\t\telem.className = value;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetClass = \" \" + elem.className + \" \";\n\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tif ( !~setClass.indexOf( \" \" + classNames[ c ] + \" \" ) ) {\n\t\t\t\t\t\t\t\tsetClass += classNames[ c ] + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( setClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, i, l, elem, className, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( (value && typeof value === \"string\") || value === undefined ) {\n\t\t\tclassNames = ( value || \"\" ).split( rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 && elem.className ) {\n\t\t\t\t\tif ( value ) {\n\t\t\t\t\t\tclassName = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tclassName = className.replace(\" \" + classNames[ c ] + \" \", \" \");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( className );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.className = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisBool = typeof stateVal === \"boolean\";\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tstate = stateVal,\n\t\t\t\t\tclassNames = value.split( rspace );\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space seperated list\n\t\t\t\t\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t} else if ( type === \"undefined\" || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// toggle whole className\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar self = jQuery(this), val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, self.val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, i, max, option,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tvalues = [],\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tone = elem.type === \"select-one\";\n\n\t\t\t\t// Nothing was selected\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\ti = one ? index : 0;\n\t\t\t\tmax = one ? index + 1 : options.length;\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\tif ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null) &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" )) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fixes Bug #2551 -- select.val() broken in IE after form.reset()\n\t\t\t\tif ( one && !values.length && options.length ) {\n\t\t\t\t\treturn jQuery( options[ index ] ).val();\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattrFn: {\n\t\tval: true,\n\t\tcss: true,\n\t\thtml: true,\n\t\ttext: true,\n\t\tdata: true,\n\t\twidth: true,\n\t\theight: true,\n\t\toffset: true\n\t},\n\n\tattr: function( elem, name, value, pass ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( pass && name in jQuery.attrFn ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( notxml ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\n\t\t\t} else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, \"\" + value );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\tret = elem.getAttribute( name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret === null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar propName, attrNames, name, l, isBool,\n\t\t\ti = 0;\n\n\t\tif ( value && elem.nodeType === 1 ) {\n\t\t\tattrNames = value.toLowerCase().split( rspace );\n\t\t\tl = attrNames.length;\n\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tname = attrNames[ i ];\n\n\t\t\t\tif ( name ) {\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\t\t\tisBool = rboolean.test( name );\n\n\t\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t\t// Do not do this for boolean attributes (see #10870)\n\t\t\t\t\tif ( !isBool ) {\n\t\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\n\t\t\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\t\t\tif ( isBool && propName in elem ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\t// We can't allow the type property to be changed (since it causes problems in IE)\n\t\t\t\tif ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n\t\t\t\t\tjQuery.error( \"type property can't be changed\" );\n\t\t\t\t} else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to it's default in case type is set after value\n\t\t\t\t\t// This is for element creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Use the value property for back compat\n\t\t// Use the nodeHook for button elements in IE6/7 (#1954)\n\t\tvalue: {\n\t\t\tget: function( elem, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.get( elem, name );\n\t\t\t\t}\n\t\t\t\treturn name in elem ?\n\t\t\t\t\telem.value :\n\t\t\t\t\tnull;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.set( elem, value, name );\n\t\t\t\t}\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.value = value;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)\njQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\t// Align boolean attributes with corresponding properties\n\t\t// Fall back to attribute presence where some booleans are not supported\n\t\tvar attrNode,\n\t\t\tproperty = jQuery.prop( elem, name );\n\t\treturn property === true || typeof property !== \"boolean\" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\n\tset: function( elem, value, name ) {\n\t\tvar propName;\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\tif ( propName in elem ) {\n\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\telem[ propName ] = true;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t}\n\t\treturn name;\n\t}\n};\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\tfixSpecified = {\n\t\tname: true,\n\t\tid: true,\n\t\tcoords: true\n\t};\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret;\n\t\t\tret = elem.getAttributeNode( name );\n\t\t\treturn ret && ( fixSpecified[ name ] ? ret.nodeValue !== \"\" : ret.specified ) ?\n\t\t\t\tret.nodeValue :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\tret = document.createAttribute( name );\n\t\t\t\telem.setAttributeNode( ret );\n\t\t\t}\n\t\t\treturn ( ret.nodeValue = value + \"\" );\n\t\t}\n\t};\n\n\t// Apply the nodeHook to tabindex\n\tjQuery.attrHooks.tabindex.set = nodeHook.set;\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tget: nodeHook.get,\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = \"false\";\n\t\t\t}\n\t\t\tnodeHook.set( elem, value, name );\n\t\t}\n\t};\n}\n\n\n// Some attributes require a special call on IE\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret === null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Normalize to lowercase since IE uppercases css property names\n\t\t\treturn elem.style.cssText.toLowerCase() || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = \"\" + value );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t});\n});\n\n\n\n\nvar rformElems = /^(?:textarea|input|select)$/i,\n\trtypenamespace = /^([^\\.]*)?(?:\\.(.+))?$/,\n\trhoverHack = /(?:^|\\s)hover(\\.\\S+)?\\b/,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trquickIs = /^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,\n\tquickParse = function( selector ) {\n\t\tvar quick = rquickIs.exec( selector );\n\t\tif ( quick ) {\n\t\t\t//   0  1    2   3\n\t\t\t// [ _, tag, id, class ]\n\t\t\tquick[1] = ( quick[1] || \"\" ).toLowerCase();\n\t\t\tquick[3] = quick[3] && new RegExp( \"(?:^|\\\\s)\" + quick[3] + \"(?:\\\\s|$)\" );\n\t\t}\n\t\treturn quick;\n\t},\n\tquickIs = function( elem, m ) {\n\t\tvar attrs = elem.attributes || {};\n\t\treturn (\n\t\t\t(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&\n\t\t\t(!m[2] || (attrs.id || {}).value === m[2]) &&\n\t\t\t(!m[3] || m[3].test( (attrs[ \"class\" ] || {}).value ))\n\t\t);\n\t},\n\thoverHack = function( events ) {\n\t\treturn jQuery.event.special.hover ? events : events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n\t};\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar elemData, eventHandle, events,\n\t\t\tt, tns, type, namespaces, handleObj,\n\t\t\thandleObjIn, quick, handlers, special;\n\n\t\t// Don't attach events to noData or text/comment nodes (allow plain objects tho)\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tevents = elemData.events;\n\t\tif ( !events ) {\n\t\t\telemData.events = events = {};\n\t\t}\n\t\teventHandle = elemData.handle;\n\t\tif ( !eventHandle ) {\n\t\t\telemData.handle = eventHandle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = jQuery.trim( hoverHack(types) ).split( \" \" );\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = tns[1];\n\t\t\tnamespaces = ( tns[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: tns[1],\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tquick: selector && quickParse( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\thandlers = events[ type ];\n\t\t\tif ( !handlers ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\tglobal: {},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar elemData = jQuery.hasData( elem ) && jQuery._data( elem ),\n\t\t\tt, tns, type, origType, namespaces, origCount,\n\t\t\tj, events, special, handle, eventType, handleObj;\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = jQuery.trim( hoverHack( types || \"\" ) ).split(\" \");\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tns[1];\n\t\t\tnamespaces = tns[2];\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector? special.delegateType : special.bindType ) || type;\n\t\t\teventType = events[ type ] || [];\n\t\t\torigCount = eventType.length;\n\t\t\tnamespaces = namespaces ? new RegExp(\"(^|\\\\.)\" + namespaces.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\") : null;\n\n\t\t\t// Remove matching events\n\t\t\tfor ( j = 0; j < eventType.length; j++ ) {\n\t\t\t\thandleObj = eventType[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t ( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t ( !namespaces || namespaces.test( handleObj.namespace ) ) &&\n\t\t\t\t\t ( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\teventType.splice( j--, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\teventType.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( eventType.length === 0 && origCount !== eventType.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\thandle = elemData.handle;\n\t\t\tif ( handle ) {\n\t\t\t\thandle.elem = null;\n\t\t\t}\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery.removeData( elem, [ \"events\", \"handle\" ], true );\n\t\t}\n\t},\n\n\t// Events that are safe to short-circuit if no handlers are attached.\n\t// Native DOM events should not be added, they may have inline handlers.\n\tcustomEvent: {\n\t\t\"getData\": true,\n\t\t\"setData\": true,\n\t\t\"changeData\": true\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Event object or event type\n\t\tvar type = event.type || event,\n\t\t\tnamespaces = [],\n\t\t\tcache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \"!\" ) >= 0 ) {\n\t\t\t// Exclusive events trigger only for the exact event (no namespaces)\n\t\t\ttype = type.slice(0, -1);\n\t\t\texclusive = true;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\n\t\tif ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n\t\t\t// No jQuery handlers for this event type, and it can't have inline handlers\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an Event, Object, or just an event type string\n\t\tevent = typeof event === \"object\" ?\n\t\t\t// jQuery.Event object\n\t\t\tevent[ jQuery.expando ] ? event :\n\t\t\t// Object literal\n\t\t\tnew jQuery.Event( type, event ) :\n\t\t\t// Just the event type (string)\n\t\t\tnew jQuery.Event( type );\n\n\t\tevent.type = type;\n\t\tevent.isTrigger = true;\n\t\tevent.exclusive = exclusive;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.namespace_re = event.namespace? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.)?\") + \"(\\\\.|$)\") : null;\n\t\tontype = type.indexOf( \":\" ) < 0 ? \"on\" + type : \"\";\n\n\t\t// Handle a global trigger\n\t\tif ( !elem ) {\n\n\t\t\t// TODO: Stop taunting the data cache; remove global events and always attach to document\n\t\t\tcache = jQuery.cache;\n\t\t\tfor ( i in cache ) {\n\t\t\t\tif ( cache[ i ].events && cache[ i ].events[ type ] ) {\n\t\t\t\t\tjQuery.event.trigger( event, data, cache[ i ].handle.elem, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data != null ? jQuery.makeArray( data ) : [];\n\t\tdata.unshift( event );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\teventPath = [[ elem, special.bindType || type ]];\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tcur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;\n\t\t\told = null;\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push([ cur, bubbleType ]);\n\t\t\t\told = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( old && old === elem.ownerDocument ) {\n\t\t\t\teventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\tfor ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {\n\n\t\t\tcur = eventPath[i][0];\n\t\t\tevent.type = eventPath[i][1];\n\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\t\t\t// Note that this is a bare JS function and not a jQuery handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486)\n\t\t\t\tif ( ontype && elem[ type ] && ((type !== \"focus\" && type !== \"blur\") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\told = elem[ ontype ];\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = old;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event || window.event );\n\n\t\tvar handlers = ( (jQuery._data( this, \"events\" ) || {} )[ event.type ] || []),\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\targs = [].slice.call( arguments, 0 ),\n\t\t\trun_all = !event.exclusive && !event.namespace,\n\t\t\tspecial = jQuery.event.special[ event.type ] || {},\n\t\t\thandlerQueue = [],\n\t\t\ti, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers that should run if there are delegated events\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && !(event.button && event.type === \"click\") ) {\n\n\t\t\t// Pregenerate a single jQuery object for reuse with .is()\n\t\t\tjqcur = jQuery(this);\n\t\t\tjqcur.context = this.ownerDocument || this;\n\n\t\t\tfor ( cur = event.target; cur != this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process events on disabled elements (#6911, #8165)\n\t\t\t\tif ( cur.disabled !== true ) {\n\t\t\t\t\tselMatch = {};\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tjqcur[0] = cur;\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\t\t\t\t\t\tsel = handleObj.selector;\n\n\t\t\t\t\t\tif ( selMatch[ sel ] === undefined ) {\n\t\t\t\t\t\t\tselMatch[ sel ] = (\n\t\t\t\t\t\t\t\thandleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( selMatch[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, matches: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( handlers.length > delegateCount ) {\n\t\t\thandlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\tfor ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {\n\t\t\tmatched = handlerQueue[ i ];\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tfor ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {\n\t\t\t\thandleObj = matched.matches[ j ];\n\n\t\t\t\t// Triggered event must either 1) be non-exclusive and have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.data = handleObj.data;\n\t\t\t\t\tevent.handleObj = handleObj;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tevent.result = ret;\n\t\t\t\t\t\tif ( ret === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\t// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***\n\tprops: \"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = jQuery.event.fixHooks[ event.type ] || {},\n\t\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = jQuery.Event( originalEvent );\n\n\t\tfor ( i = copy.length; i; ) {\n\t\t\tprop = copy[ --i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Target should not be a text node (#504, Safari)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)\n\t\tif ( event.metaKey === undefined ) {\n\t\t\tevent.metaKey = event.ctrlKey;\n\t\t}\n\n\t\treturn fixHook.filter? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tready: {\n\t\t\t// Make sure the ready event is setup\n\t\t\tsetup: jQuery.bindReady\n\t\t},\n\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\n\t\tfocus: {\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tsetup: function( data, namespaces, eventHandle ) {\n\t\t\t\t// We only want to do this special case on windows\n\t\t\t\tif ( jQuery.isWindow( this ) ) {\n\t\t\t\t\tthis.onbeforeunload = eventHandle;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tteardown: function( namespaces, eventHandle ) {\n\t\t\t\tif ( this.onbeforeunload === eventHandle ) {\n\t\t\t\t\tthis.onbeforeunload = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{ type: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\n// Some plugins are using, but it's undocumented/deprecated and will be removed.\n// The 1.7 special event interface should provide all the hooks needed now.\njQuery.event.handle = jQuery.event.dispatch;\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.detachEvent ) {\n\t\t\telem.detachEvent( \"on\" + type, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\nfunction returnFalse() {\n\treturn false;\n}\nfunction returnTrue() {\n\treturn true;\n}\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tpreventDefault: function() {\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if preventDefault exists run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// otherwise set the returnValue property of the original event to false (IE)\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// if stopPropagation exists run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t\t// otherwise set the cancelBubble property of the original event to true (IE)\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t},\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar target = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj,\n\t\t\t\tselector = handleObj.selector,\n\t\t\t\tret;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !form._submit_attached ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tform._submit_attached = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\t\t\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\telem._change_attached = true;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) { // && selector != null\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\tvar handleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( var type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tlive: function( types, data, fn ) {\n\t\tjQuery( this.context ).on( types, this.selector, data, fn );\n\t\treturn this;\n\t},\n\tdie: function( types, fn ) {\n\t\tjQuery( this.context ).off( types, this.selector || \"**\", fn );\n\t\treturn this;\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length == 1? this.off( selector, \"**\" ) : this.off( types, selector, fn );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tif ( this[0] ) {\n\t\t\treturn jQuery.event.trigger( type, data, this[0], true );\n\t\t}\n\t},\n\n\ttoggle: function( fn ) {\n\t\t// Save reference to arguments for access in closure\n\t\tvar args = arguments,\n\t\t\tguid = fn.guid || jQuery.guid++,\n\t\t\ti = 0,\n\t\t\ttoggler = function( event ) {\n\t\t\t\t// Figure out which function to execute\n\t\t\t\tvar lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\t\tjQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t\t// Make sure that clicks stop\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// and execute the function\n\t\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t\t};\n\n\t\t// link all the functions, so any of them can unbind this click handler\n\t\ttoggler.guid = guid;\n\t\twhile ( i < args.length ) {\n\t\t\targs[ i++ ].guid = guid;\n\t\t}\n\n\t\treturn this.click( toggler );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n});\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\tif ( fn == null ) {\n\t\t\tfn = data;\n\t\t\tdata = null;\n\t\t}\n\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n\n\tif ( jQuery.attrFn ) {\n\t\tjQuery.attrFn[ name ] = true;\n\t}\n\n\tif ( rkeyEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;\n\t}\n\n\tif ( rmouseEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;\n\t}\n});\n\n\n\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){\n\nvar chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,\n\texpando = \"sizcache\" + (Math.random() + '').replace('.', ''),\n\tdone = 0,\n\ttoString = Object.prototype.toString,\n\thasDuplicate = false,\n\tbaseHasDuplicate = true,\n\trBackslash = /\\\\/g,\n\trReturn = /\\r\\n/g,\n\trNonWord = /\\W/;\n\n// Here we check if the JavaScript engine is using some sort of\n// optimization where it does not always call our comparision\n// function. If that is the case, discard the hasDuplicate value.\n//   Thus far that includes Google Chrome.\n[0, 0].sort(function() {\n\tbaseHasDuplicate = false;\n\treturn 0;\n});\n\nvar Sizzle = function( selector, context, results, seed ) {\n\tresults = results || [];\n\tcontext = context || document;\n\n\tvar origContext = context;\n\n\tif ( context.nodeType !== 1 && context.nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tvar m, set, checkSet, extra, ret, cur, pop, i,\n\t\tprune = true,\n\t\tcontextXML = Sizzle.isXML( context ),\n\t\tparts = [],\n\t\tsoFar = selector;\n\n\t// Reset the position of the chunker regexp (start from head)\n\tdo {\n\t\tchunker.exec( \"\" );\n\t\tm = chunker.exec( soFar );\n\n\t\tif ( m ) {\n\t\t\tsoFar = m[3];\n\n\t\t\tparts.push( m[1] );\n\n\t\t\tif ( m[2] ) {\n\t\t\t\textra = m[3];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} while ( m );\n\n\tif ( parts.length > 1 && origPOS.exec( selector ) ) {\n\n\t\tif ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\n\t\t\tset = posProcess( parts[0] + parts[1], context, seed );\n\n\t\t} else {\n\t\t\tset = Expr.relative[ parts[0] ] ?\n\t\t\t\t[ context ] :\n\t\t\t\tSizzle( parts.shift(), context );\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tselector = parts.shift();\n\n\t\t\t\tif ( Expr.relative[ selector ] ) {\n\t\t\t\t\tselector += parts.shift();\n\t\t\t\t}\n\n\t\t\t\tset = posProcess( selector, set, seed );\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t// (but not if it'll be faster if the inner selector is an ID)\n\t\tif ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\n\t\t\t\tExpr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\n\n\t\t\tret = Sizzle.find( parts.shift(), context, contextXML );\n\t\t\tcontext = ret.expr ?\n\t\t\t\tSizzle.filter( ret.expr, ret.set )[0] :\n\t\t\t\tret.set[0];\n\t\t}\n\n\t\tif ( context ) {\n\t\t\tret = seed ?\n\t\t\t\t{ expr: parts.pop(), set: makeArray(seed) } :\n\t\t\t\tSizzle.find( parts.pop(), parts.length === 1 && (parts[0] === \"~\" || parts[0] === \"+\") && context.parentNode ? context.parentNode : context, contextXML );\n\n\t\t\tset = ret.expr ?\n\t\t\t\tSizzle.filter( ret.expr, ret.set ) :\n\t\t\t\tret.set;\n\n\t\t\tif ( parts.length > 0 ) {\n\t\t\t\tcheckSet = makeArray( set );\n\n\t\t\t} else {\n\t\t\t\tprune = false;\n\t\t\t}\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tcur = parts.pop();\n\t\t\t\tpop = cur;\n\n\t\t\t\tif ( !Expr.relative[ cur ] ) {\n\t\t\t\t\tcur = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tpop = parts.pop();\n\t\t\t\t}\n\n\t\t\t\tif ( pop == null ) {\n\t\t\t\t\tpop = context;\n\t\t\t\t}\n\n\t\t\t\tExpr.relative[ cur ]( checkSet, pop, contextXML );\n\t\t\t}\n\n\t\t} else {\n\t\t\tcheckSet = parts = [];\n\t\t}\n\t}\n\n\tif ( !checkSet ) {\n\t\tcheckSet = set;\n\t}\n\n\tif ( !checkSet ) {\n\t\tSizzle.error( cur || selector );\n\t}\n\n\tif ( toString.call(checkSet) === \"[object Array]\" ) {\n\t\tif ( !prune ) {\n\t\t\tresults.push.apply( results, checkSet );\n\n\t\t} else if ( context && context.nodeType === 1 ) {\n\t\t\tfor ( i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\t\t\tfor ( i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && checkSet[i].nodeType === 1 ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\tmakeArray( checkSet, results );\n\t}\n\n\tif ( extra ) {\n\t\tSizzle( extra, origContext, results, seed );\n\t\tSizzle.uniqueSort( results );\n\t}\n\n\treturn results;\n};\n\nSizzle.uniqueSort = function( results ) {\n\tif ( sortOrder ) {\n\t\thasDuplicate = baseHasDuplicate;\n\t\tresults.sort( sortOrder );\n\n\t\tif ( hasDuplicate ) {\n\t\t\tfor ( var i = 1; i < results.length; i++ ) {\n\t\t\t\tif ( results[i] === results[ i - 1 ] ) {\n\t\t\t\t\tresults.splice( i--, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n};\n\nSizzle.matches = function( expr, set ) {\n\treturn Sizzle( expr, null, null, set );\n};\n\nSizzle.matchesSelector = function( node, expr ) {\n\treturn Sizzle( expr, null, null, [node] ).length > 0;\n};\n\nSizzle.find = function( expr, context, isXML ) {\n\tvar set, i, len, match, type, left;\n\n\tif ( !expr ) {\n\t\treturn [];\n\t}\n\n\tfor ( i = 0, len = Expr.order.length; i < len; i++ ) {\n\t\ttype = Expr.order[i];\n\n\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\n\t\t\tleft = match[1];\n\t\t\tmatch.splice( 1, 1 );\n\n\t\t\tif ( left.substr( left.length - 1 ) !== \"\\\\\" ) {\n\t\t\t\tmatch[1] = (match[1] || \"\").replace( rBackslash, \"\" );\n\t\t\t\tset = Expr.find[ type ]( match, context, isXML );\n\n\t\t\t\tif ( set != null ) {\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( !set ) {\n\t\tset = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( \"*\" ) :\n\t\t\t[];\n\t}\n\n\treturn { set: set, expr: expr };\n};\n\nSizzle.filter = function( expr, set, inplace, not ) {\n\tvar match, anyFound,\n\t\ttype, found, item, filter, left,\n\t\ti, pass,\n\t\told = expr,\n\t\tresult = [],\n\t\tcurLoop = set,\n\t\tisXMLFilter = set && set[0] && Sizzle.isXML( set[0] );\n\n\twhile ( expr && set.length ) {\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {\n\t\t\t\tfilter = Expr.filter[ type ];\n\t\t\t\tleft = match[1];\n\n\t\t\t\tanyFound = false;\n\n\t\t\t\tmatch.splice(1,1);\n\n\t\t\t\tif ( left.substr( left.length - 1 ) === \"\\\\\" ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( curLoop === result ) {\n\t\t\t\t\tresult = [];\n\t\t\t\t}\n\n\t\t\t\tif ( Expr.preFilter[ type ] ) {\n\t\t\t\t\tmatch = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\n\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\tanyFound = found = true;\n\n\t\t\t\t\t} else if ( match === true ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( match ) {\n\t\t\t\t\tfor ( i = 0; (item = curLoop[i]) != null; i++ ) {\n\t\t\t\t\t\tif ( item ) {\n\t\t\t\t\t\t\tfound = filter( item, match, i, curLoop );\n\t\t\t\t\t\t\tpass = not ^ found;\n\n\t\t\t\t\t\t\tif ( inplace && found != null ) {\n\t\t\t\t\t\t\t\tif ( pass ) {\n\t\t\t\t\t\t\t\t\tanyFound = true;\n\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else if ( pass ) {\n\t\t\t\t\t\t\t\tresult.push( item );\n\t\t\t\t\t\t\t\tanyFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( found !== undefined ) {\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tcurLoop = result;\n\t\t\t\t\t}\n\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\n\t\t\t\t\tif ( !anyFound ) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Improper expression\n\t\tif ( expr === old ) {\n\t\t\tif ( anyFound == null ) {\n\t\t\t\tSizzle.error( expr );\n\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\told = expr;\n\t}\n\n\treturn curLoop;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Utility function for retreiving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\nvar getText = Sizzle.getText = function( elem ) {\n    var i, node,\n\t\tnodeType = elem.nodeType,\n\t\tret = \"\";\n\n\tif ( nodeType ) {\n\t\tif ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\t// Use textContent || innerText for elements\n\t\t\tif ( typeof elem.textContent === 'string' ) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if ( typeof elem.innerText === 'string' ) {\n\t\t\t\t// Replace IE's carriage returns\n\t\t\t\treturn elem.innerText.replace( rReturn, '' );\n\t\t\t} else {\n\t\t\t\t// Traverse it's children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\tret += getText( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\t} else {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( i = 0; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tif ( node.nodeType !== 8 ) {\n\t\t\t\tret += getText( node );\n\t\t\t}\n\t\t}\n\t}\n\treturn ret;\n};\n\nvar Expr = Sizzle.selectors = {\n\torder: [ \"ID\", \"NAME\", \"TAG\" ],\n\n\tmatch: {\n\t\tID: /#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\t\tCLASS: /\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,\n\t\tNAME: /\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,\n\t\tATTR: /\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,\n\t\tTAG: /^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,\n\t\tCHILD: /:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,\n\t\tPOS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,\n\t\tPSEUDO: /:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/\n\t},\n\n\tleftMatch: {},\n\n\tattrMap: {\n\t\t\"class\": \"className\",\n\t\t\"for\": \"htmlFor\"\n\t},\n\n\tattrHandle: {\n\t\thref: function( elem ) {\n\t\t\treturn elem.getAttribute( \"href\" );\n\t\t},\n\t\ttype: function( elem ) {\n\t\t\treturn elem.getAttribute( \"type\" );\n\t\t}\n\t},\n\n\trelative: {\n\t\t\"+\": function(checkSet, part){\n\t\t\tvar isPartStr = typeof part === \"string\",\n\t\t\t\tisTag = isPartStr && !rNonWord.test( part ),\n\t\t\t\tisPartStrNotTag = isPartStr && !isTag;\n\n\t\t\tif ( isTag ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t}\n\n\t\t\tfor ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\n\t\t\t\tif ( (elem = checkSet[i]) ) {\n\t\t\t\t\twhile ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\n\n\t\t\t\t\tcheckSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?\n\t\t\t\t\t\telem || false :\n\t\t\t\t\t\telem === part;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( isPartStrNotTag ) {\n\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t}\n\t\t},\n\n\t\t\">\": function( checkSet, part ) {\n\t\t\tvar elem,\n\t\t\t\tisPartStr = typeof part === \"string\",\n\t\t\t\ti = 0,\n\t\t\t\tl = checkSet.length;\n\n\t\t\tif ( isPartStr && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\telem = checkSet[i];\n\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\t\t\tcheckSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\telem = checkSet[i];\n\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tcheckSet[i] = isPartStr ?\n\t\t\t\t\t\t\telem.parentNode :\n\t\t\t\t\t\t\telem.parentNode === part;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( isPartStr ) {\n\t\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t\"\": function(checkSet, part, isXML){\n\t\t\tvar nodeCheck,\n\t\t\t\tdoneName = done++,\n\t\t\t\tcheckFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t\tnodeCheck = part;\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn( \"parentNode\", part, doneName, checkSet, nodeCheck, isXML );\n\t\t},\n\n\t\t\"~\": function( checkSet, part, isXML ) {\n\t\t\tvar nodeCheck,\n\t\t\t\tdoneName = done++,\n\t\t\t\tcheckFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !rNonWord.test( part ) ) {\n\t\t\t\tpart = part.toLowerCase();\n\t\t\t\tnodeCheck = part;\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn( \"previousSibling\", part, doneName, checkSet, nodeCheck, isXML );\n\t\t}\n\t},\n\n\tfind: {\n\t\tID: function( match, context, isXML ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t},\n\n\t\tNAME: function( match, context ) {\n\t\t\tif ( typeof context.getElementsByName !== \"undefined\" ) {\n\t\t\t\tvar ret = [],\n\t\t\t\t\tresults = context.getElementsByName( match[1] );\n\n\t\t\t\tfor ( var i = 0, l = results.length; i < l; i++ ) {\n\t\t\t\t\tif ( results[i].getAttribute(\"name\") === match[1] ) {\n\t\t\t\t\t\tret.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret.length === 0 ? null : ret;\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( match, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( match[1] );\n\t\t\t}\n\t\t}\n\t},\n\tpreFilter: {\n\t\tCLASS: function( match, curLoop, inplace, result, not, isXML ) {\n\t\t\tmatch = \" \" + match[1].replace( rBackslash, \"\" ) + \" \";\n\n\t\t\tif ( isXML ) {\n\t\t\t\treturn match;\n\t\t\t}\n\n\t\t\tfor ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\n\t\t\t\tif ( elem ) {\n\t\t\t\t\tif ( not ^ (elem.className && (\" \" + elem.className + \" \").replace(/[\\t\\n\\r]/g, \" \").indexOf(match) >= 0) ) {\n\t\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\t\tresult.push( elem );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inplace ) {\n\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\tID: function( match ) {\n\t\t\treturn match[1].replace( rBackslash, \"\" );\n\t\t},\n\n\t\tTAG: function( match, curLoop ) {\n\t\t\treturn match[1].replace( rBackslash, \"\" ).toLowerCase();\n\t\t},\n\n\t\tCHILD: function( match ) {\n\t\t\tif ( match[1] === \"nth\" ) {\n\t\t\t\tif ( !match[2] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\tmatch[2] = match[2].replace(/^\\+|\\s*/g, '');\n\n\t\t\t\t// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'\n\t\t\t\tvar test = /(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(\n\t\t\t\t\tmatch[2] === \"even\" && \"2n\" || match[2] === \"odd\" && \"2n+1\" ||\n\t\t\t\t\t!/\\D/.test( match[2] ) && \"0n+\" + match[2] || match[2]);\n\n\t\t\t\t// calculate the numbers (first)n+(last) including if they are negative\n\t\t\t\tmatch[2] = (test[1] + (test[2] || 1)) - 0;\n\t\t\t\tmatch[3] = test[3] - 0;\n\t\t\t}\n\t\t\telse if ( match[2] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\t// TODO: Move to normal caching system\n\t\t\tmatch[0] = done++;\n\n\t\t\treturn match;\n\t\t},\n\n\t\tATTR: function( match, curLoop, inplace, result, not, isXML ) {\n\t\t\tvar name = match[1] = match[1].replace( rBackslash, \"\" );\n\n\t\t\tif ( !isXML && Expr.attrMap[name] ) {\n\t\t\t\tmatch[1] = Expr.attrMap[name];\n\t\t\t}\n\n\t\t\t// Handle if an un-quoted value was used\n\t\t\tmatch[4] = ( match[4] || match[5] || \"\" ).replace( rBackslash, \"\" );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[4] = \" \" + match[4] + \" \";\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match, curLoop, inplace, result, not ) {\n\t\t\tif ( match[1] === \"not\" ) {\n\t\t\t\t// If we're dealing with a complex expression, or a simple one\n\t\t\t\tif ( ( chunker.exec(match[3]) || \"\" ).length > 1 || /^\\w/.test(match[3]) ) {\n\t\t\t\t\tmatch[3] = Sizzle(match[3], null, null, curLoop);\n\n\t\t\t\t} else {\n\t\t\t\t\tvar ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\n\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tresult.push.apply( result, ret );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPOS: function( match ) {\n\t\t\tmatch.unshift( true );\n\n\t\t\treturn match;\n\t\t}\n\t},\n\n\tfilters: {\n\t\tenabled: function( elem ) {\n\t\t\treturn elem.disabled === false && elem.type !== \"hidden\";\n\t\t},\n\n\t\tdisabled: function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\tchecked: function( elem ) {\n\t\t\treturn elem.checked === true;\n\t\t},\n\n\t\tselected: function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !!elem.firstChild;\n\t\t},\n\n\t\tempty: function( elem ) {\n\t\t\treturn !elem.firstChild;\n\t\t},\n\n\t\thas: function( elem, i, match ) {\n\t\t\treturn !!Sizzle( match[3], elem ).length;\n\t\t},\n\n\t\theader: function( elem ) {\n\t\t\treturn (/h\\d/i).test( elem.nodeName );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr = elem.getAttribute( \"type\" ), type = elem.type;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"text\" === type && ( attr === type || attr === null );\n\t\t},\n\n\t\tradio: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"radio\" === elem.type;\n\t\t},\n\n\t\tcheckbox: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"checkbox\" === elem.type;\n\t\t},\n\n\t\tfile: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"file\" === elem.type;\n\t\t},\n\n\t\tpassword: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"password\" === elem.type;\n\t\t},\n\n\t\tsubmit: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && \"submit\" === elem.type;\n\t\t},\n\n\t\timage: function( elem ) {\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" && \"image\" === elem.type;\n\t\t},\n\n\t\treset: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn (name === \"input\" || name === \"button\") && \"reset\" === elem.type;\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && \"button\" === elem.type || name === \"button\";\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn (/input|select|textarea|button/i).test( elem.nodeName );\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === elem.ownerDocument.activeElement;\n\t\t}\n\t},\n\tsetFilters: {\n\t\tfirst: function( elem, i ) {\n\t\t\treturn i === 0;\n\t\t},\n\n\t\tlast: function( elem, i, match, array ) {\n\t\t\treturn i === array.length - 1;\n\t\t},\n\n\t\teven: function( elem, i ) {\n\t\t\treturn i % 2 === 0;\n\t\t},\n\n\t\todd: function( elem, i ) {\n\t\t\treturn i % 2 === 1;\n\t\t},\n\n\t\tlt: function( elem, i, match ) {\n\t\t\treturn i < match[3] - 0;\n\t\t},\n\n\t\tgt: function( elem, i, match ) {\n\t\t\treturn i > match[3] - 0;\n\t\t},\n\n\t\tnth: function( elem, i, match ) {\n\t\t\treturn match[3] - 0 === i;\n\t\t},\n\n\t\teq: function( elem, i, match ) {\n\t\t\treturn match[3] - 0 === i;\n\t\t}\n\t},\n\tfilter: {\n\t\tPSEUDO: function( elem, match, i, array ) {\n\t\t\tvar name = match[1],\n\t\t\t\tfilter = Expr.filters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\n\t\t\t} else if ( name === \"contains\" ) {\n\t\t\t\treturn (elem.textContent || elem.innerText || getText([ elem ]) || \"\").indexOf(match[3]) >= 0;\n\n\t\t\t} else if ( name === \"not\" ) {\n\t\t\t\tvar not = match[3];\n\n\t\t\t\tfor ( var j = 0, l = not.length; j < l; j++ ) {\n\t\t\t\t\tif ( not[j] === elem ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\t\t\t\tSizzle.error( name );\n\t\t\t}\n\t\t},\n\n\t\tCHILD: function( elem, match ) {\n\t\t\tvar first, last,\n\t\t\t\tdoneName, parent, cache,\n\t\t\t\tcount, diff,\n\t\t\t\ttype = match[1],\n\t\t\t\tnode = elem;\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase \"only\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\twhile ( (node = node.previousSibling) ) {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( type === \"first\" ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tnode = elem;\n\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase \"last\":\n\t\t\t\t\twhile ( (node = node.nextSibling) ) {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\tcase \"nth\":\n\t\t\t\t\tfirst = match[2];\n\t\t\t\t\tlast = match[3];\n\n\t\t\t\t\tif ( first === 1 && last === 0 ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tdoneName = match[0];\n\t\t\t\t\tparent = elem.parentNode;\n\n\t\t\t\t\tif ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {\n\t\t\t\t\t\tcount = 0;\n\n\t\t\t\t\t\tfor ( node = parent.firstChild; node; node = node.nextSibling ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tnode.nodeIndex = ++count;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparent[ expando ] = doneName;\n\t\t\t\t\t}\n\n\t\t\t\t\tdiff = elem.nodeIndex - last;\n\n\t\t\t\t\tif ( first === 0 ) {\n\t\t\t\t\t\treturn diff === 0;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tID: function( elem, match ) {\n\t\t\treturn elem.nodeType === 1 && elem.getAttribute(\"id\") === match;\n\t\t},\n\n\t\tTAG: function( elem, match ) {\n\t\t\treturn (match === \"*\" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;\n\t\t},\n\n\t\tCLASS: function( elem, match ) {\n\t\t\treturn (\" \" + (elem.className || elem.getAttribute(\"class\")) + \" \")\n\t\t\t\t.indexOf( match ) > -1;\n\t\t},\n\n\t\tATTR: function( elem, match ) {\n\t\t\tvar name = match[1],\n\t\t\t\tresult = Sizzle.attr ?\n\t\t\t\t\tSizzle.attr( elem, name ) :\n\t\t\t\t\tExpr.attrHandle[ name ] ?\n\t\t\t\t\tExpr.attrHandle[ name ]( elem ) :\n\t\t\t\t\telem[ name ] != null ?\n\t\t\t\t\t\telem[ name ] :\n\t\t\t\t\t\telem.getAttribute( name ),\n\t\t\t\tvalue = result + \"\",\n\t\t\t\ttype = match[2],\n\t\t\t\tcheck = match[4];\n\n\t\t\treturn result == null ?\n\t\t\t\ttype === \"!=\" :\n\t\t\t\t!type && Sizzle.attr ?\n\t\t\t\tresult != null :\n\t\t\t\ttype === \"=\" ?\n\t\t\t\tvalue === check :\n\t\t\t\ttype === \"*=\" ?\n\t\t\t\tvalue.indexOf(check) >= 0 :\n\t\t\t\ttype === \"~=\" ?\n\t\t\t\t(\" \" + value + \" \").indexOf(check) >= 0 :\n\t\t\t\t!check ?\n\t\t\t\tvalue && result !== false :\n\t\t\t\ttype === \"!=\" ?\n\t\t\t\tvalue !== check :\n\t\t\t\ttype === \"^=\" ?\n\t\t\t\tvalue.indexOf(check) === 0 :\n\t\t\t\ttype === \"$=\" ?\n\t\t\t\tvalue.substr(value.length - check.length) === check :\n\t\t\t\ttype === \"|=\" ?\n\t\t\t\tvalue === check || value.substr(0, check.length + 1) === check + \"-\" :\n\t\t\t\tfalse;\n\t\t},\n\n\t\tPOS: function( elem, match, i, array ) {\n\t\t\tvar name = match[2],\n\t\t\t\tfilter = Expr.setFilters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar origPOS = Expr.match.POS,\n\tfescape = function(all, num){\n\t\treturn \"\\\\\" + (num - 0 + 1);\n\t};\n\nfor ( var type in Expr.match ) {\n\tExpr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\\[]*\\])(?![^\\(]*\\))/.source) );\n\tExpr.leftMatch[ type ] = new RegExp( /(^(?:.|\\r|\\n)*?)/.source + Expr.match[ type ].source.replace(/\\\\(\\d+)/g, fescape) );\n}\n// Expose origPOS\n// \"global\" as in regardless of relation to brackets/parens\nExpr.match.globalPOS = origPOS;\n\nvar makeArray = function( array, results ) {\n\tarray = Array.prototype.slice.call( array, 0 );\n\n\tif ( results ) {\n\t\tresults.push.apply( results, array );\n\t\treturn results;\n\t}\n\n\treturn array;\n};\n\n// Perform a simple check to determine if the browser is capable of\n// converting a NodeList to an array using builtin methods.\n// Also verifies that the returned array holds DOM nodes\n// (which is not the case in the Blackberry browser)\ntry {\n\tArray.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;\n\n// Provide a fallback method if it does not work\n} catch( e ) {\n\tmakeArray = function( array, results ) {\n\t\tvar i = 0,\n\t\t\tret = results || [];\n\n\t\tif ( toString.call(array) === \"[object Array]\" ) {\n\t\t\tArray.prototype.push.apply( ret, array );\n\n\t\t} else {\n\t\t\tif ( typeof array.length === \"number\" ) {\n\t\t\t\tfor ( var l = array.length; i < l; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor ( ; array[i]; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nvar sortOrder, siblingCheck;\n\nif ( document.documentElement.compareDocumentPosition ) {\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tif ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\n\t\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t\t}\n\n\t\treturn a.compareDocumentPosition(b) & 4 ? -1 : 1;\n\t};\n\n} else {\n\tsortOrder = function( a, b ) {\n\t\t// The nodes are identical, we can exit early\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Fallback to using sourceIndex (in IE) if it's available on both nodes\n\t\t} else if ( a.sourceIndex && b.sourceIndex ) {\n\t\t\treturn a.sourceIndex - b.sourceIndex;\n\t\t}\n\n\t\tvar al, bl,\n\t\t\tap = [],\n\t\t\tbp = [],\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tcur = aup;\n\n\t\t// If the nodes are siblings (or identical) we can do a quick check\n\t\tif ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\n\t\t// If no parents were found then the nodes are disconnected\n\t\t} else if ( !aup ) {\n\t\t\treturn -1;\n\n\t\t} else if ( !bup ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Otherwise they're somewhere else in the tree so we need\n\t\t// to build up a full list of the parentNodes for comparison\n\t\twhile ( cur ) {\n\t\t\tap.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tcur = bup;\n\n\t\twhile ( cur ) {\n\t\t\tbp.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tal = ap.length;\n\t\tbl = bp.length;\n\n\t\t// Start walking down the tree looking for a discrepancy\n\t\tfor ( var i = 0; i < al && i < bl; i++ ) {\n\t\t\tif ( ap[i] !== bp[i] ) {\n\t\t\t\treturn siblingCheck( ap[i], bp[i] );\n\t\t\t}\n\t\t}\n\n\t\t// We ended someplace up the tree so do a sibling check\n\t\treturn i === al ?\n\t\t\tsiblingCheck( a, bp[i], -1 ) :\n\t\t\tsiblingCheck( ap[i], b, 1 );\n\t};\n\n\tsiblingCheck = function( a, b, ret ) {\n\t\tif ( a === b ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tvar cur = a.nextSibling;\n\n\t\twhile ( cur ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\tcur = cur.nextSibling;\n\t\t}\n\n\t\treturn 1;\n\t};\n}\n\n// Check to see if the browser returns elements by name when\n// querying by getElementById (and provide a workaround)\n(function(){\n\t// We're going to inject a fake input element with a specified name\n\tvar form = document.createElement(\"div\"),\n\t\tid = \"script\" + (new Date()).getTime(),\n\t\troot = document.documentElement;\n\n\tform.innerHTML = \"<a name='\" + id + \"'/>\";\n\n\t// Inject it into the root element, check its status, and remove it quickly\n\troot.insertBefore( form, root.firstChild );\n\n\t// The workaround has to do additional checks after a getElementById\n\t// Which slows things down for other browsers (hence the branching)\n\tif ( document.getElementById( id ) ) {\n\t\tExpr.find.ID = function( match, context, isXML ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\n\t\t\t\treturn m ?\n\t\t\t\t\tm.id === match[1] || typeof m.getAttributeNode !== \"undefined\" && m.getAttributeNode(\"id\").nodeValue === match[1] ?\n\t\t\t\t\t\t[m] :\n\t\t\t\t\t\tundefined :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t};\n\n\t\tExpr.filter.ID = function( elem, match ) {\n\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\n\t\t\treturn elem.nodeType === 1 && node && node.nodeValue === match;\n\t\t};\n\t}\n\n\troot.removeChild( form );\n\n\t// release memory in IE\n\troot = form = null;\n})();\n\n(function(){\n\t// Check to see if the browser returns only elements\n\t// when doing getElementsByTagName(\"*\")\n\n\t// Create a fake element\n\tvar div = document.createElement(\"div\");\n\tdiv.appendChild( document.createComment(\"\") );\n\n\t// Make sure no comments are found\n\tif ( div.getElementsByTagName(\"*\").length > 0 ) {\n\t\tExpr.find.TAG = function( match, context ) {\n\t\t\tvar results = context.getElementsByTagName( match[1] );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( match[1] === \"*\" ) {\n\t\t\t\tvar tmp = [];\n\n\t\t\t\tfor ( var i = 0; results[i]; i++ ) {\n\t\t\t\t\tif ( results[i].nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresults = tmp;\n\t\t\t}\n\n\t\t\treturn results;\n\t\t};\n\t}\n\n\t// Check to see if an attribute returns normalized href attributes\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\n\tif ( div.firstChild && typeof div.firstChild.getAttribute !== \"undefined\" &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") !== \"#\" ) {\n\n\t\tExpr.attrHandle.href = function( elem ) {\n\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t};\n\t}\n\n\t// release memory in IE\n\tdiv = null;\n})();\n\nif ( document.querySelectorAll ) {\n\t(function(){\n\t\tvar oldSizzle = Sizzle,\n\t\t\tdiv = document.createElement(\"div\"),\n\t\t\tid = \"__sizzle__\";\n\n\t\tdiv.innerHTML = \"<p class='TEST'></p>\";\n\n\t\t// Safari can't handle uppercase or unicode characters when\n\t\t// in quirks mode.\n\t\tif ( div.querySelectorAll && div.querySelectorAll(\".TEST\").length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tSizzle = function( query, context, extra, seed ) {\n\t\t\tcontext = context || document;\n\n\t\t\t// Only use querySelectorAll on non-XML documents\n\t\t\t// (ID selectors don't work in non-HTML documents)\n\t\t\tif ( !seed && !Sizzle.isXML(context) ) {\n\t\t\t\t// See if we find a selector to speed up\n\t\t\t\tvar match = /^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec( query );\n\n\t\t\t\tif ( match && (context.nodeType === 1 || context.nodeType === 9) ) {\n\t\t\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t\t\tif ( match[1] ) {\n\t\t\t\t\t\treturn makeArray( context.getElementsByTagName( query ), extra );\n\n\t\t\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t\t\t} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {\n\t\t\t\t\t\treturn makeArray( context.getElementsByClassName( match[2] ), extra );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( context.nodeType === 9 ) {\n\t\t\t\t\t// Speed-up: Sizzle(\"body\")\n\t\t\t\t\t// The body element only exists once, optimize finding it\n\t\t\t\t\tif ( query === \"body\" && context.body ) {\n\t\t\t\t\t\treturn makeArray( [ context.body ], extra );\n\n\t\t\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\t\t\t} else if ( match && match[3] ) {\n\t\t\t\t\t\tvar elem = context.getElementById( match[3] );\n\n\t\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === match[3] ) {\n\t\t\t\t\t\t\t\treturn makeArray( [ elem ], extra );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn makeArray( [], extra );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn makeArray( context.querySelectorAll(query), extra );\n\t\t\t\t\t} catch(qsaError) {}\n\n\t\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t\t// IE 8 doesn't work on object elements\n\t\t\t\t} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\t\tvar oldContext = context,\n\t\t\t\t\t\told = context.getAttribute( \"id\" ),\n\t\t\t\t\t\tnid = old || id,\n\t\t\t\t\t\thasParent = context.parentNode,\n\t\t\t\t\t\trelativeHierarchySelector = /^\\s*[+~]/.test( query );\n\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnid = nid.replace( /'/g, \"\\\\$&\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( relativeHierarchySelector && hasParent ) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif ( !relativeHierarchySelector || hasParent ) {\n\t\t\t\t\t\t\treturn makeArray( context.querySelectorAll( \"[id='\" + nid + \"'] \" + query ), extra );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch(pseudoError) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\t\toldContext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn oldSizzle(query, context, extra, seed);\n\t\t};\n\n\t\tfor ( var prop in oldSizzle ) {\n\t\t\tSizzle[ prop ] = oldSizzle[ prop ];\n\t\t}\n\n\t\t// release memory in IE\n\t\tdiv = null;\n\t})();\n}\n\n(function(){\n\tvar html = document.documentElement,\n\t\tmatches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;\n\n\tif ( matches ) {\n\t\t// Check to see if it's possible to do matchesSelector\n\t\t// on a disconnected node (IE 9 fails this)\n\t\tvar disconnectedMatch = !matches.call( document.createElement( \"div\" ), \"div\" ),\n\t\t\tpseudoWorks = false;\n\n\t\ttry {\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( document.documentElement, \"[test!='']:sizzle\" );\n\n\t\t} catch( pseudoError ) {\n\t\t\tpseudoWorks = true;\n\t\t}\n\n\t\tSizzle.matchesSelector = function( node, expr ) {\n\t\t\t// Make sure that attribute selectors are quoted\n\t\t\texpr = expr.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g, \"='$1']\");\n\n\t\t\tif ( !Sizzle.isXML( node ) ) {\n\t\t\t\ttry {\n\t\t\t\t\tif ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {\n\t\t\t\t\t\tvar ret = matches.call( node, expr );\n\n\t\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\t\tif ( ret || !disconnectedMatch ||\n\t\t\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t\t\t// fragment in IE 9, so check for that\n\t\t\t\t\t\t\t\tnode.document && node.document.nodeType !== 11 ) {\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\treturn Sizzle(expr, null, null, [node]).length > 0;\n\t\t};\n\t}\n})();\n\n(function(){\n\tvar div = document.createElement(\"div\");\n\n\tdiv.innerHTML = \"<div class='test e'></div><div class='test'></div>\";\n\n\t// Opera can't find a second classname (in 9.6)\n\t// Also, make sure that getElementsByClassName actually exists\n\tif ( !div.getElementsByClassName || div.getElementsByClassName(\"e\").length === 0 ) {\n\t\treturn;\n\t}\n\n\t// Safari caches class attributes, doesn't catch changes (in 3.2)\n\tdiv.lastChild.className = \"e\";\n\n\tif ( div.getElementsByClassName(\"e\").length === 1 ) {\n\t\treturn;\n\t}\n\n\tExpr.order.splice(1, 0, \"CLASS\");\n\tExpr.find.CLASS = function( match, context, isXML ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && !isXML ) {\n\t\t\treturn context.getElementsByClassName(match[1]);\n\t\t}\n\t};\n\n\t// release memory in IE\n\tdiv = null;\n})();\n\nfunction dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\n\t\tif ( elem ) {\n\t\t\tvar match = false;\n\n\t\t\telem = elem[dir];\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem[ expando ] === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 && !isXML ){\n\t\t\t\t\telem[ expando ] = doneName;\n\t\t\t\t\telem.sizset = i;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeName.toLowerCase() === cur ) {\n\t\t\t\t\tmatch = elem;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nfunction dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\n\t\tif ( elem ) {\n\t\t\tvar match = false;\n\n\t\t\telem = elem[dir];\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem[ expando ] === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !isXML ) {\n\t\t\t\t\t\telem[ expando ] = doneName;\n\t\t\t\t\t\telem.sizset = i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cur !== \"string\" ) {\n\t\t\t\t\t\tif ( elem === cur ) {\n\t\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\n\t\t\t\t\t\tmatch = elem;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nif ( document.documentElement.contains ) {\n\tSizzle.contains = function( a, b ) {\n\t\treturn a !== b && (a.contains ? a.contains(b) : true);\n\t};\n\n} else if ( document.documentElement.compareDocumentPosition ) {\n\tSizzle.contains = function( a, b ) {\n\t\treturn !!(a.compareDocumentPosition(b) & 16);\n\t};\n\n} else {\n\tSizzle.contains = function() {\n\t\treturn false;\n\t};\n}\n\nSizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;\n\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\nvar posProcess = function( selector, context, seed ) {\n\tvar match,\n\t\ttmpSet = [],\n\t\tlater = \"\",\n\t\troot = context.nodeType ? [context] : context;\n\n\t// Position selectors must be done after the filter\n\t// And so must :not(positional) so we move all PSEUDOs to the end\n\twhile ( (match = Expr.match.PSEUDO.exec( selector )) ) {\n\t\tlater += match[0];\n\t\tselector = selector.replace( Expr.match.PSEUDO, \"\" );\n\t}\n\n\tselector = Expr.relative[selector] ? selector + \"*\" : selector;\n\n\tfor ( var i = 0, l = root.length; i < l; i++ ) {\n\t\tSizzle( selector, root[i], tmpSet, seed );\n\t}\n\n\treturn Sizzle.filter( later, tmpSet );\n};\n\n// EXPOSE\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\nSizzle.selectors.attrMap = {};\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.filters;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})();\n\n\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prevUntil|prevAll)/,\n\t// Note: This RegExp should be improved, or likely pulled from Sizzle\n\trmultiselector = /,/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\tslice = Array.prototype.slice,\n\tPOS = jQuery.expr.match.globalPOS,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar self = this,\n\t\t\ti, l;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0, l = self.length; i < l; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar ret = this.pushStack( \"\", \"find\", selector ),\n\t\t\tlength, n, r;\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tlength = ret.length;\n\t\t\tjQuery.find( selector, this[i], ret );\n\n\t\t\tif ( i > 0 ) {\n\t\t\t\t// Make sure that the results are unique\n\t\t\t\tfor ( n = length; n < ret.length; n++ ) {\n\t\t\t\t\tfor ( r = 0; r < length; r++ ) {\n\t\t\t\t\t\tif ( ret[r] === ret[n] ) {\n\t\t\t\t\t\t\tret.splice(n--, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar targets = jQuery( target );\n\t\treturn this.filter(function() {\n\t\t\tfor ( var i = 0, l = targets.length; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false), \"not\", selector);\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true), \"filter\", selector );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && (\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\t// If this is a positional selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\tPOS.test( selector ) ?\n\t\t\t\t\tjQuery( selector, this.context ).index( this[0] ) >= 0 :\n\t\t\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\t\tthis.filter( selector ).length > 0 );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar ret = [], i, l, cur = this[0];\n\n\t\t// Array (deprecated as of jQuery 1.7)\n\t\tif ( jQuery.isArray( selectors ) ) {\n\t\t\tvar level = 1;\n\n\t\t\twhile ( cur && cur.ownerDocument && cur !== context ) {\n\t\t\t\tfor ( i = 0; i < selectors.length; i++ ) {\n\n\t\t\t\t\tif ( jQuery( cur ).is( selectors[ i ] ) ) {\n\t\t\t\t\t\tret.push({ selector: selectors[ i ], elem: cur, level: level });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcur = cur.parentNode;\n\t\t\t\tlevel++;\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\t// String\n\t\tvar pos = POS.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tcur = this[i];\n\n\t\t\twhile ( cur ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t\tif ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\n\t\treturn this.pushStack( ret, \"closest\", selectors );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n\t\t\tall :\n\t\t\tjQuery.unique( all ) );\n\t},\n\n\tandSelf: function() {\n\t\treturn this.add( this.prevObject );\n\t}\n});\n\n// A painfully simple check to see if an element is disconnected\n// from a document (should be improved, where feasible).\nfunction isDisconnected( node ) {\n\treturn !node || !node.parentNode || node.parentNode.nodeType === 11;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn jQuery.nth( elem, 2, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn jQuery.nth( elem, 2, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.makeArray( elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret, name, slice.call( arguments ).join(\",\") );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tnth: function( cur, result, dir, elem ) {\n\t\tresult = result || 1;\n\t\tvar num = 0;\n\n\t\tfor ( ; cur; cur = cur[dir] ) {\n\t\t\tif ( cur.nodeType === 1 && ++num === result ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn cur;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\treturn ( elem === qualifier ) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem, i ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n\t});\n}\n\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:\\d+|null)\"/g,\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style)/i,\n\trnocache = /<(?:script|object|embed|option|style)/i,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /\\/(java|ecma)script/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\t_default: [ 0, \"\", \"\" ]\n\t},\n\tsafeFragment = createSafeFragment( document );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// IE can't serialize <link> and <script> tags normally\nif ( !jQuery.support.htmlSerialize ) {\n\twrapMap._default = [ 1, \"div<div>\", \"</div>\" ];\n}\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t});\n\t\t} else if ( arguments.length ) {\n\t\t\tvar set = jQuery.clean( arguments );\n\t\t\tset.push.apply( set, this.toArray() );\n\t\t\treturn this.pushStack( set, \"before\", arguments );\n\t\t}\n\t},\n\n\tafter: function() {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t});\n\t\t} else if ( arguments.length ) {\n\t\t\tvar set = this.pushStack( this, \"after\", arguments );\n\t\t\tset.push.apply( set, jQuery.clean(arguments) );\n\t\t\treturn set;\n\t\t}\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tfor ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t\t\tjQuery.cleanData( [ elem ] );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tfor ( var i = 0, elem; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tnull;\n\t\t\t}\n\n\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName( \"*\" ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function( value ) {\n\t\tif ( this[0] && this[0].parentNode ) {\n\t\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t\t// this can help fix replacing a parent with child elements\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each(function(i) {\n\t\t\t\t\tvar self = jQuery(this), old = self.html();\n\t\t\t\t\tself.replaceWith( value.call( this, i, old ) );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( typeof value !== \"string\" ) {\n\t\t\t\tvalue = jQuery( value ).detach();\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\tvar next = this.nextSibling,\n\t\t\t\t\tparent = this.parentNode;\n\n\t\t\t\tjQuery( this ).remove();\n\n\t\t\t\tif ( next ) {\n\t\t\t\t\tjQuery(next).before( value );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(parent).append( value );\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\treturn this.length ?\n\t\t\t\tthis.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n\t\t\t\tthis;\n\t\t}\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\t\tvar results, first, fragment, parent,\n\t\t\tvalue = args[0],\n\t\t\tscripts = [];\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === \"string\" && rchecked.test( value ) ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery(this).domManip( args, table, callback, true );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isFunction(value) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery(this);\n\t\t\t\targs[0] = value.call(this, i, table ? self.html() : undefined);\n\t\t\t\tself.domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\tparent = value && value.parentNode;\n\n\t\t\t// If we're in a fragment, just use that instead of building a new one\n\t\t\tif ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {\n\t\t\t\tresults = { fragment: parent };\n\n\t\t\t} else {\n\t\t\t\tresults = jQuery.buildFragment( args, this, scripts );\n\t\t\t}\n\n\t\t\tfragment = results.fragment;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfirst = fragment = fragment.firstChild;\n\t\t\t} else {\n\t\t\t\tfirst = fragment.firstChild;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\ttable = table && jQuery.nodeName( first, \"tr\" );\n\n\t\t\t\tfor ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\ttable ?\n\t\t\t\t\t\t\troot(this[i], first) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\t// Make sure that we do not leak memory by inadvertently discarding\n\t\t\t\t\t\t// the original fragment (which might have attached data) instead of\n\t\t\t\t\t\t// using it; in addition, use the original fragment object for the last\n\t\t\t\t\t\t// item instead of first because it can end up being emptied incorrectly\n\t\t\t\t\t\t// in certain situations (Bug #8070).\n\t\t\t\t\t\t// Fragments from the fragment cache must always be cloned and never used\n\t\t\t\t\t\t// in place.\n\t\t\t\t\t\tresults.cacheable || ( l > 1 && i < lastIndex ) ?\n\t\t\t\t\t\t\tjQuery.clone( fragment, true, true ) :\n\t\t\t\t\t\t\tfragment\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( scripts.length ) {\n\t\t\t\tjQuery.each( scripts, function( i, elem ) {\n\t\t\t\t\tif ( elem.src ) {\n\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\t\t\tglobal: false,\n\t\t\t\t\t\t\turl: elem.src,\n\t\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\t\tdataType: \"script\"\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"/*$0*/\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction root( elem, cur ) {\n\treturn jQuery.nodeName(elem, \"table\") ?\n\t\t(elem.getElementsByTagName(\"tbody\")[0] ||\n\t\telem.appendChild(elem.ownerDocument.createElement(\"tbody\"))) :\n\t\telem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction cloneFixAttributes( src, dest ) {\n\tvar nodeName;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// clearAttributes removes the attributes, which we don't want,\n\t// but also removes the attachEvent events, which we *do* want\n\tif ( dest.clearAttributes ) {\n\t\tdest.clearAttributes();\n\t}\n\n\t// mergeAttributes, in contrast, only merges back on the\n\t// original attributes, not the events\n\tif ( dest.mergeAttributes ) {\n\t\tdest.mergeAttributes( src );\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 fail to clone children inside object elements that use\n\t// the proprietary classid attribute value (rather than the type\n\t// attribute) to identify the type of content to display\n\tif ( nodeName === \"object\" ) {\n\t\tdest.outerHTML = src.outerHTML;\n\n\t} else if ( nodeName === \"input\" && (src.type === \"checkbox\" || src.type === \"radio\") ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\t\tif ( src.checked ) {\n\t\t\tdest.defaultChecked = dest.checked = src.checked;\n\t\t}\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\n\t// IE blanks contents when cloning scripts\n\t} else if ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdest.text = src.text;\n\t}\n\n\t// Event data gets referenced instead of copied if the expando\n\t// gets copied too\n\tdest.removeAttribute( jQuery.expando );\n\n\t// Clear flags for bubbling special change/submit events, they must\n\t// be reattached when the newly cloned events are first activated\n\tdest.removeAttribute( \"_submit_attached\" );\n\tdest.removeAttribute( \"_change_attached\" );\n}\n\njQuery.buildFragment = function( args, nodes, scripts ) {\n\tvar fragment, cacheable, cacheresults, doc,\n\tfirst = args[ 0 ];\n\n\t// nodes may contain either an explicit document object,\n\t// a jQuery collection or context object.\n\t// If nodes[0] contains a valid object to assign to doc\n\tif ( nodes && nodes[0] ) {\n\t\tdoc = nodes[0].ownerDocument || nodes[0];\n\t}\n\n\t// Ensure that an attr object doesn't incorrectly stand in as a document object\n\t// Chrome and Firefox seem to allow this to occur and will throw exception\n\t// Fixes #8950\n\tif ( !doc.createDocumentFragment ) {\n\t\tdoc = document;\n\t}\n\n\t// Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n\t// Cloning options loses the selected state, so don't cache them\n\t// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n\t// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n\t// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501\n\tif ( args.length === 1 && typeof first === \"string\" && first.length < 512 && doc === document &&\n\t\tfirst.charAt(0) === \"<\" && !rnocache.test( first ) &&\n\t\t(jQuery.support.checkClone || !rchecked.test( first )) &&\n\t\t(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {\n\n\t\tcacheable = true;\n\n\t\tcacheresults = jQuery.fragments[ first ];\n\t\tif ( cacheresults && cacheresults !== 1 ) {\n\t\t\tfragment = cacheresults;\n\t\t}\n\t}\n\n\tif ( !fragment ) {\n\t\tfragment = doc.createDocumentFragment();\n\t\tjQuery.clean( args, doc, fragment, scripts );\n\t}\n\n\tif ( cacheable ) {\n\t\tjQuery.fragments[ first ] = cacheresults ? fragment : 1;\n\t}\n\n\treturn { fragment: fragment, cacheable: cacheable };\n};\n\njQuery.fragments = {};\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar ret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tparent = this.length === 1 && this[0].parentNode;\n\n\t\tif ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {\n\t\t\tinsert[ original ]( this[0] );\n\t\t\treturn this;\n\n\t\t} else {\n\t\t\tfor ( var i = 0, l = insert.length; i < l; i++ ) {\n\t\t\t\tvar elems = ( i > 0 ? this.clone(true) : this ).get();\n\t\t\t\tjQuery( insert[i] )[ original ]( elems );\n\t\t\t\tret = ret.concat( elems );\n\t\t\t}\n\n\t\t\treturn this.pushStack( ret, name, insert.selector );\n\t\t}\n\t};\n});\n\nfunction getAll( elem ) {\n\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\treturn elem.getElementsByTagName( \"*\" );\n\n\t} else if ( typeof elem.querySelectorAll !== \"undefined\" ) {\n\t\treturn elem.querySelectorAll( \"*\" );\n\n\t} else {\n\t\treturn [];\n\t}\n}\n\n// Used in clean, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( elem.type === \"checkbox\" || elem.type === \"radio\" ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n// Finds all inputs and passes them to fixDefaultChecked\nfunction findInputs( elem ) {\n\tvar nodeName = ( elem.nodeName || \"\" ).toLowerCase();\n\tif ( nodeName === \"input\" ) {\n\t\tfixDefaultChecked( elem );\n\t// Skip scripts, get other children\n\t} else if ( nodeName !== \"script\" && typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\tjQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n\t}\n}\n\n// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js\nfunction shimCloneNode( elem ) {\n\tvar div = document.createElement( \"div\" );\n\tsafeFragment.appendChild( div );\n\n\tdiv.innerHTML = elem.outerHTML;\n\treturn div.firstChild;\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar srcElements,\n\t\t\tdestElements,\n\t\t\ti,\n\t\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t\tclone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ?\n\t\t\t\telem.cloneNode( true ) :\n\t\t\t\tshimCloneNode( elem );\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\t\t\t// IE copies events bound via attachEvent when using cloneNode.\n\t\t\t// Calling detachEvent on the clone will also remove the events\n\t\t\t// from the original. In order to get around this, we use some\n\t\t\t// proprietary methods to clear the events. Thanks to MooTools\n\t\t\t// guys for this hotness.\n\n\t\t\tcloneFixAttributes( elem, clone );\n\n\t\t\t// Using Sizzle here is crazy slow, so we use getElementsByTagName instead\n\t\t\tsrcElements = getAll( elem );\n\t\t\tdestElements = getAll( clone );\n\n\t\t\t// Weird iteration because IE will replace the length property\n\t\t\t// with an element if you are cloning the body and one of the\n\t\t\t// elements on the page has a name or id of \"length\"\n\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tcloneFixAttributes( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tcloneCopyEvent( elem, clone );\n\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = getAll( elem );\n\t\t\t\tdestElements = getAll( clone );\n\n\t\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsrcElements = destElements = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tclean: function( elems, context, fragment, scripts ) {\n\t\tvar checkScriptType, script, j,\n\t\t\t\tret = [];\n\n\t\tcontext = context || document;\n\n\t\t// !context.createElement fails in IE with an error but returns typeof 'object'\n\t\tif ( typeof context.createElement === \"undefined\" ) {\n\t\t\tcontext = context.ownerDocument || context[0] && context[0].ownerDocument || document;\n\t\t}\n\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( typeof elem === \"number\" ) {\n\t\t\t\telem += \"\";\n\t\t\t}\n\n\t\t\tif ( !elem ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Convert html string into DOM nodes\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\tif ( !rhtml.test( elem ) ) {\n\t\t\t\t\telem = context.createTextNode( elem );\n\t\t\t\t} else {\n\t\t\t\t\t// Fix \"XHTML\"-style tags in all browsers\n\t\t\t\t\telem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\t\t\t// Trim whitespace, otherwise indexOf won't work as expected\n\t\t\t\t\tvar tag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase(),\n\t\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default,\n\t\t\t\t\t\tdepth = wrap[0],\n\t\t\t\t\t\tdiv = context.createElement(\"div\"),\n\t\t\t\t\t\tsafeChildNodes = safeFragment.childNodes,\n\t\t\t\t\t\tremove;\n\n\t\t\t\t\t// Append wrapper element to unknown element safe doc fragment\n\t\t\t\t\tif ( context === document ) {\n\t\t\t\t\t\t// Use the fragment we've already created for this document\n\t\t\t\t\t\tsafeFragment.appendChild( div );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Use a fragment created with the owner document\n\t\t\t\t\t\tcreateSafeFragment( context ).appendChild( div );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Go to html and back, then peel off extra wrappers\n\t\t\t\t\tdiv.innerHTML = wrap[1] + elem + wrap[2];\n\n\t\t\t\t\t// Move to the right depth\n\t\t\t\t\twhile ( depth-- ) {\n\t\t\t\t\t\tdiv = div.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\tvar hasBody = rtbody.test(elem),\n\t\t\t\t\t\t\ttbody = tag === \"table\" && !hasBody ?\n\t\t\t\t\t\t\t\tdiv.firstChild && div.firstChild.childNodes :\n\n\t\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\t\twrap[1] === \"<table>\" && !hasBody ?\n\t\t\t\t\t\t\t\t\tdiv.childNodes :\n\t\t\t\t\t\t\t\t\t[];\n\n\t\t\t\t\t\tfor ( j = tbody.length - 1; j >= 0 ; --j ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n\t\t\t\t\t\t\t\ttbody[ j ].parentNode.removeChild( tbody[ j ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// IE completely kills leading whitespace when innerHTML is used\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tdiv.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\telem = div.childNodes;\n\n\t\t\t\t\t// Clear elements from DocumentFragment (safeFragment or otherwise)\n\t\t\t\t\t// to avoid hoarding elements. Fixes #11356\n\t\t\t\t\tif ( div ) {\n\t\t\t\t\t\tdiv.parentNode.removeChild( div );\n\n\t\t\t\t\t\t// Guard against -1 index exceptions in FF3.6\n\t\t\t\t\t\tif ( safeChildNodes.length > 0 ) {\n\t\t\t\t\t\t\tremove = safeChildNodes[ safeChildNodes.length - 1 ];\n\n\t\t\t\t\t\t\tif ( remove && remove.parentNode ) {\n\t\t\t\t\t\t\t\tremove.parentNode.removeChild( remove );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Resets defaultChecked for any radios and checkboxes\n\t\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\t\tvar len;\n\t\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\t\tif ( elem[0] && typeof (len = elem.length) === \"number\" ) {\n\t\t\t\t\tfor ( j = 0; j < len; j++ ) {\n\t\t\t\t\t\tfindInputs( elem[j] );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfindInputs( elem );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( elem.nodeType ) {\n\t\t\t\tret.push( elem );\n\t\t\t} else {\n\t\t\t\tret = jQuery.merge( ret, elem );\n\t\t\t}\n\t\t}\n\n\t\tif ( fragment ) {\n\t\t\tcheckScriptType = function( elem ) {\n\t\t\t\treturn !elem.type || rscriptType.test( elem.type );\n\t\t\t};\n\t\t\tfor ( i = 0; ret[i]; i++ ) {\n\t\t\t\tscript = ret[i];\n\t\t\t\tif ( scripts && jQuery.nodeName( script, \"script\" ) && (!script.type || rscriptType.test( script.type )) ) {\n\t\t\t\t\tscripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );\n\n\t\t\t\t} else {\n\t\t\t\t\tif ( script.nodeType === 1 ) {\n\t\t\t\t\t\tvar jsTags = jQuery.grep( script.getElementsByTagName( \"script\" ), checkScriptType );\n\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t}\n\t\t\t\t\tfragment.appendChild( script );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, id,\n\t\t\tcache = jQuery.cache,\n\t\t\tspecial = jQuery.event.special,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando;\n\n\t\tfor ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tid = elem[ jQuery.expando ];\n\n\t\t\tif ( id ) {\n\t\t\t\tdata = cache[ id ];\n\n\t\t\t\tif ( data && data.events ) {\n\t\t\t\t\tfor ( var type in data.events ) {\n\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Null the DOM reference to avoid IE6/7/8 leak (#7054)\n\t\t\t\t\tif ( data.handle ) {\n\t\t\t\t\t\tdata.handle.elem = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\tdelete elem[ jQuery.expando ];\n\n\t\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\t\telem.removeAttribute( jQuery.expando );\n\t\t\t\t}\n\n\t\t\t\tdelete cache[ id ];\n\t\t\t}\n\t\t}\n\t}\n});\n\n\n\n\nvar ralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity=([^)]*)/,\n\t// fixed for IE9, see #8346\n\trupper = /([A-Z]|^ms)/g,\n\trnum = /^[\\-+]?(?:\\d*\\.)?\\d+$/i,\n\trnumnonpx = /^-?(?:\\d*\\.)?\\d+(?!px)[^\\d\\s]+$/i,\n\trrelNum = /^([\\-+])=([\\-+.\\de]+)/,\n\trmargin = /^margin/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\n\t// order is important!\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\n\tcurCSS,\n\n\tgetComputedStyle,\n\tcurrentStyle;\n\njQuery.fn.css = function( name, value ) {\n\treturn jQuery.access( this, function( elem, name, value ) {\n\t\treturn value !== undefined ?\n\t\t\tjQuery.style( elem, name, value ) :\n\t\t\tjQuery.css( elem, name );\n\t}, name, value, arguments.length > 1 );\n};\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\n\t\t\t\t} else {\n\t\t\t\t\treturn elem.style.opacity;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, origName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style, hooks = jQuery.cssHooks[ origName ];\n\n\t\tname = jQuery.cssProps[ origName ] || origName;\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra ) {\n\t\tvar ret, hooks;\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.camelCase( name );\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tname = jQuery.cssProps[ name ] || name;\n\n\t\t// cssFloat needs a special treatment\n\t\tif ( name === \"cssFloat\" ) {\n\t\t\tname = \"float\";\n\t\t}\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {\n\t\t\treturn ret;\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t} else if ( curCSS ) {\n\t\t\treturn curCSS( elem, name );\n\t\t}\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback ) {\n\t\tvar old = {},\n\t\t\tret, name;\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.call( elem );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\n// DEPRECATED in 1.3, Use jQuery.css() instead\njQuery.curCSS = jQuery.css;\n\nif ( document.defaultView && document.defaultView.getComputedStyle ) {\n\tgetComputedStyle = function( elem, name ) {\n\t\tvar ret, defaultView, computedStyle, width,\n\t\t\tstyle = elem.style;\n\n\t\tname = name.replace( rupper, \"-$1\" ).toLowerCase();\n\n\t\tif ( (defaultView = elem.ownerDocument.defaultView) &&\n\t\t\t\t(computedStyle = defaultView.getComputedStyle( elem, null )) ) {\n\n\t\t\tret = computedStyle.getPropertyValue( name );\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// WebKit uses \"computed value (percentage if specified)\" instead of \"used value\" for margins\n\t\t// which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {\n\t\t\twidth = style.width;\n\t\t\tstyle.width = ret;\n\t\t\tret = computedStyle.width;\n\t\t\tstyle.width = width;\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nif ( document.documentElement.currentStyle ) {\n\tcurrentStyle = function( elem, name ) {\n\t\tvar left, rsLeft, uncomputed,\n\t\t\tret = elem.currentStyle && elem.currentStyle[ name ],\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && (uncomputed = style[ name ]) ) {\n\t\t\tret = uncomputed;\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\tif ( rnumnonpx.test( ret ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trsLeft = elem.runtimeStyle && elem.runtimeStyle.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\ncurCSS = getComputedStyle || currentStyle;\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property\n\tvar val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\ti = name === \"width\" ? 1 : 0,\n\t\tlen = 4;\n\n\tif ( val > 0 ) {\n\t\tif ( extra !== \"border\" ) {\n\t\t\tfor ( ; i < len; i += 2 ) {\n\t\t\t\tif ( !extra ) {\n\t\t\t\t\tval -= parseFloat( jQuery.css( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\t\tval += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;\n\t\t\t\t} else {\n\t\t\t\t\tval -= parseFloat( jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn val + \"px\";\n\t}\n\n\t// Fall back to computed then uncomputed css if necessary\n\tval = curCSS( elem, name );\n\tif ( val < 0 || val == null ) {\n\t\tval = elem.style[ name ];\n\t}\n\n\t// Computed unit is not pixels. Stop here and return.\n\tif ( rnumnonpx.test(val) ) {\n\t\treturn val;\n\t}\n\n\t// Normalize \"\", auto, and prepare for extra\n\tval = parseFloat( val ) || 0;\n\n\t// Add padding, border, margin\n\tif ( extra ) {\n\t\tfor ( ; i < len; i += 2 ) {\n\t\t\tval += parseFloat( jQuery.css( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += parseFloat( jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t\tif ( extra === \"margin\" ) {\n\t\t\t\tval += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val + \"px\";\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\tif ( elem.offsetWidth !== 0 ) {\n\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t} else {\n\t\t\t\t\treturn jQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\treturn rnum.test( value ) ?\n\t\t\t\tvalue + \"px\" :\n\t\t\t\tvalue;\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( parseFloat( RegExp.$1 ) / 100 ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\tif ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there there is no filter style applied in a css rule, we are done\n\t\t\t\tif ( currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery(function() {\n\t// This hook cannot be added until DOM ready because the support test\n\t// for it is not run until after DOM ready\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\treturn curCSS( elem, \"margin-right\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.style.marginRight;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\tvar width = elem.offsetWidth,\n\t\t\theight = elem.offsetHeight;\n\n\t\treturn ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i,\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ],\n\t\t\t\texpanded = {};\n\n\t\t\tfor ( i = 0; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n});\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trhash = /#.*$/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\trinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trquery = /\\?/,\n\trscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\trselectTextarea = /^(?:select|textarea)/i,\n\trspacesAjax = /\\s+/,\n\trts = /([?&])_=[^&]*/,\n\trurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Document location\n\tajaxLocation,\n\n\t// Document location segments\n\tajaxLocParts,\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = [\"*/\"] + [\"*\"];\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\tvar dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),\n\t\t\t\ti = 0,\n\t\t\t\tlength = dataTypes.length,\n\t\t\t\tdataType,\n\t\t\t\tlist,\n\t\t\t\tplaceBefore;\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tdataType = dataTypes[ i ];\n\t\t\t\t// We control if we're asked to add before\n\t\t\t\t// any existing element\n\t\t\t\tplaceBefore = /^\\+/.test( dataType );\n\t\t\t\tif ( placeBefore ) {\n\t\t\t\t\tdataType = dataType.substr( 1 ) || \"*\";\n\t\t\t\t}\n\t\t\t\tlist = structure[ dataType ] = structure[ dataType ] || [];\n\t\t\t\t// then we add to the structure accordingly\n\t\t\t\tlist[ placeBefore ? \"unshift\" : \"push\" ]( func );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n\t\tdataType /* internal */, inspected /* internal */ ) {\n\n\tdataType = dataType || options.dataTypes[ 0 ];\n\tinspected = inspected || {};\n\n\tinspected[ dataType ] = true;\n\n\tvar list = structure[ dataType ],\n\t\ti = 0,\n\t\tlength = list ? list.length : 0,\n\t\texecuteOnly = ( structure === prefilters ),\n\t\tselection;\n\n\tfor ( ; i < length && ( executeOnly || !selection ); i++ ) {\n\t\tselection = list[ i ]( options, originalOptions, jqXHR );\n\t\t// If we got redirected to another dataType\n\t\t// we try there if executing only and not done already\n\t\tif ( typeof selection === \"string\" ) {\n\t\t\tif ( !executeOnly || inspected[ selection ] ) {\n\t\t\t\tselection = undefined;\n\t\t\t} else {\n\t\t\t\toptions.dataTypes.unshift( selection );\n\t\t\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\t\t\tstructure, options, originalOptions, jqXHR, selection, inspected );\n\t\t\t}\n\t\t}\n\t}\n\t// If we're only executing or nothing was selected\n\t// we try the catchall dataType if not done already\n\tif ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\tstructure, options, originalOptions, jqXHR, \"*\", inspected );\n\t}\n\t// unnecessary when only executing (prefilters)\n\t// but it'll be ignored by the caller in that case\n\treturn selection;\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n}\n\njQuery.fn.extend({\n\tload: function( url, params, callback ) {\n\t\tif ( typeof url !== \"string\" && _load ) {\n\t\t\treturn _load.apply( this, arguments );\n\n\t\t// Don't do a request if no elements are being requested\n\t\t} else if ( !this.length ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar off = url.indexOf( \" \" );\n\t\tif ( off >= 0 ) {\n\t\t\tvar selector = url.slice( off, url.length );\n\t\t\turl = url.slice( 0, off );\n\t\t}\n\n\t\t// Default to a GET request\n\t\tvar type = \"GET\";\n\n\t\t// If the second parameter was provided\n\t\tif ( params ) {\n\t\t\t// If it's a function\n\t\t\tif ( jQuery.isFunction( params ) ) {\n\t\t\t\t// We assume that it's the callback\n\t\t\t\tcallback = params;\n\t\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t\t} else if ( typeof params === \"object\" ) {\n\t\t\t\tparams = jQuery.param( params, jQuery.ajaxSettings.traditional );\n\t\t\t\ttype = \"POST\";\n\t\t\t}\n\t\t}\n\n\t\tvar self = this;\n\n\t\t// Request the remote document\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params,\n\t\t\t// Complete callback (responseText is used internally)\n\t\t\tcomplete: function( jqXHR, status, responseText ) {\n\t\t\t\t// Store the response as specified by the jqXHR object\n\t\t\t\tresponseText = jqXHR.responseText;\n\t\t\t\t// If successful, inject the HTML into all the matched elements\n\t\t\t\tif ( jqXHR.isResolved() ) {\n\t\t\t\t\t// #4825: Get the actual response in case\n\t\t\t\t\t// a dataFilter is present in ajaxSettings\n\t\t\t\t\tjqXHR.done(function( r ) {\n\t\t\t\t\t\tresponseText = r;\n\t\t\t\t\t});\n\t\t\t\t\t// See if a selector was specified\n\t\t\t\t\tself.html( selector ?\n\t\t\t\t\t\t// Create a dummy div to hold the results\n\t\t\t\t\t\tjQuery(\"<div>\")\n\t\t\t\t\t\t\t// inject the contents of the document in, removing the scripts\n\t\t\t\t\t\t\t// to avoid any 'Permission Denied' errors in IE\n\t\t\t\t\t\t\t.append(responseText.replace(rscript, \"\"))\n\n\t\t\t\t\t\t\t// Locate the specified elements\n\t\t\t\t\t\t\t.find(selector) :\n\n\t\t\t\t\t\t// If not, just inject the full result\n\t\t\t\t\t\tresponseText );\n\t\t\t\t}\n\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tself.each( callback, [ responseText, status, jqXHR ] );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t},\n\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\treturn this.elements ? jQuery.makeArray( this.elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\treturn this.name && !this.disabled &&\n\t\t\t\t( this.checked || rselectTextarea.test( this.nodeName ) ||\n\t\t\t\t\trinput.test( this.type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val, i ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n\tjQuery.fn[ o ] = function( f ){\n\t\treturn this.on( o, f );\n\t};\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\ttype: method,\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: callback,\n\t\t\tdataType: type\n\t\t});\n\t};\n});\n\njQuery.extend({\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\tif ( settings ) {\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( target, jQuery.ajaxSettings );\n\t\t} else {\n\t\t\t// Extending ajaxSettings\n\t\t\tsettings = target;\n\t\t\ttarget = jQuery.ajaxSettings;\n\t\t}\n\t\tajaxExtend( target, settings );\n\t\treturn target;\n\t},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\ttype: \"GET\",\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\tprocessData: true,\n\t\tasync: true,\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\thtml: \"text/html\",\n\t\t\ttext: \"text/plain\",\n\t\t\tjson: \"application/json, text/javascript\",\n\t\t\t\"*\": allTypes\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\"\n\t\t},\n\n\t\t// List of data converters\n\t\t// 1) key format is \"source_type destination_type\" (a single space in-between)\n\t\t// 2) the catchall symbol \"*\" can be used for source_type\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": window.String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\tcontext: true,\n\t\t\turl: true\n\t\t}\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events\n\t\t\t// It's the callbackContext if one was provided in the options\n\t\t\t// and if it's a DOM node or a jQuery collection\n\t\t\tglobalEventContext = callbackContext !== s &&\n\t\t\t\t( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n\t\t\t\t\t\tjQuery( callbackContext ) : jQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// ifModified key\n\t\t\tifModifiedKey,\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// transport\n\t\t\ttransport,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match === undefined ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tstatusText = statusText || \"abort\";\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( statusText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, statusText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Callback for when everything is done\n\t\t// It is defined here because jslint complains if it is declared\n\t\t// at the end of the function (which would be more logical and readable)\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\tvar isSuccess,\n\t\t\t\tsuccess,\n\t\t\t\terror,\n\t\t\t\tstatusText = nativeStatusText,\n\t\t\t\tresponse = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,\n\t\t\t\tlastModified,\n\t\t\t\tetag;\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( status >= 200 && status < 300 || status === 304 ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\n\t\t\t\t\tif ( ( lastModified = jqXHR.getResponseHeader( \"Last-Modified\" ) ) ) {\n\t\t\t\t\t\tjQuery.lastModified[ ifModifiedKey ] = lastModified;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( etag = jqXHR.getResponseHeader( \"Etag\" ) ) ) {\n\t\t\t\t\t\tjQuery.etag[ ifModifiedKey ] = etag;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If not modified\n\t\t\t\tif ( status === 304 ) {\n\n\t\t\t\t\tstatusText = \"notmodified\";\n\t\t\t\t\tisSuccess = true;\n\n\t\t\t\t// If we have data\n\t\t\t\t} else {\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsuccess = ajaxConvert( s, response );\n\t\t\t\t\t\tstatusText = \"success\";\n\t\t\t\t\t\tisSuccess = true;\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t// We have a parsererror\n\t\t\t\t\t\tstatusText = \"parsererror\";\n\t\t\t\t\t\terror = e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( !statusText || status ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = \"\" + ( nativeStatusText || statusText );\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n\t\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\t\tjqXHR.complete = completeDeferred.add;\n\n\t\t// Status-dependent callbacks\n\t\tjqXHR.statusCode = function( map ) {\n\t\t\tif ( map ) {\n\t\t\t\tvar tmp;\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tfor ( tmp in map ) {\n\t\t\t\t\t\tstatusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttmp = map[ jqXHR.status ];\n\t\t\t\t\tjqXHR.then( tmp, tmp );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( rspacesAjax );\n\n\t\t// Determine if a cross-domain request is in order\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !=\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Get ifModifiedKey before adding the anti-cache parameter\n\t\t\tifModifiedKey = s.url;\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\n\t\t\t\tvar ts = jQuery.now(),\n\t\t\t\t\t// try replacing _= if it is there\n\t\t\t\t\tret = s.url.replace( rts, \"$1_=\" + ts );\n\n\t\t\t\t// if nothing was replaced, add timestamp to the end\n\t\t\t\ts.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tifModifiedKey = ifModifiedKey || s.url;\n\t\t\tif ( jQuery.lastModified[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t\t// Abort if not done already\n\t\t\t\tjqXHR.abort();\n\t\t\t\treturn false;\n\n\t\t}\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout( function(){\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch (e) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tparam: function( a, traditional ) {\n\t\tvar s = [],\n\t\t\tadd = function( key, value ) {\n\t\t\t\t// If value is a function, invoke it and return its value\n\t\t\t\tvalue = jQuery.isFunction( value ) ? value() : value;\n\t\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t\t};\n\n\t\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\t\tif ( traditional === undefined ) {\n\t\t\ttraditional = jQuery.ajaxSettings.traditional;\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each( a, function() {\n\t\t\t\tadd( this.name, this.value );\n\t\t\t});\n\n\t\t} else {\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor ( var prefix in a ) {\n\t\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join( \"&\" ).replace( r20, \"+\" );\n\t}\n});\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// If array item is non-scalar (array or object), encode its\n\t\t\t\t// numeric index to resolve deserialization ambiguity issues.\n\t\t\t\t// Note that rack (as of 1.0.0) can't currently deserialize\n\t\t\t\t// nested arrays properly, and attempting to do so may cause\n\t\t\t\t// a server error. Possible fixes are to modify rack's\n\t\t\t\t// deserialization algorithm or to provide an option or flag\n\t\t\t\t// to force array serialization to be shallow.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( var name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// This is still on the jQuery object... for now\n// Want to move this to jQuery.ajax some day\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {}\n\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar contents = s.contents,\n\t\tdataTypes = s.dataTypes,\n\t\tresponseFields = s.responseFields,\n\t\tct,\n\t\ttype,\n\t\tfinalDataType,\n\t\tfirstDataType;\n\n\t// Fill responseXXX fields\n\tfor ( type in responseFields ) {\n\t\tif ( type in responses ) {\n\t\t\tjqXHR[ responseFields[type] ] = responses[ type ];\n\t\t}\n\t}\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n// Chain conversions given the request and the original response\nfunction ajaxConvert( s, response ) {\n\n\t// Apply the dataFilter if provided\n\tif ( s.dataFilter ) {\n\t\tresponse = s.dataFilter( response, s.dataType );\n\t}\n\n\tvar dataTypes = s.dataTypes,\n\t\tconverters = {},\n\t\ti,\n\t\tkey,\n\t\tlength = dataTypes.length,\n\t\ttmp,\n\t\t// Current and previous dataTypes\n\t\tcurrent = dataTypes[ 0 ],\n\t\tprev,\n\t\t// Conversion expression\n\t\tconversion,\n\t\t// Conversion function\n\t\tconv,\n\t\t// Conversion functions (transitive conversion)\n\t\tconv1,\n\t\tconv2;\n\n\t// For each dataType in the chain\n\tfor ( i = 1; i < length; i++ ) {\n\n\t\t// Create converters map\n\t\t// with lowercased keys\n\t\tif ( i === 1 ) {\n\t\t\tfor ( key in s.converters ) {\n\t\t\t\tif ( typeof key === \"string\" ) {\n\t\t\t\t\tconverters[ key.toLowerCase() ] = s.converters[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Get the dataTypes\n\t\tprev = current;\n\t\tcurrent = dataTypes[ i ];\n\n\t\t// If current is auto dataType, update it to prev\n\t\tif ( current === \"*\" ) {\n\t\t\tcurrent = prev;\n\t\t// If no auto and dataTypes are actually different\n\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t// Get the converter\n\t\t\tconversion = prev + \" \" + current;\n\t\t\tconv = converters[ conversion ] || converters[ \"* \" + current ];\n\n\t\t\t// If there is no direct converter, search transitively\n\t\t\tif ( !conv ) {\n\t\t\t\tconv2 = undefined;\n\t\t\t\tfor ( conv1 in converters ) {\n\t\t\t\t\ttmp = conv1.split( \" \" );\n\t\t\t\t\tif ( tmp[ 0 ] === prev || tmp[ 0 ] === \"*\" ) {\n\t\t\t\t\t\tconv2 = converters[ tmp[1] + \" \" + current ];\n\t\t\t\t\t\tif ( conv2 ) {\n\t\t\t\t\t\t\tconv1 = converters[ conv1 ];\n\t\t\t\t\t\t\tif ( conv1 === true ) {\n\t\t\t\t\t\t\t\tconv = conv2;\n\t\t\t\t\t\t\t} else if ( conv2 === true ) {\n\t\t\t\t\t\t\t\tconv = conv1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If we found no converter, dispatch an error\n\t\t\tif ( !( conv || conv2 ) ) {\n\t\t\t\tjQuery.error( \"No conversion from \" + conversion.replace(\" \",\" to \") );\n\t\t\t}\n\t\t\t// If found converter is not an equivalence\n\t\t\tif ( conv !== true ) {\n\t\t\t\t// Convert with 1 or 2 converters accordingly\n\t\t\t\tresponse = conv ? conv( response ) : conv2( conv1(response) );\n\t\t\t}\n\t\t}\n\t}\n\treturn response;\n}\n\n\n\n\nvar jsc = jQuery.now(),\n\tjsre = /(\\=)\\?(&|$)|\\?\\?/i;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\treturn jQuery.expando + \"_\" + ( jsc++ );\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar inspectData = ( typeof s.data === \"string\" ) && /^application\\/x\\-www\\-form\\-urlencoded/.test( s.contentType );\n\n\tif ( s.dataTypes[ 0 ] === \"jsonp\" ||\n\t\ts.jsonp !== false && ( jsre.test( s.url ) ||\n\t\t\t\tinspectData && jsre.test( s.data ) ) ) {\n\n\t\tvar responseContainer,\n\t\t\tjsonpCallback = s.jsonpCallback =\n\t\t\t\tjQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,\n\t\t\tprevious = window[ jsonpCallback ],\n\t\t\turl = s.url,\n\t\t\tdata = s.data,\n\t\t\treplace = \"$1\" + jsonpCallback + \"$2\";\n\n\t\tif ( s.jsonp !== false ) {\n\t\t\turl = url.replace( jsre, replace );\n\t\t\tif ( s.url === url ) {\n\t\t\t\tif ( inspectData ) {\n\t\t\t\t\tdata = data.replace( jsre, replace );\n\t\t\t\t}\n\t\t\t\tif ( s.data === data ) {\n\t\t\t\t\t// Add callback manually\n\t\t\t\t\turl += (/\\?/.test( url ) ? \"&\" : \"?\") + s.jsonp + \"=\" + jsonpCallback;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ts.url = url;\n\t\ts.data = data;\n\n\t\t// Install callback\n\t\twindow[ jsonpCallback ] = function( response ) {\n\t\t\tresponseContainer = [ response ];\n\t\t};\n\n\t\t// Clean-up function\n\t\tjqXHR.always(function() {\n\t\t\t// Set callback back to previous value\n\t\t\twindow[ jsonpCallback ] = previous;\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( previous ) ) {\n\t\t\t\twindow[ jsonpCallback ]( responseContainer[ 0 ] );\n\t\t\t}\n\t\t});\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( jsonpCallback + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /javascript|ecmascript/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = \"async\";\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( head && script.parentNode ) {\n\t\t\t\t\t\t\thead.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = undefined;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Use insertBefore instead of appendChild  to circumvent an IE6 bug.\n\t\t\t\t// This arises when a base node is used (#2709 and #4378).\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( 0, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\n\n\n\n\nvar // #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject ? function() {\n\t\t// Abort all pending requests\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( 0, 1 );\n\t\t}\n\t} : false,\n\txhrId = 0,\n\txhrCallbacks;\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\n(function( xhr ) {\n\tjQuery.extend( jQuery.support, {\n\t\tajax: !!xhr,\n\t\tcors: !!xhr && ( \"withCredentials\" in xhr )\n\t});\n})( jQuery.ajaxSettings.xhr() );\n\n// Create transport if the browser can provide an xhr\nif ( jQuery.support.ajax ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar xhr = s.xhr(),\n\t\t\t\t\t\thandle,\n\t\t\t\t\t\ti;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( _ ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\n\t\t\t\t\t\tvar status,\n\t\t\t\t\t\t\tstatusText,\n\t\t\t\t\t\t\tresponseHeaders,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t\txml;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occured\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\txml = xhr.responseXML;\n\n\t\t\t\t\t\t\t\t\t// Construct response list\n\t\t\t\t\t\t\t\t\tif ( xml && xml.documentElement /* #4958 */ ) {\n\t\t\t\t\t\t\t\t\t\tresponses.xml = xml;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t} catch( _ ) {\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// if we're in sync mode or it's in cache\n\t\t\t\t\t// and has been retrieved directly (IE6 & IE7)\n\t\t\t\t\t// we need to manually fire the callback\n\t\t\t\t\tif ( !s.async || xhr.readyState === 4 ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback(0,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\n\n\n\n\nvar elemdisplay = {},\n\tiframe, iframeDoc,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = /^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,\n\ttimerId,\n\tfxAttrs = [\n\t\t// height animations\n\t\t[ \"height\", \"marginTop\", \"marginBottom\", \"paddingTop\", \"paddingBottom\" ],\n\t\t// width animations\n\t\t[ \"width\", \"marginLeft\", \"marginRight\", \"paddingLeft\", \"paddingRight\" ],\n\t\t// opacity animations\n\t\t[ \"opacity\" ]\n\t],\n\tfxNow;\n\njQuery.fn.extend({\n\tshow: function( speed, easing, callback ) {\n\t\tvar elem, display;\n\n\t\tif ( speed || speed === 0 ) {\n\t\t\treturn this.animate( genFx(\"show\", 3), speed, easing, callback );\n\n\t\t} else {\n\t\t\tfor ( var i = 0, j = this.length; i < j; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = elem.style.display;\n\n\t\t\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t\t\t// being hidden by cascaded rules or not\n\t\t\t\t\tif ( !jQuery._data(elem, \"olddisplay\") && display === \"none\" ) {\n\t\t\t\t\t\tdisplay = elem.style.display = \"\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set elements which have been overridden with display: none\n\t\t\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t\t\t// for such an element\n\t\t\t\t\tif ( (display === \"\" && jQuery.css(elem, \"display\") === \"none\") ||\n\t\t\t\t\t\t!jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {\n\t\t\t\t\t\tjQuery._data( elem, \"olddisplay\", defaultDisplay(elem.nodeName) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the display of most of the elements in a second loop\n\t\t\t// to avoid the constant reflow\n\t\t\tfor ( i = 0; i < j; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = elem.style.display;\n\n\t\t\t\t\tif ( display === \"\" || display === \"none\" ) {\n\t\t\t\t\t\telem.style.display = jQuery._data( elem, \"olddisplay\" ) || \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t},\n\n\thide: function( speed, easing, callback ) {\n\t\tif ( speed || speed === 0 ) {\n\t\t\treturn this.animate( genFx(\"hide\", 3), speed, easing, callback);\n\n\t\t} else {\n\t\t\tvar elem, display,\n\t\t\t\ti = 0,\n\t\t\t\tj = this.length;\n\n\t\t\tfor ( ; i < j; i++ ) {\n\t\t\t\telem = this[i];\n\t\t\t\tif ( elem.style ) {\n\t\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t\t\t\tif ( display !== \"none\" && !jQuery._data( elem, \"olddisplay\" ) ) {\n\t\t\t\t\t\tjQuery._data( elem, \"olddisplay\", display );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the display of the elements in a second loop\n\t\t\t// to avoid the constant reflow\n\t\t\tfor ( i = 0; i < j; i++ ) {\n\t\t\t\tif ( this[i].style ) {\n\t\t\t\t\tthis[i].style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t},\n\n\t// Save the old toggle function\n\t_toggle: jQuery.fn.toggle,\n\n\ttoggle: function( fn, fn2, callback ) {\n\t\tvar bool = typeof fn === \"boolean\";\n\n\t\tif ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {\n\t\t\tthis._toggle.apply( this, arguments );\n\n\t\t} else if ( fn == null || bool ) {\n\t\t\tthis.each(function() {\n\t\t\t\tvar state = bool ? fn : jQuery(this).is(\":hidden\");\n\t\t\t\tjQuery(this)[ state ? \"show\" : \"hide\" ]();\n\t\t\t});\n\n\t\t} else {\n\t\t\tthis.animate(genFx(\"toggle\", 3), fn, fn2, callback);\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tfadeTo: function( speed, to, easing, callback ) {\n\t\treturn this.filter(\":hidden\").css(\"opacity\", 0).show().end()\n\t\t\t\t\t.animate({opacity: to}, speed, easing, callback);\n\t},\n\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar optall = jQuery.speed( speed, easing, callback );\n\n\t\tif ( jQuery.isEmptyObject( prop ) ) {\n\t\t\treturn this.each( optall.complete, [ false ] );\n\t\t}\n\n\t\t// Do not change referenced properties as per-property easing will be lost\n\t\tprop = jQuery.extend( {}, prop );\n\n\t\tfunction doAnimation() {\n\t\t\t// XXX 'this' does not always have a nodeName when running the\n\t\t\t// test suite\n\n\t\t\tif ( optall.queue === false ) {\n\t\t\t\tjQuery._mark( this );\n\t\t\t}\n\n\t\t\tvar opt = jQuery.extend( {}, optall ),\n\t\t\t\tisElement = this.nodeType === 1,\n\t\t\t\thidden = isElement && jQuery(this).is(\":hidden\"),\n\t\t\t\tname, val, p, e, hooks, replace,\n\t\t\t\tparts, start, end, unit,\n\t\t\t\tmethod;\n\n\t\t\t// will store per property easing and be used to determine when an animation is complete\n\t\t\topt.animatedProperties = {};\n\n\t\t\t// first pass over propertys to expand / normalize\n\t\t\tfor ( p in prop ) {\n\t\t\t\tname = jQuery.camelCase( p );\n\t\t\t\tif ( p !== name ) {\n\t\t\t\t\tprop[ name ] = prop[ p ];\n\t\t\t\t\tdelete prop[ p ];\n\t\t\t\t}\n\n\t\t\t\tif ( ( hooks = jQuery.cssHooks[ name ] ) && \"expand\" in hooks ) {\n\t\t\t\t\treplace = hooks.expand( prop[ name ] );\n\t\t\t\t\tdelete prop[ name ];\n\n\t\t\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t\t\t// also - reusing 'p' from above because we have the correct \"name\"\n\t\t\t\t\tfor ( p in replace ) {\n\t\t\t\t\t\tif ( ! ( p in prop ) ) {\n\t\t\t\t\t\t\tprop[ p ] = replace[ p ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( name in prop ) {\n\t\t\t\tval = prop[ name ];\n\t\t\t\t// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)\n\t\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\t\topt.animatedProperties[ name ] = val[ 1 ];\n\t\t\t\t\tval = prop[ name ] = val[ 0 ];\n\t\t\t\t} else {\n\t\t\t\t\topt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';\n\t\t\t\t}\n\n\t\t\t\tif ( val === \"hide\" && hidden || val === \"show\" && !hidden ) {\n\t\t\t\t\treturn opt.complete.call( this );\n\t\t\t\t}\n\n\t\t\t\tif ( isElement && ( name === \"height\" || name === \"width\" ) ) {\n\t\t\t\t\t// Make sure that nothing sneaks out\n\t\t\t\t\t// Record all 3 overflow attributes because IE does not\n\t\t\t\t\t// change the overflow attribute when overflowX and\n\t\t\t\t\t// overflowY are set to the same value\n\t\t\t\t\topt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];\n\n\t\t\t\t\t// Set display property to inline-block for height/width\n\t\t\t\t\t// animations on inline elements that are having width/height animated\n\t\t\t\t\tif ( jQuery.css( this, \"display\" ) === \"inline\" &&\n\t\t\t\t\t\t\tjQuery.css( this, \"float\" ) === \"none\" ) {\n\n\t\t\t\t\t\t// inline-level elements accept inline-block;\n\t\t\t\t\t\t// block-level elements need to be inline with layout\n\t\t\t\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === \"inline\" ) {\n\t\t\t\t\t\t\tthis.style.display = \"inline-block\";\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.style.zoom = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( opt.overflow != null ) {\n\t\t\t\tthis.style.overflow = \"hidden\";\n\t\t\t}\n\n\t\t\tfor ( p in prop ) {\n\t\t\t\te = new jQuery.fx( this, opt, p );\n\t\t\t\tval = prop[ p ];\n\n\t\t\t\tif ( rfxtypes.test( val ) ) {\n\n\t\t\t\t\t// Tracks whether to show or hide based on private\n\t\t\t\t\t// data attached to the element\n\t\t\t\t\tmethod = jQuery._data( this, \"toggle\" + p ) || ( val === \"toggle\" ? hidden ? \"show\" : \"hide\" : 0 );\n\t\t\t\t\tif ( method ) {\n\t\t\t\t\t\tjQuery._data( this, \"toggle\" + p, method === \"show\" ? \"hide\" : \"show\" );\n\t\t\t\t\t\te[ method ]();\n\t\t\t\t\t} else {\n\t\t\t\t\t\te[ val ]();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tparts = rfxnum.exec( val );\n\t\t\t\t\tstart = e.cur();\n\n\t\t\t\t\tif ( parts ) {\n\t\t\t\t\t\tend = parseFloat( parts[2] );\n\t\t\t\t\t\tunit = parts[3] || ( jQuery.cssNumber[ p ] ? \"\" : \"px\" );\n\n\t\t\t\t\t\t// We need to compute starting value\n\t\t\t\t\t\tif ( unit !== \"px\" ) {\n\t\t\t\t\t\t\tjQuery.style( this, p, (end || 1) + unit);\n\t\t\t\t\t\t\tstart = ( (end || 1) / e.cur() ) * start;\n\t\t\t\t\t\t\tjQuery.style( this, p, start + unit);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\t\t\tif ( parts[1] ) {\n\t\t\t\t\t\t\tend = ( (parts[ 1 ] === \"-=\" ? -1 : 1) * end ) + start;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\te.custom( start, end, unit );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.custom( start, val, \"\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For JS strict compliance\n\t\t\treturn true;\n\t\t}\n\n\t\treturn optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\thadTimers = false,\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\t// clear marker counters if we know they won't be\n\t\t\tif ( !gotoEnd ) {\n\t\t\t\tjQuery._unmark( true, this );\n\t\t\t}\n\n\t\t\tfunction stopQueue( elem, data, index ) {\n\t\t\t\tvar hooks = data[ index ];\n\t\t\t\tjQuery.removeData( elem, index, true );\n\t\t\t\thooks.stop( gotoEnd );\n\t\t\t}\n\n\t\t\tif ( type == null ) {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && index.indexOf(\".run\") === index.length - 4 ) {\n\t\t\t\t\t\tstopQueue( this, data, index );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if ( data[ index = type + \".run\" ] && data[ index ].stop ){\n\t\t\t\tstopQueue( this, data, index );\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\tif ( gotoEnd ) {\n\n\t\t\t\t\t\t// force the next step to be the last\n\t\t\t\t\t\ttimers[ index ]( true );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimers[ index ].saveState();\n\t\t\t\t\t}\n\t\t\t\t\thadTimers = true;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( !( gotoEnd && hadTimers ) ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t}\n\n});\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout( clearFxNow, 0 );\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction clearFxNow() {\n\tfxNow = undefined;\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, num ) {\n\tvar obj = {};\n\n\tjQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {\n\t\tobj[ this ] = type;\n\t});\n\n\treturn obj;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx( \"show\", 1 ),\n\tslideUp: genFx( \"hide\", 1 ),\n\tslideToggle: genFx( \"toggle\", 1 ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.extend({\n\tspeed: function( speed, easing, fn ) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tjQuery.isFunction( speed ) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t\t};\n\n\t\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif ( opt.queue == null || opt.queue === true ) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function( noUnmark ) {\n\t\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\t\topt.old.call( this );\n\t\t\t}\n\n\t\t\tif ( opt.queue ) {\n\t\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t\t} else if ( noUnmark !== false ) {\n\t\t\t\tjQuery._unmark( this );\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t},\n\n\teasing: {\n\t\tlinear: function( p ) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function( p ) {\n\t\t\treturn ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;\n\t\t}\n\t},\n\n\ttimers: [],\n\n\tfx: function( elem, options, prop ) {\n\t\tthis.options = options;\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\n\t\toptions.orig = options.orig || {};\n\t}\n\n});\n\njQuery.fx.prototype = {\n\t// Simple function for setting a style value\n\tupdate: function() {\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\t( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );\n\t},\n\n\t// Get the current size\n\tcur: function() {\n\t\tif ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {\n\t\t\treturn this.elem[ this.prop ];\n\t\t}\n\n\t\tvar parsed,\n\t\t\tr = jQuery.css( this.elem, this.prop );\n\t\t// Empty strings, null, undefined and \"auto\" are converted to 0,\n\t\t// complex values such as \"rotate(1rad)\" are returned as is,\n\t\t// simple values such as \"10px\" are parsed to Float.\n\t\treturn isNaN( parsed = parseFloat( r ) ) ? !r || r === \"auto\" ? 0 : r : parsed;\n\t},\n\n\t// Start an animation from one number to another\n\tcustom: function( from, to, unit ) {\n\t\tvar self = this,\n\t\t\tfx = jQuery.fx;\n\n\t\tthis.startTime = fxNow || createFxNow();\n\t\tthis.end = to;\n\t\tthis.now = this.start = from;\n\t\tthis.pos = this.state = 0;\n\t\tthis.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? \"\" : \"px\" );\n\n\t\tfunction t( gotoEnd ) {\n\t\t\treturn self.step( gotoEnd );\n\t\t}\n\n\t\tt.queue = this.options.queue;\n\t\tt.elem = this.elem;\n\t\tt.saveState = function() {\n\t\t\tif ( jQuery._data( self.elem, \"fxshow\" + self.prop ) === undefined ) {\n\t\t\t\tif ( self.options.hide ) {\n\t\t\t\t\tjQuery._data( self.elem, \"fxshow\" + self.prop, self.start );\n\t\t\t\t} else if ( self.options.show ) {\n\t\t\t\t\tjQuery._data( self.elem, \"fxshow\" + self.prop, self.end );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif ( t() && jQuery.timers.push(t) && !timerId ) {\n\t\t\ttimerId = setInterval( fx.tick, fx.interval );\n\t\t}\n\t},\n\n\t// Simple 'show' function\n\tshow: function() {\n\t\tvar dataShow = jQuery._data( this.elem, \"fxshow\" + this.prop );\n\n\t\t// Remember where we started, so that we can go back to it later\n\t\tthis.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );\n\t\tthis.options.show = true;\n\n\t\t// Begin the animation\n\t\t// Make sure that we start at a small width/height to avoid any flash of content\n\t\tif ( dataShow !== undefined ) {\n\t\t\t// This show is picking up where a previous hide or show left off\n\t\t\tthis.custom( this.cur(), dataShow );\n\t\t} else {\n\t\t\tthis.custom( this.prop === \"width\" || this.prop === \"height\" ? 1 : 0, this.cur() );\n\t\t}\n\n\t\t// Start by showing the element\n\t\tjQuery( this.elem ).show();\n\t},\n\n\t// Simple 'hide' function\n\thide: function() {\n\t\t// Remember where we started, so that we can go back to it later\n\t\tthis.options.orig[ this.prop ] = jQuery._data( this.elem, \"fxshow\" + this.prop ) || jQuery.style( this.elem, this.prop );\n\t\tthis.options.hide = true;\n\n\t\t// Begin the animation\n\t\tthis.custom( this.cur(), 0 );\n\t},\n\n\t// Each step of an animation\n\tstep: function( gotoEnd ) {\n\t\tvar p, n, complete,\n\t\t\tt = fxNow || createFxNow(),\n\t\t\tdone = true,\n\t\t\telem = this.elem,\n\t\t\toptions = this.options;\n\n\t\tif ( gotoEnd || t >= options.duration + this.startTime ) {\n\t\t\tthis.now = this.end;\n\t\t\tthis.pos = this.state = 1;\n\t\t\tthis.update();\n\n\t\t\toptions.animatedProperties[ this.prop ] = true;\n\n\t\t\tfor ( p in options.animatedProperties ) {\n\t\t\t\tif ( options.animatedProperties[ p ] !== true ) {\n\t\t\t\t\tdone = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( done ) {\n\t\t\t\t// Reset the overflow\n\t\t\t\tif ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {\n\n\t\t\t\t\tjQuery.each( [ \"\", \"X\", \"Y\" ], function( index, value ) {\n\t\t\t\t\t\telem.style[ \"overflow\" + value ] = options.overflow[ index ];\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Hide the element if the \"hide\" operation was done\n\t\t\t\tif ( options.hide ) {\n\t\t\t\t\tjQuery( elem ).hide();\n\t\t\t\t}\n\n\t\t\t\t// Reset the properties, if the item has been hidden or shown\n\t\t\t\tif ( options.hide || options.show ) {\n\t\t\t\t\tfor ( p in options.animatedProperties ) {\n\t\t\t\t\t\tjQuery.style( elem, p, options.orig[ p ] );\n\t\t\t\t\t\tjQuery.removeData( elem, \"fxshow\" + p, true );\n\t\t\t\t\t\t// Toggle data is no longer needed\n\t\t\t\t\t\tjQuery.removeData( elem, \"toggle\" + p, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Execute the complete function\n\t\t\t\t// in the event that the complete function throws an exception\n\t\t\t\t// we must ensure it won't be called twice. #5684\n\n\t\t\t\tcomplete = options.complete;\n\t\t\t\tif ( complete ) {\n\n\t\t\t\t\toptions.complete = false;\n\t\t\t\t\tcomplete.call( elem );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t} else {\n\t\t\t// classical easing cannot be used with an Infinity duration\n\t\t\tif ( options.duration == Infinity ) {\n\t\t\t\tthis.now = t;\n\t\t\t} else {\n\t\t\t\tn = t - this.startTime;\n\t\t\t\tthis.state = n / options.duration;\n\n\t\t\t\t// Perform the easing function, defaults to swing\n\t\t\t\tthis.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );\n\t\t\t\tthis.now = this.start + ( (this.end - this.start) * this.pos );\n\t\t\t}\n\t\t\t// Perform the next step of the animation\n\t\t\tthis.update();\n\t\t}\n\n\t\treturn true;\n\t}\n};\n\njQuery.extend( jQuery.fx, {\n\ttick: function() {\n\t\tvar timer,\n\t\t\ttimers = jQuery.timers,\n\t\t\ti = 0;\n\n\t\tfor ( ; i < timers.length; i++ ) {\n\t\t\ttimer = timers[ i ];\n\t\t\t// Checks the timer has not already been removed\n\t\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\t\ttimers.splice( i--, 1 );\n\t\t\t}\n\t\t}\n\n\t\tif ( !timers.length ) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t},\n\n\tinterval: 13,\n\n\tstop: function() {\n\t\tclearInterval( timerId );\n\t\ttimerId = null;\n\t},\n\n\tspeeds: {\n\t\tslow: 600,\n\t\tfast: 200,\n\t\t// Default speed\n\t\t_default: 400\n\t},\n\n\tstep: {\n\t\topacity: function( fx ) {\n\t\t\tjQuery.style( fx.elem, \"opacity\", fx.now );\n\t\t},\n\n\t\t_default: function( fx ) {\n\t\t\tif ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {\n\t\t\t\tfx.elem.style[ fx.prop ] = fx.now + fx.unit;\n\t\t\t} else {\n\t\t\t\tfx.elem[ fx.prop ] = fx.now;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Ensure props that can't be negative don't go there on undershoot easing\njQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {\n\t// exclude marginTop, marginLeft, marginBottom and marginRight from this list\n\tif ( prop.indexOf( \"margin\" ) ) {\n\t\tjQuery.fx.step[ prop ] = function( fx ) {\n\t\t\tjQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );\n\t\t};\n\t}\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\n\n// Try to restore the default display value of an element\nfunction defaultDisplay( nodeName ) {\n\n\tif ( !elemdisplay[ nodeName ] ) {\n\n\t\tvar body = document.body,\n\t\t\telem = jQuery( \"<\" + nodeName + \">\" ).appendTo( body ),\n\t\t\tdisplay = elem.css( \"display\" );\n\t\telem.remove();\n\n\t\t// If the simple way fails,\n\t\t// get element's real default display by attaching it to a temp iframe\n\t\tif ( display === \"none\" || display === \"\" ) {\n\t\t\t// No iframe to use yet, so create it\n\t\t\tif ( !iframe ) {\n\t\t\t\tiframe = document.createElement( \"iframe\" );\n\t\t\t\tiframe.frameBorder = iframe.width = iframe.height = 0;\n\t\t\t}\n\n\t\t\tbody.appendChild( iframe );\n\n\t\t\t// Create a cacheable copy of the iframe document on first call.\n\t\t\t// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n\t\t\t// document to it; WebKit & Firefox won't allow reusing the iframe document.\n\t\t\tif ( !iframeDoc || !iframe.createElement ) {\n\t\t\t\tiframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n\t\t\t\tiframeDoc.write( ( jQuery.support.boxModel ? \"<!doctype html>\" : \"\" ) + \"<html><body>\" );\n\t\t\t\tiframeDoc.close();\n\t\t\t}\n\n\t\t\telem = iframeDoc.createElement( nodeName );\n\n\t\t\tiframeDoc.body.appendChild( elem );\n\n\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\tbody.removeChild( iframe );\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn elemdisplay[ nodeName ];\n}\n\n\n\n\nvar getOffset,\n\trtable = /^t(?:able|d|h)$/i,\n\trroot = /^(?:body|html)$/i;\n\nif ( \"getBoundingClientRect\" in document.documentElement ) {\n\tgetOffset = function( elem, doc, docElem, box ) {\n\t\ttry {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t} catch(e) {}\n\n\t\t// Make sure we're not dealing with a disconnected DOM node\n\t\tif ( !box || !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box ? { top: box.top, left: box.left } : { top: 0, left: 0 };\n\t\t}\n\n\t\tvar body = doc.body,\n\t\t\twin = getWindow( doc ),\n\t\t\tclientTop  = docElem.clientTop  || body.clientTop  || 0,\n\t\t\tclientLeft = docElem.clientLeft || body.clientLeft || 0,\n\t\t\tscrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,\n\t\t\tscrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,\n\t\t\ttop  = box.top  + scrollTop  - clientTop,\n\t\t\tleft = box.left + scrollLeft - clientLeft;\n\n\t\treturn { top: top, left: left };\n\t};\n\n} else {\n\tgetOffset = function( elem, doc, docElem ) {\n\t\tvar computedStyle,\n\t\t\toffsetParent = elem.offsetParent,\n\t\t\tprevOffsetParent = elem,\n\t\t\tbody = doc.body,\n\t\t\tdefaultView = doc.defaultView,\n\t\t\tprevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,\n\t\t\ttop = elem.offsetTop,\n\t\t\tleft = elem.offsetLeft;\n\n\t\twhile ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {\n\t\t\tif ( jQuery.support.fixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcomputedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;\n\t\t\ttop  -= elem.scrollTop;\n\t\t\tleft -= elem.scrollLeft;\n\n\t\t\tif ( elem === offsetParent ) {\n\t\t\t\ttop  += elem.offsetTop;\n\t\t\t\tleft += elem.offsetLeft;\n\n\t\t\t\tif ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {\n\t\t\t\t\ttop  += parseFloat( computedStyle.borderTopWidth  ) || 0;\n\t\t\t\t\tleft += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\t\t\t\t}\n\n\t\t\t\tprevOffsetParent = offsetParent;\n\t\t\t\toffsetParent = elem.offsetParent;\n\t\t\t}\n\n\t\t\tif ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== \"visible\" ) {\n\t\t\t\ttop  += parseFloat( computedStyle.borderTopWidth  ) || 0;\n\t\t\t\tleft += parseFloat( computedStyle.borderLeftWidth ) || 0;\n\t\t\t}\n\n\t\t\tprevComputedStyle = computedStyle;\n\t\t}\n\n\t\tif ( prevComputedStyle.position === \"relative\" || prevComputedStyle.position === \"static\" ) {\n\t\t\ttop  += body.offsetTop;\n\t\t\tleft += body.offsetLeft;\n\t\t}\n\n\t\tif ( jQuery.support.fixedPosition && prevComputedStyle.position === \"fixed\" ) {\n\t\t\ttop  += Math.max( docElem.scrollTop, body.scrollTop );\n\t\t\tleft += Math.max( docElem.scrollLeft, body.scrollLeft );\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t};\n}\n\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar elem = this[0],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn null;\n\t}\n\n\tif ( elem === doc.body ) {\n\t\treturn jQuery.offset.bodyOffset( elem );\n\t}\n\n\treturn getOffset( elem, doc, doc.documentElement );\n};\n\njQuery.offset = {\n\n\tbodyOffset: function( body ) {\n\t\tvar top = body.offsetTop,\n\t\t\tleft = body.offsetLeft;\n\n\t\tif ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {\n\t\t\ttop  += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n\t\t\tleft += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t},\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[0] ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar elem = this[0],\n\n\t\t// Get *real* offsetParent\n\t\toffsetParent = this.offsetParent(),\n\n\t\t// Get correct offsets\n\t\toffset       = this.offset(),\n\t\tparentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\n\t\t// Subtract element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\toffset.top  -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n\t\toffset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\n\t\t// Add offsetParent borders\n\t\tparentOffset.top  += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n\t\tparentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\n\t\t// Subtract the two offsets\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top,\n\t\t\tleft: offset.left - parentOffset.left\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || document.body;\n\t\t\twhile ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\tjQuery.support.boxModel && win.document.documentElement[ method ] ||\n\t\t\t\t\t\twin.document.body[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\t top ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\n\n\n\n// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tvar clientProp = \"client\" + name,\n\t\tscrollProp = \"scroll\" + name,\n\t\toffsetProp = \"offset\" + name;\n\n\t// innerHeight and innerWidth\n\tjQuery.fn[ \"inner\" + name ] = function() {\n\t\tvar elem = this[0];\n\t\treturn elem ?\n\t\t\telem.style ?\n\t\t\tparseFloat( jQuery.css( elem, type, \"padding\" ) ) :\n\t\t\tthis[ type ]() :\n\t\t\tnull;\n\t};\n\n\t// outerHeight and outerWidth\n\tjQuery.fn[ \"outer\" + name ] = function( margin ) {\n\t\tvar elem = this[0];\n\t\treturn elem ?\n\t\t\telem.style ?\n\t\t\tparseFloat( jQuery.css( elem, type, margin ? \"margin\" : \"border\" ) ) :\n\t\t\tthis[ type ]() :\n\t\t\tnull;\n\t};\n\n\tjQuery.fn[ type ] = function( value ) {\n\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\tvar doc, docElemProp, orig, ret;\n\n\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat\n\t\t\t\tdoc = elem.document;\n\t\t\t\tdocElemProp = doc.documentElement[ clientProp ];\n\t\t\t\treturn jQuery.support.boxModel && docElemProp ||\n\t\t\t\t\tdoc.body && doc.body[ clientProp ] || docElemProp;\n\t\t\t}\n\n\t\t\t// Get document width or height\n\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height], whichever is greater\n\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t// when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]\n\t\t\t\t// so we can't use max, as it'll choose the incorrect offset[Width/Height]\n\t\t\t\t// instead we use the correct client[Width/Height]\n\t\t\t\t// support:IE6\n\t\t\t\tif ( doc[ clientProp ] >= doc[ scrollProp ] ) {\n\t\t\t\t\treturn doc[ clientProp ];\n\t\t\t\t}\n\n\t\t\t\treturn Math.max(\n\t\t\t\t\telem.body[ scrollProp ], doc[ scrollProp ],\n\t\t\t\t\telem.body[ offsetProp ], doc[ offsetProp ]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Get width or height on the element\n\t\t\tif ( value === undefined ) {\n\t\t\t\torig = jQuery.css( elem, type );\n\t\t\t\tret = parseFloat( orig );\n\t\t\t\treturn jQuery.isNumeric( ret ) ? ret : orig;\n\t\t\t}\n\n\t\t\t// Set the width or height on the element\n\t\t\tjQuery( elem ).css( type, value );\n\t\t}, type, value, arguments.length, null );\n\t};\n});\n\n\n\n\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n\n// Expose jQuery as an AMD module, but only for AMD loaders that\n// understand the issues with loading multiple versions of jQuery\n// in a page that all might call define(). The loader will indicate\n// they have special allowances for multiple jQuery versions by\n// specifying define.amd.jQuery = true. Register as a named module,\n// since jQuery can be concatenated with other files that may use define,\n// but not use a proper concatenation script that understands anonymous\n// AMD modules. A named AMD is safest and most robust way to register.\n// Lowercase jquery is used because AMD module names are derived from\n// file names, and jQuery is normally delivered in a lowercase file name.\n// Do this after creating the global so that if an AMD module wants to call\n// noConflict to hide this version of jQuery, it will work.\nif ( typeof define === \"function\" && define.amd && define.amd.jQuery ) {\n\tdefine( \"jquery\", [], function () { return jQuery; } );\n}\n\n\n\n})( window );\n"]}