/**
 *
 * Wrapper for Google Analytics.
 *
 * Author: 2v adapted from sam's stats.js
 *
 */

var Stats = {

  /**
   * Set up click/submit event handlers for links/forms that have classes like "js-stat-yourActionSuffixHere".
   */
  setup: function(selectorPrefix) {

    if (!selectorPrefix) selectorPrefix = 'body ';

    var isStatAndNotSet = function() {
      var isStat = this.className.indexOf('js-stat') > -1;
      var set = this.statSet;
      this.statSet = 1;
      return isStat && !set;
    };

    $j(selectorPrefix + 'a').filter(isStatAndNotSet).click(function() {
      var link = this;
      var match = /js-stat-([^-^ ]*)[-]?([^-^ ]*)/.exec(link.className);
      if (match) {
        Stats.event('click' + (match[1] ? ' ' + match[1] : ''), match[2] ? match[2] : link.href);
      }
    });

    $j(selectorPrefix + 'form').filter(isStatAndNotSet).submit(function() {
      var form = this;
      var match = /js-stat-([^-^ ]*)[-]?([^-^ ]*)/.exec(form.className);
      if (match) {
        Stats.event('submit' + (match[1] ? ' ' + match[1] : ''), match[2] ? match[2] : form.action);
      }
    });
  },

  /**
   * The tracker will be set when the pageview is tracked.
   */
  tracker: null,

  /**
   * Track a pageview, and set up the category for later stats events
   */
  pageview: function() {
    var stats = Stats;
    var tracker = stats.tracker;
    var pageReferrer = Cookies.remove('pageReferrer');
    document.pageReferrer = pageReferrer ? pageReferrer : document.referrer;
    if (!stats.tracker) {
      stats.tracker = _gat._getTracker(Conf.googleId);
    }
    stats.tracker._trackPageview();
    stats.category = location.pathname.replace(new RegExp('^' + Conf.contextPath + '[/]?'), '').replace(/\/$/, '');
  },

  /**
   * Track an event.
   */
  event: function(action, label, value, category) {
    var stats = Stats;
    if (stats.tracker) {
      label = label ? label : '';
      value = value ? value : (new Date()).getTime() - Finish.startTime;
      category = category ? category : stats.category;
      var success = stats.tracker._trackEvent(category, action, label, value);
    }
  }
};

Finish.addTask(Stats.setup, 'Stats.setup');
Finish.addTask(Stats.pageview, 'Stats.pageview');