/*
	Buffer.java - Cory Goldfuss - November 14, 2000
	Program takes a string from the user and applies
	different options to the string depending on what he
	or she chooses.
 */

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Buffer extends Applet implements ActionListener, ItemListener
{
    
    public    int numvowels = 0;
	public    int numcons = 0;
	public    int numdigits = 0;
	public    String input;
	public    String reversed;
	public    boolean DROME = false;
	public void init()
	{
		// Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
		//symantec.itools.lang.Context.setApplet(this);
	
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(null);
		setBackground(new java.awt.Color(45,149,210));
		setSize(426,266);
		add(inputFld);
		inputFld.setBackground(java.awt.Color.lightGray);
		inputFld.setBounds(12,48,403,24);
		instructLbl.setText("Enter some words below, and select what you would like to know!");
		instructLbl.setAlignment(java.awt.Label.CENTER);
		add(instructLbl);
		instructLbl.setBackground(java.awt.Color.white);
		instructLbl.setFont(new Font("Dialog", Font.BOLD, 12));
		instructLbl.setBounds(12,12,397,33);
		showVowels.setLabel("Vowels");
		add(showVowels);
		showVowels.setFont(new Font("Dialog", Font.BOLD, 12));
		showVowels.setBounds(12,96,72,24);
		showCons.setLabel("Consonants");
		add(showCons);
		showCons.setFont(new Font("Dialog", Font.BOLD, 12));
		showCons.setBounds(12,132,96,24);
		showDigits.setLabel("Digits");
		add(showDigits);
		showDigits.setFont(new Font("Dialog", Font.BOLD, 12));
		showDigits.setBounds(12,168,72,24);
		showReverse.setLabel("Reverse String!");
		add(showReverse);
		showReverse.setFont(new Font("Dialog", Font.BOLD, 12));
		showReverse.setBounds(12,204,108,24);
		vowelLbl.setAlignment(java.awt.Label.CENTER);
		add(vowelLbl);
		vowelLbl.setBounds(108,96,48,24);
		conLbl.setAlignment(java.awt.Label.CENTER);
		add(conLbl);
		conLbl.setBounds(108,132,48,24);
		digLbl.setAlignment(java.awt.Label.CENTER);
		add(digLbl);
		digLbl.setBounds(96,168,48,24);
		add(reverseLbl);
		reverseLbl.setBounds(132,204,276,24);
		resetBtn.setLabel("Start Over");
		add(resetBtn);
		resetBtn.setBackground(java.awt.Color.white);
		resetBtn.setFont(new Font("Dialog", Font.BOLD, 12));
		resetBtn.setBounds(204,132,97,40);
		resetBtn.setVisible(false);
		egg.setText("Hey!!!  That word is a Palindrome!!");
		egg.setAlignment(java.awt.Label.CENTER);
		add(egg);
		egg.setBackground(java.awt.Color.pink);
		egg.setFont(new Font("Dialog", Font.BOLD, 12));
		egg.setBounds(12,228,204,31);
		egg.setVisible(false);
		//}}
		inputFld.addActionListener( this );
		resetBtn.addActionListener( this );
		showVowels.addItemListener( this );
		showCons.addItemListener( this );
		showDigits.addItemListener( this );
		showReverse.addItemListener( this );
		
	}
	
	//{{DECLARE_CONTROLS
	java.awt.TextField inputFld = new java.awt.TextField();
	java.awt.Label instructLbl = new java.awt.Label();
	java.awt.Checkbox showVowels = new java.awt.Checkbox();
	java.awt.Checkbox showCons = new java.awt.Checkbox();
	java.awt.Checkbox showDigits = new java.awt.Checkbox();
	java.awt.Checkbox showReverse = new java.awt.Checkbox();
	java.awt.Label vowelLbl = new java.awt.Label();
	java.awt.Label conLbl = new java.awt.Label();
	java.awt.Label digLbl = new java.awt.Label();
	java.awt.Label reverseLbl = new java.awt.Label();
	java.awt.Button resetBtn = new java.awt.Button();
	java.awt.Label egg = new java.awt.Label();
	//}}
	
	
	
	public void actionPerformed( ActionEvent e ){
	    input = ( inputFld.getText() );
	    
	    resetBtn.setVisible( true ); // Don't allow reset until input
	    
	    for( int i = 0; i < input.length(); i++){
	        
	       char ch = Character.toLowerCase(input.charAt(i));
           if (Character.isLetter(ch) && isVowel(ch) == false){ 
               numcons++;
           }
           if (isVowel(ch)){
	           numvowels++;
	       }
	       if (Character.isDigit(ch)){   
	           numdigits++;
	       }
	    }
	    
	    
	    
	    if ( e.getSource() == resetBtn){ // reset
	        numvowels = 0;
	        numcons = 0;
	        numdigits = 0;
	        reversed = "";
	        reverseLbl.setText(reversed);
	        input = "";
	        inputFld.setText(input);
	        vowelLbl.setText("");
	        conLbl.setText("");
	        digLbl.setText("");
	        egg.setVisible( false );
	    }
	    
	    
	}// end actionPerformed
	
	public void itemStateChanged( ItemEvent e ){
	        
      StringBuffer temp = new StringBuffer( input );
      reversed = temp.reverse().toString();
	 
      int status = e.getStateChange();
	  String choice = e.getItem().toString(); 	
	  
	  if ( input.equalsIgnoreCase(reversed) ){
	    DROME = true;
	  }
	  
	  if ( choice.equalsIgnoreCase( "Vowels" ) ){
	      if (status == ItemEvent.SELECTED){
	        vowelLbl.setText(Integer.toString(numvowels));
	      }
	      else{
	          vowelLbl.setText("");
	      }
     }
	
     if ( choice.equalsIgnoreCase( "Consonants" ) ){
	      if ( status == ItemEvent.SELECTED ){
	          conLbl.setText(Integer.toString(numcons));
	      }
	      else{
	          conLbl.setText("");
	      }
	  }
	
	  if ( choice.equalsIgnoreCase( "Digits" ) ){
	      if ( status == ItemEvent.SELECTED ){
	          digLbl.setText(Integer.toString(numdigits));
	      }
	      else{
	          digLbl.setText("");
	      }
	  }
	
	  if ( choice.equalsIgnoreCase( "Reverse String!" ) ){
	      if ( status == ItemEvent.SELECTED ){
	          reverseLbl.setText(reversed);
	          if ( DROME == true ){
	              egg.setVisible( true );
	          }
	      }
	      else{
	          reverseLbl.setText("");
	      }
	  }
    }
	
	public boolean isVowel( char ch ){ //tests for vowels
	    
	    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'){
	        return true;
	    }
	    else{
	        return false;
	    }
    }
}