function OnLoadPageData()
 {
     # Sanitise the name of the requested statistic
     $this->which_statistic = preg_replace("/[^a-z0-9-]/", "", $_GET["statistic"]);
     # Set up statistics manager
     $statistics_manager = new StatisticsManager($this->GetSettings(), $this->GetDataConnection());
     # Configure the requested statistic
     switch ($this->which_statistic) {
         case "individual-scores":
             require_once "stoolball/statistics/individual-scores.class.php";
             $this->statistic = new IndividualScores($statistics_manager);
             break;
         case "most-runs":
             require_once "stoolball/statistics/most-runs.class.php";
             $this->statistic = new MostRuns($statistics_manager);
             break;
         case "batting-average":
             require_once "stoolball/statistics/batting-average.class.php";
             $this->statistic = new BattingAverage($statistics_manager);
             break;
         case "batting-strike-rate":
             require_once "stoolball/statistics/batting-strike-rate.class.php";
             $this->statistic = new BattingStrikeRate($statistics_manager);
             break;
         case "bowling-performances":
             require_once "stoolball/statistics/bowling-performances.class.php";
             $this->statistic = new BowlingPerformances($statistics_manager);
             break;
         case "most-wickets":
             require_once "stoolball/statistics/most-wickets.class.php";
             $this->statistic = new MostWickets($statistics_manager);
             break;
         case "most-wickets-by-bowler-and-catcher":
             require_once "stoolball/statistics/most-wickets-by-bowler-and-catcher.class.php";
             $this->statistic = new MostWicketsForBowlerAndCatcher($statistics_manager);
             break;
         case "bowling-average":
             require_once "stoolball/statistics/bowling-average.class.php";
             $this->statistic = new BowlingAverage($statistics_manager);
             break;
         case "economy-rate":
             require_once "stoolball/statistics/economy-rate.class.php";
             $this->statistic = new EconomyRate($statistics_manager);
             break;
         case "bowling-strike-rate":
             require_once "stoolball/statistics/bowling-strike-rate.class.php";
             $this->statistic = new BowlingStrikeRate($statistics_manager);
             break;
         case "most-catches":
             require_once "stoolball/statistics/most-catches.class.php";
             $this->statistic = new MostCatches($statistics_manager);
             break;
         case "most-catches-in-innings":
             require_once "stoolball/statistics/most-catches-in-innings.class.php";
             $this->statistic = new MostCatchesInAnInnings($statistics_manager);
             break;
         case "most-run-outs":
             require_once "stoolball/statistics/most-run-outs.class.php";
             $this->statistic = new MostRunOuts($statistics_manager);
             break;
         case "most-run-outs-in-innings":
             require_once "stoolball/statistics/most-run-outs-in-innings.class.php";
             $this->statistic = new MostRunOutsInAnInnings($statistics_manager);
             break;
         case "player-performances":
             require_once "stoolball/statistics/player-performances.class.php";
             $this->statistic = new PlayerPerformances($statistics_manager);
             break;
         case "player-of-match":
             require_once "stoolball/statistics/player-of-match.class.php";
             $this->statistic = new PlayerOfTheMatch($statistics_manager);
             break;
         case "most-player-of-match":
             require_once "stoolball/statistics/most-player-of-match.class.php";
             $this->statistic = new MostPlayerOfTheMatch($statistics_manager);
             break;
         default:
             $matches = array();
             $is_match = preg_match("/^most-scores-of-([0-9]+)\$/", $this->which_statistic, $matches);
             if ($is_match === 1) {
                 $match_scores_of = $matches[1];
                 require_once "stoolball/statistics/most-scores-of.class.php";
                 $this->statistic = new MostScoresOf($match_scores_of, $statistics_manager);
             }
             $is_match = preg_match("/^most-([0-9][0-9]?)-wickets\$/", $this->which_statistic, $matches);
             if ($is_match === 1) {
                 $how_many_wickets = $matches[1];
                 require_once "stoolball/statistics/most-wicket-hauls-of.class.php";
                 $this->statistic = new \Stoolball\Statistics\MostWicketHaulsOf($how_many_wickets, $statistics_manager);
             }
             break;
     }
     # Is this a request for CSV data?
     $csv = (isset($_GET["format"]) and $_GET["format"] == "csv");
     if ($csv) {
         $statistics_manager->OutputAsCsv($this->statistic->ColumnHeaders());
     }
     # Apply player filter first because it can be used to limit the choices for other filters
     if ($this->statistic->SupportsFilterByPlayer()) {
         $this->filter .= StatisticsFilter::ApplyPlayerFilter($this->GetSettings(), $this->GetDataConnection(), $statistics_manager);
     }
     # Apply filters common to all statistics
     $this->filter_control = new StatisticsFilterControl();
     if ($this->statistic->SupportsFilterByBattingPosition()) {
         $filter_batting_position = StatisticsFilter::SupportBattingPositionFilter($statistics_manager);
         $this->filter_control->SupportBattingPositionFilter($filter_batting_position);
         $this->filter .= $filter_batting_position[2];
     }
     $match_type_filter_description = "";
     # If player filter applied, no point filtering by player type because they're associated with a team of one player type.
     # There is the edge case of a ladies team playing in a mixed match, but it would be more confusing than useful to offer it.
     if (!isset($_GET['player'])) {
         $filter_player_type = StatisticsFilter::SupportPlayerTypeFilter($statistics_manager);
         $this->filter_control->SupportPlayerTypeFilter($filter_player_type);
         $match_type_filter_description .= $filter_player_type[2];
     }
     $filter_match_type = StatisticsFilter::SupportMatchTypeFilter($statistics_manager);
     $this->filter_control->SupportMatchTypeFilter($filter_match_type);
     $match_type_filter_description .= $filter_match_type[2];
     $this->filter .= StatisticsFilter::CombineMatchTypeDescriptions($match_type_filter_description);
     # If player filter applied, no point filtering by team. Check for player filter is stricter than this
     # but this is good enough. If this applies, but the player filter isn't applied, it's because someone
     # is playing with the query string, so that's tough.
     if (!isset($_GET['player'])) {
         $filter_team = StatisticsFilter::SupportTeamFilter($statistics_manager);
         $this->filter_control->SupportTeamFilter($filter_team);
         $this->filter .= $filter_team[2];
     }
     $filter_opposition = StatisticsFilter::SupportOppositionFilter($statistics_manager);
     $this->filter_control->SupportOppositionFilter($filter_opposition);
     $this->filter .= $filter_opposition[2];
     $filter_competition = StatisticsFilter::SupportCompetitionFilter($statistics_manager);
     $this->filter_control->SupportCompetitionFilter($filter_competition);
     $this->filter .= $filter_competition[2];
     $this->filter .= StatisticsFilter::ApplySeasonFilter($this->GetSettings(), $this->GetDataConnection(), $statistics_manager);
     $filter_ground = StatisticsFilter::SupportGroundFilter($statistics_manager);
     $this->filter_control->SupportGroundFilter($filter_ground);
     $this->filter .= $filter_ground[2];
     $filter_date = StatisticsFilter::SupportDateFilter($statistics_manager);
     if (!is_null($filter_date[0])) {
         $this->filter_control->SupportAfterDateFilter($filter_date[0]);
     }
     if (!is_null($filter_date[1])) {
         $this->filter_control->SupportBeforeDateFilter($filter_date[1]);
     }
     $this->filter .= $filter_date[2];
     $this->filter .= StatisticsFilter::ApplyTournamentFilter($this->GetSettings(), $this->GetDataConnection(), $statistics_manager);
     $filter_innings = StatisticsFilter::SupportInningsFilter($statistics_manager);
     $this->filter_control->SupportInningsFilter($filter_innings[1]);
     $this->filter .= $filter_innings[2];
     $filter_won_match = StatisticsFilter::SupportMatchResultFilter($statistics_manager);
     $this->filter_control->SupportMatchResultFilter($filter_won_match[1]);
     $this->filter .= $filter_won_match[2];
     # Configure paging of results
     if (!$csv and $this->statistic->SupportsPagedResults()) {
         require_once 'data/paged-results.class.php';
         $this->paging = new PagedResults();
         $this->paging->SetPageName($this->which_statistic);
         $this->paging->SetQueryString(preg_replace("/statistic={$this->which_statistic}&?/", "", $this->paging->GetQueryString()));
         $this->paging->SetPageSize(50);
         $this->paging->SetResultsTextSingular($this->statistic->ItemTypeSingular());
         $this->paging->SetResultsTextPlural($this->statistic->ItemTypePlural());
         $statistics_manager->FilterByPage($this->paging->GetPageSize(), $this->paging->GetCurrentPage());
     }
     $this->data = $this->statistic->ReadStatistic();
     if (is_array($this->data)) {
         if ($csv) {
             require_once "data/csv.class.php";
             CSV::PublishData($this->data);
         } else {
             $this->paging->SetTotalResults(array_shift($this->data));
         }
     }
     unset($statistics_manager);
 }