// DynaMan javascript version .4 feb 13,2005
//copyright (c) 2005 Henrik Bechmann, Bechmann Software Services, Toronto Canada
//www.bechmannsoftware.com. Creative Commons Licence.
//Summary: Give attribution, retain licence display, use work in any way.
// ---------[ Menu Manager ]-----------
var MenuMan = {
 onmouseover:MenuMan$onmouseover,
 onmouseout:MenuMan$onmouseout,
 initialize:MenuMan$initialize
}
var MenuMan$openbranchlist = new Array(), MenuMan$closebranchlist = new Array(),MenuMan$timeoutindex;
function MenuMan$onmouseover(evt) {
 clearTimeout(MenuMan$timeoutindex);
 var theClassName,theList,theSubjectClass,theTestSubject,theSubject,theCloseSubject,sharedpointer,reg;
 var theEvent = (evt ? evt : (window.event? window.event : null));
 if (theEvent) {
  var theTarget=theEvent.target ? theEvent.target : (theEvent.srcElement ? theEvent.srcElement :null);
  if (theTarget) {
   while (!(theTarget.className && theTarget.className.match(/tabitem-frame|menuitem-frame|tabcolumn-frame|menucolumn-frame/))) {
    theTarget=theTarget.parentNode;
   }
   if (!(theTarget.className && theTarget.className.match(/tabitem-frame|menuitem-frame/))) return;
   theClassName=theTarget.className;
   switch (theClassName) {
    case "tabitem-frame":theSubjectClass="tabcolumn-frame";break;
    case "menuitem-frame":theSubjectClass="menucolumn-frame";break;
   }
   theList=theTarget.getElementsByTagName("div");
   for (var i=0;i<theList.length;i++) {
    theTestSubject=theList[i];
    if (theTestSubject.className && (theTestSubject.className==theSubjectClass)) {
	 theSubject=theTestSubject;
	 break;
	}
   }
   for (var i=0;i<MenuMan$openbranchlist.length;i++) {
    MenuMan$closebranchlist[i]=MenuMan$openbranchlist[i];
   }
   MenuMan$openbranchlist=new Array();
   if (!theSubject) theSubject=theTarget;
   reg=new RegExp("\\b" + theSubjectClass + "\\b");
   if (theSubject.className.match(reg)) MenuMan$openbranchlist[0]=theSubject;
   while (!(theSubject.parentNode.className && theSubject.parentNode.className.match(/\bmenublock\b/))) {
    theSubject=theSubject.parentNode;
    if (theSubject.className && theSubject.className.match(/tabcolumn-frame|menucolumn-frame/)) {
     MenuMan$openbranchlist[MenuMan$openbranchlist.length]=theSubject;
    }
   }
   MenuMan$openbranchlist=MenuMan$openbranchlist.reverse();
   sharedpointer=-1;
   for (var i=0;i<Math.min(MenuMan$openbranchlist.length,MenuMan$closebranchlist.length);i++) {
    if (MenuMan$openbranchlist[i]==MenuMan$closebranchlist[i]) {
	 sharedpointer=i;
    } else {
     break;
    }
   }
   for (var i=MenuMan$closebranchlist.length-1;i>sharedpointer;i--) {
    theCloseSubject=MenuMan$closebranchlist[i];
    if ((theCloseSubject.style.display) && (theCloseSubject.style.display=="block")) {
     theCloseSubject.style.display="none";
    }
   }
   if (MenuMan$openbranchlist.length>0) {
    theSubject=MenuMan$openbranchlist[MenuMan$openbranchlist.length-1];
	if (!theSubject.style.display) theSubject.style.display="none";
    if (theSubject.style.display=="none") {
     theSubject.style.display="block";
    }
   }
   MenuMan$closebranchlist=new Array();
  }
 }
}
function MenuMan$clearopenlist() {
 var theCloseSubject;
 for (var i=MenuMan$openbranchlist.length-1;i>=0;i--) {
  theCloseSubject=MenuMan$openbranchlist[i];
  if ((theCloseSubject.style.display) && (theCloseSubject.style.display=="block")) {
   theCloseSubject.style.display="none";
  }
 }
 MenuMan$openbranchlist = new Array();
}
function MenuMan$onmouseout(evt) {
 MenuMan$timeoutindex=setTimeout("MenuMan$clearopenlist()",500);
}
function MenuMan$onclick(evt) {
 var theEvent = (evt ? evt : (window.event? window.event : null));
 if (theEvent) {
  var theTarget=theEvent.target ? theEvent.target : (theEvent.srcElement ? theEvent.srcElement :null);
  if (theTarget) {
   if ((theTarget.tagName=="A") || (theTarget.parentNode.tagName=="A")) {
    MenuMan$clearopenlist();
   }
  }
 }
}
function MenuMan$initialize(containingelement) {
 var theList=containingelement.getElementsByTagName("div");
 var theMenuBlock;
 for (var i=0;i<theList.length;i++) {
  if (theList[i].className && theList[i].className.match(/\bmenublock\b/)) {
   theMenuBlock=theList[i];
   theMenuBlock.onmouseover=MenuMan$onmouseover;
   theMenuBlock.onmouseout=MenuMan$onmouseout;
   theMenuBlock.onclick=MenuMan$onclick;
  }
 }
}
// ---------[ Tree Manager ]-----------
TreeMan$clusters = new Array();
var TreeMan = {
 initialize:TreeMan$initialize,
 //argument branchname (id)...
 togglebranch:TreeMan$togglebranch,
 openbranch:TreeMan$openbranch,
 closebranch:TreeMan$closebranch,
 openall:TreeMan$openall,
 closeall:TreeMan$closeall,
 opentop:TreeMan$opentop,
 closetop:TreeMan$closetop,
 //end argument branchname
 //argument treename (div id)...
 save:TreeMan$save,
 restore:TreeMan$restore,
 clearmemory:TreeMan$clearmemory,
 //end argument treename
 saveall:TreeMan$saveall,
 restoreall:TreeMan$restoreall,
 clearmemoryall:TreeMan$clearmemoryall,
 showrelated:TreeMan$showhighlighted, //elementnames comma separated
 clearhighlights:TreeMan$clearhighlights,
 highlightcolor:"#fd9",
 clusters:TreeMan$clusters
}
//---------TreeMan interface functions--------------
TreeMan$highlights = new Array();
//note: open a list is implemented bottom to top for correct gecko engine rendering.
function TreeMan$initialize(containingelement) {
 var theList=containingelement.getElementsByTagName("div");
 var theTreeBlock;
 for (var i=0;i<theList.length;i++) {
  if (theList[i].className && theList[i].className.match(/\btreeblock\b/)) {
   theTreeBlock=theList[i];
   theTreeBlock.onclick=TreeMan$clicktreeblock;
   TreeMan$initspans(theTreeBlock);
   TreeMan$initlineitems(theTreeBlock);
   TreeMan$treeblocks[TreeMan$treeblocks.length]=theTreeBlock;
  }
 }
 TreeMan$restoreall();
}
function TreeMan$initlineitems(theTreeBlock) {
 var theList=theTreeBlock.getElementsByTagName("li");
 var theElement;
 for (var i=0;i<theList.length;i++) {
  theElement=theList[i];
  if (!theElement.className) {
   theElement.className="leaf";
  }
 }
}
function TreeMan$initspans(theTreeBlock) {
 var theList=theTreeBlock.getElementsByTagName("span");
 var theElement;
 for (var i=0;i<theList.length;i++) {
  theElement=theList[i];
  if (theElement.className) {
   var theClassName = theElement.className;
   switch (theClassName) {
    case "branchtoggle":
     break;
	case "treecommands":
	 theElement.innerHTML='<span class="cmd-to" title="toggle expand/collapse">&lt;|&gt;</span>&nbsp;<span class="cmd-ot" title="show top">&gt;|&lt;&lt;</span>&nbsp;<span class="cmd-oa" title="expand all">&gt;&gt;&gt;</span>&nbsp;<span class="cmd-ca" title="collapse all">&lt;&lt;&lt;</span>&nbsp;'; 
	 break;
   }
  }
 }
}
function TreeMan$togglebranch(branchname) {
 TreeMan$toggletarget(document.getElementById(branchname));
}
function TreeMan$openbranch(branchname) {
 var theTarget=document.getElementById(branchname);
 if (theTarget) TreeMan$opennode(theTarget);
}
function TreeMan$closebranch(branchname) {
 var theTarget=document.getElementById(branchname);
 TreeMan$closenode(theTarget);
}
function TreeMan$openall(branchname) {
 var theTarget=document.getElementById(branchname);
 TreeMan$openallnodes(theTarget);
}
function TreeMan$closeall(branchname) {
 var theTarget=document.getElementById(branchname);
 TreeMan$closeallnodes(theTarget);
}
function TreeMan$opentop(branchname) {
 var theTarget=document.getElementById(branchname);
 TreeMan$opentopnodes(theTarget);
}
function TreeMan$opentopnodes(theTarget) {
 var theList=theTarget.childNodes;
 if (theTarget.tagName=="LI") {
  TreeMan$opennode(theTarget); 
  return;
 }
 for (var i=theList.length-1;i>=0;i--) {
  if (theList[i].tagName=="UL") {
   TreeMan$openchildnodes(theList[i])
  }
 }
}
function TreeMan$closetop(branchname) {
 var theTarget=document.getElementById(branchname);
 var theList=theTarget.childNodes;
 for (var i=0;i<theList.length;i++) {
  if (theList[i].tagName=="UL") {
   TreeMan$closechildnodes(theList[i])
  }
 }
}
function TreeMan$save(thetreename) {
 var theTarget=document.getElementById(thetreename);
 var theList=theTarget.getElementsByTagName("li");
 var theString="",theElement;
 for (var i=0;i<theList.length;i++) {
  theElement=theList[i];
  if ((theElement.id) && (theElement.className=="open")) {
   theString+="|"+theElement.id;
  }
 }
 if ((theString=="") || (theString.length==1)) {
  theString="allclosed";
 } else {
  theString=theString.substr(1);
 }
 CookieMan.setcookie(thetreename,theString);
}
function TreeMan$restore(thetreename) {
 var theString, theList;
 TreeMan$closeall(thetreename);
 theString=CookieMan.getcookie(thetreename)
 if (theString!="nothing") {
  theList=theString.split("|");
  for (var i=theList.length-1;i>=0;i--) {
   TreeMan$openbranch(theList[i]);
  }
 }
}
function TreeMan$clearmemory(thetreename) {
 CookieMan.setcookie(thetreename,null);
}
function TreeMan$saveall() {
 var theTreeBlock;
 for (var i=0;i<TreeMan$treeblocks.length;i++) {
  theTreeBlock=TreeMan$treeblocks[i];
  if (theTreeBlock.id) TreeMan$save(theTreeBlock.id);
 }
}
function TreeMan$restoreall() {
 var theTreeBlock;
 for (var i=TreeMan$treeblocks.length-1;i>=0;i--) {
  theTreeBlock=TreeMan$treeblocks[i];
  if (theTreeBlock.id) TreeMan$restore(theTreeBlock.id);
 }
}
function TreeMan$clearmemoryall() {
 var theTreeBlock;
 for (var i=0;i<TreeMan$treeblocks.length;i++) {
  theTreeBlock=TreeMan$treeblocks[i];
  if (theTreeBlock.id) TreeMan$clearmemory(theTreeBlock.id);
 }
}
function TreeMan$showhighlighted(elementnames) {
 var theList=elementnames.split(","),theElement;
 TreeMan$clearhighlights();
 for (var i=theList.length-1;i>=0;i--) {
  theElement=document.getElementById(theList[i]);
  TreeMan$showelement(theElement);
  theElement.style.backgroundColor=TreeMan.highlightcolor;
  TreeMan$highlights[TreeMan$highlights.length]=theElement
 }
 document.location.href="#"+theElement.id;
}
function TreeMan$clearhighlights() {
 for (var i=0;i<TreeMan$highlights.length;i++) {
  TreeMan$highlights[i].style.backgroundColor=null;
 }
 TreeMan$highlights = new Array();
}
//--------TreeMan implementations--------------
var TreeMan$treeblocks=new Array();
function TreeMan$openchildnodes(theTarget) {
 var theList=theTarget.childNodes;
 var theElement;
 for (var i=theList.length-1;i>=0;i--) {
  theElement=theList[i];
  if (theElement.tagName=="LI") TreeMan$opennode(theElement);
 }
}
function TreeMan$closechildnodes(theTarget) {
 var theList=theTarget.childNodes;
 var theElement;
 for (var i=0;i<theList.length;i++) {
  theElement=theList[i];
  if (theElement.tagName=="LI") TreeMan$closenode(theElement);
 }
}
function TreeMan$opennode(theTarget) {
 if (theTarget.tagName=="LI") {
  if (theTarget.className=="closed") {
   theTarget.className="open";
  }
 }
}
function TreeMan$closenode(theTarget) {
 if (theTarget.tagName=="LI") {
  if (theTarget.className=="open") {
   theTarget.className="closed";
  }
 }
}
function TreeMan$openallnodes(theTarget) {
 var theList=theTarget.getElementsByTagName("li");
 for (var i=theList.length-1;i>=0;i--) {
  TreeMan$opennode(theList[i]);
 }
 if (theTarget.tagName=="LI") TreeMan$opennode(theTarget);
}
function TreeMan$closeallnodes(theTarget) {
 var theList=theTarget.getElementsByTagName("li");
 if (theTarget.tagName=="LI") TreeMan$closenode(theTarget);
 for (var i=0;i<theList.length;i++) {
  TreeMan$closenode(theList[i]);
 }
}
function TreeMan$clicktreeblock(evt) {
 var theEvent = (evt ? evt : (window.event? window.event : null));
 if (theEvent) {
  var theTarget=theEvent.target ? theEvent.target : (theEvent.srcElement ? theEvent.srcElement :null);
  if (theTarget) {
   if (theTarget.className) {
    var theClassName=theTarget.className;
    if (theClassName.substr(0,4)=="cmd-") {
	 TreeMan$processcmd(theTarget,theClassName);
	 return;
	}
   }
   while (!(theTarget.className && theTarget.className.match(/\btreeblock\b/)) && (theTarget.parentNode)) {
    if (!(theTarget.tagName=="LI")) {
     if ((theTarget.tagName=="A") || (theTarget.tagName=="UL")) return;
     theTarget = theTarget.parentNode;
    } else break;
   }
   if ((theTarget.tagName=="LI") && (!((theTarget.className) && (theTarget.className=="leaf")))) {
    TreeMan$toggletarget(theTarget);
   }
  }
 }
}
function TreeMan$processcmd(theTarget,theCmd) {
 while ((!(theTarget.className && theTarget.className.match(/\btreeblock\b/))) && theTarget.parentNode) {
  if (!(theTarget.tagName=="LI")) {
   if (theTarget.tagName=="A") return;
   theTarget = theTarget.parentNode;
  } else break;
 }
 if (theTarget.tagName=="LI") {
  switch (theCmd) {
   case "cmd-to": TreeMan$toggletarget(theTarget); break;
   case "cmd-ca": TreeMan$closeallnodes(theTarget); break;
   case "cmd-oa": TreeMan$openallnodes(theTarget); break;
   case "cmd-ot": TreeMan$closeallnodes(theTarget); TreeMan$opentopnodes(theTarget); break;
  }
 }
}
function TreeMan$toggletarget(theTarget) {
 if (theTarget.tagName=="LI") {
  if ((!theTarget.className) || (theTarget.className=="open")) {
   theTarget.className="closed";
  } else if (!theTarget.className.match(/\bbanner\b/)) {
   theTarget.className="open";
  }
 }
}
function TreeMan$showelement(theElement) {
 var theTestElement=theElement
 while (!(theTestElement.className && theTestElement.className.match(/\btreeblock\b/))) {
  if ((theTestElement.tagName=="LI") && theTestElement.className && (theTestElement.className=="closed")) {
   TreeMan$opennode(theTestElement);
  }
  theTestElement=theTestElement.parentNode;
 }
}
// ---------[ Cookie Manager ]-----------
CookieMan = {
 setcookie:CookieMan$setcookie,
 getcookie:CookieMan$getcookie
}
function CookieMan$setcookie(thename,thevalue) {
 var exp=new Date();
 var theString;
 var onemonth=exp.getTime() + (30*24*60*60*1000);
 exp.setTime(onemonth);
 if (!thevalue) thevalue='nothing';
 theString=thename + '=' + escape(thevalue) + ';expires='+exp.toGMTString();
 document.cookie=theString;
}
function CookieMan$getcookie(thename) {
 var search=thename+"=";
 var returnvalue="nothing";
 var end;
 if (document.cookie.length>0) {
  offset=document.cookie.indexOf(search);
  if (offset!=-1) {
   offset+=search.length;
   end=document.cookie.indexOf(";",offset);
   if (end==-1) end=document.cookie.length;
   returnvalue=unescape(document.cookie.slice(offset,end));
   if (returnvalue.length==0) returnvalue="nothing";
  }
 }
 return(returnvalue);
}
var DynaMan = {
 init:DynaMan$init
}
function DynaMan$init() {
 TreeMan.initialize(document);
 MenuMan.initialize(document);
}

