var ns6 = false;
var ns4 = (document.layers)? true:false;
var ie4 = (document.all)? true:false;
var opera = (window.opera)? true:false;		//for opera, "ie4" and "opera" are true
if (ns4 == ie4 && opera == false) {			//if the DOM is none of the above, it must be NS6
	ns6 = true;
	ie4 = ns4 = false;
}

//initialize objects
function object_init(name) {
	if (ie4) return eval(name+'.style');
	if (ns6) return eval('document.getElementById("'+name+'").style');
}

//switch object visibility on
function show_object(obj) {
	obj.visibility = 'visible';
}

//switch object visibility off
function hide_object(obj) {
	obj.visibility = 'hidden';
}

//move object to a certain coordinate
function move_to(obj,x,y) {
	obj.left = x;
	obj.top = y;
}

//clip object - needs object reference
function clip_object(obj,xmin,ymin,xmax,ymax) {
	obj.clip = 'rect(' + ymin + 'px ' + xmax + 'px ' + ymax + 'px ' + xmin + 'px)';
}

//write layer content - needs layer name
function write_layer(lay,txt) {
	if (ie4) {
		document.all[lay].innerHTML = txt;
	}
	if (ns6) {
		over = document.getElementById([lay]);
		range = document.createRange();
		range.setStartBefore(over);
		domfrag = range.createContextualFragment(txt);
		while (over.hasChildNodes()) {
			over.removeChild(over.lastChild);
		}
		over.appendChild(domfrag);
	}
}

//return the height of the layer in pixels - needs layer name
function layer_height(lay) {
	if(ie4 && !opera) return eval(lay+'.clientHeight');
	if(ns6) return eval('document.getElementById("'+lay+'").offsetHeight');
	if(opera) return eval(lay+'.style.pixelHeight');
}

//return the width of the layer in pixels - needs layer name
function layer_width(lay) {
	if(ie4 && !opera) return eval(lay+'.clientWidth');
	if(ns6) return eval('document.getElementById("'+lay+'").offsetWidth');
	if(opera) return eval(lay+'.style.pixelWidth');
}

//find object position by recursively checking parent offsets
function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}


function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


var status_overmenu = -1;
var status_last_overmenu = -1;
var status_waitforclear = false;
var timer_id = -1;

// main navigation rollover functions
function nav_mouseover(nc,n,dif) {
	if (ie4) {										// browser offset
		boffx = 11;
		boffy = 11;
	} else {
		boffx = 0;	
		boffy = 0;	
	}
	if (status_overmenu != n  && status_overmenu != -1) {	// mouse has rolled off nav item and onto new item, clear old nav item
		nav_clear();
	}
	navdropdown = object_init('navdropdownDiv');			// create and place drop down
	move_to(navdropdown,(findPosX(nc)-dif+boffx)+'px',(findPosY(nc)+26+boffy)+'px');
	txt = '<table class="navDropBack" onMouseOver="nav_mouseoverdropdown('+n+')" onMouseOut="nav_mouseout()">';
	txt = txt + '<tr><td><img src="/images/spacer.gif" width="1" height="6" border="0"><\/td><\/tr>';
	for(a=0;a<navlinks[n].length;a++) {
		txt = txt + '<tr><td class="navDrop"><a class="navRight" href="' + navlinks[n][a] + '" onMouseOver="nav_mouseoverdropdown('+n+')">' + navtext[n][a] + '<\/a><\/td><\/tr>';
	}
	txt = txt + '<tr><td><img src="/images/spacer.gif" width="1" height="10" border="0"><\/td><\/tr>';
	txt = txt + '</table>';
	write_layer('navdropdownDiv',txt);
	show_object(navdropdown);
	if (status_waitforclear) {						// new rollover has happened while previous onstate has not been cleared yet
		if (document.getElementById('topnavcell'+status_last_overmenu).className != 'navOn') {
			document.getElementById('topnavcell'+status_last_overmenu).className = 'navOff';
		}
		status_waitforclear = false;
	}
	status_overmenu = n;							// now highlight current nav item
	if (document.getElementById('topnavcell'+n).className != 'navOn') {
		document.getElementById('topnavcell'+n).className = 'navOffhighlight';
	}
	checkScheme();
	trackQS();
}

function nav_mouseoverdropdown(n) {
	status_overmenu = n;
	clearTimeout(timer_id);							// stop clear-nav-timer since mouse is now over dropdown
	if (document.getElementById('topnavcell'+n).className != 'navOn'  &&  status_last_overmenu != status_overmenu) {
		document.getElementById('topnavcell'+n).className = 'navOffhighlight';
	}
}


function nav_mouseout() {
	status_last_overmenu = status_overmenu;			// keep id of previously rolled-over nav item for eventual clear
	status_overmenu = -1;
	status_waitforclear = true;						// flag: nav is waiting for clear to happen
	timer_id = setTimeout('nav_clear()',500);		// 1/2 sec pause before we commit to clear
}


function nav_clear() {								// called from mouse-out routine via 1/2 sec timer to allow user to correct erroneous mouse movements
	if (status_overmenu == -1) {					// user didn't correct, clear drop downs and on states
		if (document.getElementById('topnavcell'+status_last_overmenu).className != 'navOn') {
			document.getElementById('topnavcell'+status_last_overmenu).className = 'navOff';
		}
		hide_object(navdropdown);
	}
	status_waitforclear = false;
}


