// Title        : ANB Networked Hotel Management System
// Version      : 1.7
// Copyright	: Copyright (c)1999-2000
// Author	: Adrian Banks
// Company	: ANB
// Description	: A Networked Hotel Management System Used For Room Bookings
//                 And Table Reservations.
//
// Mod's	: Arrays added for easier component adding.
//		: Date and time show in status bar and update continuously.
//

import java.io.*;
import java.awt.*;
import java.net.*;
import java.util.*;
import java.awt.event.*;

public class Hotel extends Frame implements ActionListener, AdjustmentListener
{

//#################################### start of allocation of global user interface items #########################

	Label[] myLabels = {	/*customerPanel*/
				new Label("Customer No.   :",Label.LEFT),
				new Label("Surname        :",Label.LEFT),
				new Label("Other Name(s)  :",Label.LEFT),
				new Label("Address        :",Label.LEFT),
				new Label("Post Code      :",Label.LEFT),
				new Label("Telephone No.  :",Label.LEFT),
				new Label("Booking(s)     :",Label.LEFT),
				/*roomBooking Panel*/
				new Label("Booking No.    :",Label.LEFT),
				new Label("Room No.       :",Label.LEFT),
				new Label("No. Of People  :",Label.LEFT),
				new Label("Arrival Date   :",Label.LEFT),
				new Label("Departure Date :",Label.LEFT),
				new Label("Standard       :",Label.LEFT),
				new Label("Discount       :",Label.LEFT),
				new Label("Notes          :",Label.LEFT),
				/*tableBookingPanel*/
				new Label("Booking No.    :",Label.LEFT),
				new Label("Table No.      :",Label.LEFT),
				new Label("No. Of People  :",Label.LEFT),
				new Label("Date           :",Label.LEFT),
				new Label("Time           :",Label.LEFT),
				new Label("Notes          :",Label.LEFT),
				/*billPanel*/
				new Label("Booking No.    :",Label.LEFT),
				new Label("Bill Items     :",Label.LEFT),
				new Label("VAT            : �",Label.LEFT),
				new Label("TOTAL          : �",Label.LEFT),
				/*roomPanel*/
				new Label("Room No.       :",Label.LEFT),
				new Label("Current Status :",Label.LEFT),
				new Label("Booking No.(s) :",Label.LEFT),
				new Label("Standard       :",Label.LEFT),
				new Label("Room Size      :",Label.LEFT),
				new Label("Bed Type       :",Label.LEFT),
				new Label("Nightly Rate   : �",Label.LEFT),
				/*tablePanel*/
				new Label("Table No.      :",Label.LEFT),
				new Label("Current Status :",Label.LEFT),
				new Label("Booking No.(s) :",Label.LEFT)
				};

	static Socket t;
	static String server;
	static BufferedReader in;

	//Ports for input and output
	static final int INPORT = 5050;
	static final int OUTPORT = 5000;

	//Objcet Numbers
	static int nextCNum;
	static int nextRNum;
	static int nextTNum;
	static int nextRBNum;
	static int nextTBNum;
	static boolean newoneC = false;
	static boolean newoneR = false;
	static boolean newoneT = false;
	static boolean newoneRB = false;
	static boolean newoneTB = false;

	static ObjectInputStream ObIn;
	static ObjectOutputStream ObOut;

	static TodaysDate td;
	CardLayout cardLayout;
	Panel contentPanel, customerPanel, roomBookingPanel, tableBookingPanel, roomPanel, tablePanel, billPanel, managerPanel;
	Button button1, button2, button3, button4, button5, button6;
	static Label statusLabel1, statusLabel2;

	boolean cupdate, rbupdate, tbupdate, rupdate, tupdate;

        Dialog about;

	TextField custText1, custText2, custText3, custText4, custText5;
	TextField roomBookText1, roomBookText2, roomBookText3, roomBookText4, roomBookText5, roomBookText6, roomBookText7, roomBookText8;
	TextField tableBookText1, tableBookText2, tableBookText3, tableBookText4, tableBookText5;
	TextField billText1, billText2, billText3;
	TextField roomText1, roomText2;
	TextField tableText1;

	TextArea custArea1, custArea2;
	TextArea roomBookArea1, tableBookArea1;
	TextArea billArea1;
	TextArea roomArea1;
	TextArea tableArea1;

	Scrollbar roomBookScroll1, roomBookScroll2, roomBookScroll3, roomBookScroll4, roomBookScroll5, roomBookScroll6;
	Scrollbar tableBookScroll1, tableBookScroll2, tableBookScroll3;

	Button custButt1, custButt2;
	Button roomBookButt1, roomBookButt2;
	Button tableBookButt1, tableBookButt2;
	Button billButt1, billButt2;
	Button roomButt1, roomButt2;
	Button tableButt1, tableButt2;
        Button OKButton;

	Choice roomBookMenu1, roomBookMenu2, roomBookMenu3;
	Choice tableBookMenu1, tableBookMenu2;
	Choice roomMenu1, roomMenu2, roomMenu3;

	CheckboxGroup roomCheckGroup, tableCheckGroup;
	Checkbox roomBookCheck1;
	Checkbox roomCheckNull, roomCheck1, roomCheck2, roomCheck3, roomCheck4;
	Checkbox tableCheckNull, tableCheck1, tableCheck2;

//#################################### end of allocation of global user interface items #########################

	//Create the menu bar and the menu bar items
        MenuBar menuBar1 = new MenuBar();
        Menu menu1 = new Menu();
        Menu menu2 = new Menu();
        Menu menu3 = new Menu();
        Menu menu4 = new Menu();
        Menu menu5 = new Menu();
        Menu menu6 = new Menu();
        MenuItem menuItem1 = new MenuItem();
        MenuItem menuItem2 = new MenuItem();
        MenuItem menuItem3 = new MenuItem();
        MenuItem menuItem4 = new MenuItem();
        MenuItem menuItem5 = new MenuItem();
        MenuItem menuItem6 = new MenuItem();
        MenuItem menuItem7 = new MenuItem();
        MenuItem menuItem8 = new MenuItem();
        MenuItem menuItem9 = new MenuItem();
        MenuItem menuItem10 = new MenuItem();
	MenuItem menuItem11 = new MenuItem();

	public Hotel()
	{
//############################## start of basic layout ###############################

		// Set up the window
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((screenSize.width - 640) / 2, (screenSize.height - 480) / 2);
		setTitle(" ANB Networked Hotel Management System (�1999-2000)");
		setResizable(false);
		setBackground(Color.lightGray);

                //Stop the window from being maximised
                addComponentListener(new ComponentAdapter() {
                        public void componentResized(ComponentEvent evt) {
                                setSize(640,480);
                                Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
                                setLocation((scrnSize.width - 640) / 2, (scrnSize.height - 480) / 2);}});

		//Add a menu bar
		setMenuBar(menuBar1);
                menu1.setLabel("File");
                menu2.setLabel("New");
                menu3.setLabel("Booking");
                menu4.setLabel("Restaurant");
                menu5.setLabel("Manager");
                menu6.setLabel("About");
                menuItem1.setLabel("Back-Up Data Files");
                menuItem2.setLabel("-");
                menuItem3.setLabel("Exit");
                menuItem4.setLabel("Room");
                menuItem5.setLabel("Table");
                menuItem6.setLabel("-");
                menuItem7.setLabel("Customer");
                menuItem8.setLabel("Room");
                menuItem9.setLabel("Table");
                menuItem10.setLabel("About ANBHMS....");
                menuItem11.setLabel("Reset All Forms");
                menuBar1.add(menu1);
                menuBar1.add(menu2);
                menuBar1.add(menu4);
                menuBar1.add(menu5);
                menuBar1.add(menu5);
                menuBar1.add(menu6);
                menu1.add(menuItem11);
                menu1.add(menuItem1);
                menu1.add(menuItem2);
                menu1.add(menuItem3);
                menu2.add(menu3);
                menu3.add(menuItem4);
                menu3.add(menuItem5);
                menu2.add(menuItem6);
                menu2.add(menuItem7);
                menu2.add(menuItem8);
                menu2.add(menuItem9);
                menu6.add(menuItem10);

                //Add action listeners to the menu items
                menuItem1.addActionListener(this);
                menuItem3.addActionListener(this);
                menuItem4.addActionListener(this);
                menuItem5.addActionListener(this);
                menuItem7.addActionListener(this);
                menuItem8.addActionListener(this);
                menuItem9.addActionListener(this);
                menuItem10.addActionListener(this);
                menuItem11.addActionListener(this);

		//Create the main panel for the layout
		Panel mainPanel = new Panel();
		mainPanel.setLayout(null);
		add(mainPanel);

		//Create three panels - one for the buttons(tabs) at the top, one for
 		//the content of each button's panel, and the other as a status bar
		Panel buttonPanel = new Panel();
		buttonPanel.setLayout(null);
		contentPanel = new Panel();
		Panel statusPanel = new Panel();
		statusPanel.setLayout(null);
		buttonPanel.setBounds(0,0,639,30);
		contentPanel.setBounds(0,30,639,386);
		statusPanel.setBounds(0,416,639,15);
		mainPanel.add("buttonPanel",buttonPanel);
		mainPanel.add("contentPanel",contentPanel);
		mainPanel.add("statusPanel",statusPanel);

		//Set the content frame to have a CardLayout
		cardLayout = new CardLayout(5,5);
		contentPanel.setLayout(cardLayout);

		//Create six panels to show when the buttons are clicked
		customerPanel = new Panel();
		roomBookingPanel = new Panel();
		tableBookingPanel = new Panel();
		billPanel = new Panel();
		roomPanel = new Panel();
		tablePanel = new Panel();
		managerPanel = new Panel();
		//Add the panels
		contentPanel.add("customerPanel",customerPanel);
		contentPanel.add("roomBookingPanel",roomBookingPanel);
		contentPanel.add("tableBookingPanel",tableBookingPanel);
		contentPanel.add("billPanel",billPanel);
		contentPanel.add("roomPanel",roomPanel);
		contentPanel.add("tablePanel",tablePanel);
		contentPanel.add("managerPanel",managerPanel);
		//Change layout manager to null for all six panels
		customerPanel.setLayout(null);
		roomBookingPanel.setLayout(null);
		tableBookingPanel.setLayout(null);
		billPanel.setLayout(null);
		roomPanel.setLayout(null);
		tablePanel.setLayout(null);
		managerPanel.setLayout(null);

		//Create the buttons
		button1 = new Button("Customer");
		button2 = new Button("Room Booking");
		button3 = new Button("Table Booking");
		button4 = new Button("Bill");
		button5 = new Button("Room");
		button6 = new Button("Table");
		//Position the buttons
		button1.setBounds(30,2,90,25);
		button2.setBounds(126,2,90,25);
		button3.setBounds(222,2,90,25);
		button4.setBounds(318,2,90,25);
		button5.setBounds(414,2,90,25);
		button6.setBounds(510,2,90,25);
		//Add listeners to the buttons
		button1.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);
		button6.addActionListener(this);
		//Add the buttons
		buttonPanel.add("customerButton", button1);
		buttonPanel.add("roomBookingButton", button2);
		buttonPanel.add("tableBookingButton", button3);
		buttonPanel.add("billButton", button4);
		buttonPanel.add("RoomButton", button5);
		buttonPanel.add("TableButton", button6);
		//Set customer button to be selected
		button1.setBackground(Color.blue);
		button1.setForeground(Color.white);

//############################## end of basic layout ###############################


