/*Original Version:www.kryogenix.orgXHTML Adaptation:www.sonspring.com*/var ss = {	fixAllLinks: function() {		// Get a list of all links in the page		var allLinks = document.getElementsByTagName('a');		// Walk through the list		for (var i = 0; i < allLinks.length; i++) {			var thisLink = allLinks[i];			if ((thisLink.href && thisLink.href.indexOf('#') != -1) &&			((thisLink.pathname == location.pathname) ||			('/' + thisLink.pathname == location.pathname) ) &&			(thisLink.search == location.search)) {				// If the link is internal to the page (begins in #)				// then attach the smoothScroll function as an onclick				// event handler				ss.addEvent(thisLink, 'click', ss.smoothScroll);			}		}	},	smoothScroll: function(e) {		// This is an event handler; get the clicked on element,		// in a cross-browser fashion		if (window.event) {			target = window.event.srcElement;		} else if (e) {			target = e.target;		} else return;		// Make sure that the target is an element, not a text node		// within an element		if (target.nodeName.toLowerCase() != 'a') {			target = target.parentNode;		}		// Paranoia; check this is an A tag		if (target.nodeName.toLowerCase() != 'a') return;		// Find the ID corresponding to this href		// First strip off the hash (first character)		anchor = target.hash.substr(1);		// Now loop all tags until we find one with that name		var allLinks = document.getElementsByTagName('img');		var destinationLink = null;		for (var i = 0; i < allLinks.length; i++) {			var thisLink = allLinks[i];			if (thisLink.id && (thisLink.id == anchor)) {				destinationLink = thisLink;				break;			}		}		// If we didn't find a destination, give up and let the browser do its thing		if (!destinationLink) return true;		// Find the destination's position		var destX = destinationLink.offsetLeft;		var destY = destinationLink.offsetTop;		var thisNode = destinationLink;		while (thisNode.offsetParent && (thisNode.offsetParent != document.body)) {			thisNode = thisNode.offsetParent;			destX += thisNode.offsetLeft;			destY += thisNode.offsetTop;		}		// Stop any current scrolling		clearInterval(ss.INTERVAL);		// Get current position of the page		curPositionX = ss.getCurrentXPos();		// Set stepsize		ss_stepsize = parseInt((destX - curPositionX) / ss.STEPS);		// Make interval function call		ss.INTERVAL = setInterval('ss.scrollWindowX(' + ss_stepsize + ',' + destX + ',"' + anchor + '")',5);		// And stop the actual click happening		if (window.event) {			window.event.cancelBubble = true;			window.event.returnValue = false;		}		if (e && e.preventDefault && e.stopPropagation) {			e.preventDefault();			e.stopPropagation();		}	},	scrollWindowX: function(scrollAmount, dest, anchor) {		oldXPosition = ss.getCurrentXPos();		isAbove = (oldXPosition < dest);		window.scrollTo(oldXPosition + scrollAmount, 0);		newXPosition = ss.getCurrentXPos();		isAboveNow = (newXPosition < dest);		if ((isAbove != isAboveNow) || (oldXPosition == newXPosition)) {			// if we've just scrolled past the destination, or			// we haven't moved from the last scroll (i.e., we're at the			// bottom of the page) then scroll exactly to the link			window.scrollTo(dest, 0);			// cancel the repeating timer			clearInterval(ss.INTERVAL);			// and jump to the link directly so the URL's right			// location.hash = anchor;		}	},	scrollWindowY: function(scrollAmount, dest, anchor) {		oldYPosition = ss.getCurrentYPos();		isAbove = (oldYPosition < dest);		window.scrollTo(0, oldYPosition + scrollAmount);		newYPosition = ss.getCurrentYPos();		isAboveNow = (newYPosition < dest);		if ((isAbove != isAboveNow) || (oldYPosition == newYPosition)) {			// if we've just scrolled past the destination, or			// we haven't moved from the last scroll (i.e., we're at the			// bottom of the page) then scroll exactly to the link			window.scrollTo(0, dest);			// cancel the repeating timer			clearInterval(ss.INTERVAL);			// and jump to the link directly so the URL's right			location.hash = anchor;		}	},	getCurrentXPos: function() {		if (document.body && document.body.scrollLeft)			return document.body.scrollLeft;		if (document.documentElement && document.documentElement.scrollLeft)			return document.documentElement.scrollLeft;		if (window.pageXOffset)			return window.pageXOffset;		return 0;	},	getCurrentYPos: function() {	if (document.body && document.body.scrollTop)		return document.body.scrollTop;	if (document.documentElement && document.documentElement.scrollTop)		return document.documentElement.scrollTop;	if (window.pageYOffset)		return window.pageYOffset;	return 0;	},	addEvent: function(elm, evType, fn, useCapture) {		// addEvent and removeEvent		// cross-browser event handling for IE5+,  NS6 and Mozilla		// By Scott Andrew		if (elm.addEventListener){			elm.addEventListener(evType, fn, useCapture);			return true;		} else if (elm.attachEvent){			var r = elm.attachEvent("on"+evType, fn);			return r;		} else {			alert("Handler could not be removed");		}	}}ss.STEPS = 25;ss.addEvent(window,"load",ss.fixAllLinks);