System.out.println("bailing out at too many steps: focusedIndex=" + this.focusedIndex + ", startIndex=" + i + ", steps=" + steps + ", doneSteps=" + doneSteps);
	protected Item shiftFocus(boolean forwardFocus, int steps, Item[] items) {		//#if polish.css.colspan			int i = this.focusedIndex;			if (steps != 0) {				//System.out.println("ShiftFocus: steps=" + steps + ", forward=" + forwardFocus);				int doneSteps = 0;				steps = Math.abs( steps ) + 1;				Item item = this.parentContainer.items[i];				while( doneSteps <= steps) {					doneSteps += item.colSpan;					if (doneSteps >= steps) {						//System.out.println("bailing out at too many steps: focusedIndex=" + this.focusedIndex + ", startIndex=" + i + ", steps=" + steps + ", doneSteps=" + doneSteps);						break;					}					if (forwardFocus) {						i++;						if (i == items.length - 1 ) {							i = items.length - 2;							break;						} else if (i == items.length) {							i = items.length - 1;							break;						}					} else {						i--; 						if (i < 0) {							i = 1;							break;						}					}					item = items[i];					//System.out.println("focusedIndex=" + this.focusedIndex + ", startIndex=" + i + ", steps=" + steps + ", doneSteps=" + doneSteps);				}				if (doneSteps >= steps && item.colSpan != 1) {					if (forwardFocus) {						i--;						if (i < 0) {							i = items.length - 1;						}						//System.out.println("forward: Adjusting startIndex to " + i );					} else {						i = (i + 1) % items.length;						//System.out.println("backward: Adjusting startIndex to " + i );					}				}			}		//#else						//# int i = this.focusedIndex + steps;			if (i > this.parentContainer.items.length) {				i = this.parentContainer.items.length - 2;			}			if (i < 0) {				i = 1;			}		//#endif		//TODO check how to integrate cycling in containers	//	//#if polish.Container.allowCycling != false	//		boolean allowCycle = this.enableScrolling && this.allowCycling;	//		if (allowCycle) {	//			//#if polish.css.scroll-mode	//				if (!this.scrollSmooth) {	//					if (forwardFocus) {	//						// when you scroll to the bottom and	//						// there is still space, do	//						// scroll first before cycling to the	//						// first item:	//						allowCycle = (this.yOffset + this.itemHeight <= this.yBottom);	//					} else {	//						// when you scroll to the top and	//						// there is still space, do	//						// scroll first before cycling to the	//						// last item:	//						allowCycle = (this.yOffset == 0);	//					}							//				} else {	//			//#endif	//				if (forwardFocus) {	//					// when you scroll to the bottom and	//					// there is still space, do	//					// scroll first before cycling to the	//					// first item:	//					allowCycle = (this.targetYOffset + this.itemHeight <= this.yBottom);	//				} else {	//					// when you scroll to the top and	//					// there is still space, do	//					// scroll first before cycling to the	//					// last item:	//					allowCycle = (this.targetYOffset == 0);	//				}	//			//#if polish.css.scroll-mode	//				}	//			//#endif	//			//#debug	//			System.out.println("shiftFocus: allowCycl=" + allowCycle + ", isFoward=" + forwardFocus + ", targetYOffset=" + this.targetYOffset + ", yOffset=" + this.yOffset );		//		}	//	//#endif		boolean allowCycle = true;		Item nextItem = null;		while (true) {			if (forwardFocus) {				i++;				if (i >= items.length) {					//#if polish.Container.allowCycling != false						if (allowCycle) {							allowCycle = false;							i = 0;						} else {							break;						}					//#else						break;					//#endif				}			} else {				i--;				if (i < 0) {					//#if polish.Container.allowCycling != false						if (allowCycle) {							allowCycle = false;							i = items.length - 1;						} else {							break;						}					//#else						break;					//#endif				}			}			nextItem = items[i];			if (nextItem.appearanceMode != Item.PLAIN) {				break;			}		}		if (nextItem == null || nextItem.appearanceMode == Item.PLAIN || nextItem == this.focusedItem) {			return null;		}		int direction = Canvas.UP;		if (forwardFocus) {			direction = Canvas.DOWN;		}		focusItem(i, nextItem );		return nextItem;	}