//
// scroll smoothly to the last node clicked
//

function ss_scrollToNode() { smoothScroll('lastnodeclicked') }

function smoothScroll(anchor) {
	// Find the <a name> tag corresponding to the anchor parameter
	var allLinks = document.getElementsByTagName('a');
	var destinationLink = null;
	for (var i=0;i<allLinks.length;i++) {
		var lnk = allLinks[i];
		if (lnk.name && (lnk.name == anchor)) {
			destinationLink = lnk;
			break;
		}
	}
	
	// If we didn't find a destination, give up and let the browser do its things
	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);
	
	cypos = ss_getCurrentYPos();
	
	ss_stepsize = parseInt((desty-cypos)/ss_STEPS, 10);
	ss_INTERVAL = setInterval('ss_scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);
	
	// 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();
	}
}

function ss_scrollWindow(scramount,dest,anchor) {
	wascypos = ss_getCurrentYPos();
	isAbove = (wascypos < dest);
	window.scrollTo(0,wascypos + scramount);
	iscypos = ss_getCurrentYPos();
	isAboveNow = (iscypos < dest);
	if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
		// 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;
	}
}

function ss_getCurrentYPos() {
	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 and removeEvent
//    cross-browser event handling for IE5+, NS6 and Mozilla
//    By Scott Andrew
function ss_addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent){
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else if ( useCapture ) {
		elm["on" + evType] = fn;
	}
}

var ss_INTERVAL;
var ss_STEPS = 25;

ss_addEvent(window,"load",ss_scrollToNode);
