function initTabbedPanes() {
  mapArray(getElementsByClass(document, "become-tabbed-pane"),
           initTabbedPane); } 

function initTabbedPane(paneElement) {
  var menus = getElementsByClass(paneElement, "become-tabbed-menu");
  if (menus.length==1) {
    initTabbedPaneWithMenu(paneElement, menus[0]); } 
  else {
    initTabbedPaneWithoutMenu(paneElement) }
  
  elementRemoveClass(paneElement, "become-tabbed-pane");
  elementSetClass(paneElement, "tabbed-pane"); }

function initTabbedPaneWithMenu(paneElement, menu) {
  var tabs = new Array(); 
  var activeSheetId = (window.location + "#").split("#")[1].split("?")[0];
  var activeSheet;
  
  mapArray(menu.getElementsByTagName("a"), function (a) {
    var tab = new PredefinedTab(a, tabs);
    if (tab.sheet.id==activeSheetId) { activeSheet = tab; }
    elementSetClass(tab.sheet, "tabbed-pane-sheet"); });
  
  elementRemoveClass(menu, "become-tabbed-menu");
  elementSetClass(menu, "tabbed-menu");
  if (activeSheet) 
    { activeSheet.activate(); }
  else if (tabs[0]) { tabs[0].activate(); }}
  
function initTabbedPaneWithoutMenu(paneElement) {
  var menu = document.createElement("ul"),
      tabs = new Array();
  elementSetClass(menu, "tabbed-menu");  
  
  mapArray(paneElement.childNodes, function (sheet) {
    if (sheet.nodeType != 1) return;
               
    var label = sheet.title;
    if (!label) {
      var labelElement = sheet.firstChild;        
      while (labelElement.nodeType != 1) { 
        labelElement = labelElement.nextSibling; }
      label = innerText(labelElement);
      /* sheet.removeChild(labelElement); */ }
                  
    elementSetClass(sheet, "tabbed-pane-sheet");    
            
    var tab = new Tab(label, sheet, tabs);    
    var li = document.createElement("li");    
    li.appendChild(tab.anchor);    
    menu.appendChild(li); });
  
  paneElement.insertBefore(menu, paneElement.firstChild);
  if (tabs[0]) { tabs[0].activate(); }}

function tabOnClick(tab) {
  return function (event) { tab.activate(); return false; }}

function Tab (label, sheet, siblings) {  
  var a = document.createElement("a");
  a.href = "#";
  a.appendChild(document.createTextNode(label));    
  a.onclick = tabOnClick(this);
  
  this.anchor = a;
  this.sheet = sheet;  
  this.siblings = siblings;
  siblings.push(this); }  
  
function PredefinedTab (a, siblings) {  
  a.onclick = tabOnClick(this);  
  this.anchor = a;
  this.sheet= document.getElementById(a.href.split('#')[1]);
  this.siblings = siblings;
  siblings.push(this); }    

Tab.prototype.activate = function () {  
  mapArray(this.siblings, function (tab) {
    tab.sheet.style.display = "none"; 
    elementRemoveClass(tab.anchor.parentNode, "current");
    tab.anchor.href = "#" + tab.sheet.id; });
  this.anchor.removeAttribute("href");
  elementSetClass(this.anchor.parentNode, "current");
  this.sheet.style.display = "block"; }

PredefinedTab.prototype.activate = Tab.prototype.activate;
        
addOnloadEvent(initTabbedPanes); 
