	// show_triggers has a key for each item, and the value is an array of item names

	window.onresize=handleResize;

	// umm, global variable, yummy

	var hide_timeout;
	var all_images = [];
	var all_links = [];
	var finished_loading = 0;

	var menu_to_header = {
		'm1':['0m1'],
		'm2':['0m2'],
		'm3':['0m3'],
		'm4':['0m4'],
		'm5':['0m5'],
		'm6':['0m1', '1m3'],
		'm7':['0m2', '2m1'],
		'm8':['0m2', '2m3'],
		'm9':['0m2', '2m4'],
		'm10':['0m2', '2m5'],
		'm11':['0m2', '2m7'],
		'm12':['0m2', '2m8'],
		'm13':['0m2', '2m9'],
		'm14':['0m2', '2m11'],
		'm15':['0m2', '2m6'],
		'm16':['0m2', '2m11', '14m6'],
		'm17':['0m2', '2m14'],
		'm18':['0m3', '3m5'],
		'm19':['0m2', '2m13'],
//		'm20':['0m4', '4m4'],
//		'm21':['0m4', '4m6'],
		'm22':['0m2', '2m10'],
		'm23':['0m2', '2m2'],
//		'm24':['0m4', '4m2'],
		'm25':['0m2', '2m11', '14m3'],
		'm26':['0m2', '2m7', '11m2'],
		'm27':['0m3', '3m1']
	};

	var special_on_off = {
		'0m1':1,
		'0m2':1,
		'0m3':1,
		'0m4':1,
		'0m5':1,
		'1m3':1,
		'2m1':1,
		'2m2':1,
		'2m3':1,
		'2m4':1,
		'2m5':1,
		'2m6':1,
		'2m7':1,
		'2m8':1,
		'2m9':1,
		'2m10':1,
		'2m11':1,
		'2m13':1,
		'2m14':1,
		'3m1':1,
		'3m5':1
	};

	var show_triggers = {
		'0m1':{'m1':1},
		'0m2':{'m2':1},
		'0m3':{'m3':1},
		'0m4':{'m4':1},
		'0m5':{'m5':1},
		'1m1':{'m1':1},
		'1m2':{'m1':1},
		'1m3':{'m1':1, 'm6':1},
		'1m4':{'m1':1},
		'2m1':{'m2':1, 'm7':1},
		'2m2':{'m2':1, 'm23':1},
		'2m3':{'m2':1, 'm8':1},
		'2m4':{'m2':1, 'm9':1},
		'2m5':{'m2':1, 'm10':1},
		'2m6':{'m2':1, 'm15':1},
		'2m7':{'m2':1, 'm11':1},
		'2m8':{'m2':1, 'm12':1},
		'2m9':{'m2':1, 'm13':1},
		'2m10':{'m2':1, 'm22':1},
		'2m11':{'m2':1, 'm14':1},
		'2m12':{'m2':1},
		'2m13':{'m2':1, 'm19':1},
		'2m14':{'m2':1, 'm17':1},
		'3m1':{'m3':1, 'm27':1},
		'3m2':{'m3':1},
		'3m3':{'m3':1},
		'3m4':{'m3':1},
		'3m5':{'m3':1, 'm18':1},
		'4m1':{'m4':1},
		'4m2':{'m4':1},
		'4m3':{'m4':1},
		'4m4':{'m4':1},
		'4m5':{'m4':1},
		'4m6':{'m4':1},
		'4m7':{'m4':1},
		'5m1':{'m5':1},
		'5m2':{'m5':1},
		'5m3':{'m5':1},
		'5m4':{'m5':1},
		'5m5':{'m5':1},
		'5m6':{'m5':1},
		'5m7':{'m5':1},
		'5m8':{'m5':1},
		'5m9':{'m5':1},
		'5m10':{'m5':1},
		'5m11':{'m5':1},
		'5m12':{'m5':1},
		'5m13':{'m5':1},
		'5m14':{'m5':1},
		'5m15':{'m5':1},
		'5m16':{'m5':1},
		'5m17':{'m5':1},
		'5m18':{'m5':1},
		'5m19':{'m5':1},
		'5m20':{'m5':1},
		'5m21':{'m5':1},
		'5m22':{'m5':1},
		'5m23':{'m5':1},
		'5m24':{'m5':1}
	}

	var sub_menu_deps = {
		'm6':['m1'],
		'm7':['m2'],
		'm8':['m2'],
		'm9':['m2'],
		'm10':['m2'],
		'm11':['m2'],
		'm12':['m2'],
		'm13':['m2'],
		'm14':['m2'],
		'm15':['m2'],
		'm16':['m2', 'm14'],
		'm17':['m2'],
		'm18':['m3'],
		'm19':['m2'], 
		'm20':['m4'], //bad
		'm21':['m4'], //bad
		'm22':['m2'],
		'm23':['m2'],
		'm24':['m4'], //bad
		'm25':['m2', 'm14'],
		'm26':['m2', 'm11'],
		'm27':['m3']
	};
	
	var number_of_divs = 27;
	var number_of_top_menus = 4;
	var number_of_menu_items = 30; // must be more than number of menu items in longest menu

	var all_items = [];
	
	var i;
	for (i=0; i<number_of_divs; i++){
		all_items[i] = 'm'+ (i+1);
	}

	var ii;
	var new_menu_holder;
	var this_menu_deps;

	for (i=6; i<=number_of_divs; i++){  // flesh out the show_triggers menu as most of it is derivable from sub_menu_deps
		this_menu_deps = sub_menu_deps['m' + i];

		new_menu_holder = {}
		new_menu_holder['m' + i] = 1;

		for (ii=0; ii<=this_menu_deps.length; ii++){
			new_menu_holder[this_menu_deps[ii]] = 1;
		}
		for (ii=1; ii<number_of_menu_items; ii++){
			show_triggers[i + 'm' + ii] = new_menu_holder;
		}
	} 

	show_triggers['14m3'] = {'m2':1, 'm14':1, 'm25':1};  // an override for the two third level sub menus
	show_triggers['14m6'] = {'m2':1, 'm14':1, 'm16':1};  // an override for the two third level sub menus
	show_triggers['11m2'] = {'m2':1, 'm11':1, 'm26':1};  // an override for the two third level sub menus

	var to_show = {};

	var saved_size = 0;

	function centerMenus(){
		// put the menus in the right location, relative to the anchor

		if (navigator.family == 'nn4'){
			saved_size = (innerWidth + ":" + innerHeight);
		}

		var Xcomp = 0;
		var Ycomp = 0;

		// quick hack for changed design...

		Ycomp = Ycomp +41;
		Xcomp = Xcomp -281;

		align_relative(getById("anchor"), getById("m1"), 1 + Xcomp, 19 + Ycomp);
		align_relative(getById("anchor"), getById("m2"), 121 + Xcomp, 19 + Ycomp);
		align_relative(getById("anchor"), getById("m3"), 241 + Xcomp, 19 + Ycomp);
		align_relative(getById("anchor"), getById("m4"), 361 + Xcomp, 19 + Ycomp);
		align_relative(getById("anchor"), getById("m5"), 481 + Xcomp, 19 + Ycomp);
		align_relative(getById("anchor"), getById("m6"), 120 + Xcomp, 47 + Ycomp);
		align_relative(getById("anchor"), getById("m7"), 240 + Xcomp, 19 + Ycomp);
		align_relative(getById("anchor"), getById("m8"), 240 + Xcomp, 47 + Ycomp);
		align_relative(getById("anchor"), getById("m9"), 240 + Xcomp, 61 + Ycomp);
		align_relative(getById("anchor"), getById("m10"), 240 + Xcomp, 75 + Ycomp);
		align_relative(getById("anchor"), getById("m11"), 240 + Xcomp, 103 + Ycomp);
		align_relative(getById("anchor"), getById("m12"), 240 + Xcomp, 117 + Ycomp);
		align_relative(getById("anchor"), getById("m13"), 240 + Xcomp, 131 + Ycomp);
		align_relative(getById("anchor"), getById("m14"), 240 + Xcomp, 159 + Ycomp);
		align_relative(getById("anchor"), getById("m15"), 240 + Xcomp, 89 + Ycomp);
		align_relative(getById("anchor"), getById("m16"), 359 + Xcomp, 229 + Ycomp);
		align_relative(getById("anchor"), getById("m17"), 240 + Xcomp, 201 + Ycomp);
		align_relative(getById("anchor"), getById("m18"), 360 + Xcomp, 75 + Ycomp);
		align_relative(getById("anchor"), getById("m19"), 240 + Xcomp, 187 + Ycomp);
		align_relative(getById("anchor"), getById("m20"), 480 + Xcomp, 47 + Ycomp);
		align_relative(getById("anchor"), getById("m21"), 480 + Xcomp, 85 + Ycomp);
		align_relative(getById("anchor"), getById("m22"), 240 + Xcomp, 145 + Ycomp);
		align_relative(getById("anchor"), getById("m23"), 240 + Xcomp, 33 + Ycomp);
		align_relative(getById("anchor"), getById("m24"), 480 + Xcomp, 33 + Ycomp);
		align_relative(getById("anchor"), getById("m25"), 359 + Xcomp, 187 + Ycomp);
		align_relative(getById("anchor"), getById("m26"), 359 + Xcomp, 117 + Ycomp);
		align_relative(getById("anchor"), getById("m27"), 360 + Xcomp, 19 + Ycomp);

	}
	function get_all_images_and_links(){
		var max_divs = number_of_menu_items;

		var i, ii;
		var temp;
		var zero_images = [];
/*		
		for (i=0; i<=number_of_menu_items; i++){
			temp = getById(0 + 'm' + (i+1));
			if (temp){
				zero_images[i] = temp;
			}
		}
*/
		all_images[0] = zero_images;
		
		for (i=1; i<=max_divs; i++){
			temp = get_images_for_div('m' + i);
			if (temp){
				all_images[i] = temp;
			}
			temp = get_links_for_div('m' + i);
			if (temp){
				all_links[i] = temp;
			}
		}
	}
	function populate_mOvers(){
		var i, ii;

		var div_images;
		var div_links;

		for (i=0; i<=number_of_menu_items; i++){  // iterating through divs...
			
			div_images = all_images[i];
			div_links = all_links[i];

			if (div_links){
				for (ii=0; ii<=number_of_menu_items; ii++){
					if (div_links[ii]){
						//div_links[ii].onmouseover = eval('mOver' + i + 'm' + (ii+1));
						//div_links[ii].onmouseout = eval('mOut' + i + 'm' + (ii+1));
						div_links[ii].onmouseover = magic_mOver;
						div_links[ii].onmouseout = magic_mOut;
						div_links[ii].major = i;
						div_links[ii].minor = (ii+1);
						div_images[ii].major = i;
						div_images[ii].minor = (ii+1);
					}
				}
			}
		}
	}
	function showMenus(){
		if (hide_timeout){
			clearTimeout(hide_timeout);
		}

		var menu_shows_ar;
		var i;
		var ii;
		var just_shown = {}

		for (i=1; i<=all_items.length; i++){ // iterating all divs (major)

			if (to_show[all_items[i-1]] == 1){ // if this div is one we should show...

				Show(all_items[i-1]);

				menu_shows_ar = menu_to_header[all_items[i-1]]; // get the array of headers, menu items to be turned on

				for(ii=0; ii<menu_shows_ar.length; ii++){
					mImgOn(menu_shows_ar[ii]);
					just_shown[menu_shows_ar[ii]] = 1;
				}

				for(ii=1; ii<number_of_menu_items; ii++){ //itterate all possible menu items for this div;
					if (special_on_off[i + 'm' + ii] == 1){
						if (just_shown[i + 'm' + ii] != 1){
							mImgOff(i + 'm' + ii);
						}
					}
				}
			}
			else{ // this is a div we should not show...
				Hide(all_items[i-1]);
			}
		}
		// now must hide uneeded headers...
		for (ii = 1; ii<=number_of_top_menus; ii++){
			if (just_shown[0 + 'm' + ii] != 1){
				mImgOff(0 + 'm' + ii);
			}
		}
	}
	
	function get_event_element(event){

		if (!event) event = window.event;

		if (navigator.family == 'ie4'){
			return window.event.srcElement;
		}
		else{
			return event.target;
		}
	}
				
	function magic_mOver(event){

		var element = get_event_element(event);
		var major = element.major;
		var minor = element.minor;

		mOver(major, minor);
	}
    function magic_mOut(event){

		var element = get_event_element(event);
		var major = element.major;
		var minor = element.minor;

        mOut(major, minor);
    }
	function mOver(major, minor){

		if (navigator.family == 'nn4'){
			if (saved_size != (innerWidth + ":" + innerHeight)){
				//location.reload();
				centerMenus();
			}
		}
		// do appropriate mouseOver visual feedback

		if (special_on_off[major + 'm' + minor] != 1){
			mImgOn(major, (major,minor));
		}

		// register the items that need to be shown
		to_show = show_triggers[major + "m" + minor];

		// then call showMenus.
		showMenus();
	}
	function mOut(major, minor){

		// deactivate any mouseOver visual feedback
		if (special_on_off[major + 'm' + minor] != 1){
			mImgOff(major, (major,minor));
		}

		// unregister "this" item and it's parents
		to_show = {};

		// register call to showMenus in 500ms
		hide_timeout = setTimeout("showMenus()", 500);
	}

	function fetchImg(major, minor){
		var img;
	   
		if (major == 0){
			switch(navigator.family){
				case 'nn4':
					if (major == 0){
						img = document.images[major + 'm' + minor];
					}
					else{
						var div = getById("m" + major);
						img = div.document.images[major + 'm' + minor];
					}
				break;
				default:
					img = document.images[major + 'm' + minor];
				break;
			}
			return img;
		}
		return all_images[major][minor-1];
	}  
	function mImgOn(major, minor) {

		if (major.toString().indexOf('m') != -1){
		//	alert("mImgOn called with major " + major);
			minor = major.slice(major.indexOf('m')+1, major.length);
			major = major.slice(0, major.indexOf('m'));
		}

		var img = fetchImg(major, minor);

		if ((img) && (img.src.indexOf('_on.gif') == -1)){}
		else{
			return;
		}
		if (img.orig_src){}
		else{
			img.orig_src = img.src;
		}
		img.src = (img.src.slice(0, -4) + '_on.gif');

	}
	function mImgOff(major, minor) {

		if (major.toString().indexOf('m') != -1){
			minor = major.slice(major.indexOf('m')+1, major.length);
			major = major.slice(0, major.indexOf('m'));
		}

		var img = fetchImg(major, minor);

		if ((img) && (img.orig_src)){}
		else{
			return;
		}

		img.src = img.orig_src;
	}
	function handleResize(){
		switch(navigator.family){
			case 'nn4':
				// will be handled by looking at window size in showMenus
			break;
			default:
				centerMenus();
			break;
		}
	}
	function preloadNav(){
		var i;
		var j;
		var img;

		for (i=0; i<=number_of_divs; i++) {  
			for (j=1; j<=23; j++) {
				img = fetchImg(i,j);
				if (img){
					eval("b"+i+" = new Image()");
					eval("b"+i+".src = (img.src.slice(0, -4) + '_on.gif')");
				}
			}
		}
	}
	function get_images_for_div(div_id){

		var div = getById(div_id);

		if (!div){
			return 0;
		}
		var imgs_array;

		switch(navigator.family){
			case 'nn4':
				imgs_array = div.document.images;
			break;
			default:
				imgs_array = div.getElementsByTagName('img'); 
			break;
		}
		return imgs_array;
	}
	function get_links_for_div(div_id){

		var div = getById(div_id);

		if (!div){
			return 0;
		}
		var links_array;

		switch(navigator.family){
			case 'nn4':
				links_array = div.document.links;
			break;
			default:
				links_array = div.getElementsByTagName('a'); 
			break;
		}
		return links_array;
	}
	



