// <script>

var hx_showing;
var hx_over;
var hx_timeout=0;

function hx_menus_init() {
	for(i in hx_menus) {
		if(hx_menus[i].par) if(!hx_menus[hx_menus[i].par]) {
			p=document.getElementById(hx_menus[i].par);
			while(!hx_menus[p.id]) p=p.parentNode;
			hx_menus[i].par=p.id;
		}
		var obj=document.getElementById(i);
		if(typeof hx_menus[i] == 'object') set_menu_handlers(obj);
		var items=obj.getElementsByTagName('*');
		for(j=0;j<items.length;j++) set_menu_handlers(items[j]);
	}
}

function set_menu_handlers(o) {
	if(typeof o.onmouseover != 'function') o.onmouseover=function() {hx_menus_over(o); };
	else { var i=o.onmouseover; o.onmouseover=function() {i(); hx_menus_over(o); } }
	if(typeof o.onmouseout != 'function') o.onmouseout=function() {hx_menus_out(o); };
	else { var i=o.onmouseout; o.onmouseout=function() {i(); hx_menus_out(o); } }
}

function get_offset_pos(o) {
	var x=y=0;
	do{
		x+=o.offsetLeft;
		y+=o.offsetTop;
	} while(o=o.offsetParent);
	return [x,y];	
}

function hx_menus_over(o) {
	if(hx_over) return false;
	hx_over=true;
	if(hx_timeout) clearTimeout(hx_timeout);
	hx_timeout=0;
	var trigger=false;
	//if(hx_showing) if(o.id==hx_menus[hx_showing.id].par) return false;
	hx_showing=o;
	for(i in hx_menus) if(hx_menus[i].tri==o.id) {		
		hx_showing=document.getElementById(i);
		trigger=true;
		var pm=document.getElementById(hx_menus[hx_showing.id].par);
		var tleft=get_offset_pos(o)[0];
		var ttop=get_offset_pos(o)[1];
		var pleft=get_offset_pos(pm)[0];
		var ptop=get_offset_pos(pm)[1];
		
		var side=hx_menus[hx_showing.id].pos.charAt(0);
		var flush=hx_menus[hx_showing.id].pos.charAt(1);
		var top, left;
		hx_showing.style.top='-30000px';
		hx_showing.style.display='block';
		switch(side) {
			case 't':
				top=ptop-hx_showing.offsetHeight; break;
			case 'b':
				top=ptop+pm.offsetHeight; break;
			case 'l':
				left=pleft-hx_showing.offsetWidth; break;
			default:
				left=pleft+pm.offsetWidth;
		}
		switch(flush) {
			case 'l':
				left=tleft; break;
			case 'r':
				left=tleft+o.offsetWidth-hx_showing.offsetWidth; break;
			case 'b':
				top=ttop+o.offsetHeight-hx_showing.offsetHeight; break;
			case 'c':
			case 'm':
				if(side=='t'||side=='b') left=tleft+o.offsetWidth/2+hx_showing.offsetWidth/2;
				else top=ttop+o.offsetHeight/2+hx_showing.offsetHeight/2;
				break;
			default:
				top=ttop;
		}
		if(hx_menus[hx_menus[hx_showing.id].par].par) {
			var prev=document.getElementById(hx_menus[hx_showing.id].par);
			var pleft=get_offset_pos(prev)[0];
			var ptop=get_offset_pos(prev)[1];
		}
		var root=first=hx_showing;
		while(hx_menus[root.id].par) {
			first=root;
			root=document.getElementById(hx_menus[root.id].par);
		}
		var all=root;
		var rleft=get_offset_pos(all)[0];
		var rtop=get_offset_pos(all)[1];
		if(hx_menus[first.id].pos.match(/^[tb]/i)) {
			if(left+hx_showing.offsetWidth>rleft+root.offsetWidth) {
				if(prev&&!side.match(/[tb]/)) left=pleft-hx_showing.offsetWidth;
				else left=rleft+root.offsetWidth-hx_showing.offsetWidth;
			}
			if(left<rleft) {
				if(prev&&!side.match(/[tb]/)) left=pleft+prev.offsetWidth;
				else left=rleft;
			}
		}
		top+=parseInt(hx_menus[hx_showing.id].top);
		left+=parseInt(hx_menus[hx_showing.id].left);
		hx_showing.style.display='none';
		hx_showing.style.left=left+'px';
		hx_showing.style.top=top+'px';
		hx_show_menu();
	}
	if(!trigger) {
		hx_over=false;
		for(i in hx_menus) if(hx_menus[i].par) if(hx_menus[i].par==o.id||hx_menus[i].tri==o.id) hx_over=true;
	}
	while(!hx_menus[hx_showing.id]) hx_showing=hx_showing.parentNode;
	par=o;
	while(!hx_menus[par.id]) par=par.parentNode;
	if(!hx_over||hx_menus[par.id]=='top') hx_hide_menus();
	hx_class(o,'hover',1);
	hx_class_active(hx_showing,1);
}

function hx_class_active(c,action) {
	while(!hx_menus[c.id]) c=c.parentNode;
	while(hx_menus[c.id].tri) {
		c=document.getElementById(hx_menus[c.id].tri);
		hx_class(c,'active',action);
		while(!hx_menus[c.id]) c=c.parentNode;
	}
}

function hx_menus_out(o) {
	hx_over=false;
	hx_class(o,'hover',-1);
	hx_class(o,'active',-1);
	hx_class_active(o,-1);
	try {
		while(hx_menus[hx_showing.id].par) hx_showing=document.getElementById(hx_menus[hx_showing.id].par);
	} catch(e) {
		hx_showing=hx_showing.parentNode;
		hx_menus_out(o);
		return false;
	}
	var ie=navigator.appVersion.match(/MSIE [4-6]/);
	hx_timeout=setTimeout('hx_hide_menus()',ie?hx_menu_delay_ie:hx_menu_delay);
}
function hx_show_menu() {
	hx_showing.style.display='block';
}
function hx_hide_menus() {
	var stay=new Array();
	var s=hx_showing;
	while(s) {
		stay[stay.length]=s.id;
		for(i in hx_menus) if(i==s.id) s=hx_menus[i].par?document.getElementById(hx_menus[i].par):false;
	}
	for(i in hx_menus) if(stay.toString().indexOf(i)===-1) if(hx_menus[i]!='top') document.getElementById(i).style.display='none';
}

function hx_class(node,classname) {
	var classes=node.className?node.className.replace(/(^\s+|\s+$)/,'').split(/\s+/):new Array();
	var found=-1;
	for(var i=0;i<classes.length;i++) if(classes[i]==classname) found=i;
	if(action=arguments[2]) {
		if(found>=0&&action<0) classes[found]=null;
		if(found==-1&&action>0) classes[classes.length]=classname;
	} else return found>=0;
	for(i=0;i<classes.length;i++) if(!classes[i]) classes.splice(i,1);
	node.className=classes.join(' ');
}

if(typeof window.onload != 'function') window.onload=hx_menus_init;
else { var o = window.onload; window.onload=function() { o(); hx_menus_init(); } }



// </script>
