﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("IAPA.eBis.Web.Controls");

//
// Control class
//

IAPA.eBis.Web.Controls.GoogleAnalyticsTracker = function(element) {
    IAPA.eBis.Web.Controls.GoogleAnalyticsTracker.initializeBase(this, [element]);
    
    this._gaPageTracker = null;
    this._accountNumber = null;
    this._trackOrders = new Array();
    this._pageLoadedDelegate = null;
}

//
// Control implementaion
//
IAPA.eBis.Web.Controls.GoogleAnalyticsTracker.prototype = {
    initialize: function() {
        IAPA.eBis.Web.Controls.GoogleAnalyticsTracker.callBaseMethod(this, 'initialize');
        
        var elt = this.get_element();
        if (this._pageLoadedDelegate === null) {
            this._pageLoadedDelegate = Function.createDelegate(this, this._pageLoadedHandler);
        }
        Sys.Application.add_load(this._pageLoadedDelegate);
    },
    
    dispose: function() {
        if (this._pageLoadedDelegate) {
            Sys.Application.remove_load(this._pageLoadedDelegate);
            delete this._pageLoadedDelegate;
        }
    },
    
    _pageLoadedHandler: function(sender, args) {
        this._trackPage();
    },
    
    _trackPage: function() {
        try {
            if (typeof(_gat) == "object") {
                if (this._gaPageTracker == null) {
                    this._gaPageTracker = _gat._getTracker(this._accountNumber);
                }
                this._trackPageVisit();
                this._trackECommerceTransaction();
            }
        }
        catch (err) {}
    },
    
    _trackPageVisit: function() {
        var args = [this._gaPageTracker];
        var e = Function._validateParams(args, [{name: '_gaPageTracker', type: Object}]);
        if (e)
            return;
        this._gaPageTracker._trackPageview();
        //alert('page visit tracked!');
    },
    
    _trackECommerceTransaction: function() {
        var args = [this._gaPageTracker, this._trackOrders];
        var e = Function._validateParams(args, [
                    {name: '_gaPageTracker', type: Object},
                    {name: '_trackOrders', type: Array}]
                );
        if (e || this._trackOrders.length == 0)
            return;
        
        for (var i = 0; i < this._trackOrders.length; i++) {
            var order = this._trackOrders[i];
            this._gaPageTracker._addTrans(
                order.OrderId,
                order.Affiliation,
                order.Total,
                order.Tax,
                order.Shipping,
                order.City,
                order.State,
                order.Country
            );
            
            var orderDetails = order[8];
            for (var j = 0; j < order.OrderDetails.length; j++) {
                var orderDetail = order.OrderDetails[j];
                this._gaPageTracker._addItem(
                    order.OrderId,
                    orderDetail.Sku,
                    orderDetail.Name,
                    orderDetail.Category,
                    orderDetail.Price,
                    orderDetail.Quantity
                );
            }
        }
            
        this._gaPageTracker._trackTrans();
        //alert('transactions tracked!');
    },

    //
    // control properties
    //
    get_accountNumber : function() {
        return this._accountNumber;
    },

    set_accountNumber : function(value) {
        if (this._accountNumber !== value) {
            this._accountNumber = value;
            this.raisePropertyChanged('accountNumber');
        }
    },

    get_trackOrders : function() {
        return this._trackOrders;
    },

    set_trackOrders : function(value) {
        if (this._trackOrders !== value) {
            this._trackOrders = value;
            this.raisePropertyChanged('trackOrders');
        }
    }
}

IAPA.eBis.Web.Controls.GoogleAnalyticsTracker.trackPage = function IAPA$eBis$Web$Controls$GoogleAnalyticsTracker$trackPage(ctrlId) {
    var ctrl = $find(ctrlId);
    ctrl._trackPage();
}

// optional descriptor for JSON serialization.
IAPA.eBis.Web.Controls.GoogleAnalyticsTracker.descriptor = {
    properties: [ 
        {name: 'accountNumber', type: String},
        {name: 'trackOrders', type: Array} ]
}

IAPA.eBis.Web.Controls.GoogleAnalyticsTracker.registerClass('IAPA.eBis.Web.Controls.GoogleAnalyticsTracker', Sys.UI.Control);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

