}  if ( dStep == oldStep ) { dStep /= 2;
	public final boolean zoomIn( )	{		if ( bStepFixed )		{			return false; // CANNOT ZOOM FOR FIXED STEPS		}		if ( ChartUtil.mathEqual( 0, ( (Number) oStep ).doubleValue( ) ) )		{			return false; // CANNOT ZOOM ANY MORE		}		if ( ( iType & NUMERICAL ) == NUMERICAL )		{			if ( ( iType & LOGARITHMIC ) == LOGARITHMIC )			{				final double dStep = asDouble( oStep ).doubleValue( );				if ( ( Math.log( dStep ) / LOG_10 ) > 1 )				{					oStep = new Double( dStep / 10 );				}				else				{					int n = iaLogarithmicDeltas.length;					for ( int i = n - 1; i >= 0; i-- )					{						if ( (int) dStep == iaLogarithmicDeltas[i] )						{							if ( i > 0 )							{								oStep = new Double( iaLogarithmicDeltas[i - 1] );								return true;							}							else							{								return false;							}						}					}					return false;				}			}			else if ( ( iType & LINEAR ) == LINEAR )			{				double dStep = asDouble( oStep ).doubleValue( );				if ( bIntegralZoom )				{					double dPower = ( Math.log( dStep ) / LOG_10 );					dPower = Math.floor( dPower );					dPower = Math.pow( 10.0, dPower );					dStep /= dPower;					dStep = Math.round( dStep );					int n = iaLinearDeltas.length;					for ( int i = 0; i < n; i++ )					{						if ( (int) dStep == iaLinearDeltas[i] )						{							if ( i > 0 )							{								dStep = iaLinearDeltas[i - 1] * dPower;							}							else							{								dPower /= 10;								dStep = iaLinearDeltas[n - 2] * dPower;							}							break;						}					}					oStep = new Double( dStep );				}				else				{					dStep /= 2;					oStep = new Double( dStep );				}			}		}		else if ( ( iType & DATE_TIME ) == DATE_TIME )		{			int[] ia = null;			int iStep = asInteger( oStep );			int iUnit = asInteger( oUnit );			for ( int icu = 0; icu < iaCalendarUnits.length; icu++ )			{				if ( iUnit == iaCalendarUnits[icu] )				{					ia = iaCalendarDeltas[icu];					if ( ia == null ) // HANDLE YEARS SEPARATELY					{						iStep--;						if ( iStep == 0 )						{							oStep = new Integer( iaMonthDeltas[iaMonthDeltas.length - 1] );							oUnit = new Integer( Calendar.MONTH );						}					}					else					// HANDLE SECONDS, MINUTES, HOURS, DAYS, MONTHS					{						int i = 0;						for ( ; i < ia.length; i++ )						{							if ( ia[i] == iStep )							{								break;							}						}						if ( i == 0 ) // WE'RE AT THE FIRST ELEMENT IN THE						// DELTAS ARRAY						{							if ( icu == 0 )								return false; // CAN'T ZOOM ANYMORE THAN							// 1-SECOND INTERVALS (AT INDEX=0)							ia = iaCalendarDeltas[icu - 1]; // DOWNGRADE ARRAY							// TO PREVIOUS							// DELTAS ARRAY							i = ia.length; // MANIPULATE OFFSET TO END+1							oUnit = new Integer( iaCalendarUnits[icu - 1] ); // DOWNGRADE							// UNIT						}						oStep = new Integer( ia[i - 1] ); // RETURN PREVIOUS						// STEP IN DELTAS						// ARRAY						break;					}				}			}		}		return true;	}