import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.*;
import java.net.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;

class GradeCalcPanel extends JPanel
{  
    public GradeCalcPanel()
    {  
	mainPanel = new JPanel();
	mainPanel.setLayout(new GridLayout(7, 2));
	add(mainPanel, BorderLayout.CENTER);

	final JComboBox testnumCombo = new JComboBox();
	testnumCombo.addItem("0");	
	testnumCombo.addItem("1");
	testnumCombo.addItem("2");
	testnumCombo.addItem("3");
	JLabel testnumLabel = new JLabel("Number of Tests to Replace:");
	mainPanel.add(testnumLabel);
	mainPanel.add(testnumCombo);
	testnumCombo.setSelectedIndex(1);

	final JFormattedTextField intTest1 = new JFormattedTextField(NumberFormat.getIntegerInstance());
	addRow("Test 1=", intTest1);
	
	final JFormattedTextField intTest2 = new JFormattedTextField(NumberFormat.getIntegerInstance());
	addRow("Test 2=", intTest2);
	
	final JFormattedTextField intTest3 = new JFormattedTextField(NumberFormat.getIntegerInstance());
	addRow("Test 3=", intTest3);
	
	final JFormattedTextField intHw = new JFormattedTextField(NumberFormat.getIntegerInstance());
	intHw.setValue(new Integer(100));
	addRow("Homework/Quiz=", intHw);
	
	final JFormattedTextField intFinal = new JFormattedTextField(NumberFormat.getIntegerInstance());
	addRow("Final=", intFinal);
	
	final JFormattedTextField dblGrade = new JFormattedTextField(NumberFormat.getInstance());
	addRow("Grade =", dblGrade);
	
	JPanel buttonPanel = new JPanel();
	calcButton = new JButton("Calculate");
	clearButton = new JButton("Clear All");
	buttonPanel.add(calcButton);
	buttonPanel.add(clearButton);
	add(buttonPanel, BorderLayout.SOUTH);	


	calcButton.addActionListener(new ActionListener()
	    {
		public void actionPerformed(ActionEvent ae)
		{
		    //System.out.println("You pressed the Calculate button.");
		    double t1=Double.parseDouble(intTest1.getText());
		    double t2=Double.parseDouble(intTest2.getText());
		    double t3=Double.parseDouble(intTest3.getText());
		    double h=Double.parseDouble(intHw.getText());
		    int tn=1;
		    String stn=(String) testnumCombo.getSelectedItem();
		    double f=Double.parseDouble(intFinal.getText());
		    double g=0;

		    double[] test = new double[3];
		    test[0]=t1;
		    test[1]=t2;
		    test[2]=t3;

		    Arrays.sort(test);

		    //number of tests to replace
		    if(stn.equals("0"))
			{
			    g=GradeCalcEngine.GradeCalc(test[0],test[1],test[2],h,f);
			}
		    else if(stn.equals("1"))
			{
			    if(test[0] < f)
				{
				    g=GradeCalcEngine.GradeCalc(f,test[1],test[2],h,f);
				}
			    else
				{
				    g=GradeCalcEngine.GradeCalc(test[0],test[1],test[2],h,f);
				}
			}
		    else if(stn.equals("2"))
			{
			     if(test[1] < f)
				{
				    g=GradeCalcEngine.GradeCalc(f,f,test[2],h,f);
				}
			    else if(test[0] < f)
				{
				    g=GradeCalcEngine.GradeCalc(f,test[1],test[2],h,f);
				}
			    else
				{
				    g=GradeCalcEngine.GradeCalc(test[0],test[1],test[2],h,f);
				}
			}	
		    else if(stn.equals("3"))
			{
			    if(test[2] < f)
				{
				    g=GradeCalcEngine.GradeCalc(f,f,f,h,f);
				}
			    else if(test[1] < f)
				{
				    g=GradeCalcEngine.GradeCalc(f,f,test[2],h,f);
				}
			    else if(test[0] < f)
				{
				    g=GradeCalcEngine.GradeCalc(f,test[1],test[2],h,f);
				}
 
			    else
				{
				    g=GradeCalcEngine.GradeCalc(test[0],test[1],test[2],h,f);
				}			    
			}
		    

		    dblGrade.setValue(g);
		}
	    });
	
	clearButton.addActionListener(new ActionListener()
	    {
		public void actionPerformed(ActionEvent ae)
		{
		    //System.out.println("You pressed the Clear button.");
		    intTest1.setValue(null);
		    intTest2.setValue(null);
		    intTest3.setValue(null);
		    intHw.setValue(100);
		    testnumCombo.setSelectedIndex(1);
		    intFinal.setValue(null);
		    dblGrade.setValue(null);
		}
	    });
    }
    
         
    
    public void addRow(String labelText, final JFormattedTextField field)
    {
	mainPanel.add(new JLabel(labelText));
	mainPanel.add(field);
	//final JLabel valueLabel = new JLabel();
	//mainPanel.add(valueLabel);
    }
    

    //remove for applet
    //public static final int WIDTH = 550;
    //public static final int HEIGHT = 250;
    
    private JButton calcButton;
    private JButton clearButton;
    private JPanel mainPanel;
}

class GradeCalcEngine
{
    public static double GradeCalc(double t1,double t2,double t3,double h,double f)
    {
	double testavg;

	testavg = (t1+t2+t3)/3;

	return .5*testavg+.4*f+.1*h;
    }
}
g+.4*f+.1*h;
    }
}
