/*****************************************************
 * ypSlideOutMenu
 * 3/04/2001
 * 
 *
 * --youngpup--
 *****************************************************/

ypSlideOutMenu.Registry = []
ypSlideOutMenu.aniLen = 500
ypSlideOutMenu.hideDelay = 500
ypSlideOutMenu.minCPUResolution = 10

// constructor
function ypSlideOutMenu(id, dir, left, top, width, height)
{
	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 = "ypSlideOutMenu_"+id
	eval(this.gRef+"=this")

	// add this menu object to an internal list of all menus
	ypSlideOutMenu.Registry[id] = this

	var d = document

	var strCSS = '<style type="text/css">';
	strCSS += '#' + this.id + 'Container { visibility: hidden; display: block;'
	strCSS += 'left:' + left + 'px; '
	strCSS += 'top:' + top + 'px; '
	strCSS += 'overflow:hidden; z-index:10000; }'
	strCSS += '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; '
	strCSS += 'width:' + width + 'px; '
	strCSS += 'height:' + height + 'px; '
	strCSS += 'clip:rect(0 ' + width + ' ' + height + ' 0); '
	strCSS += '} '
	strCSS += '</style>';
	d.write(strCSS)

	this.load()
}

ypSlideOutMenu.prototype.load = function() {
	var trigger = document.getElementById(this.id + "Trigger");
	var obj1 = document.getElementById(this.id + "Container")
	if (obj1) var obj2 = document.getElementById(this.id + "Content")
	var temp

	if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()", 100)
	else {
		this.trigger	= trigger
		this.container	= obj1
		this.menu		= obj2
		this.homePos	= eval("0" + this.dirType + this.dim)
		this.outPos		= 0
		this.accelConst	= (this.outPos - this.homePos) / ypSlideOutMenu.aniLen / ypSlideOutMenu.aniLen 

		// set event handlers.
		this.trigger.onmouseover = new Function("ypSlideOutMenu.showMenu('" + this.id + "')");
		this.trigger.onmouseout = new Function("ypSlideOutMenu.hideMenu('" + this.id + "')");
		this.menu.onmouseover = new Function("ypSlideOutMenu.showMenu('" + this.id + "')")
		this.menu.onmouseout = new Function("ypSlideOutMenu.hideMenu('" + this.id + "')")

		//set initial state
		this.endSlide()
	}
}
	
ypSlideOutMenu.showMenu = function(id)
{
	var reg = ypSlideOutMenu.Registry
	var obj = ypSlideOutMenu.Registry[id]
	
	if (obj.container) {
		obj.over = true

		// close other menus.
		for (menu in reg) if (id != menu) ypSlideOutMenu.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)
	}
}

ypSlideOutMenu.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 = ypSlideOutMenu.Registry[id]
	if (obj.container) {
		if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
		obj.hideTimer = window.setTimeout("ypSlideOutMenu.hide('" + id + "')", ypSlideOutMenu.hideDelay);
	}
}

ypSlideOutMenu.hideAll = function()
{
	var reg = ypSlideOutMenu.Registry
	for (menu in reg) {
		ypSlideOutMenu.hide(menu);
		if (menu.hideTimer) window.clearTimeout(menu.hideTimer);
	}
}

ypSlideOutMenu.hide = function(id)
{
	var obj = ypSlideOutMenu.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)
}

ypSlideOutMenu.prototype.startSlide = function(open) {
	this[open ? "onactivate" : "ondeactivate"]()
	this.open = open
	if (open) this.setVisibility(true)
	this.startTime = (new Date()).getTime()	
	this.aniTimer = window.setInterval(this.gRef + ".slide()", ypSlideOutMenu.minCPUResolution)
}

ypSlideOutMenu.prototype.slide = function() {
	var elapsed = (new Date()).getTime() - this.startTime
	if (elapsed > ypSlideOutMenu.aniLen) this.endSlide()
	else {
		var d = Math.round(Math.pow(ypSlideOutMenu.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)
	}
}

ypSlideOutMenu.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)
	}
}

ypSlideOutMenu.prototype.setVisibility = function(bShow) { 
	var s = this.container.style
	s.visibility = bShow ? "visible" : "hidden"
}
ypSlideOutMenu.prototype.moveTo = function(p) { 
	this.menu.style[this.orientation == "h" ? "left" : "top"] = p + "px"
}
ypSlideOutMenu.prototype.getPos = function(c) {
	return parseInt(this.menu.style[c])
}

// events
ypSlideOutMenu.prototype.onactivate		= function() { }
ypSlideOutMenu.prototype.ondeactivate	= function() { }


function checkBrowser ()
{
	var browser = BrowserDetect.browser;

//	alert ("BName:" + BrowserDetect.browser + " version: " + BrowserDetect.version + " OS name: "+ BrowserDetect.OS);
	if (document.getElementById)
	{
		if (browser == "Explorer")
		{
		   var menus = [
			new ypSlideOutMenu("menu1", "down", 0, 35, 300, 222),
			new ypSlideOutMenu("menu2", "down", 120, 35, 300, 222),
			new ypSlideOutMenu("menu3", "down", 230, 35, 300, 240),
			new ypSlideOutMenu("menu4", "down", 340, 35, 300, 101),
			new ypSlideOutMenu("menu5", "down", 450, 35, 300, 240),
			new ypSlideOutMenu("menu7", "down", 560, 35, 300, 222),
			new ypSlideOutMenu("menu8", "down", 550, 35, 250, 222)
		   ]
		}
		else
		{
		   var menus = [
			new ypSlideOutMenu("menu1", "down", -40, 36, 300, 222),
			new ypSlideOutMenu("menu2", "down", 80, 36, 300, 222),
			new ypSlideOutMenu("menu3", "down", 190, 36, 300, 240),
			new ypSlideOutMenu("menu4", "down", 300, 36, 300, 101),
			new ypSlideOutMenu("menu5", "down", 420, 36, 300, 240),
			new ypSlideOutMenu("menu7", "down", 540, 36, 300, 222),
			new ypSlideOutMenu("menu8", "down", 500, 36, 300, 222)
		   ]
		}
	}
}