//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2000-2004 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

//----------------------------------------------------------------------------
// Code to determine the browser and version.
//----------------------------------------------------------------------------

function Browser()
{
	var ua, s, i;

	this.isIE = false;
	this.isOP = false;
	this.isNS = false;
	this.isSA = false;
	this.version = null;

	ua = navigator.userAgent;

	s = 'Opera';
	if((i = ua.indexOf(s)) >= 0)
	{
		this.isOP = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
	}

	s = 'Netscape6/';
	if((i = ua.indexOf(s)) >= 0)
	{
		this.isNS = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
	}

	// Treat any other "Gecko" browser as Netscape 6.1.
	if((i = ua.indexOf('Gecko')) >= 0)
	{
		this.isNS = true;
		this.version = 6.1;
		
		if((i = ua.indexOf('Safari')) >= 0)
			this.isSA = true;
		
		return;
	}

	s = 'MSIE';
	if((i = ua.indexOf(s)))
	{
		this.isIE = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
	}
}

var browser = new Browser();

//----------------------------------------------------------------------------
// Code for handling the menu bar and active button.
//----------------------------------------------------------------------------

var activeButton = null;

window.onerror = null; // Ryan's Error Handling

/* [MODIFIED] This code commented out, not needed for activate/deactivate
on mouseover.

// Capture mouse clicks on the page so any active button can be
// deactivated.

if (browser.isIE)
document.onmousedown = pageMousedown;
else
document.addEventListener("mousedown", pageMousedown, true);

function pageMousedown(event) {

var el;

// If there is no active button, exit.

if (activeButton == null)
return;

// Find the element that was clicked on.

if (browser.isIE)
el = window.event.srcElement;
else
el = (event.target.tagName ? event.target : event.target.parentNode);

// If the active button was clicked on, exit.

if (el == activeButton)
return;

// If the element is not part of a menu, reset and clear the active
// button.

if (getContainerWith(el, "DIV", "menu") == null) {
resetButton(activeButton);
activeButton = null;
}
}

[END MODIFIED] */
function buttonClick(event,menuId,xShift,yShift)
{
	var button;

	// Get the target button element.

	if(browser.isIE)
		button = window.event.srcElement;
	else
		button = event.currentTarget;

	if(button.tagName!=null && button.tagName=='IMG')
		button=button.parentNode;

	// Blur focus from the link to remove that annoying outline.
	button.blur();

	// Associate the named menu to this button if not already done.
	// Additionally, initialize menu display.
	if(button.menu == null)
	{
		button.menu = document.getElementById(menuId);
		if(button.menu.isInitialized == null)
			menuInit(button.menu);
	}

	// [MODIFIED] Added for activate/deactivate on mouseover.

	// Set mouseout event handler for the button, if not already done.
	if(button.onmouseout == null)
		button.onmouseout = buttonOrMenuMouseout;

	// Exit if this button is the currently active one.
	if(button == activeButton)
		return false;

	// [END MODIFIED]

	// Reset the currently active button, if any.
	if(activeButton != null)
		resetButton(activeButton);

	// Activate this button, unless it was the currently active one.
	if(button != activeButton)
	{
		depressButton(button,xShift,yShift);
		activeButton = button;
	}
	else
		activeButton = null;

	return false;
}

function buttonMouseover(event,menuId)
{
	var button;

	// [MODIFIED] Added for activate/deactivate on mouseover.

	// Activates this button's menu if no other is currently active.
	if (activeButton == null)
	{
		buttonClick(event,menuId);
		return;
	}

	// [END MODIFIED]

	// Find the target button element.

	if(browser.isIE)
		button = window.event.srcElement;
	else
		button = event.currentTarget;

	// If any other button menu is active, make this one active instead.
	if(activeButton != null && activeButton != button)
		buttonClick(event,menuId);
}

