public void manageShows()
	{
		//clear the panel
		panel.removeAll();

		//map of shows to update buttons for the update all button to manipulate
		final HashMap<Show, JButton> uData = new HashMap<Show, JButton>();
		final ArrayList<Component> hideComponents = new ArrayList<Component>();
		
		//create the add show components for referencing
		final JButton btnAdd = new JButton("Add");
		final JTextPane addName = new JTextPane();
		
		//create the header with the update all button
		JPanel header = new JPanel(new BorderLayout());
		JTextArea headerText = new JTextArea("Your Shows:");
		headerText.setFont(new Font("Times New Roman", Font.BOLD, 20));
		header.add(headerText);
		final JButton btnUpdateAll = new JButton("Update All");
		btnUpdateAll.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				new Thread()
				{
					public void run()
					{
						Main.enableButtons(false);
						btnUpdateAll.setEnabled(false);
						btnUpdateAll.setText("Updating All");
						synchronized(m)
						{
							//disable the buttons
							for(Component comp: hideComponents)
							{
								comp.setEnabled(false);
							}
							
							//disable the update buttons
							for(Entry<Show, JButton> update: uData.entrySet())
							{
								update.getValue().setEnabled(false);
							}
							
							//disable the add show button and text field
							addName.setEnabled(false);
							btnAdd.setEnabled(false);
							
							for(int i=0; i<ShowTracker.shows.size(); ++i)
							{
								Show show = ShowTracker.shows.get(i);
								JButton button = uData.get(show);
								try
								{
									synchronized(m)
									{
										Color c = button.getBackground();
										button.setBackground(Color.LIGHT_GRAY);
										button.setText("Updating");
										show.update();
										button.setBackground(c);
										button.setText("Updated");
									}
								}
								catch(Exception e)
								{
									button.setText("Update failed");
								}
							}
							
							//reenable the delete buttons and add show components
							for(Component comp: hideComponents)
							{
								comp.setEnabled(true);
							}
							addName.setEnabled(true);
							btnAdd.setEnabled(true);
							
							btnUpdateAll.setText("Updated All");
						}
						Main.enableButtons(true);
					}
				}.start();
			}
		});
		header.add(btnUpdateAll, BorderLayout.LINE_END);
		panel.add(header, BorderLayout.PAGE_START);

		//create a list of shows(each with a delete and update button)
		final Box showBox = Box.createVerticalBox();
		for(int i=0; i<ShowTracker.shows.size(); ++i)
		{
			//create the panel and set up the layout
			final JPanel showPanel = new JPanel();
			showPanel.setBackground(Color.WHITE);
			showPanel.setBorder(new LineBorder(Color.BLACK));
			showPanel.setLayout(new GridBagLayout());
			GridBagConstraints gbc = new GridBagConstraints();
			gbc.anchor = GridBagConstraints.CENTER;

			//create the show name text area
			final Show show = ShowTracker.shows.get(i);
			JTextArea showName = new JTextArea(show.toString());
			showName.setFont(new Font("Times New Roman", Font.PLAIN, 20));
			showName.setEditable(false);
			showName.setWrapStyleWord(true);
			showName.setLineWrap(true);

			//create a box containing the show name and search text editor
			Box showText = Box.createVerticalBox();

			//add the prompt
			JTextArea searchTextEditPrompt = new JTextArea("Search String:");
			searchTextEditPrompt.setEditable(false);
			showText.add(searchTextEditPrompt);

			//create the editable text
			final JTextArea searchTextEdit = new JTextArea(show.getSearchText());
			searchTextEdit.setBorder(new LineBorder(Color.BLACK));
			searchTextEdit.setBackground(Color.LIGHT_GRAY);
			showText.add(searchTextEdit);

			//create the button to save the text
			final JButton btnSearchTextSave = new JButton("Save");
			btnSearchTextSave.setPreferredSize(new Dimension(showText.getPreferredSize().width, btnSearchTextSave.getPreferredSize().height));
			btnSearchTextSave.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					new Thread()
					{
						public void run()
						{
							btnSearchTextSave.setEnabled(false);
							btnSearchTextSave.setText("Saving");
							synchronized(m)
							{
								show.setSearchText(searchTextEdit.getText());
							}
							btnSearchTextSave.setText("Saved");
						}
					}.start();
				}
			});
			JPanel searchTextSaveStretcher = new JPanel(new GridBagLayout());
			searchTextSaveStretcher.add(btnSearchTextSave);
			showText.add(searchTextSaveStretcher);
			
			hideComponents.add(searchTextEdit);
			hideComponents.add(btnSearchTextSave);

			//create the box for the buttons
			Box buttonBox = Box.createVerticalBox();

			//delete button
			final JButton btnDelete = new JButton("Delete");
			hideComponents.add(btnDelete);
			final int showNum = i;
			btnDelete.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					new Thread()
					{
						public void run()
						{
							synchronized(m)
							{
								ShowTracker.removeShow(showNum);

								//return to the manage function
								manageShows();
							}
						}
					}.start();
				}
			});

			//update button
			final JButton btnUpdate = new JButton("Update");
			btnUpdate.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					new Thread()
					{
						public void run()
						{
							btnUpdate.setEnabled(false);
							try
							{
								synchronized(m)
								{
									Color c = btnUpdate.getBackground();
									btnUpdate.setBackground(Color.LIGHT_GRAY);
									btnUpdate.setText("Updating");
									show.update();
									btnUpdate.setBackground(c);
									btnUpdate.setText("Updated");
								}
							}
							catch(Exception e)
							{
								btnUpdate.setText("Update failed");
							}
						}
					}.start();
				}
			});

			//add the update button to update data
			uData.put(show, btnUpdate);

			//add the buttons to the button box
			buttonBox.add(btnDelete);
			buttonBox.add(btnUpdate);

			//add content to panel
			showPanel.add(showName, gbc);
			showPanel.add(new JPanel()
			{
				private static final long serialVersionUID = 1L;
				private ImageIcon image = show.getImage();
				protected void paintComponent(Graphics g) {
					super.paintComponent(g);
					if(image != null)
					{
						int destinationHeight = 75,
								destinationWidth = (int)(image.getIconWidth()/((double)image.getIconHeight()/(double)destinationHeight));

						setPreferredSize(new Dimension(destinationWidth, destinationHeight));
						g.drawImage(getScaledInstance(image, destinationWidth, destinationHeight), 0, 0, null);
						g.dispose();
						showPanel.revalidate();
					}
					else
						setVisible(false);
				}
			}, gbc);
			showPanel.add(showText, gbc);
			showPanel.add(buttonBox, gbc);
			showBox.add(showPanel);
		}
		panel.add(new JScrollPane(showBox), BorderLayout.CENTER);

		//create an "add" button at the bottom of the list
		final Box addBox = Box.createHorizontalBox();
		addName.addKeyListener(new KeyListener()
		{
			public void keyPressed(KeyEvent ke)
			{
				if(ke.getKeyCode() == KeyEvent.VK_ENTER)
				{
					addName.setEnabled(false);
					btnAdd.setEnabled(false);
					btnUpdateAll.setEnabled(false);
					Main.enableButtons(false);
					//disable the delete buttons
					for(Component comp: hideComponents)
					{
						comp.setEnabled(false);
					}
					//disable the update buttons
					for(Entry<Show, JButton> update: uData.entrySet())
					{
						update.getValue().setEnabled(false);
					}
					btnAdd.setText("Searching");
					new Thread()
					{
						public void run()
						{
							addShow(panel, addName.getText());
						}
					}.start();
				}
			}
			public void keyReleased(KeyEvent ke){}
			public void keyTyped(KeyEvent ke){}
		});
		btnAdd.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				addName.setEnabled(false);
				btnAdd.setEnabled(false);
				btnUpdateAll.setEnabled(false);
				Main.enableButtons(false);
				//disable the delete buttons
				for(Component comp: hideComponents)
				{
					comp.setEnabled(false);
				}
				//disable the update buttons
				for(Entry<Show, JButton> update: uData.entrySet())
				{
					update.getValue().setEnabled(false);
				}
				btnAdd.setText("Searching");
				new Thread()
				{
					public void run()
					{
						addShow(panel, addName.getText());
					}
				}.start();
			}
		});
		addBox.add(addName);
		addBox.add(btnAdd);

		panel.add(addBox, BorderLayout.PAGE_END);
		panel.revalidate();

		//put the focus in the add show field
		addName.requestFocus();
	}