
var fd = new Object();
fd.onLoad = function(e) {
        for(var module in this) {
                if(this[module].onLoad) this[module].onLoad();
        }
}

fd.getDocumentHeight = function(){ return (document.height) ? document.height : (document.body.offsetHeight) ? document.body.offsetHeight : 0; }

fd.getWindowHeight = function(){
	var myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) { myHeight = window.innerHeight; } //Non-IE 
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { myHeight = document.documentElement.clientHeight; } //IE 6+ in 'standards compliant mode'
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { myHeight = document.body.clientHeight; } //IE 4 compatible 
	return myHeight;
}

fd.getScrollLeft = function() {
        if(document.all) return (document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
        else return window.pageXOffset;
}

fd.getScrollTop = function(){
        if(document.all) return (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
        else return window.pageYOffset;
}

fd.getElementYpos = function(el){
        var y = 0;
        while(el.offsetParent){
                y += el.offsetTop
                el = el.offsetParent;
        }
        return y;
}

fd.pageScroller = {
        speed : 20,
        maxStep: 60,
        brakeK: 3,
        hash:null,
        currentBlock:null,
        requestedY:0,
        
        onLoad: 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.className.search('no-scroll') == -1) lnk.onclick = fd.pageScroller.initScroll;
						else if (lnk.name && !lnk.href) lnk.setAttribute('id', 'ancre_'+lnk.name); // ancre
                }
        },
        initScroll: function(e){
                var targ;
                if (!e) var e = window.event;
                if (e.target) targ = e.target;
                else if (e.srcElement) targ = e.srcElement;
                // Added by f.d: make sure we actually have the A node and a child tag like span or img
                while(targ.tagName.toUpperCase() != "A" && targ.parentNode) targ = targ.parentNode;
                
                fd.pageScroller.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length);
                fd.pageScroller.currentBlock = document.getElementById('ancre_'+fd.pageScroller.hash);

                if(!fd.pageScroller.currentBlock) return;
                fd.pageScroller.requestedY = fd.getElementYpos(fd.pageScroller.currentBlock) - 30;
                /*@cc_on@*/
                /*@if(@_jscript_version < 6)
                        fd.pageScroller.requestedY += 30;
                /*@end@*/
                if(fd.pageScroller.requestedY < 0) fd.pageScroller.requestedY = 0;

                fd.pageScroller.scroll();
                return false;
        },
        scroll: function(){
                var top  = fd.getScrollTop();

                if(fd.pageScroller.requestedY > top) {
                        var endDistance = Math.round((fd.getDocumentHeight() - (top + fd.getWindowHeight())) / fd.pageScroller.brakeK);
                        endDistance = Math.min(Math.round((fd.pageScroller.requestedY-top)/ fd.pageScroller.brakeK), endDistance);
                        var offset = Math.max(2, Math.min(endDistance, fd.pageScroller.maxStep));
                } else {
                        var offset = - Math.min(Math.abs(Math.round((fd.pageScroller.requestedY-top)/ fd.pageScroller.brakeK)), fd.pageScroller.maxStep);
                }
                window.scrollTo(0, top + offset);
                if(Math.abs(top-fd.pageScroller.requestedY) <= 1 || fd.getScrollTop() == top) {
                        window.scrollTo(0, fd.pageScroller.requestedY);
                        //if(!document.all || window.opera) location.hash = fd.pageScroller.hash;
                        //fd.pageScroller.hash = null;
                } else {
                        setTimeout(fd.pageScroller.scroll,fd.pageScroller.speed);
                }
        }
}


function goToAncre(fd, id_ancre)
{
		fd.pageScroller.currentBlock = document.getElementById(id_ancre);
		if(!fd.pageScroller.currentBlock) return;
		fd.pageScroller.requestedY = fd.getElementYpos(fd.pageScroller.currentBlock) - 60;
		/*@cc_on@*/
		/*@if(@_jscript_version < 6)
				fd.pageScroller.requestedY += 30;
		/*@end@*/
		if(fd.pageScroller.requestedY < 0) fd.pageScroller.requestedY = 0;
		fd.pageScroller.scroll();
		return false;
}