public function fetchAllDetail($args = array())
 {
     if (!$args['page_limit'] || $args['page_limit'] > 100) {
         $args['page_limit'] = 100;
     }
     $all_items = false;
     if (!isset($args['page_offset'])) {
         $args['page_offset'] = 0;
         $all_items = true;
     }
     if (!isset($args['sort_by'])) {
         $args['sort_by'] = 'id';
     }
     $args_str = '';
     foreach ($args as $key => $val) {
         $args_str .= '&' . $key . '=' . urlencode($val);
     }
     $response = array();
     if (self::$_filter) {
         $filter = array();
         $filter = self::$_filter;
         $filter_prefix = '';
         if ($this->parent && $filter['type'] != $this->parent) {
             $filter_prefix = $this->getFilterPrefix($this->parent, $filter['type']);
         }
         $response = $this->call($this->method . '/limit/' . $filter_prefix . $filter['type'] . '=' . $filter['id'] . '?full=' . $this->method_full . $args_str, array());
         if (!$filter['persist']) {
             self::$_filter = array();
         }
     } else {
         $response = $this->call($this->method . '?full=' . $this->method_full . $args_str, array());
     }
     $full_count = $response['entities_attr']['count'];
     if (self::$_debug_level >= 1) {
         print "API->" . get_class($this) . "->fetchAllDetail = " . print_r($response, true) . "\n";
     }
     $ret = array();
     $ret = $this->prepareResponseMultiple($response);
     if ($all_items && count($ret['entities']) == $args['page_limit']) {
         do {
             $ret2 = array();
             $args['page_offset'] += $args['page_limit'];
             $ret2 = $this->fetchAllDetail($args);
             foreach ($ret2['entities'] as $eid => $e) {
                 $ret['entities'][$eid] = $e;
             }
         } while (count($ret['entities']) < $full_count);
     }
     return $ret;
 }