isIE = document.all ? true : false;
isOpera = window.opera ? true : false;


/*
AddEvent Manager (c) 2005-2006 Angus Turnbull http://www.twinhelix.com
Free usage permitted as long as this credit notice remains intact.
*/

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];
 };
}




if(typeof($)!="function"){
$ = function(i){ return document.getElementById(i); }
$.pos = function(o){
	var p = { left:o.offsetLeft, top:o.offsetTop, Left:0, Top:0, width:o.offsetWidth, height:o.offsetHeight };
	p.right = p.left + p.width;	p.bottom = p.top + p.height;
	while(o){ if(typeof(o.offsetLeft)!="undefined"){ p.Left += o.offsetLeft; p.Top += o.offsetTop; } o = o.parentNode; }
	p.Right = p.Left + p.width;	p.Bottom = p.Top + p.height;
	return p;
};

$.move = function(o,x,y){	o.style.left = x + "px"; o.style.top = y + "px"; };
$.moveby = function(o,x,y){	o.style.left = (x + o.offsetLeft) + "px"; o.style.top = (y + o.offsetTop) + "px"; };

}

Menu = {};
Menu.refs = {};
Menu.nextID = function(){ if(typeof(Menu.idcounter)=="undefined") Menu.idcounter = -1; return ++Menu.idcounter; };
Menu.nextIndex = function(){ if(typeof(Menu.indexcounter)=="undefined") Menu.indexcounter = 0; return ++Menu.indexcounter; };

Menu.show = function(mObj){	mObj.Menu.active = 1; mObj.style.zIndex = 1000; mObj.style.visibility = "visible"; Menu.animate(mObj); };
Menu.hide = function(mObj,r){
	if(mObj.Menu.root) return;
	var i,a,r = r ? r : 0;
	clearTimeout(mObj.Menu.timer);
	mObj.Menu.active = -1; mObj.style.zIndex = 999;
	Menu.animate(mObj);

	if(r<1) for(i in mObj.Menu.elements){	a = mObj.Menu.elements[i]; if(a.Menu.submenu.active >= -1) Menu.hide(a.Menu.submenu,r-1); }
	if(0<r && mObj.Menu.parent && Menu.refs[Menu.refs[mObj.Menu.parent].Menu.parent].Menu.active!=1) Menu.hide(Menu.refs[Menu.refs[mObj.Menu.parent].Menu.parent],r+1);
};
Menu.close = function(mObj){ mObj.style.visibility = "hidden"; };

Menu.over = function(e){
	var i,s,p,a,sm,t;
	//IE leaks memory on circular references--we reference parent objects with a lookup table rather than directly
	if(this.Menu.submenu){ a = this; p = Menu.refs[a.Menu.parent]; sm = a.Menu.submenu;	}
	else{ sm = this; a = Menu.refs[sm.Menu.parent]; p = Menu.refs[a.Menu.parent]; }

	t = sm; while(t){ clearTimeout(t.Menu.timer); t = t.Menu.parent ? Menu.refs[Menu.refs[t.Menu.parent].Menu.parent] : null; if(t) t.Menu.active = 0; }

	if(sm.Menu.active != 1){  if(a.Menu.position) a.Menu.position(a); sm.Menu.pos = $.pos(sm); Menu.show(sm); }
	for(i in p.Menu.elements){
		s = p.Menu.elements[i].Menu.submenu;
		if(sm != s && s.Menu.active==1){ clearTimeout(s.Menu.timer); s.Menu.timer = setTimeout("Menu.hide(Menu.refs["+s.Menu.id+"])",100); }
	}
};

Menu.out = function(e){
	var sm;
	sm = this.Menu.submenu || this;
	clearTimeout(sm.Menu.timer);
	sm.Menu.timer = setTimeout("Menu.hide(Menu.refs["+sm.Menu.id+"])",750);
};

Menu.animate = function(mObj){
	with(mObj.Menu.animate){
		clearTimeout(timer);
		cur = mObj.Menu.active > 0 ? Math.min(1,cur+inc) : Math.max(0,cur-inc);
		Menu.animate.fade(mObj,cur,mObj.Menu.active);
		Menu.animate.clip(mObj,cur,mObj.Menu.active);

		if(mObj.Menu.active < 0 && cur==0){ if(mObj.Menu.closed) mObj.Menu.closed(); Menu.close(mObj); }
		else if(mObj.Menu.active > 0 && cur==1){ if(mObj.Menu.opened) mObj.Menu.opened(); }
		else timer = setTimeout("Menu.animate(Menu.refs['"+mObj.Menu.id+"'])",delay);
	}
};


Menu.animate.fade = function(o,v,d){
	var s = o.Menu.fade || Menu.animate.fade.settings;
	v = Math.min(s.max,v*(s.max-s.min)+s.min);
	isIE ? o.style.filter="alpha(opacity="+Math.floor(100*v)+")" : o.style.opacity = Math.round(v*1000)/1000;
};
Menu.animate.fade.settings = {min:0, max:.95};

Menu.animate.clip = function(o,v,d){
	var p = o.Menu.pos;
	if(!p) return;
	var m = d>0 ? Math.sqrt(2*v-v*v) : 1-Math.sqrt(1-v*v);
	var l = v == 0 ? 0 : (v==1 ? p.width : Math.floor(m*p.width));
	var t = v == 0 ? p.height : (v==1 ? 0 : Math.floor((1-m)*p.height));
/*
//	expand from upper right corner like a scrolling blind
	o.style.clip = "rect("+t+"px,"+l+"px,auto,auto)";
	$.move(o,p.right - l, p.top - t);
/*
//expand from upper left corner, straight down vertically...
	o.style.clip = "rect("+t+"px,auto,auto,"+(p.width-l)+"px)";
	$.move(o,p.left + l - p.width, p.top - t);
/*
//expand from midpoint horizontally, straight down vertically...
	o.style.clip = "rect("+t+"px,"+Math.floor(p.width/2+(l)/2)+"px,auto,"+Math.floor(p.width/2-(l)/2)+"px)";
	$.move(o,p.left, p.top - t);
*/
//straight down vertically...
	o.style.clip = "rect("+t+"px,auto,auto,auto)";
	$.move(o,p.left, p.top - t);
/**/
};




