if(typeof(Prototype)=="undefined"){throw"Control.Tabs requires Prototype to be loaded."}if(typeof(Object.Event)=="undefined"){throw"Control.Tabs requires Object.Event to be loaded."}Control.Tabs=Class.create({initialize:function(tab_list_container,options){if(!$(tab_list_container)){throw"Control.Tabs could not find the element: "+tab_list_container}this.activeContainer=false;this.activeLink=false;this.containers=$H({});this.links=[];Control.Tabs.instances.push(this);this.options={beforeChange:Prototype.emptyFunction,afterChange:Prototype.emptyFunction,hover:false,linkSelector:"li a",setClassOnContainer:false,activeClassName:"active",defaultTab:"first",autoLinkExternal:true,targetRegExp:/#(.+)$/,showFunction:Element.show,hideFunction:Element.hide};Object.extend(this.options,options||{});(typeof(this.options.linkSelector=="string")?$(tab_list_container).select(this.options.linkSelector):this.options.linkSelector($(tab_list_container))).findAll(function(link){return(/^#/).exec((Prototype.Browser.WebKit?decodeURIComponent(link.href):link.href).replace(window.location.href.split("#")[0],""))}).each(function(link){this.addTab(link)}.bind(this));this.containers.values().each(Element.hide);if(this.options.defaultTab=="first"){this.setActiveTab(this.links.first())}else{if(this.options.defaultTab=="last"){this.setActiveTab(this.links.last())}else{this.setActiveTab(this.options.defaultTab)}}var targets=this.options.targetRegExp.exec(window.location);if(targets&&targets[1]){targets[1].split(",").each(function(target){this.setActiveTab(this.links.find(function(link){return link.key==target}))}.bind(this))}if(this.options.autoLinkExternal){$A(document.getElementsByTagName("a")).each(function(a){if(!this.links.include(a)){var clean_href=a.href.replace(window.location.href.split("#")[0],"");if(clean_href.substring(0,1)=="#"){if(this.containers.keys().include(clean_href.substring(1))){$(a).observe("click",function(event,clean_href){this.setActiveTab(clean_href.substring(1))}.bindAsEventListener(this,clean_href))}}}}.bind(this))}},addTab:function(link){this.links.push(link);link.key=link.getAttribute("href").replace(window.location.href.split("#")[0],"").split("#").last().replace(/#/,"");var container=$(link.key);if(!container){throw"Control.Tabs: #"+link.key+" was not found on the page."}this.containers.set(link.key,container);link[this.options.hover?"onmouseover":"onclick"]=function(link){if(window.event){Event.stop(window.event)}this.setActiveTab(link);return false}.bind(this,link)},setActiveTab:function(link){if(!link&&typeof(link)=="undefined"){return}if(typeof(link)=="string"){this.setActiveTab(this.links.find(function(_link){return _link.key==link}))}else{if(typeof(link)=="number"){this.setActiveTab(this.links[link])}else{if(this.notify("beforeChange",this.activeContainer,this.containers.get(link.key))===false){return}if(this.activeContainer){this.options.hideFunction(this.activeContainer)}this.links.each(function(item){(this.options.setClassOnContainer?$(item.parentNode):item).removeClassName(this.options.activeClassName)}.bind(this));(this.options.setClassOnContainer?$(link.parentNode):link).addClassName(this.options.activeClassName);this.activeContainer=this.containers.get(link.key);this.activeLink=link;this.options.showFunction(this.containers.get(link.key));this.notify("afterChange",this.containers.get(link.key))}}},next:function(){this.links.each(function(link,i){if(this.activeLink==link&&this.links[i+1]){this.setActiveTab(this.links[i+1]);throw $break}}.bind(this))},previous:function(){this.links.each(function(link,i){if(this.activeLink==link&&this.links[i-1]){this.setActiveTab(this.links[i-1]);throw $break}}.bind(this))},first:function(){this.setActiveTab(this.links.first())},last:function(){this.setActiveTab(this.links.last())}});Object.extend(Control.Tabs,{instances:[],findByTabId:function(id){return Control.Tabs.instances.find(function(tab){return tab.links.find(function(link){return link.key==id})})}});Object.Event.extend(Control.Tabs);
