/// <summary> Determines whether the given selector name is valid according to this
        /// validator's policy.
        ///
        /// </summary>
        /// <param name="selectorName">the name of the selector
        /// </param>
        /// <param name="selector">the object representation of the selector
        /// </param>
        /// <param name="results">the <code>CleanResults</code> object to add any error
        /// messages to
        /// </param>
        /// <returns> true if this selector name is valid; false otherwise
        /// </returns>
        public virtual bool isValidSelector(System.String selectorName, Selector selector, CleanResults results)
        {
            // determine correct behavior
            switch (selector.getSelectorType())
            {
            case CssValidator.SAC_ANY_NODE_SELECTOR:
            case CssValidator.SAC_ELEMENT_NODE_SELECTOR:
            case CssValidator.SAC_PSEUDO_ELEMENT_SELECTOR:
            case CssValidator.SAC_ROOT_NODE_SELECTOR:
                // these selectors are the most base selectors
                return(validateSimpleSelector((SimpleSelector)selector, results));

            case CssValidator.SAC_CHILD_SELECTOR:
            case CssValidator.SAC_DESCENDANT_SELECTOR:
                // these are compound selectors - decompose into simple selectors
                DescendantSelector descSelector = (DescendantSelector)selector;
                return(isValidSelector(selectorName, descSelector.getSimpleSelector(), results) & isValidSelector(selectorName, descSelector.getAncestorSelector(), results));

            case CssValidator.SAC_CONDITIONAL_SELECTOR:
                // this is a compound selector - decompose into simple selectors
                ConditionalSelector condSelector = (ConditionalSelector)selector;
                return(isValidSelector(selectorName, condSelector.getSimpleSelector(), results) & isValidCondition(selectorName, condSelector.getCondition(), results));

            case CssValidator.SAC_DIRECT_ADJACENT_SELECTOR:
                // this is a compound selector - decompose into simple selectors
                SiblingSelector sibSelector = (SiblingSelector)selector;
                return(isValidSelector(selectorName, sibSelector.getSiblingSelector(), results) & isValidSelector(selectorName, sibSelector.getSelector(), results));

            case CssValidator.SAC_NEGATIVE_SELECTOR:
                // this is a compound selector with one simple selector
                return(validateSimpleSelector((NegativeSelector)selector, results));

            case CssValidator.SAC_CDATA_SECTION_NODE_SELECTOR:
            case CssValidator.SAC_COMMENT_NODE_SELECTOR:
            case CssValidator.SAC_PROCESSING_INSTRUCTION_NODE_SELECTOR:
            case CssValidator.SAC_TEXT_NODE_SELECTOR:
            default:
                results.addErrorMessage("Unknown selector in selector " + HTMLEntityEncoder.htmlEntityEncode(selectorName) + " encountered");
                return(false);
            }
        }
        /// <summary> Determines whether the given selector name is valid according to this
        /// validator's policy.
        /// 
        /// </summary>
        /// <param name="selectorName">the name of the selector
        /// </param>
        /// <param name="selector">the object representation of the selector
        /// </param>
        /// <param name="results">the <code>CleanResults</code> object to add any error
        /// messages to
        /// </param>
        /// <returns> true if this selector name is valid; false otherwise
        /// </returns>
        public virtual bool isValidSelector(System.String selectorName, Selector selector, CleanResults results)
        {
            // determine correct behavior
            switch (selector.getSelectorType())
            {

                case CssValidator.SAC_ANY_NODE_SELECTOR:
                case CssValidator.SAC_ELEMENT_NODE_SELECTOR:
                case CssValidator.SAC_PSEUDO_ELEMENT_SELECTOR:
                case CssValidator.SAC_ROOT_NODE_SELECTOR:
                    // these selectors are the most base selectors
                    return validateSimpleSelector((SimpleSelector)selector, results);

                case CssValidator.SAC_CHILD_SELECTOR:
                case CssValidator.SAC_DESCENDANT_SELECTOR:
                    // these are compound selectors - decompose into simple selectors
                    DescendantSelector descSelector = (DescendantSelector)selector;
                    return isValidSelector(selectorName, descSelector.getSimpleSelector(), results) & isValidSelector(selectorName, descSelector.getAncestorSelector(), results);

                case CssValidator.SAC_CONDITIONAL_SELECTOR:
                    // this is a compound selector - decompose into simple selectors
                    ConditionalSelector condSelector = (ConditionalSelector)selector;
                    return isValidSelector(selectorName, condSelector.getSimpleSelector(), results) & isValidCondition(selectorName, condSelector.getCondition(), results);

                case CssValidator.SAC_DIRECT_ADJACENT_SELECTOR:
                    // this is a compound selector - decompose into simple selectors
                    SiblingSelector sibSelector = (SiblingSelector)selector;
                    return isValidSelector(selectorName, sibSelector.getSiblingSelector(), results) & isValidSelector(selectorName, sibSelector.getSelector(), results);

                case CssValidator.SAC_NEGATIVE_SELECTOR:
                    // this is a compound selector with one simple selector
                    return validateSimpleSelector((NegativeSelector)selector, results);

                case CssValidator.SAC_CDATA_SECTION_NODE_SELECTOR:
                case CssValidator.SAC_COMMENT_NODE_SELECTOR:
                case CssValidator.SAC_PROCESSING_INSTRUCTION_NODE_SELECTOR:
                case CssValidator.SAC_TEXT_NODE_SELECTOR:
                default:
                    results.addErrorMessage("Unknown selector in selector " + HTMLEntityEncoder.htmlEntityEncode(selectorName) + " encountered");
                    return false;
            }
        }
// Generating method code for applyStyleFromSelector
        public virtual void ApplyStyleFromSelector(NHtmlUnit.W3C.Dom.Css.ICSSStyleDeclaration declaration, org.w3c.css.sac.Selector selector)
        {
            WObj.applyStyleFromSelector((org.w3c.dom.css.CSSStyleDeclaration)declaration.WrappedObject, selector);
        }