public List<DirEventsReplyData> FindAllEventsInRegion(string regionName, int maturity)
        {
            object remoteValue = DoRemote(regionName, maturity);
            if (remoteValue != null || m_doRemoteOnly)
                return (List<DirEventsReplyData>) remoteValue;

            List<DirEventsReplyData> Data = new List<DirEventsReplyData>();

            IRegionData regiondata = Framework.Utilities.DataManager.RequestPlugin<IRegionData>();
            if (regiondata != null)
            {
                List<GridRegion> regions = regiondata.Get(regionName, null, null, null);
                if (regions.Count >= 1)
                {
                    QueryFilter filter = new QueryFilter();
                    filter.andFilters["region"] = regions[0].RegionID.ToString();
                    filter.andFilters["maturity"] = maturity;

                    List<string> retVal = GD.Query(new[]
                                                       {
                                                           "EID",
                                                           "creator",
                                                           "date",
                                                           "maturity",
                                                           "flags",
                                                           "name"
                                                       }, "asevents", filter, null, null, null);

                    if (retVal.Count > 0)
                    {
                        for (int i = 0; i < retVal.Count; i += 6)
                        {
                            DirEventsReplyData replyData = new DirEventsReplyData
                                                               {
                                                                   eventID = Convert.ToUInt32(retVal[i]),
                                                                   ownerID = new UUID(retVal[i + 1]),
                                                                   name = retVal[i + 5],
                                                               };
                            DateTime date = DateTime.Parse(retVal[i + 2]);
                            replyData.date = date.ToString(new DateTimeFormatInfo());
                            replyData.unixTime = (uint) Util.ToUnixTime(date);
                            replyData.eventFlags = Convert.ToUInt32(retVal[i + 4]);

                            Data.Add(replyData);
                        }
                    }
                }
            }

            return Data;
        }
        public List<DirEventsReplyData> FindEvents(string queryText, uint eventFlags, int StartQuery, UUID scopeID)
        {
            object remoteValue = DoRemote(queryText, eventFlags, StartQuery, scopeID);
            if (remoteValue != null || m_doRemoteOnly)
                return (List<DirEventsReplyData>) remoteValue;

            List<DirEventsReplyData> Data = new List<DirEventsReplyData>();

            QueryFilter filter = new QueryFilter();

            //|0| means search between some days
            if (queryText.Contains("|0|"))
            {
                string StringDay = queryText.Split('|')[0];
                if (StringDay == "u") //"u" means search for events that are going on today
                {
                    filter.andGreaterThanEqFilters["UNIX_TIMESTAMP(date)"] = Util.ToUnixTime(DateTime.Today);
                }
                else
                {
                    //Pull the day out then and search for that many days in the future/past
                    int Day = int.Parse(StringDay);
                    DateTime SearchedDay = DateTime.Today.AddDays(Day);
                    //We only look at one day at a time
                    DateTime NextDay = SearchedDay.AddDays(1);
                    filter.andGreaterThanEqFilters["UNIX_TIMESTAMP(date)"] = Util.ToUnixTime(SearchedDay);
                    filter.andLessThanEqFilters["UNIX_TIMESTAMP(date)"] = Util.ToUnixTime(NextDay);
                    filter.andLessThanEqFilters["flags"] = (int) eventFlags;
                }
            }
            else
            {
                filter.andLikeFilters["name"] = "%" + queryText + "%";
            }
            if (scopeID != UUID.Zero)
                filter.andFilters["scopeID"] = scopeID;

            List<string> retVal = GD.Query(new[]
                                               {
                                                   "EID",
                                                   "creator",
                                                   "date",
                                                   "maturity",
                                                   "flags",
                                                   "name"
                                               }, "asevents", filter, null, (uint) StartQuery, 50);

            if (retVal.Count > 0)
            {
                for (int i = 0; i < retVal.Count; i += 6)
                {
                    DirEventsReplyData replyData = new DirEventsReplyData
                                                       {
                                                           eventID = Convert.ToUInt32(retVal[i]),
                                                           ownerID = new UUID(retVal[i + 1]),
                                                           name = retVal[i + 5],
                                                       };
                    DateTime date = DateTime.Parse(retVal[i + 2]);
                    replyData.date = date.ToString(new DateTimeFormatInfo());
                    replyData.unixTime = (uint) Util.ToUnixTime(date);
                    replyData.eventFlags = Convert.ToUInt32(retVal[i + 4]);

                    //Check the maturity levels
                    uint maturity = Convert.ToUInt32(retVal[i + 3]);
                    if (
                        (maturity == 0 && (eventFlags & (uint) EventFlags.PG) == (uint) EventFlags.PG) ||
                        (maturity == 1 && (eventFlags & (uint) EventFlags.Mature) == (uint) EventFlags.Mature) ||
                        (maturity == 2 && (eventFlags & (uint) EventFlags.Adult) == (uint) EventFlags.Adult)
                        )
                    {
                        Data.Add(replyData);
                    }
                }
            }

            return Data;
        }
        public List<DirEventsReplyData> FindEvents(string queryText, uint eventFlags, int StartQuery, UUID scopeID)
        {
            if (m_doRemoteOnly) {
                object remoteValue = DoRemote (queryText, eventFlags, StartQuery, scopeID);
                return remoteValue != null ? (List<DirEventsReplyData>)remoteValue : new List<DirEventsReplyData> ();
            }

            List<DirEventsReplyData> eventdata = new List<DirEventsReplyData>();

            QueryFilter filter = new QueryFilter();
            var queryList = queryText.Split ('|');

            string stringDay = queryList[0];
            if (stringDay == "u") //"u" means search for events that are going on today
            {
                filter.andGreaterThanEqFilters["UNIX_TIMESTAMP(date)"] = Util.ToUnixTime(DateTime.Today);
            } else {
                //Pull the day out then and search for that many days in the future/past
                int Day = int.Parse(stringDay);
                DateTime SearchedDay = DateTime.Today.AddDays(Day);
                //We only look at one day at a time
                DateTime NextDay = SearchedDay.AddDays(1);
                filter.andGreaterThanEqFilters["UNIX_TIMESTAMP(date)"] = Util.ToUnixTime(SearchedDay);
                filter.andLessThanEqFilters["UNIX_TIMESTAMP(date)"] = Util.ToUnixTime(NextDay);
                filter.andLessThanEqFilters["flags"] = (int) (eventFlags >> 24) & 0x7;
            }
 
            // do we have category?
            if (queryList[1] != "0")
                filter.andLikeFilters ["category"] = queryList [1];
            
            // do we have search parameters
            if (queryList.Length == 3)
                filter.andLikeFilters["name"] = "%" + queryList[2] + "%";
            //}
            if (scopeID != UUID.Zero)
                filter.andFilters["scopeID"] = scopeID;

            List<string> retVal = GD.Query(new[]
                                               {
                                                   "EID",
                                                   "creator",
                                                   "date",
                                                   "maturity",
                                                   "flags",
                                                   "name",
                                               }, m_eventInfoTable, filter, null, (uint)StartQuery, 50);

            if (retVal.Count > 0) {
                for (int i = 0; i < retVal.Count; i += 6) {
                    DirEventsReplyData replyData = new DirEventsReplyData {
                        eventID = Convert.ToUInt32 (retVal [i]),
                        ownerID = new UUID (retVal [i + 1]),
                        name = retVal [i + 5],
                    };
                    DateTime date = DateTime.Parse (retVal [i + 2]);
                    replyData.date = date.ToString (new DateTimeFormatInfo ());
                    replyData.unixTime = (uint)Util.ToUnixTime (date);
                    replyData.eventFlags = Convert.ToUInt32 (retVal [i + 3]) >> 1; // convert event maturity back to EventData.maturity 0,1,2

                    //Check the maturity levels
                    var maturity = Convert.ToByte (retVal [i + 3]); // db levels 1,2,4
                    uint reqMaturityflags = (eventFlags >> 24) &  0x7;
                   
                    if ( (maturity & reqMaturityflags) > 0) 
                        eventdata.Add (replyData);
                }

            } else
                eventdata.Add( new DirEventsReplyData ());

            return eventdata;
        }