/*
 * jQuery UI Tabs @VERSION
 *
 * Copyright (c) 2007, 2008 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	ui.core.js
 */
(function($) {$.widget("ui.tabs", {_init: function() {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, '\\:');},_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) {if (a.hash && a.hash.replace('#', '')) self.$panels = self.$panels.add(self._sanitizeSelector(a.hash)); else if ($(a).attr('href') != '#') {$.data(a, 'href.tabs', a.href);$.data(a, 'load.tabs', a.href);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);} else o.disabled.push(i + 1);});if (init) {this.element.addClass(o.navClass);this.$panels.addClass(o.panelClass);if (o.selected === undefined) {if (location.hash) {this.$tabs.each(function(i, a) {if (a.hash == location.hash) {o.selected = i;return false;}});} 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;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);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(' '));var onShow = function() {self._trigger('show', null,self.ui(self.$tabs[o.selected], self.$panels[o.selected]));};if ($.data(this.$tabs[o.selected], 'load.tabs')) this.load(o.selected, onShow); else onShow();}$(window).bind('unload', function() {self.$tabs.unbind('.tabs');self.$lis = self.$tabs = self.$panels = null;});} else o.selected = this.$lis.index( this.$lis.filter('.' + o.selectedClass)[0] );if (o.cookie) this._cookie(o.selected, o.cookie);for (var i = 0, li; li = this.$lis[i]; i++) $(li)[$.inArray(i, o.disabled) != -1 && !$(li).hasClass(o.selectedClass) ? 'addClass' : 'removeClass'](o.disabledClass);if (o.cache === false) this.$tabs.removeData('cache.tabs');var hideFx, showFx;if (o.fx) {if (o.fx.constructor == Array) {hideFx = o.fx[0];showFx = o.fx[1];} else hideFx = showFx = o.fx;}function resetStyle($el, fx) {$el.css({ display: '' });if ($.browser.msie && fx.opacity) $el[0].style.removeAttribute('filter');}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]));};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);};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);}this.$tabs.unbind('.tabs').bind(o.event + '.tabs', function() {var $li = $(this).parents('li:eq(0)'),$hide = self.$panels.filter(':visible'),$show = $(self._sanitizeSelector(this.hash));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 (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);self.$panels.stop();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.';if ($.browser.msie) this.blur();return false;});if (o.event != 'click') this.$tabs.bind('click.tabs', function(){return false;});},add: function(url, label, index) {if (index == undefined) index = this.$tabs.length;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] );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);}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 ($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();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) {$li.css('display', 'inline-block');setTimeout(function() {$li.css('display', 'block');}, 0);}o.disabled = $.grep(o.disabled, function(n, i) { return n != index; });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) {this.$lis.eq(index).addClass(o.disabledClass);o.disabled.push(index);o.disabled.sort();this._trigger('disable', null, this.ui(this.$tabs[index], this.$panels[index]));}},select: function(index) {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) {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() {};if (!url || !bypassCache && $.data(a, 'cache.tabs')) {callback();return;}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);self._trigger('load', null, self.ui(self.$tabs[index], self.$panels[index]));try {o.ajaxOptions.success(r, s);}catch (e) {} callback();}});if (this.xhr) {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: { deselectable: false,event: 'click',disabled: [],cookie: null,spinner: 'Loading&#8230;',cache: false,idPrefix: 'ui-tabs-',ajaxOptions: null,fx: null,tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',panelTemplate: '<div></div>',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'}});$.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) { clearInterval(self.rotation);}}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();});} else {stop();this.$tabs.unbind(this.options.event + '.tabs', stop);}}});})(jQuery);

