
function tabClickHandler(e, tab, n, handler) {
  e.onclick = function() {
    tabLoad(tab, n, handler);
  }
}

function tabClickHandlerJS(e, tab, n, func) {
  e.onclick = function() {
    tabLoadJS(tab, n, func);
  }
}

function tabInitJS (tabdiv, func) {
  var tab = {};
  tab.div = tabdiv;
  tab.items = {};

  first = true;
  for (var e = $(tabdiv).down(); e; e = e.next()) {
    if (n = e.readAttribute('name')) {
      tab.items[n] = e;
      tabClickHandlerJS(e, tab, n, func);
      if (first) {
        first = false;
        e.addClassName("selected");
        tab.selected = n;
      }
    }
  }
  return tab;  
}

function tabInit (tabdiv, contentdiv, handler) {
  var tab = {};
  tab.div = tabdiv;
  tab.content = contentdiv;
  tab.items = {};
  tab.cache = {};

  for (var e = $(tabdiv).down(); e; e = e.next()) {
    if (n = e.readAttribute('name')) {
      tab.items[n] = e;
      tabClickHandler(e, tab, n, handler);
      if (e.hasClassName("selected")) {
        // Wrap content in div and set some variables for the selected item
        e.addClassName("selected");
        $(contentdiv).update("<div id='tab-"+ n + "'>" + $(contentdiv).innerHTML + "</div>");
        tab.cache[n] = true;
        tab.selected = n;
      }
    }
  }
  return tab;  
}

function tabCreate(tabdiv, contentdiv, handler, tabs) {
  var html = '';
  var first = true;
  for (var e in tabs) {
    if (first) {
      first = false;
      html += "<li name='" + e + "' class='selected'>" + tabs[e] + "</li>";
    } else {
      html += "<li name='" + e + "'>" + tabs[e] + "</li>";
    }      
  }
  $(tabdiv).update(html);
  return tabInit(tabdiv, contentdiv, handler);
}

function tabLoad(tab, n, url, isform) {
  if (tab.selected && tab.selected != n) {
    $('tab-' + tab.selected).hide();
  }
  tabSelect(tab, n);
  tab.selected = n;
  if (tab.cache[n]) {
    // Use the cached version
    $('tab-'+n).show();
  } else {
    // Get tab contents using ajax
    $(tab.content).insert("<div id='tab-"+n+"'>Loading <img src='/images/progress.gif'></div>");
    new Ajax.Request(url, {
      method: 'get',
      parameters: {tab: n},
      onSuccess: function (transport) {
        $('tab-'+n).update(transport.responseText);
//        eval(transport.responseText);
        tab.cache[n] = true;
      },
      onFailure: function (transport) {
        $('tab-' + n).update("Failed to load contents.");
        tab.cache[n] = null;
      }    
    });
  }
}


function tabSelect(tab, n) {
  for (var i in tab.items) {
    if (i == n) {
      tab.items[i].addClassName("selected");
    } else {
      tab.items[i].removeClassName("selected");
    }
  }
}
  

  
function tabCurrent(tab) {
  return tab.selected;
}




function tabLoadJS(tab, n, func) {
  tabSelect(tab, n);
  tab.selected = n;
  func(tab, n);
}
