
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 isIE ? p.all[i] : isDOM ? (p.getElementById ? p : p.ownerDocument).getElementById(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)");
if (typeof addEvent != "function") {
		var addEvent = function (o, t, f, l) {var d = "addEventListener", n = "on" + t, rO = o, rT = t, rF = f, rL = l;if (o[d] && !l) {return o[d](t, f, false);}if (!o._evts) {o._evts = {};}if (!o._evts[t]) {o._evts[t] = o[n] ? {b:o[n]} : {};o[n] = new Function("e", "var r=true,o=this,a=o._evts[\"" + t + "\"],i;for(i in a){o._f=a[i];r=o._f(e||window.event)!=false&&r;o._f=null}return r");if (t != "unload") {addEvent(window, "unload", function () {removeEvent(rO, rT, rF, rL);});}}if (!f._i) {f._i = addEvent._i++;}o._evts[t][f._i] = f;};
		addEvent._i = 1;
		var removeEvent = function (o, t, f, l) {var d = "removeEventListener";if (o[d] && !l) {return o[d](t, f, false);}if (o._evts && o._evts[t] && f._i) {delete o._evts[t][f._i];}
};
}

function FSMenu(myName, nested, cssProp, cssVis, cssHid) 
{
		this.myName = myName;
		this.nested = nested;
		this.cssProp = cssProp;
		this.cssVis = cssVis;
		this.cssHid = cssHid;
		this.cssLitClass = "highlighted";
		this.menus = {root:new FSMenuNode("root", true, this)};
		this.menuToShow = [];
		this.mtsTimer = null;
		this.showDelay = 0;
		this.switchDelay = 0;
		this.hideDelay = 250;
		this.showOnClick = 0;
		this.hideOnClick = true;
		this.animInSpeed = 1;
		this.animOutSpeed = 1;
		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 && hideDelay >= 0) {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 = "2";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.animSwipeDown = function (ref, counter, show) {if (show && counter == 0) {ref._fsm_styT = ref.style.top;ref._fsm_styMT = ref.style.marginTop;ref._fsm_offT = ref.offsetTop || 0;}var cP = Math.pow(Math.sin(Math.PI * counter / 2), 0.75);var clipY = ref.offsetHeight * (1 - cP);ref.style.clip = counter == 1 ? window.opera || navigator.userAgent.indexOf("KHTML") > -1 ? "" : "rect(auto,auto,auto,auto)" : "rect(" + clipY + "px," + ref.offsetWidth + "px," + ref.offsetHeight + "px,0)";if (counter == 1 || counter < 0.01 && !show) {ref.style.top = ref._fsm_styT;ref.style.marginTop = ref._fsm_styMT;} else {ref.style.top = 0 - clipY + ref._fsm_offT + "px";ref.style.marginTop = "0";}
};

FSMenu.animFade = function (ref, counter, show) {var done = counter == 1;if (ref.filters) {var alpha = !done ? " alpha(opacity=" + parseInt(counter * 100) + ")" : "";if (ref.style.filter.indexOf("alpha") == -1) {ref.style.filter += alpha;} else {ref.style.filter = ref.style.filter.replace(/\s*alpha\([^\)]*\)/i, alpha);}} else {ref.style.opacity = ref.style.MozOpacity = counter / 1.001;}
};

FSMenu.animClipDown = function (ref, counter, show) {var cP = Math.pow(Math.sin(Math.PI * counter / 2), 0.75);ref.style.clip = counter == 1 ? window.opera || navigator.userAgent.indexOf("KHTML") > -1 ? "" : "rect(auto,auto,auto,auto)" : "rect(0," + ref.offsetWidth + "px," + ref.offsetHeight * cP + "px,0)";};

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);}
};

var page = {win:self, minW:0, minH:0, MS:isIE && !isOp, db:document.compatMode && document.compatMode.indexOf("CSS") > -1 ? "documentElement" : "body"};
page.elmPos = function (e, p) {var x = 0, y = 0, w = p ? p : this.win;e = e ? e.substr ? isNS4 ? w.document.anchors[e] : getRef(e, w) : e : p;if (isNS4) {if (e && e != p) {x = e.x;y = e.y;}if (p) {x += p.pageX;y += p.pageY;}}if (e && this.MS && navigator.platform.indexOf("Mac") > -1 && e.tagName == "A") {e.onfocus = new Function("with(event){self.tmpX=clientX-offsetX;self.tmpY=clientY-offsetY}");e.focus();x = tmpX;y = tmpY;e.blur();} else {while (e) {x += e.offsetLeft;y += e.offsetTop;e = e.offsetParent;}}return {x:x, y:y};};
if (isNS4) {
		var fsmMouseX, fsmMouseY, fsmOR = self.onresize, nsWinW = innerWidth, nsWinH = innerHeight;
		document.fsmMM = document.onmousemove;
		self.onresize = function () {if (fsmOR) {fsmOR();}if (nsWinW != innerWidth || nsWinH != innerHeight) {location.reload();}
};
		document.captureEvents(Event.MOUSEMOVE);
		document.onmousemove = function (e) {fsmMouseX = e.pageX;fsmMouseY = e.pageY;return document.fsmMM ? document.fsmMM(e) : document.routeEvent(e);};

		function isMouseIn(sty) {
				with (sty) {
						return fsmMouseX > left &&
								fsmMouseX < left + clip.width &&
								fsmMouseY > top && fsmMouseY < top + clip.height;
				}
		}
}

