/*
        Based on an original script by Travis Beckham (http://www.squidfingers.com)
        Wrapped into an Object by Brian McAllister (http://www.frequency-decoder.com)
        Further enhancements and bug fixs by Marco Rosella (http://www.centralscrutinizer.it)
*/
fd.pageScroller = {
        speed : 50,
        maxStep: 150,
        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;
                        }
                }
        },
        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(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);
                }
        }
}
/*@cc_on @*/
/*@if (@_win32)
fd.ieSpecific = {
        onDomReady: function() {
                var userComments = document.getElementById("user-comments");
                if(!userComments) return;
                for(var i = 0, node; node = userComments.childNodes[i]; i++) {
                        if(node.tagName && node.tagName.toLowerCase() == 'div') {
                                node.onmouseover = function(e) {
                                        this.className = this.className + " comment-over";
                                }
                                node.onmouseout = function(e) {
                                        this.className = this.className.replace('comment-over', '');
                                }
                        }
                }
        }
}
/*@end @*/