/// <summary>
        /// Get the "aboveAverage" rule type according to the follwoing attributes:
        /// "AboveAverage", "EqualAverage" and "StdDev".
        ///
        /// @StdDev greater than "0"                              == AboveStdDev
        /// @StdDev less than "0"                                 == BelowStdDev
        /// @AboveAverage = "1"/null and @EqualAverage = "0"/null == AboveAverage
        /// @AboveAverage = "1"/null and @EqualAverage = "1"      == AboveOrEqualAverage
        /// @AboveAverage = "0" and @EqualAverage = "0"/null      == BelowAverage
        /// @AboveAverage = "0" and @EqualAverage = "1"           == BelowOrEqualAverage
        /// /// </summary>
        /// <returns>AboveAverage, AboveOrEqualAverage, BelowAverage or BelowOrEqualAverage</returns>
        internal static eExcelConditionalFormattingRuleType GetAboveAverageType(
            XmlNode topNode,
            XmlNamespaceManager nameSpaceManager)
        {
            // Get @StdDev attribute
            int?stdDev = ExcelConditionalFormattingHelper.GetAttributeIntNullable(
                topNode,
                ExcelConditionalFormattingConstants.Attributes.StdDev);

            if (stdDev > 0)
            {
                // @StdDev > "0" --> AboveStdDev
                return(eExcelConditionalFormattingRuleType.AboveStdDev);
            }

            if (stdDev < 0)
            {
                // @StdDev < "0" --> BelowStdDev
                return(eExcelConditionalFormattingRuleType.BelowStdDev);
            }

            // Get @AboveAverage attribute
            bool?isAboveAverage = ExcelConditionalFormattingHelper.GetAttributeBoolNullable(
                topNode,
                ExcelConditionalFormattingConstants.Attributes.AboveAverage);

            // Get @EqualAverage attribute
            bool?isEqualAverage = ExcelConditionalFormattingHelper.GetAttributeBoolNullable(
                topNode,
                ExcelConditionalFormattingConstants.Attributes.EqualAverage);

            if ((isAboveAverage == null) || (isAboveAverage == true))
            {
                if (isEqualAverage == true)
                {
                    // @AboveAverage = "1"/null and @EqualAverage = "1" == AboveOrEqualAverage
                    return(eExcelConditionalFormattingRuleType.AboveOrEqualAverage);
                }

                // @AboveAverage = "1"/null and @EqualAverage = "0"/null == AboveAverage
                return(eExcelConditionalFormattingRuleType.AboveAverage);
            }

            if (isEqualAverage == true)
            {
                // @AboveAverage = "0" and @EqualAverage = "1" == BelowOrEqualAverage
                return(eExcelConditionalFormattingRuleType.BelowOrEqualAverage);
            }

            // @AboveAverage = "0" and @EqualAverage = "0"/null == BelowAverage
            return(eExcelConditionalFormattingRuleType.BelowAverage);
        }