
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)');
var aeOL = []; 
function addEvent(o, n, f, l) {
var a = 'addEventListener', h = 'on' + n, b = '', s = '';
if (o[a] && !l) return o[a](n, f, false); 
o._c |= 0;
if (o[h]) {
    b = '_f' + o._c++;
    o[b] = o[h]
} 
s = '_f' + o._c++; 
o[s] = f; 
    o[h] = function(e) {e = e || window.event;var r = true;if (b) r = o[b](e) != false && r; r = o[s](e) != false && r; return r };
    aeOL[aeOL.length] = { o: o, h: h}
};
addEvent(window, 'unload', function() {for (var i = 0; i < aeOL.length; i++) with (aeOL[i]) {o[h] = null;for (var c = 0; o['_f' + c]; c++) o['_f' + c] = null}});
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.animations = [];
    this.animSpeed = 100;
    if (isIE && !isOp) addEvent(window, 'unload', new Function(myName + '=null'))
};
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() } };
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() {
    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); setVis(1)
    } 
};
FSMenuNode.prototype.hide = function() {
    with (this) with (obj) {
    if (!lyr || !lyr.ref) 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); setVis(0) } 
    } 
};
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) {
    with (this) with (obj) {
        lyr.timer |= 0; lyr.counter |= 0; with (lyr) {
            clearTimeout(timer);
            if (sh && !counter) sty[cssProp] = cssVis;
            if (isDOM && animSpeed < 100) for (var a = 0; 
            a < animations.length; a++) animations[a](ref, counter);
            counter += animSpeed * (sh ? 1 : -1); if (counter > 100) { counter = 100 } else if (counter <= 0) {
                counter = 0;
                sty[cssProp] = cssHid
            } else if (isDOM) timer = setTimeout(myName + '.menus["' + id + '"].setVis(' + sh + ')', 50)
        } 
    } 
};
FSMenu.prototype.activateMenu = function(id, subInd) {
    with (this) {
        if (!isDOM || !document.documentElement) return;
        var a, ul, li, parUL, mRoot = getRef(id), nodes, count = 1;
        if (isIE) {
            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)setTimeout(node.onfocus,1,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}'))
            } 
        } 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 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(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.returnValue=false;return false'));
if(subInd)a.insertBefore(subInd.cloneNode(true),a.firstChild)}menus[id]=new FSMenuNode(id,true,this)}};
if(!self.page)var page={win:self,minW:0,minH:0,MS:isIE&&!isOp};
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))}}
