/*****************************************************
 * ypSlideOutMenu
 * http://ypslideoutmenus.sourceforge.net/
 * 3/04/2001
 * 
 * a nice little script to create exclusive, slide-out
 * menus for ns4, ns6, mozilla, opera, ie4, ie5 on 
 * mac and win32. I've got no linux or unix to test on but 
 * it should(?) work... 
 *
 * Licensed under AFL 2.0
 * http://www.opensource.org/licenses/afl-2.0.php
 *
 * Revised: 
 * - 08/29/2002 : added .hideAll()
 * - 04/15/2004 : added .writeCSS() to support more 
 *                than 30 menus.
 * - 03/15/2005 : check if submenu exists -by DuDDo-
 *
 * --youngpup--
 *****************************************************/

ypSlideOutMenu.Registry = []
ypSlideOutMenu.aniLen = 0
ypSlideOutMenu.hideDelay = 0
ypSlideOutMenu.minCPUResolution = 10

// constructor
function ypSlideOutMenu(id, dir, left, top, width, height)
{
	this.ie  = document.all ? 1 : 0
	this.ns4 = document.layers ? 1 : 0
	this.dom = document.getElementById ? 1 : 0
	this.css = "";

	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 = "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 = "";
		strCSS += '#' + this.id + 'Container { visibility:hidden; '
		//strCSS += 'left:' + left + 'px; '
		//strCSS += 'top:' + top + 'px; '
		strCSS += 'overflow:visible; z-index:10; }'
		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 += '}'

		this.css = strCSS;

		this.load()
	}
}

ypSlideOutMenu.writeCSS = function() {
	document.writeln('<style type="text/css">');

	for (var id in ypSlideOutMenu.Registry) {
		document.writeln(ypSlideOutMenu.Registry[id].css);
	}

	document.writeln('</style>');
}

ypSlideOutMenu.prototype.load = function() {
	var d = document
	var lyrId1 = this.id + "Container"
	var lyrId2 = this.id + "Content"
	var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1]
	if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
	var temp

	if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()", 100)
	else {
		this.container	= obj1
		this.menu		= obj2
		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) / ypSlideOutMenu.aniLen / ypSlideOutMenu.aniLen 

		// set event handlers.
		if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
		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) {
	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) {
  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.ns4 ? this.container : this.container.style
	s.visibility = bShow ? "visible" : "hidden"
}
ypSlideOutMenu.prototype.moveTo = function(p) { 
	this.style[this.orientation == "h" ? "left" : "top"] = this.ns4 ? p : p + "px"
}
ypSlideOutMenu.prototype.getPos = function(c) {
	return parseInt(this.style[c])
}

// events
ypSlideOutMenu.prototype.onactivate		= function() { }
ypSlideOutMenu.prototype.ondeactivate	= function() { }


var menus = [
	new ypSlideOutMenu("menu1", "down", 0, 0, 136, 290),
	new ypSlideOutMenu("menu2", "down", 0, 0, 136, 200),
	new ypSlideOutMenu("menu3", "down", 0, 0, 136, 200),
	new ypSlideOutMenu("menu4", "down", 0, 0, 136, 340),
	new ypSlideOutMenu("menu5", "down", 0, 0, 136, 300)
]

for (var i = 0; i < menus.length; i++) {
	menus[i].onactivate = new Function("document.getElementById('act" + i + "').className='active';");
	menus[i].ondeactivate = new Function("document.getElementById('act" + i + "').className='';");
}

ypSlideOutMenu.writeCSS();


<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v;
  }
}

function MM_showHideExtendLayers() { //v6.0
  var h=(document.documentElement.clientHeight);
  var i,p,v,obj,args=MM_showHideExtendLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v;
		if (navigator.appName!="Microsoft Internet Explorer"){
		obj.height=h;
		}
	}
}
// functionality will break if there are more than 30 Layers on the page
function MM_showHideAllLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideAllLayers.arguments;
  for (i=0; i<(30); i++) if ((obj=MM_findObj('Layer'+[i]))!=null) {
    obj.style.visibility='hidden'; 
	}
}
//-->

function fnGetCoolerInformation(location) {
	if (coolerWindow) {
		coolerWindow.location.href = location;
		coolerWindow.focus();
	} else {
		var coolerWindow = window.open(location,'coolerWindow','locationbar=0,personalbar=0,toolbar=1,menubar=0,statusbar=0,scrollbars=1,width=600,height=560,resizable');
		coolerWindow.focus();
	}
}

