Shoora
10/26/2018 - 9:06 PM

Track Google Analytics Events in either Classic or Universal Analytics

Track Google Analytics Events in either Classic or Universal Analytics

//This function tracks a google analytics event regaurdless if using UA or classic trackin code
/**
 * Tracks a GA event using either Classic or Universal Analytics.
 * @param  {[String or Object]} categoryorobject [Either Event Category, or an object containing all parameters]
 * @param  {[String]} action           [The Event Action]
 * @param  {[String]} label            [The Event Lable]
 * @param  {[String]} value            [The Event Value]
 */
function trackEvent(categoryorobject, action, label, value) {
  if(typeof(ga) == "function") {
    //check argument length to determine parameters
    switch(arguments.length) {
      case 1:
        //If there is one parameter, it can only be an object to define parameters
        if(typeof categoryorobject == "object" && categoryorobject.eventCategory && categoryorobject.eventAction) {
          //Send it off like it is!
          categoryorobject.hitType = 'event';
          return ga('send', categoryorobject);
          break;
        }
      case 2:
        return ga('send', 'event', categoryorobject, action);
        break;
      case 3:
        return ga('send', 'event', categoryorobject, action, label);
        break;
      case 4:
        return ga('send', 'event', categoryorobject, action, label, value);
        break;
      default:
        //Oops!
        return false;
    }
  } else if(typeof(_gaq) == "object") {
    switch(arguments.length) {
      case 1:
        //If there is one parameter, it can only be an object to define parameters
        if(typeof categoryorobject == "object") {
          //The onyl reason you may need to pass an object, is to define the hitcallback, so let's set it
          if(categoryorobject.hitCallback && typeof categoryorobject.hitCallback == "function") {
            _gaq.push(['_set', 'hitCallback', function(){
              categoryorobject.hitCallback.apply();
            }]);
          }
          //Check remaining object properties for optional parameters
          //Will make a recursive call with properties passed as normal parameters
          if(categoryorobject.eventValue && categoryorobject.eventLabel && categoryorobject.eventAction && categoryorobject.eventCategory) {
            trackEvent(categoryorobject.eventCategory,categoryorobject.eventAction,categoryorobject.eventLabel,categoryorobject.eventValue);
          } else if(categoryorobject.eventLabel && categoryorobject.eventAction && categoryorobject.eventCategory) {
            trackEvent(categoryorobject.eventCategory,categoryorobject.eventAction,categoryorobject.eventLabel);
          } else if(categoryorobject.eventAction && categoryorobject.eventCategory) {
            trackEvent(categoryorobject.eventCategory,categoryorobject.eventAction);
          }
        }
      case 2:
        return _gaq.push(['_trackEvent', categoryorobject, action]);
        break;
      case 3:
        return _gaq.push(['_trackEvent', categoryorobject, action, label]);
        break;
      case 4:
        return _gaq.push(['_trackEvent', categoryorobject, action, label, value]);
        break;
      default:
        //Oops!
        return false;
    }    
  }
}





/**
 * Here's an example for tracking an event using hitCallback
 */
trackEvent(	{'eventCategory':'quote-form',
			'eventAction':'submitted',
			'eventLabel':'contact-me',
			'eventValue':0,
			'hitCallback': function() {
            		thisForm.submit(); //Called after event is logged
                }	
			});

//Without hitcallback we can use the standard parameters
trackEvent('quote-form','submitted','contact-me',0);