/*
 * 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;
      theChild = uls[z].parentNode.firstChild;
      //alert (theChild);
      menuControl(z, 'x', uls[z].parentNode.firstChild.firstChild.nodeValue, theChild);
      control = menuControl(z, 'c', uls[z].parentNode.firstChild.firstChild.nodeValue, theChild); 
      //alert (theChild);
      plist = uls[z].parentNode;
      //alert (plist.firstChild);
      // If not current section then UL should be collapsed
      if (!plist.id) {
        uls[z].style.display = 'none';
        control = menuNode[z+'x'];
	theChild.href = menuNode[z+'x'].href;
      }
      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, thechild) {
  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');
    theChild.setAttribute('href', 'javascript:menuExpand(\''+idnum+'\');');
  }
  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');
    theChild.setAttribute('href', 'javascript:menuCollapse(\''+idnum+'\');');
  }
  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';
 //alert(ul.parentNode.childNodes[1].href);
 ul.parentNode.childNodes[1].href = menuNode[ulid+'x'].href;
 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']);
		cursubsecUl.parentNode.childNodes[1].href = menuNode[ulid+'c'].href;
	}
   }
  }
 }
 ul.style.display = 'block';
 ul.parentNode.replaceChild(menuNode[ulid+'c'], menuNode[ulid+'x']);
 ul.parentNode.childNodes[1].href = menuNode[ulid+'c'].href;
}

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";
  }
}
