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 indexFrame = parent.GetIndexFrame();
      if (indexFrame!=null) {
        var doc = util.GetContentDocument(indexFrame);
        var div = doc.getElementById("divIndex");
        if (div && div.scrollTop!=0)
          previousIndexScrollPos = div.scrollTop;
      }
      var searchFrame = parent.GetSearchFrame();
      if (searchFrame!=null) {
        doc = util.GetContentDocument(searchFrame);
        div = doc.getElementById("divSearchResults");
        if (div && 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;
  }

  try {
    var indexFrame = parent.GetIndexFrame();
    if (indexFrame!=null) {
      var doc = util.GetContentDocument(indexFrame);
      var div = doc.getElementById("divIndex");
      var rowToScroll;
      if (doc.body)
        rowToScroll = doc.body.getAttribute("rowToScroll");
      rowToScroll = doc.getElementById(rowToScroll);
      if (rowToScroll!=null && rowToScroll.offsetTop) {
        previousIndexScrollPos = rowToScroll.offsetTop+rowToScroll.parentNode.offsetTop;
        div.scrollTop = previousIndexScrollPos;
        doc.body.setAttribute("rowToScroll", null);
      }
      if (isNetscape) {
        if (div && div.scrollTop==0)
          div.scrollTop = previousIndexScrollPos;
      }
    }
    if (isNetscape) {
      var searchFrame = parent.GetSearchFrame();
      if (searchFrame!=null) {
        doc = util.GetContentDocument(searchFrame);
        div = doc.getElementById("divSearchResults");
        if (div && 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;
}
