import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

class finalWindow extends JFrame
{
    public finalWindow ( String []words )
    {
	setTitle ( "Final Results" );
	Container cp = getContentPane();
	String sentance = null;

	for ( int i=0; i< words.length; i++ ) {
	    if ( sentance == null )
		sentance = words[i];
	    else
		sentance = sentance + " " +words[i];
	}
	JLabel result = new JLabel ( sentance );
	cp.setLayout( new FlowLayout() );
	cp.add ( result );
	setSize( 500, 50 );
	setLocation( 200, 300 );
	setVisible( true );
    }

    public finalWindow ( String Words, String Title )
    {
	setTitle ( Title );
	setSize ( 400, 60 );
	setLocation ( 300, 350 );
	Container cp = getContentPane();
	JButton Quit = new JButton ( "Quit" );
	Quit.addActionListener ( new quitHandler() );
	cp.add ( Quit, "South" );
	cp.add ( new JLabel ( Words ), "Center" );
	setVisible( true );
    }
}

class progressWindow extends JFrame
{
    private Container cp;
    private String []Words;

    private JButton nextstep;
    public progressWindow ( String input, String []output )
    {
	setTitle("Conversion Process");
	cp = getContentPane();
	
	nextstep = new JButton ( "Break into words" );
	cp.add( nextstep, "South");
	nextstep.addActionListener( new continueHandler() ); 
	StringTokenizer st = new StringTokenizer( input );
	Words = new String[ st.countTokens() ];

	for ( int i=0; st.hasMoreTokens(); i++ ) {
	    Words[i] = st.nextToken();
	    output[i] = Words[i];
	}

	JLabel Original = new JLabel( input );
	cp.add(Original, "West");
	setSize (500, 200);
	setVisible( true );
    }

    public void get_results(String []results)
    {
	//note how the array results is returned threw the argument
	for( int i=0; i < Words.length; i++ ) {
	    results[i] = new String();
	    results[i] = Words[i];
	}
    }

    class continueHandler implements ActionListener
    {
	public void actionPerformed( ActionEvent e )
	{
	    String arg = e.getActionCommand();

	    if ( arg.equals("Break into words") ) {
		String temp = null;
		for ( int i = 0; i < Words.length; i++ ) {
		    if ( temp == null )
			temp = Words[i] + "\n";
		    else
			temp = temp + Words[i] + "\n";
		}
		cp.add( new JTextField ( temp ), "Center" );
		cp.remove( nextstep );
		nextstep = new JButton ( "Convert" );
		nextstep.addActionListener( new continueHandler() );
		cp.add( nextstep, "South" );
		update( getGraphics() );
		setVisible( true );
      	    }
	    if ( arg.equals("Convert") ) {

		PigLatin pg = new PigLatin();
		for ( int i=0; i < Words.length; i++ )
		    Words[i] = pg.to_piglatin( Words[i] );
		JFrame Last_Window = new finalWindow( Words );
	    }
	}
    }
}

class quitHandler implements ActionListener
{
    public void actionPerformed( ActionEvent e )
    { System.exit(0); }
}

class PigLatin
{

    private boolean is_vowel( char c )
    {
	c = Character.toLowerCase(c);

	if ( c == 'a' || c == 'i' || c == 'o' || c == 'u' )
	    return true;

	else 
	    return false;
    }

    String to_piglatin( String s )
    {
	String converted = "";

	if ( is_vowel(s.charAt(0)) )
	    return s+"way";

	if ( s.charAt(0) == 'q' || s.charAt(0) == 'Q' ) {
	    for ( int i=2; i < s.length(); i++ )
		converted = converted + s.charAt(i);

	    converted = converted + s.charAt(0) + s.charAt(0);
	}
	else {
	    for ( int i=1; i< s.length(); i++ )
		converted = converted + s.charAt(i);
	    converted = converted + s.charAt(0);
	}

	converted = converted + "ay";
	return converted;
    }

}


public class Text_Demo extends JFrame
{

    private JLabel result;
    private JTextField input;
    private String []output;

    public Text_Demo()
    {
	setTitle("Convert to PigLatin");
	addWindowListener( new WindowHandler() );
	Container cp = getContentPane();
	output = null;
	
	cp.setLayout( new FlowLayout() );
	cp.add( new JLabel( "Enter the sentance to convert to pig latin"),"North" );
	cp.add( input = new JTextField(20) );
	
	JPanel s_panel = new JPanel();
	s_panel.setLayout( new BorderLayout() );
	JButton done = new JButton("Start Translation");
	JButton quit = new JButton("Quit");
	s_panel.add( done, "West" );
	s_panel.add( quit, "East");
	done.addActionListener(new actionHandler());
	quit.addActionListener(new quitHandler() );
	cp.add(s_panel);
	JLabel result = new JLabel("The converted text will be here");

    }


    class actionHandler implements ActionListener
    {
	progressWindow midway;

	public void actionPerformed(ActionEvent e)
	{
	    
	    String arg = e.getActionCommand();
	    if ( arg.equals( "Start Translation" ) ) {
		String s = input.getText();
		if ( s != null ) { 
		    if ( output == null ) {
			StringTokenizer st = new StringTokenizer( s );
			output = new String[ st.countTokens() ];
			midway = new progressWindow( s, output );
		    }
		    else {
			midway.get_results( output );
			String sentance = output[0];
			for ( int i=1; i < output.length; i++ )
			    sentance = sentance + " " + output[i];
			JFrame last = new finalWindow ( sentance, "All done" );
		    }
		}
	    }
	}
    }



    class WindowHandler extends WindowAdapter
    {
	public void windowClosing( WindowEvent e )
	{ System.exit(0); }
    }

    public static void main( String []args )
    {
	JFrame jf = new Text_Demo();
	jf.setSize(320,150);
	jf.setLocation(200,200);
	jf.setVisible(true);
    }
}



