whole_func_string: function _calcScrollOffset(normalize, refreshParticle) {
  
          // When moving using touch-gestures, make the offset stick to the
          // finger. When the bounds is exceeded, decrease the scroll distance
          // by two.
          if (refreshParticle || (this._scroll.particleValue === undefined)) {
              this._scroll.particleValue = this._scroll.particle.getPosition1D();
              this._scroll.particleValue = Math.round(this._scroll.particleValue * 1000) / 1000;
          }
  
          // do stuff
          var scrollOffset = this._scroll.particleValue;
          if (this._scroll.scrollDelta || this._scroll.normalizedScrollDelta) {
              scrollOffset += this._scroll.scrollDelta + this._scroll.normalizedScrollDelta;
              if (((this._scroll.boundsReached & Bounds.PREV) && (scrollOffset > this._scroll.springPosition)) ||
                 ((this._scroll.boundsReached & Bounds.NEXT) && (scrollOffset < this._scroll.springPosition)) ||
                 (this._scroll.boundsReached === Bounds.BOTH)) {
                  scrollOffset = this._scroll.springPosition;
              }
              if (normalize) {
                  if (!this._scroll.scrollDelta) {
                      this._scroll.normalizedScrollDelta = 0;
                      _setParticle.call(this, scrollOffset, undefined, '_calcScrollOffset');
                  }
                  this._scroll.normalizedScrollDelta += this._scroll.scrollDelta;
                  this._scroll.scrollDelta = 0;
              }
          }
  
          if (this._scroll.scrollForceCount && this._scroll.scrollForce) {
              if (this._scroll.springPosition !== undefined) {
                  scrollOffset = (scrollOffset + this._scroll.scrollForce + this._scroll.springPosition) / 2.0;
              }
              else {
                  scrollOffset += this._scroll.scrollForce;
              }
          }
  
          // Prevent the scroll position from exceeding the bounds when overscroll is disabled
          if (!this.options.overscroll) {
              if ((this._scroll.boundsReached === Bounds.BOTH) ||
                  ((this._scroll.boundsReached === Bounds.PREV) && (scrollOffset > this._scroll.springPosition)) ||
                  ((this._scroll.boundsReached === Bounds.NEXT) && (scrollOffset < this._scroll.springPosition))) {
                  scrollOffset = this._scroll.springPosition;
              }
          }
  
          //_log.call(this, 'scrollOffset: ', scrollOffset, ', particle:', this._scroll.particle.getPosition1D(), ', moveToPosition: ', this._scroll.moveToPosition, ', springPosition: ', this._scroll.springPosition);
          return scrollOffset;
      }
func_code_string: function _calcScrollOffset(normalize, refreshParticle) {
  
          // When moving using touch-gestures, make the offset stick to the
          // finger. When the bounds is exceeded, decrease the scroll distance
          // by two.
          if (refreshParticle || (this._scroll.particleValue === undefined)) {
              this._scroll.particleValue = this._scroll.particle.getPosition1D();
              this._scroll.particleValue = Math.round(this._scroll.particleValue * 1000) / 1000;
          }
  
          // do stuff
          var scrollOffset = this._scroll.particleValue;
          if (this._scroll.scrollDelta || this._scroll.normalizedScrollDelta) {
              scrollOffset += this._scroll.scrollDelta + this._scroll.normalizedScrollDelta;
              if (((this._scroll.boundsReached & Bounds.PREV) && (scrollOffset > this._scroll.springPosition)) ||
                 ((this._scroll.boundsReached & Bounds.NEXT) && (scrollOffset < this._scroll.springPosition)) ||
                 (this._scroll.boundsReached === Bounds.BOTH)) {
                  scrollOffset = this._scroll.springPosition;
              }
              if (normalize) {
                  if (!this._scroll.scrollDelta) {
                      this._scroll.normalizedScrollDelta = 0;
                      _setParticle.call(this, scrollOffset, undefined, '_calcScrollOffset');
                  }
                  this._scroll.normalizedScrollDelta += this._scroll.scrollDelta;
                  this._scroll.scrollDelta = 0;
              }
          }
  
          if (this._scroll.scrollForceCount && this._scroll.scrollForce) {
              if (this._scroll.springPosition !== undefined) {
                  scrollOffset = (scrollOffset + this._scroll.scrollForce + this._scroll.springPosition) / 2.0;
              }
              else {
                  scrollOffset += this._scroll.scrollForce;
              }
          }
  
          // Prevent the scroll position from exceeding the bounds when overscroll is disabled
          if (!this.options.overscroll) {
              if ((this._scroll.boundsReached === Bounds.BOTH) ||
                  ((this._scroll.boundsReached === Bounds.PREV) && (scrollOffset > this._scroll.springPosition)) ||
                  ((this._scroll.boundsReached === Bounds.NEXT) && (scrollOffset < this._scroll.springPosition))) {
                  scrollOffset = this._scroll.springPosition;
              }
          }
  
          //_log.call(this, 'scrollOffset: ', scrollOffset, ', particle:', this._scroll.particle.getPosition1D(), ', moveToPosition: ', this._scroll.moveToPosition, ', springPosition: ', this._scroll.springPosition);
          return scrollOffset;
      }
func_documentation_string: Get the in-use scroll-offset.