// ------------------------------------
//  Smooth Scroller 設定
// ------------------------------------

Scroller = {
    // control the speed of the scroller.
    // dont change it here directly, please use Scroller.speed=50;
    speed:10,

    // returns the Y position of the div
    gy: function (d) {
        gy = d.offsetTop
        if (d.offsetParent) while (d = d.offsetParent) gy += d.offsetTop
        return gy
    },

    // returns the current scroll position
    scrollTop: function (){
        body=document.body
        d=document.documentElement
        if (body && body.scrollTop) return body.scrollTop
        if (d && d.scrollTop) return d.scrollTop
        if (window.pageYOffset) return window.pageYOffset
        return 0
    },

    // attach an event for an element
    // (element, type, function)
    add: function(event, body, d) {
        if (event.addEventListener) return event.addEventListener(body, d,false)
        if (event.attachEvent) return event.attachEvent('on'+body, d)
    },

    // kill an event of an element
    end: function(e){
        if (window.event) {
            window.event.cancelBubble = true
            window.event.returnValue = false
              return;
        }
        if (e.preventDefault && e.stopPropagation) {
          e.preventDefault()
          e.stopPropagation()
        }
    },
    
    // move the scroll bar to the particular div.
    scroll: function(d){
        i = window.innerHeight || document.documentElement.clientHeight;
        h=document.body.scrollHeight;
        a = Scroller.scrollTop()
        if(d>a)
            if(h-d>i)
                a+=Math.ceil((d-a)/Scroller.speed)
            else
                a+=Math.ceil((d-a-(h-d))/Scroller.speed)
        else
            a = a+(d-a)/Scroller.speed;
        window.scrollTo(0,a)
          if(a==d || Scroller.offsetTop==a)clearInterval(Scroller.interval)
          Scroller.offsetTop=a
    },
    // initializer that adds the renderer to the onload function of the window
    init: function(){
        Scroller.add(window,'load', Scroller.render)
    },

    // this method extracts all the anchors and validates then as # and attaches the events.
    render: function(){
        a = document.getElementsByTagName('a');
        Scroller.end(this);
        window.onscroll
        for (i=0;i<a.length;i++) {
          l = a[i];
          if(l.href && l.href.indexOf('#') != -1 && ((l.pathname==location.pathname) || ('/'+l.pathname==location.pathname)) ){
              Scroller.add(l,'click',Scroller.end)
                  l.onclick = function(){
                      Scroller.end(this);
                    l=this.hash.substr(1);
                     d = document.getElementsByTagName('div');
                     for (i=0;i<d.length;i++) {
                         if(d[i].id == l){
                             clearInterval(Scroller.interval);
                             Scroller.interval=setInterval('Scroller.scroll('+Scroller.gy(d[i])+')',10);
                        }
                    }
                }
              }
        }
    }
}
// invoke the initializer of the scroller
Scroller.init();
