
SlideMenu.Registry = []
SlideMenu.aniLen = 250 /* 250 */
SlideMenu.hideDelay = 100 /* 1000 */
SlideMenu.minCPUResolution = 10

// constructor
function SlideMenu(id, dir, left, top, width, height)
{
	this.ie  = document.all ? 1 : 0
	this.ns4 = document.layers ? 1 : 0
	this.dom = document.getElementById ? 1 : 0

	if (this.ie || this.ns4 || this.dom) {
		this.id			 = id
		this.dir		 = dir
		this.orientation = dir == "left" || dir == "right" ? "h" : "v"
		this.dirType	 = dir == "right" || dir == "down" ? "-" : "+"
		this.dim		 = this.orientation == "h" ? width : height
		this.hideTimer	 = false
		this.aniTimer	 = false
		this.open		 = false
		this.over		 = false
		this.startTime	 = 0

		// global reference to this object
		this.gRef = "SlideMenu_"+id
		eval(this.gRef+"=this")

		// add this menu object to an internal list of all menus
		SlideMenu.Registry[id] = this

		var d = document
		d.write('<style type="text/css">')
		d.write('#' + this.id + 'Container { visibility:hidden; ')
		d.write('left:' + left + 'px; ')
		d.write('top:' + top + 'px; ')
		d.write('overflow:hidden; }')
		d.write('#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; ')
		d.write('width:' + width + 'px; ')
		d.write('height:' + height + 'px; ')
		d.write('}')
		d.write('</style>')
	}
}

SlideMenu.prototype.load = function(lyr1, lyr2) {
	this.container	= lyr1
	this.menu		= lyr2
	this.style		= this.ns4 ? this.menu : this.menu.style
	this.homePos	= eval("0" + this.dirType + this.dim)
	this.outPos		= 0
	this.accelConst	= (this.outPos - this.homePos) / SlideMenu.aniLen / SlideMenu.aniLen 

	// set event handlers.
	if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
	this.menu.onmouseover = new Function("SlideMenu.showMenu('" + this.id + "')")
	this.menu.onmouseout = new Function("SlideMenu.hideMenu('" + this.id + "')")

	//set initial state
	this.endSlide()
}
	
SlideMenu.showMenu = function(id)
{
	var reg = SlideMenu.Registry
	var obj = SlideMenu.Registry[id]
	
	if (obj.container) {
		obj.over = true

		// close other menus.
		for (menu in reg) if (id != menu) SlideMenu.hide(menu)

		// if this menu is scheduled to close, cancel it.
		if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }

		// if this menu is closed, open it.
		if (!obj.open && !obj.aniTimer)
			{
				reg[id].startSlide(true)
				/* LM
				eleImg = document.getElementById(id+"img");
				eleImg.src = eleImg.src.split("_off").join("_on");
				*/
			}
	}
}

SlideMenu.hideMenu = function(id)
{
	// schedules the menu to close after <hideDelay> ms, which
	// gives the user time to cancel the action if they accidentally moused out
	var obj = SlideMenu.Registry[id]
	if (obj.container) {
		if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
		obj.hideTimer = window.setTimeout("SlideMenu.hide('" + id + "')", SlideMenu.hideDelay);
		//obj.hideTimer = window.setTimeout("changeGraphic('" + id + "')", SlideMenu.hideDelay);
		
	}
}

function changeGraphic(strGraphic)
{
			eleImg = document.getElementById(strGraphic+"img");
			eleImg.src = eleImg.src.split("_on").join("_off");
}

function moveup(){
SlideMenu.hideMenu('flyout1');
SlideMenu.hideMenu('flyout2');
SlideMenu.hideMenu('flyout3');
SlideMenu.hideMenu('flyout4');
}

SlideMenu.hide = function(id)
{
	var obj = SlideMenu.Registry[id]
	obj.over = false

	if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
	
	// flag that this scheduled event has occured.
	obj.hideTimer = 0

	// if this menu is open, close it.
	if (obj.open && !obj.aniTimer)
		{
			obj.startSlide(false)
			/* LM
			changeGraphic(id);
			*/
		}
}

