public LibraryFolder(LibraryPage parent)
		{
			Identifier = Guid.NewGuid();
			Parent = parent;
			AddDate = DateTime.Now;

			BannerProperties = new BannerProperties();
			BannerProperties.Font = _headerFont;
			BannerProperties.ForeColor = _foreHeaderColor;

			Files = new List<LibraryLink>();
		}
		public ColumnTitle(LibraryPage parent)
		{
			Parent = parent;
			BannerProperties = new BannerProperties();
		}
		public void InitBannerProperties()
		{
			BannerProperties = new BannerProperties();
			BannerProperties.Font = new Font(Parent.WindowFont, Parent.WindowFont.Style);
			BannerProperties.ForeColor = Parent.ForeWindowColor;
			BannerProperties.Text = DisplayName;

			BannerProperties.Enable = _oldEnableBanner;
			BannerProperties.Image = _oldBanner;
			if (LineBreakProperties != null)
			{
				BannerProperties.Enable |= LineBreakProperties.EnableBanner;
				if (LineBreakProperties.Banner != null)
					BannerProperties.Image = LineBreakProperties.Banner;
			}
		}
		public virtual void Deserialize(XmlNode node)
		{
			foreach (XmlNode childNode in node.ChildNodes)
			{
				bool tempBool;
				int tempInt;
				Guid tempGuid;
				DateTime tempDate;
				switch (childNode.Name)
				{
					case "Identifier":
						if (Guid.TryParse(childNode.InnerText, out tempGuid))
							Identifier = tempGuid;
						break;
					case "DisplayName":
						_name = childNode.InnerText;
						break;
					case "RootId":
						if (Guid.TryParse(childNode.InnerText, out tempGuid))
							RootId = tempGuid;
						break;
					case "LocalPath":
						_linkLocalPath = childNode.InnerText;
						break;
					case "RelativePath":
						RelativePath = childNode.InnerText;
						break;
					case "Type":
						if (int.TryParse(childNode.InnerText, out tempInt))
						{
							Type = (FileTypes)tempInt;
							if (Type == FileTypes.LineBreak)
								LineBreakProperties = new LineBreakProperties();
						}
						break;
					case "Order":
						if (int.TryParse(childNode.InnerText, out tempInt))
							_order = tempInt;
						break;
					case "EnableWidget":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							_enableWidget = tempBool;
						break;
					case "Widget":
						if (string.IsNullOrEmpty(childNode.InnerText) && _enableWidget)
							_widget = null;
						else if (!string.IsNullOrEmpty(childNode.InnerText))
							_widget = new Bitmap(new MemoryStream(Convert.FromBase64String(childNode.InnerText)));
						break;
					case "AddDate":
						if (DateTime.TryParse(childNode.InnerText, out tempDate))
							AddDate = tempDate;
						break;
					case "LastChanged":
						if (DateTime.TryParse(childNode.InnerText, out tempDate))
							_lastChanged = tempDate;
						break;

					case "ExtendedProperties":
						ExtendedProperties.Deserialize(childNode);
						break;
					#region Compatibility with old version of Sales Depot
					case "Note":
						ExtendedProperties.Note = childNode.InnerText;
						break;
					case "IsBold":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.IsBold = tempBool;
						break;
					case "ForcePreview":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.ForcePreview = tempBool;
						break;
					case "IsUrl365":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.IsUrl365 = tempBool;
						break;
					case "IsForbidden":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.IsForbidden = tempBool;
						break;
					case "IsRestricted":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.IsRestricted = tempBool;
						break;
					case "NoShare":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.NoShare = tempBool;
						break;
					case "AssignedUsers":
						ExtendedProperties.AssignedUsers = childNode.InnerText;
						break;
					case "DeniedUsers":
						ExtendedProperties.DeniedUsers = childNode.InnerText;
						break;
					case "GeneratePreviewImages":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.GeneratePreviewImages = tempBool;
						break;
					case "GenerateContentText":
						if (bool.TryParse(childNode.InnerText, out tempBool))
							ExtendedProperties.GenerateContentText = tempBool;
						break;
					#endregion

					case "SearchTags":
						SearchTags.Deserialize(childNode);
						break;
					case Entities.CustomKeywords.TagName:
						CustomKeywords.Deserialize(childNode);
						break;
					case "SuperFilters":
						SuperFilters.Clear();
						SuperFilters.AddRange(childNode.ChildNodes.OfType<XmlNode>().Select(n => new SuperFilter { Name = n.InnerText }));
						break;
					case "ExpirationDateOptions":
						ExpirationDateOptions.Deserialize(childNode);
						break;
					case "PreviewContainer":
						PreviewContainer = new PresentationPreviewContainer();
						PreviewContainer.Deserialize(childNode);
						break;
					case "PresentationProperties":
						PresentationProperties = new PresentationProperties();
						PresentationProperties.Deserialize(childNode);
						break;
					case "LineBreakProperties":
						LineBreakProperties = new LineBreakProperties();
						LineBreakProperties.Deserialize(childNode);
						break;
					case "BannerProperties":
						BannerProperties = new BannerProperties();
						BannerProperties.Deserialize(childNode);
						break;
				}
			}

			if (BannerProperties == null)
				InitBannerProperties();

			SetProperties();
		}