/**
  * Fill a field and return its value
  * 
  * @param	array	field
  * @param	int		maximum recoursion depth
  * @return 	mixed	field value (depending on type)
  */
 private function fillField($a_field, $a_maxdepth = 100)
 {
     // check recursion or existing values
     if (0 > $a_maxdepth--) {
         return 'max depth reached!';
     } elseif (isset($a_field['field_value'])) {
         //echo "<br />FOUND: ".  $a_field['field_name'] . " = ";
         //var_dump($a_field['field_value']);
         return $a_field['field_value'];
     }
     // get field values that are not yet known
     switch ($a_field['field_type']) {
         case ilExternalContentType::FIELDTYPE_ILIAS:
             $value = $this->fillIliasField($a_field);
             break;
         case ilExternalContentType::FIELDTYPE_CALCULATED:
             $value = $this->fillCalculatedField($a_field, $a_maxdepth);
             break;
         case ilExternalContentType::FIELDTYPE_TEMPLATE:
             $value = $this->fillTemplateRec($a_field['template'], $a_maxdepth);
             break;
     }
     // apply an encoding to the value
     $value = ilExternalContentEncodings::_applyEncoding($a_field['encoding'], $value);
     // save the value so that it is not re-calculated
     $this->fields[$a_field['field_name']]['field_value'] = $value;
     //echo "<br />FILLED: ".  $a_field['field_name'] . " = ";
     //var_dump($value);
     return $value;
 }