var hslider = new Control.Slider('hhandle', 'htrack', {
  onSlide: function(v) { scrollHorizontal(v, $('textcontent'), hslider);  },
  onChange: function(v) { scrollHorizontal(v, $('textcontent'), hslider); }
});

var vslider = new Control.Slider('vhandle', 'vtrack', {
  axis: 'vertical',
  range: $R(0,vsliderrange),
  values: vslidervalues,
  onSlide: function(v) { scrollVertical(v, $('textcontent'), vslider);  },
  onChange: function(v) { scrollVertical(v, $('textcontent'), vslider); }
});

function scrollHorizontal(value, element, slider) {
  element.scrollLeft = Math.round(value/slider.maximum*(element.scrollWidth-element.offsetWidth));
}
function scrollVertical(value, element, slider) {
  element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
}

if ($('textcontent').scrollWidth <= $('textcontent').offsetWidth) {
  hslider.setDisabled();
}
else {
  $('hslider').show();
}
if ($('textcontent').scrollHeight <= $('textcontent').offsetHeight) {
  vslider.setDisabled();
}
else {
  $('vslider').setStyle({'visibility':'visible'});
}

// mouse wheel code from http://adomas.org/javascript-mouse-wheel/
function handle(delta) {
  vslider.setValueBy(-delta);
}

function wheel(event){
  var delta = 0;
  if (!event)
    event = window.event;
  if (event.wheelDelta) {
    delta = event.wheelDelta/120;
    if (window.opera)
      delta = -delta;
  } else if (event.detail) {
    delta = -event.detail/3;
  }

  if (delta)
    handle(delta);

  if (event.preventDefault)
    event.preventDefault();

  event.returnValue = false;
}
Event.observe('textcontent', 'DOMMouseScroll', wheel);
Event.observe('textcontent', 'mousewheel', wheel);
Event.observe('vtrack', 'DOMMouseScroll', wheel);
Event.observe('vtrack', 'mousewheel', wheel);
