// -----------------------------------------------------------------------------------
// Description: slideMenu functions written by Johan Janssens http://www.jinx.be
// version 1.4.1 - 22/05/2005
// NOTICE : this file requires hybridmenu.js
// Copyright 2004 - 2005 Johan Janssens, All rights reserved.
// This script may not be used or distributed without license
// -----------------------------------------------------------------------------------

slideMenuBar.minCPURes=5;
slideMenuBar.speedClose=50;
slideMenuBar.speedOpen=150;
function slideMenuBar(id){this.base=hybridMenuBar;
this.base(id)}slideMenuBar.prototype=new hybridMenuBar;
slideMenuBar.prototype.addMenu=function(node,id){if(node.getElementsByTagName('UL').length){this.menus[id]=new slideMenu(node,id,this.id)}};


function slideMenu(node,id,parent){this.base=hybridMenu;
this.base(node,id,parent);
this.aniTimer=false;
this.startTime=0;
this.dirType="-";
this.initSlideMenu(node);
this.endSlide()}slideMenu.prototype=new hybridMenu;
slideMenu.prototype.initSlideMenu=function(node){this.initHybridMenu(node);
this.height=this.node.offsetHeight;
this.outPos=document.getElementById(this.parent).offsetHeight;
this.homePos=eval(this.outPos+this.dirType+this.height)};


slideMenu.prototype.show=function(){if(!this.aniTimer)this.startSlide(true)};


slideMenu.prototype.startSlide=function(open){this.open=open;
if(this.open)this.setVisibility(true);
this.startTime=(new Date()).getTime();
this.aniTimer=window.setInterval("slide('"+this.id+"','"+this.parent+"')",slideMenuBar.minCPURes)};


slideMenu.prototype.slide=function(){var elapsed=(new Date()).getTime()-this.startTime;
if(this.open&&this.dirType=="-"){if(elapsed>slideMenuBar.speedOpen){this.endSlide();
return}var accel=(this.outPos-this.homePos)/slideMenuBar.speedOpen/slideMenuBar.speedOpen;
var d=Math.round(Math.pow(slideMenuBar.speedOpen-elapsed,2)*accel);
d=this.outPos-d}else if(!this.open&&this.dirType=="-"){if(elapsed>slideMenuBar.speedClose){this.endSlide();
return}var accel=(this.outPos-this.homePos)/slideMenuBar.speedClose/slideMenuBar.speedClose;
var d=Math.round(Math.pow(slideMenuBar.speedClose-elapsed,2)*accel);
d=this.homePos+d}this.moveTo(d)};


slideMenu.prototype.endSlide=function(){this.aniTimer=window.clearInterval(this.aniTimer);
if(!this.open)this.setVisibility(false);
this.moveTo(this.open?this.outPos:this.homePos);
if((this.open&&!this.over)||(!this.open&&this.over)){this.startSlide(this.over)}};


slideMenu.prototype.hide=function(){if(!this.aniTimer)this.startSlide(false)};


slideMenu.prototype.moveTo=function(p){this.node.style.top=p+"px";
var clipT=-p+this.outPos;
var clipR=this.node.style.width;
this.node.style.clip="rect("+clipT+"px auto auto 0)"};


slide=function(id,parent){var menus=(hybridMenuBar.Registry[parent]).getMenus();
var menu=menus[id];
menu.slide()};

// initShowHideDivs is for the faq-style stuff seen in the Rush Tips. It must be initialized here.
function addLoadEvent(func){var oldonload=window.onload;
if(typeof window.onload!='function'){window.onload=func}else{window.onload=function(){oldonload();
func()}}}addLoadEvent(function(){new hybridMenuBar("slidemenu");initShowHideDivs();});