SlideMenu.prototype.startSlide = function(open) {
	this.open = open
	if (open) this.setVisibility(true)
	this.startTime = (new Date()).getTime()	
	this.aniTimer = window.setInterval(this.gRef + ".slide()", SlideMenu.minCPUResolution)
}

SlideMenu.prototype.slide = function() {
	var elapsed = (new Date()).getTime() - this.startTime
	if (elapsed > SlideMenu.aniLen) this.endSlide()
	else {
		var d = Math.round(Math.pow(SlideMenu.aniLen-elapsed, 2) * this.accelConst)
		if (this.open && this.dirType == "-")		d = -d
		else if (this.open && this.dirType == "+")	d = -d
		else if (!this.open && this.dirType == "-")	d = -this.dim + d
		else										d = this.dim + d

		this.moveTo(d)
	}
}

SlideMenu.prototype.endSlide = function() {
	this.aniTimer = window.clearTimeout(this.aniTimer)
	this.moveTo(this.open ? this.outPos : this.homePos)
	if (!this.open) this.setVisibility(false)
	if ((this.open && !this.over) || (!this.open && this.over)) {
		this.startSlide(this.over)
	}
}

SlideMenu.prototype.setVisibility = function(bShow) { 
	var s = this.ns4 ? this.container : this.container.style
	s.visibility = bShow ? "visible" : "hidden"
}
SlideMenu.prototype.moveTo = function(p) {
	//this.style[this.orientation == "h" ? "left" : "top"] = p + "px"
}
SlideMenu.prototype.getPos = function(c) {
	return parseInt(this.style[c])
}

	var gNavTabs = [], gNavContents = []
	var oFlyout1 = new SlideMenu("flyout1", "down", 244, 113, 116, 550)//x, y, w, h
	var oFlyout2 = new SlideMenu("flyout2", "down", 372, 113, 120, 550)//x, y, w, h 
	var oFlyout3 = new SlideMenu("flyout3", "down", 505, 113, 120, 550)//x, y, w, h
	var oFlyout4 = new SlideMenu("flyout4", "down", 636, 113, 120, 550)//x, y, w, h

	var gGecko  = (navigator.userAgent.indexOf("Gecko") != -1)
	var gMacIe5 = (navigator.platform == "MacPPC" && navigator.appName == "Microsoft Internet Explorer" && document.getElementById)

	if (document.layers) {
		document.write('<style type="text/css">')
		document.write('a { font-size:10px; }')
		document.write('#nav #txtSearch { font-size:12px; font-family:verdana, tahoma, arial; }') 
		document.write('</style>')
	}

	function initTabs() {
		gNavTabs[1] = getLayer("navTabs1")	
		gNavTabs[2] = getLayer("navTabs2")
		gNavTabs[3] = getLayer("navTabs3")		
		gNavTabs[4] = getLayer("navTabs4")
		gNavContents[1] = getLayer("content1")
		gNavContents[2] = getLayer("content2")
		gNavContents[3] = getLayer("content3")		
		gNavContents[4] = getLayer("content4")
		oFlyout1.load(getLayer("flyout1Container"), getLayer("flyout1Content"))
		oFlyout2.load(getLayer("flyout2Container"), getLayer("flyout2Content"))
		oFlyout3.load(getLayer("flyout3Container"), getLayer("flyout3Content"))
		oFlyout4.load(getLayer("flyout4Container"), getLayer("flyout4Content"))
	}

	function getLayer(sLyrName) {
		var o
		if (document.all) o = document.all[sLyrName]
		else if (document.getElementById) o = document.getElementById(sLyrName)
		else if (document.layers) o = getNsLayer(sLyrName)
		
		if (o) {
			o.s = o.style ? o.style : o
			return o
		} else {
			return 0
		}
	}

	function getNsLayer(sLyrName, doc) {
		if (!doc) doc = window.document
		if (doc.layers) {
			for (var i = 0; i < doc.layers.length; i++) {
				if (doc.layers[i].id == sLyrName) return doc.layers[i]
				else if (doc.layers[i].document.layers.length > 0) {
					var o = getNsLayer(sLyrName, doc.layers[i].document)
					if (o) return o
				}
			}
		}
		return 0
	}



