/// <summary>
        /// Return true if an element matches a specific DOM position-type filter
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="position"></param>
        /// <param name="criteria"></param>
        /// <returns></returns>
        protected bool MatchesDOMPosition(IDomElement obj, PositionType position, string criteria)
        {
            switch (position)
            {
            case PositionType.FirstChild:
                return(obj.PreviousElementSibling == null);

            case PositionType.LastChild:
                return(obj.NextElementSibling == null);

            case PositionType.Odd:
                return(obj.ElementIndex % 2 != 0);

            case PositionType.Even:
                return(obj.ElementIndex % 2 == 0);

            case PositionType.All:
                return(true);

            case PositionType.NthChild:
                return(NthChildMatcher.IndexMatches(obj.ElementIndex, criteria));

            default:
                throw new NotImplementedException("Unimplemented position type selector");
            }
        }