		//.setBounds(xpos,ypos,width,height);


//############################## start of labels ###############################

		//statusPanel
		statusLabel1 = new Label("",Label.LEFT);
		statusLabel2 = new Label("ANB Networked Hotel Management System (�1999-2000)",Label.LEFT);
		statusLabel1.setBounds(5,0,283,15);
		statusLabel2.setBounds(289,0,350,15);
		statusPanel.add("statusBarLabel1",statusLabel1);
		statusPanel.add("statusBarLabel2",statusLabel2);

		//customerPanel
		myLabels[0].setBounds(20,12,90,15);
		myLabels[1].setBounds(20,57,90,15);
		myLabels[2].setBounds(345,57,90,15);
		myLabels[3].setBounds(20,102,90,15);
		myLabels[4].setBounds(395,137,90,15);
		myLabels[5].setBounds(395,187,90,15);
		myLabels[6].setBounds(20,262,90,15);
		//roomBookingPanel
		myLabels[7].setBounds(20,12,90,15);
		myLabels[8].setBounds(20,57,90,15);
		myLabels[9].setBounds(315,57,90,15);
		myLabels[10].setBounds(20,102,90,15);
		myLabels[11].setBounds(315,102,90,15);
		myLabels[12].setBounds(20,147,90,15);
		myLabels[13].setBounds(315,147,90,15);
		myLabels[14].setBounds(20,192,90,15);
		//tableBookingPanel
		myLabels[15].setBounds(20,12,90,15);
		myLabels[16].setBounds(20,57,90,15);
		myLabels[17].setBounds(20,102,90,15);
		myLabels[18].setBounds(20,147,90,15);
		myLabels[19].setBounds(20,192,90,15);
		myLabels[20].setBounds(20,237,90,15);
		//billPanel
		myLabels[21].setBounds(20,12,90,15);
		myLabels[22].setBounds(20,57,90,15);
		myLabels[23].setBounds(20,292,90,15);
		myLabels[24].setBounds(20,337,90,15);
		//roomPanel
		myLabels[25].setBounds(20,12,90,15);
		myLabels[26].setBounds(315,12,90,15);
		myLabels[27].setBounds(20,102,90,15);
		myLabels[28].setBounds(20,262,90,15);
		myLabels[29].setBounds(265,262,90,15);
		myLabels[30].setBounds(20,307,90,15);
		myLabels[31].setBounds(265,307,90,15);
		//tablePanel
		myLabels[32].setBounds(20,12,90,15);
		myLabels[33].setBounds(315,12,90,15);
		myLabels[34].setBounds(20,102,90,15);

		for(int i = 0; i <= 6; i++)
			customerPanel.add("label"+i,myLabels[i]);

		for(int i = 7; i <= 14; i++)
			roomBookingPanel.add("label"+i,myLabels[i]);

		for(int i = 15; i <= 20; i++)
			tableBookingPanel.add("label"+i,myLabels[i]);

		for(int i = 21; i <= 24; i++)
			billPanel.add("label"+i,myLabels[i]);

		for(int i = 25; i <= 31; i++)
			roomPanel.add("label"+i,myLabels[i]);

		for(int i = 32; i <= 34; i++)
			tablePanel.add("label"+i,myLabels[i]);

//############################## start of scrollbars ###############################

		//roomBookingPanel
		roomBookScroll1 = new Scrollbar(Scrollbar.VERTICAL);
		roomBookScroll2 = new Scrollbar(Scrollbar.VERTICAL);
		roomBookScroll3 = new Scrollbar(Scrollbar.VERTICAL);
		roomBookScroll4 = new Scrollbar(Scrollbar.VERTICAL);
		roomBookScroll5 = new Scrollbar(Scrollbar.VERTICAL);
		roomBookScroll6 = new Scrollbar(Scrollbar.VERTICAL);
		//tableBookingPanel
		tableBookScroll1 = new Scrollbar(Scrollbar.VERTICAL);
		tableBookScroll2 = new Scrollbar(Scrollbar.VERTICAL);
		tableBookScroll3 = new Scrollbar(Scrollbar.VERTICAL);

		//roomBookingPanel
		roomBookScroll1.setMinimum(1);
		roomBookScroll2.setMinimum(1);
		roomBookScroll3.setMinimum(2000);
		roomBookScroll4.setMinimum(1);
		roomBookScroll5.setMinimum(1);
		roomBookScroll6.setMinimum(2000);
		//tableBookingPanel
		tableBookScroll1.setMinimum(1);
		tableBookScroll2.setMinimum(1);
		tableBookScroll3.setMinimum(2000);

		//roomBookingPanel
		roomBookScroll1.setMaximum(41);		//Don't know why???? - a bug???
		roomBookScroll2.setMaximum(22);
		roomBookScroll3.setMaximum(2100);
		roomBookScroll4.setMaximum(41);
		roomBookScroll5.setMaximum(22);
		roomBookScroll6.setMaximum(2100);
		//tableBookingPanel
		tableBookScroll1.setMaximum(41);
		tableBookScroll2.setMaximum(22);
		tableBookScroll3.setMaximum(2100);

		//roomBookingPanel
		roomBookScroll1.setValue(td.getDate());
		roomBookScroll2.setValue(td.getMonth());
		roomBookScroll3.setValue(td.getYear());
		roomBookScroll4.setValue(td.getDate() + 1);
		roomBookScroll5.setValue(td.getMonth());
		roomBookScroll6.setValue(td.getYear());
		//tableBookingPanel
		tableBookScroll1.setValue(td.getDate());
		tableBookScroll2.setValue(td.getMonth());
		tableBookScroll3.setValue(td.getYear());

		//roomBookingPanel
		roomBookScroll1.setBounds(140,100,15,20);
		roomBookScroll2.setBounds(180,100,15,20);
		roomBookScroll3.setBounds(230,100,15,20);
		roomBookScroll4.setBounds(445,100,15,20);
		roomBookScroll5.setBounds(485,100,15,20);
		roomBookScroll6.setBounds(535,100,15,20);
		//tableBookingPanel
		tableBookScroll1.setBounds(140,145,15,20);
		tableBookScroll2.setBounds(180,145,15,20);
		tableBookScroll3.setBounds(230,145,15,20);

		//roomBookingPanel
		roomBookScroll1.addAdjustmentListener(this);
		roomBookScroll2.addAdjustmentListener(this);
		roomBookScroll3.addAdjustmentListener(this);
		roomBookScroll4.addAdjustmentListener(this);
		roomBookScroll5.addAdjustmentListener(this);
		roomBookScroll6.addAdjustmentListener(this);
		//tableBookingPanel
		tableBookScroll1.addAdjustmentListener(this);
		tableBookScroll2.addAdjustmentListener(this);
		tableBookScroll3.addAdjustmentListener(this);

