<!--
	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 fsmAddEvent != 'function') {
		var fsmAddEvent = 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') fsmAddEvent(window, 'unload', function () {removeEvent(rO, rT, rF, rL)})
			}
			
			if (!f._i) f._i = fsmAddEvent._i++; 
			o._evts[t][f._i] = f
		};
		
		fsmAddEvent._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 = ''; 
		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); fsmAddEvent(ref,'mouseover', this.over); fsmAddEvent(ref, 'mouseout', this.out); if (obj.nested) { fsmAddEvent(ref, 'focus', this.over); fsmAddEvent(ref, 'click', this.over); fsmAddEvent(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_styMT = ref.style.marginTop; 
			ref._fsm_curMT = parseInt(ref.currentStyle ? ref.currentStyle.marginTop : (document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(ref, null).getPropertyValue('marginTop') : 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)) { 
			if (ref._fsm_styMT) ref.style.marginTop = ref._fsm_styMT; else if (ref.style.removeProperty) ref.style.removeProperty('margin-top', true); else if(ref.style.cssText) ref.style.cssText = ref.style.cssText.replace(/MARGIN-TOP:[^;]*;\s*/i,'') } else ref.style.marginTop = ((0 - clipY) + (ref._fsm_curMT || 0)) + 'px'
	}; 
	
	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 + '")'); 
				fsmAddEvent(a, 'mouseover', eShow); 
				fsmAddEvent(a, 'focus', eShow); 
				fsmAddEvent(a, 'mouseout', eHide); 
				fsmAddEvent(a, 'blur', eHide); 
				if (sOC) fsmAddEvent(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++) { 
					fsmAddEvent(aNodes[i], 'focus', new Function('e','var node = this.parentNode; while(node) { if(node.onfocus) node.onfocus(e); node = node.parentNode}')); 
					fsmAddEvent(aNodes[i], 'blur', new Function('e','var node = this.parentNode; while(node) { if (node.onblur) node.onblur(e); node=node.parentNode}')) 
				} 
			} 
			
			if (hideOnClick) fsmAddEvent(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)) 
		}
	}
//-->