
/*******************************************************************************
	utils
*******************************************************************************/

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g, '');
}

function coalesce() {
	for(var i = 0; i < arguments.length; i++) {
		if(arguments[i] != null)
			return arguments[i];
	}
	return null;
}

function attachEvent(elm, evt, f) {
	var bound_f = function() {
		f(elm);
	}
	if(elm.addEventListener)
		elm.addEventListener(evt, bound_f, false);
	else if(elm.attachEvent) {
		elm.attachEvent('on' + evt, bound_f);
	}

	// stop leaks
	var chain_unload = window.onunload;
	var detach_f = function() {
		if(elm.removeEventListener)
			elm.removeEventListener(evt, bound_f, false);
		else if(elm.detachEvent) {
			elm.detachEvent('on' + evt, bound_f);
		}
		if(chain_unload)
			chain_unload();
	}
	window.onunload = detach_f;
}

function removeClass(cs, c) {
	return (' ' + cs + ' ').replace(' ' + c + ' ', '').trim();
}

function addClass(cs, c) {
	return (removeClass(cs, c) + ' ' + c).trim();
}
	
function findFirstChildByTagName(elm, tagName) {
	for(var child = elm.firstChild; child; child = child.nextSibling) {
		if(child.tagName == tagName)
			return child;
	}
	return null;
}

function findFirstParentByTagName(elm, tagName, className_StopAt) {
	for(var parent = elm.parentNode; parent && parent.className.indexOf(className_StopAt) == -1; parent = parent.parentNode) {
		if(parent.tagName == tagName)
			return parent;
	}
	return null;
}

/*******************************************************************************
	initialise all the menu's event handlers
*******************************************************************************/

function ausify() {
	var divs = document.getElementsByTagName('DIV');
	for(var i = 0; i < divs.length; i++) {
		var div = divs[i];
		if(div.className.indexOf('ausmenu') == 0) {
			var lis = div.getElementsByTagName('LI');
			for(var j = 0; j < lis.length; j++) {
				var li = lis[j];
				attachEvent(li, 'mouseover', ausOver);
				attachEvent(li, 'mouseout', ausOut);
				if(findFirstChildByTagName(li, 'UL')) {
					var p = findFirstChildByTagName(li, 'P');
					if(p) {
						var a = findFirstChildByTagName(p, 'A');
						if(a)
							a.className = addClass(a.className, 'has_children');
					}
				}
			}
		}
	}
}

/*******************************************************************************
	event handlers to show, hide and style menu items
*******************************************************************************/

function ausSet(elm, P_addNotRemove, P_className, UL_display) {
	var li = findFirstParentByTagName(elm, 'LI', 'ausmenu');
	if(li) {
		var p = findFirstChildByTagName(li, 'P');
		if(p)
			p.className = (P_addNotRemove ? addClass : removeClass)(p.className, P_className);
	}
	var ul = findFirstChildByTagName(elm, 'UL');
	if(ul)
		ul.style.display = UL_display;
}
function ausOver(elm) {
	ausSet(elm, true, 'hover', 'block');
}
function ausOut(elm) {
	ausSet(elm, false, 'hover', 'none');
}





function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}