10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*!
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * jQuery JavaScript Library v1.3.2
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * http://jquery.com/
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (c) 2009 John Resig
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Dual licensed under the MIT and GPL licenses.
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * http://docs.jquery.com/License
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Revision: 6246
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch(function(){
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Will speed up references to window, and allows munging its name.
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	window = this,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Will speed up references to undefined, and allows munging its name.
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	undefined,
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Map over jQuery in case of overwrite
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	_jQuery = window.jQuery,
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Map over the $ in case of overwrite
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	_$ = window.$,
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery = window.jQuery = window.$ = function( selector, context ) {
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// The jQuery object is actually just the init constructor 'enhanced'
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return new jQuery.fn.init( selector, context );
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// A simple way to check for HTML strings or ID strings
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// (both of which we optimize for)
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Is it a simple selector
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isSimple = /^.[^:#\[\.,]*$/;
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn = jQuery.prototype = {
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	init: function( selector, context ) {
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that a selection was provided
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		selector = selector || document;
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle $(DOMElement)
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( selector.nodeType ) {
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this[0] = selector;
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.length = 1;
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.context = selector;
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this;
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle HTML strings
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof selector === "string" ) {
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Are we dealing with HTML string or an ID?
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var match = quickExpr.exec( selector );
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Verify a match, and that no context was specified for #id
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( match && (match[1] || !context) ) {
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// HANDLE: $(html) -> $(array)
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( match[1] )
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					selector = jQuery.clean( [ match[1] ], context );
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// HANDLE: $("#id")
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				else {
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var elem = document.getElementById( match[3] );
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Handle the case where IE and Opera return items
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// by name instead of ID
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( elem && elem.id != match[3] )
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return jQuery().find( selector );
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Otherwise, we inject the element directly into the jQuery object
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var ret = jQuery( elem || [] );
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret.context = document;
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret.selector = selector;
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return ret;
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// HANDLE: $(expr, [context])
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// (which is just equivalent to: $(content).find(expr)
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return jQuery( context ).find( selector );
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// HANDLE: $(function)
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Shortcut for document ready
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else if ( jQuery.isFunction( selector ) )
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return jQuery( document ).ready( selector );
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that old selector state is passed along
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( selector.selector && selector.context ) {
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.selector = selector.selector;
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.context = selector.context;
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.setArray(jQuery.isArray( selector ) ?
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			selector :
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.makeArray(selector));
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Start with an empty selector
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	selector: "",
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// The current version of jQuery being used
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jquery: "1.3.2",
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// The number of elements contained in the matched element set
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	size: function() {
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.length;
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Get the Nth element in the matched element set OR
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Get the whole matched element set as a clean array
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	get: function( num ) {
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return num === undefined ?
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Return a 'clean' array
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			Array.prototype.slice.call( this ) :
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Return just the object
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this[ num ];
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Take an array of elements and push it onto the stack
1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// (returning the new matched element set)
1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	pushStack: function( elems, name, selector ) {
1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Build a new jQuery matched element set
1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = jQuery( elems );
1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Add the old object onto the stack (as a reference)
1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ret.prevObject = this;
1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ret.context = this.context;
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( name === "find" )
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret.selector = this.selector + (this.selector ? " " : "") + selector;
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		else if ( name )
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret.selector = this.selector + "." + name + "(" + selector + ")";
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Return the newly-formed element set
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Force the current matched set of elements to become
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// the specified array of elements (destroying the stack in the process)
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// You should use pushStack() in order to do this, but maintain the stack
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	setArray: function( elems ) {
1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Resetting the length to 0, then using the native Array push
1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// is a super-fast way to populate an object with array-like properties
1450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.length = 0;
1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Array.prototype.push.apply( this, elems );
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Execute a callback for every element in the matched set.
1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// (You can seed the arguments with an array of args, but this is
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// only used internally.)
1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	each: function( callback, args ) {
1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.each( this, callback, args );
1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Determine the position of an element within
1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// the matched set of elements
1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	index: function( elem ) {
1610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Locate the position of the desired element
1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.inArray(
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If it receives a jQuery object, the first element is used
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem && elem.jquery ? elem[0] : elem
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		, this );
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	attr: function( name, value, type ) {
1690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var options = name;
1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Look for the case where we're accessing a style value
1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof name === "string" )
1730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( value === undefined )
1740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return this[0] && jQuery[ type || "attr" ]( this[0], name );
1750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else {
1770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				options = {};
1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				options[ name ] = value;
1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Check to see if we're setting style values
1820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(i){
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set all the styles
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( name in options )
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.attr(
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					type ?
1870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						this.style :
1880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						this,
1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					name, jQuery.prop( this, options[ name ], type, i, name )
1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				);
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	css: function( key, value ) {
1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// ignore negative width and height values
1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			value = undefined;
1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.attr( key, value, "curCSS" );
1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	text: function( text ) {
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof text !== "object" && text != null )
2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = "";
2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.each( text || this, function(){
2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.each( this.childNodes, function(){
2090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.nodeType != 8 )
2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret += this.nodeType != 1 ?
2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						this.nodeValue :
2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.fn.text( [ this ] );
2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	wrapAll: function( html ) {
2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this[0] ) {
2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// The elements to wrap the target around
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var wrap = jQuery( html, this[0].ownerDocument ).clone();
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( this[0].parentNode )
2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				wrap.insertBefore( this[0] );
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			wrap.map(function(){
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var elem = this;
2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				while ( elem.firstChild )
2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem = elem.firstChild;
2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return elem;
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}).append(this);
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	wrapInner: function( html ) {
2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery( this ).contents().wrapAll( html );
2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	wrap: function( html ) {
2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
2480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery( this ).wrapAll( html );
2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	append: function() {
2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.domManip(arguments, true, function(elem){
2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (this.nodeType == 1)
2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.appendChild( elem );
2560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	prepend: function() {
2600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.domManip(arguments, true, function(elem){
2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (this.nodeType == 1)
2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.insertBefore( elem, this.firstChild );
2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	before: function() {
2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.domManip(arguments, false, function(elem){
2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.parentNode.insertBefore( elem, this );
2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	after: function() {
2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.domManip(arguments, false, function(elem){
2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.parentNode.insertBefore( elem, this.nextSibling );
2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	end: function() {
2790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.prevObject || jQuery( [] );
2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
2810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// For internal use only.
2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Behaves like an Array's method, not like a jQuery method.
2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	push: [].push,
2850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	sort: [].sort,
2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	splice: [].splice,
2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	find: function( selector ) {
2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this.length === 1 ) {
2900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var ret = this.pushStack( [], "find", selector );
2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret.length = 0;
2920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.find( selector, this[0], ret );
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return ret;
2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return jQuery.find( selector, elem );
2970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			})), "find", selector );
2980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	clone: function( events ) {
3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Do the clone
3030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = this.map(function(){
3040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// IE copies events bound via attachEvent when
3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// using cloneNode. Calling detachEvent on the
3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// clone will also remove the events from the orignal
3080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// In order to get around this, we use innerHTML.
3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Unfortunately, this means some modifications to
3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// attributes in IE that are actually only stored
3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// as properties will not be copied (such as the
3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// the name attribute on an input).
3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var html = this.outerHTML;
3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !html ) {
3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var div = this.ownerDocument.createElement("div");
3160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					div.appendChild( this.cloneNode(true) );
3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					html = div.innerHTML;
3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else
3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return this.cloneNode(true);
3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Copy the events from the original to the clone
3260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( events === true ) {
3270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var orig = this.find("*").andSelf(), i = 0;
3280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret.find("*").andSelf().each(function(){
3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.nodeName !== orig[i].nodeName )
3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return;
3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var events = jQuery.data( orig[i], "events" );
3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var type in events ) {
3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					for ( var handler in events[ type ] ) {
3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
3390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
3400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				i++;
3420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Return the cloned set
3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	filter: function( selector ) {
3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.pushStack(
3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.isFunction( selector ) &&
3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.grep(this, function(elem, i){
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return selector.call( elem, i );
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}) ||
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
3570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return elem.nodeType === 1;
3580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}) ), "filter", selector );
3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	closest: function( selector ) {
3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
3630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			closer = 0;
3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.map(function(){
3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var cur = this;
3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			while ( cur && cur.ownerDocument ) {
3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.data(cur, "closest", closer);
3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return cur;
3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				cur = cur.parentNode;
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				closer++;
3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	not: function( selector ) {
3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof selector === "string" )
3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// test special case where just one selector is passed in
3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( isSimple.test( selector ) )
3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
3830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				selector = jQuery.multiFilter( selector, this );
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.filter(function() {
3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
3890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
3900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
3910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	add: function( selector ) {
3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.pushStack( jQuery.unique( jQuery.merge(
3940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.get(),
3950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			typeof selector === "string" ?
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery( selector ) :
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.makeArray( selector )
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		)));
3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	is: function( selector ) {
4020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return !!selector && jQuery.multiFilter( selector, this ).length > 0;
4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	hasClass: function( selector ) {
4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return !!selector && this.is( "." + selector );
4070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	val: function( value ) {
4100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( value === undefined ) {
4110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var elem = this[0];
4120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( elem ) {
4140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if( jQuery.nodeName( elem, 'option' ) )
4150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return (elem.attributes.value || {}).specified ? elem.value : elem.text;
4160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// We need to handle select boxes special
4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( jQuery.nodeName( elem, "select" ) ) {
4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var index = elem.selectedIndex,
4200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						values = [],
4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						options = elem.options,
4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						one = elem.type == "select-one";
4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Nothing was selected
4250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( index < 0 )
4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return null;
4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Loop through all the selected options
4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						var option = options[ i ];
4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( option.selected ) {
4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							// Get the specifc value for the option
4340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							value = jQuery(option).val();
4350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							// We don't need an array for one selects
4370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							if ( one )
4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								return value;
4390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							// Multi-Selects return an array
4410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							values.push( value );
4420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						}
4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
4440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return values;
4460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Everything else, we just grab the value
4490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return (elem.value || "").replace(/\r/g, "");
4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return undefined;
4540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof value === "number" )
4570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			value += '';
4580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
4600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( this.nodeType != 1 )
4610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return;
4620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
4640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.checked = (jQuery.inArray(this.value, value) >= 0 ||
4650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.inArray(this.name, value) >= 0);
4660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else if ( jQuery.nodeName( this, "select" ) ) {
4680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var values = jQuery.makeArray(value);
4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery( "option", this ).each(function(){
4710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
4720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.inArray( this.text, values ) >= 0);
4730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				});
4740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !values.length )
4760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.selectedIndex = -1;
4770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else
4790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.value = value;
4800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
4810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	html: function( value ) {
4840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return value === undefined ?
4850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			(this[0] ?
4860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
4870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				null) :
4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.empty().append( value );
4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	replaceWith: function( value ) {
4920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.after( value ).remove();
4930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	eq: function( i ) {
4960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.slice( i, +i + 1 );
4970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
4980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	slice: function() {
5000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.pushStack( Array.prototype.slice.apply( this, arguments ),
5010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			"slice", Array.prototype.slice.call(arguments).join(",") );
5020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
5030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	map: function( callback ) {
5050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.pushStack( jQuery.map(this, function(elem, i){
5060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return callback.call( elem, i, elem );
5070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}));
5080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
5090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	andSelf: function() {
5110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.add( this.prevObject );
5120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
5130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	domManip: function( args, table, callback ) {
5150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this[0] ) {
5160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
5170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
5180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				first = fragment.firstChild;
5190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( first )
5210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0, l = this.length; i < l; i++ )
5220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					callback.call( root(this[i], first), this.length > 1 || i > 0 ?
5230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							fragment.cloneNode(true) : fragment );
5240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( scripts )
5260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.each( scripts, evalScript );
5270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
5280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
5300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		function root( elem, cur ) {
5320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
5330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				(elem.getElementsByTagName("tbody")[0] ||
5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem;
5360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
5370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
5380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
5390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Give the init function the jQuery prototype for later instantiation
5410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn.init.prototype = jQuery.fn;
5420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction evalScript( i, elem ) {
5440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( elem.src )
5450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.ajax({
5460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			url: elem.src,
5470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			async: false,
5480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			dataType: "script"
5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
5500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	else
5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
5530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( elem.parentNode )
5550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		elem.parentNode.removeChild( elem );
5560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction now(){
5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return +new Date;
5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
5610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend = jQuery.fn.extend = function() {
5630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// copy reference to target object
5640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
5650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Handle a deep copy situation
5670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( typeof target === "boolean" ) {
5680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		deep = target;
5690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		target = arguments[1] || {};
5700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// skip the boolean and the target
5710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		i = 2;
5720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
5730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Handle case when target is a string or something (possible in deep copy)
5750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( typeof target !== "object" && !jQuery.isFunction(target) )
5760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		target = {};
5770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// extend jQuery itself if only one argument is passed
5790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( length == i ) {
5800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		target = this;
5810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		--i;
5820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
5830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( ; i < length; i++ )
5850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Only deal with non-null/undefined values
5860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( (options = arguments[ i ]) != null )
5870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Extend the base object
5880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var name in options ) {
5890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var src = target[ name ], copy = options[ name ];
5900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Prevent never-ending loop
5920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( target === copy )
5930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					continue;
5940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
5950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Recurse if we're merging object values
5960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( deep && copy && typeof copy === "object" && !copy.nodeType )
5970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					target[ name ] = jQuery.extend( deep,
5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// Never move original objects, clone them
5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						src || ( copy.length != null ? [ ] : { } )
6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					, copy );
6010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Don't bring in undefined values
6030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				else if ( copy !== undefined )
6040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					target[ name ] = copy;
6050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
6070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Return the modified object
6090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return target;
6100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
6110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// exclude the following css properties to add px
6130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar	exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
6140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// cache defaultView
6150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	defaultView = document.defaultView || {},
6160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	toString = Object.prototype.toString;
6170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend({
6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	noConflict: function( deep ) {
6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		window.$ = _$;
6210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( deep )
6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			window.jQuery = _jQuery;
6240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery;
6260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// See test/unit/core.js for details concerning isFunction.
6290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Since version 1.3, DOM methods and functions like alert
6300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// aren't supported. They return false on IE (#2968).
6310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isFunction: function( obj ) {
6320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return toString.call(obj) === "[object Function]";
6330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isArray: function( obj ) {
6360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return toString.call(obj) === "[object Array]";
6370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// check if an element is in a (or is an) XML document
6400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isXMLDoc: function( elem ) {
6410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
6420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
6430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Evalulates a script in a global context
6460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	globalEval: function( data ) {
6470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( data && /\S/.test(data) ) {
6480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Inspired by code by Andrea Giammarchi
6490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
6500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var head = document.getElementsByTagName("head")[0] || document.documentElement,
6510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				script = document.createElement("script");
6520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			script.type = "text/javascript";
6540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.support.scriptEval )
6550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				script.appendChild( document.createTextNode( data ) );
6560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else
6570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				script.text = data;
6580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
6600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// This arises when a base node is used (#2709).
6610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			head.insertBefore( script, head.firstChild );
6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			head.removeChild( script );
6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	nodeName: function( elem, name ) {
6670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
6680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// args is for internal usage only
6710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	each: function( object, callback, args ) {
6720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var name, i = 0, length = object.length;
6730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( args ) {
6750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( length === undefined ) {
6760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( name in object )
6770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( callback.apply( object[ name ], args ) === false )
6780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						break;
6790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else
6800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( ; i < length; )
6810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( callback.apply( object[ i++ ], args ) === false )
6820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						break;
6830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// A special, fast, case for the most common use of each
6850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
6860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( length === undefined ) {
6870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( name in object )
6880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( callback.call( object[ name ], name, object[ name ] ) === false )
6890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						break;
6900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else
6910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var value = object[0];
6920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
6930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
6940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return object;
6960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
6970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
6980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	prop: function( elem, value, type, i, name ) {
6990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle executable functions
7000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( jQuery.isFunction( value ) )
7010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			value = value.call( elem, i );
7020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle passing in a number to a CSS property
7040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
7050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			value + "px" :
7060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			value;
7070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
7080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	className: {
7100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// internal only, use addClass("class")
7110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		add: function( elem, classNames ) {
7120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.each((classNames || "").split(/\s+/), function(i, className){
7130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
7140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem.className += (elem.className ? " " : "") + className;
7150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
7160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
7170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// internal only, use removeClass("class")
7190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		remove: function( elem, classNames ) {
7200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (elem.nodeType == 1)
7210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.className = classNames !== undefined ?
7220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.grep(elem.className.split(/\s+/), function(className){
7230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return !jQuery.className.has( classNames, className );
7240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}).join(" ") :
7250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					"";
7260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
7270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// internal only, use hasClass("class")
7290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		has: function( elem, className ) {
7300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
7310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
7320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
7330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// A method for quickly swapping in/out CSS properties to get correct calculations
7350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	swap: function( elem, options, callback ) {
7360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var old = {};
7370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Remember the old values, and insert the new ones
7380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var name in options ) {
7390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			old[ name ] = elem.style[ name ];
7400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem.style[ name ] = options[ name ];
7410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
7420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		callback.call( elem );
7440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Revert the old values
7460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var name in options )
7470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem.style[ name ] = old[ name ];
7480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
7490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	css: function( elem, name, force, extra ) {
7510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( name == "width" || name == "height" ) {
7520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
7530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			function getWH() {
7550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
7560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( extra === "border" )
7580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return;
7590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.each( which, function() {
7610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !extra )
7620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
7630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( extra === "margin" )
7640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
7650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					else
7660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
7670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				});
7680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
7690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( elem.offsetWidth !== 0 )
7710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				getWH();
7720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else
7730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.swap( elem, props, getWH );
7740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return Math.max(0, Math.round(val));
7760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
7770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.curCSS( elem, name, force );
7790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
7800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	curCSS: function( elem, name, force ) {
7820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret, style = elem.style;
7830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// We need to handle opacity special in IE
7850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( name == "opacity" && !jQuery.support.opacity ) {
7860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret = jQuery.attr( style, "opacity" );
7870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return ret == "" ?
7890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				"1" :
7900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret;
7910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
7920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure we're using the right name for getting the float value
7940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( name.match( /float/i ) )
7950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			name = styleFloat;
7960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
7970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !force && style && style[ name ] )
7980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret = style[ name ];
7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		else if ( defaultView.getComputedStyle ) {
8010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Only "float" is needed here
8030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( name.match( /float/i ) )
8040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				name = "float";
8050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
8070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var computedStyle = defaultView.getComputedStyle( elem, null );
8090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( computedStyle )
8110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret = computedStyle.getPropertyValue( name );
8120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// We should always get a number back from opacity
8140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( name == "opacity" && ret == "" )
8150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret = "1";
8160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else if ( elem.currentStyle ) {
8180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
8190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return letter.toUpperCase();
8200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
8210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
8230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// From the awesome hack by Dean Edwards
8250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
8260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If we're not dealing with a regular pixel number
8280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// but a number that has a weird ending, we need to convert it to pixels
8290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
8300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Remember the original values
8310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var left = style.left, rsLeft = elem.runtimeStyle.left;
8320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Put in the new values to get a computed value out
8340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.runtimeStyle.left = elem.currentStyle.left;
8350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				style.left = ret || 0;
8360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret = style.pixelLeft + "px";
8370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Revert the changed values
8390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				style.left = left;
8400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.runtimeStyle.left = rsLeft;
8410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
8420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
8430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
8450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
8460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	clean: function( elems, context, fragment ) {
8480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		context = context || document;
8490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// !context.createElement fails in IE with an error but returns typeof 'object'
8510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof context.createElement === "undefined" )
8520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
8530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If a single string is passed in and it's a single tag
8550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// just do a createElement and skip the rest
8560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
8570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
8580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( match )
8590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return [ context.createElement( match[1] ) ];
8600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
8610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = [], scripts = [], div = context.createElement("div");
8630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.each(elems, function(i, elem){
8650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof elem === "number" )
8660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem += '';
8670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !elem )
8690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return;
8700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Convert html string into DOM nodes
8720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof elem === "string" ) {
8730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Fix "XHTML"-style tags in all browsers
8740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
8750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
8760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						all :
8770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						front + "></" + tag + ">";
8780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				});
8790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Trim whitespace, otherwise indexOf won't work as expected
8810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
8820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var wrap =
8840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// option or optgroup
8850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!tags.indexOf("<opt") &&
8860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 1, "<select multiple='multiple'>", "</select>" ] ||
8870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!tags.indexOf("<leg") &&
8890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 1, "<fieldset>", "</fieldset>" ] ||
8900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
8920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 1, "<table>", "</table>" ] ||
8930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!tags.indexOf("<tr") &&
8950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 2, "<table><tbody>", "</tbody></table>" ] ||
8960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
8970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				 	// <thead> matched above
8980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
8990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!tags.indexOf("<col") &&
9020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
9030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// IE can't serialize <link> and <script> tags normally
9050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!jQuery.support.htmlSerialize &&
9060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 1, "div<div>", "</div>" ] ||
9070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					[ 0, "", "" ];
9090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Go to html and back, then peel off extra wrappers
9110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				div.innerHTML = wrap[1] + elem + wrap[2];
9120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Move to the right depth
9140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				while ( wrap[0]-- )
9150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					div = div.lastChild;
9160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Remove IE's autoinserted <tbody> from table fragments
9180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !jQuery.support.tbody ) {
9190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// String was a <table>, *may* have spurious <tbody>
9210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var hasBody = /<tbody/i.test(elem),
9220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						tbody = !tags.indexOf("<table") && !hasBody ?
9230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							div.firstChild && div.firstChild.childNodes :
9240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// String was a bare <thead> or <tfoot>
9260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						wrap[1] == "<table>" && !hasBody ?
9270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							div.childNodes :
9280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							[];
9290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					for ( var j = tbody.length - 1; j >= 0 ; --j )
9310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
9320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							tbody[ j ].parentNode.removeChild( tbody[ j ] );
9330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
9350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// IE completely kills leading whitespace when innerHTML is used
9370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
9380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
9390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem = jQuery.makeArray( div.childNodes );
9410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
9420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( elem.nodeType )
9440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret.push( elem );
9450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else
9460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret = jQuery.merge( ret, elem );
9470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
9490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( fragment ) {
9510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0; ret[i]; i++ ) {
9520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
9530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
9540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				} else {
9550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( ret[i].nodeType === 1 )
9560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
9570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					fragment.appendChild( ret[i] );
9580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
9590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
9600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return scripts;
9620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
9630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
9650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
9660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	attr: function( elem, name, value ) {
9680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// don't set attributes on text and comment nodes
9690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
9700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return undefined;
9710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var notxml = !jQuery.isXMLDoc( elem ),
9730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Whether we are setting (or getting)
9740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			set = value !== undefined;
9750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Try to normalize/fix the name
9770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		name = notxml && jQuery.props[ name ] || name;
9780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Only do all the following if this is a node (faster for style)
9800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// IE elem.getAttribute passes even for style
9810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem.tagName ) {
9820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// These attributes require special treatment
9840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var special = /href|src|style/.test( name );
9850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Safari mis-reports the default selected property of a hidden option
9870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Accessing the parent's selectedIndex property fixes it
9880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( name == "selected" && elem.parentNode )
9890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.parentNode.selectedIndex;
9900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If applicable, access the attribute via the DOM 0 way
9920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( name in elem && notxml && !special ) {
9930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( set ){
9940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// We can't allow the type property to be changed (since it causes problems in IE)
9950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
9960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						throw "type property can't be changed";
9970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
9980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem[ name ] = value;
9990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
10000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// browsers index elements by id/name on forms, give priority to attributes.
10020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
10030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return elem.getAttributeNode( name ).nodeValue;
10040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
10060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
10070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( name == "tabIndex" ) {
10080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var attributeNode = elem.getAttributeNode( "tabIndex" );
10090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return attributeNode && attributeNode.specified
10100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						? attributeNode.value
10110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						: elem.nodeName.match(/(button|input|object|select|textarea)/i)
10120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							? 0
10130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							: elem.nodeName.match(/^(a|area)$/i) && elem.href
10140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								? 0
10150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								: undefined;
10160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
10170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return elem[ name ];
10190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
10200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !jQuery.support.style && notxml &&  name == "style" )
10220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return jQuery.attr( elem.style, "cssText", value );
10230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( set )
10250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// convert the value to a string (all browsers do this but IE) see #1070
10260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.setAttribute( name, "" + value );
10270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var attr = !jQuery.support.hrefNormalized && notxml && special
10290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Some attributes require a special call on IE
10300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					? elem.getAttribute( name, 2 )
10310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					: elem.getAttribute( name );
10320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Non-existent attributes return null, we normalize to undefined
10340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return attr === null ? undefined : attr;
10350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
10360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// elem is actually elem.style ... set the style
10380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// IE uses filters for opacity
10400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !jQuery.support.opacity && name == "opacity" ) {
10410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( set ) {
10420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// IE has trouble with opacity if it does not have layout
10430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Force it by setting the zoom level
10440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.zoom = 1;
10450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Set the alpha filter to set the opacity
10470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
10480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					(parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
10490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
10500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
10520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
10530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				"";
10540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
10550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		name = name.replace(/-([a-z])/ig, function(all, letter){
10570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return letter.toUpperCase();
10580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
10590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( set )
10610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem[ name ] = value;
10620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return elem[ name ];
10640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
10650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	trim: function( text ) {
10670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return (text || "").replace( /^\s+|\s+$/g, "" );
10680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
10690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	makeArray: function( array ) {
10710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = [];
10720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( array != null ){
10740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var i = array.length;
10750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// The window, strings (and functions) also have 'length'
10760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
10770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret[0] = array;
10780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else
10790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				while( i )
10800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret[--i] = array[i];
10810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
10820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
10840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
10850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	inArray: function( elem, array ) {
10870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var i = 0, length = array.length; i < length; i++ )
10880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Use === because on IE, window == document
10890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( array[ i ] === elem )
10900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return i;
10910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return -1;
10930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
10940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
10950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	merge: function( first, second ) {
10960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// We have to loop this way because IE & Opera overwrite the length
10970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// expando of getElementsByTagName
10980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var i = 0, elem, pos = first.length;
10990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Also, we need to make sure that the correct elements are being returned
11000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// (IE returns comment nodes in a '*' query)
11010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !jQuery.support.getAll ) {
11020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			while ( (elem = second[ i++ ]) != null )
11030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.nodeType != 8 )
11040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					first[ pos++ ] = elem;
11050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else
11070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			while ( (elem = second[ i++ ]) != null )
11080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				first[ pos++ ] = elem;
11090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return first;
11110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
11120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	unique: function( array ) {
11140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = [], done = {};
11150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		try {
11170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, length = array.length; i < length; i++ ) {
11190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var id = jQuery.data( array[ i ] );
11200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !done[ id ] ) {
11220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					done[ id ] = true;
11230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret.push( array[ i ] );
11240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
11250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
11260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} catch( e ) {
11280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret = array;
11290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
11300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
11320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
11330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	grep: function( elems, callback, inv ) {
11350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = [];
11360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Go through the array, only saving the items
11380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// that pass the validator function
11390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var i = 0, length = elems.length; i < length; i++ )
11400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !inv != !callback( elems[ i ], i ) )
11410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret.push( elems[ i ] );
11420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
11440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
11450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	map: function( elems, callback ) {
11470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = [];
11480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Go through the array, translating each of the items to their
11500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// new value (or values).
11510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var i = 0, length = elems.length; i < length; i++ ) {
11520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var value = callback( elems[ i ], i );
11530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( value != null )
11550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				ret[ ret.length ] = value;
11560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
11570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret.concat.apply( [], ret );
11590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
11600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
11610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Use of jQuery.browser is deprecated.
11630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// It's included for backwards compatibility and plugins,
11640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// although they should work to migrate away.
11650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar userAgent = navigator.userAgent.toLowerCase();
11670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Figure out what browser is being used
11690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.browser = {
11700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
11710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	safari: /webkit/.test( userAgent ),
11720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	opera: /opera/.test( userAgent ),
11730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
11740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
11750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
11760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each({
11780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	parent: function(elem){return elem.parentNode;},
11790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	parents: function(elem){return jQuery.dir(elem,"parentNode");},
11800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
11810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
11820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
11830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
11840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
11850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	children: function(elem){return jQuery.sibling(elem.firstChild);},
11860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
11870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}, function(name, fn){
11880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[ name ] = function( selector ) {
11890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = jQuery.map( this, fn );
11900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( selector && typeof selector == "string" )
11920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret = jQuery.multiFilter( selector, ret );
11930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.pushStack( jQuery.unique( ret ), name, selector );
11950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
11960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
11970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
11980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each({
11990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	appendTo: "append",
12000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	prependTo: "prepend",
12010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	insertBefore: "before",
12020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	insertAfter: "after",
12030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	replaceAll: "replaceWith"
12040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}, function(name, original){
12050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[ name ] = function( selector ) {
12060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = [], insert = jQuery( selector );
12070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var i = 0, l = insert.length; i < l; i++ ) {
12090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var elems = (i > 0 ? this.clone(true) : this).get();
12100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
12110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			ret = ret.concat( elems );
12120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
12130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.pushStack( ret, name, selector );
12150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
12160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
12170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each({
12190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	removeAttr: function( name ) {
12200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.attr( this, name, "" );
12210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (this.nodeType == 1)
12220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.removeAttribute( name );
12230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
12240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	addClass: function( classNames ) {
12260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.className.add( this, classNames );
12270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
12280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	removeClass: function( classNames ) {
12300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.className.remove( this, classNames );
12310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
12320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	toggleClass: function( classNames, state ) {
12340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( typeof state !== "boolean" )
12350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			state = !jQuery.className.has( this, classNames );
12360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.className[ state ? "add" : "remove" ]( this, classNames );
12370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
12380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	remove: function( selector ) {
12400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
12410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Prevent memory leaks
12420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery( "*", this ).add([this]).each(function(){
12430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.remove(this);
12440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.removeData(this);
12450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
12460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (this.parentNode)
12470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.parentNode.removeChild( this );
12480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
12490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
12500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	empty: function() {
12520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Remove element nodes and prevent memory leaks
12530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery(this).children().remove();
12540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Remove any remaining nodes
12560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		while ( this.firstChild )
12570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.removeChild( this.firstChild );
12580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
12590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}, function(name, fn){
12600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[ name ] = function(){
12610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each( fn, arguments );
12620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
12630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
12640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Helper function used by the dimensions and offset modules
12660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction num(elem, prop) {
12670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
12680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
12690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar expando = "jQuery" + now(), uuid = 0, windowData = {};
12700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend({
12720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	cache: {},
12730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	data: function( elem, name, data ) {
12750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		elem = elem == window ?
12760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			windowData :
12770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem;
12780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var id = elem[ expando ];
12800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Compute a unique ID for the element
12820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !id )
12830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			id = elem[ expando ] = ++uuid;
12840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Only generate the data cache if we're
12860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// trying to access or manipulate it
12870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( name && !jQuery.cache[ id ] )
12880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.cache[ id ] = {};
12890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Prevent overriding the named cache with undefined values
12910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( data !== undefined )
12920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.cache[ id ][ name ] = data;
12930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
12940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Return the named cache data, or the ID for the element
12950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return name ?
12960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.cache[ id ][ name ] :
12970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			id;
12980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
12990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	removeData: function( elem, name ) {
13010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		elem = elem == window ?
13020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			windowData :
13030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem;
13040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var id = elem[ expando ];
13060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If we want to remove a specific section of the element's data
13080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( name ) {
13090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.cache[ id ] ) {
13100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Remove the section of cache data
13110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				delete jQuery.cache[ id ][ name ];
13120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// If we've removed all the data, remove the element's cache
13140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				name = "";
13150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( name in jQuery.cache[ id ] )
13170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
13180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !name )
13200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.removeData( elem );
13210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
13220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Otherwise, we want to remove all of the element's data
13240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
13250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Clean up the element expando
13260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			try {
13270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				delete elem[ expando ];
13280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} catch(e){
13290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// IE has trouble directly removing the expando
13300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// but it's ok with using removeAttribute
13310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.removeAttribute )
13320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem.removeAttribute( expando );
13330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
13340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Completely remove the data cache
13360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			delete jQuery.cache[ id ];
13370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
13380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
13390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	queue: function( elem, type, data ) {
13400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem ){
13410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type = (type || "fx") + "queue";
13430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var q = jQuery.data( elem, type );
13450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !q || jQuery.isArray(data) )
13470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				q = jQuery.data( elem, type, jQuery.makeArray(data) );
13480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else if( data )
13490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				q.push( data );
13500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
13520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return q;
13530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
13540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	dequeue: function( elem, type ){
13560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var queue = jQuery.queue( elem, type ),
13570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			fn = queue.shift();
13580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( !type || type === "fx" )
13600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			fn = queue[0];
13610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( fn !== undefined )
13630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			fn.call(elem);
13640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
13650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
13660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn.extend({
13680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	data: function( key, value ){
13690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var parts = key.split(".");
13700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		parts[1] = parts[1] ? "." + parts[1] : "";
13710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( value === undefined ) {
13730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
13740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( data === undefined && this.length )
13760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				data = jQuery.data( this[0], key );
13770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return data === undefined && parts[1] ?
13790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.data( parts[0] ) :
13800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				data;
13810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else
13820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
13830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.data( this, key, value );
13840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
13850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
13860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	removeData: function( key ){
13880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
13890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.removeData( this, key );
13900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
13910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
13920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	queue: function(type, data){
13930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof type !== "string" ) {
13940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data = type;
13950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type = "fx";
13960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
13970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
13980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( data === undefined )
13990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return jQuery.queue( this[0], type );
14000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
14020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var queue = jQuery.queue( this, type, data );
14030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			 if( type == "fx" && queue.length == 1 )
14050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				queue[0].call(this);
14060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
14070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
14080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	dequeue: function(type){
14090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
14100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.dequeue( this, type );
14110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
14120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
14130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});/*!
14140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Sizzle CSS Selector Engine - v0.9.3
14150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *  Copyright 2009, The Dojo Foundation
14160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *  Released under the MIT, BSD, and GPL Licenses.
14170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *  More information: http://sizzlejs.com/
14180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
14190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch(function(){
14200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
14220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	done = 0,
14230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	toString = Object.prototype.toString;
14240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar Sizzle = function(selector, context, results, seed) {
14260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	results = results || [];
14270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	context = context || document;
14280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( context.nodeType !== 1 && context.nodeType !== 9 )
14300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return [];
14310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !selector || typeof selector !== "string" ) {
14330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return results;
14340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
14350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var parts = [], m, set, checkSet, check, mode, extra, prune = true;
14370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Reset the position of the chunker regexp (start from head)
14390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	chunker.lastIndex = 0;
14400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	while ( (m = chunker.exec(selector)) !== null ) {
14420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		parts.push( m[1] );
14430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( m[2] ) {
14450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			extra = RegExp.rightContext;
14460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			break;
14470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
14480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
14490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( parts.length > 1 && origPOS.exec( selector ) ) {
14510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
14520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			set = posProcess( parts[0] + parts[1], context );
14530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
14540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			set = Expr.relative[ parts[0] ] ?
14550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				[ context ] :
14560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				Sizzle( parts.shift(), context );
14570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			while ( parts.length ) {
14590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				selector = parts.shift();
14600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( Expr.relative[ selector ] )
14620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					selector += parts.shift();
14630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				set = posProcess( selector, set );
14650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
14660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
14670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	} else {
14680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = seed ?
14690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			{ expr: parts.pop(), set: makeArray(seed) } :
14700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
14710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		set = Sizzle.filter( ret.expr, ret.set );
14720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( parts.length > 0 ) {
14740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			checkSet = makeArray(set);
14750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
14760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			prune = false;
14770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
14780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		while ( parts.length ) {
14800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var cur = parts.pop(), pop = cur;
14810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !Expr.relative[ cur ] ) {
14830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				cur = "";
14840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else {
14850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				pop = parts.pop();
14860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
14870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( pop == null ) {
14890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				pop = context;
14900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
14910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			Expr.relative[ cur ]( checkSet, pop, isXML(context) );
14930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
14940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
14950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
14960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !checkSet ) {
14970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		checkSet = set;
14980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
14990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !checkSet ) {
15010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		throw "Syntax error, unrecognized expression: " + (cur || selector);
15020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
15030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( toString.call(checkSet) === "[object Array]" ) {
15050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !prune ) {
15060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			results.push.apply( results, checkSet );
15070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else if ( context.nodeType === 1 ) {
15080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0; checkSet[i] != null; i++ ) {
15090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
15100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					results.push( set[i] );
15110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
15120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
15130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
15140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0; checkSet[i] != null; i++ ) {
15150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
15160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					results.push( set[i] );
15170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
15180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
15190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
15200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	} else {
15210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		makeArray( checkSet, results );
15220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
15230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( extra ) {
15250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Sizzle( extra, context, results, seed );
15260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( sortOrder ) {
15280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			hasDuplicate = false;
15290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			results.sort(sortOrder);
15300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( hasDuplicate ) {
15320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 1; i < results.length; i++ ) {
15330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( results[i] === results[i-1] ) {
15340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						results.splice(i--, 1);
15350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
15360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
15370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
15380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
15390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
15400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return results;
15420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
15430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSizzle.matches = function(expr, set){
15450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return Sizzle(expr, null, null, set);
15460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
15470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSizzle.find = function(expr, context, isXML){
15490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var set, match;
15500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !expr ) {
15520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return [];
15530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
15540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
15560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var type = Expr.order[i], match;
15570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( (match = Expr.match[ type ].exec( expr )) ) {
15590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var left = RegExp.leftContext;
15600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( left.substr( left.length - 1 ) !== "\\" ) {
15620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				match[1] = (match[1] || "").replace(/\\/g, "");
15630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				set = Expr.find[ type ]( match, context, isXML );
15640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( set != null ) {
15650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					expr = expr.replace( Expr.match[ type ], "" );
15660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
15670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
15680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
15690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
15700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
15710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !set ) {
15730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		set = context.getElementsByTagName("*");
15740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
15750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return {set: set, expr: expr};
15770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
15780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSizzle.filter = function(expr, set, inplace, not){
15800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var old = expr, result = [], curLoop = set, match, anyFound,
15810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		isXMLFilter = set && set[0] && isXML(set[0]);
15820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	while ( expr && set.length ) {
15840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var type in Expr.filter ) {
15850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( (match = Expr.match[ type ].exec( expr )) != null ) {
15860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var filter = Expr.filter[ type ], found, item;
15870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				anyFound = false;
15880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( curLoop == result ) {
15900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					result = [];
15910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
15920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( Expr.preFilter[ type ] ) {
15940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
15950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
15960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !match ) {
15970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						anyFound = found = true;
15980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} else if ( match === true ) {
15990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						continue;
16000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
16010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
16020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( match ) {
16040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
16050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( item ) {
16060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							found = filter( item, match, i, curLoop );
16070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							var pass = not ^ !!found;
16080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							if ( inplace && found != null ) {
16100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								if ( pass ) {
16110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch									anyFound = true;
16120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								} else {
16130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch									curLoop[i] = false;
16140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								}
16150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							} else if ( pass ) {
16160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								result.push( item );
16170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								anyFound = true;
16180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							}
16190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						}
16200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
16210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
16220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( found !== undefined ) {
16240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !inplace ) {
16250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						curLoop = result;
16260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
16270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					expr = expr.replace( Expr.match[ type ], "" );
16290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !anyFound ) {
16310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return [];
16320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
16330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
16350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
16360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
16370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
16380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Improper expression
16400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( expr == old ) {
16410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( anyFound == null ) {
16420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				throw "Syntax error, unrecognized expression: " + expr;
16430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else {
16440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				break;
16450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
16460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
16470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		old = expr;
16490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
16500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return curLoop;
16520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
16530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar Expr = Sizzle.selectors = {
16550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	order: [ "ID", "NAME", "TAG" ],
16560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	match: {
16570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
16580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
16590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
16600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
16610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
16620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
16630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
16640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
16650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
16660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	attrMap: {
16670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		"class": "className",
16680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		"for": "htmlFor"
16690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
16700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	attrHandle: {
16710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		href: function(elem){
16720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.getAttribute("href");
16730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
16740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
16750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	relative: {
16760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		"+": function(checkSet, part, isXML){
16770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var isPartStr = typeof part === "string",
16780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				isTag = isPartStr && !/\W/.test(part),
16790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				isPartStrNotTag = isPartStr && !isTag;
16800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( isTag && !isXML ) {
16820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				part = part.toUpperCase();
16830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
16840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
16860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( (elem = checkSet[i]) ) {
16870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
16880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
16900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem || false :
16910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem === part;
16920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
16930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
16940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
16950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( isPartStrNotTag ) {
16960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				Sizzle.filter( part, checkSet, true );
16970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
16980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
16990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		">": function(checkSet, part, isXML){
17000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var isPartStr = typeof part === "string";
17010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( isPartStr && !/\W/.test(part) ) {
17030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				part = isXML ? part : part.toUpperCase();
17040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
17060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var elem = checkSet[i];
17070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( elem ) {
17080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						var parent = elem.parentNode;
17090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						checkSet[i] = parent.nodeName === part ? parent : false;
17100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
17110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
17120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else {
17130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
17140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var elem = checkSet[i];
17150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( elem ) {
17160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						checkSet[i] = isPartStr ?
17170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							elem.parentNode :
17180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							elem.parentNode === part;
17190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
17200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
17210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( isPartStr ) {
17230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					Sizzle.filter( part, checkSet, true );
17240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
17250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
17270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		"": function(checkSet, part, isXML){
17280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var doneName = done++, checkFn = dirCheck;
17290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !part.match(/\W/) ) {
17310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var nodeCheck = part = isXML ? part : part.toUpperCase();
17320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				checkFn = dirNodeCheck;
17330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
17360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
17370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		"~": function(checkSet, part, isXML){
17380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var doneName = done++, checkFn = dirCheck;
17390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof part === "string" && !part.match(/\W/) ) {
17410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var nodeCheck = part = isXML ? part : part.toUpperCase();
17420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				checkFn = dirNodeCheck;
17430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
17460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
17470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
17480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	find: {
17490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ID: function(match, context, isXML){
17500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof context.getElementById !== "undefined" && !isXML ) {
17510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var m = context.getElementById(match[1]);
17520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return m ? [m] : [];
17530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
17550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		NAME: function(match, context, isXML){
17560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof context.getElementsByName !== "undefined" ) {
17570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var ret = [], results = context.getElementsByName(match[1]);
17580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0, l = results.length; i < l; i++ ) {
17600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( results[i].getAttribute("name") === match[1] ) {
17610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						ret.push( results[i] );
17620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
17630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
17640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return ret.length === 0 ? null : ret;
17660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
17680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		TAG: function(match, context){
17690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return context.getElementsByTagName(match[1]);
17700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
17710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
17720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	preFilter: {
17730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		CLASS: function(match, curLoop, inplace, result, not, isXML){
17740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			match = " " + match[1].replace(/\\/g, "") + " ";
17750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( isXML ) {
17770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return match;
17780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
17810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem ) {
17820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
17830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( !inplace )
17840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							result.push( elem );
17850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} else if ( inplace ) {
17860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						curLoop[i] = false;
17870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
17880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
17890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
17900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
17910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return false;
17920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
17930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ID: function(match){
17940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match[1].replace(/\\/g, "");
17950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
17960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		TAG: function(match, curLoop){
17970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0; curLoop[i] === false; i++ ){}
17980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
17990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		CHILD: function(match){
18010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( match[1] == "nth" ) {
18020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
18030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
18040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
18050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
18060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// calculate the numbers (first)n+(last) including if they are negative
18080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				match[2] = (test[1] + (test[2] || 1)) - 0;
18090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				match[3] = test[3] - 0;
18100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
18110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// TODO: Move to normal caching system
18130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			match[0] = done++;
18140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match;
18160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ATTR: function(match, curLoop, inplace, result, not, isXML){
18180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var name = match[1].replace(/\\/g, "");
18190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !isXML && Expr.attrMap[name] ) {
18210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				match[1] = Expr.attrMap[name];
18220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
18230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( match[2] === "~=" ) {
18250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				match[4] = " " + match[4] + " ";
18260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
18270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match;
18290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		PSEUDO: function(match, curLoop, inplace, result, not){
18310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( match[1] === "not" ) {
18320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// If we're dealing with a complex expression, or a simple one
18330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
18340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					match[3] = Sizzle(match[3], null, null, curLoop);
18350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				} else {
18360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
18370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !inplace ) {
18380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						result.push.apply( result, ret );
18390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
18400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return false;
18410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
18420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
18430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return true;
18440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
18450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
18460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match;
18470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		POS: function(match){
18490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			match.unshift( true );
18500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match;
18510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
18520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
18530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	filters: {
18540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		enabled: function(elem){
18550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.disabled === false && elem.type !== "hidden";
18560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		disabled: function(elem){
18580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.disabled === true;
18590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		checked: function(elem){
18610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.checked === true;
18620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		selected: function(elem){
18640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Accessing this property makes selected-by-default
18650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// options in Safari work properly
18660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem.parentNode.selectedIndex;
18670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.selected === true;
18680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		parent: function(elem){
18700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return !!elem.firstChild;
18710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		empty: function(elem){
18730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return !elem.firstChild;
18740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		has: function(elem, i, match){
18760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return !!Sizzle( match[3], elem ).length;
18770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		header: function(elem){
18790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return /h\d/i.test( elem.nodeName );
18800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		text: function(elem){
18820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "text" === elem.type;
18830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		radio: function(elem){
18850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "radio" === elem.type;
18860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		checkbox: function(elem){
18880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "checkbox" === elem.type;
18890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		file: function(elem){
18910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "file" === elem.type;
18920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		password: function(elem){
18940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "password" === elem.type;
18950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		submit: function(elem){
18970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "submit" === elem.type;
18980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
18990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		image: function(elem){
19000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "image" === elem.type;
19010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		reset: function(elem){
19030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "reset" === elem.type;
19040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		button: function(elem){
19060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
19070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		input: function(elem){
19090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return /input|select|textarea|button/i.test(elem.nodeName);
19100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
19110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
19120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	setFilters: {
19130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		first: function(elem, i){
19140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return i === 0;
19150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		last: function(elem, i, match, array){
19170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return i === array.length - 1;
19180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		even: function(elem, i){
19200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return i % 2 === 0;
19210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		odd: function(elem, i){
19230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return i % 2 === 1;
19240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		lt: function(elem, i, match){
19260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return i < match[3] - 0;
19270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		gt: function(elem, i, match){
19290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return i > match[3] - 0;
19300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		nth: function(elem, i, match){
19320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match[3] - 0 == i;
19330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		eq: function(elem, i, match){
19350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return match[3] - 0 == i;
19360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
19370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
19380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	filter: {
19390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		PSEUDO: function(elem, match, i, array){
19400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var name = match[1], filter = Expr.filters[ name ];
19410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( filter ) {
19430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return filter( elem, i, match, array );
19440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else if ( name === "contains" ) {
19450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
19460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else if ( name === "not" ) {
19470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var not = match[3];
19480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0, l = not.length; i < l; i++ ) {
19500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( not[i] === elem ) {
19510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return false;
19520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
19530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
19540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return true;
19560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
19570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
19580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		CHILD: function(elem, match){
19590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var type = match[1], node = elem;
19600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			switch (type) {
19610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				case 'only':
19620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				case 'first':
19630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					while (node = node.previousSibling)  {
19640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( node.nodeType === 1 ) return false;
19650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
19660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( type == 'first') return true;
19670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					node = elem;
19680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				case 'last':
19690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					while (node = node.nextSibling)  {
19700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( node.nodeType === 1 ) return false;
19710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
19720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return true;
19730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				case 'nth':
19740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var first = match[2], last = match[3];
19750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( first == 1 && last == 0 ) {
19770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return true;
19780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
19790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var doneName = match[0],
19810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						parent = elem.parentNode;
19820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
19840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						var count = 0;
19850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						for ( node = parent.firstChild; node; node = node.nextSibling ) {
19860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							if ( node.nodeType === 1 ) {
19870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								node.nodeIndex = ++count;
19880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							}
19890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						}
19900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						parent.sizcache = doneName;
19910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
19920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
19930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var diff = elem.nodeIndex - last;
19940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( first == 0 ) {
19950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return diff == 0;
19960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} else {
19970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return ( diff % first == 0 && diff / first >= 0 );
19980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
19990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
20000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
20010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ID: function(elem, match){
20020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.nodeType === 1 && elem.getAttribute("id") === match;
20030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
20040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		TAG: function(elem, match){
20050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
20060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
20070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		CLASS: function(elem, match){
20080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return (" " + (elem.className || elem.getAttribute("class")) + " ")
20090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				.indexOf( match ) > -1;
20100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
20110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ATTR: function(elem, match){
20120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var name = match[1],
20130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				result = Expr.attrHandle[ name ] ?
20140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					Expr.attrHandle[ name ]( elem ) :
20150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem[ name ] != null ?
20160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem[ name ] :
20170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem.getAttribute( name ),
20180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value = result + "",
20190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type = match[2],
20200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				check = match[4];
20210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return result == null ?
20230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "!=" :
20240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "=" ?
20250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value === check :
20260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "*=" ?
20270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value.indexOf(check) >= 0 :
20280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "~=" ?
20290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				(" " + value + " ").indexOf(check) >= 0 :
20300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				!check ?
20310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value && result !== false :
20320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "!=" ?
20330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value != check :
20340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "^=" ?
20350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value.indexOf(check) === 0 :
20360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "$=" ?
20370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value.substr(value.length - check.length) === check :
20380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type === "|=" ?
20390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				value === check || value.substr(0, check.length + 1) === check + "-" :
20400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				false;
20410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
20420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		POS: function(elem, match, i, array){
20430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var name = match[2], filter = Expr.setFilters[ name ];
20440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( filter ) {
20460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return filter( elem, i, match, array );
20470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
20480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
20490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
20500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
20510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar origPOS = Expr.match.POS;
20530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfor ( var type in Expr.match ) {
20550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
20560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
20570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar makeArray = function(array, results) {
20590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	array = Array.prototype.slice.call( array );
20600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( results ) {
20620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		results.push.apply( results, array );
20630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return results;
20640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
20650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return array;
20670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
20680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Perform a simple check to determine if the browser is capable of
20700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// converting a NodeList to an array using builtin methods.
20710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtry {
20720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Array.prototype.slice.call( document.documentElement.childNodes );
20730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Provide a fallback method if it does not work
20750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} catch(e){
20760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	makeArray = function(array, results) {
20770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = results || [];
20780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( toString.call(array) === "[object Array]" ) {
20800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			Array.prototype.push.apply( ret, array );
20810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
20820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof array.length === "number" ) {
20830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0, l = array.length; i < l; i++ ) {
20840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret.push( array[i] );
20850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
20860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else {
20870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0; array[i]; i++ ) {
20880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ret.push( array[i] );
20890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
20900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
20910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
20920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
20940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
20950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
20960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar sortOrder;
20980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
20990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochif ( document.documentElement.compareDocumentPosition ) {
21000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	sortOrder = function( a, b ) {
21010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
21020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( ret === 0 ) {
21030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			hasDuplicate = true;
21040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
21050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
21060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
21070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} else if ( "sourceIndex" in document.documentElement ) {
21080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	sortOrder = function( a, b ) {
21090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = a.sourceIndex - b.sourceIndex;
21100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( ret === 0 ) {
21110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			hasDuplicate = true;
21120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
21130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
21140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
21150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} else if ( document.createRange ) {
21160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	sortOrder = function( a, b ) {
21170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
21180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		aRange.selectNode(a);
21190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		aRange.collapse(true);
21200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		bRange.selectNode(b);
21210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		bRange.collapse(true);
21220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
21230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( ret === 0 ) {
21240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			hasDuplicate = true;
21250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
21260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return ret;
21270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
21280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
21290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Check to see if the browser returns elements by name when
21310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// querying by getElementById (and provide a workaround)
21320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch(function(){
21330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// We're going to inject a fake input element with a specified name
21340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var form = document.createElement("form"),
21350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		id = "script" + (new Date).getTime();
21360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	form.innerHTML = "<input name='" + id + "'/>";
21370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Inject it into the root element, check its status, and remove it quickly
21390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var root = document.documentElement;
21400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	root.insertBefore( form, root.firstChild );
21410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// The workaround has to do additional checks after a getElementById
21430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Which slows things down for other browsers (hence the branching)
21440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !!document.getElementById( id ) ) {
21450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Expr.find.ID = function(match, context, isXML){
21460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( typeof context.getElementById !== "undefined" && !isXML ) {
21470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var m = context.getElementById(match[1]);
21480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
21490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
21500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
21510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Expr.filter.ID = function(elem, match){
21530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
21540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.nodeType === 1 && node && node.nodeValue === match;
21550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
21560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
21570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	root.removeChild( form );
21590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
21600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch(function(){
21620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Check to see if the browser returns only elements
21630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// when doing getElementsByTagName("*")
21640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Create a fake element
21660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var div = document.createElement("div");
21670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.appendChild( document.createComment("") );
21680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Make sure no comments are found
21700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( div.getElementsByTagName("*").length > 0 ) {
21710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Expr.find.TAG = function(match, context){
21720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var results = context.getElementsByTagName(match[1]);
21730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Filter out possible comments
21750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( match[1] === "*" ) {
21760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var tmp = [];
21770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0; results[i]; i++ ) {
21790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( results[i].nodeType === 1 ) {
21800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						tmp.push( results[i] );
21810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
21820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
21830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				results = tmp;
21850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
21860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return results;
21880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
21890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
21900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
21910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Check to see if an attribute returns normalized href attributes
21920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.innerHTML = "<a href='#'></a>";
21930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
21940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			div.firstChild.getAttribute("href") !== "#" ) {
21950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Expr.attrHandle.href = function(elem){
21960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return elem.getAttribute("href", 2);
21970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
21980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
21990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
22000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochif ( document.querySelectorAll ) (function(){
22020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var oldSizzle = Sizzle, div = document.createElement("div");
22030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.innerHTML = "<p class='TEST'></p>";
22040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Safari can't handle uppercase or unicode characters when
22060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// in quirks mode.
22070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
22080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return;
22090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
22100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Sizzle = function(query, context, extra, seed){
22120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		context = context || document;
22130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Only use querySelectorAll on non-XML documents
22150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// (ID selectors don't work in non-HTML documents)
22160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !seed && context.nodeType === 9 && !isXML(context) ) {
22170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			try {
22180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return makeArray( context.querySelectorAll(query), extra );
22190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} catch(e){}
22200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
22210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return oldSizzle(query, context, extra, seed);
22230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
22240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Sizzle.find = oldSizzle.find;
22260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Sizzle.filter = oldSizzle.filter;
22270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Sizzle.selectors = oldSizzle.selectors;
22280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Sizzle.matches = oldSizzle.matches;
22290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
22300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochif ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
22320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var div = document.createElement("div");
22330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
22340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Opera can't find a second classname (in 9.6)
22360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( div.getElementsByClassName("e").length === 0 )
22370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return;
22380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Safari caches class attributes, doesn't catch changes (in 3.2)
22400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.lastChild.className = "e";
22410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( div.getElementsByClassName("e").length === 1 )
22430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return;
22440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Expr.order.splice(1, 0, "CLASS");
22460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	Expr.find.CLASS = function(match, context, isXML) {
22470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
22480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return context.getElementsByClassName(match[1]);
22490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
22500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
22510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
22520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
22540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var sibDir = dir == "previousSibling" && !isXML;
22550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
22560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var elem = checkSet[i];
22570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem ) {
22580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( sibDir && elem.nodeType === 1 ){
22590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.sizcache = doneName;
22600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.sizset = i;
22610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
22620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem = elem[dir];
22630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var match = false;
22640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			while ( elem ) {
22660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.sizcache === doneName ) {
22670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					match = checkSet[elem.sizset];
22680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
22690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
22700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.nodeType === 1 && !isXML ){
22720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem.sizcache = doneName;
22730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					elem.sizset = i;
22740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
22750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.nodeName === cur ) {
22770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					match = elem;
22780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
22790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
22800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem = elem[dir];
22820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
22830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			checkSet[i] = match;
22850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
22860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
22870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
22880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
22890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
22900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var sibDir = dir == "previousSibling" && !isXML;
22910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
22920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var elem = checkSet[i];
22930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem ) {
22940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( sibDir && elem.nodeType === 1 ) {
22950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.sizcache = doneName;
22960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem.sizset = i;
22970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
22980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem = elem[dir];
22990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var match = false;
23000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			while ( elem ) {
23020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.sizcache === doneName ) {
23030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					match = checkSet[elem.sizset];
23040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
23050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
23060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( elem.nodeType === 1 ) {
23080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !isXML ) {
23090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem.sizcache = doneName;
23100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem.sizset = i;
23110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
23120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( typeof cur !== "string" ) {
23130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( elem === cur ) {
23140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							match = true;
23150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							break;
23160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						}
23170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
23190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						match = elem;
23200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						break;
23210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
23220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
23230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem = elem[dir];
23250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
23260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			checkSet[i] = match;
23280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
23290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
23300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
23310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar contains = document.compareDocumentPosition ?  function(a, b){
23330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return a.compareDocumentPosition(b) & 16;
23340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} : function(a, b){
23350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return a !== b && (a.contains ? a.contains(b) : true);
23360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar isXML = function(elem){
23390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
23400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		!!elem.ownerDocument && isXML( elem.ownerDocument );
23410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar posProcess = function(selector, context){
23440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var tmpSet = [], later = "", match,
23450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		root = context.nodeType ? [context] : context;
23460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Position selectors must be done after the filter
23480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// And so must :not(positional) so we move all PSEUDOs to the end
23490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
23500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		later += match[0];
23510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		selector = selector.replace( Expr.match.PSEUDO, "" );
23520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
23530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	selector = Expr.relative[selector] ? selector + "*" : selector;
23550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( var i = 0, l = root.length; i < l; i++ ) {
23570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		Sizzle( selector, root[i], tmpSet );
23580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
23590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return Sizzle.filter( later, tmpSet );
23610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// EXPOSE
23640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.find = Sizzle;
23650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.filter = Sizzle.filter;
23660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.expr = Sizzle.selectors;
23670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.expr[":"] = jQuery.expr.filters;
23680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSizzle.selectors.filters.hidden = function(elem){
23700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return elem.offsetWidth === 0 || elem.offsetHeight === 0;
23710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSizzle.selectors.filters.visible = function(elem){
23740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return elem.offsetWidth > 0 || elem.offsetHeight > 0;
23750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochSizzle.selectors.filters.animated = function(elem){
23780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return jQuery.grep(jQuery.timers, function(fn){
23790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return elem === fn.elem;
23800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}).length;
23810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.multiFilter = function( expr, elems, not ) {
23840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( not ) {
23850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		expr = ":not(" + expr + ")";
23860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
23870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return Sizzle.matches(expr, elems);
23890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
23900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
23910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.dir = function( elem, dir ){
23920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var matched = [], cur = elem[dir];
23930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	while ( cur && cur != document ) {
23940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( cur.nodeType == 1 )
23950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			matched.push( cur );
23960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		cur = cur[dir];
23970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
23980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return matched;
23990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
24000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.nth = function(cur, result, dir, elem){
24020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	result = result || 1;
24030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var num = 0;
24040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( ; cur; cur = cur[dir] )
24060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( cur.nodeType == 1 && ++num == result )
24070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			break;
24080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return cur;
24100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
24110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.sibling = function(n, elem){
24130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var r = [];
24140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( ; n; n = n.nextSibling ) {
24160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( n.nodeType == 1 && n != elem )
24170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			r.push( n );
24180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
24190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return r;
24210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
24220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochreturn;
24240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochwindow.Sizzle = Sizzle;
24260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
24280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
24290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * A number of helper functions used for managing events.
24300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Many of the ideas behind this code originated from
24310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Dean Edwards' addEvent library.
24320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
24330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.event = {
24340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Bind an event to an element
24360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Original by Dean Edwards
24370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	add: function(elem, types, handler, data) {
24380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem.nodeType == 3 || elem.nodeType == 8 )
24390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return;
24400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// For whatever reason, IE has trouble passing the window object
24420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// around, causing it to be cloned in the process
24430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem.setInterval && elem != window )
24440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			elem = window;
24450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that the function being executed has a unique ID
24470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !handler.guid )
24480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handler.guid = this.guid++;
24490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// if data is passed, bind to handler
24510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( data !== undefined ) {
24520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Create temporary function pointer to original handler
24530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var fn = handler;
24540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Create unique handler function, wrapped around original handler
24560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handler = this.proxy( fn );
24570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Store data in unique handler
24590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handler.data = data;
24600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
24610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Init the element's event structure
24630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
24640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
24650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Handle the second event of a trigger and when
24660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// an event is called after a page has unloaded
24670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
24680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.event.handle.apply(arguments.callee.elem, arguments) :
24690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					undefined;
24700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
24710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Add elem as a property of the handle function
24720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// This is to prevent a memory leak with non-native
24730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// event in IE.
24740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		handle.elem = elem;
24750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle multiple events separated by a space
24770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// jQuery(...).bind("mouseover mouseout", fn);
24780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.each(types.split(/\s+/), function(index, type) {
24790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Namespaced event handlers
24800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var namespaces = type.split(".");
24810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type = namespaces.shift();
24820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handler.type = namespaces.slice().sort().join(".");
24830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Get the current list of functions bound to this event
24850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var handlers = events[type];
24860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.event.specialAll[type] )
24880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.specialAll[type].setup.call(elem, data, namespaces);
24890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Init the event handler queue
24910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (!handlers) {
24920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				handlers = events[type] = {};
24930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
24940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Check for a special event handler
24950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Only use addEventListener/attachEvent if the special
24960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// events handler returns false
24970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
24980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Bind the global event handler to the element
24990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if (elem.addEventListener)
25000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem.addEventListener(type, handle, false);
25010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					else if (elem.attachEvent)
25020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem.attachEvent("on" + type, handle);
25030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
25040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
25050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Add the function to the element's handler list
25070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handlers[handler.guid] = handler;
25080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Keep track of which events have been used, for global triggering
25100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.global[type] = true;
25110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
25120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Nullify elem to prevent memory leaks in IE
25140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		elem = null;
25150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
25160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	guid: 1,
25180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	global: {},
25190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Detach an event or set of events from an element
25210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	remove: function(elem, types, handler) {
25220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// don't do events on text and comment nodes
25230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( elem.nodeType == 3 || elem.nodeType == 8 )
25240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return;
25250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var events = jQuery.data(elem, "events"), ret, index;
25270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( events ) {
25290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Unbind all events for the element
25300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
25310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var type in events )
25320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.remove( elem, type + (types || "") );
25330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else {
25340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// types is actually an event object here
25350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( types.type ) {
25360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					handler = types.handler;
25370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					types = types.type;
25380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
25390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Handle multiple events seperated by a space
25410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// jQuery(...).unbind("mouseover mouseout", fn);
25420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.each(types.split(/\s+/), function(index, type){
25430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Namespaced event handlers
25440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var namespaces = type.split(".");
25450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					type = namespaces.shift();
25460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
25470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( events[type] ) {
25490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// remove the given handler for the given type
25500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( handler )
25510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							delete events[type][handler.guid];
25520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// remove all handlers for the given type
25540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						else
25550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							for ( var handle in events[type] )
25560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								// Handle the removal of namespaced events
25570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								if ( namespace.test(events[type][handle].type) )
25580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch									delete events[type][handle];
25590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( jQuery.event.specialAll[type] )
25610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							jQuery.event.specialAll[type].teardown.call(elem, namespaces);
25620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// remove generic event handler if no more handlers exist
25640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						for ( ret in events[type] ) break;
25650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( !ret ) {
25660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {
25670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								if (elem.removeEventListener)
25680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
25690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch								else if (elem.detachEvent)
25700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
25710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							}
25720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							ret = null;
25730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							delete events[type];
25740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						}
25750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
25760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				});
25770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
25780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Remove the expando if it's no longer used
25800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( ret in events ) break;
25810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !ret ) {
25820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var handle = jQuery.data( elem, "handle" );
25830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( handle ) handle.elem = null;
25840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.removeData( elem, "events" );
25850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.removeData( elem, "handle" );
25860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
25870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
25880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
25890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// bubbling is internal
25910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	trigger: function( event, data, elem, bubbling ) {
25920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Event object or event type
25930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var type = event.type || event;
25940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
25950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( !bubbling ){
25960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event = typeof event === "object" ?
25970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// jQuery.Event object
25980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				event[expando] ? event :
25990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Object literal
26000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.extend( jQuery.Event(type), event ) :
26010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Just the event type (string)
26020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.Event(type);
26030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( type.indexOf("!") >= 0 ) {
26050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				event.type = type = type.slice(0, -1);
26060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				event.exclusive = true;
26070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
26080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Handle a global trigger
26100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !elem ) {
26110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Don't bubble custom events when global (to avoid too much overhead)
26120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				event.stopPropagation();
26130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Only trigger if we've ever bound an event for it
26140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.global[type] )
26150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.each( jQuery.cache, function(){
26160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( this.events && this.events[type] )
26170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							jQuery.event.trigger( event, data, this.handle.elem );
26180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					});
26190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
26200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Handle triggering a single element
26220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// don't do events on text and comment nodes
26240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
26250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return undefined;
26260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Clean up in case it is reused
26280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.result = undefined;
26290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.target = elem;
26300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Clone the incoming data, if any
26320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data = jQuery.makeArray(data);
26330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data.unshift( event );
26340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
26350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		event.currentTarget = elem;
26370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Trigger the event, it is assumed that "handle" is a function
26390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var handle = jQuery.data(elem, "handle");
26400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( handle )
26410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			handle.apply( elem, data );
26420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
26440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
26450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.result = false;
26460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Trigger the native events (except for clicks on links)
26480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
26490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.triggered = true;
26500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			try {
26510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elem[ type ]();
26520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// prevent IE from throwing an error for some hidden elements
26530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} catch (e) {}
26540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
26550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.triggered = false;
26570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !event.isPropagationStopped() ) {
26590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var parent = elem.parentNode || elem.ownerDocument;
26600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( parent )
26610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.trigger(event, data, parent, true);
26620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
26630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
26640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	handle: function(event) {
26660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// returned undefined or false
26670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var all, handlers;
26680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		event = arguments[0] = jQuery.event.fix( event || window.event );
26700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		event.currentTarget = this;
26710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Namespaced event handlers
26730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var namespaces = event.type.split(".");
26740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		event.type = namespaces.shift();
26750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Cache this now, all = true means, any handler
26770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		all = !namespaces.length && !event.exclusive;
26780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
26800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		handlers = ( jQuery.data(this, "events") || {} )[event.type];
26820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var j in handlers ) {
26840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var handler = handlers[j];
26850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Filter the functions by class
26870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( all || namespace.test(handler.type) ) {
26880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Pass in a reference to the handler function itself
26890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// So that we can later remove it
26900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				event.handler = handler;
26910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				event.data = handler.data;
26920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var ret = handler.apply(this, arguments);
26940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
26950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if( ret !== undefined ){
26960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					event.result = ret;
26970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( ret === false ) {
26980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						event.preventDefault();
26990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						event.stopPropagation();
27000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
27010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
27020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if( event.isImmediatePropagationStopped() )
27040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					break;
27050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
27070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
27080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
27090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
27110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	fix: function(event) {
27130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( event[expando] )
27140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return event;
27150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// store a copy of the original event object
27170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// and "clone" to set read-only properties
27180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var originalEvent = event;
27190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		event = jQuery.Event( originalEvent );
27200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( var i = this.props.length, prop; i; ){
27220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			prop = this.props[ --i ];
27230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event[ prop ] = originalEvent[ prop ];
27240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
27250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Fix target property, if necessary
27270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !event.target )
27280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
27290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// check if target is a textnode (safari)
27310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( event.target.nodeType == 3 )
27320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.target = event.target.parentNode;
27330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Add relatedTarget, if necessary
27350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !event.relatedTarget && event.fromElement )
27360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
27370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Calculate pageX/Y if missing and clientX/Y available
27390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( event.pageX == null && event.clientX != null ) {
27400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var doc = document.documentElement, body = document.body;
27410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
27420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
27430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
27440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Add which for key events
27460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
27470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.which = event.charCode || event.keyCode;
27480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
27500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !event.metaKey && event.ctrlKey )
27510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.metaKey = event.ctrlKey;
27520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Add which for click: 1 == left; 2 == middle; 3 == right
27540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Note: button is not normalized, so don't use it
27550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !event.which && event.button )
27560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
27570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return event;
27590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
27600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	proxy: function( fn, proxy ){
27620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		proxy = proxy || function(){ return fn.apply(this, arguments); };
27630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Set the guid of unique handler to the same of original handler, so it can be removed
27640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
27650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// So proxy can be declared as an argument
27660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return proxy;
27670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
27680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	special: {
27700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		ready: {
27710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Make sure the ready event is setup
27720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			setup: bindReady,
27730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			teardown: function() {}
27740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
27750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
27760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	specialAll: {
27780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		live: {
27790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			setup: function( selector, namespaces ){
27800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.add( this, namespaces[0], liveHandler );
27810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			},
27820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			teardown:  function( namespaces ){
27830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( namespaces.length ) {
27840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
27850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.each( (jQuery.data(this, "events").live || {}), function(){
27870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( name.test(this.type) )
27880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							remove++;
27890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					});
27900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( remove < 1 )
27920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.event.remove( this, namespaces[0], liveHandler );
27930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
27940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
27950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
27960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
27970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
27980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
27990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.Event = function( src ){
28000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Allow instantiation without the 'new' keyword
28010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if( !this.preventDefault )
28020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return new jQuery.Event(src);
28030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Event object
28050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if( src && src.type ){
28060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.originalEvent = src;
28070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.type = src.type;
28080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Event type
28090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}else
28100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.type = src;
28110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// timeStamp is buggy for some events on Firefox(#3843)
28130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// So we won't rely on the native value
28140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	this.timeStamp = now();
28150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Mark it as fixed
28170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	this[expando] = true;
28180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
28190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction returnFalse(){
28210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return false;
28220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
28230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction returnTrue(){
28240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return true;
28250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
28260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
28280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
28290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.Event.prototype = {
28300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	preventDefault: function() {
28310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.isDefaultPrevented = returnTrue;
28320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var e = this.originalEvent;
28340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( !e )
28350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return;
28360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// if preventDefault exists run it on the original event
28370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (e.preventDefault)
28380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			e.preventDefault();
28390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// otherwise set the returnValue property of the original event to false (IE)
28400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		e.returnValue = false;
28410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
28420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	stopPropagation: function() {
28430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.isPropagationStopped = returnTrue;
28440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var e = this.originalEvent;
28460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( !e )
28470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return;
28480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// if stopPropagation exists run it on the original event
28490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (e.stopPropagation)
28500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			e.stopPropagation();
28510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// otherwise set the cancelBubble property of the original event to true (IE)
28520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		e.cancelBubble = true;
28530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
28540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	stopImmediatePropagation:function(){
28550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.isImmediatePropagationStopped = returnTrue;
28560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.stopPropagation();
28570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
28580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isDefaultPrevented: returnFalse,
28590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isPropagationStopped: returnFalse,
28600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isImmediatePropagationStopped: returnFalse
28610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
28620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Checks if an event happened on an element within another element
28630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Used in jQuery.event.special.mouseenter and mouseleave handlers
28640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar withinElement = function(event) {
28650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Check if mouse(over|out) are still within the same parent element
28660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var parent = event.relatedTarget;
28670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Traverse up the tree
28680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	while ( parent && parent != this )
28690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		try { parent = parent.parentNode; }
28700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		catch(e) { parent = this; }
28710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if( parent != this ){
28730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// set the correct event type
28740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		event.type = event.data;
28750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// handle event if we actually just moused on to a non sub-element
28760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.event.handle.apply( this, arguments );
28770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
28780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
28790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each({
28810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	mouseover: 'mouseenter',
28820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	mouseout: 'mouseleave'
28830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}, function( orig, fix ){
28840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.event.special[ fix ] = {
28850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		setup: function(){
28860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.add( this, orig, withinElement, fix );
28870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
28880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		teardown: function(){
28890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.remove( this, orig, withinElement );
28900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
28910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
28920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
28930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
28940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn.extend({
28950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	bind: function( type, data, fn ) {
28960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return type == "unload" ? this.one(type, data, fn) : this.each(function(){
28970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.add( this, type, fn || data, fn && data );
28980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
28990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	one: function( type, data, fn ) {
29020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var one = jQuery.event.proxy( fn || data, function(event) {
29030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery(this).unbind(event, one);
29040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return (fn || data).apply( this, arguments );
29050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
29060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
29070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.add( this, type, one, fn && data);
29080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
29090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	unbind: function( type, fn ) {
29120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
29130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.remove( this, type, fn );
29140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
29150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	trigger: function( type, data ) {
29180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.each(function(){
29190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.trigger( type, data, this );
29200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
29210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	triggerHandler: function( type, data ) {
29240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( this[0] ){
29250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var event = jQuery.Event(type);
29260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.preventDefault();
29270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.stopPropagation();
29280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.trigger( event, data, this[0] );
29290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return event.result;
29300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
29310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	toggle: function( fn ) {
29340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Save reference to arguments for access in closure
29350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var args = arguments, i = 1;
29360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// link all the functions, so any of them can unbind this click handler
29380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		while( i < args.length )
29390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.proxy( fn, args[i++] );
29400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.click( jQuery.event.proxy( fn, function(event) {
29420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Figure out which function to execute
29430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.lastToggle = ( this.lastToggle || 0 ) % i;
29440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Make sure that clicks stop
29460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			event.preventDefault();
29470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// and execute the function
29490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return args[ this.lastToggle++ ].apply( this, arguments ) || false;
29500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}));
29510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	hover: function(fnOver, fnOut) {
29540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.mouseenter(fnOver).mouseleave(fnOut);
29550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	ready: function(fn) {
29580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Attach the listeners
29590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		bindReady();
29600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If the DOM is already ready
29620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( jQuery.isReady )
29630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Execute the function immediately
29640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			fn.call( document, jQuery );
29650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Otherwise, remember the function for later
29670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		else
29680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Add the function to the wait list
29690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.readyList.push( fn );
29700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
29720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	live: function( type, fn ){
29750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var proxy = jQuery.event.proxy( fn );
29760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		proxy.guid += this.selector + type;
29770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );
29790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
29810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
29820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	die: function( type, fn ){
29840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
29850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
29860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
29870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
29880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction liveHandler( event ){
29900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
29910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		stop = true,
29920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		elems = [];
29930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
29940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
29950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( check.test(fn.type) ) {
29960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var elem = jQuery(event.target).closest(fn.data)[0];
29970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( elem )
29980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				elems.push({ elem: elem, fn: fn });
29990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
30000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	});
30010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	elems.sort(function(a,b) {
30030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
30040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	});
30050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.each(elems, function(){
30070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this.fn.call(this.elem, event, this.fn.data) === false )
30080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return (stop = false);
30090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	});
30100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return stop;
30120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
30130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction liveConvert(type, selector){
30150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
30160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
30170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend({
30190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	isReady: false,
30200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	readyList: [],
30210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Handle when the DOM is ready
30220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	ready: function() {
30230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that the DOM is not already loaded
30240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !jQuery.isReady ) {
30250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Remember that the DOM is ready
30260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.isReady = true;
30270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If there are functions bound, to execute
30290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.readyList ) {
30300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Execute all of them
30310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.each( jQuery.readyList, function(){
30320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.call( document, jQuery );
30330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				});
30340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Reset the list of functions
30360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.readyList = null;
30370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
30380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Trigger any bound ready events
30400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery(document).triggerHandler("ready");
30410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
30420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
30430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
30440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar readyBound = false;
30460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction bindReady(){
30480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( readyBound ) return;
30490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	readyBound = true;
30500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Mozilla, Opera and webkit nightlies currently support this event
30520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( document.addEventListener ) {
30530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Use the handy event callback
30540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		document.addEventListener( "DOMContentLoaded", function(){
30550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
30560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.ready();
30570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}, false );
30580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// If IE event model is used
30600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	} else if ( document.attachEvent ) {
30610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// ensure firing before onload,
30620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// maybe late but safe also for iframes
30630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		document.attachEvent("onreadystatechange", function(){
30640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( document.readyState === "complete" ) {
30650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				document.detachEvent( "onreadystatechange", arguments.callee );
30660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.ready();
30670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
30680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
30690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If IE and not an iframe
30710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// continually check to see if the document is ready
30720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( document.documentElement.doScroll && window == window.top ) (function(){
30730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.isReady ) return;
30740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			try {
30760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// If IE is used, use the trick by Diego Perini
30770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// http://javascript.nwbox.com/IEContentLoaded/
30780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				document.documentElement.doScroll("left");
30790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} catch( error ) {
30800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				setTimeout( arguments.callee, 0 );
30810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				return;
30820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
30830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// and execute any waiting functions
30850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.ready();
30860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		})();
30870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
30880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// A fallback to window.onload, that will always work
30900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.event.add( window, "load", jQuery.ready );
30910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
30920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
30940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	"mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
30950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	"change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){
30960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
30970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Handle event binding
30980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[name] = function(fn){
30990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return fn ? this.bind(name, fn) : this.trigger(name);
31000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
31010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
31020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Prevent memory leaks in IE
31040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// And prevent errors on refresh with events like mouseover in other browsers
31050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Window isn't included so as not to unbind existing unload events
31060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery( window ).bind( 'unload', function(){
31070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	for ( var id in jQuery.cache )
31080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Skip the window
31090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( id != 1 && jQuery.cache[ id ].handle )
31100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.remove( jQuery.cache[ id ].handle.elem );
31110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
31120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch(function(){
31130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.support = {};
31150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var root = document.documentElement,
31170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		script = document.createElement("script"),
31180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		div = document.createElement("div"),
31190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		id = "script" + (new Date).getTime();
31200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.style.display = "none";
31220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	div.innerHTML = '   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
31230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var all = div.getElementsByTagName("*"),
31250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		a = div.getElementsByTagName("a")[0];
31260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Can't get basic test support
31280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( !all || !all.length || !a ) {
31290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return;
31300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
31310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.support = {
31330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// IE strips leading whitespace when .innerHTML is used
31340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		leadingWhitespace: div.firstChild.nodeType == 3,
31350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that tbody elements aren't automatically inserted
31370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// IE will insert them into empty tables
31380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		tbody: !div.getElementsByTagName("tbody").length,
31390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that you can get all elements in an <object> element
31410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// IE 7 always returns no results
31420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		objectAll: !!div.getElementsByTagName("object")[0]
31430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			.getElementsByTagName("*").length,
31440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that link elements get serialized correctly by innerHTML
31460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// This requires a wrapper element in IE
31470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		htmlSerialize: !!div.getElementsByTagName("link").length,
31480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Get the style information from getAttribute
31500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// (IE uses .cssText insted)
31510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		style: /red/.test( a.getAttribute("style") ),
31520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that URLs aren't manipulated
31540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// (IE normalizes it by default)
31550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		hrefNormalized: a.getAttribute("href") === "/a",
31560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that element opacity exists
31580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// (IE uses filter instead)
31590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		opacity: a.style.opacity === "0.5",
31600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Verify style float existence
31620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// (IE uses styleFloat instead of cssFloat)
31630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		cssFloat: !!a.style.cssFloat,
31640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Will be defined later
31660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		scriptEval: false,
31670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		noCloneEvent: true,
31680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		boxModel: null
31690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
31700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	script.type = "text/javascript";
31720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	try {
31730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
31740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	} catch(e){}
31750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	root.insertBefore( script, root.firstChild );
31770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Make sure that the execution of code works by injecting a script
31790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// tag with appendChild/createTextNode
31800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// (IE doesn't support this, fails, and uses .text instead)
31810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( window[ id ] ) {
31820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.support.scriptEval = true;
31830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		delete window[ id ];
31840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
31850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	root.removeChild( script );
31870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	if ( div.attachEvent && div.fireEvent ) {
31890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		div.attachEvent("onclick", function(){
31900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Cloning a node shouldn't copy over any
31910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// bound event handlers (IE does this)
31920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.support.noCloneEvent = false;
31930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			div.detachEvent("onclick", arguments.callee);
31940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
31950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		div.cloneNode(true).fireEvent("onclick");
31960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
31970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
31980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Figure out if the W3C box model works as expected
31990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// document.body must exist before we can do this
32000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery(function(){
32010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var div = document.createElement("div");
32020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		div.style.width = div.style.paddingLeft = "1px";
32030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		document.body.appendChild( div );
32050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
32060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		document.body.removeChild( div ).style.display = 'none';
32070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	});
32080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
32090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
32110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.props = {
32130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	"for": "htmlFor",
32140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	"class": "className",
32150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	"float": styleFloat,
32160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	cssFloat: styleFloat,
32170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	styleFloat: styleFloat,
32180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	readonly: "readOnly",
32190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	maxlength: "maxLength",
32200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	cellspacing: "cellSpacing",
32210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	rowspan: "rowSpan",
32220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	tabindex: "tabIndex"
32230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
32240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn.extend({
32250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Keep a copy of the old load
32260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	_load: jQuery.fn.load,
32270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	load: function( url, params, callback ) {
32290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( typeof url !== "string" )
32300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this._load( url );
32310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var off = url.indexOf(" ");
32330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( off >= 0 ) {
32340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var selector = url.slice(off, url.length);
32350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			url = url.slice(0, off);
32360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
32370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Default to a GET request
32390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var type = "GET";
32400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If the second parameter was provided
32420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( params )
32430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If it's a function
32440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.isFunction( params ) ) {
32450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// We assume that it's the callback
32460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				callback = params;
32470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				params = null;
32480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Otherwise, build a param string
32500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else if( typeof params === "object" ) {
32510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				params = jQuery.param( params );
32520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				type = "POST";
32530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
32540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var self = this;
32560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Request the remote document
32580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.ajax({
32590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			url: url,
32600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type: type,
32610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			dataType: "html",
32620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data: params,
32630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			complete: function(res, status){
32640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// If successful, inject the HTML into all the matched elements
32650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( status == "success" || status == "notmodified" )
32660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// See if a selector was specified
32670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					self.html( selector ?
32680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// Create a dummy div to hold the results
32690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery("<div/>")
32700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							// inject the contents of the document in, removing the scripts
32710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							// to avoid any 'Permission Denied' errors in IE
32720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
32730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							// Locate the specified elements
32750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							.find(selector) :
32760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// If not, just inject the full result
32780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						res.responseText );
32790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if( callback )
32810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					self.each( callback, [res.responseText, status, res] );
32820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
32830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
32840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
32850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
32860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	serialize: function() {
32880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.param(this.serializeArray());
32890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
32900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	serializeArray: function() {
32910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.map(function(){
32920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.elements ? jQuery.makeArray(this.elements) : this;
32930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		})
32940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		.filter(function(){
32950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.name && !this.disabled &&
32960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				(this.checked || /select|textarea/i.test(this.nodeName) ||
32970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					/text|hidden|password|search/i.test(this.type));
32980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		})
32990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		.map(function(i, elem){
33000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var val = jQuery(this).val();
33010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return val == null ? null :
33020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.isArray(val) ?
33030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.map( val, function(val, i){
33040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						return {name: elem.name, value: val};
33050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}) :
33060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					{name: elem.name, value: val};
33070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}).get();
33080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
33090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
33100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Attach a bunch of functions for handling common AJAX events
33120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
33130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[o] = function(f){
33140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.bind(o, f);
33150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
33160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
33170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar jsc = now();
33190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend({
33210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	get: function( url, data, callback, type ) {
33230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// shift arguments if data argument was ommited
33240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( jQuery.isFunction( data ) ) {
33250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			callback = data;
33260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data = null;
33270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
33280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.ajax({
33300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type: "GET",
33310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			url: url,
33320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data: data,
33330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			success: callback,
33340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			dataType: type
33350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
33360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
33370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	getScript: function( url, callback ) {
33390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.get(url, null, callback, "script");
33400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
33410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	getJSON: function( url, data, callback ) {
33430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.get(url, data, callback, "json");
33440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
33450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	post: function( url, data, callback, type ) {
33470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( jQuery.isFunction( data ) ) {
33480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			callback = data;
33490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data = {};
33500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
33510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.ajax({
33530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type: "POST",
33540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			url: url,
33550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data: data,
33560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			success: callback,
33570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			dataType: type
33580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
33590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
33600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	ajaxSetup: function( settings ) {
33620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.extend( jQuery.ajaxSettings, settings );
33630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
33640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	ajaxSettings: {
33660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		url: location.href,
33670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		global: true,
33680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		type: "GET",
33690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		contentType: "application/x-www-form-urlencoded",
33700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		processData: true,
33710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		async: true,
33720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		/*
33730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		timeout: 0,
33740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		data: null,
33750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		username: null,
33760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		password: null,
33770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		*/
33780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Create the request object; Microsoft failed to properly
33790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
33800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// This function can be overriden by calling jQuery.ajaxSetup
33810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		xhr:function(){
33820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
33830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
33840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		accepts: {
33850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xml: "application/xml, text/xml",
33860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			html: "text/html",
33870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			script: "text/javascript, application/javascript",
33880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			json: "application/json, text/javascript",
33890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			text: "text/plain",
33900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			_default: "*/*"
33910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
33920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
33930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Last-Modified header cache for next request
33950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	lastModified: {},
33960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
33970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	ajax: function( s ) {
33980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Extend the settings, but re-extend 's' so that it can be
33990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// checked again later (in the test suite, specifically)
34000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
34010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var jsonp, jsre = /=\?(&|$)/g, status, data,
34030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			type = s.type.toUpperCase();
34040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// convert data if not already a string
34060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.data && s.processData && typeof s.data !== "string" )
34070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.data = jQuery.param(s.data);
34080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Handle JSONP Parameter Callbacks
34100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.dataType == "jsonp" ) {
34110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( type == "GET" ) {
34120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !s.url.match(jsre) )
34130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
34140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else if ( !s.data || !s.data.match(jsre) )
34150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
34160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.dataType = "json";
34170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
34180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Build temporary JSONP function
34200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
34210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jsonp = "jsonp" + jsc++;
34220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Replace the =? sequence both in the query string and the data
34240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.data )
34250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
34260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.url = s.url.replace(jsre, "=" + jsonp + "$1");
34270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// We need to make sure
34290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// that a JSONP style response is executed properly
34300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.dataType = "script";
34310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Handle JSONP-style loading
34330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			window[ jsonp ] = function(tmp){
34340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				data = tmp;
34350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				success();
34360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				complete();
34370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Garbage collect
34380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				window[ jsonp ] = undefined;
34390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				try{ delete window[ jsonp ]; } catch(e){}
34400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( head )
34410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					head.removeChild( script );
34420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			};
34430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
34440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.dataType == "script" && s.cache == null )
34460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.cache = false;
34470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.cache === false && type == "GET" ) {
34490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var ts = now();
34500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// try replacing _= if it is there
34510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
34520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// if nothing was replaced, add timestamp to the end
34530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
34540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
34550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If data is available, append data to url for get requests
34570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.data && type == "GET" ) {
34580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
34590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// IE likes to send both get and post data, prevent this
34610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s.data = null;
34620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
34630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Watch for a new set of requests
34650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.global && ! jQuery.active++ )
34660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.trigger( "ajaxStart" );
34670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Matches an absolute URL, and saves the domain
34690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
34700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If we're requesting a remote document
34720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// and trying to load JSON or Script with a GET
34730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.dataType == "script" && type == "GET" && parts
34740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
34750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var head = document.getElementsByTagName("head")[0];
34770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var script = document.createElement("script");
34780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			script.src = s.url;
34790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (s.scriptCharset)
34800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				script.charset = s.scriptCharset;
34810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Handle Script loading
34830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( !jsonp ) {
34840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var done = false;
34850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Attach handlers for all browsers
34870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				script.onload = script.onreadystatechange = function(){
34880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !done && (!this.readyState ||
34890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							this.readyState == "loaded" || this.readyState == "complete") ) {
34900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						done = true;
34910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						success();
34920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						complete();
34930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
34940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// Handle memory leak in IE
34950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						script.onload = script.onreadystatechange = null;
34960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						head.removeChild( script );
34970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
34980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				};
34990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
35000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			head.appendChild(script);
35020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// We handle everything using the script element injection
35040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return undefined;
35050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
35060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var requestDone = false;
35080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Create the request object
35100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var xhr = s.xhr();
35110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Open the socket
35130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Passing null username, generates a login popup on Opera (#2865)
35140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( s.username )
35150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xhr.open(type, s.url, s.async, s.username, s.password);
35160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		else
35170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xhr.open(type, s.url, s.async);
35180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Need an extra try/catch for cross domain requests in Firefox 3
35200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		try {
35210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set the correct header, if data is being sent
35220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.data )
35230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				xhr.setRequestHeader("Content-Type", s.contentType);
35240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set the If-Modified-Since header, if ifModified mode.
35260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.ifModified )
35270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				xhr.setRequestHeader("If-Modified-Since",
35280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
35290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set header so the called script knows that it's an XMLHttpRequest
35310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
35320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set the Accepts header for the server, depending on the dataType
35340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
35350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				s.accepts[ s.dataType ] + ", */*" :
35360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				s.accepts._default );
35370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} catch(e){}
35380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Allow custom headers/mimetypes and early abort
35400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
35410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Handle the global AJAX counter
35420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.global && ! --jQuery.active )
35430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.trigger( "ajaxStop" );
35440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// close opended socket
35450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xhr.abort();
35460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return false;
35470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
35480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.global )
35500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.trigger("ajaxSend", [xhr, s]);
35510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Wait for a response to come back
35530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var onreadystatechange = function(isTimeout){
35540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// The request was aborted, clear the interval and decrement jQuery.active
35550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if (xhr.readyState == 0) {
35560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if (ival) {
35570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// clear poll interval
35580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					clearInterval(ival);
35590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ival = null;
35600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Handle the global AJAX counter
35610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( s.global && ! --jQuery.active )
35620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.event.trigger( "ajaxStop" );
35630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
35640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// The transfer is complete and the data is available, or the request timed out
35650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			} else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
35660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				requestDone = true;
35670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// clear poll interval
35690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if (ival) {
35700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					clearInterval(ival);
35710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					ival = null;
35720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
35730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				status = isTimeout == "timeout" ? "timeout" :
35750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					!jQuery.httpSuccess( xhr ) ? "error" :
35760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
35770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					"success";
35780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( status == "success" ) {
35800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Watch for, and catch, XML document parse errors
35810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					try {
35820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// process the data (runs the xml through httpData regardless of callback)
35830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						data = jQuery.httpData( xhr, s.dataType, s );
35840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} catch(e) {
35850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						status = "parsererror";
35860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
35870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
35880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Make sure that the request was successful or notmodified
35900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( status == "success" ) {
35910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Cache Last-Modified header, if ifModified mode.
35920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var modRes;
35930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					try {
35940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						modRes = xhr.getResponseHeader("Last-Modified");
35950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} catch(e) {} // swallow exception thrown by FF if header is not available
35960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
35970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( s.ifModified && modRes )
35980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.lastModified[s.url] = modRes;
35990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// JSONP handles its own success callback
36010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !jsonp )
36020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						success();
36030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				} else
36040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.handleError(s, xhr, status);
36050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Fire the complete handlers
36070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				complete();
36080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( isTimeout )
36100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					xhr.abort();
36110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Stop memory leaks
36130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( s.async )
36140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					xhr = null;
36150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
36160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
36170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.async ) {
36190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// don't attach the handler to the request, just poll it instead
36200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var ival = setInterval(onreadystatechange, 13);
36210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Timeout checker
36230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.timeout > 0 )
36240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				setTimeout(function(){
36250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Check to see if the request is still happening
36260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( xhr && !requestDone )
36270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						onreadystatechange( "timeout" );
36280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}, s.timeout);
36290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
36300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Send the data
36320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		try {
36330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xhr.send(s.data);
36340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} catch(e) {
36350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.handleError(s, xhr, null, e);
36360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
36370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// firefox 1.5 doesn't fire statechange for sync requests
36390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !s.async )
36400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			onreadystatechange();
36410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		function success(){
36430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If a local callback was specified, fire it and pass it the data
36440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.success )
36450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				s.success( data, status );
36460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Fire the global callback
36480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.global )
36490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
36500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
36510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		function complete(){
36530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Process result
36540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.complete )
36550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				s.complete(xhr, status);
36560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// The request was completed
36580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.global )
36590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.trigger( "ajaxComplete", [xhr, s] );
36600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Handle the global AJAX counter
36620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( s.global && ! --jQuery.active )
36630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.event.trigger( "ajaxStop" );
36640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
36650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// return XMLHttpRequest to allow aborting the request etc.
36670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return xhr;
36680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
36690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	handleError: function( s, xhr, status, e ) {
36710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If a local callback was specified, fire it
36720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.error ) s.error( xhr, status, e );
36730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Fire the global callback
36750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( s.global )
36760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.event.trigger( "ajaxError", [xhr, s, e] );
36770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
36780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Counter for holding the number of active queries
36800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	active: 0,
36810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Determines if an XMLHttpRequest was successful or not
36830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	httpSuccess: function( xhr ) {
36840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		try {
36850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
36860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return !xhr.status && location.protocol == "file:" ||
36870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
36880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} catch(e){}
36890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return false;
36900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
36910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Determines if an XMLHttpRequest returns NotModified
36930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	httpNotModified: function( xhr, url ) {
36940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		try {
36950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var xhrRes = xhr.getResponseHeader("Last-Modified");
36960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
36970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Firefox always returns 200. check Last-Modified date
36980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
36990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} catch(e){}
37000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return false;
37010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
37020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	httpData: function( xhr, type, s ) {
37040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var ct = xhr.getResponseHeader("content-type"),
37050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
37060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data = xml ? xhr.responseXML : xhr.responseText;
37070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( xml && data.documentElement.tagName == "parsererror" )
37090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			throw "parsererror";
37100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Allow a pre-filtering function to sanitize the response
37120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// s != null is checked to keep backwards compatibility
37130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( s && s.dataFilter )
37140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			data = s.dataFilter( data, type );
37150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// The filter can actually parse the response
37170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if( typeof data === "string" ){
37180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// If the type is "script", eval it in global context
37200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( type == "script" )
37210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.globalEval( data );
37220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Get the JavaScript object, if JSON is used.
37240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( type == "json" )
37250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				data = window["eval"]("(" + data + ")");
37260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
37270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return data;
37290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
37300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Serialize an array of form elements or a set of
37320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// key/values into a query string
37330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	param: function( a ) {
37340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var s = [ ];
37350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		function add( key, value ){
37370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
37380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
37390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// If an array was passed in, assume that it is an array
37410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// of form elements
37420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( jQuery.isArray(a) || a.jquery )
37430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Serialize the form elements
37440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.each( a, function(){
37450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				add( this.name, this.value );
37460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
37470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Otherwise, assume that it's an object of key/value pairs
37490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		else
37500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Serialize the key/values
37510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var j in a )
37520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// If the value is an array then the key names need to be repeated
37530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( jQuery.isArray(a[j]) )
37540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.each( a[j], function(){
37550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						add( j, this );
37560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					});
37570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				else
37580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );
37590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Return the resulting serialization
37610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return s.join("&").replace(/%20/g, "+");
37620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
37630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
37650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvar elemdisplay = {},
37660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	timerId,
37670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	fxAttrs = [
37680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// height animations
37690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
37700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// width animations
37710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
37720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// opacity animations
37730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		[ "opacity" ]
37740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	];
37750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfunction genFx( type, num ){
37770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var obj = {};
37780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
37790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		obj[ this ] = type;
37800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	});
37810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	return obj;
37820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
37830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn.extend({
37850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	show: function(speed,callback){
37860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( speed ) {
37870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.animate( genFx("show", 3), speed, callback);
37880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
37890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, l = this.length; i < l; i++ ){
37900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var old = jQuery.data(this[i], "olddisplay");
37910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this[i].style.display = old || "";
37930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( jQuery.css(this[i], "display") === "none" ) {
37950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var tagName = this[i].tagName, display;
37960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
37970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( elemdisplay[ tagName ] ) {
37980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						display = elemdisplay[ tagName ];
37990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} else {
38000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						var elem = jQuery("<" + tagName + " />").appendTo("body");
38010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						display = elem.css("display");
38030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( display === "none" )
38040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							display = "block";
38050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elem.remove();
38070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						elemdisplay[ tagName ] = display;
38090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					}
38100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.data(this[i], "olddisplay", display);
38120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
38130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
38140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set the display of the elements in a second loop
38160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// to avoid the constant reflow
38170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, l = this.length; i < l; i++ ){
38180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
38190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
38200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this;
38220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
38230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
38240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	hide: function(speed,callback){
38260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( speed ) {
38270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.animate( genFx("hide", 3), speed, callback);
38280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
38290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, l = this.length; i < l; i++ ){
38300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var old = jQuery.data(this[i], "olddisplay");
38310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !old && old !== "none" )
38320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
38330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
38340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set the display of the elements in a second loop
38360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// to avoid the constant reflow
38370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = 0, l = this.length; i < l; i++ ){
38380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this[i].style.display = "none";
38390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
38400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this;
38420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
38430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
38440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Save the old toggle function
38460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	_toggle: jQuery.fn.toggle,
38470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	toggle: function( fn, fn2 ){
38490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var bool = typeof fn === "boolean";
38500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
38520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this._toggle.apply( this, arguments ) :
38530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			fn == null || bool ?
38540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.each(function(){
38550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var state = bool ? fn : jQuery(this).is(":hidden");
38560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery(this)[ state ? "show" : "hide" ]();
38570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}) :
38580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.animate(genFx("toggle", 3), fn, fn2);
38590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
38600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	fadeTo: function(speed,to,callback){
38620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.animate({opacity: to}, speed, callback);
38630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
38640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	animate: function( prop, speed, easing, callback ) {
38660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var optall = jQuery.speed(speed, easing, callback);
38670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this[ optall.queue === false ? "each" : "queue" ](function(){
38690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var opt = jQuery.extend({}, optall), p,
38710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
38720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				self = this;
38730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( p in prop ) {
38750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
38760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					return opt.complete.call(this);
38770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( ( p == "height" || p == "width" ) && this.style ) {
38790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Store display property
38800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					opt.display = jQuery.css(this, "display");
38810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Make sure that nothing sneaks out
38830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					opt.overflow = this.style.overflow;
38840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
38850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
38860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( opt.overflow != null )
38880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.style.overflow = "hidden";
38890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			opt.curAnim = jQuery.extend({}, prop);
38910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.each( prop, function(name, val){
38930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var e = new jQuery.fx( self, opt, name );
38940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
38950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( /toggle|show|hide/.test(val) )
38960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
38970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				else {
38980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
38990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						start = e.cur(true) || 0;
39000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( parts ) {
39020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						var end = parseFloat(parts[2]),
39030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							unit = parts[3] || "px";
39040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// We need to compute starting value
39060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( unit != "px" ) {
39070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							self.style[ name ] = (end || 1) + unit;
39080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							start = ((end || 1) / e.cur(true)) * start;
39090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							self.style[ name ] = start + unit;
39100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						}
39110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// If a +=/-= token was provided, we're doing a relative animation
39130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						if ( parts[1] )
39140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch							end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
39150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						e.custom( start, end, unit );
39170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					} else
39180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						e.custom( start, val, "" );
39190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
39200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			});
39210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// For JS strict compliance
39230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return true;
39240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
39250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
39260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	stop: function(clearQueue, gotoEnd){
39280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var timers = jQuery.timers;
39290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (clearQueue)
39310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.queue([]);
39320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.each(function(){
39340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// go in reverse order so anything added to the queue during the loop is ignored
39350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i = timers.length - 1; i >= 0; i-- )
39360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( timers[i].elem == this ) {
39370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if (gotoEnd)
39380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						// force the next step to be the last
39390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						timers[i](true);
39400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					timers.splice(i, 1);
39410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
39420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		});
39430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// start the next in the queue if the last step wasn't forced
39450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (!gotoEnd)
39460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.dequeue();
39470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this;
39490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
39500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
39520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Generate shortcuts for custom animations
39540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each({
39550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	slideDown: genFx("show", 1),
39560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	slideUp: genFx("hide", 1),
39570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	slideToggle: genFx("toggle", 1),
39580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	fadeIn: { opacity: "show" },
39590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	fadeOut: { opacity: "hide" }
39600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}, function( name, props ){
39610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[ name ] = function( speed, callback ){
39620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this.animate( props, speed, callback );
39630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
39640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
39650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend({
39670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	speed: function(speed, easing, fn) {
39690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var opt = typeof speed === "object" ? speed : {
39700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			complete: fn || !fn && easing ||
39710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery.isFunction( speed ) && speed,
39720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			duration: speed,
39730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
39740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
39750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
39770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
39780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Queueing
39800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		opt.old = opt.complete;
39810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		opt.complete = function(){
39820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( opt.queue !== false )
39830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				jQuery(this).dequeue();
39840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.isFunction( opt.old ) )
39850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				opt.old.call( this );
39860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		};
39870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return opt;
39890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
39900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
39910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	easing: {
39920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		linear: function( p, n, firstNum, diff ) {
39930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return firstNum + diff * p;
39940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
39950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		swing: function( p, n, firstNum, diff ) {
39960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
39970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
39980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
39990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	timers: [],
40010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	fx: function( elem, options, prop ){
40030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.options = options;
40040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.elem = elem;
40050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.prop = prop;
40060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !options.orig )
40080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			options.orig = {};
40090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
40100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
40120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fx.prototype = {
40140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Simple function for setting a style value
40160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	update: function(){
40170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this.options.step )
40180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.options.step.call( this.elem, this.now, this );
40190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
40210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Set display property to block for height/width animations
40230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
40240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.elem.style.display = "block";
40250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
40260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Get the current size
40280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	cur: function(force){
40290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
40300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return this.elem[ this.prop ];
40310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
40330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
40340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
40350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Start an animation from one number to another
40370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	custom: function(from, to, unit){
40380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.startTime = now();
40390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.start = from;
40400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.end = to;
40410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.unit = unit || this.unit || "px";
40420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.now = this.start;
40430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.pos = this.state = 0;
40440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var self = this;
40460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		function t(gotoEnd){
40470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return self.step(gotoEnd);
40480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
40490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		t.elem = this.elem;
40510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( t() && jQuery.timers.push(t) && !timerId ) {
40530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			timerId = setInterval(function(){
40540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				var timers = jQuery.timers;
40550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				for ( var i = 0; i < timers.length; i++ )
40570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( !timers[i]() )
40580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						timers.splice(i--, 1);
40590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( !timers.length ) {
40610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					clearInterval( timerId );
40620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					timerId = undefined;
40630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
40640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}, 13);
40650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
40660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
40670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Simple 'show' function
40690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	show: function(){
40700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Remember where we started, so that we can go back to it later
40710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
40720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.options.show = true;
40730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Begin the animation
40750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Make sure that we start at a small width/height to avoid any
40760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// flash of content
40770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
40780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Start by showing the element
40800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery(this.elem).show();
40810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
40820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Simple 'hide' function
40840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	hide: function(){
40850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Remember where we started, so that we can go back to it later
40860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
40870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.options.hide = true;
40880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Begin the animation
40900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.custom(this.cur(), 0);
40910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
40920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// Each step of an animation
40940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	step: function(gotoEnd){
40950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var t = now();
40960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
40970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
40980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.now = this.end;
40990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.pos = this.state = 1;
41000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.update();
41010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.options.curAnim[ this.prop ] = true;
41030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var done = true;
41050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			for ( var i in this.options.curAnim )
41060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.options.curAnim[i] !== true )
41070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					done = false;
41080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( done ) {
41100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.options.display != null ) {
41110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Reset the overflow
41120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.elem.style.overflow = this.options.overflow;
41130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Reset the display
41150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.elem.style.display = this.options.display;
41160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					if ( jQuery.css(this.elem, "display") == "none" )
41170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						this.elem.style.display = "block";
41180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				}
41190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Hide the element if the "hide" operation was done
41210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.options.hide )
41220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery(this.elem).hide();
41230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Reset the properties, if the item has been hidden or shown
41250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( this.options.hide || this.options.show )
41260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					for ( var p in this.options.curAnim )
41270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						jQuery.attr(this.elem.style, p, this.options.orig[p]);
41280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Execute the complete function
41300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this.options.complete.call( this.elem );
41310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
41320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			return false;
41340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		} else {
41350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var n = t - this.startTime;
41360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.state = n / this.options.duration;
41370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Perform the easing function, defaults to swing
41390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
41400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.now = this.start + ((this.end - this.start) * this.pos);
41410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Perform the next step of the animation
41430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.update();
41440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
41450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return true;
41470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
41480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
41500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.extend( jQuery.fx, {
41520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	speeds:{
41530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		slow: 600,
41540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 		fast: 200,
41550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 		// Default speed
41560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 		_default: 400
41570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
41580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	step: {
41590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		opacity: function(fx){
41610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.attr(fx.elem.style, "opacity", fx.now);
41620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		},
41630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		_default: function(fx){
41650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
41660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
41670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			else
41680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				fx.elem[ fx.prop ] = fx.now;
41690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
41700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
41710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
41720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochif ( document.documentElement["getBoundingClientRect"] )
41730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn.offset = function() {
41740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !this[0] ) return { top: 0, left: 0 };
41750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
41760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var box  = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
41770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
41780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			top  = box.top  + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
41790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
41800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return { top: top, left: left };
41810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
41820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochelse
41830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn.offset = function() {
41840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( !this[0] ) return { top: 0, left: 0 };
41850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
41860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.offset.initialized || jQuery.offset.initialize();
41870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
41890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
41900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			body = doc.body, defaultView = doc.defaultView,
41910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			prevComputedStyle = defaultView.getComputedStyle(elem, null),
41920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			top = elem.offsetTop, left = elem.offsetLeft;
41930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
41940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
41950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			computedStyle = defaultView.getComputedStyle(elem, null);
41960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			top -= elem.scrollTop, left -= elem.scrollLeft;
41970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( elem === offsetParent ) {
41980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				top += elem.offsetTop, left += elem.offsetLeft;
41990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
42000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
42010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
42020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
42030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}
42040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
42050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
42060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
42070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			prevComputedStyle = computedStyle;
42080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
42090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
42110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			top  += body.offsetTop,
42120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			left += body.offsetLeft;
42130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( prevComputedStyle.position === "fixed" )
42150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			top  += Math.max(docElem.scrollTop, body.scrollTop),
42160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			left += Math.max(docElem.scrollLeft, body.scrollLeft);
42170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return { top: top, left: left };
42190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
42200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.offset = {
42220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	initialize: function() {
42230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this.initialized ) return;
42240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
42250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';
42260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
42280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		for ( prop in rules ) container.style[prop] = rules[prop];
42290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		container.innerHTML = html;
42310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		body.insertBefore(container, body.firstChild);
42320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;
42330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
42350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
42360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
42380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
42390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		body.style.marginTop = '1px';
42410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
42420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		body.style.marginTop = bodyMarginTop;
42430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		body.removeChild(container);
42450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		this.initialized = true;
42460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
42470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	bodyOffset: function(body) {
42490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		jQuery.offset.initialized || jQuery.offset.initialize();
42500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var top = body.offsetTop, left = body.offsetLeft;
42510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
42520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			top  += parseInt( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0,
42530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
42540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return { top: top, left: left };
42550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
42560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
42570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.fn.extend({
42600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	position: function() {
42610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var left = 0, top = 0, results;
42620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if ( this[0] ) {
42640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Get *real* offsetParent
42650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			var offsetParent = this.offsetParent(),
42660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Get correct offsets
42680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			offset       = this.offset(),
42690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
42700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Subtract element margins
42720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// note: when an element has margin: auto the offsetLeft and marginLeft
42730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// are the same in Safari causing offset.left to incorrectly be 0
42740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			offset.top  -= num( this, 'marginTop'  );
42750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			offset.left -= num( this, 'marginLeft' );
42760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Add offsetParent borders
42780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			parentOffset.top  += num( offsetParent, 'borderTopWidth'  );
42790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			parentOffset.left += num( offsetParent, 'borderLeftWidth' );
42800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Subtract the two offsets
42820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			results = {
42830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				top:  offset.top  - parentOffset.top,
42840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				left: offset.left - parentOffset.left
42850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			};
42860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		}
42870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return results;
42890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	},
42900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	offsetParent: function() {
42920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		var offsetParent = this[0].offsetParent || document.body;
42930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
42940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			offsetParent = offsetParent.offsetParent;
42950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return jQuery(offsetParent);
42960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	}
42970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
42980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
42990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Create scrollLeft and scrollTop methods
43010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each( ['Left', 'Top'], function(i, name) {
43020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var method = 'scroll' + name;
43030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[ method ] = function(val) {
43050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		if (!this[0]) return null;
43060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return val !== undefined ?
43080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Set the scroll offset
43100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this.each(function() {
43110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this == window || this == document ?
43120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					window.scrollTo(
43130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						!i ? val : jQuery(window).scrollLeft(),
43140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch						 i ? val : jQuery(window).scrollTop()
43150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					) :
43160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this[ method ] = val;
43170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			}) :
43180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Return the scroll offset
43200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this[0] == window || this[0] == document ?
43210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
43220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					jQuery.boxModel && document.documentElement[ method ] ||
43230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					document.body[ method ] :
43240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				this[0][ method ];
43250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
43260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
43270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Create innerHeight, innerWidth, outerHeight and outerWidth methods
43280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochjQuery.each([ "Height", "Width" ], function(i, name){
43290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var tl = i ? "Left"  : "Top",  // top or left
43310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		br = i ? "Right" : "Bottom", // bottom or right
43320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		lower = name.toLowerCase();
43330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// innerHeight and innerWidth
43350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn["inner" + name] = function(){
43360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this[0] ?
43370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.css( this[0], lower, false, "padding" ) :
43380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			null;
43390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
43400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	// outerHeight and outerWidth
43420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn["outer" + name] = function(margin) {
43430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this[0] ?
43440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
43450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			null;
43460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
43470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	var type = name.toLowerCase();
43490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	jQuery.fn[ type ] = function( size ) {
43510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		// Get window width or height
43520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch		return this[0] == window ?
43530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
43540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
43550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			document.body[ "client" + name ] :
43560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			// Get document width or height
43580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch			this[0] == document ?
43590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
43600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				Math.max(
43610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					document.documentElement["client" + name],
43620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					document.body["scroll" + name], document.documentElement["scroll" + name],
43630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					document.body["offset" + name], document.documentElement["offset" + name]
43640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				) :
43650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				// Get or set width or height on the element
43670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch				size === undefined ?
43680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Get width or height on the element
43690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					(this.length ? jQuery.css( this[0], type ) : null) :
43700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					// Set the width or height on the element (default to pixels if value is unitless)
43720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch					this.css( type, typeof size === "string" ? size : size + "px" );
43730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch	};
43740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
43750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch});
43760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch})();
4377