/*
Copyright (c) 2003 Ylab, Bureau for interactive media, www.ylab.nl
Yce - Tab functions
Author: Yohan Creemers
version 1.1
20050504 YC:Accesskey added
*/
/*
Sample use:
var div = new Tab(document.body);
div.addItems("page1|General", "page2|Advanced");
div.selectItemByName("adres");
*/
function Tab(container, classMain, classActive){
  //properties
  var list               = document.createElement("div");
  list.selectedItem      = null;
  list.className         = (classMain) ? classMain : "tab"
  list.classActive       = (classActive) ? classActive: "tabactive";
  //methods
  list.addItems          = methodAddItems;
  list.setClass          = methodSetClass;
  list.selectItemByValue = methodSelectItemByValue;
  list.selectItemByName  = methodSelectItemByName;
  list.onChange          = function(){void 0};

  //addLoadFunction("document.getElementById('" + id + "').onChange();");
  container.appendChild(list);
  return list;

  //internal functions
  function methodAddItems(){
    for (var i=0; i< arguments.length; i++){
      var pair = arguments[i].split("|");
      //copy value to displayname if none is supplied
      if (pair.length == 1){pair[0] = i;}
      var item = document.createElement("span");
      item.value     = pair[0];
      item.innerHTML = pair[1];
      var akey = 1+i; //pair[1].substring(0,1);
      item.tabIndex = i;
      item.accessKey = akey;
      item.title = pair[1] + ' (Alt+' + akey + ')';
      item.onclick = function(){if(!this.disabled){selectItem(this);}}
      item.onkeyup = item.onclick;
      item.className = (i == 0) ? this.classActive : "";
      item.style.cursor = (isIE) ? "hand" : "pointer";
      this.appendChild(item);
    }
  }
  //Set class names if supplied
  function methodSetClass(main, active){
    if (main){this.className = main;}
    if (active){this.classActive = active;}
  }
  //select Tab By Value
  function methodSelectItemByValue(value){
    for (var i=0; i< this.childNodes.length; i++){
      var item = this.childNodes[i];
      if (item.value == value) {selectItem(item); break;}
    }
  }
  //select Tab By Name
  function methodSelectItemByName(name){
    for (var i=0; i< this.childNodes.length; i++){
      var item = this.childNodes[i];
      if (item.innerHTML.toLowerCase() == name.toLowerCase()){selectItem(item); break;}
    }
  }
  function selectItem(item){
    var list = item.parentNode;
    list.selectedItem = item;
    for (var i=0; i< list.childNodes.length; i++){
      curItem = list.childNodes[i]
      curItem.className = (curItem == item) ? list.classActive : "";

      //When the page is loading, the tabpage may not yet exist
      var code = 'var page = document.getElementById("' + curItem.value + '");'
               + 'page.style.display = "' + ((curItem == item) ? 'block' : 'none') + '";'
               + ((curItem == item) ? 'setFirstFieldFocus(page);' : '');
      var page = document.getElementById(curItem.value);
      if (!page){addLoadFunction(code);} //Schedule for displaying after document is loaded
      else {new Function(code)();}       //Execute now
    }
    list.onChange(item.value);
  }
}
