static public tcGridView Create(DataTable acDataTable, tcGridViewType aeType)
        {
            if (meInitialized == false)
            {
                DoInitialization();
                meInitialized = true;
            }

            tcGridView lcReturn = new tcGridView(aeType);

            lcReturn.BorderStyle = BorderStyle.None;
            lcReturn.GridLines   = GridLines.None;

            lcReturn.AllowSorting = false;
            lcReturn.AllowPaging  = false;

            switch (aeType.meType)
            {
            case teGridViewType.eeCoursePage:
                lcReturn = SetMapPageColumns(lcReturn, true, aeType.meSub);
                break;

            case teGridViewType.eeMapPage:
                lcReturn = SetMapPageColumns(lcReturn, false, aeType.meSub);
                break;

            case teGridViewType.eeMapListPage:
                lcReturn = SetMapListPageColumns(lcReturn, aeType.meSub);
                break;

            case teGridViewType.eePlayerPage:
                lcReturn = SetPlayerPageColumns(lcReturn, aeType.meSub);
                break;

            case teGridViewType.eePlayerListPage:
                lcReturn = SetPlayerListPageColumns(lcReturn, aeType.meSub);
                break;

            case teGridViewType.eeWrPage:
                lcReturn = SetWrPageColumns(lcReturn, aeType.meSub);
                break;

            default:
                Debug.WriteLine("Unexpected switch case");
                break;
            }

            lcReturn.DataSource = acDataTable;

            lcReturn.ShowHeader = true;

            lcReturn.HorizontalAlign = HorizontalAlign.Center;

            lcReturn.CellPadding = 1;
            lcReturn.CellSpacing = 1;
            lcReturn.Width       = 673;

            mcStyle.BackColor = teColors.eeRowBg;
            lcReturn.EditRowStyle.CopyFrom(mcStyle);
            lcReturn.AlternatingRowStyle.CopyFrom(mcStyle);

            mcStyle.BackColor = teColors.eeHeaderBg;
            lcReturn.HeaderStyle.CopyFrom(mcStyle);
            lcReturn.FooterStyle.CopyFrom(mcStyle);
            lcReturn.PagerStyle.CopyFrom(mcStyle);
            lcReturn.PagerStyle.HorizontalAlign = HorizontalAlign.Center;
            lcReturn.PagerStyle.Font.Name       = "Arial";
            lcReturn.PagerStyle.ForeColor       = teColors.eeText;

            mcStyle.BackColor = teColors.eeAltRowBg;
            lcReturn.RowStyle.CopyFrom(mcStyle);

            return(lcReturn);
        }
        static private tcGridView SetPlayerPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;
            acGridView.AllowSorting        = true;
            acGridView.AllowPaging         = false;

            acGridView.Columns.Add(CreateHyperLinkField(new string[] { "Map" }, "Map", "~/map.aspx?id={0}"));
            acGridView.Columns[lnCol].HeaderText       = "Map";
            acGridView.Columns[lnCol++].SortExpression = "Map";

            acGridView.Columns.Add(CreateHyperLinkField(new string[] { "CourseID" }, "Course", "~/course.aspx?id={0}"));
            acGridView.Columns[lnCol].HeaderText       = "Course";
            acGridView.Columns[lnCol++].SortExpression = "Course";

            if (aeType != teSubPageType.eePlayerPageIncomplete)
            {
                acGridView.Columns.Add(CreateBoundField("Time", "Time", true));
                acGridView.Columns[lnCol].HeaderText       = "Time";
                acGridView.Columns[lnCol++].SortExpression = "Time";

                if (aeType == teSubPageType.eePlayerPageCp)
                {
                    acGridView.Columns.Add(CreateBoundField("Cp", "Cp", true));
                    acGridView.Columns[lnCol].HeaderText       = "Checks";
                    acGridView.Columns[lnCol++].SortExpression = "Cp";

                    acGridView.Columns.Add(CreateBoundField("Teles", "Teles", true));
                    acGridView.Columns[lnCol].HeaderText       = "Teles";
                    acGridView.Columns[lnCol++].SortExpression = "Teles";
                }

                if (aeType != teSubPageType.eePlayerPageWr)
                {
                    acGridView.Columns.Add(CreateRankField());
                    acGridView.Columns[lnCol].HeaderText                  = "Rank";
                    acGridView.Columns[lnCol].HeaderStyle.Width           = 64;
                    acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                    acGridView.Columns[lnCol].ItemStyle.HorizontalAlign   = HorizontalAlign.Center;
                    acGridView.Columns[lnCol++].SortExpression            = "rank";

                    acGridView.Columns.Add(CreateBoundField("Server", "Server", true));
                    acGridView.Columns[lnCol].HeaderText        = "Server";
                    acGridView.Columns[lnCol].HeaderStyle.Width = 256;
                    acGridView.Columns[lnCol].ItemStyle.Width   = 256;
                    acGridView.Columns[lnCol++].SortExpression  = "Server";
                }

                if (aeType == teSubPageType.eePlayerPageWr)
                {
                    acGridView.Columns.Add(CreateBoundField("Date", "Date", true));
                    acGridView.Columns[lnCol].HeaderText       = "Date";
                    acGridView.Columns[lnCol++].SortExpression = "Date";

                    acGridView.Columns.Add(CreateBoundField("Status", "Status", true));
                    acGridView.Columns[lnCol].HeaderText       = "Status";
                    acGridView.Columns[lnCol++].SortExpression = "Status";
                }
            }
            else
            {
                acGridView.AllowPaging = true;
                acGridView.PageSize    = 30;
            }

            return(acGridView);
        }
        static private tcGridView SetPlayerListPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;
            acGridView.PageSize            = 30;

            acGridView.Columns.Add(CreateBoundField("Rank", "Rank", true));
            acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
            acGridView.Columns[lnCol].ItemStyle.HorizontalAlign   = HorizontalAlign.Center;
            acGridView.Columns[lnCol].SortExpression = "Rank";
            acGridView.Columns[lnCol++].HeaderText   = "Rank";

            if (aeType != teSubPageType.eePlayerListCountry)
            {
                acGridView.Columns.Add(CreatePlayerNameField());
                acGridView.Columns[lnCol].SortExpression = "Player";
                acGridView.Columns[lnCol++].HeaderText   = "Player";
            }
            else if (aeType == teSubPageType.eePlayerListCountry)
            {
                acGridView.Columns.Add(CreateCountryNameField());
                acGridView.Columns[lnCol].HeaderText       = "Country";
                acGridView.Columns[lnCol++].SortExpression = "Country";

                acGridView.Columns.Add(CreateBoundField("Players", "Players", true));
                acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                acGridView.Columns[lnCol].ItemStyle.HorizontalAlign   = HorizontalAlign.Center;
                acGridView.Columns[lnCol].SortExpression = "Players";
                acGridView.Columns[lnCol++].HeaderText   = "Players";
            }

            if (aeType == teSubPageType.eePlayerListCountry || aeType == teSubPageType.eePlayerListPlayer)
            {
                acGridView.Columns.Add(CreateBoundField("Records", "Records", true, true));
                acGridView.Columns[lnCol].SortExpression = "Records";
                acGridView.Columns[lnCol++].HeaderText   = "Nocheck<br/>Records";

                acGridView.Columns.Add(CreateBoundField("RecordsCp", "RecordsCp", true, true));
                acGridView.Columns[lnCol].SortExpression = "RecordsCp";
                acGridView.Columns[lnCol++].HeaderText   = "Checkpoint<br/>Records";
            }

            if (aeType == teSubPageType.eePlayerListTagRank)
            {
                acGridView.Columns.Add(CreateBoundField("round_wins", "round_wins", true, true));
                acGridView.Columns[lnCol].SortExpression = "round_wins";
                acGridView.Columns[lnCol++].HeaderText   = "Round<br/>Wins";

                acGridView.Columns.Add(CreateBoundField("rounds_played", "rounds_played", true, true));
                acGridView.Columns[lnCol].SortExpression = "rounds_played";
                acGridView.Columns[lnCol++].HeaderText   = "Rounds<br/>Played";

                acGridView.Columns.Add(CreateTagRoundWinPercentField());
                acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                acGridView.Columns[lnCol].ItemStyle.HorizontalAlign   = HorizontalAlign.Center;
                acGridView.Columns[lnCol].HeaderText       = "Win<br/>Rate";
                acGridView.Columns[lnCol++].SortExpression = "round_wins";

                acGridView.Columns.Add(CreateBoundField("match_wins", "match_wins", true, true));
                acGridView.Columns[lnCol].SortExpression = "match_wins";
                acGridView.Columns[lnCol++].HeaderText   = "Match<br/>Wins";

                acGridView.Columns.Add(CreateBoundField("tags", "tags", true, true));
                acGridView.Columns[lnCol].SortExpression = "tags";
                acGridView.Columns[lnCol++].HeaderText   = "Tags";

                acGridView.Columns.Add(CreateBoundField("ninja", "ninja", true, true));
                acGridView.Columns[lnCol].SortExpression = "ninja";
                acGridView.Columns[lnCol++].HeaderText   = "Ninja<br/>Tags";

                acGridView.Columns.Add(CreateBoundField("tagged", "tagged", true, true));
                acGridView.Columns[lnCol].SortExpression = "tagged";
                acGridView.Columns[lnCol++].HeaderText   = "Tagged";
            }

            if (aeType == teSubPageType.eePlayerListTagStats)
            {
                acGridView.Columns.Add(CreateBoundField("avg_tags_per_round", "avg_tags_per_round", true, true));
                acGridView.Columns[lnCol].SortExpression = "avg_tags_per_round";
                acGridView.Columns[lnCol++].HeaderText   = "Avg tags<br/>per round";

                acGridView.Columns.Add(CreateBoundField("avg_tagged_per_round", "avg_tagged_per_round", true, true));
                acGridView.Columns[lnCol].SortExpression = "avg_tagged_per_round";
                acGridView.Columns[lnCol++].HeaderText   = "Avg tagged<br/>per round";

                acGridView.Columns.Add(CreateBoundField("avg_powerup_per_round", "avg_powerup_per_round", true, true));
                acGridView.Columns[lnCol].SortExpression = "avg_powerup_per_round";
                acGridView.Columns[lnCol++].HeaderText   = "Avg powerups<br/>per round";

                //acGridView.Columns.Add(CreateBoundField("total_untagged_time", "total_untagged_time", true, true));
                //acGridView.Columns[lnCol].SortExpression = "total_untagged_time";
                //acGridView.Columns[lnCol++].HeaderText = "Total<br/>untagged<br/>time";

                acGridView.Columns.Add(CreateBoundField("round_most_untagged", "round_most_untagged", true, true));
                acGridView.Columns[lnCol].SortExpression = "round_most_untagged";
                acGridView.Columns[lnCol++].HeaderText   = "Most untagged<br/> time in a round";

                acGridView.Columns.Add(CreateBoundField("round_most_powerup", "round_most_powerup", true, true));
                acGridView.Columns[lnCol].SortExpression = "round_most_powerup";
                acGridView.Columns[lnCol++].HeaderText   = "Most<br/>powerups<br/>per round";
            }

            acGridView.AllowSorting = true;
            acGridView.AllowPaging  = true;

            return(acGridView);
        }
        static private tcGridView SetMapListPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;

            acGridView.Columns.Add(CreateHyperLinkField(new string[] { "Map" }, "Map", "~/map.aspx?id={0}"));
            acGridView.Columns[lnCol].SortExpression = "Map";
            acGridView.Columns[lnCol++].HeaderText   = "Map";

            if (aeType == teSubPageType.eeMapsListMaps)
            {
                acGridView.Columns.Add(CreateBoundField("Courses", "Courses", true, true));
                acGridView.Columns[lnCol].SortExpression = "Courses";
                acGridView.Columns[lnCol++].HeaderText   = "Courses";

                acGridView.Columns.Add(CreateBoundField("ServerRuns", "ServerRuns", true, true));
                acGridView.Columns[lnCol].SortExpression = "ServerRuns";
                acGridView.Columns[lnCol++].HeaderText   = "Server<br/>Runs";
            }
            else if (aeType == teSubPageType.eeMapsListCourses)
            {
                acGridView.Columns.Add(CreateHyperLinkField(new string[] { "CourseID" }, "Course", "~/course.aspx?id={0}"));
                acGridView.Columns[lnCol].HeaderText       = "Course";
                acGridView.Columns[lnCol++].SortExpression = "Course";
            }
            else if (aeType == teSubPageType.eeMapsListTag)
            {
                acGridView.Columns.Add(CreateBoundField("ServerRuns", "ServerRuns", true, true));
                acGridView.Columns[lnCol].SortExpression = "ServerRuns";
                acGridView.Columns[lnCol++].HeaderText   = "Server Runs";

                acGridView.Columns.Add(CreateBoundField("Added", "Added", true, true));
                acGridView.Columns[lnCol].SortExpression = "Added";
                acGridView.Columns[lnCol++].HeaderText   = "Date Added";
            }

            if (aeType != teSubPageType.eeMapsListTag)
            {
                acGridView.Columns.Add(CreateBoundField("CourseCompletions", "CourseCompletions", true, true));
                acGridView.Columns[lnCol].SortExpression = "CourseCompletions";
                acGridView.Columns[lnCol++].HeaderText   = "Course<br/>Completions";

                acGridView.Columns.Add(CreateBoundField("NocheckPlayers", "NocheckPlayers", true, true));
                acGridView.Columns[lnCol].SortExpression = "NocheckPlayers";
                acGridView.Columns[lnCol++].HeaderText   = "Nocheck<br/>Players";

                acGridView.Columns.Add(CreateBoundField("CpPlayers", "CpPlayers", true, true));
                acGridView.Columns[lnCol].SortExpression = "CpPlayers";
                acGridView.Columns[lnCol++].HeaderText   = "Checkpoint<br/>Players";

                acGridView.Columns.Add(CreateBoundField("WR", "WR", true, true));
                acGridView.Columns[lnCol].SortExpression = "WR";
                acGridView.Columns[lnCol++].HeaderText   = "World<br/>Records";

                acGridView.Columns.Add(CreateBoundField("Added", "Added", true, true));
                acGridView.Columns[lnCol].SortExpression = "Added";
                acGridView.Columns[lnCol++].HeaderText   = "Date<br/>Added";
            }

            acGridView.AllowSorting = true;
            acGridView.AllowPaging  = false;

            return(acGridView);
        }
        static private tcGridView SetWrPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;
            acGridView.AllowSorting        = true;
            acGridView.AllowPaging         = false;

            if (aeType != teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateBoundField("Rank", "Rank", true, true));
                acGridView.Columns[lnCol].HeaderText       = "Current<br/>Rank";
                acGridView.Columns[lnCol++].SortExpression = "Rank";
            }

            if (aeType == teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateHyperLinkField(new string[] { "Map" }, "Map", "~/map.aspx?id={0}"));
                acGridView.Columns[lnCol].HeaderText       = "Map";
                acGridView.Columns[lnCol++].SortExpression = "Map";

                acGridView.Columns.Add(CreateHyperLinkField(new string[] { "CourseID" }, "Course", "~/course.aspx?id={0}"));
                acGridView.Columns[lnCol].HeaderText       = "Course";
                acGridView.Columns[lnCol++].SortExpression = "Course";
            }

            if (aeType != teSubPageType.eeWrPageCountry)
            {
                acGridView.Columns.Add(CreatePlayerNameField());
                acGridView.Columns[lnCol].SortExpression = "Player";
                acGridView.Columns[lnCol++].HeaderText   = "Player";
            }
            else
            {
                acGridView.Columns.Add(CreateCountryNameField());
                acGridView.Columns[lnCol].HeaderText       = "Country";
                acGridView.Columns[lnCol++].SortExpression = "Country";
            }

            if (aeType == teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateBoundField("Time", "Time", true));
                acGridView.Columns[lnCol].HeaderText       = "Time";
                acGridView.Columns[lnCol++].SortExpression = "Time";

                acGridView.Columns.Add(CreateBoundField("Date", "Date", true));
                acGridView.Columns[lnCol].HeaderText       = "Date";
                acGridView.Columns[lnCol++].SortExpression = "Date";
            }

            if (aeType != teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateBoundField("CurrentWR", "CurrentWR", true, true));
                acGridView.Columns[lnCol].HeaderText       = "Current<br/>World Records";
                acGridView.Columns[lnCol++].SortExpression = "CurrentWR";

                acGridView.Columns.Add(CreateBoundField("TotalWR", "TotalWR", true, true));
                acGridView.Columns[lnCol].HeaderText       = "Lifetime<br/>World Records";
                acGridView.Columns[lnCol++].SortExpression = "TotalWR";

                acGridView.Columns.Add(CreateBoundField("TotalCourses", "TotalCourses", true, true));
                acGridView.Columns[lnCol].HeaderText       = "Unique<br/>Courses";
                acGridView.Columns[lnCol++].SortExpression = "TotalCourses";
            }

            return(acGridView);
        }
        static public tcGridView Create(DataTable acDataTable, tcGridViewType aeType)
        {
            if (meInitialized == false)
            {
                DoInitialization();
                meInitialized = true;
            }

            tcGridView lcReturn = new tcGridView(aeType);

            lcReturn.BorderStyle = BorderStyle.None;
            lcReturn.GridLines = GridLines.None;

            lcReturn.AllowSorting = false;
            lcReturn.AllowPaging = false;

            switch(aeType.meType)
            {
                case teGridViewType.eeCoursePage:
                    lcReturn = SetMapPageColumns(lcReturn, true, aeType.meSub);
                    break;
                case teGridViewType.eeMapPage:
                    lcReturn = SetMapPageColumns(lcReturn, false, aeType.meSub);
                    break;
                case teGridViewType.eeMapListPage:
                    lcReturn = SetMapListPageColumns(lcReturn, aeType.meSub);
                    break;
                case teGridViewType.eePlayerPage:
                    lcReturn = SetPlayerPageColumns(lcReturn, aeType.meSub);
                    break;
                case teGridViewType.eePlayerListPage:
                    lcReturn = SetPlayerListPageColumns(lcReturn, aeType.meSub);
                    break;
                case teGridViewType.eeWrPage:
                    lcReturn = SetWrPageColumns(lcReturn, aeType.meSub);
                    break;
                default:
                    Debug.WriteLine("Unexpected switch case");
                    break;
            }

            lcReturn.DataSource = acDataTable;

            lcReturn.ShowHeader = true;

            lcReturn.HorizontalAlign = HorizontalAlign.Center;

            lcReturn.CellPadding = 1;
            lcReturn.CellSpacing = 1;
            lcReturn.Width = 673;

            mcStyle.BackColor = teColors.eeRowBg;
            lcReturn.EditRowStyle.CopyFrom(mcStyle);
            lcReturn.AlternatingRowStyle.CopyFrom(mcStyle);

            mcStyle.BackColor = teColors.eeHeaderBg;
            lcReturn.HeaderStyle.CopyFrom(mcStyle);
            lcReturn.FooterStyle.CopyFrom(mcStyle);
            lcReturn.PagerStyle.CopyFrom(mcStyle);
            lcReturn.PagerStyle.HorizontalAlign = HorizontalAlign.Center;
            lcReturn.PagerStyle.Font.Name = "Arial";
            lcReturn.PagerStyle.ForeColor = teColors.eeText;

            mcStyle.BackColor = teColors.eeAltRowBg;
            lcReturn.RowStyle.CopyFrom(mcStyle);
            
            return lcReturn;
        }
        static private tcGridView SetMapPageColumns(tcGridView acGridView, bool aePaging, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;
            acGridView.PageSize            = 30;

            acGridView.AllowSorting = true;
            acGridView.AllowPaging  = aePaging;

            acGridView.Columns.Add(CreateBoundField("Rank", "Rank", true, true, false, 50));
            acGridView.Columns[lnCol].HeaderText       = "Rank";
            acGridView.Columns[lnCol++].SortExpression = "Rank";

            acGridView.Columns.Add(CreatePlayerNameField());
            acGridView.Columns[lnCol].HeaderText        = "Player";
            acGridView.Columns[lnCol].HeaderStyle.Width = 256;
            acGridView.Columns[lnCol].ItemStyle.Width   = 256;
            acGridView.Columns[lnCol++].SortExpression  = "Player";

            acGridView.Columns.Add(CreateBoundField("Player", "Player", false));
            acGridView.Columns[lnCol].HeaderText       = "Player";
            acGridView.Columns[lnCol++].SortExpression = "Player";

            acGridView.Columns.Add(CreateBoundField("SteamID", "SteamID", false));
            acGridView.Columns[lnCol].HeaderText       = "SteamID";
            acGridView.Columns[lnCol++].SortExpression = "SteamID";

            acGridView.Columns.Add(CreateBoundField("Time", "Time", true));
            acGridView.Columns[lnCol].HeaderText       = "Time";
            acGridView.Columns[lnCol++].SortExpression = "Time";

            if (aeType == teSubPageType.eeMapPageCheck)
            {
                acGridView.Columns.Add(CreateBoundField("Checks", "Checks", true, true));
                acGridView.Columns[lnCol].HeaderText        = "Checks";
                acGridView.Columns[lnCol].HeaderStyle.Width = 64;
                acGridView.Columns[lnCol++].SortExpression  = "Checks";

                acGridView.Columns.Add(CreateBoundField("Teles", "Teles", true, true));
                acGridView.Columns[lnCol].HeaderText        = "Teles";
                acGridView.Columns[lnCol].HeaderStyle.Width = 64;
                acGridView.Columns[lnCol++].SortExpression  = "Teles";
            }

            if (aeType != teSubPageType.eeMapPageWr)
            {
                acGridView.Columns.Add(CreateBoundField("Server", "Server", true));
                acGridView.Columns[lnCol].HeaderText        = "Server";
                acGridView.Columns[lnCol].HeaderStyle.Width = 256;
                acGridView.Columns[lnCol].ItemStyle.Width   = 256;
                acGridView.Columns[lnCol++].SortExpression  = "Server";
            }
            else
            {
                acGridView.Columns.Add(CreateBoundField("Date", "Date", true));
                acGridView.Columns[lnCol].HeaderText       = "Date";
                acGridView.Columns[lnCol++].SortExpression = "Date";
            }

            return(acGridView);
        }
        static private tcGridView SetPlayerListPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;
            acGridView.AutoGenerateColumns = false;
            acGridView.PageSize = 30;

            acGridView.Columns.Add(CreateBoundField("Rank", "Rank", true));
            acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
            acGridView.Columns[lnCol].ItemStyle.HorizontalAlign = HorizontalAlign.Center;
            acGridView.Columns[lnCol].SortExpression = "Rank";
            acGridView.Columns[lnCol++].HeaderText = "Rank";

            if (aeType != teSubPageType.eePlayerListCountry)
            {
                acGridView.Columns.Add(CreatePlayerNameField());
                acGridView.Columns[lnCol].SortExpression = "Player";
                acGridView.Columns[lnCol++].HeaderText = "Player";
            }
            else if (aeType == teSubPageType.eePlayerListCountry)
            {
                acGridView.Columns.Add(CreateCountryNameField());
                acGridView.Columns[lnCol].HeaderText = "Country";
                acGridView.Columns[lnCol++].SortExpression = "Country";

                acGridView.Columns.Add(CreateBoundField("Players", "Players", true));
                acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                acGridView.Columns[lnCol].ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                acGridView.Columns[lnCol].SortExpression = "Players";
                acGridView.Columns[lnCol++].HeaderText = "Players";
            }

            if (aeType == teSubPageType.eePlayerListCountry || aeType == teSubPageType.eePlayerListPlayer)
            {
                acGridView.Columns.Add(CreateBoundField("Records", "Records", true, true));
                acGridView.Columns[lnCol].SortExpression = "Records";
                acGridView.Columns[lnCol++].HeaderText = "Nocheck<br/>Records";

                acGridView.Columns.Add(CreateBoundField("RecordsCp", "RecordsCp", true, true));
                acGridView.Columns[lnCol].SortExpression = "RecordsCp";
                acGridView.Columns[lnCol++].HeaderText = "Checkpoint<br/>Records";
            }

            if (aeType == teSubPageType.eePlayerListTagRank)
            {
                acGridView.Columns.Add(CreateBoundField("round_wins", "round_wins", true, true));
                acGridView.Columns[lnCol].SortExpression = "round_wins";
                acGridView.Columns[lnCol++].HeaderText = "Round<br/>Wins";

                acGridView.Columns.Add(CreateBoundField("rounds_played", "rounds_played", true, true));
                acGridView.Columns[lnCol].SortExpression = "rounds_played";
                acGridView.Columns[lnCol++].HeaderText = "Rounds<br/>Played";

                acGridView.Columns.Add(CreateTagRoundWinPercentField());
                acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                acGridView.Columns[lnCol].ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                acGridView.Columns[lnCol].HeaderText = "Win<br/>Rate";
                acGridView.Columns[lnCol++].SortExpression = "round_wins";
                
                acGridView.Columns.Add(CreateBoundField("match_wins", "match_wins", true, true));
                acGridView.Columns[lnCol].SortExpression = "match_wins";
                acGridView.Columns[lnCol++].HeaderText = "Match<br/>Wins";

                acGridView.Columns.Add(CreateBoundField("tags", "tags", true, true));
                acGridView.Columns[lnCol].SortExpression = "tags";
                acGridView.Columns[lnCol++].HeaderText = "Tags";

                acGridView.Columns.Add(CreateBoundField("ninja", "ninja", true, true));
                acGridView.Columns[lnCol].SortExpression = "ninja";
                acGridView.Columns[lnCol++].HeaderText = "Ninja<br/>Tags";

                acGridView.Columns.Add(CreateBoundField("tagged", "tagged", true, true));
                acGridView.Columns[lnCol].SortExpression = "tagged";
                acGridView.Columns[lnCol++].HeaderText = "Tagged";
            }

            if (aeType == teSubPageType.eePlayerListTagStats)
            {
                acGridView.Columns.Add(CreateBoundField("avg_tags_per_round", "avg_tags_per_round", true, true));
                acGridView.Columns[lnCol].SortExpression = "avg_tags_per_round";
                acGridView.Columns[lnCol++].HeaderText = "Avg tags<br/>per round";

                acGridView.Columns.Add(CreateBoundField("avg_tagged_per_round", "avg_tagged_per_round", true, true));
                acGridView.Columns[lnCol].SortExpression = "avg_tagged_per_round";
                acGridView.Columns[lnCol++].HeaderText = "Avg tagged<br/>per round";

                acGridView.Columns.Add(CreateBoundField("avg_powerup_per_round", "avg_powerup_per_round", true, true));
                acGridView.Columns[lnCol].SortExpression = "avg_powerup_per_round";
                acGridView.Columns[lnCol++].HeaderText = "Avg powerups<br/>per round";

                //acGridView.Columns.Add(CreateBoundField("total_untagged_time", "total_untagged_time", true, true));
                //acGridView.Columns[lnCol].SortExpression = "total_untagged_time";
                //acGridView.Columns[lnCol++].HeaderText = "Total<br/>untagged<br/>time";

                acGridView.Columns.Add(CreateBoundField("round_most_untagged", "round_most_untagged", true, true));
                acGridView.Columns[lnCol].SortExpression = "round_most_untagged";
                acGridView.Columns[lnCol++].HeaderText = "Most untagged<br/> time in a round";

                acGridView.Columns.Add(CreateBoundField("round_most_powerup", "round_most_powerup", true, true));
                acGridView.Columns[lnCol].SortExpression = "round_most_powerup";
                acGridView.Columns[lnCol++].HeaderText = "Most<br/>powerups<br/>per round";
            }
                        
            acGridView.AllowSorting = true;
            acGridView.AllowPaging = true;

            return acGridView;
        }
        static private tcGridView SetPlayerPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;
            acGridView.AutoGenerateColumns = false;
            acGridView.AllowSorting = true;
            acGridView.AllowPaging = false;

            acGridView.Columns.Add(CreateHyperLinkField(new string[] { "Map" }, "Map", "~/map.aspx?id={0}"));
            acGridView.Columns[lnCol].HeaderText = "Map";
            acGridView.Columns[lnCol++].SortExpression = "Map";

            acGridView.Columns.Add(CreateHyperLinkField(new string[] { "CourseID" }, "Course", "~/course.aspx?id={0}"));
            acGridView.Columns[lnCol].HeaderText = "Course";
            acGridView.Columns[lnCol++].SortExpression = "Course";

            if (aeType != teSubPageType.eePlayerPageIncomplete)
            {
                acGridView.Columns.Add(CreateBoundField("Time", "Time", true));
                acGridView.Columns[lnCol].HeaderText = "Time";
                acGridView.Columns[lnCol++].SortExpression = "Time";

                if (aeType == teSubPageType.eePlayerPageCp)
                {
                    acGridView.Columns.Add(CreateBoundField("Cp", "Cp", true));
                    acGridView.Columns[lnCol].HeaderText = "Checks";
                    acGridView.Columns[lnCol++].SortExpression = "Cp";

                    acGridView.Columns.Add(CreateBoundField("Teles", "Teles", true));
                    acGridView.Columns[lnCol].HeaderText = "Teles";
                    acGridView.Columns[lnCol++].SortExpression = "Teles";
                }

                if (aeType != teSubPageType.eePlayerPageWr)
                {
                    acGridView.Columns.Add(CreateRankField());
                    acGridView.Columns[lnCol].HeaderText = "Rank";
                    acGridView.Columns[lnCol].HeaderStyle.Width = 64;
                    acGridView.Columns[lnCol].HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                    acGridView.Columns[lnCol].ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                    acGridView.Columns[lnCol++].SortExpression = "rank";

                    acGridView.Columns.Add(CreateBoundField("Server", "Server", true));
                    acGridView.Columns[lnCol].HeaderText = "Server";
                    acGridView.Columns[lnCol].HeaderStyle.Width = 256;
                    acGridView.Columns[lnCol].ItemStyle.Width = 256;
                    acGridView.Columns[lnCol++].SortExpression = "Server";
                }

                if (aeType == teSubPageType.eePlayerPageWr)
                {
                    acGridView.Columns.Add(CreateBoundField("Date", "Date", true));
                    acGridView.Columns[lnCol].HeaderText = "Date";
                    acGridView.Columns[lnCol++].SortExpression = "Date";

                    acGridView.Columns.Add(CreateBoundField("Status", "Status", true));
                    acGridView.Columns[lnCol].HeaderText = "Status";
                    acGridView.Columns[lnCol++].SortExpression = "Status";
                }
            }
            else
            {
                acGridView.AllowPaging = true;
                acGridView.PageSize = 30;
            }

            return acGridView;
        }
        static private tcGridView SetWrPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;
            acGridView.AutoGenerateColumns = false;
            acGridView.AllowSorting = true;
            acGridView.AllowPaging = false;

            if (aeType != teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateBoundField("Rank", "Rank", true,true));
                acGridView.Columns[lnCol].HeaderText = "Current<br/>Rank";
                acGridView.Columns[lnCol++].SortExpression = "Rank";
            }

            if (aeType == teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateHyperLinkField(new string[] { "Map" }, "Map", "~/map.aspx?id={0}"));
                acGridView.Columns[lnCol].HeaderText = "Map";
                acGridView.Columns[lnCol++].SortExpression = "Map";

                acGridView.Columns.Add(CreateHyperLinkField(new string[] { "CourseID" }, "Course", "~/course.aspx?id={0}"));
                acGridView.Columns[lnCol].HeaderText = "Course";
                acGridView.Columns[lnCol++].SortExpression = "Course";
            }

            if (aeType != teSubPageType.eeWrPageCountry)
            {
                acGridView.Columns.Add(CreatePlayerNameField());
                acGridView.Columns[lnCol].SortExpression = "Player";
                acGridView.Columns[lnCol++].HeaderText = "Player";
            }
            else
            {
                acGridView.Columns.Add(CreateCountryNameField());
                acGridView.Columns[lnCol].HeaderText = "Country";
                acGridView.Columns[lnCol++].SortExpression = "Country";
            }

            if (aeType == teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateBoundField("Time", "Time", true));
                acGridView.Columns[lnCol].HeaderText = "Time";
                acGridView.Columns[lnCol++].SortExpression = "Time";

                acGridView.Columns.Add(CreateBoundField("Date", "Date", true));
                acGridView.Columns[lnCol].HeaderText = "Date";
                acGridView.Columns[lnCol++].SortExpression = "Date";
            }

            if (aeType != teSubPageType.eeWrPageAll)
            {
                acGridView.Columns.Add(CreateBoundField("CurrentWR", "CurrentWR", true,true));
                acGridView.Columns[lnCol].HeaderText = "Current<br/>World Records";
                acGridView.Columns[lnCol++].SortExpression = "CurrentWR";

                acGridView.Columns.Add(CreateBoundField("TotalWR", "TotalWR", true,true));
                acGridView.Columns[lnCol].HeaderText = "Lifetime<br/>World Records";
                acGridView.Columns[lnCol++].SortExpression = "TotalWR";

                acGridView.Columns.Add(CreateBoundField("TotalCourses", "TotalCourses", true,true));
                acGridView.Columns[lnCol].HeaderText = "Unique<br/>Courses";
                acGridView.Columns[lnCol++].SortExpression = "TotalCourses";
            }

            return acGridView;
        }
        static private tcGridView SetMapListPageColumns(tcGridView acGridView, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;

            acGridView.Columns.Add(CreateHyperLinkField(new string[] {"Map"}, "Map", "~/map.aspx?id={0}"));
            acGridView.Columns[lnCol].SortExpression = "Map";
            acGridView.Columns[lnCol++].HeaderText = "Map";

            if (aeType == teSubPageType.eeMapsListMaps)
            {
                acGridView.Columns.Add(CreateBoundField("Courses", "Courses", true, true));
                acGridView.Columns[lnCol].SortExpression = "Courses";
                acGridView.Columns[lnCol++].HeaderText = "Courses";

                acGridView.Columns.Add(CreateBoundField("ServerRuns", "ServerRuns", true, true));
                acGridView.Columns[lnCol].SortExpression = "ServerRuns";
                acGridView.Columns[lnCol++].HeaderText = "Server<br/>Runs";
            }
            else if (aeType == teSubPageType.eeMapsListCourses)
            {
                acGridView.Columns.Add(CreateHyperLinkField(new string[] { "CourseID" }, "Course", "~/course.aspx?id={0}"));
                acGridView.Columns[lnCol].HeaderText = "Course";
                acGridView.Columns[lnCol++].SortExpression = "Course";
            }
            else if (aeType == teSubPageType.eeMapsListTag)
            {
                acGridView.Columns.Add(CreateBoundField("ServerRuns", "ServerRuns", true, true));
                acGridView.Columns[lnCol].SortExpression = "ServerRuns";
                acGridView.Columns[lnCol++].HeaderText = "Server Runs";

                acGridView.Columns.Add(CreateBoundField("Added", "Added", true, true));
                acGridView.Columns[lnCol].SortExpression = "Added";
                acGridView.Columns[lnCol++].HeaderText = "Date Added";
            }

            if (aeType != teSubPageType.eeMapsListTag)
            {
                acGridView.Columns.Add(CreateBoundField("CourseCompletions", "CourseCompletions", true, true));
                acGridView.Columns[lnCol].SortExpression = "CourseCompletions";
                acGridView.Columns[lnCol++].HeaderText = "Course<br/>Completions";

                acGridView.Columns.Add(CreateBoundField("NocheckPlayers", "NocheckPlayers", true, true));
                acGridView.Columns[lnCol].SortExpression = "NocheckPlayers";
                acGridView.Columns[lnCol++].HeaderText = "Nocheck<br/>Players";

                acGridView.Columns.Add(CreateBoundField("CpPlayers", "CpPlayers", true, true));
                acGridView.Columns[lnCol].SortExpression = "CpPlayers";
                acGridView.Columns[lnCol++].HeaderText = "Checkpoint<br/>Players";

                acGridView.Columns.Add(CreateBoundField("WR", "WR", true, true));
                acGridView.Columns[lnCol].SortExpression = "WR";
                acGridView.Columns[lnCol++].HeaderText = "World<br/>Records";

                acGridView.Columns.Add(CreateBoundField("Added", "Added", true, true));
                acGridView.Columns[lnCol].SortExpression = "Added";
                acGridView.Columns[lnCol++].HeaderText = "Date<br/>Added";
            }

            acGridView.AllowSorting = true;
            acGridView.AllowPaging = false;

            return acGridView;
        }
        static private tcGridView SetMapPageColumns(tcGridView acGridView, bool aePaging, teSubPageType aeType)
        {
            int lnCol = 0;

            acGridView.AutoGenerateColumns = false;
            acGridView.PageSize = 30;

            acGridView.AllowSorting = true;
            acGridView.AllowPaging = aePaging;

            acGridView.Columns.Add(CreateBoundField("Rank", "Rank", true,true,false,50));
            acGridView.Columns[lnCol].HeaderText = "Rank";
            acGridView.Columns[lnCol++].SortExpression = "Rank";

            acGridView.Columns.Add(CreatePlayerNameField());
            acGridView.Columns[lnCol].HeaderText = "Player";
            acGridView.Columns[lnCol].HeaderStyle.Width = 256;
            acGridView.Columns[lnCol].ItemStyle.Width = 256;
            acGridView.Columns[lnCol++].SortExpression = "Player";

            acGridView.Columns.Add(CreateBoundField("Player", "Player", false));
            acGridView.Columns[lnCol].HeaderText = "Player";
            acGridView.Columns[lnCol++].SortExpression = "Player";

            acGridView.Columns.Add(CreateBoundField("SteamID", "SteamID", false));
            acGridView.Columns[lnCol].HeaderText = "SteamID";
            acGridView.Columns[lnCol++].SortExpression = "SteamID";

            acGridView.Columns.Add(CreateBoundField("Time", "Time", true));
            acGridView.Columns[lnCol].HeaderText = "Time";
            acGridView.Columns[lnCol++].SortExpression = "Time";

            if (aeType == teSubPageType.eeMapPageCheck)
            {
                acGridView.Columns.Add(CreateBoundField("Checks", "Checks", true,true));
                acGridView.Columns[lnCol].HeaderText = "Checks";
                acGridView.Columns[lnCol].HeaderStyle.Width = 64;
                acGridView.Columns[lnCol++].SortExpression = "Checks";

                acGridView.Columns.Add(CreateBoundField("Teles", "Teles", true,true));
                acGridView.Columns[lnCol].HeaderText = "Teles";
                acGridView.Columns[lnCol].HeaderStyle.Width = 64;
                acGridView.Columns[lnCol++].SortExpression = "Teles";
            }

            if (aeType != teSubPageType.eeMapPageWr)
            {
                acGridView.Columns.Add(CreateBoundField("Server", "Server", true));
                acGridView.Columns[lnCol].HeaderText = "Server";
                acGridView.Columns[lnCol].HeaderStyle.Width = 256;
                acGridView.Columns[lnCol].ItemStyle.Width = 256;
                acGridView.Columns[lnCol++].SortExpression = "Server";
            }
            else
            {
                acGridView.Columns.Add(CreateBoundField("Date", "Date", true));
                acGridView.Columns[lnCol].HeaderText = "Date";
                acGridView.Columns[lnCol++].SortExpression = "Date";
            }
            
            return acGridView;
        }