
function initHelpers() {
	if (!document.getElementsByTagName || !document.getElementById) return;
	// Attach menu events
	var menuitems = $('menu').getElementsByTagName('a');
	explainTexts = new Array(menuitems.length);
	for (var i=0; i<menuitems.length; i++) {
		if (menuitems[i].getAttribute('title')) {	
			addEvent(menuitems[i], 'mouseover', explainShow, true);  
			addEvent(menuitems[i], 'mouseout', explainHide, true);
			explainTexts[i] = menuitems[i].getAttribute('title');
			menuitems[i].removeAttribute('title');
		}
	}
	
	// Hunt down popup links
	var as, popfun;
	as=document.getElementsByTagName('a');
	for (var i=0; i<as.length; i++) {
		if(as[i].target && as[i].target=='popup') {			
			var width = as[i].getAttribute('popwidth') ? as[i].getAttribute('popwidth') : 500;
			var height = as[i].getAttribute('popheight') ? as[i].getAttribute('popheight') : 350;
			var left = (screen.width - width) / 3;
			var top = (screen.height - height) / 3;
			var windowAttributes = 'width='+width+',height='+height+',left='+left+',top='+top+',scrollbars=yes,location=no,toolbar=no, resizable=yes';
			
			popfun=function(){
				var theWindow = window.open(this.href,this.target,windowAttributes);
				theWindow.focus();
				return false;
			}			
			as[i].onclick=popfun;
		}
	}
}

function explainShow(e) {
	var targ = getTarget(e);
	var menuitems = $('menu').getElementsByTagName('a');
	for (var i=0; i<menuitems.length; i++) {
		if (menuitems[i] == targ) {	
			$('explain').appendChild(document.createTextNode(explainTexts[i]));
			$('explain').className = 'explain' + (i+1);
		}
	}
}

function explainHide(e) {
	$('explain').removeChild($('explain').firstChild);
	$('explain').className = '';
}

var explainTexts;
addEvent(window, 'load', initHelpers, true);  



// Utility functions - mostly pinched from elsewhere // 
   
function addEvent(elm, evType, fn, useCapture) {
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent('on'+evType, fn);
    return r;
  }
} 

function getTarget(e) {
  var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
  return targ;
}

function $() {
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}

document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();
  
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }  
  return elements;
}