public ContestantPanel() {
		super(new Contestant());
		
		setName("Contestant_Panel");

		// ////////////////////////////
		// Top Panel:
		// ////////////////////////////
		imgDisplay = new JButton();

		// Edit fields:
		labelName = new JLabel("Name:");
		tfFirstName = new JTextField(20);
		tfLastName = new JTextField(20);

		labelCastOff = new JLabel("Cast off:");
		cbCastDate = new JComboBox<String>();
		btnSetStatus = new JButton("Set Status");

		labelTribe = new JLabel("Tribe:");
		cbTribe = new JComboBox<String>(GameData.getCurrentGame()
				.getTribeNames());

		labelID = new JLabel("ID:");
		tfContID = new JTextField(2);

		// holds all the fields
		personFields = new ContestantFieldsPanel(imgDisplay, labelName, 
				tfFirstName, tfLastName, labelID, tfContID, labelCastOff, 
				cbCastDate, btnSetStatus, labelTribe, cbTribe);
		// add the mouse listener to all components.
		for (Component c : ((JPanel)personFields).getComponents()) {
			if (c instanceof JPanel) {
				for (Component d: ((JPanel)c).getComponents())
					//d.addMouseListener(this);
					addListeners(d);
			}
			//c.addMouseListener(this);
			addListeners(c);
		}
		
		
		
		btnPickWin = new JButton("<html><center>Select<br>Winner</center></html>");

		// check to stop casting off before start
		if (!GameData.getCurrentGame().isSeasonStarted()) {
			btnSetStatus.setEnabled(false);
		}
		
		cbCastDate.addItem("Active");
		//////////////////////////////
		// Mid (table!)
		//////////////////////////////
		// handled by super call

		// ////////////////////////////
		// Bottom
		//////////////////////////////
		
		// build the two panes
		// setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
		GameData g = GameData.getCurrentGame();
		if (g.isSeasonEnded()) { // game end
			update(GameData.getCurrentGame(), EnumSet.of(UpdateTag.END_GAME));
		} else if (g.isFinalWeek()) { // final week
			update(GameData.getCurrentGame(), EnumSet.of(UpdateTag.FINAL_WEEK));
		} else if (g.isSeasonStarted()){
			update(GameData.getCurrentGame(), EnumSet.of(UpdateTag.START_SEASON));
		}
		
		// used to maintain state... :/
		// HACK AND A HALF.
		addComponentListener(new ComponentAdapter() {
			int castIndex, tribeIndex;

			@Override
			public void componentShown(ComponentEvent e) {
				super.componentShown(e);

				cbCastDate.setSelectedIndex(castIndex);
				cbTribe.setSelectedIndex(tribeIndex);
			}

			@Override
			public void componentHidden(ComponentEvent e) {
				super.componentShown(e);

				castIndex = cbCastDate.getSelectedIndex();
				tribeIndex = cbTribe.getSelectedIndex();
			}
		});
		
		assembleAll();
	}