		//roomBookingPanel
		roomBookingPanel.add("roomBookScroll1",roomBookScroll1);
		roomBookingPanel.add("roomBookScroll2",roomBookScroll2);
		roomBookingPanel.add("roomBookScroll3",roomBookScroll3);
		roomBookingPanel.add("roomBookScroll4",roomBookScroll4);
		roomBookingPanel.add("roomBookScroll5",roomBookScroll5);
		roomBookingPanel.add("roomBookScroll6",roomBookScroll6);
		//tableBookingPanel
		tableBookingPanel.add("tableBookScroll1",tableBookScroll1);
		tableBookingPanel.add("tableBookScroll2",tableBookScroll2);
		tableBookingPanel.add("tableBookScroll3",tableBookScroll3);

//############################## start of buttons ###############################

		//customerPanel
		custButt1 = new Button("Find Customer");
		custButt2 = new Button("Update Details");
		//roomBookingPanel
		roomBookButt1 = new Button("Find Booking");
		roomBookButt2 = new Button("Update Details");
		//tableBookingPanel
		tableBookButt1 = new Button("Find Booking");
		tableBookButt2 = new Button("Update Details");
		//billPanel
		billButt1 = new Button("Print Bill");
		billButt2 = new Button("Payment");
		//roomPanel
		roomButt1 = new Button("Find Room");
		roomButt2 = new Button("Update Details");
		//tablePanel
		tableButt1 = new Button("Find Table");
		tableButt2 = new Button("Update Details");

		//customerPanel
		custButt1.setBounds(475,295,120,25);
		custButt2.setBounds(475,330,120,25);
		//roomBookingPanel
		roomBookButt1.setBounds(475,295,120,25);
		roomBookButt2.setBounds(475,330,120,25);
		//tableBookingPanel
		tableBookButt1.setBounds(475,295,120,25);
		tableBookButt2.setBounds(475,330,120,25);
		//billPanel
		billButt1.setBounds(475,295,120,25);
		billButt2.setBounds(475,330,120,25);
		//roomPanel
		roomButt1.setBounds(475,295,120,25);
		roomButt2.setBounds(475,330,120,25);
		//tablePanel
		tableButt1.setBounds(475,295,120,25);
		tableButt2.setBounds(475,330,120,25);

		//customerPanel
		custButt1.addActionListener(this);
		custButt2.addActionListener(this);
		//roomBookingPanel
		roomBookButt1.addActionListener(this);
		roomBookButt2.addActionListener(this);
		//tableBookingPanel
		tableBookButt1.addActionListener(this);
		tableBookButt2.addActionListener(this);
		//billPanel
		billButt1.addActionListener(this);
		billButt2.addActionListener(this);
		//roomPanel
		roomButt1.addActionListener(this);
		roomButt2.addActionListener(this);
		//tablePanel
		tableButt1.addActionListener(this);
		tableButt2.addActionListener(this);

		customerPanel.add("custButt1", custButt1);
		customerPanel.add("custButt2", custButt2);
		roomBookingPanel.add("roomBookButt1", roomBookButt1);
		roomBookingPanel.add("roomBookButt2", roomBookButt2);
		tableBookingPanel.add("tableBookButt1", tableBookButt1);
		tableBookingPanel.add("tableBookButt2", tableBookButt2);
		billPanel.add("billButt1", billButt1);
		billPanel.add("billButt2", billButt2);
		roomPanel.add("roomButt1", roomButt1);
		roomPanel.add("roomButt2", roomButt2);
		tablePanel.add("tableButt1", tableButt1);
		tablePanel.add("tableButt2", tableButt2);

//############################## start of drop down menus ###############################

		//roomBookingPanel
		roomBookMenu1 = new Choice();
		roomBookMenu2 = new Choice();
		roomBookMenu3 = new Choice();
		roomBookMenu1.addItem("   ");
		roomBookMenu1.addItem(" 1 ");
		roomBookMenu1.addItem(" 2 ");
		roomBookMenu1.addItem(" 3 ");
		roomBookMenu1.addItem(" 4 ");
		roomBookMenu2.addItem(" None ");
		roomBookMenu2.addItem(" 5 %  ");
		roomBookMenu2.addItem(" 10 % ");
		roomBookMenu2.addItem(" 15 % ");
		roomBookMenu2.addItem(" 20 % ");
		roomBookMenu3.addItem("        ");
		roomBookMenu3.addItem(" Basic  ");
		roomBookMenu3.addItem(" Luxury ");
		roomBookMenu1.setBounds(420,55,50,15);
		roomBookMenu2.setBounds(420,145,70,15);
		roomBookMenu3.setBounds(115,145,100,15);
		roomBookingPanel.add("roomBookMenu1",roomBookMenu1);
		roomBookingPanel.add("roomBookMenu2",roomBookMenu2);
		roomBookingPanel.add("roomBookMenu3",roomBookMenu3);

		//tableBookingPanel
		tableBookMenu1 = new Choice();
		tableBookMenu2 = new Choice();
		tableBookMenu1.addItem("   ");
		tableBookMenu1.addItem(" 1 ");
		tableBookMenu1.addItem(" 2 ");
		tableBookMenu1.addItem(" 3 ");
		tableBookMenu1.addItem(" 4 ");
		tableBookMenu2.addItem("       ");
		tableBookMenu2.addItem(" 11:00 ");
		tableBookMenu2.addItem(" 12:00 ");
		tableBookMenu2.addItem(" 13:00 ");
		tableBookMenu2.addItem(" 17:00 ");
		tableBookMenu2.addItem(" 18:00 ");
		tableBookMenu2.addItem(" 19:00 ");
		tableBookMenu2.addItem(" 20:00 ");
		tableBookMenu2.addItem(" 21:00 ");
		tableBookMenu2.addItem(" 22:00 ");
		tableBookMenu1.setBounds(115,100,50,15);
		tableBookMenu2.setBounds(115,190,70,15);
		tableBookingPanel.add("tableBookMenu1",tableBookMenu1);
		tableBookingPanel.add("tableBookMenu2",tableBookMenu2);

		//roomPanel
		roomMenu1 = new Choice();
		roomMenu2 = new Choice();
		roomMenu3 = new Choice();
		roomMenu1.addItem("        ");
		roomMenu1.addItem(" Basic  ");
		roomMenu1.addItem(" Luxury ");
		roomMenu2.addItem("   ");
		roomMenu2.addItem(" 1 ");
		roomMenu2.addItem(" 2 ");
		roomMenu2.addItem(" 3 ");
		roomMenu2.addItem(" 4 ");
		roomMenu3.addItem("        ");
		roomMenu3.addItem(" Single ");
		roomMenu3.addItem(" Double ");
		roomMenu1.setBounds(115,260,70,15);
		roomMenu2.setBounds(370,260,50,15);
		roomMenu3.setBounds(115,305,70,15);
		roomPanel.add("roomMenu1",roomMenu1);
		roomPanel.add("roomMenu2",roomMenu2);
		roomPanel.add("roomMenu3",roomMenu3);

//############################## start of checkboxes ###############################

		//roomBookingPanel
		roomBookCheck1 = new Checkbox(" Guest Checked In", false);
		roomBookCheck1.setBounds(420,12,150,15);
		roomBookingPanel.add("roomBookCheck1",roomBookCheck1);

		//roomPanel
		roomCheckGroup = new CheckboxGroup();
		roomCheckNull = new Checkbox(" ",false,roomCheckGroup);
		roomCheck1 = new Checkbox(" Vacant",false,roomCheckGroup);
		roomCheck2 = new Checkbox(" Occupied",false,roomCheckGroup);
		roomCheck3 = new Checkbox(" Cleaning In Progress",false,roomCheckGroup);
		roomCheck4 = new Checkbox(" Repair Needed",false,roomCheckGroup);
		roomCheck1.setBounds(420,12,150,20);
		roomCheck2.setBounds(420,32,150,20);
		roomCheck3.setBounds(420,52,150,20);
		roomCheck4.setBounds(420,72,150,20);
		roomPanel.add("roomCheck1",roomCheck1);
		roomPanel.add("roomCheck2",roomCheck2);
		roomPanel.add("roomCheck3",roomCheck3);
		roomPanel.add("roomCheck4",roomCheck4);

		//tablePanel
		tableCheckGroup = new CheckboxGroup();
		tableCheckNull = new Checkbox(" ",false,tableCheckGroup);
		tableCheck1 = new Checkbox(" Vacant",false,tableCheckGroup);
		tableCheck2 = new Checkbox(" Occupied",false,tableCheckGroup);
		tableCheck1.setBounds(420,12,150,20);
		tableCheck2.setBounds(420,32,150,20);
		tablePanel.add("tableCheck1",tableCheck1);
		tablePanel.add("tableCheck2",tableCheck2);

//############################## start of textfields ###############################

