package mit.mitid.ui ;

public class Dob
extends mit.swing.ui.LabeledTextField
implements	mit.mitid.event.DobRaiser
	,	mit.event.Listener
{
	private mit.event.RaiserAdapter raiserAdapter = new mit.event.RaiserAdapter( this ) ;
	public mit.event.RaiserAdapter getRaiserAdapter() { return this.raiserAdapter ; }
	public void setRaiserAdapter( mit.event.RaiserAdapter raiserAdapter ) { this.raiserAdapter = raiserAdapter ; }

	private mit.event.ListenerAdapter listenerAdapter = new mit.event.ListenerAdapter( this ) ;
	public mit.event.ListenerAdapter getListenerAdapter() { return this.listenerAdapter ; }
	public void setListenerAdapter( mit.event.ListenerAdapter listenerAdapter ) { this.listenerAdapter = listenerAdapter ; }

	private String dob = null ;
	public String getDob() { return this.dob ; }
	public void setDob( String dob ) { this.dob = formatDob( dob ) ; }

	private String formatDob( String dob )
	{
		String formattedDob = null ;
		try
		{
			if( ( null != dob ) && ! dob.equals( getDob() ) )
			{
				if( isDob( dob ) )
				{
					int indexOfSlash = dob.indexOf( "/" ) ;
					if( -1 != indexOfSlash )
					{
						String month = dob.substring( 0 , indexOfSlash ) ;
						if( 1 == indexOfSlash )
						{
							month = "0" + month ;
						}
						if( dob.length() > ( indexOfSlash + 1 ) )
						{
							String day = dob.substring( indexOfSlash + 1 ) ;
							if( 1 == day.length() )
							{
								day = "0" + day ; 
							}
							formattedDob = month + day ;
						}
					}
				}
				else
				{
					java.awt.Toolkit.getDefaultToolkit().beep() ;
				}
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
		return formattedDob ;
	}

	public String getText() { return getDob() ; }
	public void setText( String text ) { setDob( text ) ; }

	public void eventRaised( mit.event.Event e )
	{
		try
		{
			if( e instanceof mit.swing.event.DocumentEvent )
			{
				HandleDocumentEvent( ( mit.swing.event.DocumentEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.ClearEvent )
			{
				HandleClearEvent( ( mit.mitid.event.ClearEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.SearchEvent )
			{
				HandleSearchEvent( ( mit.mitid.event.SearchEvent ) e ) ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void HandleDocumentEvent( mit.swing.event.DocumentEvent e )
	{
		try
		{
			setDob( super.getText() ) ;
			new mit.mitid.event.DobEvent( this ).raise() ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private boolean isDob( String dob )
	{
		try
		{
			int indexOfSlash = dob.indexOf( "/" ) ;
			int month = 0 ;
			if( -1 != indexOfSlash )
			{
				month = Integer.parseInt( dob.substring( 0 , indexOfSlash ) ) ;
				if( ( 0 < month ) && ( 13 > month ) )
				{
					if( dob.length() > ( indexOfSlash + 1 ) )
					{
						int day = Integer.parseInt( dob.substring( indexOfSlash + 1 ) ) ;
						if( 0 < day )
						{
							if
							( 	( ( 2 == month ) && ( 30 > day ) )
								||
								(	(	( 4 == month )
									||	( 6 == month )
									||	( 9 == month )
									||	( 11 == month )
									)
									&&
									( 31 > day )
								)
								||
								( 32 > day )
							)
							{
								return true ;
							}
							else
							{
								return false ;
							}								
						}
						else
						{
							return false ;
						}
					}
					return true ;
				}
				return false ;
			}
			return false ;
		}
		catch( Exception ex )
		{
		}
		return false ;
	}
	
	private void HandleClearEvent( mit.mitid.event.ClearEvent e )
	{
		super.setText( "" ) ;
	}
	
	private void HandleSearchEvent( mit.mitid.event.SearchEvent e )
	{
		if( null == getDob() )
		{
			super.setText( "" ) ;
		}
	}
	
	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			super.setText( "" ) ;
			super.setColumns( 5 ) ;
			super.setLabel( "DOB( mm/dd ): " ) ;

			getListenerAdapter().addHandled( mit.swing.event.DocumentEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.ClearEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.SearchEvent.class ) ;

			getEventControlAdapter().addContained( mit.swing.event.DocumentEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.swing.event.DocumentEvent.class ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}
}