--- riddler.module	Fri Mar 28 13:41:48 2008
+++ riddler.module.new	Thu Aug 14 14:01:52 2008
@@ -23,101 +23,162 @@ function riddler_help($section = 'admin/
 
 /* Implementation of hook_perm */
 
-function riddler_perm () {
-	return array(
-		'administer riddler',
-	);
+function riddler_perm() {
+  return array(
+    'administer riddler',
+  );
 }
 
 /* Implementation of hook_menu */
 
 function riddler_menu($may_cache) {
-	$items = array();
-	if ($may_cache) {
-		$access = user_access('administer riddler');
-		$items[] = array(
-	   	'path' => 'admin/user/captcha/riddler',
-     		'title' => t('Riddler'),
-     		'description' => t('Allows you to force a question to a number of forms to counter f.e. spammers.'),
-     		'callback' => 'drupal_get_form',
-     		'callback arguments' => array('riddler_settings'),
-     		'access' => $access,
-     		'type' => MENU_LOCAL_TASK
-   	);
-   }
-  	return $items;
+  $items = array();
+  if ($may_cache) {
+    $access = user_access('administer riddler');
+    $items[] = array(
+      'path' => 'admin/user/captcha/riddler',
+      'title' => t('Riddler'),
+      'description' => t('Allows you to force a question to a number of forms to counter f.e. spammers.'),
+      'callback' => 'drupal_get_form',
+      'callback arguments' => array('riddler_settings'),
+      'access' => $access,
+      'type' => MENU_LOCAL_TASK
+    );
+  }
+  return $items;
 }
 
 /* Riddler settings form, called by drupal_get_form in menu */
 
 function riddler_settings() {
-	$form['riddler_question'] = array(
-		'#type' => 'textfield',
-		'#title' => t('Question'),
-		'#description' => t('A question that you require anonymous users to answer'),
-		'#default_value' => variable_get("riddler_question", "Do you hate spam? (yes or no)"),
-		'#required' => TRUE,
-	); 
-	$form['riddler_answer'] = array(
-		'#type' => 'textfield',
-		'#title' => t('Answer'),
-		'#default_value' => variable_get("riddler_answer", "yes"),
-		'#description' => t('Answer to the above question. Answers are not case sensitive'),
-		'#required' => TRUE,
-	); 
-	$form['riddler_weight'] = array(
-		'#type' => 'select',
-		'#title' => t('Weight'),
-		'#default_value' => variable_get("riddler_weight", 0),
-		'#options' => drupal_map_assoc(range(-10,10)),
-		'#description' => t('Weight of the Riddler form element'),
-		'#required' => TRUE,
-	);
-	
-	return system_settings_form($form);
+  $form['riddler_weight'] = array(
+    '#type' => 'select',
+    '#title' => t('Weight'),
+    '#default_value' => variable_get('riddler_weight', 0),
+    '#options' => drupal_map_assoc(range(-10, 10)),
+    '#description' => t('Weight of the Riddler form element'),
+    '#required' => TRUE,
+  );
+  $form['riddler_groups'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Riddles'),
+    '#description' => t('If you need more riddles, just submit the form, 3 empty riddles will appear.'),
+  );
+  $form['riddler_groups']['riddler_group_0'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Riddle !i', array('!i' => 1)),
+    '#description' => t('Empty question and answer to erase this group.'),
+    '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+  );
+  $form['riddler_groups']['riddler_group_0']['riddler_question_0'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Question'),
+    '#description' => t('A question that you require anonymous users to answer'),
+    '#default_value' => variable_get('riddler_question_0', 'Do you hate spam? (yes or no)'),
+    '#required' => FALSE,
+  );
+  $form['riddler_groups']['riddler_group_0']['riddler_answer_0'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Answer'),
+    '#default_value' => variable_get('riddler_answer_0', 'yes'),
+    '#description' => t('Answer to the above question. Answers are not case sensitive'),
+    '#required' => FALSE,
+  );
+  $number = variable_get('riddler_number', 1);
+  for ( $i=1; $i<$number + 3; $i++) {
+    $form['riddler_groups']['riddler_group_'. $i] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Riddle !i', array('!i' => $i+1)),
+      '#description' => t('Empty question and answer to erase this group.'),
+      '#collapsible' => TRUE,
+      '#collapsed' => $i < $number,
+    );
+    $form['riddler_groups']['riddler_group_'. $i]['riddler_question_'. $i] = array(
+      '#type' => 'textfield',
+      '#title' => t('Question'),
+      '#description' => t('A question that you require anonymous users to answer'),
+      '#default_value' => variable_get('riddler_question_'. $i, ''),
+      '#required' => FALSE,
+    );
+    $form['riddler_groups']['riddler_group_'. $i]['riddler_answer_'. $i] = array(
+      '#type' => 'textfield',
+      '#title' => t('Answer'),
+      '#default_value' => variable_get('riddler_answer_'. $i, ''),
+      '#description' => t('Answer to the above question. Answers are not case sensitive'),
+      '#required' => FALSE,
+    );
+  }
+  $form['#validate']['riddler_settings_validate'] = array();
+  $form['#submit']['riddler_settings_submit'] = array();
+  
+  return system_settings_form($form);
+}
+
+/* Validating the settings form */
+function riddler_settings_validate($form_id, $form_values) {
+  $i = 0;
+  while (array_key_exists('riddler_question_'. $i, $form_values)) {
+    if ($form_values['riddler_question_'. $i] != '' && $form_values['riddler_answer_'. $i] == '') {
+      form_set_error('riddler_answer_'. $i, t('Group !i is incomplete (answer is missing).', array('!i' => $i+1)));
+    }
+    if ($form_values['riddler_question_'. $i] == '' && $form_values['riddler_answer_'. $i] != '') {
+      form_set_error('riddler_question_'. $i, t('Group !i is incomplete (question is missing).', array('!i' => $i+1)));
+    }
+    $i++;
+  }
 }
 
 /* Processing the settings form */
-/*
-function riddler_settings_submit ($form_id, $form_values) {
-	variable_set("riddler_question", $form_values['question']);
-	variable_set("riddler_answer", $form_values['answer']);
+function riddler_settings_submit($form_id, $form_values) {
+  variable_set('riddler_weight', $form_values['riddler_weight']);
+  $i = 0;
+  $number = 0;
+  while (array_key_exists('riddler_question_'. $i, $form_values)) {
+    if ($form_values['riddler_question_'. $i] != '') {
+      variable_set('riddler_question_'. $number, $form_values['riddler_question_'. $i]);
+      variable_set('riddler_answer_'. $number, $form_values['riddler_answer_'. $i]);
+      $number++;
+    }
+    $i++;
+  }
+  variable_set('riddler_number', $number);
 }
-*/
+
 
 /* Captcha implementation of Riddler */
 
 function riddler_captcha($op, $captcha_type='', $answer='') {
- 	switch ($op) {
- 		case 'list' :
- 			return array("Riddler");
- 		break;
- 		case 'generate' :
- 			$result = array();
- 			if ($captcha_type == "Riddler") {
- 				$result = riddler_form();
- 			}
- 			return $result;
- 		break;
-		// Answers changed to lowercase for case insensitivity
-		case 'preprocess' :
-			$answer_lo = strtolower($answer);
-			return $answer_lo;
-		break;
- 			
- 	} 
-}
-
-function riddler_form () {
-	$form['preprocess'] = TRUE;
-	$form['solution'] = (string)(strtolower(variable_get("riddler_answer", "yes")));
-	$form['form']['captcha_response'] = array(
-		'#type' => 'textfield',
-      '#title' => variable_get("riddler_question", "Do you hate spam? (yes or no)"),
-      '#required' => TRUE,
-      '#description' => t('Security question, designed to stop automated spam bots'),
-   	'#weight' => variable_get('riddler_weight', 0),
-   	
-   );	
-   return $form;
+  switch ($op) {
+    case 'list' :
+      return array('Riddler');
+      break;
+    case 'generate' :
+      $result = array();
+      if ($captcha_type == 'Riddler') {
+        $result = riddler_form();
+      }
+      return $result;
+      break;
+    // Answers changed to lowercase for case insensitivity
+    case 'preprocess' :
+      $answer_lo = strtolower($answer);
+      return $answer_lo;
+      break;
+    default:
+      break;
+  }
+}
+
+function riddler_form() {
+  $i = rand(1, variable_get('riddler_number', 1)) - 1;
+  $form['preprocess'] = TRUE;
+  $form['solution'] = (string)(strtolower(variable_get('riddler_answer_'. $i, 'yes')));
+  $form['form']['captcha_response'] = array(
+    '#type' => 'textfield',
+    '#title' => variable_get('riddler_question_'. $i, 'Do you hate spam? (yes or no)'),
+    '#required' => TRUE,
+    '#weight' => variable_get('riddler_weight', 0),
+  );
+  return $form;
 }
