From 4d8c2d28330d1ce66142d48eea937b625c34c75d Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Wed, 19 Jun 2024 18:30:37 -0400
Subject: [PATCH] Replace directory search with firestorm search to ease
 maintainability

---
 indra/newview/CMakeLists.txt                  |   22 +-
 .../newview/app_settings/settings_alchemy.xml |   22 +
 indra/newview/fsfloatersearch.cpp             | 3144 +++++++++++++++++
 indra/newview/fsfloatersearch.h               |  416 +++
 indra/newview/lleventnotifier.cpp             |   62 +-
 indra/newview/lleventnotifier.h               |   11 +-
 indra/newview/llfloaterdirectory.cpp          | 1219 -------
 indra/newview/llfloaterdirectory.h            |  134 -
 indra/newview/llpanelclassified.cpp           |    4 +-
 indra/newview/llpanelclassified.h             |    2 +
 indra/newview/llpaneleventinfo.cpp            |  158 -
 indra/newview/llpaneleventinfo.h              |   59 -
 indra/newview/llpanelsearchbase.cpp           |   44 -
 indra/newview/llpanelsearchbase.h             |   55 -
 indra/newview/llpanelsearchclassifieds.cpp    |  110 -
 indra/newview/llpanelsearchclassifieds.h      |   53 -
 indra/newview/llpanelsearchevents.cpp         |  135 -
 indra/newview/llpanelsearchevents.h           |   56 -
 indra/newview/llpanelsearchgroups.cpp         |   99 -
 indra/newview/llpanelsearchgroups.h           |   51 -
 indra/newview/llpanelsearchlandsales.cpp      |  118 -
 indra/newview/llpanelsearchlandsales.h        |   47 -
 indra/newview/llpanelsearchpeople.cpp         |   87 -
 indra/newview/llpanelsearchpeople.h           |   51 -
 indra/newview/llpanelsearchplaces.cpp         |  113 -
 indra/newview/llpanelsearchplaces.h           |   53 -
 indra/newview/llpanelsearchweb.cpp            |  281 --
 indra/newview/llpanelsearchweb.h              |   70 -
 indra/newview/llsearchcombobox.h              |   10 +-
 indra/newview/llstartup.cpp                   |   15 +-
 indra/newview/llviewerfloaterreg.cpp          |    4 +-
 indra/newview/llviewerinput.cpp               |    3 +-
 .../skins/default/textures/icon_group.png     |  Bin 0 -> 523 bytes
 .../skins/default/textures/icon_group.tga     |  Bin 1068 -> 0 bytes
 .../default/textures/icon_legacy_event.tga    |  Bin 0 -> 1068 bytes
 .../textures/icon_legacy_event_adult.tga      |  Bin 0 -> 648 bytes
 .../textures/icon_legacy_event_mature.tga     |  Bin 0 -> 1068 bytes
 .../textures/icons/ProgressLarge_1.png        |  Bin 0 -> 6163 bytes
 .../textures/icons/ProgressLarge_10.png       |  Bin 0 -> 6310 bytes
 .../textures/icons/ProgressLarge_11.png       |  Bin 0 -> 6169 bytes
 .../textures/icons/ProgressLarge_12.png       |  Bin 0 -> 6197 bytes
 .../textures/icons/ProgressLarge_2.png        |  Bin 0 -> 6227 bytes
 .../textures/icons/ProgressLarge_3.png        |  Bin 0 -> 6090 bytes
 .../textures/icons/ProgressLarge_4.png        |  Bin 0 -> 6295 bytes
 .../textures/icons/ProgressLarge_5.png        |  Bin 0 -> 6158 bytes
 .../textures/icons/ProgressLarge_6.png        |  Bin 0 -> 6220 bytes
 .../textures/icons/ProgressLarge_7.png        |  Bin 0 -> 6100 bytes
 .../textures/icons/ProgressLarge_8.png        |  Bin 0 -> 6223 bytes
 .../textures/icons/ProgressLarge_9.png        |  Bin 0 -> 6034 bytes
 .../skins/default/textures/textures.xml       |   17 +
 .../default/xui/en/floater_directory.xml      |  291 --
 .../default/xui/en/floater_fs_search.xml      |  337 ++
 .../skins/default/xui/en/panel_event_info.xml |  456 ---
 .../en/panel_fs_search_legacy_classifieds.xml |  169 +
 .../xui/en/panel_fs_search_legacy_events.xml  |  257 ++
 .../xui/en/panel_fs_search_legacy_groups.xml  |  159 +
 .../xui/en/panel_fs_search_legacy_land.xml    |  281 ++
 .../xui/en/panel_fs_search_legacy_people.xml  |   89 +
 .../xui/en/panel_fs_search_legacy_places.xml  |  169 +
 .../xui/en/panel_fs_search_legacy_web.xml     |   21 +
 .../xui/en/panel_search_classifieds.xml       |  113 -
 .../default/xui/en/panel_search_events.xml    |  198 --
 .../default/xui/en/panel_search_groups.xml    |  101 -
 .../default/xui/en/panel_search_landsales.xml |  181 -
 .../default/xui/en/panel_search_people.xml    |   38 -
 .../default/xui/en/panel_search_places.xml    |  113 -
 .../skins/default/xui/en/panel_search_web.xml |  138 -
 .../newview/skins/default/xui/en/strings.xml  |   11 +-
 68 files changed, 5151 insertions(+), 4696 deletions(-)
 create mode 100644 indra/newview/fsfloatersearch.cpp
 create mode 100644 indra/newview/fsfloatersearch.h
 delete mode 100644 indra/newview/llfloaterdirectory.cpp
 delete mode 100644 indra/newview/llfloaterdirectory.h
 delete mode 100644 indra/newview/llpaneleventinfo.cpp
 delete mode 100644 indra/newview/llpaneleventinfo.h
 delete mode 100644 indra/newview/llpanelsearchbase.cpp
 delete mode 100644 indra/newview/llpanelsearchbase.h
 delete mode 100644 indra/newview/llpanelsearchclassifieds.cpp
 delete mode 100644 indra/newview/llpanelsearchclassifieds.h
 delete mode 100644 indra/newview/llpanelsearchevents.cpp
 delete mode 100644 indra/newview/llpanelsearchevents.h
 delete mode 100644 indra/newview/llpanelsearchgroups.cpp
 delete mode 100644 indra/newview/llpanelsearchgroups.h
 delete mode 100644 indra/newview/llpanelsearchlandsales.cpp
 delete mode 100644 indra/newview/llpanelsearchlandsales.h
 delete mode 100644 indra/newview/llpanelsearchpeople.cpp
 delete mode 100644 indra/newview/llpanelsearchpeople.h
 delete mode 100644 indra/newview/llpanelsearchplaces.cpp
 delete mode 100644 indra/newview/llpanelsearchplaces.h
 delete mode 100644 indra/newview/llpanelsearchweb.cpp
 delete mode 100644 indra/newview/llpanelsearchweb.h
 create mode 100644 indra/newview/skins/default/textures/icon_group.png
 delete mode 100644 indra/newview/skins/default/textures/icon_group.tga
 create mode 100644 indra/newview/skins/default/textures/icon_legacy_event.tga
 create mode 100644 indra/newview/skins/default/textures/icon_legacy_event_adult.tga
 create mode 100644 indra/newview/skins/default/textures/icon_legacy_event_mature.tga
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_1.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_10.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_11.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_12.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_2.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_3.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_4.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_5.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_6.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_7.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_8.png
 create mode 100644 indra/newview/skins/default/textures/icons/ProgressLarge_9.png
 delete mode 100644 indra/newview/skins/default/xui/en/floater_directory.xml
 create mode 100644 indra/newview/skins/default/xui/en/floater_fs_search.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_event_info.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
 create mode 100644 indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_classifieds.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_events.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_groups.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_landsales.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_people.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_places.xml
 delete mode 100644 indra/newview/skins/default/xui/en/panel_search_web.xml

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5c42f9145d7..6afd76b44d8 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -113,6 +113,7 @@ set(viewer_SOURCE_FILES
     bdfloaterposer.cpp
     bdfloaterposecreator.cpp
     bdposingmotion.cpp
+    fsfloatersearch.cpp
     fslslpreproc.cpp
     fslslpreprocviewer.cpp
     gltfscenemanager.cpp
@@ -264,7 +265,6 @@ set(viewer_SOURCE_FILES
     llfloatercreatelandmark.cpp
     llfloaterdeleteprefpreset.cpp
     llfloaterdestinations.cpp
-    llfloaterdirectory.cpp
     llfloaterdisplayname.cpp
     llfloatereditenvironmentbase.cpp
     llfloatereditextdaycycle.cpp
@@ -499,7 +499,6 @@ set(viewer_SOURCE_FILES
     llpaneleditwearable.cpp
     llpanelemojicomplete.cpp
     llpanelenvironment.cpp
-    llpaneleventinfo.cpp
     llpanelexperiencelisteditor.cpp
     llpanelexperiencelog.cpp
     llpanelexperiencepicker.cpp
@@ -551,14 +550,6 @@ set(viewer_SOURCE_FILES
     llpanelprofilelegacy.cpp
     llpanelprofileclassifieds.cpp
     llpanelprofilepicks.cpp
-    llpanelsearchbase.cpp
-    llpanelsearchclassifieds.cpp
-    llpanelsearchevents.cpp
-    llpanelsearchgroups.cpp
-    llpanelsearchlandsales.cpp
-    llpanelsearchpeople.cpp
-    llpanelsearchplaces.cpp
-    llpanelsearchweb.cpp
     llpanelsnapshot.cpp
     llpanelsnapshotinventory.cpp
     llpanelsnapshotlocal.cpp
@@ -859,6 +850,7 @@ set(viewer_HEADER_FILES
     bdfloaterposer.h
     bdfloaterposecreator.h
     bdposingmotion.h
+    fsfloatersearch.h
     fslslpreproc.h
     fslslpreprocviewer.h
     gltfscenemanager.h
@@ -1011,7 +1003,6 @@ set(viewer_HEADER_FILES
     llfloatercreatelandmark.h
     llfloaterdeleteprefpreset.h
     llfloaterdestinations.h
-    llfloaterdirectory.h
     llfloaterdisplayname.h
     llfloatereditenvironmentbase.h
     llfloatereditextdaycycle.h
@@ -1238,7 +1229,6 @@ set(viewer_HEADER_FILES
     llpaneleditwearable.h
     llpanelemojicomplete.h
     llpanelenvironment.h
-    llpaneleventinfo.h
     llpanelexperiencelisteditor.h
     llpanelexperiencelog.h
     llpanelexperiencepicker.h
@@ -1291,14 +1281,6 @@ set(viewer_HEADER_FILES
     llpanelprofilelegacy.h
     llpanelprofileclassifieds.h
     llpanelprofilepicks.h
-    llpanelsearchbase.h
-    llpanelsearchclassifieds.h
-    llpanelsearchevents.h
-    llpanelsearchgroups.h
-    llpanelsearchlandsales.h
-    llpanelsearchpeople.h
-    llpanelsearchplaces.h
-    llpanelsearchweb.h
     llpanelsnapshot.h
     llpanelteleporthistory.h
     llpaneltiptoast.h
diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml
index acf2676b966..d33b1964a95 100644
--- a/indra/newview/app_settings/settings_alchemy.xml
+++ b/indra/newview/app_settings/settings_alchemy.xml
@@ -2220,5 +2220,27 @@
 			<key>Value</key>
 			<integer>0</integer>
 		  </map>
+    <key>FSLastSearchTab</key>
+    <map>
+		<key>Comment</key>
+		<string>Last selected tab in search window</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>S32</string>
+		<key>Value</key>
+		<integer>0</integer>
+    </map>
+    <key>FSLegacySearchActionOnTeleport</key>
+    <map>
+        <key>Comment</key>
+        <string>Controls what action Legacy Search should take when teleporting: 0 = No effect, 1 = Close floater, 2 Minimise floater</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>U32</string>
+        <key>Value</key>
+        <integer>1</integer>
+    </map>
 	</map>
 </llsd>
diff --git a/indra/newview/fsfloatersearch.cpp b/indra/newview/fsfloatersearch.cpp
new file mode 100644
index 00000000000..b881c2142ba
--- /dev/null
+++ b/indra/newview/fsfloatersearch.cpp
@@ -0,0 +1,3144 @@
+/**
+ * @file fsfloatersearch.cpp
+ * @brief Firestorm Search Floater
+ *
+ * $LicenseInfo:firstyear=2012&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2012, Cinder Roxley <cinder.roxley@phoenixviewer.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "fsfloatersearch.h"
+
+#include "lldispatcher.h"
+#include "llagent.h"
+#include "llavataractions.h"
+#include "llavatarname.h"
+#include "llavatarnamecache.h"
+#include "llavatarpropertiesprocessor.h"
+#include "llclassifiedflags.h"
+#include "llclassifiedinfo.h"
+#include "llcombobox.h"
+#include "lldateutil.h"
+#include "lleventflags.h"
+#include "lleventnotifier.h"
+#include "llfloaterreg.h"
+#include "llfloaterworldmap.h"
+#include "llgroupactions.h"
+#include "llgroupmgr.h"
+#include "llloadingindicator.h"
+#include "lllogininstance.h"
+#include "llnotificationsutil.h"
+#include "llpanelclassified.h"
+#include "llparcel.h"
+#include "llproductinforequest.h"
+#include "llqueryflags.h"
+#include "llregionhandle.h"
+#include "llremoteparcelrequest.h"
+#include "lltimer.h"
+#include "lltrans.h"
+#include "llviewercontrol.h"
+#include "llviewergenericmessage.h"
+#include "llviewernetwork.h"
+#include "llviewerregion.h"
+#include "llworldmapmessage.h"
+#include "message.h"
+#include <boost/tokenizer.hpp>
+#include <boost/algorithm/string.hpp>
+#include <string>
+
+static const S32 MIN_SEARCH_STRING_SIZE = 2;
+static const S32 RESULT_PAGE_SIZE = 100;
+
+std::string filterShortWords(std::string query_string);
+void fillSearchComboBox(LLSearchComboBox* search_combo);
+
+////////////////////////////////////////
+//          Observer Classes          //
+////////////////////////////////////////
+
+class FSSearchRemoteParcelInfoObserver : public LLRemoteParcelInfoObserver
+{
+public:
+    FSSearchRemoteParcelInfoObserver(FSFloaterSearch* floater, bool for_events) : LLRemoteParcelInfoObserver(),
+        mParent(floater),
+        mForEvents(for_events)
+    {}
+
+    ~FSSearchRemoteParcelInfoObserver()
+    {
+        // remove any in-flight observers
+        std::set<LLUUID>::iterator it;
+        for (it = mParcelIDs.begin(); it != mParcelIDs.end(); ++it)
+        {
+            const LLUUID &id = *it;
+            LLRemoteParcelInfoProcessor::getInstance()->removeObserver(id, this);
+        }
+        mParcelIDs.clear();
+    }
+
+    /*virtual*/ void processParcelInfo(const LLParcelData& parcel_data)
+    {
+        if (mParent)
+        {
+            if (mForEvents)
+            {
+                mParent->displayEventParcelImage(parcel_data);
+            }
+            else
+            {
+                mParent->displayParcelDetails(parcel_data);
+            }
+        }
+        mParcelIDs.erase(parcel_data.parcel_id);
+        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_data.parcel_id, this);
+    }
+
+    /*virtual*/ void setParcelID(const LLUUID& parcel_id)
+    {
+        if (!parcel_id.isNull())
+        {
+            mParcelIDs.insert(parcel_id);
+            LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);
+            LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);
+        }
+    }
+
+    /*virtual*/ void setErrorStatus(S32 status, const std::string& reason)
+    {
+        LL_WARNS("Search") << "Can't complete remote parcel request. Http Status: " << status << ". Reason : " << reason << LL_ENDL;
+    }
+private:
+    std::set<LLUUID>    mParcelIDs;
+    FSFloaterSearch*    mParent;
+    bool                mForEvents;
+};
+
+///// Avatar Properties Observer /////
+
+class FSSearchAvatarPropertiesObserver : public LLAvatarPropertiesObserver
+{
+public:
+    FSSearchAvatarPropertiesObserver(FSFloaterSearch* floater) : LLAvatarPropertiesObserver(),
+    mParent(floater)
+    {}
+
+    ~FSSearchAvatarPropertiesObserver()
+    {
+        // remove any in-flight observers
+        std::set<LLUUID>::iterator it;
+        for (it = mAvatarIDs.begin(); it != mAvatarIDs.end(); ++it)
+        {
+            const LLUUID &id = *it;
+            LLAvatarPropertiesProcessor::getInstance()->removeObserver(id, this);
+        }
+        mAvatarIDs.clear();
+    }
+
+    void processProperties(void* data, EAvatarProcessorType type)
+    {
+        if (APT_PROPERTIES == type)
+        {
+            LLAvatarData* avatar_data = static_cast<LLAvatarData*>(data);
+            if (avatar_data)
+            {
+                mParent->displayAvatarDetails(avatar_data);
+                LLAvatarPropertiesProcessor::getInstance()->removeObserver(avatar_data->avatar_id, this);
+            }
+        }
+        if (APT_CLASSIFIED_INFO == type)
+        {
+            LLAvatarClassifiedInfo* c_info = static_cast<LLAvatarClassifiedInfo*>(data);
+            if (c_info)
+            {
+                mParent->displayClassifiedDetails(c_info);
+                LLAvatarPropertiesProcessor::getInstance()->removeObserver(c_info->classified_id, this);
+                std::string url = gAgent.getRegionCapability("SearchStatRequest");
+                if (!url.empty())
+                {
+                    LL_INFOS("Search") << "Classified stat request via capability" << LL_ENDL;
+                    LLSD body;
+                    body["classified_id"] = c_info->classified_id;
+                    LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, body, boost::bind(&LLPanelClassifiedInfo::handleSearchStatResponse, c_info->classified_id, _1));
+                }
+            }
+        }
+    }
+private:
+    std::set<LLUUID>    mAvatarIDs;
+    FSFloaterSearch*    mParent;
+};
+
+///// Group Info Observer /////
+
+class FSSearchGroupInfoObserver : public LLGroupMgrObserver
+{
+public:
+    FSSearchGroupInfoObserver(const LLUUID& group_id, FSFloaterSearch* parent) :
+    LLGroupMgrObserver(group_id),
+    mParent(parent)
+    {
+        LLGroupMgr* groupmgr = LLGroupMgr::getInstance();
+        if (!group_id.isNull() && groupmgr)
+        {
+            groupmgr->addObserver(this);
+            mID = group_id;
+            groupmgr->sendGroupPropertiesRequest(group_id);
+        }
+    }
+
+    ~FSSearchGroupInfoObserver()
+    {
+        LLGroupMgr::getInstance()->removeObserver(this);
+    }
+
+    void changed(LLGroupChange gc)
+    {
+        if (gc == GC_PROPERTIES)
+        {
+            LLGroupMgrGroupData* group_data = LLGroupMgr::getInstance()->getGroupData(mID);
+            mParent->displayGroupDetails(group_data);
+            LLGroupMgr::getInstance()->removeObserver(this);
+        }
+    }
+private:
+    FSFloaterSearch*    mParent;
+    LLUUID              mID;
+};
+
+///// Silly Classified Clickthrough Class /////
+class FSDispatchClassifiedClickThrough : public LLDispatchHandler
+{
+public:
+    virtual bool operator()(
+        const LLDispatcher* dispatcher,
+        const std::string& key,
+        const LLUUID& invoice,
+        const sparam_t& strings)
+    {
+        if (strings.size() != 4) return false;
+        LLUUID classified_id(strings[0]);
+        S32 teleport_clicks = atoi(strings[1].c_str());
+        S32 map_clicks = atoi(strings[2].c_str());
+        S32 profile_clicks = atoi(strings[3].c_str());
+
+        LLPanelClassifiedInfo::setClickThrough(
+            classified_id, teleport_clicks, map_clicks, profile_clicks, false);
+
+        return true;
+    }
+};
+static FSDispatchClassifiedClickThrough sClassifiedClickThrough;
+
+SearchQuery::SearchQuery()
+: category("category", "")
+, query("query")
+{}
+
+////////////////////////////////////////
+//         The floater itself         //
+////////////////////////////////////////
+
+FSFloaterSearch::FSFloaterSearch(const Params& key)
+:   LLFloater(key)
+{
+    mRemoteParcelObserver = new FSSearchRemoteParcelInfoObserver(this, false);
+    mRemoteParcelEventLocationObserver = new FSSearchRemoteParcelInfoObserver(this, true);
+    mAvatarPropertiesObserver = new FSSearchAvatarPropertiesObserver(this);
+}
+
+FSFloaterSearch::~FSFloaterSearch()
+{
+    delete mRemoteParcelObserver;
+    delete mRemoteParcelEventLocationObserver;
+    delete mAvatarPropertiesObserver;
+    gGenericDispatcher.addHandler("classifiedclickthrough", nullptr);
+}
+
+// virtual
+void FSFloaterSearch::onOpen(const LLSD& key)
+{
+    Params p(key);
+    mPanelWeb->loadURL(p.search);
+    if (key.has("query"))
+    {
+        mTabContainer->selectTabPanel(mPanelWeb);
+    }
+    else if (key.has("tab") && key["tab"].asString() == "groups")
+    {
+        mTabContainer->selectTabPanel(mPanelGroups);
+    }
+
+    FSSearchPanelBase* current_panel = dynamic_cast<FSSearchPanelBase*>(mTabContainer->getCurrentPanel());
+    if (current_panel)
+    {
+        current_panel->focusDefaultElement();
+    }
+}
+
+//virtual
+void FSFloaterSearch::onClose(bool app_quitting)
+{
+    if (mTabContainer)
+    {
+        gSavedSettings.setS32("FSLastSearchTab", mTabContainer->getCurrentPanelIndex());
+    }
+}
+
+BOOL FSFloaterSearch::postBuild()
+{
+    childSetAction("people_profile_btn", boost::bind(&FSFloaterSearch::onBtnPeopleProfile, this));
+    childSetAction("people_message_btn", boost::bind(&FSFloaterSearch::onBtnPeopleIM, this));
+    childSetAction("people_friend_btn", boost::bind(&FSFloaterSearch::onBtnPeopleFriend, this));
+    childSetAction("group_profile_btn", boost::bind(&FSFloaterSearch::onBtnGroupProfile, this));
+    childSetAction("group_message_btn", boost::bind(&FSFloaterSearch::onBtnGroupChat, this));
+    childSetAction("group_join_btn", boost::bind(&FSFloaterSearch::onBtnGroupJoin, this));
+    childSetAction("event_reminder_btn", boost::bind(&FSFloaterSearch::onBtnEventReminder, this));
+    childSetAction("teleport_btn", boost::bind(&FSFloaterSearch::onBtnTeleport, this));
+    childSetAction("map_btn", boost::bind(&FSFloaterSearch::onBtnMap, this));
+    resetVerbs();
+
+    mPanelPeople        = findChild<FSPanelSearchPeople>("panel_ls_people");
+    mPanelGroups        = findChild<FSPanelSearchGroups>("panel_ls_groups");
+    mPanelPlaces        = findChild<FSPanelSearchPlaces>("panel_ls_places");
+    mPanelEvents        = findChild<FSPanelSearchEvents>("panel_ls_events");
+    mPanelLand          = findChild<FSPanelSearchLand>("panel_ls_land");
+    mPanelClassifieds   = findChild<FSPanelSearchClassifieds>("panel_ls_classifieds");
+    mPanelWeb           = findChild<FSPanelSearchWeb>("panel_ls_web");
+
+    mDetailsPanel =     getChild<LLPanel>("panel_ls_details");
+    mDetailTitle =      getChild<LLTextEditor>("title");
+    mDetailDesc =       getChild<LLTextEditor>("desc");
+    mDetailAux1 =       getChild<LLTextEditor>("aux1");
+    mDetailAux2 =       getChild<LLTextEditor>("aux2");
+    mDetailLocation =   getChild<LLTextEditor>("location");
+    mDetailSnapshot =   getChild<LLTextureCtrl>("snapshot");
+    mDetailSnapshotParcel = getChild<LLTextureCtrl>("snapshot_parcel");
+    mDetailMaturity =   getChild<LLIconCtrl>("maturity_icon");
+    mTabContainer =     getChild<LLTabContainer>("ls_tabs");
+
+    mTabContainer->setCommitCallback(boost::bind(&FSFloaterSearch::onTabChange, this));
+
+    flushDetails();
+
+    mDetailsPanel->setVisible(false);
+
+    mHasSelection = false;
+
+    if (!mTabContainer->selectTab(gSavedSettings.getS32("FSLastSearchTab")))
+    {
+        mTabContainer->selectFirstTab();
+    }
+
+    return TRUE;
+}
+
+void FSFloaterSearch::onTabChange()
+{
+    LLPanel* active_panel = mTabContainer->getCurrentPanel();
+
+    if (active_panel == mPanelWeb)
+    {
+        mDetailsPanel->setVisible(false);
+        mPanelWeb->resetFocusOnLoad();
+    }
+    else
+    {
+        mDetailsPanel->setVisible(mHasSelection);
+    }
+
+    if (active_panel == mPanelPeople || active_panel == mPanelGroups)
+    {
+        mDetailSnapshotParcel->setVisible(FALSE);
+        mDetailSnapshot->setVisible(TRUE);
+    }
+    else if (active_panel == mPanelPlaces || active_panel == mPanelLand ||
+        active_panel == mPanelEvents || active_panel == mPanelClassifieds)
+    {
+        mDetailSnapshot->setVisible(FALSE);
+        mDetailSnapshotParcel->setVisible(TRUE);
+    }
+}
+
+//static
+template <class T>
+T* FSFloaterSearch::getSearchPanel(const std::string& panel_name)
+{
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance && search_instance->mTabContainer)
+    {
+        return dynamic_cast<T*>(search_instance->mTabContainer->getPanelByName(panel_name));
+    }
+    else
+    {
+        return nullptr;
+    }
+}
+
+void FSFloaterSearch::onSelectedItem(const LLUUID& selected_item, ESearchCategory type)
+{
+    if (!selected_item.isNull())
+    {
+        mSelectedID = selected_item;
+        resetVerbs();
+        flushDetails();
+        switch (type)
+        {
+            case SC_AVATAR:
+                {
+                    {
+                        LLAvatarPropertiesProcessor::getInstance()->addObserver(selected_item, mAvatarPropertiesObserver);
+                        LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesRequest(selected_item);
+                    }
+                }
+                break;
+            case SC_GROUP:
+                mGroupPropertiesRequest = new FSSearchGroupInfoObserver(selected_item, this);
+                break;
+            case SC_PLACE:
+                mRemoteParcelObserver->setParcelID(selected_item);
+                break;
+            case SC_CLASSIFIED:
+                LLAvatarPropertiesProcessor::getInstance()->addObserver(selected_item, mAvatarPropertiesObserver);
+                LLAvatarPropertiesProcessor::getInstance()->sendClassifiedInfoRequest(selected_item);
+                gGenericDispatcher.addHandler("classifiedclickthrough", &sClassifiedClickThrough);
+                break;
+        }
+        setLoadingProgress(true);
+    }
+}
+
+void FSFloaterSearch::onSelectedEvent(const S32 selected_event)
+{
+    resetVerbs();
+    flushDetails();
+
+    gMessageSystem->newMessageFast(_PREHASH_EventInfoRequest);
+    gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+    gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgentID);
+    gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
+    gMessageSystem->nextBlockFast(_PREHASH_EventData);
+    gMessageSystem->addU32Fast(_PREHASH_EventID, selected_event);
+    gAgent.sendReliableMessage();
+}
+
+void FSFloaterSearch::displayParcelDetails(const LLParcelData& parcel_data)
+{
+    S32 region_x;
+    S32 region_y;
+    S32 region_z;
+    region_x = ll_round(parcel_data.global_x) % REGION_WIDTH_UNITS;
+    region_y = ll_round(parcel_data.global_y) % REGION_WIDTH_UNITS;
+    region_z = ll_round(parcel_data.global_z);
+    // HACK: Flag 0x2 == adult region,
+    // Flag 0x1 == mature region, otherwise assume PG
+    if (parcel_data.flags & 0x2)
+    {
+        mDetailMaturity->setValue("Parcel_R_Dark");
+    }
+    else if (parcel_data.flags & 0x1)
+    {
+        mDetailMaturity->setValue("Parcel_M_Dark");
+    }
+    else
+    {
+        mDetailMaturity->setValue("Parcel_PG_Dark");
+    }
+
+    LLStringUtil::format_map_t map;
+    map["DWELL"] = llformat("%.0f", (F64)parcel_data.dwell);
+    map["AREA"] = llformat("%d m²", parcel_data.actual_area);
+    map["LOCATION"] = llformat("%s (%d, %d, %d)", parcel_data.sim_name.c_str(), region_x, region_y, region_z);
+
+    mParcelGlobal = LLVector3d(parcel_data.global_x, parcel_data.global_y, parcel_data.global_z);
+    mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_places" || mTabContainer->getCurrentPanel()->getName() == "panel_ls_land");
+    mHasSelection = true;
+    mDetailMaturity->setVisible(true);
+    mDetailTitle->setValue(parcel_data.name);
+    mDetailDesc->setValue(parcel_data.desc);
+    mDetailAux1->setValue(getString("string.traffic", map));
+    mDetailAux2->setValue(getString("string.area", map));
+    mDetailLocation->setValue(getString("string.location", map));
+    mDetailSnapshotParcel->setValue(parcel_data.snapshot_id);
+    childSetVisible("teleport_btn", true);
+    childSetVisible("map_btn", true);
+    setLoadingProgress(false);
+}
+
+void FSFloaterSearch::displayAvatarDetails(LLAvatarData*& avatar_data)
+{
+    if (avatar_data)
+    {
+        LLStringUtil::format_map_t map;
+        map["AGE"] = LLDateUtil::ageFromDate(avatar_data->born_on, LLDate::now());
+        if (avatar_data->partner_id.notNull())
+        {
+            map["PARTNER"] = LLSLURL("agent", avatar_data->partner_id, "inspect").getSLURLString();
+            mDetailAux2->setValue(getString("string.partner", map));
+        }
+
+        mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_people");
+        mHasSelection = true;
+        mDetailTitle->setValue(LLTrans::getString("LoadingData"));
+        mDetailDesc->setValue(avatar_data->about_text);
+        mDetailSnapshot->setValue(avatar_data->image_id);
+        mDetailAux1->setValue(getString("string.age", map));
+        LLAvatarNameCache::get(avatar_data->avatar_id, boost::bind(&FSFloaterSearch::avatarNameUpdatedCallback,this, _1, _2));
+        childSetVisible("people_profile_btn", true);
+        childSetVisible("people_message_btn", true);
+        childSetVisible("people_friend_btn", true);
+        getChildView("people_friend_btn")->setEnabled(!LLAvatarActions::isFriend(avatar_data->avatar_id));
+    }
+}
+
+void FSFloaterSearch::displayGroupDetails(LLGroupMgrGroupData*& group_data)
+{
+    if (group_data)
+    {
+        LLStringUtil::format_map_t map;
+        map["MEMBER_COUNT"] = llformat("%d",group_data->mMemberCount);
+        map["FOUNDER"] = LLSLURL("agent", group_data->mFounderID, "inspect").getSLURLString();
+
+        mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_groups");
+        mHasSelection = true;
+        mDetailTitle->setValue(LLTrans::getString("LoadingData"));
+        mDetailDesc->setValue(group_data->mCharter);
+        mDetailSnapshot->setValue(group_data->mInsigniaID);
+        mDetailAux1->setValue(getString("string.members", map));
+        mDetailAux2->setValue(getString("string.founder", map));
+        LLGroupData agent_gdatap;
+        bool is_member = gAgent.getGroupData(getSelectedID(),agent_gdatap) || gAgent.isGodlike();
+        bool join_btn_enabled = !is_member && group_data->mOpenEnrollment;
+        childSetVisible("group_profile_btn", true);
+        childSetVisible("group_message_btn", true);
+        childSetVisible("group_join_btn", true);
+        getChildView("group_join_btn")->setEnabled(join_btn_enabled);
+        getChildView("group_message_btn")->setEnabled(is_member);
+        gCacheName->getGroup(getSelectedID(), boost::bind(&FSFloaterSearch::groupNameUpdatedCallback, this, _1, _2, _3));
+    }
+}
+
+void FSFloaterSearch::displayClassifiedDetails(LLAvatarClassifiedInfo*& c_info)
+{
+    if (c_info)
+    {
+        if (c_info->flags & CLASSIFIED_FLAG_MATURE)
+        {
+            mDetailMaturity->setValue("Parcel_M_Dark");
+        }
+        else
+        {
+            mDetailMaturity->setValue("Parcel_PG_Dark");
+        }
+
+        LLStringUtil::format_map_t map;
+        map["LISTING_PRICE"] = llformat("L$%d", c_info->price_for_listing);
+        map["SLURL"] = LLSLURL("parcel", c_info->parcel_id, "about").getSLURLString();
+
+        mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_classifieds");
+        mHasSelection = true;
+        mDetailMaturity->setVisible(true);
+        mParcelGlobal = c_info->pos_global;
+        mDetailTitle->setValue(c_info->name);
+        mDetailDesc->setValue(c_info->description);
+        mDetailSnapshotParcel->setValue(c_info->snapshot_id);
+        mDetailAux1->setValue(getString("string.listing_price", map));
+        mDetailLocation->setValue(getString("string.slurl", map));
+        childSetVisible("teleport_btn", true);
+        childSetVisible("map_btn", true);
+        setLoadingProgress(false);
+    }
+}
+
+void FSFloaterSearch::displayEventDetails(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName, const std::string &eventDesc, const std::string &simName, U32 eventDuration, U32 eventFlags, U32 eventCover, LLVector3d eventGlobalPos)
+{
+    if (eventFlags == EVENT_FLAG_ADULT)
+    {
+        mDetailMaturity->setValue("Parcel_R_Dark");
+    }
+    else if (eventFlags == EVENT_FLAG_MATURE)
+    {
+        mDetailMaturity->setValue("Parcel_M_Dark");
+    }
+    else
+    {
+        mDetailMaturity->setValue("Parcel_PG_Dark");
+    }
+
+    S32 region_x;
+    S32 region_y;
+    S32 region_z;
+    region_x = (S64)ll_round(eventGlobalPos.mdV[VX]) % REGION_WIDTH_UNITS;
+    region_y = (S64)ll_round(eventGlobalPos.mdV[VY]) % REGION_WIDTH_UNITS;
+    region_z = (S32)ll_round(eventGlobalPos.mdV[VZ]);
+    LLStringUtil::format_map_t map;
+    map["DURATION"] = llformat("%d:%.2d", eventDuration / 60, eventDuration % 60);
+    map["LOCATION"] = llformat("%s (%d, %d, %d)", simName.c_str(), region_x, region_y, region_z);
+    if (eventCover > 0)
+    {
+        map["COVERCHARGE"] = llformat("L$%d", eventCover);
+        mDetailAux2->setValue(getString("string.covercharge", map));
+    }
+
+    mParcelGlobal = eventGlobalPos;
+    mEventID = eventId;
+    mDetailsPanel->setVisible(mTabContainer->getCurrentPanel()->getName() == "panel_ls_events");
+    mHasSelection = true;
+    mDetailMaturity->setVisible(true);
+    mDetailTitle->setValue(eventName);
+    mDetailDesc->setValue(eventDesc);
+    mDetailAux1->setValue(getString("string.duration", map));
+    mDetailLocation->setValue(getString("string.location", map));
+    mDetailSnapshotParcel->setValue(LLUUID::null);
+    childSetVisible("teleport_btn", true);
+    childSetVisible("map_btn", true);
+    childSetVisible("event_reminder_btn", true);
+
+    LLWorldMapMessage::getInstance()->sendNamedRegionRequest(simName, boost::bind(&FSFloaterSearch::regionHandleCallback, this, _1, eventGlobalPos), "", false);
+}
+
+void FSFloaterSearch::regionHandleCallback(U64 region_handle, LLVector3d pos_global)
+{
+    std::string url = gAgent.getRegionCapability("RemoteParcelRequest");
+    if (!url.empty())
+    {
+        auto region_origin = from_region_handle(region_handle);
+        LLVector3 pos_region(LLVector3(pos_global - region_origin));
+
+        LLRemoteParcelInfoProcessor::getInstance()->requestRegionParcelInfo(url,
+            LLUUID::null, pos_region, pos_global, mRemoteParcelEventLocationObserver->getObserverHandle());
+    }
+    else
+    {
+        setLoadingProgress(false);
+    }
+}
+
+void FSFloaterSearch::displayEventParcelImage(const LLParcelData& parcel_data)
+{
+    mDetailSnapshotParcel->setValue(parcel_data.snapshot_id);
+    setLoadingProgress(false);
+}
+
+void FSFloaterSearch::avatarNameUpdatedCallback(const LLUUID& id, const LLAvatarName& av_name)
+{
+    if (id == getSelectedID())
+    {
+        mDetailTitle->setValue(av_name.getCompleteName());
+        setLoadingProgress(false);
+    }
+    // Otherwise possibly a request for an older selection, ignore it.
+}
+
+void FSFloaterSearch::groupNameUpdatedCallback(const LLUUID& id, const std::string& name, bool is_group)
+{
+    if (id == getSelectedID())
+    {
+        mDetailTitle->setValue( LLSD(name) );
+        setLoadingProgress(false);
+    }
+    // Otherwise possibly a request for an older selection, ignore it.
+}
+
+void FSFloaterSearch::setLoadingProgress(bool started)
+{
+    LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("loading");
+
+    indicator->setVisible(started);
+
+    if (started)
+    {
+        indicator->start();
+    }
+    else
+    {
+        indicator->stop();
+    }
+}
+
+void FSFloaterSearch::resetVerbs()
+{
+    childSetVisible("people_profile_btn", false);
+    childSetVisible("people_message_btn", false);
+    childSetVisible("people_friend_btn", false);
+    childSetVisible("group_profile_btn", false);
+    childSetVisible("group_message_btn", false);
+    childSetVisible("group_join_btn", false);
+    childSetVisible("event_reminder_btn", false);
+    childSetVisible("teleport_btn", false);
+    childSetVisible("map_btn", false);
+}
+
+void FSFloaterSearch::flushDetails()
+{
+    mDetailTitle->setValue("");
+    mDetailDesc->setValue("");
+    mDetailAux1->setValue("");
+    mDetailAux2->setValue("");
+    mDetailLocation->setValue("");
+    mDetailSnapshot->setValue(LLSD());
+    mDetailMaturity->setVisible(false);
+    mParcelGlobal.setZero();
+}
+
+void FSFloaterSearch::onBtnPeopleProfile()
+{
+    LLAvatarActions::showProfile(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnPeopleIM()
+{
+    LLAvatarActions::startIM(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnPeopleFriend()
+{
+    LLAvatarActions::requestFriendshipDialog(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnGroupProfile()
+{
+    LLGroupActions::show(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnGroupChat()
+{
+    LLGroupActions::startIM(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnGroupJoin()
+{
+    LLGroupActions::join(getSelectedID());
+}
+
+void FSFloaterSearch::onBtnTeleport()
+{
+    if (!mParcelGlobal.isExactlyZero())
+    {
+        gAgent.teleportViaLocation(mParcelGlobal);
+        LLFloaterWorldMap::getInstance()->trackLocation(mParcelGlobal);
+        /// <FS:CR> What should we do when when we teleport? The default (1) is to close the floater,
+        /// the user may elect to minimize the floater (2), or to do nothing (any other setting)
+        static LLCachedControl<U32> teleport_action(gSavedSettings, "FSLegacySearchActionOnTeleport");
+        if (teleport_action == 1)
+        {
+            closeFloater();
+        }
+        else if (teleport_action == 2)
+        {
+            setMinimized(TRUE);
+        }
+    }
+}
+
+void FSFloaterSearch::onBtnMap()
+{
+    if (!mParcelGlobal.isExactlyZero())
+    {
+        LLFloaterWorldMap::getInstance()->trackLocation(mParcelGlobal);
+        LLFloaterReg::showInstance("world_map", "center");
+    }
+}
+
+void FSFloaterSearch::onBtnEventReminder()
+{
+    gEventNotifier.add(mEventID);
+}
+
+////////////////////////////////////////
+//         People Search Panel        //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchPeople> t_panel_fs_search_people("panel_ls_people");
+
+FSPanelSearchPeople::FSPanelSearchPeople() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+, mAvatarNameCallbackConnection()
+{
+}
+
+FSPanelSearchPeople::~FSPanelSearchPeople()
+{
+    if (mAvatarNameCallbackConnection.connected())
+    {
+        mAvatarNameCallbackConnection.disconnect();
+    }
+}
+
+BOOL FSPanelSearchPeople::postBuild()
+{
+    mSearchComboBox =   findChild<LLSearchComboBox>("people_edit");
+    mSearchResults =    findChild<LLScrollListCtrl>("search_results_people");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchPeople::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchPeople::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+        mSearchResults->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+    }
+
+    childSetAction("people_next", boost::bind(&FSPanelSearchPeople::onBtnNext, this));
+    childSetAction("people_back", boost::bind(&FSPanelSearchPeople::onBtnBack, this));
+    getChildView("people_next")->setEnabled(FALSE);
+    getChildView("people_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchPeople::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchPeople::find()
+{
+    std::string text = mSearchComboBox->getSimple();
+    boost::trim(text);
+    if (text.size() <= MIN_SEARCH_STRING_SIZE)
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    if (LLUUID::validate(text))
+    {
+        LLUUID id(text);
+
+        mSearchResults->deleteAllItems();
+        mSearchResults->setCommentText(LLTrans::getString("searching"));
+        mResultsReceived = 0;
+        mNumResultsReturned = 0;
+
+        if (mAvatarNameCallbackConnection.connected())
+        {
+            mAvatarNameCallbackConnection.disconnect();
+        }
+        mAvatarNameCallbackConnection = LLAvatarNameCache::get(id, boost::bind(&FSPanelSearchPeople::onAvatarNameCallback, this, _1, _2));
+
+        return;
+    }
+
+    LLStringUtil::replaceChar(text, '.', ' ');
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirFindQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", text);
+    gMessageSystem->addU32("QueryFlags", DFQ_PEOPLE);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchPeople::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchPeople::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("people_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchPeople::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("people_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchPeople::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("people_back")->setEnabled(FALSE);
+    getChildView("people_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchPeople::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("people_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchPeople::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_AVATAR);
+    }
+}
+
+// static
+void FSPanelSearchPeople::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID query_id;
+    std::string first_name;
+    std::string last_name;
+    LLUUID agent_id;
+
+    msg->getUUIDFast(_PREHASH_QueryData,    _PREHASH_QueryID,   query_id);
+    msg->getUUIDFast(_PREHASH_AgentData,    _PREHASH_AgentID,   agent_id);
+
+    // This result is not for us.
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received search results - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchPeople* self = FSFloaterSearch::getSearchPanel<FSPanelSearchPeople>("panel_ls_people");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->getQueryID())
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_people");
+
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("people_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("people_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_FirstName, first_name, i);
+        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_LastName,  last_name, i);
+        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_AgentID,   agent_id, i);
+        //msg->getU8Fast(   _PREHASH_QueryReplies,  _PREHASH_Online,    online, i);
+
+        if (agent_id.isNull())
+        {
+            LL_INFOS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("people_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << first_name << " " << last_name << " AgentID: " << agent_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            std::string avatar_name;
+            avatar_name = LLCacheName::buildFullName(first_name, last_name);
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = agent_id;
+
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"]   = "icon";
+            element["columns"][0]["value"]  = "icon_avatar_offline.tga";
+
+            element["columns"][1]["column"] = "username";
+            element["columns"][1]["value"]  = avatar_name;
+
+            content["name"] = avatar_name;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[agent_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+void FSPanelSearchPeople::onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name)
+{
+    if (mAvatarNameCallbackConnection.connected())
+    {
+        mAvatarNameCallbackConnection.disconnect();
+    }
+
+    LLScrollListCtrl* search_results = getChild<LLScrollListCtrl>("search_results_people");
+
+    if (av_name.getAccountName() != "(?\?\?).(?\?\?)")
+    {
+        LLSD content;
+        LLSD data;
+        data["id"] = id;
+
+        data["columns"][0]["column"] = "icon";
+        data["columns"][0]["type"] = "icon";
+        data["columns"][0]["value"] = "icon_avatar_offline.tga";
+
+        data["columns"][1]["name"] = "username";
+        data["columns"][1]["value"] = av_name.getUserName();
+
+        content["name"] = av_name.getUserName();
+
+        search_results->addElement(data);
+
+        mResultsContent[id.asString()] = content;
+        mResultsReceived = 1;
+        mNumResultsReturned = 1;
+
+        search_results->setEnabled(TRUE);
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        onSelectItem();
+    }
+    else
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = getChild<LLUICtrl>("people_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+}
+
+////////////////////////////////////////
+//         Groups Search Panel        //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchGroups> t_panel_fs_search_groups("panel_ls_groups");
+
+FSPanelSearchGroups::FSPanelSearchGroups() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+}
+
+FSPanelSearchGroups::~FSPanelSearchGroups()
+{
+}
+
+BOOL FSPanelSearchGroups::postBuild()
+{
+    mSearchComboBox =   findChild<LLSearchComboBox>("groups_edit");
+    mSearchResults =    findChild<LLScrollListCtrl>("search_results_groups");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchGroups::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchGroups::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+
+    childSetAction("groups_next", boost::bind(&FSPanelSearchGroups::onBtnNext, this));
+    childSetAction("groups_back", boost::bind(&FSPanelSearchGroups::onBtnBack, this));
+    getChildView("groups_next")->setEnabled(FALSE);
+    getChildView("groups_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchGroups::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchGroups::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+    if (text.size() == 0)
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    static LLUICachedControl<bool> inc_pg("ShowPGSims", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureSims", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultSims", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+    U32 scope = 0;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool adult_enabled = gAgent.canAccessAdult();
+    bool mature_enabled = gAgent.canAccessMature();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+    scope |= DFQ_GROUPS;
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirFindQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", text);
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchGroups::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchGroups::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("groups_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchGroups::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("groups_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchGroups::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("groups_back")->setEnabled(FALSE);
+    getChildView("groups_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchGroups::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("groups_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchGroups::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_GROUP);
+    }
+}
+
+// static
+void FSPanelSearchGroups::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID query_id;
+    LLUUID group_id;
+    LLUUID agent_id;
+    std::string group_name;
+    S32 members;
+    F32 search_order;
+
+    msg->getUUIDFast(   _PREHASH_QueryData, _PREHASH_QueryID,   query_id);
+    msg->getUUIDFast(   _PREHASH_AgentData, _PREHASH_AgentID,   agent_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchGroups* self = FSFloaterSearch::getSearchPanel<FSPanelSearchGroups>("panel_ls_groups");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_groups");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_GroupID,       group_id,   i);
+        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_GroupName,     group_name, i);
+        msg->getS32Fast(    _PREHASH_QueryReplies,  _PREHASH_Members,       members,    i);
+        msg->getF32Fast(    _PREHASH_QueryReplies,  _PREHASH_SearchOrder,   search_order,i);
+        if (group_id.isNull())
+        {
+            LL_DEBUGS("Search") << "No results returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << group_name << " GroupID: " << group_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = group_id;
+
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"]   = "icon";
+            element["columns"][0]["value"]  = "Icon_Group";
+
+            element["columns"][1]["column"] = "group_name";
+            element["columns"][1]["value"]  = group_name;
+
+            element["columns"][2]["column"] = "members";
+            element["columns"][2]["value"]  = members;
+
+            element["columns"][3]["column"] = "score";
+            element["columns"][3]["value"]  = search_order;
+
+            content["name"] = group_name;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[group_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//         Places Search Panel        //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchPlaces> t_panel_fs_search_places("panel_ls_places");
+
+FSPanelSearchPlaces::FSPanelSearchPlaces() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchPlaces::find, this));
+}
+
+FSPanelSearchPlaces::~FSPanelSearchPlaces()
+{
+}
+
+BOOL FSPanelSearchPlaces::postBuild()
+{
+    mSearchComboBox =   findChild<LLSearchComboBox>("places_edit");
+    mSearchResults =    findChild<LLScrollListCtrl>("search_results_places");
+    mPlacesCategory =   findChild<LLComboBox>("places_category");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchPlaces::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchPlaces::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+    if (mPlacesCategory)
+    {
+        mPlacesCategory->add(LLTrans::getString("all_categories"), LLSD("any"));
+        mPlacesCategory->addSeparator();
+        for (int category = LLParcel::C_LINDEN; category < LLParcel::C_COUNT; category++)
+        {
+            LLParcel::ECategory eCategory = (LLParcel::ECategory)category;
+            mPlacesCategory->add(LLTrans::getString(LLParcel::getCategoryUIString(eCategory)), LLParcel::getCategoryString(eCategory));
+        }
+    }
+    childSetAction("places_next", boost::bind(&FSPanelSearchPlaces::onBtnNext, this));
+    childSetAction("places_back", boost::bind(&FSPanelSearchPlaces::onBtnBack, this));
+    getChildView("places_next")->setEnabled(FALSE);
+    getChildView("places_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchPlaces::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchPlaces::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+    if (text.empty())
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    static LLUICachedControl<bool> inc_pg("ShowPGSims", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureSims", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultSims", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+    S8 category;
+    std::string category_string = mPlacesCategory->getSelectedValue();
+    if (category_string == "any")
+    {
+        category = LLParcel::C_ANY;
+    }
+    else
+    {
+        category = LLParcel::getCategoryFromString(category_string);
+    }
+    U32 scope = 0;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool adult_enabled = gAgent.canAccessAdult();
+    bool mature_enabled = gAgent.canAccessMature();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+    scope |= DFQ_DWELL_SORT;
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirPlacesQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", text);
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addS8("Category", category);
+    // TODO: Search filter by region name.
+    gMessageSystem->addString("SimName", "");
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off places search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchPlaces::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchPlaces::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("places_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchPlaces::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("places_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchPlaces::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("places_back")->setEnabled(FALSE);
+    getChildView("places_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchPlaces::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("places_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchPlaces::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_PLACE);
+    }
+}
+
+// static
+void FSPanelSearchPlaces::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      parcel_id;
+    std::string name;
+    BOOL        for_sale;
+    BOOL        auction;
+    F32         dwell;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchPlaces* self = FSFloaterSearch::getSearchPanel<FSPanelSearchPlaces>("panel_ls_places");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->getQueryID())
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_places");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("places_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_ESTATEEMPTY)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("places_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUID(   "QueryReplies", "ParcelID", parcel_id,  i);
+        msg->getString( "QueryReplies", "Name",     name,       i);
+        msg->getBOOL(   "QueryReplies", "ForSale",  for_sale,i);
+        msg->getBOOL(   "QueryReplies", "Auction",  auction,    i);
+        msg->getF32(    "QueryReplies", "Dwell",    dwell,      i);
+        if (parcel_id.isNull())
+        {
+            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("places_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << name << " ParcelID: " << parcel_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = parcel_id;
+
+            if (auction)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Auction";
+            }
+            else if (for_sale)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_For_Sale";
+            }
+            else
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Place";
+            }
+
+            element["columns"][1]["column"] = "place_name";
+            element["columns"][1]["value"]  = name;
+
+            content["name"] = name;
+
+            std::string buffer = llformat("%.0f", (F64)dwell);
+            element["columns"][2]["column"] = "dwell";
+            element["columns"][2]["value"]  = buffer;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[parcel_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//          Land Search Panel         //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchLand> t_panel_fs_search_land("panel_ls_land");
+
+FSPanelSearchLand::FSPanelSearchLand() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchLand::find, this));
+}
+
+FSPanelSearchLand::~FSPanelSearchLand()
+{
+}
+
+BOOL FSPanelSearchLand::postBuild()
+{
+    mSearchResults  = getChild<LLScrollListCtrl>("search_results_land");
+    mPriceEditor    = findChild<LLLineEditor>("price_edit");
+    mAreaEditor     = findChild<LLLineEditor>("area_edit");
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchLand::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+    if (mPriceEditor)
+    {
+        mPriceEditor->setCommitOnFocusLost(false);
+        mPriceEditor->setCommitCallback(boost::bind(&FSPanelSearchLand::onBtnFind, this));
+    }
+    if (mAreaEditor)
+    {
+        mAreaEditor->setCommitOnFocusLost(false);
+        mAreaEditor->setCommitCallback(boost::bind(&FSPanelSearchLand::find, this));
+    }
+    childSetAction("land_find", boost::bind(&FSPanelSearchLand::onBtnFind, this));
+    childSetAction("land_next", boost::bind(&FSPanelSearchLand::onBtnNext, this));
+    childSetAction("land_back", boost::bind(&FSPanelSearchLand::onBtnBack, this));
+
+    getChildView("land_next")->setEnabled(FALSE);
+    getChildView("land_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchLand::find()
+{
+    static LLUICachedControl<bool> inc_pg("ShowPGLand", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureLand", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultLand", 0);
+    static LLUICachedControl<bool> limit_price("FindLandPrice", 1);
+    static LLUICachedControl<bool> limit_area("FindLandArea", 1);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+
+    U32 category = ST_ALL;
+    const std::string& selection = findChild<LLComboBox>("land_category")->getSelectedValue().asString();
+    if (!selection.empty())
+    {
+        if (selection == "Auction")
+        {
+            category = ST_AUCTION;
+        }
+        else if (selection == "Mainland")
+        {
+            category = ST_MAINLAND;
+        }
+        else if (selection == "Estate")
+        {
+            category = ST_ESTATE;
+        }
+    }
+
+    U32 scope = 0;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool mature_enabled = gAgent.canAccessMature();
+    bool adult_enabled = gAgent.canAccessAdult();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+    const std::string& sort = findChild<LLComboBox>("land_sort_combo")->getSelectedValue().asString();
+    if (!sort.empty())
+    {
+        if (sort == "Name")
+        {
+            scope |= DFQ_NAME_SORT;
+        }
+        else if (sort == "Price")
+        {
+            scope |= DFQ_PRICE_SORT;
+        }
+        else if (sort == "PPM")
+        {
+            scope |= DFQ_PER_METER_SORT;
+        }
+        else if (sort == "Area")
+        {
+            scope |= DFQ_AREA_SORT;
+        }
+    }
+    else
+    {
+        scope |= DFQ_PRICE_SORT;
+    }
+    if (childGetValue("ascending_check").asBoolean())
+    {
+        scope |= DFQ_SORT_ASC;
+    }
+    if (limit_price)
+    {
+        scope |= DFQ_LIMIT_BY_PRICE;
+    }
+    if (limit_area)
+    {
+        scope |= DFQ_LIMIT_BY_AREA;
+    }
+    S32 price = childGetValue("edit_price").asInteger();
+    S32 area = childGetValue("edit_area").asInteger();
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirLandQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addU32("SearchType", category);
+    gMessageSystem->addS32("Price", price);
+    gMessageSystem->addS32("Area", area);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off places search request: " << getQueryID() << category << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchLand::onBtnFind()
+{
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchLand::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("land_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchLand::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("land_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchLand::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("land_back")->setEnabled(FALSE);
+    getChildView("land_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchLand::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("land_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchLand::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_PLACE);
+    }
+}
+
+// static
+void FSPanelSearchLand::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      parcel_id;
+    std::string name;
+    std::string land_sku;
+    std::string land_type;
+    BOOL        auction;
+    BOOL        for_sale;
+    S32         price;
+    S32         area;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchLand* self = FSFloaterSearch::getSearchPanel<FSPanelSearchLand>("panel_ls_land");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_land");
+    // clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    static LLUICachedControl<bool> use_price("FindLandPrice", 1);
+    static LLUICachedControl<bool> use_area("FindLandArea", 1);
+    S32 limit_price = self->childGetValue("edit_price").asInteger();
+    S32 limit_area = self->childGetValue("edit_area").asInteger();
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("events_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+    self->mResultsReceived += num_new_rows;
+
+    S32 not_auction = 0;
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUID(   "QueryReplies", "ParcelID",     parcel_id,  i);
+        msg->getString( "QueryReplies", "Name",         name,       i);
+        msg->getBOOL(   "QueryReplies", "Auction",      auction,    i);
+        msg->getBOOL(   "QueryReplies", "ForSale",      for_sale,   i);
+        msg->getS32(    "QueryReplies", "SalePrice",    price,      i);
+        msg->getS32(    "QueryReplies", "ActualArea",   area,       i);
+        if (parcel_id.isNull())
+        {
+            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("no_results"));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << parcel_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+            if (msg->getSizeFast(_PREHASH_QueryReplies, i, _PREHASH_ProductSKU) > 0)
+            {
+                msg->getStringFast( _PREHASH_QueryReplies, _PREHASH_ProductSKU, land_sku, i);
+                land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku);
+            }
+            else
+            {
+                land_sku.clear();
+                land_type = LLTrans::getString("land_type_unknown");
+            }
+            if (parcel_id.isNull())
+            {
+                continue;
+            }
+            if (use_price && (price > limit_price))
+            {
+                continue;
+            }
+            if (use_area && (area < limit_area))
+            {
+                continue;
+            }
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = parcel_id;
+            if (auction)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Auction";
+            }
+            else if (for_sale)
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_For_Sale";
+            }
+            else
+            {
+                element["columns"][0]["column"] = "icon";
+                element["columns"][0]["type"]   = "icon";
+                element["columns"][0]["value"]  = "Icon_Place";
+            }
+
+            element["columns"][1]["column"] = "land_name";
+            element["columns"][1]["value"]  = name;
+
+            content["place_name"] = name;
+
+            std::string buffer = "Auction";
+            if (!auction)
+            {
+                buffer = llformat("%d", price);
+                not_auction++;
+            }
+            element["columns"][2]["column"] = "price";
+            element["columns"][2]["value"]  = price;
+
+            element["columns"][3]["column"] = "area";
+            element["columns"][3]["value"]  = area;
+            if (!auction)
+            {
+                F32 ppm;
+                if (area > 0)
+                {
+                    ppm = (F32)price / (F32)area;
+                }
+                else
+                {
+                    ppm = 0.f;
+                }
+                std::string ppm_buffer = llformat("%.1f", ppm);
+                element["columns"][4]["column"] = "ppm";
+                element["columns"][4]["value"] = ppm_buffer;
+            }
+            else
+            {
+                element["columns"][4]["column"] = "ppm";
+                element["columns"][4]["value"]  = "1.0";
+            }
+
+            element["columns"][5]["column"] = "land_type";
+            element["columns"][5]["value"]  = land_type;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[parcel_id.asString()] = content;
+        }
+        // We test against non-auction properties because they don't count towards the page limit.
+        self->showNextButton(not_auction);
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//      Classifieds Search Panel      //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchClassifieds> t_panel_fs_search_classifieds("panel_ls_classifieds");
+
+FSPanelSearchClassifieds::FSPanelSearchClassifieds() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mStartSearch(0)
+, mResultsReceived(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchClassifieds::find, this));
+}
+
+FSPanelSearchClassifieds::~FSPanelSearchClassifieds()
+{
+}
+
+BOOL FSPanelSearchClassifieds::postBuild()
+{
+    mSearchComboBox = findChild<LLSearchComboBox>("classifieds_edit");
+    mSearchResults = getChild<LLScrollListCtrl>("search_results_classifieds");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchClassifieds::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchClassifieds::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+
+    mClassifiedsCategory = getChild<LLComboBox>("classifieds_category");
+    if (mClassifiedsCategory)
+    {
+        LLClassifiedInfo::cat_map::iterator iter;
+        mClassifiedsCategory->add(LLTrans::getString("all_categories"), LLSD(0));
+        mClassifiedsCategory->addSeparator();
+        for (iter = LLClassifiedInfo::sCategories.begin();
+             iter != LLClassifiedInfo::sCategories.end();
+             iter++)
+        {
+            mClassifiedsCategory->add(LLTrans::getString(iter->second), LLSD((S32)iter->first));
+        }
+    }
+    childSetAction("classifieds_next", boost::bind(&FSPanelSearchClassifieds::onBtnNext, this));
+    childSetAction("classifieds_back", boost::bind(&FSPanelSearchClassifieds::onBtnBack, this));
+
+    getChildView("classifieds_next")->setEnabled(FALSE);
+    getChildView("classifieds_back")->setEnabled(FALSE);
+
+    return TRUE;
+}
+
+void FSPanelSearchClassifieds::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchClassifieds::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+    if (text.size() == 0)
+    {
+        mSearchResults->setCommentText(LLTrans::getString("search_short"));
+        return;
+    }
+
+    static LLUICachedControl<bool> inc_pg("ShowPGClassifieds", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureClassifieds", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultClassifieds", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+    U32 category = mClassifiedsCategory->getValue().asInteger();
+    BOOL auto_renew = FALSE;
+    U32 flags = pack_classified_flags_request(auto_renew, inc_pg, inc_mature, inc_adult);
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessageFast(_PREHASH_DirClassifiedQuery);
+    gMessageSystem->nextBlockFast(_PREHASH_AgentData);
+    gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgentID);
+    gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgentSessionID);
+    gMessageSystem->nextBlockFast(_PREHASH_QueryData);
+    gMessageSystem->addUUIDFast(_PREHASH_QueryID, getQueryID());
+    gMessageSystem->addStringFast(_PREHASH_QueryText, text);
+    gMessageSystem->addU32Fast(_PREHASH_QueryFlags, flags);
+    gMessageSystem->addU32Fast(_PREHASH_Category, category);
+    gMessageSystem->addS32Fast(_PREHASH_QueryStart, mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off classified ad search request: " << getQueryID() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchClassifieds::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchClassifieds::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("classifieds_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchClassifieds::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("classifieds_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchClassifieds::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("classifieds_back")->setEnabled(FALSE);
+    getChildView("classifieds_next")->setEnabled(FALSE);
+}
+
+S32 FSPanelSearchClassifieds::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("classifieds_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchClassifieds::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedItem(mSearchResults->getSelectedValue(), FSFloaterSearch::SC_CLASSIFIED);
+    }
+}
+
+// static
+void FSPanelSearchClassifieds::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      classified_id;
+    std::string name;
+    U32         creation_date;
+    U32         expiration_date;
+    S32         price_for_listing;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchClassifieds* self = FSFloaterSearch::getSearchPanel<FSPanelSearchClassifieds>("panel_ls_classifieds");
+
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_CLASSIFIEDS_BANNEDWORD)
+        {
+            LLNotificationsUtil::add("SearchWordBanned");
+        }
+    }
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_classifieds");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("classifieds_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_CLASSIFIEDS_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+    }
+
+    bool found_one = false;
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("classifieds_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        msg->getUUID(   "QueryReplies", "ClassifiedID",     classified_id,  i);
+        msg->getString( "QueryReplies", "Name",             name,           i);
+        msg->getU32(    "QueryReplies", "CreationDate",     creation_date,  i);
+        msg->getU32(    "QueryReplies", "ExpirationDate",   expiration_date,i);
+        msg->getS32(    "QueryReplies", "PriceForListing",  price_for_listing,i);
+        if (classified_id.isNull())
+        {
+            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("classifieds_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+        }
+        else
+        {
+            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << classified_id << LL_ENDL;
+            search_results->setEnabled(TRUE);
+            found_one = true;
+
+            LLSD content;
+            LLSD element;
+
+            element["id"] = classified_id;
+
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"]   = "icon";
+            element["columns"][0]["value"]  = "icon_top_pick.tga";
+
+            element["columns"][1]["column"] = "classified_name";
+            element["columns"][1]["value"]  = name;
+
+            element["columns"][2]["column"] = "price";
+            element["columns"][2]["value"]  = price_for_listing;
+
+            content["name"] = name;
+
+            search_results->addElement(element, ADD_BOTTOM);
+            self->mResultsContent[classified_id.asString()] = content;
+        }
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//        Events Search Panel         //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchEvents> t_panel_fs_search_events("panel_ls_events");
+
+FSPanelSearchEvents::FSPanelSearchEvents() : FSSearchPanelBase()
+, mQueryID(nullptr)
+, mResultsReceived(0)
+, mStartSearch(0)
+, mDay(0)
+, mResultsContent()
+{
+    mCommitCallbackRegistrar.add("CommitSearch", boost::bind(&FSPanelSearchEvents::find, this));
+}
+
+FSPanelSearchEvents::~FSPanelSearchEvents()
+{
+}
+
+BOOL FSPanelSearchEvents::postBuild()
+{
+    mSearchComboBox = findChild<LLSearchComboBox>("events_edit");
+    mSearchResults = getChild<LLScrollListCtrl>("search_results_events");
+    mEventsMode = findChild<LLRadioGroup>("events_search_mode");
+    if (mSearchComboBox)
+    {
+        mSearchComboBox->setCommitCallback(boost::bind(&FSPanelSearchEvents::onBtnFind, this));
+        fillSearchComboBox(mSearchComboBox);
+    }
+    if (mSearchResults)
+    {
+        mSearchResults->setCommitCallback(boost::bind(&FSPanelSearchEvents::onSelectItem, this));
+        mSearchResults->setEnabled(FALSE);
+        mSearchResults->setCommentText(LLTrans::getString("no_results"));
+    }
+    if (mEventsMode)
+    {
+        mEventsMode->setCommitCallback(boost::bind(&FSPanelSearchEvents::onSearchModeChanged, this));
+        mEventsMode->selectFirstItem();
+    }
+
+    childSetAction("events_next", boost::bind(&FSPanelSearchEvents::onBtnNext, this));
+    childSetAction("events_back", boost::bind(&FSPanelSearchEvents::onBtnBack, this));
+    childSetAction("events_tomorrow", boost::bind(&FSPanelSearchEvents::onBtnTomorrow, this));
+    childSetAction("events_yesterday", boost::bind(&FSPanelSearchEvents::onBtnYesterday, this));
+    childSetAction("events_today", boost::bind(&FSPanelSearchEvents::onBtnToday, this));
+
+    getChildView("events_next")->setEnabled(FALSE);
+    getChildView("events_back")->setEnabled(FALSE);
+    getChildView("events_tomorrow")->setEnabled(FALSE);
+    getChildView("events_yesterday")->setEnabled(FALSE);
+    getChildView("events_today")->setEnabled(FALSE);
+    setDay(0);
+
+    return TRUE;
+}
+
+void FSPanelSearchEvents::focusDefaultElement()
+{
+    mSearchComboBox->focusTextEntry();
+}
+
+void FSPanelSearchEvents::find()
+{
+    std::string text = filterShortWords(mSearchComboBox->getSimple());
+
+    static LLUICachedControl<bool> inc_pg("ShowPGEvents", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureEvents", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultEvents", 0);
+    if (!(inc_pg || inc_mature || inc_adult))
+    {
+        LLNotificationsUtil::add("NoContentToSearch");
+        return;
+    }
+
+    U32 category = findChild<LLComboBox>("events_category")->getSelectedValue().asInteger();
+    U32 scope = DFQ_DATE_EVENTS;
+    if (gAgent.wantsPGOnly())
+    {
+        scope |= DFQ_PG_SIMS_ONLY;
+    }
+    bool mature_enabled = gAgent.canAccessMature();
+    bool adult_enabled = gAgent.canAccessAdult();
+    if (inc_pg)
+    {
+        scope |= DFQ_INC_PG;
+    }
+    if (inc_mature && mature_enabled)
+    {
+        scope |= DFQ_INC_MATURE;
+    }
+    if (inc_adult && adult_enabled)
+    {
+        scope |= DFQ_INC_ADULT;
+    }
+
+    std::ostringstream string;
+
+    if ("current" == childGetValue("events_search_mode").asString())
+    {
+        string << "u|";
+    }
+    else
+    {
+        string << mDay << "|";
+    }
+    string << category << "|";
+    string << text;
+
+    mResultsReceived = 0;
+    if (mQueryID.notNull())
+    {
+        mQueryID.setNull();
+    }
+    mQueryID.generate();
+
+    if (mStartSearch < 0)
+    {
+        mStartSearch = 0;
+    }
+
+    gMessageSystem->newMessage("DirFindQuery");
+    gMessageSystem->nextBlock("AgentData");
+    gMessageSystem->addUUID("AgentID", gAgentID);
+    gMessageSystem->addUUID("SessionID", gAgentSessionID);
+    gMessageSystem->nextBlock("QueryData");
+    gMessageSystem->addUUID("QueryID", getQueryID());
+    gMessageSystem->addString("QueryText", string.str());
+    gMessageSystem->addU32("QueryFlags", scope);
+    gMessageSystem->addS32("QueryStart", mStartSearch);
+    gAgent.sendReliableMessage();
+    LL_DEBUGS("Search") << "Firing off search request: " << getQueryID() << " Search Text: " << string.str() << LL_ENDL;
+
+    mSearchResults->deleteAllItems();
+    mSearchResults->setCommentText(LLTrans::getString("searching"));
+    mNumResultsReturned = 0;
+}
+
+void FSPanelSearchEvents::onBtnFind()
+{
+    std::string text = mSearchComboBox->getSimple();
+    if (!text.empty())
+    {
+        LLSearchHistory::getInstance()->addEntry(text);
+    }
+
+    resetSearch();
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnNext()
+{
+    mStartSearch += RESULT_PAGE_SIZE;
+    getChildView("events_back")->setEnabled(TRUE);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnBack()
+{
+    mStartSearch -= RESULT_PAGE_SIZE;
+    getChildView("events_back")->setEnabled(mStartSearch > 0);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnTomorrow()
+{
+    resetSearch();
+    setDay(mDay + 1);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnYesterday()
+{
+    resetSearch();
+    setDay(mDay - 1);
+
+    find();
+}
+
+void FSPanelSearchEvents::onBtnToday()
+{
+    resetSearch();
+    setDay(0);
+
+    find();
+}
+
+void FSPanelSearchEvents::resetSearch()
+{
+    mStartSearch = 0;
+    getChildView("events_back")->setEnabled(FALSE);
+    getChildView("events_next")->setEnabled(FALSE);
+}
+
+void FSPanelSearchEvents::onSearchModeChanged()
+{
+    if (mEventsMode->getValue().asString() == "current")
+    {
+        getChildView("events_yesterday")->setEnabled(FALSE);
+        getChildView("events_tomorrow")->setEnabled(FALSE);
+        getChildView("events_today")->setEnabled(FALSE);
+    }
+    else
+    {
+        getChildView("events_yesterday")->setEnabled(TRUE);
+        getChildView("events_tomorrow")->setEnabled(TRUE);
+        getChildView("events_today")->setEnabled(TRUE);
+    }
+}
+
+void FSPanelSearchEvents::setDay(S32 day)
+{
+    mDay = day;
+    struct tm* internal_time;
+
+    time_t utc = time_corrected();
+    utc += day * 24 * 60 * 60;
+    internal_time = utc_to_pacific_time(utc, is_daylight_savings());
+    std::string buffer = llformat("%d/%d", 1 + internal_time->tm_mon, internal_time->tm_mday);
+    childSetValue("events_date", buffer);
+}
+
+S32 FSPanelSearchEvents::showNextButton(S32 rows)
+{
+    bool show_next_button = (mResultsReceived > RESULT_PAGE_SIZE);
+    getChildView("events_next")->setEnabled(show_next_button);
+    if (show_next_button)
+    {
+        rows -= (mResultsReceived - RESULT_PAGE_SIZE);
+    }
+    return rows;
+}
+
+void FSPanelSearchEvents::onSelectItem()
+{
+    if (!mSearchResults)
+    {
+        return;
+    }
+    S32 event_id = mSearchResults->getSelectedValue();
+    FSFloaterSearch* search_instance = LLFloaterReg::findTypedInstance<FSFloaterSearch>("search");
+    if (search_instance)
+    {
+        search_instance->FSFloaterSearch::onSelectedEvent(event_id);
+    }
+}
+
+// static
+void FSPanelSearchEvents::processSearchReply(LLMessageSystem* msg, void**)
+{
+    LLUUID      agent_id;
+    LLUUID      query_id;
+    LLUUID      owner_id;
+    std::string name;
+    std::string date;
+
+    msg->getUUID("AgentData", "AgentID", agent_id);
+    msg->getUUID("QueryData", "QueryID", query_id);
+
+    // Not for us
+    if (agent_id != gAgentID)
+    {
+        return;
+    }
+    LL_DEBUGS("Search") << "received directory request - QueryID: " << query_id << " AgentID: " << agent_id << LL_ENDL;
+
+    FSPanelSearchEvents* self = FSFloaterSearch::getSearchPanel<FSPanelSearchEvents>("panel_ls_events");
+
+    // floater is closed or these are not results from our last request
+    if (!self || query_id != self->mQueryID)
+    {
+        return;
+    }
+
+    LLScrollListCtrl* search_results = self->getChild<LLScrollListCtrl>("search_results_events");
+
+    // Clear "Searching" label on first results
+    if (self->mNumResultsReturned++ == 0)
+    {
+        search_results->deleteAllItems();
+    }
+    // Check for status messages
+    if (msg->getNumberOfBlocks("StatusData"))
+    {
+        U32 status;
+        msg->getU32("StatusData", "Status", status);
+        if (status & STATUS_SEARCH_EVENTS_FOUNDNONE)
+        {
+            LLStringUtil::format_map_t map;
+            map["[TEXT]"] = self->getChild<LLUICtrl>("events_edit")->getValue().asString();
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("not_found", map));
+            return;
+        }
+        else if(status & STATUS_SEARCH_EVENTS_SHORTSTRING)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_short"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_BANNEDWORD)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_banned"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_SEARCHDISABLED)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_disabled"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_NODATEOFFSET)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_no_date_offset"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_NOCATEGORY)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_no_events_category"));
+            return;
+        }
+        else if (status & STATUS_SEARCH_EVENTS_NOQUERY)
+        {
+            search_results->setEnabled(FALSE);
+            search_results->setCommentText(LLTrans::getString("search_no_query"));
+            return;
+        }
+    }
+
+    S32 num_new_rows = msg->getNumberOfBlocks("QueryReplies");
+    if (num_new_rows == 0 && self->mResultsReceived == 0)
+    {
+        LLStringUtil::format_map_t map;
+        map["[TEXT]"] = self->getChild<LLUICtrl>("events_edit")->getValue().asString();
+        search_results->setEnabled(FALSE);
+        search_results->setCommentText(LLTrans::getString("not_found", map));
+    }
+
+    self->mResultsReceived += num_new_rows;
+    num_new_rows = self->showNextButton(num_new_rows);
+    static LLUICachedControl<bool> inc_pg("ShowPGEvents", 1);
+    static LLUICachedControl<bool> inc_mature("ShowMatureEvents", 0);
+    static LLUICachedControl<bool> inc_adult("ShowAdultEvents", 0);
+    bool found_one = false;
+
+    for (S32 i = 0; i < num_new_rows; i++)
+    {
+        U32 event_id;
+        U32 unix_time;
+        U32 event_flags;
+
+        msg->getUUID(   "QueryReplies", "OwnerID",      owner_id,   i);
+        msg->getString( "QueryReplies", "Name",         name,       i);
+        msg->getU32(    "QueryReplies", "EventID",      event_id,   i);
+        msg->getString( "QueryReplies", "Date",         date,       i);
+        msg->getU32(    "QueryReplies", "UnixTime",     unix_time,  i);
+        msg->getU32(    "QueryReplies", "EventFlags",   event_flags,i);
+
+        // Skip empty events...
+        if (owner_id.isNull())
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because of a nullptr owner result" << LL_ENDL;
+            continue;
+        }
+        // Skips events that don't match our scope...
+        if (((event_flags & (EVENT_FLAG_ADULT | EVENT_FLAG_MATURE)) == EVENT_FLAG_NONE) && !inc_pg)
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
+            continue;
+        }
+        if ((event_flags & EVENT_FLAG_MATURE) && !inc_mature)
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
+            continue;
+        }
+        if ((event_flags & EVENT_FLAG_ADULT) && !inc_adult)
+        {
+            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
+            continue;
+        }
+        search_results->setEnabled(TRUE);
+        found_one = true;
+
+        LLSD content;
+        LLSD element;
+
+        element["id"] = llformat("%u", event_id);
+
+        if (event_flags == EVENT_FLAG_ADULT)
+        {
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"] = "icon";
+            element["columns"][0]["value"] = "Icon_Legacy_Event_Adult";
+        }
+        else if (event_flags == EVENT_FLAG_MATURE)
+        {
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"] = "icon";
+            element["columns"][0]["value"] = "Icon_Legacy_Event_Mature";
+        }
+        else
+        {
+            element["columns"][0]["column"] = "icon";
+            element["columns"][0]["type"] = "icon";
+            element["columns"][0]["value"] = "Icon_Legacy_Event_PG";
+        }
+        element["columns"][1]["column"] = "name";
+        element["columns"][1]["value"] = name;
+
+        element["columns"][2]["column"] = "date";
+        element["columns"][2]["value"] = date;
+
+        element["columns"][3]["column"] = "time";
+        element["columns"][3]["value"] = llformat("%u", unix_time);
+
+        content["name"] = name;
+        content["event_id"] = (S32)event_id;
+
+        search_results->addElement(element, ADD_BOTTOM);
+        std::string event = llformat("%u", event_id);
+        self->mResultsContent[event] = content;
+    }
+    if (found_one)
+    {
+        search_results->selectFirstItem();
+        search_results->setFocus(TRUE);
+        self->onSelectItem();
+    }
+}
+
+////////////////////////////////////////
+//          WebSearch Panel           //
+////////////////////////////////////////
+
+static LLPanelInjector<FSPanelSearchWeb> t_panel_fs_search_web("panel_ls_web");
+
+FSPanelSearchWeb::FSPanelSearchWeb() : FSSearchPanelBase()
+, mWebBrowser(nullptr)
+, mResetFocusOnLoad(false)
+{
+    // Second Life grids use a different URL format now
+    mCategoryPaths = LLSD::emptyMap();
+    if (LLGridManager::getInstance()->isInSecondlife())
+    {
+        // declare a map that transforms a category name into
+        // the parameter list that is used to search that category
+        mCategoryPaths["people"]       = "collection_chosen=people";
+        mCategoryPaths["places"]       = "collection_chosen=places";
+        mCategoryPaths["events"]       = "collection_chosen=events";
+        mCategoryPaths["groups"]       = "collection_chosen=groups";
+        mCategoryPaths["destinations"] = "collection_chosen=destinations";
+
+        mCategoryPaths["classifieds"]  = "search_type=classified";
+        mCategoryPaths["wiki"]         = "search/wiki";                     // not sure if this is still a thing in the new search
+
+        mCategoryPaths["all"]          = mCategoryPaths["people"].asString() + "&" +
+                                        mCategoryPaths["places"].asString() + "&" +
+                                        mCategoryPaths["events"].asString() + "&" +
+                                        mCategoryPaths["groups"].asString() + "&" +
+                                        mCategoryPaths["destinations"].asString();
+    }
+    // OpenSim currently still uses the old URL format
+    else
+    {
+        // declare a map that transforms a category name into
+        // the URL suffix that is used to search that category
+        mCategoryPaths["all"]          = "search";
+        mCategoryPaths["people"]       = "search/people";
+        mCategoryPaths["places"]       = "search/places";
+        mCategoryPaths["events"]       = "search/events";
+        mCategoryPaths["groups"]       = "search/groups";
+        mCategoryPaths["wiki"]         = "search/wiki";
+        mCategoryPaths["destinations"] = "destinations";
+        mCategoryPaths["classifieds"]  = "classifieds";
+    }
+}
+
+BOOL FSPanelSearchWeb::postBuild()
+{
+    mWebBrowser = getChild<LLMediaCtrl>("search_browser");
+    return TRUE;
+}
+
+void FSPanelSearchWeb::loadURL(const SearchQuery &p)
+{
+    if (!mWebBrowser || !p.validateBlock())
+    {
+        return;
+    }
+
+    // CATEGORY is no longer used as part of the path on Second Life grids
+    LLSD subs = LLSD().with("CATEGORY", "");
+
+    // on OpenSim grids it probably is currently still being used, so keep the old behavior
+    if (!LLGridManager::getInstance()->isInSecondlife())
+    {
+        // work out the subdir to use based on the requested category
+        LLSD subs = LLSD().with("CATEGORY", (mCategoryPaths.has(p.category.getValue()) ? mCategoryPaths[p.category.getValue()].asString() : mCategoryPaths["all"].asString()));
+    }
+
+    // add the search query string
+    subs["QUERY"] = LLURI::escape(p.query);
+
+    // add the permissions token that login.cgi gave us
+    // We use "search_token", and fallback to "auth_token" if not present.
+    LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
+    if (search_token.asString().empty())
+    {
+        search_token = LLLoginInstance::getInstance()->getResponse("auth_token");
+    }
+    subs["AUTH_TOKEN"] = search_token.asString();
+
+    // add the user's preferred maturity (can be changed via prefs)
+    std::string maturity;
+
+    // on Second Life grids, the maturity level is now a "&maturity" parameter that's not in the provided search URL
+    if (LLGridManager::getInstance()->isInSecondlife())
+    {
+        if (gAgent.prefersAdult())
+        {
+            maturity = "gma";  // PG,Mature,Adult
+        }
+        else if (gAgent.prefersMature())
+        {
+            maturity = "gm";  // PG,Mature
+        }
+        else
+        {
+            maturity = "g";  // PG
+        }
+
+        // not used on the SL search anymore, so clear out the respective parameter
+        subs["MATURITY"] = "";
+    }
+    // OpenSim probably still uses the old maturity variant, so keep the old behavior here
+    else
+    {
+        if (gAgent.prefersAdult())
+        {
+            maturity = "42";  // PG,Mature,Adult
+        }
+        else if (gAgent.prefersMature())
+        {
+            maturity = "21";  // PG,Mature
+        }
+        else
+        {
+            maturity = "13";  // PG
+        }
+        subs["MATURITY"] = maturity;
+    }
+
+    // add the user's god status
+    subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+
+    // Get the search URL and expand all of the substitutions
+    // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
+
+    // add the maturity and category variables to the new Second Life search URL
+    std::string url = gAgent.getRegion() != nullptr ? gAgent.getRegion()->getSearchServerURL()
+        : gSavedSettings.getString(LLGridManager::getInstance()->isInOpenSim() ? "OpenSimSearchURL" : "SearchURL");
+    if (LLGridManager::getInstance()->isInSecondlife())
+    {
+        url.append("&maturity=" + maturity + "&" + mCategoryPaths[p.category.getValue()].asString());
+    }
+
+    url = LLWeb::expandURLSubstitutions(url, subs);
+
+    // Finally, load the URL in the webpanel
+    mWebBrowser->navigateTo(url, HTTP_CONTENT_TEXT_HTML);
+}
+
+void FSPanelSearchWeb::focusDefaultElement()
+{
+    mWebBrowser->setFocus(TRUE);
+}
+
+void FSPanelSearchWeb::draw()
+{
+    if (mResetFocusOnLoad)
+    {
+        focusDefaultElement();
+        mResetFocusOnLoad = false;
+    }
+
+    FSSearchPanelBase::draw();
+}
+
+////////////////////////////////////////
+//           Local functions          //
+////////////////////////////////////////
+
+std::string filterShortWords(std::string query_string)
+{
+    if (query_string.length() < 1)
+    {
+        return "";
+    }
+
+    std::string final_query;
+    bool filtered = false;
+    boost::char_separator<char> sep(" ");
+    boost::tokenizer<boost::char_separator<char> > tokens(query_string, sep);
+    boost::tokenizer<boost::char_separator<char> >::iterator iter = tokens.begin();
+    boost::tokenizer<boost::char_separator<char> >::iterator last = tokens.end();
+    boost::tokenizer<boost::char_separator<char> >::iterator temp;
+    for (; iter != last; ++iter)
+    {
+        if ((*iter).length() > MIN_SEARCH_STRING_SIZE)
+        {
+            final_query.append((*iter));
+            temp = iter; ++temp;
+            if (temp != last)
+            {
+                final_query.append(" ");
+            }
+        }
+        else
+        {
+            filtered = true;
+        }
+    }
+
+    if (filtered)
+    {
+        LLSD args = LLSD().with("FINALQUERY", final_query);
+        LLNotificationsUtil::add("SeachFilteredOnShortWords", args);
+    }
+
+    return final_query;
+}
+
+void fillSearchComboBox(LLSearchComboBox* search_combo)
+{
+    if (search_combo == nullptr)
+    {
+        return;
+    }
+
+    LLSearchHistory::getInstance()->load();
+
+    LLSearchHistory::search_history_list_t search_list =
+    LLSearchHistory::getInstance()->getSearchHistoryList();
+    LLSearchHistory::search_history_list_t::const_iterator it = search_list.begin();
+    for ( ; search_list.end() != it; ++it)
+    {
+        LLSearchHistory::LLSearchHistoryItem item = *it;
+        search_combo->add(item.search_query);
+    }
+}
diff --git a/indra/newview/fsfloatersearch.h b/indra/newview/fsfloatersearch.h
new file mode 100644
index 00000000000..77ad02e5ce4
--- /dev/null
+++ b/indra/newview/fsfloatersearch.h
@@ -0,0 +1,416 @@
+/**
+ * @file fsfloatersearch.h
+ * @brief Firestorm search definitions
+ *
+ * $LicenseInfo:firstyear=2012&license=fsviewerlgpl$
+ * Phoenix Firestorm Viewer Source Code
+ * Copyright (C) 2012, Cinder Roxley <cinder.roxley@phoenixviewer.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
+ * http://www.firestormviewer.org
+ * $/LicenseInfo$
+ */
+
+#ifndef FS_FLOATERSEARCH_H
+#define FS_FLOATERSEARCH_H
+
+#include "llfloater.h"
+#include "lliconctrl.h"
+#include "lltexteditor.h"
+#include "lltexturectrl.h"
+#include "llremoteparcelrequest.h"
+#include "llavatarpropertiesprocessor.h"
+#include "llgroupmgr.h"
+#include "llavatarnamecache.h"
+#include "llmediactrl.h"
+#include "llradiogroup.h"
+#include "llsearchcombobox.h"
+#include "llscrolllistctrl.h"
+#include "lltabcontainer.h"
+
+class FSSearchRemoteParcelInfoObserver;
+class LLAvatarPropertiesObserver;
+class LLGroupMgrObserver;
+class LLSearchEditor;
+class LLSearchComboBox;
+class FSFloaterSearch;
+class FSScrollListCtrl;
+
+struct SearchQuery : public LLInitParam::Block<SearchQuery>
+{
+    Optional<std::string> category;
+    Optional<std::string> query;
+
+    SearchQuery();
+};
+
+///////////////////////////////
+//       Search Panels       //
+///////////////////////////////
+
+class FSSearchPanelBase : public LLPanel
+{
+public:
+    FSSearchPanelBase() : LLPanel() { }
+    virtual ~FSSearchPanelBase() = default;
+    virtual void focusDefaultElement() { }
+};
+
+class FSPanelSearchPeople : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchPeople();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+protected:
+    const S32& getNumResultsReturned() const { return mNumResultsReturned; };
+    const S32& getNumResultsReceived() const { return mResultsReceived; };
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchPeople();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    void onAvatarNameCallback(const LLUUID& id, const LLAvatarName& av_name);
+
+    typedef boost::signals2::connection avatar_name_callback_connection_t;
+    avatar_name_callback_connection_t mAvatarNameCallbackConnection;
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    FSFloaterSearch*        mParent;
+    LLSearchComboBox*       mSearchComboBox;
+    LLScrollListCtrl*       mSearchResults;
+};
+
+class FSPanelSearchGroups : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchGroups();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchGroups();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    FSFloaterSearch*    mParent;
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+};
+
+class FSPanelSearchPlaces : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchPlaces();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchPlaces();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    FSFloaterSearch*    mParent;
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+    LLComboBox*         mPlacesCategory;
+};
+
+class FSPanelSearchLand : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchLand();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchLand();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    FSFloaterSearch*    mParent;
+    LLLineEditor*       mPriceEditor;
+    LLLineEditor*       mAreaEditor;
+    LLScrollListCtrl*   mSearchResults;
+};
+
+class FSPanelSearchClassifieds : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchClassifieds();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchClassifieds();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+
+    void find();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mStartSearch;
+    S32         mResultsReceived;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    FSFloaterSearch*    mParent;
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+    LLComboBox*         mClassifiedsCategory;
+};
+
+class FSPanelSearchEvents : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchEvents();
+    static void processSearchReply(LLMessageSystem* msg, void**);
+
+    /*virtual*/ void focusDefaultElement();
+
+private:
+    /*virtual*/ BOOL postBuild();
+    virtual ~FSPanelSearchEvents();
+
+    void onBtnFind();
+    void onSelectItem();
+    void onBtnNext();
+    void onBtnBack();
+    void onBtnTomorrow();
+    void onBtnYesterday();
+    void onBtnToday();
+
+    void find();
+    void setDay(S32 day);
+    void onSearchModeChanged();
+    void resetSearch();
+    S32  showNextButton(S32);
+
+    const LLUUID& getQueryID() const { return mQueryID; }
+
+    S32         mNumResultsReturned;
+    S32         mResultsReceived;
+    S32         mStartSearch;
+    S32         mDay;
+    LLSD        mResultsContent;
+    LLUUID      mQueryID;
+
+    FSFloaterSearch*    mParent;
+    LLSearchComboBox*   mSearchComboBox;
+    LLScrollListCtrl*   mSearchResults;
+    LLRadioGroup*       mEventsMode;
+};
+
+class FSPanelSearchWeb : public FSSearchPanelBase
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    FSPanelSearchWeb();
+    /*virtual*/ BOOL postBuild();
+    void loadURL(const SearchQuery &query);
+    /*virtual*/ void focusDefaultElement();
+    /*virtual*/ void draw();
+    void resetFocusOnLoad() { mResetFocusOnLoad = true; }
+
+private:
+    virtual ~FSPanelSearchWeb() {};
+
+    LLMediaCtrl*    mWebBrowser;
+    LLSD            mCategoryPaths;
+
+    bool            mResetFocusOnLoad;
+};
+
+class FSFloaterSearch : public LLFloater
+{
+    LOG_CLASS(FSFloaterSearch);
+public:
+    typedef enum e_search_category
+    {
+        SC_AVATAR,
+        SC_GROUP,
+        SC_PLACE,
+        SC_CLASSIFIED
+    }   ESearchCategory;
+
+    struct _Params : public LLInitParam::Block<_Params, LLFloater::Params>
+    {
+        Optional<SearchQuery> search;
+    };
+
+    typedef LLSDParamAdapter<_Params> Params;
+
+    FSFloaterSearch(const Params& key);
+    ~FSFloaterSearch();
+    void onOpen(const LLSD& key);
+    BOOL postBuild();
+
+    void avatarNameUpdatedCallback(const LLUUID& id, const LLAvatarName& av_name);
+    void groupNameUpdatedCallback(const LLUUID& id, const std::string& name, bool is_group);
+    void onSelectedItem(const LLUUID& selected_item, ESearchCategory type);
+    void onSelectedEvent(const S32 selected_event);
+    void displayParcelDetails(const LLParcelData& parcel_data);
+    void displayClassifiedDetails(LLAvatarClassifiedInfo*& c_info);
+    void displayAvatarDetails(LLAvatarData*& avatar_data);
+    void displayGroupDetails(LLGroupMgrGroupData*& group_data);
+    void displayEventDetails(U32 eventId,
+                             F64 eventEpoch,
+                             const std::string& eventDateStr,
+                             const std::string &eventName,
+                             const std::string &eventDesc,
+                             const std::string &simName,
+                             U32 eventDuration,
+                             U32 eventFlags,
+                             U32 eventCover,
+                             LLVector3d eventGlobalPos);
+    void displayEventParcelImage(const LLParcelData& parcel_data);
+    void setLoadingProgress(bool started);
+
+    template <class T>
+    static T* getSearchPanel(const std::string& panel_name);
+
+private:
+    virtual void onClose(bool app_quitting);
+    const LLUUID& getSelectedID() { return mSelectedID; }
+    LLVector3d  mParcelGlobal;
+    LLUUID      mSelectedID;
+    U32         mEventID;
+    bool        mHasSelection;
+
+    void resetVerbs();
+    void flushDetails();
+    void onTabChange();
+    void onBtnPeopleProfile();
+    void onBtnPeopleIM();
+    void onBtnPeopleFriend();
+    void onBtnGroupProfile();
+    void onBtnGroupChat();
+    void onBtnGroupJoin();
+    void onBtnEventReminder();
+    void onBtnTeleport();
+    void onBtnMap();
+
+    void regionHandleCallback(U64 region_handle, LLVector3d pos_global);
+
+    FSSearchRemoteParcelInfoObserver* mRemoteParcelObserver;
+    FSSearchRemoteParcelInfoObserver* mRemoteParcelEventLocationObserver;
+    LLAvatarPropertiesObserver* mAvatarPropertiesObserver;
+    LLGroupMgrObserver* mGroupPropertiesRequest;
+
+    FSPanelSearchPeople*    mPanelPeople;
+    FSPanelSearchGroups*    mPanelGroups;
+    FSPanelSearchPlaces*    mPanelPlaces;
+    FSPanelSearchEvents*    mPanelEvents;
+    FSPanelSearchLand*      mPanelLand;
+    FSPanelSearchClassifieds* mPanelClassifieds;
+    FSPanelSearchWeb*       mPanelWeb;
+
+    LLPanel*        mDetailsPanel;
+    LLTextEditor*   mDetailTitle;
+    LLTextEditor*   mDetailDesc;
+    LLTextEditor*   mDetailAux1;
+    LLTextEditor*   mDetailAux2;
+    LLTextEditor*   mDetailLocation;
+    LLTextureCtrl*  mDetailSnapshot;
+    LLTextureCtrl*  mDetailSnapshotParcel;
+    LLIconCtrl*     mDetailMaturity;
+    LLTabContainer* mTabContainer;
+};
+
+#endif // FS_FLOATERSEARCH_H
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index 4bc481b21ec..04aad5aa0f4 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -168,8 +168,7 @@ bool LLEventNotifier::handleResponse(U32 eventId, const LLSD& notification, cons
 
 bool LLEventNotifier::add(const LLEventStruct& event)
 {
-    if (mNewEventSignal(event)) { return false; }
-
+    if (mNewEventSignal(event)) return false;
     LLEventNotification *new_enp = new LLEventNotification(event.eventId, event.eventEpoch, event.eventDateStr, event.eventName);
 
     LL_INFOS() << "Add event " << event.eventName << " id " << event.eventId << " date " << event.eventDateStr << LL_ENDL;
@@ -208,21 +207,21 @@ void LLEventNotifier::processEventInfoReply(LLMessageSystem *msg, void **)
     U32 event_time_utc;
 
     msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
-    msg->getU32Fast(_PREHASH_EventData, _PREHASH_EventID, event_id);
-    msg->getStringFast(_PREHASH_EventData, _PREHASH_Name, event_name);
-    msg->getStringFast(_PREHASH_EventData, _PREHASH_Date, eventd_date);
-    msg->getU32Fast(_PREHASH_EventData, _PREHASH_DateUTC, event_time_utc);
+    msg->getU32("EventData", "EventID", event_id);
+    msg->getString("EventData", "Name", event_name);
+    msg->getString("EventData", "Date", eventd_date);
+    msg->getU32("EventData", "DateUTC", event_time_utc);
 
     LLEventStruct event(event_id, (F64)event_time_utc, eventd_date, event_name);
-    msg->getString(_PREHASH_EventData, _PREHASH_Creator, event.creator);
-    msg->getString(_PREHASH_EventData, _PREHASH_Category, event.category);
-    msg->getString(_PREHASH_EventData, _PREHASH_Desc, event.desc);
-    msg->getU32(_PREHASH_EventData, _PREHASH_Duration, event.duration);
-    msg->getU32(_PREHASH_EventData, _PREHASH_Cover, event.cover);
-    msg->getU32(_PREHASH_EventData, _PREHASH_Amount, event.amount);
-    msg->getString(_PREHASH_EventData, _PREHASH_SimName, event.simName);
-    msg->getVector3d(_PREHASH_EventData, _PREHASH_GlobalPos, event.globalPos);
-    msg->getU32(_PREHASH_EventData, _PREHASH_EventFlags, event.flags);
+    msg->getString("EventData", "Creator", event.creator);
+    msg->getString("EventData", "Category", event.category);
+    msg->getString("EventData", "Desc", event.desc);
+    msg->getU32("EventData", "Duration", event.duration);
+    msg->getU32("EventData", "Cover", event.cover);
+    msg->getU32("EventData", "Amount", event.amount);
+    msg->getString("EventData", "SimName", event.simName);
+    msg->getVector3d("EventData", "GlobalPos", event.globalPos);
+    msg->getU32("EventData", "EventFlags", event.flags);
 
     gEventNotifier.add(event);
 }
@@ -247,22 +246,29 @@ void LLEventNotifier::load(const LLSD& event_options)
             is_iso8601_date = true;
         }
 
