function _doWalkDir($item, $separator, $function_def, &$return_params, $params, $include_first, $level=0)
  {
    if($level > 0 || ($level == 0 && $include_first))
      call_user_func_array($function_def, array('dir' => dirname($item),
                                                'file' => basename($item),
                                                'path' => $item,
                                                'params' => $params,
                                                'return_params' => &$return_params));
    if(!is_dir($item))
      return;

    $handle = opendir($item);

    while(($file = readdir($handle)) !== false)
    {
      if (($file == '.') || ($file == '..'))
        continue;

      Fs :: _doWalkDir($item . $separator . $file,
                       $separator,
                       $function_def,
                       $return_params,
                       $params,
                       $level + 1);
    }
    closedir($handle);
  }