		//customerPanel
		custText1 = new TextField("",15);
		custText2 = new TextField("",15);
		custText3 = new TextField("",20);
		custText4 = new TextField("",15);
		custText5 = new TextField("",15);
		//roomBookingPanel
		roomBookText1 = new TextField("",15);
		roomBookText2 = new TextField("",15);
		roomBookText3 = new TextField(roomBookScroll1.getValue() + "",2);
		roomBookText4 = new TextField(roomBookScroll2.getValue() + "",2);
		roomBookText5 = new TextField(roomBookScroll3.getValue() + "",4);
		roomBookText6 = new TextField(roomBookScroll4.getValue() + "",2);
		roomBookText7 = new TextField(roomBookScroll5.getValue() + "",2);
		roomBookText8 = new TextField(roomBookScroll6.getValue() + "",4);
		//tableBookingPanel
		tableBookText1 = new TextField("",15);
		tableBookText2 = new TextField("",15);
		tableBookText3 = new TextField(tableBookScroll1.getValue() + "",2);
		tableBookText4 = new TextField(tableBookScroll2.getValue() + "",2);
		tableBookText5 = new TextField(tableBookScroll3.getValue() + "",4);
		//billPanel
		billText1 = new TextField("",15);
		billText2 = new TextField("",15);
		billText3 = new TextField("",15);
		//roomPanel
		roomText1 = new TextField("",15);
		roomText2 = new TextField("",15);
		//tablePanel
		tableText1 = new TextField("",15);

		//customerPanel
		custText1.setBounds(115,10,100,20);
		custText2.setBounds(115,55,150,20);
		custText3.setBounds(445,55,150,20);
		custText4.setBounds(495,135,100,20);
		custText5.setBounds(495,185,100,20);
		//roomBookingPanel
		roomBookText1.setBounds(115,10,100,20);
		roomBookText2.setBounds(115,55,100,20);
		roomBookText3.setBounds(115,100,25,20);
		roomBookText4.setBounds(155,100,25,20);
		roomBookText5.setBounds(195,100,35,20);
		roomBookText6.setBounds(420,100,25,20);
		roomBookText7.setBounds(460,100,25,20);
		roomBookText8.setBounds(500,100,35,20);
		//tableBookingPanel
		tableBookText1.setBounds(115,10,100,20);
		tableBookText2.setBounds(115,55,100,20);
		tableBookText3.setBounds(115,145,25,20);
		tableBookText4.setBounds(155,145,25,20);
		tableBookText5.setBounds(195,145,35,20);
		//billPanel
		billText1.setBounds(115,10,100,20);
		billText2.setBounds(115,290,100,20);
		billText3.setBounds(115,335,100,20);
		//roomPanel
		roomText1.setBounds(115,10,100,20);
		roomText2.setBounds(370,305,70,20);
		//tablePanel
		tableText1.setBounds(115,10,100,20);

		customerPanel.add("custText1",custText1);
		customerPanel.add("custText2",custText2);
		customerPanel.add("custText3",custText3);
		customerPanel.add("custText4",custText4);
		customerPanel.add("custText5",custText5);
		roomBookingPanel.add("roomBookText1",roomBookText1);
		roomBookingPanel.add("roomBookText2",roomBookText2);
		roomBookingPanel.add("roomBookText3",roomBookText3);
		roomBookingPanel.add("roomBookText4",roomBookText4);
		roomBookingPanel.add("roomBookText5",roomBookText5);
		roomBookingPanel.add("roomBookText6",roomBookText6);
		roomBookingPanel.add("roomBookText7",roomBookText7);
		roomBookingPanel.add("roomBookText8",roomBookText8);
		tableBookingPanel.add("tableBookText1",tableBookText1);
		tableBookingPanel.add("tableBookText2",tableBookText2);
		tableBookingPanel.add("tableBookText3",tableBookText3);
		tableBookingPanel.add("tableBookText4",tableBookText4);
		tableBookingPanel.add("tableBookText5",tableBookText5);
		billPanel.add("billText1",billText1);
		billPanel.add("billText2",billText2);
		billPanel.add("billText3",billText3);
		roomPanel.add("roomText1",roomText1);
		roomPanel.add("roomText2",roomText2);
		tablePanel.add("tableText1",tableText1);

//############################## start of textareas ###############################

		//customerPanel
		custArea1 = new TextArea("",7,20,1);
		custArea2 = new TextArea("",5,15,1);
		//roomBookingPanel
		roomBookArea1 = new TextArea("",5,50,1);
		//tableBookingPanel
		tableBookArea1 = new TextArea("",5,50,1);
		//billPanel
		billArea1 = new TextArea("",9,75,1);
		//roomPanel
		roomArea1 = new TextArea("",6,60,1);
		//tablePanel
		tableArea1 = new TextArea("",9,60,1);

		//customerPanel
		custArea1.setBounds(115,100,200,130);
		custArea2.setBounds(115,260,230,100);
		//roomBookingPanel
		roomBookArea1.setBounds(115,192,300,100);
		//tableBookingPanel
		tableBookArea1.setBounds(115,237,300,100);
		//billPanel
		billArea1.setBounds(115,55,430,210);
		//roomPanel
		roomArea1.setBounds(115,100,240,140);
		//tablePanel
		tableArea1.setBounds(115,100,300,250);

		customerPanel.add("custArea1",custArea1);
		customerPanel.add("custArea2",custArea2);
		roomBookingPanel.add("roomBookArea1",roomBookArea1);
		tableBookingPanel.add("tableBookArea1",tableBookArea1);
		billPanel.add("billArea1",billArea1);
		roomPanel.add("roomArea1",roomArea1);
		tablePanel.add("tableArea1",tableArea1);

//############################## end of layout of panels ###############################

