/**
 * tabs.js
 * by Garrett Smith
 * http://dhtmlkitchen.com/
 */
if(!window.TabParams)
  window.TabParams={useClone:false,alwaysShowClone:false,eventType:"click",tabTagName:"*"};
var tabDisplayNone=Browser.id.OP5?"":"none";
var contentInheritVis=Browser.id.OP5?"visible":"inherit";
TabSystem=function TabSystem(el,tabsDiv){
  if(arguments.length==0) return;
  this.souper=TabSystem.souper;
  this.souper(el);
  if(typeof tabsDiv.onselectstart!="undefined")tabsDiv.onselectstart=function(){return false;};
  this.el.onChange=this.el.onchange=function(){};
  this.el.onBeforeChange=function(){};
  this.defaultActiveTab=null;
  this.activeTab=null;
  this.relatedTab=null;
  this.nextTab=null;
  this.tabsDiv=tabsDiv;
  this.tabParams=this.getTabParams();
  this.tabArray=get_elements_with_class_from_classList(this.tabsDiv,this.tabParams.tabTagName,["tab","tabActive"]);
  this.tabsClone=null;
  this.tabs=new Array(0);
  if(!TabSystem.list[this.id])TabSystem.list[this.id]=this;
};
TabSystem.list=new Object;
TabSystem.extend(EventQueue);
TabSystem.prototype.parentSystem=function(){
  var root=TabSystem.list["body"];
  if(root=this) return null;
  var parent=findAncestorWithClass(this.el,"content");
  if(parent!=null)return TabSystem.list[parent.id];
  return root;
};
TabSystem.prototype.getTabParams=function(){
  if(!this.tabParams){
    this.tabParams=new Object;
    var parentSystem=this.parentSystem();
    parentTp=(parentSystem==null)?TabParams:parentSystem.getTabParams();
    for(var param in parentTp)
      this.tabParams[param]=parentTp[param];
  }
  return this.tabParams;
};
TabSystem.prototype.setEventType=function(eventType){
  var params=this.getTabParams();
  if(params.eventType==eventType) return;
  for(var i=0,len=this.tabArray.length;i<len;i++){
    var tab=Tab.list[this.tabArray[i].id];
    tab.removeEventListener("on"+params.eventType,tab.depressTab);
    tab.addEventListener("on"+eventType,tab.depressTab);
  }
  params.eventType=eventType;
};
function removeTabs(ts){
  ts.tabsDiv.style.display="none";
  if(ts.tabsClone)ts.tabsClone.style.display="none";
  var cs=getElementsWithClass(ts.el,"div","content");
  for(var i=0;i<cs.length;i++){
    cs[i].style.visibility='visible';
    cs[i].style.display='block';
  }
}
function undoRemoveTabs(ts){
  ts.tabsDiv.style.display="block";
  if(ts.tabsClone)ts.tabsClone.style.display="block";
  isTabLayout=true;
  for(var i=0;i<ts.tabs.length;i++)
    if(ts.tabs[i]!=ts.activeTab){
      ts.tabs[i].content.style.display="none";
      ts.tabs[i].content.style.visibility="hidden";
    }
}
TabSystem.prototype.setAlwaysShowClone=function(flag){
  this.getTabParams().alwaysShowClone=flag;
  this.showTabsCloneIfNecessary();
};
TabSystem.prototype.addClone=function(){
  if(!this.tabsDiv.cloneNode) return;
  this.getTabParams().useClone=true;
  this.tabsClone=this.tabsDiv.cloneNode(true);
  if(!this.tabsClone) return;
  this.tabsClone.className="tabs tabsClone";
  this.el.appendChild(this.tabsClone);
  for(var i=0;i<this.tabArray.length;i++){
    var cont=Tab.list[this.tabArray[i].id];
    var bt=getDescendantById(this.tabsClone,cont.id);
    bt.id="Bottom"+bt.id;
    cont.bottomTab=new BottomTab(bt,cont);
  }
  this.addEventListener("onchange",updateTabsClonePosition);
  if(Browser.id.MAC_IE5)window.setInterval("updateTabsClonePosition()",300);
  contentPane.addEventListener("onresize",updateTabsClonePosition);
  this.showTabsCloneIfNecessary();
};
tabInit=function tabInit(){
  if(!Browser.isSupported())return;
  var tabsDivs=getElementsWithClass(document.body,"div","tabs");
  if(tabsDivs.length==0){
    var tabsDiv0=document.getElementById("tabs");
    if(tabsDiv0)tabsDivs=[tabsDiv0];
    else return;
  }
  var tabToDepress;
  for(var i=0;i<tabsDivs.length;i++){
    var cnt=findAncestorWithClass(tabsDivs[i],"content")||document.body;
    if(!cnt.id)cnt.id="body";
    var ts=new TabSystem(cnt,tabsDivs[i]);
    var len=ts.tabArray.length;
    for(var j=0;j<len;new ControllerTab(ts.tabArray[j++],ts));
  }
  var activeTabs=getCookie("activeTabs"+escape(getFilename()));
  if(activeTabs!=null){
    var activeTabArray=activeTabs.split(",");
    for(var i=0,len=activeTabArray.length;i<len;i++){
      var tab=Tab.list[activeTabArray[i]];
      if(tab)tab.depressTab();
    }
  }
  if(Browser.id.MAC_IE5){
    fixDocHeight=function(){
      document.documentElement.style.height=document.body.style.height=document.body.clientHeight+"px";
    };
    contentPane.addEventListener("onresize",fixDocHeight);
    setTimeout("fixDocHeight()",500);
  }
  handleHashNavigation();
  deletePageCookie("activeTabs"+escape(getFilename()));
  for(id in TabSystem.list){
    var ts=TabSystem.list[id];
    if(ts.tabParams.useClone)ts.addClone();
    if(ts.activeTab==null&&ts.defaultActiveTab!=null)ts.defaultActiveTab.depressTab();
  }
  if(Browser.id.MOZ)repaintFix(document.body);
};
window.id="window";
contentPane=new EventQueue(window);
function handleHashNavigation(){
  var id=window.location.hash;
  if(id){
    var el=document.getElementById(id.substring(1));
    if(el)var contentEl=findAncestorWithClass(el,"content");
    if(contentEl)switchTabs("tab"+contentEl.id.substring("content".length),null,false);
  }
}
Tab=function Tab(el,ts){
  if(arguments.length==0) return;
  this.souper=Tab.souper;
  this.souper(el);
  this.content=null;
  this.tabSystem=ts;
  this.properties=new Object;
  this.el.onActivate=function(){};
  this.addEventListener("onmouseover",this.hoverTab);
  this.addEventListener("onmouseout",this.hoverOff);
  this.addEventListener("on"+this.tabSystem.getTabParams().eventType,this.depressTab);
  if(Browser.id.IE5_0)positionTabEl(this);
  if(!Tab.list[this.id])Tab.list[this.id]=this;
};
Tab.extend(EventQueue);
Tab.list=new Object;
Tab.prototype.setProperty=function(name,value){
  this.properties[name]=value;
};
Tab.prototype.getContent=function(){
  if(this.content==null){
    var id=this.id.substring(3);
    this.content=document.getElementById("content"+id);
    if(!this.content){
      alert("tab.id="+this.id+"\n"+"content"+id+" does not exist!");
    }
  }
  return this.content;
};
Tab.prototype.getTabSystem=function(){
  return this.tabSystem;
};
hoverTab=function hoverTab(){
  var tab=Tab.list[this.id];
  var activeTab=tab.tabSystem.activeTab;
  if(activeTab&&activeTab.id==tab.id) return;
  tab.setClassName("tabHover tab");
  if(tab.hoversrc)tab.el.src=tab.hoversrc;
};
hoverOff=function hoverOff(){
  var tab=Tab.list[this.id];
  var activeTab=tab.tabSystem.activeTab;
  if(activeTab&&activeTab.id==tab.id) return;
  tab.setClassName("tab");
  if(tab.normalsrc)tab.el.src=tab.normalsrc;
};
Tab.prototype.toString=function(){ return this.id; };
function resetTab(tab){
  tab.setClassName("tab");
  if(tab.normalsrc)tab.el.src=tab.normalsrc;
  tab.getContent().style.display=tabDisplayNone;
  tab.getContent().style.visibility="hidden";
}
ControllerTab=function ControllerTab(el,ts){
  if(arguments.length==0) return;
  this.souper(el,ts);
  if(el.tagName.toLowerCase()=="img"){
    this.normalsrc=el.src;
    this.hoversrc=el.getAttribute("hoversrc");
    this.activesrc=el.getAttribute("activesrc");
  }
  if(hasToken(el.className,"tabActive")){
    this.depressTab();
    this.tabSystem.defaultActiveTab=this;
  }
  else{
    this.getContent().style.display=tabDisplayNone;
    this.getContent().style.visibility="hidden";
    if(Browser.id.OP5)setTimeout('Tab.list.'+this.id+'.content.style.position="absolute";',50);
  }
  if(Browser.id.OP5)setTimeout('Tab.list.'+this.id+'.content.style.visibility="hidden";',50);
  this.tabSystem.tabs[this.tabSystem.tabs.length]=this;
};
ControllerTab.extend(Tab);ControllerTab.prototype.setClassName=function(klass){
  this.el.className=klass;
  if(this.bottomTab)this.bottomTab.el.className=klass;
};
ControllerTab.prototype.hoverTab=hoverTab;
ControllerTab.prototype.hoverOff=hoverOff;
ControllerTab.prototype.depressTab=function depressTab(e){
  var tab=Tab.list[this.id];
  var tabSystem=tab.tabSystem;
  tabSystem.nextTab=tab;
  if(tabSystem.activeTab==tab) return;
  tabSystem.relatedTab=tabSystem.activeTab;
  if(false==tabSystem.el.onBeforeChange()) return;
  tab.el.onActivate();
  tab.setClassName("tab tabActive");
  if(tab.activesrc)tab.el.src=tab.activesrc;
  if(tabSystem.activeTab)resetTab(tabSystem.activeTab);
  tabSystem.activeTab=tab;
  tabSystem.el.onchange();
  if(tabSystem.relatedTab)tabSystem.relatedTab.getContent().style.display="none";
  tab.getContent().style.display="block";
  tab.getContent().style.visibility=contentInheritVis;
  tabSystem.nextTab=null;
  if(tabSystem.tabsClone)tabSystem.showTabsCloneIfNecessary();
  if(Browser.id.MOZ)updateTabsClonePosition(1);
};
BottomTab=function BottomTab(el,controllerTab){
  if(arguments.length==0) return;
  this.souper(el,controllerTab.tabSystem);
  this.controllerTab=controllerTab;
};
BottomTab.extend(Tab);
BottomTab.prototype.hoverTab=function(){this.controllerTab.hoverTab();};
BottomTab.prototype.hoverOff=function(){this.controllerTab.hoverOff();};
BottomTab.prototype.depressTab=function depressClonedTab(e){
  var tabSystem=this.tabSystem;
  if(tabSystem.activeTab==this.controllerTab) return;
  this.controllerTab.depressTab(e);
  this.controllerTab.setClassName("tab tabActive");
  window.scrollTo(0,(tabSystem.tabsClone.offsetTop+this.el.offsetHeight)-getViewportHeight());
};
function switchTabs(id,e,bReturn){
  if(!Browser.isSupported())return true;
  try{
    var tab=Tab.list[id];
    tab.depressTab(e);
  }
  catch(ex){}
  if(!bReturn)window.scrollTo(0,0);
  return bReturn;
}
updateTabsClonePosition=function updateTabsClonePosition(delay){
  for(var id in TabSystem.list)
  if(TabSystem.list[id].tabParams.useClone)setTimeout("TabSystem.list."+id+".setTabsClonePosition();",delay||500);
};
TabSystem.prototype.setTabsClonePosition=function(){
  if(!this.activeTab) return;
  var adjustment=0;
  var contentEl=this.activeTab.content;
  if(Browser.id.IE5_0||Browser.id.MAC_IE5)adjustment=0;
  else adjustment=2;
  this.tabsClone.style.top=(contentEl.offsetHeight+contentEl.offsetTop+adjustment)+px;
};
TabSystem.prototype.showTabsCloneIfNecessary=function(){
  if(!this.activeTab) return;
  var contentEl=this.activeTab.content;
  var contentBottom=contentEl.offsetTop+contentEl.offsetHeight;
  var visibility=(contentBottom>getViewportHeight()||this.getTabParams().alwaysShowClone)?"inherit":"hidden";
  this.tabsClone.style.visibility=visibility;
  this.setTabsClonePosition();
  if(Browser.id.MOZ){
    window.scrollBy(0,1);
    window.scrollBy(0,-1);
  }
};
function saveTabSystemState(){
  var activeTabList=getElementsWithClass(document.body,TabParams.tabTagName,"tabActive");
  for(var i=0;i<activeTabList.length;i++){
    if(!activeTabList[i].id) continue;
    activeTabList[i]=activeTabList[i].id;
    setPageCookie("activeTabs"+escape(getFilename()),activeTabList);
  }
};
contentPane.addEventListener("onunload",saveTabSystemState);
function positionTabEl(tab){
  var tabs=tab.el.parentNode;
  if(tab.tagName=="IMG"||tab.id.indexOf("Bottomtab")==0)return;
  if(!tabs.tabOffset)tabs.tabOffset=0;
  var tabWidth=Math.round(tab.el.offsetWidth*1.1)+15;
  var sty=tab.el.style;
  sty.left=tabs.tabOffset+px;
  sty.width=tabWidth+px;
  sty.textAlign="center";
  sty.display="block";
  sty.position="absolute";
  tabs.tabOffset+=parseInt(tab.el.offsetWidth)+4;
}
if(Browser.id.OP5)window.document.write("<style>.content{position:absolute;}</style>");