-        std::string dateStr = response["event_date"].asString();
-
         if (is_iso8601_date)
         {
-            std::string iso8601date =
-                "[" + LLTrans::getString("LTimeYear") + "]-[" + LLTrans::getString("LTimeMthNum") + "]-["
-                    + LLTrans::getString("LTimeDay") + "] [" + LLTrans::getString("LTimeHour") + "]:["
-                    + LLTrans::getString("LTimeMin") + "]:[" + LLTrans::getString("LTimeSec") + "]";
+            std::string dateStr;
+
+            dateStr = "[" + LLTrans::getString("LTimeYear") + "]-["
+                + LLTrans::getString("LTimeMthNum") + "]-["
+                + LLTrans::getString("LTimeDay") + "] ["
+                + LLTrans::getString("LTimeHour") + "]:["
+                + LLTrans::getString("LTimeMin") + "]:["
+                + LLTrans::getString("LTimeSec") + "]";
 
             LLSD substitution;
             substitution["datetime"] = date;
-            LLStringUtil::format(iso8601date, substitution);
-            dateStr = iso8601date;
-        }
+            LLStringUtil::format(dateStr, substitution);
 
-        add(LLEventStruct(response["event_id"].asInteger(), response["event_date_ut"], dateStr, response["event_name"].asString()));
+            LLEventStruct event(response["event_id"].asInteger(), response["event_date_ut"], dateStr, response["event_name"].asString());
+            add(event);
+        }
+        else
+        {
+            LLEventStruct event(response["event_id"].asInteger(), response["event_date_ut"], response["event_date"].asString(), response["event_name"].asString());
+            add(event);
+        }
     }
 }
 
