﻿(function($) { $.widget("ui.tabs", { _init: function() { this._tabify(true) }, _setData: function(a, b) { if ((/^selected/).test(a)) this.select(b); else { this.options[a] = b; 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(a, b) { return { options: this.options, tab: a, panel: b, index: this.$tabs.index(a)} }, _sanitizeSelector: function(a) { return a.replace(/:/g, '\\:') }, _cookie: function() { var a = this.cookie || (this.cookie = 'ui-tabs-' + $.data(this.element[0])); return $.cookie.apply(null, [a].concat($.makeArray(arguments))) }, _tabify: function(f) { this.$lis = $('li:has(a[href])', this.element); this.$tabs = this.$lis.map(function() { return $('a', this)[0] }); this.$panels = $([]); var g = this, o = this.options; this.$tabs.each(function(i, a) { if (a.hash && a.hash.replace('#', '')) { g.$panels = g.$panels.add(g._sanitizeSelector(a.hash)) } else if ($(a).attr('href') != '#') { $.data(a, 'href.tabs', a.href); $.data(a, 'load.tabs', a.href); var b = g._tabId(a); a.href = '#' + b; var c = $('#' + b); if (!c.length) { c = $(o.panelTemplate).attr('id', b).addClass(o.panelClass).insertAfter(g.$panels[i - 1] || g.element); c.data('destroy.tabs', true) } g.$panels = g.$panels.add(c) } else o.disabled.push(i + 1) }); if (f) { 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 h = parseInt(g._cookie(), 10); if (h && g.$tabs[h]) o.selected = h } else if (g.$lis.filter('.' + o.selectedClass).length) o.selected = g.$lis.index(g.$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 g.$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 j = [o.selectedClass]; if (o.deselectable) j.push(o.deselectableClass); this.$lis.eq(o.selected).addClass(j.join(' ')); var k = function() { g._trigger('show', null, g.ui(g.$tabs[o.selected], g.$panels[o.selected])) }; if ($.data(this.$tabs[o.selected], 'load.tabs')) this.load(o.selected, k); else k() } $(window).bind('unload', function() { g.$tabs.unbind('.tabs'); g.$lis = g.$tabs = g.$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 l, showFx; if (o.fx) { if (o.fx.constructor == Array) { l = o.fx[0]; showFx = o.fx[1] } else l = showFx = o.fx } function resetStyle(a, b) { a.css({ display: '' }); if ($.browser.msie && b.opacity) a[0].style.removeAttribute('filter') } var m = showFx ? function(a, b) { b.animate(showFx, showFx.duration || 'normal', function() { b.removeClass(o.hideClass); resetStyle(b, showFx); g._trigger('show', null, g.ui(a, b[0])) }); var c = '#' + b.attr('id') + "i"; $(c).removeClass(o.hideClass) } : function(a, b) { b.removeClass(o.hideClass); g._trigger('show', null, g.ui(a, b[0])) }; var p = l ? function(a, b, c) { b.animate(l, l.duration || 'normal', function() { b.addClass(o.hideClass); resetStyle(b, l); if (c) m(a, c, b) }); var d = '#' + b.attr('id') + "i"; $(d).addClass(o.hideClass) } : function(a, b, c) { b.addClass(o.hideClass); if (c) m(a, c) }; function switchTab(a, b, c, d) { var e = [o.selectedClass]; if (o.deselectable) e.push(o.deselectableClass); b.addClass(e.join(' ')).siblings().removeClass(e.join(' ')).addClass(' unselected'); p(a, c, d) } this.$tabs.unbind('.tabs').bind(o.event + '.tabs', function() { var b = $(this).parents('li:eq(0)'), $hide = g.$panels.filter(':visible'), $show = $(g._sanitizeSelector(this.hash)); if ((b.hasClass(o.selectedClass) && !o.deselectable) || b.hasClass(o.disabledClass) || $(this).hasClass(o.loadingClass) || g._trigger('select', null, g.ui(this, $show[0])) === false) { this.blur(); return false } o.selected = g.$tabs.index(this); if (o.deselectable) { if (b.hasClass(o.selectedClass)) { g.options.selected = null; b.removeClass([o.selectedClass, o.deselectableClass].join(' ')); g.$panels.stop(); p(this, $hide); this.blur(); return false } else if (!$hide.length) { g.$panels.stop(); var a = this; g.load(g.$tabs.index(this), function() { b.addClass([o.selectedClass, o.deselectableClass].join(' ')); m(a, $show) }); this.blur(); return false } } if (o.cookie) g._cookie(o.selected, o.cookie); g.$panels.stop(); if ($show.length) { var a = this; g.load(g.$tabs.index(this), $hide.length ? function() { switchTab(a, b, $hide, $show) } : function() { b.addClass(o.selectedClass); m(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(a, b, c) { if (c == undefined) c = this.$tabs.length; var o = this.options; var d = $(o.tabTemplate.replace(/#\{href\}/g, a).replace(/#\{label\}/g, b)); d.data('destroy.tabs', true); var e = a.indexOf('#') == 0 ? a.replace('#', '') : this._tabId($('a:first-child', d)[0]); var f = $('#' + e); if (!f.length) { f = $(o.panelTemplate).attr('id', e).addClass(o.hideClass).data('destroy.tabs', true) } f.addClass(o.panelClass); if (c >= this.$lis.length) { d.appendTo(this.element); f.appendTo(this.element[0].parentNode) } else { d.insertBefore(this.$lis[c]); f.insertBefore(this.$panels[c]) } o.disabled = $.map(o.disabled, function(n, i) { return n >= c ? ++n : n }); this._tabify(); if (this.$tabs.length == 1) { d.addClass(o.selectedClass); f.removeClass(o.hideClass); var g = $.data(this.$tabs[0], 'load.tabs'); if (g) this.load(c, g) } this._trigger('add', null, this.ui(this.$tabs[c], this.$panels[c])) }, remove: function(a) { var o = this.options, $li = this.$lis.eq(a).remove(), $panel = this.$panels.eq(a).remove(); if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1) this.select(a + (a + 1 < this.$tabs.length ? 1 : -1)); o.disabled = $.map($.grep(o.disabled, function(n, i) { return n != a }), function(n, i) { return n >= a ? --n : n }); this._tabify(); this._trigger('remove', null, this.ui($li.find('a')[0], $panel[0])) }, enable: function(a) { var o = this.options; if ($.inArray(a, o.disabled) == -1) return; var b = this.$lis.eq(a).removeClass(o.disabledClass); if ($.browser.safari) { b.css('display', 'inline-block'); setTimeout(function() { b.css('display', 'block') }, 0) } o.disabled = $.grep(o.disabled, function(n, i) { return n != a }); this._trigger('enable', null, this.ui(this.$tabs[a], this.$panels[a])) }, disable: function(a) { var b = this, o = this.options; if (a != o.selected) { this.$lis.eq(a).addClass(o.disabledClass); o.disabled.push(a); o.disabled.sort(); this._trigger('disable', null, this.ui(this.$tabs[a], this.$panels[a])) } }, select: function(a) { if (typeof a == 'string') a = this.$tabs.index(this.$tabs.filter('[href$=' + a + ']')[0]); this.$tabs.eq(a).trigger(this.options.event + '.tabs') }, load: function(c, d) { var f = this, o = this.options, $a = this.$tabs.eq(c), a = $a[0], bypassCache = d == undefined || d === false, url = $a.data('load.tabs'); d = d || function() { }; if (!url || !bypassCache && $.data(a, 'cache.tabs')) { d(); return } var g = function(a) { var b = $(a), $inner = b.find('*:last'); return $inner.length && $inner.is(':not(img)') && $inner || b }; var h = function() { f.$tabs.filter('.' + o.loadingClass).removeClass(o.loadingClass).each(function() { if (o.spinner) g(this).parent().html(g(this).data('label.tabs')) }); f.xhr = null }; if (o.spinner) { var i = g(a).html(); g(a).wrapInner('<em></em>').find('em').data('label.tabs', i).html(o.spinner) } var j = $.extend({}, o.ajaxOptions, { url: url, success: function(r, s) { $(f._sanitizeSelector(a.hash)).html(r); h(); if (o.cache) $.data(a, 'cache.tabs', true); f._trigger('load', null, f.ui(f.$tabs[c], f.$panels[c])); try { o.ajaxOptions.success(r, s) } catch (e) { } d() } }); if (this.xhr) { this.xhr.abort(); h() } $a.addClass(o.loadingClass); f.xhr = $.ajax(j) }, url: function(a, b) { this.$tabs.eq(a).removeData('cache.tabs').data('load.tabs', b) }, destroy: function() { var o = this.options; this.element.unbind('.tabs').removeClass(o.navClass).removeData('tabs'); this.$tabs.each(function() { var b = $.data(this, 'href.tabs'); if (b) this.href = b; var c = $(this).unbind('.tabs'); $.each(['href', 'load', 'cache'], function(i, a) { c.removeData(a + '.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>', imageTemplate: '<img></img>', navClass: 'ui-tabs-nav', selectedClass: 'selected', deselectableClass: 'unselected', disabledClass: 'ui-tabs-disabled', panelClass: 'ui-tabs-panel', hideClass: 'ui-tabs-hide', loadingClass: 'ui-tabs-loading'} }); $.extend($.ui.tabs.prototype, { rotation: null, rotate: function(a, b) { b = b || false; var c = this, t = this.options.selected; function start() { c.rotation = setInterval(function() { t = ++t < c.$tabs.length ? t : 0; c.select(t) }, a) } function stop(e) { if (!e || e.clientX) { clearInterval(c.rotation) } } if (a) { start(); if (!b) this.$tabs.bind(this.options.event + '.tabs', stop); else this.$tabs.bind(this.options.event + '.tabs', function() { stop(); t = c.options.selected; start() }) } else { stop(); this.$tabs.unbind(this.options.event + '.tabs', stop) } } }) })(jQuery);

