public SeasonCreatePanel() {

		// ------instantiations-------
		lblWelcomeText = new JLabel("Welcome to SurvivorPool!");
		lblInfoText = new JLabel(
				"Fill out the fields below to create a new season.");
		lblWeeks = new JLabel("Weeks:");
		lblContestants = new JLabel("Contestants:");
		lblTribe1 = new JLabel("Tribe 1:");
		lblTribe2 = new JLabel("Tribe 2:");

		weekModel = new SpinnerNumberModel(3, 3, 12, 1); // default,low,min,step
		spnWeek = new JSpinner(weekModel);
		JFormattedTextField nonEditableWeek = ((JSpinner.DefaultEditor) spnWeek
				.getEditor()).getTextField();
		nonEditableWeek.setEditable(false);

		contestantModel = new SpinnerNumberModel(6, 6, 15, 1);// default,low,min,step
		spnContestant = new JSpinner(contestantModel);
		JFormattedTextField nonEditableCont = ((JSpinner.DefaultEditor) spnContestant
				.getEditor()).getTextField();
		nonEditableCont.setEditable(false);

		txtTribe1 = new JTextField("");
		txtTribe2 = new JTextField("");

		btnCreate = new JButton("Create Season");

		fieldsPanel = new SeasonCreateFieldsPanel(lblWeeks, spnWeek,
				lblContestants, spnContestant, lblTribe1, txtTribe1, lblTribe2,
				txtTribe2, btnCreate);

		innerPanel = new JPanel();

		// ------component settings-------
		this.setLayout(new BorderLayout());
		this.setBorder(BorderFactory.createLineBorder(Color.black));

		innerPanel.setLayout(new BorderLayout());

		lblWelcomeText.setFont(new Font("sanserif", Font.BOLD, 30));
		lblWelcomeText.setHorizontalAlignment(SwingConstants.CENTER);

		lblInfoText.setFont(new Font("sanserif", Font.ITALIC, 18));
		lblInfoText.setHorizontalAlignment(SwingConstants.CENTER);

		// ------component assembly------
		this.add(lblWelcomeText, BorderLayout.NORTH);
		this.add(innerPanel, BorderLayout.CENTER);
		innerPanel.add(lblInfoText, BorderLayout.NORTH);
		innerPanel.add(fieldsPanel, BorderLayout.CENTER);

		// ------component listeners------
		spnWeek.addChangeListener(new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent ce) {
				JSpinner spn = (JSpinner) ce.getSource();
				if (!programChange) // makes sure that the code did not change
									// the value
					changeSpinnerValue(spn);
			}

		});

		spnContestant.addChangeListener(new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent ce) {
				JSpinner spn = (JSpinner) ce.getSource();
				if (!programChange)
					changeSpinnerValue(spn);
			}

		});

		btnCreate.addActionListener(new ActionListener() {

			// write the number of contestants and weeks to the file.
			@Override
			public void actionPerformed(ActionEvent ae) {
				try {
					
					if (checkValidTribeName(txtTribe1.getText())) {
						MainFrame.getRunningFrame().setStatusErrorMsg(
								"Invalid tribe name", txtTribe1);
						return;
					} else if (checkValidTribeName(txtTribe2.getText())) {
						MainFrame.getRunningFrame().setStatusErrorMsg(
								"Invalid tribe name", txtTribe2);
						return;
					} else if (txtTribe1.getText().equalsIgnoreCase(txtTribe2.getText())) {
						MainFrame.getRunningFrame().setStatusErrorMsg(
								"Invalid tribe names, cannot be the same",
								txtTribe1, txtTribe2);
						return;
					}

					GameData.initSeason(Integer.parseInt(spnContestant
							.getValue().toString()));
					GameData.getCurrentGame().setTribeNames(
							txtTribe1.getText(), txtTribe2.getText());

					MainFrame.getRunningFrame().clearStatusError();
					MainFrame.createSeason();
				} catch (Exception i) {
					i.printStackTrace();
				}

			}

		});
	}