public static void Save()
        {
            if (m_List == null)
            {
                m_List = Load();
            }

            try
            {
                string path = Path.Combine(Core.BaseDirectory, "Data/pageresponse.cfg");

                using (StreamWriter op = new StreamWriter(path))
                {
                    for (int i = 0; i < m_List.Count; ++i)
                    {
                        PredefinedResponse resp = (PredefinedResponse)m_List[i];

                        op.WriteLine("{0}\t{1}", resp.Title, resp.Message);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
        public static PredefinedResponse Add(string title, string message)
        {
            if (m_List == null)
            {
                m_List = Load();
            }

            PredefinedResponse resp = new PredefinedResponse(title, message);

            m_List.Add(resp);
            Save();

            return(resp);
        }
        public override void OnResponse(NetState sender, RelayInfo info)
        {
            if (m_From.AccessLevel < AccessLevel.Administrator)
            {
                return;
            }

            if (m_Response == null)
            {
                int index = info.ButtonID - 1;

                if (index == 0)
                {
                    PredefinedResponse resp = new PredefinedResponse("", "");

                    ArrayList list = PredefinedResponse.List;
                    list.Add(resp);

                    m_From.SendGump(new PredefGump(m_From, resp));
                }
                else
                {
                    --index;

                    int type = index % 3;
                    index /= 3;

                    ArrayList list = PredefinedResponse.List;

                    if (index >= 0 && index < list.Count)
                    {
                        PredefinedResponse resp = (PredefinedResponse)list[index];

                        switch (type)
                        {
                        case 0:     // edit
                        {
                            m_From.SendGump(new PredefGump(m_From, resp));
                            break;
                        }

                        case 1:     // move up
                        {
                            if (index > 0)
                            {
                                list.RemoveAt(index);
                                list.Insert(index - 1, resp);

                                PredefinedResponse.Save();
                                m_From.SendGump(new PredefGump(m_From, null));
                            }

                            break;
                        }

                        case 2:     // move down
                        {
                            if (index < (list.Count - 1))
                            {
                                list.RemoveAt(index);
                                list.Insert(index + 1, resp);

                                PredefinedResponse.Save();
                                m_From.SendGump(new PredefGump(m_From, null));
                            }

                            break;
                        }
                        }
                    }
                }
            }
            else
            {
                ArrayList list = PredefinedResponse.List;

                switch (info.ButtonID)
                {
                case 1:
                {
                    list.Remove(m_Response);

                    PredefinedResponse.Save();
                    m_From.SendGump(new PredefGump(m_From, null));
                    break;
                }

                case 2:
                {
                    TextRelay te = info.GetTextEntry(0);

                    if (te != null)
                    {
                        m_Response.Title = te.Text;
                    }

                    PredefinedResponse.Save();
                    m_From.SendGump(new PredefGump(m_From, m_Response));

                    break;
                }

                case 3:
                {
                    TextRelay te = info.GetTextEntry(1);

                    if (te != null)
                    {
                        m_Response.Message = te.Text;
                    }

                    PredefinedResponse.Save();
                    m_From.SendGump(new PredefGump(m_From, m_Response));

                    break;
                }
                }
            }
        }
        public PredefGump(Mobile from, PredefinedResponse response) : base(30, 30)
        {
            m_From     = from;
            m_Response = response;

            from.CloseGump(typeof(PredefGump));

            bool canEdit = (from.AccessLevel >= AccessLevel.GameMaster);

            AddPage(0);

            if (response == null)
            {
                AddImageTiled(0, 0, 410, 448, 0xA40);
                AddAlphaRegion(1, 1, 408, 446);

                AddHtml(10, 10, 390, 20, Color(Center("Predefined Responses"), LabelColor32), false, false);

                ArrayList list = PredefinedResponse.List;

                AddPage(1);

                int i;

                for (i = 0; i < list.Count; ++i)
                {
                    if (i >= 5 && (i % 5) == 0)
                    {
                        AddButton(368, 10, 0xFA5, 0xFA7, 0, GumpButtonType.Page, (i / 5) + 1);
                        AddLabel(298, 10, 2100, "Next Page");
                        AddPage((i / 5) + 1);
                        AddButton(12, 10, 0xFAE, 0xFB0, 0, GumpButtonType.Page, i / 5);
                        AddLabel(48, 10, 2100, "Previous Page");
                    }

                    PredefinedResponse resp = (PredefinedResponse)list[i];

                    string html = String.Format("<u>{0}</u><br>{1}", resp.Title, resp.Message);

                    AddHtml(12, 44 + ((i % 5) * 80), 350, 70, html, true, true);

                    if (canEdit)
                    {
                        AddButton(370, 44 + ((i % 5) * 80) + 24, 0xFA5, 0xFA7, 2 + (i * 3), GumpButtonType.Reply, 0);

                        if (i > 0)
                        {
                            AddButton(377, 44 + ((i % 5) * 80) + 2, 0x15E0, 0x15E4, 3 + (i * 3), GumpButtonType.Reply, 0);
                        }
                        else
                        {
                            AddImage(377, 44 + ((i % 5) * 80) + 2, 0x25E4);
                        }

                        if (i < (list.Count - 1))
                        {
                            AddButton(377, 44 + ((i % 5) * 80) + 70 - 2 - 16, 0x15E2, 0x15E6, 4 + (i * 3), GumpButtonType.Reply, 0);
                        }
                        else
                        {
                            AddImage(377, 44 + ((i % 5) * 80) + 70 - 2 - 16, 0x25E8);
                        }
                    }
                }

                if (canEdit)
                {
                    if (i >= 5 && (i % 5) == 0)
                    {
                        AddButton(368, 10, 0xFA5, 0xFA7, 0, GumpButtonType.Page, (i / 5) + 1);
                        AddLabel(298, 10, 2100, "Next Page");
                        AddPage((i / 5) + 1);
                        AddButton(12, 10, 0xFAE, 0xFB0, 0, GumpButtonType.Page, i / 5);
                        AddLabel(48, 10, 2100, "Previous Page");
                    }

                    AddButton(12, 44 + ((i % 5) * 80), 0xFAB, 0xFAD, 1, GumpButtonType.Reply, 0);
                    AddHtml(45, 44 + ((i % 5) * 80), 200, 20, Color("New Response", LabelColor32), false, false);
                }
            }
            else if (canEdit)
            {
                AddImageTiled(0, 0, 410, 250, 0xA40);
                AddAlphaRegion(1, 1, 408, 248);

                AddHtml(10, 10, 390, 20, Color(Center("Predefined Response Editor"), LabelColor32), false, false);

                AddButton(10, 40, 0xFB1, 0xFB3, 1, GumpButtonType.Reply, 0);
                AddHtml(45, 40, 200, 20, Color("Remove", LabelColor32), false, false);

                AddButton(10, 70, 0xFA5, 0xFA7, 2, GumpButtonType.Reply, 0);
                AddHtml(45, 70, 200, 20, Color("Title:", LabelColor32), false, false);
                AddTextInput(10, 90, 300, 20, 0, response.Title);

                AddButton(10, 120, 0xFA5, 0xFA7, 3, GumpButtonType.Reply, 0);
                AddHtml(45, 120, 200, 20, Color("Message:", LabelColor32), false, false);
                AddTextInput(10, 140, 390, 100, 1, response.Message);
            }
        }