/// <summary>
        /// Returns an array of all the combined class names that should be applied based
        /// on the given list of classes. Checks the result of
        /// {@link getIe6ClassCombinations} for any combinations that have all
        /// members contained in classes. If a combination matches, the members are
        /// joined with an underscore (in order), and added to the return array.
        ///
        /// If opt_includedClass is provided, return only the combined classes that have
        /// all members contained in classes AND include opt_includedClass as well.
        /// opt_includedClass is added to classes as well.
        /// </summary>
        /// <param name="classes">Array-like thing of classes to
        /// return matching combined classes for.</param>
        /// <param name="opt_includedClass">If provided, get only the combined
        /// classes that include this one.</param>
        /// <returns>Array of combined class names that should be
        /// applied.</returns>
        private JsArray <string> getAppliedCombinedClassNames_(JsArray <string> classes, string opt_includedClass = null)
        {
            var toAdd = new JsArray <string>();

            if (opt_includedClass != null)
            {
                classes.Push(opt_includedClass);
            }
            foreach (var combo in this.getIe6ClassCombinations())
            {
                if (combo.All((a) => classes.Contains(a)) &&
                    (opt_includedClass == null || combo.Contains(opt_includedClass)))
                {
                    toAdd.Push(combo.Join("_"));
                }
            }
            return(toAdd);
        }