  function report(text) {
    document.getElementById('report').innerHTML = text;
  }

  function startDragScroll(e) {
    var temp;
    try{e.preventDefault();}catch(err){e.returnValue=false;}
    temp = findPosY(scrollB);
    seekRelative = e.clientY - temp;
    dragSeek = 1;
    scrollB.style.backgroundColor = '#666';

    try {
      document.addEventListener('mousemove', updateDragScroll, false);
      document.addEventListener('mouseup', endDrag, false);
    } catch(err) {
      documentBody.attachEvent('onmousemove', updateDragScroll);
      documentBody.attachEvent('onmouseup', endDrag);
    }
  }

  function endDrag() {
    seekRelative = 0;
    dragSeek = 0;
    scrollB.style.backgroundColor = '#444';
    try {
      document.removeEventListener('mousemove', updateDragScroll, false);
      document.removeEventListener('mouseup', endDrag, false);
    } catch(err) {
      documentBody.detachEvent('onmousemove', updateDragScroll);
      documentBody.detachEvent('onmouseup', endDrag);
    }
  }

  function quickSeekScroll(e) {
    try{e.preventDefault();}catch(err){e.returnValue=false;}
    locs = findPosY(playlistScrollerBar);
    y = e.clientY - locs - (scrollH/2);
    if (y < 0) { y = 0; }
    if (y >= 187 - scrollH) {
      y = (187 - scrollH);
    }
    scrollB.style.top = y + 'px';

    var end = playlistDiv.lastChild;
    var i = - (y / (186 - scrollH)) * (end.offsetTop - 215);
    playlistDiv.style.top = i + 'px';
  }

  function updateDragScroll(e) {
    try{e.preventDefault();}catch(err){e.returnValue=false;}
    if (!dragSeek) { return; }
    locs = findPosY(playlistScrollerBar);
    y = e.clientY - locs - seekRelative;
    if (y < 0) y = 0;
    if (y >= 186 - scrollH) y = (186 - scrollH);
    var end = playlistDiv.lastChild;
    var i = - (y / (186 - scrollH)) * (end.offsetTop - 215);
    playlistDiv.style.top = i + 'px';
    if (!y) y++;
    if (y >= 186 - scrollH) y = 187 - scrollH;
    scrollB.style.top = y + 'px';
  }

  function startScroll(dir,obj) {
    var scroll = document.getElementById('playlist');
    var scrollbar = document.getElementById('playlistScrollbar');

  if (dir == 'up') {
      var interval = setInterval(function() {doScrollUp(scroll,scrollbar);}, 60);
    } else if (dir == 'down') {
      var interval = setInterval(function() {doScrollDown(scroll,scrollbar);}, 60);
    }
    call = 'endScroll(' + interval + ');';
    document["onmouseup"] = new Function(call);
  }

  function endScroll(interval) {
    clearInterval(interval);
    document["onmouseup"] = '';
  }

  function doScrollUp(scroll, scrollbar) {
    var end = scroll.lastChild;
    var i = parseInt(scroll.style.top.split('p')[0]) + 20;
    if (i < 0) {
      scroll.style.top = i + 'px';
      scrollbar.style.top = Math.floor((-(i/(end.offsetTop - 230)) * (186 - scrollH))) + 'px';
    } else {
      scrollbar.style.top = '1px';
      scroll.style.top = '0px';
    }
  }

  function doScrollDown(scroll, scrollbar) {
    var end = scroll.lastChild;
    var i = scroll.style.top.split('p')[0] - 20;
    if (end.offsetTop + i > 215) {
      scroll.style.top = i + 'px';
      var j = Math.floor((-(i/(end.offsetTop - 230)) * (186 - scrollH)));
      if (j > 187 - scrollH) {
        j = 186 - scrollH;
      }
      scrollbar.style.top = j + 'px';
    } else {
      scrollbar.style.top = Math.floor((187 - scrollH)) + 'px';
      scroll.style.top = -(end.offsetTop - 215) + 'px';
    }
  }

  function createScrollBar() {
    var scrollBarOuter = playlistScrollerBar;
    var scrollbar = document.createElement('div');
    var percentDisplay = 215 / document.getElementById('playlistScrollerEnd').offsetTop;

    if (percentDisplay >= 1) {
      document.getElementById('playlistScroller').style.visibility = 'hidden';
      return;
    }
    scrollbar.setAttribute('id', 'playlistScrollbar');
    try {
      scrollbar.addEventListener('mousedown', startDragScroll, false);
    } catch(err) {
      scrollbar.attachEvent('onmousedown', startDragScroll);
    }

    scrollH = Math.floor(186 * percentDisplay);
    scrollbar.style.height = scrollH + 'px';
    scrollbar.style.marginLeft = '1px';
    scrollbar.style.width = '10px';
    scrollbar.style.backgroundColor = '#444';
    scrollbar.style.position = 'relative';
    scrollbar.style.top = '1px';
    scrollB = scrollbar;
    scrollBarOuter.appendChild(scrollbar);
    scrollB["onclick"] = function () { canQuickSeek = 0; }
  }
