;(function($) {/** jQuery core modifications and additions **/$.keyCode = {	BACKSPACE: 8,	CAPS_LOCK: 20,	COMMA: 188,	CONTROL: 17,	DELETE: 46,	DOWN: 40,	END: 35,	ENTER: 13,	ESCAPE: 27,	HOME: 36,	INSERT: 45,	LEFT: 37,	NUMPAD_ADD: 107,	NUMPAD_DECIMAL: 110,	NUMPAD_DIVIDE: 111,	NUMPAD_ENTER: 108,	NUMPAD_MULTIPLY: 106,	NUMPAD_SUBTRACT: 109,	PAGE_DOWN: 34,	PAGE_UP: 33,	PERIOD: 190,	RIGHT: 39,	SHIFT: 16,	SPACE: 32,	TAB: 9,	UP: 38};//Temporary mappingsvar _remove = $.fn.remove;var isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);//Helper functions and ui object$.ui = {		version: "@VERSION",		// $.ui.plugin is deprecated.  Use the proxy pattern instead.	plugin: {		add: function(module, option, set) {			var proto = $.ui[module].prototype;			for(var i in set) {				proto.plugins[i] = proto.plugins[i] || [];				proto.plugins[i].push([option, set[i]]);			}		},		call: function(instance, name, args) {			var set = instance.plugins[name];			if(!set) { return; }						for (var i = 0; i < set.length; i++) {				if (instance.options[set[i][0]]) {					set[i][1].apply(instance.element, args);				}			}		}		},		cssCache: {},	css: function(name) {		if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; }		var tmp = $('<div class="ui-gen">').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body');				//if (!$.browser.safari)			//tmp.appendTo('body');				//Opera and Safari set width and height to 0px instead of auto		//Safari returns rgba(0,0,0,0) when bgcolor is not set		$.ui.cssCache[name] = !!(			(!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || 			!(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor')))		);		try { $('body').get(0).removeChild(tmp.get(0));	} catch(e){}		return $.ui.cssCache[name];	},	hasScroll: function(e, a) {				//If overflow is hidden, the element might have extra content, but the user wants to hide it		if ($(e).css('overflow') == 'hidden') { return false; }				var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',			has = false;				if (e[scroll] > 0) { return true; }				// TODO: determine which cases actually cause this to happen		// if the element doesn't have the scroll set, see if it's possible to		// set the scroll		e[scroll] = 1;		has = (e[scroll] > 0);		e[scroll] = 0;		return has;	}};//jQuery plugins$.fn.extend({		remove: function() {		// Safari has a native remove event which actually removes DOM elements,		// so we have to use triggerHandler instead of trigger (#3037).		$("*", this).add(this).each(function() {			$(this).triggerHandler("remove");		});		return _remove.apply(this, arguments );	},		enableSelection: function() {		return this			.attr('unselectable', 'off')			.css('MozUserSelect', '')			.unbind('selectstart.ui');	},		disableSelection: function() {		return this			.attr('unselectable', 'on')			.css('MozUserSelect', 'none')			.bind('selectstart.ui', function() { return false; });	},		// WAI-ARIA Semantics	ariaRole: function(role) {		return (role !== undefined						// setter			? this.attr("role", isFF2 ? "wairole:" + role : role)						// getter			: (this.attr("role") || "").replace(/^wairole:/, ""));	},		ariaState: function(state, value) {		return (value !== undefined						// setter			? this.each(function(i, el) {				(isFF2					? el.setAttributeNS("http://www.w3.org/2005/07/aaa",						"aaa:" + state, value)					: $(el).attr("aria-" + state, value));			})						// getter			: this.attr(isFF2 ? "aaa:" + state : "aria-" + state));	}	});//Additional selectors$.extend($.expr[':'], {		data: function(a, i, m) {		return $.data(a, m[3]);	},		// TODO: add support for object, area	tabbable: function(a, i, m) {		var nodeName = a.nodeName.toLowerCase();		var isVisible = function(element) {			function checkStyles(element) {				var style = element.style;				return (style.display != 'none' && style.visibility != 'hidden');			}						var visible = checkStyles(element);						(visible && $.each($.dir(element, 'parentNode'), function() {				return (visible = checkStyles(this));			}));						return visible;		};				return (			// in tab order			a.tabIndex >= 0 &&						( // filter node types that participate in the tab order								// anchor tag				('a' == nodeName && a.href) ||								// enabled form element				(/input|select|textarea|button/.test(nodeName) &&					'hidden' != a.type && !a.disabled)			) &&						// visible on page			isVisible(a)		);			}	});// $.widget is a factory to create jQuery plugins// taking some boilerplate code out of the plugin code// created by Scott González and Jörn Zaeffererfunction getter(namespace, plugin, method, args) {	function getMethods(type) {		var methods = $[namespace][plugin][type] || [];		return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);	}		var methods = getMethods('getter');	if (args.length == 1 && typeof args[0] == 'string') {		methods = methods.concat(getMethods('getterSetter'));	}	return ($.inArray(method, methods) != -1);}$.widget = function(name, prototype) {	var namespace = name.split(".")[0];	name = name.split(".")[1];		// create plugin method	$.fn[name] = function(options) {		var isMethodCall = (typeof options == 'string'),			args = Array.prototype.slice.call(arguments, 1);				// prevent calls to internal methods		if (isMethodCall && options.substring(0, 1) == '_') {			return this;		}				// handle getter methods		if (isMethodCall && getter(namespace, name, options, args)) {			var instance = $.data(this[0], name);			return (instance ? instance[options].apply(instance, args)				: undefined);		}				// handle initialization and non-getter methods		return this.each(function() {			var instance = $.data(this, name);						// constructor			(!instance && !isMethodCall &&				$.data(this, name, new $[namespace][name](this, options)));						// method call			(instance && isMethodCall && $.isFunction(instance[options]) &&				instance[options].apply(instance, args));		});	};		// create widget constructor	$[namespace] = $[namespace] || {};	$[namespace][name] = function(element, options) {		var self = this;				this.widgetName = name;		this.widgetEventPrefix = $[namespace][name].eventPrefix || name;		this.widgetBaseClass = namespace + '-' + name;				this.options = $.extend({},			$.widget.defaults,			$[namespace][name].defaults,			$.metadata && $.metadata.get(element)[name],			options);				this.element = $(element)			.bind('setData.' + name, function(e, key, value) {				return self._setData(key, value);			})			.bind('getData.' + name, function(e, key) {				return self._getData(key);			})			.bind('remove', function() {				return self.destroy();			});				this._init();	};		// add widget prototype	$[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);		// TODO: merge getter and getterSetter properties from widget prototype	// and plugin prototype	$[namespace][name].getterSetter = 'option';};$.widget.prototype = {	_init: function() {},	destroy: function() {		this.element.removeData(this.widgetName);	},		option: function(key, value) {		var options = key,			self = this;				if (typeof key == "string") {			if (value === undefined) {				return this._getData(key);			}			options = {};			options[key] = value;		}				$.each(options, function(key, value) {			self._setData(key, value);		});	},	_getData: function(key) {		return this.options[key];	},	_setData: function(key, value) {		this.options[key] = value;				if (key == 'disabled') {			this.element[value ? 'addClass' : 'removeClass'](				this.widgetBaseClass + '-disabled');		}	},		enable: function() {		this._setData('disabled', false);	},	disable: function() {		this._setData('disabled', true);	},		_trigger: function(type, e, data) {		var eventName = (type == this.widgetEventPrefix			? type : this.widgetEventPrefix + type);		e = e  || $.event.fix({ type: eventName, target: this.element[0] });		return this.element.triggerHandler(eventName, [e, data], this.options[type]);	}};$.widget.defaults = {	disabled: false};/** Mouse Interaction Plugin **/$.ui.mouse = {	_mouseInit: function() {		var self = this;			this.element			.bind('mousedown.'+this.widgetName, function(e) {				return self._mouseDown(e);			})			.bind('click.'+this.widgetName, function(e) {				if(self._preventClickEvent) {					self._preventClickEvent = false;					return false;				}			});				// Prevent text selection in IE		if ($.browser.msie) {			this._mouseUnselectable = this.element.attr('unselectable');			this.element.attr('unselectable', 'on');		}				this.started = false;	},		// TODO: make sure destroying one instance of mouse doesn't mess with	// other instances of mouse	_mouseDestroy: function() {		this.element.unbind('.'+this.widgetName);				// Restore text selection in IE		($.browser.msie			&& this.element.attr('unselectable', this._mouseUnselectable));	},		_mouseDown: function(e) {		// we may have missed mouseup (out of window)		(this._mouseStarted && this._mouseUp(e));				this._mouseDownEvent = e;				var self = this,			btnIsLeft = (e.which == 1),			elIsCancel = (typeof this.options.cancel == "string" ? $(e.target).parents().add(e.target).filter(this.options.cancel).length : false);		if (!btnIsLeft || elIsCancel || !this._mouseCapture(e)) {			return true;		}				this.mouseDelayMet = !this.options.delay;		if (!this.mouseDelayMet) {			this._mouseDelayTimer = setTimeout(function() {				self.mouseDelayMet = true;			}, this.options.delay);		}				if (this._mouseDistanceMet(e) && this._mouseDelayMet(e)) {			this._mouseStarted = (this._mouseStart(e) !== false);			if (!this._mouseStarted) {				e.preventDefault();				return true;			}		}				// these delegates are required to keep context		this._mouseMoveDelegate = function(e) {			return self._mouseMove(e);		};		this._mouseUpDelegate = function(e) {			return self._mouseUp(e);		};		$(document)			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);				return false;	},		_mouseMove: function(e) {		// IE mouseup check - mouseup happened when mouse was out of window		if ($.browser.msie && !e.button) {			return this._mouseUp(e);		}				if (this._mouseStarted) {			this._mouseDrag(e);			return false;		}				if (this._mouseDistanceMet(e) && this._mouseDelayMet(e)) {			this._mouseStarted =				(this._mouseStart(this._mouseDownEvent, e) !== false);			(this._mouseStarted ? this._mouseDrag(e) : this._mouseUp(e));		}				return !this._mouseStarted;	},		_mouseUp: function(e) {		$(document)			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);				if (this._mouseStarted) {			this._mouseStarted = false;			this._preventClickEvent = true;			this._mouseStop(e);		}				return false;	},		_mouseDistanceMet: function(e) {		return (Math.max(				Math.abs(this._mouseDownEvent.pageX - e.pageX),				Math.abs(this._mouseDownEvent.pageY - e.pageY)			) >= this.options.distance		);	},		_mouseDelayMet: function(e) {		return this.mouseDelayMet;	},		// These are placeholder methods, to be overriden by extending plugin	_mouseStart: function(e) {},	_mouseDrag: function(e) {},	_mouseStop: function(e) {},	_mouseCapture: function(e) { return true; }};$.ui.mouse.defaults = {	cancel: null,	distance: 1,	delay: 0};})(jQuery);(function($) {$.widget("ui.tabs", {	_init: function() {		// create tabs		this._tabify(true);	},	_setData: function(key, value) {		if ((/^selected/).test(key))			this.select(value);		else {			this.options[key] = value;			this._tabify();		}	},	length: function() {		return this.$tabs.length;	},	_tabId: function(a) {		return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '')			|| this.options.idPrefix + $.data(a);	},	ui: function(tab, panel) {		return {			options: this.options,			tab: tab,			panel: panel,			index: this.$tabs.index(tab)		};	},	_sanitizeSelector: function(hash) {		return hash.replace(/:/g, '\\:'); // we need this because an id may contain a ":"	},	_cookie: function() {		var cookie = this.cookie || (this.cookie = 'ui-tabs-' + $.data(this.element[0]));		return $.cookie.apply(null, [cookie].concat($.makeArray(arguments)));	},	_tabify: function(init) {				this.$lis = $('li:has(a[href])', this.element);		this.$tabs = this.$lis.map(function() { return $('a', this)[0]; });		this.$panels = $([]);				var self = this, o = this.options;				this.$tabs.each(function(i, a) {			// inline tab			if (a.hash && a.hash.replace('#', '')) // Safari 2 reports '#' for an empty hash				self.$panels = self.$panels.add(self._sanitizeSelector(a.hash));			// remote tab			else if ($(a).attr('href') != '#') { // prevent loading the page itself if href is just "#"				$.data(a, 'href.tabs', a.href); // required for restore on destroy				$.data(a, 'load.tabs', a.href); // mutable				var id = self._tabId(a);				a.href = '#' + id;				var $panel = $('#' + id);				if (!$panel.length) {					$panel = $(o.panelTemplate).attr('id', id).addClass(o.panelClass)						.insertAfter(self.$panels[i - 1] || self.element);					$panel.data('destroy.tabs', true);				}				self.$panels = self.$panels.add($panel);			}			// invalid tab href			else				o.disabled.push(i + 1);		});				// initialization from scratch		if (init) {						// attach necessary classes for styling if not present			this.element.addClass(o.navClass);			this.$panels.addClass(o.panelClass);						// Selected tab			// use "selected" option or try to retrieve:			// 1. from fragment identifier in url			// 2. from cookie			// 3. from selected class attribute on <li>			if (o.selected === undefined) {				if (location.hash) {					this.$tabs.each(function(i, a) {						if (a.hash == location.hash) {							o.selected = i;							return false; // break						}					});				}				else if (o.cookie) {					var index = parseInt(self._cookie(), 10);					if (index && self.$tabs[index]) o.selected = index;				}				else if (self.$lis.filter('.' + o.selectedClass).length)					o.selected = self.$lis.index( self.$lis.filter('.' + o.selectedClass)[0] );			}			o.selected = o.selected === null || o.selected !== undefined ? o.selected : 0; // first tab selected by default						// Take disabling tabs via class attribute from HTML			// into account and update option properly.			// A selected tab cannot become disabled.			o.disabled = $.unique(o.disabled.concat(				$.map(this.$lis.filter('.' + o.disabledClass),					function(n, i) { return self.$lis.index(n); } )			)).sort();			if ($.inArray(o.selected, o.disabled) != -1)				o.disabled.splice($.inArray(o.selected, o.disabled), 1);						// highlight selected tab			this.$panels.addClass(o.hideClass);			this.$lis.removeClass(o.selectedClass);			if (o.selected !== null) {				this.$panels.eq(o.selected).removeClass(o.hideClass);				var classes = [o.selectedClass];				if (o.deselectable) classes.push(o.deselectableClass);				this.$lis.eq(o.selected).addClass(classes.join(' '));								// seems to be expected behavior that the show callback is fired				var onShow = function() {					self._trigger('show', null,						self.ui(self.$tabs[o.selected], self.$panels[o.selected]));				};								// load if remote tab				if ($.data(this.$tabs[o.selected], 'load.tabs'))					this.load(o.selected, onShow);				// just trigger show event				else onShow();			}						// clean up to avoid memory leaks in certain versions of IE 6			$(window).bind('unload', function() {				self.$tabs.unbind('.tabs');				self.$lis = self.$tabs = self.$panels = null;			});					}		// update selected after add/remove		else			o.selected = this.$lis.index( this.$lis.filter('.' + o.selectedClass)[0] );				// set or update cookie after init and add/remove respectively		if (o.cookie) this._cookie(o.selected, o.cookie);				// disable tabs		for (var i = 0, li; li = this.$lis[i]; i++)			$(li)[$.inArray(i, o.disabled) != -1 && !$(li).hasClass(o.selectedClass) ? 'addClass' : 'removeClass'](o.disabledClass);				// reset cache if switching from cached to not cached		if (o.cache === false) this.$tabs.removeData('cache.tabs');				// set up animations		var hideFx, showFx;		if (o.fx) {			if (o.fx.constructor == Array) {				hideFx = o.fx[0];				showFx = o.fx[1];			}			else hideFx = showFx = o.fx;		}				// Reset certain styles left over from animation		// and prevent IE's ClearType bug...		function resetStyle($el, fx) {			$el.css({ display: '' });			if ($.browser.msie && fx.opacity) $el[0].style.removeAttribute('filter');		}		// Show a tab...		var showTab = showFx ?			function(clicked, $show) {				$show.animate(showFx, showFx.duration || 'normal', function() {					$show.removeClass(o.hideClass);					resetStyle($show, showFx);					self._trigger('show', null, self.ui(clicked, $show[0]));				});			} :			function(clicked, $show) {				$show.removeClass(o.hideClass);				self._trigger('show', null, self.ui(clicked, $show[0]));			};				// Hide a tab, $show is optional...		var hideTab = hideFx ? 			function(clicked, $hide, $show) {				$hide.animate(hideFx, hideFx.duration || 'normal', function() {					$hide.addClass(o.hideClass);					resetStyle($hide, hideFx);					if ($show) showTab(clicked, $show, $hide);				});			} :			function(clicked, $hide, $show) {				$hide.addClass(o.hideClass);				if ($show) showTab(clicked, $show);			};				// Switch a tab...		function switchTab(clicked, $li, $hide, $show) {			var classes = [o.selectedClass];			if (o.deselectable) classes.push(o.deselectableClass);			$li.addClass(classes.join(' ')).siblings().removeClass(classes.join(' '));			hideTab(clicked, $hide, $show);		}				// attach tab event handler, unbind to avoid duplicates from former tabifying...		this.$tabs.unbind('.tabs').bind(o.event + '.tabs', function() {						//var trueClick = e.clientX; // add to history only if true click occured, not a triggered click			var $li = $(this).parents('li:eq(0)'),				$hide = self.$panels.filter(':visible'),				$show = $(self._sanitizeSelector(this.hash));						// If tab is already selected and not deselectable or tab disabled or 			// or is already loading or click callback returns false stop here.			// Check if click handler returns false last so that it is not executed			// for a disabled or loading tab!			if (($li.hasClass(o.selectedClass) && !o.deselectable)				|| $li.hasClass(o.disabledClass)				|| $(this).hasClass(o.loadingClass)				|| self._trigger('select', null, self.ui(this, $show[0])) === false				) {				this.blur();				return false;			}						o.selected = self.$tabs.index(this);						// if tab may be closed			if (o.deselectable) {				if ($li.hasClass(o.selectedClass)) {					self.options.selected = null;					$li.removeClass([o.selectedClass, o.deselectableClass].join(' '));					self.$panels.stop();					hideTab(this, $hide);					this.blur();					return false;				} else if (!$hide.length) {					self.$panels.stop();					var a = this;					self.load(self.$tabs.index(this), function() {						$li.addClass([o.selectedClass, o.deselectableClass].join(' '));						showTab(a, $show);					});					this.blur();					return false;				}			}						if (o.cookie) self._cookie(o.selected, o.cookie);						// stop possibly running animations			self.$panels.stop();						// show new tab			if ($show.length) {				var a = this;				self.load(self.$tabs.index(this), $hide.length ? 					function() {						switchTab(a, $li, $hide, $show);					} :					function() {						$li.addClass(o.selectedClass);						showTab(a, $show);					}				);			} else				throw 'jQuery UI Tabs: Mismatching fragment identifier.';							// Prevent IE from keeping other link focussed when using the back button			// and remove dotted border from clicked link. This is controlled via CSS			// in modern browsers; blur() removes focus from address bar in Firefox			// which can become a usability and annoying problem with tabs('rotate').			if ($.browser.msie) this.blur();						return false;					});				// disable click if event is configured to something else		if (o.event != 'click') this.$tabs.bind('click.tabs', function(){return false;});			},	add: function(url, label, index) {		if (index == undefined)			index = this.$tabs.length; // append by default				var o = this.options;		var $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label));		$li.data('destroy.tabs', true);				var id = url.indexOf('#') == 0 ? url.replace('#', '') : this._tabId( $('a:first-child', $li)[0] );				// try to find an existing element before creating a new one		var $panel = $('#' + id);		if (!$panel.length) {			$panel = $(o.panelTemplate).attr('id', id)				.addClass(o.hideClass)				.data('destroy.tabs', true);		}		$panel.addClass(o.panelClass);		if (index >= this.$lis.length) {			$li.appendTo(this.element);			$panel.appendTo(this.element[0].parentNode);		} else {			$li.insertBefore(this.$lis[index]);			$panel.insertBefore(this.$panels[index]);		}				o.disabled = $.map(o.disabled,			function(n, i) { return n >= index ? ++n : n });				this._tabify();				if (this.$tabs.length == 1) {			$li.addClass(o.selectedClass);			$panel.removeClass(o.hideClass);			var href = $.data(this.$tabs[0], 'load.tabs');			if (href)				this.load(index, href);		}				// callback		this._trigger('add', null, this.ui(this.$tabs[index], this.$panels[index]));	},	remove: function(index) {		var o = this.options, $li = this.$lis.eq(index).remove(),			$panel = this.$panels.eq(index).remove();				// If selected tab was removed focus tab to the right or		// in case the last tab was removed the tab to the left.		if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1)			this.select(index + (index + 1 < this.$tabs.length ? 1 : -1));				o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != index; }),			function(n, i) { return n >= index ? --n : n });				this._tabify();				// callback		this._trigger('remove', null, this.ui($li.find('a')[0], $panel[0]));	},	enable: function(index) {		var o = this.options;		if ($.inArray(index, o.disabled) == -1)			return;				var $li = this.$lis.eq(index).removeClass(o.disabledClass);		if ($.browser.safari) { // fix disappearing tab (that used opacity indicating disabling) after enabling in Safari 2...			$li.css('display', 'inline-block');			setTimeout(function() {				$li.css('display', 'block');			}, 0);		}				o.disabled = $.grep(o.disabled, function(n, i) { return n != index; });				// callback		this._trigger('enable', null, this.ui(this.$tabs[index], this.$panels[index]));	},	disable: function(index) {		var self = this, o = this.options;		if (index != o.selected) { // cannot disable already selected tab			this.$lis.eq(index).addClass(o.disabledClass);						o.disabled.push(index);			o.disabled.sort();						// callback			this._trigger('disable', null, this.ui(this.$tabs[index], this.$panels[index]));		}	},	select: function(index) {		// TODO make null as argument work		if (typeof index == 'string')			index = this.$tabs.index( this.$tabs.filter('[href$=' + index + ']')[0] );		this.$tabs.eq(index).trigger(this.options.event + '.tabs');	},	load: function(index, callback) { // callback is for internal usage only				var self = this, o = this.options, $a = this.$tabs.eq(index), a = $a[0],				bypassCache = callback == undefined || callback === false, url = $a.data('load.tabs');				callback = callback || function() {};				// no remote or from cache - just finish with callback		if (!url || !bypassCache && $.data(a, 'cache.tabs')) {			callback();			return;		}				// load remote from here on				var inner = function(parent) {			var $parent = $(parent), $inner = $parent.find('*:last');			return $inner.length && $inner.is(':not(img)') && $inner || $parent;		};		var cleanup = function() {			self.$tabs.filter('.' + o.loadingClass).removeClass(o.loadingClass)					.each(function() {						if (o.spinner)							inner(this).parent().html(inner(this).data('label.tabs'));					});			self.xhr = null;		};				if (o.spinner) {			var label = inner(a).html();			inner(a).wrapInner('<em></em>')				.find('em').data('label.tabs', label).html(o.spinner);		}				var ajaxOptions = $.extend({}, o.ajaxOptions, {			url: url,			success: function(r, s) {				$(self._sanitizeSelector(a.hash)).html(r);				cleanup();								if (o.cache)					$.data(a, 'cache.tabs', true); // if loaded once do not load them again								// callbacks				self._trigger('load', null, self.ui(self.$tabs[index], self.$panels[index]));				try {					o.ajaxOptions.success(r, s);				}				catch (e) {}								// This callback is required because the switch has to take				// place after loading has completed. Call last in order to 				// fire load before show callback...				callback();			}		});		if (this.xhr) {			// terminate pending requests from other tabs and restore tab label			this.xhr.abort();			cleanup();		}		$a.addClass(o.loadingClass);		self.xhr = $.ajax(ajaxOptions);	},	url: function(index, url) {		this.$tabs.eq(index).removeData('cache.tabs').data('load.tabs', url);	},	destroy: function() {		var o = this.options;		this.element.unbind('.tabs')			.removeClass(o.navClass).removeData('tabs');		this.$tabs.each(function() {			var href = $.data(this, 'href.tabs');			if (href)				this.href = href;			var $this = $(this).unbind('.tabs');			$.each(['href', 'load', 'cache'], function(i, prefix) {				$this.removeData(prefix + '.tabs');			});		});		this.$lis.add(this.$panels).each(function() {			if ($.data(this, 'destroy.tabs'))				$(this).remove();			else				$(this).removeClass([o.selectedClass, o.deselectableClass,					o.disabledClass, o.panelClass, o.hideClass].join(' '));		});		if (o.cookie)			this._cookie(null, o.cookie);	}});$.extend($.ui.tabs, {	version: '@VERSION',	getter: 'length',	defaults: {		// basic setup		deselectable: false,		event: 'click',		disabled: [],		cookie: null, // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }		// Ajax		spinner: 'Loading&#8230;',		cache: false,		idPrefix: 'ui-tabs-',		ajaxOptions: null,		// animations		fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }		// templates		tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',		panelTemplate: '<div></div>',		// CSS class names		navClass: 'ui-tabs-nav',		selectedClass: 'ui-tabs-selected',		deselectableClass: 'ui-tabs-deselectable',		disabledClass: 'ui-tabs-disabled',		panelClass: 'ui-tabs-panel',		hideClass: 'ui-tabs-hide',		loadingClass: 'ui-tabs-loading'	}});/* * Tabs Extensions *//* * Rotate */$.extend($.ui.tabs.prototype, {	rotation: null,	rotate: function(ms, continuing) {				continuing = continuing || false;				var self = this, t = this.options.selected;				function start() {			self.rotation = setInterval(function() {				t = ++t < self.$tabs.length ? t : 0;				self.select(t);			}, ms);		}				function stop(e) {			if (!e || e.clientX) { // only in case of a true click				clearInterval(self.rotation);			}		}				// start interval		if (ms) {			start();			if (!continuing)				this.$tabs.bind(this.options.event + '.tabs', stop);			else				this.$tabs.bind(this.options.event + '.tabs', function() {					stop();					t = self.options.selected;					start();				});		}		// stop interval		else {			stop();			this.$tabs.unbind(this.options.event + '.tabs', stop);		}	}});})(jQuery);