protected function getDetailGroups(KurogoDataObject $object, $configName)
 {
     $detailFields = Kurogo::getModuleSections($configName, $this->configModule);
     $groups = array();
     foreach ($detailFields as $key => $keyData) {
         $group = Kurogo::arrayVal($keyData, 'group', 0);
         $grouptype = Kurogo::arrayVal($keyData, 'grouptype', 'navlist');
         //get the object we're using for this field
         $keyObject = $this->getObject($object, $keyData);
         if ($listType = Kurogo::arrayVal($keyData, 'list-type')) {
             $groupObjects = $this->getObjectField($keyObject, $key);
             if (!is_array($groupObjects)) {
                 throw new KurogoException("Result of " . get_class($keyObject) . " {$key} did not return an array");
             }
             foreach ($groupObjects as $objectKey => $groupObject) {
                 $_groups = $this->getDetailGroups($groupObject, 'list-' . $listType);
                 foreach ($_groups as $_groupKey => $_groupData) {
                     $groupObjectKey = $objectKey . '-' . $_groupKey;
                     $groupOptions = array('object' => $groupObject, 'group' => $groupObjectKey, 'groupkey' => $_groupKey);
                     $groups[$groupObjectKey] = array_merge($groupOptions, $_groupData);
                 }
             }
             break;
         } else {
             if (!isset($groups[$group])) {
                 $groups[$group] = array();
             }
             if (isset($keyData['groupheading'])) {
                 $groups[$group]['groupheading'] = $keyData['groupheading'];
                 unset($keyData['groupheading']);
             } elseif (isset($keyData['groupheadingfield'])) {
                 $groups[$group]['groupheading'] = $this->getObjectField($keyObject, $keyData['groupheadingfield']);
                 unset($keyData['groupheadingfield']);
             }
             if (isset($keyData['groupsubheading'])) {
                 $groups[$group]['groupsubheading'] = $keyData['groupsubheading'];
                 unset($keyData['groupsubheading']);
             } elseif (isset($keyData['groupsubheadingfield'])) {
                 $groups[$group]['groupsubheading'] = $this->getObjectField($keyObject, $keyData['groupsubheadingfield']);
                 unset($keyData['groupsubheadingfield']);
             }
             if (isset($keyData['subTitleNewline'])) {
                 $groups[$group]['subTitleNewline'] = $keyData['subTitleNewline'];
                 unset($keyData['subTitleNewline']);
             }
             switch ($grouptype) {
                 case 'html':
                     $groups[$group] = array_merge($groups[$group], $keyData);
                     $groups[$group]['html'] = $this->getObjectField($keyObject, $key);
                     $groups[$group]['type'] = $grouptype;
                     $groups[$group]['field'] = $key;
                     break;
                 case 'navlist':
                 case 'list':
                     $groups[$group]['type'] = $grouptype;
                     $groups[$group]['fields'][$key] = $keyData;
                     break;
                 default:
                     throw new KurogoConfigurationException("Invalid grouptype {$grouptype} for {$key}");
             }
         }
     }
     return $groups;
 }