/**
  * Returns unused fields that are available for use in either default or additional list views
  * @return array    List of available fields as an array, where key = value = <field name>
  */
 function getAvailableFields()
 {
     $availableFields = array();
     // Select available fields from the field definitions - don't need to worry about checking if ok to include as the Implementation has done that already in its constructor
     foreach ($this->_fielddefs as $key => $def) {
         if ($this->isValidField($key, $def)) {
             $availableFields[$key] = self::_trimFieldDefs($this->_fielddefs[$key]);
         }
     }
     //$GLOBALS['log']->debug(get_class($this).'->getAvailableFields(): '.print_r($availableFields,true));
     // now remove all fields that are already in the viewdef - they are not available; they are in use
     return ListLayoutMetaDataParser::getArrayDiff($availableFields, $this->_viewdefs);
 }