// constants
var COOKIE_USER_NAME = 'USERID';
var COOKIE_START_TIME = 'SESSION_START';
var COOKIE_REFERRER = 'REFERRER';
var COOKIE_VISITED_SECTIONS = 'VISITED_SECTIONS';

function getRandomChar()
{
	var chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
	var range = 62; // chars length
	return chars.substr(Math.floor(Math.random() * range), 1);
}

function generateUserID()
{
	var UID_SIZE = 64;
	var uid = '';
	
	for (var i = 0; i < UID_SIZE; i++) {
		uid += getRandomChar();
	}

	return uid;
}

function getSessionDuration()
{
	// session end time
	var endTime = new Date().getTime();
	var startTime = getCookieValue(COOKIE_START_TIME);
	var duration = 0;
	
	if (startTime != null) {
		duration = Math.ceil((endTime - startTime) / 1000);
		
	}
	
	return duration;
}

function getUserID()
{
	// is this a known user?
	var uid = getCookieValue(COOKIE_USER_NAME);

	if (uid == null) {
		uid = generateUserID();
		setCookieValue(COOKIE_USER_NAME, uid);
	}

	return uid;
}

function setReferrer()
{
	if (document.referrer != "") {
		setCookieValue(COOKIE_REFERRER, document.referrer);
	} else {
		setCookieValue(COOKIE_REFERRER, 'NOREFERRER');
	}
}

function getReferrer()
{
	return getCookieValue(COOKIE_REFERRER);
}

function setStartTime()
{
	setCookieValue(COOKIE_START_TIME, new Date().getTime());
}

function resetVisitedSections()
{
	setCookieValue(COOKIE_VISITED_SECTIONS, '');
}

function getVisitedSections()
{
	return getCookieValue(COOKIE_VISITED_SECTIONS);
}

function beginUserSession()
{
	setStartTime();
	setReferrer();
	resetVisitedSections();
}

function endUserSession()
{
	var form = document.visit; 

	// fill form fields and submit
	form.uid.value = getUserID();
	form.duration.value = getSessionDuration();
	form.referrer.value = getReferrer();
	form.sections.value = getVisitedSections();
	form.submit();
}

function trackJourney(section)
{
	//alert("trackJourney: '" + section + "'");
	var currentValue = getCookieValue(COOKIE_VISITED_SECTIONS);
	//alert("current: '" + currentValue + "'");
	var newValue =  currentValue + ';' + section;
//	alert("new: '" + newValue + "'");
	setCookieValue(COOKIE_VISITED_SECTIONS, newValue);
}

function trackAsset(tracking, filename, mode)
{
/*	alert("tracking: " + tracking + "\n"
			+ "filename: " + filename + "\n"
			+ "mode: " + mode);*/
}

function emcTrack(tracking, filename, mode)
{
	if (tracking == '__BEGIN_USER_SESSION') {
		beginUserSession();
	} else if (tracking == '__END_USER_SESSION') {
		endUserSession();
	} else if (filename == null) {
		trackJourney(tracking);
	} else if (tracking != "Contact us") {
		// This is already being tracked when the visitor opens a file
		//trackAsset(tracking, filename, mode);
	}		
}
