var Tracking = {
  gaAccount: 'UA-30908-1',
  cssPrefix: 'ofa-tc-',
  cookiePrefix: '__ofa_t_',
  donationCode: 'dn',
  signupCode: 'su',
  pageviewCode: 'pv',
  inviteCode: 'in',
  activityCode: 'ac',
  amountCode: 'amt',
  load: function() {
    if (_gat) {
      this.initGA();
      var doc = jQuery(document);
      var donationEls = doc.find('.' + this.cssPrefix + this.donationCode);
      var signupEls = doc.find('.' + this.cssPrefix + this.signupCode);
      var inviteEls = doc.find('.' + this.cssPrefix + this.inviteCode);
      var activityEls = doc.find('#activity_index > .index');
      var contribEls = doc.find('#contribution .contribcolumn .amounts input[type=radio]');
      var otherEls = doc.find('#contribution .contribcolumn .amounts input[name=amount_other]');
      var self = this;
/*      Commenting out to try to fix exit and bounce rates in Google Analytics */
/*      this.pageTracker._setVar(this.categorize());*/
      if (donationEls.length > 0) {
        this.donationEl = donationEls.eq(0);
        this.donation();
      } else if (signupEls.length > 0) {
        this.signupEl = signupEls.eq(0);
        this.signup();
      } else if (inviteEls.length > 0) {
        this.inviteEl = inviteEls.eq(0);
        this.invite();
      }
      if (activityEls.length > 0) {
        this.activityEl = activityEls.eq(0);
        this.activity();
      }
      if (jQuery.cookie('spud') && !this.get(this.signupCode)) {
        this.updateCookie(this.signupCode);
      }
      if (contribEls.length > 0) {
        contribEls.each(function() {
          jQuery(this).bind('click', function() {
            var val = this.value
            if (val != 'other') {
              self.updateCookie(self.amountCode, val);
            }
          });
        });
      }
      if (otherEls.length > 0) {
        var otherEl = otherEls.eq(0);
        otherEl.bind('blur', function() {
          self.updateCookie(self.amountCode, this.value);
        });
      }
      this.pageview();
    }
  },
  init: function() {
    this.initDt = ((new Date()).valueOf());
    var dcs = document.domain.split('.');
    var dcl = dcs[dcs.length - 1];
    var sdomain = dcl;
    if (dcs.length >= 2) {
      sdomain = dcs[dcs.length - 2] + '.' + sdomain;
    }
    this.superDomain = sdomain;
    if (dcs.length > 2) {
      this.cookieDomain = '.' + sdomain;
    } else {
      this.cookieDomain = sdomain;
    }
    this.options = { expires: 999999, path: '/', domain: this.cookieDomain };
  },
  initGA: function() {
    this.pageTracker = _gat._getTracker(this.gaAccount);
    this.pageTracker._setDomainName(this.cookieDomain);
		this.pageTracker._addIgnoredRef(this.superDomain);
		this.pageTracker._setAllowHash(false);
  },
  get: function(name) {
    var prefix = this.cookiePrefix + name;
    var obj = {};
    var parseDt = function(num) { return new Date(parseInt(num)); };
    var atts = [['count', parseInt], ['dt', parseDt], 
      ['last', parseFloat], ['sum', parseFloat], ['highest', parseFloat],
      ['highest_dt', parseDt]];
    for (var i = 0; i < atts.length; i+=1) {
      var att = atts[i][0];
      var func = atts[i][1];
      var val = jQuery.cookie(prefix + '_' + att);
      if (val) {
        obj[att] = func(val);
      }
    }
    return obj;
  },
  setCookie: function(name, value, options)  {
    if (console && console.debug) console.debug('setting cookie: ' + name + ' = ' + value);
    jQuery.cookie('' + name, '' + value, options);
  },
  updateCookie: function(name, value) {
    var prefix = this.cookiePrefix + name;
    var options = this.options;
    /* update count */
    var countName = prefix + '_count';
    var count = parseInt(jQuery.cookie(countName));
    if (count) {
      count += 1;
    } else {
      count = 1;
    }
    this.setCookie(countName, '' + count, options);
    /* update dt */
    var dtName = prefix + '_dt';
    this.setCookie(dtName, '' + this.initDt, options);
    if (value) {
      /* update last */
      var lastName = prefix + '_last';
      this.setCookie(lastName, '' + value, options);
      /* update sum */
      var sumName = prefix + '_sum';
      var sum = parseFloat(jQuery.cookie(sumName));
      var valueFloat = parseFloat(value);
      if (sum && valueFloat) {
        sum += valueFloat;
      } else {
        sum = value;
      }
      this.setCookie(sumName, '' + sum, options);
      /* update highest */
      var highestName = prefix + '_highest';
      var highestDtName = prefix + '_highest_dt';
      var highest = parseFloat(jQuery.cookie(highestName));
      if (valueFloat) {
        if (!highest || valueFloat >= highest) {
          this.setCookie(highestName, '' + valueFloat, options);
          this.setCookie(highestDtName, '' + this.initDt, options);
        }
      }
    }
  },
  donation: function() {
    var form = this.donationEl.find('.' + this.cssPrefix + this.donationCode + '-form').eq(0).html();
    var amt = this.get(this.amountCode).last;
    if (!amt || amt < 0) { amt = 0; }
    amt = '' + amt;
    this.updateCookie(this.donationCode, amt);
/*      Commenting out to try to fix exit and bounce rates in Google Analytics */
/*    this.pageTracker._trackPageview('/tracking/donation');*/
    var unixTimeMs = this.initDt;
    var unixTime = parseInt(unixTimeMs / 1000);
    var orderID = this.pageTracker._visitCode() + '-' + unixTime;
    this.pageTracker._addTrans(
      orderID, // Order ID
      "", // Affiliation
      amt, // Total
      "", // Tax
      "", // Shipping
      "", // City
      "", // State
      "" // Country
    );
    if (console && console.debug) console.debug('form: ' + form);
    if (console && console.debug) console.debug('order id:' + orderID);
    this.pageTracker._addItem(
      orderID, // Order ID
      form, // SKU
      form, // Product Name
      "Web: One time", // Category
      amt, // Price
      "1" // Quantity
    );
    this.pageTracker._trackTrans();
  },
  signup: function() {
    this.updateCookie(this.signupCode);
/*      Commenting out to try to fix exit and bounce rates in Google Analytics */
/*    this.pageTracker._trackPageview('/tracking/signup');*/
  },
  invite: function() {
    this.updateCookie(this.inviteCode);
/*      Commenting out to try to fix exit and bounce rates in Google Analytics */
/*    this.pageTracker._trackPageview('/tracking/invite');*/
  },
  activity: function() {
    var index = this.activityEl.html();
    this.updateCookie(this.activityCode, index);
  },
  categorize: function() {
    var cat = 'tracking.new';
    var dn = this.get(this.donationCode);
    var su = this.get(this.signupCode);
    var pv = this.get(this.pageviewCode);
    var ac = this.get(this.activityCode);
    if (dn && dn.count > 0 && dn.highest > 0.00) {
      if (dn.highest >= 250.00) {
        cat = 'tracking.donor.d3';
      } else if (dn.highest >= 100.00 ) {
        cat = 'tracking.donor.d2';
      } else {
        cat = 'tracking.donor.d1';
      }
    } else if (su && su.count > 0) {
      cat = 'tracking.signee';
    } else if (pv && pv.count > 0) {
      cat = 'tracking.visitor';
    }
    if (ac && ac.highest > 1) {
      cat += '.active';
    }
    return cat;
  },
  pageview: function() {
    this.updateCookie(this.pageviewCode);
		this.pageTracker._trackPageview();
  }
};
Tracking.init();
jQuery(document).ready(function() {
  Tracking.load();
});