(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);
