private void grdSearchResults_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
		{
			
			string attrFilterDef = (string)ViewState["AttributesFilter"];
			string contextFilterDef = (string)ViewState["ContextFilter"];
			int recStart = grdSearchResults.CurrentPageIndex * grdSearchResults.PageSize;
			int recNumber = grdSearchResults.PageSize;
			string orderByAttribute = e.SortExpression;
			ViewState["OrderByAttribute"] = e.SortExpression;
			OrderByAttribute = e.SortExpression;

			DocLinkUrl_Begin = (string) ViewState["DocLinkUrl_Begin"];
			DocLinkUrl_End = (string) ViewState["DocLinkUrl_End"];


			try
			{
				DocSearch search = new DocSearch();
				if(search.Find(attrFilterDef.ToString(), contextFilterDef, orderByAttribute, recStart, recNumber))
				{
					//grdSearchResults.CurrentPageIndex = e.NewPageIndex;
					grdSearchResults.DataSource = search.ResultSet;
					grdSearchResults.VirtualItemCount = search.VirtualCount;
					grdSearchResults.DataBind();
					grdSearchResults.Visible = true;
				}
				else grdSearchResults.Visible = false;

				UpdateResultInfo(search);
			}
			catch(Exception ex)
			{
				ProcessException(ex);
			}
		
		}
		public void InitSearch()
		{
			try
			{
				ArrayList attrFilters = new ArrayList();
			
				attrFilters.Add(DocSearch.FilterDateRange("DateReceived", DateReceived_From, DateReceived_To));
				attrFilters.Add(DocSearch.FilterDateRange("DocumentDate", DocumentDate_From, DocumentDate_To));
				attrFilters.Add(DocSearch.FilterDateRange("CreationTime", CreationTime_From, CreationTime_To));
			
				attrFilters.Add(DocSearch.FilterStringEquals("Id", Id));
				attrFilters.Add(DocSearch.FilterString("IncomingNumber", IncomingNumber));
				attrFilters.Add(DocSearch.FilterString("OutgoingNumber", OutgoingNumber));
				attrFilters.Add(DocSearch.FilterString("Subject", Subject));
				attrFilters.Add(DocSearch.FilterString("Header", Header));
				attrFilters.Add(DocSearch.FilterString("D.FileName", FileName));
				attrFilters.Add(DocSearch.FilterString("ArchiveFileNames", ArchiveFileNames));
			
				attrFilters.Add(DocSearch.FilterEnumeration("DocTypeId", DocTypeId_Enum));
				attrFilters.Add(DocSearch.FilterEnumeration("DocSourceId", DocSourceId_Enum));
				attrFilters.Add(DocSearch.FilterEnumeration("DocCategoryId", DocCategoryId_Enum));

				if(IsRead != null && IsRead.Length >0)
					attrFilters.Add(DocSearch.FilterIsRead( IsRead == "1"));

				if(IsFavorite != null && IsFavorite.Length >0)
					attrFilters.Add(DocSearch.FilterIsFavorite( IsFavorite == "1"));


				StringBuilder attrFilterDef = new StringBuilder();
				foreach(string flt in attrFilters)
				{
					if(flt == null ||  flt.Length == 0)
						continue;
					if(attrFilterDef.Length != 0)
						attrFilterDef.Append(" AND ");
					attrFilterDef.Append(flt);
				}

				//if(ContextQuery != null && ContextQuery.Trim().Length >0)
				//	ContextQuery = ContextQuery + " zmqpxnowcbievruytalskdjfhgxs";
				// well, this is the only solution filter  IDX IGNORED WORDS exception
				// unfortunately it's impossible to identify this error 

				String contextFilterDef = DocSearch.FilterContext(ContextQuery);

				ViewState["AttributesFilter"] = attrFilterDef.ToString();
				ViewState["ContextFilter"] = contextFilterDef.ToString();
				ViewState["OrderByAttribute"] = OrderByAttribute;


				ViewState["DocLinkUrl_Begin"] = DocLinkUrl_Begin;
				ViewState["DocLinkUrl_End"] = DocLinkUrl_End;




				DocSearch search = new DocSearch();
				if(search.Find(attrFilterDef.ToString(), contextFilterDef, OrderByAttribute, 0, PageSize))
				{
					grdSearchResults.DataSource = search.ResultSet;
					grdSearchResults.PageSize = PageSize;
					//grdSearchResults.CurrentPageIndex = 0;
					grdSearchResults.VirtualItemCount = search.VirtualCount;
					grdSearchResults.DataBind();
					grdSearchResults.Visible = true;
				}
				else grdSearchResults.Visible = false;

				UpdateResultInfo(search);
			}
			catch(Exception ex)
			{
				ProcessException(ex);
			}
		}