if (typeof additiv == 'undefined') {
	additiv = new Object();
}

additiv.Tracker = function(siteId) {
       var _siteId = siteId;
       var _trackerUrl = "http://web005.addprod005.additiv.ch/Tracker.ashx";
       //var _trackerUrl = "http://imcsreport.migros.additiv.ch/Tracker.ashx";
	var _isBadRequest = false;
	var _madeParams = "";
	var _trackerUrlParams = "";
	var _timeZoneOffsetValueWithoutDst = 0;
	var _daylightSavingTime = 0;
	var _languageId;
	var _imcsUserId;
	var _userId;
	var _sourceId = "";
	var sourceKey = "assk";

	var _MakeRequest = function() {

		_CollectMainData();

		if (_madeParams != undefined)
			_trackerUrlParams += _madeParams;

		var trackImage = new Image(1, 1);
		trackImage.src = _trackerUrlParams;
		_ClearData();
	}

	var _CollectMainData = function() {

		if (_madeParams == undefined || _madeParams == '')
			return;

		if (_languageId != undefined && _languageId != '' && _madeParams.indexOf('lng') < 0)
			_madeParams += "&lng=" + _languageId;

		if (_imcsUserId != undefined && _imcsUserId != '' && _madeParams.indexOf('imcsusr') < 0)
			_madeParams += "&imcsusr=" + _imcsUserId;

		if (_userId != undefined && _userId != '' && _madeParams.indexOf('usr') < 0)
			_madeParams += "&usr=" + _userId;
	}

	var _ClearData = function() {
		_isBadRequest = false;
		_madeParams = "";
		_trackerUrlParams = "";
		_timeZoneOffsetValueWithoutDst = 0;
		_daylightSavingTime = 0;
		_trackerUrlParams = "";
		_sourceId = "";
	}

	var _BaseTrackEvent = function(eventType, eventDescriptor, eventTrafficSize) {
		_madeParams += "&et=" + eventType;
		if (eventDescriptor != undefined && eventDescriptor != '')
			_madeParams += "&ed=" + encodeURIComponent(eventDescriptor);
		if (eventTrafficSize != undefined && eventTrafficSize != '')
			_madeParams += "&ets=" + eventTrafficSize;
	}

	var _DeterminTimeZone = function() {
		var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
		var offsetValue = 0;
		var dstValue = 0;
		var intMonth;
		var currentOffSet = 0;

		for (intMonth = 0; intMonth < 12; intMonth++) {
			dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);
			currentOffSet = (dtDate.getTimezoneOffset() * (-1));
			if (offsetValue == 0 && intMonth == 0)
				offsetValue = currentOffSet;

			if (currentOffSet > offsetValue) {
				dstValue = currentOffSet - offsetValue;
				offsetValue = currentOffSet;
			}
		}
		var newDstValue = (dstValue < 0 ? dstValue * (-1) : dstValue);
		_timeZoneOffsetValueWithoutDst = (offsetValue - newDstValue);
		_daylightSavingTime = newDstValue / 60;
	}

	var _CheckCookies = function() {
		var cookieHandler = additiv.CookieHandler();
		var isNewUniqueVisitor = cookieHandler.IsNewUniqueVisitor();
		var uniqueVisitorId = isNewUniqueVisitor ? cookieHandler.CreateUniqueVisitorCookie() : cookieHandler.GetUniqueVisitorId();
		_madeParams += "&newuv=".concat(isNewUniqueVisitor ? 1 : "0");
		_madeParams += "&uvid=" + uniqueVisitorId;

		var isNewSession = cookieHandler.IsNewSession();
		var sessionId = "";
		if (isNewSession) {
			sessionId = cookieHandler.CreateSessionCookie();
			cookieHandler.CreateTempCookie();
		}
		else
			sessionId = cookieHandler.GetSessionId();

		if (_sourceId != undefined && _sourceId != '') {
			var sourceIdValue = cookieHandler.GetSubSessionValue(sourceKey);
			if (sourceIdValue == null || (sourceIdValue != null && sourceIdValue != _sourceId)) {
				if (isNewSession == false) {
					cookieHandler.DeleteSessionRelatingCookies();
					sessionId = cookieHandler.CreateSessionCookie();
					cookieHandler.CreateTempCookie();
					isNewSession = true;
				}
				cookieHandler.SetSubSessionValue(sourceKey, _sourceId);
			}
			_madeParams += "&src=" + _sourceId;
		}

		_madeParams += "&newss=".concat(isNewSession ? 1 : "0");
		_madeParams += "&ssid=" + sessionId;

		cookieHandler.ProlongSessionCookieExpires();
	}

	return {

		InitData: function() {
			_timeZoneOffsetValueWithoutDst = 0;
			_daylightSavingTime = 0;

			_trackerUrlParams = _trackerUrl;
			_DeterminTimeZone();
			var language = navigator.language ? navigator.language : navigator.browserLanguage;

			_trackerUrlParams += "?siteId=" + _siteId;
			_trackerUrlParams += ["&referrer=" + encodeURIComponent(document.referrer), "url=" + encodeURIComponent(document.URL), "cultureinfo=" + language].join("&");
			_trackerUrlParams += "&resolution=".concat(window.screen ? window.screen.width + "x" + window.screen.height : "");
			_trackerUrlParams += "&colordepth=" + window.screen.colorDepth;
			_trackerUrlParams += "&tzoffset=" + _timeZoneOffsetValueWithoutDst + "&isdst=".concat(_daylightSavingTime == 0 ? "0" : "1");

		},

		BadRequest: function(requestedUrl) {
			if (requestedUrl != undefined && requestedUrl != '')
				_madeParams += "&brurl=" + encodeURIComponent(requestedUrl);
			_isBadRequest = true;
			_madeParams += "&isbr=".concat(_isBadRequest ? 1 : "0");
		},

		SetIMCSVariables: function(categoryId, campaignId, editionId, channelId, languageId, assetIds) {
			if (categoryId != undefined)
				_madeParams += "&cat=" + categoryId;
			if (campaignId != undefined)
				_madeParams += "&cmp=" + campaignId;
			if (editionId != undefined)
				_madeParams += "&edt=" + editionId;
			if (channelId != undefined && channelId != '')
				_madeParams += "&cnl=" + channelId;
			if (languageId != undefined && languageId != '') {
				_languageId = languageId;
				_madeParams += "&lng=" + languageId;
			}
			if (assetIds != undefined && assetIds != '')
				_madeParams += "&asts=" + assetIds;
		},

		SetIMCSUser: function(imcsUserId) {
			if (imcsUserId != undefined && imcsUserId != '') {
				_imcsUserId = imcsUserId;
				_madeParams += "&imcsusr=" + imcsUserId;
			}
		},

		SetUser: function(userId) {
			if (userId != undefined && userId != '') {
				_userId = userId;
				_madeParams += "&usr=" + userId;
			}
		},

		SetSource: function(sourceId) {
			if (sourceId != undefined && sourceId != '') {
				_sourceId = sourceId;
			}
		},

		TrackExternalClickEvent: function(url, senderName, descriptor) {
			if (url != undefined && url != '') {
				this.InitData();
				if (senderName != undefined && senderName != '')
					_madeParams += "&sender=" + encodeURIComponent(senderName);
				_madeParams += "&exturl=" + encodeURIComponent(url);
				_BaseTrackEvent('ExternalLinkClick', descriptor);
				_CheckCookies();
				_MakeRequest();
			}
		},

		TrackDownloadEvent: function(file, descriptor, fileSize) {
			if (file != undefined && file != '') {
				this.InitData();
				_BaseTrackEvent('FileDownloading', descriptor, fileSize);
				_madeParams += "&dfile=" + file;
				_CheckCookies();
				_MakeRequest();
			}
        },

        TrackStartMovieEvent: function(movieName, descriptor) {
            if (movieName != undefined && movieName != '') {
                this.InitData();
                _BaseTrackEvent('StartMovie', descriptor);
                _madeParams += "&dfile=" + movieName;
                _CheckCookies();
                _MakeRequest();
            }
        },

        TrackEndMovieEvent: function(movieName, descriptor) {
            if (movieName != undefined && movieName != '') {
                this.InitData();
                _BaseTrackEvent('EndMovie', descriptor);
                _madeParams += "&dfile=" + movieName;
                _CheckCookies();
                _MakeRequest();
            }
        },

		TrackEvent: function(eventType, eventDescriptor, eventTrafficSize) {
			if (eventType != undefined && eventType != '') {
				_BaseTrackEvent(eventType, eventDescriptor, eventTrafficSize);
				this.InitData();
				_CheckCookies();
				_MakeRequest();
			}
		},

		TrackView: function() {
			this.InitData();
			if (_trackerUrlParams != undefined) {
				_CheckCookies();
				_MakeRequest()
			}
		}
	};
}

