/****************************************************** ypSlideOutMenu* 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... ** --youngpup--*****************************************************/ypSlideOutMenu.Registry = []ypSlideOutMenu.aniLen = 200ypSlideOutMenu.hideDelay = 500ypSlideOutMenu.minCPUResolution = 10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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this.gRef = "ypSlideOutMenu_"+ideval(this.gRef+"=this")ypSlideOutMenu.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('clip:rect(0 ' + width + ' ' + height + ' 0); ')d.write('}')d.write('</style>')this.load()}}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 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 + "')")this.endSlide()}}ypSlideOutMenu.showMenu = function(id){var reg = ypSlideOutMenu.Registryvar obj = ypSlideOutMenu.Registry[id]if (obj.container) {obj.over = truefor (menu in reg) if (id != menu) ypSlideOutMenu.hide(menu)if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }if (!obj.open && !obj.aniTimer) reg[id].startSlide(true)}}ypSlideOutMenu.hideMenu = function(id){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.hide = function(id){var obj = ypSlideOutMenu.Registry[id]obj.over = falseif (obj.hideTimer) window.clearTimeout(obj.hideTimer)obj.hideTimer = 0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])}ypSlideOutMenu.prototype.onactivate = function() { }ypSlideOutMenu.prototype.ondeactivate = function() { }	var menus = [		new ypSlideOutMenu("menu1", "right", 120, 145, 150, 59),		new ypSlideOutMenu("menu2", "right", 120, 153, 150, 30),		new ypSlideOutMenu("menu3", "right", 120, 175, 150, 20),		new ypSlideOutMenu("menu4", "right", 120, 197, 150, 70),		new ypSlideOutMenu("menu5", "right", 120, 225, 150, 110),		new ypSlideOutMenu("menu6", "right", 120, 250, 150, 70),		new ypSlideOutMenu("menu7", "right", 120, 264, 150, 20),		new ypSlideOutMenu("menu8", "right", 120, 298, 150, 70),		new ypSlideOutMenu("menu9", "right", 120, 320, 150, 100),		new ypSlideOutMenu("menu10", "right", 120, 342, 150, 110),		new ypSlideOutMenu("menu11", "right", 120, 302, 150, 20)			]	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='';");	}