
/* ----------------------------------------------------------------------------

   $RCSfile: forms.js,v $ $Name:  $
   $Date: 2006/02/03 20:31:29 $ $Revision: 1.3 $
   ============================================================================
   When        Who        What
   ----------------------------------------------------------------------------
   2006-01-23  amm        Form constructor created
   ============================================================================

   Notes:

	- Form object allows client side creation of form objects, validation,
	  and Ajax-style submission

	- .add_input method allows for validation functions from validate2.js

    Usage:

	<script src="/genjs/rollovers.js"></script>
	<script>
	// create a Form object
	var signupform = new Form();
	signupform.post_url = "/ax/signup.php";

	// add the inputs
	signupform.add_input('name', 'Name', 'text', isBlank, isText);
	signupform.add_input('email', 'Email', 'text', isBlank, isValidEmail);

	// onsubmit functions
	signupform.completed_callback = function(response_text) { ... }
	</script>

	<input type="button" onclick="signupform.submitit(); return false;">

   ------------------------------------------------------------------------  */


function Form()
{
	// private properties
	var parent_obj = this;

	// public properties
	this.inputs = []; // array
	this.post = '1=1';
	this.post_url = '';

	// add an input object
	this.add_input = function(fieldname, fieldcapt, inptype, blankfunc, validfunc)
	{
		var new_element = (this.inputs.push({}) - 1); // array element is an object
		this.inputs[new_element].fieldname = fieldname;
		this.inputs[new_element].fieldcapt = fieldcapt;
		this.inputs[new_element].inptype = (arguments.length > 2) ? arguments[2] : '';
		this.inputs[new_element].blankfunc = (arguments.length > 3) ? arguments[3] : null;
		this.inputs[new_element].validfunc = (arguments.length > 4) ? arguments[4] : null;
	}

	// on submit functions
	this.waiting_callback = '';
	this.completed_callback = '';

	// "submit" the form
	this.submitit = function()
	{
		if (validate_fields(parent_obj.inputs))
		{
			for (n = 0; n < this.inputs.length; n++)
			{
				this.post += "&" + this.inputs[n].fieldname + "=" + document.getElementById(this.inputs[n].fieldname).value;
			}

			ajax_exec(parent_obj.post_url, this.post, parent_obj.completed_callback, parent_obj.waiting_callback);
		}
		else
		{
			return(false);
		}
	}
}