function depressButton(button,xShift,yShift)
{
	var x,y;

	// [MODIFIED By Ryan] added so an image can appear on the button.
	if(button.tagName!=null && button.tagName=='IMG')
		button = button.parentNode;
	// [END MODIFIED]

	// Update the button's style class to make it look like it's
	// depressed.

	
	button.className += " menuButtonActive";

	// [MODIFIED] Added for activate/deactivate on mouseover.
	// Set mouseout event handler for the button, if not already done.
	if (button.onmouseout == null)
		button.onmouseout = buttonOrMenuMouseout;
	if (button.menu.onmouseout == null)
		button.menu.onmouseout = buttonOrMenuMouseout;
	// [END MODIFIED]

	// Position the associated drop down menu under the button and
	// show it.
	x = getPageOffsetLeft(button);
	y = getPageOffsetTop(button) + button.offsetHeight;

	// For IE, adjust position.
	if (browser.isIE)
	{
		x += button.offsetParent.clientLeft;
		y += button.offsetParent.clientTop;
	}

	// [MODIFIED By Ryan] adjust position for netscape v6.
	if(browser.isNS && browser.version==6)
		y -= 1;
	// [END MODIFIED]
	
	// [MODIFIED By Ryan] adjust position for all safari browsers.
	if(browser.isSA)
		y -= 5;
	// [END MODIFIED]

	button.menu.style.left = x + xShift + "px";
	button.menu.style.top  = y + yShift + "px";
	button.menu.style.visibility = "visible";
}

function resetButton(button) {

// Restore the button's style class.

removeClassName(button, "menuButtonActive");

// Hide the button's menu, first closing any sub menus.

if (button.menu != null) {
closeSubMenu(button.menu);
button.menu.style.visibility = "hidden";
}
}

//----------------------------------------------------------------------------
// Code to handle the menus and sub menus.
//----------------------------------------------------------------------------
function menuMouseover(event) {

var menu;

// Find the target menu element.

if (browser.isIE)
menu = getContainerWith(window.event.srcElement, "DIV", "menu");
else
menu = event.currentTarget;

// Close any active sub menu.

if (menu.activeRecord != null)
closeSubMenu(menu);
}

function menuRecordMouseover(event, menuId)
{
	var record,menu
	var x,y,j,k;

	// Find the target record element and its parent menu element.
	if(browser.isIE)
		record = getContainerWith(window.event.srcElement,"A","menuRecord");
	else
		record = event.currentTarget;
	menu = getContainerWith(record,"DIV","menu");

	// Close any active sub menu and mark this one as active.
	if(menu.activeRecord != null)
		closeSubMenu(menu);
	menu.activeRecord = record;

	// Highlight the record element.
	//record.className += " menuRecordHighlight";

	// Initialize the sub menu, if not already done.
	if(record.subMenu == null)
	{
		record.subMenu = document.getElementById(menuId);
		if(record.subMenu.isInitialized == null)
			menuInit(record.subMenu);
	}

	// [MODIFIED] Added for activate/deactivate on mouseover.
	// Set mouseout event handler for the sub menu, if not already done.
	if(record.subMenu.onmouseout == null)
		record.subMenu.onmouseout = buttonOrMenuMouseout;
	// [END MODIFIED]

	// Adjust position to fit in view.
	var maxX, maxY;
	
	if(browser.isIE)
	{
		maxX = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) + (document.documentElement.clientWidth != 0 ? document.documentElement.clientWidth : document.body.clientWidth);
		maxY = Math.max(document.documentElement.scrollTop, document.body.scrollTop) + (document.documentElement.clientHeight != 0 ? document.documentElement.clientHeight : document.body.clientHeight);
	}
	if (browser.isOP)
	{
		maxX = document.documentElement.scrollLeft + window.innerWidth;
		maxY = document.documentElement.scrollTop  + window.innerHeight;
	}
	if(browser.isNS)
	{
		maxX = window.scrollX + window.innerWidth;
		maxY = window.scrollY + window.innerHeight;
	}
	
		j = getPageOffsetLeft(record);
	
	// Get position for submenu based on the menu record.
	x = j + record.offsetWidth;
	k = j - record.subMenu.offsetWidth;
	y = getPageOffsetTop(record);

	// ie5 submenus are slightly out.
	if(navigator.userAgent.toLowerCase().indexOf("msie 5.0")!=-1)
		x-=10;
		
	if(x > maxY)
		x = k;
	
	y = Math.max(0, Math.min(y, maxY));

	// Position and show the sub menu.
	record.subMenu.style.left = x+"px";
	record.subMenu.style.top = y+2+"px";
	record.subMenu.style.visibility = "visible";

	// Stop the event from bubbling.

	if (browser.isIE)
		window.event.cancelBubble = true;
	else
		event.stopPropagation();
}

