
jQuery.fn.initBogoTabs=function(tabdefs,props){props=jQuery.extend({activeLabelClass:'bogoTabsActiveLabel',inactiveLabelClass:'bogoTabsInactiveLabel',debugBogoTabs:false},props);var self=this;self.dbgdiv=null;function dbg(msg){if(self.dbgdiv)self.dbgdiv.append("BogoTabs: "+msg+"<br/>");};if(props.debugBogoTabs){this.after("<div id='bogoTabsDebugDiv'>BogoTabs debugging area<br/></div>");self.dbgdiv=jQuery('#bogoTabsDebugDiv');self.dbgdiv.css('border','1px dashed #000');dbg("debugging activated.");}
function TabsInnerHolder(){var self=this;self.buttons=[];self.funcs={};self.tabs={};self.currentTab=null;};self.holder=new TabsInnerHolder();function switchTabs(tabID){if(tabID[0]!='#')tabID='#'+tabID;var tab2show=self.holder.tabs[tabID];if(!tab2show){throw new Error("bogotabs: internal error: could not find tab '"+tabID+"'.");}
dbg('switchTabs('+tabID+')');if(self.currentTab)
{var oldid=self.currentTab.attr('id');if('#'+oldid==tabID)
{dbg("Skipping tab activation: tab '"+tabID+"' already active.");return false;}
self.currentTab.hide();var oh=self.holder.funcs['#'+oldid];if(oh.onhide){dbg("Calling onhide handler for tab "+oldid+".");(oh.onhide)(self.currentTab);}}
for(var key in self.holder.buttons){var span=self.holder.buttons[key];if(!span)continue;if(key==tabID){span.removeClass(props.inactiveLabelClass).addClass(props.activeLabelClass);}else{span.removeClass(props.activeLabelClass).addClass(props.inactiveLabelClass);}}
var funcs=self.holder.funcs[tabID];if(funcs.onselect){(funcs.onselect)(tab2show);}
tab2show.show();if(funcs.onshow){dbg("Calling onshow handler for tab "+tabID+".");(funcs.onshow)(tab2show);}
self.currentTab=tab2show;return false;};var tab2select=null;for(var key in tabdefs){if(!tab2select)tab2select=key;var tab=jQuery(key);self.holder.tabs[key]=tab;var tabdef=tabdefs[key];if(tabdef['selected'])tab2select=key;tab.hide();this.append(tab);self.holder.funcs[key]={'onselect':tabdef.onselect,'onshow':tabdef.onshow,'onhide':tabdef.onhide};tab[0].activateTab=function(){dbg(key+": activateTab(): "+this.id);return switchTabs(this.id);};if(tabdef['suppressButton']){continue;}
var lbl=jQuery("<span/>");self.holder.buttons[key]=lbl;lbl[0].tabElem=tab[0];lbl.html(tabdef['label']?tabdef['label']:key).css('cursor','pointer').click(function(){return this.tabElem.activateTab();});this.before(lbl);}
switchTabs(tab2select);};