var nv_x;
var nv_prev_x=0;
var nv_y=0;
var nv_prev_y=0;
var	nv_elems=new Array();
var nv_check_freq=200;

function nv_get_elem(s)
{
	if (document.getElementById(s))
		return document.getElementById(s);
	if (document.getElementsByName(s)[0])
		return document.getElementsByName(s)[0];
	return null;
}

function nv_mouse_pos(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	return [posx,posy];
}

function nv_elem_pos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function nv_ch_bg(mouseover,setid,sets)
{
	bg=nv_get_elem(setid+'_bg');
	if (mouseover)
	{
		if (bg.style.background != nv_sets[sets][2])
			bg.style.background=nv_sets[sets][2];
	}
	else
	{
		if (bg.style.background != nv_sets[sets][1])
			bg.style.background=nv_sets[sets][1];
	}
}

function nv_ch_content(o,c)
{
	if (o.innerHTML != c)
		o.innerHTML=c;
}

function nv_is_in(x1,y1,x2,y2,w,h)
{
	if (x1 >= x2 && 
		x1 <= x2+w &&
		y1 >= y2 &&
		y1 <= y2+h)
		return true;
	else
		return false;
}

function nv_is_visible(o)
{
	return (o.style.display == 'none') ? false : true;
}

function nv_show_alt_menu(s, alt)
{
	if (s.substr(s.length-1,1) == 'c')
		s=s.substr(0,s.length-1);

	var i=0;
	for (i=0; i<nv_alt_menu.length; i++)
	{
		if (nv_alt_menu[i][0] == s)
		{
			if (!alt)
				nv_ch_content(nv_get_elem(s), nv_alt_menu[i][1]);
			else
				nv_ch_content(nv_get_elem(s), nv_alt_menu[i][2]);
			break;
		}
	}
}

function nv_hide_elem(s)
{
	o=nv_get_elem(s);
	if (nv_is_visible(o))
	{
		o.style.display='none';
		o.style.zIndex=0;
	}
}

function nv_check_state()
{
	if ((nv_x != nv_prev_x) || (nv_y != nv_prev_y))
	{
		// prevent constant update when mouse not moving
		nv_prev_x=nv_x;
		nv_prev_y=nv_y;

		var sets=0;
		for (sets=0; sets<nv_sets.length; sets++)
		{
			var setid=nv_sets[sets][0];
			var in_mbar=false;
			var in_mm=false;
			var in_mm_elem='';
			var in_sm=false;
			var in_sm_elem='';
			var i=0;

			mouseover=false;
			mbar=nv_get_elem(setid);
			if (!mbar) continue;

			mpos=nv_elem_pos(mbar);
			
			// check menu bar
			if (nv_is_in(nv_x, nv_y, mpos[0], mpos[1], mbar.offsetWidth, mbar.offsetHeight))
				in_mbar=true;

			// check sub menu iems
			for(i=0;i<nv_elems.length;i++)
			{
				if ((nv_elems[i].indexOf(setid+'_dd') == 0) && 
					(nv_elems[i].substr(nv_elems[i].length-1,1) == 'c'))
				{
					obj=nv_get_elem(nv_elems[i]);
					if (nv_is_visible(obj))
					{
						pos=nv_elem_pos(obj);
						if (nv_is_in(nv_x, nv_y, pos[0], pos[1], obj.offsetWidth, obj.offsetHeight))
						{
							in_sm_elem=nv_elems[i];
							in_sm=true;
							in_mm=true;
							nv_show_alt_menu(nv_elems[i].substr(0, nv_elems[i].length-1), true);
						}
					}
					else
						nv_show_alt_menu(nv_elems[i].substr(0, nv_elems[i].length-1), false);
				}
			}

			if (!in_mm)
			{
				// check main menu items
				for(i=0;i<nv_elems.length;i++)
				{
					if ((nv_elems[i].indexOf(setid+'_dd') == 0) && 
						(nv_elems[i].substr(nv_elems[i].length-1,1) != 'c'))
					{
						obj=nv_get_elem(nv_elems[i]);
						pos=nv_elem_pos(obj);
						if (nv_is_in(nv_x, nv_y, pos[0], mpos[1], obj.offsetWidth, mbar.offsetHeight))
						{
							in_mm_elem=nv_elems[i];
							in_mm=true;
							nv_show_alt_menu(nv_elems[i], true);
						}
						else
						{
							nv_show_alt_menu(nv_elems[i], false);
							nv_hide_elem(nv_elems[i] + 'c');
						}
					}
				}
			}

			// set mouseover bg for the menubar
			if (in_mbar || in_mm || in_sm)
				nv_ch_bg(true,setid,sets);
			else
				nv_ch_bg(false,setid,sets);

			// display sub menu
			if (!in_sm && in_mm)
			{
				co=nv_get_elem(in_mm_elem + 'c');
				if (!nv_is_visible(co))
				{
					o=nv_get_elem(in_mm_elem);
					pos=nv_elem_pos(o);
					cpos=nv_elem_pos(co);
					if (co)
					{
						if (nv_sets[sets][3])
						{
							// popup near screen edge is larger than 
							// viewable screen width
							if (pos[0] - 2 + o.offsetWidth > screen.width)
								pos[0] = screen.width - o.offsetWidth;
							co.style.left = (pos[0] + nv_sets[sets][4]) + 'px';
							co.style.top = (mpos[1] + mbar.offsetHeight + nv_sets[sets][5]) + 'px';
							co.style.zIndex=999;
							co.style.display='block';
						}
						else
						{
							// popup near screen edge is larger than 
							// viewable screen width
							if (pos[0] - 2 + o.offsetWidth > screen.width)
								pos[0] = screen.width - o.offsetWidth;
							co.style.display='block';
							co.style.left = (pos[0] + nv_sets[sets][4]) + 'px';
							co.style.top = (mpos[1] - co.offsetHeight + nv_sets[sets][5]) + 'px';
							co.style.zIndex=999;
						}
					}
				}		
			}
		}
	}
	setTimeout('nv_check_state()', nv_check_freq);
}
function nv_mouse_upd(e)
{
	m=nv_mouse_pos(e);
	nv_x=m[0];
	nv_y=m[1];
}

