var Panels=new Object();

function AddPanel(strPanel, intInitialTab)
{
   var objTemp=new Object()

   objTemp.InProgress=false;
   objTemp.Speed=5;
   objTemp.CurrentTab='';
   objTemp.MouseClick='B';
   objTemp.MouseOver='O';

   var objDivs=document.getElementsByTagName('DIV');
   var objContent;
   var objWrapper;
   var intCurrentDiv;
   var intDivCounter=0;

   for (intCurrentDiv=0; intCurrentDiv<objDivs.length; intCurrentDiv++)
   {
      if (objDivs[intCurrentDiv].id==strPanel)
      {
         intDivCounter=intDivCounter+1;
         objDivs[intCurrentDiv].id=strPanel+'_'+intDivCounter;
         objDivs[intCurrentDiv].onclick=function(){ShowHide(strPanel, this.id, 'C');}
         objDivs[intCurrentDiv].onmouseover=function(){ShowHide(strPanel, this.id, 'O');}

         objWrapper=objDivs[intCurrentDiv].nextSibling;
         while (objWrapper && objWrapper.tagName!='DIV')
            objWrapper=objWrapper.nextSibling;

         objWrapper.id=strPanel+'_'+intDivCounter+'_wrapper';
         objWrapper.style.height='1px';

         objContent=objWrapper.getElementsByTagName('DIV')[0];
         objContent.id=strPanel+'_'+intDivCounter+'_content';
      }
   }

   Panels[strPanel]=objTemp;

   if (intInitialTab)
      ShowHide(strPanel, strPanel+'_'+intInitialTab, 'A');
}

function ShowHide(strPanel, strTab, strAction)
{
   var objWrapper;

   if (Panels[strPanel].InProgress)
      return;

   if ((strAction=='C' && Panels[strPanel].MouseClick=='N') || (strAction=='O' && Panels[strPanel].MouseOver=='N'))
      return;

   Panels[strPanel].InProgress=true;

   objWrapper=document.getElementById(strTab+'_wrapper');

   if (!objWrapper.style.display || objWrapper.style.display=='none')  // selected tab is closed
   {
      if (Panels[strPanel].CurrentTab!=strTab) // other tab is open
         Slide(strPanel, strTab, Panels[strPanel].CurrentTab, Panels[strPanel].Speed);
      else // no tabs are open
         Slide(strPanel, strTab, '', Panels[strPanel].Speed);
   }
   else // selected tab is open
   {
      if ((strAction=='C' && Panels[strPanel].MouseClick=='B') || (strAction=='O' && Panels[strPanel].MouseOver=='B'))
         Slide(strPanel, '', strTab, Panels[strPanel].Speed);
      else
         Panels[strPanel].InProgress=false;
   }
}

function Slide(strPanel, strOpenTab, strCloseTab, intSpeed)
{
   var objCloseContent;
   var objCloseWrapper;
   var objOpenContent;
   var objOpenWrapper;
   var blnClose=false;
   var blnOpen=false;
   var intCloseHeight;
   var intOpenHeight;

   if (strOpenTab!='')
   {
      blnOpen=true;
      objOpenWrapper=document.getElementById(strOpenTab+'_wrapper');
      objOpenContent=document.getElementById(strOpenTab+'_content');
   }

   if (strCloseTab!='')
   {
      blnClose=true;
      objCloseWrapper=document.getElementById(strCloseTab+'_wrapper');
      objCloseContent=document.getElementById(strCloseTab+'_content');
   }

   if (blnOpen)
   {
      objOpenWrapper.style.display='block';
      objOpenWrapper.style.visibility='visible';

      intOpenHeight=objOpenWrapper.clientHeight;
      if (intOpenHeight==0)
         intOpenHeight=objOpenWrapper.offsetHeight;

      intOpenHeight=intOpenHeight+intSpeed;

      if (intOpenHeight>objOpenContent.offsetHeight)
      {
         intOpenHeight=objOpenContent.offsetHeight;
         blnOpen=false;
      }

      objOpenWrapper.style.height=intOpenHeight+'px';
      intTop=intOpenHeight-objOpenContent.offsetHeight;
      if (intTop>0)
         intTop=0;

      objOpenContent.style.top=intTop+'px';
   }

   if (blnClose)
   {
      intCloseHeight=objCloseWrapper.clientHeight;
      if (intCloseHeight==0)
         intCloseHeight=objCloseWrapper.offsetHeight;

      intCloseHeight=intCloseHeight+(intSpeed*-1);

      if (intCloseHeight<=1)
      {
         intCloseHeight=1;
         blnClose=false;
      }

      objCloseWrapper.style.height=intCloseHeight+'px';
      intTop=intCloseHeight-objCloseContent.offsetHeight;
      if (intTop>0)
         intTop=0;

      objCloseContent.style.top=intTop+'px';
   }

   if (blnOpen || blnClose)
      setTimeout("Slide('"+strPanel+"', '"+strOpenTab+"', '"+strCloseTab+"', "+intSpeed+")", 10);
   else
   {
      if (strCloseTab!='')
         objCloseWrapper.style.display='none';

      Panels[strPanel].CurrentTab=strOpenTab;
      Panels[strPanel].InProgress=false;
   }
}