@@ -305,11 +311,11 @@ void LLEventNotifier::serverPushRequest(U32 event_id, bool add)
 }
 
 
-LLEventNotification::LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName) :
+LLEventNotification::LLEventNotification(U32 eventId, F64 eventEpoch, std::string eventDateStr, std::string eventName) :
     mEventID(eventId),
-    mEventName(eventName),
+    mEventName(std::move(eventName)),
     mEventDateEpoch(eventEpoch),
-    mEventDateStr(eventDateStr)
+    mEventDateStr(std::move(eventDateStr))
 {
 
 }
diff --git a/indra/newview/lleventnotifier.h b/indra/newview/lleventnotifier.h
index 14ced4908d8..f30039f51b0 100644
--- a/indra/newview/lleventnotifier.h
+++ b/indra/newview/lleventnotifier.h
@@ -27,6 +27,7 @@
 #ifndef LL_LLEVENTNOTIFIER_H
 #define LL_LLEVENTNOTIFIER_H
 
+#include <utility>
 #include "llframetimer.h"
 #include "v3dmath.h"
 
@@ -47,9 +48,9 @@ typedef struct event_st{
     std::string simName;
     LLVector3d globalPos;
     U32 flags = 0;
-    event_st(U32 id, F64 epoch, const std::string& date_str, const std::string& name)
-        : eventId(id), eventEpoch(epoch), eventDateStr(date_str), eventName(name){}
-    event_st(){}
+    event_st(U32 id, F64 epoch, std::string date_str, std::string name)
+        : eventId(id), eventEpoch(epoch), eventDateStr(std::move(date_str)), eventName(std::move(name)){}
+    event_st() = default;
 } LLEventStruct;
 
 class LLEventNotifier
@@ -90,12 +91,12 @@ class LLEventNotifier
 class LLEventNotification
 {
 public:
-    LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName);
+    LLEventNotification(U32 eventId, F64 eventEpoch, std::string eventDateStr, std::string eventName);
 
 
     U32                 getEventID() const              { return mEventID; }
     const std::string   &getEventName() const           { return mEventName; }
-    bool                isValid() const                 { return mEventID > 0 && mEventDateEpoch != 0 && mEventName.size() > 0; }
+    bool                isValid() const                 { return mEventID > 0 && mEventDateEpoch != 0 && !mEventName.empty(); }
     const F64           &getEventDateEpoch() const      { return mEventDateEpoch; }
     const std::string   &getEventDateStr() const        { return mEventDateStr; }
 