//--- IE error on Member Not Found - still working on fix
function fnOpenUserManual(value) {
	if (!manualWindow || manualWindow.closed) {
		var manualWindow = window.open('images/content/'+value,'manualWindow','locationbar=0,personalbar=0,toolbar=1,menubar=0,statusbar=0,scrollbars=1,width=600,height=560,resizable');
		manualWindow.focus();
	} else {
		manualWindow.location.href = 'images/content/'+value;
		manualWindow.focus();
	}
}

	
function fnGetSelectedButton (buttonGroup) {
	for (var i =0; i < buttonGroup.length; i++) {
		if (buttonGroup[i].checked) {
			return buttonGroup[i].value;
		}
	}
	return 0;
}

function fnCheckScore (form) {
	var q1i = fnGetSelectedButton(form.q1);
	var q2i = fnGetSelectedButton(form.q2);
	var q3i = fnGetSelectedButton(form.q3);
	var q4i = fnGetSelectedButton(form.q4);
	var q5i = fnGetSelectedButton(form.q5);
	var q6i = fnGetSelectedButton(form.q6);
	var q7i = fnGetSelectedButton(form.q7);
	var q8i = fnGetSelectedButton(form.q8);
	var myScore = 0;
	myScore = (parseInt(q1i) 
		+ parseInt(q2i) 
		+ parseInt(q3i) 
		+ parseInt(q4i) 
		+ parseInt(q5i) 
		+ parseInt(q6i)
		+ parseInt(q7i)
		+ parseInt(q8i));
	if (myScore <= 2) {
		document.getElementById('currentScore').innerHTML = ('<span class="grey">'+myScore+' Correct</span>');
	} else if (myScore >=3 && myScore <=5) {
		document.getElementById('currentScore').innerHTML = ('<span class="blue">'+myScore+' Correct</span>');
	} else if (myScore >= 6) {
		document.getElementById('currentScore').innerHTML = ('<span class="darkblue">'+myScore+' Correct</span>');
	}
}


function fnGimmeeMedia(mylink) {
	if (chillinWindow) {
		chillinWindow.focus();
	} else {
		var chillinWindow = window.open('news_mc_popup.php?link='+mylink,'mediaWindow','locationbar=0,personalbar=0,toolbar=0,menubar=0,statusbar=0,scrollbars=1,width=600,height=600,resizable');
	}
}

function makepage(src)
{
  // We break the closing script tag in half to prevent
  // the HTML parser from seeing it as a part of
  // the *main* page.

  return "<html>\n" +
    "<head>\n" +
    "<title>Temporary Printing Window</title>\n" +
    "<script>\n" +
    "function step1() {\n" +
    "  setTimeout('step2()', 10);\n" +
    "}\n" +
    "function step2() {\n" +
    "  window.print();\n" +
    "  window.close();\n" +
    "}\n" +
    "</scr" + "ipt>\n" +
    "</head>\n" +
    "<body onLoad='step1()'>\n" +
    "<img src='" + src + "'/>\n" +
    "</body>\n" +
    "</html>\n";
}

function printme(evt, image_src)
{
  if (!evt) {
    // Old IE
    evt = window.event;
  }
  var image = evt.target;
  if (!image) {
    // Old IE
    image = window.event.srcElement;
  }
  src = image.src;
  if (!src) {
	src = image_src;
  }
  link = "about:blank";
  var pw = window.open(link, "_new");
  pw.document.open();
  pw.document.write(makepage(src));
  pw.document.close();
}


function fnCheckCoolerQuizScore (form) {
	var q1i = fnGetSelectedButton(form.q1);
	var q2i = fnGetSelectedButton(form.q2);
	var q3i = fnGetSelectedButton(form.q3);
	var myScore = 0;
	myScore = (parseInt(q1i) 
		+ parseInt(q2i) 
		+ parseInt(q3i));
	if (myScore == 3) {
		document.getElementById('currentScore').innerHTML = ('<span class="grey"><a href="javascript:void(null)" onclick="MM_showHideExtendLayers(\'Layer1\',\'\',\'show\');"><img src="images/buttons/btn_enter.jpg" border="0"></a></span>');
		MM_showHideLayers('Layer1','','hide');
	} else if (myScore > 1 && myScore <=2) {
		document.getElementById('currentScore').innerHTML = ('<span class="blue">'+myScore+' - you are almost there!</span>');
		MM_showHideLayers('Layer1','','hide');
	} else if (myScore == 1) {
		document.getElementById('currentScore').innerHTML = ('<span class="darkblue">'+myScore+' - keep trying!</span>');
		MM_showHideLayers('Layer1','','hide');
	} else if (myScore == 0) {
		document.getElementById('currentScore').innerHTML = ('<span class="grey">'+myScore+' - you can do better!</span>');
		MM_showHideLayers('Layer1','','hide');
	}
}