function Show(div){
	showIt(getById(div))
}
function Hide(div){
	hideIt(getById(div))
}



/// functions below fairly generalized...
function getObjLeft(obj){
	switch(navigator.family){
		case 'nn4':
			return obj.pageX;
		break;
		default:
			return obj.offsetLeft;
		break;
	}
}
function getObjTop(obj){
	switch(navigator.family){
		case 'nn4':
			return obj.pageY;
		break;
		default:
			return obj.offsetTop;
		break;
	}
}
function getById(ID){
	switch(navigator.family){
		case 'nn4':
			return eval('document.' + ID);
		break;
		case 'gecko':
			return document.getElementById(ID);
		break;
		case 'mozilla':
			return document.getElementById(ID);
		break;
		default:
			return eval('document.all.' + ID);
		break;
	}
}
function align_relative(parent, child, x, y){
	var new_x = (getObjLeft(parent) + x);
	var new_y = (getObjTop(parent) + y);
	shiftTo(child, new_x, new_y);	
}
function shiftTo(obj, x, y) {
	switch(navigator.family){
		case 'nn4':
			obj.moveToAbsolute(x,y)
		break;
		case 'gecko':
			obj.style.left = x
			obj.style.top = y
		break;
		case 'mozilla':
			obj.style.left = x
			obj.style.top = y
		break;
		default:
			obj.style.pixelLeft = x
			obj.style.pixelTop = y
		break;
	}
}
function hideIt(obj){
	switch(navigator.family){
		case 'nn4':
			obj.visibility = 'hidden';
		break;
		default:
			obj.style.visibility = 'hidden';
		break;
	}
}
function showIt(obj){
	switch(navigator.family){
		case 'nn4':
			obj.visibility = 'visible';
		break;
		default:
			obj.style.visibility = 'visible';
		break;
	}
}


