protected override void OnTarget(Mobile from, object targeted)
            {
                PlayerMobile pm = targeted as PlayerMobile;

                if (pm == null)
                {
                    from.SendMessage("Speech logs aren't supported on that target.");
                }
                else if (from != targeted && from.AccessLevel <= pm.AccessLevel && from.AccessLevel != AccessLevel.Owner)
                {
                    from.SendMessage("You don't have the required access level to view {0} speech log.", pm.Female ? "her" : "his");
                }
                else if (pm.SpeechLog == null)
                {
                    from.SendMessage("{0} has no speech log.", pm.Female ? "She" : "He");
                }
                else
                {
                    CommandLogging.WriteLine(from, "{0} {1} viewing speech log of {2}", from.AccessLevel, CommandLogging.Format(from), CommandLogging.Format(targeted));

                    Gump gump = new SpeechLogGump(pm, pm.SpeechLog);
                    from.SendGump(gump);
                }
            }
        public override void OnResponse(NetState state, RelayInfo info)
        {
            if (info.ButtonID != 0 && PageQueue.List.IndexOf(m_Entry) < 0)
            {
                state.Mobile.SendGump(new PageQueueGump());
                state.Mobile.SendMessage("That page has been removed.");
                return;
            }

            switch (info.ButtonID)
            {
            case 0:     // close
            {
                if (m_Entry.Handler != state.Mobile)
                {
                    PageQueueGump g = new PageQueueGump();

                    g.SendTo(state);
                }

                break;
            }

            case 1:     // go to sender
            {
                Mobile m = state.Mobile;

                if (m_Entry.Sender.Deleted)
                {
                    m.SendMessage("That character no longer exists.");
                }
                else if (m_Entry.Sender.Map == null || m_Entry.Sender.Map == Map.Internal)
                {
                    m.SendMessage("That character is not in the world.");
                }
                else
                {
                    m_Entry.AddResponse(state.Mobile, "[Go Sender]");
                    m.MoveToWorld(m_Entry.Sender.Location, m_Entry.Sender.Map);

                    m.SendMessage("You have been teleported to that page's sender.");

                    Resend(state);
                }

                break;
            }

            case 2:     // go to handler
            {
                Mobile m = state.Mobile;
                Mobile h = m_Entry.Handler;

                if (h != null)
                {
                    if (h.Deleted)
                    {
                        m.SendMessage("That character no longer exists.");
                    }
                    else if (h.Map == null || h.Map == Map.Internal)
                    {
                        m.SendMessage("That character is not in the world.");
                    }
                    else
                    {
                        m_Entry.AddResponse(state.Mobile, "[Go Handler]");
                        m.MoveToWorld(h.Location, h.Map);

                        m.SendMessage("You have been teleported to that page's handler.");
                        Resend(state);
                    }
                }
                else
                {
                    m.SendMessage("Nobody is handling that page.");
                    Resend(state);
                }

                break;
            }

            case 3:     // go to page location
            {
                Mobile m = state.Mobile;

                if (m_Entry.PageMap == null || m_Entry.PageMap == Map.Internal)
                {
                    m.SendMessage("That location is not in the world.");
                }
                else
                {
                    m_Entry.AddResponse(state.Mobile, "[Go PageLoc]");
                    m.MoveToWorld(m_Entry.PageLocation, m_Entry.PageMap);

                    state.Mobile.SendMessage("You have been teleported to the original page location.");

                    Resend(state);
                }

                break;
            }

            case 4:     // handle page
            {
                if (m_Entry.Handler == null)
                {
                    m_Entry.AddResponse(state.Mobile, "[Handling]");
                    m_Entry.Handler = state.Mobile;

                    state.Mobile.SendMessage("You are now handling the page.");
                }
                else
                {
                    state.Mobile.SendMessage("Someone is already handling that page.");
                }

                Resend(state);

                break;
            }

            case 5:     // delete page
            {
                if (m_Entry.Handler == null)
                {
                    m_Entry.AddResponse(state.Mobile, "[Deleting]");
                    PageQueue.Remove(m_Entry);

                    state.Mobile.SendMessage("You delete the page.");

                    PageQueueGump g = new PageQueueGump();

                    g.SendTo(state);
                }
                else
                {
                    state.Mobile.SendMessage("Someone is handling that page, it can not be deleted.");

                    Resend(state);
                }

                break;
            }

            case 6:     // abandon page
            {
                if (m_Entry.Handler == state.Mobile)
                {
                    m_Entry.AddResponse(state.Mobile, "[Abandoning]");
                    state.Mobile.SendMessage("You abandon the page.");

                    m_Entry.Handler = null;
                }
                else
                {
                    state.Mobile.SendMessage("You are not handling that page.");
                }

                Resend(state);

                break;
            }

            case 7:     // page handled
            {
                if (m_Entry.Handler == state.Mobile)
                {
                    m_Entry.AddResponse(state.Mobile, "[Handled]");
                    PageQueue.Remove(m_Entry);

                    m_Entry.Handler = null;

                    state.Mobile.SendMessage("You mark the page as handled, and remove it from the queue.");

                    PageQueueGump g = new PageQueueGump();

                    g.SendTo(state);
                }
                else
                {
                    state.Mobile.SendMessage("You are not handling that page.");

                    Resend(state);
                }

                break;
            }

            case 8:     // Send message
            {
                TextRelay text = info.GetTextEntry(0);

                if (text != null)
                {
                    m_Entry.AddResponse(state.Mobile, "[Response] " + text.Text);
                    m_Entry.Sender.SendGump(new MessageSentGump(m_Entry.Sender, state.Mobile.Name, text.Text));
                    //m_Entry.Sender.SendMessage( 0x482, "{0} tells you:", state.Mobile.Name );
                    //m_Entry.Sender.SendMessage( 0x482, text.Text );
                }

                Resend(state);

                break;
            }

            case 9:     // predef overview
            {
                Resend(state);
                state.Mobile.SendGump(new PredefGump(state.Mobile, null));

                break;
            }

            case 10:     // View Speech Log
            {
                Resend(state);

                if (m_Entry.SpeechLog != null)
                {
                    Gump gump = new SpeechLogGump(m_Entry.Sender, m_Entry.SpeechLog);
                    state.Mobile.SendGump(gump);
                }

                break;
            }

            default:
            {
                int       index   = info.ButtonID - 100;
                ArrayList preresp = PredefinedResponse.List;

                if (index >= 0 && index < preresp.Count)
                {
                    m_Entry.AddResponse(state.Mobile, "[PreDef] " + ((PredefinedResponse)preresp[index]).Title);
                    m_Entry.Sender.SendGump(new MessageSentGump(m_Entry.Sender, state.Mobile.Name, ((PredefinedResponse)preresp[index]).Message));
                }

                Resend(state);

                break;
            }
            }
        }