(function(){
  angular
	.module('heuer.analyticsTracking', ['ui.router'/*, 'angulartics', 'angulartics.google.analytics'*/])
  /* 
  // Bitte stehen lassen - gf - 7.7.2016
  .config(function($stateProvider, $analyticsProvider) {
	 // @see https://github.com/angulartics/angulartics
	 // @see https://github.com/angulartics/angulartics-google-analytics/blob/master/README.md
	 // @inject 'angulartics', 'angulartics.google.analytics',$analyticsProvider

	//$analyticsProvider.firstPageview(true); //Records pages that don't use $state or $route 
	//$analyticsProvider.withAutoBase(true);  // Records full path 
  })
  */
	.run(runOnStart); // .run

  runOnStart.$inject=['$rootScope', '$state', '$location'];	
  function runOnStart($rootScope, $state, $location) {
	var analyticsTracking = this;
	var tmpToState, tmpToParams;
	//Special Case for Cookie Banner ScollInto View
	if($location.path().indexOf('cookies') !== -1) {
		//Cookie here
		setTimeout(function () {
		  if (document.getElementById("cookies")) {
		      document.getElementById("cookies").scrollIntoView();
			}
		})
	}
	 // Wird für die App benötigt um keine Doppellinks zu senden
	analyticsTracking.gaSent = true;
	analyticsTracking.lastIvwTag = null;
	 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
	  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
	  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
							})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

	  ga('create', 'UA-60046564-2', 'auto');
	document.querySelector('iz-cookie-banner').addEventListener('cookieAllowed', function (e) {
	if (e.detail.indexOf('_ga') !== -1) {
	  analyticsTracking.gaSent = false;
	  analyticsTracking.trackGoogle = function(toState, toParams) {
		// Hack für Google Analytics
		if(analyticsTracking.gaSent === false && toState) {
		  ga('send', 'pageview', $state.href(toState.name, toParams));
		  analyticsTracking.gaSent = true;
		} else {
			analyticsTracking.gaSent = false;
		}
	  }; // trackGoogle
	  analyticsTracking.trackGoogle(tmpToState, tmpToParams);
	}
	});
	

	analyticsTracking.trackIvw = function(toState) {
	  var szmngTag = '';
	  if (toState == null || toState == 'undefined') {

		var requestUrl = window.location.href;

		if( requestUrl.match(/\/veranstaltungen\//i) ) {
		  szmngTag = 'Veranstaltung';
		}

		var urlMatch = new RegExp(IZConstants.baseUrl+"/?$", "i");
		if( requestUrl.match(urlMatch) ) {
		  szmngTag = 'Startseite';
		}
		if( requestUrl.match(/\/newsletter/i) ) {
		  szmngTag = 'Benutzerkonto/Newsletterverwaltung';
		}
		if( requestUrl.match(/\/abo$/i) ) {
		  szmngTag = 'Benutzerkonto';
		}

		if( requestUrl.match(/\/veranstaltungspaket/i) ) {
		  szmngTag = 'Veranstaltungspaket';
		}
		if( requestUrl.match(/\/veranstaltungen$/i) ) {
		  szmngTag = 'Veranstaltungen';
		}
		if( requestUrl.match(/\/veranstaltungen\//i) ) {
		  szmngTag = 'Veranstaltung';
		}
		if( requestUrl.match(/\/veranstaltungen\/archiv/i) ) {
		  szmngTag = 'Veranstaltungen/Archiv';
		}
		if( requestUrl.match(/\/news\//i) ) {
		  szmngTag = 'News';
		}
		if( requestUrl.match(/\/aktuell\//i) ) {
		  szmngTag = 'Alte-Seite/Newsletter';
		}
		if( requestUrl.match(/\/pages\/insight/i) ) {
		  szmngTag = 'Alte-Seite/Insight';
		}
		if( requestUrl.match(/\/dialog-aktuell/i) ) {
		  szmngTag = 'News/Dialog-Aktuell';
		}
		if( requestUrl.match(/\/partner\//i) ) {
		  szmngTag = 'Alte-Seite/Partner';
		}
		if( requestUrl.match(/\/format\//i) ) {
		  szmngTag = 'Alte-Seite/Format';
		}
		if( requestUrl.match(/\/quovadis/i) ) {
		  szmngTag = 'Veranstaltung/Quo-Vadis';
		}
		if( requestUrl.match(/\/team\//i) ) {
		  szmngTag = 'Team';
		}

		if( requestUrl.match(/\/(company|unternehmen|unternehmen_alle)$/i) ) {
		  szmngTag = 'Unternehmen';
		}
		if( requestUrl.match(/\/kontakt$/i) ) {
		  szmngTag = 'Kontakt';
		}
		if( requestUrl.match(/\/anfahrt$/i) ) {
		  szmngTag = 'Anfahrt';
		}

		if( requestUrl.match(/\/api\//i) || requestUrl.match(/\/backend\//i) ) {
		  szmngTag = null;
		}

	  } else {
		switch (toState.name) {
		  case 'veranstaltungen':
			szmngTag = 'Veranstaltungen';
			break;
		  case 'veranstaltung':
			szmngTag = 'Veranstaltung';
			break;
		  case 'veranstaltung_buchen':
			szmngTag = 'Anmeldung';
			break;
		}
	  }

	  if (szmngTag == '') {
		szmngTag = window.location.pathname.substring(1);
	  }
	  if (window.ivwTagOverride) {
		szmngTag = window.ivwTagOverride;
	  }

	  if ( szmngTag != analyticsTracking.lastIvwTag && szmngTag != null && IZConstants.isBot == false) {
		analyticsTracking.lastIvwTag = szmngTag;

		var iam_data = {
		  "st": "immoztg", // angebotskennung, site/domain
		  "cp": "HEUER-DIALOG/" + szmngTag, // code
		  "sv": "ke" // FRABO-Tag deaktiviert
		};
		console.log('IVW Tag: HEUER-DIALOG/' + szmngTag);
		if (typeof iom !== 'undefined') {
		  iom.c(iam_data, 2); // 2 = Tracking-Methode "document.appendChild"
		}
	  }
	}; // trackIvw

	// Wenn die Webseite auf die lokale Webseite gespeichert wurde, dann soll kein IVW-Tag erzeugt werden
	if (window.location.protocol != 'file:') {
	  $rootScope.$on("$stateChangeSuccess", function(event, toState, toParams, fromState, fromParams, error) {
		if (analyticsTracking.trackGoogle) {
		  analyticsTracking.gaSent = false;
		  analyticsTracking.trackGoogle(toState, toParams);
		} else {
			tmpToState = toState;
		    tmpToParams = toParams;
		}
		analyticsTracking.trackIvw(toState);
	  }); // Event-Handler $onStateChangeSuccess


	  // Initiales Tracking; nur IVW, denn Google Analytics wird über angulartics-google-analytics.min.js behandelt
	  analyticsTracking.trackIvw(null);
	}

  }
}());