  function circleScroll(blk,spd,intv,sens,res) {
    if (!blk) return;
    window.clearInterval(blk.circleScrollIntv);
    circleScrollReset(blk);
    blk.scrollLeft=0;
    blk.scrollTop=0;
    if (!intv) intv=20;
    if (res==null) res=6;
    if (sens==null) sens=0.04;
    if (!spd) return;
    blk.circleScrollSpeed={x:spd,y:spd};
    blk.circleScrollAcc={x:0,y:0};
    blk.circleScrollIntv=window.setInterval(function() {
      var left=null;
      var right=null;
      var top=null;
      var bottom=null;
      for (var e=blk.firstChild;e;e=e.nextSibling) if (e.tagName=='DIV') {
        if (!left || left.offsetLeft>e.offsetLeft) left=e;
        if (!right || right.offsetLeft<e.offsetLeft) right=e;
        if (!top || top.offsetTop>e.offsetTop) top=e;
        if (!bottom || bottom.offsetTop<e.offsetTop) bottom=e;
      }
      if (!left) return;
      var accx;
      var accy;
      var adjx=(right.offsetLeft+right.offsetWidth*2-left.offsetLeft)/blk.offsetWidth-1;
      var adjy=(bottom.offsetTop+bottom.offsetHeight*2-top.offsetTop)/blk.offsetHeight-1;
      if (blk.circleScrollReachF) {
        accx=blk.circleScrollReach.x*adjx-blk.circleScrollSpeed.x*res;
        accy=blk.circleScrollReach.y*adjy-blk.circleScrollSpeed.y*res;
      } else {
        accx=((blk.circleScrollSpeed.x>0?1:-1)*Math.abs(spd)-blk.circleScrollSpeed.x);
        accy=((blk.circleScrollSpeed.y>0?1:-1)*Math.abs(spd)-blk.circleScrollSpeed.y);
      }
      blk.circleScrollSpeed.x+=accx*sens;
      blk.circleScrollSpeed.y+=accy*sens;
      blk.circleScrollAcc.x+=blk.circleScrollSpeed.x;
      blk.circleScrollAcc.y+=blk.circleScrollSpeed.y;
      var sx=Math.round(blk.circleScrollAcc.x);
      var sy=Math.round(blk.circleScrollAcc.y);
      blk.scrollLeft+=sx;
      blk.scrollTop+=sy;
      blk.circleScrollAcc.x-=sx;
      blk.circleScrollAcc.y-=sy;
      if (blk.circleScrollReach) {
        blk.circleScrollReach.x-=blk.circleScrollSpeed.x/adjx;
        blk.circleScrollReach.y-=blk.circleScrollSpeed.y/adjy;
      }
      var x=blk.scrollLeft;
      var y=blk.scrollTop;

      if (blk.scrollWidth>blk.offsetWidth) {
        if (blk.circleScrollSpeed.x>=0) {
          if (left.offsetLeft+left.offsetWidth<x) left.style.left=(right.offsetLeft+right.offsetWidth)+'px';
        } else {
          if (left.offsetLeft>=x) right.style.left=(left.offsetLeft-right.offsetWidth)+'px';
          if (x<=0) {
            var d=10000;
            for (var e=blk.firstChild;e;e=e.nextSibling) if (e.tagName=='DIV') e.style.left=(e.offsetLeft+d)+'px';
            blk.scrollLeft=d;
          }
        }
      }

      if (blk.scrollHeight>blk.offsetHeight) {
        if (blk.circleScrollSpeed.y>=0) {
          if (top.offsetTop+top.offsetHeight<y) top.style.top=(bottom.offsetTop+bottom.offsetHeight)+'px';
        } else {
          if (top.offsetTop>=y) bottom.style.top=(top.offsetTop-bottom.offsetHeight)+'px';
          if (y<=0) {
            var d=10000;
            for (var e=blk.firstChild;e;e=e.nextSibling) if (e.tagName=='DIV') e.style.top=(e.offsetTop+d)+'px';
            blk.scrollTop=d;
          }
        }
      }

/*
      for (var e=blk.firstChild;e;e=e.nextSibling) if (e.offsetLeft+e.offsetWidth<x) {
        var xr=0;
        for (var er=blk.firstChild;er;er=er.nextSibling) if (er.offsetLeft+er.offsetWidth>xr) xr=er.offsetLeft+er.offsetWidth;
        e.style.left=xr+'px';
        break;
      }
*/
    },intv);
  }
  function circleScrollMove(blk,event,sens) {
    if (!sens) sens=1;
    if (event) {
      blk.circleScrollReachF=true;
      if (blk.circleScrollReach==null) blk.circleScrollReach={x:0,y:0};
      if (blk.circleScrollLast!=null) {
        blk.circleScrollReach.x+=(event.clientX-blk.circleScrollLast.x)*sens;
        blk.circleScrollReach.y+=(event.clientY-blk.circleScrollLast.y)*sens;
      }
      blk.circleScrollLast={x:event.clientX,y:event.clientY};
      window.clearTimeout(blk.circleScrollOffTm);
    } else {
      blk.circleScrollReachF=false;
      blk.circleScrollOffTm=window.setTimeout(function() {
        circleScrollReset(blk);
      },500);
    }
  }
  function circleScrollReset(blk) {
    blk.circleScrollReachF=false;
    blk.circleScrollLast=null;
    blk.circleScrollReach=null;
  }
