function fillFormElement(field, value, fieldType) {
  /* Thinking about making fieldType dynamic by using field.type? G'luck */
  if (typeof(field)=="undefined") {
    // field doesn't exist
    return false;
  }
  switch (fieldType) {
    case "text":
      field.value=value;
      return true;
    case "hidden":
      field.value=value;
      return true;
    case "textarea":
      field.value=value;
      return true;
    case "password":
      field.value=value;
      return true;
    case "radio":
      for (i = 0; i < field.length; i++) {
	if (field[i].value == value) {
	  field[i].checked=true;
	}
      }
      return true;
    case "select-one":
      if ( value == "") {
	return true;
      }
      for (i = 0; i < field.options.length; i++) {
	if ((field.options[i].value == value) || (field.options[i].value=="" && field.options[i].text==value)) {
	  field.options[i].selected=true;
	  return true;
	}
      }
      return true;

	case 'select-multiple':
		var valuetype = getType( value );
		switch( valuetype )
		{
			case 'string':
				for( i = 0; i < field.options.length; i++ )
				{
					if( field.options[ i ].value == value || field.options[ i ].text == value )
					{
						field.options[ i ].selected = true;
					}
				}
				break;
			case 'array':
				for( i = 0; i < field.options.length; i++ )
				{
					for( j = 0; j < value.length; j++ )
					{
						if( field.options[ i ].value == value[ j ] || field.options[ i ].text == value[ j ] )
						{
							field.options[ i ].selected = true;
						}
					}
				}
				break;
			default:
				alert( 'Unsupported value type for field type \'select-multiple\': ' + type );
				return( false );
		}
		return( true );

    case "checkbox":
      // Doth not support an array of checkboxes. G'luck.
      if (field.value == value) {
	field.checked=true;
      }
      return true;
    default:
      alert ("Unrecognized field type in fillFormElement.js - " + fieldType);
      return false;
  }
}


function getType( vExpression )
{	
	var sTypeOf = typeof vExpression;
	if( sTypeOf == "function" )
	{
		var sFunction = vExpression.toString();
		if( ( /^\/.*\/$/ ).test( sFunction ) )
		{
			return "regexp";
		}
		else if( ( /^\[object.*\]$/i ).test( sFunction ) )
		{
			sTypeOf = "object";
        }
	}
	if( sTypeOf != "object" )
	{
		return sTypeOf;
	}
	
	switch( vExpression )
	{
		case null:
			return "null";
		case window:
			return "window";
		case window.event:	
			return "event";
	}
	
	if( window.event && ( event.type == vExpression.type ) )
	{
		return "event";
	}
	
	var fConstructor = vExpression.constructor;
    if( fConstructor != null )
	{
		switch( fConstructor )
		{																	
			case Array:
				sTypeOf = "array";
				break;
			case Date:
				return "date";
			case RegExp:
				return "regexp";
			case Object:
				sTypeOf = "jsobject";
				break;
			case ReferenceError:
				return "error";
			default:
				var sConstructor = fConstructor.toString();
				var aMatch = sConstructor.match( /\s*function (.*)\(/ );
				if( aMatch != null )
				{
					return aMatch[ 1 ];
				}
			
		}
	}

	var nNodeType = vExpression.nodeType;
	if( nNodeType != null )
	{	
		switch( nNodeType )
		{
			case 1:
				if( vExpression.item == null )
				{
					return "domelement";
				}
				break;
			case 3:
				return "textnode";
		}
	}
	
	if( vExpression.toString != null )
	{
		var sExpression = vExpression.toString();
		var aMatch = sExpression.match( /^\[object (.*)\]$/i );
		if( aMatch != null )	
		{
			var sMatch = aMatch[ 1 ];
			switch( sMatch.toLowerCase() )
			{
				case "event":
					return "event";
				case "math":
					return "math";
				case "error":	
					return "error";
				case "mimetypearray":
					return "mimetypecollection";
				case "pluginarray":
					return "plugincollection";
				case "windowcollection":
					return "window";
				case "nodelist":
				case "htmlcollection":
				case "elementarray":
					return "domcollection";
			}
		}
	}
	
	if( vExpression.moveToBookmark && vExpression.moveToElementText )
	{
		return "textrange";
	}
	else if( vExpression.callee != null )
	{
		return "arguments";
	}
	else if( vExpression.item != null )	
	{
		return "domcollection";
	}
	
	return sTypeOf;
}

