var class_attrib_name=InternetExplorer ? "className" : "class";

function create_tabs(pages,onselect,selected) {
  var tabs=document.createElement("div");
  tabs.className="tabs_live";
  var header=document.createElement("div");
  header.className="tabs_header";
  tabs.appendChild(header);
  var bodyc=document.createElement("div");
  bodyc.className="tabs_bodyc";
  var body=document.createElement("div");
  body.className="tabs_body";
  body.style.overflow="auto";
  bodyc.appendChild(body);
  tabs.appendChild(bodyc);


  var scrollLeft=[];
  var scrollTop=[];
  var active_page=-1;
  var select=function(i) {
    if (active_page==i) return;
    if (active_page>=0) {
      scrollLeft[active_page]=body.scrollLeft;
      scrollTop[active_page]=body.scrollTop;
      header.childNodes[active_page].removeAttribute(class_attrib_name);
      while (body.firstChild) body.removeChild(body.firstChild);
    }
    if (pages[i]) body.appendChild(pages[i].content);
    header.childNodes[i].className="tabs_selected"
    if (scrollTop[i]==null) {
      body.scrollLeft=1; // firefox bug
      body.scrollLeft=0;
      body.scrollTop=1; // firefox bug
      body.scrollTop=0;
    }
    else {
      body.scrollLeft=scrollLeft[i];
      body.scrollTop=scrollTop[i];
    }
    active_page=i;
    if (onselect) onselect(i);
  }
  for (var i in pages) (function(i) {
    var s=document.createElement("span");
    s.appendChild(document.createTextNode(pages[i].title));
    s.onmousedown=function(){select(i)};
    s.onmouseup=function(){body.focus(); body.blur()};
    header.appendChild(s);
    scrollLeft.push(0);
    scrollTop.push(null);
  })(i)
  select(selected);
  return tabs;
}

function tabify(div,onselect) {
  if (div.nodeType!=1 || div.tagName!="DIV" || !div.className || div.className!="tabs") return false;
  var pages=[];
  var c=div.firstChild;
  while (c) {
    if (c.nodeType==1 && c.tagName=="DIV" && c.className && c.className=="tabs_page") {
      pages.push({title:c.title,content:c});
      c.removeAttribute('title');
      c.removeAttribute(class_attrib_name);
    }
    c=c.nextSibling;
  }
  while (div.firstChild) div.removeChild(div.firstChild);
  div.className="tabs_live";
  var selected=0;
  if (div.title) {
    selected=div.title;
    div.removeAttribute('title');
  };
  var tabs=create_tabs(pages,onselect,selected);
  while (tabs.firstChild) {
    div.appendChild(tabs.firstChild);
  }
  div.className=tabs.className;
  div.select=tabs.select;
  return true;
}

function recursive_tabify(node,onselect) {
  c=node.firstChild;
  while (c) {
    var n=c.nextSibling;
    recursive_tabify(c);
    c=n;
  }
  tabify(node,onselect);
}

