private void SetupUniversalTransactionItems(HtmlTextWriter writer, AnalyticsTransaction transaction)
        {
            foreach (AnalyticsTransactionItem item in transaction.Items)
            {
                if (item.IsValid())
                {
                    writer.Write("ga('ecommerce:addItem', {");
                    writer.Write("'id':'" + item.OrderId + "'");
                    writer.Write(",'name':'" + item.ProductName + "'");
                    writer.Write(",'sku':'" + item.Sku + "'");
                    writer.Write(",'category':'" + item.Category + "'");
                    writer.Write(",'price':'" + item.Price + "'");
                    writer.Write(",'quantity':'" + item.Quantity + "'");
                    writer.Write("});");

                }
            }
        }
        private void SetupTransactionItems(HtmlTextWriter writer, AnalyticsTransaction transaction)
        {
            foreach (AnalyticsTransactionItem item in transaction.Items)
            {
                if (item.IsValid())
                {
                    writer.Write("_gaq.push(['_addItem',");
                    writer.Write("'" + item.OrderId + "',");
                    writer.Write("'" + item.Sku + "',");
                    writer.Write("'" + item.ProductName + "',");
                    writer.Write("'" + item.Category + "',");
                    writer.Write("'" + item.Price + "',");
                    writer.Write("'" + item.Quantity + "'");
                    writer.Write("]);");

                }
            }
        }
        private void DoAsyncTracking()
        {
            AnalyticsAsyncTopScript analytics = Page.Master.FindControl("analyticsTop") as AnalyticsAsyncTopScript;
            if (analytics == null) { return; }

            AnalyticsTransaction transaction = new AnalyticsTransaction();
            transaction.OrderId = order.OrderGuid.ToString();
            transaction.City = order.CustomerCity;
            transaction.Country = order.CustomerCountry;
            transaction.State = order.CustomerState;
            transaction.StoreName = siteSettings.SiteName + " - " + store.Name;
            transaction.Tax = order.TaxTotal.ToString(CultureInfo.InvariantCulture);
            transaction.Total = order.OrderTotal.ToString(CultureInfo.InvariantCulture);

            foreach (OrderOffer offer in order.OrderOffers)
            {
                AnalyticsTransactionItem item = new AnalyticsTransactionItem();
                item.Category = string.Empty;
                item.OrderId = order.OrderGuid.ToString();
                item.Price = offer.OfferPrice.ToString(CultureInfo.InvariantCulture);
                item.ProductName = offer.Name;
                item.Quantity = offer.Quantity.ToInvariantString();
                item.Sku = offer.OfferGuid.ToString();
                transaction.Items.Add(item);

            }

            if (transaction.IsValid())
            {
                analytics.Transactions.Add(transaction);
                Order.TrackAnalytics(order.OrderGuid);
            }
        }
        private void DoGoogleAnalyticsTracking()
        {
            if (order == null) { return; }
            if (order.AnalyticsTracked) { return; }
            if (store == null) { return; }

            try
            {
                mojoGoogleAnalyticsScript analytics = Page.Master.FindControl("mojoGoogleAnalyticsScript1") as mojoGoogleAnalyticsScript;
                if (analytics == null) { DoAsyncTracking(); return; }

                AnalyticsTransaction transaction = new AnalyticsTransaction();
                transaction.OrderId = order.OrderGuid.ToString();
                transaction.City = order.CustomerCity;
                transaction.Country = order.CustomerCountry;
                transaction.State = order.CustomerState;
                transaction.StoreName = siteSettings.SiteName + " - " + store.Name;
                transaction.Tax = order.TaxTotal.ToString(CultureInfo.InvariantCulture);
                transaction.Total = order.OrderTotal.ToString(CultureInfo.InvariantCulture);

                foreach (OrderOffer offer in order.OrderOffers)
                {
                    AnalyticsTransactionItem item = new AnalyticsTransactionItem();
                    item.Category = string.Empty;
                    item.OrderId = order.OrderGuid.ToString();
                    item.Price = offer.OfferPrice.ToString(CultureInfo.InvariantCulture);
                    item.ProductName = offer.Name;
                    item.Quantity = offer.Quantity.ToString(CultureInfo.InvariantCulture);
                    item.Sku = offer.OfferGuid.ToString();
                    transaction.Items.Add(item);

                }

                if (transaction.IsValid())
                {
                    analytics.Transactions.Add(transaction);
                    Order.TrackAnalytics(order.OrderGuid);
                }

            }
            catch(Exception ex)
            {
                log.Error("error tracking order in google analytics.", ex);
            }
        }
        private void SetupTransactionItems(StringBuilder script, AnalyticsTransaction transaction)
        {
            foreach (AnalyticsTransactionItem item in transaction.Items)
            {
                if (item.IsValid())
                {
                    script.Append(trackerName + "._addItem(");
                    script.Append("\"" + item.OrderId + "\",");
                    script.Append("\n");

                    script.Append("\"" + item.Sku + "\",");
                    script.Append("\n");

                    script.Append("\"" + item.ProductName + "\",");
                    script.Append("\n");

                    script.Append("\"" + item.Category + "\",");
                    script.Append("\n");

                    script.Append("\"" + item.Price + "\",");
                    script.Append("\n");

                    script.Append("\"" + item.Quantity + "\"");
                    script.Append("\n");

                    script.Append(");");
                    script.Append("\n");
                }
            }
        }