/**
 * Copyright (c) 2001, Keith Wong
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 * and associated documentation files (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
 * is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package mypackage;

import objectivehtml.htmlwidget.*;
import objectivehtml.htmlwidget.exception.*;

/**
 * CustomerFormDesign
 * This is an example of how to use the objective html toolkit. Please read all the comments
 * in the code as they give handy tips in how to be use this toolkit.
 * The example was written by Keith Wong, email: keithwong@optushome.com.au
 */
public class CustomerFormDesign extends HtmlForm
{
	/**
	 * These members variables are made public. We leave it up to each developer to decide which
	 * access level they wish to have these at. The reason I have made them all public is that
	 * this provides much greater flexibility, which is generally what you need in building
	 * web pages. By making them public, you give yourself the opportunity to change the
	 * attributes of any of the HtmlWidgets from the jsp page (i.e. jsp pages are easier to redeploy).
	 */
	public HtmlParagraph m_parUserMessage;
	public HtmlTable m_tblLayout;
	public HtmlText m_htmUserMessage;
	public HtmlText m_htmMale;
	public HtmlText m_htmFemale;

	public HtmlTextBox m_txtFirstName;
	public HtmlTextBox m_txtLastName;
	public HtmlTextBox m_txtBirthDate;
	public HtmlRadioButton m_radMale;
	public HtmlRadioButton m_radFemale;
	public HtmlListBox m_selTitle;
	public HtmlPushButton m_btnSave;
	public HtmlPushButton m_btnReset;
	public HtmlTextArea m_txaStreet;
	public HtmlTextBox m_txtSuburb;
	public HtmlTextBox m_txtPostCode;
	public HtmlListBox m_selState;
	public HtmlTextBox m_txtTelephone;
	public HtmlTextBox m_txtEmail;
	public HtmlCheckBox m_cbxPostalAddress;