/*!
Copyright (c) 2010 Robert Kieffer
Dual licensed under the MIT and GPL licenses.
*/

additiv.uuid = (function() {
	// Private array of chars to use
	var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');

	return function(len, radix) {
		var chars = CHARS, uuid = [];
		radix = radix || chars.length;

		if (len) {
			// Compact form
			for (var i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
		} else {
			// rfc4122, version 4 form
			var r;

			// rfc4122 requires these characters
			uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
			uuid[14] = '4';

			// Fill in random data.  At i==19 set the high bits of clock sequence as
			// per rfc4122, sec. 4.1.5
			for (var i = 0; i < 36; i++) {
				if (!uuid[i]) {
					r = 0 | Math.random() * 16;
					uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
				}
			}
		}
		return uuid.join('').toLowerCase();
	};
})();

additiv.CookieHandler = function() {

	var uniqueVisitorCookieName = "asuv";
	var sessionCookieName = "asss";
	var determineSessionCookieName = "asds";

	var _uniqueVisitorId = '';
	var _sessionCookieId = '';

	var _GetCookieValue = function(name) {
		var m = document.cookie.match(new RegExp("(" + name + "=[^;]*)(;|$)"));

		return m ? m[1] : null;
	}

	var _SetCookie = function(name, value, minutes) {

		var expires = "";
		if (minutes) {
			var date = new Date();
			date.setTime(date.getTime() + (minutes * 1000 * 60));
			expires = "; expires=" + date.toGMTString();
		}
		else {
			expires = "";
		}
		//document.cookie = name + "=" + value + expires + "; path=/";
		var coockieValue = _GetCookieValue();

		if (/[;, ]/.test(value)) {
			value = window.encodeURI ? encodeURI(value) : escape(value);
		}

		if (value) {
			if (coockieValue) {
				if (new RegExp("@" + name).test(coockieValue))
					document.cookie = coockieValue.replace(new RegExp("@" + name + "[^@;]*"), value) + expires+ "; path=/";
				else
					document.cookie = coockieValue.replace(new RegExp("(" + name + "=[^;]*)(;|$)"), "$1" + value) + expires + "; path=/";
			}
			else
				document.cookie = name + "=" + value + expires + "; path=/";
		}
		else {
			if (new RegExp("@" + name).test(coockieValue)) {
				document.cookie = coockieValue.replace(new RegExp("@" + name + "[^@;]*"), "") + expires + "; path=/";
			}
		}
	}

	var _GetCookie = function(name) {
		name = name + "=";
		var cookieArray = document.cookie.split(';');

		for (var i = 0; i < cookieArray.length; i++) {
			var cookie = cookieArray[i];
			while (cookie.charAt(0) == ' ')
				cookie = cookie.substring(1, cookie.length);
			if (cookie.indexOf(name) == 0) {
				var value = cookie.substring(name.length, cookie.length);
				return window.decodeURI ? decodeURI(value) : unescape(value);
			}
		}
		return null;
	}

	var _RecognizeUniqueVisitorId = function() {
		var uniqueVisitorCookieValue = _GetCookie(uniqueVisitorCookieName);
		_uniqueVisitorId = uniqueVisitorCookieValue != null ? uniqueVisitorCookieValue : null;
	}

	var _RetrieveSessionId = function() {
		var sessionCookieValue = _GetCookie(sessionCookieName);
		if (sessionCookieValue != null) {
			var sessionIdValues = sessionCookieValue.toString().split(',');
			if (sessionIdValues.length > 1) {
				var subValues = sessionIdValues[1].toString().split('|')
				if (subValues.length >= 1)
					return subValues[0];
			}
		}
		return null;
	}

	var _RecognizeSessionId = function() {
		_sessionCookieId = _RetrieveSessionId();
	}

	return {
		IsNewUniqueVisitor: function() {
			return _GetCookie(uniqueVisitorCookieName) == null;
		},

		IsNewSession: function() {
			return _GetCookie(sessionCookieName) == null || _GetCookie(determineSessionCookieName) == null;
		},

		GetUniqueVisitorId: function() {
			var uniqueVisitorCookieValue = _GetCookie(uniqueVisitorCookieName);
			return uniqueVisitorCookieValue != null ? uniqueVisitorCookieValue : null;
		},

		GetSessionId: function() {
			return _RetrieveSessionId();
		},

		CreateUniqueVisitorCookie: function() {
			_uniqueVisitorId = additiv.uuid();
			var expireTime = 2 * 60 * 24 * 365;
			_SetCookie(uniqueVisitorCookieName, _uniqueVisitorId, expireTime)
			return _uniqueVisitorId;
		},

		CreateSessionCookie: function() {
			if (_uniqueVisitorId == undefined || _uniqueVisitorId == '')
				_RecognizeUniqueVisitorId();

			if (_uniqueVisitorId != undefined && _uniqueVisitorId != '') {
				_sessionCookieId = additiv.uuid();
				var sessionCookieValue = _uniqueVisitorId + ',' + _sessionCookieId;
				_SetCookie(sessionCookieName, sessionCookieValue, 30)
				return _sessionCookieId;
			}
		},

		ProlongSessionCookieExpires: function() {
			var sessionCookieValue = _GetCookie(sessionCookieName);
			if (sessionCookieValue != null)
				_SetCookie(sessionCookieName, sessionCookieValue, 30)
		},

		CreateTempCookie: function() {
			if (_uniqueVisitorId == undefined || _uniqueVisitorId == '')
				_RecognizeUniqueVisitorId();

			if (_sessionCookieId == undefined || _sessionCookieId == '')
				_RecognizeSessionId();

			_SetCookie(determineSessionCookieName, _uniqueVisitorId + ',' + _sessionCookieId)
		},

		SetSubSessionValue: function(key, value) {
			var sessionCookieValue = _GetCookie(sessionCookieName);
			if (sessionCookieValue != null) {
				key = key + "=";
				if (sessionCookieValue.indexOf(key) == -1)
					sessionCookieValue = sessionCookieValue + "|" + key + value;
				else {
					var subValueStartIndex = sessionCookieValue.indexOf(key);
					var separatorIndex = sessionCookieValue.indexOf("|", subValueStartIndex);
					var replaceValue = "";
					if (separatorIndex != -1)
						replaceValue = sessionCookieValue.substring(subValueStartIndex, separatorIndex);
					else
						replaceValue = sessionCookieValue.substring(subValueStartIndex);
					sessionCookieValue = sessionCookieValue.replace(replaceValue, key + value);
				}
				_SetCookie(sessionCookieName, sessionCookieValue, 30)
			}
		},

		GetSubSessionValue: function(key) {
			var sessionCookieValue = _GetCookie(sessionCookieName);
			if (sessionCookieValue != null) {
				var sessionSubValues = sessionCookieValue.toString().split('|');
				if (sessionSubValues.length > 1) {
					key = key + "=";
					for (var i = 1; i < sessionSubValues.length; i++) {
						var subValue = sessionSubValues[i];
						if (subValue.indexOf(key) == 0)
							return subValue.substring(key.length, subValue.length);
					}
				}
			}
			return null;
		},
		
		DeleteSessionRelatingCookies: function() {
			_SetCookie(sessionCookieName, "empty", -60);
			_SetCookie(determineSessionCookieName, "empty", -60);
			
		},

		DeleteAllCookies: function() {
			var new_date = new Date()
			new_date = new_date.toGMTString()
			var thecookie = document.cookie.split(";")
			for (var i = 0; i < thecookie.length; i++) {
				document.cookie = thecookie[i] + "; expires =" + new_date
			}
		}
	};
}
