function arrayCopy(input)
{var output=new Array(input.length);for(i in input){if(typeof(input[i])=='array'){output[i]=arrayCopy(input[i]);}else{output[i]=input[i];}}
return output;}
function TreeMenu(iconpath,myname,linkTarget,defaultClass,usePersistence,noTopLevelImages)
{this.iconpath=iconpath;this.myname=myname;this.linkTarget=linkTarget;this.defaultClass=defaultClass;this.usePersistence=usePersistence;this.noTopLevelImages=noTopLevelImages;this.n=new Array();this.output='';this.nodeRefs=new Array();this.branches=new Array();this.branchStatus=new Array();this.layerRelations=new Array();this.childParents=new Array();this.cookieStatuses=new Array();this.preloadImages();}
TreeMenu.prototype.addItem=function(newNode)
{newIndex=this.n.length;this.n[newIndex]=newNode;return this.n[newIndex];}
TreeMenu.prototype.preloadImages=function()
{var plustop=new Image;plustop.src=this.iconpath+'/plus.gif';var plusbottom=new Image;plusbottom.src=this.iconpath+'/plus.gif';var plus=new Image;plus.src=this.iconpath+'/plus.gif';var minustop=new Image;minustop.src=this.iconpath+'/minus.gif';var minusbottom=new Image;minusbottom.src=this.iconpath+'/minus.gif';var minus=new Image;minus.src=this.iconpath+'/minus.gif';var branchtop=new Image;branchtop.src=this.iconpath+'/line.gif';var branchbottom=new Image;branchbottom.src=this.iconpath+'/line.gif';var branch=new Image;branch.src=this.iconpath+'/line.gif';var linebottom=new Image;linebottom.src=this.iconpath+'/line.gif';var line=new Image;line.src=this.iconpath+'/line.gif';}
TreeMenu.prototype.drawMenu=function()
{var output='';var modifier='';var layerID='';var parentLayerID='';var nodes=arguments[0]?arguments[0]:this.n
var level=arguments[1]?arguments[1]:[];var prepend=arguments[2]?arguments[2]:'';var expanded=arguments[3]?arguments[3]:false;var visibility=arguments[4]?arguments[4]:'inline';var parentLayerID=arguments[5]?arguments[5]:null;var currentlevel=level.length;for(var i=0;i<nodes.length;i++){level[currentlevel]=i+1;layerID=this.myname+'_'+'node_'+this.implode('_',level);this.nodeRefs[layerID]=nodes[i];this.childParents[layerID]=parentLayerID;if(i==0&&parentLayerID==null){modifier=nodes.length>1?"top":'single';}else if(i==(nodes.length-1)){modifier="bottom";}else{modifier="";}
if(!this.doesMenu()||(parentLayerID==null&&(nodes.length==1||this.noTopLevelImages))){expanded=true;}else if(nodes[i].expanded){expanded=true;}else{expanded=false;}
visibility=this.checkParentVisibility(layerID)?visibility:'none';if(nodes[i].n.length>0){this.branchStatus[layerID]=expanded;this.branches[this.branches.length]=layerID;}
if(!this.layerRelations[parentLayerID]){this.layerRelations[parentLayerID]=new Array();}
this.layerRelations[parentLayerID][this.layerRelations[parentLayerID].length]=layerID;var gifname=nodes[i].n.length&&this.doesMenu()&&nodes[i].isDynamic?(expanded?'minus':'plus'):'branch';var iconName=expanded&&nodes[i].expandedIcon?nodes[i].expandedIcon:nodes[i].icon;var iconimg=nodes[i].icon?this.stringFormat('<img src="{0}/{1}" width="20" height="20" align="top" id="icon_{2}">',this.iconpath,iconName,layerID):'';var eventHandlers="";for(j in nodes[i].events){eventHandlers+=this.stringFormat('{0}="{1}" ',j,nodes[i].events[j]);}
var layerTag=this.doesMenu()?this.stringFormat('<div id="{0}" style="display: {1}" class="{2}">',layerID,visibility,(nodes[i].cssClass?nodes[i].cssClass:this.defaultClass)):this.stringFormat('<div class="{0}">',nodes[i].cssClass?nodes[i].cssClass:this.defaultClass);var onMDown=this.doesMenu()&&nodes[i].n.length&&nodes[i].isDynamic?this.stringFormat('onmousedown="{0}.toggleBranch(\'{1}\', true)" style="cursor: pointer; cursor: hand"',this.myname,layerID):'';var imgTag=this.stringFormat('<img src="{0}/{1}{2}.gif" width="20" height="20" align="top" border="0" name="img_{3}" {4}>',this.iconpath,gifname,modifier,layerID,onMDown);if(nodes[i].n.length){nodes[i].link=this.stringFormat('javascript:{0}.toggleBranch(\'{1}\', true)',this.myname,layerID);}
var linkTarget=nodes[i].linkTarget?nodes[i].linkTarget:this.linkTarget;var linkStart=nodes[i].link?this.stringFormat('<a href="{0}" target="{1}">',nodes[i].link,linkTarget):'';var linkEnd=nodes[i].link?'</a>':'';this.output+=this.stringFormat('{0}<nobr>{1}{2}{3}{4}<span {5}>{6}</span>{7}</nobr><br></div>',layerTag,prepend,parentLayerID==null&&(nodes.length==1||this.noTopLevelImages)?'':imgTag,iconimg,linkStart,eventHandlers,nodes[i].title,linkEnd);if(nodes[i].n.length){if(parentLayerID==null&&(nodes.length==1||this.noTopLevelImages)){var newPrepend='';}else if(i<(nodes.length-1)){var newPrepend=prepend+this.stringFormat('<img src="{0}/line.gif" width="20" height="20" align="top">',this.iconpath);}else{var newPrepend=prepend+this.stringFormat('<img src="{0}/linebottom.gif" width="20" height="20" align="top">',this.iconpath);}
this.drawMenu(nodes[i].n,arrayCopy(level),newPrepend,nodes[i].expanded,expanded?'inline':'none',layerID);}}}
TreeMenu.prototype.writeOutput=function()
{document.write(this.output);}
TreeMenu.prototype.toggleBranch=function(layerID,updateStatus)
{var currentDisplay=this.getLayer(layerID).style.display;var newDisplay=(this.branchStatus[layerID]&&currentDisplay=='inline')?'none':'inline';var fireEvents=arguments[2]!=null?arguments[2]:true;for(var i=0;i<this.layerRelations[layerID].length;i++){if(this.branchStatus[this.layerRelations[layerID][i]]){this.toggleBranch(this.layerRelations[layerID][i],false);}
this.getLayer(this.layerRelations[layerID][i]).style.display=newDisplay;}
if(updateStatus){this.branchStatus[layerID]=!this.branchStatus[layerID];if(this.doesPersistence()&&!arguments[2]&&this.usePersistence){this.setExpandedStatusForCookie(layerID,this.branchStatus[layerID]);}
if(fireEvents){nodeObject=this.nodeRefs[layerID];if(nodeObject.ontoggle!=null){eval(nodeObject.ontoggle);}
if(newDisplay=='none'&&nodeObject.oncollapse!=null){eval(nodeObject.oncollapse);}else if(newDisplay=='inline'&&nodeObject.onexpand!=null){eval(nodeObject.onexpand);}}
this.swapImage(layerID);}
this.swapIcon(layerID);}
TreeMenu.prototype.swapImage=function(layerID)
{var imgSrc=document.images['img_'+layerID].src;var re=(/^(.*)(plus|minus)(bottom|top|single)?.gif$/)
if(matches=imgSrc.match(re)){document.images['img_'+layerID].src=this.stringFormat('{0}{1}{2}{3}',matches[1],matches[2]=='plus'?'minus':'plus',matches[3]?matches[3]:'','.gif');}}
TreeMenu.prototype.swapIcon=function(layerID)
{if(document.images['icon_'+layerID]){var imgSrc=document.images['icon_'+layerID].src;if(this.nodeRefs[layerID].icon&&this.nodeRefs[layerID].expandedIcon){var newSrc=(imgSrc.indexOf(this.nodeRefs[layerID].expandedIcon)==-1?this.nodeRefs[layerID].expandedIcon:this.nodeRefs[layerID].icon);document.images['icon_'+layerID].src=this.iconpath+'/'+newSrc;}}}
TreeMenu.prototype.doesMenu=function()
{return(is_ie4up||is_nav6up||is_gecko||is_opera7);}
TreeMenu.prototype.doesPersistence=function()
{return(is_ie4up||is_gecko||is_nav6up||is_opera7);}
TreeMenu.prototype.getLayer=function(layerID)
{if(is_ie4){return document.all(layerID);}else if(document.getElementById(layerID)){return document.getElementById(layerID);}else if(document.all(layerID)){return document.all(layerID);}}
TreeMenu.prototype.setExpandedStatusForCookie=function(layerID,expanded)
{this.cookieStatuses[layerID]=expanded;this.saveCookie();}
TreeMenu.prototype.getExpandedStatusFromCookie=function(layerID)
{if(this.cookieStatuses[layerID]){return this.cookieStatuses[layerID];}
return false;}
TreeMenu.prototype.saveCookie=function()
{var cookieString=new Array();for(var i in this.cookieStatuses){if(this.cookieStatuses[i]==true){cookieString[cookieString.length]=i;}}
document.cookie='TreeMenuBranchStatus='+cookieString.join(':');}
TreeMenu.prototype.loadCookie=function()
{var cookie=document.cookie.split('; ');for(var i=0;i<cookie.length;i++){var crumb=cookie[i].split('=');if('TreeMenuBranchStatus'==crumb[0]&&crumb[1]){var expandedBranches=crumb[1].split(':');for(var j=0;j<expandedBranches.length;j++){this.cookieStatuses[expandedBranches[j]]=true;}}}}
TreeMenu.prototype.resetBranches=function()
{if(!this.doesPersistence()){return false;}
this.loadCookie();for(var i=0;i<this.branches.length;i++){var status=this.getExpandedStatusFromCookie(this.branches[i]);if(status==true&&this.branchStatus[this.branches[i]]!=true){if(this.checkParentVisibility(this.branches[i])){this.toggleBranch(this.branches[i],true,false);}else{this.branchStatus[this.branches[i]]=true;this.swapImage(this.branches[i]);}}}}
TreeMenu.prototype.checkParentVisibility=function(layerID)
{if(this.in_array(this.childParents[layerID],this.branches)&&this.branchStatus[this.childParents[layerID]]&&this.checkParentVisibility(this.childParents[layerID])){return true;}else if(this.childParents[layerID]==null){return true;}
return false;}
TreeMenu.prototype.stringFormat=function(strInput)
{var idx=0;for(var i=1;i<arguments.length;i++){while((idx=strInput.indexOf('{'+(i-1)+'}',idx))!=-1){strInput=strInput.substring(0,idx)+arguments[i]+strInput.substr(idx+3);}}
return strInput;}
TreeMenu.prototype.implode=function(seperator,input)
{var output='';for(var i=0;i<input.length;i++){if(i==0){output+=input[i];}else{output+=seperator+input[i];}}
return output;}
TreeMenu.prototype.in_array=function(item,arr)
{for(var i=0;i<arr.length;i++){if(arr[i]==item){return true;}}
return false;}
function TreeNode(title,icon,link,expanded,isDynamic,cssClass,linkTarget,expandedIcon)
{this.title=title;this.icon=icon;this.expandedIcon=expandedIcon;this.link=link;this.expanded=expanded;this.isDynamic=isDynamic;this.cssClass=cssClass;this.linkTarget=linkTarget;this.n=new Array();this.events=new Array();this.handlers=null;this.oncollapse=null;this.onexpand=null;this.ontoggle=null;}
TreeNode.prototype.addItem=function(newNode)
{newIndex=this.n.length;this.n[newIndex]=newNode;return this.n[newIndex];}
TreeNode.prototype.setEvent=function(eventName,eventHandler)
{switch(eventName.toLowerCase()){case'onexpand':this.onexpand=eventHandler;break;case'oncollapse':this.oncollapse=eventHandler;break;case'ontoggle':this.ontoggle=eventHandler;break;default:this.events[eventName]=eventHandler;}}
var agt=navigator.userAgent.toLowerCase();var is_major=parseInt(navigator.appVersion);var is_minor=parseFloat(navigator.appVersion);var is_nav=((agt.indexOf('mozilla')!=-1)&&(agt.indexOf('spoofer')==-1)&&(agt.indexOf('compatible')==-1)&&(agt.indexOf('opera')==-1)&&(agt.indexOf('webtv')==-1)&&(agt.indexOf('hotjava')==-1));var is_nav6up=(is_nav&&(is_major>=5));var is_gecko=(agt.indexOf('gecko')!=-1);var is_ie=((agt.indexOf("msie")!=-1)&&(agt.indexOf("opera")==-1));var is_ie4=(is_ie&&(is_major==4)&&(agt.indexOf("msie 4")!=-1));var is_ie4up=(is_ie&&(is_major>=4));var is_opera=(agt.indexOf("opera")!=-1);var is_opera7=is_opera&&(agt.indexOf("opera 7")!=-1);if(agt.indexOf('konqueror')!=-1){var is_nav=false;var is_nav6up=false;var is_gecko=false;var is_ie=true;var is_ie4=true;var is_ie4up=true;}
