//location of script that processes the click data
//var root_url = "http://tr.mygeek.com/ctr/";
var root_url = "http://66.45.56.114/ctr/";


//processing script
var script_file = root_url+"clicktrack.html";


//send url parameters escaped or not.
//Recommend false for raw apache logging and parsing; recommend true for serverside processing of parameters
var isEncoded = false;										


var rid = Math.floor(Math.random()*10000000000);
var page = document.location;
var ua = window.useragent || navigator.userAgent;
startLoggingOrNot();

function startLoggingOrNot()
{
	//var suffix = document.location.toString().split(';')[document.location.toString().split(';').length-1];
	//var rgsuffix = /^apid-.*-aaid-.*-acid-.*-alid-.*-asid-.*/;
	//if (suffix.search(rgsuffix) != -1) { addCrossBrowserEventListener(document.body, "click", logEvent, false); }

	var suffix = document.location.toString();
	var rgsuffix = ";apid-";
	if (suffix.indexOf(rgsuffix) != -1) { addCrossBrowserEventListener(document.body, "click", logEvent, false); }
}

function addCrossBrowserEventListener(obj, type, func, bubble)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(type, func, bubble);
	}
	else if (obj.attachEvent)
	{
		obj.attachEvent('on'+type, func);
	}
}

function getHref(obj)
{
	if (typeof(obj.href) != "undefined" && obj.href != null)
	{ 
		return obj.href; 
	}
	while (obj != document.body && typeof(obj.href) == "undefined")
	{
		obj = obj.parentNode;
		if (typeof(obj.href) != "undefined" && obj.href != null) { return obj.href; }
	}
	return null;
}

function sendData(p)
{
	if (document.getElementById("click_track_"+rid) != null) { document.getElementById("click_track_"+rid).parentNode.removeChild(document.getElementById("click_track_"+rid)); }
	var headLoc = document.getElementsByTagName("head").item(0);	
	var scriptObj = document.createElement("script");
	scriptObj.setAttribute("type", "text/javascript");
	scriptObj.setAttribute("src", script_file+p);
	scriptObj.setAttribute("id", "click_track_"+rid);
	headLoc.appendChild(scriptObj);
}

function findBounds(obj)
{
	var posx1 = posy1 = posx2 = posy2 = 0;

	if ((typeof(obj.offsetWidth) != "undefined") && (obj.offsetWidth != null)) 
	{
		posx2 = obj.offsetWidth;
	} 
	else 
	{
		posx2 = obj.style.pixelWidth;
	}

	if ((typeof(obj.offsetHeight) != "undefined") && (obj.offsetHeight != null)) 
	{
		posy2 = obj.offsetHeight;
	} 
	else 
	{
		posy2 = obj.style.pixelHeight;
	}
	
	if (obj.offsetParent)
	{
		do 
		{
			posx1 += obj.offsetLeft;
			posy1 += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	
	posx2 += posx1;
	posy2 += posy1;

	return [posx1,posy1,posx2,posy2];
}

function getElementType(obj)
{
	return obj.nodeName;
}

function logEvent(e)
{
	var posx = posy = 0;
	var param = "";
	var evt = window.event || e
	if (!evt.target) { evt.target = evt.srcElement; }
	if (evt.pageX || evt.pageY)
	{
		posx = evt.pageX;
		posy = evt.pageY;
	}
	else if (evt.clientX || evt.clientY)
	{
		posx = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	
	var bounds = findBounds(evt.target);
	var elementType = getElementType(evt.target);
	param = (isEncoded)?
		"?clickhref="+escape(getHref(evt.target))+
		"&rid="+escape(rid)+
		"&page="+escape(document.location)+
		"&ua="+escape(ua)+
		"&element="+escape(elementType)+		
		"&clickcoords="+escape(posx+","+posy)+
		"&bounds="+escape(bounds[0]+","+bounds[1]+","+bounds[2]+","+bounds[3])
	:
		"?clickhref="+(getHref(evt.target))+
		"&rid="+(rid)+
		"&page="+(document.location)+
		"&ua="+(ua)+
		"&element="+(elementType)+
		"&clickcoords="+posx+","+posy+
		"&bounds="+bounds[0]+","+bounds[1]+","+bounds[2]+","+bounds[3];

	sendData(param);
}

