Index: phone.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/phone/phone.module,v
retrieving revision 1.24
diff -u -r1.24 phone.module
--- phone.module	26 Aug 2009 16:06:12 -0000	1.24
+++ phone.module	5 Oct 2009 08:12:36 -0000
@@ -10,6 +10,93 @@
  */
 
 /**
+ * Implementation of hook_init()
+ * This hook is called on module initialization.
+ */
+function phone_init() {
+  $path = drupal_get_path('module', 'phone');
+
+  // scan include phone numbers directory
+  $files = file_scan_directory($path, '^phone\..*\.inc$');
+
+  // load all phone number includes
+  $countrycodes = array();
+  foreach ($files as $file) {
+    module_load_include('inc', 'phone', $file->name);
+    list ($dummy, $countrycode) = explode('.', $file->name);
+    $countrycodes[] = $countrycode;
+  }
+
+  // save the list of country codes
+  variable_set('phone_country_codes', $countrycodes);
+}
+
+
+/**
+ * Get all the metadata about supported countries.
+ *
+ * @param $countrycode
+ *   Optional, two character country code. If this is ommitted all metadata
+ *   will be returned.
+ * @return
+ *   If no country code is provided an array keyed by country code, values are
+ *   arrays with a display 'label' and 'error' message. If a countrycode is
+ *   provided and invalid FALSE will be returned. If the country code is valid
+ *   the metadata for just that country will be returned.
+ */
+function phone_country_metadata($countrycode = NULL) {
+  // These strings are translated using t() on output.
+  static $metadata = array();
+
+  if (empty($metadata)) {
+    $cc = variable_get('phone_country_codes', NULL);
+    if (!is_null($cc)) {
+      foreach ($cc as $code) {
+        $phone_metadata_function = 'phone_'. $code . '_metadata';
+        if (function_exists($phone_metadata_function)) {
+          $metadata[$code] = $phone_metadata_function();
+        }
+      }
+    }
+  }
+
+  // No country code specified, return the entire list.
+  if (is_null($countrycode)) {
+    return $metadata;
+  }
+
+  // Try to locate the desired country.
+  if (isset($metadata[$countrycode])) {
+    return $metadata[$countrycode];
+  }
+  return FALSE;
+}
+
+/**
+ * Parse the country code from a field type.
+ *
+ * @param $fieldtype
+ *   String with the field type: e.g. "uk_phone".
+ * @return
+ *   Two character country code string.
+ */
+function phone_countrycode_from_fieldtype($fieldtype) {
+  $countrycode = substr($fieldtype, 0, 2);
+  return $countrycode .'_phone' == $fieldtype ? $countrycode : FALSE;
+}
+
+/**
+ * Return an array of all the supported field types.
+ */
+function _phone_field_types() {
+  $types = array();
+  foreach (phone_country_metadata() as $key => $item) {
+    $types[] = $key .'_phone';
+  }
+  return $types;
+}
+
+/**
  * Implementation of hook_field_info().
  *
  * Here we indicate that the content module will use its default
@@ -27,22 +114,11 @@
  * the database and in internal arrays, like content_fields().
  */
 function phone_field_info() {
-  return array(
-    'fr_phone' => array('label' => t('French Phone Numbers')),
-    'it_phone' => array('label' => t('Italian Phone Numbers')),    
-    'ca_phone' => array('label' => t('US & Canadian Phone Numbers')),
-    'cr_phone' => array('label' => t('Costa Rican Phone Numbers')),        
-    'uk_phone' => array('label' => t('British (UK) Phone Numbers')),
-    'ru_phone' => array('label' => t('Russian Phone Numbers')),
-    'es_phone' => array('label' => t('Spanish Phone Numbers')),
-    'au_phone' => array('label' => t('Australian Phone Numbers')),
-    'cs_phone' => array('label' => t('Czech Phone Numbers')), 
-    'hu_phone' => array('label' => t('Hungarian Phone Numbers')),
-    'nl_phone' => array('label' => t('Dutch Phone Numbers')),   
-    'nz_phone' => array('label' => t('New Zealand Phone Numbers')), 
-    'br_phone' => array('label' => t('Brazilian Phone Numbers')), 
-    'int_phone'=> array('label' => t('International Phone Numbers, as per <a href="http://www.itu.int/rec/T-REC-E.123/en">E.123</a>'))     
-   );
+  $info = array();
+  foreach (phone_country_metadata() as $cc => $item) {
+    $info[$cc .'_phone'] = array('label' => t($item['label']));
+  }
+  return $info;
 }
 
 /**
@@ -106,65 +182,55 @@
         '#title' => t('Add the country code if not filled by the user'),
         '#default_value' => isset($field['phone_country_code']) ? $field['phone_country_code'] : '',
       );
-      if ($field['type'] == 'int_phone') {
-        $form['phone_int_help'] = array(
-          '#type' => 'markup',
-          '#value' => t('International phone numbers are in the form +XX YYYYYYY where XX is a country code and YYYYYYY is the local number. This field type is based off of the <a href="http://www.itu.int/rec/T-REC-E.123/en">E.123 specification</a>.'),
-        );
-        $form['phone_default_country_code'] = array(
-          '#type' => 'textfield',
-          '#title' => t('Default country code to add to international numbers without one (omit + sign)'),
-          '#default_value' => isset($field['phone_default_country_code']) ? $field['phone_default_country_code'] : '1',
-        );
-        $form['phone_int_max_length'] = array(
-          '#type' => 'textfield',
-          '#title' => t('Maximum length of international numbers, according to the ITU this is 15'),
-          '#default_value' => isset($field['phone_int_max_length']) ? $field['phone_int_max_length'] : '15',
-        );
-      }      
-      if ($field['type'] == 'ca_phone') {
-        $form['ca_phone_separator'] = array(
-          '#type' => 'textfield',
-          '#title' => t('Separator'),
-          '#default_value' => isset($field['ca_phone_separator']) ? $field['ca_phone_separator'] : '-',
-          '#size' => 2,
-        );
-        $form['ca_phone_parentheses'] = array(
-          '#type' => 'checkbox',
-          '#title' => t('Use parentheses around area code'),
-          '#default_value' => isset($field['ca_phone_parentheses']) ? $field['ca_phone_parentheses'] : 1,
-        );
-      }            
+      
+      // display country specific settings
+      foreach (_phone_field_types() as $type) {
+        $settings_function = 'phone_' . $type . '_number_settings';
+        if (function_exists($settings_function)) {
+          $local_settings = $settings_function($op, $field);
+          if (isset($local_settings) && !empty($local_settings)) {
+            // wrap with fieldset
+            $wrapper = array(
+              '#title' => phone_country_metadata($type) . ' specific settings',
+              '#type' => 'fieldset',
+              '#collapsible' => TRUE,
+              '#collapsed' => TRUE,
+              '#attributes' => array('class' => 'phone-settings phone-settings-' . $type),
+            );
+            $wrapper[] = $local_settings;
+            array_push($form, $wrapper);
+          }
+        }
+      }        
       return $form;
 
+    case 'validate':
+      // validate country specific settings
+      foreach (_phone_field_types() as $type)  {
+        $validate_function = 'phone_' . $type . '_number_validate';
+        if (function_exists($validate_function)) {
+          $validate_function($op, $field);
+        }
+      }
+      break;
+      
     case 'save':
       $settings = array('phone_country_code');
-      if ($field['type'] == 'ca_phone') {
-        array_push($settings, 'ca_phone_separator', 'ca_phone_parentheses');
+      // save country specific settings
+      foreach (_phone_field_types() as $type)  {
+        $save_function = 'phone_' . $type . '_number_save';
+        if (function_exists($save_function)) {
+          array_push($settings, $save_function($op, $field));
+        }
       }
-      if ($field['type'] == 'int_phone') {
-        array_push($settings, 'phone_int_help', 'phone_default_country_code', 'phone_int_max_length');
-      }      
       return $settings;        
     case 'database columns':
-      if ($field['type'] == 'fr_phone'
-       || $field['type'] == 'it_phone'
-       || $field['type'] == 'ca_phone'
-       || $field['type'] == 'cr_phone'  
-       || $field['type'] == 'uk_phone'
-       || $field['type'] == 'ru_phone'
-       || $field['type'] == 'es_phone'
-       || $field['type'] == 'au_phone'
-       || $field['type'] == 'cs_phone'
-       || $field['type'] == 'hu_phone'       
-       || $field['type'] == 'nl_phone'              
-       || $field['type'] == 'nz_phone'                     
-       || $field['type'] == 'br_phone'                     
-       || $field['type'] == 'int_phone'                            
-       ) { 
-      	$columns = array(
-        	'value' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
-      	);
+      $countrycode = phone_countrycode_from_fieldtype($field['type']);
+
+      if (phone_country_metadata($countrycode)) {
+        $columns = array(
+          'value' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
+        );
       }   
       return $columns;     
   }
@@ -210,48 +276,14 @@
     case 'validate': // corresponds to hook phone_widget validate in phone-5.x
       foreach ($node_field as $delta => $item) {
         if ($item['value'] != '') {
-          if ($field['type'] == 'fr_phone' && !valid_phone_number('fr', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid French phone number<br>French phone numbers should only contain numbers and spaces and be like 99 99 99 99 99', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'it_phone' && !valid_phone_number('it', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Italian phone number<br>Italian phone numbers should only ...', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'ca_phone' && !valid_phone_number('ca', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid North American phone number<br>North American Phone numbers should only contain numbers and + and - and ( and ) and spaces and be like 999-999-9999. Please enter a valid ten-digit phone number with optional extension.', array('%value' => $item['value'])));
-          }
-	  if ($field['type'] == 'cr_phone' && !valid_phone_number('cr', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Costa Rican phone number!<br>Costa Rican phone numbers should contain only numbers and spaces be like 99 99 99 99 with an optional prefix of "+506" or "00506".', array('%value' => $item['value'])));
-          }                
-          if ($field['type'] == 'uk_phone' && !valid_phone_number('uk', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid British phone number<br>British Phone numbers should .... ', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'ru_phone' && !valid_phone_number('ru', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Russian phone number<br>Russian Phone numbers should .... ', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'es_phone' && !valid_phone_number('es', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Spanish phone number<br>Spanish phone numbers should only contains numbers and spaces and be like 999 999 999', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'au_phone' && !valid_phone_number('au', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Australian phone number<br>Australian phone numbers should contain only numbers with an optional prefix of "+61"', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'cs_phone' && !valid_phone_number('cs', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Czech phone number!<br>Czech phone numbers should contain only numbers and spaces be like 999 999 999 with an optional prefix of "+420" or "00420".', array('%value' => $item['value'])));
-          }
-          if ($field['type'] == 'hu_phone' && !valid_phone_number('hu', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Hungarian phone number!<br>Hungarian phone numbers should contain only numbers and spaces be like 70 999 9999 with an optional prefix of "+36" or "06".', array('%value' => $item['value'])));
-          }                  
-          if ($field['type'] == 'nl_phone' && !valid_phone_number('nl', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Dutch phone number!<br>Dutch phone numbers should contain only numbers and spaces and - and be like 099-9999999 with an optional prefix of "+31".', array('%value' => $item['value'])));
-          }     
-          if ($field['type'] == 'nz_phone' && !valid_phone_number('nz', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid New Zealand phone number!<br>New Zealand phone numbers should contain only only numbers, spaces, brackets and "-". They should look like 04 123 4567 or can optionally omit the leading 0 and have a prefix of "+64".', array('%value' => $item['value'])));
-          }                  
-          if ($field['type'] == 'br_phone' && !valid_phone_number('br', $item['value'])) {
-            form_set_error($field['field_name'], t('"%value" is not a valid Brazilian phone number!<br>Brazilian phone numbers should contain only numbers and spaces and - and be like 099 9999-9999 or 99 9999-9999 with an optional prefix of "+55".', array('%value' => $item['value'])));
-          }              
-          if ($field['type'] == 'int_phone' && !valid_phone_number('int', $item['value'])) {
-            form_set_error($field['field_name'],t('"%value" is not a valid international phone number<br>International phone numbers should contain a country code prefixed by a plus sign followed by the local number.', array('%value' => $item['value'])));
-          }
+          $countrycode = phone_countrycode_from_fieldtype($field['type']);
+          if (!$countrycode) {
+            form_set_error($field['field_name'], t('Unknown country'));
+          }
+          else if (!valid_phone_number($countrycode, $item['value'])) {
+            $metadata = phone_country_metadata($countrycode);
+            form_set_error($field['field_name'], t($metadata['error'], array('%value' => $item['value'])));
+          }            
         }
       }
       break;
@@ -260,48 +292,9 @@
       foreach ($node_field as $delta => $item) {
         //format the phone number
         if ($item['value'] != '') {
-          if ($field['type'] == 'fr_phone') {
-            $node_field[$delta]['value'] = format_phone_number('fr', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'it_phone') {
-            $node_field[$delta]['value'] = format_phone_number('it', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'ca_phone') {
-            $node_field[$delta]['value'] = format_phone_number('ca', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'cr_phone') {
-            $node_field[$delta]['value'] = format_phone_number('cr', $node_field[$delta]['value'], $field);
-          }          
-          if ($field['type'] == 'uk_phone') {
-            $node_field[$delta]['value'] = format_phone_number('uk', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'ru_phone') {
-            $node_field[$delta]['value'] = format_phone_number('ru', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'es_phone') {
-            $node_field[$delta]['value'] = format_phone_number('es', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'au_phone') {
-            $node_field[$delta]['value'] = format_phone_number('au', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'cs_phone') {
-            $node_field[$delta]['value'] = format_phone_number('cs', $node_field[$delta]['value'], $field);
-          }
-          if ($field['type'] == 'hu_phone') {
-            $node_field[$delta]['value'] = format_phone_number('hu', $node_field[$delta]['value'], $field);
-          }  
-          if ($field['type'] == 'nl_phone') {
-            $node_field[$delta]['value'] = format_phone_number('nl', $node_field[$delta]['value'], $field);
-          } 
-          if ($field['type'] == 'nz_phone') {
-            $node_field[$delta]['value'] = format_phone_number('nz', $node_field[$delta]['value'], $field);
-          }           
-          if ($field['type'] == 'br_phone') {
-            $node_field[$delta]['value'] = format_phone_number('br', $node_field[$delta]['value'], $field);
-          }     
-          if ($field['type'] == 'int_phone') {
-            $node_field[$delta]['value'] = format_phone_number('int', $node_field[$delta]['value'], $field);
-          }               
+          if ($countrycode = phone_countrycode_from_fieldtype($field['type'])) {
+            $node_field[$delta]['value'] = format_phone_number($countrycode, $node_field[$delta]['value'], $field);
+          }            
         }
       }
       break;
@@ -392,22 +385,8 @@
   return array(
     'default' => array(
       'label' => 'Default',
-      'field types' => array('fr_phone', 
-      			'it_phone', 
-      			'ca_phone', 
-    			'cr_phone',      			
-      			'uk_phone', 
-      			'ru_phone',
-      			'es_phone',
-      			'au_phone',
-      			'cs_phone', 
-      			'hu_phone',
-      			'nl_phone',      			
-      			'nz_phone',      			      			
-      			'br_phone',     			      			
-      			'int_phone'      			      			
-      			),
-      'multiple values' => CONTENT_HANDLE_CORE,		
+      'field types' => _phone_field_types(),
+      'multiple values' => CONTENT_HANDLE_CORE,    
     ),
   );
  } 
@@ -473,25 +452,11 @@
   return array(
     'phone_textfield' => array(
       'label' => t('Textfield'),
-      'field types' => array('fr_phone', 
-      			'it_phone', 
-      			'ca_phone', 
-    			'cr_phone',      			   			
-      			'uk_phone', 
-      			'ru_phone',
-      			'es_phone',
-      			'au_phone',
-      			'cs_phone',
-      			'hu_phone',
-      			'nl_phone',      			
-      			'nz_phone',      			      			
-      			'br_phone',      			
-      			'int_phone'      			      			
-      			),
+      'field types' => _phone_field_types(),
       'multiple values' => CONTENT_HANDLE_CORE,
       'callbacks' => array(
         'default value' => CONTENT_CALLBACK_DEFAULT,
-      ),      			
+      ),            
     ),
   );
 }
@@ -687,37 +652,19 @@
   $countrycode = trim($countrycode); 
   $phonenumber = trim($phonenumber);
 
-  if ($countrycode == 'fr' 
-  	|| $countrycode == 'it'  
-  	|| $countrycode == 'ca'
-  	|| $countrycode == 'cr'  	  	  	
-  	|| $countrycode == 'uk'
-  	|| $countrycode == 'ru'
-  	|| $countrycode == 'es'
-  	|| $countrycode == 'au'
-  	|| $countrycode == 'cs'  	
-  	|| $countrycode == 'hu' 
-  	|| $countrycode == 'nl'   	
-  	|| $countrycode == 'nz'   	  	
-  	|| $countrycode == 'br'   	  	
-  	|| $countrycode == 'int'   	  	  	
-  	) { 
-	
-        //drupal_set_message('langue = ' . $countrycode, 'error');
-
-  	$valid_phone_function = 'valid_'. $countrycode . '_phone_number';  	
-  	module_load_include('inc', 'phone', 'phone.'. $countrycode);
-  	
-	if (function_exists($valid_phone_function)) {
-	    return $valid_phone_function($phonenumber);
-	}
-	else  { 
-	    return FALSE; 	
-	}
+  if (phone_country_metadata($countrycode)) {
+    $valid_phone_function = 'valid_'. $countrycode . '_phone_number';
+
+    if (function_exists($valid_phone_function)) {
+      return $valid_phone_function($phonenumber);
+    }
+    else  { 
+      return FALSE;   
+    }
   }
   else {
-  	//Country not taken into account yet 
-  	return FALSE; 
+    //Country not taken into account yet 
+    return FALSE; 
   }
 }  
 
@@ -733,37 +680,19 @@
   $countrycode = trim($countrycode); 
   $phonenumber = trim($phonenumber);
 
-  if ($countrycode == 'fr' 
-  	|| $countrycode == 'it'
-  	|| $countrycode == 'ca'
-  	|| $countrycode == 'cr'  	  	  	  	
-  	|| $countrycode == 'uk'
-  	|| $countrycode == 'ru'
-  	|| $countrycode == 'es'
-  	|| $countrycode == 'au'
-   	|| $countrycode == 'cs' 	
-   	|| $countrycode == 'hu' 	   	
-   	|| $countrycode == 'nl' 	   	   	
-   	|| $countrycode == 'nz' 	   	   	   	
-   	|| $countrycode == 'br' 	   	   	   	
-   	|| $countrycode == 'int' 	   	   	   	   	
-  	) { 
-	
-        //drupal_set_message('langue = ' . $countrycode, 'error');       
-
-  	$format_phone_function = 'format_'. $countrycode . '_phone_number';  	
-  	module_load_include('inc', 'phone', 'phone.'. $countrycode);
-  	
-	if (function_exists($format_phone_function)) {
-	    return $format_phone_function($phonenumber, $field);
-	}
-	else {
-	    return FALSE; 
-	}
+  if (phone_country_metadata($countrycode)) {
+    $format_phone_function = 'format_'. $countrycode . '_phone_number';
+    
+    if (function_exists($format_phone_function)) {
+      return $format_phone_function($phonenumber, $field);
+    }
+    else {
+      return FALSE; 
+    }
   }
   else {
-  	//Country not taken into account yet   
-  	return FALSE; 
+    //Country not taken into account yet   
+    return FALSE; 
   }
 }  
 
Index: phone.ca.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/phone/phone.ca.inc,v
retrieving revision 1.26
diff -u -r1.26 phone.ca.inc
--- phone.ca.inc	26 Aug 2009 16:06:12 -0000	1.26
+++ phone.ca.inc	5 Oct 2009 08:12:29 -0000
@@ -12,7 +12,28 @@
     'error' => '"%value" is not a valid North American phone number<br>North American Phone numbers should only contain numbers and + and - and ( and ) and spaces and be like 999-999-9999. Please enter a valid ten-digit phone number with optional extension.',
   );
 }
- 
+
+function phone_ca_number_settings($op, $field) {
+  $form = array();
+  $form['ca_phone_separator'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Separator'),
+    '#default_value' => isset($field['ca_phone_separator']) ? $field['ca_phone_separator'] : '-',
+    '#size' => 2,
+  );
+  $form['ca_phone_parentheses'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use parentheses around area code'),
+    '#default_value' => isset($field['ca_phone_parentheses']) ? $field['ca_phone_parentheses'] : 1,
+  );
+  
+  return $form;
+}
+
+function phone_ca_number_save($op, $field) {
+  return array('ca_phone_separator', 'ca_phone_parentheses');
+}
+
 /**  
  * Verifies that $phonenumber is a valid ten-digit North American phone number
  *
@@ -84,7 +105,7 @@
   
   if ($field['phone_country_code']) {
     if ($matches[1] != "1") {
-  	$phonenumber = "1" . " " . $phonenumber; 
+    $phonenumber = "1" . " " . $phonenumber; 
     }
   }
 
Index: phone.int.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/phone/phone.int.inc,v
retrieving revision 1.1
diff -u -r1.1 phone.int.inc
--- phone.int.inc	26 Aug 2009 16:06:12 -0000	1.1
+++ phone.int.inc	5 Oct 2009 08:12:32 -0000
@@ -1,6 +1,38 @@
 <?php
 // $Id: phone.int.inc,v 1.1 2009/08/26 16:06:12 thierrygd Exp $
 
+function phone_int_metadata() {
+  // These strings are translated using t() on output.
+  return array(
+    'label' => 'International Phone Numbers per E.123',
+    'error' => '"%value" is not a valid international phone number<br>International phone numbers should contain a country code prefixed by a plus sign followed by the local number.',
+  );
+}
+
+function phone_int_number_settings($op, $field) {
+  $form = array();
+  $form['phone_int_help'] = array(
+    '#type' => 'markup',
+    '#value' => t('International phone numbers are in the form +XX YYYYYYY where XX is a country code and YYYYYYY is the local number. This field type is based off of the <a href="http://www.itu.int/rec/T-REC-E.123/en">E.123 specification</a>.'),
+  );
+  $form['phone_default_country_code'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Default country code to add to international numbers without one (omit + sign)'),
+    '#default_value' => isset($field['phone_default_country_code']) ? $field['phone_default_country_code'] : '1',
+  );
+  $form['phone_int_max_length'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Maximum length of international numbers, according to the ITU this is 15'),
+    '#default_value' => isset($field['phone_int_max_length']) ? $field['phone_int_max_length'] : '15',
+  );
+  
+  return $form;
+}
+
+function phone_int_number_save($op, $field) {
+  return array('phone_int_help', 'phone_default_country_code', 'phone_int_max_length');
+}
+
 /**
  * Verifies that $phonenumber is a valid international phone number as per ITU or,
  * if a default country code is specified, a valid subscriber number.
