var container="menu";
var menuitem="dt";
var menucontents="dd";
var submenuitem="h3";
var submenucontents="ul";
var nested=false;
var single=true;
var openonstart=0;
/* ************************************************************************** */
function togglelayer(e)
{
  var folder=null,content=null;
  
  // set t to the touched object.
  if(document.all) folder=event.srcElement;
  else folder=e.target;

  // if object clicked is not a folder object, look to it's parent folder.
  while((folder)&&(folder.className!="closed")&&(folder.className!="opened"))
    folder=folder.parentElement;

  // set obj to the folder's contents.
  if(folder) content=folder.nextSibling;

  if(nested==true)
   while((content)&&(content.className!="contents"))
    content=content.nextSibling;

  // toggle layer.
  if(content)
    if(content.style)
      if(content.style.display)
  {
    what=(""+content.style.display).toLowerCase();
  }

  // if single mode, hide all other layers.
  if(single==true) hidealllayers(container);

  // toggle layer.
  if(content)
    if(content.style)
      if(content.style.display)
  {
    if(what=="block")
    {
      folder.className="closed";
      content.style.display="none";
    }
    else
    {
      folder.className="opened";
      content.style.display="block";
    }
  }

/*
  // go up tree, and make sure all parents are opened and visible.
  if((single==true)&&(nested==true))
  {
    //content=folder.nextSibling;
    do
    {
      while((content)&&(content.className!="contents"))
        content=content.nextSibling;

  	  if(content.className="contents")
  	  {
  	    content.style.display="block";
  	    content.previousSibling.className="opened";
  	  }
      content=content.parentElement;
      
    } while((content)&&(content.id!=container))
  }
*/

  if(navigator.appName=="Microsoft Internet Explorer")
  { if(event) { event.cancelBubble=true; event.returnValue=false; } }
}

/* ************************************************************************** */
function togglesublayer(e)
{
  var folder=null,content=null;
  
  // set t to the touched object.
  if(document.all) folder=event.srcElement;
  else folder=e.target;

  // if object clicked is not a folder object, look to it's parent folder.
  while((folder)&&(folder.className!="subclosed")&&(folder.className!="subopened"))
    folder=folder.parentElement;

  // set obj to the folder's contents.
  if(folder) content=folder.nextSibling;

  if(nested==true)
   while((content)&&(content.className!="subcontents"))
    content=content.nextSibling;

  // if single mode, hide all other layers.
  if(single==true) hideallsublayers(container);

  // toggle layer.
  if(content)
    if(content.style)
      if(content.style.display)
  {
    what=(""+content.style.display).toLowerCase();
    if(what=="block")
    {
      folder.className="subclosed";
      content.style.display="none";
    }
    else
    {
      folder.className="subopened";
      content.style.display="block";
    }
  }

/*
  // go up tree, and make sure all parents are opened and visible.
  if((single==true)&&(nested==true))
  {
    //content=folder.nextSibling;
    do
    {
      while((content)&&(content.className!="subcontents"))
        content=content.nextSibling;

  	  if(content.className="contents")
  	  {
  	    content.style.display="block";
  	    content.previousSibling.className="subopened";
  	  }
      content=content.parentElement;
      
    } while((content)&&(content.id!=container))
  }
*/

  if(navigator.appName=="Microsoft Internet Explorer")
  { if(event) { event.cancelBubble=true; event.returnValue=false; } }
}

/* ************************************************************************** */
function hidealllayers(id)
{
  var root=null,obj=null,i=0;

  root=document.getElementById(id);

  obj=root.getElementsByTagName(menuitem);
  for(i=0; i<obj.length; i++) { obj[i].className="closed"; }

  obj=root.getElementsByTagName(menucontents);
  for(i=0; i<obj.length; i++) { obj[i].style.display="none"; }
}

/* ************************************************************************** */
function hideallsublayers(id)
{
  var root=null,obj=null,i=0;

  root=document.getElementById(id);

  obj=root.getElementsByTagName(submenuitem);
  for(i=0; i<obj.length; i++) { obj[i].className="subclosed"; }

  obj=root.getElementsByTagName(submenucontents);
  for(i=0; i<obj.length; i++) { obj[i].style.display="none"; }
}

/* ************************************************************************** */
function showalllayers(id)
{
  var root=null,obj=null,i=0;

  root=document.getElementById(id);

  obj=root.getElementsByTagName(menuitem);
  for(i=0; i<obj.length; i++) { obj[i].className="opened"; }

  obj=root.getElementsByTagName(menucontents);
  for(i=0; i<obj.length; i++) { obj[i].style.display="block"; }
}

/* ************************************************************************** */
function setuplayers(id)
{
  var root=null,folder=null,i=0;

  container=id;
  root=document.getElementById(container);
  root.style.cursor="default";
  
  // mark all menuitems as closed, and add click events.
  folder=root.getElementsByTagName(menuitem);
  for(i=0; i<folder.length; i++)
  {
    if((folder[i].className.length)<1)
    {
      folder[i].style.cursor="pointer";
      if(openonstart==i) folder[i].className="opened";
      else folder[i].className="closed";
      if(document.all)
        folder[i].onclick=togglelayer;
      else
        folder[i].addEventListener("click", togglelayer, true);
    }
  }

  // mark all menuitems as closed, and add click events.
  folder=root.getElementsByTagName(submenuitem);
  for(i=0; i<folder.length; i++)
  {
    if((folder[i].className.length)<1)
    {
      folder[i].style.cursor="pointer";
      folder[i].className="subclosed";
      if(document.all)
        folder[i].onclick=togglelayer;
      else
        folder[i].addEventListener("click", togglesublayer, true);
    }
  }

  // mark all menu contents as hidden.
  obj=root.getElementsByTagName(menucontents);
  for(i=0; i<obj.length; i++)
  {
    if((obj[i].className.length)<1)
    {
      obj[i].className="contents";
      if(openonstart==i) obj[i].style.display="block";
      else obj[i].style.display="none";
    }
  }

  // mark all menu contents as hidden.
  obj=root.getElementsByTagName(submenucontents);
  for(i=0; i<obj.length; i++)
  {
    if((obj[i].className.length)<1)
    {
      obj[i].className="subcontents";
      obj[i].style.display="none";
    }
  }
}
