protected override void BuildGump()
        {
            int width = 200;
            int y     = 10;

            if (c_Topic != "")
            {
                width = 300;
            }

            AddHtml(0, y, width, "<CENTER>Help Contents Search");
            AddImage(width / 2 - 100, y + 2, 0x39);
            AddImage(width / 2 + 70, y + 2, 0x3B);

            AddTextField(width / 2 - 70, y += 25, 140, 21, 0x480, 0xBBC, "Search", c_Search);
            AddButton(width / 2 - 90, y + 3, 0x2716, "Search", new GumpCallback(Search));
            AddButton(width / 2 + 80, y + 3, 0x2716, "Search", new GumpCallback(Search));

            if (c_Topic != "")
            {
                AddHtml(0, y += 35, width, "<CENTER>" + c_Topic);

                AddHtml(20, y += 25, width - 20, 100, General.GetHelp(c_Topic), false, true);
                AddBackgroundZero(0, 0, width, y += 120, 0x1400);
                return;
            }

            if (c_Search == "")
            {
                AddHtml(20, y += 35, width - 40, 90, "<CENTER>" + General.Local(262), false, false);
                AddBackgroundZero(0, 0, width, y + 110, 0x1400);
                return;
            }

            ArrayList list = new ArrayList();

            foreach (string str in General.Help.Keys)
            {
                if (str.ToLower().IndexOf(c_Search.ToLower()) != -1)
                {
                    list.Add(str);
                }
                else if (General.GetHelp(str).ToLower().IndexOf(c_Search.ToLower()) != -1)
                {
                    list.Add(str);
                }
            }

            if (list.Count == 0)
            {
                AddHtml(0, y += 35, width, "<CENTER>" + General.Local(263));
                AddBackgroundZero(0, 0, width, y + 40, 0x1400);
                return;
            }

            AddHtml(0, y += 25, width, "<CENTER>" + list.Count + (list.Count == 0 ? General.Local(265) : General.Local(264)));

            list.Sort(new InternalSort());

            int perpage = 10;

            if (list.Count < c_Page * perpage)
            {
                c_Page = 0;
            }

            if (c_Page != 0)
            {
                AddButton(width / 2 - 20, y - 3, 0x25E4, 0x25E5, "Page Down", new GumpCallback(PageDown));
            }
            if (perpage * (c_Page + 1) < list.Count)
            {
                AddButton(width / 2, y - 3, 0x25E8, 0x25E9, "Page Up", new GumpCallback(PageUp));
            }

            y += 5;

            for (int i = c_Page * perpage; i < (c_Page + 1) * perpage && i < list.Count; ++i)
            {
                AddHtml(30, y += 20, width - 30, list[i].ToString());
                AddButton(10, y + 3, 0x2716, "Select", new GumpStateCallback(Select), list[i]);
            }

            AddBackgroundZero(0, 0, width, y + 40, 0x1400);
        }