indexing
	description: "Class which allows retrieving information relative to a specific type of form."
	date: "$Date$"
	revision: "$Revision$"

deferred class interface
	CGI_FORMS

feature -- Access

	button_value (field_name: STRING; overriding_value: STRING): BOOLEAN
			-- Is Button relative to 'field_name' selected ?
		require
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)

	menu_values (field_name: STRING): LINKED_LIST [STRING]
			-- Selected values for a list, whose name
			-- is 'field_name'.
		require
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure
			value_exists: Result /= void

	text_field_value (field_name: STRING): STRING
			-- First (unique?) value for a text field.
			-- Applies for a password and a text area too.
		require
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure
			value_exists: Result /= void
	
feature -- Implementation

	form_data: HASH_TABLE [LINKED_LIST [STRING], STRING]
			-- Table in which is contained all the information
			-- relative to the different user inputs.
	
feature -- Advanced Access

	fields: ARRAY [STRING]
			-- Names of fields in the form.

	value_count (field_name: STRING): INTEGER
			-- Number of values for a field.
		require
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure
			valid_count: Result >= 0

	value_list (field_name: STRING): LINKED_LIST [STRING]
			-- List of values for a field.
		require
			field_not_void: field_name /= void
			field_exists: field_defined (field_name)
		ensure
			valid_count: Result.count = value_count (field_name)
	
feature -- Report

	field_defined (field_name: STRING): BOOLEAN
			-- Is field field_name defined?
		require
			filed_name_not_void: field_name /= void
	
invariant

		-- from ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)

end -- class CGI_FORMS