y += this.marginTop + this.paddingTop;
	protected void scroll( boolean isDownwards, int x, int y, int width, int height ) {		//#debug		System.out.println("scroll: isDownwards=" + isDownwards + ", y=" + y + ", Container.yTop=" + this.yTop +  ", height=" +  height + ", Container.yBottom=" + this.yBottom + ", focusedIndex=" + this.focusedIndex + ", yOffset=" + this.yOffset + ", targetYOffset=" + this.targetYOffset );		int difference = 0;//		int index = this.focusedIndex;		int target = this.targetYOffset;		int current = this.yOffset;		// calculate the absolute position from the relative one://		int absoluteY = y + current + this.yTop;//		int absoluteYBottom = absoluteY + height;//		int yOffsetDiff = 0;//		//#ifdef polish.css.scroll-mode//			if (this.scrollSmooth) {//		//#endif//				yOffsetDiff = target - current;//		//#ifdef polish.css.scroll-mode//			}//		//#endif		int verticalSpace = this.yBottom - this.yTop; // the available height for this container		if ( height == 0 || !this.enableScrolling) {			return;		} else if ( y + height + target > verticalSpace ) {			// the area is too low:			difference = verticalSpace - (y + height + target);			//#debug			System.out.println("scroll: item too low: difference: " + difference + "  verticalSpace=" + verticalSpace + "  y=" + y + ", height=" + height + ", target=" + target);			// check if the top of the area is still visible when scrolling downwards:			if ( isDownwards && y + target + difference < 0 ) {				difference -= y + target + difference;			}		} else if ( y + target < 0 ) {			// area is too high:			difference = - (y + target); 			//#debug			System.out.println("scroll: item too high: setting difference to " + difference + ", y=" + y + ", target=" + target ); //+ ", focusedTopMargin=" + this.focusedTopMargin );			if (!isDownwards && y + height + target + difference > verticalSpace ) {				difference += verticalSpace - (y + height + target + difference);			}//			//		} else if (absoluteYBottom + yOffsetDiff > this.yBottom + 1) { //TODO +1 is a quick hack here//			// this item is too low://			difference = this.yBottom - absoluteYBottom;//			//#debug//			System.out.println("scroll: item too low: difference: " + difference + "  absoluteYBottom=" + absoluteYBottom + "  container.yBottom=" + this.yBottom + ", yOffsetDiff=" + yOffsetDiff);//			//if ( itemYTop + difference < this.yTop) {//			if ( isDownwards && absoluteY + difference < this.yTop) {//				//#debug//				System.out.println("scroll: correcting: difference: " + difference + "  absoluteY=" + absoluteY + "  <  this.yTop=" +  this.yTop + "  to new difference=" + (this.yTop - y + 10) );//				difference = this.yTop - absoluteY + 10; // additional pixels for adjusting the focused style above://			}//			/*//			if ( itemYTop + difference < this.internalY) {//				//#debug//				System.out.println("correcting: difference: " + difference + "  itemYTop=" + itemYTop + "  <  this.internalY=" +  this.internalY + "  to new difference=" + (this.internalY - itemYTop + 10) );//				difference = this.internalY - itemYTop + 10; // additional pixels for adjusting the focused style above://			}//			*///		} else if (y + yOffsetDiff < this.yTop) {//			// this item is too high://			//#if tmp.supportViewType//				//TODO when colspan is used, the index might be lower than anticipated//				if ((index == 0) || ( this.view != null && (index < this.view.numberOfColumns) ) ) {//			//#else//				//# if (index == 0) {//			//#endif//				// scroll to the very top://				difference = -current;//				//#debug//				System.out.println("scroll: Scrolling to first item: setting difference to " + difference );//			} else {//				difference = this.yTop + yOffsetDiff - absoluteY; // + this.focusedTopMargin;//				//#debug//				System.out.println("scroll: item too high: setting difference to " + difference + ", absoluteY=" + absoluteY + ", yOffsetDiff=" + yOffsetDiff ); //+ ", focusedTopMargin=" + this.focusedTopMargin );//			}//			// re-adjust the scrolling in case we scroll up and the previous//			// item is very large://			if ( !isDownwards && (absoluteYBottom + yOffsetDiff + difference > this.yBottom  )) {//				difference = this.yBottom - (absoluteYBottom + yOffsetDiff);//				//#debug//				System.out.println("scroll: Scrolling upwards: adjusting difference to " + difference );//			}		} else {			//#debug			System.out.println("scroll: do nothing");			return;		}						//#if polish.css.scroll-mode			if (!this.scrollSmooth) {				this.yOffset = current + difference;			} else {		//#endif				this.targetYOffset = target + difference;				//#debug				System.out.println("scroll: adjusting targetYOffset to " + this.targetYOffset + ", y=" + y);//				if (this.focusedItem != null) {//					this.focusedItem.backgroundYOffset = difference;//				}		//#if polish.css.scroll-mode			}		//#endif			}