if (!window.Scrollers)
    Scrollers = new Object();

Scrollers.Methods = {

    scrollers: [],

    add: function(id,options){
       
        this.scrollers[id] = options;
        this.scrollers[id].currentPosition = 0;

        //setup arrows
        if (this.scrollers[id].arrowUp){
            Element.observe(Scrollers.scrollers[id].arrowUp,'click',function(event){
                Scrollers.move(id,-Scrollers.scrollers[id].scrollAmount);
            });
        }
        if (this.scrollers[id].arrowDown){
            Element.observe(Scrollers.scrollers[id].arrowDown,'click',function(event){
                 Scrollers.move(id,Scrollers.scrollers[id].scrollAmount);
            });
        }

        //hide if no scroll needed
        this.checkScrollBars(id);

        //fix height/width bug
        
        /*$(this.scrollers[id].scroller).style.height = $(this.scrollers[id].scroller).getHeight() + 'px';
        $(this.scrollers[id].scroller).style.width = $(this.scrollers[id].scroller).getWidth() + 'px';
        $(this.scrollers[id].scrollBar).style.height = $(this.scrollers[id].scrollBar).getHeight() + 'px';
        $(this.scrollers[id].scrollBar).style.width = $(this.scrollers[id].scrollBar).getWidth() + 'px';*/

        //setup slider
        this.scrollers[id].slider = new Control.Slider(this.scrollers[id].scrollBar,this.scrollers[id].scroller ,{
            axis: this.scrollers[id].direction,
            onSlide: function(v) {
                Scrollers.scroll(id,v);
            },
            onChange: function(v) {
                Scrollers.scroll(id,v);
            }
        });
    },

    scroll:function(id,value){

        this.scrollers[id].currentPosition = value;
        
        if (this.scrollers[id].direction == 'vertical'){
            this.scrollVertical(id,value);
        }
        else this.scrollHorizontal(id,value);
    },

    scrollHorizontal:function(id,value){
        var element = $(this.scrollers[id].container);
        var slider = this.scrollers[id].slider;
        
        element.scrollLeft  = Math.round(value/slider.maximum*(element.scrollWidth-element.offsetWidth));
    },

    scrollVertical:function(id,value){
        var element = $(this.scrollers[id].container);
        var slider = this.scrollers[id].slider;

        //alert("value:" + value);
        element.scrollTop  = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
    },

    move:function(id,amount){
        this.scrollers[id].slider.setValue(this.scrollers[id].currentPosition + amount);
    },

    resizeScrollBars:function(id,height){
        $(this.scrollers[id].scroller).style.height = height + 'px';
    },

    remove:function(id){
      this.scrollers[id].slider.dispose();
      this.scrollers[id] = null;
    },

    checkScrollBars:function(id){

        if (this.scrollers[id].hideOnEmpty){

            if (this.scrollers[id].direction == 'vertical'){
            	
                if ($(this.scrollers[id].container).scrollHeight <= $(this.scrollers[id].container).offsetHeight) {
                    $(this.scrollers[id].scrollBarContainer).hide();
                }
                else  $(this.scrollers[id].scrollBarContainer).show();

            }
            else {
               
               if ($(this.scrollers[id].container).scrollWidth <= $(this.scrollers[id].container).offsetWidth) {
                    $(this.scrollers[id].scrollBarContainer).hide();
                }
                else $(this.scrollers[id].scrollBarContainer).show();
            }

        }
    }
}

Object.extend(Scrollers, Scrollers.Methods);
