internal static void AppendCartItems(OrderTotals_V01 totals, List <DistributorShoppingCartItem> cartItems, string eventState)
        {
            if (totals == null || totals.ItemTotalsList == null)
            {
                return;
            }

            var items = new List <object>();

            foreach (var lineTotal in totals.ItemTotalsList.Cast <ItemTotal_V01>())
            {
                var cartItem = cartItems.FirstOrDefault(n => n.SKU == lineTotal.SKU);
                if (cartItem == null)
                {
                    continue;
                }

                var fee           = FindCharge("FREIGHT", lineTotal.ChargeList);
                var freight       = fee == null ? 0m : fee.Amount;
                var analyticsItem = CreateAnalyticsCartItem(lineTotal.SKU, lineTotal.Quantity, lineTotal.DiscountedPrice, cartItem.Description, lineTotal.LineTax, freight);
                items.Add(analyticsItem);
            }
            AnalyticsProvider.Set(AnalyticsFact.PricedCart, items);
            string orderId = eventState.Replace("purchase|", "");

            AnalyticsProvider.Set(AnalyticsFact.OrderId, orderId);
        }
        /// <summary>
        ///     Registers script emmitting newly added cart items
        /// </summary>
        /// <param name="currentPage"></param>
        /// <param name="cartItems"></param>
        /// <param name="addedItems"></param>
        public static void RegisterOmnitureAddCartScript(Page currentPage, List <DistributorShoppingCartItem> cartItems, List <ShoppingCartItem_V01> addedItems)
        {
            try
            {
                if (addedItems == null || cartItems == null)
                {
                    return;
                }

                var items = new List <object>();
                foreach (var addedItem in addedItems.Join(
                             cartItems,
                             sci => sci.SKU,
                             dsci => dsci.SKU,
                             (s1, s2) => s1))
                {
                    var analyticsCartItem = CreateAnalyticsCartItem(addedItem.SKU, addedItem.Quantity, 0, null, 0, 0);
                    items.Add(analyticsCartItem);
                }

                AnalyticsProvider.Set(AnalyticsFact.AddedToCart, items);
                var writer = new StringWriter();
                writer.WriteLine(string.Format("<!-- {0} -->", AddedCartItemScriptName));
                AnalyticsProvider.Render(writer);
                currentPage.ClientScript.RegisterStartupScript(currentPage.GetType(), AddedCartItemScriptName, writer.GetStringBuilder().ToString());
            }
            catch (Exception ex)
            {
                LoggerHelper.Exception("System.Exception", ex, "Error setting Omniture Analytics variables Added To Cart:");
            }
        }
        public static void AppendCommonItems(string pageTitle, string omnitureEventName, HttpRequest request, IIdentity identity, DistributorProfileModel distributorProfileModel, string browseScheme)
        {
            var isAuthenticated = identity.IsAuthenticated;
            var distributorId   = isAuthenticated ? identity.Name : null;

            AnalyticsProvider.Set(AnalyticsFact.Id, distributorId);
            AnalyticsProvider.Set(AnalyticsFact.EncId, Encryption.Encrypt(distributorId, EncriptionKey));
            if (!string.IsNullOrEmpty(omnitureEventName))
            {
                AnalyticsProvider.Set(AnalyticsFact.OmnitureEventName, omnitureEventName);
            }
            AnalyticsProvider.Set(AnalyticsFact.IsLoggedIn, isAuthenticated);
            if (isAuthenticated)
            {
                var roles = Roles.GetRolesForUser();
                AnalyticsProvider.Set(AnalyticsFact.Roles, roles);
                var profile = distributorProfileModel;
                if (profile != null)
                {
                    AnalyticsProvider.Set(AnalyticsFact.IsPresidentsTeam, profile.IsPresidentTeam);
                    AnalyticsProvider.Set(AnalyticsFact.IsChairmanClub, profile.IsChairmanClubMember);
                    AnalyticsProvider.Set(AnalyticsFact.IsTabTeam, !string.IsNullOrWhiteSpace(profile.TabTeamType));
                    AnalyticsProvider.Set(AnalyticsFact.SubtypeCode, profile.SubTypeCode);
                    AnalyticsProvider.Set(AnalyticsFact.EncSubtypeCode, Encryption.Encrypt(profile.SubTypeCode, EncriptionKey));
                    AnalyticsProvider.Set(AnalyticsFact.ProcessingCountryCode, profile.ProcessingCountryCode);
                    AnalyticsProvider.Set(AnalyticsFact.Scheme, profile.Scheme);
                }
            }
            AnalyticsProvider.Set(AnalyticsFact.BrowseScheme, browseScheme);
            var dsSiteMap = new SiteMapDataSource();

            SiteMapHelper.SetCombinedSitemap(dsSiteMap);
            var currentNode = dsSiteMap.Provider.CurrentNode;

            AnalyticsProvider.Set(AnalyticsFact.Title, currentNode == null ? pageTitle : currentNode.Title);
            string searchKeyword = request.QueryString[RequestExtension.SEARCH_TERMS_KEY] ?? "";

            AnalyticsProvider.Set(AnalyticsFact.SearchTerms, searchKeyword.ToLower());
        }
        /// <summary>
        ///     Registers all client side script necessary for Omniture Analytics
        ///     tracking of the page.
        /// </summary>
        /// <param name="currentPage">
        ///     A reference to the page on which
        ///     the script should be included.
        /// </param>
        /// <param name="product"></param>
        /// <param name="skus"></param>
        /// <param name="category"></param>
        /// <param name="localizationProvider"></param>
        public static void RegisterOmnitureProductsScript(Page currentPage, string product, List <SKU_V01> skus, string category)
        {
            try
            {
                var productDetail = new
                {
                    Name     = EnsureString(product),
                    Skus     = skus.Select(s => EnsureString(s.SKU)),
                    Category = category,
                };

                AnalyticsProvider.Set(AnalyticsFact.ProductDetail, productDetail);
                var writer = new StringWriter();
                writer.WriteLine(string.Format("<!-- {0} -->", ProductDetailScriptName));
                AnalyticsProvider.Render(writer);
                currentPage.ClientScript.RegisterClientScriptBlock(currentPage.GetType(), ProductDetailScriptName, writer.GetStringBuilder().ToString(), false);
            }
            catch (Exception ex)
            {
                LoggerHelper.Exception("System.Exception", ex, "Error setting Omniture Analytics variables: Product Details");
            }
        }