/// <summary>Get first ancestor. Optionally, include self.</summary>
        /// <remarks>Extension method.</remarks>
        public static DynamicNode GetFirstAncestor(this DynamicNode cmsItem, string nodeTypeAlias, string pageName, bool includeSelf = false)
        {
            IList<DynamicNode> cmsItems = null;

            if(cmsItem != null) {
            if(includeSelf) {
                cmsItems = cmsItem.AncestorsOrSelf(nodeTypeAlias).Items;
            } else {
                cmsItems = cmsItem.Ancestors(nodeTypeAlias).Items;
            }
            return cmsItems.Where(x => x.Name == pageName).FirstOrDefault();
            }
            return null;
        }
		internal static IEnumerable<IPublishedContent> AncestorsOrSelf(this IPublishedContent content, int level)
		{
			return content.AncestorsOrSelf(n => n.Level <= level);
		}
		public static IEnumerable<IPublishedContent> AncestorsOrSelf(this IPublishedContent content, string nodeTypeAlias)
		{
			return content.AncestorsOrSelf(n => n.DocumentTypeAlias == nodeTypeAlias);
		}
		public static IEnumerable<IPublishedContent> AncestorsOrSelf(this IPublishedContent content)
		{
			return content.AncestorsOrSelf(n => true);
		}
		public static HtmlString IsDescendantOrSelf(this IPublishedContent content, DynamicPublishedContent other, string valueIfTrue, string valueIfFalse)
		{
			var ancestors = content.AncestorsOrSelf();
			return content.IsHelper(n => ancestors.FirstOrDefault(ancestor => ancestor.Id == other.Id) != null, valueIfTrue, valueIfFalse);
		}
		public static bool IsDescendantOrSelf(this IPublishedContent content, IPublishedContent other)
		{
			var ancestors = content.AncestorsOrSelf();
			return content.IsHelper(n => ancestors.FirstOrDefault(ancestor => ancestor.Id == other.Id) != null);
		}
        /// <summary>
        /// Gets the ancestors or self of the current Content entity relationships
        /// </summary>
        /// <param name="collection"></param>
        /// <returns></returns>
        public static IEnumerable<File> AncestorsOrSelfAsFile(this EntityRelationCollection collection)
        {
            Mandate.ParameterNotNull(collection, "collection");

            return collection.AncestorsOrSelf<File>(FixedRelationTypes.FileRelationType);
        }