/*
ua.js revision 0.200 2001-12-03

Contributor(s): Bob Clary, Netscape Communications, Copyright 2001

Netscape grants you a royalty free license to use, modify and 
distribute this software provided that this copyright notice 
appears on all copies.  This software is provided "AS IS," 
without a warranty of any kind.
*/

function xbDetectBrowser()
{
  var oldOnError = window.onerror;
  var element = null;

  window.onerror = null;
  
  // work around bug in xpcdom Mozilla 0.9.1
  window.saveNavigator = window.navigator;

  navigator.OS    = '';
  navigator.version  = parseFloat(navigator.appVersion);
  navigator.org    = '';
  navigator.family  = '';

  var platform;
  if (typeof(window.navigator.platform) != 'undefined')
  {
    platform = window.navigator.platform.toLowerCase();
    if (platform.indexOf('win') != -1)
      navigator.OS = 'win';
    else if (platform.indexOf('mac') != -1)
      navigator.OS = 'mac';
    else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1)
      navigator.OS = 'nix';
  }

  var i = 0;
  var ua = window.navigator.userAgent.toLowerCase();
  
  if (ua.indexOf('opera') != -1)
  {
    i = ua.indexOf('opera');
    navigator.family  = 'opera';
    navigator.org    = 'opera';
    navigator.version  = parseFloat('0' + ua.substr(i+6), 10);
  }
  else if ((i = ua.indexOf('msie')) != -1)
  {
    navigator.org    = 'microsoft';
    navigator.version  = parseFloat('0' + ua.substr(i+5), 10);
    
    if (navigator.version < 4)
      navigator.family = 'ie3';
    else
      navigator.family = 'ie4'
  }
  else if (ua.indexOf('gecko') != -1)
  {
    navigator.family = 'gecko';
    var rvStart = navigator.userAgent.indexOf('rv:') + 3;
    var rvEnd = navigator.userAgent.indexOf(')', rvStart);
    var rv = navigator.userAgent.substring(rvStart, rvEnd);
    var decIndex = rv.indexOf('.');
    if (decIndex != -1)
    {
      rv = rv.replace(/\./g, '')
      rv = rv.substring(0, decIndex-1) + '.' + rv.substr(decIndex)
    }
    navigator.version = parseFloat(rv);

    if (ua.indexOf('netscape') != -1)
      navigator.org = 'netscape';
    else if (ua.indexOf('compuserve') != -1)
      navigator.org = 'compuserve';
    else
      navigator.org = 'mozilla';
  }
  else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1))
  {
    var is_major = parseFloat(navigator.appVersion);
    
    if (is_major < 4)
      navigator.version = is_major;
    else
    {
      i = ua.lastIndexOf('/')
      navigator.version = parseFloat('0' + ua.substr(i+1), 10);
    }
    navigator.org = 'netscape';
    navigator.family = 'nn' + parseInt(navigator.appVersion);
  }
  else if ((i = ua.indexOf('aol')) != -1 )
  {
    // aol
    navigator.family  = 'aol';
    navigator.org    = 'aol';
    navigator.version  = parseFloat('0' + ua.substr(i+4), 10);
  }
  else if ((i = ua.indexOf('hotjava')) != -1 )
  {
    // hotjava
    navigator.family  = 'hotjava';
    navigator.org    = 'sun';
    navigator.version  = parseFloat(navigator.appVersion);
  }

  window.onerror = oldOnError;
}

xbDetectBrowser();

