
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class OrderDialog extends JDialog {

  JPanel bottom; 
  JButton okButton, cancelButton;  
  DialogPanel dialogPanel; 
  
  int cs;
  CatalogItem[] cl;

  public OrderDialog(JFrame owner) {
    super(owner, true); 
   
    setTitle("Order");
    okButton = new JButton("Ok"); 
    cancelButton = new JButton("Cancel"); 
    ButtonHandler bhandler = new ButtonHandler(); 
    okButton.addActionListener(bhandler); 
    cancelButton.addActionListener(bhandler); 
    bottom = new JPanel(); 
    bottom.add(okButton); 
    bottom.add(cancelButton); 
    bottom.setBorder(BorderFactory.createEtchedBorder());
    dialogPanel = new DialogPanel(); 
    getContentPane().setLayout(new BorderLayout()); 
    getContentPane().add(bottom, BorderLayout.SOUTH); 
    getContentPane().add(dialogPanel, BorderLayout.CENTER);     
    pack(); 
  } 

  class ButtonHandler implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
      JButton button = (JButton) evt.getSource(); 
      String label = button.getText(); 
      if ("Ok".equals(label)) {
	System.out.println("An order is received:"); 
	System.out.println("\tName:    " + dialogPanel.nameField.getText()); 
	System.out.println("\tAddress: " + dialogPanel.addressField.getText()); 
	System.out.println("\tCity:    " + dialogPanel.cityField.getText()); 
	System.out.println("\tState:   " + dialogPanel.stateField.getText()); 
	System.out.println("\tZIP:     " + dialogPanel.zipField.getText()); 
	System.out.println("\tE-Mail:  " + dialogPanel.emailField.getText()); 
	System.out.print("\tCredit card: "); 
	if (dialogPanel.visaBox.isSelected()) {
	  System.out.println("Visa"); 
	} else if (dialogPanel.mcBox.isSelected()) {
	  System.out.println("MasterCard"); 
	} else if (dialogPanel.discoverBox.isSelected()) {
	  System.out.println("Discover"); 
	}
	printOrderAndReset();
      }
      
      dialogPanel.reset(); 
      setVisible(false);
    }
  }  

  public int totalPrice2() {
	  int total = 0;
	  for (int i = 0; i < cs; i++) {
		  total += cl[i].numOrdered * cl[i].price;
	  }
	  return total;
  }
 
  public void printOrderAndReset() {
	  for (int i = 0; i < cs; i++) {
		if (cl[i].numOrdered > 0) 
			System.out.println(
					Integer.toString(cl[i].numOrdered) +
					"   " + cl[i].name +
					"   @ " + Integer.toString(cl[i].price));
	  }
	  System.out.println("Total order price: " + Integer.toString(totalPrice2()));
	  for (int i = 0; i < cs; i++) 
			cl[i].numOrdered = 0;
  }
  
  public void updateOrder (int catalogSize, CatalogItem[] catalog) {
	cs = catalogSize;
	cl = catalog;
  }
}

class DialogPanel extends JPanel {

  JLabel nameLabel; 
  JTextField nameField; 
  JLabel addressLabel; 
  JTextField addressField; 
  JLabel cityLabel; 
  JTextField cityField; 
  JLabel stateLabel; 
  JTextField stateField; 
  JLabel zipLabel; 
  JTextField zipField; 
  JLabel emailLabel; 
  JTextField emailField; 
  JCheckBox visaBox, mcBox, discoverBox; 
  JPanel creditCard; 
  ButtonGroup group;

  DialogPanel() {
    nameLabel = new JLabel("Name"); 
    nameField = new JTextField(); 
    addressLabel = new JLabel("Address"); 
    addressField = new JTextField(); 
    cityLabel = new JLabel("City"); 
    cityField = new JTextField(); 
    stateLabel = new JLabel("State"); 
    stateField = new JTextField(); 
    zipLabel = new JLabel("ZIP"); 
    zipField = new JTextField(); 
    emailLabel = new JLabel("E-Mail"); 
    emailField = new JTextField(); 

    creditCard = new JPanel(); 
    visaBox = new JCheckBox("Visa", true); 
    mcBox = new JCheckBox("MasterCard"); 
    discoverBox = new JCheckBox("Discover");
    creditCard.add(visaBox);
    creditCard.add(mcBox);
    creditCard.add(discoverBox);
    creditCard.setBorder(BorderFactory.createTitledBorder("Credit Card"));
    group = new ButtonGroup(); 
    group.add(visaBox);
    group.add(mcBox);
    group.add(discoverBox);

    add(nameLabel); 
    add(nameField); 
    add(addressLabel); 
    add(addressField); 
    add(cityLabel); 
    add(cityField); 
    add(stateLabel); 
    add(stateField); 
    add(zipLabel); 
    add(zipField); 
    add(emailLabel); 
    add(emailField); 
    add(creditCard); 
  }

  public Dimension getPreferredSize() {
    return new Dimension(350, 200); 
  }

  public Dimension getMinimumSize() {
    return new Dimension(350, 200); 
  }

  public void doLayout() {
    nameLabel.setBounds(10, 10, 60, 30); 
    nameField.setBounds(70, 15, 270, 20); 
    addressLabel.setBounds(10, 40, 60, 30); 
    addressField.setBounds(70, 45, 270, 20); 
    cityLabel.setBounds(10, 70, 60, 30); 
    cityField.setBounds(70, 75, 100, 20); 
    stateLabel.setBounds(180, 70, 40, 30); 
    stateField.setBounds(220, 75, 30, 20); 
    zipLabel.setBounds(260, 70, 30, 30); 
    zipField.setBounds(290, 75, 50, 20); 
    emailLabel.setBounds(10, 100, 60, 30); 
    emailField.setBounds(70, 105, 270, 20); 
    creditCard.setBounds(10, 140, 330, 50);
  }

  public void reset() {
    nameField.setText("");
    addressField.setText("");
    cityField.setText("");
    stateField.setText("");
    zipField.setText("");
    emailField.setText("");
    visaBox.setSelected(true);     
  }

}
