var ssOgn={
	fixAllLinks: function(){
		var allLinks=document.getElementsByTagName('a');
		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)){
				ssOgn.addEvent(lnk,'click',ssOgn.smoothScroll);
			}
		}
	},
	smoothScroll: function(e){
		if(window.event){
			target=window.event.srcElement;
		} else if(e){
			target=e.target;
		} else return;
		if(target.nodeName.toLowerCase()!='a'){
			target=target.parentNode;
		}
		if(target.nodeName.toLowerCase()!='a')return;
		target.style.color = "#555555";
		anchor=target.hash.substr(1);
		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(!destinationLink)destinationLink=document.getElementById(anchor);
		if(!destinationLink)return true;
		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;
		}
		clearInterval(ssOgn.INTERVAL);
		cypos=ssOgn.getCurrentYPos();
		ss_stepsize=parseInt((desty-cypos)/ssOgn.EasingSteps);
		ssOgn.INTERVAL=setInterval('ssOgn.scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);
		if(window.event){
			window.event.cancelBubble=true;
			window.event.returnValue=false;
		}
		if(e && e.preventDefault && e.stopPropagation){
			e.preventDefault();
			e.stopPropagation();
		}
	},
	scrollWindow: function(scramount,dest,anchor){
		wascypos=ssOgn.getCurrentYPos();
		isAbove=(wascypos < dest);
		var easingPar;
		if (ssOgn.EasingPercentage <= 0) {
			easingPar=0;
		} else if (ssOgn.EasingPercentage >= 100) {
			easingPar=1;
		} else {
			easingPar=ssOgn.EasingPercentage/100;
		}
		if (isAbove) {
			if (1-(wascypos/dest)<(easingPar)) {
				scramount=scramount-(scramount*(wascypos/dest))+1;
			}
		} else {
			if (wascypos/(scramount*ssOgn.EasingSteps*-1)<easingPar) {
				scramount=scramount-(scramount*(1-(wascypos/(scramount*ssOgn.EasingSteps*-1))))-1;
			}
		}
		window.scrollTo(0,wascypos + scramount);
		iscypos=ssOgn.getCurrentYPos();
		isAboveNow=(iscypos < dest);
		if((isAbove!=isAboveNow)||(wascypos==iscypos)){
			window.scrollTo(0,dest);
			clearInterval(ssOgn.INTERVAL);
			location.hash=anchor;
		}
	},
	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){
		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");
		}
	}
}

/* easing setting */
ssOgn.EasingSteps=20;
ssOgn.EasingPercentage=50;

ssOgn.addEvent(window,"load",ssOgn.fixAllLinks);