--- drupal-5.6/modules/profile/profile.module	2007-07-26 14:16:48.000000000 -0500
+++ modules/profile/profile.module	2008-01-24 12:29:03.000000000 -0600
@@ -42,6 +42,7 @@ function profile_help($section) {
 <li>freeform list</li>
 <li>URL</li>
 <li>date</li>
+<li>node reference</li>
 </ul>
 ');
       $output .= '<p>'. t('For more information please read the configuration and customization handbook <a href="@profile">Profile page</a>.', array('@profile' => 'http://drupal.org/handbook/modules/profile/')) .'</p>';
@@ -258,7 +259,24 @@ Unless you know what you are doing, it i
       '#default_value' => $edit['options'],
       '#description' => t('A list of all options. Put each option on a separate line. Example options are "red", "blue", "green", etc.'),
     );
+  } else if ( $type == 'node_reference' ) {
+  
+    // Get array of node types
+    $result = db_query( 'SELECT type, name FROM {node_type} ORDER BY name' );
+    while( $record = db_fetch_array( $result ) ) {
+      $node_type_options[ $record['type'] ] = $record['name'];
+    }
+
+    // Add the form element
+    $form['fields']['options'] = array('#type' => 'select',
+      '#title' => t('Node Reference options'),
+      '#default_value' => $edit['options'],
+      '#options' => $node_type_options,
+      '#description' => t('Select which type of nodes can be referenced for this profile field.'),
+      //'#multiple' => TRUE
+    );
   }
+
   $form['fields']['weight'] = array('#type' => 'weight',
     '#title' => t('Weight'),
     '#default_value' => $edit['weight'],
@@ -342,6 +360,12 @@ function profile_field_form_validate($fo
  * Process profile_field_form submissions.
  */
 function profile_field_form_submit($form_id, $form_values) {
+//  // If option is multi-select, it will return an array.  
+//  // Convert array into CSV
+//  if( isset( $form_values['options'] ) && is_array( $form_values['options'] ) ) {
+//    $form_values['options'] = implode( ',', $form_values['options'] );
+//  }
+
   if (!isset($form_values['fid'])) {
     db_query("INSERT INTO {profile_fields} (title, name, explanation, category, type, weight, required, register, visibility, autocomplete, options, page) VALUES ('%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, %d, '%s', '%s')", $form_values['title'], $form_values['name'], $form_values['explanation'], $form_values['category'], $form_values['type'], $form_values['weight'], $form_values['required'], $form_values['register'], $form_values['visibility'], $form_values['autocomplete'], $form_values['options'], $form_values['page']);
 
@@ -579,6 +603,15 @@ function profile_view_field($user, $fiel
           }
         }
         return implode(', ', $fields);
+      case 'node_reference':
+        $referenced_node = db_fetch_array( db_query( 'SELECT nid, title FROM {node} WHERE nid='.$value ) );
+
+        if( empty( $referenced_node ) ) {
+          return 'Node not found.';
+        } else {
+          return l($referenced_node['title'], 'node/'.$referenced_node['nid']);
+          //return $browse ? l($referenced_node['title'], 'node/'.$referenced_node['nid']) : check_plain($referenced_node['title']);
+        }
     }
   }
 }
@@ -692,6 +725,21 @@ function profile_form_profile($edit, $us
           '#required' => $field->required,
         );
         break;
+      case 'node_reference':
+        $node_reference_options = $field->required ? array() : array('--');
+        $node_reference_result = db_query( 'SELECT nid, title FROM {node} WHERE type=\''.$field->options.'\'' );
+        $options = $field->required ? array() : array('--');
+        while( $node_reference_record = db_fetch_array( $node_reference_result ) ) {
+          $options[ $node_reference_record['nid'] ] = $node_reference_record['title'];
+        }
+        $fields[$category][$field->name] = array('#type' => 'select',
+          '#title' => check_plain($field->title),
+          '#default_value' => $edit[$field->name],
+          '#options' => $options,
+          '#description' => _profile_form_explanation($field),
+          '#required' => $field->required,
+        );
+        break;
     }
   }
   return $fields;
@@ -791,7 +839,8 @@ function _profile_field_types($type = NU
                  'selection' => t('list selection'),
                  'list' => t('freeform list'),
                  'url' => t('URL'),
-                 'date' => t('date'));
+                 'date' => t('date'),
+                 'node_reference' => t('node reference'));
   return isset($type) ? $types[$type] : $types;
 }
 
