function AnalyticsManager()
{
    this.GATracker = null;
    this.errorReporting = false;
}

//----------------------------------------------------------------------------
AnalyticsManager.TrackingKey = null;
AnalyticsManager.TrackingDomain = null;

//----------------------------------------------------------------------------
AnalyticsManager.SCOPE_VISITOR  = 1;
AnalyticsManager.SCOPE_SESSION  = 2;
AnalyticsManager.SCOPE_PAGE     = 3;

AnalyticsManager.INDEX_PROMOID          = 1;
AnalyticsManager.INDEX_ORDERID          = 2;
AnalyticsManager.INDEX_TRANSACTIONID    = 3;
AnalyticsManager.INDEX_CAMPAIGNTYPE     = 4;
AnalyticsManager.INDEX_UNUSED           = 5;

//----------------------------------------------------------------------------
AnalyticsManager.prototype.Initialize = 
function()
{
    try {
        if (typeof(OfferManager) != 'undefined')
        {
    	    OfferManager.Instance().observe("trackEvent", this.TrackEvent.bind(this));
	        OfferManager.Instance().observe("trackPageView", this.TrackPageView.bind(this));
	        OfferManager.Instance().observe("trackOrder", this.TrackOrder.bind(this));
	    }
	} catch (e) { }

    try {
        if (_gat && AnalyticsManager.TrackingKey)
            this.GATracker = _gat._getTracker(AnalyticsManager.TrackingKey);
        else
            this.GATracker = null;
    }
    catch (e) { 
        if (this.errorReporting) alert(e);
        this.GATracker = null; 
    }

    if (this.GATracker)
    {
        try { 
            if (AnalyticsManager.TrackingDomain)
                this.GATracker._setDomainName(AnalyticsManager.TrackingDomain); 
            else
                this.GATracker._setDomainName("none"); 
            this.GATracker._setAllowLinker(true);
            this.GATracker._setAllowHash(false);
            this.GATracker._setClientInfo(true);
            this.GATracker._setDetectFlash(false);

            try {
                if (typeof(CampaignInfo) != 'undefined' && CampaignInfo)
                {
                    if (CampaignInfo.promoid)
                    {
                        this.GATracker._setCustomVar( 
                            AnalyticsManager.INDEX_PROMOID, 
                            "PromoID", 
                            CampaignInfo.promoid,
                            AnalyticsManager.SCOPE_SESSION );
                    }
        
                    if (CampaignInfo.orderid)
                    {
                        this.GATracker._setCustomVar( 
                            AnalyticsManager.INDEX_ORDERID, 
                            "OrderID", 
                            CampaignInfo.orderid,
                            AnalyticsManager.SCOPE_SESSION );
                    }
        
                    if (CampaignInfo.campaignType)
                    {
                        this.GATracker._setCustomVar( 
                            AnalyticsManager.INDEX_CAMPAIGNTYPE, 
                            "CampaignType", 
                            CampaignInfo.campaignType,
                            AnalyticsManager.SCOPE_SESSION );
                    }
                }
                
                if (typeof(Acceller) != 'undefined' && Acceller.TransactionID && (Acceller.TransactionID > 0))
                {
                    this.GATracker._setCustomVar( 
                        AnalyticsManager.INDEX_TRANSACTIONID, 
                        "TransactionID", 
                        Acceller.TransactionID,
                        AnalyticsManager.SCOPE_SESSION );
                }
                else
                {
                    this.GATracker._deleteCustomVar(AnalyticsManager.INDEX_TRANSACTIONID);
                }
            } catch (e) { if (this.errorReporting) alert(e); }

            this.GATracker._trackPageview();      
        } catch (e) { 
            if (this.errorReporting) alert(e);
            this.GATracker = null; 
        }
    }
};

AnalyticsManager.prototype.TrackPageView = 
function( url )
{
    if (this.GATracker)
    {
        try { 
            if (url)
                this.GATracker._trackPageview(url);
            else
                this.GATracker._trackPageview();
        } catch(e) { if (this.errorReporting) alert(e); }
    }
};

AnalyticsManager.prototype.TrackEvent = 
function( category, action, extraValue )
{
    if (this.GATracker)
    {
        try { 
            this.GATracker._trackEvent(category,action,extraValue,null);
        } catch(e) { if (this.errorReporting) alert(e); }
    }
};

AnalyticsManager.prototype.TrackOrder = 
function()
{
    var orderID = Acceller.TransactionID;
    if (this.GATracker)
    {
        try {
            if ( !orderID || (typeof(orderID) == 'undefined') )
                orderID = this.GATracker._getVisitorCustomVar(AnalyticsManager.INDEX_TRANSACTIONID);
            if ( !orderID || (typeof(orderID) == 'undefined') )
                orderID = window.orderID; // Failsafe
        } catch(e) { if (this.errorReporting) alert(e); }
    
        try { 
		    var om = OfferManager.Instance();
            var priceTotal = 0.0, priceTax = 0.0, priceShipping = 0.0;
            var city = "", state = "", country = "";
			var ths = this;
            
		    om.Offers.values().each(function(offer)
		    {
		        priceTotal += offer.GetLongTermPrice();
		        priceTax += offer.GetLongTermTax();
		        priceShipping += offer.GetShipping();
		    });

            if ( SearchPanelControl && SearchPanelControl.Instance )
            {
                city = SearchPanelControl.Instance.city;
                state = SearchPanelControl.Instance.state;
            }
            country = "United States";

            this.GATracker._addTrans(
                orderID,
                Acceller.ApplicationName,
                priceTotal, 
                priceTax,
                priceShipping,
                city,
                state,
                country
                );
        
		    om.Offers.values().each(function(offer)
		    {
            	var cat = om.Categories.get(offer.categoryID);
            	
            	var offerName = offer.name.replace(/[\(\)]/g, "");
            	
		        ths.GATracker._addItem(
		            orderID,
		            offer.providerID+" - "+offer.offerCode,
		            offerName,
		            offer.type,
		            offer.GetLongTermPrice(),
		            "1" );
		    });

            this.GATracker._trackTrans();
        } catch(e) { if (this.errorReporting) alert(e); }
    }
};

//----------------------------------------------------------------------------
AnalyticsManager.Instance = 
function()
{
	if(!window["analyticsManager"])
		window["analyticsManager"] = new AnalyticsManager();
	return window["analyticsManager"];
};

function AnalyticsManagerInitialize()
{
    AnalyticsManager.Instance().Initialize();
}
Event.observe(window, "load", AnalyticsManagerInitialize);
