public ChampionSelect (Container mainPanel) {
		SelectListener selectListener = new SelectListener();
		HoverListener hoverListener = new HoverListener();
		
		Dimension spacer = new Dimension (0, 12);

		Box allyPositions = new Box (BoxLayout.PAGE_AXIS);
		allyPositions.setBorder (new EmptyBorder (0, 6, 6, 6));
		
		allyPositions.add (Box.createRigidArea (spacer));
		JLabel allyLabel = new JLabel (new ImageIcon ("LoLTeamBuilder" + File.separator + "images" + File.separator + "label_allies.png"));
		allyLabel.setAlignmentX (Component.CENTER_ALIGNMENT);
		allyPositions.add (allyLabel);
		allyPositions.add (Box.createRigidArea (spacer));
		
		Box enemyPositions = new Box (BoxLayout.PAGE_AXIS);
		enemyPositions.setBorder (new EmptyBorder (0, 6, 6, 6));
		
		enemyPositions.add (Box.createRigidArea (spacer));
		JLabel enemyLabel = new JLabel (new ImageIcon ("LoLTeamBuilder" + File.separator + "images" + File.separator + "label_enemies.png"));
		enemyLabel.setAlignmentX (Component.CENTER_ALIGNMENT);
		enemyPositions.add (enemyLabel);
		enemyPositions.add (Box.createRigidArea (spacer));
		
		for (int i = 0; i < 10; i++) {
			boolean isEnemy = i < 5 ? false : true;
			positions[i] = new PositionBox (isEnemy, selectListener, hoverListener);
			if (isEnemy) {
				enemyPositions.add (Box.createRigidArea (spacer));
				enemyPositions.add (positions[i]);
			}
			else {
				allyPositions.add (Box.createRigidArea (spacer));
				allyPositions.add (positions[i]);
			}
		}
		
		allyPositions.add (Box.createVerticalGlue());
		enemyPositions.add (Box.createVerticalGlue());
		
		mainPanel.add (allyPositions, BorderLayout.LINE_START);
		mainPanel.add (enemyPositions, BorderLayout.LINE_END);
		
		EventHandler.addSlotLockListener (new SlotLockListener() {
			@Override
			public void onSlotLock() {
				calculateScores();
			}
		});
		
		EventHandler.addResetListener (new ResetListener() {
			@Override
			public void onReset() {
				for (PositionBox p : positions) p.reset (true);
				resetScores();
			}
		});
	}