public HouseGump(Mobile from, BaseHouse house)
            : base(20, 30)
        {
            if (house.Deleted)
            {
                return;
            }

            m_House = house;

            from.CloseGump(typeof(HouseGump));
            from.CloseGump(typeof(HouseListGump));
            from.CloseGump(typeof(HouseRemoveGump));

            bool isOwner   = m_House.IsOwner(from);
            bool isCoOwner = isOwner || m_House.IsCoOwner(from);
            bool isFriend  = isCoOwner || m_House.IsFriend(from);

            AddPage(0);

            if (isFriend)
            {
                AddBackground(0, 0, 420, 430, 5054);
                AddBackground(10, 10, 400, 410, 3000);
            }

            AddImage(130, 0, 100);

            if (m_House.Sign != null)
            {
                ArrayList lines = Wrap(m_House.Sign.Name);

                if (lines != null)
                {
                    for (int i = 0, y = (101 - (lines.Count * 14)) / 2; i < lines.Count; ++i, y += 14)
                    {
                        string s = (string)lines[i];

                        AddLabel(130 + ((143 - (s.Length * 8)) / 2), y, 0, s);
                    }
                }
            }

            if (!isFriend)
            {
                return;
            }

            AddHtmlLocalized(55, 103, 75, 20, 1011233, false, false);             // INFO
            AddButton(20, 103, 4005, 4007, 0, GumpButtonType.Page, 1);

            AddHtmlLocalized(170, 103, 75, 20, 1011234, false, false);             // FRIENDS
            AddButton(135, 103, 4005, 4007, 0, GumpButtonType.Page, 2);

            AddHtmlLocalized(295, 103, 75, 20, 1011235, false, false);             // OPTIONS
            AddButton(260, 103, 4005, 4007, 0, GumpButtonType.Page, 3);

            AddHtmlLocalized(295, 390, 75, 20, 1011441, false, false);              // EXIT
            AddButton(260, 390, 4005, 4007, 0, GumpButtonType.Reply, 0);

            AddHtmlLocalized(55, 390, 200, 20, 1011236, false, false);             // Change this house's name!
            AddButton(20, 390, 4005, 4007, 1, GumpButtonType.Reply, 0);

            // Info page
            AddPage(1);

            //const int fieldStartC = 260;	// Center
            const int fieldStartN = 120;                               // Near
            const int fieldStartF = 320;                               // Far

            AddHtmlLocalized(20, 135, 100, 20, 1011242, false, false); // Owned by:
            AddHtml(fieldStartN, 135, 100, 20, GetOwnerName(), false, false);

            // Angel Island House decay display - owner only.
            if (from.Account == m_House.Owner.Account || from.AccessLevel >= AccessLevel.GameMaster)
            {
                if (m_House.TownshipRestrictedRefresh)
                {                       // replace the entire "Decay Time" line
                    AddLabel(20, 155, 0x20, @"** NON TOWNSHIP HOUSE - WILL NOT REFRESH! **");
                }
                else
                {
                    AddHtml(20, 155, 100, 20, "Decay Time:", false, false);                     //time until decay
                    TimeSpan decay = m_House.StructureDecayTime - DateTime.Now;
                    int      days  = decay.Days;
                    double   hours = decay.Hours;
                    hours += ((double)decay.Minutes) / 60;
                    string decaystring = string.Format("{0} days, {1:0.0} hours", days, hours);
                    AddHtml(fieldStartN, 155, 300, 20, decaystring, false, false);
                }
            }

            int vstep = 175 - 20;

            AddHtml(20, vstep += 20, 275, 20, "Number of locked down items:", false, false);             // Number of locked down items:
            AddHtml(fieldStartF, vstep, 64, 20, String.Format("{0}/{1}", m_House.LockDownCount.ToString(), m_House.MaxLockDowns.ToString()), false, false);

            //AddHtmlLocalized(20, vstep += 20, 275, 20, 1011238, false, false); // Maximum locked down items:
            //AddHtml(320, vstep, 50, 20, m_House.MaxLockDowns.ToString(), false, false);

            AddHtml(20, vstep += 20, 275, 20, "Number of secure containers:", false, false);             // Number of secure containers:
            AddHtml(fieldStartF, vstep, 64, 20, String.Format("{0}/{1}", m_House.SecureCount.ToString(), m_House.MaxSecures.ToString()), false, false);

            //AddHtmlLocalized(20, vstep += 20, 275, 20, 1011240, false, false); // Maximum number of secure containers:
            //AddHtml(320, vstep, 50, 20, m_House.MaxSecures.ToString(), false, false);

            //if ( true /*!m_House.Public*/ )	// Public houses don't get LockBoxes.
            /*{*/
            AddHtml(20, vstep += 20, 275, 20, "Number of lockboxes:", false, false);
            AddHtml(fieldStartF, vstep, 64, 20, String.Format("{0}/{1}", m_House.LockBoxCount.ToString(), m_House.MaxLockBoxes.ToString()), false, false);

            //AddHtml(20, vstep += 20, 275, 20, "Maximum Number of LockBoxes:", false, false);
            //AddHtml(320, vstep, 50, 20, m_House.MaxLockBoxes.ToString(), false, false);

            AddHtml(20, vstep += 20, 275, 20, "Storage tax credits:", false, false);
            AddHtml(fieldStartF, vstep, 50, 20, m_House.StorageTaxCredits.ToString(), false, false);

            //AddHtmlLocalized( 20, 320, 400, 20, 1018032, false, false ); // This house is properly placed.
            //AddHtmlLocalized( 20, 340, 400, 20, 1018035, false, false ); // This house is of modern design.

            if (m_House.Public == true)
            {
                AddHtmlLocalized(20, vstep += 20, 275, 20, 1011241, false, false);                 // Number of visits this building has had
                AddHtml(fieldStartF, vstep, 50, 20, m_House.Visits.ToString(), false, false);
            }

            AddHtml(20, vstep += 20, 275, 20, "Barkeepers allowed:", false, false);
            AddHtml(fieldStartF, vstep, 50, 20, m_House.MaximumBarkeepCount.ToString(), false, false);

            if (m_House is Server.Multis.StaticHousing.StaticHouse)
            {
                Server.Multis.StaticHousing.StaticHouse sh = m_House as Server.Multis.StaticHousing.StaticHouse;
                //AddHtml(20, vstep += 20, 275, 20, "------------------", false, false);
                AddHtml(20, vstep += 20, 275, 20, "House designed by:", false, false);
                AddHtml(fieldStartF, vstep, 275, 20, sh.OriginalOwnerName, false, false);
                AddHtml(20, vstep += 20, 275, 20, "Designer license:", false, false);
                AddHtml(fieldStartF, vstep, 275, 20, "DL" + ((int)sh.OriginalOwnerSerial).ToString(), false, false);
                AddHtml(20, vstep += 20, 275, 20, "Version:", false, false);
                AddHtml(fieldStartF, vstep, 275, 20, sh.BlueprintVersion.ToString(), false, false);
                AddHtml(20, vstep += 20, 275, 20, "Last revision:", false, false);
                AddHtml(fieldStartF, vstep, 275, 20, sh.RevisionDate.ToShortDateString(), false, false);
            }

            /*}
             * else
             * {
             *      AddHtmlLocalized( 20, 260, 400, 20, 1018032, false, false ); // This house is properly placed.
             *      AddHtmlLocalized( 20, 280, 400, 20, 1018035, false, false ); // This house is of modern design.
             *
             *      // TODO: Validate exact placement
             *      AddHtmlLocalized( 20, 305, 275, 20, 1011241, false, false ); // Number of visits this building has had
             *      AddHtml( 320, 305, 50, 20, m_House.Visits.ToString(), false, false );
             * }*/

            // Friends page
            AddPage(2);

            AddHtmlLocalized(45, 130, 150, 20, 1011266, false, false);             // List of co-owners
            AddButton(20, 130, 2714, 2715, 2, GumpButtonType.Reply, 0);

            AddHtmlLocalized(45, 150, 150, 20, 1011267, false, false);             // Add a co-owner
            AddButton(20, 150, 2714, 2715, 3, GumpButtonType.Reply, 0);

            AddHtmlLocalized(45, 170, 150, 20, 1018036, false, false);             // Remove a co-owner
            AddButton(20, 170, 2714, 2715, 4, GumpButtonType.Reply, 0);

            AddHtmlLocalized(45, 190, 150, 20, 1011268, false, false);             // Clear co-owner list
            AddButton(20, 190, 2714, 2715, 5, GumpButtonType.Reply, 0);

            AddHtmlLocalized(225, 130, 155, 20, 1011243, false, false);             // List of Friends
            AddButton(200, 130, 2714, 2715, 6, GumpButtonType.Reply, 0);

            AddHtmlLocalized(225, 150, 155, 20, 1011244, false, false);             // Add a Friend
            AddButton(200, 150, 2714, 2715, 7, GumpButtonType.Reply, 0);

            AddHtmlLocalized(225, 170, 155, 20, 1018037, false, false);             // Remove a Friend
            AddButton(200, 170, 2714, 2715, 8, GumpButtonType.Reply, 0);

            AddHtmlLocalized(225, 190, 155, 20, 1011245, false, false);             // Clear Friends list
            AddButton(200, 190, 2714, 2715, 9, GumpButtonType.Reply, 0);

            AddHtmlLocalized(120, 215, 280, 20, 1011258, false, false);             // Ban someone from the house
            AddButton(95, 215, 2714, 2715, 10, GumpButtonType.Reply, 0);

            AddHtmlLocalized(120, 235, 280, 20, 1011259, false, false);             // Eject someone from the house
            AddButton(95, 235, 2714, 2715, 11, GumpButtonType.Reply, 0);

            AddHtmlLocalized(120, 255, 280, 20, 1011260, false, false);             // View a list of banned people
            AddButton(95, 255, 2714, 2715, 12, GumpButtonType.Reply, 0);

            AddHtmlLocalized(120, 275, 280, 20, 1011261, false, false);             // Lift a ban
            AddButton(95, 275, 2714, 2715, 13, GumpButtonType.Reply, 0);

            // Options page
            AddPage(3);

            if (m_House.GetFlag(BaseHouse.ImplFlags.ManagedDemolishion) == true)
            {
                DateTime ok_demo = m_House.BuiltOn + TimeSpan.FromDays(7.0);
                string   sx;
                sx = string.Format("You cannot transfer this house until: {0} ", ok_demo.ToShortDateString());
                AddHtml(45, 150, 355, 30, sx, false, false);                 // Transfer ownership of the house
                sx = string.Format("You cannot demolish this house until: {0}", ok_demo.ToShortDateString());
                AddHtml(45, 180, 355, 30, sx, false, false);                 // Demolish house and get deed back
            }
            else
            {
                AddHtmlLocalized(45, 150, 355, 30, 1011248, false, false);                 // Transfer ownership of the house
                AddButton(20, 150, 2714, 2715, 14, GumpButtonType.Reply, 0);

                AddHtmlLocalized(45, 180, 355, 30, 1011249, false, false);                 // Demolish house and get deed back
                AddButton(20, 180, 2714, 2715, 15, GumpButtonType.Reply, 0);
            }

            AddHtmlLocalized(45, 210, 355, 30, 1011247, false, false);             // Change the house locks
            AddButton(20, 210, 2714, 2715, 16, GumpButtonType.Reply, 0);

            if (!m_House.Public)
            {
                //AddHtmlLocalized( 45, 210, 355, 30, 1011247, false, false ); // Change the house locks
                //AddButton( 20, 210, 2714, 2715, 16, GumpButtonType.Reply, 0 );

                //AddHtmlLocalized( 45, 240, 350, 90, 1011253, false, false ); // Declare this building to be public. This will make your front door unlockable.
                AddHtml(45, 240, 350, 90, "Declare this building to be public.", false, false);                 // Declare this building to be public.
                AddButton(20, 240, 2714, 2715, 17, GumpButtonType.Reply, 0);
            }
            else
            {
                //AddHtmlLocalized( 45, 280, 350, 30, 1011250, false, false ); // Change the sign type
                AddHtmlLocalized(45, 210 + 30, 350, 30, 1011250, false, false);                 // Change the sign type
                AddButton(20, 210 + 30, 2714, 2715, 0, GumpButtonType.Page, 4);

                AddHtmlLocalized(45, 240 + 30, 350, 30, 1011252, false, false);                 // Declare this building to be private.
                AddButton(20, 240 + 30, 2714, 2715, 17, GumpButtonType.Reply, 0);

                // Change the sign type
                AddPage(4);

                for (int i = 0; i < 24; ++i)
                {
                    AddRadio(53 + ((i / 4) * 50), 137 + ((i % 4) * 35), 210, 211, false, i + 1);
                    AddItem(60 + ((i / 4) * 50), 130 + ((i % 4) * 35), 2980 + (i * 2));
                }

                AddHtmlLocalized(200, 305, 129, 20, 1011254, false, false);                 // Guild sign choices
                AddButton(350, 305, 252, 253, 0, GumpButtonType.Page, 5);

                AddHtmlLocalized(200, 340, 355, 30, 1011277, false, false);                 // Okay that is fine.
                AddButton(350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0);

                AddPage(5);

                for (int i = 0; i < 29; ++i)
                {
                    AddRadio(53 + ((i / 5) * 50), 137 + ((i % 5) * 35), 210, 211, false, i + 25);
                    AddItem(60 + ((i / 5) * 50), 130 + ((i % 5) * 35), 3028 + (i * 2));
                }

                AddHtmlLocalized(200, 305, 129, 20, 1011255, false, false);                 // Shop sign choices
                AddButton(350, 305, 250, 251, 0, GumpButtonType.Page, 4);

                AddHtmlLocalized(200, 340, 355, 30, 1011277, false, false);                 // Okay that is fine.
                AddButton(350, 340, 4005, 4007, 18, GumpButtonType.Reply, 0);
            }
        }