// Google analytics helper class

with ( myGA = function() {
    // constructor
    this._trackers = {};
}){
    // properties and methods
    
    prototype.addTracker = function(trackerId, register) {
        if (trackerId && !this._trackers[trackerId]) {
            this._trackers[trackerId] = {
                trackerId : trackerId,
                haveTrans : false,
                tracker   : null
            };
//            console.log('add tracker ' + trackerId);
            
            if (register) {
                this.registerTracker(trackerId);
            }
        }
    }
    
    prototype.registerTracker = function(trackerId) {
        if (!this._trackers[trackerId].tracker) {
            this._trackers[trackerId].tracker = _gat._getTracker(trackerId);
//            console.log(trackerId + ': register tracker');
        }
    }
    
    prototype.registerTrackers = function() {
        for (var trackerId in this._trackers) {
            this.registerTracker(trackerId);
        }
    }

    prototype.trackPageview = function(page, noPrefix) {
        for (var trackerId in this._trackers) {
            var trackerConf = this._trackers[trackerId];
            var tracker     = trackerConf.tracker;
            
            // track page view
            if (page) {
                // have definite page for virtual url
                if (noPrefix) {
                    tracker._trackPageview(page);    
                } else {
                    tracker._trackPageview('/ga_page/' + page);
                }
                
//                console.log(trackerId + ': trackPageView ' + page);
            } else {
                tracker._trackPageview();
//                console.log(trackerId + ': trackPageView');
            }
            
            // track transaction if set
            if (trackerConf.haveTrans) {
                tracker._trackTrans();
//                console.log(tracker);
//                console.log(trackerId + ': trackTrans');
            }
            
            // track load time
            tracker._trackPageLoadTime();
        }
    }
    
    prototype.addTransaction = function(trackerId, testName, category, tracking) {
        
        // if trackerId not in our list - need to add it
        this.addTracker(trackerId, true);

        var trackerConf = this._trackers[trackerId];
        var tracker     = trackerConf.tracker;
        
        tracker._setCustomVar(1, testName, category, 2);
        tracker._addTrans(
            tracking.tracking_id,             // Order ID
            tracking.affiliateForGoogle,      // Affiliation
            tracking.tracking_subtotal,       // Total
            "0",                              // Tax
            tracking.tracking_shippingtotal,  // Shipping
            tracking.tracking_city,           // City
            tracking.tracking_stateprov,      // State
            tracking.tracking_country         // Country
        );
        tracker._addItem(
            tracking.tracking_id,             // Order ID
            "Basic",                          // SKU
            "Basic",                          // Product Name 
            category,                         // Category
            tracking.subtotal_part,           // Price
            "1"                               // Quantity
        );
        
        // mark that we have a transaction for this tracker
        this._trackers[trackerId].haveTrans = true;
        
//        console.log(trackerId + ': transaction added', tracking);
        
    }
    
    prototype.recordOutboundLink = function(link, page) {
        this.trackPageview(page, true);
        setTimeout('document.location = "' + link.href + '"', 1000);
    }
    
}

