var TabStrip_OnTabActivateMethods = {};

function TabStrip_RegisterOnTabActivate(strControlName, method)
{
  var arrMethods = TabStrip_OnTabActivateMethods[strControlName] || [];
  arrMethods.push(method);
  if (arrMethods.length==1)
    TabStrip_OnTabActivateMethods[strControlName]=arrMethods;
}

function TabStrip_OnTabActivate(strControlName, strTabName)
{
  var arrMethods = TabStrip_OnTabActivateMethods[strControlName];
  if (arrMethods) {
    for (var methodIdx in arrMethods) {
      try {
        var method = arrMethods[methodIdx];
        if (typeof(method)=='string')
          eval(method + "(\"" + strControlName + "\", \"" + strTabName + "\")");
        else
          method(strControlName, strTabName);
      }
      catch (e) {}
    }
  }
}

//It's need to fix Mozilla bug.
var previousIndexScrollPos = 0;
var previousSearchScrollPos = 0;
var previousFocusedRow = null;

function TabStrip_ToggleTab(strControlName, strTabName)
{
  if (!strControlName)
    throw "Argument null exception: 'strControlName'";
  if (!strTabName)
    throw "Argument null exception: 'strTabName'";

//It's need to fix Mozilla bug.
  if (isNetscape) {
    try {
      var doc = util.GetContentDocument(top.GetIndexFrame());
      var div = doc.getElementById("divIndex");
      if (div.scrollTop != 0)
        previousIndexScrollPos = div.scrollTop;
      doc = util.GetContentDocument(top.GetSearchFrame());
      div = doc.getElementById("divSearchResults");
      if (div.scrollTop != 0)
      previousSearchScrollPos = div.scrollTop;
    }
    catch(e) {}
  }
  

  var objActiveTabNameHolder = GetElementByName(strControlName);
  if (!objActiveTabNameHolder)
    throw "Can't find active tab name container";
  var objTab = document.getElementById(strTabName);
  if (!objTab)
    throw "Can't find specified tab.";
  objTab = objTab.firstChild;
  var strActiveTabName = objActiveTabNameHolder.value;
  if (strTabName==strActiveTabName) {
    if (objTab.className=="InactiveTab") {
      objTab.className="ActiveTab";
      TabStrip_OnTabActivate(strControlName, strTabName);
    }
  }
  else {
    if (strActiveTabName) {
      var objActiveTab = document.getElementById(strActiveTabName);
      if (objActiveTab) {
        objActiveTab = objActiveTab.firstChild;
        if (objActiveTab)
          objActiveTab.className="InactiveTab";
      }
    }
    objTab.className="ActiveTab";
    TabStrip_OnTabActivate(strControlName, strTabName);
    objActiveTabNameHolder.value = strTabName;
  }
  
//It's need to fix Mozilla bug.
  try {
    var doc = util.GetContentDocument(top.GetIndexFrame());
    var div = doc.getElementById("divIndex");
    var rowToScroll = doc.body.getAttribute("rowToScroll")
    if (rowToScroll != null && rowToScroll.offsetTop) {
	previousIndexScrollPos = rowToScroll.offsetTop;
        div.scrollTop = previousIndexScrollPos;
        doc.body.setAttribute( "rowToScroll", null );
    }
    if (isNetscape) {
      if( div.scrollTop == 0 )
        div.scrollTop = previousIndexScrollPos;
    }
    var indexTable = doc.getElementById("indexTable");
    var firstRow = indexTable.rows[1];
    if (firstRow != null)
    {
      var diff = (div.scrollTop - firstRow.offsetTop);
      if (diff < firstRow.scrollHeight) {
	firstVisibleIndex = 1;
      } else {
      var firstVisibleIndex = Math.floor(diff/firstRow.scrollHeight);
      diff = indexTable.rows[firstVisibleIndex].offsetTop - div.scrollTop;
      firstVisibleIndex -= Math.floor((diff*diff)/(Math.abs(diff)*firstRow.scrollHeight));
      }
      var nobrTag = indexTable.rows[firstVisibleIndex].cells[0].firstChild;
      var ancorTag = nobrTag.firstChild;
      if (ancorTag.tagName != "A") ancorTag = ancorTag.nextSibling;
	ancorTag.focus();
    } 
    if (isNetscape) {
      doc = util.GetContentDocument(top.GetSearchFrame());
      div = doc.getElementById("divSearchResults");
      if( div.scrollTop == 0 )
        div.scrollTop = previousSearchScrollPos;
    }
  }
  catch(e) {}

}

function TabStrip_Activate(strControlName)
{
  var objActiveTabNameHolder = GetElementByName(strControlName);
  if (objActiveTabNameHolder) {
    var strActiveTab = objActiveTabNameHolder.value;
    if (strActiveTab)
      TabStrip_ToggleTab(strControlName, strActiveTab);
  }
}

function GetElementByName(strControlName)
{
  var arrElements = document.getElementsByName(strControlName);
  if (arrElements && arrElements.length>0)
    return arrElements[0];
  return null;
}
