// |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // // Coded by Travis Beckham // http://www.squidfingers.com | http://www.podlob.com // If want to use this code, feel free to do so, but please leave this message intact. // // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // --- version date: 02/04/03 --------------------------------------------------------- /* If you use a DOCTYPE that puts Explorer 6 in standards compliant mode, some properties of document.body are reassigned to document.documentElement. In Explorer 5 the properties still belong to document.body. Checking if the documentElement exists is not enough, since it exists in all W3C DOM compatible browsers, so we also have to see if it has the property we are trying to access. For more info on this topic visit http://www.xs4all.nl/~ppk/js/doctypes.html */ var ScrollWin = { w3c : document.getElementById, iex : document.all, scrollLoop : false, scrollInterval : null, // setInterval id currentBlock : null, // object reference getWindowHeight : function(){ if(this.iex) return (document.documentElement.clientHeight) ? document.documentElement.clientHeight : document.body.clientHeight; else return window.innerHeight; }, getScrollLeft : function(){ if(this.iex) return (document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft; else return window.pageXOffset; }, getScrollTop : function(){ if(this.iex) return (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop; else return window.pageYOffset; }, getElementYpos : function(el){ var y = 0; while(el.offsetParent){ y += el.offsetTop el = el.offsetParent; } return y; }, scroll : function(num){ if(!this.w3c){ location.href = "#"+this.anchorName+num; return; } if(this.scrollLoop){ clearInterval(this.scrollInterval); this.scrollLoop = false; this.scrollInterval = null; } if(this.currentBlock != null) this.currentBlock.className = this.offClassName; this.currentBlock = document.getElementById(this.blockName+num); this.currentBlock.className = this.onClassName; var doc = document.getElementById(this.containerName); var documentHeight = this.getElementYpos(doc) + doc.offsetHeight; var windowHeight = this.getWindowHeight(); var ypos = this.getElementYpos(this.currentBlock); if(ypos > documentHeight - windowHeight) ypos = documentHeight - windowHeight; this.scrollTo(0,ypos); }, scrollTo : function(x,y){ if(this.scrollLoop){ var left = this.getScrollLeft(); var top = this.getScrollTop(); if(Math.abs(left-x) <= 1 && Math.abs(top-y) <= 1){ window.scrollTo(x,y); clearInterval(this.scrollInterval); this.scrollLoop = false; this.scrollInterval = null; }else{ window.scrollTo(left+(x-left)/2, top+(y-top)/2); } }else{ this.scrollInterval = setInterval("ScrollWin.scrollTo("+x+","+y+")",100); this.scrollLoop = true; } } }; // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| /* using the following line, IE/PC returns an incorrect number when getting the document height. var document_height = document.all ? document.body.offsetHeight : window.document.height; To fix this problem, a container div is wrapped around the content so the correct height can be determined. */ // Edit these variables ScrollWin.containerName = "container"; // The id name of the div containing the content ScrollWin.anchorName = "anchor"; // The alpha portion of the anchor names ScrollWin.blockName = "block"; // The alpha portion of the content blocks ScrollWin.onClassName = "active"; // The CSS class name for the 'on' state ScrollWin.offClassName = "visited"; // The CSS class name for the 'off' state // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||