Form = function( params )
{
	this.object = document.createElement("form");
	this.table = document.createElement("table");
	this.fields = [];
	
	this.object.action = params.action;
	this.object.method = "post";
	
	var data = null;
	var text = null;
	var field = null;
	var field_num = 0;
	for ( var i = 0; i < params.fields.length; i++ )
	{
		data = params.fields[i];
		
		if ( data.type == "hidden" )
		{
			this.fields[field_num] = Form.get_field( data, this.object );
			field_num++;
			continue;
		}
		
		row = this.table.insertRow();
		text_cell = row.insertCell();
		
		if ( data.type != "group" )
		{
			field_cell = row.insertCell();
			Form.get_text( data, text_cell );
			this.fields[field_num] = Form.get_field( data, field_cell );
			field_num++;
		}
		else // if it is a group
		{
			text_cell.colSpan = "2";
			
			var group = document.createElement("fieldset");
			group.style.padding = "10px";
			group.style.paddingTop = "0px";
			
			var display_text = document.createElement("legend");
			display_text.innerHTML = data.display_text;
			display_text.style.color = "#000000";
			display_text.style.fontWeight = "bold";
			display_text.style.padding = "5px";
			
			group.appendChild( display_text );
			
			text_cell.appendChild( group );
			
			for ( var j = 0; j < data.fields.length; j++ )
			{
				Form.get_text( data.fields[j], group );
				this.fields[field_num] = Form.get_field( data.fields[j], group );
				field_num++;
				
				if ( j < data.fields.length - 1 ) // if it's not the last field
					this.fields[i].style.marginRight = "15px";
			}
		}
	}
	
	this.object.appendChild( this.table );
}
Form.get_text = function( data, container )
{
	var div = document.createElement("span");
	if ( data.help )
		div.title = data.help;
	div.innerHTML = data.display_text;
	
	container.appendChild( div );
	
	return div;
}
Form.get_field = function( data, container )
{
	if ( !data.field_name )
		data.field_name = "";
	
	switch ( data.type )
	{
		case "select":
			var field = document.createElement("<select name='"+data.field_name+"'>");
			var option = null;
			
			// TO DO: add support for option data being send in the params
			if ( data.options )
			{
				for ( var i = 0; i < data.options.length; i++ )
				{
					option = document.createElement("option");
					option.value = data.options[i].value;
					option.text = data.options[i].text;
					if ( data.options[i].selected )
						option.selected = true;
					field.add( option );
				}
			}
			
			break;
		
		default:
			var field = document.createElement("<input name='"+data.field_name+"'>");
			field.type = data.type;
			if ( data.max_length )
				field.maxlength = data.max_length;
	}
	
	if ( data.help )
		field.title = data.help;
	
	if ( data.value )
		field.value = data.value;
	
	if ( container )
		container.appendChild( field );
	
	if ( (data.type == "checkbox" || data.type == "radio") && data.selected )
		field.checked = true;
	
	return field;
}