function nv_cache_elems(elem)
{
	if (elem)
	{
		var elem_name = elem.id ? elem.id : elem.name ? elem.name : '';
		if (elem_name.indexOf('nv') == 0)
			nv_elems[nv_elems.length] = elem_name;

		var j=0;
		var elem_child=elem.childNodes[j];
		while (elem_child)
		{
		  nv_cache_elems(elem_child);
		  j++;
		  elem_child = elem.childNodes[j];
		}
	}
}

function nv_upd_vars()
{
	var i=0;

	// update background css variable
	for (i=0; i<nv_sets.length; i++)
	{
		nv_sets[i][1] = 'url(' + nv_sets[i][1] + ') repeat-x top left';
		nv_sets[i][2] = 'url(' + nv_sets[i][2] + ') repeat-x top left';
	}

	// set nv_alt_menu original to alt base on pages
	// get page url
	var p = location.href;
	p = p.substr(p.lastIndexOf('/')+1);
	if (p.lastIndexOf('.') > 0)
		p = p.substr(0, p.lastIndexOf('.'));

	var s = '';
	for (i=0; i<nv_section_pages.length; i++)
	{
		if (p == nv_section_pages[i][1])
		{
			s = nv_section_pages[i][0];
			break;
		}
	}

	for (i=0; i<nv_alt_menu.length; i++)
	{
		if (s == nv_alt_menu[i][0])
		{
			nv_alt_menu[i][1] = nv_alt_menu[i][2];
			break;
		}
	}
}

function nv_preload_images()
{
	var i=0;
	var content="";

	o = document.createElement('div');
	o.id = "nv_preload_images";
	o.style.display="none";
	
	for (i=0;i<nv_alt_menu.length; i++)
	{
		content += nv_alt_menu[i][1] + nv_alt_menu[i][2];
	}
	o.innerHTML = content;
	
	document.body.appendChild(o);
}

function nv_init()
{
	nv_upd_vars();
	nv_preload_images();
	nv_cache_elems(document,0);
	document.onmousemove = nv_mouse_upd;
	nv_check_state();
}
