PageSourceSearch

https://www.djrosenberg.ru/wp-content/themes/me-3-9-3/scripts/effects.js

js djrosenberg.ru collected 2026-10-08 03:20:05 UTC 98,907 bytes, 3,725 lines download raw bytes

vendor: 5,720 bytes, lines 1-198
1/*! jQuery UI - v1.10.3 - 2013-07-18
2* http://jqueryui.com
3* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
4* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
5
6(function( $, undefined ) {
7
8var uuid = 0,
9	runiqueId = /^ui-id-\d+$/;
10
11// $.ui might exist from components with no dependencies, e.g., $.ui.position
12$.ui = $.ui || {};
13
14$.extend( $.ui, {
15	version: "1.10.3",
16
17	keyCode: {
18		BACKSPACE: 8,
19		COMMA: 188,
20		DELETE: 46,
21		DOWN: 40,
22		END: 35,
23		ENTER: 13,
24		ESCAPE: 27,
25		HOME: 36,
26		LEFT: 37,
27		NUMPAD_ADD: 107,
28		NUMPAD_DECIMAL: 110,
29		NUMPAD_DIVIDE: 111,
30		NUMPAD_ENTER: 108,
31		NUMPAD_MULTIPLY: 106,
32		NUMPAD_SUBTRACT: 109,
33		PAGE_DOWN: 34,
34		PAGE_UP: 33,
35		PERIOD: 190,
36		RIGHT: 39,
37		SPACE: 32,
38		TAB: 9,
39		UP: 38
40	}
41});
42
43// plugins
44$.fn.extend({
45	focus: (function( orig ) {
46		return function( delay, fn ) {
47			return typeof delay === "number" ?
48				this.each(function() {
49					var elem = this;
50					setTimeout(function() {
51						$( elem ).focus();
52						if ( fn ) {
53							fn.call( elem );
54						}
55					}, delay );
56				}) :
57				orig.apply( this, arguments );
58		};
59	})( $.fn.focus ),
60
61	scrollParent: function() {
62		var scrollParent;
63		if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
64			scrollParent = this.parents().filter(function() {
65				return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
66			}).eq(0);
67		} else {
68			scrollParent = this.parents().filter(function() {
69				return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
70			}).eq(0);
71		}
72
73		return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
74	},
75
76	zIndex: function( zIndex ) {
77		if ( zIndex !== undefined ) {
78			return this.css( "zIndex", zIndex );
79		}
80
81		if ( this.length ) {
82			var elem = $( this[ 0 ] ), position, value;
83			while ( elem.length && elem[ 0 ] !== document ) {
84				// Ignore z-index if position is set to a value where z-index is ignored by the browser
85				// This makes behavior of this function consistent across browsers
86				// WebKit always returns auto if the element is positioned
87				position = elem.css( "position" );
88				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
89					// IE returns 0 when zIndex is not specified
90					// other browsers return a string
91					// we ignore the case of nested elements with an explicit value of 0
92					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
93					value = parseInt( elem.css( "zIndex" ), 10 );
94					if ( !isNaN( value ) && value !== 0 ) {
95						return value;
96					}
97				}
98				elem = elem.parent();
99			}
100		}
101
102		return 0;
103	},
104
105	uniqueId: function() {
106		return this.each(function() {
107			if ( !this.id ) {
108				this.id = "ui-id-" + (++uuid);
109			}
110		});
111	},
112
113	removeUniqueId: function() {
114		return this.each(function() {
115			if ( runiqueId.test( this.id ) ) {
116				$( this ).removeAttr( "id" );
117			}
118		});
119	}
120});
121
122// selectors
123function focusable( element, isTabIndexNotNaN ) {
124	var map, mapName, img,
125		nodeName = element.nodeName.toLowerCase();
126	if ( "area" === nodeName ) {
127		map = element.parentNode;
128		mapName = map.name;
129		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
130			return false;
131		}
132		img = $( "img[usemap=#" + mapName + "]" )[0];
133		return !!img && visible( img );
134	}
135	return ( /input|select|textarea|button|object/.test( nodeName ) ?
136		!element.disabled :
137		"a" === nodeName ?
138			element.href || isTabIndexNotNaN :
139			isTabIndexNotNaN) &&
140		// the element and all of its ancestors must be visible
141		visible( element );
142}
143
144function visible( element ) {
145	return $.expr.filters.visible( element ) &&
146		!$( element ).parents().addBack().filter(function() {
147			return $.css( this, "visibility" ) === "hidden";
148		}).length;
149}
150
151$.extend( $.expr[ ":" ], {
152	data: $.expr.createPseudo ?
153		$.expr.createPseudo(function( dataName ) {
154			return function( elem ) {
155				return !!$.data( elem, dataName );
156			};
157		}) :
158		// support: jQuery <1.8
159		function( elem, i, match ) {
160			return !!$.data( elem, match[ 3 ] );
161		},
162
163	focusable: function( element ) {
164		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
165	},
166
167	tabbable: function( element ) {
168		var tabIndex = $.attr( element, "tabindex" ),
169			isTabIndexNaN = isNaN( tabIndex );
170		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
171	}
172});
173
174// support: jQuery <1.8
175if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
176	$.each( [ "Width", "Height" ], function( i, name ) {
177		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
178			type = name.toLowerCase(),
179			orig = {
180				innerWidth: $.fn.innerWidth,
181				innerHeight: $.fn.innerHeight,
182				outerWidth: $.fn.outerWidth,
183				outerHeight: $.fn.outerHeight
184			};
185
186		function reduce( elem, size, border, margin ) {
187			$.each( side, function() {
188				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
189				if ( border ) {
190					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
191				}
192				if ( margin ) {
193					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
194				}
195			});
196			return size;
197		}
198
vendor: 5,527 bytes, lines 199-400
199		$.fn[ "inner" + name ] = function( size ) {
200			if ( size === undefined ) {
201				return orig[ "inner" + name ].call( this );
202			}
203
204			return this.each(function() {
205				$( this ).css( type, reduce( this, size ) + "px" );
206			});
207		};
208
209		$.fn[ "outer" + name] = function( size, margin ) {
210			if ( typeof size !== "number" ) {
211				return orig[ "outer" + name ].call( this, size );
212			}
213
214			return this.each(function() {
215				$( this).css( type, reduce( this, size, true, margin ) + "px" );
216			});
217		};
218	});
219}
220
221// support: jQuery <1.8
222if ( !$.fn.addBack ) {
223	$.fn.addBack = function( selector ) {
224		return this.add( selector == null ?
225			this.prevObject : this.prevObject.filter( selector )
226		);
227	};
228}
229
230// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
231if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
232	$.fn.removeData = (function( removeData ) {
233		return function( key ) {
234			if ( arguments.length ) {
235				return removeData.call( this, $.camelCase( key ) );
236			} else {
237				return removeData.call( this );
238			}
239		};
240	})( $.fn.removeData );
241}
242
243
244
245
246
247// deprecated
248$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
249
250$.support.selectstart = "onselectstart" in document.createElement( "div" );
251$.fn.extend({
252	disableSelection: function() {
253		return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
254			".ui-disableSelection", function( event ) {
255				event.preventDefault();
256			});
257	},
258
259	enableSelection: function() {
260		return this.unbind( ".ui-disableSelection" );
261	}
262});
263
264$.extend( $.ui, {
265	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
266	plugin: {
267		add: function( module, option, set ) {
268			var i,
269				proto = $.ui[ module ].prototype;
270			for ( i in set ) {
271				proto.plugins[ i ] = proto.plugins[ i ] || [];
272				proto.plugins[ i ].push( [ option, set[ i ] ] );
273			}
274		},
275		call: function( instance, name, args ) {
276			var i,
277				set = instance.plugins[ name ];
278			if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
279				return;
280			}
281
282			for ( i = 0; i < set.length; i++ ) {
283				if ( instance.options[ set[ i ][ 0 ] ] ) {
284					set[ i ][ 1 ].apply( instance.element, args );
285				}
286			}
287		}
288	},
289
290	// only used by resizable
291	hasScroll: function( el, a ) {
292
293		//If overflow is hidden, the element might have extra content, but the user wants to hide it
294		if ( $( el ).css( "overflow" ) === "hidden") {
295			return false;
296		}
297
298		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
299			has = false;
300
301		if ( el[ scroll ] > 0 ) {
302			return true;
303		}
304
305		// TODO: determine which cases actually cause this to happen
306		// if the element doesn't have the scroll set, see if it's possible to
307		// set the scroll
308		el[ scroll ] = 1;
309		has = ( el[ scroll ] > 0 );
310		el[ scroll ] = 0;
311		return has;
312	}
313});
314
315})( jQuery );
316(function( $, undefined ) {
317
318var uuid = 0,
319	slice = Array.prototype.slice,
320	_cleanData = $.cleanData;
321$.cleanData = function( elems ) {
322	for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
323		try {
324			$( elem ).triggerHandler( "remove" );
325		// http://bugs.jquery.com/ticket/8235
326		} catch( e ) {}
327	}
328	_cleanData( elems );
329};
330
331$.widget = function( name, base, prototype ) {
332	var fullName, existingConstructor, constructor, basePrototype,
333		// proxiedPrototype allows the provided prototype to remain unmodified
334		// so that it can be used as a mixin for multiple widgets (#8876)
335		proxiedPrototype = {},
336		namespace = name.split( "." )[ 0 ];
337
338	name = name.split( "." )[ 1 ];
339	fullName = namespace + "-" + name;
340
341	if ( !prototype ) {
342		prototype = base;
343		base = $.Widget;
344	}
345
346	// create selector for plugin
347	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
348		return !!$.data( elem, fullName );
349	};
350
351	$[ namespace ] = $[ namespace ] || {};
352	existingConstructor = $[ namespace ][ name ];
353	constructor = $[ namespace ][ name ] = function( options, element ) {
354		// allow instantiation without "new" keyword
355		if ( !this._createWidget ) {
356			return new constructor( options, element );
357		}
358
359		// allow instantiation without initializing for simple inheritance
360		// must use "new" keyword (the code above always passes args)
361		if ( arguments.length ) {
362			this._createWidget( options, element );
363		}
364	};
365	// extend with the existing constructor to carry over any static properties
366	$.extend( constructor, existingConstructor, {
367		version: prototype.version,
368		// copy the object used to create the prototype in case we need to
369		// redefine the widget later
370		_proto: $.extend( {}, prototype ),
371		// track widgets that inherit from this widget in case this widget is
372		// redefined after a widget inherits from it
373		_childConstructors: []
374	});
375
376	basePrototype = new base();
377	// we need to make the options hash a property directly on the new instance
378	// otherwise we'll modify the options hash on the prototype that we're
379	// inheriting from
380	basePrototype.options = $.widget.extend( {}, basePrototype.options );
381	$.each( prototype, function( prop, value ) {
382		if ( !$.isFunction( value ) ) {
383			proxiedPrototype[ prop ] = value;
384			return;
385		}
386		proxiedPrototype[ prop ] = (function() {
387			var _super = function() {
388					return base.prototype[ prop ].apply( this, arguments );
389				},
390				_superApply = function( args ) {
391					return base.prototype[ prop ].apply( this, args );
392				};
393			return function() {
394				var __super = this._super,
395					__superApply = this._superApply,
396					returnValue;
397
398				this._super = _super;
399				this._superApply = _superApply;
400
vendor: 11,913 bytes, lines 401-812
401				returnValue = value.apply( this, arguments );
402
403				this._super = __super;
404				this._superApply = __superApply;
405
406				return returnValue;
407			};
408		})();
409	});
410	constructor.prototype = $.widget.extend( basePrototype, {
411		// TODO: remove support for widgetEventPrefix
412		// always use the name + a colon as the prefix, e.g., draggable:start
413		// don't prefix for widgets that aren't DOM-based
414		widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
415	}, proxiedPrototype, {
416		constructor: constructor,
417		namespace: namespace,
418		widgetName: name,
419		widgetFullName: fullName
420	});
421
422	// If this widget is being redefined then we need to find all widgets that
423	// are inheriting from it and redefine all of them so that they inherit from
424	// the new version of this widget. We're essentially trying to replace one
425	// level in the prototype chain.
426	if ( existingConstructor ) {
427		$.each( existingConstructor._childConstructors, function( i, child ) {
428			var childPrototype = child.prototype;
429
430			// redefine the child widget using the same prototype that was
431			// originally used, but inherit from the new version of the base
432			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
433		});
434		// remove the list of existing child constructors from the old constructor
435		// so the old child constructors can be garbage collected
436		delete existingConstructor._childConstructors;
437	} else {
438		base._childConstructors.push( constructor );
439	}
440
441	$.widget.bridge( name, constructor );
442};
443
444$.widget.extend = function( target ) {
445	var input = slice.call( arguments, 1 ),
446		inputIndex = 0,
447		inputLength = input.length,
448		key,
449		value;
450	for ( ; inputIndex < inputLength; inputIndex++ ) {
451		for ( key in input[ inputIndex ] ) {
452			value = input[ inputIndex ][ key ];
453			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
454				// Clone objects
455				if ( $.isPlainObject( value ) ) {
456					target[ key ] = $.isPlainObject( target[ key ] ) ?
457						$.widget.extend( {}, target[ key ], value ) :
458						// Don't extend strings, arrays, etc. with objects
459						$.widget.extend( {}, value );
460				// Copy everything else by reference
461				} else {
462					target[ key ] = value;
463				}
464			}
465		}
466	}
467	return target;
468};
469
470$.widget.bridge = function( name, object ) {
471	var fullName = object.prototype.widgetFullName || name;
472	$.fn[ name ] = function( options ) {
473		var isMethodCall = typeof options === "string",
474			args = slice.call( arguments, 1 ),
475			returnValue = this;
476
477		// allow multiple hashes to be passed on init
478		options = !isMethodCall && args.length ?
479			$.widget.extend.apply( null, [ options ].concat(args) ) :
480			options;
481
482		if ( isMethodCall ) {
483			this.each(function() {
484				var methodValue,
485					instance = $.data( this, fullName );
486				if ( !instance ) {
487					return $.error( "cannot call methods on " + name + " prior to initialization; " +
488						"attempted to call method '" + options + "'" );
489				}
490				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
491					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
492				}
493				methodValue = instance[ options ].apply( instance, args );
494				if ( methodValue !== instance && methodValue !== undefined ) {
495					returnValue = methodValue && methodValue.jquery ?
496						returnValue.pushStack( methodValue.get() ) :
497						methodValue;
498					return false;
499				}
500			});
501		} else {
502			this.each(function() {
503				var instance = $.data( this, fullName );
504				if ( instance ) {
505					instance.option( options || {} )._init();
506				} else {
507					$.data( this, fullName, new object( options, this ) );
508				}
509			});
510		}
511
512		return returnValue;
513	};
514};
515
516$.Widget = function( /* options, element */ ) {};
517$.Widget._childConstructors = [];
518
519$.Widget.prototype = {
520	widgetName: "widget",
521	widgetEventPrefix: "",
522	defaultElement: "<div>",
523	options: {
524		disabled: false,
525
526		// callbacks
527		create: null
528	},
529	_createWidget: function( options, element ) {
530		element = $( element || this.defaultElement || this )[ 0 ];
531		this.element = $( element );
532		this.uuid = uuid++;
533		this.eventNamespace = "." + this.widgetName + this.uuid;
534		this.options = $.widget.extend( {},
535			this.options,
536			this._getCreateOptions(),
537			options );
538
539		this.bindings = $();
540		this.hoverable = $();
541		this.focusable = $();
542
543		if ( element !== this ) {
544			$.data( element, this.widgetFullName, this );
545			this._on( true, this.element, {
546				remove: function( event ) {
547					if ( event.target === element ) {
548						this.destroy();
549					}
550				}
551			});
552			this.document = $( element.style ?
553				// element within the document
554				element.ownerDocument :
555				// element is window or document
556				element.document || element );
557			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
558		}
559
560		this._create();
561		this._trigger( "create", null, this._getCreateEventData() );
562		this._init();
563	},
564	_getCreateOptions: $.noop,
565	_getCreateEventData: $.noop,
566	_create: $.noop,
567	_init: $.noop,
568
569	destroy: function() {
570		this._destroy();
571		// we can probably remove the unbind calls in 2.0
572		// all event bindings should go through this._on()
573		this.element
574			.unbind( this.eventNamespace )
575			// 1.9 BC for #7810
576			// TODO remove dual storage
577			.removeData( this.widgetName )
578			.removeData( this.widgetFullName )
579			// support: jquery <1.6.3
580			// http://bugs.jquery.com/ticket/9413
581			.removeData( $.camelCase( this.widgetFullName ) );
582		this.widget()
583			.unbind( this.eventNamespace )
584			.removeAttr( "aria-disabled" )
585			.removeClass(
586				this.widgetFullName + "-disabled " +
587				"ui-state-disabled" );
588
589		// clean up events and states
590		this.bindings.unbind( this.eventNamespace );
591		this.hoverable.removeClass( "ui-state-hover" );
592		this.focusable.removeClass( "ui-state-focus" );
593	},
594	_destroy: $.noop,
595
596	widget: function() {
597		return this.element;
598	},
599
600	option: function( key, value ) {
601		var options = key,
602			parts,
603			curOption,
604			i;
605
606		if ( arguments.length === 0 ) {
607			// don't return a reference to the internal hash
608			return $.widget.extend( {}, this.options );
609		}
610
611		if ( typeof key === "string" ) {
612			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
613			options = {};
614			parts = key.split( "." );
615			key = parts.shift();
616			if ( parts.length ) {
617				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
618				for ( i = 0; i < parts.length - 1; i++ ) {
619					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
620					curOption = curOption[ parts[ i ] ];
621				}
622				key = parts.pop();
623				if ( value === undefined ) {
624					return curOption[ key ] === undefined ? null : curOption[ key ];
625				}
626				curOption[ key ] = value;
627			} else {
628				if ( value === undefined ) {
629					return this.options[ key ] === undefined ? null : this.options[ key ];
630				}
631				options[ key ] = value;
632			}
633		}
634
635		this._setOptions( options );
636
637		return this;
638	},
639	_setOptions: function( options ) {
640		var key;
641
642		for ( key in options ) {
643			this._setOption( key, options[ key ] );
644		}
645
646		return this;
647	},
648	_setOption: function( key, value ) {
649		this.options[ key ] = value;
650
651		if ( key === "disabled" ) {
652			this.widget()
653				.toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
654				.attr( "aria-disabled", value );
655			this.hoverable.removeClass( "ui-state-hover" );
656			this.focusable.removeClass( "ui-state-focus" );
657		}
658
659		return this;
660	},
661
662	enable: function() {
663		return this._setOption( "disabled", false );
664	},
665	disable: function() {
666		return this._setOption( "disabled", true );
667	},
668
669	_on: function( suppressDisabledCheck, element, handlers ) {
670		var delegateElement,
671			instance = this;
672
673		// no suppressDisabledCheck flag, shuffle arguments
674		if ( typeof suppressDisabledCheck !== "boolean" ) {
675			handlers = element;
676			element = suppressDisabledCheck;
677			suppressDisabledCheck = false;
678		}
679
680		// no element argument, shuffle and use this.element
681		if ( !handlers ) {
682			handlers = element;
683			element = this.element;
684			delegateElement = this.widget();
685		} else {
686			// accept selectors, DOM elements
687			element = delegateElement = $( element );
688			this.bindings = this.bindings.add( element );
689		}
690
691		$.each( handlers, function( event, handler ) {
692			function handlerProxy() {
693				// allow widgets to customize the disabled handling
694				// - disabled as an array instead of boolean
695				// - disabled class as method for disabling individual parts
696				if ( !suppressDisabledCheck &&
697						( instance.options.disabled === true ||
698							$( this ).hasClass( "ui-state-disabled" ) ) ) {
699					return;
700				}
701				return ( typeof handler === "string" ? instance[ handler ] : handler )
702					.apply( instance, arguments );
703			}
704
705			// copy the guid so direct unbinding works
706			if ( typeof handler !== "string" ) {
707				handlerProxy.guid = handler.guid =
708					handler.guid || handlerProxy.guid || $.guid++;
709			}
710
711			var match = event.match( /^(\w+)\s*(.*)$/ ),
712				eventName = match[1] + instance.eventNamespace,
713				selector = match[2];
714			if ( selector ) {
715				delegateElement.delegate( selector, eventName, handlerProxy );
716			} else {
717				element.bind( eventName, handlerProxy );
718			}
719		});
720	},
721
722	_off: function( element, eventName ) {
723		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
724		element.unbind( eventName ).undelegate( eventName );
725	},
726
727	_delay: function( handler, delay ) {
728		function handlerProxy() {
729			return ( typeof handler === "string" ? instance[ handler ] : handler )
730				.apply( instance, arguments );
731		}
732		var instance = this;
733		return setTimeout( handlerProxy, delay || 0 );
734	},
735
736	_hoverable: function( element ) {
737		this.hoverable = this.hoverable.add( element );
738		this._on( element, {
739			mouseenter: function( event ) {
740				$( event.currentTarget ).addClass( "ui-state-hover" );
741			},
742			mouseleave: function( event ) {
743				$( event.currentTarget ).removeClass( "ui-state-hover" );
744			}
745		});
746	},
747
748	_focusable: function( element ) {
749		this.focusable = this.focusable.add( element );
750		this._on( element, {
751			focusin: function( event ) {
752				$( event.currentTarget ).addClass( "ui-state-focus" );
753			},
754			focusout: function( event ) {
755				$( event.currentTarget ).removeClass( "ui-state-focus" );
756			}
757		});
758	},
759
760	_trigger: function( type, event, data ) {
761		var prop, orig,
762			callback = this.options[ type ];
763
764		data = data || {};
765		event = $.Event( event );
766		event.type = ( type === this.widgetEventPrefix ?
767			type :
768			this.widgetEventPrefix + type ).toLowerCase();
769		// the original event may come from any element
770		// so we need to reset the target on the new event
771		event.target = this.element[ 0 ];
772
773		// copy original event properties over to the new event
774		orig = event.originalEvent;
775		if ( orig ) {
776			for ( prop in orig ) {
777				if ( !( prop in event ) ) {
778					event[ prop ] = orig[ prop ];
779				}
780			}
781		}
782
783		this.element.trigger( event, data );
784		return !( $.isFunction( callback ) &&
785			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
786			event.isDefaultPrevented() );
787	}
788};
789
790$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
791	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
792		if ( typeof options === "string" ) {
793			options = { effect: options };
794		}
795		var hasOptions,
796			effectName = !options ?
797				method :
798				options === true || typeof options === "number" ?
799					defaultEffect :
800					options.effect || defaultEffect;
801		options = options || {};
802		if ( typeof options === "number" ) {
803			options = { duration: options };
804		}
805		hasOptions = !$.isEmptyObject( options );
806		options.complete = callback;
807		if ( options.delay ) {
808			element.delay( options.delay );
809		}
810		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
811			element[ method ]( options );
812		} else if ( effectName !== method && element[ effectName ] ) {
vendor: 75,747 bytes, lines 813-3725
813			element[ effectName ]( options.duration, options.easing, callback );
814		} else {
815			element.queue(function( next ) {
816				$( this )[ method ]();
817				if ( callback ) {
818					callback.call( element[ 0 ] );
819				}
820				next();
821			});
822		}
823	};
824});
825
826})( jQuery );
827(function( $, undefined ) {
828
829var mouseHandled = false;
830$( document ).mouseup( function() {
831	mouseHandled = false;
832});
833
834$.widget("ui.mouse", {
835	version: "1.10.3",
836	options: {
837		cancel: "input,textarea,button,select,option",
838		distance: 1,
839		delay: 0
840	},
841	_mouseInit: function() {
842		var that = this;
843
844		this.element
845			.bind("mousedown."+this.widgetName, function(event) {
846				return that._mouseDown(event);
847			})
848			.bind("click."+this.widgetName, function(event) {
849				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
850					$.removeData(event.target, that.widgetName + ".preventClickEvent");
851					event.stopImmediatePropagation();
852					return false;
853				}
854			});
855
856		this.started = false;
857	},
858
859	// TODO: make sure destroying one instance of mouse doesn't mess with
860	// other instances of mouse
861	_mouseDestroy: function() {
862		this.element.unbind("."+this.widgetName);
863		if ( this._mouseMoveDelegate ) {
864			$(document)
865				.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
866				.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
867		}
868	},
869
870	_mouseDown: function(event) {
871		// don't let more than one widget handle mouseStart
872		if( mouseHandled ) { return; }
873
874		// we may have missed mouseup (out of window)
875		(this._mouseStarted && this._mouseUp(event));
876
877		this._mouseDownEvent = event;
878
879		var that = this,
880			btnIsLeft = (event.which === 1),
881			// event.target.nodeName works around a bug in IE 8 with
882			// disabled inputs (#7620)
883			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
884		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
885			return true;
886		}
887
888		this.mouseDelayMet = !this.options.delay;
889		if (!this.mouseDelayMet) {
890			this._mouseDelayTimer = setTimeout(function() {
891				that.mouseDelayMet = true;
892			}, this.options.delay);
893		}
894
895		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
896			this._mouseStarted = (this._mouseStart(event) !== false);
897			if (!this._mouseStarted) {
898				event.preventDefault();
899				return true;
900			}
901		}
902
903		// Click event may never have fired (Gecko & Opera)
904		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
905			$.removeData(event.target, this.widgetName + ".preventClickEvent");
906		}
907
908		// these delegates are required to keep context
909		this._mouseMoveDelegate = function(event) {
910			return that._mouseMove(event);
911		};
912		this._mouseUpDelegate = function(event) {
913			return that._mouseUp(event);
914		};
915		$(document)
916			.bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
917			.bind("mouseup."+this.widgetName, this._mouseUpDelegate);
918
919		event.preventDefault();
920
921		mouseHandled = true;
922		return true;
923	},
924
925	_mouseMove: function(event) {
926		// IE mouseup check - mouseup happened when mouse was out of window
927		if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
928			return this._mouseUp(event);
929		}
930
931		if (this._mouseStarted) {
932			this._mouseDrag(event);
933			return event.preventDefault();
934		}
935
936		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
937			this._mouseStarted =
938				(this._mouseStart(this._mouseDownEvent, event) !== false);
939			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
940		}
941
942		return !this._mouseStarted;
943	},
944
945	_mouseUp: function(event) {
946		$(document)
947			.unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
948			.unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
949
950		if (this._mouseStarted) {
951			this._mouseStarted = false;
952
953			if (event.target === this._mouseDownEvent.target) {
954				$.data(event.target, this.widgetName + ".preventClickEvent", true);
955			}
956
957			this._mouseStop(event);
958		}
959
960		return false;
961	},
962
963	_mouseDistanceMet: function(event) {
964		return (Math.max(
965				Math.abs(this._mouseDownEvent.pageX - event.pageX),
966				Math.abs(this._mouseDownEvent.pageY - event.pageY)
967			) >= this.options.distance
968		);
969	},
970
971	_mouseDelayMet: function(/* event */) {
972		return this.mouseDelayMet;
973	},
974
975	// These are placeholder methods, to be overriden by extending plugin
976	_mouseStart: function(/* event */) {},
977	_mouseDrag: function(/* event */) {},
978	_mouseStop: function(/* event */) {},
979	_mouseCapture: function(/* event */) { return true; }
980});
981
982})(jQuery);
983(function( $, undefined ) {
984
985$.ui = $.ui || {};
986
987var cachedScrollbarWidth,
988	max = Math.max,
989	abs = Math.abs,
990	round = Math.round,
991	rhorizontal = /left|center|right/,
992	rvertical = /top|center|bottom/,
993	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
994	rposition = /^\w+/,
995	rpercent = /%$/,
996	_position = $.fn.position;
997
998function getOffsets( offsets, width, height ) {
999	return [
1000		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
1001		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
1002	];
1003}
1004
1005function parseCss( element, property ) {
1006	return parseInt( $.css( element, property ), 10 ) || 0;
1007}
1008
1009function getDimensions( elem ) {
1010	var raw = elem[0];
1011	if ( raw.nodeType === 9 ) {
1012		return {
1013			width: elem.width(),
1014			height: elem.height(),
1015			offset: { top: 0, left: 0 }
1016		};
1017	}
1018	if ( $.isWindow( raw ) ) {
1019		return {
1020			width: elem.width(),
1021			height: elem.height(),
1022			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
1023		};
1024	}
1025	if ( raw.preventDefault ) {
1026		return {
1027			width: 0,
1028			height: 0,
1029			offset: { top: raw.pageY, left: raw.pageX }
1030		};
1031	}
1032	return {
1033		width: elem.outerWidth(),
1034		height: elem.outerHeight(),
1035		offset: elem.offset()
1036	};
1037}
1038
1039$.position = {
1040	scrollbarWidth: function() {
1041		if ( cachedScrollbarWidth !== undefined ) {
1042			return cachedScrollbarWidth;
1043		}
1044		var w1, w2,
1045			div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
1046			innerDiv = div.children()[0];
1047
1048		$( "body" ).append( div );
1049		w1 = innerDiv.offsetWidth;
1050		div.css( "overflow", "scroll" );
1051
1052		w2 = innerDiv.offsetWidth;
1053
1054		if ( w1 === w2 ) {
1055			w2 = div[0].clientWidth;
1056		}
1057
1058		div.remove();
1059
1060		return (cachedScrollbarWidth = w1 - w2);
1061	},
1062	getScrollInfo: function( within ) {
1063		var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
1064			overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
1065			hasOverflowX = overflowX === "scroll" ||
1066				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
1067			hasOverflowY = overflowY === "scroll" ||
1068				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
1069		return {
1070			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
1071			height: hasOverflowX ? $.position.scrollbarWidth() : 0
1072		};
1073	},
1074	getWithinInfo: function( element ) {
1075		var withinElement = $( element || window ),
1076			isWindow = $.isWindow( withinElement[0] );
1077		return {
1078			element: withinElement,
1079			isWindow: isWindow,
1080			offset: withinElement.offset() || { left: 0, top: 0 },
1081			scrollLeft: withinElement.scrollLeft(),
1082			scrollTop: withinElement.scrollTop(),
1083			width: isWindow ? withinElement.width() : withinElement.outerWidth(),
1084			height: isWindow ? withinElement.height() : withinElement.outerHeight()
1085		};
1086	}
1087};
1088
1089$.fn.position = function( options ) {
1090	if ( !options || !options.of ) {
1091		return _position.apply( this, arguments );
1092	}
1093
1094	// make a copy, we don't want to modify arguments
1095	options = $.extend( {}, options );
1096
1097	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
1098		target = $( options.of ),
1099		within = $.position.getWithinInfo( options.within ),
1100		scrollInfo = $.position.getScrollInfo( within ),
1101		collision = ( options.collision || "flip" ).split( " " ),
1102		offsets = {};
1103
1104	dimensions = getDimensions( target );
1105	if ( target[0].preventDefault ) {
1106		// force left top to allow flipping
1107		options.at = "left top";
1108	}
1109	targetWidth = dimensions.width;
1110	targetHeight = dimensions.height;
1111	targetOffset = dimensions.offset;
1112	// clone to reuse original targetOffset later
1113	basePosition = $.extend( {}, targetOffset );
1114
1115	// force my and at to have valid horizontal and vertical positions
1116	// if a value is missing or invalid, it will be converted to center
1117	$.each( [ "my", "at" ], function() {
1118		var pos = ( options[ this ] || "" ).split( " " ),
1119			horizontalOffset,
1120			verticalOffset;
1121
1122		if ( pos.length === 1) {
1123			pos = rhorizontal.test( pos[ 0 ] ) ?
1124				pos.concat( [ "center" ] ) :
1125				rvertical.test( pos[ 0 ] ) ?
1126					[ "center" ].concat( pos ) :
1127					[ "center", "center" ];
1128		}
1129		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
1130		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
1131
1132		// calculate offsets
1133		horizontalOffset = roffset.exec( pos[ 0 ] );
1134		verticalOffset = roffset.exec( pos[ 1 ] );
1135		offsets[ this ] = [
1136			horizontalOffset ? horizontalOffset[ 0 ] : 0,
1137			verticalOffset ? verticalOffset[ 0 ] : 0
1138		];
1139
1140		// reduce to just the positions without the offsets
1141		options[ this ] = [
1142			rposition.exec( pos[ 0 ] )[ 0 ],
1143			rposition.exec( pos[ 1 ] )[ 0 ]
1144		];
1145	});
1146
1147	// normalize collision option
1148	if ( collision.length === 1 ) {
1149		collision[ 1 ] = collision[ 0 ];
1150	}
1151
1152	if ( options.at[ 0 ] === "right" ) {
1153		basePosition.left += targetWidth;
1154	} else if ( options.at[ 0 ] === "center" ) {
1155		basePosition.left += targetWidth / 2;
1156	}
1157
1158	if ( options.at[ 1 ] === "bottom" ) {
1159		basePosition.top += targetHeight;
1160	} else if ( options.at[ 1 ] === "center" ) {
1161		basePosition.top += targetHeight / 2;
1162	}
1163
1164	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
1165	basePosition.left += atOffset[ 0 ];
1166	basePosition.top += atOffset[ 1 ];
1167
1168	return this.each(function() {
1169		var collisionPosition, using,
1170			elem = $( this ),
1171			elemWidth = elem.outerWidth(),
1172			elemHeight = elem.outerHeight(),
1173			marginLeft = parseCss( this, "marginLeft" ),
1174			marginTop = parseCss( this, "marginTop" ),
1175			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
1176			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
1177			position = $.extend( {}, basePosition ),
1178			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
1179
1180		if ( options.my[ 0 ] === "right" ) {
1181			position.left -= elemWidth;
1182		} else if ( options.my[ 0 ] === "center" ) {
1183			position.left -= elemWidth / 2;
1184		}
1185
1186		if ( options.my[ 1 ] === "bottom" ) {
1187			position.top -= elemHeight;
1188		} else if ( options.my[ 1 ] === "center" ) {
1189			position.top -= elemHeight / 2;
1190		}
1191
1192		position.left += myOffset[ 0 ];
1193		position.top += myOffset[ 1 ];
1194
1195		// if the browser doesn't support fractions, then round for consistent results
1196		if ( !$.support.offsetFractions ) {
1197			position.left = round( position.left );
1198			position.top = round( position.top );
1199		}
1200
1201		collisionPosition = {
1202			marginLeft: marginLeft,
1203			marginTop: marginTop
1204		};
1205
1206		$.each( [ "left", "top" ], function( i, dir ) {
1207			if ( $.ui.position[ collision[ i ] ] ) {
1208				$.ui.position[ collision[ i ] ][ dir ]( position, {
1209					targetWidth: targetWidth,
1210					targetHeight: targetHeight,
1211					elemWidth: elemWidth,
1212					elemHeight: elemHeight,
1213					collisionPosition: collisionPosition,
1214					collisionWidth: collisionWidth,
1215					collisionHeight: collisionHeight,
1216					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
1217					my: options.my,
1218					at: options.at,
1219					within: within,
1220					elem : elem
1221				});
1222			}
1223		});
1224
1225		if ( options.using ) {
1226			// adds feedback as second argument to using callback, if present
1227			using = function( props ) {
1228				var left = targetOffset.left - position.left,
1229					right = left + targetWidth - elemWidth,
1230					top = targetOffset.top - position.top,
1231					bottom = top + targetHeight - elemHeight,
1232					feedback = {
1233						target: {
1234							element: target,
1235							left: targetOffset.left,
1236							top: targetOffset.top,
1237							width: targetWidth,
1238							height: targetHeight
1239						},
1240						element: {
1241							element: elem,
1242							left: position.left,
1243							top: position.top,
1244							width: elemWidth,
1245							height: elemHeight
1246						},
1247						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
1248						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
1249					};
1250				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
1251					feedback.horizontal = "center";
1252				}
1253				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
1254					feedback.vertical = "middle";
1255				}
1256				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
1257					feedback.important = "horizontal";
1258				} else {
1259					feedback.important = "vertical";
1260				}
1261				options.using.call( this, props, feedback );
1262			};
1263		}
1264
1265		elem.offset( $.extend( position, { using: using } ) );
1266	});
1267};
1268
1269$.ui.position = {
1270	fit: {
1271		left: function( position, data ) {
1272			var within = data.within,
1273				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
1274				outerWidth = within.width,
1275				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
1276				overLeft = withinOffset - collisionPosLeft,
1277				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
1278				newOverRight;
1279
1280			// element is wider than within
1281			if ( data.collisionWidth > outerWidth ) {
1282				// element is initially over the left side of within
1283				if ( overLeft > 0 && overRight <= 0 ) {
1284					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
1285					position.left += overLeft - newOverRight;
1286				// element is initially over right side of within
1287				} else if ( overRight > 0 && overLeft <= 0 ) {
1288					position.left = withinOffset;
1289				// element is initially over both left and right sides of within
1290				} else {
1291					if ( overLeft > overRight ) {
1292						position.left = withinOffset + outerWidth - data.collisionWidth;
1293					} else {
1294						position.left = withinOffset;
1295					}
1296				}
1297			// too far left -> align with left edge
1298			} else if ( overLeft > 0 ) {
1299				position.left += overLeft;
1300			// too far right -> align with right edge
1301			} else if ( overRight > 0 ) {
1302				position.left -= overRight;
1303			// adjust based on position and margin
1304			} else {
1305				position.left = max( position.left - collisionPosLeft, position.left );
1306			}
1307		},
1308		top: function( position, data ) {
1309			var within = data.within,
1310				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
1311				outerHeight = data.within.height,
1312				collisionPosTop = position.top - data.collisionPosition.marginTop,
1313				overTop = withinOffset - collisionPosTop,
1314				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
1315				newOverBottom;
1316
1317			// element is taller than within
1318			if ( data.collisionHeight > outerHeight ) {
1319				// element is initially over the top of within
1320				if ( overTop > 0 && overBottom <= 0 ) {
1321					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
1322					position.top += overTop - newOverBottom;
1323				// element is initially over bottom of within
1324				} else if ( overBottom > 0 && overTop <= 0 ) {
1325					position.top = withinOffset;
1326				// element is initially over both top and bottom of within
1327				} else {
1328					if ( overTop > overBottom ) {
1329						position.top = withinOffset + outerHeight - data.collisionHeight;
1330					} else {
1331						position.top = withinOffset;
1332					}
1333				}
1334			// too far up -> align with top
1335			} else if ( overTop > 0 ) {
1336				position.top += overTop;
1337			// too far down -> align with bottom edge
1338			} else if ( overBottom > 0 ) {
1339				position.top -= overBottom;
1340			// adjust based on position and margin
1341			} else {
1342				position.top = max( position.top - collisionPosTop, position.top );
1343			}
1344		}
1345	},
1346	flip: {
1347		left: function( position, data ) {
1348			var within = data.within,
1349				withinOffset = within.offset.left + within.scrollLeft,
1350				outerWidth = within.width,
1351				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
1352				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
1353				overLeft = collisionPosLeft - offsetLeft,
1354				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
1355				myOffset = data.my[ 0 ] === "left" ?
1356					-data.elemWidth :
1357					data.my[ 0 ] === "right" ?
1358						data.elemWidth :
1359						0,
1360				atOffset = data.at[ 0 ] === "left" ?
1361					data.targetWidth :
1362					data.at[ 0 ] === "right" ?
1363						-data.targetWidth :
1364						0,
1365				offset = -2 * data.offset[ 0 ],
1366				newOverRight,
1367				newOverLeft;
1368
1369			if ( overLeft < 0 ) {
1370				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
1371				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
1372					position.left += myOffset + atOffset + offset;
1373				}
1374			}
1375			else if ( overRight > 0 ) {
1376				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
1377				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
1378					position.left += myOffset + atOffset + offset;
1379				}
1380			}
1381		},
1382		top: function( position, data ) {
1383			var within = data.within,
1384				withinOffset = within.offset.top + within.scrollTop,
1385				outerHeight = within.height,
1386				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
1387				collisionPosTop = position.top - data.collisionPosition.marginTop,
1388				overTop = collisionPosTop - offsetTop,
1389				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
1390				top = data.my[ 1 ] === "top",
1391				myOffset = top ?
1392					-data.elemHeight :
1393					data.my[ 1 ] === "bottom" ?
1394						data.elemHeight :
1395						0,
1396				atOffset = data.at[ 1 ] === "top" ?
1397					data.targetHeight :
1398					data.at[ 1 ] === "bottom" ?
1399						-data.targetHeight :
1400						0,
1401				offset = -2 * data.offset[ 1 ],
1402				newOverTop,
1403				newOverBottom;
1404			if ( overTop < 0 ) {
1405				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
1406				if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
1407					position.top += myOffset + atOffset + offset;
1408				}
1409			}
1410			else if ( overBottom > 0 ) {
1411				newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
1412				if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
1413					position.top += myOffset + atOffset + offset;
1414				}
1415			}
1416		}
1417	},
1418	flipfit: {
1419		left: function() {
1420			$.ui.position.flip.left.apply( this, arguments );
1421			$.ui.position.fit.left.apply( this, arguments );
1422		},
1423		top: function() {
1424			$.ui.position.flip.top.apply( this, arguments );
1425			$.ui.position.fit.top.apply( this, arguments );
1426		}
1427	}
1428};
1429
1430// fraction support test
1431(function () {
1432	var testElement, testElementParent, testElementStyle, offsetLeft, i,
1433		body = document.getElementsByTagName( "body" )[ 0 ],
1434		div = document.createElement( "div" );
1435
1436	//Create a "fake body" for testing based on method used in jQuery.support
1437	testElement = document.createElement( body ? "div" : "body" );
1438	testElementStyle = {
1439		visibility: "hidden",
1440		width: 0,
1441		height: 0,
1442		border: 0,
1443		margin: 0,
1444		background: "none"
1445	};
1446	if ( body ) {
1447		$.extend( testElementStyle, {
1448			position: "absolute",
1449			left: "-1000px",
1450			top: "-1000px"
1451		});
1452	}
1453	for ( i in testElementStyle ) {
1454		testElement.style[ i ] = testElementStyle[ i ];
1455	}
1456	testElement.appendChild( div );
1457	testElementParent = body || document.documentElement;
1458	testElementParent.insertBefore( testElement, testElementParent.firstChild );
1459
1460	div.style.cssText = "position: absolute; left: 10.7432222px;";
1461
1462	offsetLeft = $( div ).offset().left;
1463	$.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
1464
1465	testElement.innerHTML = "";
1466	testElementParent.removeChild( testElement );
1467})();
1468
1469}( jQuery ) );
1470(function($, undefined) {
1471
1472var dataSpace = "ui-effects-";
1473
1474$.effects = {
1475	effect: {}
1476};
1477
1478/*!
1479 * jQuery Color Animations v2.1.2
1480 * https://github.com/jquery/jquery-color
1481 *
1482 * Copyright 2013 jQuery Foundation and other contributors
1483 * Released under the MIT license.
1484 * http://jquery.org/license
1485 *
1486 * Date: Wed Jan 16 08:47:09 2013 -0600
1487 */
1488(function( jQuery, undefined ) {
1489
1490	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
1491
1492	// plusequals test for += 100 -= 100
1493	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
1494	// a set of RE's that can match strings and generate color tuples.
1495	stringParsers = [{
1496			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
1497			parse: function( execResult ) {
1498				return [
1499					execResult[ 1 ],
1500					execResult[ 2 ],
1501					execResult[ 3 ],
1502					execResult[ 4 ]
1503				];
1504			}
1505		}, {
1506			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
1507			parse: function( execResult ) {
1508				return [
1509					execResult[ 1 ] * 2.55,
1510					execResult[ 2 ] * 2.55,
1511					execResult[ 3 ] * 2.55,
1512					execResult[ 4 ]
1513				];
1514			}
1515		}, {
1516			// this regex ignores A-F because it's compared against an already lowercased string
1517			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
1518			parse: function( execResult ) {
1519				return [
1520					parseInt( execResult[ 1 ], 16 ),
1521					parseInt( execResult[ 2 ], 16 ),
1522					parseInt( execResult[ 3 ], 16 )
1523				];
1524			}
1525		}, {
1526			// this regex ignores A-F because it's compared against an already lowercased string
1527			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
1528			parse: function( execResult ) {
1529				return [
1530					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
1531					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
1532					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
1533				];
1534			}
1535		}, {
1536			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
1537			space: "hsla",
1538			parse: function( execResult ) {
1539				return [
1540					execResult[ 1 ],
1541					execResult[ 2 ] / 100,
1542					execResult[ 3 ] / 100,
1543					execResult[ 4 ]
1544				];
1545			}
1546		}],
1547
1548	// jQuery.Color( )
1549	color = jQuery.Color = function( color, green, blue, alpha ) {
1550		return new jQuery.Color.fn.parse( color, green, blue, alpha );
1551	},
1552	spaces = {
1553		rgba: {
1554			props: {
1555				red: {
1556					idx: 0,
1557					type: "byte"
1558				},
1559				green: {
1560					idx: 1,
1561					type: "byte"
1562				},
1563				blue: {
1564					idx: 2,
1565					type: "byte"
1566				}
1567			}
1568		},
1569
1570		hsla: {
1571			props: {
1572				hue: {
1573					idx: 0,
1574					type: "degrees"
1575				},
1576				saturation: {
1577					idx: 1,
1578					type: "percent"
1579				},
1580				lightness: {
1581					idx: 2,
1582					type: "percent"
1583				}
1584			}
1585		}
1586	},
1587	propTypes = {
1588		"byte": {
1589			floor: true,
1590			max: 255
1591		},
1592		"percent": {
1593			max: 1
1594		},
1595		"degrees": {
1596			mod: 360,
1597			floor: true
1598		}
1599	},
1600	support = color.support = {},
1601
1602	// element for support tests
1603	supportElem = jQuery( "<p>" )[ 0 ],
1604
1605	// colors = jQuery.Color.names
1606	colors,
1607
1608	// local aliases of functions called often
1609	each = jQuery.each;
1610
1611// determine rgba support immediately
1612supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
1613support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
1614
1615// define cache name and alpha properties
1616// for rgba and hsla spaces
1617each( spaces, function( spaceName, space ) {
1618	space.cache = "_" + spaceName;
1619	space.props.alpha = {
1620		idx: 3,
1621		type: "percent",
1622		def: 1
1623	};
1624});
1625
1626function clamp( value, prop, allowEmpty ) {
1627	var type = propTypes[ prop.type ] || {};
1628
1629	if ( value == null ) {
1630		return (allowEmpty || !prop.def) ? null : prop.def;
1631	}
1632
1633	// ~~ is an short way of doing floor for positive numbers
1634	value = type.floor ? ~~value : parseFloat( value );
1635
1636	// IE will pass in empty strings as value for alpha,
1637	// which will hit this case
1638	if ( isNaN( value ) ) {
1639		return prop.def;
1640	}
1641
1642	if ( type.mod ) {
1643		// we add mod before modding to make sure that negatives values
1644		// get converted properly: -10 -> 350
1645		return (value + type.mod) % type.mod;
1646	}
1647
1648	// for now all property types without mod have min and max
1649	return 0 > value ? 0 : type.max < value ? type.max : value;
1650}
1651
1652function stringParse( string ) {
1653	var inst = color(),
1654		rgba = inst._rgba = [];
1655
1656	string = string.toLowerCase();
1657
1658	each( stringParsers, function( i, parser ) {
1659		var parsed,
1660			match = parser.re.exec( string ),
1661			values = match && parser.parse( match ),
1662			spaceName = parser.space || "rgba";
1663
1664		if ( values ) {
1665			parsed = inst[ spaceName ]( values );
1666
1667			// if this was an rgba parse the assignment might happen twice
1668			// oh well....
1669			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
1670			rgba = inst._rgba = parsed._rgba;
1671
1672			// exit each( stringParsers ) here because we matched
1673			return false;
1674		}
1675	});
1676
1677	// Found a stringParser that handled it
1678	if ( rgba.length ) {
1679
1680		// if this came from a parsed string, force "transparent" when alpha is 0
1681		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
1682		if ( rgba.join() === "0,0,0,0" ) {
1683			jQuery.extend( rgba, colors.transparent );
1684		}
1685		return inst;
1686	}
1687
1688	// named colors
1689	return colors[ string ];
1690}
1691
1692color.fn = jQuery.extend( color.prototype, {
1693	parse: function( red, green, blue, alpha ) {
1694		if ( red === undefined ) {
1695			this._rgba = [ null, null, null, null ];
1696			return this;
1697		}
1698		if ( red.jquery || red.nodeType ) {
1699			red = jQuery( red ).css( green );
1700			green = undefined;
1701		}
1702
1703		var inst = this,
1704			type = jQuery.type( red ),
1705			rgba = this._rgba = [];
1706
1707		// more than 1 argument specified - assume ( red, green, blue, alpha )
1708		if ( green !== undefined ) {
1709			red = [ red, green, blue, alpha ];
1710			type = "array";
1711		}
1712
1713		if ( type === "string" ) {
1714			return this.parse( stringParse( red ) || colors._default );
1715		}
1716
1717		if ( type === "array" ) {
1718			each( spaces.rgba.props, function( key, prop ) {
1719				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
1720			});
1721			return this;
1722		}
1723
1724		if ( type === "object" ) {
1725			if ( red instanceof color ) {
1726				each( spaces, function( spaceName, space ) {
1727					if ( red[ space.cache ] ) {
1728						inst[ space.cache ] = red[ space.cache ].slice();
1729					}
1730				});
1731			} else {
1732				each( spaces, function( spaceName, space ) {
1733					var cache = space.cache;
1734					each( space.props, function( key, prop ) {
1735
1736						// if the cache doesn't exist, and we know how to convert
1737						if ( !inst[ cache ] && space.to ) {
1738
1739							// if the value was null, we don't need to copy it
1740							// if the key was alpha, we don't need to copy it either
1741							if ( key === "alpha" || red[ key ] == null ) {
1742								return;
1743							}
1744							inst[ cache ] = space.to( inst._rgba );
1745						}
1746
1747						// this is the only case where we allow nulls for ALL properties.
1748						// call clamp with alwaysAllowEmpty
1749						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
1750					});
1751
1752					// everything defined but alpha?
1753					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
1754						// use the default of 1
1755						inst[ cache ][ 3 ] = 1;
1756						if ( space.from ) {
1757							inst._rgba = space.from( inst[ cache ] );
1758						}
1759					}
1760				});
1761			}
1762			return this;
1763		}
1764	},
1765	is: function( compare ) {
1766		var is = color( compare ),
1767			same = true,
1768			inst = this;
1769
1770		each( spaces, function( _, space ) {
1771			var localCache,
1772				isCache = is[ space.cache ];
1773			if (isCache) {
1774				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
1775				each( space.props, function( _, prop ) {
1776					if ( isCache[ prop.idx ] != null ) {
1777						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
1778						return same;
1779					}
1780				});
1781			}
1782			return same;
1783		});
1784		return same;
1785	},
1786	_space: function() {
1787		var used = [],
1788			inst = this;
1789		each( spaces, function( spaceName, space ) {
1790			if ( inst[ space.cache ] ) {
1791				used.push( spaceName );
1792			}
1793		});
1794		return used.pop();
1795	},
1796	transition: function( other, distance ) {
1797		var end = color( other ),
1798			spaceName = end._space(),
1799			space = spaces[ spaceName ],
1800			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
1801			start = startColor[ space.cache ] || space.to( startColor._rgba ),
1802			result = start.slice();
1803
1804		end = end[ space.cache ];
1805		each( space.props, function( key, prop ) {
1806			var index = prop.idx,
1807				startValue = start[ index ],
1808				endValue = end[ index ],
1809				type = propTypes[ prop.type ] || {};
1810
1811			// if null, don't override start value
1812			if ( endValue === null ) {
1813				return;
1814			}
1815			// if null - use end
1816			if ( startValue === null ) {
1817				result[ index ] = endValue;
1818			} else {
1819				if ( type.mod ) {
1820					if ( endValue - startValue > type.mod / 2 ) {
1821						startValue += type.mod;
1822					} else if ( startValue - endValue > type.mod / 2 ) {
1823						startValue -= type.mod;
1824					}
1825				}
1826				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
1827			}
1828		});
1829		return this[ spaceName ]( result );
1830	},
1831	blend: function( opaque ) {
1832		// if we are already opaque - return ourself
1833		if ( this._rgba[ 3 ] === 1 ) {
1834			return this;
1835		}
1836
1837		var rgb = this._rgba.slice(),
1838			a = rgb.pop(),
1839			blend = color( opaque )._rgba;
1840
1841		return color( jQuery.map( rgb, function( v, i ) {
1842			return ( 1 - a ) * blend[ i ] + a * v;
1843		}));
1844	},
1845	toRgbaString: function() {
1846		var prefix = "rgba(",
1847			rgba = jQuery.map( this._rgba, function( v, i ) {
1848				return v == null ? ( i > 2 ? 1 : 0 ) : v;
1849			});
1850
1851		if ( rgba[ 3 ] === 1 ) {
1852			rgba.pop();
1853			prefix = "rgb(";
1854		}
1855
1856		return prefix + rgba.join() + ")";
1857	},
1858	toHslaString: function() {
1859		var prefix = "hsla(",
1860			hsla = jQuery.map( this.hsla(), function( v, i ) {
1861				if ( v == null ) {
1862					v = i > 2 ? 1 : 0;
1863				}
1864
1865				// catch 1 and 2
1866				if ( i && i < 3 ) {
1867					v = Math.round( v * 100 ) + "%";
1868				}
1869				return v;
1870			});
1871
1872		if ( hsla[ 3 ] === 1 ) {
1873			hsla.pop();
1874			prefix = "hsl(";
1875		}
1876		return prefix + hsla.join() + ")";
1877	},
1878	toHexString: function( includeAlpha ) {
1879		var rgba = this._rgba.slice(),
1880			alpha = rgba.pop();
1881
1882		if ( includeAlpha ) {
1883			rgba.push( ~~( alpha * 255 ) );
1884		}
1885
1886		return "#" + jQuery.map( rgba, function( v ) {
1887
1888			// default to 0 when nulls exist
1889			v = ( v || 0 ).toString( 16 );
1890			return v.length === 1 ? "0" + v : v;
1891		}).join("");
1892	},
1893	toString: function() {
1894		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
1895	}
1896});
1897color.fn.parse.prototype = color.fn;
1898
1899// hsla conversions adapted from:
1900// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
1901
1902function hue2rgb( p, q, h ) {
1903	h = ( h + 1 ) % 1;
1904	if ( h * 6 < 1 ) {
1905		return p + (q - p) * h * 6;
1906	}
1907	if ( h * 2 < 1) {
1908		return q;
1909	}
1910	if ( h * 3 < 2 ) {
1911		return p + (q - p) * ((2/3) - h) * 6;
1912	}
1913	return p;
1914}
1915
1916spaces.hsla.to = function ( rgba ) {
1917	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
1918		return [ null, null, null, rgba[ 3 ] ];
1919	}
1920	var r = rgba[ 0 ] / 255,
1921		g = rgba[ 1 ] / 255,
1922		b = rgba[ 2 ] / 255,
1923		a = rgba[ 3 ],
1924		max = Math.max( r, g, b ),
1925		min = Math.min( r, g, b ),
1926		diff = max - min,
1927		add = max + min,
1928		l = add * 0.5,
1929		h, s;
1930
1931	if ( min === max ) {
1932		h = 0;
1933	} else if ( r === max ) {
1934		h = ( 60 * ( g - b ) / diff ) + 360;
1935	} else if ( g === max ) {
1936		h = ( 60 * ( b - r ) / diff ) + 120;
1937	} else {
1938		h = ( 60 * ( r - g ) / diff ) + 240;
1939	}
1940
1941	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
1942	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
1943	if ( diff === 0 ) {
1944		s = 0;
1945	} else if ( l <= 0.5 ) {
1946		s = diff / add;
1947	} else {
1948		s = diff / ( 2 - add );
1949	}
1950	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
1951};
1952
1953spaces.hsla.from = function ( hsla ) {
1954	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
1955		return [ null, null, null, hsla[ 3 ] ];
1956	}
1957	var h = hsla[ 0 ] / 360,
1958		s = hsla[ 1 ],
1959		l = hsla[ 2 ],
1960		a = hsla[ 3 ],
1961		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
1962		p = 2 * l - q;
1963
1964	return [
1965		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
1966		Math.round( hue2rgb( p, q, h ) * 255 ),
1967		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
1968		a
1969	];
1970};
1971
1972
1973each( spaces, function( spaceName, space ) {
1974	var props = space.props,
1975		cache = space.cache,
1976		to = space.to,
1977		from = space.from;
1978
1979	// makes rgba() and hsla()
1980	color.fn[ spaceName ] = function( value ) {
1981
1982		// generate a cache for this space if it doesn't exist
1983		if ( to && !this[ cache ] ) {
1984			this[ cache ] = to( this._rgba );
1985		}
1986		if ( value === undefined ) {
1987			return this[ cache ].slice();
1988		}
1989
1990		var ret,
1991			type = jQuery.type( value ),
1992			arr = ( type === "array" || type === "object" ) ? value : arguments,
1993			local = this[ cache ].slice();
1994
1995		each( props, function( key, prop ) {
1996			var val = arr[ type === "object" ? key : prop.idx ];
1997			if ( val == null ) {
1998				val = local[ prop.idx ];
1999			}
2000			local[ prop.idx ] = clamp( val, prop );
2001		});
2002
2003		if ( from ) {
2004			ret = color( from( local ) );
2005			ret[ cache ] = local;
2006			return ret;
2007		} else {
2008			return color( local );
2009		}
2010	};
2011
2012	// makes red() green() blue() alpha() hue() saturation() lightness()
2013	each( props, function( key, prop ) {
2014		// alpha is included in more than one space
2015		if ( color.fn[ key ] ) {
2016			return;
2017		}
2018		color.fn[ key ] = function( value ) {
2019			var vtype = jQuery.type( value ),
2020				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
2021				local = this[ fn ](),
2022				cur = local[ prop.idx ],
2023				match;
2024
2025			if ( vtype === "undefined" ) {
2026				return cur;
2027			}
2028
2029			if ( vtype === "function" ) {
2030				value = value.call( this, cur );
2031				vtype = jQuery.type( value );
2032			}
2033			if ( value == null && prop.empty ) {
2034				return this;
2035			}
2036			if ( vtype === "string" ) {
2037				match = rplusequals.exec( value );
2038				if ( match ) {
2039					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
2040				}
2041			}
2042			local[ prop.idx ] = value;
2043			return this[ fn ]( local );
2044		};
2045	});
2046});
2047
2048// add cssHook and .fx.step function for each named hook.
2049// accept a space separated string of properties
2050color.hook = function( hook ) {
2051	var hooks = hook.split( " " );
2052	each( hooks, function( i, hook ) {
2053		jQuery.cssHooks[ hook ] = {
2054			set: function( elem, value ) {
2055				var parsed, curElem,
2056					backgroundColor = "";
2057
2058				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
2059					value = color( parsed || value );
2060					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
2061						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
2062						while (
2063							(backgroundColor === "" || backgroundColor === "transparent") &&
2064							curElem && curElem.style
2065						) {
2066							try {
2067								backgroundColor = jQuery.css( curElem, "backgroundColor" );
2068								curElem = curElem.parentNode;
2069							} catch ( e ) {
2070							}
2071						}
2072
2073						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
2074							backgroundColor :
2075							"_default" );
2076					}
2077
2078					value = value.toRgbaString();
2079				}
2080				try {
2081					elem.style[ hook ] = value;
2082				} catch( e ) {
2083					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
2084				}
2085			}
2086		};
2087		jQuery.fx.step[ hook ] = function( fx ) {
2088			if ( !fx.colorInit ) {
2089				fx.start = color( fx.elem, hook );
2090				fx.end = color( fx.end );
2091				fx.colorInit = true;
2092			}
2093			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
2094		};
2095	});
2096
2097};
2098
2099color.hook( stepHooks );
2100
2101jQuery.cssHooks.borderColor = {
2102	expand: function( value ) {
2103		var expanded = {};
2104
2105		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
2106			expanded[ "border" + part + "Color" ] = value;
2107		});
2108		return expanded;
2109	}
2110};
2111
2112// Basic color names only.
2113// Usage of any of the other color names requires adding yourself or including
2114// jquery.color.svg-names.js.
2115colors = jQuery.Color.names = {
2116	// 4.1. Basic color keywords
2117	aqua: "#00ffff",
2118	black: "#000000",
2119	blue: "#0000ff",
2120	fuchsia: "#ff00ff",
2121	gray: "#808080",
2122	green: "#008000",
2123	lime: "#00ff00",
2124	maroon: "#800000",
2125	navy: "#000080",
2126	olive: "#808000",
2127	purple: "#800080",
2128	red: "#ff0000",
2129	silver: "#c0c0c0",
2130	teal: "#008080",
2131	white: "#ffffff",
2132	yellow: "#ffff00",
2133
2134	// 4.2.3. "transparent" color keyword
2135	transparent: [ null, null, null, 0 ],
2136
2137	_default: "#ffffff"
2138};
2139
2140})( jQuery );
2141
2142
2143/******************************************************************************/
2144/****************************** CLASS ANIMATIONS ******************************/
2145/******************************************************************************/
2146(function() {
2147
2148var classAnimationActions = [ "add", "remove", "toggle" ],
2149	shorthandStyles = {
2150		border: 1,
2151		borderBottom: 1,
2152		borderColor: 1,
2153		borderLeft: 1,
2154		borderRight: 1,
2155		borderTop: 1,
2156		borderWidth: 1,
2157		margin: 1,
2158		padding: 1
2159	};
2160
2161$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
2162	$.fx.step[ prop ] = function( fx ) {
2163		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
2164			jQuery.style( fx.elem, prop, fx.end );
2165			fx.setAttr = true;
2166		}
2167	};
2168});
2169
2170function getElementStyles( elem ) {
2171	var key, len,
2172		style = elem.ownerDocument.defaultView ?
2173			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
2174			elem.currentStyle,
2175		styles = {};
2176
2177	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
2178		len = style.length;
2179		while ( len-- ) {
2180			key = style[ len ];
2181			if ( typeof style[ key ] === "string" ) {
2182				styles[ $.camelCase( key ) ] = style[ key ];
2183			}
2184		}
2185	// support: Opera, IE <9
2186	} else {
2187		for ( key in style ) {
2188			if ( typeof style[ key ] === "string" ) {
2189				styles[ key ] = style[ key ];
2190			}
2191		}
2192	}
2193
2194	return styles;
2195}
2196
2197
2198function styleDifference( oldStyle, newStyle ) {
2199	var diff = {},
2200		name, value;
2201
2202	for ( name in newStyle ) {
2203		value = newStyle[ name ];
2204		if ( oldStyle[ name ] !== value ) {
2205			if ( !shorthandStyles[ name ] ) {
2206				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
2207					diff[ name ] = value;
2208				}
2209			}
2210		}
2211	}
2212
2213	return diff;
2214}
2215
2216// support: jQuery <1.8
2217if ( !$.fn.addBack ) {
2218	$.fn.addBack = function( selector ) {
2219		return this.add( selector == null ?
2220			this.prevObject : this.prevObject.filter( selector )
2221		);
2222	};
2223}
2224
2225$.effects.animateClass = function( value, duration, easing, callback ) {
2226	var o = $.speed( duration, easing, callback );
2227
2228	return this.queue( function() {
2229		var animated = $( this ),
2230			baseClass = animated.attr( "class" ) || "",
2231			applyClassChange,
2232			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
2233
2234		// map the animated objects to store the original styles.
2235		allAnimations = allAnimations.map(function() {
2236			var el = $( this );
2237			return {
2238				el: el,
2239				start: getElementStyles( this )
2240			};
2241		});
2242
2243		// apply class change
2244		applyClassChange = function() {
2245			$.each( classAnimationActions, function(i, action) {
2246				if ( value[ action ] ) {
2247					animated[ action + "Class" ]( value[ action ] );
2248				}
2249			});
2250		};
2251		applyClassChange();
2252
2253		// map all animated objects again - calculate new styles and diff
2254		allAnimations = allAnimations.map(function() {
2255			this.end = getElementStyles( this.el[ 0 ] );
2256			this.diff = styleDifference( this.start, this.end );
2257			return this;
2258		});
2259
2260		// apply original class
2261		animated.attr( "class", baseClass );
2262
2263		// map all animated objects again - this time collecting a promise
2264		allAnimations = allAnimations.map(function() {
2265			var styleInfo = this,
2266				dfd = $.Deferred(),
2267				opts = $.extend({}, o, {
2268					queue: false,
2269					complete: function() {
2270						dfd.resolve( styleInfo );
2271					}
2272				});
2273
2274			this.el.animate( this.diff, opts );
2275			return dfd.promise();
2276		});
2277
2278		// once all animations have completed:
2279		$.when.apply( $, allAnimations.get() ).done(function() {
2280
2281			// set the final class
2282			applyClassChange();
2283
2284			// for each animated element,
2285			// clear all css properties that were animated
2286			$.each( arguments, function() {
2287				var el = this.el;
2288				$.each( this.diff, function(key) {
2289					el.css( key, "" );
2290				});
2291			});
2292
2293			// this is guarnteed to be there if you use jQuery.speed()
2294			// it also handles dequeuing the next anim...
2295			o.complete.call( animated[ 0 ] );
2296		});
2297	});
2298};
2299
2300$.fn.extend({
2301	addClass: (function( orig ) {
2302		return function( classNames, speed, easing, callback ) {
2303			return speed ?
2304				$.effects.animateClass.call( this,
2305					{ add: classNames }, speed, easing, callback ) :
2306				orig.apply( this, arguments );
2307		};
2308	})( $.fn.addClass ),
2309
2310	removeClass: (function( orig ) {
2311		return function( classNames, speed, easing, callback ) {
2312			return arguments.length > 1 ?
2313				$.effects.animateClass.call( this,
2314					{ remove: classNames }, speed, easing, callback ) :
2315				orig.apply( this, arguments );
2316		};
2317	})( $.fn.removeClass ),
2318
2319	toggleClass: (function( orig ) {
2320		return function( classNames, force, speed, easing, callback ) {
2321			if ( typeof force === "boolean" || force === undefined ) {
2322				if ( !speed ) {
2323					// without speed parameter
2324					return orig.apply( this, arguments );
2325				} else {
2326					return $.effects.animateClass.call( this,
2327						(force ? { add: classNames } : { remove: classNames }),
2328						speed, easing, callback );
2329				}
2330			} else {
2331				// without force parameter
2332				return $.effects.animateClass.call( this,
2333					{ toggle: classNames }, force, speed, easing );
2334			}
2335		};
2336	})( $.fn.toggleClass ),
2337
2338	switchClass: function( remove, add, speed, easing, callback) {
2339		return $.effects.animateClass.call( this, {
2340			add: add,
2341			remove: remove
2342		}, speed, easing, callback );
2343	}
2344});
2345
2346})();
2347
2348/******************************************************************************/
2349/*********************************** EFFECTS **********************************/
2350/******************************************************************************/
2351
2352(function() {
2353
2354$.extend( $.effects, {
2355	version: "1.10.3",
2356
2357	// Saves a set of properties in a data storage
2358	save: function( element, set ) {
2359		for( var i=0; i < set.length; i++ ) {
2360			if ( set[ i ] !== null ) {
2361				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
2362			}
2363		}
2364	},
2365
2366	// Restores a set of previously saved properties from a data storage
2367	restore: function( element, set ) {
2368		var val, i;
2369		for( i=0; i < set.length; i++ ) {
2370			if ( set[ i ] !== null ) {
2371				val = element.data( dataSpace + set[ i ] );
2372				// support: jQuery 1.6.2
2373				// http://bugs.jquery.com/ticket/9917
2374				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
2375				// We can't differentiate between "" and 0 here, so we just assume
2376				// empty string since it's likely to be a more common value...
2377				if ( val === undefined ) {
2378					val = "";
2379				}
2380				element.css( set[ i ], val );
2381			}
2382		}
2383	},
2384
2385	setMode: function( el, mode ) {
2386		if (mode === "toggle") {
2387			mode = el.is( ":hidden" ) ? "show" : "hide";
2388		}
2389		return mode;
2390	},
2391
2392	// Translates a [top,left] array into a baseline value
2393	// this should be a little more flexible in the future to handle a string & hash
2394	getBaseline: function( origin, original ) {
2395		var y, x;
2396		switch ( origin[ 0 ] ) {
2397			case "top": y = 0; break;
2398			case "middle": y = 0.5; break;
2399			case "bottom": y = 1; break;
2400			default: y = origin[ 0 ] / original.height;
2401		}
2402		switch ( origin[ 1 ] ) {
2403			case "left": x = 0; break;
2404			case "center": x = 0.5; break;
2405			case "right": x = 1; break;
2406			default: x = origin[ 1 ] / original.width;
2407		}
2408		return {
2409			x: x,
2410			y: y
2411		};
2412	},
2413
2414	// Wraps the element around a wrapper that copies position properties
2415	createWrapper: function( element ) {
2416
2417		// if the element is already wrapped, return it
2418		if ( element.parent().is( ".ui-effects-wrapper" )) {
2419			return element.parent();
2420		}
2421
2422		// wrap the element
2423		var props = {
2424				width: element.outerWidth(true),
2425				height: element.outerHeight(true),
2426				"float": element.css( "float" )
2427			},
2428			wrapper = $( "<div></div>" )
2429				.addClass( "ui-effects-wrapper" )
2430				.css({
2431					fontSize: "100%",
2432					background: "transparent",
2433					border: "none",
2434					margin: 0,
2435					padding: 0
2436				}),
2437			// Store the size in case width/height are defined in % - Fixes #5245
2438			size = {
2439				width: element.width(),
2440				height: element.height()
2441			},
2442			active = document.activeElement;
2443
2444		// support: Firefox
2445		// Firefox incorrectly exposes anonymous content
2446		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
2447		try {
2448			active.id;
2449		} catch( e ) {
2450			active = document.body;
2451		}
2452
2453		element.wrap( wrapper );
2454
2455		// Fixes #7595 - Elements lose focus when wrapped.
2456		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
2457			$( active ).focus();
2458		}
2459
2460		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
2461
2462		// transfer positioning properties to the wrapper
2463		if ( element.css( "position" ) === "static" ) {
2464			wrapper.css({ position: "relative" });
2465			element.css({ position: "relative" });
2466		} else {
2467			$.extend( props, {
2468				position: element.css( "position" ),
2469				zIndex: element.css( "z-index" )
2470			});
2471			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
2472				props[ pos ] = element.css( pos );
2473				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
2474					props[ pos ] = "auto";
2475				}
2476			});
2477			element.css({
2478				position: "relative",
2479				top: 0,
2480				left: 0,
2481				right: "auto",
2482				bottom: "auto"
2483			});
2484		}
2485		element.css(size);
2486
2487		return wrapper.css( props ).show();
2488	},
2489
2490	removeWrapper: function( element ) {
2491		var active = document.activeElement;
2492
2493		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
2494			element.parent().replaceWith( element );
2495
2496			// Fixes #7595 - Elements lose focus when wrapped.
2497			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
2498				$( active ).focus();
2499			}
2500		}
2501
2502
2503		return element;
2504	},
2505
2506	setTransition: function( element, list, factor, value ) {
2507		value = value || {};
2508		$.each( list, function( i, x ) {
2509			var unit = element.cssUnit( x );
2510			if ( unit[ 0 ] > 0 ) {
2511				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
2512			}
2513		});
2514		return value;
2515	}
2516});
2517
2518// return an effect options object for the given parameters:
2519function _normalizeArguments( effect, options, speed, callback ) {
2520
2521	// allow passing all options as the first parameter
2522	if ( $.isPlainObject( effect ) ) {
2523		options = effect;
2524		effect = effect.effect;
2525	}
2526
2527	// convert to an object
2528	effect = { effect: effect };
2529
2530	// catch (effect, null, ...)
2531	if ( options == null ) {
2532		options = {};
2533	}
2534
2535	// catch (effect, callback)
2536	if ( $.isFunction( options ) ) {
2537		callback = options;
2538		speed = null;
2539		options = {};
2540	}
2541
2542	// catch (effect, speed, ?)
2543	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
2544		callback = speed;
2545		speed = options;
2546		options = {};
2547	}
2548
2549	// catch (effect, options, callback)
2550	if ( $.isFunction( speed ) ) {
2551		callback = speed;
2552		speed = null;
2553	}
2554
2555	// add options to effect
2556	if ( options ) {
2557		$.extend( effect, options );
2558	}
2559
2560	speed = speed || options.duration;
2561	effect.duration = $.fx.off ? 0 :
2562		typeof speed === "number" ? speed :
2563		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
2564		$.fx.speeds._default;
2565
2566	effect.complete = callback || options.complete;
2567
2568	return effect;
2569}
2570
2571function standardAnimationOption( option ) {
2572	// Valid standard speeds (nothing, number, named speed)
2573	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
2574		return true;
2575	}
2576
2577	// Invalid strings - treat as "normal" speed
2578	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
2579		return true;
2580	}
2581
2582	// Complete callback
2583	if ( $.isFunction( option ) ) {
2584		return true;
2585	}
2586
2587	// Options hash (but not naming an effect)
2588	if ( typeof option === "object" && !option.effect ) {
2589		return true;
2590	}
2591
2592	// Didn't match any standard API
2593	return false;
2594}
2595
2596$.fn.extend({
2597	effect: function( /* effect, options, speed, callback */ ) {
2598		var args = _normalizeArguments.apply( this, arguments ),
2599			mode = args.mode,
2600			queue = args.queue,
2601			effectMethod = $.effects.effect[ args.effect ];
2602
2603		if ( $.fx.off || !effectMethod ) {
2604			// delegate to the original method (e.g., .show()) if possible
2605			if ( mode ) {
2606				return this[ mode ]( args.duration, args.complete );
2607			} else {
2608				return this.each( function() {
2609					if ( args.complete ) {
2610						args.complete.call( this );
2611					}
2612				});
2613			}
2614		}
2615
2616		function run( next ) {
2617			var elem = $( this ),
2618				complete = args.complete,
2619				mode = args.mode;
2620
2621			function done() {
2622				if ( $.isFunction( complete ) ) {
2623					complete.call( elem[0] );
2624				}
2625				if ( $.isFunction( next ) ) {
2626					next();
2627				}
2628			}
2629
2630			// If the element already has the correct final state, delegate to
2631			// the core methods so the internal tracking of "olddisplay" works.
2632			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
2633				elem[ mode ]();
2634				done();
2635			} else {
2636				effectMethod.call( elem[0], args, done );
2637			}
2638		}
2639
2640		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
2641	},
2642
2643	show: (function( orig ) {
2644		return function( option ) {
2645			if ( standardAnimationOption( option ) ) {
2646				return orig.apply( this, arguments );
2647			} else {
2648				var args = _normalizeArguments.apply( this, arguments );
2649				args.mode = "show";
2650				return this.effect.call( this, args );
2651			}
2652		};
2653	})( $.fn.show ),
2654
2655	hide: (function( orig ) {
2656		return function( option ) {
2657			if ( standardAnimationOption( option ) ) {
2658				return orig.apply( this, arguments );
2659			} else {
2660				var args = _normalizeArguments.apply( this, arguments );
2661				args.mode = "hide";
2662				return this.effect.call( this, args );
2663			}
2664		};
2665	})( $.fn.hide ),
2666
2667	toggle: (function( orig ) {
2668		return function( option ) {
2669			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
2670				return orig.apply( this, arguments );
2671			} else {
2672				var args = _normalizeArguments.apply( this, arguments );
2673				args.mode = "toggle";
2674				return this.effect.call( this, args );
2675			}
2676		};
2677	})( $.fn.toggle ),
2678
2679	// helper functions
2680	cssUnit: function(key) {
2681		var style = this.css( key ),
2682			val = [];
2683
2684		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
2685			if ( style.indexOf( unit ) > 0 ) {
2686				val = [ parseFloat( style ), unit ];
2687			}
2688		});
2689		return val;
2690	}
2691});
2692
2693})();
2694
2695/******************************************************************************/
2696/*********************************** EASING ***********************************/
2697/******************************************************************************/
2698
2699(function() {
2700
2701// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
2702
2703var baseEasings = {};
2704
2705$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
2706	baseEasings[ name ] = function( p ) {
2707		return Math.pow( p, i + 2 );
2708	};
2709});
2710
2711$.extend( baseEasings, {
2712	Sine: function ( p ) {
2713		return 1 - Math.cos( p * Math.PI / 2 );
2714	},
2715	Circ: function ( p ) {
2716		return 1 - Math.sqrt( 1 - p * p );
2717	},
2718	Elastic: function( p ) {
2719		return p === 0 || p === 1 ? p :
2720			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
2721	},
2722	Back: function( p ) {
2723		return p * p * ( 3 * p - 2 );
2724	},
2725	Bounce: function ( p ) {
2726		var pow2,
2727			bounce = 4;
2728
2729		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
2730		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
2731	}
2732});
2733
2734$.each( baseEasings, function( name, easeIn ) {
2735	$.easing[ "easeIn" + name ] = easeIn;
2736	$.easing[ "easeOut" + name ] = function( p ) {
2737		return 1 - easeIn( 1 - p );
2738	};
2739	$.easing[ "easeInOut" + name ] = function( p ) {
2740		return p < 0.5 ?
2741			easeIn( p * 2 ) / 2 :
2742			1 - easeIn( p * -2 + 2 ) / 2;
2743	};
2744});
2745
2746})();
2747
2748})(jQuery);
2749(function( $, undefined ) {
2750
2751var rvertical = /up|down|vertical/,
2752	rpositivemotion = /up|left|vertical|horizontal/;
2753
2754$.effects.effect.blind = function( o, done ) {
2755	// Create element
2756	var el = $( this ),
2757		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
2758		mode = $.effects.setMode( el, o.mode || "hide" ),
2759		direction = o.direction || "up",
2760		vertical = rvertical.test( direction ),
2761		ref = vertical ? "height" : "width",
2762		ref2 = vertical ? "top" : "left",
2763		motion = rpositivemotion.test( direction ),
2764		animation = {},
2765		show = mode === "show",
2766		wrapper, distance, margin;
2767
2768	// if already wrapped, the wrapper's properties are my property. #6245
2769	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
2770		$.effects.save( el.parent(), props );
2771	} else {
2772		$.effects.save( el, props );
2773	}
2774	el.show();
2775	wrapper = $.effects.createWrapper( el ).css({
2776		overflow: "hidden"
2777	});
2778
2779	distance = wrapper[ ref ]();
2780	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
2781
2782	animation[ ref ] = show ? distance : 0;
2783	if ( !motion ) {
2784		el
2785			.css( vertical ? "bottom" : "right", 0 )
2786			.css( vertical ? "top" : "left", "auto" )
2787			.css({ position: "absolute" });
2788
2789		animation[ ref2 ] = show ? margin : distance + margin;
2790	}
2791
2792	// start at 0 if we are showing
2793	if ( show ) {
2794		wrapper.css( ref, 0 );
2795		if ( ! motion ) {
2796			wrapper.css( ref2, margin + distance );
2797		}
2798	}
2799
2800	// Animate
2801	wrapper.animate( animation, {
2802		duration: o.duration,
2803		easing: o.easing,
2804		queue: false,
2805		complete: function() {
2806			if ( mode === "hide" ) {
2807				el.hide();
2808			}
2809			$.effects.restore( el, props );
2810			$.effects.removeWrapper( el );
2811			done();
2812		}
2813	});
2814
2815};
2816
2817})(jQuery);
2818(function( $, undefined ) {
2819
2820$.effects.effect.bounce = function( o, done ) {
2821	var el = $( this ),
2822		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
2823
2824		// defaults:
2825		mode = $.effects.setMode( el, o.mode || "effect" ),
2826		hide = mode === "hide",
2827		show = mode === "show",
2828		direction = o.direction || "up",
2829		distance = o.distance,
2830		times = o.times || 5,
2831
2832		// number of internal animations
2833		anims = times * 2 + ( show || hide ? 1 : 0 ),
2834		speed = o.duration / anims,
2835		easing = o.easing,
2836
2837		// utility:
2838		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
2839		motion = ( direction === "up" || direction === "left" ),
2840		i,
2841		upAnim,
2842		downAnim,
2843
2844		// we will need to re-assemble the queue to stack our animations in place
2845		queue = el.queue(),
2846		queuelen = queue.length;
2847
2848	// Avoid touching opacity to prevent clearType and PNG issues in IE
2849	if ( show || hide ) {
2850		props.push( "opacity" );
2851	}
2852
2853	$.effects.save( el, props );
2854	el.show();
2855	$.effects.createWrapper( el ); // Create Wrapper
2856
2857	// default distance for the BIGGEST bounce is the outer Distance / 3
2858	if ( !distance ) {
2859		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
2860	}
2861
2862	if ( show ) {
2863		downAnim = { opacity: 1 };
2864		downAnim[ ref ] = 0;
2865
2866		// if we are showing, force opacity 0 and set the initial position
2867		// then do the "first" animation
2868		el.css( "opacity", 0 )
2869			.css( ref, motion ? -distance * 2 : distance * 2 )
2870			.animate( downAnim, speed, easing );
2871	}
2872
2873	// start at the smallest distance if we are hiding
2874	if ( hide ) {
2875		distance = distance / Math.pow( 2, times - 1 );
2876	}
2877
2878	downAnim = {};
2879	downAnim[ ref ] = 0;
2880	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
2881	for ( i = 0; i < times; i++ ) {
2882		upAnim = {};
2883		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
2884
2885		el.animate( upAnim, speed, easing )
2886			.animate( downAnim, speed, easing );
2887
2888		distance = hide ? distance * 2 : distance / 2;
2889	}
2890
2891	// Last Bounce when Hiding
2892	if ( hide ) {
2893		upAnim = { opacity: 0 };
2894		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
2895
2896		el.animate( upAnim, speed, easing );
2897	}
2898
2899	el.queue(function() {
2900		if ( hide ) {
2901			el.hide();
2902		}
2903		$.effects.restore( el, props );
2904		$.effects.removeWrapper( el );
2905		done();
2906	});
2907
2908	// inject all the animations we just queued to be first in line (after "inprogress")
2909	if ( queuelen > 1) {
2910		queue.splice.apply( queue,
2911			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
2912	}
2913	el.dequeue();
2914
2915};
2916
2917})(jQuery);
2918(function( $, undefined ) {
2919
2920$.effects.effect.clip = function( o, done ) {
2921	// Create element
2922	var el = $( this ),
2923		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
2924		mode = $.effects.setMode( el, o.mode || "hide" ),
2925		show = mode === "show",
2926		direction = o.direction || "vertical",
2927		vert = direction === "vertical",
2928		size = vert ? "height" : "width",
2929		position = vert ? "top" : "left",
2930		animation = {},
2931		wrapper, animate, distance;
2932
2933	// Save & Show
2934	$.effects.save( el, props );
2935	el.show();
2936
2937	// Create Wrapper
2938	wrapper = $.effects.createWrapper( el ).css({
2939		overflow: "hidden"
2940	});
2941	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
2942	distance = animate[ size ]();
2943
2944	// Shift
2945	if ( show ) {
2946		animate.css( size, 0 );
2947		animate.css( position, distance / 2 );
2948	}
2949
2950	// Create Animation Object:
2951	animation[ size ] = show ? distance : 0;
2952	animation[ position ] = show ? 0 : distance / 2;
2953
2954	// Animate
2955	animate.animate( animation, {
2956		queue: false,
2957		duration: o.duration,
2958		easing: o.easing,
2959		complete: function() {
2960			if ( !show ) {
2961				el.hide();
2962			}
2963			$.effects.restore( el, props );
2964			$.effects.removeWrapper( el );
2965			done();
2966		}
2967	});
2968
2969};
2970
2971})(jQuery);
2972(function( $, undefined ) {
2973
2974$.effects.effect.drop = function( o, done ) {
2975
2976	var el = $( this ),
2977		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
2978		mode = $.effects.setMode( el, o.mode || "hide" ),
2979		show = mode === "show",
2980		direction = o.direction || "left",
2981		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
2982		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
2983		animation = {
2984			opacity: show ? 1 : 0
2985		},
2986		distance;
2987
2988	// Adjust
2989	$.effects.save( el, props );
2990	el.show();
2991	$.effects.createWrapper( el );
2992
2993	distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
2994
2995	if ( show ) {
2996		el
2997			.css( "opacity", 0 )
2998			.css( ref, motion === "pos" ? -distance : distance );
2999	}
3000
3001	// Animation
3002	animation[ ref ] = ( show ?
3003		( motion === "pos" ? "+=" : "-=" ) :
3004		( motion === "pos" ? "-=" : "+=" ) ) +
3005		distance;
3006
3007	// Animate
3008	el.animate( animation, {
3009		queue: false,
3010		duration: o.duration,
3011		easing: o.easing,
3012		complete: function() {
3013			if ( mode === "hide" ) {
3014				el.hide();
3015			}
3016			$.effects.restore( el, props );
3017			$.effects.removeWrapper( el );
3018			done();
3019		}
3020	});
3021};
3022
3023})(jQuery);
3024(function( $, undefined ) {
3025
3026$.effects.effect.explode = function( o, done ) {
3027
3028	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
3029		cells = rows,
3030		el = $( this ),
3031		mode = $.effects.setMode( el, o.mode || "hide" ),
3032		show = mode === "show",
3033
3034		// show and then visibility:hidden the element before calculating offset
3035		offset = el.show().css( "visibility", "hidden" ).offset(),
3036
3037		// width and height of a piece
3038		width = Math.ceil( el.outerWidth() / cells ),
3039		height = Math.ceil( el.outerHeight() / rows ),
3040		pieces = [],
3041
3042		// loop
3043		i, j, left, top, mx, my;
3044
3045	// children animate complete:
3046	function childComplete() {
3047		pieces.push( this );
3048		if ( pieces.length === rows * cells ) {
3049			animComplete();
3050		}
3051	}
3052
3053	// clone the element for each row and cell.
3054	for( i = 0; i < rows ; i++ ) { // ===>
3055		top = offset.top + i * height;
3056		my = i - ( rows - 1 ) / 2 ;
3057
3058		for( j = 0; j < cells ; j++ ) { // |||
3059			left = offset.left + j * width;
3060			mx = j - ( cells - 1 ) / 2 ;
3061
3062			// Create a clone of the now hidden main element that will be absolute positioned
3063			// within a wrapper div off the -left and -top equal to size of our pieces
3064			el
3065				.clone()
3066				.appendTo( "body" )
3067				.wrap( "<div></div>" )
3068				.css({
3069					position: "absolute",
3070					visibility: "visible",
3071					left: -j * width,
3072					top: -i * height
3073				})
3074
3075			// select the wrapper - make it overflow: hidden and absolute positioned based on
3076			// where the original was located +left and +top equal to the size of pieces
3077				.parent()
3078				.addClass( "ui-effects-explode" )
3079				.css({
3080					position: "absolute",
3081					overflow: "hidden",
3082					width: width,
3083					height: height,
3084					left: left + ( show ? mx * width : 0 ),
3085					top: top + ( show ? my * height : 0 ),
3086					opacity: show ? 0 : 1
3087				}).animate({
3088					left: left + ( show ? 0 : mx * width ),
3089					top: top + ( show ? 0 : my * height ),
3090					opacity: show ? 1 : 0
3091				}, o.duration || 500, o.easing, childComplete );
3092		}
3093	}
3094
3095	function animComplete() {
3096		el.css({
3097			visibility: "visible"
3098		});
3099		$( pieces ).remove();
3100		if ( !show ) {
3101			el.hide();
3102		}
3103		done();
3104	}
3105};
3106
3107})(jQuery);
3108(function( $, undefined ) {
3109
3110$.effects.effect.fade = function( o, done ) {
3111	var el = $( this ),
3112		mode = $.effects.setMode( el, o.mode || "toggle" );
3113
3114	el.animate({
3115		opacity: mode
3116	}, {
3117		queue: false,
3118		duration: o.duration,
3119		easing: o.easing,
3120		complete: done
3121	});
3122};
3123
3124})( jQuery );
3125(function( $, undefined ) {
3126
3127$.effects.effect.fold = function( o, done ) {
3128
3129	// Create element
3130	var el = $( this ),
3131		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
3132		mode = $.effects.setMode( el, o.mode || "hide" ),
3133		show = mode === "show",
3134		hide = mode === "hide",
3135		size = o.size || 15,
3136		percent = /([0-9]+)%/.exec( size ),
3137		horizFirst = !!o.horizFirst,
3138		widthFirst = show !== horizFirst,
3139		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
3140		duration = o.duration / 2,
3141		wrapper, distance,
3142		animation1 = {},
3143		animation2 = {};
3144
3145	$.effects.save( el, props );
3146	el.show();
3147
3148	// Create Wrapper
3149	wrapper = $.effects.createWrapper( el ).css({
3150		overflow: "hidden"
3151	});
3152	distance = widthFirst ?
3153		[ wrapper.width(), wrapper.height() ] :
3154		[ wrapper.height(), wrapper.width() ];
3155
3156	if ( percent ) {
3157		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
3158	}
3159	if ( show ) {
3160		wrapper.css( horizFirst ? {
3161			height: 0,
3162			width: size
3163		} : {
3164			height: size,
3165			width: 0
3166		});
3167	}
3168
3169	// Animation
3170	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
3171	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
3172
3173	// Animate
3174	wrapper
3175		.animate( animation1, duration, o.easing )
3176		.animate( animation2, duration, o.easing, function() {
3177			if ( hide ) {
3178				el.hide();
3179			}
3180			$.effects.restore( el, props );
3181			$.effects.removeWrapper( el );
3182			done();
3183		});
3184
3185};
3186
3187})(jQuery);
3188(function( $, undefined ) {
3189
3190$.effects.effect.highlight = function( o, done ) {
3191	var elem = $( this ),
3192		props = [ "backgroundImage", "backgroundColor", "opacity" ],
3193		mode = $.effects.setMode( elem, o.mode || "show" ),
3194		animation = {
3195			backgroundColor: elem.css( "backgroundColor" )
3196		};
3197
3198	if (mode === "hide") {
3199		animation.opacity = 0;
3200	}
3201
3202	$.effects.save( elem, props );
3203
3204	elem
3205		.show()
3206		.css({
3207			backgroundImage: "none",
3208			backgroundColor: o.color || "#ffff99"
3209		})
3210		.animate( animation, {
3211			queue: false,
3212			duration: o.duration,
3213			easing: o.easing,
3214			complete: function() {
3215				if ( mode === "hide" ) {
3216					elem.hide();
3217				}
3218				$.effects.restore( elem, props );
3219				done();
3220			}
3221		});
3222};
3223
3224})(jQuery);
3225(function( $, undefined ) {
3226
3227$.effects.effect.pulsate = function( o, done ) {
3228	var elem = $( this ),
3229		mode = $.effects.setMode( elem, o.mode || "show" ),
3230		show = mode === "show",
3231		hide = mode === "hide",
3232		showhide = ( show || mode === "hide" ),
3233
3234		// showing or hiding leaves of the "last" animation
3235		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
3236		duration = o.duration / anims,
3237		animateTo = 0,
3238		queue = elem.queue(),
3239		queuelen = queue.length,
3240		i;
3241
3242	if ( show || !elem.is(":visible")) {
3243		elem.css( "opacity", 0 ).show();
3244		animateTo = 1;
3245	}
3246
3247	// anims - 1 opacity "toggles"
3248	for ( i = 1; i < anims; i++ ) {
3249		elem.animate({
3250			opacity: animateTo
3251		}, duration, o.easing );
3252		animateTo = 1 - animateTo;
3253	}
3254
3255	elem.animate({
3256		opacity: animateTo
3257	}, duration, o.easing);
3258
3259	elem.queue(function() {
3260		if ( hide ) {
3261			elem.hide();
3262		}
3263		done();
3264	});
3265
3266	// We just queued up "anims" animations, we need to put them next in the queue
3267	if ( queuelen > 1 ) {
3268		queue.splice.apply( queue,
3269			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
3270	}
3271	elem.dequeue();
3272};
3273
3274})(jQuery);
3275(function( $, undefined ) {
3276
3277$.effects.effect.puff = function( o, done ) {
3278	var elem = $( this ),
3279		mode = $.effects.setMode( elem, o.mode || "hide" ),
3280		hide = mode === "hide",
3281		percent = parseInt( o.percent, 10 ) || 150,
3282		factor = percent / 100,
3283		original = {
3284			height: elem.height(),
3285			width: elem.width(),
3286			outerHeight: elem.outerHeight(),
3287			outerWidth: elem.outerWidth()
3288		};
3289
3290	$.extend( o, {
3291		effect: "scale",
3292		queue: false,
3293		fade: true,
3294		mode: mode,
3295		complete: done,
3296		percent: hide ? percent : 100,
3297		from: hide ?
3298			original :
3299			{
3300				height: original.height * factor,
3301				width: original.width * factor,
3302				outerHeight: original.outerHeight * factor,
3303				outerWidth: original.outerWidth * factor
3304			}
3305	});
3306
3307	elem.effect( o );
3308};
3309
3310$.effects.effect.scale = function( o, done ) {
3311
3312	// Create element
3313	var el = $( this ),
3314		options = $.extend( true, {}, o ),
3315		mode = $.effects.setMode( el, o.mode || "effect" ),
3316		percent = parseInt( o.percent, 10 ) ||
3317			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
3318		direction = o.direction || "both",
3319		origin = o.origin,
3320		original = {
3321			height: el.height(),
3322			width: el.width(),
3323			outerHeight: el.outerHeight(),
3324			outerWidth: el.outerWidth()
3325		},
3326		factor = {
3327			y: direction !== "horizontal" ? (percent / 100) : 1,
3328			x: direction !== "vertical" ? (percent / 100) : 1
3329		};
3330
3331	// We are going to pass this effect to the size effect:
3332	options.effect = "size";
3333	options.queue = false;
3334	options.complete = done;
3335
3336	// Set default origin and restore for show/hide
3337	if ( mode !== "effect" ) {
3338		options.origin = origin || ["middle","center"];
3339		options.restore = true;
3340	}
3341
3342	options.from = o.from || ( mode === "show" ? {
3343		height: 0,
3344		width: 0,
3345		outerHeight: 0,
3346		outerWidth: 0
3347	} : original );
3348	options.to = {
3349		height: original.height * factor.y,
3350		width: original.width * factor.x,
3351		outerHeight: original.outerHeight * factor.y,
3352		outerWidth: original.outerWidth * factor.x
3353	};
3354
3355	// Fade option to support puff
3356	if ( options.fade ) {
3357		if ( mode === "show" ) {
3358			options.from.opacity = 0;
3359			options.to.opacity = 1;
3360		}
3361		if ( mode === "hide" ) {
3362			options.from.opacity = 1;
3363			options.to.opacity = 0;
3364		}
3365	}
3366
3367	// Animate
3368	el.effect( options );
3369
3370};
3371
3372$.effects.effect.size = function( o, done ) {
3373
3374	// Create element
3375	var original, baseline, factor,
3376		el = $( this ),
3377		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
3378
3379		// Always restore
3380		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
3381
3382		// Copy for children
3383		props2 = [ "width", "height", "overflow" ],
3384		cProps = [ "fontSize" ],
3385		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
3386		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
3387
3388		// Set options
3389		mode = $.effects.setMode( el, o.mode || "effect" ),
3390		restore = o.restore || mode !== "effect",
3391		scale = o.scale || "both",
3392		origin = o.origin || [ "middle", "center" ],
3393		position = el.css( "position" ),
3394		props = restore ? props0 : props1,
3395		zero = {
3396			height: 0,
3397			width: 0,
3398			outerHeight: 0,
3399			outerWidth: 0
3400		};
3401
3402	if ( mode === "show" ) {
3403		el.show();
3404	}
3405	original = {
3406		height: el.height(),
3407		width: el.width(),
3408		outerHeight: el.outerHeight(),
3409		outerWidth: el.outerWidth()
3410	};
3411
3412	if ( o.mode === "toggle" && mode === "show" ) {
3413		el.from = o.to || zero;
3414		el.to = o.from || original;
3415	} else {
3416		el.from = o.from || ( mode === "show" ? zero : original );
3417		el.to = o.to || ( mode === "hide" ? zero : original );
3418	}
3419
3420	// Set scaling factor
3421	factor = {
3422		from: {
3423			y: el.from.height / original.height,
3424			x: el.from.width / original.width
3425		},
3426		to: {
3427			y: el.to.height / original.height,
3428			x: el.to.width / original.width
3429		}
3430	};
3431
3432	// Scale the css box
3433	if ( scale === "box" || scale === "both" ) {
3434
3435		// Vertical props scaling
3436		if ( factor.from.y !== factor.to.y ) {
3437			props = props.concat( vProps );
3438			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
3439			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
3440		}
3441
3442		// Horizontal props scaling
3443		if ( factor.from.x !== factor.to.x ) {
3444			props = props.concat( hProps );
3445			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
3446			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
3447		}
3448	}
3449
3450	// Scale the content
3451	if ( scale === "content" || scale === "both" ) {
3452
3453		// Vertical props scaling
3454		if ( factor.from.y !== factor.to.y ) {
3455			props = props.concat( cProps ).concat( props2 );
3456			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
3457			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
3458		}
3459	}
3460
3461	$.effects.save( el, props );
3462	el.show();
3463	$.effects.createWrapper( el );
3464	el.css( "overflow", "hidden" ).css( el.from );
3465
3466	// Adjust
3467	if (origin) { // Calculate baseline shifts
3468		baseline = $.effects.getBaseline( origin, original );
3469		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
3470		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
3471		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
3472		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
3473	}
3474	el.css( el.from ); // set top & left
3475
3476	// Animate
3477	if ( scale === "content" || scale === "both" ) { // Scale the children
3478
3479		// Add margins/font-size
3480		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
3481		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
3482		props2 = props0.concat(vProps).concat(hProps);
3483
3484		el.find( "*[width]" ).each( function(){
3485			var child = $( this ),
3486				c_original = {
3487					height: child.height(),
3488					width: child.width(),
3489					outerHeight: child.outerHeight(),
3490					outerWidth: child.outerWidth()
3491				};
3492			if (restore) {
3493				$.effects.save(child, props2);
3494			}
3495
3496			child.from = {
3497				height: c_original.height * factor.from.y,
3498				width: c_original.width * factor.from.x,
3499				outerHeight: c_original.outerHeight * factor.from.y,
3500				outerWidth: c_original.outerWidth * factor.from.x
3501			};
3502			child.to = {
3503				height: c_original.height * factor.to.y,
3504				width: c_original.width * factor.to.x,
3505				outerHeight: c_original.height * factor.to.y,
3506				outerWidth: c_original.width * factor.to.x
3507			};
3508
3509			// Vertical props scaling
3510			if ( factor.from.y !== factor.to.y ) {
3511				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
3512				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
3513			}
3514
3515			// Horizontal props scaling
3516			if ( factor.from.x !== factor.to.x ) {
3517				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
3518				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
3519			}
3520
3521			// Animate children
3522			child.css( child.from );
3523			child.animate( child.to, o.duration, o.easing, function() {
3524
3525				// Restore children
3526				if ( restore ) {
3527					$.effects.restore( child, props2 );
3528				}
3529			});
3530		});
3531	}
3532
3533	// Animate
3534	el.animate( el.to, {
3535		queue: false,
3536		duration: o.duration,
3537		easing: o.easing,
3538		complete: function() {
3539			if ( el.to.opacity === 0 ) {
3540				el.css( "opacity", el.from.opacity );
3541			}
3542			if( mode === "hide" ) {
3543				el.hide();
3544			}
3545			$.effects.restore( el, props );
3546			if ( !restore ) {
3547
3548				// we need to calculate our new positioning based on the scaling
3549				if ( position === "static" ) {
3550					el.css({
3551						position: "relative",
3552						top: el.to.top,
3553						left: el.to.left
3554					});
3555				} else {
3556					$.each([ "top", "left" ], function( idx, pos ) {
3557						el.css( pos, function( _, str ) {
3558							var val = parseInt( str, 10 ),
3559								toRef = idx ? el.to.left : el.to.top;
3560
3561							// if original was "auto", recalculate the new value from wrapper
3562							if ( str === "auto" ) {
3563								return toRef + "px";
3564							}
3565
3566							return val + toRef + "px";
3567						});
3568					});
3569				}
3570			}
3571
3572			$.effects.removeWrapper( el );
3573			done();
3574		}
3575	});
3576
3577};
3578
3579})(jQuery);
3580(function( $, undefined ) {
3581
3582$.effects.effect.shake = function( o, done ) {
3583
3584	var el = $( this ),
3585		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
3586		mode = $.effects.setMode( el, o.mode || "effect" ),
3587		direction = o.direction || "left",
3588		distance = o.distance || 20,
3589		times = o.times || 3,
3590		anims = times * 2 + 1,
3591		speed = Math.round(o.duration/anims),
3592		ref = (direction === "up" || direction === "down") ? "top" : "left",
3593		positiveMotion = (direction === "up" || direction === "left"),
3594		animation = {},
3595		animation1 = {},
3596		animation2 = {},
3597		i,
3598
3599		// we will need to re-assemble the queue to stack our animations in place
3600		queue = el.queue(),
3601		queuelen = queue.length;
3602
3603	$.effects.save( el, props );
3604	el.show();
3605	$.effects.createWrapper( el );
3606
3607	// Animation
3608	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
3609	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
3610	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
3611
3612	// Animate
3613	el.animate( animation, speed, o.easing );
3614
3615	// Shakes
3616	for ( i = 1; i < times; i++ ) {
3617		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
3618	}
3619	el
3620		.animate( animation1, speed, o.easing )
3621		.animate( animation, speed / 2, o.easing )
3622		.queue(function() {
3623			if ( mode === "hide" ) {
3624				el.hide();
3625			}
3626			$.effects.restore( el, props );
3627			$.effects.removeWrapper( el );
3628			done();
3629		});
3630
3631	// inject all the animations we just queued to be first in line (after "inprogress")
3632	if ( queuelen > 1) {
3633		queue.splice.apply( queue,
3634			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
3635	}
3636	el.dequeue();
3637
3638};
3639
3640})(jQuery);
3641(function( $, undefined ) {
3642
3643$.effects.effect.slide = function( o, done ) {
3644
3645	// Create element
3646	var el = $( this ),
3647		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
3648		mode = $.effects.setMode( el, o.mode || "show" ),
3649		show = mode === "show",
3650		direction = o.direction || "left",
3651		ref = (direction === "up" || direction === "down") ? "top" : "left",
3652		positiveMotion = (direction === "up" || direction === "left"),
3653		distance,
3654		animation = {};
3655
3656	// Adjust
3657	$.effects.save( el, props );
3658	el.show();
3659	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
3660
3661	$.effects.createWrapper( el ).css({
3662		overflow: "hidden"
3663	});
3664
3665	if ( show ) {
3666		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
3667	}
3668
3669	// Animation
3670	animation[ ref ] = ( show ?
3671		( positiveMotion ? "+=" : "-=") :
3672		( positiveMotion ? "-=" : "+=")) +
3673		distance;
3674
3675	// Animate
3676	el.animate( animation, {
3677		queue: false,
3678		duration: o.duration,
3679		easing: o.easing,
3680		complete: function() {
3681			if ( mode === "hide" ) {
3682				el.hide();
3683			}
3684			$.effects.restore( el, props );
3685			$.effects.removeWrapper( el );
3686			done();
3687		}
3688	});
3689};
3690
3691})(jQuery);
3692(function( $, undefined ) {
3693
3694$.effects.effect.transfer = function( o, done ) {
3695	var elem = $( this ),
3696		target = $( o.to ),
3697		targetFixed = target.css( "position" ) === "fixed",
3698		body = $("body"),
3699		fixTop = targetFixed ? body.scrollTop() : 0,
3700		fixLeft = targetFixed ? body.scrollLeft() : 0,
3701		endPosition = target.offset(),
3702		animation = {
3703			top: endPosition.top - fixTop ,
3704			left: endPosition.left - fixLeft ,
3705			height: target.innerHeight(),
3706			width: target.innerWidth()
3707		},
3708		startPosition = elem.offset(),
3709		transfer = $( "<div class='ui-effects-transfer'></div>" )
3710			.appendTo( document.body )
3711			.addClass( o.className )
3712			.css({
3713				top: startPosition.top - fixTop ,
3714				left: startPosition.left - fixLeft ,
3715				height: elem.innerHeight(),
3716				width: elem.innerWidth(),
3717				position: targetFixed ? "fixed" : "absolute"
3718			})
3719			.animate( animation, o.duration, o.easing, function() {
3720				transfer.remove();
3721				done();
3722			});
3723};
3724
3725})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.