private void initListeners(){
		
		/*
		 * Just moves towards next step of question modification
		 */
		btnNextPart.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent ae) {
				cardsQPanel.show(pnlQuestionEdit, STEP_2);
			}		
		});
		
		btnNewQBack.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ae) {
				cardsQPanel.show(pnlQuestionEdit, STEP_1);
			}
		});
		
		/**
		 * Adds the new question into the bonus array.
		 */
		btnNewQSubmit.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent ae) {
				MainFrame mf = MainFrame.getRunningFrame();
				
				if (rbMultChoice.isSelected()) {
					if (!isValidMultiAnswers()) {
						mf.setStatusErrorMsg("Answer Length must be between 1 " +
								"and 200 characters", pnlQTypeSwap);
						return;
					}
				} else {
					if (!isValidQuestionOrAnswer(tfShortAnswer.getText().trim())) {
						mf.setStatusErrorMsg("Answer Length must be between 1 " +
								"and 200 characters", pnlQTypeSwap);
						return;
					}
				}
				
				// no errors in input at this point:
				BonusQuestion temp = loadFromPanel();
				
				temp.setWeek(currentQ.getWeek());
				temp.setNumber(currentQ.getNumber());
				
				//since currentQ is already in the bonus array, just 
				//update the value
				currentQ.copy(temp);
				
				// check if it's present first
				if (!Bonus.getAllQuestions().contains(currentQ)) 
					Bonus.addNewQuestion(currentQ);
				
				// update the spinners and models. 
				setQuestionView(currentQ);
				setWeekSpinner(currentQ.getWeek(), Bonus.getMaxWeek());
				int w = currentQ.getWeek();
				setQuestionSpinner(w, Bonus.getNumQuestionsInWeek(w));
				
				// show the question we just made
				spnWeek.setValue(w);
				spnQuestion.setValue(currentQ.getNumber());
				
				// create a new question for the next one. 
				setupNewQuestion();

				setEnableNewQPanel(false);
				
				System.out.println(Bonus.getAllQuestions());
			}		
		});
		
		/*
		 * Creates a new Bonus Question, clears the interface
		 */
		btnNewQ.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent ae) {
				GameData g = GameData.getCurrentGame();
				int w = g.getCurrentWeek();
				currentQ = new BonusQuestion(w, Bonus.getNumQuestionsInWeek(w) + 1);
				
				setupNewQuestion();
			}
			
		});
		
		btnModify.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent ae) {
				currentQ = Bonus.getQuestion(getCurrentWeek(), getCurrentQNum());
				
				setupFromQuestion(currentQ);
			}			
		});
		
		// Action listener to show the correct pane on next screen
		ActionListener rbClick = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent ae) {
				if (ae.getSource() == rbMultChoice){
					cardQType.show(pnlQTypeSwap, TYPE_MULTI);
				} else if (ae.getSource() == rbShortAnswer) {
					cardQType.show(pnlQTypeSwap, TYPE_SHORT);
				}
			}
		};
		
		rbMultChoice.addActionListener(rbClick);
		rbShortAnswer.addActionListener(rbClick);
		
		clWeek = new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent ce) {
				// set the question set to the current week
				int cw = getCurrentWeek();
				setQuestionSpinner(1, Bonus.getNumQuestionsInWeek(cw));
				
				setQuestionView(Bonus.getQuestion(cw, getCurrentQNum()));
				
				spnQuestion.setValue(getCurrentQNum());
				
				int gameWeek = GameData.getCurrentGame().getCurrentWeek();
				btnModify.setEnabled(cw == gameWeek);
			}			
		};
		
		spnWeek.addChangeListener(clWeek);
		
		clQuestion = new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent ce) {
				int cq = getCurrentQNum(); 
				int max = (Integer)snmQuestion.getMaximum();
				
				if (cq > max)
					return;
				setQuestionView(Bonus.getQuestion(getCurrentWeek(), getCurrentQNum()));
				currentQ = Bonus.getQuestion(getCurrentWeek(), getCurrentQNum());
			}
		};
		
		spnQuestion.addChangeListener(clQuestion);
	}