/* Sitewide functions */

function emailhammer(name, domain, brackets, text) {
	if(brackets) {
		document.write('&lt;');
	}
	document.write('<a href=\"mail' + 'to:' + name + '@' + domain + '\">');
	if(!text) {
		document.write(name + '@' + domain);
	} else {
		document.write(text);
	}
	document.write('</a>');
	if(brackets) {
		document.write('&gt;');
	}
}

/*
FREESTYLE MENUS v1.0 RC (c) 2001-2006 Angus Turnbull, http://www.twinhelix.com
Altering this notice or redistributing this file is prohibited.
*/
var isDOM=document.getElementById?1:0,
isIE=document.all?1:0,
isNS4=navigator.appName=='Netscape'&&!isDOM?1:0,
isOp=self.opera?1:0,
isDyn=isDOM||isIE||isNS4;
function getRef(i, p)
{
p=!p?document:p.navigator?p.document:p;
return isDOM ? (p.getElementById?p:p.ownerDocument).getElementById(i) :
isIE ? p.all[i] :
isNS4 ? p.layers[i] : null;
};
function getSty(i, p)
{
var r=getRef(i, p);
return r?isNS4?r:r.style:null;
};
if (!self.LayerObj) var LayerObj = new Function('i', 'p',
'this.ref=getRef(i, p); this.sty=getSty(i, p); return this');
function getLyr(i, p) { return new LayerObj(i, p) };
function LyrFn(n, f)
{
LayerObj.prototype[n] = new Function('var a=arguments,p=a[0],px=isNS4||isOp?0:"px"; ' +
'with (this) { '+f+' }');
};
LyrFn('x','if (!isNaN(p)) sty.left=p+px; else return parseInt(sty.left)');
LyrFn('y','if (!isNaN(p)) sty.top=p+px; else return parseInt(sty.top)');
function addEvent(obj, evType, fn){ 
if (obj.addEventListener){ 
obj.addEventListener(evType, fn, false); 
return true; 
} else if (obj.attachEvent){ 
var r = obj.attachEvent("on"+evType, fn); 
return r; 
} else { 
return false; 
} 
}
function FSMenu(myName, nested, cssProp, cssVis, cssHid)
{
this.myName = myName;
this.nested = nested;
this.cssProp = cssProp;
this.cssVis = cssVis;
this.cssHid = cssHid;
this.cssLitClass = '';
this.menus = { root: new FSMenuNode('root', true, this) };
this.menuToShow = [];
this.mtsTimer = null;
this.showDelay = 0;
this.switchDelay = 125;
this.hideDelay = 500;
this.showOnClick = 0;
this.hideOnClick = true;
this.animInSpeed = 0.2;
this.animOutSpeed = 0.2;
this.animations = [];
};
FSMenu.prototype.show = function(mN) { with (this)
{
menuToShow.length = arguments.length;
for (var i = 0; i < arguments.length; i++) menuToShow[i] = arguments[i];
clearTimeout(mtsTimer);
if (!nested) mtsTimer = setTimeout(myName + '.menus.root.over()', 10);
}};
FSMenu.prototype.hide = function(mN) { with (this)
{
clearTimeout(mtsTimer);
if (menus[mN]) menus[mN].out();
}};
FSMenu.prototype.hideAll = function() { with (this)
{
for (var m in menus)
if (menus[m].visible && !menus[m].isRoot) menus[m].hide(true);
}};
function FSMenuNode(id, isRoot, obj)
{
this.id = id;
this.isRoot = isRoot;
this.obj = obj;
this.lyr = this.child = this.par = this.timer = this.visible = null;
this.args = [];
var node = this;
this.over = function(evt) { with (node) with (obj)
{
if (isNS4 && evt && lyr.ref) lyr.ref.routeEvent(evt);
clearTimeout(timer);
clearTimeout(mtsTimer);
if (!isRoot && !visible) node.show();
if (menuToShow.length)
{
var a = menuToShow, m = a[0];
if (!menus[m] || !menus[m].lyr.ref) menus[m] = new FSMenuNode(m, false, obj);
var c = menus[m];
if (c == node)
{
menuToShow.length = 0;
return;
}
clearTimeout(c.timer);
if (c != child && c.lyr.ref)
{
c.args.length = a.length;
for (var i = 0; i < a.length; i++) c.args[i] = a[i];
var delay = child ? switchDelay : showDelay;
c.timer = setTimeout('with(' + myName + ') { menus["' + c.id + '"].par = menus["' +
node.id + '"]; menus["' + c.id + '"].show() }', delay ? delay : 1);
}
menuToShow.length = 0;
}
if (!nested && par) par.over();
}};
this.out = function(evt) { with (node) with (obj)
{
if (isNS4 && evt && lyr && lyr.ref) lyr.ref.routeEvent(evt);
clearTimeout(timer);
if (!isRoot)
{
timer = setTimeout(myName + '.menus["' + id + '"].hide()', hideDelay);
if (!nested && par) par.out();
}
}};
if (this.id != 'root') with (this) with (lyr = getLyr(id)) if (ref)
{
if (isNS4) ref.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
addEvent(ref, 'mouseover', this.over);
addEvent(ref, 'mouseout', this.out);
if (obj.nested)
{
addEvent(ref, 'focus', this.over);
addEvent(ref, 'click', this.over);
addEvent(ref, 'blur', this.out);
}
}
};
FSMenuNode.prototype.show = function(forced) { with (this) with (obj)
{
if (!lyr || !lyr.ref) return;
if (par)
{
if (par.child && par.child != this) par.child.hide();
par.child = this;
}
var offR = args[1], offX = args[2], offY = args[3], lX = 0, lY = 0,
doX = ''+offX!='undefined', doY = ''+offY!='undefined';
if (self.page && offR && (doX||doY))
{
with (page.elmPos(offR, par.lyr ? par.lyr.ref : 0)) lX = x, lY = y;
if (doX) lyr.x(lX + eval(offX));
if (doY) lyr.y(lY + eval(offY));
}
if (offR) lightParent(offR, 1);
visible = 1;
if (obj.onshow) obj.onshow(id);
lyr.ref.parentNode.style.zIndex = '100';
setVis(1, forced);
}};
FSMenuNode.prototype.hide = function(forced) { with (this) with (obj)
{
if (!lyr || !lyr.ref || !visible) return;
if (isNS4 && self.isMouseIn && isMouseIn(lyr.ref)) return show();
if (args[1]) lightParent(args[1], 0);
if (child) child.hide();
if (par && par.child == this) par.child = null;
if (lyr)
{
visible = 0;
if (obj.onhide) obj.onhide(id);
lyr.ref.parentNode.style.zIndex = '1';
setVis(0, forced);
}
}};
FSMenuNode.prototype.lightParent = function(elm, lit) { with (this) with (obj)
{
if (!cssLitClass || isNS4) return;
if (lit) elm.className += (elm.className?' ':'') + cssLitClass;
else elm.className = elm.className.replace(new RegExp('(\\s*' + cssLitClass + ')+$'), '');
}};
FSMenuNode.prototype.setVis = function(sh, forced) { with (this) with (obj)
{
if (lyr.forced && !forced) return;
lyr.forced = forced;
lyr.timer = lyr.timer || 0;
lyr.counter = lyr.counter || 0;
with (lyr)
{
clearTimeout(timer);
if (sh && !counter) sty[cssProp] = cssVis;
var speed = sh ? animInSpeed : animOutSpeed;
if (isDOM && speed < 1)
for (var a = 0; a < animations.length; a++) animations[a](ref, counter, sh);
counter += speed*(sh?1:-1);
if (counter>1) { counter = 1; lyr.forced = false }
else if (counter<0) { counter = 0; sty[cssProp] = cssHid; lyr.forced = false }
else if (isDOM) { timer = setTimeout(myName + '.menus["' + id + '"].setVis(' +
sh + ',' + forced + ')', 50) }
}
}};
FSMenu.animFade = function(ref, counter, show)
{
var f = ref.filters, done = (counter == 1);
if (f)
{
ref.style.filter = 'alpha(opacity=' + (counter * 100) + ')';
}
else
{
ref.style.opacity = ref.style.MozOpacity = counter / 1.001;
}
};
FSMenu.prototype.activateMenu = function(id, subInd) { with (this)
{
if (!isDOM || !document.documentElement) return;
var fsmFB = getRef('fsmenu-fallback');
if (fsmFB)
{
fsmFB.rel = 'alternate stylesheet';
fsmFB.disabled = true;
}
var a, ul, li, parUL, mRoot = getRef(id), nodes, count = 1;
var lists = mRoot.getElementsByTagName('ul');
for (var i = 0; i < lists.length; i++)
{
li = ul = lists[i];
while (li)
{
if (li.nodeName.toLowerCase() == 'li') break;
li = li.parentNode;
}
if (!li) continue;
parUL = li;
while (parUL)
{
if (parUL.nodeName.toLowerCase() == 'ul') break;
parUL = parUL.parentNode;
}
a = null;
for (var j = 0; j < li.childNodes.length; j++)
if (li.childNodes[j].nodeName.toLowerCase() == 'a') a = li.childNodes[j];
if (!a) continue;
var menuID = myName + '-id-' + count++;
if (ul.id) menuID = ul.id;
else ul.setAttribute('id', menuID);
var sOC = (showOnClick == 1 && li.parentNode == mRoot) || (showOnClick == 2);
var evtProp = navigator.userAgent.indexOf('Safari') > -1 || isOp ?
'safRtnVal' : 'returnValue';
var eShow = new Function('with (' + myName + ') { ' +
'var m = menus["'+menuID+'"], pM = menus["' + parUL.id + '"];' +
(sOC ? 'if ((pM && pM.child) || (m && m.visible))' : '') +
' show("' + menuID + '", this) }');
var eHide = new Function('e', 'if (e.' + evtProp + ' != false) ' +
myName + '.hide("' + menuID + '")');
addEvent(a, 'mouseover', eShow);
addEvent(a, 'focus', eShow);
addEvent(a, 'mouseout', eHide);
addEvent(a, 'blur', eHide);
if (sOC) addEvent(a, 'click', new Function('e', myName + '.show("' + menuID +
'", this); if (e.cancelable && e.preventDefault) e.preventDefault(); ' +
'e.' + evtProp + ' = false; return false'));
if (subInd) a.insertBefore(subInd.cloneNode(true), a.firstChild);
}
if (isIE && !isOp)
{
var aNodes = mRoot.getElementsByTagName('a');
for (var i = 0; i < aNodes.length; i++)
{
addEvent(aNodes[i], 'focus', new Function('e', 'var node = this.parentNode; while(node) { ' +
'if (node.onfocus) node.onfocus(e); node = node.parentNode }'));
addEvent(aNodes[i], 'blur', new Function('e', 'var node = this.parentNode; while(node) { ' +
'if (node.onblur) node.onblur(e); node = node.parentNode }'));
}
}
if (hideOnClick) addEvent(mRoot, 'click', new Function(myName + '.hideAll()')); 
menus[id] = new FSMenuNode(id, true, this);
}};