function closeSubMenu(menu) {

if (menu == null || menu.activeRecord == null)
return;

// Recursively close any sub menus.

if (menu.activeRecord.subMenu != null) {
closeSubMenu(menu.activeRecord.subMenu);
menu.activeRecord.subMenu.style.visibility = "hidden";
menu.activeRecord.subMenu = null;
}
removeClassName(menu.activeRecord, "menuRecordHighlight");
menu.activeRecord = null;
}

// [MODIFIED] Added for activate/deactivate on mouseover. Handler for mouseout
// event on buttons and menus.

function buttonOrMenuMouseout(event)
{
	var el;

	// If there is no active button, exit.

	if (activeButton == null)
		return;
	
	// Find the element the mouse is moving to.
	
	if (browser.isIE)
		el = window.event.toElement;
	else if (event.relatedTarget != null)
		el = (event.relatedTarget.tagName ? event.relatedTarget : event.relatedTarget.parentNode);
		
	if(el == null)
		return;
	
	//alert(navigator.userAgent);
	if(el.className != "NoMouseOutEvent" && !(el.className == "menuBar" && browser.isSA))
	{
		//alert(el.className+' '+el.tagName);
		// If the element is not part of a menu, reset the active button.
		if(getContainerWith(el, "DIV", "menu") == null)
		{
			//alert(el.tagName+' '+el.className);
			resetButton(activeButton);
			activeButton = null;
		}
	}
}

// [END MODIFIED]

//----------------------------------------------------------------------------
// Code to initialize menus.
//----------------------------------------------------------------------------

function menuInit(menu)
{
	var recordList,spanList;
	var textEl,arrowEl;
	var recordWidth;
	var w,dw;
	var i,j;

	// For IE, replace arrow characters.
	if(browser.isIE)
	{
		menu.style.lineHeight = "2.5ex";
		spanList = menu.getElementsByTagName("SPAN");
		for(i=0;i<spanList.length;i++)
		{
			if(hasClassName(spanList[i],"menuRecordArrow"))
			{
				spanList[i].style.fontFamily = "Webdings";
				spanList[i].firstChild.nodeValue = "4";
			}
		}
	}
	
	if(browser.isNS)
		menu.style.width = 150 + "px";
		
	// Find the width of a menu record.
	recordList = menu.getElementsByTagName("A");
	if(recordList.length > 0)
		recordWidth = recordList[0].offsetWidth;
	else
		return;

	// For records with arrows, add padding to record text to make the
	// arrows flush right.
	for(i=0;i<recordList.length;i++)
	{
		spanList = recordList[i].getElementsByTagName("SPAN");
		textEl  = null;
		arrowEl = null;
		for(j=0;j<spanList.length;j++)
		{
			if(hasClassName(spanList[j],"menuRecordText"))
				textEl = spanList[j];
			if(hasClassName(spanList[j],"menuRecordArrow"))
				arrowEl = spanList[j];
		}
		
		if(textEl != null && arrowEl != null)
		{
			textEl.style.paddingRight = (recordWidth - (textEl.offsetWidth + arrowEl.offsetWidth)) + "px";
			// For Opera, remove the negative right margin to fix a display bug.
			if(browser.isOP)
				arrowEl.style.marginRight = "0px";
		}
	}

	// Fix IE hover problem by setting an explicit width on first record of
	// the menu.
	if(browser.isIE)
	{
		w = recordList[0].offsetWidth;
		recordList[0].style.width = w + "px";
		dw = recordList[0].offsetWidth - w;
		w -= dw;
		recordList[0].style.width = w + "px";
	}

	// Mark menu as initialized.
	menu.isInitialized = true;
}

