var xcib_scrollToTop = function (el){
  var handler = $(el).getParent('.scroller');
  var content = handler.getElement('.scroller-content');
  var fx = new Fx.Scroll(content);
  fx.set(0,0);
}

var xcib_scrollTo = function (el, target){
  var handler = $(el).getParent('.scroller');
  var content = handler.getElement('.scroller-content');
  var fx = new Fx.Scroll(content);
  if($(target)){
    fx.set(0,$(target).getCoordinates(content).top);
  }
}

window.addEvent('domready', function(){
  new XCIB_scroller($$('.scroller'), {
    step: 2,
    delay: 10,
    stepBlock: 40
  });
});

var XCIB_scroller = new Class({
  Implements: [Options],
  
  options: {
    step: 1,
    stepBlock: 30,
    delay: 10,
    classPrefix: 'scroller'
  },
  
  initialize: function(handlers, options){
    this.setOptions(options);
    if(handlers){
      handlers.each((function(handler, idx){
        var content = handler.getElement('.'+this.options.classPrefix+'-content');
        var up = handler.getElement('.'+this.options.classPrefix+'-up');
        var down = handler.getElement('.'+this.options.classPrefix+'-down');
        if(content && up && down && content.getSize().y < content.getScrollSize().y){
          up.setStyle('display', '');
          down.setStyle('display', '');
          var delay = this.options.delay;
          var step = this.options.step;
          var stepBlock = this.options.stepBlock;
          var fx = new Fx.Scroll(content);
          var interval = null;
          up.addEvent('mouseenter', function(){
            interval = (function(){fx.set(0, content.getScroll().y-step);}).periodical(delay);
          });
          up.addEvent('mouseleave', function(){
            $clear(interval);
          });
          up.addEvent('click', function(){
            fx.set(0, content.getScroll().y-stepBlock);
          });
          down.addEvent('mouseenter', function(){
            interval = (function(){fx.set(0, content.getScroll().y+step);}).periodical(delay);
          });
          down.addEvent('mouseleave', function(){
            $clear(interval);
          });
          down.addEvent('click', function(){
            fx.set(0, content.getScroll().y+stepBlock);
          });
          content.addEvent('mousewheel', function(e){
            e.stop();
            if (e.wheel < 0){
              fx.set(0, content.getScroll().y+stepBlock);
            } else {
              fx.set(0, content.getScroll().y-stepBlock);
            }
          });
        }
      }).bind(this));
    }
  }
});
