//scroll

window.onload = function() {
	scrolling.init();
	}

var scrolling = {
	speed : 50,      //set here the scroll speed: when this value increase, the speed decrease. 
	maxStep: 150,	 //set here the "uniform motion" step for long distances
	brakeK: 3,		 //set here the coefficient of slowing down
	hash:null,		
	currentBlock:null,
	requestedY:0,
	init: function() {
			var lnks = document.getElementsByTagName('a');
			for(var i = 0, lnk; lnk = lnks[i]; i++) {
				if ((lnk.href && lnk.href.indexOf('#') != -1) &&  ( (lnk.pathname == location.pathname) ||
				('/'+lnk.pathname == location.pathname) ) && (lnk.search == location.search)) {
				lnk.onclick = scrolling.initScroll;
				}
			}
	},
	getElementYpos: function(el){
			var y = 0;
			while(el.offsetParent){
				y += el.offsetTop
				el = el.offsetParent;
			}	return y;
	},		
	getScrollTop: function(){
			var yScroll;
			if(document.all) 
			
			yScroll= (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
			else yScroll= window.pageYOffset;
			return yScroll + 0;
	},	
	getWindowHeight: function(){
			if (window.innerHeight)	return window.innerHeight;
			if(document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight;
	},
	getDocumentHeight: function(){
			if (document.height) return document.height;
			if(document.body.offsetHeight) return document.body.offsetHeight;
	},
	initScroll: function(e){
			var targ;  
			if (!e) var e = window.event;
			if (e.target) targ = e.target;
			else if (e.srcElement) targ = e.srcElement;
			scrolling.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length);
			scrolling.currentBlock = document.getElementById(scrolling.hash);
			if(!scrolling.currentBlock) return;
			scrolling.requestedY = scrolling.getElementYpos(scrolling.currentBlock);
			scrolling.scroll();
			return false;
	},
	scroll: function(){
			var top  = scrolling.getScrollTop();
			if(scrolling.requestedY > top) {
				var endDistance = Math.round((scrolling.getDocumentHeight() - (top + scrolling.getWindowHeight())) / scrolling.brakeK);
				endDistance = Math.min(Math.round((scrolling.requestedY-top)/ scrolling.brakeK), endDistance);
				var offset = Math.max(2, Math.min(endDistance, scrolling.maxStep));
			} else { var offset = - Math.min(Math.abs(Math.round((scrolling.requestedY-top)/ scrolling.brakeK)), scrolling.maxStep);
			} window.scrollTo(0, top + offset);  
			if(Math.abs(top-scrolling.requestedY) <= 1 || scrolling.getScrollTop() == top) {
				window.scrollTo(0,scrolling.requestedY);
				if(!document.all || window.opera) location.hash = scrolling.hash;
				scrolling.hash = null;
			} else 	setTimeout(scrolling.scroll,scrolling.speed);
	}		
}