!function(window,angular,undefined){"use strict";angular.module("angulartics.google.analytics",["angulartics"]).config(["$analyticsProvider","$windowProvider",function($analyticsProvider,$windowProvider){function detectUniversalAnalytics(){var gaNamespace=$window.GoogleAnalyticsObject;return gaNamespace&&$window[gaNamespace]}function detectClassicAnalytics(){return!angular.isUndefined($window._gaq)}function dimensionsAndMetrics(properties){var key,customData={};for(key in properties)key.indexOf("dimension")&&key.indexOf("metric")||(customData[key]=properties[key]);return customData}function dispatchToUniversal_(command,fieldsObj,shouldCopyHit){var uaCommand,pluginName,userId=$analyticsProvider.settings.ga.userId;if("require"===command&&"ecommerce"===fieldsObj)return pluginName=fieldsObj,$analyticsProvider.settings.ga.enhancedEcommerce&&(pluginName="ec"),applyUniversalCall_([command,pluginName],shouldCopyHit);if(userId&&angular.isObject(fieldsObj)&&(fieldsObj.userId=userId),$analyticsProvider.settings.ga.transport&&(fieldsObj.transport=$analyticsProvider.settings.ga.transport),command.indexOf("ecommerce:")>-1&&$analyticsProvider.settings.ga.enhancedEcommerce)switch(command){case"ecommerce:addTransaction":command=["ec:setAction","purchase"];break;case"ecommerce:addItem":command="ec:addProduct",fieldsObj.id=fieldsObj.sku;break;case"ecommerce:send":command="send",fieldsObj.hitType="event",fieldsObj.eventCategory="Angulartics Enhanced Ecommerce",fieldsObj.eventAction="Purchase",fieldsObj.nonInteraction=!0}uaCommand=command instanceof Array?command.concat(fieldsObj):[command,fieldsObj],applyUniversalCall_(uaCommand,shouldCopyHit)}function applyUniversalCall_(commandArray,shouldCopyHit){var commandClone,userId=$analyticsProvider.settings.ga.userId,gaNamespace=$window.GoogleAnalyticsObject;$window[gaNamespace].apply(this,commandArray),shouldCopyHit&&(commandClone=angular.copy(commandArray),userId&&!$analyticsProvider.settings.ga.additionalAccountHitTypes.userId&&commandClone[2]&&"object"==typeof commandClone[2]&&delete commandClone[2].userId,angular.forEach($analyticsProvider.settings.ga.additionalAccountNames,function(accountName){commandClone[0]=accountName+"."+commandArray[0],$window[gaNamespace].apply(this,commandClone)}))}function dispatchToClassic_(command,fieldsObj,shouldCopyHit){if("set"===command)return console.log('Classic Analytics does not support the "set" command or Custom Dimensions. Command ignored.');var classicCommand;if("send"===command)switch(fieldsObj.hitType){case"pageview":classicCommand=["_trackPageview",fieldsObj.page];break;case"event":classicCommand=["_trackEvent",fieldsObj.eventCategory,fieldsObj.eventAction,fieldsObj.eventLabel,fieldsObj.eventValue,fieldsObj.nonInteraction];break;case"timing":classicCommand=["_trackTiming",fieldsObj.timingCategory,fieldsObj.timingVar,fieldsObj.timingValue,fieldsObj.timingLabel,fieldsObj.optSampleRate]}if("ecommerce:addTransaction"===command&&(classicCommand=["_addTrans",fieldsObj.id,fieldsObj.affiliation,fieldsObj.revenue,fieldsObj.tax,fieldsObj.shipping,fieldsObj.billingCity,fieldsObj.billingRegion,fieldsObj.billingCountry]),"ecommerce:addItem"===command&&(classicCommand=["_addItem",fieldsObj.id,fieldsObj.sku,fieldsObj.name,fieldsObj.category,fieldsObj.price,fieldsObj.quantity]),"_set"===command&&(classicCommand=["_set","currencyCode",fieldsObj]),"ecommerce:send"===command&&(classicCommand=["_trackTrans"]),!classicCommand)return console.log("Unable to find command "+command+" or fieldsObj missing required properties. Command ignored.");$window._gaq.push(classicCommand),shouldCopyHit&&angular.forEach($analyticsProvider.settings.ga.additionalAccountNames,function(accountName){var classicCommandClone=[].slice.call(classicCommand);classicCommandClone[0]=accountName+"."+classicCommandClone[0],$window._gaq.push(classicCommandClone)})}function getPage_(properties){return properties.page||pagePathCache||$window.location.hash.substring(1)||window.location.pathname}var $window=$windowProvider.$get();$analyticsProvider.settings.pageTracking.trackRelativePath=!0;var pagePathCache;$analyticsProvider.settings.ga={additionalAccountNames:void 0,additionalAccountHitTypes:{pageview:!0,event:!0,exception:!1,ecommerce:!1,userTiming:!1,setUserProperties:!1,userId:!1},disableEventTracking:null,disablePageTracking:null,enhancedEcommerce:!1,transport:null,userId:null},$analyticsProvider.registerPageTrack(function(path,properties){pagePathCache=path,properties=properties||{},$analyticsProvider.settings.ga.disablePageTracking||dispatchToGa("pageview","send",angular.extend(angular.copy(properties),{hitType:"pageview",page:path}))}),$analyticsProvider.registerEventTrack(function(action,properties){if(!$analyticsProvider.settings.ga.disableEventTracking&&(action||action+""=="0")){if(properties=properties||{},properties.category=properties.category||"Event",properties.value){var parsed=parseInt(properties.value,10);properties.value=isNaN(parsed)?0:parsed}angular.isFunction(properties.hitCallback)||(properties.hitCallback=null),properties.nonInteraction=properties.nonInteraction||properties.noninteraction,dispatchToGa("event","send",angular.extend(angular.copy(properties),{hitType:"event",eventCategory:properties.category,eventAction:action,eventLabel:properties.label,eventValue:properties.value,nonInteraction:properties.nonInteraction,page:getPage_(properties),hitCallback:properties.hitCallback}))}}),$analyticsProvider.registerExceptionTrack(function(error,cause){dispatchToGa("exception","send",{hitType:"event",eventCategory:"Exceptions",eventAction:error.toString(),eventLabel:error.stack,nonInteraction:!0,page:getPage_({}),isException:!0})}),$analyticsProvider.registerSetUsername(function(userId){$analyticsProvider.settings.ga.userId=userId}),$analyticsProvider.registerSetUserProperties(function(properties){properties&&dispatchToGa("setUserProperties","set",dimensionsAndMetrics(properties))}),$analyticsProvider.registerUserTimings(function(properties){if(!angular.isObject(properties)||angular.isArray(properties))return console.log("Required argument properties is missing or not an object");angular.forEach(["timingCategory","timingVar","timingValue"],function(prop){if(angular.isUndefined(properties[prop]))return console.log("Argument properties missing required property "+prop)}),dispatchToGa("userTiming","send",{hitType:"timing",timingCategory:properties.timingCategory,timingVar:properties.timingVar,timingValue:properties.timingValue,timingLabel:properties.timingLabel,optSampleRate:properties.optSampleRate,page:getPage_(properties)})}),$analyticsProvider.registerTransactionTrack(function(transaction){var product,i;if(dispatchToGa("ecommerce","require","ecommerce"),dispatchToGa("ecommerce","ecommerce:addTransaction",transaction),transaction.products)for(i=0;i<transaction.products.length;i++)product=transaction.products[i],product.sku=product.id,product.id=transaction.id,dispatchToGa("ecommerce","ecommerce:addItem",transaction.products[i]);transaction.currencyCode&&dispatchToGa("ecommerce","_set",transaction.currencyCode),dispatchToGa("ecommerce","ecommerce:send",angular.copy(transaction))});var dispatchToGa=function(method,command,fieldsObj){var handler;if(detectClassicAnalytics()&&(handler=dispatchToClassic_),detectUniversalAnalytics()&&(handler=dispatchToUniversal_),handler){handler(command,fieldsObj,$analyticsProvider.settings.ga.additionalAccountHitTypes[method])}}}])}(window,window.angular);
//# sourceMappingURL=../dist/angulartics-ga.min.js.map