whole_func_string: function _calcScrollToOffset(size, scrollOffset) {
          var scrollToRenderNode = this._scroll.scrollToRenderNode || this._scroll.ensureVisibleRenderNode;
          if (!scrollToRenderNode) {
              return;
          }
  
          // 1. When boundary is reached, stop scrolling in that direction
          if ((this._scroll.boundsReached === Bounds.BOTH) ||
              (!this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.PREV)) ||
              (this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.NEXT))) {
              return;
          }
  
          // 2. Find the node to scroll to
          var foundNode;
          var scrollToOffset = 0;
          var node = this._nodes.getStartEnumNode(true);
          var count = 0;
          while (node) {
              count++;
              if (!node._invalidated || (node.scrollLength === undefined)) {
                  break;
              }
              if (this.options.alignment) {
                  scrollToOffset -= node.scrollLength;
              }
              if (node.renderNode === scrollToRenderNode) {
                  foundNode = node;
                  break;
              }
              if (!this.options.alignment) {
                  scrollToOffset -= node.scrollLength;
              }
              node = node._next;
          }
          if (!foundNode) {
              scrollToOffset = 0;
              node = this._nodes.getStartEnumNode(false);
              while (node) {
                  if (!node._invalidated || (node.scrollLength === undefined)) {
                     break;
                  }
                  if (!this.options.alignment) {
                      scrollToOffset += node.scrollLength;
                  }
                  if (node.renderNode === scrollToRenderNode) {
                      foundNode = node;
                      break;
                  }
                  if (this.options.alignment) {
                      scrollToOffset += node.scrollLength;
                  }
                  node = node._prev;
              }
          }
  
          // 3. Update springs
          if (foundNode) {
              if (this._scroll.ensureVisibleRenderNode) {
                  if (this.options.alignment) {
                      if ((scrollToOffset - foundNode.scrollLength) < 0) {
                          this._scroll.springPosition = scrollToOffset;
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else if (scrollToOffset > size[this._direction]) {
                          this._scroll.springPosition = size[this._direction] - scrollToOffset;
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else {
                          if (!foundNode.trueSizeRequested) {
                              this._scroll.ensureVisibleRenderNode = undefined;
                          }
                      }
                  }
                  else {
                      scrollToOffset = -scrollToOffset;
                      if (scrollToOffset < 0) {
                          this._scroll.springPosition = scrollToOffset;
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else if ((scrollToOffset + foundNode.scrollLength) > size[this._direction]) {
                          this._scroll.springPosition = size[this._direction] - (scrollToOffset + foundNode.scrollLength);
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else {
                          if (!foundNode.trueSizeRequested) {
                            this._scroll.ensureVisibleRenderNode = undefined;
                          }
                      }
                  }
              }
              else { // scrollToSequence
                  this._scroll.springPosition = scrollToOffset;
                  this._scroll.springSource = SpringSource.GOTOSEQUENCE;
              }
              return;
          }
  
          // 4. When node not found, keep searching
          if (this._scroll.scrollToDirection) {
              this._scroll.springPosition = scrollOffset - size[this._direction];
              this._scroll.springSource = SpringSource.GOTONEXTDIRECTION;
          }
          else {
              this._scroll.springPosition = scrollOffset + size[this._direction];
              this._scroll.springSource = SpringSource.GOTOPREVDIRECTION;
          }
  
          // 5. In case of a VirtualViewSequnce, make sure all the view-sequence nodes are touched, so
          //    that they are not cleaned up.
          if (this._viewSequence.cleanup) {
              var viewSequence = this._viewSequence;
              while (viewSequence.get() !== scrollToRenderNode) {
                  viewSequence = this._scroll.scrollToDirection ? viewSequence.getNext(true) : viewSequence.getPrevious(true);
                  if (!viewSequence) {
                      break;
                  }
              }
          }
      }
func_code_string: function _calcScrollToOffset(size, scrollOffset) {
          var scrollToRenderNode = this._scroll.scrollToRenderNode || this._scroll.ensureVisibleRenderNode;
          if (!scrollToRenderNode) {
              return;
          }
  
          // 1. When boundary is reached, stop scrolling in that direction
          if ((this._scroll.boundsReached === Bounds.BOTH) ||
              (!this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.PREV)) ||
              (this._scroll.scrollToDirection && (this._scroll.boundsReached === Bounds.NEXT))) {
              return;
          }
  
          // 2. Find the node to scroll to
          var foundNode;
          var scrollToOffset = 0;
          var node = this._nodes.getStartEnumNode(true);
          var count = 0;
          while (node) {
              count++;
              if (!node._invalidated || (node.scrollLength === undefined)) {
                  break;
              }
              if (this.options.alignment) {
                  scrollToOffset -= node.scrollLength;
              }
              if (node.renderNode === scrollToRenderNode) {
                  foundNode = node;
                  break;
              }
              if (!this.options.alignment) {
                  scrollToOffset -= node.scrollLength;
              }
              node = node._next;
          }
          if (!foundNode) {
              scrollToOffset = 0;
              node = this._nodes.getStartEnumNode(false);
              while (node) {
                  if (!node._invalidated || (node.scrollLength === undefined)) {
                     break;
                  }
                  if (!this.options.alignment) {
                      scrollToOffset += node.scrollLength;
                  }
                  if (node.renderNode === scrollToRenderNode) {
                      foundNode = node;
                      break;
                  }
                  if (this.options.alignment) {
                      scrollToOffset += node.scrollLength;
                  }
                  node = node._prev;
              }
          }
  
          // 3. Update springs
          if (foundNode) {
              if (this._scroll.ensureVisibleRenderNode) {
                  if (this.options.alignment) {
                      if ((scrollToOffset - foundNode.scrollLength) < 0) {
                          this._scroll.springPosition = scrollToOffset;
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else if (scrollToOffset > size[this._direction]) {
                          this._scroll.springPosition = size[this._direction] - scrollToOffset;
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else {
                          if (!foundNode.trueSizeRequested) {
                              this._scroll.ensureVisibleRenderNode = undefined;
                          }
                      }
                  }
                  else {
                      scrollToOffset = -scrollToOffset;
                      if (scrollToOffset < 0) {
                          this._scroll.springPosition = scrollToOffset;
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else if ((scrollToOffset + foundNode.scrollLength) > size[this._direction]) {
                          this._scroll.springPosition = size[this._direction] - (scrollToOffset + foundNode.scrollLength);
                          this._scroll.springSource = SpringSource.ENSUREVISIBLE;
                      }
                      else {
                          if (!foundNode.trueSizeRequested) {
                            this._scroll.ensureVisibleRenderNode = undefined;
                          }
                      }
                  }
              }
              else { // scrollToSequence
                  this._scroll.springPosition = scrollToOffset;
                  this._scroll.springSource = SpringSource.GOTOSEQUENCE;
              }
              return;
          }
  
          // 4. When node not found, keep searching
          if (this._scroll.scrollToDirection) {
              this._scroll.springPosition = scrollOffset - size[this._direction];
              this._scroll.springSource = SpringSource.GOTONEXTDIRECTION;
          }
          else {
              this._scroll.springPosition = scrollOffset + size[this._direction];
              this._scroll.springSource = SpringSource.GOTOPREVDIRECTION;
          }
  
          // 5. In case of a VirtualViewSequnce, make sure all the view-sequence nodes are touched, so
          //    that they are not cleaned up.
          if (this._viewSequence.cleanup) {
              var viewSequence = this._viewSequence;
              while (viewSequence.get() !== scrollToRenderNode) {
                  viewSequence = this._scroll.scrollToDirection ? viewSequence.getNext(true) : viewSequence.getPrevious(true);
                  if (!viewSequence) {
                      break;
                  }
              }
          }
      }
func_documentation_string: Calculates the scrollto-offset to which the spring is set.