		changeEnabledState(false,"all");
		//room number disabled on room booking panel
                roomBookText2.setEditable(false);
		clearForms();
	}

	public static void main(String [] args) throws IOException
	{
		System.out.println("");
		System.out.println("**********************************************");
		System.out.println("*                                            *");
		System.out.println("*   ANB Networked Hotel Management System    *");
		System.out.println("*         (Client Application)               *");
		System.out.println("*   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    *");
		System.out.println("*         �1999-2000 Adrian Banks            *");
		System.out.println("*                                            *");
		System.out.println("**********************************************");

		//Get today's date
       		td = new TodaysDate();
		td.Print();

		Frame f = new Hotel();

		//Set up new thread for clock
		DateTimeBar dtb = new DateTimeBar(statusLabel1);
		dtb.start();

		try
		{
			in = new BufferedReader(new InputStreamReader(System.in));
			System.out.println("  Enter IP Of Server To Connect To");
			System.out.print("     (Leave Blank For Local Host)  :> ");
			server = in.readLine();
			System.out.println("");

			//Connect to server
			t = new Socket(server, OUTPORT);
			ObOut = new ObjectOutputStream(t.getOutputStream());
			ObIn = new ObjectInputStream(t.getInputStream());
			System.out.println("  Connected To Server");
			System.out.println("");

			//Set the next object numbers
			try
			{
				Numbers n = (Numbers) ObIn.readObject();
				nextCNum = n.getCNum();
				nextRNum = n.getRNum();
				nextTNum = n.getTNum();
				nextRBNum = n.getRBNum();
				nextTBNum = n.getTBNum();
			}
			catch(ClassNotFoundException cnfe)
			{
				System.out.println("  ERROR - Cannot Allocate Object Numbers");
				System.out.println("  Exiting System..........");
				System.exit(0);
			}
	
			System.out.println("  Initialising GUI..........");

			//possibly get rid of and put option in menu bar to quit and save info..........
			f.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					try
					{
						t.close();
					}
					catch (IOException ioe) {}

					System.out.println("  Connection To Server Closed");
					System.out.println("  Exiting System............");
					System.exit(0);
				}
			});

			f.setSize(640, 480);
			f.setVisible(true);

			System.out.println("  System Running............");
		}
		catch (UnknownHostException uhe)
		{
			System.out.println("  ERROR - Cannot Find Server");
			System.out.println("  Exiting System..........");
			System.exit(0);
		}
		catch (ConnectException ce)
		{
			System.out.println("  ERROR - Cannot Find Server");
			System.out.println("  Exiting System..........");
			System.exit(0);
		}
	}

	public void actionPerformed(ActionEvent e)
	{
               	showMessage("ANB Networked Hotel Management System (�1999-2000)");

                //************************ menu items ***************************
                //Back-up data files
                if (e.getSource() == menuItem1)
                {
                        System.out.println("back-up data files");
                }
		//Reset All Forms
                if (e.getSource() == menuItem11)
                {
			clearForms();
                        changeEnabledState(false,"all");
                }
                //Exit
                if (e.getSource() == menuItem3)
                {
			try
			{
				t.close();
			}
			catch (IOException ioe) {}

			System.out.println("  Connection To Server Closed");
			System.out.println("  Exiting System............");
			System.exit(0);
                }
                //Create a room booking
                if (e.getSource() == menuItem4)
                {
                	if (custText2.getText().compareTo("") == 0) 
                        {
                        	showMessage("Please Enter (Or Find) Customer Details First");
                        }
                        else
                        {
	                        changeButton(button2, button1, button3, button4, button5, button6);
				changeEnabledState(false,"all");
       		                changeEnabledState(true,"rb");
				roomBookText1.setText("RB" + nextRBNum);
				roomBookText1.setEditable(false);
                        	cardLayout.show(contentPanel,"roomBookingPanel");
                        	newoneRB = true;
                        }
                }
                //Create a table booking
                if (e.getSource() == menuItem5)
                {
                	if (custText2.getText().compareTo("") == 0)
                        {
                        	showMessage("Please Enter (Or Find) Customer Details First");
                        }
                        else
                        {
	                        changeButton(button3, button1, button2, button4, button5, button6);
				changeEnabledState(false,"all");
	                        changeEnabledState(true,"tb");
				tableBookText1.setText("TB" + nextTBNum);
				tableBookText1.setEditable(false);
	                        cardLayout.show(contentPanel,"tableBookingPanel");
	                        newoneTB = true;
                        }
                }
                //Create a new customer
                if (e.getSource() == menuItem7)
                {
                        changeButton(button1, button2, button3, button4, button5, button6);
			changeEnabledState(false,"all");
                        changeEnabledState(true,"c");
                        clearForms();
			custText1.setText("CN" + nextCNum);
			custText1.setEditable(false);
                        cardLayout.show(contentPanel,"customerPanel");
                        newoneC = true;
                }
                //Create a new room
                if (e.getSource() == menuItem8)
                {
                        changeButton(button5, button1, button2, button3, button4, button6);
			changeEnabledState(false,"all");
                        changeEnabledState(true,"r");
                        clearForms();
			roomText1.setText(nextRNum + "");
			roomText1.setEditable(false);
                        cardLayout.show(contentPanel,"roomPanel");
                        newoneR = true;
                }
                //Create a new table
                if (e.getSource() == menuItem9)
                {
                        changeButton(button6, button1, button2, button3, button4, button5);
			changeEnabledState(false,"all");
                        changeEnabledState(true,"t");
                        clearForms();
			tableText1.setText(nextTNum + "");
			tableText1.setEditable(false);
                        cardLayout.show(contentPanel,"tablePanel");
                        newoneT = true;
                }
                //About ANBHMS
                if (e.getSource() == menuItem10)
                {
                	about = new Dialog(this," About ANBHMS........",true);

			Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
			about.setLocation((screenSize.width - 320) / 2, (screenSize.height - 194) / 2);
			about.setResizable(false);
			about.setBackground(Color.lightGray);

			//Create the main panel for the layout
			Panel mainPanel = new Panel();
			mainPanel.setLayout(null);
			about.add(mainPanel);

			//Create the labels
			Label label1 = new Label();
			Label label2 = new Label();
			Label label3 = new Label();
			Label label4 = new Label();
			Label label5 = new Label();
			label1.setFont(new Font("Dialog", 1, 25));
			label2.setFont(new Font("Dialog", 1, 25));
			label1.setText("ANB Networked Hotel");
			label2.setText("Management System");
			label3.setText("Version 1.7");
			label4.setText("�1999-2000 Adrian Banks");
			label5.setText("(MEng ESE Leicester University)");

			//Create an OK button
			OKButton = new Button();
			OKButton.setLabel("OK");
			OKButton.addActionListener(this);

			label1.setBounds(30,10,260,30);
			label2.setBounds(37,35,246,30);
			label3.setBounds(235,75,65,15);
			label4.setBounds(30,100,160,15);
			label5.setBounds(30,125,180,15);
			OKButton.setBounds(230,120,70,30);

			mainPanel.add(label1);
			mainPanel.add(label2);
			mainPanel.add(label3);
			mainPanel.add(label4);
			mainPanel.add(label5);
			mainPanel.add("OKButton",OKButton);

                        about.setSize(320,194);
                        about.setVisible(true);
                }
                if (e.getSource() == OKButton)
                {
                	about.setVisible(false);
                }

		//************************ panel change buttons ***************************
		if (e.getSource() == button1)
		{
			changeButton(button1, button2, button3, button4, button5, button6);
                        //changeEnabledState(false,"all");
			cardLayout.show(contentPanel,"customerPanel");
		}
		if (e.getSource() == button2)
		{
			changeButton(button2, button1, button3, button4, button5, button6);
                        //changeEnabledState(false,"all");
			cardLayout.show(contentPanel,"roomBookingPanel");
		}
		if (e.getSource() == button3)
		{
			changeButton(button3, button1, button2, button4, button5, button6);
                        //changeEnabledState(false,"all");
			cardLayout.show(contentPanel,"tableBookingPanel");
		}
		if (e.getSource() == button4)
		{
			changeButton(button4, button1, button2, button3, button5, button6);
                        //changeEnabledState(false,"all");
			cardLayout.show(contentPanel,"billPanel");
		}
		if (e.getSource() == button5)
		{
			changeButton(button5, button1, button2, button3, button4, button6);
                        //changeEnabledState(false,"all");
			cardLayout.show(contentPanel,"roomPanel");
		}
		if (e.getSource() == button6)
		{
			changeButton(button6, button1, button2, button3, button4, button5);
                        //changeEnabledState(false,"all");
			cardLayout.show(contentPanel,"tablePanel");
		}

		//************************ customer buttons ***************************
		//Find Customer
		if (e.getSource() == custButt1)
		{
			newoneC = false;
			newoneR = false;
			newoneT = false;
			newoneRB = false;
			newoneTB = false;

			ObjectType ot = new ObjectType("customer","find");
			String cnum = new String(custText1.getText().toUpperCase());

			try
			{
				ObOut.writeObject(ot);
				ObOut.writeObject(cnum);
			}
			catch (IOException ioe)
			{
				showMessage("  ERROR - Could Not Send Data");
				System.out.println("ERROR - Could Not Send Data");
			}

			try
			{
                               	clearForms();
				Customer c = (Customer) ObIn.readObject();

				custText1.setText(c.getNumber());
				custText2.setText(c.getSurname());
				custText3.setText(c.getOther_Names());
				custArea1.setText(c.getAddress());
				custText4.setText(c.getPostcode());
				custText5.setText(c.getTel_Number());

                               	if (c.getNumber().compareTo("Not Found") == 0)
                                {
                                	changeEnabledState(false,"all");
                                     	showMessage("No Record Of Customer");
				}
                                else
                                {
                                	changeEnabledState(true,"c");/*rbtbb*/
                                        custText1.setEditable(false);
                                }
			}
			catch (ClassNotFoundException cnfe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (OptionalDataException ode)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
		}
		//Update Customer
		if ((e.getSource() == custButt2) && cupdate && !((custText1.getText().compareTo("") == 0) || (custText1.getText().compareTo("Not Found") == 0)))
		{
                	if (newoneC)
                        {
                        	newoneC = false;
                                nextCNum++;
                        }

                	showMessage("Updating Customer Details");

			ObjectType ot = new ObjectType("customer","update");
			Customer c = new Customer();

			c.setNumber(custText1.getText().toUpperCase());
			c.setSurname(custText2.getText());
			c.setOther_Names(custText3.getText());
			c.setAddress(custArea1.getText());
			c.setPostcode(custText4.getText());
			c.setTel_Number(custText5.getText());

			try
			{
				ObOut.writeObject(ot);
				ObOut.writeObject(c);
	                	showMessage("Customer Details Updated Successfully");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Send Data");
                                showMessage("ERROR - Could Not Send Data");
			}
		}

		//************************ room booking buttons ***************************
		//Find Room Booking
		if (e.getSource() == roomBookButt1)
		{
			newoneC = false;
			newoneR = false;
			newoneT = false;
			newoneRB = false;
			newoneTB = false;

			ObjectType ota = new ObjectType("roombooking","find");
			String rbnum = new String(roomBookText1.getText().toUpperCase());

			try
			{
				ObOut.writeObject(ota);
				ObOut.writeObject(rbnum);
			}
			catch (IOException ioe)
			{
				showMessage("  ERROR - Could Not Send Data");
				System.out.println("ERROR - Could Not Send Data");
			}

			try
			{
                               	clearForms();
				RoomBooking rb = (RoomBooking) ObIn.readObject();

				ObjectType ot = new ObjectType("customer","find");
				String cnum = new String(rb.getCustomerNumber());

				ObOut.writeObject(ot);
				ObOut.writeObject(cnum);

				Customer c = (Customer) ObIn.readObject();

				custText1.setText(c.getNumber());
				custText2.setText(c.getSurname());
				custText3.setText(c.getOther_Names());
				custArea1.setText(c.getAddress());
				custText4.setText(c.getPostcode());
				custText5.setText(c.getTel_Number());

                               	if (c.getNumber().compareTo("Not Found") == 0)
                                {
                                     	showMessage("No Record Of Customer");
				}
                                else
                                {
                                        custText1.setEditable(false);
                                }

				roomBookText1.setText(rb.getNumber());
				custText1.setText(rb.getCustomerNumber());
				roomBookText2.setText(rb.getRoomNumber());
				roomBookText3.setText(rb.getArrivalDateDay());
				roomBookText4.setText(rb.getArrivalDateMonth());
				roomBookText5.setText(rb.getArrivalDateYear());
				roomBookText6.setText(rb.getDepartureDateDay());
				roomBookText7.setText(rb.getDepartureDateMonth());
				roomBookText8.setText(rb.getDepartureDateYear());

				if (rb.getCheckedIn().compareTo("yes") == 0)
					roomBookCheck1.setState(true);
				else
					roomBookCheck1.setState(false);

				if (rb.getStandard().compareTo("basic") == 0)
					roomBookMenu3.select(" Basic  ");
				if (rb.getStandard().compareTo("luxury") == 0)
					roomBookMenu3.select(" Luxury ");

				if (rb.getNoPeople().compareTo("1") == 0)
					roomBookMenu1.select(" 1 ");
				if (rb.getNoPeople().compareTo("2") == 0)
					roomBookMenu1.select(" 2 ");
				if (rb.getNoPeople().compareTo("3") == 0)
					roomBookMenu1.select(" 3 ");
				if (rb.getNoPeople().compareTo("4") == 0)
					roomBookMenu1.select(" 4 ");

				if (rb.getDiscount().compareTo("none") == 0)
					roomBookMenu2.select(" None ");
				if (rb.getDiscount().compareTo("5") == 0)
					roomBookMenu2.select(" 5 %  ");
				if (rb.getDiscount().compareTo("10") == 0)
					roomBookMenu2.select(" 10 % ");
				if (rb.getDiscount().compareTo("15") == 0)
					roomBookMenu2.select(" 15 % ");
				if (rb.getDiscount().compareTo("20") == 0)
					roomBookMenu2.select(" 20 % ");

				roomBookArea1.setText(rb.getNotes());

                               	if (rb.getNumber().compareTo("Not Found") == 0)
                                {
                                	changeEnabledState(false,"all");
                                     	showMessage("No Record Of Room Booking");
				}
                                else
                                {
                                	changeEnabledState(true,"rb");/*ctbb*/
                                        roomBookText1.setEditable(false);
                                        roomBookButt2.setLabel("Update Details");
                                        rbupdate = true;
                                }
			}
			catch (ClassNotFoundException cnfe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (OptionalDataException ode)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
		}
		//Update Room Booking
		if ((e.getSource() == roomBookButt2) && rbupdate && (roomBookButt2.getLabel().compareTo("Update Details") == 0) && !((roomBookText1.getText().compareTo("") == 0) || (roomBookText1.getText().compareTo("Not Found") == 0)))
		{
                        String bookingOK = "";

                        //check new details are ok
                	if (!newoneRB)
                        {
        	                ObjectType ot = new ObjectType("roombooking","checkup");
				RoomBooking rb = new RoomBooking();

				rb.setNumber(roomBookText1.getText().toUpperCase());
				rb.setArrivalDateDay(roomBookText3.getText());
				rb.setArrivalDateMonth(roomBookText4.getText());
				rb.setArrivalDateYear(roomBookText5.getText());
				rb.setDepartureDateDay(roomBookText6.getText());
				rb.setDepartureDateMonth(roomBookText7.getText());
				rb.setDepartureDateYear(roomBookText8.getText());

				if (roomBookCheck1.getState() == true)
					rb.setCheckedIn("yes");
				else
					rb.setCheckedIn("no");

				if (roomBookMenu3.getSelectedItem().compareTo(" Basic  ") == 0)
						rb.setStandard("basic");
				if (roomBookMenu3.getSelectedItem().compareTo(" Luxury ") == 0)
						rb.setStandard("luxury");

				if (roomBookMenu1.getSelectedItem().compareTo(" 1 ") == 0)
						rb.setNoPeople("1");
				if (roomBookMenu1.getSelectedItem().compareTo(" 2 ") == 0)
						rb.setNoPeople("2");
				if (roomBookMenu1.getSelectedItem().compareTo(" 3 ") == 0)
						rb.setNoPeople("3");
				if (roomBookMenu1.getSelectedItem().compareTo(" 4 ") == 0)
						rb.setNoPeople("4");

				if (roomBookMenu2.getSelectedItem().compareTo(" None ") == 0)
						rb.setDiscount("none");
				if (roomBookMenu2.getSelectedItem().compareTo(" 5 %  ") == 0)
						rb.setDiscount("5");
				if (roomBookMenu2.getSelectedItem().compareTo(" 10 % ") == 0)
						rb.setDiscount("10");
				if (roomBookMenu2.getSelectedItem().compareTo(" 15 % ") == 0)
						rb.setDiscount("15");
				if (roomBookMenu2.getSelectedItem().compareTo(" 20 % ") == 0)
						rb.setDiscount("20");

				rb.setNotes(roomBookArea1.getText());

				if (checkDate(roomBookText3.getText(),roomBookText4.getText(),roomBookText5.getText(),roomBookText6.getText(),roomBookText7.getText(),roomBookText8.getText()))
        	                {
					try
					{
						ObOut.writeObject(ot);
		                                ObOut.writeObject(rb);

		                                bookingOK = (String) ObIn.readObject();
					}
					catch (IOException ioe)
					{
						showMessage("  ERROR - Could Not Send Data");
						System.out.println("ERROR - Could Not Send Data");
					}
		                        catch (ClassNotFoundException cnfe)
		                        {
						showMessage("  ERROR - Could Not Receive Data");
						System.out.println("ERROR - Could Not Receive Data");
		                        }

		                        if (bookingOK.compareTo("no") == 0)
		                        {
		                                showMessage("No Booking Available - Try Different Criteria");
		                        }
               	         	}
                        	else
                        	{
                        	 	showMessage("Invalid Dates - Please Correct Before Proceeding");
                        	}
                        }

                	if (newoneRB)
                        {
                        	newoneRB = false;
                                nextRBNum++;
                        }

                        //if updated details are ok
			if (bookingOK.compareTo("no") != 0)
			{
                		showMessage("Updating Room Booking Details");

				ObjectType ot = new ObjectType("roombooking","update");
				RoomBooking rb = new RoomBooking();

				rb.setNumber(roomBookText1.getText().toUpperCase());
				rb.setCustomerNumber(custText1.getText().toUpperCase());
        	                rb.setRoomNumber(roomBookText2.getText());
				rb.setArrivalDateDay(roomBookText3.getText());
				rb.setArrivalDateMonth(roomBookText4.getText());
				rb.setArrivalDateYear(roomBookText5.getText());
				rb.setDepartureDateDay(roomBookText6.getText());
				rb.setDepartureDateMonth(roomBookText7.getText());
				rb.setDepartureDateYear(roomBookText8.getText());

				if (roomBookCheck1.getState() == true)
					rb.setCheckedIn("yes");
				else
					rb.setCheckedIn("no");

				if (roomBookMenu3.getSelectedItem().compareTo(" Basic  ") == 0)
						rb.setStandard("basic");
				if (roomBookMenu3.getSelectedItem().compareTo(" Luxury ") == 0)
						rb.setStandard("luxury");

				if (roomBookMenu1.getSelectedItem().compareTo(" 1 ") == 0)
						rb.setNoPeople("1");
				if (roomBookMenu1.getSelectedItem().compareTo(" 2 ") == 0)
						rb.setNoPeople("2");
				if (roomBookMenu1.getSelectedItem().compareTo(" 3 ") == 0)
						rb.setNoPeople("3");
				if (roomBookMenu1.getSelectedItem().compareTo(" 4 ") == 0)
						rb.setNoPeople("4");

				if (roomBookMenu2.getSelectedItem().compareTo(" None ") == 0)
						rb.setDiscount("none");
				if (roomBookMenu2.getSelectedItem().compareTo(" 5 %  ") == 0)
						rb.setDiscount("5");
				if (roomBookMenu2.getSelectedItem().compareTo(" 10 % ") == 0)
						rb.setDiscount("10");
				if (roomBookMenu2.getSelectedItem().compareTo(" 15 % ") == 0)
						rb.setDiscount("15");
				if (roomBookMenu2.getSelectedItem().compareTo(" 20 % ") == 0)
						rb.setDiscount("20");

				rb.setNotes(roomBookArea1.getText());

				try
				{
					ObOut.writeObject(ot);
					ObOut.writeObject(rb);
		       	         	showMessage("Room Booking Details Updated Successfully");
				}
				catch (IOException ioe)
				{
					System.out.println("ERROR - Could Not Send Data");
               		                showMessage("ERROR - Could Not Send Data");
				}
			}
		}
		//Check Booking Details Are Available (ie. the dates)
		if ((e.getSource() == roomBookButt2) && rbupdate && (roomBookButt2.getLabel().compareTo("Check Booking") == 0) && !((roomBookText1.getText().compareTo("") == 0) || (roomBookText1.getText().compareTo("Not Found") == 0)))
		{
                        String bookingOK = "";

                        ObjectType ot = new ObjectType("roombooking","check");
			RoomBooking rb = new RoomBooking();

			rb.setNumber(roomBookText1.getText().toUpperCase());
			rb.setArrivalDateDay(roomBookText3.getText());
			rb.setArrivalDateMonth(roomBookText4.getText());
			rb.setArrivalDateYear(roomBookText5.getText());
			rb.setDepartureDateDay(roomBookText6.getText());
			rb.setDepartureDateMonth(roomBookText7.getText());
			rb.setDepartureDateYear(roomBookText8.getText());

			if (roomBookCheck1.getState() == true)
				rb.setCheckedIn("yes");
			else
				rb.setCheckedIn("no");

			if (roomBookMenu3.getSelectedItem().compareTo(" Basic  ") == 0)
					rb.setStandard("basic");
			if (roomBookMenu3.getSelectedItem().compareTo(" Luxury ") == 0)
					rb.setStandard("luxury");

			if (roomBookMenu1.getSelectedItem().compareTo(" 1 ") == 0)
					rb.setNoPeople("1");
			if (roomBookMenu1.getSelectedItem().compareTo(" 2 ") == 0)
					rb.setNoPeople("2");
			if (roomBookMenu1.getSelectedItem().compareTo(" 3 ") == 0)
					rb.setNoPeople("3");
			if (roomBookMenu1.getSelectedItem().compareTo(" 4 ") == 0)
					rb.setNoPeople("4");

			if (roomBookMenu2.getSelectedItem().compareTo(" None ") == 0)
					rb.setDiscount("none");
			if (roomBookMenu2.getSelectedItem().compareTo(" 5 %  ") == 0)
					rb.setDiscount("5");
			if (roomBookMenu2.getSelectedItem().compareTo(" 10 % ") == 0)
					rb.setDiscount("10");
			if (roomBookMenu2.getSelectedItem().compareTo(" 15 % ") == 0)
					rb.setDiscount("15");
			if (roomBookMenu2.getSelectedItem().compareTo(" 20 % ") == 0)
					rb.setDiscount("20");

			rb.setNotes(roomBookArea1.getText());

			if (checkDate(roomBookText3.getText(),roomBookText4.getText(),roomBookText5.getText(),roomBookText6.getText(),roomBookText7.getText(),roomBookText8.getText()))
                        {
				try
				{
					ObOut.writeObject(ot);
	                                ObOut.writeObject(rb);

	                                bookingOK = (String) ObIn.readObject();
				}
				catch (IOException ioe)
				{
					showMessage("  ERROR - Could Not Send Data");
					System.out.println("ERROR - Could Not Send Data");
				}
	                        catch (ClassNotFoundException cnfe)
	                        {
					showMessage("  ERROR - Could Not Receive Data");
					System.out.println("ERROR - Could Not Receive Data");
	                        }

	                        if (bookingOK.compareTo("no") == 0)
	                        {
	                                showMessage("No Booking Available - Try Different Criteria");
	                        }
	                        else
	                        {
	                                roomBookText2.setText(bookingOK);
	                                showMessage("Booking Available - Click Update Details Button To Confirm");
					roomBookButt2.setLabel("Update Details");
	                        }
                        }
                        else
                        {
                         	showMessage("Invalid Dates - Please Correct Before Proceeding");
                        }
		}

		//************************ room buttons ***************************
		//Find Room
		if (e.getSource() == roomButt1)
		{
			newoneC = false;
			newoneR = false;
			newoneT = false;
			newoneRB = false;
			newoneTB = false;

			ObjectType ot = new ObjectType("room","find");
			String rnum = new String(roomText1.getText().toUpperCase());

			try
			{
				ObOut.writeObject(ot);
				ObOut.writeObject(rnum);
			}
			catch (IOException ioe)
			{
				showMessage("  ERROR - Could Not Send Data");
				System.out.println("ERROR - Could Not Send Data");
			}

			try
			{
                                clearForms();
				Room r = (Room) ObIn.readObject();

				roomText1.setText(r.getNumber());

				if (r.getStatus().compareTo("vacant") == 0)
					roomCheck1.setState(true);
				if (r.getStatus().compareTo("occupied") == 0)
					roomCheck2.setState(true);
				if (r.getStatus().compareTo("clean") == 0)
					roomCheck3.setState(true);
				if (r.getStatus().compareTo("repair") == 0)
					roomCheck4.setState(true);

				if (r.getStandard().compareTo("basic") == 0)
					roomMenu1.select(" Basic  ");
				if (r.getStandard().compareTo("luxury") == 0)
					roomMenu1.select(" Luxury ");

				if (r.getNo_Beds().compareTo("1") == 0)
					roomMenu2.select(" 1 ");
				if (r.getNo_Beds().compareTo("2") == 0)
					roomMenu2.select(" 2 ");
				if (r.getNo_Beds().compareTo("3") == 0)
					roomMenu2.select(" 3 ");
				if (r.getNo_Beds().compareTo("4") == 0)
					roomMenu2.select(" 4 ");

				if (r.getBed_Type().compareTo("single") == 0)
					roomMenu3.select(" Single ");
				if (r.getBed_Type().compareTo("double") == 0)
					roomMenu3.select(" Double ");

				roomText2.setText(r.getTariff());

                               	if (r.getNumber().compareTo("Not Found") == 0)
                                {
                                	changeEnabledState(false,"all");
                                     	showMessage("No Record Of Room");
                                }
                                else
                                {
                                	changeEnabledState(true,"r");
                                        roomText1.setEditable(false);
                                }
			}
			catch (ClassNotFoundException cnfe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (OptionalDataException ode)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
		}
		//Update Room
		if ((e.getSource() == roomButt2) && rupdate && !((roomText1.getText().compareTo("") == 0) || (roomText1.getText().compareTo("Not Found") == 0)))
		{
                	if (newoneR)
                        {
                        	newoneR = false;
                                nextRNum++;
                        }

                	showMessage("Updating Room Details");

			ObjectType ot = new ObjectType("room","update");
			Room r = new Room();

			r.setNumber(roomText1.getText().toUpperCase());

			if (roomCheck1.getState() == true)
				r.setStatus("vacant");
			if (roomCheck2.getState() == true)
				r.setStatus("occupied");
			if (roomCheck3.getState() == true)
				r.setStatus("clean");
			if (roomCheck4.getState() == true)
				r.setStatus("repair");

			if (roomMenu1.getSelectedItem().compareTo(" Basic  ") == 0)
					r.setStandard("basic");
			if (roomMenu1.getSelectedItem().compareTo(" Luxury ") == 0)
					r.setStandard("luxury");

			if (roomMenu2.getSelectedItem().compareTo(" 1 ") == 0)
					r.setNo_Beds("1");
			if (roomMenu2.getSelectedItem().compareTo(" 2 ") == 0)
					r.setNo_Beds("2");
			if (roomMenu2.getSelectedItem().compareTo(" 3 ") == 0)
					r.setNo_Beds("3");
			if (roomMenu2.getSelectedItem().compareTo(" 4 ") == 0)
					r.setNo_Beds("4");

			if (roomMenu3.getSelectedItem().compareTo(" Single ") == 0)
					r.setBed_Type("single");
			if (roomMenu3.getSelectedItem().compareTo(" Double ") == 0)
					r.setBed_Type("double");

			r.setTariff(roomText2.getText());

			try
			{
				ObOut.writeObject(ot);
				ObOut.writeObject(r);
		               	showMessage("Room Details Updated Successfully");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Send Data");
                                showMessage("ERROR - Could Not Send Data");
			}
		}

		//************************ table buttons ***************************
		//Find Table
		if (e.getSource() == tableButt1)
		{
			newoneC = false;
			newoneR = false;
			newoneT = false;
			newoneRB = false;
			newoneTB = false;

			ObjectType ot = new ObjectType("table","find");
			String tnum = new String(tableText1.getText().toUpperCase());

			try
			{
				ObOut.writeObject(ot);
				ObOut.writeObject(tnum);
			}
			catch (IOException ioe)
			{
				showMessage("  ERROR - Could Not Send Data");
				System.out.println("ERROR - Could Not Send Data");
			}

			try
			{
                               	clearForms();
				Table t = (Table) ObIn.readObject();

				tableText1.setText(t.getNumber());

				if (t.getStatus().compareTo("vacant") == 0)
					tableCheck1.setState(true);
				if (t.getStatus().compareTo("occupied") == 0)
					tableCheck2.setState(true);

                               	if (t.getNumber().compareTo("Not Found") == 0)
                                {
                                	changeEnabledState(false,"all");
                                     	showMessage("No Record Of Table");
				}
                                else
                                {
                                	changeEnabledState(true,"t");
                        		tableText1.setEditable(false);
                                }
			}
			catch (ClassNotFoundException cnfe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (OptionalDataException ode)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Receive Data");
                                showMessage("ERROR - Could Not Receive Data");
			}
		}
                //Update Table
		if ((e.getSource() == tableButt2) && tupdate && !((tableText1.getText().compareTo("") == 0) || (tableText1.getText().compareTo("Not Found") == 0)))
		{
                	if (newoneT)
                        {
                        	newoneT = false;
                                nextTNum++;
                        }

                	showMessage("Updating Customer Details");

			ObjectType ot = new ObjectType("table","update");
			Table t = new Table();

			t.setNumber(tableText1.getText().toUpperCase());

			if (tableCheck1.getState() == true)
				t.setStatus("vacant");
			if (tableCheck2.getState() == true)
				t.setStatus("occupied");

			try
			{
				ObOut.writeObject(ot);
				ObOut.writeObject(t);
	                	showMessage("Table Details Updated Successfully");
			}
			catch (IOException ioe)
			{
				System.out.println("ERROR - Could Not Send Data");
                                showMessage("ERROR - Could Not Send Data");
			}
		}





	//managerPanel exists as well......

	}

	public void adjustmentValueChanged(AdjustmentEvent e)
	{
		if (e.getSource() == roomBookScroll1)
		{
			roomBookText3.setText(roomBookScroll1.getValue() + "");
		}
		else if (e.getSource() == roomBookScroll2)
		{
			roomBookText4.setText(roomBookScroll2.getValue() + "");
		}
		else if (e.getSource() == roomBookScroll3)
		{
			roomBookText5.setText(roomBookScroll3.getValue() + "");
		}
		else if (e.getSource() == roomBookScroll4)
		{
			roomBookText6.setText(roomBookScroll4.getValue() + "");
		}
		else if (e.getSource() == roomBookScroll5)
		{
			roomBookText7.setText(roomBookScroll5.getValue() + "");
		}
		else if (e.getSource() == roomBookScroll6)
		{
			roomBookText8.setText(roomBookScroll6.getValue() + "");
		}
		else if (e.getSource() == tableBookScroll1)
		{
			tableBookText3.setText(tableBookScroll1.getValue() + "");
		}
		else if (e.getSource() == tableBookScroll2)
		{
			tableBookText4.setText(tableBookScroll2.getValue() + "");
		}
		else if (e.getSource() == tableBookScroll3)
		{
			tableBookText5.setText(tableBookScroll3.getValue() + "");
		}
	}

	private void changeButton(Button arg, Button arg1, Button arg2, Button arg3, Button arg4, Button arg5)
	{
			arg1.setBackground(Color.lightGray);
			arg2.setBackground(Color.lightGray);
			arg3.setBackground(Color.lightGray);
			arg4.setBackground(Color.lightGray);
			arg5.setBackground(Color.lightGray);
			arg.setBackground(Color.blue);
			arg1.setForeground(Color.black);
			arg2.setForeground(Color.black);
			arg3.setForeground(Color.black);
			arg4.setForeground(Color.black);
			arg5.setForeground(Color.black);
			arg.setForeground(Color.white);

                       	newoneC = false;
			newoneR = false;
			newoneT = false;
			newoneRB = false;
			newoneTB = false;
	}

	public void clearForms()
	{
		//customerPanel
		custText1.setText("");
		custText2.setText("");
		custText3.setText("");
		custText4.setText("");
		custText5.setText("");
		custArea1.setText("");
		custArea2.setText("");
		//roomBookingPanel
		roomBookText1.setText("");
		roomBookText2.setText("");
		roomBookText3.setText("");
		roomBookText4.setText("");
		roomBookText5.setText("");
		roomBookText6.setText("");
		roomBookText7.setText("");
		roomBookText8.setText("");
		roomBookArea1.setText("");
                roomBookMenu1.select(0);
                roomBookMenu2.select(0);
                roomBookMenu3.select(0);
                roomBookCheck1.setState(false);
		roomBookButt2.setLabel("Check Booking");
		//tableBookingPanel
		tableBookText1.setText("");
		tableBookText2.setText("");
		tableBookText3.setText("");
		tableBookText4.setText("");
		tableBookText5.setText("");
		tableBookArea1.setText("");
		//billPanel
		billText1.setText("");
		billText2.setText("");
		billText3.setText("");
		billArea1.setText("");
		//roomPanel
		roomText1.setText("");
		roomText2.setText("");
		roomArea1.setText("");
                roomMenu1.select(0);
                roomMenu2.select(0);
                roomMenu3.select(0);
                roomCheckGroup.setSelectedCheckbox(roomCheckNull);
		//tablePanel
		tableText1.setText("");
		tableArea1.setText("");
                tableCheckGroup.setSelectedCheckbox(tableCheckNull);
		//Number boxes
		custText1.setEditable(true);
		roomBookText1.setEditable(true);
		tableBookText1.setEditable(true);
		roomText1.setEditable(true);
		tableText1.setEditable(true);

               	newoneC = false;
		newoneR = false;
		newoneT = false;
		newoneRB = false;
		newoneTB = false;
	}

	public void changeEnabledState(boolean editableState, String s)
	{
		cupdate = false;
		rupdate = false;
		tupdate = false;
		rbupdate = false;
		tbupdate = false;

        	if ((s.compareTo("all") == 0) || (s.compareTo("c") == 0) || (s.compareTo("crbtbb") == 0))
                {
			//customerPanel
			custText2.setEditable(editableState);
			custText3.setEditable(editableState);
			custText4.setEditable(editableState);
			custText5.setEditable(editableState);
			custArea1.setEditable(editableState);
			custArea2.setEditable(editableState);
			cupdate = editableState;
                }

        	if ((s.compareTo("all") == 0) || (s.compareTo("rb") == 0) || (s.compareTo("crbtbb") == 0))
                {
			//roomBookingPanel
			roomBookText3.setEditable(editableState);
			roomBookText4.setEditable(editableState);
			roomBookText5.setEditable(editableState);
			roomBookText6.setEditable(editableState);
			roomBookText7.setEditable(editableState);
			roomBookText8.setEditable(editableState);
			roomBookArea1.setEditable(editableState);
			roomBookCheck1.setEnabled(editableState);
			roomBookMenu1.setEnabled(editableState);
			roomBookMenu2.setEnabled(editableState);
			roomBookMenu3.setEnabled(editableState);
			rbupdate = editableState;
                }

               	if ((s.compareTo("all") == 0) || (s.compareTo("tb") == 0) || (s.compareTo("crbtbb") == 0))
                {
			//tableBookingPanel
			tableBookText2.setEditable(editableState);
			tableBookText3.setEditable(editableState);
			tableBookText4.setEditable(editableState);
			tableBookText5.setEditable(editableState);
			tableBookArea1.setEditable(editableState);
			tableBookMenu1.setEnabled(editableState);
			tableBookMenu2.setEnabled(editableState);
			tbupdate = editableState;
		}

        	if ((s.compareTo("all") == 0) || (s.compareTo("b") == 0) || (s.compareTo("crbtbb") == 0))
                {
			//billPanel
			billText2.setEditable(editableState);
			billText3.setEditable(editableState);
			billArea1.setEditable(editableState);
                }

        	if ((s.compareTo("all") == 0) || (s.compareTo("r") == 0))
                {
			//roomPanel
			roomText2.setEditable(editableState);
			roomArea1.setEditable(editableState);
			roomCheck1.setEnabled(editableState);
			roomCheck2.setEnabled(editableState);
			roomCheck3.setEnabled(editableState);
			roomCheck4.setEnabled(editableState);
			roomMenu1.setEnabled(editableState);
			roomMenu2.setEnabled(editableState);
			roomMenu3.setEnabled(editableState);
			rupdate = editableState;
		}

        	if ((s.compareTo("all") == 0) || (s.compareTo("t") == 0))
                {
			//tablePanel
			tableArea1.setEditable(editableState);
			tableCheck1.setEnabled(editableState);
			tableCheck2.setEnabled(editableState);
			tupdate = editableState;
		}
	}

        public void showMessage(String s)
	{
		statusLabel2.setText(s);
	}

        public boolean checkDate(String da, String ma, String ya, String db, String mb, String yb)
        {
        	try
                {
                	//Arrival Date
	        	int yr = Integer.parseInt(ya);
	                int mon = Integer.parseInt(ma);
	                int dy = Integer.parseInt(da);

                        //Departure Date
	        	int yra = Integer.parseInt(yb);
	                int mona = Integer.parseInt(mb);
	                int dya = Integer.parseInt(db);

                        //Arrival Date
    			if ((mon < 1) || (mon > 12))
				return false;

        	        if (((mon == 4) || (mon == 6) || (mon == 9) || (mon == 11)) && ((dy < 1) || (dy > 30)))
        	        	return false;

                	if (((mon == 1) || (mon == 3) || (mon == 5) || ((mon > 6) && (mon < 9)) || (mon == 10) || (mon == 12)) && ((dy < 1) || (dy > 31)))
				return false;

	                if ((mon == 2) && ((yr % 4) == 0) && ((dy < 1) || (dy > 29)))
        	        	return false;

                	if ((mon == 2) && ((yr % 4) != 0) && ((dy < 1) || (dy > 28)))
                		return false;

                        //Departure Date
    			if ((mona < 1) || (mona > 12))
				return false;

        	        if (((mona == 4) || (mona == 6) || (mona == 9) || (mona == 11)) && ((dya < 1) || (dya > 30)))
        	        	return false;

                	if (((mona == 1) || (mona == 3) || (mona == 5) || ((mona > 6) && (mona < 9)) || (mona == 10) || (mona == 12)) && ((dya < 1) || (dya > 31)))
				return false;

	                if ((mona == 2) && ((yra % 4) == 0) && ((dya < 1) || (dya > 29)))
        	        	return false;

                	if ((mona == 2) && ((yra % 4) != 0) && ((dya < 1) || (dya > 28)))
                		return false;

                        //Check dates against each other
                        if (yra < yr)
                        	return false;

                        if ((yra == yr) && (mona < mon))
                        	return false;

                        if ((yra == yr) && (mona == mon) && (dya < dy))
                        	return false;

        	        return true;
                }
                catch(NumberFormatException nfe)
                {
                	return false;
                }
	}
}