/* * University of Melbourne: Expanding menu and breadcrumbs script * * Copyright 2002-2004 Web Centre, University of Melbourne * * Authors: Stephen Davies <sdavies@unimelb.edu.au> *          Iain Pople <i.pople@unimelb.edu.au> * * University Web Centre, The University of Melbourne * For more information contact web-info@webcentre.unimelb.edu.au * * See the enclosed file COPYING for license information (GPL).  If you * did not receive this file, see http://www.fsf.org/copyleft/gpl.html. */// Define some global variablesmenuId = 'topmenu';var menuNode = [];// This variable prevents double running IE Mac after pressing backvar menuSetState = false;var browserName=navigator.appName;function menuSet() {if (!menuSetState) {	  menuSetState = true;  // Is browser DOM compliant?  if (document.getElementById && document.createElement) {	// Is there a valid menu in the document?	if (! document.getElementById(menuId)) {		return;	}    var lis = document.getElementById(menuId).getElementsByTagName('li');    var uls = document.getElementById(menuId).getElementsByTagName('ul');    var ans = document.getElementById(menuId).getElementsByTagName('a');    var fpath = (document.location.pathname);	var fpathIE = document.location.protocol+'//'+document.location.hostname+document.location.pathname;	if (document.getElementById("cursection")!=null) {		var sectionpath = document.getElementById("cursection").firstChild.nodeValue;	}	else {		var sectionpath = null;	}    var b, ref, cur, k, q, z, plist, control;	var menuHeader = "Home";	var pageHeader = "";	var headerColor = "#16976E";	var headerTextColor = "#fff";	if (! window.menuParent) {		 menuParent = null;	}        // Identify the current page and highlight it appropriately.    for (b=0; b<ans.length; b++) {      ref = ans[b].getAttribute('href',2);	  myref = ans[b].getAttribute('href',2);      cur = ans[b];	  reflen = ref.length;	  if (sectionpath!=null && reflen >= sectionpath.length) {		  compareref = ref;	  }	  else {		  compareref = "";	  }	  if ((ref == fpath.substr(fpath.length-reflen,reflen)		   || ref.replace(/\\/g,"/") == fpathIE.replace(/\\/g,"/")		   || ref == menuParent		   || compareref == sectionpath		   || ref == (document.location.protocol+'//'+document.location.hostname+menuParent) )		   && cur.className != 'duplicate') {        cur.className = ('current');        // Current is Level 1 menu Item        if (cur.parentNode.parentNode.id == menuId) {          cur.parentNode.id = "cursec";		  subTree = cur.parentNode;		  headerColor = getHeaderColor(subTree);		  headerTextColor = getHeaderTextColor(subTree);		  //menuHeader = getModuleHeader(subTree.className);        }        // Current is Level 2 menu item        else if (cur.parentNode.parentNode.parentNode.parentNode.id == menuId) {          cur.parentNode.parentNode.parentNode.id = "cursec";          cur.parentNode.id = "cursubsec";		  subTree = cur.parentNode.parentNode.parentNode;		  headerColor = getHeaderColor(subTree);		  headerTextColor = getHeaderTextColor(subTree);		  //menuHeader = getModuleHeader(subTree.className);        }            // Current is Level 3 menu item        else {          cur.parentNode.parentNode.parentNode.parentNode.parentNode.id = "cursec";          cur.parentNode.parentNode.parentNode.id = "cursubsec";		  subTree = cur.parentNode.parentNode.parentNode.parentNode.parentNode;		  headerColor = getHeaderColor(subTree);		  headerTextColor = getHeaderTextColor(subTree);		  //menuHeader = getModuleHeader(subTree.className);        }		break;      }    }    // menuhead script    if (document.getElementById('menuhead')) {		var mhdiv = document.getElementById('menuhead');		mhnewnode = document.createTextNode(menuHeader);		mholdnode = mhdiv.firstChild;		mhdiv.replaceChild(mhnewnode, mholdnode);		mhdiv.style.backgroundColor = headerColor;		mhdiv.style.color = headerTextColor;	}	if (document.getElementById('menuheadcolor')) {		var mhdiv = document.getElementById('menuheadcolor');		mhnewnode = document.createAttribute('bgColor');		mhnewnode.nodeValue = headerColor;		mhdiv.setAttributeNode(mhnewnode);	}		// pagenum script    if (document.getElementById('pagenum')) {		var pgdiv = document.getElementById('pagenum');//		pgnewnode = document.createTextNode(pageHeader);//		pgoldnode = pgdiv.firstChild;//		pgdiv.replaceChild(pgnewnode, pgoldnode);		pgdiv.style.backgroundColor = headerColor;		pgdiv.style.color = headerTextColor;	}    if (document.getElementById('pagenum')) {		var pgdiv = document.getElementById('pagenum');		pgnewnode = document.createAttribute('bgColor');		pgnewnode.nodeValue = headerColor;		pgdiv.setAttributeNode(pgnewnode);	}	    // breadcrumb script    if (document.getElementById('breadcrumbs')) {      var bcdiv = document.getElementById('breadcrumbs')      var delimiter = ' > ';      var bchref, bclink, delim, crumb;      for (var f = 0; f < lis.length; f++) {        if (lis[f].id || lis[f].getElementsByTagName('a')[0].className == 'current') {          delim = document.createTextNode(delimiter);          bcdiv.appendChild(delim);          if (lis[f].getElementsByTagName('a')[0].className == 'current') {            bclink = lis[f].getElementsByTagName('a')[0].firstChild.nodeValue;            crumb = document.createTextNode(bclink);            bcdiv.appendChild(crumb);          }          else {            a = document.createElement('a');            bchref = lis[f].getElementsByTagName('a')[0].getAttribute('href');            a.setAttribute('href', bchref);             bclink = lis[f].getElementsByTagName('a')[0].firstChild.nodeValue;            crumb = document.createTextNode(bclink);            a.appendChild(crumb);            bcdiv.appendChild(a);          }        }      }    }     // Add bullet image for LIs with no children    for (k = 0; k < lis.length; k++) {      if (lis[k].getElementsByTagName('ul').length < 1) {                q = document.createElement('img');        q.setAttribute('src', imageDir+'dot.gif');        q.setAttribute('style','display: inline');        q.setAttribute('height', '8');        q.setAttribute('width', '10');        q.setAttribute('alt', '');        q.setAttribute('border', '0');        lis[k].insertBefore(q, lis[k].firstChild);      }    }        for (z = 0; z < uls.length; z++) {          uls[z].id = z;      menuControl(z, 'x', uls[z].parentNode.firstChild.firstChild.nodeValue);      control = menuControl(z, 'c', uls[z].parentNode.firstChild.firstChild.nodeValue);       plist = uls[z].parentNode;            // If not current section then UL should be collapsed      if (!plist.id) {        uls[z].style.display = 'none';        control = menuNode[z+'x'];      }      plist.insertBefore(control, plist.firstChild);    }  }}}function convHex(rgb_str){	if(rgb_str.indexOf(",")!=-1){		var rgb_arr=rgb_str.substr(4).split(",");		var rgb_arr_ln=rgb_arr.length;		var rgb_arr_hex="";		for(var i=0;i<rgb_arr_ln;i++){			rgb_arr[i]=parseInt(rgb_arr[i])			rgb_arr[i]=rgb_arr[i].toString(16);			if(rgb_arr[i].length<2)rgb_arr[i]="0"+rgb_arr[i];			rgb_arr_hex+=rgb_arr[i];			}		return ('#'+rgb_arr_hex);	}}function getHeaderColor(theElement){	if (browserName == "Netscape") {		for (i=0; i<document.styleSheets[0].cssRules.length; i++) {			if (document.styleSheets[0].cssRules[i].selectorText == "."+theElement.className) {				if (navigator.appVersion.indexOf("Mac") > 0) {					return document.styleSheets[0].cssRules[i].style.backgroundColor;				}				else {					return convHex(document.styleSheets[0].cssRules[i].style.backgroundColor);				}			}		}	}	else if (browserName == "Microsoft Internet Explorer") {		return theElement.currentStyle.backgroundColor;	} }function getHeaderTextColor(theElement){	if (browserName == "Netscape") {		for (i=0; i<document.styleSheets[0].cssRules.length; i++) {			if (document.styleSheets[0].cssRules[i].selectorText == "."+theElement.className) {				if (convHex(document.styleSheets[0].cssRules[i].style.color)=="#000") {					return "#000";				}				else {					return "#fff";				}			}		}	}	else if (browserName == "Microsoft Internet Explorer") {		if (theElement.currentStyle.color == "black") {			return "#000";		}		else {			return "#fff";		}	}}function getModuleHeader(theClassname){	var inc=0	var alltags=document.all? document.all : document.getElementsByTagName("*")	for (i=0; i<alltags.length; i++){		if (alltags[i].className==theClassname) {			return (alltags[i].getElementsByTagName('a')[0].firstChild.nodeValue);		}	}}function menuControl(idnum, xorc, titl) {  var i = document.createElement('img');  var a = document.createElement('a');    if (xorc == 'x') {    i.setAttribute('src', imageDir+'plus.gif');    i.setAttribute('alt', 'expand '+titl+' menu');    a.setAttribute('href', 'javascript:menuExpand(\''+idnum+'\');');    a.setAttribute('title', 'expand '+titl+' menu');  }  else {    i.setAttribute('src', imageDir+'minus.gif');    i.setAttribute('alt', 'collapse '+titl+' menu');    a.setAttribute('href', 'javascript:menuCollapse(\''+idnum+'\');');    a.setAttribute('title', 'collapse '+titl+' menu');  }  i.setAttribute('height', '8');  i.setAttribute('width', '10');  i.setAttribute('style','display: inline');  i.setAttribute('border', '0');  a.appendChild(i);  return menuNode[idnum+xorc] = a;}function menuCollapse(ulid) { var tempsubsec; var ul = document.getElementById(ulid); ul.style.display = 'none'; ul.parentNode.replaceChild(menuNode[ulid+'x'], menuNode[ulid+'c']); // Remove tempsec ID now that UL has been closed if (ul.parentNode.id == 'tempsec' || ul.parentNode.id == 'tempsubsec') {  // For IE Mac  ul.parentNode.id = '';  // Other Browsers  ul.parentNode.removeAttribute('id'); }}function menuExpand(ulid) { var oldtempsec, cursec, cursubsec, cursecUl, cursubsecUl; var ul = document.getElementById(ulid); // Highlight open section // Level 2 if (ul.parentNode.parentNode.parentNode.parentNode.id == menuId) {  // Close open Sub Section  if (oldtempsubsec = document.getElementById('tempsubsec')) {   menuCollapse(oldtempsubsec.getElementsByTagName('ul')[0].id);     }  // Close current subsection if open  if (cursubsec = document.getElementById('cursubsec')) {   if (cursubsecUl = cursubsec.getElementsByTagName('ul')[0]) {	   if (cursubsecUl.style.display != 'none') {		menuCollapse(cursubsecUl.id);		}   	}  }  // Dont set id if in current section  if (ul.parentNode.parentNode.parentNode.id != 'cursec') {   ul.parentNode.parentNode.parentNode.id = 'tempsec';  }  if (ul.parentNode.id != 'cursubsec') {   ul.parentNode.id = 'tempsubsec';  } } // Level 1 else if (ul.parentNode.parentNode.id == menuId) {  // Close previous open section  if (oldtempsec = document.getElementById('tempsec')) {   // Is UL part of an open section?   if (ul.parentNode.parentNode.parentNode.id != 'tempsec') {    menuCollapse(oldtempsec.getElementsByTagName('ul')[0].id);   }  }  // Close current section if open  if (cursec = document.getElementById('cursec')) {   if (cursecUl = cursec.getElementsByTagName('ul')[0]) {	   if (cursecUl.style.display != 'none') {		menuCollapse(cursecUl.id);	   }   }   // Close current subsection if open   if (cursubsec = document.getElementById('cursubsec')) {	   if (cursubsecUl = cursubsec.getElementsByTagName('ul')[0]) {		   if (cursubsecUl.style.display != 'none') {			menuCollapse(cursubsecUl.id);			}   		}	}  }  // Close sub section too  if (oldtempsubsec = document.getElementById('tempsubsec')) {   oldtempsubsecUl = oldtempsubsec.getElementsByTagName('ul')[0];   if (oldtempsubsecUl.style.display != 'none') {    menuCollapse(oldtempsubsecUl.id);   }  }   // dont set id if it is in Current Section  if (ul.parentNode.id != 'cursec') {   ul.parentNode.id = 'tempsec';  }   // ***  else {   if (cursubsec = document.getElementById('cursubsec')) {    if (cursubsecUl = cursubsec.getElementsByTagName('ul')[0]) {		// menuExpand(cursubsecUl.id);		cursubsecUl.style.display = 'block';		cursubsecUl.parentNode.replaceChild(menuNode[cursubsecUl.id+'c'], menuNode[cursubsecUl.id+'x']);	}   }  } } ul.style.display = 'block'; ul.parentNode.replaceChild(menuNode[ulid+'c'], menuNode[ulid+'x']);}function makevisible() {  // Is browser DOM compliant?  if (document.getElementById && document.createElement) {	// Is there a valid menu in the document?	if (! document.getElementById(menuId)) {		return;	}	document.getElementById("answerlayer").style.visibility = "visible";  }}