// the following found at http://www.sitepoint.com/article/scroll-smoothly-javascript/
// see comments!
function ss_fixAllLinks() {
	if(isSafari) return;
	// 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 lnk = allLinks[i]; 
   		if ((lnk.href && lnk.href.indexOf('#') != -1) && ( (lnk.pathname == location.pathname) || 
  				 ('/'+lnk.pathname == location.pathname) ) && (lnk.search == location.search)) { 
     		// If the link is internal to the page (begins in #) 
     		// then attach the smoothScroll function as an onclick 
     		// event handler 
     		addEvent(lnk,'click',smoothScroll); 
   		} 
 	} 
} 

function smoothScroll(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.nodeType == 3) { 
   		target = target.parentNode; 
 	} 
  	// Paranoia; check this is an A tag 
 	if (target.nodeName.toLowerCase() != 'a') return; 
  	// Find the <a name> tag corresponding to this href 
 	// First strip off the hash (first character) 
 	anchor = target.hash.substr(1);
 	// see comments on sitepoint website
	destinationLink = getObjById(anchor);
  	// 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); 
  	cypos = ss_getCurrentYPos(); 
  	ss_stepsize = parseInt((desty-cypos)/ss_STEPS); 
 	ss_INTERVAL = setInterval('ss_scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',30); 
  
 	// 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 getObjById(name) {
	if (document.getElementById) {
		this.obj = document.getElementById(name); 
	} else if (document.all) { 
		this.obj = document.all; 
	} else if (document.layers) {
	this.obj = document.layers; 
	}
	return this.obj; 
}

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; 
}

var ss_INTERVAL;
var ss_STEPS = 25;

var ss_INTERVAL;
var ss_STEPS = 25;

addEvent(window,'load',ss_fixAllLinks);