diff --git a/indra/newview/llfloaterdirectory.cpp b/indra/newview/llfloaterdirectory.cpp
deleted file mode 100644
index 1df46a66fdb..00000000000
--- a/indra/newview/llfloaterdirectory.cpp
+++ /dev/null
@@ -1,1219 +0,0 @@
-/*
- * @file llfloaterdirectory.cpp
- * @brief Legacy search facility
- *
- * Copyright (c) 2014-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llfloaterdirectory.h"
-
-// llmessage
-#include "lleventflags.h"
-#include "llqueryflags.h"
-#include "message.h"
-
-// llui
-#include "llfloaterreg.h"
-#include "lllayoutstack.h"
-#include "llpanel.h"
-#include "llresmgr.h"
-#include "llscrolllistctrl.h"
-#include "lltabcontainer.h"
-#include "lltextbase.h"
-#include "lltrans.h"
-
-// newview
-#include "llagent.h"
-#include "llpanelsearchbase.h"
-#include "llpanelsearchweb.h"
-#include "llproductinforequest.h"
-#include "llviewercontrol.h"
-
-SearchQuery::SearchQuery()
-:   category("category", ""),
-    collection("collection", ""),
-    query("query")
-{}
-
-static const std::array<std::string, 6> sSearchPanels{ {"panel_search_people", "panel_search_groups", "panel_search_places", "panel_search_classifieds", "panel_search_events", "panel_search_landsales"} };
-static const std::array<std::string, 5> sDetailPanels{ {"detail_avatar", "detail_group", "detail_place", "detail_classified", "detail_event"} };
-
-LLFloaterDirectory::LLFloaterDirectory(const Params& key)
-    : LLFloater(key)
-    , mCurrentResultType(SE_UNDEFINED)
-    , mCurrentQuery()
-    , mResultStart(0)
-    , mNumResultsReceived(0)
-    , mQueryID()
-    , mTabContainer(nullptr)
-    , mPanelWeb(nullptr)
-    , mResultList(nullptr)
-    , mResultsStatus(nullptr)
-{
-}
-
-LLFloaterDirectory::~LLFloaterDirectory()
-{
-}
-
-BOOL LLFloaterDirectory::postBuild()
-{
-    mResultList = findChild<LLScrollListCtrl>("results");
-    mResultList->setCommitCallback(boost::bind(&LLFloaterDirectory::onCommitSelection, this));
-    for (std::string panel_name: sSearchPanels)
-    {
-        LLPanelSearch* panel = static_cast<LLPanelSearch*>(findChild<LLUICtrl>(panel_name));
-        if (panel)
-            panel->setSearchFloater(this);
-    }
-    mPanelWeb = findChild<LLPanelSearchWeb>("panel_search_web");
-    mTabContainer = findChild<LLTabContainer>("search_tabs");
-    mTabContainer->setCommitCallback(boost::bind(&LLFloaterDirectory::onTabChanged, this));
-    setProgress(false);
-    mResultsStatus = findChild<LLTextBase>("results_status");
-    getChild<LLButton>("PageUp")->setCommitCallback(boost::bind(&LLFloaterDirectory::choosePage, this, _1));
-    getChild<LLButton>("PageDn")->setCommitCallback(boost::bind(&LLFloaterDirectory::choosePage, this, _1));
-    showDetailPanel(LLStringUtil::null); // hide all the panels
-    paginate();
-
-    if (!mTabContainer->selectTab(gSavedSettings.getS32("AlchemyLastDirectoryTab")))
-    {
-        mTabContainer->selectFirstTab();
-    }
-
-    return LLFloater::postBuild();
-}
-
-void LLFloaterDirectory::onOpen(const LLSD& key)
-{
-    Params p(key);
-    mPanelWeb->loadUrl(p.search);
-    if (key.has("query"))
-    {
-        mTabContainer->selectTabPanel(mPanelWeb);
-    }
-    onTabChanged();
-}
-
-void LLFloaterDirectory::onClose(bool app_quitting)
-{
-    if (mTabContainer)
-    {
-        gSavedSettings.setS32("AlchemyLastDirectoryTab", mTabContainer->getCurrentPanelIndex());
-    }
-}
-
-void LLFloaterDirectory::setProgress(bool working)
-{
-    getChild<LLUICtrl>("loading")->setVisible(working);
-}
-
-void LLFloaterDirectory::setResultsComment(const std::string& message)
-{
-    mResultList->setCommentText(message);
-}
-
-void LLFloaterDirectory::onTabChanged()
-{
-    LLPanel* active_panel = mTabContainer->getCurrentPanel();
-    bool show_detail = active_panel != mPanelWeb;
-    findChild<LLLayoutStack>("results_stack")->setVisible(show_detail);
-    findChild<LLButton>("PageUp")->setVisible(show_detail);
-    findChild<LLButton>("PageDn")->setVisible(show_detail);
-    mResultsStatus->setVisible(show_detail);
-}
-
-void LLFloaterDirectory::onCommitSelection()
-{
-    switch (mCurrentResultType)
-    {
-        case SE_PEOPLE:
-        {
-            LLSD params;
-            params["avatar_id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_avatar")->onOpen(params);
-            showDetailPanel("detail_avatar");
-            break;
-        }
-        case SE_GROUPS:
-        {
-            LLSD params;
-            params["group_id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_group")->onOpen(params);
-            showDetailPanel("detail_group");
-            break;
-        }
-        case SE_LANDSALES:
-        case SE_PLACES:
-        {
-            LLSD params;
-            params["type"] = "remote_place";
-            params["id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_place")->onOpen(params);
-            showDetailPanel("detail_place");
-            break;
-        }
-        case SE_CLASSIFIEDS:
-        {
-            LLSD params;
-            params["classified_id"] = mResultList->getSelectedValue().asUUID();
-            getChild<LLPanel>("detail_classified")->onOpen(params);
-            showDetailPanel("detail_classified");
-            break;
-        }
-        case SE_EVENTS:
-        {
-            getChild<LLPanel>("detail_event")->onOpen(mResultList->getSelectedValue().asInteger());
-            showDetailPanel("detail_event");
-            break;
-        }
-        case SE_UNDEFINED:
-        default:
-            LL_WARNS("Search") << "Unhandled search mode: " << mCurrentResultType << LL_ENDL;
-            break;
-    }
-}
-
-void LLFloaterDirectory::paginate()
-{
-    if (mNumResultsReceived)
-    {
-        LLStringUtil::format_map_t args;
-        std::string total_str;
-        LLResMgr::getInstance()->getIntegerString(total_str, mResultStart + mNumResultsReceived - 1);
-        args["TOTAL"] = total_str;
-        args["VISIBLE_END"] = total_str;
-        total_str = LLStringUtil::null;
-        LLResMgr::getInstance()->getIntegerString(total_str, mResultStart + 1);
-        args["VISIBLE_BEGIN"] = total_str;
-        mResultsStatus->setText(getString((mNumResultsReceived > mCurrentQuery.results_per_page)
-                                          ? "result_spillover" : "result_count",
-                                          args));
-    }
-    else
-        mResultsStatus->setText(getString("no_results"));
-    childSetEnabled("PageUp", mNumResultsReceived > mCurrentQuery.results_per_page);
-    childSetEnabled("PageDn", mResultStart > 0);
-}
-
-void LLFloaterDirectory::choosePage(LLUICtrl* ctrl)
-{
-    if (ctrl->getName() == "PageUp")
-        mResultStart += mCurrentQuery.results_per_page;
-    else if (ctrl->getName() == "PageDn")
-        mResultStart -= mCurrentQuery.results_per_page;
-    else
-    {
-        LL_WARNS("Search") << "Unknown control: " << ctrl->getName() << LL_ENDL;
-        return; // Fuck you, you lose.
-    }
-    queryDirectory(mCurrentQuery, false);
-}
-
-void LLFloaterDirectory::showDetailPanel(const std::string& panel_name)
-{
-    for (const std::string& panel_itr: sDetailPanels)
-    {
-        getChild<LLPanel>(panel_itr)->setVisible(panel_itr == panel_name);
-    }
-}
-
-void LLFloaterDirectory::rebuildResultList()
-{
-    mResultList->clearColumns();
-    switch (mCurrentResultType)
-    {
-        case SE_PEOPLE:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 1.f;
-            mResultList->addColumn(name);
-            break;
-        }
-        case SE_GROUPS:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.72f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params members;
-            members.name = "members";
-            members.header.label = "Members";
-            members.width.relative_width = 0.25f;
-            mResultList->addColumn(members);
-
-            LLScrollListColumn::Params score;
-            score.name = "score";
-            score.header.label = "Score";
-            score.width.relative_width = 0.03f;
-            mResultList->addColumn(score);
-            break;
-        }
-        case SE_PLACES:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.81f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params dwell;
-            dwell.name = "dwell";
-            dwell.header.label = "Traffic";
-            dwell.width.relative_width = 0.19f;
-            mResultList->addColumn(dwell);
-            break;
-        }
-        case SE_LANDSALES:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.45f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params price;
-            price.name="price";
-            price.header.label="Price";
-            price.width.relative_width = 0.1f;
-            mResultList->addColumn(price);
-
-            LLScrollListColumn::Params area;
-            area.name="area";
-            area.header.label="Area";
-            area.width.relative_width = 0.1f;
-            mResultList->addColumn(area);
-
-            LLScrollListColumn::Params ppm;
-            ppm.name="ppm";
-            ppm.header.label="L$/m";
-            ppm.width.relative_width = 0.1f;
-            mResultList->addColumn(ppm);
-
-            LLScrollListColumn::Params type;
-            type.name="type";
-            type.header.label="Type";
-            type.width.relative_width = 0.2f;
-            mResultList->addColumn(type);
-            break;
-        }
-        case SE_CLASSIFIEDS:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.7f;
-            mResultList->addColumn(name);
-
-            LLScrollListColumn::Params price;
-            price.name="price";
-            price.header.label="Price";
-            price.width.relative_width = 0.3f;
-            mResultList->addColumn(price);
-            break;
-        }
-        case SE_EVENTS:
-        {
-            LLScrollListColumn::Params icon;
-            icon.name = "icon";
-            icon.width.pixel_width = 20;
-            mResultList->addColumn(icon);
-
-            LLScrollListColumn::Params name;
-            name.name = "name";
-            name.header.label = "Name";
-            name.width.relative_width = 0.65f;
-            mResultList->addColumn(name);
-
-            //LLScrollListColumn::Params time;
-            //time.name="time";
-            //time.header.label="Time";
-            //time.width.relative_width = 0.2f;
-            //mResultList->addColumn(time);
-
-            LLScrollListColumn::Params date;
-            date.name="date";
-            date.header.label="Date";
-            date.width.relative_width = 0.3f;
-            mResultList->addColumn(date);
-            break;
-        }
-        case SE_UNDEFINED:
-        default:
-            LL_WARNS("Search") << "Unhandled search mode: " << mCurrentResultType << LL_ENDL;
-            break;
-
-    }
-}
-
-void LLFloaterDirectory::queryDirectory(const LLDirQuery& query, bool new_search)
-{
-    if (mCurrentResultType != query.type)
-    {
-        mCurrentResultType = query.type;
-        rebuildResultList();
-    }
-    mResultList->clearRows();
-
-    if (new_search)
-    {
-        mResultStart = 0;
-    }
-
-    mCurrentQuery = query;
-    mNumResultsReceived = 0;
-    mQueryID.generate();
-
-    switch (mCurrentResultType)
-    {
-        case SE_PEOPLE:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirFindQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, DFQ_PEOPLE);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_GROUPS:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirFindQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_EVENTS:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirFindQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << " Search Text: " << query.text << LL_ENDL;
-            break;
-        }
-        case SE_PLACES:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirPlacesQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addS8Fast(_PREHASH_Category, query.category_char);
-            // TODO: Search filter by region name.
-            gMessageSystem->addStringFast(_PREHASH_SimName, "");
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_LANDSALES:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirLandQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addU32Fast(_PREHASH_SearchType, query.category_int);
-            gMessageSystem->addS32Fast(_PREHASH_Price, query.price);
-            gMessageSystem->addS32Fast(_PREHASH_Area, query.area);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << query.category_int << LL_ENDL;
-            break;
-        }
-        case SE_CLASSIFIEDS:
-        {
-            gMessageSystem->newMessageFast(_PREHASH_DirClassifiedQuery);
-            gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-            gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-            gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-            gMessageSystem->nextBlockFast(_PREHASH_QueryData);
-            gMessageSystem->addUUIDFast(_PREHASH_QueryID, mQueryID);
-            gMessageSystem->addStringFast(_PREHASH_QueryText, query.text);
-            gMessageSystem->addU32Fast(_PREHASH_QueryFlags, query.scope);
-            gMessageSystem->addU32Fast(_PREHASH_Category, query.category_int);
-            gMessageSystem->addS32Fast(_PREHASH_QueryStart, mResultStart);
-            gAgent.sendReliableMessage();
-            LL_DEBUGS("Search") << "Firing off search request: " << mQueryID << LL_ENDL;
-            break;
-        }
-        case SE_UNDEFINED:
-        default:
-            break;
-    }
-    mResultList->setCommentText(getString("searching"));
-    setProgress(true);
-}
-
-//static
-void LLFloaterDirectory::processSearchPeopleReply(LLMessageSystem* msg, void**)
-{
-    LLUUID query_id;
-    std::string first_name;
-    std::string last_name;
-    LLUUID agent_id;
-    U8 online;
-    //S32 reputation;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    // *TODO: Get rid of this so we can have multiple search windows
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-    self->setProgress(false);
-
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-        pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_FirstName, first_name, i);
-        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_LastName,  last_name, i);
-        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_AgentID,   agent_id, i);
-        //msg->getS32Fast(  _PREHASH_QueryReplies,  _PREHASH_Reputation, reputation, i);
-        msg->getU8Fast(     _PREHASH_QueryReplies,  _PREHASH_Online,    online, i);
-
-        if (agent_id.isNull())
-        {
-            LL_INFOS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << first_name << " " << last_name << " AgentID: " << agent_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            std::string avatar_name = LLCacheName::buildFullName(first_name, last_name);
-
-            LLSD element;
-            element["id"] = agent_id;
-
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"]   = "icon";
-            element["columns"][0]["value"]  = online ? "icon_avatar_online.tga" : "icon_avatar_offline.tga";
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = avatar_name;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-//static
-void LLFloaterDirectory::processSearchGroupsReply(LLMessageSystem* msg, void**)
-{
-    LLUUID query_id;
-    LLUUID group_id;
-    LLUUID agent_id;
-    std::string group_name;
-    S32 members;
-    F32 search_order;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->getChild<LLUICtrl>("groups_edit")->getValue().asString();
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-        pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUIDFast(   _PREHASH_QueryReplies,  _PREHASH_GroupID,       group_id,   i);
-        msg->getStringFast( _PREHASH_QueryReplies,  _PREHASH_GroupName,     group_name, i);
-        msg->getS32Fast(    _PREHASH_QueryReplies,  _PREHASH_Members,       members,    i);
-        msg->getF32Fast(    _PREHASH_QueryReplies,  _PREHASH_SearchOrder,   search_order,i);
-        if (group_id.isNull())
-        {
-            LL_DEBUGS("Search") << "No results returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << group_name << " GroupID: " << group_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            LLSD element;
-
-            element["id"] = group_id;
-
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"]   = "icon";
-            element["columns"][0]["value"]  = "Icon_Group";
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = group_name;
-
-            element["columns"][2]["column"] = "members";
-            element["columns"][2]["value"]  = members;
-
-            element["columns"][3]["column"] = "score";
-            element["columns"][3]["value"]  = search_order;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-//static
-void LLFloaterDirectory::processSearchPlacesReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  parcel_id;
-    std::string name;
-    BOOL    for_sale;
-    BOOL    auction;
-    F32     dwell;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-                pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUID(   "QueryReplies", "ParcelID", parcel_id,  i);
-        msg->getString( "QueryReplies", "Name",     name,       i);
-        msg->getBOOL(   "QueryReplies", "ForSale",  for_sale,   i);
-        msg->getBOOL(   "QueryReplies", "Auction",  auction,    i);
-        msg->getF32(    "QueryReplies", "Dwell",    dwell,      i);
-        if (parcel_id.isNull())
-        {
-            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-                        pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << name << " ParcelID: " << parcel_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            LLSD element;
-
-            element["id"] = parcel_id;
-
-            if (auction)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Auction";
-            }
-            else if (for_sale)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_For_Sale";
-            }
-            else
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Place";
-            }
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = name;
-
-            std::string buffer = llformat("%.0f", dwell);
-            element["columns"][2]["column"] = "dwell";
-            element["columns"][2]["value"]  = buffer;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-//static
-void LLFloaterDirectory::processSearchClassifiedsReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  classified_id;
-    std::string name;
-    U32     creation_date;
-    U32     expiration_date;
-    S32     price_for_listing;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-        pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUID(   "QueryReplies", "ClassifiedID",     classified_id,  i);
-        msg->getString( "QueryReplies", "Name",             name,           i);
-        msg->getU32(    "QueryReplies", "CreationDate",     creation_date,  i);
-        msg->getU32(    "QueryReplies", "ExpirationDate",   expiration_date,i);
-        msg->getS32(    "QueryReplies", "PriceForListing",  price_for_listing,i);
-        if (classified_id.isNull())
-        {
-            LL_DEBUGS("Search") << "No results returned for QueryID: " << query_id << LL_ENDL;
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-                        pResults->setCommentText(self->getString("not_found", map));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << classified_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-
-            LLSD element;
-
-            element["id"] = classified_id;
-
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"]   = "icon";
-            element["columns"][0]["value"]  = "icon_top_pick.tga";
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = name;
-
-            element["columns"][2]["column"] = "price";
-            element["columns"][2]["value"]  = price_for_listing;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-// static
-void LLFloaterDirectory::processSearchLandReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  parcel_id;
-    std::string name;
-    std::string land_sku;
-    std::string land_type;
-    BOOL    auction;
-    BOOL    for_sale;
-    S32     price;
-    S32     area;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_PLACES_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_PLACES_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_PLACES_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-                pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        msg->getUUID(   "QueryReplies", "ParcelID",     parcel_id,  i);
-        msg->getString( "QueryReplies", "Name",         name,       i);
-        msg->getBOOL(   "QueryReplies", "Auction",      auction,    i);
-        msg->getBOOL(   "QueryReplies", "ForSale",      for_sale,   i);
-        msg->getS32(    "QueryReplies", "SalePrice",    price,      i);
-        msg->getS32(    "QueryReplies", "ActualArea",   area,       i);
-        if (parcel_id.isNull())
-        {
-            LL_DEBUGS("Search") << "Null result returned for QueryID: " << query_id << LL_ENDL;
-            pResults->setCommentText(self->getString("no_results"));
-        }
-        else
-        {
-            LL_DEBUGS("Search") << "Got: " << name << " ClassifiedID: " << parcel_id << LL_ENDL;
-            pResults->setEnabled(TRUE);
-            if ( msg->getSizeFast(_PREHASH_QueryReplies, i, _PREHASH_ProductSKU) > 0 )
-            {
-                msg->getStringFast( _PREHASH_QueryReplies, _PREHASH_ProductSKU, land_sku, i);
-                land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku);
-            }
-            else
-            {
-                land_sku.clear();
-                land_type = LLTrans::getString("land_type_unknown");
-            }
-            if (parcel_id.isNull())
-                continue;
-
-            LLSD element;
-
-            element["id"] = parcel_id;
-            if (auction)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Auction";
-            }
-            else if (for_sale)
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_For_Sale";
-            }
-            else
-            {
-                element["columns"][0]["column"] = "icon";
-                element["columns"][0]["type"]   = "icon";
-                element["columns"][0]["value"]  = "Icon_Place";
-            }
-
-            element["columns"][1]["column"] = "name";
-            element["columns"][1]["value"]  = name;
-
-            std::string buffer = "Auction";
-            if (!auction)
-            {
-                buffer = llformat("%d", price);
-            }
-            element["columns"][2]["column"] = "price";
-            element["columns"][2]["value"]  = price;
-
-            element["columns"][3]["column"] = "area";
-            element["columns"][3]["value"]  = area;
-            if (!auction)
-            {
-                F32 ppm;
-                if (area > 0)
-                    ppm = (F32)price / (F32)area;
-                else
-                    ppm = 0.f;
-                std::string buffer = llformat("%.1f", ppm);
-                element["columns"][4]["column"] = "ppm";
-                element["columns"][4]["value"]  = buffer;
-            }
-            else
-            {
-                element["columns"][4]["column"] = "ppm";
-                element["columns"][4]["value"]  = "1.0";
-            }
-
-            element["columns"][5]["column"] = "type";
-            element["columns"][5]["value"]  = land_type;
-
-            pResults->addElement(element, ADD_BOTTOM);
-        }
-    }
-    self->paginate();
-}
-
-// static
-void LLFloaterDirectory::processSearchEventsReply(LLMessageSystem* msg, void**)
-{
-    LLUUID  agent_id;
-    LLUUID  query_id;
-    LLUUID  owner_id;
-    std::string name;
-    std::string date;
-
-    msg->getUUIDFast(_PREHASH_QueryData, _PREHASH_QueryID, query_id);
-    msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
-
-    if (agent_id != gAgent.getID()) return; // not for us
-    LL_DEBUGS("Search") << "Received results for query id: " << query_id << LL_ENDL;
-
-    LLFloaterDirectory* self = LLFloaterReg::findTypedInstance<LLFloaterDirectory>("search");
-    if (self == nullptr || query_id != self->mQueryID) return; // not the result we're waiting for
-
-    self->setProgress(false);
-    LLScrollListCtrl* pResults = self->mResultList;
-
-    // Check for status messages
-    if (msg->getNumberOfBlocks("StatusData"))
-    {
-        U32 status;
-        msg->getU32("StatusData", "Status", status);
-        if (status & STATUS_SEARCH_EVENTS_FOUNDNONE)
-        {
-            LLStringUtil::format_map_t map;
-            map["[TEXT]"] = self->mCurrentQuery.text;
-            pResults->setCommentText(self->getString("not_found", map));
-            return;
-        }
-        else if(status & STATUS_SEARCH_EVENTS_SHORTSTRING)
-        {
-            pResults->setCommentText(self->getString("search_short"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_BANNEDWORD)
-        {
-            pResults->setCommentText(self->getString("search_banned"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_SEARCHDISABLED)
-        {
-            pResults->setCommentText(self->getString("search_disabled"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_NODATEOFFSET)
-        {
-            pResults->setCommentText(self->getString("search_no_date_offset"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_NOCATEGORY)
-        {
-            pResults->setCommentText(self->getString("search_no_events_category"));
-            return;
-        }
-        else if (status & STATUS_SEARCH_EVENTS_NOQUERY)
-        {
-            pResults->setCommentText(self->getString("search_no_query"));
-            return;
-        }
-    }
-
-    S32 num_new_rows = msg->getNumberOfBlocksFast(_PREHASH_QueryReplies);
-    if (num_new_rows == 0)
-    {
-        LLStringUtil::format_map_t map;
-        map["[TEXT]"] = self->mCurrentQuery.text;
-                pResults->setCommentText(self->getString("not_found", map));
-    }
-
-    self->mNumResultsReceived += num_new_rows;
-    for (S32 i = 0; i < num_new_rows; ++i)
-    {
-        U32 event_id;
-        //U32 unix_time;
-        U32 event_flags;
-
-        msg->getUUID(   "QueryReplies", "OwnerID",      owner_id,   i);
-        msg->getString( "QueryReplies", "Name",         name,       i);
-        msg->getU32(    "QueryReplies", "EventID",      event_id,   i);
-        msg->getString( "QueryReplies", "Date",         date,       i);
-        //msg->getU32(  "QueryReplies", "UnixTime",     unix_time,  i);
-        msg->getU32(    "QueryReplies", "EventFlags",   event_flags,i);
-
-        static LLUICachedControl<bool> inc_pg("ShowPGEvents", true);
-        static LLUICachedControl<bool> inc_mature("ShowMatureEvents", false);
-        static LLUICachedControl<bool> inc_adult("ShowAdultEvents", false);
-
-        // Skip empty events...
-        if (owner_id.isNull())
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because of a NULL owner result" << LL_ENDL;
-            continue;
-        }
-        // Skips events that don't match our scope...
-        if (((event_flags & (EVENT_FLAG_ADULT | EVENT_FLAG_MATURE)) == EVENT_FLAG_NONE) && !inc_pg)
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
-            continue;
-        }
-        if ((event_flags & EVENT_FLAG_MATURE) && !inc_mature)
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
-            continue;
-        }
-        if ((event_flags & EVENT_FLAG_ADULT) && !inc_adult)
-        {
-            LL_INFOS("Search") << "Skipped " << event_id << " because it was out of scope" << LL_ENDL;
-            continue;
-        }
-        pResults->setEnabled(TRUE);
-
-        LLSD element;
-
-        element["id"] = llformat("%u", event_id);
-
-        if (event_flags == EVENT_FLAG_ADULT)
-        {
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"] = "icon";
-            element["columns"][0]["value"] = "Parcel_R_Dark";
-        }
-        else if (event_flags == EVENT_FLAG_MATURE)
-        {
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"] = "icon";
-            element["columns"][0]["value"] = "Parcel_M_Dark";
-        }
-        else
-        {
-            element["columns"][0]["column"] = "icon";
-            element["columns"][0]["type"] = "icon";
-            element["columns"][0]["value"] = "Parcel_PG_Dark";
-        }
-
-        element["columns"][1]["column"] = "name";
-        element["columns"][1]["value"] = name;
-
-        element["columns"][2]["column"] = "date";
-        element["columns"][2]["value"] = date;
-
-        //element["columns"][3]["column"] = "time";
-        //element["columns"][3]["value"] = llformat("%u", unix_time);
-
-        pResults->addElement(element, ADD_BOTTOM);
-    }
-    self->paginate();
-}
diff --git a/indra/newview/llfloaterdirectory.h b/indra/newview/llfloaterdirectory.h
deleted file mode 100644
index 0817f223ab4..00000000000
--- a/indra/newview/llfloaterdirectory.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * @file llfloaterdirectory.h
- * @brief Legacy search facility definitions
- *
- * Copyright (c) 2014-2022, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_FLOATERDIRECTORY_H
-#define LL_FLOATERDIRECTORY_H
-
-#include "llfloater.h"
-#include "llsdparam.h"
-
-class LLUICtrl;
-class LLPanel;
-class LLPanelSearchWeb;
-class LLScrollListCtrl;
-class LLTabContainer;
-class LLTextBase;
-
-static const size_t MIN_SEARCH_STRING_SIZE = 3;
-
-typedef enum {
-    SE_UNDEFINED = 0,
-    SE_PEOPLE,
-    SE_GROUPS,
-    SE_PLACES,
-    SE_LANDSALES,
-    SE_EVENTS,
-    SE_CLASSIFIEDS
-} ESearch;
-
-struct SearchQuery : public LLInitParam::Block<SearchQuery>
-{
-    Optional<std::string> category;
-    Optional<std::string> collection;
-    Optional<std::string> query;
-
-    SearchQuery();
-};
-
-typedef struct dir_query
-{
-    dir_query()
-        : type(SE_UNDEFINED), text(LLStringUtil::null), scope(0),
-        category_int(0), category_char(0x0), price(0), area(0), results_per_page(100) {}
-    ESearch type;
-    std::string text;
-    U32 scope;
-    U32 category_int;
-    S8 category_char;
-    S32 price;
-    S32 area;
-    U32 results_per_page;
-} LLDirQuery;
-
-class LLFloaterDirectory : public LLFloater
-{
-    friend class LLPanelSearchClassifieds;
-    friend class LLPanelSearchEvents;
-    friend class LLPanelSearchGroups;
-    friend class LLPanelSearchLandSales;
-    friend class LLPanelSearchPeople;
-    friend class LLPanelSearchPlaces;
-
-public:
-    struct _Params : LLInitParam::Block<_Params, LLFloater::Params>
-    {
-        Optional<SearchQuery> search;
-    };
-    typedef LLSDParamAdapter<_Params> Params;
-
-    LLFloaterDirectory(const Params& key);
-    BOOL postBuild() override;
-    void onOpen(const LLSD& key) override;
-    void onClose(bool app_quitting) override;
-
-    static void processSearchPeopleReply(LLMessageSystem* msg, void**);
-    static void processSearchGroupsReply(LLMessageSystem* msg, void**);
-    static void processSearchPlacesReply(LLMessageSystem* msg, void**);
-    static void processSearchClassifiedsReply(LLMessageSystem* msg, void**);
-    static void processSearchLandReply(LLMessageSystem* msg, void**);
-    static void processSearchEventsReply(LLMessageSystem* msg, void**);
-
-protected:
-    void setProgress(bool working);
-    void queryDirectory(const LLDirQuery& query, bool new_search = false);
-    void setResultsComment(const std::string& message);
-
-private:
-    ~LLFloaterDirectory();
-    void onCommitSelection();
-    void choosePage(LLUICtrl* ctrl);
-    void onTabChanged();
-    void paginate();
-    void showDetailPanel(const std::string& panel_name);
-    void rebuildResultList();
-
-    ESearch mCurrentResultType;
-    LLDirQuery mCurrentQuery;
-    S32 mResultStart;
-    S32 mNumResultsReceived;
-    LLUUID mQueryID;
-
-    LLTabContainer* mTabContainer;
-    LLPanelSearchWeb* mPanelWeb;
-    LLScrollListCtrl* mResultList;
-    LLTextBase* mResultsStatus;
-};
-
-#endif // LL_FLOATERDIRECTORY_H
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index b8b95fc711a..53f3e818fb3 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -59,7 +59,7 @@
 
 //static
 LLPanelClassifiedInfo::panel_list_t LLPanelClassifiedInfo::sAllPanels;
-static LLPanelInjector<LLPanelClassifiedInfo> t_panel_classified_info("panel_classified_info");
+static LLPanelInjector<LLPanelClassifiedInfo> t_panel_panel_classified_info("panel_classified_info");
 
 // "classifiedclickthrough"
 // strings[0] = classified_id
@@ -93,8 +93,6 @@ static LLDispatchClassifiedClickThrough sClassifiedClickThrough;
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 
-static LLPanelInjector<LLPanelClassifiedInfo> t_classified_info("panel_classified_info");
-
 LLPanelClassifiedInfo::LLPanelClassifiedInfo()
  : LLPanel()
  , mInfoLoaded(false)
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index e742328df25..c201bf11b7d 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -173,8 +173,10 @@ class LLPanelClassifiedInfo : public LLPanel, public LLAvatarPropertiesObserver
     S32 mMapClicksNew;
     S32 mProfileClicksNew;
 
+public:
     static void handleSearchStatResponse(LLUUID classifiedId, LLSD result);
 
+private:
 
     typedef std::list<LLPanelClassifiedInfo*> panel_list_t;
     static panel_list_t sAllPanels;
diff --git a/indra/newview/llpaneleventinfo.cpp b/indra/newview/llpaneleventinfo.cpp
deleted file mode 100644
index d9ffc02e42d..00000000000
--- a/indra/newview/llpaneleventinfo.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * @file llpaneleventinfo.cpp
- * @brief Event info panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpaneleventinfo.h"
-
-#include "llbutton.h"
-#include "lleventflags.h"
-#include "lliconctrl.h"
-#include "llfloaterreg.h"
-#include "llresmgr.h"
-#include "llslurl.h"
-#include "lltrans.h"
-
-#include "llagent.h"
-#include "llfloaterworldmap.h"
-#include "llviewercontrol.h"
-
-static LLPanelInjector<LLPanelEventInfo> t_event_info("panel_event_info");
-
-LLPanelEventInfo::LLPanelEventInfo()
-:   LLPanel()
-,   mEvent()
-,   mEventID(0)
-{
-    mEventNotifierConnection = gEventNotifier.setNewEventCallback(boost::bind(&LLPanelEventInfo::processEventReply, this, _1));
-}
-
-LLPanelEventInfo::~LLPanelEventInfo()
-{
-    if (mEventNotifierConnection.connected())
-    {
-        mEventNotifierConnection.disconnect();
-    }
-}
-
-BOOL LLPanelEventInfo::postBuild()
-{
-    childSetAction("teleport_btn", boost::bind(&LLPanelEventInfo::onBtnTeleport, this));
-    childSetAction("show_on_map_btn", boost::bind(&LLPanelEventInfo::onBtnMap, this));
-    childSetAction("remind_btn", boost::bind(&LLPanelEventInfo::onBtnRemind, this));
-    return TRUE;
-}
-
-void LLPanelEventInfo::onOpen(const LLSD& key)
-{
-    U32 id(key.asInteger());
-    setEventID(id);
-
-    gEventNotifier.add(getEventID());
-}
-
-// *TODO: localize this bitch.
-std::string LLPanelEventInfo::formatFromMinutes(U32 time)
-{
-    U32 hours = time / 60;
-    U32 minutes = time % 60;
-
-    std::ostringstream output;
-    if (hours)
-        output << hours << " " << getString("hours") << " ";
-    if (minutes)
-        output << minutes << " " << getString("minutes");
-    return output.str();
-}
-
-bool LLPanelEventInfo::processEventReply(const LLEventStruct& event)
-{
-    if (event.eventId != getEventID()) return false; // no
-    mEvent = event;
-    getChild<LLUICtrl>("name")->setValue(mEvent.eventName);
-    getChild<LLUICtrl>("desc")->setValue(mEvent.desc);
-    getChild<LLUICtrl>("duration")->setValue(formatFromMinutes(mEvent.duration));
-    getChild<LLUICtrl>("host")->setValue(LLSLURL("agent", LLUUID(mEvent.creator), "inspect").getSLURLString());
-    getChild<LLUICtrl>("time")->setValue(mEvent.eventDateStr);
-    // *TODO: Prettier
-    //std::string time;
-    //LLStringUtil::formatDatetime(time, "%a %d %b %Y %H:%M", "slt", mEvent.eventEpoch);
-    //getChild<LLUICtrl>("time")->setValue(time);
-
-    // *TODO: Add translation strings
-    //getChild<LLUICtrl>("category")->setValue(LLTrans::getString(mEvent.category));
-    getChild<LLUICtrl>("category")->setValue(mEvent.category);
-    getChild<LLUICtrl>("cover")->setValue(mEvent.cover
-                                          ? LLResMgr::getInstance()->getMonetaryString(mEvent.amount)
-                                          : getString("free"));
-    bool mature = (mEvent.flags & EVENT_FLAG_MATURE);
-    getChild<LLUICtrl>("content_type")->setValue(getString(mature ? "type_mature" : "type_pg"));
-    getChild<LLIconCtrl>("content_type_moderate")->setVisible(mature);
-    getChild<LLIconCtrl>("content_type_general")->setVisible(!mature);
-    getChild<LLUICtrl>("location")->setValue(LLSLURL(mEvent.simName, mEvent.globalPos).getSLURLString());
-    getChild<LLButton>("remind_btn")->setLabel(getString(gEventNotifier.hasNotification(mEvent.eventId)
-                                                         ? "no_reminder"
-                                                         : "reminder"));
-    return true;
-}
-
-void LLPanelEventInfo::onBtnTeleport()
-{
-    if (!mEvent.globalPos.isExactlyZero())
-    {
-        gAgent.teleportViaLocation(mEvent.globalPos);
-        LLFloaterWorldMap* worldmap = LLFloaterWorldMap::getInstance();
-        if (worldmap)
-            worldmap->trackLocation(mEvent.globalPos);
-    }
-}
-
-void LLPanelEventInfo::onBtnMap()
-{
-    LLFloaterWorldMap* worldmap = LLFloaterWorldMap::getInstance();
-    if (!mEvent.globalPos.isExactlyZero() && worldmap)
-    {
-        worldmap->trackLocation(mEvent.globalPos);
-        LLFloaterReg::showInstance("world_map", "center");
-    }
-}
-
-void LLPanelEventInfo::onBtnRemind()
-{
-    if (gEventNotifier.hasNotification(mEvent.eventId))
-    {
-        gEventNotifier.remove(mEvent.eventId);
-        getChild<LLButton>("remind_btn")->setLabel(getString("reminder"));
-    }
-    else
-    {
-        gEventNotifier.add(mEvent.eventId);
-        getChild<LLButton>("remind_btn")->setLabel(getString("no_reminder"));
-    }
-}
diff --git a/indra/newview/llpaneleventinfo.h b/indra/newview/llpaneleventinfo.h
deleted file mode 100644
index 3852dba91ed..00000000000
--- a/indra/newview/llpaneleventinfo.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * @file llpaneleventinfo.cpp
- * @brief Event info panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELEVENTINFO_H
-#define LL_PANELEVENTINFO_H
-
-#include "llpanel.h"
-#include "lleventnotifier.h"
-
-class LLPanelEventInfo : public LLPanel
-{
-public:
-    LLPanelEventInfo();
-    /*virtual*/ BOOL postBuild() override;
-    /*virtual*/ void onOpen(const LLSD& key) override;
-
-private:
-    ~LLPanelEventInfo();
-    bool processEventReply(const LLEventStruct& event);
-    std::string formatFromMinutes(U32 time);
-    void setEventID(U32 id) { mEventID = id; }
-    U32 getEventID() const { return mEventID; }
-    void onBtnTeleport();
-    void onBtnMap();
-    void onBtnRemind();
-
-    LLEventStruct mEvent;
-    U32 mEventID;
-    boost::signals2::connection mEventNotifierConnection;
-};
-
-#endif // LL_PANELEVENTINFO_H
diff --git a/indra/newview/llpanelsearchbase.cpp b/indra/newview/llpanelsearchbase.cpp
deleted file mode 100644
index ba11c8a0096..00000000000
--- a/indra/newview/llpanelsearchbase.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * @file llpanelsearchbase.cpp
- * @brief Search panel base class
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchbase.h"
-#include "llfloaterdirectory.h"
-
-LLPanelSearch::LLPanelSearch()
-:   LLPanel()
-,   mFloater(nullptr)
-{
-}
-
-void LLPanelSearch::setSearchFloater(LLFloaterDirectory* floater)
-{
-    mFloater = floater;
-}
diff --git a/indra/newview/llpanelsearchbase.h b/indra/newview/llpanelsearchbase.h
deleted file mode 100644
index 3e54edce0ee..00000000000
--- a/indra/newview/llpanelsearchbase.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * @file llpanelsearchbase.h
- * @brief Search panel base class
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHBASE_H
-#define LL_PANELSEARCHBASE_H
-
-#include "llpanel.h"
-
-class LLUICtrl;
-class LLFloaterDirectory;
-
-class LLPanelSearch : public LLPanel
-{
-public:
-    LLPanelSearch();
-    BOOL postBuild() override { return FALSE; }
-    void setSearchFloater(LLFloaterDirectory* floater);
-
-protected:
-    virtual ~LLPanelSearch() = default;;
-    LLFloaterDirectory* mFloater;
-
-private:
-    virtual void onCommitSearch(LLUICtrl* ctrl) {}
-    virtual void search() {}
-};
-
-#endif // LL_PANELSEARCHBASE_H
diff --git a/indra/newview/llpanelsearchclassifieds.cpp b/indra/newview/llpanelsearchclassifieds.cpp
deleted file mode 100644
index 4834c63adf1..00000000000
--- a/indra/newview/llpanelsearchclassifieds.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * @file llpanelsearchclassifieds.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchclassifieds.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-#include "lltrans.h"
-
-#include "llagent.h"
-#include "llclassifiedflags.h"
-#include "llclassifiedinfo.h"
-#include "llcombobox.h"
-#include "llnotificationsutil.h"
-#include "llparcel.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchClassifieds> t_panel_search_classifieds("panel_search_classifieds");
-
-LLPanelSearchClassifieds::LLPanelSearchClassifieds()
-    : LLPanelSearch()
-    , mSearchEditor(nullptr)
-    , mClassifiedsCategory(nullptr)
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchClassifieds::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchClassifieds::postBuild()
-{
-    mClassifiedsCategory = getChild<LLComboBox>("classifieds_category");
-    mClassifiedsCategory->add("All categories", LLSD("any"));
-    mClassifiedsCategory->addSeparator();
-    for (auto iter = LLClassifiedInfo::sCategories.cbegin();
-         iter != LLClassifiedInfo::sCategories.cend();
-         ++iter)
-    {
-        mClassifiedsCategory->add(LLTrans::getString(iter->second));
-    }
-
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchClassifieds::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchClassifieds::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchClassifieds::search()
-{
-    LLDirQuery query;
-    query.type = SE_CLASSIFIEDS;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    LLStringUtil::trim(query.text);
-
-    query.category_int = mClassifiedsCategory->getValue().asInteger();
-
-    static LLUICachedControl<bool> inc_pg("ShowPGClassifieds", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureClassifieds", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultClassifieds", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-    query.scope = pack_classified_flags_request(/*auto_renew*/ FALSE, inc_pg, inc_mature, inc_adult);
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchclassifieds.h b/indra/newview/llpanelsearchclassifieds.h
deleted file mode 100644
index 64992be6bb9..00000000000
--- a/indra/newview/llpanelsearchclassifieds.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * @file llpanelsearchclassifieds.h
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHCLASSIFIEDS_H
-#define LL_PANELSEARCHCLASSIFIEDS_H
-
-#include "llpanelsearchbase.h"
-
-class LLComboBox;
-class LLSearchEditor;
-
-class LLPanelSearchClassifieds : public LLPanelSearch
-{
-public:
-    LLPanelSearchClassifieds();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-    LLComboBox* mClassifiedsCategory;
-};
-
-#endif // LL_PANELSEARCHCLASSIFIEDS_H
diff --git a/indra/newview/llpanelsearchevents.cpp b/indra/newview/llpanelsearchevents.cpp
deleted file mode 100644
index 425d5a157bc..00000000000
--- a/indra/newview/llpanelsearchevents.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * @file llpanelsearchevents.cpp
- * @brief Events search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchevents.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llcombobox.h"
-#include "llnotificationsutil.h"
-#include "llparcel.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchEvents> t_panel_search_events("panel_search_events");
-
-LLPanelSearchEvents::LLPanelSearchEvents()
-:   LLPanelSearch()
-,   mDate(0)
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchEvents::onCommitSearch, this, _1));
-    mCommitCallbackRegistrar.add("Search.AddDay", boost::bind(&LLPanelSearchEvents::addDay, this));
-    mCommitCallbackRegistrar.add("Search.MinusDay", boost::bind(&LLPanelSearchEvents::minusDay, this));
-}
-
-BOOL LLPanelSearchEvents::postBuild()
-{
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchEvents::onCommitSearch, this, _1));
-    setDate(0);
-
-    return TRUE;
-}
-
-void LLPanelSearchEvents::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchEvents::search()
-{
-    LLDirQuery query;
-    query.type = SE_EVENTS;
-    query.results_per_page = 200;
-    std::string text = mSearchEditor->getText();
-    LLStringUtil::trim(text);
-
-    static LLUICachedControl<bool> inc_pg("ShowPGEvents", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureEvents", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultEvents", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-
-    query.scope = DFQ_DATE_EVENTS;
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-
-    std::ostringstream string;
-    string << (childGetValue("events_search_mode").asString() == "current" ? "u" : llformat("%d",mDate)) << "|"
-           << getChild<LLComboBox>("events_category")->getSelectedValue().asInteger() << "|"
-           << text;
-    query.text = string.str();
-
-    mFloater->queryDirectory(query, true);
-}
-
-void LLPanelSearchEvents::setDate(S32 day)
-{
-    mDate = day;
-
-    time_t utc = time_corrected();
-    utc += day * 24 * 60 * 60;
-    struct tm * internal_time = utc_to_pacific_time(utc, is_daylight_savings());
-    const std::string date = llformat("%d/%d", 1 + internal_time->tm_mon, internal_time->tm_mday);
-    childSetValue("events_date", date);
-}
-
-void LLPanelSearchEvents::addDay()
-{
-    setDate(++mDate);
-    if (childGetValue("events_search_mode").asString() == "date")
-        search();
-}
-
-void LLPanelSearchEvents::minusDay()
-{
-    setDate(--mDate);
-    if (childGetValue("events_search_mode").asString() == "date")
-        search();
-}
diff --git a/indra/newview/llpanelsearchevents.h b/indra/newview/llpanelsearchevents.h
deleted file mode 100644
index 1f2af30622f..00000000000
--- a/indra/newview/llpanelsearchevents.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * @file llpanelsearchevents.h
- * @brief Events search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHEVENTS_H
-#define LL_PANELSEARCHEVENTS_H
-
-#include "llpanelsearchbase.h"
-
-class LLComboBox;
-class LLSearchEditor;
-
-class LLPanelSearchEvents : public LLPanelSearch
-{
-public:
-    LLPanelSearchEvents();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-    void setDate(S32 day);
-    void addDay();
-    void minusDay();
-
-    S32 mDate;
-    LLSearchEditor* mSearchEditor;
-};
-
-#endif // LL_PANELSEARCHEVENTS_H
diff --git a/indra/newview/llpanelsearchgroups.cpp b/indra/newview/llpanelsearchgroups.cpp
deleted file mode 100644
index b4fbea45d86..00000000000
--- a/indra/newview/llpanelsearchgroups.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * @file llpanelsearchgroups.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchgroups.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llnotificationsutil.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchGroups> t_panel_search_groups("panel_search_groups");
-
-LLPanelSearchGroups::LLPanelSearchGroups()
-    : LLPanelSearch()
-    , mSearchEditor(nullptr)
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchGroups::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchGroups::postBuild()
-{
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchGroups::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchGroups::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchGroups::search()
-{
-    LLDirQuery query;
-    query.type = SE_GROUPS;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    LLStringUtil::trim(query.text);
-
-    static LLUICachedControl<bool> inc_pg("ShowPGGroups", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureGroups", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultGroups", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-    query.scope |= DFQ_GROUPS;
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchgroups.h b/indra/newview/llpanelsearchgroups.h
deleted file mode 100644
index f3e80c6b171..00000000000
--- a/indra/newview/llpanelsearchgroups.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * @file llpanelsearchgroups.h
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHGROUPS_H
-#define LL_PANELSEARCHGROUPS_H
-
-#include "llpanelsearchbase.h"
-
-class LLSearchEditor;
-
-class LLPanelSearchGroups : public LLPanelSearch
-{
-public:
-    LLPanelSearchGroups();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-};
-
-#endif // LL_PANELSEARCHGROUPS_H
diff --git a/indra/newview/llpanelsearchlandsales.cpp b/indra/newview/llpanelsearchlandsales.cpp
deleted file mode 100644
index a2def0f36a6..00000000000
--- a/indra/newview/llpanelsearchlandsales.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * @file llpanelsearchlandsales.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchlandsales.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llnotificationsutil.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-#include "llviewercontrol.h"
-
-static LLPanelInjector<LLPanelSearchLandSales> t_panel_search_land_sales("panel_search_landsales");
-
-LLPanelSearchLandSales::LLPanelSearchLandSales()
-:   LLPanelSearch()
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchLandSales::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchLandSales::postBuild()
-{
-    return TRUE;
-}
-
-void LLPanelSearchLandSales::onCommitSearch(LLUICtrl* ctrl)
-{
-    search();
-}
-
-void LLPanelSearchLandSales::search()
-{
-    LLDirQuery query;
-    query.type = SE_LANDSALES;
-    query.results_per_page = 100;
-
-    static LLUICachedControl<bool> inc_pg("ShowPGLand", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureLand", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultLand", false);
-    static LLUICachedControl<bool> limit_price("FindLandPrice", true);
-    static LLUICachedControl<bool> limit_area("FindLandArea", true);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-
-    const std::string& type = gSavedSettings.getString("FindLandType");
-    if (type == "All")
-        query.category_int = ST_ALL;
-    else if (type == "Auction")
-        query.category_int = ST_AUCTION;
-    else if (type == "Mainland")
-        query.category_int = ST_MAINLAND;
-    else if (type == "Estate")
-        query.category_int = ST_ESTATE;
-
-    if (gAgent.wantsPGOnly())
-        query.scope |= DFQ_PG_SIMS_ONLY;
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-
-    const std::string& sort = gSavedSettings.getString("FindLandSort");
-    if (sort == "Name")
-        query.scope |= DFQ_NAME_SORT;
-    else if (sort == "Price")
-        query.scope |= DFQ_PRICE_SORT;
-    else if (sort == "PPM")
-        query.scope |= DFQ_PER_METER_SORT;
-    else if (sort == "Area")
-        query.scope |= DFQ_AREA_SORT;
-
-    if (gSavedSettings.getBOOL("FindLandSortAscending"))
-        query.scope |= DFQ_SORT_ASC;
-    if (limit_price)
-        query.scope |= DFQ_LIMIT_BY_PRICE;
-    if (limit_area)
-        query.scope |= DFQ_LIMIT_BY_AREA;
-    query.price = childGetValue("edit_price").asInteger();
-    query.area = childGetValue("edit_area").asInteger();
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchlandsales.h b/indra/newview/llpanelsearchlandsales.h
deleted file mode 100644
index f0f27407719..00000000000
--- a/indra/newview/llpanelsearchlandsales.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * @file llpanelsearchlandsales.h
- * @brief Land sale search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHLANDSALES_H
-#define LL_PANELSEARCHLANDSALES_H
-
-#include "llpanelsearchbase.h"
-
-class LLPanelSearchLandSales : public LLPanelSearch
-{
-public:
-    LLPanelSearchLandSales();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void search() override;
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-};
-
-#endif // LL_PANELSEARCHLANDSALES_H
diff --git a/indra/newview/llpanelsearchpeople.cpp b/indra/newview/llpanelsearchpeople.cpp
deleted file mode 100644
index 69b2c3fc5c4..00000000000
--- a/indra/newview/llpanelsearchpeople.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * @file llpanelsearchpeople.cpp
- * @brief People search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchpeople.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-
-#include "llagent.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchPeople> t_panel_search_people("panel_search_people");
-
-LLPanelSearchPeople::LLPanelSearchPeople()
-:   LLPanelSearch()
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchPeople::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchPeople::postBuild()
-{
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchPeople::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchPeople::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-bool isNotAlphaNum(char c)
-{
-    return !std::isalnum(c);
-}
-
-void LLPanelSearchPeople::search()
-{
-    LLDirQuery query;
-    query.type = SE_PEOPLE;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    std::replace_if(query.text.begin(), query.text.end(), isNotAlphaNum, ' ');
-    LLStringUtil::trim(query.text);
-
-    mFloater->queryDirectory(query, true);
-    if (query.text.length() < MIN_SEARCH_STRING_SIZE)
-        mFloater->setResultsComment(getString("SeachFilteredOnShortWordsEmpty"));
-}
diff --git a/indra/newview/llpanelsearchpeople.h b/indra/newview/llpanelsearchpeople.h
deleted file mode 100644
index e55645f7f62..00000000000
--- a/indra/newview/llpanelsearchpeople.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * @file llpanelsearchpeople.h
- * @brief People search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHPEOPLE_H
-#define LL_PANELSEARCHPEOPLE_H
-
-#include "llpanelsearchbase.h"
-
-class LLSearchEditor;
-
-class LLPanelSearchPeople : public LLPanelSearch
-{
-public:
-    LLPanelSearchPeople();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-};
-
-#endif // LL_PANELSEARCHPEOPLE_H
diff --git a/indra/newview/llpanelsearchplaces.cpp b/indra/newview/llpanelsearchplaces.cpp
deleted file mode 100644
index 97b758dea42..00000000000
--- a/indra/newview/llpanelsearchplaces.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * @file llpanelsearchplaces.cpp
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchplaces.h"
-#include "llfloaterdirectory.h"
-
-#include "llfloaterreg.h"
-#include "llqueryflags.h"
-
-#include "llagent.h"
-#include "llcombobox.h"
-#include "llnotificationsutil.h"
-#include "llparcel.h"
-#include "llsearcheditor.h"
-#include "llsearchhistory.h"
-
-static LLPanelInjector<LLPanelSearchPlaces> t_panel_search_places("panel_search_places");
-
-LLPanelSearchPlaces::LLPanelSearchPlaces()
-:   LLPanelSearch()
-{
-    mCommitCallbackRegistrar.add("Search.query", boost::bind(&LLPanelSearchPlaces::onCommitSearch, this, _1));
-}
-
-BOOL LLPanelSearchPlaces::postBuild()
-{
-    mPlacesCategory = getChild<LLComboBox>("places_category");
-    mPlacesCategory->add("All categories", LLSD("any"));
-    mPlacesCategory->addSeparator();
-    for (size_t category = LLParcel::C_LINDEN; category < LLParcel::C_COUNT; ++category)
-    {
-        LLParcel::ECategory eCategory = static_cast<LLParcel::ECategory>(category);
-        mPlacesCategory->add(LLParcel::getCategoryUIString(eCategory), LLParcel::getCategoryString(eCategory));
-    }
-
-    mSearchEditor = getChild<LLSearchEditor>("search_bar");
-    //mSearchEditor->setKeystrokeCallback(boost::bind(&LLPanelSearchPlaces::onCommitSearch, this, _1));
-
-    return TRUE;
-}
-
-void LLPanelSearchPlaces::onCommitSearch(LLUICtrl* ctrl)
-{
-    LLSearchEditor* pSearchEditor = dynamic_cast<LLSearchEditor*>(ctrl);
-    if (pSearchEditor)
-    {
-        std::string text = pSearchEditor->getText();
-        LLStringUtil::trim(text);
-        if (text.length() <= MIN_SEARCH_STRING_SIZE)
-            LLSearchHistory::getInstance()->addEntry(text);
-    }
-    search();
-}
-
-void LLPanelSearchPlaces::search()
-{
-    LLDirQuery query;
-    query.type = SE_PLACES;
-    query.results_per_page = 100;
-    query.text = mSearchEditor->getText();
-    LLStringUtil::trim(query.text);
-
-    const std::string& category_string = mPlacesCategory->getSelectedValue();
-    query.category_char = category_string == "any" ? LLParcel::C_ANY : LLParcel::getCategoryFromString(category_string);
-
-    static LLUICachedControl<bool> inc_pg("ShowPGSims", true);
-    static LLUICachedControl<bool> inc_mature("ShowMatureSims", false);
-    static LLUICachedControl<bool> inc_adult("ShowAdultSims", false);
-    if (!(inc_pg || inc_mature || inc_adult))
-    {
-        LLNotificationsUtil::add("NoContentToSearch");
-        return;
-    }
-    if (gAgent.wantsPGOnly())
-        query.scope |= DFQ_PG_SIMS_ONLY;
-    if (inc_pg)
-        query.scope |= DFQ_INC_PG;
-    if (inc_mature && gAgent.canAccessMature())
-        query.scope |= DFQ_INC_MATURE;
-    if (inc_adult && gAgent.canAccessAdult())
-        query.scope |= DFQ_INC_ADULT;
-    query.scope |= DFQ_DWELL_SORT;
-
-    mFloater->queryDirectory(query, true);
-}
diff --git a/indra/newview/llpanelsearchplaces.h b/indra/newview/llpanelsearchplaces.h
deleted file mode 100644
index 42e69dd117d..00000000000
--- a/indra/newview/llpanelsearchplaces.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * @file llpanelsearchplaces.h
- * @brief Groups search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHPLACES_H
-#define LL_PANELSEARCHPLACES_H
-
-#include "llpanelsearchbase.h"
-
-class LLComboBox;
-class LLSearchEditor;
-
-class LLPanelSearchPlaces : public LLPanelSearch
-{
-public:
-    LLPanelSearchPlaces();
-    /*virtual*/ BOOL postBuild() override;
-
-private:
-    /*virtual*/ void onCommitSearch(LLUICtrl* ctrl) override;
-    /*virtual*/ void search() override;
-
-    LLSearchEditor* mSearchEditor;
-    LLComboBox* mPlacesCategory;
-};
-
-#endif // LL_PANELSEARCHPLACES_H
diff --git a/indra/newview/llpanelsearchweb.cpp b/indra/newview/llpanelsearchweb.cpp
deleted file mode 100644
index dfd9fedc3ef..00000000000
--- a/indra/newview/llpanelsearchweb.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * @file llpanelsearchweb.cpp
- * @brief Web search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#include "llviewerprecompiledheaders.h"
-#include "llpanelsearchweb.h"
-
-#include "llagent.h"
-#include "llfloaterdirectory.h"
-#include "lllogininstance.h"
-#include "llmediactrl.h"
-#include "llprogressbar.h"
-#include "lltextbox.h"
-#include "llviewercontrol.h"
-#include "llviewernetwork.h"
-#include "llviewerregion.h"
-#include "llweb.h"
-
-static LLPanelInjector<LLPanelSearchWeb> t_panel_search_web("panel_search_web");
-
-LLPanelSearchWeb::LLPanelSearchWeb()
-:   LLPanel()
-,   mStatusBarText(nullptr)
-,   mStatusBarProgress(nullptr)
-,   mBtnBack(nullptr)
-,   mBtnForward(nullptr)
-,   mBtnReload(nullptr)
-,   mBtnStop(nullptr)
-,   mWebBrowser(nullptr)
-{
-    mSearchType.insert("standard");
-    mSearchType.insert("land");
-    mSearchType.insert("classified");
-
-    mCollectionType.insert("events");
-    mCollectionType.insert("destinations");
-    mCollectionType.insert("places");
-    mCollectionType.insert("groups");
-    mCollectionType.insert("people");
-
-    mCategoryPaths = LLSD::emptyMap();
-    mCategoryPaths["all"] = "search";
-    mCategoryPaths["people"] = "search/people";
-    mCategoryPaths["places"] = "search/places";
-    mCategoryPaths["events"] = "search/events";
-    mCategoryPaths["groups"] = "search/groups";
-    mCategoryPaths["wiki"] = "search/wiki";
-    mCategoryPaths["destinations"] = "destinations";
-
-    mCommitCallbackRegistrar.add("WebContent.Back", boost::bind(&LLPanelSearchWeb::onClickBack, this));
-    mCommitCallbackRegistrar.add("WebContent.Forward", boost::bind(&LLPanelSearchWeb::onClickForward, this));
-    mCommitCallbackRegistrar.add("WebContent.Reload", boost::bind(&LLPanelSearchWeb::onClickReload, this));
-    mCommitCallbackRegistrar.add("WebContent.Stop", boost::bind(&LLPanelSearchWeb::onClickStop, this));
-}
-
-BOOL LLPanelSearchWeb::postBuild()
-{
-    mWebBrowser = getChild<LLMediaCtrl>("webbrowser");
-    if (mWebBrowser) mWebBrowser->addObserver(this);
-
-    mWebBrowser        = getChild<LLMediaCtrl>("webbrowser");
-    mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress");
-    mStatusBarText     = getChild<LLTextBox>("statusbartext");
-
-    mBtnBack           = getChild<LLButton>("back");
-    mBtnForward        = getChild<LLButton>("forward");
-    mBtnReload         = getChild<LLButton>("reload");
-    mBtnStop           = getChild<LLButton>("stop");
-
-    return TRUE;
-}
-
-void LLPanelSearchWeb::loadUrl(const SearchQuery& p)
-{
-    if (!mWebBrowser || !p.validateBlock()) return;
-
-    mWebBrowser->setTrustedContent(true);
-
-    // work out the subdir to use based on the requested category
-    LLSD subs;
-    if (LLGridManager::instance().isInSecondlife())
-    {
-        if (mSearchType.find(p.category.getValue()) != mSearchType.end())
-        {
-            subs["TYPE"] = p.category.getValue();
-        }
-        else
-        {
-            subs["TYPE"] = "standard";
-        }
-
-        subs["COLLECTION"] = "";
-        if (subs["TYPE"] == "standard")
-        {
-            if (mCollectionType.find(p.collection) != mCollectionType.end())
-            {
-                subs["COLLECTION"] = "&collection_chosen=" + std::string(p.collection);
-            }
-            else
-            {
-                std::string collection_args("");
-                for (std::set<std::string>::iterator it = mCollectionType.begin(); it != mCollectionType.end(); ++it)
-                {
-                    collection_args += "&collection_chosen=" + std::string(*it);
-                }
-                subs["COLLECTION"] = collection_args;
-            }
-        }
-    }
-    else
-    {
-        subs["CATEGORY"] = (mCategoryPaths.has(p.category.getValue())
-            ? mCategoryPaths[p.category.getValue()].asString()
-            : mCategoryPaths["all"].asString());
-    }
-
-    // add the search query string
-    subs["QUERY"] = LLURI::escape(p.query());
-
-    // add the user's preferred maturity (can be changed via prefs)
-    std::string maturity;
-    if (LLGridManager::instance().isInSecondlife())
-    {
-        if (gAgent.prefersAdult())
-        {
-            maturity = "gma";  // PG,Mature,Adult
-        }
-        else if (gAgent.prefersMature())
-        {
-            maturity = "gm";  // PG,Mature
-        }
-        else
-        {
-            maturity = "g";  // PG
-        }
-    }
-    else
-    {
-        if (gAgent.prefersAdult())
-        {
-            maturity = "42";  // PG,Mature,Adult
-        }
-        else if (gAgent.prefersMature())
-        {
-            maturity = "21";  // PG,Mature
-        }
-        else
-        {
-            maturity = "13";  // PG
-        }
-    }
-    subs["MATURITY"] = maturity;
-
-    // add the user's god status
-    subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
-
-    // Get the search URL and expand all of the substitutions
-    // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
-    LLViewerRegion* regionp = gAgent.getRegion();
-    std::string url = regionp != nullptr ? regionp->getSearchServerURL()
-        : gSavedSettings.getString(LLGridManager::getInstance()->isInOpenSim() ? "OpenSimSearchURL" : "SearchURL");
-    url = LLWeb::expandURLSubstitutions(url, subs);
-    // Finally, load the URL in the webpanel
-    mWebBrowser->navigateTo(url, "text/html");
-}
-
-// virtual
-void LLPanelSearchWeb::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
-{
-    if(event == MEDIA_EVENT_LOCATION_CHANGED)
-    {
-        const std::string url = self->getLocation();
-
-        if ( url.length() )
-            mStatusBarText->setText( url );
-    }
-    else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)
-    {
-        // flags are sent with this event
-        mBtnBack->setEnabled( self->getHistoryBackAvailable() );
-        mBtnForward->setEnabled( self->getHistoryForwardAvailable() );
-
-        // toggle visibility of these buttons based on browser state
-        mBtnReload->setVisible( false );
-        mBtnStop->setVisible( true );
-
-        // turn "on" progress bar now we're about to start loading
-        mStatusBarProgress->setVisible( true );
-    }
-    else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
-    {
-        // flags are sent with this event
-        mBtnBack->setEnabled( self->getHistoryBackAvailable() );
-        mBtnForward->setEnabled( self->getHistoryForwardAvailable() );
-
-        // toggle visibility of these buttons based on browser state
-        mBtnReload->setVisible( true );
-        mBtnStop->setVisible( false );
-
-        // turn "off" progress bar now we're loaded
-        mStatusBarProgress->setVisible( false );
-
-        // we populate the status bar with URLs as they change so clear it now we're done
-        const LLStringExplicit end_str("");
-        mStatusBarText->setText( end_str );
-    }
-    else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED )
-    {
-        const std::string text = self->getStatusText();
-        if ( text.length() )
-            mStatusBarText->setText( text );
-    }
-    else if(event == MEDIA_EVENT_PROGRESS_UPDATED )
-    {
-        int percent = (int)self->getProgressPercent();
-        mStatusBarProgress->setValue( percent );
-    }
-    else if(event == MEDIA_EVENT_LINK_HOVERED )
-    {
-        const std::string link = self->getHoverLink();
-        mStatusBarText->setText( link );
-    }
-}
-
-void LLPanelSearchWeb::onClickForward() const
-{
-    mWebBrowser->navigateForward();
-}
-
-void LLPanelSearchWeb::onClickBack() const
-{
-    mWebBrowser->navigateBack();
-}
-
-void LLPanelSearchWeb::onClickReload() const
-{
-
-    if( mWebBrowser->getMediaPlugin() )
-    {
-        bool ignore_cache = true;
-        mWebBrowser->getMediaPlugin()->browse_reload( ignore_cache );
-    }
-}
-
-void LLPanelSearchWeb::onClickStop()
-{
-    if( mWebBrowser->getMediaPlugin() )
-        mWebBrowser->getMediaPlugin()->browse_stop();
-
-    // still should happen when we catch the navigate complete event
-    // but sometimes (don't know why) that event isn't sent from Qt
-    // and we ghetto a point where the stop button stays active.
-    mBtnReload->setVisible( true );
-    mBtnStop->setVisible( false );
-}
diff --git a/indra/newview/llpanelsearchweb.h b/indra/newview/llpanelsearchweb.h
deleted file mode 100644
index 4877db8bf96..00000000000
--- a/indra/newview/llpanelsearchweb.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * @file llpanelsearchweb.h
- * @brief Web search panel
- *
- * Copyright (c) 2014, Cinder Roxley <cinder@sdf.org>
- *
- * Permission is hereby granted, free of charge, to any person or organization
- * obtaining a copy of the software and accompanying documentation covered by
- * this license (the "Software") to use, reproduce, display, distribute,
- * execute, and transmit the Software, and to prepare derivative works of the
- * Software, and to permit third-parties to whom the Software is furnished to
- * do so, all subject to the following:
- *
- * The copyright notices in the Software and this entire statement, including
- * the above license grant, this restriction and the following disclaimer,
- * must be included in all copies of the Software, in whole or in part, and
- * all derivative works of the Software, unless such copies or derivative
- * works are solely in the form of machine-executable object code generated by
- * a source language processor.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
- * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
- * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-#ifndef LL_PANELSEARCHWEB_H
-#define LL_PANELSEARCHWEB_H
-
-#include "llpanel.h"
-#include "llviewermediaobserver.h"
-
-class LLMediaCtrl;
-class LLProgressBar;
-class LLTextBox;
-struct SearchQuery;
-
-class LLPanelSearchWeb : public LLPanel, public LLViewerMediaObserver
-{
-public:
-    LLPanelSearchWeb();
-    BOOL postBuild() override;
-    void loadUrl(const SearchQuery& query);
-
-private:
-    void             onClickBack() const;
-    void             onClickForward() const;
-    void             onClickReload() const;
-    void             onClickStop();
-    /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override;
-
-    LLTextBox* mStatusBarText;
-    LLProgressBar* mStatusBarProgress;
-    LLButton* mBtnBack;
-    LLButton* mBtnForward;
-    LLButton* mBtnReload;
-    LLButton* mBtnStop;
-
-    std::set<std::string> mSearchType;
-    std::set<std::string> mCollectionType;
-    LLSD mCategoryPaths;
-    //U8 mSearchGodLevel;
-    LLMediaCtrl* mWebBrowser;
-};
-
-#endif // LL_PANELSEARCHWEB_H
diff --git a/indra/newview/llsearchcombobox.h b/indra/newview/llsearchcombobox.h
index ff9c74a6a84..891237e92ea 100644
--- a/indra/newview/llsearchcombobox.h
+++ b/indra/newview/llsearchcombobox.h
@@ -61,6 +61,11 @@ class LLSearchComboBox : public LLComboBox
 
     ~LLSearchComboBox();
 
+    /**
+     * Sets focus to text box
+     */
+    void focusTextEntry();
+
 protected:
 
     LLSearchComboBox(const Params&p);
@@ -93,11 +98,6 @@ class LLSearchComboBox : public LLComboBox
      */
     void onSelectionCommit();
 
-    /**
-     * Sets focus to text box
-     */
-    void focusTextEntry();
-
     LLButton* mSearchButton;
 };
 
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 5650732f72f..f4fe10b4b12 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -183,7 +183,6 @@
 #include "pipeline.h"
 #include "llappviewer.h"
 #include "llfasttimerview.h"
-#include "llfloaterdirectory.h"
 #include "llfloatermap.h"
 #include "llweb.h"
 #include "llvoiceclient.h"
@@ -221,6 +220,7 @@
 #if LL_WINDOWS
 #include "lldxhardware.h"
 #endif
+#include "fsfloatersearch.h"
 
 //
 // exported globals
@@ -2914,13 +2914,12 @@ void register_viewer_callbacks(LLMessageSystem* msg)
     msg->setHandlerFuncFast(_PREHASH_GroupNoticesListReply, LLPanelGroupNotices::processGroupNoticesListReply);
 
     // directory search
-    msg->setHandlerFunc("DirPeopleReply", LLFloaterDirectory::processSearchPeopleReply);
-    msg->setHandlerFunc("DirGroupsReply", LLFloaterDirectory::processSearchGroupsReply);
-    msg->setHandlerFunc("DirPlacesReply", LLFloaterDirectory::processSearchPlacesReply);
-    msg->setHandlerFunc("DirEventsReply", LLFloaterDirectory::processSearchEventsReply);
-    msg->setHandlerFunc("DirLandReply",   LLFloaterDirectory::processSearchLandReply);
-    msg->setHandlerFunc("DirClassifiedReply",  LLFloaterDirectory::processSearchClassifiedsReply);
-
+    msg->setHandlerFuncFast(_PREHASH_DirPeopleReply, FSPanelSearchPeople::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirPlacesReply, FSPanelSearchPlaces::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirGroupsReply, FSPanelSearchGroups::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirEventsReply, FSPanelSearchEvents::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirLandReply,   FSPanelSearchLand::processSearchReply);
+    msg->setHandlerFuncFast(_PREHASH_DirClassifiedReply,  FSPanelSearchClassifieds::processSearchReply);
 
     msg->setHandlerFuncFast(_PREHASH_AvatarPickerReply, LLFloaterAvatarPicker::processAvatarPickerReply);
 
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 9dace140f3a..d808228a3cf 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -83,7 +83,6 @@
 #include "llfloatercreatelandmark.h"
 #include "llfloaterdeleteprefpreset.h"
 #include "llfloaterdestinations.h"
-#include "llfloaterdirectory.h"
 #include "llfloaterdisplayname.h"
 #include "llfloatereditextdaycycle.h"
 #include "llfloateremojipicker.h"
@@ -203,6 +202,7 @@
 #include "llpreviewtexture.h"
 #include "llscriptfloater.h"
 #include "llsyswellwindow.h"
+#include "fsfloatersearch.h"
 #include "bdfloaterposer.h"
 #include "bdfloaterposecreator.h"
 
@@ -543,6 +543,7 @@ void LLViewerFloaterReg::registerFloaters()
     LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);
     LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);
     LLFloaterReg::add("simple_snapshot", "floater_simple_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSimpleSnapshot>);
+    LLFloaterReg::add("search", "floater_fs_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterSearch>);
     //LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>);
 // [SL:KB] - Patch: UI-FloaterSearchReplace | Checked: 2010-10-26 (Catznip-2.3)
     LLFloaterReg::add("search_replace", "floater_search_replace.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearchReplace>);
@@ -588,7 +589,6 @@ void LLViewerFloaterReg::registerFloaters()
     LLFloaterReg::add("progress_view", "floater_progress_view.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProgressView>);
     LLFloaterReg::add("quick_settings", "floater_quick_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloater>);
     LLFloaterReg::add("region_tracker", "floater_region_tracker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterRegionTracker>);
-    LLFloaterReg::add("search", "floater_directory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDirectory>);
     LLFloaterReg::add("settings_color", "floater_settings_color.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterSettingsColor>);
     LLFloaterReg::add("sound_explorer", "floater_explore_sounds.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<ALFloaterExploreSounds>);
     LLFloaterReg::add("webprofile", "floater_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create);
diff --git a/indra/newview/llviewerinput.cpp b/indra/newview/llviewerinput.cpp
index 9639fb38ed4..74e8c101321 100644
--- a/indra/newview/llviewerinput.cpp
+++ b/indra/newview/llviewerinput.cpp
@@ -49,6 +49,7 @@
 #include "llfloatercamera.h"
 #include "llinitparam.h"
 #include "llselectmgr.h"
+#include "fsfloatersearch.h"
 #include "llfloaterwebcontent.h"
 // [RLVa:KB] - Checked: 2021-07-29 (RLVa-1.4.4a)
 #include "rlvactions.h"
@@ -708,7 +709,7 @@ bool start_chat( EKeystate s )
 bool start_gesture( EKeystate s )
 {
     LLFloater* focused_floater = gFloaterView->getFocusedFloater();
-    if (focused_floater && dynamic_cast<LLFloaterWebContent*>(focused_floater))
+    if (focused_floater && (dynamic_cast<LLFloaterWebContent*>(focused_floater) || dynamic_cast<FSFloaterSearch*>(focused_floater)))
     {
         return true;
     }
diff --git a/indra/newview/skins/default/textures/icon_group.png b/indra/newview/skins/default/textures/icon_group.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c206fd883470dabb2235e6e44fb26dd4cd87fce
GIT binary patch
literal 523
zcmV+m0`&cfP)<h;3K|Lk000e1NJLTq000mG000mO0{{R3C@l|D0002+P)t-sLPA1B
zL_|M7KSM)9S65ebbaZufbyZbWdU|?|jg5|uj(vT7M@L6MKtNAVPlkqujEszkh=@~D
zQ$ayNMMXtJL_<(eP=$qsOiWC6c6N)4i%m^UUteEUR#ikrL|R%}a&mHacXxk(e|dR%
zczAe^kB^<5otT)IW@l!8etwXUka>D}pP!$iqN0L=f@o-HudlDVy1KTuwv?2VprD|k
zp`nqHkxNTUx3{;sxw)sPr=FgkfPjFou&{xFftQz;o12?HK0a@6Z@9R)l9G~bZEdTo
ztF*MVnwpwUPEM$(sHLT)mX?-~k&u#;lB1)eMVyV90002iNkl<Z7}G_KX;;E95Je}%
zrDbUftxAgv64uy?U}k6)MZkrv`2YWnK{;~g)7<ms4S<0`E(aX`VQ_SOa(XbFfo10l
z#Y3Rv2-huFJpXJjyz>j&6&3I}-=9>2&<<+O<<<4?&Ts0sjfQNt+MTX>0O0ggS>8zz
zMe)7QOhf-+FnpBK)*5MKL`e>k^hsLcS>w3K!Dnuoq%XbKa1y<VzDZ1HNivVeq|`eR
zeE_cppXt}4Mam3O9+n~EYK?lMGRl-9uwq2hkI|MWGXQ<#4vm{X@dKv>9uNDn^{4;<
N002ovPDHLkV1g*0?;HRC

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icon_group.tga b/indra/newview/skins/default/textures/icon_group.tga
deleted file mode 100644
index 79cd71689d0b982cc016cfe685e605098dfc8f67..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1068
zcmY*XTSydP6#iy2D0=bHClPuJs;3Bpyv=T|sH<eFA%SF6LWv;WR?tyF5xlLNH#Bc6
zlHh~pZn|n&S-H(vX4+O;W0s|rmt3=4t8J!#W_GR44`<Hzo%4U^oSy+j0iXhigFiWY
z_DB)255N?_0g1pSa9LqNfucd%;PeBph033@dJ`lA8gK$URKPwT{qL9X{!%+)iq0sU
z<KV|o9TZR`(~8QjQQ*DY{H?+Q3<I}2@LZ~Se|_-Lsrkoq_k9@z0%jl>SO9`{@6i7R
z6ym*@>`Rk5Ne6Q2I54g7lD>%4Wz-Mg(P8vCNLDswEgJ>DH!AI}eg0j(dd9uIeGaPq
zXDvq-Y@51Ef6G;px^MoSfg~XY^CE(zO7Ans0S#szVi3dw5RE$tMbGQC(Ef*afY!Sg
z1Gs@ypdPRTf=@<Schre-9%JNvuvfl%nPNb1pI=eooh9e01upw}nO74Zh%;pQU>sYJ
z-t%-<SC{FE$yjS_XlUr}?(XU7(dl%}&COP;wYRr7Jw4rIGTCgljEszskdT&^md3`$
z;^N}|{{Et(qPDiSYdzP7hlhuThN7dRYinyeJ3Bi%I_m1`1_uX6Mn?Mj`qI+UN=i!1
zW^;RcyCL6TG#U#F3ol%}(A3n_+S*!EQ<ImMXD}EThRMy%&CJY9PEJ;9)cQnyN=iy>
zY-~kEMNUpmOiWB^X=!|XJgufR8cle3ctS!#d3kwdWo21eSzKIPSXfwOWMn}>L3MR?
zRaI4fe!gC>&(6-y%F0SgN}_2xG&EGLR!2lcu>G85lbnTR2Z*_62$<x!+3N}(T;#YL
zR&LVb7+?n+4%YK=X?Vgm^on(m!?NFnv0HZg&6#_w!!b(m$cnH&VV@X(es}TC>}}Vy
zAbjPg>=O@ox9k2ScW=`ptWH0fdi;pzw@4TEp&*JI&mCX*XS{26cIN4dAbLD+=ikiD
z@vmPwU%n7Y-XnZmTHIRtu<?H3ok&br{rqWb-L)pJdOR}zy5U-1|FX8avMfPTFS@tB
tf7_IS<OK28&mY^OTr87<`1`jH`hKlbC-s`dsD!9E-NDl*qGB|M@CV;(w2}Y-

diff --git a/indra/newview/skins/default/textures/icon_legacy_event.tga b/indra/newview/skins/default/textures/icon_legacy_event.tga
new file mode 100644
index 0000000000000000000000000000000000000000..7805dbce60eb7c58bb99826157ed222813c27419
GIT binary patch
literal 1068
zcmb7?&q~8U5XPtW(4M5=#iK9K-g*-cg$O~h(0_VtFVce`?LiS=$Oj9#^%ZtH-!|Wp
zuA7Jp!zMG|@0;0dL@tDDAOpGSPws97VM{yG@xffYvkq-sL#~w42X&@_F8CHw_<9qs
zKdSn!!KW)-MbH;Dcj+|6V;<ynYaXBHKHz-LYE5k5Urqa61$+>Ew^|#Ib7NNB*BG*v
zLk$}AiX*VQs3&>MVYQS8X7YX4ruj(prUz=KftKe8>|2fdsy&mf=S)iv@c!O#cZ^NN
z<GUl^fgJ0$ALQU?03V0f;VkTJ&+h7U@3A)ij^Q5BtK!{t^FNc~g9rHM_B(IoZ3fr-
me{Xv7tb9-H<A?0mzeL?%JXo&9Y?-a{c|Ls_zTD@J*+`CFKhviG

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icon_legacy_event_adult.tga b/indra/newview/skins/default/textures/icon_legacy_event_adult.tga
new file mode 100644
index 0000000000000000000000000000000000000000..c344fb1e78887afe2b20ac4830ffb057772416cd
GIT binary patch
literal 648
zcmZ9JOG*Pl5Qb|e2E<j4;01K&N*6(hFc=hkA(BOKB_duRWYO)Iv&36@ld`_QXOfs+
z%vAl4s_JU9BkRw|Ms|Fd#+MgDJXL1?O{xgc#qLP_{jKN<fg^$Ki32zHpS9;@9g0C@
z_B(qi=~kO*7Nj{c4*%@Sh1Weo3+eQ!cf~E53fq5?y2GvDY(r}1id5G?p{^QIQ4)qi
z+F`dF>HT#c^DQ)DQeni34v65mBNO7&s5J7=kB|kc>NQsB<1b{;JG(`eWoFh_wh%Qi
zWSm1;soJ&cO)Y)5H&OHj)-sG%vU!kzJ6zAL7l5QDl+Zn@JaVB{luRfU+1dHENiIy0
YF#2#F?j9#k&3$uwbMk!EOed%I2Uv>&3jhEB

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icon_legacy_event_mature.tga b/indra/newview/skins/default/textures/icon_legacy_event_mature.tga
new file mode 100644
index 0000000000000000000000000000000000000000..61c879bc923c7d1ee625a3995012a3ddecca363d
GIT binary patch
literal 1068
zcmbW0Jqp4=5QW#+Smp>`KszffM2HZK3jQHtAyy*d1tj;;(i_?46l>nFZyA<If`MVO
zGw*vdS<#rt@QF=qx}EW4WDw<JTP|1&GyBknJ=E;=B0(KBJhT6ke?9Hzc(CtzCebcE
z5vb{?;xP+#=<>)&XofXp?iFV6=-Z<3JkIoFJ>+-}d7Q~;U+Q(n9pQeo&gKu{k#!wf
z&B`3y{rTi|WXb6>z6T6EJbS-cJ%@W&)xcv{u)>$Wn{^@c_#N2ag|3G@eV9e7Sn+V4
z)G+IN;5&M<4?Wzj>^I5U1Mf{3t?~RHv*`nmy4i!_O#Z)QbgtvU^4YAm$u3=|%SCTL
IO|ztLzMf}`#Q*>R

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_1.png b/indra/newview/skins/default/textures/icons/ProgressLarge_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff277fc431d6d5f8b13baeb47b478f321e00ab79
GIT binary patch
literal 6163
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_10.png b/indra/newview/skins/default/textures/icons/ProgressLarge_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c94e21d89261478fdde301cf1309dcc3bbe3065
GIT binary patch
literal 6310
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_11.png b/indra/newview/skins/default/textures/icons/ProgressLarge_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..89bea9b474bbbdb36be8e1024c00d226a22070f9
GIT binary patch
literal 6169
zcmV+!80P1RP)<h;3K|Lk000e1NJLTq0077U0077c1ONa42T^7f0000WV@Og>004R=
z004l4008;_004mL004C`008P>0026e000+nl3&F}00002VoOIv0RM-N%)bBt010qN
zS#tmY3ljhU3ljkVnw%H_02h%-L_t(|+U=cdj2zXK$A8t2nep@t9`Fk=CNU2K%B~QW
zQAk1*DQ3sQFj(3|$_feXYJ<e%!|o~uR!LAi&f@(*Kq9LZ8#alwS(A_`K!nG!Wn(L0
zdDy!)b`}=#NWf88lMtKn*q)wOPj~Hy?w+aYuDa*ms$11HEPsFSbXRrNz4fnq&$;KE
zdyeDs5we6_ryKAQ{3rnI4Lmf?)m+-?_NlOfyZB7w?-?H9S+k#?WhG}j-3K3B8iXuR
ze2<$wpFYj4?Cx}v;$z`XS-X66zyQ0r(c}W%IGyf802V4CBY_Wp7i;w|ah6)Adl7(z
zNyv>YqhlW5qg(ePPf_l4KLW5Y3Aris$TjrnUgXDQQRQElgq#dLa)wF0OC07Go$f^-
z7A7I8{`Bjecvq)e8rp#m7fRfrbJ`gWce<q^_^=V;=#7v^GO6;yhmR1LmQN}3U?v4R
zd>9GQz(bi-c<V^RbTYu*bOAFw%2=m63}wD0pVZ6sd>YbkwSo|ryp1~y^S2B%{=S!Q
zGn`)Mf}t@!Zsc*!oBNb%t8=PDmAJ-*KVctR=IDR{wy-O$t_5RM9v?Td%R@)A)x~t$
zry!)4SNTJnYxnUu>jSzwl1|rx@uW09t_gf)Zsh)S+NT^LdEVxO=-0lDs{_BknOoB7
zTo9g6A1?C!kRzLYqb4yZ2yrQKf<w$kyK*;Q3O)7=r8GL%juZS+eZu`*6LO@K&f;FF
z_SWd5#y&=)T)BtODURNoM(5hGUA-VIu~~7nFO3$8>yQG|ybxvLsww@W_oUIeR=B*U
zUJ%}+9Jv}x&iK$+81~}wpHZ%?GGdh2kw*9YaQJuC;kA5S`EzYgOB`qr;<AV;FPg4y
zr+7|ze28^vbkK|EIH5ZHn4sE@r_n}D(@78Sa@6d~)BHp@LwW#~;i@&PTZ9*+%)g}3
zN=-ssmT-a>biF@yZ0Csb_}a8|`#NTMD*RxHXM~?W98I?|g|>0grH}V`$%K+|(KoR<
zP4)K-r^63QO2!c$NT-zs)?SzMIK=@IS#ntL1C`R$ww?-KQAy$)?x2!RD~-(WH3m4z
zuS|Y&w{ZOHCV@Ng@I<)ED@ily#j*%Pe@KmU`2#QOuig&{ma8I<rPEQx8eJ0S6+O4G
z9T+>PT>AN)pwYH;S3SqAOGo_;U8Bq5e4C)0SVbg{VXs+`z(d0E6x3hE8eNiNWwHHM
z5s46o636r@`Iaz7Qc!<G*XXi1e>h!#Z)BhPVtq==JS?2CS?fA65V}T}MrUg3ZWA$r
z91JLVK$wLSwrqv2(Is)7qPp8etf&)hN@P7{h-;JUWXKv_7Uv`B$J50O1Jb5M*5n^e
zu9G2abjc@E?u2JEc3hS=CDPzumt6Nl*65Ocm8y2tgoQvkO-hciO*kVV$L<V23Q~D@
zh<DQn-?9%Yk&Bv?$N^D_ICi^&ma*#?5`MO+GvSSvLP@nKk(XGBm>QpJclF5zo5P*(
zXoAJqUM)(bNgx6B*X4<JXZZc1NmDY4CI*Ya)*6(Q*(6-Vy87$zbo-amLUe>fc3Ytj
ztI_Wol<Y`b{oT{PMwi5SN7UUWEN@59phTJsEUUi<+pjN)^Ny&yO<3O_B2prGNGz+r
z2mBv({4X6*cbiCH!;VOa<RP)BZJl6`{|i~1cSzlBLMEh_L5BI7NvN?%i8Lu#bL{@C
z)h#87bGzzpf8(D4)PxK$%)9Ji3)^^?Jq+qzR-i=kkVq3tkM6M+Ke{B&Z8~ee#vYD0
z{uw+u6(Kiqj4g8`qnAPU=wDh%iR>X!J9f`-HuT?_`O{p#A6*vbww$$t>|+~)b0cJs
zJ&fr2MID!rd|9Q?(8-<Lrnl?vG^@j&YmtM(v~+~)Ld}s~ia6V8W}1I)Vq|`V$agHW
z!h-x5WOK+%yH(m4=Mp|b9PSJK-OU`++jFNFCGzB;a_r71M#xOFb352EPlv-cQ7*-I
z)($YDm_xp%+@R5HXvhdDGAitc*w2F@spx!AjFLm5zwRpDi27{C{j#)AOdh8ikvbUQ
z?>yUEgYjMNQ0<3MjgaMHR-N_iVNbvw!WJk-iR2-9fhEzOPmM0`$1-0OrrCJT+F_3Q
zwzmf3&*c?X7$LW6?TH>_AHz~JLMc&sNXFR8XL&LD6LS1w#^otivo(~III)R?Eqjf_
z(JwDE!ltYXc~g4}*O<JIJ7nT2@qXYtvz15UZq^S;aXG;DfaGTtu8XK&t>->{l@=IK
zMSQEKEJ=d+Z?c7b>SitG7%#Vf9poX|%MA=CmOEjLAvUzVfzj060fwc1x8OOZq*KC1
zNH+&U_oIekFAuUm{O~AiS=0KZU%A#)6m%dYfxVgSo=K+9SijN{;qACvz3E3aLZ-Rh
z_!$TiWq>!@C+c|*$rxL?!4@4NcCwnSjla#US2t^k@KzjUyL?jk!myrV!W?7V#?HW7
zQRQrqEP033Hl&6hT4|Ek^B|L4Z*<}Cg`f0XJ}>PGbWsxm>-nmz*al!P4~JbeK)kPK
z1wV>#7bOzOTOF(t=s?T5Ark`rY(7?+pjawegmprqNexiU8Ld#ska-NVTJLf#s2f-U
zI$#hJoE_*b{Ms?bR<q|PkB~YBxi8Y>74mi@KT0f)kf?n(FvHfNH$v*z%MFTkZa6~B
zZ3||U4C)z(0<f1244FSM-4RlURiT#bD6ud?qW4x?YWQI?LYg-kVuNb&7m5IreWpjr
z0K*)MNQa@+@WX6`G!a$vYFmk)<`UK>l0!Gv2=TAuO(0k+)G!|*O$>Y1xh7c89-ifk
z^It6HE#8UR{$#L-BaB3R-8Mv=KRk#U1~kTSL_^07e*5k@9Ai3Ll{}(6lNg2{hdeoQ
zjoU_>vgTnvxJOze6KhQINiK-qhCsxcvc?TV^&%U7axCFooQ50mP2va2?KGUc0^(+K
zxV&YSXDDfy1d~Q~7vxyR<*cMgo+8CYP)hvBMYG8(u&e!?;H503|JDsAjVv{qWE7a9
zN{uR2s*NKyuwQ!-6xh`o1DxUr$E-BQ0_1HIF{Fl{jP|3ppfh=edLHU|hF+Nusp>SO
zZ4*0L9VPv^nvD7x_8?7O%DCAYCAxSiJCuY+p+q!_$Yj*dvJ2JZC2kYTafX+&q67!W
z#02}~#eVg1K9`APKzy|~7(u>+5uJ@VE>&i%D8UwNS*<ZKV|?3Gy)CeqJd5e3Kt-Se
zUMH!7E@N$86wPg74u$L}!Tyl&y3`oc`)Q6oR<MdStmFc^sEQ+F{+CI?Z-|tl-96~%
z1P4{&OX;DRG)G^Hq`(rEb15I^0tSE?rl}efSW0Hf@?w}Ryv8*qftoq~$kkjKtDuY}
z2i2!|nt$V~I&JQyL>K)OaG0eQp~}_kq(KO*A<ye(KXGyC;j=L)vF0)CmU6y(<wTWg
z43*?{(y2l9mibR|Ol768T__!`W1<?hu!j#Bt*7pi&uY_v0^Rh}KQ|_9uAQ>m>kPsn
z&tgiHaOk39X-xR>5h2<raWO7kxKwfFsOgBvEFmtAow9wF(9g%nF`Kw)C$og)sqq`1
zV4vZ9&h1cZR&gG)OsAk|WSEdDulT;H@D`ud&R@`F?cwEE$x^0pQ_=e}ONfipvS-L)
zis!W{>1M`?8KRd}6jL<iWR{S2xb!f^^IWgB7xb^`;bIGSEs#sqC9r@9X;ShcpJat_
z=3nsxK4ImawFFdK6<P@~N|d4rm$I$$<t{zUaFFF(87kmsxsxAoWh85o5)P$=V){Jr
z60)BA_*4Qn9A}Na3TG}|6nKw6hDwuv<@;PY7g}QxCEiM;xa0wEwBx*SG1>+;JuLR7
zgs}mKDQba~OmZE6V2OP?;G6_~0vp-wcTnAwARTAzKOL7Iay%bUIPGy>Nrnz^?eCGB
z!!B;B|4}DoL-c6vP9d0*gM5Qkoo-q*>|_Hp3HeH=TN4HClpJJ`X%;6lK9a{*ph-w?
zr`r+@O-fDzaDYJytV~%=wTND55|WhZGI6-{07roTU<1X4Oh<!-1+_2?LX~CA^7rhg
zi=~>89a%=5kY$~2MpV@3C&y1Y%q5)9>o{~RR0+~xp+03j+v&DMLydm&JkEc!k{ai7
z1uipL@x`0tS!fdS&4s7-&eQP<%K?~V30II?sMFR?z6ni2&N9UAPPfPmt#klPvWyF}
z6RvH7-3-;2o%1e(jfstt{v>9Rfi^k-rdh(Gq%<uj5z{NcPBu3G^lDi{4D#u@Petyu
zR1$UEZa905ZWc4f&)VpKSr)OB-zK9x*7&_8<6?#Hcp^Dp@<uAEA{TotMHyH$zt^X#
zD$nyPPIFGc@f;3sbCN~2Zs>Vd*39o!CW5|}A{Qsf9O{ze#~fm5ARSPp$Qt0JKTRye
zf4f|JPK0nQsD<IYAipT|9ES=;F2~_aOXo7N4M@ZSA|yz!3W7t00+;w!BzY?Qno6c3
zy@HWAA$c5%R{VE8%(9(V1v;Rf-O=$)S=lF|i3ADB(M664D*TRW?2sIXZVvF81|4;{
zEephjvRt%Ih)a$<UARp1M?T;b6(%hNndO<{ZId!T3lvrf$>Y#Xg>n9uX+{~RLN|^T
z6*NzQQrgAMI{-_B%ui46@d0B@<I+Wu?uBc6?GR!S5;Q$ckfUpEOngL#DIyb+qeziy
z$}Q8=0`&%G28M*V<Z&pFXNvbJGtQ_yJw@2`nFOlTqNu;(rcb-j)<#_%3iOd<mXo~3
z%lr>-@IJ7JUJBtWjbYy8r<Tl=u~3Xc$EWx$Ur4i+T7=~2rk?^69OG3E@e0S7pg=#}
z>I>9s&%h@X1-?>2l^lP{d5oK>-$nkJ^Lf&w4q;p<ti4{5J=&O_rpQykAuo$-f7aXB
zCF$~1crBLkqnk3n;WT~vc7v^aWA1OmEY(q<%yp8Zmm(9q!yBIIsh4i@<m3*uX1y)h
zt8W_>Q}l5;E199HH%>~vLao}x0^=c&kRpqK6CCAb-rya*>1iIpMY62bw~Y#iNfvQA
z7g5tQq}<bz3R9!BlZ95cPFY2|80R?eGeK3Kg!x8?r{_M*wb2_If64-IDdO-NWeQTy
z)^adJ6^WHBS%tYNt3ZJQd5ZKh!&@BU*Gy8R*OU%*dTz_5>!YBa7UmL4xRQV5u~5xW
zt5{&<7P`;~ILYDidyX?sR}?K(uc(80`K<=*j1U?<&GR0|RlQutA>kq##R5$+=fbU*
zMslc8reK&u7%-_LaBmudQ9=!eRZMf7{$TY)Dj#0&^A@hRS5>Zw9KbZwOfyA=Mdo9}
ztd2m(b*(z8R5_o;oP{8b>wZlIWIcN#=7|r5M}`!lOb4a~<Vvc{q-kP?J}zS=fxh<5
z1{Vq~?Gz1h9C^{+k0JijR^#KqVUiM;wMPRl;;7-QJ;0X8wMN<yl@Rl?qfP9~N=|Wy
zX=YhXu9cD~&qQ5G-2l-DsZUhq7-NV(<H`8VwuM=ivc^A3Cb>FNwXJ%+s@M|6oRFx3
z%(#GDI;h9Yw@h473)WbWC}xC2pQwzo-lmH{N}?C6i78P`2#GpT8Dzcf3<4=>7Ndwp
z%1Fdwd)kD=nW)mM0Ua43ltfOvPh<m&4k6Jes;$wAI&=b|lr#%*j77NU7ITxmPA%MM
z6IJ9=K%IhulCj8Q-q>WXCS-k}XG4ZrDWLV-8lkHRK)FjXx|pv|_nPS<RfOEgz6gTJ
zTxxumA0}tcR$_pc`7iGmlPu!`#=}BiqgN`tnK$)L3@2o5r2IhUQsWj@6KS@MiMmmA
zE!X<JG?Ogn5|x`bYMJI`dR9Eg1^%J^`)&?!jo~e$c+yI~T}k`H&Dl2nA+*+C^mu7p
ziWGR4-%+3#9y<`N-2LbIh3c>>$f3uOj;Lje@AZ93z?>a`b`yukDd13HhKu+ZIaO$P
zd&wFd{DmA{5k^SOAX!&*qexIJie+<l3xbV+z5on|Dl@F+LT1%&Uh{fXUy$v{@l)Hz
zF^b$1*uW6ugA;!XY?v#p#Y5=eGR}ouOhxj%n=Krd$TMyjAr9RdH;BHD1z5}1LyrwG
z!Y}!Z{~^WLw&^gWRN>dL&i{o=g^O6lv>e5yzi|9Ojz0>YvZTE+kqXH9@R;B){v037
zf9T;PlhH+bi5-Fp-`1KM6)xmTTxKOobQg|K%f6s6LdrrJulT0)ws*1(-{g(@A1*z-
z&%13q&kax(>)Wnvk3X(4%W^K&86`Rk#|l4`Lq5aQ-d2Uw3mbuAMGgvq1V^~8IZC@2
z<27$CtS-fbIvtXIM!sWU{INrk<B}5W#UPtQOeI^Tm6p1WVL4FzMPIA>A;)!iN}uK#
zrQ%IZb`Qrx|Aoc1RJcR9V_^Jojae?@<Di>~D@?BL46Gd529=ieb8cYoT!M`WMy;9B
zOJZEd;rZggc_ukckN5pNhyKui=P0f@BHT3~{<y9LU(Dqu$<gX!ezfuICKzRiA-x@|
z>K#=3+0S|0Nf$GGhbe2>Pwo};@s_uFwl(3BDru+c*e#4J?_A`u_V{B5moiJZf?re7
z-Eua@Fb~qh-vIw)^5o>}kMfVY7t@9mF1M{wVUv2U_Y+LfW9QBfdv<&TVIAv&3wKYl
zj49r36o=Kq1QX`=x#UW(hGU1gUVX^hz*$b&Yvu#<REHo`8J}PUS5Zqit7H0vT+5Jf
z#wM?>lV_qWuTKofqJ3@H_B)qZmbV5CSx5SWJSrSN>^D;v7_(HoXzu!wXb)95TqeT3
zik6TzA-9Oj!Mj_(u%1Ej7Gb@tj6a@Cn38k}De;VO#)yAkMvfUy+0T$86%!v)?e$8Q
zl5`2VS2$j7-D6eYbQ}v-7-Z3|oLG~jBuzr(owyJAKe`l|VA_5oWzjBdze|piGzqy!
zRCikpfH|g_(6u3%;c)P3!-HqktxbxO^axRTKkC@jDs1yiGL}@*yE{ZvhA_b<LrHps
zNZyab?YfP1mDh_SqOnihewPF#X%TX*xw;DpsJvc0Bplb+erKPOv<Q)wgCp(RkP}jQ
z=TT;paK@1M8d;|#9YUn#U^z&qNl4}OVuvW&rHK~Xl%zq3yc`Tzs3oTI`XPz-wK|EV
zY*La2A<}a22oD4`EHRbWe{V^&Z`Rq9YmbsN2$8gvz_&C}mDdYdv}+|hutiDogh<|x
zkR@88Dz6u^XxB_EWrvcadn|cB6h@5HDiTVfT_^JiV26^V36a#@ZNX-~#8qBDB+)L%
zkTnpWl4J>yI#Lds!BbFqy^uw_hWcAaTuPE8q)!~`4+p!7Qc`)nkVLzd`dddlN|NmJ
zZDMTV1HlJUQhB|QMf+y`(hPAZNsf?iz9gIxI&-I{@_HeO_7ZpLU#w0Ea+r1-k|U&t
z&nb^9JQAs?ynaZc-Kb>VBulwW+VT^C<a({%gC+RvI#PsN677aL;3rwaQYH;2-sA|$
zDeGcx3-@ZLtnzyCkTM=cXA6@DHD<Y#70ggGn7EQ7WQymMT@OWpGfZ@*jF)OxjBBv#
z5@@ERUBjhR3@QU9N60ik2|cz+^(N*RW40qPuD}D06s_%W_^#>29I8}U&azC55ZE5l
zxt%IcT#gyeq^t6JQQ^xWM|N={$^~bsa0ypwmlaQvka4~ouyJL#%DUxJq}-_qtB#}d
zm79I7zA4(}9BN>&886wH;V7%w>De1G#@4{@`kHgxLe;}q*v&>pJ)gx^OVCXI4<ujd
zbBv+JmLHhmQT66wmmWs>p!2oecC(7>8>P&}R@+4y+NJiEpByglHU94~CfM7VJa`?Q
z8~kwT=2RBOM@Nw%LgvRuEEq1|vWCnMVrhIBFW<6;%n)K}e3W(Ftyx7z2(czVOwvka
z5*Z;RN0s9^y3JV{dgL4{rKvmmBr<_K6O8K{Onx4E<ft-nzyd%<2q|#N#3i*mG!xP7
z=~k|_kBkrkH8bfk)Tm_U$3}7QVCIn-LW~pmZEP7OV{8m0X@Q|5jyX%XoxA3e0M76T
r&vv>&HsJh!HdAB~nVGUaLLL7HBXeaUxU(&N00000NkvXXu0mjftB$x(

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_12.png b/indra/newview/skins/default/textures/icons/ProgressLarge_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..da38475ba4dc61dfe4bff14a3175837f07d13fa3
GIT binary patch
literal 6197
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
T#5UU&00000NkvXXu0mjfu^GjJ

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_2.png b/indra/newview/skins/default/textures/icons/ProgressLarge_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c024275ebef799760ab3ae4f1ef9377df066632e
GIT binary patch
literal 6227
zcmV-Z7_8@sP)<h;3K|Lk000e1NJLTq0077U0077c1ONa42T^7f0000WV@Og>004R=
z004l4008;_004mL004C`008P>0026e000+nl3&F}00002VoOIv0RM-N%)bBt010qN
zS#tmY3ljhU3ljkVnw%H_02j+iL_t(|+U=cfj9gcF$A5QbXJ&WDFN;lL0Sd*0M39Cg
z-Z;e$Mn*WbWykAC6p0EE6^T@F@}WgIi3Ex2-8AMyh$ZNUloXH}C7`0VREZb6c4D<i
zEg;2mB+6UtV8^iy#V?!n%k0a%-F~<`yYq6-ea<=e+&i;r{_|ya&z*bEIsbdk^PJ~7
z=XpGzchF17bh`rYpcQ=pf7|U^FwG5oh-tGQt>OVbKKH%MH+ZSrtx%y#flrdvy0)*|
zm5qV#u)XQ8JNX<3x?QFC=$R=igJ<@G{VjCB5c}EM?N+$xhaN$Vy2<7HLOXvy!`*I2
zT=WPbeVnJPIm-fD+eXI%zC)qgZHb2-AtXzQE9B8s!tYj=tf9Z#ZHb4TA*9MFeBJ6?
zP?lUaRn>Y8Jwk|2Kj%45zwQ`Ow`Xa$+Y+|{J%S8Ar}f8(3PtYkc1z;+Lyy4G81dd2
zAr7nJWQ@#qyB%?Rp=aPsjx1`VVLBP&LGnPEr<shpFc>4(km)`pgKXeV(5basBu~gF
zf6dU`_lNl=qv}f=W8_+<Obsb+v6bgpG5?oPYqv;t%DS1C**#AO46&R2(be&JldArj
zJqc`Oe-j;zTIXzU=iyV*9`i{OvV`Z^6w=&%>Yw=JxlE~>gscgDWw!E|-R(T8%yN@<
zi;^VdUTzKj|8{n$f0SjGOZr9>*U0f*Maiy~QKO9-Wp3j`+EZ|HgcSI!vg`$lQB}IY
zOt;3!W2{k>6nVhrhL?FiA2hf=IYRo`7*YDLx+u#Ps@>7Yi|mRhU1EO2OMFnta5$1{
zcbzK{r4L0_smj&vjF5+-My~mi^Af9BYxtYw2#GfH6?surlx2pC-54RmJQ`VU=xMQ`
zBS}JL_;F<Uh^n?edER0+{W0>4pxRzFxtSduNfI*44{SRiONoiJ_h0M~`me;_>)*_l
zj%3x|=QtW!KCII1v&>Q=m!|4l<OSi1y-eud%$|;93ArlzCU%7jQJ)-F)19;)63UPA
zgzl~4(2=z1<OoM1%ZsXx=wl+y^|~a^;eIN5w~9wc^5*vkh4M$kH|}JaWy0QkWC}@~
zOE1<u;?j{kA+JPPu7DiRgctaf(~=>QIIrlsh2ztahJ$JcrO5KN;cduqF&!x)i}O8#
zaxw=Obfn`kd`c(}oiI{UeI;>T66+7Rq9YwbzAlWBQ1v$@)mIkhdxhHL;WOcgj&ukq
zu~)bv#H5#!>MMzJ4RyE1EW?iINNbbB6T&PUYS~Ib^_9fAsP1~yxy*Ik=&VZV5F+a-
zBizycuf$bfS)A{SR(Cxrl)2u}z#fgXjH<FG|8(cS5>|a57RpOeo=pfQtB-KI(@Ldh
z<(AgEYdf2tu<9%6SE6<`$<5s0xKim6a+E#76&;S<L{;AxBb`wIUso3en$-=?=}33y
z;!~0W**=LRsQRvDM7ZJ}b!|PWOfl?uvI>wUA@UNdZ4yaL^;H^d=5a*r(e$V?%`FZ!
zt7fF@DgC-o-l6^`r20N4o<&p|MFY+1Hm*;oi_#^e#67|lZR&4As_!nLd>^lb7kE^t
z@JB`)d(4pbUV;}*)!zhEUrC%R)m@JYv)sgO33gEWn>!>ANt^oXT=kX3xl+>AnB}7h
zXjaWgpAgAI(x(1qDKY78(vrowLehEoT;OItlyLWSV}qdNA!*UJvXq%{cQ`>7=b`Fu
zpy+-q;n4v)gbcEoQNC)o)mQ;Z{cUpW`sA5l%GIPLiStl(*Q3ldx0uthbnat-XhMb<
z<unJ`%^ps3kj-v-Mf8xgOe`5H)LSbW6&xU{OcLjzMo^C#FjsWH%0bS~eGGaoijccG
z$?o})G00{PIwD2(kTf}VvrKc2LbI-QnJdcA<%oMq;ylDz>rp1dIx|IgGcU7;&GRE<
zGY8qHCkQ<sMZBz{a_i(c_r^YTm*Z!`Y<`q=4Rd4-pJ7%~YRHm&#6H_u%9c+ov8sLK
zdQ_NU4XgEAwwYaumv&6&V4P}%cs!!~&2~=4K658~NSYkGeUv#)ZNaKlju;`~ba?C$
z#rfV&I?9x|MW2o#_C?GgUyVGV(Rij}gyfhI&O;pLNe=1OG!(Ch{<@Fwn?~1^cn^P!
zZx+O90ZSqeM?lMnY&>%YpLJZT_k<z7)O5Tx9N*@CX_c!QA=ipgbvAL3gCS=K^&xpk
z{)?53uYs-=<6KpV&j{1({q1y=sq=ANIz~C!a=bMhpB7F2N<u!T)%MN2%&1rm6{0*O
zlZ^2R{=4~K`8em-eg2izj44TJ^JoT>)rN&PLh1#X41lHbGD9_Gy_eUtk8n*|pW`m_
zhtPLsjBm7eU6lfBC{VR}&^(5CE+qI_g>}vPmB$PjZqkt*n|Q=X?;PS%^aU!$Bni^`
zklnm&r4EOANDgrqqlv{%m}G=49kOpvI~{e_$#e`cYS``{Gb3H1BE;uaqlVf_lvcaZ
zVYaY^!^U?p!y&dX(n5LDYZ1`#32Cw#nv)u4_<?**QANls_Zc_TMxrcuNG2KMu9$k8
zKE_$i*xdIf>s5me!A`VYON6)MRi2YCQZEdH5EJH@<X*;&esO};VN#<Nj$}wHHt{6W
zY?$v19XiwtKdE0nr8Db95dxd|ij`t}h`k2y`X*NKed(e^2x;vKnT~LkKnL2^jc7uk
zHJVQ%RnSAygot$LEd0V@G-t@>_fb|GPC)?z1B*=qx&V<5y@g*VCK)s9KOF~EpemZ{
zK11y0q~#D#6#^al3%_=Zv)WXJ*Yy}4;;x8wt{Tziww^#F9h<EUM4igDUTs7f(u@>@
znhHtDkO(^LTWhXq&cn>7ZaaCoG1(^oB^|-S&yEg5snH7aO%C>xm#u*%K~%|v(P6jn
zYxGVm!;jsrlhLMit_e1AkeB$3eRW-9nw#3`7~m-TtjKU;__5svG|8x?q2n&uCy)+2
zDr9-Tn?7-7_=&SG>#&s`v5#ltSKCFyr<mpDPPflAw~714+A+pzR}wM<&_Dk%_Q;JJ
zPF~_Mv2>7Ok`)ZAw)SY9OrL{ecR>c=6sI`FNlsB=!1TnD+2m!?)C6&bYZ&GOs$%Kb
zL<0%93p^j@v^yUdWEIykNX1;=-_COyqHu}vbT9{Z>kywBWj@AxqAuDYp3t@TlSZOx
z${JvR3Mcs=-mn=dI+NEuwsg2eok6y;D*7Vn*u=OysnLoyq2AX*${=|YsV_}l5y!;R
zLU8`+P6~3n)O%tqjUsvosaJ!PUvQiWV1PVXJiQ$sQJR-@G9+;{G^@PM#o>Em!hP}%
z;rXCgsnwVz&j8DK7e%rZC{v@Zb2K2#cd##>eidJaWSC?X*QrH$JKFceO!7_1uNfZ^
zgana1YLqFEWeGzpV}Jq`syh1zTTOE%o4C-;h)ama6ho{vTa}LSH}l^eJKR)=oJxH>
z`Y7U2V}j%Sg5#XvBGAtOebLict07X_?VdR5)VR^qNYDtHW48phLgWbPY*dvB1qK)*
z#}I?$m<4K4KN@8>zhsSW5J?r{j*t>JbG^A?Vm&|PANfkWx|_g=5NJ$e6+H4RV~FKs
z8Kf39jonC=U&pOzTtcpJyT0^jMj_oaW5$6*f@!P|s58NN2FbFVA(qjPM<q<`A4{`A
zDtOW3SdEmkzQu^_k|7UNsdAb>m`!8vK#AC)cCtW`I@4V4n8s?<_0;5dFb^lOkHV+1
zVD&P<>^q~y0FHxEHBV#b$g+gxyo)6eJ3K~(BE`6>+9E(A(ZPagtVWFq&asqtJ4h8-
zXO`vM%K7yBC{-jDsW`}Kn<Y<~Qx5LuG0hpWe3WxqSJ&Fq@QUr}#FUXj=;*AYC=3H!
z;W<9fEg~fzWxTeN)77*S#8|?3Vc1P%xI&H3b1N69Dz&%Z^z8b!-6TGlUdqI*#Nv2u
z=1^xTSNI;Y+)kB=&<+l^zG)uU>_N1TkR;N>o1}sj5%@H2;FDa>#gOtE^^Vcu2p+{m
z7F8`L=$l8#CLUpZ0uQ{(jb<6nqEKgm0>9!Ie-SF+OWd9e9Z=+0Tqi;(e#(;z8zmM-
zh}{7;JuHt131fwZG-(&`74mFKN>(hBjx@)>HV!me7U1p#>A2!P@NS)@WO<&Sw?$gG
z%m<Sb-M$!}!yfy&JNOdRevAEX?QS8Al1to}V7$<TG0qlf5c1`2*Tx3zlw4vpw=ZT>
z=9i&C$Y8hYVuuAv-ph=$95-FVAT+crG2lb5qRvt-^G{sj)4Z?Sm5GZP=uT8pr>L=l
z0%KOkReBKtA=h-f8n*Ds0cRNG+kBzhm5GaMph3t>-L8urd~#%Xjq@zw!#um#DR~JR
zggn0Z)ZPU;E;4|R$A@{A`w|Sjkub)292$gNVWhEATr6m&Blz3n!+e*2=yt{IaDb6u
z*|{Lpw<R`8mL{<{D74T40VUV+4ATiU11}NNE5JD08ef}@iz962&iTJ`>~s_Z|EgPO
zollkmvz%z5BPdzP&v~A|Orq1E&hH%=7b|?LX?ws=ns?JjIj9C5x%!-%-+glU{GRia
zLyi@AT&2RlvCh@wT5s;k{9a>9`H;orF>FYVW1OR)@U8W6mMZ_=G}IRt78N1wf;=33
zoCSX9D2G}$WxLWMB1Df4fIi;Br{qL*<#?X0DYmj_ed<0Qg_aX2S*lueK$VqTa^_9i
z#=aDTe)TLNS!$f6)})tbxy*zH9RM{7WSl8?BWxG*G`T|05|W|H8Olu+^vN=ibi#WD
z#@WXAQ;ApDv({c8D9}$~{?ngK5>`zdU^Qb*B>tS973x_kyhg=xDU_wc>j`Wg9b^M{
zvYriz>0UiMW%VYeIK&}f1v@FSGl309Jv>6{{Ho_hNGk@}z(#h`?{K`NL5S6%&n&YX
z?*&4{L!X26vy+XicVc@?UZ{`q8vkr&rt~S$$8W9aaESH1!JkE6GQ|X6V+-$N3twYG
zZKl#fvLj?OkIcoqeOy1agU<k0`Cs0`{(W&YLK>Of3}V^G9WTid(jHo4m0oBjp8=-%
z4VPJ>8}KFsjtGenT4O2et>jBmgmi}RAJy9!QlP|fN({zYb2uR+Ecnc**)1C5MPE%$
zf{=xYsu^v0p2Cr#kCU8XY0M>{6GC=}biZY?z!mIdqgK#j*Mvlc=RU$6(Lc^I%Wo+=
z&@>znGR)5us>q?{;{ztp$pzz9%Zd)qy*4UhRztIjr=vK;GfK_SI$7W$wusTs+>Ma%
ziK-onAeb&Rt7gO=A!~U>xFSXn%*|}%K?S33Mo5s9LMN%i!(smnG^^vBCDZ+t2ehRR
zSGL(Ymi-|fRc5)2KSIn>0fk1EbE8=`BjyNcR(B=Dh%^`0b#V#Ni`LtWj@XMHIVYM`
zGhz~Q)hP5_tXPagJUG95W;gK&F-<$#z!w&xzxx!Z@M|iLwTl>p4Db_fGyYYK6fO(!
zv6ms{X-6A)c|oiPd)H6)j%F3Wrca!ucCsU6yG7bj2m)jNDgP4u(bz?DK_{$ndYI-`
ztAsT{zAC%SBTX>xiA|P|ZA&1hzp1ASuuWLwAX%W93>o4}RwJWB7fG59C#Dly8EGw1
zOl64eMAZ@Xwx>r&YrXBlitDe-I-pBPoQbL}K>s44BY=J2eM<w24k7j$RY)qJMMXz|
zapkgF!fx|qfwBy-O-`(^iDvP5oeK%mk-#Pgd-<ttvX^DZCd(|a%2YrZa-8K{D;=Bo
zoTE-l683rNg6aNUdKX8H5ZeUz3M*)E^65>^kZV2nqLtv@44NZkh{M$Q6Qf(}S+zTH
zzAa8pXb(k=kYOu2lnLYlI*xOOzE(PRuo|n`HYS4Ps>9r2nAgNM)9E#O`Gr&?q`*&E
zWBAAjPnu7bJa2NgJtStaCA68PgR~Rk2x&Ennx`tWOLzY%{v)b5YJ~I~(h-@qIH2P+
zr|05dH=)%(Vyj%6q0_|iknuex8MR13{O9r+Mb!vd%31A=MWXpROO~^|NuF%0iM@Sa
zhvxlcC`U-R&tGc;MksXL<O{gS2cm)<#<BJ;AV?rLslFgXmJ6Kfqyrub^*ao)+d6f2
zG*mu+9S>nR%odI-WrwJWkoGvl*46RIahBs0I_VhZQRUBu*vEhJam#K3{MM&=j6|yN
zYhwi4(qA}Ul=Bj(2&s#4?==(14e~qQBp(+2{TX4$@5azLu$suUPmV7N%BobG=)Tai
z5C2eB9#n*sgfw1bvPkpsC~}T7^o2b}ekUL2H?}=gBgb{E?UC}^4)d7p(*T`?V}<X@
zUTXEiu&5M2S{ucDvgG(3XYk2))}yhFS&gHtQ;yPn#DqFaIruWbdCo38S$?AS{^Llf
z#r&AG(ux-9rBLywogX<vA7^+2!svj<gwBadeF_h8R{5D%Vau)CCMw)7Jh5n@{&qqo
zSI0v$hlcc<8b9JL4$V8fr<mw8rK>T(1aFWJKd4z`m+<o=k;#FVu~hk4*0{(g)4Ij^
zh<LX7QSmj=!}#0@(W&{K8(~B*8%^{X!^0eA1v|-8=3C6@?ndw!-~z9QX;uLq7Pi?)
zZ}W^!S&adfwN`nDu)!zCGt&NJO-wS%ll1dfz~AZjoX(-o3BG1l7mq&9@jB3_l3~)+
zu*Y(l)>e;d=dQfH!WOu-tQ8V>>tl*3bNgHZ+dT&P1HUE{E;|5T6t|&0<)$Vz`r9A%
zgh+K9_16KM6EeVgPKT|^8@PiJ;THEe&~*T)lWTW`$)Y{3`Wq7t2?^F67kO=N1Dpa+
z3%5C<XQtMHN0t80`%9u-QaBQYLqan2@g~Rd)RPtL5SN1wx@=yJWu4}u9l{7Kx_c$e
z;gFC4-r@vA(NW|D;U@dUa~VdclM6FiOUcAX9O+sXa7IW&(Txlc^RRG}lA-rb13t?-
zoe;8UmnPQ4;E0d`F7g@?iZ1A^gdJ&D&8UT)I*~>DTKBJp9-I&o&=Dy+K;`{thGYP=
zfFB+;@rbzEc){q5h%-1KM3asv??(V<>TWY?<QA+c&A4AQWk?fjB8W|hCLQvE%b~j4
z43A29Xzin-vCoC6(HJoa(Wc{$bk*HfWW$>&Nvy7@zp)6>rbE_R9ILy{s8I;tuTkP2
z;in_%XHkklhyfkaaxejPw;6u86oD5-(Vn_x%bE}aI^^Y`v`~wQDoa$`JtWbdx@F6f
z5Cb}7ZRIFWB-_Y3IhL!QEs6GB>8ih0gc#8wYb&w>>Htc|k1X0#)wV1MF{DHCe#lES
z2dJr}h>mD?<=EANF(HO@NZt?Gh~WgasK{=TXt&?jXaPe)4C#>7T_?_38Fl*9V?>@b
z<LqlRgb^XebVv;;C1FksgL1tdKo;$(slNt<6u7`K6FQcNLw#=&)+-gVQH_;ejMUU$
zZ9)pna3Xvcq6+tldlM5@cblPHuLqDt`>q7yiibdxkUSIo(u|G*pB1i1McrM1A0<U(
z(O%?%G-|0qh)<p>Cn%dmd+TRoWO*v;ZZjg*>j9(}#7)XP0U{y64w4g8wGNClp&n$e
zR3IgFx3xmb^?CqFv<ord-9RLy4>-n!keq?youiJ#rKIkLwI%{jMJgGFZ=@X}3GvC0
z?>y+QhZ%kx+4L@;7A-}hPsR9=Bi<Pz3CWV>7{9m6jxoy*lx2xHYh~2rNbFDWs-nc>
z+iBD>k`Rw6-omrZH~O5SapT?Eh^E-3)r<;XRFv%Jd>VC(AS6qL6U4}hbd@iL99%gd
z?(Izs9%YtGV)NC7%*`#ezB`>d3bl*5P<WNqj5nQ)m}D%pxv8PXpuE02z_yljY^l~-
zc>S|+LmW*qGI!($$~^5dz>FQLtYkuJ)d8+!!(4vjlxv+vmNw%fKS`p>04um4UDim)
zmO6SUK5JU2va*Mp-Mcljg}8hR#z?Q??M8^!@~x^H-mMFGyAe{-akthebe^p05xm_9
zsq2i8I$2hAyQT^(PD0+TELo;wb_*7WNu?K#hs8<AkCY{^Mg|p_N1cphXzUUeCm{!v
zk%;co^I8O(9(u9yy;vt5jBp_2zuQc_EWO$E-mH}lwzZ9tNw$TOq=dT!OD?gP6Wrg&
x1M@)u%Y1{Ex?Ld`@Otw-`TvW>J7v91@qcsSP=B!=*4F?4002ovPDHLkV1l<A^fv$i

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_3.png b/indra/newview/skins/default/textures/icons/ProgressLarge_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..87b931e72e753c263fc0f07bddd2448ce123d8be
GIT binary patch
literal 6090
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
Q9{>OV07*qoM6N<$g2zO3LI3~&

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_4.png b/indra/newview/skins/default/textures/icons/ProgressLarge_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6dbef74361edb829542a2809fb2a976f03008cac
GIT binary patch
literal 6295
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
N002ovPDHLkV1lAq*!lnf

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_5.png b/indra/newview/skins/default/textures/icons/ProgressLarge_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..daccf9b375ffc677a02aa434bd0fc2514c1d614b
GIT binary patch
literal 6158
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_6.png b/indra/newview/skins/default/textures/icons/ProgressLarge_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..cafddcb88dc21d60592ca403c46fd7fc0289adb9
GIT binary patch
literal 6220
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_7.png b/indra/newview/skins/default/textures/icons/ProgressLarge_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..8acf6472d4d70d6fb758fa7321584c8bf7c6e621
GIT binary patch
literal 6100
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
a#s34K^jh37hlkq$0000<MNUMnLSTZWqovaT

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_8.png b/indra/newview/skins/default/textures/icons/ProgressLarge_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..df0e825cef1f053d42c4fffca7efdd0e9f4969cf
GIT binary patch
literal 6223
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

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/icons/ProgressLarge_9.png b/indra/newview/skins/default/textures/icons/ProgressLarge_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..293a7b8f5c6c7983e2e46c56cb661a1994ad3249
GIT binary patch
literal 6034
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
M07*qoM6N<$f*xC6aR2}S

literal 0
HcmV?d00001

diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index ec2de431bae..c80f637a649 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -990,4 +990,21 @@ with the same filename but different name
   <texture name="Right_Trigger" file_name="xbox/right_trigger.png" preload="false" />
   <texture name="Triggers" file_name="xbox/triggers.png" preload="false" />
   <texture name="None" file_name="xbox/none.png" preload="false" />
+  
+  <texture name="Icon_Legacy_Event_PG" file_name="icon_legacy_event.tga" preload="false" />
+  <texture name="Icon_Legacy_Event_Mature" file_name="icon_legacy_event_mature.tga" preload="false" />
+  <texture name="Icon_Legacy_Event_Adult" file_name="icon_legacy_event_adult.tga" preload="false" />
+
+  <texture name="ProgressLarge_1" file_name="icons/ProgressLarge_1.png" preload="true" />
+  <texture name="ProgressLarge_2" file_name="icons/ProgressLarge_2.png" preload="true" />
+  <texture name="ProgressLarge_3" file_name="icons/ProgressLarge_3.png" preload="true" />
+  <texture name="ProgressLarge_4" file_name="icons/ProgressLarge_4.png" preload="true" />
+  <texture name="ProgressLarge_5" file_name="icons/ProgressLarge_5.png" preload="true" />
+  <texture name="ProgressLarge_6" file_name="icons/ProgressLarge_6.png" preload="true" />
+  <texture name="ProgressLarge_7" file_name="icons/ProgressLarge_7.png" preload="true" />
+  <texture name="ProgressLarge_8" file_name="icons/ProgressLarge_8.png" preload="true" />
+  <texture name="ProgressLarge_9" file_name="icons/ProgressLarge_9.png" preload="true" />
+  <texture name="ProgressLarge_10" file_name="icons/ProgressLarge_10.png" preload="true" />
+  <texture name="ProgressLarge_11" file_name="icons/ProgressLarge_11.png" preload="true" />
+  <texture name="ProgressLarge_12" file_name="icons/ProgressLarge_12.png" preload="true" />
 </textures>
diff --git a/indra/newview/skins/default/xui/en/floater_directory.xml b/indra/newview/skins/default/xui/en/floater_directory.xml
deleted file mode 100644
index 3c6d0cb7fee..00000000000
--- a/indra/newview/skins/default/xui/en/floater_directory.xml
+++ /dev/null
@@ -1,291 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<floater
- legacy_header_height="18"
- single_instance="true"
- can_resize="true"
- height="590"
- min_height="135"
- min_width="430"
- layout="topleft"
- name="search"
- save_rect="true"
- title="SEARCH"
- width="602">
-  <floater.string
-   name="not_found">
-&apos;[TEXT]&apos; not found
-  </floater.string>
-  <floater.string
-   name="no_results">
-No results
-  </floater.string>
-  <floater.string
-   name="result_spillover">
-Over [TOTAL] results Showing [VISIBLE_BEGIN]/[VISIBLE_END]
-  </floater.string>
-  <floater.string
-   name="result_count">
-[TOTAL] results.
-  </floater.string>
-  <floater.string
-   name="searching">
-Searching...
-  </floater.string>
-  <floater.string
-   name="all_categories">
-All Categories
-  </floater.string>
-  <floater.string
-   name="search_banned">
-Some terms in your search query were excluded due to content restrictions as clarified in the Community Standards.
-  </floater.string>
-  <floater.string
-   name="search_short">
-Your search terms were too short so no search was performed.
-  </floater.string>
-  <floater.string
-   name="search_disabled">
-Directory search is disabled in this region.
-  </floater.string>
-  <floater.string
-   name="search_no_date_offset">
-Your search terms were missing the date offset.
-  </floater.string>
-  <floater.string
-   name="search_no_catgory">
-Your search terms were missing a category.
-  </floater.string>
-  <floater.string
-   name="search_no_query">
-Your search terms were missing a query string.
-  </floater.string>
-  <tab_container
-   border="true"
-   follows="all"
-   top="16"
-   left="0"
-   height="573"
-   width="602"
-   name="search_tabs"
-   tab_min_width="70"
-   tab_position="top">
-    <panel
-     border="false"
-     label="People"
-     filename="panel_search_people.xml"
-     class="panel_search_people"
-     name="panel_search_people"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-16" />
-    <panel
-     border="false"
-     label="Groups"
-     filename="panel_search_groups.xml"
-     class="panel_search_groups"
-     name="panel_search_groups"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Places"
-     filename="panel_search_places.xml"
-     class="panel_search_places"
-     name="panel_search_places"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Land"
-     filename="panel_search_landsales.xml"
-     class="panel_search_landsales"
-     name="panel_search_landsales"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Events"
-     filename="panel_search_events.xml"
-     class="panel_search_events"
-     name="panel_search_events"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="Classifieds"
-     filename="panel_search_classifieds.xml"
-     class="panel_search_classifieds"
-     name="panel_search_classifieds"
-     follows="left|top|right"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-    <panel
-     border="false"
-     label="AltaVista"
-     filename="panel_search_web.xml"
-     class="panel_search_web"
-     name="panel_search_web"
-     follows="all"
-     layout="topleft"
-     left="0"
-     top="0"
-     bottom="-1" />
-  </tab_container>
- <layout_stack
-  follows="all"
-  animate="false"
-  top="86"
-  height="480"
-  left="0"
-  right="-1"
-  drag_handle_gap="2"
-  drag_handle_first_indent="1"
-  drag_handle_second_indent="1"
-  layout="topleft"
-  name="results_stack"
-  orientation="horizontal"
-  show_drag_handle="true">
-   <layout_panel
-    border="true"
-    auto_resize="true"
-    user_resize="true"
-    layout="topleft"
-    top="0"
-    left="0"
-    width="300"
-    bottom="-1"
-    min_height="10"
-    name="results_lp">
-     <scroll_list
-      layout="topleft"
-      top="1"
-      left="2"
-      width="300"
-      bottom="-1"
-      column_padding="0"
-      draw_heading="true"
-      follows="left|right|top|bottom"
-      multi_select="true"
-      name="results"
-      search_column="0" />
-   </layout_panel>
-   <layout_panel
-    border="true"
-    auto_resize="true"
-    user_resize="true"
-    layout="topleft"
-    top="0"
-    bottom="-1"
-    left="405"
-    width="313"
-    min_height="10"
-    name="detail_lp">
-     <panel
-      follows="all"
-      name="detail_avatar"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_profile_legacy_sidetray"
-      filename="panel_profile_legacy_sidetray.xml" />
-     <panel
-      follows="all"
-      name="detail_group"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_group_info_sidetray"
-      filename="panel_group_info_sidetray.xml" />
-     <panel
-      follows="all"
-      name="detail_place"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_places"
-      filename="panel_places.xml" />
-     <panel
-      follows="all"
-      name="detail_event"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_event_info"
-     filename="panel_event_info.xml" />
-     <panel
-      follows="all"
-      name="detail_classified"
-      top="0"
-      bottom="-1"
-      left="0"
-      width="313"
-      class="panel_classified_info"
-      filename="panel_classified_info.xml" />
-   </layout_panel>
- </layout_stack>
- <text
-  follows="bottom|left"
-  height="16"
-  layout="topleft"
-  left="4"
-  name="results_status"
-  top_pad="3"
-  value="[TOTAL] results"
-  width="205" />
- <button
-  follows="bottom|left"
-  height="16"
-  width="16"
-  image_unselected="Arrow_Left"
-  image_disabled="Arrow_Left_Off"
-  image_disabled_selected="Arrow_Left_Off"
-  image_selected="Arrow_Left"
-  image_pressed="Arrow_Left"
-  image_top_pad="0"
-  layout="topleft"
-  left_pad="5"
-  name="PageDn"
-  top_delta="0" />
- <button
-  follows="bottom|left"
-  height="16"
-  width="16"
-  image_unselected="Arrow_Right"
-  image_disabled="Arrow_Right_Off"
-  image_disabled_selected="Arrow_Right_Off"
-  image_selected="Arrow_Right"
-  image_pressed="Arrow_Right"
-  image_top_pad="0"
-  layout="topleft"
-  left_pad="5"
-  name="PageUp"
-  top_delta="0" />
- <loading_indicator
-  follows="bottom|right"
-  height="16"
-  layout="topleft"
-  right="-4"
-  name="loading"
-  top_delta="0"
-  width="16" />
-</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_fs_search.xml b/indra/newview/skins/default/xui/en/floater_fs_search.xml
new file mode 100644
index 00000000000..71f0b7a4444
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_fs_search.xml
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+	can_resize="true"
+	default_tab_group="1"
+	height="590"
+	help_topic="search"
+	layout="topleft"
+	legacy_header_height="0"
+	min_height="590"
+	min_width="660"
+	name="floater_search"
+	positioning="centered"
+	save_rect="true"
+	single_instance="true"
+	title="SEARCH"
+	width="780">
+	<!-- Strings -->
+	<floater.string name="string.location">
+		Location: [LOCATION]
+	</floater.string>
+	<floater.string name="string.traffic">
+		Traffic: [DWELL]
+	</floater.string>
+	<floater.string name="string.area">
+		Area: [AREA]
+	</floater.string>
+	<floater.string name="string.members">
+		Members: [MEMBER_COUNT]
+	</floater.string>
+	<floater.string name="string.founder">
+		Founder: [FOUNDER]
+	</floater.string>
+	<floater.string name="string.age">
+		Age: [AGE]
+	</floater.string>
+	<floater.string name="string.partner">
+		Partner: [PARTNER]
+	</floater.string>
+	<floater.string name="string.listing_price">
+		Listing Price: [LISTING_PRICE]
+	</floater.string>
+	<floater.string name="string.slurl">
+		[SLURL]
+	</floater.string>
+	<floater.string name="string.duration">
+		Duration: [DURATION]
+	</floater.string>
+	<floater.string name="string.covercharge">
+		Cover: [COVERCHARGE]
+	</floater.string>
+	<!-- Tab time -->
+	<tab_container
+		layout="topleft"
+		follows="all"
+		top="1"
+		left="0"
+		name="ls_tabs"
+		tab_min_width="90"
+		tab_position="top"
+		width="780"
+		height="585">
+		<panel
+			class="panel_ls_web"
+			filename="panel_fs_search_legacy_web.xml"
+			label="Websearch"
+			layout="topleft"
+			name="panel_ls_web" />
+		<panel
+			class="panel_ls_people"
+			filename="panel_fs_search_legacy_people.xml"
+			label="People"
+			layout="topleft"
+			name="panel_ls_people" />
+		<panel
+			class="panel_ls_groups"
+			filename="panel_fs_search_legacy_groups.xml"
+			label="Groups"
+			layout="topleft"
+			name="panel_ls_groups" />
+		<panel
+			class="panel_ls_places"
+			filename="panel_fs_search_legacy_places.xml"
+			label="Places"
+			layout="topleft"
+			name="panel_ls_places" />
+		<panel
+			class="panel_ls_land"
+			filename="panel_fs_search_legacy_land.xml"
+			label="Land Sales"
+			layout="topleft"
+			name="panel_ls_land" />
+		<panel
+			class="panel_ls_events"
+			filename="panel_fs_search_legacy_events.xml"
+			label="Events"
+			layout="topleft"
+			name="panel_ls_events" />
+		<panel
+			class="panel_ls_classifieds"
+			filename="panel_fs_search_legacy_classifieds.xml"
+			label="Classifieds"
+			layout="topleft"
+			name="panel_ls_classifieds" />
+	</tab_container>
+	<!-- Details/Action Panes -->
+	<panel
+		border="true"
+		follows="top|right|bottom"
+		height="508"
+		layout="topleft"
+		left="412"
+		top="80"
+		width="366"
+		name="panel_ls_details">
+		<text_editor
+		left="12"
+		top="5"
+		height="24"
+		width="340"
+		layout="topleft"
+		follows="left|top|right"
+		name="title"
+		bg_visible="false"
+		border_visible="false"
+		allow_scroll="false"
+		h_pad="0"
+		v_pad="0"
+		halign="center"
+		enabled="false"
+		use_ellipses="true"
+		font="SansSerifHugeBold"
+		value="Undefined name" />
+		<texture_picker
+		enabled="false"
+		fallback_image="Generic_Person_Large"
+		follows="left|top|right"
+		height="210"
+		layout="topleft"
+		left="43"
+		name="snapshot"
+		top_pad="4"
+		width="280"/>
+		<texture_picker
+		enabled="false"
+		fallback_image="default_land_picture.j2c"
+		follows="left|top|right"
+		height="210"
+		layout="topleft"
+		left_delta="0"
+		name="snapshot_parcel"
+		top_delta="0"
+		visible="false"
+		width="280"/>
+		<text_editor
+		left="20"
+		top_pad="2"
+		height="16"
+		width="180"
+		layout="topleft"
+		follows="left|top|right"
+		name="aux1"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		enabled="false"
+		max_length="117"
+		allow_scroll="false"
+		parse_urls="true"
+		value="Auxilary info field 1"/>
+		<text_editor
+		left_pad="4"
+		top_delta="0"
+		height="16"
+		width="140"
+		layout="topleft"
+		follows="left|top|right"
+		name="aux2"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		enabled="false"
+		max_length="117"
+		allow_scroll="false"
+		parse_urls="true"
+		value="Auxilary info field 2"/>
+		<icon
+		follows="top|right"
+		height="16"
+		image_name="Unknown_Icon"
+		layout="topleft"
+		left="20"
+		top_pad="2"
+		name="maturity_icon"
+		width="18" />
+		<text_editor
+		left_pad="4"
+		top_delta="0"
+		height="28"
+		width="302"
+		layout="topleft"
+		follows="left|top|right"
+		name="location"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		enabled="false"
+		max_length="117"
+		allow_scroll="false"
+		parse_urls="true"
+		value="Location info field"/>
+		<text_editor
+		left="20"
+		top_pad="12"
+		height="154"
+		width="324"
+		layout="topleft"
+		follows="left|top|right"
+		name="desc"
+		bg_visible="false"
+		border_visible="false"
+		h_pad="0"
+		v_pad="0"
+		word_wrap="true"
+		parse_urls="true"
+		enabled="false"
+		max_length="1000"
+		trusted_content="false"
+		value="You unlock this door with the key of imagination. Beyond it is another dimension: a dimension of sound, a dimension of sight, a dimension of mind. You're moving into a land of both shadow and substance, of things and ideas; you've just crossed over into the Twilight Zone. What you are about to see is real; the litigants on the screen are not actors. They are genuine citizens who, having filed their claims in a real small claims court, have been persuaded to drop their suits there and have them settled here, in this forum... the People's Court."/>
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Open Profile"
+		name="people_profile_btn"
+		top="484"
+		left="3"
+		width="120" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Send Message"
+		name="people_message_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Add Friend"
+		name="people_friend_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Open Profile"
+		name="group_profile_btn"
+		top="484"
+		left="3"
+		width="120" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Join Chat"
+		name="group_message_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Join Group"
+		name="group_join_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Teleport"
+		name="teleport_btn"
+		top="484"
+		left="3"
+		width="120" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Show on Map"
+		name="map_btn"
+		width="120"
+		left_pad="1" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Remind me"
+		name="event_reminder_btn"
+		width="120"
+		left_pad="1" />
+		<loading_indicator
+		left="134"
+		top="320"
+		follows="left|top|right"
+		mouse_opaque="false"
+		name="loading"
+		images_per_sec="1.0"
+		tab_stop="false"
+		height="100"
+		width="100"
+		visible="false" >
+			<images>
+				<image name="ProgressLarge_1"/>
+				<image name="ProgressLarge_2"/>
+				<image name="ProgressLarge_3"/>
+				<image name="ProgressLarge_4"/>
+				<image name="ProgressLarge_5"/>
+				<image name="ProgressLarge_6"/>
+				<image name="ProgressLarge_7"/>
+				<image name="ProgressLarge_8"/>
+				<image name="ProgressLarge_9"/>
+				<image name="ProgressLarge_10"/>
+				<image name="ProgressLarge_11"/>
+				<image name="ProgressLarge_12"/>
+			</images>
+		</loading_indicator>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/panel_event_info.xml b/indra/newview/skins/default/xui/en/panel_event_info.xml
deleted file mode 100644
index b065f493c12..00000000000
--- a/indra/newview/skins/default/xui/en/panel_event_info.xml
+++ /dev/null
@@ -1,456 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- background_visible="true"
- follows="all"
- height="570"
- layout="topleft"
- left="0"
- min_height="350"
- name="event_info"
- class="event_info"
- top="20"
- width="333">
-  <panel.string name="free">
-   FREE
-  </panel.string>
-  <panel.string name="hours">
-   hours
-  </panel.string>
-  <panel.string name="minutes">
-   minutes
-  </panel.string>
-  <panel.string name="type_mature">
-   Moderate
-  </panel.string>
-  <panel.string name="type_pg">
-  General Content
-  </panel.string>
-  <panel.string name="reminder">
-   Remind
-  </panel.string>
-  <panel.string name="no_reminder">
-   Don't remind
-  </panel.string>
-  <button
-   follows="top|left"
-   height="24"
-   image_hover_unselected="BackButton_Over"
-   image_pressed="BackButton_Press"
-   image_unselected="BackButton_Off"
-   layout="topleft"
-   name="back_btn"
-   left="10"
-   tab_stop="false"
-   top="2"
-   width="30"
-   use_draw_context_alpha="false" />
-  <text
-   follows="top|left|right"
-   font="SansSerifHugeBold"
-   height="26"
-   layout="topleft"
-   left_pad="4"
-   name="title"
-   text_color="LtGray"
-   top="0"
-   value="Event Info"
-   use_ellipses="true"
-   width="275" />
-  <scroll_container
-   color="PanelDefaultBackgroundColor"
-   opaque="true"
-   follows="all"
-   height="502"
-   layout="topleft"
-   left="10"
-   top_pad="10"
-   name="profile_scroll"
-   reserve_scroll_corner="false"
-   width="312">
-    <panel
-     name="scroll_content_panel"
-     follows="left|top"
-     min_height="300"
-     layout="topleft"
-     top="0"
-     background_visible="false"
-     height="610"
-     left="0"
-     width="285">
-     <panel
-     name="snapshot_panel"
-     layout="topleft"
-     follows="left|top|right"
-     height="197"
-     left="10"
-     top="10"
-     width="275">
-      <texture_picker
-       fallback_image="default_land_picture.j2c"
-       enabled="false"
-       follows="left|top|right"
-       height="197"
-       layout="topleft"
-       left="0"
-       name="snapshot"
-       top="0"
-       width="275" />
-    </panel>
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top|right"
-     h_pad="0"
-     height="35"
-     width="290"
-     layout="topleft"
-     font="SansSerifBig"
-     font.style="BOLD"
-     left="10"
-     top_pad="10"
-     name="name"
-     read_only="true"
-     text_color="white"
-     v_pad="0"
-     value="[name]"
-     use_ellipses="true" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="event_location_label"
-     text_color="white"
-     top_pad="5"
-     value="Location:"
-     width="250" />
-    <text_editor
-     parse_urls="true"
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top"
-     h_pad="0"
-     height="30"
-     layout="topleft"
-     left="10"
-     name="location"
-     read_only="true"
-     top_pad="5"
-     width="290"
-     word_wrap="true"
-     v_pad="0"
-     value="[loading...]" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="content_type_label"
-     text_color="white"
-     top_pad="10"
-     value="Content Type:"
-     width="140" />
-    <icon
-     follows="top|left"
-     height="16"
-     image_name="Parcel_M_Light"
-     layout="topleft"
-     left_pad="0"
-     name="content_type_moderate"
-     top_pad="-11"
-     width="18" />
-    <icon
-     follows="top|left"
-     height="16"
-     image_name="Parcel_PG_Light"
-     layout="topleft"
-     left_delta="0"
-     name="content_type_general"
-     top_delta="0"
-     width="18" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top|right"
-     h_pad="0"
-     height="18"
-     layout="topleft"
-     left_pad="2"
-     name="content_type"
-     read_only="true"
-     width="130"
-     top_delta="1"
-     v_pad="0"
-     value="[content type]" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="time_label"
-     text_color="white"
-     top_pad="0"
-     value="Time:"
-     width="140" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top|right"
-     h_pad="0"
-     height="18"
-     layout="topleft"
-     left_pad="0"
-     name="time"
-     read_only="true"
-     width="150"
-     top_pad="-10"
-     v_pad="0"
-     value="[time]" />
-    <text
-     follows="left|top"
-     font.style="BOLD"
-     height="10"
-     layout="topleft"
-     left="10"
-     name="duration_label"
-     text_color="white"
-     top_pad="0"
-     value="Duration:"
-     width="140" />
-    <text_editor
-     allow_scroll="false"
-     bg_visible="false"
-     follows="left|top"
-     h_pad="0"
-     halign="left"
-     height="16"
-     layout="topleft"
-     left_pad="0"
-     name="duration"
-     read_only="true"
-     top_pad="-10"
-     v_pad="0"
-     value="[duration] hours"
-     width="150" />
-    <layout_stack
-     animate="false"
-     name="descr_stack"
-     layout="topleft"
-     follows="all"
-     orientation="vertical"
-     left="10"
-     top_pad="5"
-     width="290"
-     height="215">
-      <layout_panel
-       auto_resize="false"
-       name="host_layout_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="16">
-       <text
-        follows="left|top"
-        font.style="BOLD"
-        height="10"
-        layout="topleft"
-        left="0"
-        name="host_label"
-        text_color="white"
-        top_pad="0"
-        value="Host:"
-        width="140" />
-       <text_editor
-        allow_scroll="false"
-        bg_visible="false"
-        follows="left|top"
-        h_pad="0"
-        halign="left"
-        height="16"
-        layout="topleft"
-        left_pad="0"
-        parse_urls="true"
-        name="host"
-        read_only="true"
-        top_pad="-10"
-        v_pad="0"
-        value="secondlife:///app/agent/00000000-0000-0000-0000-000000000000/inspect"
-        width="150" />
-      </layout_panel>
-      <layout_panel
-       auto_resize="false"
-       name="category_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="16">
-        <text
-         follows="left|top"
-         font.style="BOLD"
-         height="10"
-         layout="topleft"
-         left="0"
-         name="category_label"
-         text_color="white"
-         top="0"
-         value="Category:"
-         width="140" />
-        <text
-         height="16"
-         layout="topleft"
-         follows="top|left"
-         left_pad="0"
-         name="category"
-         top_pad="-10"
-         value="[category]"
-         width="150" />
-      </layout_panel>
-      <layout_panel
-       auto_resize="false"
-       name="cover_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="16">
-        <text
-         follows="left|top"
-         font.style="BOLD"
-         height="10"
-         layout="topleft"
-         left="0"
-         name="cover_label"
-         text_color="white"
-         top="0"
-         value="Cover:"
-         width="140" />
-        <text
-         height="16"
-         layout="topleft"
-         follows="top|left"
-         left_pad="0"
-         name="cover"
-         top_pad="-10"
-         value="L$[cover]"
-       width="150" />
-      </layout_panel>
-      <layout_panel
-       name="descr_layout_panel"
-       layout="topleft"
-       follows="all"
-       left="0"
-       top="0"
-       width="290"
-       height="215">
-        <text
-         auto_resize="false"
-         follows="left|top"
-         font.style="BOLD"
-         height="10"
-         layout="topleft"
-         left="0"
-         name="desc_label"
-         text_color="white"
-         top="0"
-         value="Description:"
-         width="250" />
-        <text_editor
-         parse_urls="true"
-         allow_scroll="true"
-         bg_visible="false"
-         follows="all"
-         h_pad="0"
-         height="200"
-         layout="topleft"
-         left="0"
-         max_length="1023"
-         name="desc"
-         read_only="true"
-         top_pad="7"
-         width="280"
-         v_pad="0"
-         value="[description]"
-         word_wrap="true" />
-      </layout_panel>
-    </layout_stack>
-  </panel>
-</scroll_container>
-<panel
- follows="left|right|bottom"
- height="35"
- layout="topleft"
- top_pad="5"
- left="9"
- name="buttons">
-  <layout_stack
-   follows="bottom|left|right"
-   height="23"
-   layout="topleft"
-   name="layout_stack1"
-   left="0"
-   orientation="horizontal"
-   top_pad="0"
-   width="309">
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left="0"
-     name="layout_panel1"
-     auto_resize="true"
-     width="101">
-      <button
-       follows="bottom|left|right"
-       height="23"
-       label="Teleport"
-       layout="topleft"
-       left="0"
-       name="teleport_btn"
-       top="0"
-       width="101" />
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="show_on_map_btn_lp"
-     auto_resize="true"
-     width="100">
-      <button
-       follows="bottom|left|right"
-       height="23"
-       label="Map"
-       layout="topleft"
-       name="show_on_map_btn"
-       top="0"
-       width="100" />
-    </layout_panel>
-    <layout_panel
-     follows="bottom|left|right"
-     height="23"
-     layout="bottomleft"
-     left_pad="3"
-     name="remind_btn_lp"
-     auto_resize="true"
-     width="101">
-      <button
-       follows="bottom|left|right"
-       height="23"
-       label="Remind"
-       layout="topleft"
-       name="remind_btn"
-       top="0"
-       width="101" />
-    </layout_panel>
-  </layout_stack>
- </panel>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
new file mode 100644
index 00000000000..66c35558b10
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_classifieds.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="566"
+ layout="topleft"
+ left="1"
+ width="780"
+ label="Classifieds"
+ name="panel_ls_classifieds">
+	<panel
+	 border="false"
+	 follows="top|left|right"
+	 height="53"
+	 layout="topleft"
+	 left="0"
+	 width="780"
+	 name="panel_ls_input">
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_pad="5"
+		 layout="topleft"
+		 left="6"
+		 name="search_text"
+		 top="12"
+		 height="16"
+		 width="156">
+		Enter search terms:
+		</text>
+		<search_combo_box
+		 layout="topleft"
+		 follows="left|top|right"
+		 height="23"
+		 left_delta="0"
+		 name="classifieds_edit"
+		 top="29"
+		 width="651" />
+		<combo_box
+		 follows="right|top"
+		 layout="topleft"
+		 height="23"
+		 allow_text_entry="false"
+		 top_delta="0"
+		 left_pad="2"
+		 name="classifieds_category"
+		 width="122">
+			<combo_box.commit_callback
+			 function="CommitSearch" />
+		</combo_box>
+		<check_box
+		 control_name="ShowPGClassifieds"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureClassifieds"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultClassifieds"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_R_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_adult"
+		 top_delta="-1"
+		 width="18"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+	 border="true"
+	 follows="all"
+	 height="510"
+	 layout="topleft"
+	 left="1"
+	 width="410"
+	 top_pad="1"
+	 name="panel_ls_scrolllist">
+		<scroll_list
+		 draw_heading="true"
+		 follows="all"
+		 height="485"
+		 layout="topleft"
+		 left="0"
+		 name="search_results_classifieds"
+		 top="0"
+		 width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			<columns
+			 label="Name"
+			 name="classified_name"
+			 relwidth="0.70" />
+			<columns
+			 label="Listing Price"
+			 name="price"
+			 relwidth="0.3"/>
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Back"
+	 	 name="classifieds_back"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Next"
+		 name="classifieds_next"
+		 width="100"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
new file mode 100644
index 00000000000..3f7e3290a78
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_events.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="566"
+ layout="topleft"
+ left="1"
+ width="780"
+ label="Events"
+ name="panel_ls_events">
+	<panel
+	 border="false"
+	 follows="top|left|right"
+	 height="53"
+	 layout="topleft"
+	 left="0"
+	 width="780"
+	 name="panel_ls_input">
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_pad="5"
+		 layout="topleft"
+		 left="6"
+		 name="search_text"
+		 top="12"
+		 height="16"
+		 width="156">
+		 Enter search terms:
+		</text>
+		<radio_group
+		 left_pad="20"
+		 height="16"
+		 width="300"
+		 layout="topleft"
+		 name="events_search_mode">
+			<radio_item
+			 height="16"
+			 label="Ongoing and Upcoming"
+			 layout="topleft"
+			 name="current"
+			 value="current"
+			 top_pad="0"
+			 width="120" />
+			<radio_item
+			 height="16"
+			 label="By Date"
+			 layout="topleft"
+			 name="date"
+			 value="date"
+			 left_pad="70"
+			 width="120" />
+			<radio_group.commit_callback
+			 function="CommitSearch" />
+		</radio_group>
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_delta="0"
+		 layout="topleft"
+		 left_pad="5"
+		 name="events_date"
+		 font.style="BOLD"
+		 height="16"
+		 width="80">
+			4/20
+		</text>
+		<search_combo_box
+		 layout="topleft"
+		 follows="left|top|right"
+		 height="23"
+		 left="6"
+		 name="events_edit"
+		 top="29"
+		 width="651" />
+		<combo_box
+		 follows="right|top"
+		 layout="topleft"
+		 height="23"
+		 top_delta="0"
+		 left_pad="2"
+		 name="events_category"
+		 width="122">
+			<combo_box.item label="Any Category" name="any" value="0" />
+			<combo_box.item label="" value="filter_separator" enabled="false" />
+			<combo_box.item label="Discussion" name="discussion" value="18" />
+			<combo_box.item label="Sports" name="sports" value="19" />
+			<combo_box.item label="Live Music" name="music" value="20" />
+			<!-- <combo_box.item label="???" name="mystery_category" value="21" /> -->
+			<combo_box.item label="Commercial" name="commercial" value="22" />
+			<combo_box.item label="Nightlife/Entertainment" name="nightlife" value="23" />
+			<combo_box.item label="Games/Contests" name="games" value="24" />
+			<combo_box.item label="Pageants" name="pageants" value="25" />
+			<combo_box.item label="Education" name="education" value="26" />
+			<combo_box.item label="Arts and Culture" name="arts" value="27" />
+			<combo_box.item label="Charity/Support Groups" name="charity" value="28" />
+			<combo_box.item label="Miscellaneous" name="misc" value="29" />
+			<combo_box.commit_callback
+			 function="CommitSearch" />
+		</combo_box>
+		<check_box
+		 control_name="ShowPGEvents"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15" >
+		<check_box.commit_callback
+		 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureEvents"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultEvents"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_R_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_adult"
+		 top_delta="-1"
+		 width="18"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+	 border="true"
+	 follows="all"
+	 height="510"
+	 layout="topleft"
+	 left="1"
+	 width="410"
+	 top_pad="1"
+	 name="panel_ls_scrolllist">
+		<scroll_list
+		 draw_heading="true"
+		 follows="all"
+		 height="485"
+		 layout="topleft"
+		 left="0"
+		 name="search_results_events"
+		 sort_ascending="true"
+		 sort_column="3"
+		 top="0"
+		 width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			<columns
+			 label="Event Name"
+			 name="name"
+			 relwidth="0.72" />
+			<columns
+			 label="Date/Time"
+			 name="date"
+			 sort_column="time"
+			 relwidth="0.28" />
+			<columns
+			 label="Time"
+			 name="time"
+			 width="0"/>
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Yesterday"
+		 name="events_yesterday"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Today"
+		 name="events_today"
+		 width="100"
+		 left_pad="1" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Tomorrow"
+		 name="events_tomorrow"
+		 width="100"
+		 left_pad="1" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 image_bottom_pad="2"
+		 image_overlay="Arrow_Left_Off"
+		 image_overlay_alignment="left"
+		 label="Back"
+		 name="events_back"
+		 width="25"
+		 left_pad="1" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 image_bottom_pad="2"
+		 image_overlay="Arrow_Right_Off"
+		 image_overlay_alignment="left"
+		 label="Next"
+		 name="events_next"
+		 width="25"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml
new file mode 100644
index 00000000000..90001952f7c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_groups.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	border="false"
+	follows="all"
+	height="566"
+	layout="topleft"
+	left="1"
+	width="780"
+	label="Groups"
+	name="panel_ls_groups">
+	<panel
+		border="false"
+		follows="top|left|right"
+		height="53"
+		layout="topleft"
+		left="0"
+		width="780"
+		name="panel_ls_input">
+		<text
+			type="string"
+			length="1"
+			follows="left|top"
+			top_pad="5"
+			layout="topleft"
+			left="6"
+			name="search_text"
+			top="12"
+			height="16"
+			width="156">
+			Enter search terms:
+		</text>
+		<search_combo_box
+		layout="topleft"
+		follows="left|top|right"
+		height="23"
+		left_delta="0"
+		name="groups_edit"
+		top="29"
+		width="770">
+		</search_combo_box>
+		<check_box
+		control_name="ShowPGGroups"
+		follows="right|top"
+		height="16"
+		label=""
+		layout="topleft"
+		left="660"
+		name="pg_all"
+		top="12"
+		width="15"
+		visible="false"/>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_PG_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_general"
+		top_delta="-1"
+		width="18"
+		visible="false"/>
+		<check_box
+		control_name="ShowMatureGroups"
+		follows="right|top"
+		height="16"
+		label=""
+		layout="topleft"
+		left_pad="2"
+		name="mature_all"
+		top_delta="1"
+		width="15"
+		visible="false"/>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_M_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_moderate"
+		top_delta="-1"
+		width="18"
+		visible="false"/>
+		<check_box
+		control_name="ShowAdultGroups"
+		follows="right|top"
+		height="16"
+		label=""
+		layout="topleft"
+		left_pad="2"
+		name="adult_all"
+		top_delta="1"
+		width="15"
+		visible="false"/>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_R_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_adult"
+		top_delta="-1"
+		width="18"
+		visible="false"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+		border="true"
+		follows="all"
+		height="510"
+		layout="topleft"
+		left="1"
+		width="410"
+		top_pad="1"
+		name="panel_ls_scrolllist">
+		<scroll_list
+			draw_heading="true"
+			follows="all"
+			height="485"
+			layout="topleft"
+			left="0"
+			name="search_results_groups"
+			top="0"
+			width="410">
+			<columns
+			label=""
+			name="icon"
+			width="20" />
+			<columns
+			label="Group Name"
+			name="group_name"
+			relwidth="0.72" />
+			<columns
+			label="Members"
+			name="members"
+			relwidth="0.25" />
+			<columns
+			label="Score"
+			name="score"
+			width="0" />
+		</scroll_list>
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Back"
+		name="groups_back"
+		top_pad="2"
+		left="3"
+		width="100" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Next"
+		name="groups_next"
+		width="100"
+		left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml
new file mode 100644
index 00000000000..bb03a1e9995
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_land.xml
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	border="false"
+	follows="all"
+	height="566"
+	layout="topleft"
+	left="1"
+	width="780"
+	label="Land Sales"
+	name="panel_ls_land">
+	<panel
+		border="false"
+		follows="top|left|right"
+		height="53"
+		layout="topleft"
+		left="0"
+		width="780"
+		name="panel_ls_input">
+		<check_box
+		 control_name="ShowPGLand"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15">
+            <check_box.commit_callback
+             function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureLand"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultLand"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+         width="15">
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<icon
+		follows="right|top"
+		height="16"
+		image_name="Parcel_R_Dark"
+		layout="topleft"
+		left_pad="2"
+		name="rating_icon_adult"
+		top_delta="-1"
+		width="18"/>
+		<text
+			type="string"
+			length="1"
+			follows="left|top"
+			layout="topleft"
+			left="6"
+			name="search_text"
+			top="12"
+			height="16"
+			width="256">
+			Enter search terms:
+		</text>
+		<combo_box
+			control_name="FindLandType"
+			follows="left|top"
+			layout="topleft"
+			height="23"
+			allow_text_entry="false"
+			top_pad="2"
+			left="6"
+			name="land_category"
+			width="122">
+                <combo_box.item label="All Categories" name="All" value="All"/>
+                <combo_box.item label="Auction" name="Auction" value="Auction"/>
+                <combo_box.item label="Mainland Sales" name="Mainland" value="Mainland"/>
+                <combo_box.item label="Estate Sales" name="Estate" value="Estate"/>
+                <combo_box.commit_callback
+                 function="CommitSearch" />
+		</combo_box>
+		<check_box
+		 control_name="FindLandPrice"
+		 follows="left|top"
+		 height="16"
+		 label="Price &lt;"
+		 layout="topleft"
+		 left_pad="3"
+		 name="price_check"
+		 top_delta="3"
+		 width="40" >
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<line_editor
+		 enabled_control="FindLandPrice"
+		 bevel_style="none"
+		 border_style="line"
+		 border.border_thickness="0"
+		 commit_on_focus_lost="false"
+		 follows="left|top"
+		 height="18"
+		 left_pad="20"
+		 name="edit_price"
+		 top_delta="-1"
+		 width="40" >
+            <line_editor.commit_callback
+             function="CommitSearch" />
+        </line_editor>
+		<check_box
+		 control_name="FindLandArea"
+		 follows="left|top"
+		 height="16"
+		 label="Area &gt;"
+		 layout="topleft"
+		 left_pad="3"
+		 name="area_check"
+		 top_delta="1"
+		 width="40" >
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<line_editor
+		enabled_control="FindLandArea"
+		bevel_style="none"
+		border_style="line"
+		border.border_thickness="0"
+		commit_on_focus_lost="false"
+		follows="left|top"
+		height="18"
+		left_pad="20"
+		name="edit_area"
+		top_delta="-1"
+		width="40" >
+            <line_editor.commit_callback
+             function="CommitSearch" />
+        </line_editor>
+		<text
+         type="string"
+         length="1"
+         follows="left|top"
+         layout="topleft"
+         left="365"
+         name="sort_text"
+         top="12"
+         height="16"
+         width="98">
+         Sort results by:
+		</text>
+		<check_box
+         follows="left|top"
+         height="16"
+         label="Ascending"
+         layout="topleft"
+         left_pad="3"
+         name="ascending_check"
+         width="100" >
+            <check_box.commit_callback
+             function="CommitSearch" />
+        </check_box>
+		<combo_box
+         follows="left|top"
+         layout="topleft"
+         height="23"
+         allow_text_entry="false"
+         left_delta="-102"
+         top_pad="1"
+         name="land_sort_combo"
+         width="118">
+			<combo_box.item label="Name" name="Name_item" value="Name"/>
+			<combo_box.item label="Price" name="Price_item" value="Price"/>
+			<combo_box.item label="Price per meter" name="PPM_item" value="PPM"/>
+			<combo_box.item label="Area" name="Area_item" value="Area"/>
+            <combo_box.commit_callback
+             function="CommitSearch" />
+		</combo_box>
+		<button
+		 follows="top|right"
+		 height="23"
+		 label="Search"
+		 layout="topleft"
+		 left="678"
+		 top_delta="0"
+		 name="land_find"
+		 width="100" />
+	</panel>
+	<!-- Search Pane -->
+	<panel
+     border="true"
+     follows="all"
+     height="510"
+     layout="topleft"
+     left="1"
+     width="410"
+     top_pad="1"
+     name="panel_ls_scrolllist">
+		<scroll_list
+         draw_heading="true"
+         follows="all"
+         height="485"
+         layout="topleft"
+         left="0"
+         name="search_results_land"
+         top="0"
+         width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			 <columns
+			 label="Name"
+			 name="land_name"
+			 relwidth="0.45" />
+			<columns
+			 label="Price"
+			 name="price"
+			 relwidth="0.1" />
+            <columns
+			 label="Area"
+			 name="area"
+			 relwidth="0.1" />
+            <columns
+			 label="L$/m"
+			 name="ppm"
+			 relwidth="0.1" />
+			<columns
+			 label="Type"
+			 name="land_type"
+			 relwidth="0.2" />
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Back"
+		 name="land_back"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Next"
+		 name="land_next"
+		 width="100"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml
new file mode 100644
index 00000000000..28df02a7e3c
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_people.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+	border="false"
+	follows="all"
+	height="566"
+	layout="topleft"
+	left="1"
+	width="780"
+	label="People"
+	name="panel_ls_people">
+	<panel
+		border="false"
+		follows="top|left|right"
+		height="53"
+		layout="topleft"
+		left="0"
+		width="780"
+		name="panel_ls_input">
+		<text
+			type="string"
+			length="1"
+			follows="left|top"
+			top_pad="5"
+			layout="topleft"
+			left="6"
+			name="search_text"
+			top="12"
+			height="16"
+			width="156">
+			Enter search terms:
+		</text>
+		<search_combo_box
+		layout="topleft"
+		follows="left|top|right"
+		height="23"
+		left_delta="0"
+		name="people_edit"
+		top="29"
+		width="770">
+		</search_combo_box>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+		border="true"
+		follows="all"
+		height="510"
+		layout="topleft"
+		left="1"
+		width="410"
+		top_pad="1"
+		name="panel_ls_scrolllist">
+		<scroll_list
+			content_type="Agents"
+			draw_heading="true"
+			follows="all"
+			height="485"
+			layout="topleft"
+			left="0"
+			name="search_results_people"
+			top="0"
+			width="410">
+			<columns
+			label=""
+			name="icon"
+			width="20" />
+			<columns
+			label="Name"
+			name="username"
+			relwidth="1" />
+		</scroll_list>
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Back"
+		name="people_back"
+		top_pad="2"
+		left="3"
+		width="100" />
+		<button
+		layout="topleft"
+		follows="left|bottom"
+		height="23"
+		label="Next"
+		name="people_next"
+		width="100"
+		left_pad="1" />
+	</panel>
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
new file mode 100644
index 00000000000..09c142b8fc1
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_places.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="566"
+ layout="topleft"
+ left="1"
+ width="780"
+ label="Places"
+ name="panel_ls_places">
+	<panel
+	 border="false"
+	 follows="top|left|right"
+	 height="53"
+	 layout="topleft"
+	 left="0"
+	 width="780"
+	 name="panel_ls_input">
+		<text
+		 type="string"
+		 length="1"
+		 follows="left|top"
+		 top_pad="5"
+		 layout="topleft"
+		 left="6"
+		 name="search_text"
+		 top="12"
+		 height="16"
+		 width="156">
+		Enter search terms:
+		</text>
+		<search_combo_box
+		 layout="topleft"
+		 follows="left|top|right"
+		 height="23"
+		 left_delta="0"
+		 name="places_edit"
+		 top="29"
+		 width="651" />
+		<combo_box
+		 follows="right|top"
+		 layout="topleft"
+		 height="23"
+		 allow_text_entry="false"
+		 top_delta="0"
+		 left_pad="2"
+		 name="places_category"
+		 width="122">
+			<combo_box.commit_callback
+			 function="CommitSearch" />
+		</combo_box>
+		<check_box
+ 		 control_name="ShowPGSims"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left="660"
+		 name="pg_all"
+		 top="12"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_PG_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_general"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowMatureSims"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="mature_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_M_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_moderate"
+		 top_delta="-1"
+		 width="18"/>
+		<check_box
+		 control_name="ShowAdultSims"
+		 follows="right|top"
+		 height="16"
+		 label=""
+		 layout="topleft"
+		 left_pad="2"
+		 name="adult_all"
+		 top_delta="1"
+		 width="15">
+			<check_box.commit_callback
+			 function="CommitSearch" />
+		</check_box>
+		<icon
+		 follows="right|top"
+		 height="16"
+		 image_name="Parcel_R_Dark"
+		 layout="topleft"
+		 left_pad="2"
+		 name="rating_icon_adult"
+		 top_delta="-1"
+		 width="18"/>
+	</panel>
+	<!-- Search Pane -->
+	<panel
+	 border="true"
+	 follows="all"
+	 height="510"
+	 layout="topleft"
+	 left="1"
+	 width="410"
+	 top_pad="1"
+	 name="panel_ls_scrolllist">
+		<scroll_list
+		 draw_heading="true"
+		 follows="all"
+		 height="485"
+		 layout="topleft"
+		 left="0"
+		 name="search_results_places"
+		 top="0"
+		 width="410">
+			<columns
+			 label=""
+			 name="icon"
+			 width="20" />
+			<columns
+			 label="Name"
+			 name="place_name"
+			 relwidth="0.81" />
+			<columns
+			 label="Traffic"
+			 name="dwell"
+			 relwidth="0.16" />
+		</scroll_list>
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Back"
+		 name="places_back"
+		 top_pad="2"
+		 left="3"
+		 width="100" />
+		<button
+		 layout="topleft"
+		 follows="left|bottom"
+		 height="23"
+		 label="Next"
+		 name="places_next"
+		 width="100"
+		 left_pad="1" />
+	</panel>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml
new file mode 100644
index 00000000000..382a5e8945e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_fs_search_legacy_web.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+border="false"
+follows="all"
+height="566"
+layout="topleft"
+left="1"
+width="780"
+label="Websearch"
+name="panel_ls_web">
+	<web_browser
+	 top="5"
+	 bottom="-1"
+	 left="5"
+	 right="-5"
+	 layout="topleft"
+	 follows="all"
+	 name="search_browser"
+	 trusted_content="true"
+	 start_url="about:blank" />
+</panel>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/en/panel_search_classifieds.xml b/indra/newview/skins/default/xui/en/panel_search_classifieds.xml
deleted file mode 100644
index a865121b618..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_classifieds.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_classifieds"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGClassifieds"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureClassifieds"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultClassifieds"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-128"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-  <combo_box
-   follows="right|top"
-   layout="topleft"
-   height="23"
-   allow_text_entry="false"
-   top_delta="0"
-   left_pad="2"
-   name="classifieds_category"
-   width="122">
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_events.xml b/indra/newview/skins/default/xui/en/panel_search_events.xml
deleted file mode 100644
index 407eaf6486a..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_events.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_events"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="128" />
-  <radio_group
-   top_delta="0"
-   left="130"
-   height="16"
-   width="230"
-   layout="topleft"
-   initial_value="current"
-   name="events_search_mode">
-    <radio_item
-     height="16"
-     label="Ongoing and Upcoming"
-     layout="topleft"
-     name="current"
-     value="current"
-     top_pad="0"
-     width="120" />
-    <radio_item
-     height="16"
-     label="By Date"
-     layout="topleft"
-     name="date"
-     value="date"
-     left_pad="40"
-     width="120" />
-    <radio_group.commit_callback
-     function="Search.query" />
-  </radio_group>
-  <button
-   follows="top|left"
-   height="16"
-   width="16"
-   image_unselected="MinusItem_Off"
-   image_disabled="MinusItem_Disabled"
-   image_selected="MinusItem_Press"
-   image_pressed="MinusItem_Press"
-   image_top_pad="0"
-   layout="topleft"
-   left_pad="14"
-   name="minus_day"
-   top_delta="0">
-    <button.commit_callback
-     function="Search.MinusDay" />
-  </button>
-  <text
-   type="string"
-   length="1"
-   follows="left|top"
-   top_delta="0"
-   layout="topleft"
-   left_pad="5"
-   name="events_date"
-   font.style="BOLD"
-   height="16"
-   width="40"
-   value="4/20" />
-  <button
-   follows="top|left"
-   height="16"
-   width="16"
-   image_unselected="AddItem_Off"
-   image_disabled="AddItem_Disabled"
-   image_selected="AddItem_Press"
-   image_pressed="AddItem_Press"
-   image_top_pad="0"
-   layout="topleft"
-   left_pad="5"
-   name="plus_day"
-   top_delta="0">
-    <button.commit_callback
-     function="Search.AddDay" />
-  </button>
-  <check_box
-   control_name="ShowPGEvents"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureEvents"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultEvents"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-128"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-  <combo_box
-   follows="right|top"
-   layout="topleft"
-   height="23"
-   allow_text_entry="false"
-   top_delta="0"
-   left_pad="2"
-   name="events_category"
-   width="122">
-    <combo_box.item label="Any Category" name="any" value="0" />
-    <combo_box.item label="" value="filter_separator" enabled="false" />
-    <combo_box.item label="Discussion" name="discussion" value="18" />
-    <combo_box.item label="Sports" name="sports" value="19" />
-    <combo_box.item label="Live Music" name="music" value="20" />
-    <!-- <combo_box.item label="???" name="mystery_category" value="21" /> -->
-    <combo_box.item label="Commercial" name="commercial" value="22" />
-    <combo_box.item label="Nightlife/Entertainment" name="nightlife" value="23" />
-    <combo_box.item label="Games/Contests" name="games" value="24" />
-    <combo_box.item label="Pageants" name="pageants" value="25" />
-    <combo_box.item label="Education" name="education" value="26" />
-    <combo_box.item label="Arts and Culture" name="arts" value="27" />
-    <combo_box.item label="Charity/Support Groups" name="charity" value="28" />
-    <combo_box.item label="Miscellaneous" name="misc" value="29" />
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_groups.xml b/indra/newview/skins/default/xui/en/panel_search_groups.xml
deleted file mode 100644
index 78e531ca2fc..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_groups.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_groups"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGGroups"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureGroups"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultGroups"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-4"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_landsales.xml b/indra/newview/skins/default/xui/en/panel_search_landsales.xml
deleted file mode 100644
index 982fcdefc9d..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_landsales.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_landsales"
- width="602">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGLand"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureLand"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultLand"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="FindLandPrice"
-   follows="left|top"
-   height="16"
-   label="Price &lt;"
-   layout="topleft"
-   left="4"
-   name="price_check"
-   top_pad="6"
-   width="40" >
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <line_editor
-   enabled_control="FindLandPrice"
-   commit_on_focus_lost="false"
-   follows="left|top"
-   height="16"
-   left_pad="20"
-   name="edit_price"
-   layout="topleft"
-   top_delta="-1"
-   width="40" >
-    <line_editor.commit_callback
-     function="Search.query" />
-  </line_editor>
-  <check_box
-   control_name="FindLandArea"
-   follows="left|top"
-   height="16"
-   label="Area &gt;"
-   layout="topleft"
-   left_pad="3"
-   name="area_check"
-   top_delta="1"
-   width="40" >
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <line_editor
-   enabled_control="FindLandArea"
-   commit_on_focus_lost="false"
-   follows="left|top"
-   layout="topleft"
-   height="16"
-   left_pad="18"
-   name="edit_area"
-   top_delta="-1"
-   width="40" >
-    <line_editor.commit_callback
-     function="Search.query" />
-  </line_editor>
-  <combo_box
-   control_name="FindLandType"
-   follows="right|top"
-   layout="topleft"
-   height="22"
-   allow_text_entry="false"
-   left_pad="90"
-   top_delta="-1"
-   name="land_type"
-   width="110">
-    <combo_box.item label="All Categories" name="All" value="All"/>
-    <combo_box.item label="Auction" name="Auction" value="Auction"/>
-    <combo_box.item label="Mainland Sales" name="Mainland" value="Mainland"/>
-    <combo_box.item label="Estate Sales" name="Estate" value="Estate"/>
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-  <combo_box
-   control_name="FindLandSort"
-   follows="right|top"
-   layout="topleft"
-   height="22"
-   allow_text_entry="false"
-   left_pad="2"
-   top_delta="0"
-   name="land_sort"
-   width="110">
-    <combo_box.item label="Sort by Name" name="Name_item" value="Name"/>
-    <combo_box.item label="Sort by Price" name="Price_item" value="Price"/>
-    <combo_box.item label="Sort by Price per meter" name="PPM_item" value="PPM"/>
-    <combo_box.item label="Sort by Area" name="Area_item" value="Area"/>
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-  <check_box
-   control_name="FindLandSortAscending"
-   follows="right|top"
-   height="16"
-   label="Ascending"
-   layout="topleft"
-   left_pad="3"
-   name="ascending"
-   top_delta="5"
-   width="40" >
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_people.xml b/indra/newview/skins/default/xui/en/panel_search_people.xml
deleted file mode 100644
index 98387dbd9a2..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_people.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- class="panel_search_people"
- name="panel_search_people"
- width="602"
- default_tab_group="2">
-  <panel.string name="SeachFilteredOnShortWordsEmpty">
-   Your search terms were too short so no search was performed.
-  </panel.string>
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-4"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_places.xml b/indra/newview/skins/default/xui/en/panel_search_places.xml
deleted file mode 100644
index 94ae80a1576..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_places.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="70"
- layout="topleft"
- name="panel_search_places"
- width="602"
- default_tab_group="2">
-  <text
-   follows="left|top|right"
-   height="16"
-   layout="topleft"
-   left="4"
-   name="search_title"
-   top="4"
-   value="Enter search terms:"
-   width="255" />
-  <check_box
-   control_name="ShowPGSims"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left="489"
-   name="pg_all"
-   top="4"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_PG_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_general"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowMatureSims"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="mature_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_M_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_moderate"
-   top_delta="-1"
-   width="18"/>
-  <check_box
-   control_name="ShowAdultSims"
-   follows="right|top"
-   height="16"
-   label=""
-   layout="topleft"
-   left_pad="2"
-   name="adult_all"
-   top_delta="1"
-   width="15">
-    <check_box.commit_callback
-     function="Search.query" />
-  </check_box>
-  <icon
-   follows="right|top"
-   height="16"
-   image_name="Parcel_R_Dark"
-   layout="topleft"
-   left_pad="2"
-   name="rating_icon_adult"
-   top_delta="-1"
-   width="18"/>
-  <search_editor
-   tab_group="2"
-   follows="top|left|right"
-   search_button_visible="true"
-   height="22"
-   text_readonly_color="DkGray"
-   label="Search"
-   layout="topleft"
-   top_pad="1"
-   left="4"
-   right="-128"
-   name="search_bar"
-   select_on_focus="true"
-   commit_on_focus_lost="false"
-   tool_tip="Enter search terms">
-    <search_editor.commit_callback
-     function="Search.query" />
-  </search_editor>
-  <combo_box
-   follows="right|top"
-   layout="topleft"
-   height="23"
-   allow_text_entry="false"
-   top_delta="0"
-   left_pad="2"
-   name="places_category"
-   width="122">
-    <combo_box.commit_callback
-     function="Search.query" />
-  </combo_box>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_search_web.xml b/indra/newview/skins/default/xui/en/panel_search_web.xml
deleted file mode 100644
index 81cb9067db2..00000000000
--- a/indra/newview/skins/default/xui/en/panel_search_web.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-<panel
- height="775"
- layout="topleft"
- follows="all"
- name="panel_search_web"
- width="780"
- default_tab_group="2">
-  <layout_stack
-    bottom="775"
-    follows="all"
-    layout="topleft"
-    left="5"
-    animate="false"
-    name="stack1"
-    orientation="vertical"
-    top="4"
-    width="770">
-    <layout_panel
-      height="40"
-      follows="all"
-      layout="topleft"
-      left_delta="0"
-      name="external_controls"
-      top_delta="0"
-      auto_resize="true"
-      width="585">
-      <web_browser
-        tab_group="2"
-        bottom="-2"
-        follows="all"
-        layout="topleft"
-        left="0"
-        name="webbrowser"
-        top="0"/>
-    </layout_panel>
-    <layout_panel
-     name="status_bar"
-     height="23"
-     auto_resize="false">
-      <button
-       image_overlay="Arrow_Left_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       hover_glow_amount="0.15"
-       tool_tip="Navigate back"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="1"
-       name="back"
-       top="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Back" />
-      </button>
-      <button
-       image_overlay="Arrow_Right_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       tool_tip="Navigate forward"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="27"
-       name="forward"
-       top_delta="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Forward" />
-      </button>
-      <button
-       image_overlay="Stop_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       tool_tip="Stop navigation"
-       enabled="true"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="51"
-       name="stop"
-       top_delta="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Stop" />
-      </button>
-      <button
-       image_overlay="Refresh_Off"
-       image_disabled="PushButton_Disabled"
-       image_disabled_selected="PushButton_Disabled"
-       image_selected="PushButton_Selected"
-       image_unselected="PushButton_Off"
-       chrome="true"
-       tool_tip="Reload page"
-       follows="left|top"
-       height="22"
-       layout="topleft"
-       left="51"
-       name="reload"
-       top_delta="0"
-       width="22">
-        <button.commit_callback
-         function="WebContent.Reload" />
-      </button>
-      <text
-       type="string"
-       length="200"
-       follows="bottom|left"
-       height="20"
-       layout="topleft"
-       left_pad="3"
-       name="statusbartext"
-       parse_urls="false"
-       text_color="0.4 0.4 0.4 1"
-       top_delta="1"
-       width="441"/>
-      <progress_bar
-       color_bar="0.3 1.0 0.3 1"
-       follows="bottom|right"
-       height="16"
-       top_delta="1"
-       left_pad="3"
-       layout="topleft"
-       name="statusbarprogress"
-       width="64"/>
-    </layout_panel>
-  </layout_stack>
-</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index cef6aa18083..78d3e4d4a8d 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2991,13 +2991,13 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .anim
 	<string name="None">None</string>
 	<string name="Linden Location">Linden Location</string>
 	<string name="Adult">Adult</string>
-	<string name="Arts&amp;Culture">Arts &amp; Culture</string>
+	<string name="Arts and Culture">Arts &amp; Culture</string>
 	<string name="Business">Business</string>
 	<string name="Educational">Educational</string>
 	<string name="Gaming">Gaming</string>
 	<string name="Hangout">Hangout</string>
 	<string name="Newcomer Friendly">Newcomer Friendly</string>
-	<string name="Parks&amp;Nature">Parks &amp; Nature</string>
+	<string name="Parks and Nature">Parks &amp; Nature</string>
 	<string name="Residential">Residential</string>
 	<!--<string name="Shopping">Shopping</string>	-->
 	<string name="Stage">Stage</string>
@@ -4464,6 +4464,13 @@ and report the problem.
   <string name="outfit_photo_load_codec_error">Invalid image format. Please use another image</string>
 
   <!-- Alchemy Strings -->
+  <string name="not_found">&apos;[TEXT]&apos; not found</string>
+  <string name="no_results">No results</string>
+  <string name="searching">Searching...</string>
+  <string name="all_categories">All Categories</string>
+  <string name="search_banned">Some terms in your search query were excluded due to content restrictions as clarified in the Community Standards.</string>
+  <string name="search_short">Your search terms were too short so no search was performed.</string>
+  <string name="search_disabled">Legacy Search has been disabled in this region.</string>
   <string name="NotifyIncomingMessage">Incoming message from [NAME]...</string>
   <string name="NearbyChatTitleChannel">Nearby chat (on channel [CHANNEL])</string>
   <string name="AvatarTyping">Typing</string>
-- 
GitLab