function serveLookupRequest($requestEnv)
 {
     $brm = new BookReaderMeta();
     try {
         $metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['subPrefix'], $_REQUEST['server']);
     } catch (Exception $e) {
         $this->BRfatal($e->getMessage());
     }
     $page = $_REQUEST['page'];
     // Index of image to return
     $imageIndex = null;
     // deal with subPrefix
     if (array_key_exists($_REQUEST, 'subPrefix') && $_REQUEST['subPrefix']) {
         $parts = explode('/', $_REQUEST['subPrefix']);
         $bookId = $parts[count($parts) - 1];
     } else {
         $bookId = $_REQUEST['id'];
     }
     $pageInfo = $this->parsePageRequest($page, $bookId);
     $basePage = $pageInfo['type'];
     $leaf = null;
     $region = null;
     switch ($basePage) {
         case 'title':
             if (!array_key_exists('titleIndex', $metadata)) {
                 $this->BRfatal("No title page asserted in book");
             }
             $imageIndex = $metadata['titleIndex'];
             break;
             /* Old 'cover' behaviour where it would show cover 0 if it exists or return 404. */
         /* Old 'cover' behaviour where it would show cover 0 if it exists or return 404. */
         case 'cover0':
             if (!array_key_exists('coverIndices', $metadata)) {
                 $this->BRfatal("No cover asserted in book");
             }
             $imageIndex = $metadata['coverIndices'][0];
             // $$$ TODO add support for other covers
             break;
         case 'preview':
         case 'cover':
             // Show our best guess if cover is requested
             // Preference is:
             //   Cover page if book was published >= 1923
             //   Title page
             //   Cover page
             //   Page 0
             if (array_key_exists('date', $metadata) && array_key_exists('coverIndices', $metadata)) {
                 if ($brm->parseYear($metadata['date']) >= 1923) {
                     $imageIndex = $metadata['coverIndices'][0];
                     break;
                 }
             }
             if (array_key_exists('titleIndex', $metadata)) {
                 $imageIndex = $metadata['titleIndex'];
                 break;
             }
             if (array_key_exists('coverIndices', $metadata)) {
                 $imageIndex = $metadata['coverIndices'][0];
                 break;
             }
             // First page
             $imageIndex = 0;
             break;
         case 'n':
             // Accessible index page
             $imageIndex = intval($pageInfo['value']);
             break;
         case 'page':
             // Named page
             $index = array_search($pageInfo['value'], $metadata['pageNums']);
             if ($index === FALSE) {
                 // Not found
                 $this->BRfatal("Page not found");
                 break;
             }
             $imageIndex = $index;
             break;
         case 'leaf':
             // Leaf explicitly specified
             $leaf = $pageInfo['value'];
             break;
         default:
             // Shouldn't be possible
             $this->BRfatal("Unrecognized page type requested");
             break;
     }
     if (is_null($leaf)) {
         // Leaf was not explicitly set -- look it up
         $leaf = $brm->leafForIndex($imageIndex, $metadata['leafNums']);
     }
     $requestEnv = array('zip' => $metadata['zip'], 'file' => $brm->imageFilePath($leaf, $metadata['subPrefix'], $metadata['imageFormat']), 'ext' => 'jpg');
     // remove non-passthrough keys from pageInfo
     unset($pageInfo['type']);
     unset($pageInfo['value']);
     // add pageinfo to request
     $requestEnv = array_merge($pageInfo, $requestEnv);
     // Return image data - will check privs
     $this->serveRequest($requestEnv);
 }