// Configuration ----------------------------------------------------------------

var clabTrackerConf = {
	analytics: '//t.contactlab.it/analytics',	
	transactionIdKey: "__transaction_id", // key for custom param
	debugEnabled: false
};

// Objects  ---------------------------------------------------------------------

//clabBind function definition
Function.prototype.clabBind = function(obj) {
  var method = this,
  temp = function() {
	  return method.apply(obj, arguments);
   };

  return temp;
};

// Implementation of misc utility methods
var clabUtils = {
	generateUUID: function () {
		return ((new Date()).getTime() + "" + Math.floor((Math.random()*8999)+1000))
	  },

	trace: function (msg){
		if (clabTrackerConf.debugEnabled){
			try{
				console.debug(msg)
			} catch(e) { }
		}
	}
};

// Query string building utility
var clabTrackParams = {
	callid: clabUtils.generateUUID(),
	querystring: "",
	keyValSep: "=",
	keyValPairsSep: "~",

	append: function(key, val){
		if (this.querystring.length > 0){
			this.querystring = this.querystring + this.keyValPairsSep
		}
		this.querystring = this.querystring + key + this.keyValSep + val
	},

	appendIfNotEmpty: function(key, val){
		if (key){
			this.append(key, val)
		}
	}
};

// the Tracking Object
var clabTracker = {
	dest: "",

	doit: function (){
		 if (this.dest.length == 0){
			clabUtils.trace("WARN: dest is empty")
			return
		 } 
		 //append datetime to prevent request caching
		 var repeatableDest = this.dest + '&ts='+ new Date().getTime()
		 
		 clabUtils.trace("Tracking: " + this.dest)
		 var pix = new Image(1,1)
		 pix.src = repeatableDest
	}
};

// Main ----------------------------------------------------------------------

function InitTrack(trackingKey, pagealias) {
	try{
		clabUtils.trace("InitTrack: setting up...")

		// Populate query string with custom params (if available)
		clabTrackParams.callid = clabUtils.generateUUID()
		try{
			if (clabtrackCustomerData != 'undefined'){
				clabUtils.trace("clabtrackCustomerData is defined")
				
				for (var descr in clabtrackCustomerData){				
					if (descr.length > 0){
						clabUtils.trace("CustomerData >> " + descr + ":" + clabtrackCustomerData[descr])
						clabTrackParams.append(descr, clabtrackCustomerData[descr])

						// Override callid with transaction id if 'clabTrackerConf.transactionIdKey'
						// is found among custom defined params
						if (descr == clabTrackerConf.transactionIdKey && clabtrackCustomerData[descr].length > 0){
							clabTrackParams.callid = clabtrackCustomerData[descr];
						}
					}
				}
			}
		} catch(e){
			clabUtils.trace("clabtrackCustomerData not defined")
			clabUtils.trace(e.name + ":" + e.message)
		}

		// Setup tracking
		clabTracker.dest = parent.location.protocol + clabTrackerConf.analytics + '?'
		 	+ 'callid=' + clabTrackParams.callid
		 	+ '&key=' + trackingKey
		 	+ '&alias=' + escape(pagealias)
		 	+ '&title=' + escape(document.title)
		 	+ '&extra=' + escape(clabTrackParams.querystring)
		
		var clabTrackRefresh = clabTracker.doit.clabBind(clabTracker)
		clabTrackRefresh()
		
		// Setup timer
		window.setInterval(clabTrackRefresh, 4000)
		clabUtils.trace("InitTrack: success!")

	} catch (e){
		clabUtils.trace(e.name + ":" + e.message)
	}
}

