/// <summary>
		///  SearchResourcesWithCriteria
		/// </summary>
		/// <returns>List</returns>
		public List<Resource> SearchResourcesWithCriteria(bool search = false)
		{
			Criteria criteria = SearchControl.GetCriteria();

			ResourceTypes resUnitType;
			TagCriteriaSelectionParameters tagCriteriaSelectionParameters = new TagCriteriaSelectionParameters();
			string sourceSelection = "";
			string selectedTypes = "";
			string selectedSubTypes = "";
			string textSearch = "";
            List<int> averageRating = new List<int>();
		    DateTime? startExpirationDate = default(DateTime?);
            DateTime? endExpirationDate = default(DateTime?);
			StandardSelections selectedStandards = new StandardSelections();
			StandardSelections selectedAssessed = new StandardSelections();
			StandardSelections selectedTeaches = new StandardSelections();
			StandardSelections selectedRequires = new StandardSelections();
			CurriculumSelections selectedCurriculums = new CurriculumSelections();

            SchoolGradeNameSelections selectedSchoolGradeName = new SchoolGradeNameSelections();

			string selectedMediaType = "";
			string selectedLanguageType = "";

			foreach (Criterion cr in criteria.Criterias)
			{
				switch (cr.Key)
				{
					case "Source":
						sourceSelection = cr.Value.Key;
						break;
					case "Type":
						selectedTypes = cr.Value.Key;
						break;
					case "SubType":
						selectedSubTypes = cr.Value.Key;
						break;
					case "Text":
						textSearch = cr.Value.Value;
						break;
					case "Keywords":
						tagCriteriaSelectionParameters.Keywords = cr.Value.Value;
						break;
					case "Standards":
						selectedStandards.StandardSet = cr.StandardSelection.StandardSet;
						selectedStandards.Grade = cr.StandardSelection.Grade;
						selectedStandards.Subject = cr.StandardSelection.Subject;
						selectedStandards.Course = cr.StandardSelection.Course;
						selectedStandards.Key = cr.Value.Key;
						break;
					case "Curriculum":
						selectedCurriculums.Grade = cr.CurriculumSelection.Grade;
						selectedCurriculums.Subject = cr.CurriculumSelection.Subject;
						selectedCurriculums.Course = cr.CurriculumSelection.Course;
						selectedCurriculums.Key = cr.Value.Key;
						break;
                    case "ExpirationDate":
                        if (cr.Value.Value.IsNotNullOrWhiteSpace())
                        {
                            string[] dateRangeString = cr.Value.Value.Split(':');
                            startExpirationDate = dateRangeString[0].IsNullOrWhiteSpace() ? default(DateTime?) : Convert.ToDateTime(dateRangeString[0]);
                            endExpirationDate = dateRangeString[1].IsNullOrWhiteSpace() ? default(DateTime?) : Convert.ToDateTime(dateRangeString[1]);

                        }
                        break;
                    case "AverageRating":
                        if (cr.Value.Value.IsNotNullOrWhiteSpace())
                        {
                            averageRating = new List<int>(cr.Value.Value.Replace(", ", ",").Split(',').Select(int.Parse));
                        }
                        break;
					case "MediaType":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
						{
							tagCriteriaSelectionParameters.MediaType =
								new List<int>(cr.Value.Value.Replace(" ", "").Split(',').Select(int.Parse));
                            selectedMediaType =
                                tagCriteriaSelectionParameters.MediaType[0].ToString(CultureInfo.InvariantCulture);
						}
						break;
					case "Language":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
						{
							selectedLanguageType = cr.Value.Value;
                            tagCriteriaSelectionParameters.Language =
                                (int)Enum.Parse(typeof(LanguageType), cr.Value.Value);
						}
						break;
					case "Grades":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
                            tagCriteriaSelectionParameters.GradeLevel =
                                new List<string>(cr.Value.Value.Replace(", ", ",").Split(','));
						break;
					case "Assessed":
						selectedAssessed.StandardSet = cr.StandardSelection.StandardSet;
						selectedAssessed.Grade = cr.StandardSelection.Grade;
						selectedAssessed.Subject = cr.StandardSelection.Subject;
						selectedAssessed.Course = cr.StandardSelection.Course;
						selectedAssessed.Key = cr.Value.Key;
						if (IEnumerableExtensions.IsNotNullOrEmpty(GetListOfStandards(selectedAssessed)))
							tagCriteriaSelectionParameters.AssessedStandardIds =
								new List<int>(GetListOfStandards(selectedAssessed).Split(',').Select(int.Parse));
						break;
					case "Teaches":
						selectedTeaches.StandardSet = cr.StandardSelection.StandardSet;
						selectedTeaches.Grade = cr.StandardSelection.Grade;
						selectedTeaches.Subject = cr.StandardSelection.Subject;
						selectedTeaches.Course = cr.StandardSelection.Course;
						selectedTeaches.Key = cr.Value.Key;
						if (IEnumerableExtensions.IsNotNullOrEmpty(GetListOfStandards(selectedTeaches)))
							tagCriteriaSelectionParameters.TeachesStandardIds =
								new List<int>(GetListOfStandards(selectedTeaches).Split(',').Select(int.Parse));
						;
						break;
					case "Requires":
						selectedRequires.StandardSet = cr.StandardSelection.StandardSet;
						selectedRequires.Grade = cr.StandardSelection.Grade;
						selectedRequires.Subject = cr.StandardSelection.Subject;
						selectedRequires.Course = cr.StandardSelection.Course;
						selectedRequires.Key = cr.Value.Key;
						if (IEnumerableExtensions.IsNotNullOrEmpty(GetListOfStandards(selectedRequires)))
							tagCriteriaSelectionParameters.RequiresStandardIds =
								new List<int>(GetListOfStandards(selectedRequires).Split(',').Select(int.Parse));
						;
						break;
					case "TextComplexity":
						tagCriteriaSelectionParameters.TextComplexity = cr.Value.Value;
						break;
					case "ReadingLevel":
						tagCriteriaSelectionParameters.ReadingLevel = cr.Value.Value;
						break;
					case "EducationalSubject":
						if (cr.Value.Key.IsNotNullOrWhiteSpace())
                            tagCriteriaSelectionParameters.EducationalSubject =
                                new List<string>(cr.Value.Value.Replace(", ", ",").Split(','));
						break;

					case "InteractivityType":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
							tagCriteriaSelectionParameters.InteractivityType =
								new List<int>(cr.Value.Value.Replace(" ", "").Split(',').Select(int.Parse));

						if (sourceSelection == NationalLearningRegistry)
						{
							tagCriteriaSelectionParameters.InteractivityTypes = new List<string>();
                            DataTable dtActivity =
                                Base.Classes.Assessment.LoadLrmiTagsByLookupEnum((int)Enums.LrmiTags.Activity,
                                    Enums.SelectionType.Assessment.ToString());
						
							List<KeyValuePair<string, string>> theList = new List<KeyValuePair<string, string>>();
							foreach (DataRow row in dtActivity.Rows)
							{
                                theList.Add(new KeyValuePair<string, string>(row["ID"].ToString(),
                                    row["Description"].ToString()));
							}

							foreach (int item in tagCriteriaSelectionParameters.InteractivityType)
							{
                                tagCriteriaSelectionParameters.InteractivityTypes.Add(
                                    theList.First(kvp => kvp.Key == item.ToString()).Value);
							}
						}
						break;

					case "LearningResource":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
							tagCriteriaSelectionParameters.LearningResourceType =
								new List<int>(cr.Value.Value.Replace(" ", "").Split(',').Select(int.Parse));
						break;
					case "EducationalUse":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
							tagCriteriaSelectionParameters.EducationalUse =
								new List<int>(cr.Value.Value.Replace(" ", "").Split(',').Select(int.Parse));

						if (sourceSelection == NationalLearningRegistry)
						{
							tagCriteriaSelectionParameters.EducationalUses = new List<string>();
                            DataTable dtEducationalSubjects =
                                Base.Classes.Assessment.LoadLrmiTagsByLookupEnum((int)Enums.LrmiTags.EducationalUse,
                                    Enums.SelectionType.Resource.ToString());

							List<KeyValuePair<string, string>> theList = new List<KeyValuePair<string, string>>();
							foreach (DataRow row in dtEducationalSubjects.Rows)
							{
                                theList.Add(new KeyValuePair<string, string>(row["ID"].ToString(),
                                    row["Description"].ToString()));
							}

							foreach (int item in tagCriteriaSelectionParameters.EducationalUse)
							{
                                tagCriteriaSelectionParameters.EducationalUses.Add(
                                    theList.First(kvp => kvp.Key == item.ToString()).Value);
							}
						}
						break;
					case "EndUser":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
							tagCriteriaSelectionParameters.EndUser =
								new List<int>(cr.Value.Value.Replace(" ", "").Split(',').Select(int.Parse));

						if (sourceSelection == NationalLearningRegistry)
						{
							tagCriteriaSelectionParameters.EndUsers = new List<string>();
                            DataTable dtEndUsers =
                                Base.Classes.Assessment.LoadLrmiTagsByLookupEnum((int)Enums.LrmiTags.EndUser,
                                    Enums.SelectionType.Resource.ToString());

							List<KeyValuePair<string, string>> theList = new List<KeyValuePair<string, string>>();
							foreach (DataRow row in dtEndUsers.Rows)
							{
                                theList.Add(new KeyValuePair<string, string>(row["ID"].ToString(),
                                    row["Description"].ToString()));
							}

							foreach (int item in tagCriteriaSelectionParameters.EndUser)
							{
                                tagCriteriaSelectionParameters.EndUsers.Add(
                                    theList.First(kvp => kvp.Key == item.ToString()).Value);
							}
						}

						break;
					case "Duration":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
						{
							string[] durationStrings = cr.Value.Value.Split(':');
							tagCriteriaSelectionParameters.TimeRequiredDays = Convert.ToInt32(durationStrings[0]);
							tagCriteriaSelectionParameters.TimeRequiredHours = Convert.ToInt32(durationStrings[1]);
							tagCriteriaSelectionParameters.TimeRequiredMinutes = Convert.ToInt32(durationStrings[2]);
						}
						break;
					case "AgeAppropriate":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
						{
							if (sourceSelection == NationalLearningRegistry)
							{
								string validAges = mapAgeAppropriateToAges(cr.Value.Value);
								if (!string.IsNullOrEmpty(validAges))
								{
									tagCriteriaSelectionParameters.Ages = validAges;
								}
								//cant convert a string like "16-18" to an int
								// this needs to be looked at...
								//tagCriteriaSelectionParameters.AgeAppropriate = Convert.ToInt32(cr.Value.Value);
							}
						}
						break;
					case "Creator":
						tagCriteriaSelectionParameters.Creator = cr.Value.Value;
						break;
					case "Publisher":
						tagCriteriaSelectionParameters.Publisher = cr.Value.Value;
						break;
					case "UsageRights":
						if (cr.Value.Value.IsNotNullOrWhiteSpace())
						{
							tagCriteriaSelectionParameters.UseRightUrl = Convert.ToInt32(cr.Value.Key);

							if (sourceSelection == NationalLearningRegistry)
							{
                                string theURLResult =
                                    GetCreativeCommonsUrls().First(kvp => kvp.Key == cr.Value.Key).Value;

								if (cr.Value.Value.Equals("Custom", StringComparison.OrdinalIgnoreCase))
								{
									theURLResult = cr.Value.Value;
								}

								if (!string.IsNullOrEmpty(theURLResult))
								{
									//TODO: match theURLResult to LRMI tag dropdown items
									tagCriteriaSelectionParameters.UseRightUrlTxt = theURLResult;
									//If no match then set to "CUSTOM" I guess
								}
							}
						}
						break;
                    case "SchoolGradeName":
                        selectedSchoolGradeName.School = cr.SchoolGradeNameSelection.School;
                        selectedSchoolGradeName.Grade = cr.SchoolGradeNameSelection.Grade;
                        selectedSchoolGradeName.Name = cr.SchoolGradeNameSelection.Name; // userid
                        selectedSchoolGradeName.Key = cr.SchoolGradeNameSelection.Key;
                        break;


				}
			}

			string whereclause = "";
			string whereClauseIp = "";
			string whereClauseUp = "";
			string whereClauseLp = "";
			string whereClauseMu = "";
			string whereTextSearch = "";

			List<Resource> resultResource = new List<Resource>();

			if (sourceSelection == "" ||
				sourceSelection == District ||
				sourceSelection == State ||
				sourceSelection == MyDocuments ||
                sourceSelection == InternalSource ||
                sourceSelection == TeacherMyDocs ||
                sourceSelection == SharedDocument)//US15667
			{

				resUnitType = ResourceTypes.All;

				switch (sourceSelection)
				{
					case District:
						resUnitType = ResourceTypes.DistrictDocuments;
						break;
					case State:
						resUnitType = ResourceTypes.StateDocuments;
						break;
					case MyDocuments:
						resUnitType = ResourceTypes.MyDocuments;
						break;
                    case TeacherMyDocs: 
                        resUnitType = ResourceTypes.MyDocuments;
                        break;
                    case SharedDocument:
                        resUnitType = ResourceTypes.SharedDocuments;
                        break;
				}

				if (selectedTypes != null && (selectedTypes.Any() && selectedTypes != ""))
				{
					whereClauseIp = " Type = " + selectedTypes;
					whereClauseLp = " Type = " + selectedTypes;
					whereClauseMu = " Type = " + selectedTypes;
					if (selectedTypes == ((int)LookupDetail.CurriculumUnitMA).ToString(CultureInfo.InvariantCulture))
					{
						whereClauseUp = " Type = " + ((int)LookupDetail.UnitPlan) + " OR Type = " +
										((int)LookupDetail.CurriculumUnitMA);
						resUnitType = ResourceTypes.StateDocuments;
					}
					else
					{
						whereClauseUp = " Type = " + selectedTypes;
					}
					whereclause += whereclause == ""
						? " TYPE in ( " + string.Join(",", selectedTypes.Split(',')) +
						  ") "
						: "AND" + " TYPE in ( " +
						  string.Join(",", selectedTypes.Split(',')) + ") ";
				}
				if (selectedSubTypes.Any() && selectedSubTypes != "")
				{
					whereClauseIp += whereClauseIp == ""
						? " SubType = " + selectedSubTypes
						: " AND" + " SubType = " + selectedSubTypes;
					whereClauseLp += whereClauseLp == ""
						? " SubType = " + selectedSubTypes
						: " AND" + " SubType = " + selectedSubTypes;
					whereClauseMu += whereClauseMu == ""
						? " SubType = " + selectedSubTypes
						: " AND" + " SubType = " + selectedSubTypes;

					if (selectedSubTypes ==
						((int)LookupDetail.StateModelCurriculumUnitForm).ToString(CultureInfo.InvariantCulture))
					{
						whereClauseUp += whereClauseUp == ""
							? " SubType = " + ((int)LookupDetail.UnitPlanForm) + " OR SubType= " +
							  ((int)LookupDetail.StateModelCurriculumUnitForm)
							: " AND" + " SubType = " + ((int)LookupDetail.UnitPlanForm) + " OR SubType= " +
							  ((int)LookupDetail.StateModelCurriculumUnitForm);
						resUnitType = ResourceTypes.StateDocuments;
					}
					else
					{
						whereClauseUp += whereClauseUp == ""
							? " SubType = " + selectedSubTypes
							: " AND" + " SubType = " + selectedSubTypes;
					}
					whereclause += whereclause == ""
						? " SUBTYPE in ( " +
						  string.Join(",", selectedSubTypes.Split(',')) + ")"
						: "AND" + " SUBTYPE in ( " +
						  string.Join(",", selectedSubTypes.Split(',')) + ")";
				}
				if (textSearch.Any() && textSearch.Trim() != "")
				{
					whereclause += whereclause == ""
						? " Name like ( '%" + textSearch.Trim() + "%')"
						: " AND" + " Name like ( '%" + textSearch.Trim() + "%')";
					whereTextSearch = " like ( '%" + textSearch.Trim() + "%')";
				}

				DistrictParms districtParms = DistrictParms.LoadDistrictParms();
				string envState = KenticoHelper.GetKenticoMainFolderName(districtParms.ClientID);
				_districts = new System.Text.StringBuilder();
				_stateDocuments = new System.Text.StringBuilder();
                //US15667
                _sharedDocuments = new System.Text.StringBuilder();
				_districts.Append("/" + envState + "/Districts/");
				_stateDocuments.Append("/" + envState + "/Documents/");
                //US15667
                _sharedDocuments.Append("/" + envState + "/Shared/");

                UserInfo ui = new UserInfo();
                if (!string.IsNullOrEmpty(selectedSchoolGradeName.Name))
                {
                    if ((bool)Session["KenticoEnabled"])
                    {
                        KenticoHelper.KenticoUserName = KenticoHelper.GetKenticoUser(selectedSchoolGradeName.Name);
                        ui = CMS.SiteProvider.UserInfoProvider.GetFullUserInfo(KenticoHelper.KenticoUserName);
                }
                    else
                    { ui = (UserInfo)Session["KenticoUserInfo"]; }
                }
                else
                { ui = (UserInfo)Session["KenticoUserInfo"]; }


				string where = whereclause;
				const string orderBy = "Name";

				TreeProvider treeProvider =
					KenticoHelper.GetUserTreeProvider(_sessionObject.LoggedInUser.ToString());
				DataSet resourceDs = KenticoHelper.ExpandedSearchDocumentType(ui, ResourceClassName,
					treeProvider, resUnitType, where, orderBy, filterUsageRightExpiredContent);

				List<Resource> lstResource = new List<Resource>();
                List<Resource> listResourceTemp = new List<Resource>();

				DataSet lookupDataSet = new DataSet();
				DataClassInfo customTable = DataClassInfoProvider.GetDataClass("TG.LookupDetails");
				if (customTable != null)
				{
					lookupDataSet = (new CustomTableItemProvider(ui)).GetItems("TG.LookupDetails",
						string.Empty, string.Empty);
				}

				//For IP, UP, LP, and MU
				List<Resource> lstIpup = GetPlans(ui, treeProvider, whereClauseIp, whereClauseUp, whereClauseLp,
					whereClauseMu, whereTextSearch, lookupDataSet, districtParms, resUnitType);



				if (!string.IsNullOrWhiteSpace(selectedStandards.StandardSet) ||
					!string.IsNullOrWhiteSpace(selectedCurriculums.Grade))
				{
					if (!string.IsNullOrWhiteSpace(selectedStandards.StandardSet))
					{

						string stringListOfStandards = GetListOfStandards(selectedStandards);
						List<CmsCustomTable> lstStandards = GetDocToStandardsFromCms(ui,
							stringListOfStandards);

						if (lstStandards != null && lstStandards.Count > 0)
						{
							if (resourceDs != null && resourceDs.Tables[0].Rows.Count > 0)
							{
					            listResourceTemp = (from res in resourceDs.Tables[0].AsEnumerable()
											   join ctdtl in lookupDataSet.Tables[0].AsEnumerable() on
												   Convert.ToInt32(res["type"].ToString()) equals
												   Convert.ToInt32(ctdtl["enum"].ToString())
											   join stdtl in lookupDataSet.Tables[0].AsEnumerable() on
												   Convert.ToInt32(res["subtype"].ToString()) equals
												   Convert.ToInt32(stdtl["enum"].ToString())
					                                join s in lstStandards on
					                                    Convert.ToInt32(res["DocumentNodeID"]) equals s.DocId
											   select
												   new Resource
												   {
													   Source =
                                                res["NodeAliasPath"].ToString()
					                                                                .IndexOf(
					                                                                    _districts.ToString(),
					                                                                    StringComparison.Ordinal)
					                                            >= 0
															   ? District
                                                    : res["NodeAliasPath"].ToString()
					                                                                      .IndexOf(
					                                                                          _stateDocuments
					                                            .ToString(),
					                                                                          StringComparison
					                                            .Ordinal) >=
                                                      0
																   ? State
                                                    : res["NodeAliasPath"].ToString()
                                                        .IndexOf(_sharedDocuments.ToString(), StringComparison.Ordinal) >=
                                                      0
                                                                   ? SharedDocument //US15667
																   : MyDocuments,
													   ID = Convert.ToInt32(res["DocumentID"]),
													   DocumentNodeID = Convert.ToInt32(res["DocumentNodeID"]),
													   DocumentForeignKeyValue =
					                                            Convert.ToInt32(
					                                                res["DocumentForeignKeyValue"].ToString()),
													   DocumentType = res["ClassName"].ToString(),
													   ID_Encrypted = "",
													   NodeAliasPath = res["NodeAliasPath"].ToString(),
													   ResourceName = res["Name"].ToString(),
													   Description = res["Description"].ToString(),
													   Type = ctdtl["Description"].ToString(),
													   Subtype = stdtl["Description"].ToString(),
													   ViewLink =
					                                            string.IsNullOrEmpty(
					                                                res["AttachmentName"].ToString())
															   ? ""
															   : res["AttachmentName"].ToString(),
					                                        ExpirationDate =
					                                            res["ExpirationDate"] == DBNull.Value
					                                                ? default(DateTime)
					                                                : Convert.ToDateTime(res["ExpirationDate"]),
					                                        AverageRating =
					                                            res["AverageRating"] == DBNull.Value
					                                                ? default(decimal)
                                                                    : Convert.ToDecimal(res["AverageRating"]),
                                                                    DocumentCreatedWhen= res["DocumentModifiedWhen"] == DBNull.Value
                                                            ? default(DateTime)
                                                            : Convert.ToDateTime(res["DocumentModifiedWhen"])
												   }).Distinct().ToList<Resource>();
							}

						lstIpup = (from res in lstIpup
										   join s in lstStandards on res.DocumentNodeID equals s.DocId
										   select res).ToList<Resource>();
							
					        if (lstResource.Count > 0 || isFilteredResourceEmpty)
					            lstResource = (from res in lstResource
					                           join t in listResourceTemp on res.ID equals t.ID
					                           select res).ToList<Resource>();
					        else
					            lstResource.AddRange(listResourceTemp);

					        if (listResourceTemp.Count == 0)
					            isFilteredResourceEmpty = true;
						}
                        else
					    {
                            lstIpup = new List<Resource>();
					        lstResource = new List<Resource>();
					    }

					}

					if (!string.IsNullOrWhiteSpace(selectedCurriculums.Grade))
					{

						List<CmsCustomTable> lstCurriculum = GetDocToCurucullumsFromCms(ui);
						List<object> listCurriculums = GetCurriculumsIDsFromSelectedCriteria(selectedCurriculums);
						lstCurriculum = lstCurriculum.FindAll(f => listCurriculums.Contains(f.Id));
                        if (lstCurriculum.Count > 0)
                        {
						if (resourceDs != null && resourceDs.Tables[0].Rows.Count > 0)
						{
					            listResourceTemp = (from res in resourceDs.Tables[0].AsEnumerable()
										   join ctdtl in lookupDataSet.Tables[0].AsEnumerable() on
											   Convert.ToInt32(res["type"].ToString()) equals
											   Convert.ToInt32(ctdtl["enum"].ToString())
										   join stdtl in lookupDataSet.Tables[0].AsEnumerable() on
											   Convert.ToInt32(res["subtype"].ToString()) equals
											   Convert.ToInt32(stdtl["enum"].ToString())
					                                join s in lstCurriculum on
					                                    Convert.ToInt32(res["DocumentNodeID"]) equals s.DocId
										   select
											   new Resource
											   {
												   Source =
                                            res["NodeAliasPath"].ToString()
					                                                                .IndexOf(
					                                                                    _districts.ToString(),
					                                                                    StringComparison.Ordinal)
					                                            >= 0
														   ? District
                                                : res["NodeAliasPath"].ToString()
					                                                                      .IndexOf(
					                                                                          _stateDocuments
					                                            .ToString(),
					                                                                          StringComparison
					                                            .Ordinal) >= 0
															   ? State
                                                : res["NodeAliasPath"].ToString()
                                                    .IndexOf(_sharedDocuments.ToString(), StringComparison.Ordinal) >= 0
                                                               ? SharedDocument//US15667
															   : MyDocuments,
												   ID = Convert.ToInt32(res["DocumentID"]),
												   DocumentNodeID = Convert.ToInt32(res["DocumentNodeID"]),
												   DocumentForeignKeyValue =
					                                            Convert.ToInt32(
					                                                res["DocumentForeignKeyValue"].ToString()),
												   DocumentType = res["ClassName"].ToString(),
												   ID_Encrypted = "",
												   NodeAliasPath = res["NodeAliasPath"].ToString(),
												   ResourceName = res["Name"].ToString(),
												   Description = res["Description"].ToString(),
												   Type = ctdtl["Description"].ToString(),
												   Subtype = stdtl["Description"].ToString(),
												   ViewLink =
					                                            string.IsNullOrEmpty(
					                                                res["AttachmentName"].ToString())
														   ? ""
														   : res["AttachmentName"].ToString(),
					                                        ExpirationDate =
					                                            res["ExpirationDate"] == DBNull.Value
					                                                ? default(DateTime)
					                                                : Convert.ToDateTime(res["ExpirationDate"]),
					                                        AverageRating =
					                                            res["AverageRating"] == DBNull.Value
					                                                ? default(decimal)
                                                                    : Convert.ToDecimal(res["AverageRating"]),
                                                            DocumentCreatedWhen= res["DocumentModifiedWhen"] == DBNull.Value
                                                                   ? default(DateTime)
                                                                   : Convert.ToDateTime(res["DocumentModifiedWhen"])
												  
											   }).ToList<Resource>();
						}

						
							lstIpup = (from res in lstIpup
									   join s in lstCurriculum on res.DocumentNodeID equals s.DocId
									   select res).ToList<Resource>();

					        if (lstResource.Count > 0  || isFilteredResourceEmpty)
					            lstResource = (from res in lstResource
					                           join t in listResourceTemp on res.ID equals t.ID
					                           select res).ToList<Resource>();
					        else
					            lstResource.AddRange(listResourceTemp);

					        if (listResourceTemp.Count == 0)
					            isFilteredResourceEmpty = true;
						}
                        else
					    {
                            lstIpup = new List<Resource>();
					        lstResource = new List<Resource>();
					    }
					}

				}
				else
				{

					if (resourceDs != null && resourceDs.Tables[0].Rows.Count > 0)
					{

						listResourceTemp = (from res in resourceDs.Tables[0].AsEnumerable()
									   join ctdtl in lookupDataSet.Tables[0].AsEnumerable() on
										   Convert.ToInt32(res["type"].ToString()) equals Convert.ToInt32(ctdtl["enum"].ToString())
									   join stdtl in lookupDataSet.Tables[0].AsEnumerable() on
										   Convert.ToInt32(res["subtype"].ToString()) equals
										   Convert.ToInt32(stdtl["enum"].ToString())
									   select
										   new Resource
										   {
											   Source =
                                        res["NodeAliasPath"].ToString()
                                            .IndexOf(_districts.ToString(), StringComparison.Ordinal) >= 0
													   ? District
                                            : res["NodeAliasPath"].ToString()
                                                .IndexOf(_stateDocuments.ToString(), StringComparison.Ordinal) >= 0
														   ? State
                                            : res["NodeAliasPath"].ToString()
                                                .IndexOf(_sharedDocuments.ToString(), StringComparison.Ordinal) >= 0
                                                           ? SharedDocument //US15667
														   : MyDocuments,
											   ID = Convert.ToInt32(res["DocumentID"]),
											   DocumentForeignKeyValue = Convert.ToInt32(res["DocumentForeignKeyValue"].ToString()),
											   DocumentType = res["ClassName"].ToString(),
											   ID_Encrypted = "",
											   NodeAliasPath = res["NodeAliasPath"].ToString(),
											   ResourceName = res["Name"].ToString(),
											   Description = res["Description"].ToString(),
											   Type = ctdtl["Description"].ToString(),
											   Subtype = stdtl["Description"].ToString(),
											   ViewLink =
												   string.IsNullOrEmpty(res["AttachmentName"].ToString())
													   ? ""
													   : res["AttachmentName"].ToString(),
											   DocumentNodeID = Convert.ToInt32(res["DocumentNodeID"]),
                                               ExpirationDate = res["ExpirationDate"] == DBNull.Value ? default(DateTime) : Convert.ToDateTime(res["ExpirationDate"]),
                                                    AverageRating = res["AverageRating"] == DBNull.Value ? default(decimal) : Convert.ToDecimal(res["AverageRating"]),
                                                    DocumentCreatedWhen= res["DocumentModifiedWhen"] == DBNull.Value? default(DateTime): Convert.ToDateTime(res["DocumentModifiedWhen"])												  
										   }).ToList<Resource>();
					}

                    if (lstResource.Count > 0  || isFilteredResourceEmpty )
                        lstResource = (from res in lstResource
                                       join t in listResourceTemp on res.ID equals t.ID
                                       select res).ToList<Resource>();
                    else
                        lstResource.AddRange(listResourceTemp);

                    

				}

				if (lstIpup.Count > 0)
				{
					lstResource.AddRange(lstIpup);
				}

				string hostURL = Request.Url.ToString();
				try
				{
					int hostPosition = hostURL.LastIndexOf(districtParms.ClientID) - 1;
					hostURL = hostURL.Substring(0, hostPosition);
				}
				catch
				{
					hostURL = "";
				}

			   if (startExpirationDate != default(DateTime?))
                {
                    lstResource = lstResource.FindAll(unl => unl.ExpirationDate >= startExpirationDate && unl.ExpirationDate != default(DateTime));
                }

                if (endExpirationDate != default(DateTime?))
                {
                    lstResource = lstResource.FindAll(unl => unl.ExpirationDate <= endExpirationDate && unl.ExpirationDate != default(DateTime));
                }

			    if (averageRating.Count > 0)
			    {
			        List<RatingRange> ratingRange = _reviewFacade.GetRatingFilterForItemSearch().ToList();
                    List<Resource> newLstResource = new List<Resource>();
			        decimal maxvalue;
			        decimal minvalue;
			        foreach (var id in averageRating )
			        {
			            maxvalue = ratingRange.Find(x => x.Id == id).EndValue;
                        minvalue = ratingRange.Find(x => x.Id == id).StartValue;
			            newLstResource.AddRange(
			                lstResource.FindAll(
			                    unl => unl.AverageRating >= minvalue && unl.AverageRating <= maxvalue).ToList());

			        }
			        lstResource = newLstResource;
			    }

			    resultResource =
					lstResource.GroupBy(
						x =>
							new
							{
								x.Source,
								x.ID,
								x.DocumentNodeID,
								x.ResourceName,
                                x.ResourceNameReadOnly,
								x.Description,
								x.Type,
								x.Subtype,
								x.ViewLink,
								x.NodeAliasPath,
								x.DocumentForeignKeyValue,
								x.DocumentType,
                                x.ExpirationDate,
                                x.AverageRating,
                                x.DocumentCreatedWhen
							})
						.Select(r => new Resource
						{
							Source = r.Key.Source,
							ID = r.Key.ID,
							DocumentNodeID = r.Key.DocumentNodeID,
							ResourceName = r.Key.ResourceName,
                            ResourceNameReadOnly = r.Key.ResourceName,
							Description = r.Key.Description,
							Type = r.Key.Type,
							Subtype = r.Key.Subtype,
							//ViewLink = string.IsNullOrWhiteSpace(r.Key.ViewLink) ? "" : hostURL + KenticoHelper.KenticoVirtualFolderRelative + "/cmspages/getfile.aspx?guid=" + r.Key.ViewLink + "&disposition=inline",
							ViewLink =
								string.IsNullOrWhiteSpace(r.Key.ViewLink)
									? ""
                                    : KenticoHelper.KenticoVirtualFolderRelative + "/cmspages/getfile.aspx?guid=" +
                                      r.Key.ViewLink +
									  "&disposition=inline",
							NodeAliasPath = r.Key.NodeAliasPath,
							DocumentForeignKeyValue = r.Key.DocumentForeignKeyValue,
							DocumentType = r.Key.DocumentType,
                            ExpirationDate = r.Key.ExpirationDate,
                            AverageRating = r.Key.AverageRating,
                            DocumentCreatedWhen=r.Key.DocumentCreatedWhen
						}).ToList();

                resultResource = resultResource.OrderByDescending(rslRsc => rslRsc.DocumentCreatedWhen).ToList();

				if (tagCriteriaSelectionParameters != null)
				{
					if (!TagCriteriaSelectionParameters.IsEmpty(tagCriteriaSelectionParameters))
					{
						List<Resource> filteredByTags = FilterResourcesByTags(resultResource,
							tagCriteriaSelectionParameters);
						resultResource = filteredByTags;
					}
				}
			}
			else
			{
				string resourceTextSearch = textSearch.Trim() == ""
					? LearningMediaFacets.SearchTermAll
					: textSearch.Trim();

				if (sourceSelection == NationalLearningRegistry)
				{
                    NLRSearchParameters nlrSearchParameters = getNLRSearchParameters(resourceTextSearch,
                        tagCriteriaSelectionParameters);
					resultResource = GetLearningRegistryResources(search, nlrSearchParameters);
				}

				if (sourceSelection == PBSLearningMedia)
				{
					if (tagCriteriaSelectionParameters.GradeLevel == null)
						tagCriteriaSelectionParameters.GradeLevel = new List<string>();
                    resultResource = GetWgbhResources(search, tagCriteriaSelectionParameters.GradeLevel,
                        resourceTextSearch,
						selectedMediaType, selectedLanguageType);
				}
			}
			return resultResource;
		}
		private NLRSearchParameters getNLRSearchParameters(string criteriaSelectionParameters,
			TagCriteriaSelectionParameters tagCriteriaSelectionParameters)
		{
			NLRSearchParameters theNLRSearchParameters = new NLRSearchParameters();

			theNLRSearchParameters.creator = tagCriteriaSelectionParameters.Creator;
			theNLRSearchParameters.publisher = tagCriteriaSelectionParameters.Publisher;
			//theNLRSearchParameters.usageRightsURL = tagCriteriaSelectionParameters.UseRightUrl;
			//theNLRSearchParameters.author = tagCriteriaSelectionParameters.Author;
			theNLRSearchParameters.created = tagCriteriaSelectionParameters.DateCreated.ToString();
			//theNLRSearchParameters.accessibilityControl
			//theNLRSearchParameters.accessibilityFeature
			//theNLRSearchParameters.accessibilityHazard
			//theNLRSearchParameters.bookFormat
			//theNLRSearchParameters.copyrightHolder
			theNLRSearchParameters.title =
				theNLRSearchParameters.description =
					theNLRSearchParameters.titleAndDescriptionSearchText = criteriaSelectionParameters;

			if (tagCriteriaSelectionParameters.Language > -1)
			{
				theNLRSearchParameters.inLanguage =
					Enum.Parse(typeof(LanguageType), tagCriteriaSelectionParameters.Language.ToString()).ToString();
			}
			theNLRSearchParameters.typicalAgeRange = tagCriteriaSelectionParameters.Ages;

			theNLRSearchParameters.interactivityType = tagCriteriaSelectionParameters.InteractivityTypes;

			theNLRSearchParameters.educationalUse = tagCriteriaSelectionParameters.EducationalUses;

			theNLRSearchParameters.educationalRole = tagCriteriaSelectionParameters.EndUsers;

			theNLRSearchParameters.usageRightsURL = tagCriteriaSelectionParameters.UseRightUrlTxt;
			
			theNLRSearchParameters.keywords = tagCriteriaSelectionParameters.Keywords;

			theNLRSearchParameters.educationalRole = tagCriteriaSelectionParameters.EndUsers;

			theNLRSearchParameters.usageRightsURL = tagCriteriaSelectionParameters.UseRightUrlTxt;

			return theNLRSearchParameters;
		}
		/// <summary>
		/// Filter Resource List By Tag Selections
		/// </summary>
		/// <param name="resultResource"></param>
		/// <param name="tagCriteriaSelectionParameters"></param>
		/// <returns>List</returns>
		private List<Resource> FilterResourcesByTags(List<Resource> resultResource,
			TagCriteriaSelectionParameters tagCriteriaSelectionParameters)
		{
			if (resultResource == null || resultResource.Count == 0)
				return null;

			List<Resource> newResourcesList = new List<Resource>();
            List<CmsResourceTagAssociationDetails> associatedLrmiDetails =
                GetResourcesWithTagAssociations(resultResource);

			if (associatedLrmiDetails == null || associatedLrmiDetails.Count == 0)
				return new List<Resource>();

			const string defaultStandardId = "0";

			resultResource.ForEach(res =>
			{
				// Retrieve all educational alignments for a resource.
				List<CmsResourceTagAssociationDetails> tagResources =
					associatedLrmiDetails.FindAll(
						r =>
							r.ResourceId == res.DocumentForeignKeyValue &&
							r.ClassName.Equals(res.DocumentType, StringComparison.InvariantCultureIgnoreCase));
				if (tagResources.Count > 0)
				{
					bool includeAssessed = true;
					bool includeTeaches = true;
					bool includeRequires = true;
					bool includeEs = true;
					bool includeEl = true;
					bool includeLearningResource = true;
					bool includeTc = true;
					bool includeRl = true;
					bool includeAgeAppropriate = true;
					bool includeUrUrl = true;
					bool includeEducationalUse = true;
					bool includeEndUser = true;
					bool includeInteractivity = true;
					bool includeMediaType = true;
					bool includeLanguage = true;
					bool includeDuration = true;
					bool includeCreator = true;
					bool includePublisher = true;

					if (tagCriteriaSelectionParameters.AssessedStandardIds.Count > 0)
					{
						string[] assessedStdIds =
                            tagCriteriaSelectionParameters.AssessedStandardIds.Select(
                                i => i.ToString(CultureInfo.InvariantCulture))
								.ToArray();
                        includeAssessed = LRMIListInclude(assessedStdIds, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.Assessed));
					}
					if (tagCriteriaSelectionParameters.TeachesStandardIds.Count > 0)
					{
						string[] teachesStdIds =
                            tagCriteriaSelectionParameters.TeachesStandardIds.Select(
                                i => i.ToString(CultureInfo.InvariantCulture)).ToArray();
                        includeTeaches = LRMIListInclude(teachesStdIds, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.Teaches));
					}
					if (tagCriteriaSelectionParameters.RequiresStandardIds.Count > 0)
					{
						string[] requiresStdIds =
                            tagCriteriaSelectionParameters.RequiresStandardIds.Select(
                                i => i.ToString(CultureInfo.InvariantCulture))
								.ToArray();
                        includeRequires = LRMIListInclude(requiresStdIds, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.Requires));
					}
					if (tagCriteriaSelectionParameters.EducationalSubject.Count > 0)
					{
						string[] educationalSubject =
                            tagCriteriaSelectionParameters.EducationalSubject.Select(
                                i => i.ToString(CultureInfo.InvariantCulture)).ToArray();
                        includeEs = LRMIListInclude(educationalSubject, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.EducationalSubject));
					}
					if (tagCriteriaSelectionParameters.GradeLevel.Count > 0)
					{
						string[] gradeLevels =
                            tagCriteriaSelectionParameters.GradeLevel.Select(
                                i => i.ToString(CultureInfo.InvariantCulture)).ToArray();
                        includeEl = LRMIListInclude(gradeLevels, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.EducationalLevel));
					}
					if (tagCriteriaSelectionParameters.LearningResourceType.Count > 0)
					{
						string[] learningResources =
                            tagCriteriaSelectionParameters.LearningResourceType.Select(
                                i => i.ToString(CultureInfo.InvariantCulture))
								.ToArray();
						includeLearningResource = LRMIListInclude(learningResources, tagResources,
							Convert.ToInt32(Enums.LrmiTags.LearningResourceType));
					}
					if (tagCriteriaSelectionParameters.EducationalUse.Count > 0)
					{
						string[] educationalUse =
                            tagCriteriaSelectionParameters.EducationalUse.Select(
                                i => i.ToString(CultureInfo.InvariantCulture)).ToArray();
						includeEducationalUse = LRMIListInclude(educationalUse, tagResources,
							Convert.ToInt32(Enums.LrmiTags.EducationalUse));
					}
					if (tagCriteriaSelectionParameters.EndUser.Count > 0)
					{
						string[] endUser =
                            tagCriteriaSelectionParameters.EndUser.Select(i => i.ToString(CultureInfo.InvariantCulture))
                                .ToArray();
						includeEndUser = LRMIListInclude(endUser, tagResources, Convert.ToInt32(Enums.LrmiTags.EndUser));
					}
					if (tagCriteriaSelectionParameters.InteractivityType.Count > 0)
					{
						string[] interactivityType =
                            tagCriteriaSelectionParameters.InteractivityType.Select(
                                i => i.ToString(CultureInfo.InvariantCulture)).ToArray();
                        includeInteractivity = LRMIListInclude(interactivityType, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.Activity));
					}
					if (tagCriteriaSelectionParameters.MediaType.Count > 0)
					{
						string[] mediaType =
                            tagCriteriaSelectionParameters.MediaType.Select(
                                i => i.ToString(CultureInfo.InvariantCulture)).ToArray();
                        includeMediaType = LRMIListInclude(mediaType, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.MediaType));
					}

					if (!string.IsNullOrWhiteSpace(tagCriteriaSelectionParameters.TextComplexity))
					{
						string[] textComplexity = { tagCriteriaSelectionParameters.TextComplexity };
                        includeTc = LRMIListInclude(textComplexity, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.TextComplexity));
					}
					if (!string.IsNullOrWhiteSpace(tagCriteriaSelectionParameters.ReadingLevel))
					{
						string[] readingLevel = { tagCriteriaSelectionParameters.ReadingLevel };
                        includeRl = LRMIListInclude(readingLevel, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.ReadingLevel));
					}
                    if (tagCriteriaSelectionParameters.AgeAppropriate.HasValue &&
                        tagCriteriaSelectionParameters.AgeAppropriate > 0)
					{
						string[] ageAppropriate = { tagCriteriaSelectionParameters.AgeAppropriate.ToString() };
						includeAgeAppropriate = LRMIListInclude(ageAppropriate, tagResources,
							Convert.ToInt32(Enums.LrmiTags.AgeAppropriate));
					}
                    if (tagCriteriaSelectionParameters.UseRightUrl.HasValue &&
                        tagCriteriaSelectionParameters.UseRightUrl > 0)
					{
						string[] usageRights = { tagCriteriaSelectionParameters.UseRightUrl.ToString() };
                        includeUrUrl = LRMIListInclude(usageRights, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.UsageRights));
					}
					if (tagCriteriaSelectionParameters.Language.HasValue && tagCriteriaSelectionParameters.Language >= 0)
					{
						string[] language = { tagCriteriaSelectionParameters.Language.ToString() };
                        includeLanguage = LRMIListInclude(language, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.Language));
					}
					if (!string.IsNullOrWhiteSpace(tagCriteriaSelectionParameters.Creator))
					{
						string[] creator = { tagCriteriaSelectionParameters.Creator };
						includeCreator = LRMIListInclude(creator, tagResources, Convert.ToInt32(Enums.LrmiTags.Creator));
					}
					if (!string.IsNullOrWhiteSpace(tagCriteriaSelectionParameters.Publisher))
					{
						string[] publisher = { tagCriteriaSelectionParameters.Publisher };
                        includePublisher = LRMIListInclude(publisher, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.Publisher));
					}
                    if (tagCriteriaSelectionParameters.TimeRequiredDays.HasValue &&
                        tagCriteriaSelectionParameters.TimeRequiredDays > 0 ||
						tagCriteriaSelectionParameters.TimeRequiredHours.HasValue &&
						tagCriteriaSelectionParameters.TimeRequiredHours > 0 ||
						tagCriteriaSelectionParameters.TimeRequiredMinutes.HasValue &&
						tagCriteriaSelectionParameters.TimeRequiredMinutes > 0)
					{
						string[] timeRequired =
						{
							tagCriteriaSelectionParameters.TimeRequiredDays + ":" +
							tagCriteriaSelectionParameters.TimeRequiredHours + ":" +
							tagCriteriaSelectionParameters.TimeRequiredMinutes
						};
                        includeDuration = LRMIListInclude(timeRequired, tagResources,
                            Convert.ToInt32(Enums.LrmiTags.TimeRequired));
					}


					bool includeInSearch = includeTc && includeRl && includeEs && includeEl;
					includeInSearch = includeInSearch && includeAssessed && includeTeaches && includeRequires;
					includeInSearch = includeInSearch && includeDuration && includeAgeAppropriate && includeUrUrl;
					includeInSearch = includeInSearch && includeInteractivity && includeMediaType && includeLanguage;
                    includeInSearch = includeInSearch && includeLearningResource && includeEducationalUse &&
                                      includeEndUser;
					includeInSearch = includeInSearch && includeCreator && includePublisher;
					if (includeInSearch)
					{
						AddResource(newResourcesList, res);
					}
				}

			});

			return newResourcesList;
		}
        private void SaveTags(TagCriteriaSelectionParameters tags)
        {
           
            
            Base.Classes.Assessment.ClearLrmiTagsForAssessment(_assessmentId); 
            
            // Set default tags
            var lrmiTag = GetLrmiTag(Enums.LrmiTags.EducationalUse, "Assessment");
            if (lrmiTag > 0) tags.EducationalUse.Add(lrmiTag);
            lrmiTag = GetLrmiTag(Enums.LrmiTags.EndUser, "Student");
            if (lrmiTag > 0) tags.EndUser.Add(lrmiTag);

            if (tags.TextComplexity != string.Empty)
            {
                SaveTag((int)Enums.LrmiTags.TextComplexity, tags.TextComplexity,
                    true);
            }
            if (tags.ReadingLevel != string.Empty)
            {
                SaveTag((int)Enums.LrmiTags.ReadingLevel, tags.ReadingLevel,
                    true);
            }
            if (tags.AgeAppropriate != null && tags.AgeAppropriate != 0)
            {
                SaveTag((int)Enums.LrmiTags.AgeAppropriate, tags.AgeAppropriate.ToString(), true);
            }
            if (tags.Creator != string.Empty)
            {
                SaveTag((int)Enums.LrmiTags.Creator, tags.Creator, true);
            }
            if (tags.Publisher != string.Empty)
            {
                SaveTag((int)Enums.LrmiTags.Publisher, tags.Publisher, true);
            }
            if (tags.DateCreated != null)
            {
                SaveTag((int)Enums.LrmiTags.DateCreated, tags.DateCreated.ToString(), true);
            }
            if (tags.Language != null)
            {
                SaveTag((int)Enums.LrmiTags.Language, tags.Language.ToString(), true);
            }
            if (tags.UseRightUrl != null && tags.UseRightUrl != 0)
            {
                SaveTag((int)Enums.LrmiTags.UsageRights, tags.UseRightUrl.ToString(), true);
            }
            if (tags.UseRightUrlTxt != string.Empty)
            {
                SaveTag((int)Enums.LrmiTags.UsageRightsUrl, tags.UseRightUrlTxt, true);
            }
            if (tags.OriginalThirdPartyUrl != string.Empty)
            {
                SaveTag((int)Enums.LrmiTags.Original3RdParty, tags.OriginalThirdPartyUrl, true);
            }
            if (tags.TimeRequiredDays != null && tags.TimeRequiredDays != 0 ||
                tags.TimeRequiredHours != null && tags.TimeRequiredHours != 0 ||
                tags.TimeRequiredMinutes != null && tags.TimeRequiredMinutes != 0)
            {
                string durationValue = string.Empty;
                if (tags.TimeRequiredDays != null)
                {
                    if (tags.TimeRequiredDays.ToString().Length == 1)
                    {
                        durationValue = tags.TimeRequiredDays.ToString().PadLeft(2,'0');
                    }
                    else
                    {
                        durationValue = tags.TimeRequiredDays.ToString();
                    }
                }
                else
                {
                    durationValue = "00";
                }
                durationValue += ":";
                if (tags.TimeRequiredHours != null)
                {
                    if (tags.TimeRequiredHours.ToString().Length == 1)
                    {
                        durationValue += tags.TimeRequiredHours.ToString().PadLeft(2, '0');
                    }
                    else
                    {
                        durationValue += tags.TimeRequiredHours.ToString();
                    }
                }
                else
                {
                    durationValue += "00";
                }
                durationValue += ":";
                if (tags.TimeRequiredMinutes != null)
                {
                    if (tags.TimeRequiredMinutes.ToString().Length == 1)
                    {
                        durationValue += tags.TimeRequiredMinutes.ToString().PadLeft(2, '0');
                    }
                    else
                    {
                        durationValue += tags.TimeRequiredMinutes.ToString();
                    }
                }
                else
                {
                    durationValue += "00";
                }
                SaveTag((int)Enums.LrmiTags.TimeRequired, durationValue, true);

            }
            if (tags.AssessedStandardIds != null && tags.AssessedStandardIds.Count > 0)
            {
                foreach (var assessedStandardId in tags.AssessedStandardIds)
                {
                    SaveTag((int)Enums.LrmiTags.Assessed, assessedStandardId.ToString(CultureInfo.InvariantCulture), false);
                }
            }
            if (tags.GradeLevel != null && tags.GradeLevel.Count > 0)
            {
                SaveTag((int)Enums.LrmiTags.EducationalLevel, tags.GradeLevel[0], false);
            }
            if (tags.EducationalSubject != null && tags.EducationalSubject.Count > 0)
            {
                SaveTag((int)Enums.LrmiTags.EducationalSubject, tags.EducationalSubject[0], false);
            }
            if (tags.LearningResourceType != null && tags.LearningResourceType.Count > 0)
            {
                foreach (var resourceType in tags.LearningResourceType)
                {
                    SaveTag((int)Enums.LrmiTags.LearningResourceType, resourceType.ToString(CultureInfo.InvariantCulture), true);
                }
            }
            if (tags.EducationalUse != null && tags.EducationalUse.Count > 0)
            {
                foreach (var educationUse in tags.EducationalUse)
                {
                    SaveTag((int)Enums.LrmiTags.EducationalUse, educationUse.ToString(CultureInfo.InvariantCulture), true);
                }
            }
            if (tags.EndUser != null && tags.EndUser.Count > 0)
            {
                foreach (var endUser in tags.EndUser)
                {
                    SaveTag((int)Enums.LrmiTags.EndUser, endUser.ToString(CultureInfo.InvariantCulture), true);
                }
            }
            if (tags.MediaType != null && tags.MediaType.Count > 0)
            {
                foreach (var mediaType in tags.MediaType)
                {
                    SaveTag((int)Enums.LrmiTags.MediaType, mediaType.ToString(CultureInfo.InvariantCulture), true);
                }
            }
            if (tags.InteractivityType != null && tags.InteractivityType.Count > 0)
            {
                foreach (var activityType in tags.InteractivityType)
                {
                    SaveTag((int)Enums.LrmiTags.Activity, activityType.ToString(CultureInfo.InvariantCulture), true);
                }
            }
        }