	/**
	 * Constructor
	 */
	public CustomerFormDesign()
			throws Exception
	{
		super();
		setMethod("post");

		// all html widgets have a parent except the HtmlForm
		// in this case the parent of the html paragraph is the form itself
		m_parUserMessage = new HtmlParagraph(this);
		// we want to initially hide the paragraph
		m_parUserMessage.setVisible(false);

		// this html text widget is a child of the html paragraph widget
		// n.b. the widget will inherit visibility properties of its parent
		// i.e. this widget will also be invisible
		m_htmUserMessage = new HtmlText(m_parUserMessage);

		// this will create a new html table with the form itself as the parent
		// the initial size of table is give in the constructor (rows, columns)
		m_tblLayout = new HtmlTable(this, 13, 2);
		m_tblLayout.setBorder("0");
		m_tblLayout.setBgColor("#FCFADA");
		m_tblLayout.setClassAttribute("normal");

		// table cell 0,0
		m_tblLayout.getTableCell(0, 0).setText("Title *");

		// table cell 0,1
		m_selTitle = new HtmlListBox(m_tblLayout.getTableCell(0, 1), "m_selTitle");
		// add options to a select box by calling addOption, the first parameter
		// is the value and the second parameter will be the text displayed
		m_selTitle.addOption("", "- Choose Title -");	// default option
		m_selTitle.addOption("01", "Mr");
		m_selTitle.addOption("02", "Miss");
		m_selTitle.addOption("03", "Ms");
		m_selTitle.addOption("04", "Mrs");
		m_selTitle.setSelected(0, true);	// initial selection

		// table cell 1,0
		m_tblLayout.getTableCell(1, 0).setText("First Name *");

		// table cell 1,1
		// The second parameter passed to this HtmlControlWidget is the name this input
		// field will have when the html is generated. This name can be used by the
		// client scripting language.
		m_txtFirstName = new HtmlTextBox(m_tblLayout.getTableCell(1, 1), "m_txtFirstName");
		// you can set html attributes by calling the generic method setAttribute
		// the name of the attribute is case-insensitive (all attribute values are
		// set as strings regardless of whether html interprets them as other types)
		m_txtFirstName.setAttribute("size", "20");	// n.b. the value "20" as a string

		// table cell 2,0
		m_tblLayout.getTableCell(2, 0).setText("Last Name *");

		// table cell 2,1
		m_txtLastName = new HtmlTextBox(m_tblLayout.getTableCell(2, 1), "m_txtLastName");
		// The alternate way to set a html attribute is to call the explicit method for
		// the attribute. This has the same result as setting the attribute by calling
		// setAttribute. The only difference is programmically.
		m_txtLastName.setSize("20");

		// table cell 3,0
		m_tblLayout.getTableCell(3, 0).setText("Birth Date");

		// table cell 3,1
		m_txtBirthDate = new HtmlTextBox(m_tblLayout.getTableCell(3, 1), "m_txtBirthDate");

		// table cell 4,0
		m_tblLayout.getTableCell(4, 0).setText("Gender");

		// table cell 4,1
		// lets setup a radio button group
		m_htmMale = new HtmlText(m_tblLayout.getTableCell(4, 1));
		m_htmMale.setText("M");
		m_radMale = new HtmlRadioButton(m_tblLayout.getTableCell(4, 1), "m_radGender");
		m_radMale.setValue("M");
		// to set a boolean attribute call the setBooleanAttribute and specify whether
		// the attribute is on or off
		m_radMale.setBooleanAttribute("checked", true);	// lets check male as the default!
		m_htmFemale = new HtmlText(m_tblLayout.getTableCell(4, 1));
		m_htmFemale.setText("F");
		// The male and female radio buttons have the same name, this is important as
		// this is how radio buttons are grouped together. Radio buttons are the only
		// control widgets that may have the same name.
		m_radFemale = new HtmlRadioButton(m_tblLayout.getTableCell(4, 1), "m_radGender");
		m_radFemale.setValue("F");

		// table cell 5,0
		m_tblLayout.getTableCell(5, 0).setText("Street");

		// table cell 5,1
		m_txaStreet = new HtmlTextArea(m_tblLayout.getTableCell(5, 1), "m_txaStreet");
		m_txaStreet.setCols("40");
		m_txaStreet.setRows("3");

		// table cell 6,0
		m_tblLayout.getTableCell(6, 0).setText("Suburb");

		// table cell 6,1
		m_txtSuburb = new HtmlTextBox(m_tblLayout.getTableCell(6, 1), "m_txtSuburb");

		// table cell 7,0
		m_tblLayout.getTableCell(7, 0).setText("PostCode");

		// table cell 7,1
		m_txtPostCode = new HtmlTextBox(m_tblLayout.getTableCell(7, 1), "m_txtPostCode");

		// table cell 8,0
		m_tblLayout.getTableCell(8, 0).setText("State");

		// table cell 8,1
		// these are Australian states, thats where I'm from!
		m_selState = new HtmlListBox(m_tblLayout.getTableCell(8, 1), "m_selState");
		m_selState.addOption("", "- Choose State -");	// default option
		m_selState.addOption("01", "NSW");
		m_selState.addOption("02", "VIC");
		m_selState.addOption("03", "QLD");
		m_selState.addOption("04", "SA");
		m_selState.addOption("05", "WA");
		m_selState.addOption("06", "ACT");
		m_selState.addOption("07", "NT");
		m_selState.setSelected(0, true);	// initial selection

		// table cell 9,0
		m_tblLayout.getTableCell(9, 0).setText("Same as postal address?");

		// table cell 9,1
		m_cbxPostalAddress = new HtmlCheckBox(m_tblLayout.getTableCell(9, 1), "m_cbxPostalAddress");
		m_cbxPostalAddress.setValue("Y");

		// table cell 10,0
		m_tblLayout.getTableCell(10, 0).setText("Telephone");

		// table cell 10,1
		m_txtTelephone = new HtmlTextBox(m_tblLayout.getTableCell(10, 1), "m_txtTelephone");

		// table cell 11,0
		m_tblLayout.getTableCell(11, 0).setText("Email *");

		// table cell 11,1
		m_txtEmail = new HtmlTextBox(m_tblLayout.getTableCell(11, 1), "m_txtEmail");
		m_txtEmail.setSize("50");

		// you can access the table row widget via the table
		// lets set the color of the last row
		m_tblLayout.getTableRow(12).setBgColor("#D7FFFF");

		// lets set the col span for this table cell
		m_tblLayout.getTableCell(12, 0).setColSpan(2);
		m_tblLayout.getTableCell(12, 0).setAlign("center");

		// table cell 12,0
		// lets add a submit button
		m_btnSave = new HtmlPushButton(m_tblLayout.getTableCell(12, 0), "m_btnSave");
		m_btnSave.setText("Save");
		m_btnSave.setButtonType("submit");

		// lets add a submit button
		m_btnReset = new HtmlPushButton(m_tblLayout.getTableCell(12, 0), "m_btnReset");
		m_btnReset.setText("Reset");
		m_btnReset.setButtonType("reset");

	} // end constructor

} // end class