//----------------------------------------------------------------------------
// General utility functions.
//----------------------------------------------------------------------------

function getContainerWith(node,tagName,className)
{
	// Starting with the given node, find the nearest containing element
	// with the specified tag name and style class.

	while(node != null)
	{
		if(node.tagName != null && node.tagName == tagName && hasClassName(node, className))
		{
			return node;
		}
		else
		{
			node = node.parentNode;
		}
	}
	
	return node;
}

function hasClassName(el, name) {

var i, list;

// Return true if the given element currently has the given class
// name.

list = el.className.split(" ");
for (i = 0; i < list.length; i++)
if (list[i] == name)
return true;

return false;
}

function removeClassName(el, name) 
{
var i, curList, newList;

Array.prototype.push = myPush; // Override push method of Array, so menu will work in ie5

if (el.className == null)
	return;

// Remove the given class name from the element's className property.

newList = new Array();
curList = el.className.split(" ");
for (i=0;i<curList.length;i++)
{
	if (curList[i] != name)
	{
		newList.push(curList[i]);
	}
}
el.className = newList.join(" ");
}

// MODIFIED BY RYAN

// Override push method, because it is only supported in version ie5.5 and above
function myPush(record)
{
	this[this.length] = record;
}

// Find and trap errors NOT USED ANYMORE
/* 
function fnErrorTrap()
{
alert("An error was thrown and caught. "+"Error: "+sMsg+"Line: "+sLine+"URL: "+sUrl);
return false;
}
*/
// END MODIFIED

function getPageOffsetLeft(el) {

var x;

// Return the x coordinate of an element relative to the page.

x = el.offsetLeft;
if (el.offsetParent != null)
{
x += getPageOffsetLeft(el.offsetParent);
}
	
return x;
}

function getPageOffsetTop(el) {

var y;

// Return the x coordinate of an element relative to the page.

y = el.offsetTop;
if (el.offsetParent != null)
y += getPageOffsetTop(el.offsetParent);

return y;
}
function ShowBigImage(imgId,divId,e)
{
	var divEl = MM_findObj(divId);
	
	if(!browser.isOP)
	{
		var imgEl = MM_findObj(imgId);
		
		
		var x,y,mx,my;
		
		x = getPageOffsetLeft(imgEl) + imgEl.offsetWidth;
		y = getPageOffsetTop(imgEl);

		if(browser.isNS && navigator.userAgent.indexOf("Firefox") < 0)
		{
			mx = window.scrollX + window.innerWidth;
			my = window.scrollY + window.innerHeight;
		}
		else
		{
			mx = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) + (document.documentElement.clientWidth != 0 ? document.documentElement.clientWidth : document.body.clientWidth);
			my = Math.max(document.documentElement.scrollTop, document.body.scrollTop) + (document.documentElement.clientHeight != 0 ? document.documentElement.clientHeight : document.body.clientHeight);
		}
		
		x = Math.max(0, Math.min(x, mx));
		y = Math.max(0, Math.min(y, my));

		if(browser.isIE)
			y += 2;
		
		// Position and show the sub menu.
		divEl.style.left = x+"px";
		divEl.style.top = y+"px";
	}
	divEl.style.visibility = "visible";
	divEl.style.display = "block";
}
function HideBigImage(divId)
{
	var divEl = MM_findObj(divId);

	divEl.style.visibility = "hidden";
	divEl.style.display = "none";
}